0xFEE1C001

Where there is a shell, there is a way

Python源码寻宝记——地图篇

如果读源码的方式是打开源码包,一个个文件,一行行开始读。这种阅读源码方式太枯燥了。另一种方式,对Python的设计有了基本的了解后,找感兴趣的部分去阅读。兴致高,目的性强,内容少,阅读的过程会轻松有趣得多。

对Python设计基本了解包括对总体架构设计,对象系统实现原理,字节码的生成和解释过程有大致的了解。哪天闲得不行,可以写写这方面的文章。

感兴趣的部分源码怎么找?这个就是此文的主题了——如何找到特定逻辑的源码。

Python源码寻宝记——挖坑不埋

作为pythonista,不禁感慨Python的易用与强大。时不时会想,这个好用的语法是怎么实现的,那个神奇库是怎么回事。后来开始翻Python源码,读感兴趣的部分的实现时,像是找到了个四次元口袋。这里有奇思妙想的算法实现,也有精妙绝伦的性能优化,还有天马行空的语法原理。源码的风格也和Python所倡导的一样,简洁优雅,阅读的时候心情十分愉悦。

记下源码里有趣的地方,是件有意思的事。但按这个博客一直以来自娱自乐的尿性,注定了这个系列是只会把坑越挖越大。这里不要脸地承认了,这就是在挖坑。

邮件发送实践经验

在做邮件发送服务的时候遇到了种种问题,发现邮件发送有很多技术之外的限制。这里把这些时间查资料和实践出来的一些经验总结在这里。

logrotate机制和原理

日志实在是太有用了,它记录了程序运行时各种信息。通过日志可以分析用户行为,记录运行轨迹,查找程序问题。可惜磁盘的空间是有限的,就像飞机里的黑匣子,记录的信息再重要也只能记录最后一段时间发生的事。为了节省空间和整理方便,日志文件经常需要按时间或大小等维度分成多份,删除时间久远的日志文件。这就是通常说的日志滚动(log rotation)。

最近整理nginx日志,用了一个类Unix系统上的古老工具——logrotate,发现意外的好用。想了解这个工具的用法推荐看这里。我了解了一下这个工具的运行机制和原理,觉得挺有趣的。

[翻译]作为一个外国人,你对中国人怎么看?

来自dyr热心的投稿,感谢对Quora这个高质量回答的翻译。以下是正文。

Q: As a foreigner what do you think about Chinese People

A: Answer by Eric Miller

翻译这个的目的仅仅是分享一些真正的“老外”的看法给我周围对英语阅读有困难或者偷懒的人,并不代表我完全赞同作者观点(虽然大部分我觉得说的还是有道理,至少是我见过的现象)

关于barrier

再次收到John Smith的来稿,为了你这篇稿子,我停笔一年了呀。

memory barrier内存屏障,一种非常底层的同步原语,是memory ordering的一部分。 使用内存屏障可以阻止编译器或cpu对内存的乱序访问,其中阻止编译时期重排的叫做 compiler barrier,阻止运行时期重排的叫做memory barrier。

Python判断整数相加溢出

在Python解释器的源码里看到一段有趣的代码,它实现了Python两个整数相加时如果溢出则用更大的数据类型保存整数。具体代码的如下。