参考文章

Jquery对象的属性和dom对象的属性是不能相互访问的, 这时候需要相互转换.

1.jquery选择器获得的对象是jquery对象

$('div') //jq对象

  1. jquery选择器产生的数组的子元素是dom对象

$('div')[0] //dom对象

  1. 使用jquery包裹dom对象可以再次生成jquery对象

var d = $('div')[0] //dom对象
$(d) //jq对象

  1. 在jquery对象下可以继续查找, 返回jquery对象

$(d).find('ul') //jq对象

我说怎么所有的站点都支持$了?原来是 Chrome 控制台中原生支持类jQuery的选择器,也就是说你可以用$加上熟悉的css选择器来选择DOM节点,多么滴熟悉。
$(selector)返回的是满足选择条件的首个DOM元素。
剥去她伪善的外衣,其实$(selector)是原生JavaScript document.querySelector() 的封装。
同时另一个命令$$(selector)返回的是所有满足选择条件的元素的一个集合,是对document.querySelectorAll() 的封装。
但这些与jquery本身的用法还是有很大区别, 要注意的. 如果是jquery的$,默认返回所有的DOM节点的.
这些都属于Command Line API

这个工具干什么用的? 似乎是用来快速实现可视化的想法, 面向的人员那是技术和编程不那么熟悉的人. 和Arduino面向的对象类似, 语言风格也类似. 一个setup, 一个draw, 而draw本质上也是loop,只不过设定了帧率.
processing是java编写的,哦这一点和arduino也类似, 打开界面有种arduino的感觉. p5.js就是processing的JavaScript版本.

国内公司为什么很少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.