在 Python 中使用 GDB 来调试[译文]

大约一年前,我接触了 Java 中的 Btrace 能够不停机查看线上 JVM 运行情况的特性让我艳羡不已。 另外还有强悍的 jStack 和 jConsole 来进行运行期侦测,JVM 的工业级强度果然不是盖的。

当时公司技术方面也遇到了一些瓶颈,一部分原因是 CPython 本身的 IO 模型问题, 另一方面也和早期代码写的极不工整脱不了关系。万般无奈之下,我们用 Jython 推翻重做了主要业务,效果立竿见影,但同时也把真实问题给规避掉了。

在这之后我们在 JVM 的领导下,走上了康庄大道。但我心中始终还有一个梗, 就是想对性能遇到瓶颈的 Python Process 进行线上侦测。 这篇文章就是开始的第一步。

PS:这篇文章理论上是可行的,但是在我机器(Ubuntu 12.04 / 系统自带 Python) 无法正常执行,会爆出 unable to read python frame information 的问题。解决方法我会在下篇文章中写出。这里只是单纯翻译一下原文。

原文可以移步 https://wiki.python.org/moin/DebuggingWithGdb

more ...

15 分钟学会 R 语言[译文]

仗着自己有几门语言的基础,我在学新语言时候,都会选择一些快速入门教程。 比如 Learn X in Y minuts 就是我经常光顾的站点。

前段时间,小柒在用 R 写数据分析脚本,我就建议她把 Learn X in Y minuts 里面的 R 语言教程翻译出来。话说 Learn X in Y minuts 里面的中文贡献还是非常多的,赞。

Learn X in Y minuts 的源码托管在 Github。 小柒被我逼着把这篇 R 语言教程 翻译到 R 语言教程中文版

下面是译文,有不妥的地方可以留言或者直接去 Github 上面 Pull request。


R 是一门统计语言。它有很多数据分析和挖掘程序包。可以用来统计、分析和制图。 你也可以在 LaTeX 文档中运行 R 命令。

more ...

读《大规模Web服务开发技术》

年前看了这本书《大规模Web服务开发技术》,当时给的评价是:

很好,让我这个渣渣看的很感动,数据翔实,经历可靠,翻译的也不错,我给 4.2 分

现在经历过 Python / Django / 烂代码的阵痛,开始有更多的想法, 在整理这些粗糙的想法之前,我又把这本书翻了一遍,写个流水帐读书笔记。

大规模Web服务开发技术

《大规模Web服务开发技术》@豆瓣: http://book.douban.com/subject/6758780/

规模

小规模 / 大规模 / 超大规模的侧重点各不相同:保持扩展性/保持冗余/低成本运维/开发合作方便

内存、磁盘、负载

内存快,磁盘慢,IO 速度的差异

数据分布式

  1. 使用局部分布式,热数据独立出来。
  2. Partition 分布式,按模块分割数据。
  3. 按 ID 分割,比如 a-g, h-z
  4. 按访问类型,一般请求 / feed / 图像(#毒药计划的原理)
more ...

Arch,再见

Arch

Arch 是我真正使用的第一款 Linux 发行版,大约使用了三年, 现在的这个 VPS 跑的系统也是 Arch。 然而随着时间变化,我从最早的天天更新狂,到一周、一个月、三个月和不主动更新。 彻底从从不折腾会死星人变成了一个尽量避免变更的老用户。

more ...


如何让 Instagram 在一百多万用户爆炸后稳定运行

原文链接:Keeping Instagram up with over a million new users in twelve hours


这周二我们发布了 Instagram for Android,反响空前强烈。 最近这几周我们一直(在基础设施方面)做负载计划,为所有可能发生的事故做准备。 尽管如此,在发布那天,最大的挑战仍然是如何快速定位问题,找到瓶颈并尽快修复他们。 在这里我们将分享一些帮助我们解决问题的工具和技术。

more ...

KuKu-一个 Weekend Project

一个小小的 Weekend Project,基于 web.py。 代码在 alswl / kuku ,很简陋,属于差不多能用阶段。

Kuku

基于以下原因开发:

  • 想把服务器去 PHP 化,以前的 upload.log4d.com 是基于 PHP 的, 详情请见 使用独立图床子域名
  • 刚买的 Linode VPS,终于从 128MB 内存解放出来了,赶紧放个 Python 程序跑跑。
  • 想些 Python 了,手痒,想看看写这么简单的功能需要多长时间, 弥补上次没能参加黑客马拉松的遗憾。

KuKu 的发音是我家乡话的「看看」。

KuKu 中比较有趣的地方是,用了 Foundation 这个流式 Web 前端框架, 用了 ...

more ...

PyCon 2012 见闻

PyCon 是 Python 领域最著名的技术会议,从 2011 年开始,中国区开始举办自己的 PyCon 大会。这次 PyCon 2012 分成两个场地同时进行,北京和上海, 并且在网上提供同步转播,各地也有组织线下收看的。

PyCon Logo

去年时候我很遗憾的不能跑到上海来参加,现在我人就在上海, 怎能错过 Pythoner 的饕餮大餐呢?早就眼巴巴的买票准备参加了。

more ...

Working with Python subprocess[译文]

8月底到魔都开始新工作,头一个月当然各种忙,都没时间来更新博客。

这篇文章是在写 Btrace 脚本时候查资料看到的, 看着不错就顺手翻译,没想到差点烂在草稿箱出不来啊出不来。 熬了一个月才磨出来,媳妇都快成婆了有木有。

原文链接:Working with Python subprocess - Shells, Processes, Streams, Pipes, Redirects and More


注意

关于「执行命令时候发生了什么」这个问题,可以在 http://en.wikipedia.org/wiki/Redirection_(computing) 找到更多最新信息。这篇文章遵循 GFDL 协议。

在我的上一篇日志中,我写到如何 build a command line interface with sub-commands in Python。 这次我来尝试如何通过 Python 的 subprocess 模块来和命令行指令进行交互。

我想达到的目标是:

  • 查看当你键入命令时究竟发生了什么
  • 如何确认一个命令是否存在并找出到底在哪
  • 通过 Python 或 shell 执行命令
  • 向一个运行中的进程读取 STDOUT 或写入 STDIN
  • 检查进程的退出返回状态
  • 理解 Bash 在命令中断中扮演的角色,并如何将它们发送给程序
more ...