落就是一道风景线

非 DBA 也要勇敢的 Online(!) DDL

| Comments

目前我司没有专职 DBA,所以 Online DDL 需要自己动手。最近操作了几次不同数量级(单表 5 million, 20 million, 80 million)的 Online DDL,这里做下记录,希望这些数据能够对其他和我一样非 DBA 的同学提供点儿参考价值。

Remote 之工具篇

| Comments

最近从北京转到了上海 Office, 与北京技术团队的沟通协作也自然的变成了 Remote。截止到现在已经有一个月多的时间,分享一下自己使用到的工具。

我们都爱 Pull Request

| Comments

Pull Request

最近半年多,我们组一直在使用 Pull Request 的方式进行开发,写一点儿自己的感受。

说到 Pull Request 就不得不提到 Code Review。当我们还是以 SVN 为主要的版本控制时,Code Review 通常是2个人参与(提交者和另外一位同事),为了 Review 而 Review,实在是无趣。后来也有短暂的一段 Hg 经历(这段基本忘干净了,想了几分钟都没什么印象……),直到转向战无不胜的 Git

怎样制作一个 Python Egg

| Comments

Python Egg

前段时间在玩 OAuth2,尝试了很多个 Python 封装的 OAuth2 第三方库,感觉都不是很对自己胃口(最无语的是那个叫作 oauth2 的库,居然是 OAuth 1.0 的实现??!!),于是自己写了一个叫作 py-oauth2 的“库”。之所以取这个名字是因为之前用过一个叫 py-trello 的库,以为叫 py-xxx 会很洋气,现在想想真是土死了…

制作打包一个 Python Egg 并部署整个过程还蛮有意思的,下面小教程(这里以制作一个叫作 bee 的 Egg 为例)~

Crontab 使用入门

| Comments

半夜睡不着无聊更新下博客……

Crontab 简介

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρόνος),原意是时间。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。(引用 百度百科 )

Crontab 使用方法

man crontab 一下会发现有以下2种用法:

1
2
3
crontab [-u user] file
crontab [-u user] { -l | -r | -e }
# 其中 -u user 为可选项,当无 -u 项时为当前用户

第1行用法,如果 file 文件存在,则将文件复制到 crontabs 目录;如 file 不存在则接受标准输入方式。

第2行用法有3个选项:

1
2
3
-l 列出当前 crontab 配置(Display the current crontab on standard output)
-r 删除当前 crontab 配置(Remove the current crontab)
-e 编辑当前 crontab 配置(Edit the current crontab using the editor)

使用 Git Submodule 和 Vim-pathogen 管理、同步 Vim 插件及配置

| Comments

在多台机器(比如 Mac 和多台服务器、开发机)上使用 Vim 经常需要同步配置文件 .vimrc,之前都是用:

1
scp .vimrc theoden:~

如果加上形形色色的插件,再比如给 plugin 升级就有些兵荒马乱的麻烦了。今天早上在看 vim-ruby 的时候发现了很 Cool 的项目 vim-pathogen,并且使用它顺利的搞定了 Vim 的配置及插件同步。其中同步使用的是 Github + Git submodule,插件管理使用 vim-pathogen(其实 vim-pathogen 也是 Vim 的一个插件,只不过这是一个管理插件的插件),下面记录一下整个过程。

使用Python/Ruby/Bash Post 文件二进制流(stream)

| Comments

之前经常使用Python的urllib, urllib2两个库写爬虫或者是向第三方接口post数据,很是清爽。今天有需求要把图片文件post到第三方接口,当我又祭出urllib+urllib2两大法宝时,结果很不意外的被洗刷刷了……

被洗刷的感觉很不爽,需求是流氓,你弱它就强,所以一定要搞定它 XD

各种搜罗和实践测试,最后得到了python\ruby\bash几个版本:

单元测试的那些事

| Comments

单元测试是在第一次面豆瓣时候被拒之后才开始接触的,那时候去网上g了此资料,感觉对各种“不可能出错的事情”测试是无聊到极致而又闲着蛋疼的人才会做的。之后也有实践,很长一段时间用”DDT”应付下形式,直到有1天……

今天,在豆瓣的HappyDay现场,来记录一下自己和unittest之间不得不说的几件事。

Python 使用 PIL 给图片添加水印

| Comments

前几天在做一个给指定相册添加水印的功能,使用的是PIL(Python Image Library)。 先看一下网上,找到这篇:Watermark with PIL (Python recipe) 于是,处理水印的核心代码就差不多有了~

当然,问题也接着来了,首先就是拿到的图片文件和水印文件。我这边得到上传图片文件基本上会是文件二进制数据流或者由Flash post过来的application/octet-stream类型的二进制数据流,并不能像参考中的代码使用指定路径拿到文件,所以数据流进行处理:

1
2
3
import Image, ImageEnhance
from cStringIO import StringIO
img = Image.open(StringIO(img_data)) # img_data 是post过来的数据流

这样就可以拿到一个Image对象了。再使用类似参考代码对它进行水印处理。