qyb的博客

用 python/reportlab 生成 PDF

达达这学期关于加减法运算的一个要求是速度——8分钟以内做120道题为及格,5分钟做完是100分.

为了平时训练,偶周末就写了个脚本产生一组题目,并生成 PDF 以供打印。

网上的入门教程多是 reportlab 的 pdfgen.canvas 的例子,不过我这里是要打印 120 道题出来,就得用 platypus.Table 来排版了.

表格的数据用一个 list 来表示;其每一个元素仍然是一个 list,就是每行(row);这个 list 里的每个元素是字符串,是 cell 的数据了。

准备好 table 后,用 platypus.SimpleDocTemplate 来生成 pdf。它最后处理一个 list,把这个 list 里的对象挨个渲染出来,这个有点像浏览器依次画出 block 级别的 div。

示例如下:

  1. from reportlab import platypus
  2. from reportlab.lib.units import inch
  3.  
  4. def genTable():
  5.     data = []
  6.     items = genList()  #随机生成120道题目
  7.     for i in range(0, len(items), 5):
  8.         #生成一个有 5 列的表格数据
  9.         data.append(items[i:i+5])
  10.     table = platypus.Table(data, 1.5*inch, 0.4*inch, [('FONT', (0,0), (-1,-1), 'Courier')])
  11.     # 每个cell 1.5' 宽,0.4' 高,差不多 120 题排满一张 A4
  12.     # Courier 是等宽字体,为了俺的算式看起来整齐
  13.     # (0,0)/(-1,-1)说的是font style运用范围,从左上到右下
  14.     return table
  15.  
  16. doc = platypus.SimpleDocTemplate(fname, topMargin=0.9*inch, bottomMargin=0.9*inch, title='DaDa Math', author='qyb')
  17. # 目标是一个叫 fname 的 PDF 文件,缺省上下留白有点多,修改为0.9'
  18.  
  19. elements = []
  20. for i in range(n):
  21.     elements.append(genTable())
  22.     elements.append(platypus.flowables.PageBreak())
  23.     # 生成 n 页的数据,每个表格后面跟着一个换页
  24.  
  25. doc.build(elements)

Getting Started With ReportLab 这篇文档给我很大帮助,推荐阅读。

最后要说的是,Linux 下配置佳能 LBP 3018 非常麻烦,我尝试了10分钟后没有搞定就放弃努力回到 XP 下打印了。CUPS 发展这么多年,佳能也是大厂,没想到 Linux 桌面上用打印机还是如此困难!

Topic: dada 技术

mutt killer

gmail 影响的不仅仅是 webmail 以及桌面客户端(thunderbird 都要变成 raindrop),现在看来 text-based 终端应用程序也要进化了!

首先出台是 Sup. 一个用 ruby 写成客户端,带有标签/全文搜索/自动创建联系人名单....还有会话功能. 看截图还蛮像回事

然后就有对 ruby 不鸟的 C 程序员开发出来了 "Not much mail". 利用 xapian 作的全文搜索...在 blog 里对 xapian 只提供 C++ 接口还调侃了一下

NotMuchMail 没有 POP3/IMAP4 fetch,没有 SMTP 发送功能,甚至没有 UI!!! 要想把一切有机的组织在一起,得靠神器 Emacs. 现在 at least two users using it for reading all of their incoming mail... 这个是算 alpha 么?

Topic: 技术

车站能不能把春运火车票放到淘宝上去拍卖?

这两天断断续续的看薛兆丰的《经济学通识》,里面提到春运火车票可以拿黑市价格来参考定价,哈哈深得我心,周末还和 qyt 争论过这个问题。

今天我又想到这个事情,春运的卧铺火车票完全可以拿到网上拍卖,从技术和渠道上淘宝能够担起这个重任,就看车站敢不敢这么做。

车站多赚来的车票钱也许可以多开些临客

如果马云老师先天下之忧而忧,就去主动找铁道部请缨吧。

Update: 周末去鼎好买了一个打印机,越南制造... 从成衣/鞋子,到IT制品.... 越南股市可能还真是个适合冒险的地方呢

Topic: 社会

网易的 NMMP 协议

Netease Mail Management Protocol. 随便说两句感想

"闪电邮"这个产品,最近大半年一直没有消息,我还以为它就此终止,没想到网易还是很有决心的把客户端道路走下去

非常有趣,尤其是"闪电邮"同时还支持 POP3/SMTP 收取 sina 和 sohu 的邮箱(公开的新闻稿里没有 qq 的名字)——好比腾讯突然出了一个支持 MSN 或 XMPP 的客户端。建议用 POP3 的人试一下这个产品,和 foxmail 做一个对比。

或许网易认为私有协议能给竞争带来巨大的优势,最近频频搞这个东西保护它庞大的邮件王国,除了 NMMP,前不久还弄了一个 coremail 之间的私有协议来加快传输,我估计会叫 NMTP。

前两天我还在感慨搜狐终于把个人邮箱的基础设施大大简化,同时支援 sohu.com/chinaren.com/sogou.com/vip 的成本降低了许多,网易的研发人员却得开始维护两个新的协议了,让人不得不对网易的板凳厚度保持深深的敬意,哈。

最后想到一个问题,popo 呢?

Topic: 商业

记昨天的反垃圾邮件年会

最深得我心的是李宏宇的观点:“对反垃圾邮件性能的指标定义混乱,没有清晰的标准,应该以实际的用户体验来表达”。没错,厂商们宣传的99.9% 的拦截率真有意义么?

我们在内部重新定义了两个指标:漏判率,即用户每在收件箱中看到100封邮件,其中多少是垃圾邮件;误判率,即用户每收到100封正常邮件,有多少封会误投入垃圾邮件夹中。

按李宏宇的说法,263的漏判率是3%,误判率没有说。他认为漏判率在5%-8%之间,用户是可以接受的。。。。我们最近做得还凑合,期望能达到263的漏判水准。

另外一个纯技术的是陈诗锋的讲演:“基于邮件列表的知识发现”。汉启据说是分成了两个公司,一个做EDM,一个做AntiSpam。一个现实,一个理想,祝愿他们能实现自己的目标。

最有意思的是 Tony 和 Jay,我觉得真可以用孟不离焦焦不离孟来形容这两人,以及其代表的公司 Epsilon、Web Power。我发现我开始喜欢上他们两个人了,不仅仅因为我也和他们一样戴黑框眼镜,哈哈

腾讯邮件是该会议/Panel的赞助单位,但是没有人上台讲话,真是低调啊。

总体来说,免费邮箱都很低调。

昨天我自个想了个词:全价值链竞争。今天我又想了个词:全业务线竞争。2010会是这样的吗?

Topic: 商业 技术

来搜狐三年了

邮件系统的技术改造也2年了。开始这项工作的时候,我的手头是6套邮件系统代码——或者说6套java application,6种部署模式,6套MX/SMTP/POP3;前端 apache 稍微好一些,只有2套;用户 lookup db 还分成了2个版本的代码和协议。底层存储结构很难支持高容量邮箱,也缺乏数据安全保护机制。更不要说所采用的基础软件 postfix/bdb/resin 等年代久远,充斥着几年来不断打入的patch。

但我们只有不到10个技术人员

经过2年的努力,除了产品看起来有了革命性的变化,新的技术架构也趋于完整,代码逐渐集成到少数版本上。

基础架构上还差两个重要的组件,总体完成度算是80%吧,到明年Q1应该能完成。

邮件系统代码的维护和部署目标是两套:个人邮件和企业邮件。sohu/chinaren/sogou/vip 的集成度已经达到 90%,今年个人邮箱能做到大一统。

2006年11月1日我进入搜狐的时候,怎么也想不到会在3年后冒雪站在箭扣长城,上身迅速脱光,换下汗湿的内衣,然后继续攀爬。

(感谢杨总给我留下的珍贵纪念,哈)

Topic: 生活

达达最近二三事

看到达达的数学练习里有这么一道题:把 1,2,3,4,5,6,7,8,9,10填入到下面的空里,使等式成立,每个数字必须填并且只能填一次。

( )-( ) = ( )-( ) = ( )-( ) = ( )-( ) = ( )-( )

我第一眼看到这题的下意识答案是 10-6=9-5=8-4=7-3=6-2=5-1.

隔了一天,我反应过来最简单的是 10-9=8-7=6-5=4-3=2-1

问过几个大人,第一反应都是上面的那个,俺们是怎么被训练出把简单问题复杂化的呢?

===============================================

昨晚冒雪爬山回来,路上和王小川说起这道题。他说他小学一年级的时候,还老把20和12弄混。我大喜,因为达达也经常犯这个迷糊,我激动的说,看起来她离清华又近了一步哈

===============================================

今早起床,邱可心很不高兴,因为昨晚牙仙子没来。

真是个粉红棉花糖里长大的孩子。她老爸老妈都觉得她应该意识到这世界上没有仙子了呢

===============================================

因为这道数学题她还是迷糊,今晚我决定给她好好讲讲等差数列....然后末了意犹未尽的出一个1,1,2,3,5,8,13,21,34,让她找规律.

俺在5年级的时候已经被视为数学神童了,还不知道Fibonacci呢,老师讲了以后也懵懵懂懂。不知道这样教小孩是否属于拔苗助长了....

===============================================

今天给我妈描述了一下solidot上看来的“祖母偏爱”理论,就是因为 X 染色体遗传,使得祖母本能上会喜欢孙女——因为孙女的 X 染色体 100% 的来源祖母。

逗我妈一乐

我现在在想是不是同理可证,男性关注家族的男丁繁衍

Topic: dada
订阅 RSS - qyb的博客