struggle

周五下单订了一块带OLED的单片机模块,加钱寄了SF,于是周六就收到了东西。
之前用Python很快的就实现了整个算法,觉得还挺简单的。但是换到用C写就出了很多问题,没有了方便调用的库,所有的东西都得自己写。
于是我愉快地肝了一个通宵,终于手拍出了没有任何依赖的Hmac-sha1。以现在的情况来看,一切运转良好,只需要再加上一个RTC的功能就可以正常工作了。
另外,这个板子还自带Wifi和蓝牙的功能,打算等回家了试一试。
没有奇迹,全靠拼命。

主页劫持恢复作业

今天周六睡了个懒觉,九点半起床洗澡,打算去公司等我昨天买的芯片到货。
然后在路上收到了好基友的消息,说是需要在Windows下面下载一个安装包。我看到那种不三不四的下载站其实是有点犯憷的,不过看基友急着要就偷懒没开虚拟机,直接下载了下载器,帮他拿到了dmg(结果最后那个还不是描述版本的)
安装过程中我已经看到了各种**卫士,**助手,**主页的安装选项框,一一点掉,但是我还是Naive呀,这帮黑产写了那么半天的猥琐套路,难道你说你不让他装,他就不装了?
于是不出我的预料,下载完后我在桌面上果然看到了熟悉的全家桶。找到了几处套路,但是奈何这东西实在太猥琐,还做了页面跳转,我自己实在也是有点力不从心,打算重装来着。
在重装前,我抱着最后一丝希望,搜索了一下解决方法,结果还真的发现了一个神器,一键式操作,分分钟找到了该删掉的东西。下面是软件:
AdwCleaner

Google Authenticator

因为公司的服务器有双因子登录,每次都需要输入Token,这就很麻烦了,于是就打算抽空做一个实体化的Token出来。
话说最核心的部分就是需要利用Secret Key计算出当前时间的Token, Google已经开源了这套算法,看了一下不难,就用python改写了一个出来,打算给树莓派或者MicroPython的板子用。

import hmac, base64, struct, hashlib, time
def get_hotp_token(secret, intervals_no):
    key = base64.b32decode(secret, True)
    h = struct.pack(">Q", intervals_no)
    o = hmac.new(key, h, hashlib.sha1).digest()
    t = ord(o[19]) & 15
    p = (struct.unpack(">I", o[t:t+4])[0] & 0x7fffffff) % 1000000
    return p
def get_token(secret):
    return get_hotp_token(secret, intervals_no=int(time.time())//30)

其实一直想做一个辉光管的显示器的,但是上某宝看了一下价格后想想还是算了…然后打算找个贴片的数码管做,又觉得效果不会太好。现在想到的方案是用MicroPython来做主控,上个集成的数码管就好。
另外,经过无数次被国产的板子坑的经历,我强烈建议如果你想要入门学习硬件,千万不要图便宜选一个国产的仿制版。真的是一分价钱一分货,我当时因为原装的MicroPython没有办法及时拿到货,就偷懒买了淘宝上的仿制品,结果坑多到让你怀疑人生。

python – retrying 重试库

这几天在B站做一个热度预测模型,项目中有大量的网络I/O交互。
项目很快撸完上线运行,开始没什么问题,但是过了几天之后,我发现App偶尔会挂掉。
于是我抽空看了一下日志,发现是消费一个内部Kafka的时候被Connect refuse了,观察了一下原因,感觉是因为负责那套系统的大哥正在拼命迭代系统,每次都会造成不可用。
于是我不得不给App加上异常处理。其实我平常不会这样做的,一直相信Let it Crash才是正道。加上自己写的异常重试处理之后,这个问题果然解决。
不过好日子没过几天,另外一个依赖系统的大哥也开始疯狂迭代了。这次的情况比上个问题要复杂一点,于是我就在网上找了找重试库,结果就愉快地发现了Retrying这个神奇的库。
由于只需要对函数使用装饰器,所以完全不会嵌入代码,造成代码结构的破坏。而且提供的功能也完全满足了我的需求。
非常开心。
 

MicroPython 上手

这个板子其实已经买了很久,并且也被我蹂躏了很多次了。但是为什么说是上手呢?
因为我差不多已经忘完了……
我一直在尝试用Xshell去连接PyBoard的串口,但是不知道为什么Xshell识别不出系统的串口信息,所以就只能下载了一个上世纪神器——PuTTy。
看到熟悉的PuTTy界面,然后选择设备串口(可以在设备管理器中查看),最后记得修改串口传输速率,就可以愉快和PyBoard的玩耍了。
打开MicroPython的官方Document,发现现在手头上啥也没有,能玩的只有板载的LED了。于是写了一个简单的跑马灯,布灵布灵的。

for i in range(1000):
    led = LED(i%4 + 1)
    led.toggle()
    time.sleep(1)