关键字:sim800、sim900、simcom、eat、sdk
时间:2019年4月

SIM800与SIM900

SIM900已经停产,由SIM800系列相关型号代替

SIM800系列

2G产品

产品型号:SIM800、SIM800A、SIM800L、SIM800C、SIM800F、SIM800H等
SIM800x所有型号主要功能相同,封装不同,接口也有一定差异(蓝牙、PWM、SD卡等)

2G+定位产品

产品型号:SIM808、SIM868、SIM868E等

开发

方式一,外接串口

通过串口,外接单片机或者PC,使用AT指令进行编程。

方式二,Embedded AT(EAT)

不需要外接单片机或PC,直接使用C语言进行编程,使用SIMCom提供的工具进行编译和下载,程序直接运行在SIM800系列上。

关键字:巴菲特、索罗斯、投资、习惯
时间:2019年4月

制胜习惯一

保住资本永远是第一位的

制胜习惯二

努力回避风险

制胜习惯三

发展你自己的投资哲学

制胜习惯四

开发你自己的个性化选择、购买和抛售投资系统

制胜习惯五

分散化是荒唐可笑的

制胜习惯六

注重税后收益

制胜习惯七

只投资于你懂的领域

制胜习惯八

不做不符合你标准的投资

制胜习惯九

自己去调查

制胜习惯十

有无限的耐心

制胜习惯十一

即刻行动

制胜习惯十二

持有赢利的投资,直到事先确定的退出条件成立

制胜习惯十三

坚定地遵守你的系统

制胜习惯十四

承认你的错误,立即纠正它们

制胜习惯十五

把错误转化为经验

制胜习惯十六

“交学费”是必要的

制胜习惯十七

永不谈论你正在做的事

制胜习惯十八

知道如何识人

制胜习惯十九

生活节俭

制胜习惯二十

工作与钱无关

制胜习惯二十一

爱你所做的事,不要爱你所拥有的东西

制胜习惯二十二

24小时不离投资

制胜习惯二十三

投入你的资产

注:本文内容摘自《巴菲特与索罗斯的投资习惯》

时间:2019年4月
关键字:股票、实时、数据、接口

接口

请求1

http://qt.gtimg.cn/q=sh600660

响应1

v_sh600660="1~福耀玻璃~600660~25.07~24.63~24.54~332231~174739~157415~25.07~336~25.06~2005~25.05~792~25.04~510~25.03~1003~25.08~1349~25.09~1914~25.10~3121~25.11~1092~25.12~667~15:00:03/25.07/4375/S/10967123/59873|14:57:03/25.05/14/S/35070/59109|14:56:59/25.05/14/S/35070/59094|14:56:56/25.05/1182/B/2962156/59081|14:56:52/25.04/262/S/656048/59070|14:56:48/25.04/57/S/142728/59055~20190403153003~0.44~1.79~25.11~24.46~25.07/332231/827605389~332231~82761~1.66~15.26~~25.11~24.46~2.64~502.15~628.91~3.11~27.09~22.17~1.88~-3497~24.91~15.26~15.26~~~0.81";

请求2

http://qt.gtimg.cn/q=sz002008

响应2

v_sz002008="51~大族激光~002008~43.85~44.59~43.96~247923~114601~133217~43.85~1208~43.84~502~43.83~417~43.82~50~43.81~18~43.86~37~43.87~222~43.88~127~43.89~63~43.90~216~15:00:04/43.85/2745/S/12039938/15946|14:57:01/43.87/59/S/258833/15804|14:56:57/43.87/26/B/114067/15799|14:56:54/43.87/113/B/495700/15796|14:56:51/43.87/146/B/640497/15792|14:56:48/43.87/188/B/824619/15788~20190403153004~-0.74~-1.66~44.48~43.10~43.85/247923/1086162000~247923~108616~2.50~25.72~~44.48~43.10~3.09~435.60~467.91~5.71~49.05~40.13~0.77~1530~43.81~21.18~28.10~~~1.36";

请求3

http://qt.gtimg.cn/q=sh600660,sz002008

响应3

v_sh600660="1~福耀玻璃~600660~25.07~24.63~24.54~332231~174739~157415~25.07~336~25.06~2005~25.05~792~25.04~510~25.03~1003~25.08~1349~25.09~1914~25.10~3121~25.11~1092~25.12~667~15:00:03/25.07/4375/S/10967123/59873|14:57:03/25.05/14/S/35070/59109|14:56:59/25.05/14/S/35070/59094|14:56:56/25.05/1182/B/2962156/59081|14:56:52/25.04/262/S/656048/59070|14:56:48/25.04/57/S/142728/59055~20190403153003~0.44~1.79~25.11~24.46~25.07/332231/827605389~332231~82761~1.66~15.26~~25.11~24.46~2.64~502.15~628.91~3.11~27.09~22.17~1.88~-3497~24.91~15.26~15.26~~~0.81"; v_sz002008="51~大族激光~002008~43.85~44.59~43.96~247923~114601~133217~43.85~1208~43.84~502~43.83~417~43.82~50~43.81~18~43.86~37~43.87~222~43.88~127~43.89~63~43.90~216~15:00:04/43.85/2745/S/12039938/15946|14:57:01/43.87/59/S/258833/15804|14:56:57/43.87/26/B/114067/15799|14:56:54/43.87/113/B/495700/15796|14:56:51/43.87/146/B/640497/15792|14:56:48/43.87/188/B/824619/15788~20190403153004~-0.74~-1.66~44.48~43.10~43.85/247923/1086162000~247923~108616~2.50~25.72~~44.48~43.10~3.09~435.60~467.91~5.71~49.05~40.13~0.77~1530~43.81~21.18~28.10~~~1.36"; 

数据说明

以“~”为分割符进行字符串分割后,字段如下:
[0] 证券所
[1] 名字
[2] 代码
[3] 当前价格
[4] 昨收
[5] 今开
[6] 成交量(手)
[7] 外盘
[8] 内盘
[9] 买一
[10] 买一量(手)
[11] 买二
[12] 买二量
[13] 买三
[14] 买三量
[15] 买四
[16] 买四量
[17] 买五
[18] 买五量
[19] 卖一
[20] 卖一量
[21] 卖二
[22] 卖二量
[23] 卖三
[24] 卖三量
[25] 卖四
[26] 卖四量
[27] 卖五
[28] 卖五量
[29] 最近逐笔成交
[30] 时间
[31] 涨跌
[32] 涨跌幅(%)
[33] 最高
[34] 最低
[35] 价格/成交量(手)/成交额
[36] 成交量(手)
[37] 成交额(万)
[38] 换手率
[39] 市盈率(TTM)
[40]
[41] 最高
[42] 最低
[43] 振幅
[44] 流通市值
[45] 总市值
[46] 市净率
[47] 涨停价
[48] 跌停价
[49] 量比
[50]
[51] 均价
[52] 市盈率(动)
[53] 市盈率(静)
[54]
[55]
[56]

时间:2019年3月
关键字:linux、分辨率、字太小、桌面、虚拟机

适用范围

此方法适用于Gnome桌面。此方法适用了gsettings命令,该命令可以修改gnome的各种参数。

方法

设置分辨率

settings应用程序 -> Displays -> 显示器 -> Resolution: 2560×1600

设置scaling-factor参数

user1@debian:~# gsettings set org.gnome.desktop.interface scaling-factor 2
user1@debian:~# gsettings set org.gnome.desktop.interface scaling-factor 1

注:该参数值为整形。

设置text-scaling-factor参数

user1@debian:~# gsettings set org.gnome.desktop.interface text-scaling-factor 2.0
user1@debian:~# gsettings set org.gnome.desktop.interface text-scaling-factor 1.5

注:该参数值支持小数。

举例

分辨率 scaling-factor text-scaling-factor
2560×1600 2 1.0
1920×1200 1 1.5

时间:2019年3月
关键字:linux、批量、修改、文件名、前缀

脚本

批量加前缀

#!/bin/sh
for file in `ls *.txt`; do
  mv $file 'prefix-'$file
done

有序文件名

#!/bin/sh
i=0
for file in `ls *.txt`; do
  mv $file $i'.txt'
  i=`expr $i+1`
done

时间: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、安装、hadoop
时间: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