Frossky 发布的文章
utf8格式的文本文档
utf8格式的文本文档以0xEFBBBF开头, 后面才是正式文本, 千万别搞错了.
ESPTOOL
乐鑫官方的ESPtool是python版本的, 也就是esptool.py, 不过发现arduino上面ESP兼容版用的ESPtool是一个exe版本,找了一下,发现是github上的esptool-ck
这儿放几个用法: 从app.elf转app_00000.bin, app_40000.bin.4M flash空间.
esptool -bz 4M -eo app.elf -bo app_00000.bin -bs .text -bs .data -bs .rodata -bc -ec -eo app.elf -es .irom0.text app_40000.bin -ec
上传固件到COM5, 波特率115200, 手动重启方式上传.
esptool -cp COM5 -cd none -cb 115200 -ca 0x00000 -cf 00000.bin -ca 0x40000 -cf 40000.bin
也可以这样
esptool -cp COM5 -cf 00000.bin -ca 0x40000 -cf 40000.bin
清空NodeMCU的Flash
esptool -cp /dev/ttyUSB0 -cd nodemcu -ce
上传固件到espduino/nodemcu,带比较详细一点儿的输出
esptool.exe -vv -cd nodemcu -cb 921600 -cp COM13 -ca 0x00000 -cf ./nh_fixed.bin
将数组展开的赋值法
通常要将一个数组复制,或者与另一些值连接在一起,会使用concat
a = [1,2,3]
b = a.concat() //1,2,3
c = a.concat(4,5,6) //1,2,3,4,5,6
现在有更优雅的方式: 三个点展开数组
d = [...a, 7,8,9] //1,2,3,7,8,9
在数组内使用...可以展开另一个数组, 就好像是吧这个数组的方括号[]给去掉了一样
另外, function的成员 arguments不是真正的数组, 它没有Push/pop这些方法,但有...方法. 要转换为真正的数组,可以的方法有:
arr1 = [...arguments]
arr2 = Array.from(arguments)
linux若干方法
- linux修改root密码
哦,这儿说的是比较常规的方式.
改自己密码当然是
passwd
然后输入旧密码, 新密码x2.
如果你有sudo权限,可以试着这样修改root密码:
sudo passwd root
然后输入自己的密码, root的新密码x2
- 删除非空目录
这时候rmdir无论如何都是用不了的, 使用
rm -rf 目录名
比特币与信心
如果按尤瓦尔赫拉利的观点,货币只是一种故事,价值在于有多少人相信的话,那么比特币的价值也在于有多少人相信。从实际投资者到极客,到科技媒体,到金融媒体,再到大众媒体,从新媒体到电视媒体,传播面依次渐广,对信任的影响依次渐大。到无人不知的时候,影响力也就到顶了。现在传播技术已无障碍,影响传播的是小编们的新闻编制速度,和事件的重要程度。广大吃瓜群众只是手动转发一下。最终体现在新闻的数量上和不同媒体受众的数量上。事件重要度如何获知?也是看哪个层次的受众会感兴趣。如果不感兴趣,那个层次的媒体连新闻都懒得写。
代理设置
OK.这儿讲的是SS. 就是S.....Socks-libev
1. 服务器端
服务器端Ubuntu 16.10以上版本可以直接使用apt-get安装
sudo apt-get install sh....so...-libev
装好后, 配置/etc/sha...so...-libev/config.json, (恩,JSON is good). 如下:
{
"server":"xxx.xxx.xxx.xxx",
"server_port":8888,
"password":"**********",
"method":"aes-256-cfb"
}
Server就是服务器的IP, serverport自行修改成任意值都可以, password也请自行修改.
- 客户端
客户端种类比较多,如:
2.1 windows端
windows的客户端还是挺好用,也简单. 不做介绍了, 自己去找-_-|||
配置项中,配的和服务器端一样就可以了.
2.2 openwrt端
这个麻烦些,先下载个对应版本
然后还要用opkg安装几个依赖
# 这两个依赖是一定要装的
opkg install ip ipset
# 装ss
opkg install ./s.....s....文件名.ipk
在OPENWRT CC版本中安装OK,可是在AA版本中会遇到问题
pkg_run_script: package "shadowsocks-libev-spec-polarssl" postinst script returned status 127.
opkg_configure: shadowsocks-libev-spec-polarssl.postinst returned 127.
那是因为postinst会调用/lib/function.sh中的一个default_postinst()函数,而AA版本里面没有这个函数, 只好自己手动加了,在/lib/function.sh最后面加上:
default_postinst() {
return 0
}
值得注意的是, ss客户端有ss-local/redir等等, 在spec版本中没有local,也就是sock5代理,这个要注意
运行下面的命令,会发现ss-local在运行就好
root@OPEN:/# ps | grep ss-local
18797 root 2652 S /usr/bin/ss-local -c /etc/sh....socks.json -b 0.0.0.0
19474 root 1060 S grep ss-local
当然,需要改一下 /etc/sh....socks.json, 修改为:
{
"server":"xxx.xxx.xxx.xxx",
"server_port":8888,
"local_port":7654,
"password":"***********",
"method": "aes-256-cfb"
}
就是比服务器端多了一个local_port的定义. 当然这个是sock5的代理port了.
重启一下服务:
/etc/init.d/so....s.... restart
OK了!
如果你想实时监控一下log信息, 可以先停止服务,在命令行启动,并加上-v
/etc/init.d/so....s.... stop
cc-local /etc/s.....s.....json -b 0.0.0.0 -v
2.2.1 windows上通过openwrt sock5上网
通过代理服务器上网通常都需要软件支持. 以firefox为例,打开 "菜单 - 选项 - 高级 - 网络 - 设置(E)..." 看到对话框(藏得好深的对话框...)
再选择"手动配置代理 - sock主机",填写IP和端口, 选择 SOCKS v5, 以及"使用SOCKS V5代理 DNS", 然后"确定"
看一年y..t...的视频, 能播就说明OK咯.
然而通过系统代理却不行,主要是DNS在作怪. 因为系统的代理不会把DNS也代理过去.
linux find用法
虽然我习惯用mlocate,不过这个命令太高级不通用,有的linux上没装,有的linux上没有(openwrt)
所以还是用find吧
find / -name ps
find / -iname *ps
这个意思是在根目录/及其子目录下查找ps命令,额,大多数情况这样就够了
后面一条命令的意思是忽略大小写, 查找以ps结尾的文件名.
Lua的for循环略显奇葩
递增循环, 是start, end, step...好吧, 基本还是跟C一样,C是start, condition, cmd
枚举循环,有个ipairs/pairs是什么鬼?
for i = 0,10,1 do
-- something cmd
end
a = {'a','b','c'}
o = {x=1,y=2}
for k,v in ipairs(a) do
-- some code
end
for k,v in pairs(a) do
--some code
end
原来是不同的迭代器:迭代文件每行的(io.lines),迭代table元素的(pairs),迭代数组元素的(ipairs),迭代字符串中单词的
(string.gmatch)等等
ipairs和pairs什么区别?ipairs从1开始遍历,每次递增1,也就是1/2/3/4...,遇到没有了就停止遍历。pairs遍历所有的key。
TCP UDP调试的好工具 TCP/IP builder
简单好用又开源! 下载地址
arduino在中断回调中执行的程序, 确实是无法使用delay的
arduino在中断回调中执行的程序, 确实是无法使用delay的, delay似乎就失效了.
所以中断还是应该尽快返回, 在主程序逻辑中执行. 较长的逻辑可以通过设置标志位, 在主程序中进行检测并执行, 执行完后清除标志位即可.
如果是设置标志位的方式, 在主程序运行中, 新的中断当然会不断地重设标志位, 然而在主程序运行后将清除标志位 , 因此不会重复执行任务.
如果无论主程序是否在执行 ,每次中断任务都需要被完整执行的话, 则可以用计数器替代标志位, 中断时计数器+1, 执行一次再-1, 直到计数器为0时停止执行.
Arduino 串口发送注意
Arduino串口发送注意, 在发送结束后要调用flush, 尤其是在休眠以前, 否则可能发不完哦!
将任何程序注册为windows服务
原文: node.js程序注册为windows服务
但不幸的是,这个方法在win7和win10上已经失效了...
新的程序是Installutil.exe和sc.exe
参考msdn上的问答
Installutil的介绍
sc的介绍
念一念毛
很多人说毛带兵成功治国失败,不理解他的三反五反十年浩劫。然而毛确实是一个共产主义者,理想主义者,甚至是完美主义者。他所做的确实是消灭阶级,消灭不公平,将整个国家高出中农以上的阶级全部铲平,在生前建立共产乌托邦。只是我们后来才注意到,乌托邦世界的问题。
技术,努力, 天堂, 理想,与美好生活的骗局
人类发展技术,个体让后代学习技术,意图让他们过上更美好的生活,甚至走上“共同富裕”。然而,个体更美好其实只是个概率问题,好的技术并不能一定保证好的生活,也无法让你过得更轻松,也无法共同富裕,而总是一部分富裕了另一部分没有,而后代只能像赌博一样压宝,总盘子就这么大,看你们的运气。心理学说人人都会做出对他来说最好的选择,而他们只是选择了自己最好的押宝。
当技术不起作用了,人类说你还得努力,未成年努力还不够,还得终身努力。然后你就放弃了舒适的生活,去过“好的生活”,房车票子上流社会之类。大家都努力,总盘还这么大,你就只有更加辛苦才能获得跟以前差不多的生活。
最终,你努力学了技术,又努力工作,生活却还是不如意,感叹或咒骂人生究竟如此苦逼的时候, 人类给你三个选择:一,宗教,人生就是痛苦,这辈子幸福是不可能了, 不过下辈子可以, 只要你信教, 就能上天堂,得永生;二,你自己是不可能了, 但你的子女可以, 总得让自己子女过得好一些,轻松一些, 所以继续努力吧,希望在未来;三,人生得有理想,得改变世界什么的, 万一实现了呢, 所以继续努力吧。每个人需求不同, 有的要救自己, 有的要救后代, 有的要救世界, 总有一个满足你. 不过相对来说, 宗教这个没让你继续过度疲劳, 所以还是划算些, 这门生意从图腾时代开始也就兴旺了几万年不衰. 中国皇帝最大, 宗教最多当过老二, 于是只好寄托后代, 所以不孝有三无后为大, 所以传宗接代重男轻女, 因为只有男性能代表我实现幸福生活.
至于理想主义, 是一个适合文青的方式, 古代受教育的少, 文青也少, 所以一直是个配角, 现代纷纷读起了大学博士研究生, 才变得更加流行起来了. 现代文青受教育多了, 一是导致家族观念淡薄, 都想实现个自我价值; 二是广告和小时代看得多了, 要买要用的东西多, 生活压力大, 就不愿意多生孩子养家. 所以只有理想主义能拯救他们. 他们喜欢乔帮主的"卖个糖水还是拯救世界"的段子, 纷纷开始实现王健林的"1个亿小目标". 其实理想主义也是贯穿古代的文青圈, "穷则独善其身, 达则兼济天下". 只是比较起来, 古代人还是现实一些, 穷了还就只管自己了, 有钱了也只是"兼"济天下, 顺带地救一下世界. 现代文青就不一样, 我穷也要或者更要救天下,救不了天下也得在天底下扬名立万, 并时时以救天下的各种鸡汤段子鞭策自己, 鞠躬尽瘁死而后已.
最后谁赢了?只是那物竞天择的自私基因。