在8月份最近的一次SciPy盛会上,python的创造者,Guido van Rossum发表了一个keynote演说,宣称Django是其最喜欢的web开发框架。
后来,Rossum在给eWEEK的一封电子邮件中说:"I was pressed to pick one framework—which I think is actually a silly thing—and I reconfirmed my preference for Django." (呵呵,很有意思)
What Van Rossum says he meant by the pronouncement at SciPy is, "Simply that if I were to need a Web framework today, I'd use Django unless it was clear that Django isn't right for the task.
当然Rossum作为python教父,一举一动都受到广大人民的严密监视,他在迫于压力的情况下做了选择,不过为了不得罪非Django势力,立刻作了解释为什么选择Django。
"I don't do a lot of Web programming, and the Web programming that I do isn't very complex, so I'm not sure that my vote should count very strongly," he added. "But people keep asking me to pick one, and I like Django because I like the way its authors run their project: They really 'get' open-source development."
接下来Django的各位开发者粉墨登场,纷纷表达对教主垂青的感慨。
Of Van Rossum's pronouncement, Jacob Kaplan-Moss, one of Django's core developers, said in a blog post: "Obviously this makes me pretty damn happy. I'm sure this will help people trying to choose a Web framework to come to Django, and I think they'll like what they find. Personally, I think Django's the best tool to develop Web sites—but of course I think that."
Holovaty said he and the core group of Django developers "chose Python because we'd fallen in love with its beauty, elegant syntax and power. Python is like poetry."
The plan for Django is to continue improving it, with its worldwide community of users and developers, Holovaty said.
"Our goal is to solve the real-world problems that Web developers face every day, and to make it fun to build Web sites," he said. "We're hoping to reach Version 1.0 toward the end of the summer, and we're working on a Django book to be released in the fall."
和Ruby On Rails比怎么样?Holovaty吹嘘说,Django的抽象层次比较高。(当然,仁者见仁,智者见智)
And while Django can be compared to frameworks like Ruby on Rails and other Python Web frameworks, "something that makes Django different from similar projects—such as Ruby on Rails—is our interest in abstracting things to a very high level, automating large chunks of Web development," Holovaty said.
显然,admin这个feature在不同场合被不同人士经常强调,看来是人心所向。
For example, Django can automatically create an "administration" Web site, saving developers days to weeks of mundane development, Holovaty said. "We've got some other examples of high-level automation coming down the road, within the next few weeks."
In addition to being a boost on the development side of things, Django is also quite scalable, Holovaty said. Django is designed to take advantage of as much hardware as you can throw at it, he said.
Moreover, Django "uses a 'shared-nothing' architecture, which means you can add hardware at any level—database servers, caching servers or Web application servers," said an FAQ on the Django site.
Holovaty, who plays guitar, said he named the Web framework after Django Reinhardt, a jazz guitarist from the 1930s to the early 1950s. Django is pronounced "Jang-oh," he said.
Being a journalist who programs is a "nice niche," Holovaty said. "And, boy, does the journalism industry need help in this department," he added.
In an interview with the Online Journalism Review, Holovaty said of his dual role: "The main value in understanding programming is the advantage of knowing what's possible, in terms of both data analysis and data presentation. It helps one think of journalism beyond the plain (and kind of boring) format of the news story."
这一点很关键,Holovaty说,程序帮了记者三件事情:收集信息、过滤信息以及表述信息。
Indeed, programming helps to automate what Holovaty said are the three basic tasks of journalists: gathering information, distilling information and presenting information.
"'Doing journalism through computer programming' is just a different way of accomplishing these goals," Holovaty said in the OJR interview. "Namely, the technique favors automation wherever possible."
看来,Django的开发者们在做完第一个新闻网站之后,顺带成功搞定了一批新闻网站,想必在新闻媒体网站业内口碑甚好。
Among the sites that use Django are lawrence.com, a local-entertainment site for Lawrence, Kan.; chicagocrime.org, a freely browsable database of crimes reported in Chicago; LJWorld.com, the web site of the Lawrence Journal-World newspaper; washingtonpost.com, the Washington Post's Web site and collection of Web database applications; Tabblo, a photo-sharing site; Toronto Life, the Web site of Toronto's city magazine; and lawrencechamber.com, the Web site of the Lawrence Chamber of Commerce.
September 17
对于上线的django系统,官方推荐的方式是apache带mod_python。
应该是和mod_perl差不多,apache启动的时候就把python代码load到内存中,这些代码将誓与服务器进程共存亡,这样据说可以极大地提高性能。Django需要apache 2.x和mod_python 3.x,你还必须使用apache的prefork MPM。
基本配置:
- 编辑httpd.conf文件
<Location "/mysite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug On
</Location>
这将告诉apache,对于所有/mysite/下的URL,请给我使用mod_python。Apache会将DJANGO_SETTINGS_MODULE的值传递给mod_python,这样mod_python会知道该使用哪一个settings。
注意应该把PythonDebug选项关掉,在上线系统中出现问题时,用户会看到你那些丑陋的python trackback。。。
还有一点,用mod_python部署了django之后,每次修改了代码,就不得不重启apache。
下面谈谈一个apache中怎么搞多个django:
很简单,如同虚拟主机那样:
NameVirtualHost *
<VirtualHost *>
ServerName www.example.com
# ...
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
</VirtualHost>
<VirtualHost *>
ServerName www2.example.com
# ...
SetEnv DJANGO_SETTINGS_MODULE mysite.other_settings
</VirtualHost>
关于media文件:
Django并不会自己去搞media文件,这些都留给了外层的web服务器。
官方推荐的做法是,用独立的web服务器来做(比如lighttpd、TUX 、A stripped-down version of Apache ——说句实话,我还不是很清楚他的意思)。
不过,如果没有选择,当然可以就用apache的这个虚拟主机来搞media文件:
<Location "/media/">
SetHandler None
</Location>
官方给出的下面这个例子中,django被设在根上,而且显式关掉django解析media子目录以及jpg/png/gif文件:
<Location "/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
</Location>
<Location "media">
SetHandler None
</Location>
<LocationMatch "\.(jpg|gif|png)$">
SetHandler None
</LocationMatch>
关于admin files
别忘了admin下面的media文件,虽然开发的时候感觉不到,其实也需要我们手工搞定的。
admin的media文件在这里:django/contrib/admin/media
官方文档推荐两种做法:
在你的目录下创建一个到admin media文件的符号链接,这样所有的东西呆在一个地方,而且你还可以进行svn update。
或者干脆一古脑全部拷贝一份到你的apache指定的site目录下去。
关于出错处理
需要注意:mod_python中出现的错误,不会被报到apache的error_log文件中。
如果。。。遇到恐怖的segmentation fault:
如果Apache出现了segmentation fault,有两种原因, 但是和Django都没有关系.
可能是因为你的python代码正在importing "pyexpat" module, 这个模块可能会和Apache自带的版本冲突. 更多信息可参见Expat Causing Apache Crash.
还有一种可能是你在一个apache中同时运行了mod_python和mod_php, 并且使用MySQL作为后台数据库。在某些情况下,由于PHP和python的MySQL的backend会发生冲突,从而导致mod_python的一个问题,详情参阅 mod_python FAQ entry.
如果mod_python仍然出现问题,最简便的方法就是先掐了django,再看看一个barebones的mod_python是否正常工作。这里 Getting mod_python Working有详细方法。
(以上文字摘录并翻译自Django官方文档——Using Django with mod_python)
September 16
近日还读了两本谭伯牛的书,《战天京》/《天下残局》,不是赶潮流,真的好看!帖别好看!!!在此郑重推荐,听我话绝不会后悔:-)
猜猜看,为什么题目是“十年砍柴”?
在当当买了一批书,其中有Minette Walters的《毒舌钩》、《女雕刻家》,可惜成名作《冰屋》缺货。这位美女作家凭着这三部小说,三年中囊括英美两地所有侦探、推理小说的最高大奖,以至于变成缺席了二三十年来好不容易出现的推理小说女王。不得了,不得了,被评论为有资格接替阿加莎克里斯蒂的人啊,正如我们很难想象还能出现接替金庸的武侠小说家一样。
一口气看完了《女雕刻家》,略微有点点失望,也许胃口被吊得太高,也许期望太多,也许被福尔摩斯、波洛之流浸淫得太久,现代小说太容易流于光怪陆离的暴力和性,尤其是国外的这些小说,特别容易陷入描写我们八辈子都碰不上的稀奇之事、古怪之人。《女雕刻家》也不例外,同性恋、15岁少女堕胎、暗杀、两个离婚之人的恋情、精神病患者、修女、牧师、百折不挠的女作家。。。我们只能想象这些东西,这些东西在生活中实在是太罕见,以至于我们只能坐在那里抽象地空想以获取“阅读经验”,再加上翻译之后的中文犹如蒸馏过的纯净水,虽然很纯,可是也过滤了有益的各种各样的矿物质,我们已经部分失去英美人士读原版小说的“乐趣”,那些遗失在字里行间的味道、那些精致的双关语、那些前面部分残留到后面所引起的隐约回想,统统消失在简单追求结局之中。
Anyway,书还是很好看的。
September 07
《有关大雁塔》
有关大雁塔
我们又能知道些什么
有很多人从远方赶来
为了爬上去
做一次英雄
也有的还来做第二次
或者更多
那些不得意的人们
那些发福的人们
统统爬上去
做一做英雄
然后下来
走进这条大街
转眼不见了
也有有种的往下跳
在台阶上开一朵红花
那就真的成了英雄
当代英雄
有关大雁塔
我们又能知道什么
我们爬上去
看看四周的风景
然后再下来
所谓诗人们,其实我没有几个崇拜的。也许是经验没有他们老到,体验没有他们深刻。但是我有我自己的准则,无须借助他人的标准作参考。韩东是我为数不多的真正觉得“有货”,或者说比较对路子的“诗人”。这首大雁塔,当年名噪一时,确实耐读。时至今日,仍然爱不释手。也许,所描述的这种坦率、冷漠的心情,今天更能有体会。对暗示的历史感、文化感的故意疏离,对淡漠心境的孤傲之意,故意冷眼旁观式的调侃,聊大天式而不经意透出的大智慧,给与参读者贴心的享受。
末了那四句:
有关大雁塔
我们又能知道什么
我们爬上去
看看四周的风景
然后再下来
真是令人无限惆怅,无限神往。。。
摘一段偶像的简历:
韩东,1961年生于南京。第三代重要诗人。八岁随父母下放苏北农村,1982年毕业于山东大学哲学系,在校期间开始诗歌创作。毕业后在西安、南京等地高校任马列主义教员,1992年夏天辞职。1985年起主编《他们》文学杂志一至九期。八十年代中期,发表《有关大雁塔》《你见过大海》等诗作,提出“诗到语言为止”观点,引起诗坛的争议。现居南京,为自由撰稿人。
一个马列主义教员,成长为中国急具影响力的“先锋诗人”和作家,他的内心世界究竟是怎样的呢?我很好奇,但也清楚认识到我这辈子基本不可能有机会当面问问偶像了,虽然他在南京——我的老巢。作为一个幼年就下放到农村的知识青年,乡村生活留下了怎样的印记呢?回想我6、7岁时在苏北农村的模模糊糊的残缺记忆,似乎也有些东西似曾相识,就算并无真正的“同感”,姑且装作有所体会吧。
《温柔的部分》
我有过寂寞的乡村生活
它形成了我生活中温柔的部分
每当厌倦的情绪来临
就会有一阵风为我解脱
至少我不那么无知
我知道粮食的由来
你看我怎样把清贫的日子过到底
并能从中体会到快乐
而早出晚归的习惯
捡起来还会象锄头那样顺手
只是我再也不能收获些什么
不能重复其中每一个细小的动作
这里永远怀有某种真实的悲哀
就象农民痛哭自己的庄稼
而这首《温柔的部分》,则更加实际一些,纯粹的个人体验,令人遐想万千,余味十足。那种看似十分随意、冷漠的风格,其实是建立在极端精致、极端锤炼的语言功力之上。慢慢的读,仔细地读,乡村长大后出来的人恐怕更有体会一些。这种淡淡的、却又隐隐约约略为深沉的感情,带着一丝不易察觉的悲哀之情,真的耐读,很耐读。
很久以前还有一首《在早晨睡去》,亦很精彩,属于陈年旧芝麻,就不剽窃了。
ps:今天当当网送书到公司,其中一本《诗词例话》,一本《中国新诗》,有人看到,围过来大呼小叫,似乎发现了新大陆,又或者发现了怪物。害我做了亏心事一样,偷偷摸摸收拾好书,唯恐更多人发现我这不良的读书嗜好。
September 04
原文在这儿: 椅子上的KTV
火上的锅咕嘟咕嘟开着。
大师傅用手把土豆和血块捋到锅里,再伸出同一只手收钱。
这样的地方能生意好,除了味道,大概是因为还可以唱卡拉OK。
其实就是台彩电,当街一放,接了一个话筒。
吃十块钱的麻辣烫就可以免费唱一首。
我去的时候,有个大姐刚吃着羊肉串唱完《两只蝴蝶》。
接下来是个小伙计。
裸着上身,瘦精精,蹲在椅子上。
画面是BEYONG的演唱会,盗版盗得画面都是抖的。前奏的钢琴声根本听不清楚。
“今天我,寒夜里看雪飘过,怀着冷透了的心窝飘远方…”
咦,他的粤语真标准,广东人?
“风雨里追赶…”可能是他刻意学黄家驹的发音吧,听上去象是哽咽。
大师傅高声喊“靠街那桌好了啊来拿”
那边人骂骂咧咧地“你他妈不会送一下啊这么两步”
大师傅转向那个椅子上的小伙子“喂,你去送一下”
他蹲在那把椅子上,头也没回。
“多少次,迎着冷眼与嘲笑,从没有放弃过心中的理想…”
不知道是谁,忽然把啤酒瓶捶在桌上。“嘿哥们不错”
“原谅我这一生不羁放纵爱自由,哪会怕有一天会跌倒…”
他唱得那么用力,跟我一桌的人都停下说话看着他。
但他靠着椅子,背影木然而柔顺的样子,不知道他那么大的声音是哪儿来的。
歌到了和声部分,男人的和音带着电吉它和贝司的声音,一下卷过来,连破电视的滋啦声都盖住了。
然后不知道为什么,就那么一会儿,坐在满地狼籍里的人,被啤酒瓶和汤汤汁汁包围着的人,很多人,男人和女人,就一块唱起来了。
“背弃了理想,谁人都可以,哪会怕有一天只你共我…”
包括我。
有点感动,专业记者的眼光很敏锐。
(观察柴静的文字,在中国做一个好记者真的很难)
September 03
微软的daily build越来越显示出深远的影响力,django也不例外,先进的生产力手段总是立刻会流行起来。就像django的代码一样,django的文档也是在daily basis上持续发展的,用SVN进行版本控制,每个独立的文件描述一个专门的主题。文档在SVN中的位置是:
django/trunk/docs
当然,web版文档的地址是http://www.djangoproject.com/documentation/。
一个有趣的问题是,SVN中的文档是plain text,如何自动生成web版的格式化的文档?django采取的做法是,每隔15分钟自动从svn中的plain text去生成HTML页面。(看,tool chain又出现了)
web版文档的一个关键特性是,每个文档底部有一个comment section。任何人都可以加上自己对这份文档的建议、修改,这样django的开发者们可以及时看到这些意见,然后体现到文档中。django鼓励大家提出意见,充分体现了开源软件开发模式的特色,当然如果你觉得还不够,还可以加入邮件列表进行讨论——django-users mailing list。
任何时候我们想获取最新的plain text文档,可以用svn update命令:
svn co http://code.djangoproject.com/svn/django/trunk/docs/ django_docs
cd django_docs
svn update
这样做的理由是很多习惯在linux下工作的人喜欢用grep命令去搜索自己需要的东西。当然,我们也可以在本地重新生成web页面以便浏览,方法和django服务器的做法一样:
djangoproject.com/django_website/apps/docs/parts/build_documentation.py
这个脚本可以转换plain text到HTML页面,所有django的plain text文档都遵循一种称为ReST(ReStuctured Text)的格式,这使得我们很方便的进行文本转换。(是不是想起了XSLT?)
还有一些琐碎的东西,比如文档版本的维护问题,代码特定版本发布的时候如何保持和文档的inline问题,在此不再赘述。
从另一个角度看,这样的项目开发组织方式,颇有些XP的味道,稍微复杂一点、大一点的项目可不可以这样做?这套方法可不可以用到我们平时的项目管理中?
September 01
身处电信界最大的merge行动之一,每天被无数rumor环绕,耳闻目睹无数权力斗争上演,最近的生活很紧张,很刺激,很精彩。
alcatel、lucent、nortel、fujitsu,想必对中兴、华为会形成巨大的挤压,在巨头的尔虞我诈中,国内制造商们相必更要进一步发挥“床垫”文化了。
GTD的理念:GTD的核心理念在于只有将你心中所想的所有的事情都写下来并且安排好下一步的计划,你才能够心无挂念,全力以赴地做好目前的工作,提高效率。而当你总是有些事萦绕在心头,悬而未决的时候,你要么就是会不时地想起它而影响现在的工作,要么就是会忘记了去做。而GTD通过将所有的这些事都罗列出来再进行分类,确定下一步的处理方法,将所有这些悬而未决之事都纳入我们可控制的一个管理体系中。
GTD的基本方法:GTD的具体做法可以分成收集、整理、组织、回顾与行动五个步骤。
收集:就是将你能够想到的所有的未尽事宜(GTD中称为stuff)统统罗列出来,放入inbox中,这个inbox既可以是用来放置各种实物的实际的文件夹或者篮子,也需要有用来记录各种事项的纸张或PDA。收集的关键在于把一切赶出你的大脑,记录下所有的工作 整理:将stuff放入inbox之后,就需要定期或不定期地进行整理,清空inbox。将这些stuff按是否可以付诸行动进行区分整理,对于不能付诸行动的内容,可以进一步分为参考资料、日后可能需要处理以及垃圾几类,而对可行动的内容再考虑是否可在两分钟内完成,如果可以则立即行动完成它,如果不行对下一步行动进行组织 组织:个人感觉组织是GTD中的最核心的步骤,组织主要分成对参考资料的组织与对下一步行动的组织。对参考资料的组织主要就是一个文档管理系统,而对下一步行动的组织则一般可分为:下一步行动清单,等待清单和未来/某天清单。等待清单主要是记录那些委派他人去做的工作,未来/某天清单则是记录延迟处理且没有具体的完成日期的未来计划、电子等等。而下一步清单则是具体的下一步工作,而且如果一个项目涉及到多步骤的工作,那么需要将其细化成具体的工作。GTD对下一步清单的处理与一般的to-do list最大的不同在于,它作了进一步的细化,比如按照地点(电脑旁、办公室、电话旁、加利、超市)分别记录只有在这些地方才可以执行的行动,而当你到这些地点后也就能够一目了然地知道应该做那些工作 回顾:回顾也是GTD中的一个重要步骤,一般需要每周进行回顾与检查,通过回顾及检查你的所有清单并进行更新,可以确保GTD系统的运作,而且在回顾的同时可能还需要进行未来一周的计划工作 执行:现在你可以按照每份清单开始行动了,在具体行动中可能会需要根据所处的环境,时间的多少,精力情况以及重要性来选择清单以及清单上的事项来行动 下面这幅流程图清晰地说明了GTD的方法与流程。
GTD的工具:GTD 的工具既可以是PDA也可以是最普通的纸和笔。在PDA中有许多GTD的软件,比如PPC系统的Listpro、Informant,Palm系统的 Datebook,Lifebalance等等。如果没有PDA也没关系,已经有很多Blogger发明出了许多方便地使用纸和笔进行GTD的工具,比如这个Hipster PDA等等,在电脑上也有许多可以在GTD上使用的工具,比如GTDTiddlyWiki。这个网页汇集了在电脑上使用的主要GTD工具。