分类目录归档:Programming Language

在Python 3 (IPython)中执行shell命令的一万种方法

事情要从几个月前说起。有一天某位学金融的同学找到我,问有没有兴趣参加一个量化股票交易比赛。当时我觉得反正也无聊就答应了。等拿到竞赛规则一看,发现该竞赛竟然使用同花顺MindGo量化交易平台。我之前稍微接触过一些相关产品,虽然对此类平台的通病有心理准备,但是当时同花顺MindGo平台的糟糕程度仍然让我大吃一惊。该文中提到的界面和功能上的问题现在大多已经解决,不过不知出于什么原因,该平台不希望用户执行shell命令。在比赛期间,我为了解决一些该平台API的糟糕设计,写了一个回测框架加上部分API的wrapper,但是上述限制让我没法方便地使用 git pull 更新代码了。于是我和MindGo展开了一场旷日持久的在IPython中执行shell命令的战争。 继续阅读

用Arduino UNO实现高频方波信号发生器

最近一个项目需要生成一个方波信号,要求信号的频率,脉宽和初相都要可以在运行时调节。于是掏出吃灰已久的Arduino UNO R3来做了一个。经过调优,这台单片机最高可以输出55KHz的方波信号(误差在0.5KHz左右;最高能达到77.5KHz但是那时候的误差就有5KHz左右了)。程序可以在GitHub Gist: Jamesits/high-frequency-square-wave-generator.ino下载到。做的过程中遇到了不少坑,写本文来纪念一下。

继续阅读

把Hurricane Electric BGP Toolkit搜索结果转换成RouterOS防火墙IP列表

用着没人权的移动宽带,最近晚上玩DOTA 2的时候总是莫名其妙掉线(超售太多了,浙江省出口的BGP都掉了吧),于是想着搞个阿里云做策略路由好了,因此需要一个中国电信的IP列表。想了想,Hurricane Electric BGP Toolkit可以提供这个信息,但是不允许自动抓取。于是写了个脚本来做转换。

首先我们来搜索一下CHINANET:

bgp.he.net search result page

等页面加载完(要很久,数量巨大),然后在页面后半部分可以看到几万条IP段。接下来要做的事情就是把它们读出来导入RouterOS。于是写一个简单的Bash脚本:

先把搜索结果页面Ctrl/Cmd+S保存一下,然后运行 ./convert.sh saved_webpage.html CHINANET 获得一个 CHINANET.scr 文件,上传到RouterOS,然后在RouterOS终端运行

大功告成。