最近的生活

好久不写博客了,冒一篇出来。

清明去了躺上海->乌镇->杭州->千岛湖,基本是走马观花,行程安排比较紧凑,照了很多照片,和兄弟们玩的也很高兴。到上海城隍庙吃没事、东方明珠观夜景、外滩吹风看美女,还有上海同学的盛情款待,最后王森还和我们一起去了乌镇,结果大半夜没找到住的地方,一路上各种趣闻、各种搞笑。这次旅行影响比较深刻的就是,乌镇的清晨和夜晚,漫步在流水小桥之上,远处随风飘来轻松的音乐,让人感觉来到另外一个世界。人总是向往没有得到的东西,没有得到的生活状态。在杭州只有去了西湖周围转了一圈,还去了一个比较好的购物街。然后匆匆茫茫去了千岛湖,在千岛湖也没出去好好转,主要是在开party、做饭了,最后一天去了红夜湾爬山。很庆幸搭上了河北廊坊师范的旅游写生车队,给我们节省了时间。 回北京之前张明硕和小郭请我们吃的湘菜,我专门叮嘱小康同学,一要减肥,二不要太宅。

这里是一些照片: http://photo.renren.com/photo/ap/LyZTL09X1y

好朋友立丽和于乐结婚了,韩非同学回西安工作了。来北京第一站就是和韩非一起合租的,他离开了,我还要继续战斗!好多同学都回西安安家、工作、生活了,不知道自己还能坚持多久~~~@~~

最近工作上,还在研究一些东东,PCI、多队列IO,争取多参与社区、发些补丁。然后就是多和我的导师MST等交流!

今天订好了11月去欧洲的机票(11.3 北京->巴黎->巴塞罗那,11.5 巴黎->北京),参加今年的 KVM Forum还有公司内部会议。对比了很多网站,最后还是打电话到法国航空公司订的,7765RMB,比其他网站订贵100百多块钱,但更靠谱。目前准备花5天时间去柏林和巴黎玩。下面几个月,好好练练英语,还有就是积累技术,希望能比去年交流效果更好些。

个人小站5周岁了

前两天网站不能访问了,我还以为是近期的DNS黑客攻击造成的,后来发现是空间到期了,需要续费。

2007年建立了kongove.cn这个网站,后来换成amosk.info这个域名,博客一直在断断续续的写着,掐指一算已经5周岁了。有时候翻看以前的文章,感觉很好笑,不知道自己当时是怎么想的,会有那么偏激的观点。也为曾经自己对技术的狂热,感到自豪。

现在看书写东西比以前要多很多,可是慢慢都转到地下工作了,直接写在本地。可能是现在的生活变得复杂,有些想法怕放在博客被人嘲笑。即便时在虚拟的空间,面对大众、面对真是的自己也是需要勇气的。

不管怎么样,以后还是会多写博客,技术生活都会写。

深刻检讨 —— 《我是你爸爸》

在线电影: http://www.tudou.com/programs/view/UkQTu8ao1sg/  (14:25)

我这样做不是偶然的,是自己一贯不注意思想改造,忽视了自身的精神文明建设,不能自觉抵制资产阶级思想的侵袭,个人主义恶性膨胀,所导致的必然结果,后果是严重的,不但破坏了正常的教学秩序,也伤害了辛勤培育我们的刘老师,和广大教职员工,家长,领导以及全社会所有对我们寄予殷切期望的千千万万的工人,农民,知识分子,和解放军们的感情,教训是深刻的,也是沉痛的,发人深省的,我要对自己大喝一声:”马车同学,你危险了!”

——《我是你爸爸》

[转] 无题

2012.2.13 From QQ Zone

懂你的人,会用你所需要的方式去爱你。不懂你的人,会用他所需要的方式去爱你。于是,懂你的人,常是事半功倍,他爱得自如,你受得幸福。不懂你的人,常是事倍功半,他爱得吃力,你受得辛苦。两个人的世界里,懂比爱,更难做到

让女人念念不忘的是感情, 让男人念念不忘的是感觉。感情随着时间沉淀,感觉随着时间消失。终其是不同的物种,所以,谁又能明白谁的深爱 ,谁又能理解谁的离开

人之立,要敢于面对,苦不暴弃,难不嫉俗;要奋勇向前,挫不止步,败不低头;要摆正心态,得不窃喜,失不悲鸣;要埋身寂寞,孤不抑郁,独不自怜;要常修己身,错不欺人,迷不失途;要承受压力,塌不溃退,崩不改色;要潜心思索,功不居高,成不显耀;要足够自信,进不旁顾,退不犹豫。

忘记那个人,不如忘记自己,告诉自己,不是怕他忘记,而是怕他有一天重新把你想起。岁月带走的是记忆,但回忆会越来越清晰。真的有一天,他回过头来告诉你,他一直在惦记你,千万不要相信,因为,他已经不是原来的他,而你,也不再是过去的你。

谁来拯救云计算 – 康华

—   云计算的技术路线探讨  BY 康华  from: http://blog.csdn.net/kanghua/article/details/7232191

 

引言

当前的“云计算”一词已经被神话,似乎快成了放之四海皆准的时髦真理,就好比当初言必称“希腊”一般,表面光芒四射,但实际上却无比教条、且越来越令人生厌。

作为“云计算”的一个普通开发者和是推广者,很有必要通过亲身实践,以正视听,希望能让后来者(云计算系统的开发者)少走弯路——有所为、有所不为。

 

前言

我们所要谈论的不是商业领袖们所热衷的云计算概念、云计算市场,而是讨论技术人员眼中云计算具体形态和切实的实现办法。

我们将从需求分析入手、进而讨论设计理念、再具体化到子系统设计和实现中存在的难点问题、最后谈谈云计算对外服务的技术选择。其中有些观点属于业界共识,也不少属于个人看法——难免有所偏颇——真诚欢迎从事云计算开发的朋友积极讨论和批评。

本文试图回答这么几么几问题:

1. 技术人员理想的云计算是什么。

2. 理想和现实的鸿沟是什么。

3. 云计算到底需要什么样的基础架构。

4. 云计算基础架构可能的组成部分。

5. 虚拟机和App engine等云计算的关系。

Read more »

oVirt project: Workshop – Beijing – March 21st

From: http://www.ovirt.org/news-and-events/workshop/

Workshop – Beijing – March 21st

To RSVP please email to rsvp@oVirt.org .

During this workshop you’ll learn about the technical background and direction
of the project. You’ll meet the developers, and have an opportunity to use –
yes our first release will be out – and hack on the code right away.

The workshop meeting March 21st, at the IBM Campus and is open to all who want
to use, get involved or learn about the comprehensive open virtualization
management platform. The sessions will cover the technical projects details,
governance, getting involved, usage and much more.

If you have any interest in an Open Virtualization Management platform you need
to be there!

Logistics

When: March 21st, 2012
Location: IBM Campus – Beijing — specific room and will be provided to rsvp
list
Social: Evening March 21st, 2012 — Location To be announced
Coordinators:

  • Karsten Wade kwade@redhat.com

Workshop agenda

This is the final agenda; will be posted here

代码托管服务GitCafe正式上线 — ghosTM55

GitCafe是什么?

GitCafe将以代码托管为核心业务,提供一系列优质前沿的服务来帮助到中国IT领域的开发者、项目以及企业更好地学习与成长。

Git是目前世界上最流行最优秀的项目版本控制系统之一,Cafe的意思为咖啡馆,象征着程序员文化。在GitCafe这个平台上,开发者可以轻松的在线协作共同开发出一个又一个开源或者私有项目。通过GitCafe,开发项目的控制与团队管理将变得方便与有效。

在GitCafe的网站以及团队,我希望每一个用户和员工都能感受到浓厚纯正的黑客精神与文化,发现和理解计算机技术的真正魅力与潜力,激励每一位中国的开发者去开发出更多更有趣的东西。

今天,GitCafe正式上线内测,地址是gitcafe.com,目前需要邀请码才能够注册使用。

现在,你可以在Twitter以及Weibo上关注我们,获取我们的第一手信息。

为什么会有GitCafe?

在2011年年初,一家做开源操作系统与服务的国企找到我希望我能够为他们提供一些解决方案,来帮助到他们的开源项目更好地在国内的技术社区得到推广以及获得更多用户、开发者的反馈。那已经不是第一次有创业团队、企业找到我希望我帮助他们解决这样的问题,于是我开始认真地思考这个问题,试图找到一个不错的解决方案。

当时我带着SHLUG的一群朋友来到杭州参加支持HZLUG的第一次线下聚会,晚上住在宾馆里讨论到这个问题的时候,有朋友突然提到说国内还没有好的代码托管服务。我很快地发现这件事情的确需要去做,并且有很多必要性,同时能够很大程度地帮助国内在开源道路上探索地团队和企业更好地去扩展他们的业务,于是我开始筹备这个项目的启动。

新的想法与动力

2011上半年很不容易,第一次正式踏上创业的旅途的确遇到了很多几乎不可控的问题。推掉了月薪过万的工作邀请,遇到重重艰辛后,我还是坚持要做出一个能够帮助到国内热衷于开源事业的技术团队以及企业的服务平台。在项目开始的一段时间,正好有不少学校、企业以及活动找我去演讲,我见缝插针地表达了一些我不满的现状以及如何尝试解决这些问题的想法,但并没有告诉任何人我已经开始在做代码托管服务。在去全国各地交流的过程中,我得到了一些新的想法与动力。

在2011年我所做的众多演讲中,大多数都是在高校,面向那里的计算机系学生,其中感触最大的一次是在一所中国排名前10的高校里。我对着一群国内最聪明的大学生讲了一些大开他们眼界的东西后,回答了将近1小时的问题,大多数问题都非常基础,类似于我现在进了这么好的一个学校和专业,但是并不知道自己在学的东西应该怎么学好,该看哪些书,以后的路是怎样的。我一一作答,但是感觉这不是好的正确的解决问题的方法,我不可能一直到处演讲来解答各种学生和初学者的问题。

回去之后,我想到我的项目同样可以帮助到这些在学校对计算机技术有着兴趣却感觉无从下手的学生们,他们需要更多有意思的项目来学习和锻炼自己的开发能力,而不只是在学校里拿着各类新教的语言做着各种可怜的小学生数学题。通过GitCafe,我们会使用多种方法来调动学生以及初学者的积极性,鼓励他们参与到各类有意思的开源或者商业项目中。对于学生以及商业机构,都将是互惠互利的好事。

每当想到自己有机会实现这些美好的事情,就有着无穷的动力让我坚持着把GitCafe继续做下去,做到最好。

GitCafe团队

我需要最优秀的人帮助我一起做好GitCafe的开发,并且一起经营好它。我私下找到了Rainux Luo,Crazycode,Riku Lu等我非常认可的朋友详细说明了我做GitCafe的意图和想法,得到了他们的巨大支持。我很高兴有这些优秀的朋友来帮助我一起实现GitCafe。经过几个月的磨合,现在团队日趋成熟。

现在,我还需要全职的前端工程师以及Rubyist各一名,如果你有兴趣参与到我们这个创业项目以及团队中来,欢迎发送邮件到ghosTM55[at]GitCafe.com向我简单介绍一下你自己,我们的工作室在上海市静安区,地理位置与工作环境都极佳。

我们的愿景

GitCafe的出现不是为了要和GitHub竞争,而是为了解决我之前所述的一些我认为非常严重的问题,这些问题是GitHub不关注也是做不到的。这就是我们的愿景,解决国内IT行业以及IT教育领域的诸多问题。因此,GitCafe也会做更多的事情,代码托管将只会是我们的核心业务之一。

谢谢。

ghosTM55 2012年1月1日, 上海

网络性能测试

我主要做的是Virtual IO, PCI, Network 这几块,提高虚拟机的IO性能。网络性能主要使用netperf,iperf,Ntttcp(win),需要统计吞吐率,CPU利用率,收发包数目,收发字节数,注入中断,IO_exit 等。需要多次测试,调整测试时间,计算平均值,并求标准方差,看看同样环境结果是否稳定,从而确定一些经验值(合理的测试次数,单个测试执行时间等)。

然后对打Patch前后版本的平均值进行比较,评估是否有性能回归bug。顺便给大家推荐一本书[1],大学学的概率论、高数基本都还给老师了,所以还得重新看资料复习。

发程序到社区的时候碰到一个版权问题,NTttcp,微软禁止其他人传播,所以只能提示用户自己去官网下载。我的程序里使用AutoIT脚本自动签订了最终用户许可协议(EULA End User License Agreement),然后在文档、程序、commitlog 里提示如果不同意此协议不要使用此脚本。不清楚是否合法,所以发邮件给内部法律部门咨询了。所以离开自由软件世界是很麻烦的,哈哈。

【1】The Art of Computer Systems Performance Analysis, Raj Jain, 1991.

== average ==
   TCP_STREAM
    size|sessions|throughput|   cpu|normalize|  #tx-pkts|  #rx-pkts|    #tx-byts|    #rx-byts|#re-trans|#tx-intr|#rx-intr|  #io_exit|  #irq_inj|#tpkt/#exit|#rpkt/#irq
     256|       1|   1308.58| 25.68|   610.36|   1144659|   2385825|    75548090|  3428969637|        0|      17| 1055042|    847930|   1073171|       1.35|      2.22
%SD  0.0|     0.0|       0.6| 135.4|    135.4|       0.7|       0.5|         0.7|         0.6|      0.0|     0.0|     0.2|       0.6|       0.2|        0.0|       0.6
     256|       2|   2303.88| 75.86|    30.37|    751786|   3710773|    49625523|  6004979651|        0|      12|  761053|    237602|    807396|       3.17|      4.59
%SD  0.0|     0.0|       2.8|   1.7|      1.0|       2.2|       0.2|         2.2|         2.7|      0.0|     0.0|     0.2|       4.9|       0.1|        2.7|       0.2
     512|       1|   1597.22| 51.31|    31.12|   1344860|   2840991|    88761368|  4181982870|        0|      20|  933259|    691258|    951026|       1.94|      2.99
%SD  0.0|     0.0|       1.9|   1.1|      0.8|       2.9|       1.9|         2.9|         1.8|      0.0|     3.4|     0.3|       2.8|       0.3|        0.4|       1.7
     512|       2|   4885.64| 69.81|    68.28|   1546820|   3311501|   102158968| 12433545874|        0|      27| 1036179|    649578|   1063091|       8.02|      2.97
%SD  0.0|     0.0|      49.4|  37.3|     13.4|     111.0|     101.0|       110.9|        46.8|      0.0|    78.6|    97.2|     136.2|      95.6|      103.2|      10.5
   TCP_RR
    size|sessions|throughput|   cpu|normalize|  #tx-pkts|  #rx-pkts|    #tx-byts|    #rx-byts|#re-trans|#tx-intr|#rx-intr|  #io_exit|  #irq_inj|#tpkt/#exit|#rpkt/#irq
     256|      50|  14433.24| 22.19|   650.52|    288679|    288765|    92951906|    92969020|        0|       4|  288733|    288781|    295057|       1.00|      0.98
%SD  0.0|     0.0|       0.8|   1.2|      2.1|       0.8|       0.8|         0.8|         0.8|      0.0|     0.0|     0.9|       0.8|       1.0|        0.0|       0.0
     256|     100|  14473.61| 22.01|   657.84|    289486|    289595|    93211760|    93224643|        0|       5|  289551|    289594|    295647|       1.00|      0.98
%SD  0.0|     0.0|       0.4|   1.9|      1.5|       0.4|       0.4|         0.4|         0.4|      0.0|     0.0|     0.4|       0.4|       0.5|        0.0|       0.0
     512|      50|  14399.08| 22.79|   631.82|    287996|    288063|   166455616|   166464572|        0|       4|  288036|    288100|    293729|       1.00|      0.98
%SD  0.0|     0.0|       0.2|   0.2|      0.5|       0.2|       0.2|         0.2|         0.2|      0.0|     0.0|     0.2|       0.2|       0.2|        0.0|       0.0
     512|     100|  14280.03| 22.11|   646.46|    285614|    285684|   165079121|   165087633|        0|       5|  285652|    285721|    291826|       1.00|      0.98
%SD  0.0|     0.0|       0.6|   4.0|      4.6|       0.6|       0.6|         0.6|         0.6|      0.0|     0.0|     0.6|       0.6|       0.8|        0.0|       0.0

== average ==
   TCP_STREAM
    size|sessions|throughput|   cpu|normalize|  #tx-pkts|  #rx-pkts|    #tx-byts|    #rx-byts|#re-trans|#tx-intr|#rx-intr|  #io_exit|  #irq_inj|#tpkt/#exit|#rpkt/#irq
     256|       1|   1266.19| 50.80|    24.93|   1119642|   2307593|    73896989|  3317818482|        0|      16| 1012795|    774796|   1030026|       1.44|      2.24
%SD  0.0|     0.0|       3.4|   0.4|      3.8|       2.4|       3.2|         2.4|         3.4|      0.0|     4.3|     3.0|       7.0|       3.0|        4.4|       0.0
     256|       2|   2305.26| 75.81|    30.41|    754533|   3678855|    49804148|  6006610984|        0|      12|  788165|    254245|    835001|       2.98|      4.41
%SD  0.0|     0.0|       0.7|   1.7|      2.4|       7.9|       0.5|         7.9|         0.7|      0.0|    11.8|     6.1|      14.2|       5.7|        6.2|       5.1
     512|       1|   1605.72| 51.13|    31.40|   1337269|   2851899|    88260371|  4202588460|        0|      20|  925052|    699349|    942828|       1.91|      3.02
%SD  0.0|     0.0|       0.9|   0.5|      1.4|       2.1|       0.7|         2.1|         0.9|      0.0|     0.0|     1.2|       2.5|       1.2|        4.4|       0.7
     512|       2|   6122.82| 86.66|    70.66|    381147|   1442374|    25249126| 15405306185|        0|       8|  349795|     23027|    372068|      16.57|      3.87
%SD  0.0|     0.0|       2.5|   0.9|      3.4|       5.4|      11.8|         5.4|         2.4|      0.0|     8.3|     5.6|       3.2|       4.8|        8.5|       6.9
   TCP_RR
    size|sessions|throughput|   cpu|normalize|  #tx-pkts|  #rx-pkts|    #tx-byts|    #rx-byts|#re-trans|#tx-intr|#rx-intr|  #io_exit|  #irq_inj|#tpkt/#exit|#rpkt/#irq
     256|      50|  14515.94| 22.20|   653.98|    290333|    290423|    93484515|    93499043|        0|       4|  290387|    290436|    296923|       1.00|      0.98
%SD  0.0|     0.0|       0.5|   1.6|      2.1|       0.5|       0.5|         0.5|         0.5|      0.0|     0.0|     0.5|       0.5|       0.4|        0.0|       0.0
     256|     100|  14500.78| 21.99|   659.32|    290030|    290113|    93386788|    93396614|        0|       4|  290076|    290140|    295853|       1.00|      0.98
%SD  0.0|     0.0|       0.5|   1.4|      0.9|       0.5|       0.5|         0.5|         0.5|      0.0|    15.7|     0.5|       0.5|       0.7|        0.0|       0.0
     512|      50|  14257.76| 23.48|   607.39|    285169|    285244|   164821878|   164832698|        0|       4|  285219|    285269|    291469|       1.00|      0.98
%SD  0.0|     0.0|       0.9|   1.6|      0.7|       0.9|       0.9|         0.9|         0.9|      0.0|    15.7|     0.9|       0.9|       0.9|        0.0|       0.0
     512|     100|  14338.74| 22.66|   632.92|    286789|    286853|   165757982|   165765159|        0|       4|  286828|    286893|    292733|       1.00|      0.98
%SD  0.0|     0.0|       0.0|   0.1|      0.1|       0.0|       0.0|         0.0|         0.0|      0.0|    15.7|     0.0|       0.0|       0.1|        0.0|       0.0

Thu Dec 29 20:36:53 2011
========================================================================================================================================================================
   TCP_STREAM
    size|sessions|throughput|   cpu|normalize|  #tx-pkts|  #rx-pkts|    #tx-byts|    #rx-byts|#re-trans|#tx-intr|#rx-intr|  #io_exit|  #irq_inj|#tpkt/#exit|#rpkt/#irq
1)   256|       1|   1308.58| 25.68|   610.36|   1144659|   2385825|    75548090|  3428969637|        0|      17| 1055042|    847930|   1073171|       1.35|      2.22
2)   256|       1|   1266.19| 50.80|    24.93|   1119642|   2307593|    73896989|  3317818482|        0|      16| 1012795|    774796|   1030026|       1.44|      2.24
%       |    +0.0|      -3.2| +97.8|    -95.9|      -2.2|      -3.3|        -2.2|        -3.2|     +0.0|    -5.9|    -4.0|      -8.6|      -4.0|       +6.7|      +0.9
1)   256|       2|   2303.88| 75.86|    30.37|    751786|   3710773|    49625523|  6004979651|        0|      12|  761053|    237602|    807396|       3.17|      4.59
2)   256|       2|   2305.26| 75.81|    30.41|    754533|   3678855|    49804148|  6006610984|        0|      12|  788165|    254245|    835001|       2.98|      4.41
%       |    +0.0|      +0.1|  -0.1|     +0.1|      +0.4|      -0.9|        +0.4|        +0.0|     +0.0|    +0.0|    +3.6|      +7.0|      +3.4|       -6.0|      -3.9
1)   512|       1|   1597.22| 51.31|    31.12|   1344860|   2840991|    88761368|  4181982870|        0|      20|  933259|    691258|    951026|       1.94|      2.99
2)   512|       1|   1605.72| 51.13|    31.40|   1337269|   2851899|    88260371|  4202588460|        0|      20|  925052|    699349|    942828|       1.91|      3.02
%       |    +0.0|      +0.5|  -0.4|     +0.9|      -0.6|      +0.4|        -0.6|        +0.5|     +0.0|    +0.0|    -0.9|      +1.2|      -0.9|       -1.5|      +1.0
1)   512|       2|   4885.64| 69.81|    68.28|   1546820|   3311501|   102158968| 12433545874|        0|      27| 1036179|    649578|   1063091|       8.02|      2.97
2)   512|       2|   6122.82| 86.66|    70.66|    381147|   1442374|    25249126| 15405306185|        0|       8|  349795|     23027|    372068|      16.57|      3.87
%       |    +0.0|     +25.3| +24.1|     +3.5|     -75.4|     -56.4|       -75.3|       +23.9|     +0.0|   -70.4|   -66.2|     -96.5|     -65.0|     +106.6|     +30.3
   TCP_RR
    size|sessions|throughput|   cpu|normalize|  #tx-pkts|  #rx-pkts|    #tx-byts|    #rx-byts|#re-trans|#tx-intr|#rx-intr|  #io_exit|  #irq_inj|#tpkt/#exit|#rpkt/#irq
1)   256|      50|  14433.24| 22.19|   650.52|    288679|    288765|    92951906|    92969020|        0|       4|  288733|    288781|    295057|       1.00|      0.98
2)   256|      50|  14515.94| 22.20|   653.98|    290333|    290423|    93484515|    93499043|        0|       4|  290387|    290436|    296923|       1.00|      0.98
%       |    +0.0|      +0.6|  +0.0|     +0.5|      +0.6|      +0.6|        +0.6|        +0.6|     +0.0|    +0.0|    +0.6|      +0.6|      +0.6|       +0.0|      +0.0
1)   256|     100|  14473.61| 22.01|   657.84|    289486|    289595|    93211760|    93224643|        0|       5|  289551|    289594|    295647|       1.00|      0.98
2)   256|     100|  14500.78| 21.99|   659.32|    290030|    290113|    93386788|    93396614|        0|       4|  290076|    290140|    295853|       1.00|      0.98
%       |    +0.0|      +0.2|  -0.1|     +0.2|      +0.2|      +0.2|        +0.2|        +0.2|     +0.0|   -20.0|    +0.2|      +0.2|      +0.1|       +0.0|      +0.0
1)   512|      50|  14399.08| 22.79|   631.82|    287996|    288063|   166455616|   166464572|        0|       4|  288036|    288100|    293729|       1.00|      0.98
2)   512|      50|  14257.76| 23.48|   607.39|    285169|    285244|   164821878|   164832698|        0|       4|  285219|    285269|    291469|       1.00|      0.98
%       |    +0.0|      -1.0|  +3.0|     -3.9|      -1.0|      -1.0|        -1.0|        -1.0|     +0.0|    +0.0|    -1.0|      -1.0|      -0.8|       +0.0|      +0.0
1)   512|     100|  14280.03| 22.11|   646.46|    285614|    285684|   165079121|   165087633|        0|       5|  285652|    285721|    291826|       1.00|      0.98
2)   512|     100|  14338.74| 22.66|   632.92|    286789|    286853|   165757982|   165765159|        0|       4|  286828|    286893|    292733|       1.00|      0.98
%       |    +0.0|      +0.4|  +2.5|     -2.1|      +0.4|      +0.4|        +0.4|        +0.4|     +0.0|   -20.0|    +0.4|      +0.4|      +0.3|       +0.0|      +0.0

快速使用PIL转换照片生成预览网页

我们常常用很多照片,需要快速通过http服务器分享,下面这个脚本,用PIL(python image library)转换固定大小的缩略图,并生成一个简易的html文件,附带的链接可以用于点击察看大图片。递归目录、其他格式什么懒的支持了,这个够用了 :-)

$ cat resize.py

import os, Image
# Resize jpg files in current directory, and generate an html file to 
# present pictures in a light way.
# $ cd picture-dir/
# $ python resize.py
# $ firefox index.html
 
def resize(filename, width = 512):
    img = Image.open(filename)
    size = img.size
    new = img.resize((width, width * size[1] / size[0]))
    new.save(".%s" % filename)
 
f = open("index.html", "w")
f.write("<center><big>Click to review big pictures</big></center>")
files = os.listdir(".")
files.sort()
for i in files:
    if (i[-4:]==".JPG" or i[-4:]==".jpg") and i[0:1]!='.':
        resize(i, 200)
        f.write("<a href=%s><img src=.%s></a>\n" % (i, i))
        f.flush()
f.close()

/blog/wp-content/uploads/resize-pic-script.png

平谷区一日游

pinggu-guajiayu.jpg

平谷挂甲峪村: 采摘+爬山
pinggu

水溶洞
pinggu