2011-10-13 22:13:32 阅读1175 评论0 132011/10 Oct13
世界 Python 爱好者的顶级盛会 —— PyCon 大会将首次在中国举办!本次大会由(Python 软件基金会下的)PyCon.Org 正式授权 GTUG、TopGeek、CPyUG 等社区联合举办,由 Python 作者 Guido van Rossum 及其所在的 Google 公司提供关键支持。
本次大会云集了国内外最为杰出的 Python 开发者,国内 Python 领域的领军人物几乎悉数到场、作为 Python 重镇的各大知名公司几乎无一缺席,所有嘉宾都承诺将自己压箱底的 Python 绝活呈现给大家!我也会在大会上进行题为《Python,通向未来之路》的纯技术演讲,欢迎捧场。
会议为期两天(12 月 3 日至 4 日),票价 60¥,全部用于会议期间的就餐费用,其余大会所有费用及礼品主要由 Google 等公司承担赞助。作为国内最大的赞助者之一,我们也同样很荣幸能够服务于广大中国 Python 爱好者。
2011-1-28 15:38:46 阅读4209 评论14 282011/01 Jan28
刚刚毕业、初出茅庐,有丰富把妹经验,无任何项目经验。
典型台词:“哇塞,薯熟你居然能写出这样这样酷的程序啊”。
此时身为薯熟的你切不可信以为真,因为任何简单的程序对他们来说 ……
其实都是写不出来的。
技能:hello world!
经验:0 年
角色:新手村游荡者(虽然 ID 很酷,但改变不了时常被怪虐的事实)
对于一些不太残忍的需求,竟已经能够完成了!了不起。
技能:面向对象、无脑肉搏
经验:1 年
角色:肉盾、坦克、血牛
公司终于可以放心地把一些 “没那么关键” 的项目扔给他了。
但遗憾的是,公司绝大部分的编码工作其实都 “没那么关键”。 这很容易理解,因为 “管理层“ 是不写代码的,高手则忙着折腾那几行关键代码。
兄弟!剩下的就全靠你啦。
在这个配合良好的团队中,身处一线承担 90% 的炮火,此时他们最需要的技能是 “吸引攻击” ……
“你每天编几个小时程序?能不能承受得起?”
“每天 77 小时,承受得起。”
—— 大家都露出了 YD 的笑容。
典型台词:“面向过程什么的最讨厌了”。
其他常用语:“瀑布模型什么的最讨厌了”。
高手很快从他们这些代码中闻到了坏味道,至于是 “不够面向” 或者 “不够工程” 导致的, 还是他们根本就没空清理代码,这是一个迷。
当然说句公道话,我们知道程序上线后能死撑多久,是和味道无关的。
赶时间随便凑起来的代码基本是稳定的,被自己恶心到于是下决心认真经营的那些代码一般会随机崩溃。
显然这只和人品相关。
对于一些不太残忍的需求,竟已经能够华丽丽地完成了!了不起。
对仍在 “新手村论坛” 上转悠的那些童鞋们,你简直就是神一样的存在。 别犹豫了,不是新手的坏家伙毕竟是少数,你的确就是神一样的存在。
“虽然我那几千行没有一行是实际做事情的,但是,架构很重要” 你说道,“你懂的”。
次日 ……
“虽然我那几千行是面向复用和好味道设计的,但是,重构很重要” 你说道,“所以我重写了”。
技能:设计模式、软件工程、ppt
经验:2 年
角色:TEAM LEADER
典型台词:“我们的目标是,木有一行重复代码”。
正如预想的那样,很不幸,战斗顺利演变为缠绵悱侧的恶斗。 大伙抬起头遥望天边如血的残阳,麻的,又要甲板。
是的,项目延期,再次地。
大家已经数不清曾经已经延期了多少项目。 但好像,项目保质保量按时完成的情况,就如同新闻联播中的传说,似乎从来没有出现过。
似乎 LEADER 再次给出了乐观得不行的预期,虽然工期是三个月,但是我们都知道没有三年是搞不掂这事的 —— 但更迫在眉睫的是公司会在三年内上市(虽然公司今年夏天才开张)。
如果不够乐观,这种不给力的感觉,届时老板会毫不犹豫地把这个部门裁掉,然后找一堆更便宜,并且更加乐观得不行的家伙把你们替换掉。
要知道网上无所不能,并且对现实工资非常不满的程序员遍地都是。面对这个残酷的现实,你必须乐观起来才行!
……
经过数年的延期,终于赶在公司上市前把项目搞定了,谢天谢地。 在万分危急的最后一刻,LEADER 再次 “重构” 了整个系统,团队终于逃出生天。
然而在一个阴暗的角落,是主程冷峻的目光,注视着高手们的代码。
“SUCKS!” 从他的牙缝中迸出几个字,轻蔑在他的嘴角蔓延。
技能:精通各种 MAGIC 和 HACK
经验:3 年
角色:法师
典型台词:“IE 的这个 BUG 只要用 IE 另外的一个 BUG 就可以解决了”。
你曾经不小心看到了主程的源码,这个文件充斥着大量注释为(也是唯一的一种注释)“HACK” 的代码,剩下的则全都是 MAGIC。 从此你就很后悔因为好奇打开了这个文件。
后来主程去了纳尼亚,你的朋友小明就奉命继续维护他的代码,这从一开始就是一个错误,其中一个 BUG 花了他将近两年的时间 —— 仍然没有搞定。 所以后来小明也去了纳尼亚。
幸运的是你接手了小明的工作,你试图说服公司,与其在主程的程序里调试,重新实现一遍要快得多。
公司冷酷的答复是,不行。这是公司宝贵的精神财富,是照耀所有员工不断前进的动力。 况且这些代码还 HARDCODE 了各种 8086 指令,来加速最新的 ARM,这让我们的竞争对手不寒而栗。
心灰意冷的你于是决定看破红尘,但是无名禅师的一番话让你幡然醒悟。于是你回到公司按主程的程序原样抄写了一遍
—— BUG 消失了。
技能:UNKNOW
经验:UNKNOW
角色:UNKNOW
传说在每一个挨踢公司里都有一个扫地大妈,会在某天经过你的身边,扫一眼代码淡淡地说 “小心,栈溢出了”……
2010-11-23 16:26:41 阅读756 评论1 232010/11 Nov23
2010-7-21 10:29:57 阅读1014 评论1 212010/07 July21
关于 cpython 线程能否充分用到 cpu 多核,相信很多人都做过这个测试。每个线程都起一个空循环,如果能把 cpu 多核全部占满,则说明已经用到多核。
这个实验很久以前做过,结果当然是只有一个 cpu 核心 100% 满载,其他核心无负荷。关于这个问题,似乎早有定论,由于 GIL 的存在 python 多线程是无法充分使用多核的。
最近又就此做了下测试,忽然发现机器上的双核都用完了。而且在 cpython2.5.5、cpython2.6.4、cpython2.7、unladen swallow q3、pypy-jit1.3 上普遍如此。
AMD Athlon(tm) Dual Core Processor 5000B
#37-Ubuntu SMP Fri Jun 11 08:03:28 UTC 2010
关于这件事,我在 python-cn 论坛上发了个贴。不多时,zoomq 说的洗具发生了,在其他机器上也得到了相同的结果。
由 Zoom Quiet 提交
Intel(R) Core(TM)2 Duo CPU P8600 @ 2.40GHz
ubuntu 10.04 i686
由 GKermit 提交
i5 430M 2.26Hz, 1066 MHz FSB
ubuntu 10.04
这意味着至少在一些情况下 python 线程是可以使用多核的。
在这种简单情况下,只能用到单核。并且单线程完成的循环数要高于多线程的总循环数,性能更好。
幻觉,一切都是幻觉。空循环只是个特例,大家洗洗睡吧 ……
2010-7-13 10:53:15 阅读1867 评论2 132010/07 July13
其实这篇文章应该叫 “在 64位 linux 上使用 32位程序”。事实上在开源世界,代码都是可以跨平台编译的,这种愿望并不很强烈。而 pypy-jit 是一个例外。
这里提供一种在 64位平台上运行 pypy-jit 的思路。chroot 是一种比较简单的方法,不太熟悉 chroot 的朋友可以按照这篇文章进行部署。
首先使用 debootstrap 建立 ia32 root。这里使用了 163 lucid 的仓库。
这需要一定时间。然后复制一些需要的文件到 ia32 root,这里也复制了一些用户文件,这样你就可以在 32位系统上使用当前主机上的帐号了。
在 32 位系统上挂接一些需要的目录,然后 chroot 到 32位系统,进行更新。
你现在已经以 root 身份进入了 32位系统,安装 pypy 需要的 libexpat1 包。然后下载一个 pypy-jit 的预编译包放到 opt 目录下。
现在退出 32位系统。
为方便在 64位主机上直接调用这个 32位的 pypy-jit 程序下面进行一些配置。
编辑 schroot.conf 的内容如下。
建立 32位 pypy-jit 的 “快捷方式”。
编辑文件内容如下。
尝试执行 pypy-jit 。
种种迹象表明 pypy 很快将获得进入生产领域的足够能力,对常规公司而言确实如此。而很多充满信心的技术人员则在生产环境中使用 pypy 这一族技术已经很久了。我相信 pypy-jit 登陆 64位平台已可预期,在不远的将来。而在此之前,即便是 64位的服务器,我们也已经迫不及待地准备在项目中尝试 pypy-jit 了。
参考资料 Ubuntu AMD64 Howto
2010-4-2 10:54:39 阅读2274 评论6 22010/04 Apr2
前段时间和朋友提到 javas
使用 for…in 遍历数组的方法。
目前一切都还正常。但试着加上一行代码,就会有变化。
看上去给 array 加上一个 xxx 明显是一件极其 silly 的事情。但是想一下很久之前 IE 中的 array 是没有 push 方法的,那时我们经常会用这种方法给 IE 加上 push。
这样看来顺理成章,for…in 不能用了。
如果再考虑到低版本的 IE 不支持 push,早期 “安全” 的 javas
没有经历过那个时代的朋友乍一看到,不禁会问,这,这是什么情况?
—— 这确实是太糟糕了。
异曲同工之妙,string 也是可以 for…in 遍历的。
杯具的是,给 string 加 strip 之类的方法也是很常见的。这样才是最 “面向对象” 的扩展方式,不是吗?
当然最抱歉的写法应该是 “ Object.prototype.xxx = XXX ” 了。
使用 javas
我以前说过,对于成熟的 library / framework 开发者来说,接口过多和接口太少,其实就是一码事。
特性越多,功能越少,“ for…in vs prototype ” 这是一个典型例子。
2010-3-12 10:37:29 阅读895 评论2 122010/03 Mar12
2010-3-4 16:21:17 阅读1090 评论3 42010/03 Mar4
接触 vi 也有十多年了。这里也试着聊下 vi 编辑器快速上手的方法,对刚开始准备使用 vi 的朋友可能会有点帮助,高手就不用看了。
方法很简单,去用,就很快会了。当然 vi 的操作确实比较繁多,不知怎么下手。我这里提炼出一些常用的,一丁点内容,保守用两天来熟悉。不用怀疑,对于所有编辑任务确实已经够用了。既然这样,读完后,马上就开始用,去用,就很快会了。
vi 主要是两种模式,按 Esc 键进入指令模式(常见有人会狂按 Esc 直至电脑喇叭发出哔哔声以确认进入指令模式),按 i 键(insert)进入输入模式(可以输入东西编辑文件了)。
开始时默认进入的是指令模式:
用 h(左)j(上)k(下)l(右)移动光标。Ctrl+f 向下翻页,Ctrl+b 向上翻页。
i 键插入当前光标位置,或 a 键在光标后插入。同时进入输入模式,进行编辑,按 Esc 键再返回命令模式。
x 删除当前字符,dd(按两次 d)删除(剪切)当前行。
u(undo)撤销。
保存文件:
在指令模式中(最不用动脑筋的办法是乱按一通 Esc 可以保证从编辑模式进入指令模式)按“:”键(冒号)可以进入 vi 的末行模式,退出末行模式回到命令模式只要按退格键删除“:”字符即可。
输入 :wq(回车)即是保存退出。:w 保存不退出。:q! 退出不保存。
以上内容,花一天熟悉。浏览文件,做点简单编辑已经足够了。注意不要用小键盘,比如上下左右这些,否则就很难学会 vi 了。在 vi 里手不会离开大键盘,用不了多久这些指令就会条件反射,编辑效率比较高。
下面是相对不太常用的:
o 在当前行后插入一行,O 在当前行前插入一行。和 i、a 一样,同时进入输入模式。
数字键 0 跳到行首,$ 跳到行尾。
Shift+j 将当前行和下一行合并成一行。
Ndd 剪切 N 行(N 是一个数字)。
yy 复制当前行。Nyy 复制 N(N 是一个数字)行。按 p 键粘贴。
:N 跳到第 N 行。直接打 N 跳到当前行后的第 N 行。N 可以是负数。
在命令模式下输入 /word(回车)来在文件中搜索字符 word。按 n(next)跳到下一个搜索到的字符。
使用“:s/被替换字符/替换字符/g”这行命令来进行搜索替换。比如“:s/^M//g”是把 windows 文件的行尾 ^M 删除掉。其中“^M”的输入方法是按住 Ctrl+v,然后保持 Ctrl 并放掉 v 键,再按 M。
这就开始使用 vi 吧。
主题无关,这里聊些其他的。其实很多貌似常用的指令我都没有写,比如 X 删除,sS 替换等等,我觉得刚开始用记那么多负担太重。况且 s 我经常用打个 x 再打个 i 效果一样。
记这么点东西我觉得够了。用熟练了,再找资料学更多方便编辑的命令和配置方法。一口气吃不成胖子。我自己比较特别,用 vi 写代码是不用自动补齐和自动缩进的。拿自动缩进来说,不喜欢在文件里有我不知道的空格悬挂在那里。也不显示行号,甚至不用代码着色。这样代码稍微冗长一点,稍微混乱一点,读起来麻烦,视觉上马上就警惕了。帮助我避免写出烂代码(当然也有会觉得程序越长越复杂越牛逼的,人都有不同,各取所好吧)。所以 ssh 到其他管理员配置的服务器上,我有时会把那些对我没用,看着麻烦的配置都还原掉。因为对我来说没那么多复杂的东西,可视模式啊,分屏什么的,基本没用,所以也没写。文中的东西够我所有日常应用了,理论上,对我来说不需要 vim,给个 vi 就够了。
vi 是神器,即便 emacs 或者其他玩家,简单了解下也是要的。less 命令或者看 man 手册,甚至 python 的 help() 函数用的到处都是 vi 指令。
另外,遇到 vi 编辑中非正常退出的文件(被锁),ls -a 一下把 .swp 文件删了就可以了。差点忘了,编辑系统文件用 sudo vi,除非在 /root 下生成一堆 X 配置文件你觉得无所谓,那么用 gedit 之类的 gui 编辑器也无所谓。