2017年8月

国内公司为什么很少NB的开源项目?
可能跟发展日新月异, 方向不断变动, 新任务总做不完有关. 这导致一个开源项目要么不能持续太久, 要么不能很好维护, 要么无法投入精力.

AP在定期发beacon, 是发往广播地址的,
STA在需要的时候,依次向所有信道发Probe, 称为Probe Request, 是发往广播地址的.
STA发送后等待返回. 该信道上的AP收到后会返回,称为Probe response, 是发往原STA地址的.

先放站: 代表月亮消灭bug
神箭手

昨天看文章, 去中心化的互联网已经变成了一个少数巨头垄断的中心化的网络. 任何反抗都是没用的... 数据也被当成财产禁止自由流通. 比如百度作为国内爬虫老大, 就禁止别人爬它的网页数据. 百度指数里面充满了各种加密, 数字变图片, 变验证码...
道高一尺魔高一丈, 深度学习, 神经网络, OpenCV... 计算机识图已经变成基本功. 距离破解所有图片验证码估计也已经不远了...

从汇编到Basic到C,是面向过程的黄金时代,编程的思想是:控制。
从C++到JAVA,是面向对象的黄金时代,编程的思想是:事物和分类。
从Scala、Erlang、Elixir开始,函数式编程逐渐风生水起,编程的思想是:数据处理(我们都是数据的搬运工)。
每一个新时代都会称前一个时代为“思想遗毒”,是因为前一种思想制约后一种思想的发展。现在是函数式编程称面向对象为思想遗毒的时候了,它以及它麾下的编程语言能否成就新的黄金时代呢?我们拭目以待。
当然,在这期间,脚本语言(解释性语言)也风生水起,代表作PHP、JavaScript、Python,并且将REPL变成了标配。

与有心理学学习经验的人聊天总是能被他们充满的能量所感染。而在其他场合,尤其是工作繁忙的职场上,这种能量感之微弱、罕见,跟熊猫一样。很多人的能量为空,冷冰冰藏在一面铸铁墙后面似的,感觉不到身体的温度。还有些人是满满的负能量,并且不断地让你感染这些负能量。这既是为何接触到心理学,再和现在的职场环境一做对比,立刻就能生出一种对职场环境无法排斥的厌恶感。
职场环境默认把人当成每天可以不断工作8~16小时、每周可以连续工作5~7天的机器,却忽视了人自身的生物和心理属性。正如尤瓦尔所表达的,人类从数万年前的采集者一路走来,生物属性还只适应采集者的悠闲生活,而社会要求却已经变更了好几代:农业革命的耕地种田、工业革命的工厂劳作、信息革命的坐办公室……生产力的迅速发展和同代人的贫富差异的扩大,导致社会严重倾向于竭力压缩与生产效率提升无关的、人类的自然生物活动和心理活动时间和空间。草原奔跑、林间跳跃、感受喜怒哀惧、流泪欢笑……这一切都被现代社会视作无用的内容,另一方面,有却要在游乐场、电视台、KTV、电影院创造这部分环境和感受,供人们在剩余有限的时间里去花钱获取。感觉就像美国的食品和减肥产业,先是大力宣传美味食物把人们养得肥肥的,再是大力宣传肥胖既不美也不健康,让人们购买各种减肥产品。两种相反的行为却一点是共通的,那就是花钱促进了经济发展。但对于个人来说,却几乎没有人觉察到这个荒谬可笑的悖论。更有一点是,人们不止是在《1984》里才是双重思想的,在任何时候任何社会都是这样。因此,即便是你觉察出了这一点,可是由于周围人都不认为这是悖论,那么你也会很难把自己与周围人的行为区分开来。

  1. pouchdb安装, 直接下载pouchdb.min.js或者:

    npm install pouchdb

或者加上--save

  1. pouchdb结合js使用, 在浏览器中为:
<script src="pouchdb-6.3.4.min.js"></script>

so Easy!
在node中为:

var PouchDB = require('pouchdb');

不用开服务!

  1. Pouchdb创建数据库:
var db = new PouchDB('kittens');
//创建好看看基础信息
db.info().then(function (info) {
  console.log(info);
})
  1. 调试

在chrome中可以查看indexedDB,pouchdb用它做基础数据库. node中使用levelDB做数据库. 老浏览器使用webSQL做基础数据库. 远程数据库可使用couchdb等.
可以使用如下语句开关debug打印:

PouchDB.debug.enable('*');
PouchDB.debug.disable();
  1. 增删改查

pouchdb中没有与table对应的概念(在mongodb中是collection).
row->document
column->field
primary key->'_id'
index->view
增,必须定义好_id字段才能存:

var doc = {
  "_id": "mittens",
  "name": "Mittens",
  "occupation": "kitten",
  "age": 3,
  "hobbies": [
    "playing with balls of yarn",
    "chasing laser pointers",
    "lookin' hella cute"
  ]
};
db.put(doc);

db.get('mittens').then(function (doc) {
  console.log(doc);
});
/* 输出
{
  "name": "Mittens",
  "occupation": "kitten",
  "age": 3,
  "hobbies": [
    "playing with balls of yarn",
    "chasing laser pointers",
    "lookin' hella cute"
  ],
  "_id": "mittens",
  "_rev": "1-bea5fa18e06522d12026f4aee6b15ee4" //注意这个_rev, 改的时候一定要有. 每次增/改的写操作都会变更rev.
}

*/

doc.age = 4;
doc._rev = "1-bea5fa18e06522d12026f4aee6b15ee4";
db.put(doc);

删. 不是真的删除, 而是加了一个_deleted:true的标志.

// 删法1
db.get('mydoc').then(function (doc) {
  return db.remove(doc);
});
// 删法2
db.get('mydoc').then(function (doc) {
  return db.remove(doc._id, doc._rev);
});
// 删法3
db.get('mydoc').then(function (doc) {
  doc._deleted = true;
  return db.put(doc);
});
  1. 批量操作

批量增(改删) //改只需要加入_rev,删只需要加入_deleted

db.bulkDocs([
  {
    _id: 'mittens',
    occupation: 'kitten',
    cuteness: 9.0
  },
  {
    _id: 'katie',
    occupation: 'kitten',
    cuteness: 7.0
  },
  {
    _id: 'felix',
    occupation: 'kitten',
    cuteness: 8.0
  }
]);

批量查

db.allDocs({include_docs: true});
  1. 操作附件(二级制)待补全 work with attachments

  2. 快速搜索
    要搜索除了_id以外的其他字段, 有三种方式:
    mongo query
    map/reduce query
    第三方的pouchdb-quick-search

electron以chrome为蓝本,其实应该已经包括了localStorage, indexDB这几个数据库了. 不过还是想用一个专业些的数据库, 但又不想这个数据库太复杂. mongodb, couchdb, redis, pouchdb中, 最后还是选择了pouchdb, 因为redis作为内存数据库, 持久化似乎不是专长. mongodb, couchdb都需要另外再跑个服务, 有点大了. pouchdb在script的src中可以直接引用, 或者通过require引用而不需要另起服务, 比较方便.
这有一篇文章如何为你的 Node.js 应用挑选数据库也是非常好的,简要对比了常见几种数据库及其应用方式。

总是跨界太大...
天线常用接头以前说过, N头,SMA, IPX头
天线增益居然是和定向性强相关的, 增益dbi是最强方向上相对于标准全向天线的增益(球形辐射, 增益为0dbi).
一般的线型/棒状天线,如果棒子垂直地面, 则是水平方向全向的, 垂直方向无辐射,就像棒子戳了个甜甜圈一样.
而强定向天线, 一般是平板或者抛物面. 其中抛物面定向性,似乎更强些. 抛物面有水平角度和垂直角度之说.
计算天线增益, 要使用所谓的弗林斯传输方程(不懂)
计算天线阻抗, 要使用所谓的史密斯阻抗圆图(不懂)
天线还有个极化方向,据说垂直极化传得更远. 垂直是相对于地面的垂直.
天线还有个驻波比, 是指有多少的功率辐射出去了没浪费. 驻波比为1是指100%都辐射了, 理想情况. 1.5是96%, 已经相当不错. 2.0是88%, 差些.

最近有客户过来, 说自己上市公司, 上市公司和上市公司不同, 深市沪市A股B股创业板新三板...那从号码上有什么区别呢?

000xxx 深市A股
60xxxx 沪市A股
300xxx 深市创业板
400xxx,430xxx,830xxx 新三板
83、87、88开头现在为北交所代码
B股是给国外投资者交易的, 略过.

安装前先更新rabbitmq的专用源

echo 'deb http://www.rabbitmq.com/debian/ testing main' |     sudo tee /etc/apt/sources.list.d/rabbitmq.list
wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc |     sudo apt-key add -
sudo apt-get update

sudo apt-get install rabbitmq-server

安装mqtt和websocket-mqtt

sudo rabbitmq-plugins enable rabbitmq_web_mqtt
sudo rabbitmq-plugins enable rabbitmq_mqtt
sudo rabbitmq-plugins enable rabbitmq_manager

访问http://127.0.0.1:15672/#/, 使用guest/guest登录, 可以GUI形式查看.

guest是默认用户, 默认只能从127.0.0.1上登录. 开放任意登录, 在/etc/rabbitmq/下新建rabbitmq.config文件. 这个文件据说是标准的erlang config形式文件. 形式如下:

[{Application1, [{Par11, Val11}, ...]},
 ...
 {ApplicationN, [{ParN1, ValN1}, ...]}].

只是开放guest登录权限, rabbitmq.config文件如下:

[
  {
        rabbit, [{loopback_users, []}]
  }
].

之后重启服务即可.
sudo service rabbitmq-server restart

keras依赖很多, 其中tensorflow, conda, Python都是需要自己预先安装好的.
正确姿势是conda->python->tensorflow->keras.

  1. conda & python

conda是python环境管理器, 装conda最好是先不要装python, 装好了也还是卸载了吧, 交个conda管.
conda有两个主要版本, anaconda/miniconda,一定要装x64版本的. 可以选装python3.5版本.
安装好conda, path设置为conda目录下的Scripts, 这样就可以运行.

windows上, tensorflow只支持python3.5 x64版本, 所以创建一个python3.5的环境.
如果前面没装python3.5版本,可以用下面的命令创建:

conda install conda
conda create --name py35 python=3.5
activate py35
conda install anaconda

以上装好了conda和python3.5环境

确认一下python确实是3.5版本,64位. 运行python,进入python命令行:


(py35) C:\r\ai\kerasproj>python Python 3.5.3 | packaged by conda-forge | (default, May 12 2017, 16:16:49) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>

看到Python 3.5.x和 [MSC v.1900 64 bit (AMD64)] z

  1. tensorflow

给pip装一个豆瓣的源, 在home目录下(我的是/users/jac/)创建pip目录, 里面创建一个pip.ini文件, 内容如下:

[global]

index-url = https://pypi.douban.com/simple

保存后, 用conda切换到py35的源

activate py35

并安装tensorflow, 如果pip直接装不了, 可以用下面这个再试试(一个是CPU版本,一个是GPU版本)

pip install --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-0.12.0rc1-cp35-cp35m-win_amd64.whl
pip install --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-0.12.0rc1-cp35-cp35m-win_amd64.whl
  1. keras
    装完前面的, keras安装就简单了
pip install keras

新建个test.py文件测试一下

from keras.models import Sequential
model = Sequential()


if __name__ == '__main__':
    print("OK")

运行 python test.py看看, 不报错就说明ok.

conda/anaconda有俩作用: 1. 创建一个python2.x/3.x共存的环境; 2. 下载一些pip里下不到的包,主要是科学计算的, 涉及神经网络和深度学习;

conda装好后, 默认有一个root环境, 用下面的命令可以看到:

conda env list

我的装过python2.7,所以默认的python版本也是2.7的. 现在要种tensorflow, 可是TensorFlow在windows端只在python3.5上才有,哦, 那就用conda创建一个新环境, 使用python3.5

conda create --name python35 python=3.5

记住了, 直到目前为止(2018/8/2), python3.6也不行,只有3.5 哦! 然后conda就会自动下载python3.5环境, 还包括pip等. 这个我稀饭! 然后使用如下命令切换到新的环境

activate python35

前面不需要加conda,不是conda 的子命令哦! 但在有的文章里说前面需要加source,也就是source activate python35 . 不过我的直接activate就可以了 然后安装常用包,

conda install conda
conda install anaconda

第二项安装要装好多好多包....有几个还特别大... 慢慢等吧...

心静 乱弗生
内觉六感
外断七情
匆匆间须臾片刻
凝凝然回归本真

心疲 祸丛起
速而不达
急而弗能
电铃车鸣催人老
车水马龙使人憔