Frossky 发布的文章
替代matlab的开源软件? 试试GNU的 octave
octave有着很丰富的插件, 支持windows, 并且语法上和matlab差不多
python新工具:conda
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
第二项安装要装好多好多包....有几个还特别大... 慢慢等吧...
静.
心静 乱弗生
内觉六感
外断七情
匆匆间须臾片刻
凝凝然回归本真
心疲 祸丛起
速而不达
急而弗能
电铃车鸣催人老
车水马龙使人憔
tensorflow在windows上不支持python2.7...醉了, 只支持python3.5
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时停止执行.