时间:2019年3月
关键字:vue、npm、nodejs、理解、安装、使用

1. 基本概念

1.1. Node.js

Node.js本身不是一种编程语言,它是一个基于Chrome V8 引擎的JS运行环境。有了Node.js,JavaScript不再仅限于前端开发,也可以进行服务端开发。

1.2. npm

npm是Node.js的包管理工具,它与Python的`pip`、Golang的`go get`等类似。npm不仅用于包管理,它还被用于运行代码(`npm run dev`)、打包版本(`npm run build`)等。

1.3. Vue.js

a、狭义的理解

可以把Vue.js理解为一个JavaScript库。你可以在html中直接引入并使用。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<script src="http://static.runoob.com/assets/vue/1.0.11/vue.min.js"></script>
</head>
<body>
<div id="app">
 {{ message }}
</div>
<!-- JavaScript 代码需要放在尾部(指定的HTML元素之后) -->
<script>
new Vue({
 el:'#app',
 data: {
 message:'Hello World!'
 }
});
</script>
</body>
</html>

Vue.js通过标签和数据的绑定,实现了页面显示和数据变量之间的自动同步。

b、广义的理解

vue不仅仅是一个JS库,它延伸出了模板(`*.vue`)、路由(vue-router)等概念。

1.4. vue-cli

vue-cli,如果理解cli就很好理解vue-cli了。CLI,command-line interface,就是命令行界面的意思。vue-cli提供创建vue项目等命令。

1.5. Vue.js和Node.js的关系

Vue.js本身只是一个JS库,可以通过npm进行管理。Node.js可以提供vue开发过程中需要用到的初始化工程、打包等工具。

2. 安装

2.1. Node.js及npm

root@debian:~# apt-get update
root@debian:~# apt-get install apt-transport-https
root@debian:~# curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
root@debian:~# echo 'deb https://deb.nodesource.com/node_11.x stretch main' > /etc/apt/sources.list.d/nodesource.list
root@debian:~# apt-get update
root@debian:~# apt-get install nodejs
root@debian:~# node -v
v11.11.0
root@debian:~# npm -v
6.7.0

注:node_11.x可替换为node_10.x等,stretch可替换为jessie或buster。

2.2. 安装vue-cli

root@debian:~# npm install --global vue-cli
root@debian:~# vue -V
2.9.6

注:1、vue-cli安装的是shell命令,所以需要使用`–global`参数。
2、由于shell命令是安装到系统目录,所以安装过程需要root权限。

3. 创建vue工程

user1@debian:~# vue init webpack vue-demo
user1@debian:~# cd vue-demo
user1@debian:~/vue-demo# npm run dev

浏览器输入地址`http://localhost:8080/`

4. 工程目录说明

4.1. package.json文件

{
  ...
  "scripts": {
    "dev": ".."
    "start": "..."
    "unit": "..."
    "e2e": "..."
    "test": "..."
    "lint": "..."
    "build": "..."
  }
}

scripts下的key与命令`npm run dev`和`npm run build`等一一对应

4.2. src目录

编写代码的地方

4.3. 理解代码的线索

依次阅读`index.html`、`src/main.js`、`src/App.vue`、`src/router/index.js`等文件

重点关注`<div id=”app”>`、`<router-view/>`等关键字。

5. 写代码

src/App.vue

<template>
 <div id="app">
 <img src="./assets/logo.png">
 <router-link to="/first">First</router-link>
 <router-link to="/second">Second</router-link>
 <router-view/>
 </div>
</template>
...

router/indes.js

import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import First from '@/components/First'
import Second from '@/components/Second'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/first',
      name: 'First',
      component: First
    },
    {
      path: '/second',
      name: 'Second',
      component: Second
    }
  ]
}]

src/components/first.vue

<template>
 <h1>{{msg}}</h1>
</template>

<script>
export default {
  name: 'First',
    data () {
    return {
      msg: 'Welcom to First'
    }
  }
}

src/components/second.vue

<template>
 <h1>{{msg}}</h1>
</template>

<script>
export default {
    name: 'Second',
    data () {
      return {
      msg: 'Welcom to Second'
    }
  }
}

运行代码

执行脚本

root@debian:~/vue-demo# npm run dev

打开页面

http://localhost:8080/

参考

* https://deb.nodesource.com/setup_11.x
* http://www.runoob.com/try/try.php?filename=vue_intro

时间:2019年3月
关键字:nodejs、npm、debian、安装

安装脚本

root@debian:~# apt-get install apt-transport-https
root@debian:~# curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
root@debian:~# echo 'deb https://deb.nodesource.com/node_11.x stretch main' > /etc/apt/sources.list.d/nodesource.list
root@debian:~# apt-get update
root@debian:~# apt-get install nodejs
root@debian:~# node -v
v11.11.0
root@debian:~# npm -v
6.7.0

注:node_11.x可替换为node_10.x等,stretch可替换为jessie或buster。

时间:2019年3月
关键字:linux、esp8266、编译、开发、烧录、固件、环境

1.准备

a、Debian9操作系统。
b、USB转串口设备。建议使用CP2012芯片的串口设备,linux自带驱动程序。
c、ESP8266开发板。

2.安装编译环境

2.1.安装编译工具及依赖包

root@debian:~# apt-get install git
root@debian:~# apt-get install make
root@debian:~# apt-get install gcc
root@debian:~# apt-get install libncurses5-dev
root@debian:~# apt-get install flex
root@debian:~# apt-get install bison
root@debian:~# apt-get install gperf
root@debian:~# apt-get install python
root@debian:~# apt-get install python-serial

2.2.下载并配置交叉编译器

root@debian:~# wget https://dl.espressif.com/dl/xtensa-lx106-elf-linux64-1.22.0-92-g8facf4c-5.2.0.tar.gz
root@debian:~# tar -xvf xtensa-lx106-elf-linux64-1.22.0-92-g8facf4c-5.2.0.tar.gz
root@debian:~# mv xtensa-lx106-elf/ /opt/
root@debian:~# vim ~/.profile
...
XTENSA_HOME=/opt/xtensa-lx106-elf
if [ -d "$XTENSA_HOME/bin" ] ; then
    PATH="$XTENSA_HOME/bin:$PATH"
fi
...
:wq
root@debian:~# source ~/.profile

3.下载例子

root@debian:~# mkdir esp
root@debian:~# cd esp
root@debian:~/esp# git clone https://github.com/espressif/ESP8266_RTOS_SDK.git

4.编译

root@debian:~# export IDF_PATH=~/esp/ESP8266_RTOS_SDK
root@debian:~# cd esp/ESP8266_RTOS_SDK/examples/get-started/project_template
root@debian:~/esp/ESP8266_RTOS_SDK/examples/get-started/project_template# make menuconfig
...
+-----------------------------------------------------+
|   Espressif target platform choose (esp8266)  --->  |
|   SDK tool configuration  --->                      |
|   Bootloader config  --->                           |
|   Serail flasher config  --->                       |
|   Partition Table  --->                             |
|   Compiler options  --->                            |
|   Component config  --->                            |
+-----------------------------------------------------+
...
root@debian:~/esp/ESP8266_RTOS_SDK/examples/get-started/project_template# make all

注:通过ls /dev/确认一下USB串口是否是/dev/ttyUSB0,如不是请在Serail flasher config菜单进行修改。

5.烧录

root@debian:~/esp/ESP8266_RTOS_SDK/examples/get-started/project_template# make flash

注:烧录时,CH_PD上拉,GPIO0下拉。

6.注意

本文是针对乐鑫IDF版本代码的编译和烧录,非IDF版本不适用。

参考

https://github.com/espressif/ESP8266_RTOS_SDK

时间:2019年2月
关键字:安信可、A9、A9G、开发板

USB转UART转接头问题

推荐使用CP2102芯片的USB转UART转接头。使用PL2303芯片的转接头,经常出现无法下载、调试信息打印不出来等现象。CH340芯片转接头未进行测试。

网络状态问题

在未触发API_EVENT_ID_NETWORK_ATTACHED和API_EVENT_ID_NETWORK_ACTIVATED事件的情况下,可能已经能够使用socket联网了。建议使用Network_GetAttachStatus()和Network_GetActiveStatus()判断attach和active状态。

Socket问题

建议不使用异步socket,实际使用时发现API_EVENT_ID_SOCKET_CONNECTED、API_EVENT_ID_SOCKET_CLOSED、API_EVENT_ID_SOCKET_SENT、API_EVENT_ID_SOCKET_RECEIVED、API_EVENT_ID_SOCKET_ERROR等事件在连接已经异常情况下不触发,造成不知道何时需要进行重连。

AGPS问题

使用中发现AGPS无法正常工作,跟踪发现总是在CSDK的gps.c中的4. set mode to nmea mode处,调用GPS_SetNMEAMode()失败,暂时未找到解决办法。

关键字:debian9、ambari、安装
时间:2019年1月

步骤

一、准备主机
二、安装ambari-server
三、配置hdp节点
四、部署HDP

一、准备主机

1、主机

名称 IP hostname
ambari服务器 172.16.1.100 ambari.fish2bird.com
hdp节点1 172.16.1.101 node-1.fish2bird.com
hdp节点2 172.16.1.102 node-2.fish2bird.com
hdp节点3 172.16.1.103 node-3.fish2bird.com

注意:请配置好/etc/hostnamt和/etc/hosts。

2、所有主机安装所需包和添加hortonworks源的公钥

root@debian:~# apt-get install ntp
root@debian:~# apt-get install openjdk-8-jdk
root@debian:~# apt-get install dirmngr
root@debian:/etc/apt/sources.list.d# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B9733A7A07513CAD
Executing: /tmp/apt-key-gpghome.MMdqGHL6AD/gpg.1.sh --keyserver keyserver.ubuntu.com --recv-keys B9733A7A07513CAD
gpg: key B9733A7A07513CAD: public key "Jenkins (HDP Builds) <jenkin@hortonworks.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1
root@debian:~# cd /etc/apt/sources.list.d/
root@debian:/etc/apt/sources.list.d# wget http://public-repo-1.hortonworks.com/ambari/debian9/2.x/updates/2.7.1.0/ambari.list
root@debian:/etc/apt/sources.list.d# apt-get update

二、安装ambari-server

root@ambari:~# apt-get install ambari-server
root@ambari:~# ambari-server setup
Using python  /usr/bin/python
Setup ambari-server
Checking SELinux...
WARNING: Could not run /usr/sbin/sestatus: OK
Customize user account for ambari-server daemon [y/n] (n)? 
Enter user account for ambari-server daemon (root):
Adjusting ambari-server permissions and ownership...
Checking firewall status...
/bin/bash: ufw: command not found
Checking JDK...
[1] Oracle JDK 1.8 + Java Cryptography Extension (JCE) Policy Files 8
[2] Custom JDK
==============================================================================
Enter choice (1): 2
WARNING: JDK must be installed on all hosts and JAVA_HOME must be valid on all hosts.
WARNING: JCE Policy files are required for configuring Kerberos security. If you plan to use Kerberos,please make sure JCE Unlimited Strength Jurisdiction Policy Files are valid on all hosts.
Path to JAVA_HOME: /usr/lib/jvm/java-8-openjdk-amd64
Validating JDK on Ambari Server...done.
Check JDK version for Ambari Server...
JDK version found: 8
Minimum JDK version is 8 for Ambari. Skipping to setup different JDK for Ambari Server.
Checking GPL software agreement...
GPL License for LZO: https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html
Enable Ambari Server to download and install GPL Licensed LZO packages [y/n] (n)? 
Completing setup...
Configuring database...
Enter advanced database configuration [y/n] (n)? 
Configuring database...
Default properties detected. Using built-in database.
Configuring ambari database...
Checking PostgreSQL...
Configuring local database...
Configuring PostgreSQL...
Restarting PostgreSQL
Creating schema and user...
done.
Creating tables...
done.
Extracting system views...
ambari-admin-2.7.1.0.169.jar
....
Ambari repo file contains latest json url http://public-repo-1.hortonworks.com/HDP/hdp_urlinfo.json, updating stacks repoinfos with it...
Adjusting ambari-server permissions and ownership...
Ambari Server 'setup' completed successfully.

root@ambari:~# systemctl start ambari-server

三、配置hdp节点

配置ssh秘钥登录

root@ambari:~# ssh-keygen -t rsa
root@ambari:~# cd .ssh/
root@ambari:~/.ssh# ssh-copy-id -i id_rsa root@node-1.fish2bird.com
root@ambari:~/.ssh# ssh-copy-id -i id_rsa root@node-2.fish2bird.com
root@ambari:~/.ssh# ssh-copy-id -i id_rsa root@node-3.fish2bird.com
root@ambari:~/.ssh# cat id_rsa
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

注:复制id_rsa内容到粘贴板。

四、部署HDP

1、打开ambari的web界面

http://ambari.fish2bird.com:8080/
用户名:admin
密码:admin
创建一个集群。

2、第2步,Install Options

Target Hosts
Enter a list of hosts using the Fully Qualified Domain Name (FQDN), one per line. Or use Pattern Expressions
+————————
| node-1.fish2bird.com
| node-2.fish2bird.com
| node-3.fish2bird.com
|
+————————
选择Provide your SSH Private Key to automatically register hosts,填写上一步粘贴板内容
+————–
| —–BEGIN RSA PRIVATE KEY—–
|
| —–END RSA PRIVATE KEY—–
+————–
NEXT > NEXT

第9步,Install,Start and Test

此步,各个节点开始自动安装各种包,可能会因为网络较慢以及某些包较大造成超时(例如:phoenix包就有600M+,但下载速度只有几十KB/s),造成失败的假象,此时需要回到上一步再来一次,直到安装成功。建议先安装一个节点,然后把节点上缓存的deb包拷贝到其他节点的缓存目录后再进行安装。

四、删除无用组件

在部署HDP时,hortonworks把Smart Sense这个组件作为了强制安装,并且在ambari的web界面上无法删除该组件。下面提供脚本方式删除。

root@ambari:~# curl -u admin:${PASSWD} -i -H 'X-Requested-By: ambari' -X DELETE http://${AMBARI_HOST}:8080/api/v1/clusters/${CLUSTER}/hosts/${HOST}/host_components/HST_SERVER
HTTP/1.1 200 OK
...
root@ambari:~# curl -u admin:${PASSWD} -i -H 'X-Requested-By: ambari' -X DELETE http://${AMBARI_HOST}:8080/api/v1/clusters/${CLUSTER}/hosts/${HOST}/host_components/HST_AGENT
HTTP/1.1 200 OK
...

注意:${PASSWD}替换成密码,${CLUSTER}替换成你部署HDP时取的名字,${HOST}替换成HDP节点主机名。

参考

https://docs.hortonworks.com/HDPDocuments/Ambari-2.7.1.0/bk_ambari-installation/content/ambari_repositories.html

关键字:hbase、修复、repair、hbck
时间:2019年1月

为什么需要检查和修复

1、当hbase节点出现宕机、或磁盘损坏的情况下,可能会造成数据错误,此时需要进行检查;
2、修复的作用主要是让hbase处于可用状态,出现错误不修复通常的现象是数据无法写入或写入缓慢等

检查命令

hbase hbck

修复参数

1. 单种错误修复
-fixTableOrphans
-fixHdfsOverlaps
-fixHdfsOrphans
-fixHdfsHoles
-fixMeta
-fixAssignments
-fixVersionFile
2. 综合修复
-repair,等价与多个单种错误修复参数同时执行
-repairHoles,等价与多个单种错误修复参数同时执行

修复举例

a. 只执行检查

root@debian:~# hbase hbck

b. 不管检查错误项,修复所有错误

root@debian:~# hbase hbck -repair

c. 修复具体某种错误

root@debian:~# hbase hbck -fixMeta

d. 几种错误同时修复

root@debian:~# hbase hbck -fixMeta -fixHdfsOrphans -fixHdfsOrphans

注意

1、通常执行一次修复无法修复所有问题,一次修复执行后,应再执行检查,确定是否所有问题都修复完成;
2、多个参数一次执行,参数的顺序不同,修复结果也许会不一样;(未详细验证过)
3、多个参数一次执行和多个参数分多次执行,修复结果不一样;
4、同一个参数反复执行应该没有太大意义;
5、修复一个错误后,再次检查可能会有新的错误出现,注意仔细阅读检查结果,确定再次执行修复使用哪个参数;
6、检查出现错误,表示数据本身存在问题,修复主要能让hbase处于可用状态,通常不能修复数据本身。

关键字:sqrt、源码、神奇、invsqrt
时间:2018年12月
源码极为高效,背后还有一个传奇的故事,如需了解请搜索关键字“John Carmack”、“invsqrt”。

float InvSqrt (float x){
    float xhalf = 0.5f*x;
    int i = *(int*)&x;
    i = 0x5f3759df - (i>>1);
    x = *(float*)&i;
    x = x*(1.5f - xhalf*x*x);
    return x;
}

float Sqrt(float x) {
    return 1/InvSqrt(x);
}

关键字:golang、入门、hello
时间:2018年11月

root@debian:~# apt-get install golang
root@debian:~# mkdir hello
root@debian:~# cd hello/
root@debian:~/hello# vim main.go
//package 本文件所属包的包名
package main

import (
    //"需要调用包的路径"
    "fmt"
)

func main() {
    //包名.方法名(参数, ...)
    fmt.Println("Hello world!")
}
:wq
root@debian:~/hello# go build
root@debian:~/hello# ls
hello  main.go
root@debian:~/hello# ./hello
Hello world!
root@debian:~/hello#

注:
1、要生成可执行二进制文件,必须要有名为main的package和名为main的func。
2、import的fmt是路径,其完整路径是/usr/lib/go/src/fmt,fmt.Println的fmt是包名,二者是不同的东西,容易混淆。

关键字:命令行、office、激活
时间:2018年11月

说明

此方法适用于Office2013及之后的版本。

第1步,安装

安装Office 2016

第2步,激活

> cd C:\Program Files (x86)\Microsoft Office\Office16\
> cscript ospp.vbs /dstatus
> cscript ospp.vbs /unpkey:xxxxx
> cscript ospp.vbs /inpkey:8279F-RNX9R-JPBQ4-TF8VC-YKJQH
> cscript ospp.vbs /sethst:kms.03k.org
> cscript ospp.vbs /act

注:
1、Office各个版本的安装目录不同,请自行查找。
2、unpkey的xxxxx,请使用dstatus获取的序列号的后5位替换。

序列号

8279F-RNX9R-JPBQ4-TF8VC-YKJQH
BHXN7-MQB36-MTHQ4-8MHKV-CYT97
996NF-CXK4K-HBH97-T26T8-33W3X
注:以上序列号来自网络,应该都是Professional版本的序列号。

关键字:伴奏、消除人声、audition、cooledit
时间:2018年11月

前言

Audition的前身是CoolEdit,Adobe收购了CoolEdit,重新命名为Audition。

准备

下载安装Adobe Audition CS6

第1步,打开音频文件

1、打开Adobe Audition CS6
2、菜单 -> File -> Open打开Open File对话框,选择你要编辑的音频文件

第2步,消除人声

1、选中音频:点击波形区域,Ctrl+A选中全部音频(也可以拖动选择部分音频)
2、打开对话框:菜单 -> Effects -> Stereo Imagery -> Center Channel Extractor…,打开”Effect – Center Channel Extrator”对话框
a)Presets下拉框选择Vocal Remove(人声消除)
b)Extraction标签页Frequency Range下拉框选择Male Voice(男声)或Female Voice(女声)
c)Apply,开始处理

第3步,试听与再处理

波形底部工具栏点击播放按钮试听。
如果效果不太满意,可以在“Center Channel Extrator”对话框中调整各个参数反复处理。

第4部,导出保存

菜单 -> File -> Export -> File…

补充

此方法对成年男声和成年女声的消除效果比较明显,但对童音的消除效果非常差。