0%

缘起

我家里的路由器是矿渣newifi3, 刷了OpenWrt系统,可玩性还是非常强的。
而且路由器作为24小时在线的设备,很适合作为网络设备的控制中心,比如使用WOL唤醒其他设备。
之前就写过一个Python服务,用来控制其他设备的唤醒和睡眠。但是由于newifi3的rom空间十分有限,usb又十分不稳定,Python环境在路由器上还是太重了。
所以就想到了利用路由器默认的uhttpd网页服务器,自己编写CGI脚本来实现相应功能。

阅读全文 »

在玩树莓派的过程中难免会碰到如何高效的备份系统的问题。

由于树莓派用的是Linux系统,所以常见的有两种备份方式

  1. 基于文件的备份,比如tar,rsync
  2. 基于磁盘的备份,比如dd

这两种备份方式各有利弊:
基于文件的备份占用空间小,而且可以在系统在线时操作,比较方便,但是当要还原整个系统时就会比较麻烦(引导重建等等)。
基于磁盘的备份就比较简单粗暴了,直接克隆硬盘,恢复时直接还原映像文件就好了,但是由于是整盘备份,空间占用比较大。

阅读全文 »

平时例行午睡时间是下午1:20-1:50,今天也一样,只是闹钟响的时候感觉没睡够。
于是想再眯一会儿,然后我睡朦了,做了一个让我哭笑不得的梦。

下面描述下这个梦

在梦中,我被一阵持续的噪音惊醒,声音类似老式空调压缩机的声音,嘈杂而持久,整个房间都有一点震动的感觉。我在房间里仔细搜寻噪音的源头,好让自己再次入眠。

找来找去,发现我的冲牙器在不停震动,声音也很是类似,还以为忘记关开关了。于是准备把开关关了,一阵手忙脚乱开关还是没能关掉(梦中这种细致的操作不好实现?)。于是我把冲牙器的插头拔下了,但是它好像没有停下来的意思,还在不停震动着,而且冲牙器的位置也不是现实中的位置,我好似也坦然接受了这无须电源的震动(这好像不是重点),但是又无法确定噪音的源头就是它。

然后,富有逻辑的操作来了,我找了个桶把冲牙器盖起来,发现噪音并没有减弱,于是我排除了它的嫌疑。

接着就发现应该是空调的压缩机在响,我就认定是它了,然后空调的指示灯变清晰了,原来是我误开了空调,我笃定开得是制热,只有制热需要这么大的功率,空气也燥热起来,一切是那么符合逻辑。

心满意足找到答案之后,我醒了,发现噪音来源是外面修路的水泵。

缘起

最近发生了一个服务故障,在一个同事对日志服务做了改动后,服务的耗时就变大了很多,数据大量积压。
通过观察监控报表,我们发现从他的改动上线后,服务器的CPU使用率大幅增加,基本处于满载状态。
粗略审查代码并没有发现问题,我们只能紧急回滚了服务,日志消费也恢复到正常状态了。
但是根本问题还没有找到,所以我请出了line_profiler来分析程序的具体耗时情况。

line_profiler是个代码耗时分析器,可以逐行分析代码的耗时情况。

阅读全文 »

PyPI

PyPI(英语:Python Package Index,简称PyPI)是一个用于存储Python写成的软件包的软件存储库,我们平时用pip安装的库就是来自于PyPI

而且,通过PyPI我们可以把自己写的库代码分享给别人,这也是开源的乐趣之一。

阅读全文 »

SWIG (Simplified Wrapper and Interface Generator) 是一个开源工具,用于让C/C++的程序和库可以被其他语言调用。

支持的非常多语言,有Lua, Perl, PHP, Python, R, Ruby, C#, Java, JavaScript, Go, Scheme 等。

阅读全文 »

在学习redis源码时,发现BITCOUNT命令实现用到了variable-precision SWAR 算法。

BITCOUNT命令要解决的问题:统计一个位数组中非0二进制位的数量。在数学上被称为“计算汉明重量(Hamming Weight)”

目前已知效率最好的通用算法为variable-precision SWAR 算法。
该算法通过一系列位移和位运算操作,可以在常数时间内计算多个字节的汉明重量,并且不需要使用任何额外的内存。

阅读全文 »

从高中接触庄子开始,就觉得太难懂了,无论原著还是翻译。直到大学发现南老师讲的这本,才算是勉强能看下去。

从14年开始,晚上时不时看一点,到现在看完,正好六年。

人生又有多少个六年呢

阅读全文 »

IPython简介

IPython项目起初是Fernando Pérez在2001年的一个用以加强和Python交互的子项目。在随后的16年中,它成为了Python数据栈最重要的工具之一。

简单来说,我们可以把IPython当成一个学习Python语言、数据分析、机器学习的平台。

阅读全文 »

缘起

循环import是很多Python初学者都会遇到问题,网上有也有很多文章讲解决方法,比如这篇,不清楚的可以自行查阅,这里就不赘述了。

那么,为啥老司机也会遇到这个问题呢?这段时间一直在搞把redis复刻一个python版本,在复刻代码时就遇到了这个问题。而且我也使用了延迟import,却没能解决。

下面我们来详细分析下

阅读全文 »

最近一段时期有很多事情发生,也颠覆了我们的认知(如I cannot breathe),同时也发现了很多双标事件。

下面就简单地总结下,如何双标。

双标的核心是,定性的看问题,不要就事论事具体分析。

双标的要点之一,选取部分真相进行概括定性。
这里的选取非常关键,我们应该选择性地看见我们想看见的东西。假如B捡了地上的一块钱并据为己有,贪小便宜不是君子所为,这人肯定是品行不端。假如A也这么干了,对不起我没有看见。假如A捡了垃圾放垃圾桶了,这时我们就可以说,从一件微不足道的事情上就可以看出A真是道德高尚。

双标的要点之二,定性之后的上纲上线。
由于第一步我们已经定性了A和B,以后再发生事情就很好处理了。假如都做了好事,A就是好人性质的体现,B因为他是坏人肯定是另有目的的,是伪装的。假如都做了坏事,反过来处理就好了。比如,你认定A是好人,B是坏人,假设他们都随地吐痰了。这时就可以说A肯定是不小心的,大善人怎么可能做这种事;可以说B真是狗改不了吃屎,连基本的公德心都没有。假设都做了好事,扶老奶奶过马路,A就是一以贯之的道德楷模,值得学习;B肯定是装的,为了方便自己做坏事。

asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。

asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoop中执行,就实现了异步IO。

阅读全文 »