DPress-Django开发的Blog

用Django做Blog实在是太过简单,所以在网上可以轻易的找到大量用django实现的Blog,DPress就是其中一个。

本想用这个项目做Django最佳实践的教程,不过发现自己实在是不擅长这个。此外该项目花费的时间比预期的要多出不少,以至到后期挺没耐心,功能方面也因此大幅缩水。

目前DPress的基础功能已经完成,文档方面我会在晚些时候补上。

有兴趣的朋友可以将代码下回来看看。如果要使用Django自己服务器启动起来非常容易。

  1. 使用SVN把代码下回来 http://dpress.googlecode.com/svn/trunk/
  2. 运行 \trunk\scripts\init.bat 完成一些必要的初始化(复制静态文件到相关目录)。
  3. 运行 \trunk\site\dpress\scripts\syncdb.bat 初始化数据库。
  4. 运行 \trunk\site\dpress\scripts\runserver.bat 启动服务。
  5. 访问 http://127.0.0.1:8000/admin/ 在管理后台添加日志。

DPress本着以最少的代价完成最多工作的原则,能不造轮子的地方就不造轮子。

  • Blog的编辑功能完全交给admin处理。
  • 使用filebrowser对admin扩展,实现对文件的管理。
  • 使用django-tinymce,实现html的可视化编辑。
  • 文章的Tag功能使用django-tagging实现。
  • comments功能使用django.contrib.comments。
  • Blog本身也大量“借鉴”了pinax的blog组件。
  • Blog支持使用书写格式有Markdown、Textile、普通文本,html(支持可视化编辑)、reStructuredText(当然,你需要安装有相关的库)。

对Blog应用来说,一般都会有较高的个性化要求。换肤基本上成了必备功能。很遗憾,这方面是django的软肋。换肤需要创建新的模板,并需要修改配置文件,指定使用新模板。好的方面是,DPress的模板在我优化过后,还是比较简单,改起来还算方便的。

虽然在开始DPress之前就计划的很好,本以为很容易就可以搞定,但事与愿违开发过程中遇中还是遇到了一些麻烦。

Pinax中的Blog组件使用threadedcomments来增加评论支持。在评论内容填写不完整时,会转到它自定义的页面。我认为这是一个挺不友好的设置,尝试修正无果。切换到django.contrib.comments后问题则更糟,不但评论出错会跳到自定义页面,即使评论成功了不会转到评论页面,而是给出一个评论成功的提示。最后没办法,还是自己将添加评论的代码给写了一遍。

此外在模板方面也折腾掉了大量的时间。模板的本身也是程序中重要的一环,但不少的可重用app都没有带任何模板,而且也缺乏模板方面的范例。在我看来,这也是django的第三方app普遍不太好用的重要原因之一。

下面上张图吧,模板的样式,是偷的朋友BLOG的(他也是偷别人的)。

初次尝试翻译较长的文章

以前也翻译过一些东西,不过都是非常短的文字。今天在网上看到一篇关于unladen swallow(Google的python实现)的文章,于是尝试对其进行翻译。

翻译东西确实不是一件容易的事。外文文章要读懂很容易,你只想要关注其中的重点即可,对于一些不重要的地方即使你没读懂也没关系。在翻译的时候你很容易的就会陷入了原作者的语言习惯,但外文和中文的语言习惯还是有很大的差别。其中语言习惯的差别不仅仅表现在句式结构上,还会贯穿在整片文字的语言组织上。所以如果你是按句翻译,那不管你如何组织语言,依旧会读起来很拗口。

除技术因素外,翻译还是一个很考验耐心的活。一篇可以在几分钟内读完的文章翻译起来得花几个小时。

虽然翻译得比较糟糕(自己都不想再读一遍),不过总算翻译完了,如果哪天有空就再休整一下,至少不要读得这么恶心。

unladen swallow: 加速Python

物质起源

卷首语

曾有那麽一段时间,忽然间脑袋里出现了很多奇奇怪怪的想法。然而现在似乎很久都没有出现过一些什么新的怪想法了。或许生活让人变得平庸,让人变得缺乏想象力。或许是最近看了太多关于时间穿越的电视剧,让我忽然间又想来了这些无聊的想法。

其实这些东西我在很久以前也写过,发布在某个论坛上,只是估计没几个人认真的看了。不过也没关系,这本就是我自娱自乐,一个人的YY。

人类对宇宙的思考,或许正是哲学的起源之一。同时,人们又用所谓的哲学去解释宇宙。下面我要写的是我对物质,对宇宙的YY。我想这些YY应当和早期的冥想家们的YY差不多。里面不会有太多的严谨的论据,更多的可能是因为这样,所以这样。用一个假设去论证另一个假设。

理论概览

  1. 光其实是一种微观粒子(光子),这些例子是组成一切物质的基础。
  2. 能量是光子从物体里逃逸的宏观表现形式。
  3. 物质和能量的转换,其实是光子在势能和速度间的转换。

能量 = 质量 x 光速平方

曾一直很迷惑能量本是无形的东西,怎么会变成有形的物质。不过换个角度,如果能量本身也是一种物质那这一切似乎就开始变得容易理解了。能量只是微观粒子的宏观表现形式,而能量的直观的表象形式就是热,更直观一些则是光。为了方便表述,我将这些能量粒子称为光子

这些粒子在无时无刻的运动着,其运动的速度为光速。同时由于存在类似分子间作用力的东西(我决定取名为”光子间作用力”),保证这些粒子可以聚集在一起,以物质的形式出现。同时由于类似水的蒸发,一些粒子会脱离出去。这时对外的表现形式就是发热/发光。

通常物体散热减少的粒子非常有限,人们无法察觉到质量的减少。但在进行核聚变或核裂变时,逃离的粒子数已经多到了可以测量的程度,这时人们发现物体的质量减轻了。由于粒子逃离的速度为光速,根据宏观世界的能量公式很自然的推导出了爱因斯坦的能量公式 能量 = 质量 x 光速平方。

至于为什么光子的速度为光速,我们可以将光子理解为,光子组成物质,其实是将速度转换成了势能,而光子的逃逸只是将势能重新转换成速度而已。

光的波粒二象性

光的特殊还在于它的波粒二象性。可能光子并不是单纯的粒子,它如同双子星一样,每个光子由两个质量相同的粒子相互围绕着。所谓的波长受两个粒子的旋转周期的影响。

光的传播和弯曲

物理学力告诉我们光是一种波,通常情况下波的传播是需要介质的。不过在前面的假设里,光本身就是一种物质,因此介质变得不再必要。与此相反,在真空里由于没有了其他物质的阻挡,光的传播速度反而是最快的。

曾一直认为光的弯曲是一件匪夷所思的事,不过既然前面已经假设光本身就是一种粒子,那这一切都变得容易理解了。

万有引力本身只是光子间作用力的一种外在表现形式。当万有引力足够强的时候,光子的运行轨迹将被明显的改变,看起来就是光弯曲了。

无法超越的光速

在爱因斯坦的理论里,物体的质量将随速度的增加而增大,在达到光速的时候物体的质量无限大。根据能量公式,我们可以算出超越光速所需要的能量是∞,此时达到光速根本就变成了一个伪命题。

在前面的理论中有个很重要的前提,质量增大。

物体的运动可以看成是组成物体的分子的宏观运动方向一致,再细分下去就是光子的宏观运动一致。

从微观上讲,对于接近光速的物体我们可以看成是用光子去轰击一个物体,来给物体加速。当物体的速度越接近光速的时候,光子相对物体的相对速度就越慢。当物体的运动速度达到光速的一半的时候,光子相对物体的运动速度也只有原来的一半。此时增加相同的速度,需要比静止时需要更多的光子(能量)。

同样,当物体的运动速度无限接近光速时,物体和光子的相对速度也无限的接近零,此时光子再也无法为物体加速。

时间变慢

和前面物体质量的增加类似。当物体的运动速度接近光速时,组成物质的粒子将的相对运动速度也将变慢。达到光速后组成物质的粒子间的速度降完全变为零。此时对该物体而言,以前的物理活动都停止了。

这就有如将某个人冰冻了N年,然后某日解冻,虽然世界已经改变,但对被冰冻的人而言,他还和被冰冻的那天一样。

黑洞/虫洞/平行宇宙/时间倒流

我相信黑洞的存在。黑洞应当是个超越人类理解能力的世界,黑洞已经不再符合已知的物质的组成理论。而且或许我们永远也不可能知道。黑洞里面的世界,或许除了YY没有更好的了解方式。

至于所谓的虫洞等时髦的科幻名词,还是忘了的好。

黑莓8320初步印象

把玩了两天的黑莓,总体感觉黑莓的可玩性和windows mobile相比还是有不小的差距。

这里将黑莓的优缺点罗列一下。

优点:

  1. 屏幕
    黑莓即使在阳关下也可以清楚的看清屏幕上的文字,效果确实不错。
  2. 轨迹球
    轨迹球确实是非常的好用,可以说比我预想的要好不少。
  3. 通话效果
    很清晰,是一个合格的电话。
  4. 相机
    其实8320的相机效果和其他同档次的手机比起来没任何优势,但和以前的那个手机比起来也算个优点吧。
  5. 无线网络
    感觉gprs还挺稳定的。虽然8320的wifi和同事的钻石比起来能找到的热点要少很多,但估计连上后也差不多。
  6. 键盘
    以前以为一个手按起来会不方便,但实际使用起来也还好。
  7. mp3
    效果还不错,基本上达到我可以接受的水平了。

缺点:

  1. 应用程序少
    我觉得这是黑莓的最大缺点,甚至让我产生了“是否要用以前的ppc手机当pda”用的想法。黑莓系统封闭,加之中国的黑莓用户少,这直接导致了黑莓应用程序的极不丰富,而适合国人使用的就少之又少。
    1. 输入法
      在wm下梅花/A4等第三方输入法一大堆,但到了黑莓下面就只看到一个梅花的第三方输入法,而且还是以外挂的形式出现的。虽然梅花输入法本身不错,但外挂的方式还是给使用带来了一定的麻烦。
    2. busline
      wm/plam下一个著名的公交查询软件。但转了一圈,黑莓下就是没有类似的东东。
    3. 列车时刻
      wm下列车时刻表软件有好几个,而且都还不错。黑莓下虽然有,但似乎并不太好用。
    4. 地图
      wm下一抓一大把,怕的不是找不到,怕的是不知道选哪个好。黑莓下的选择就少多了,而且似乎都不太好用。这里也要庆幸下,好在没买8820,相比而言相机比GPS实用些。
    5. 万年历
      wm下的掌心万年历还是非常不错的。黑莓下虽然也有万年历,但那个也太简陋了点吧。
    6. …… 
      感觉再写下去都罄竹难书了。
  2. 今日主题
    wm的桌面有很强的定制性,而且我觉得wm默认的今日主题还挺实用的。约会和待办事项都会直接显示在桌面上,这样一目了然。黑莓就只能点开程序去看了。
  3. 都是翻新机,价格并不便宜
    单看黑莓的价格似乎还不错,但如果考虑到这些都是翻新机,其实价格也并不怎么样了。其实翻新机也就算了,但其中居然还有不少打孔机(使用报废的不合格主板组装的黑莓),这就让人崩溃得多了。而且我就很不幸的买到了传说中的打孔机。
  4. 偷流量
    黑莓会自动的连接GPRS,每个月都会因此用掉几M的流量,而且还是走的cnnet。如果事先没有了解,那很可能就这么莫名其妙损失不少米米。
  5. 触屏
    说来这个应当不算缺点了,但人家wm有,就也说说吧。不少情况下有触屏还是要方便不少的。比如网页浏览,图片浏览,地图浏览啥的。

在淘宝上订购了一个黑莓

一直以来我的手机就不太稳定,但最近的表现还是有些过分,在接过一次电话后就再也接不到电话,必须得重启才能解决问题。当然,这或许和我新刷的非官方ROM有关。

再次漏接电话后,做了一个拍脑袋的决定,到淘宝去订购了个黑莓的手机。

感觉多少有些不可思议,本来一直没多少换手机的想法,然后忽然就决定了,而且还是黑莓。

估计后天就可以到货,到时候看看黑莓的体验怎么样。

农历0.2.1发布(Yahoo Widgets)

昨天收到网友的邮件说我做的农历插件无法使用。但我自己测试却没有发现啥问题。于是在自己的虚拟机里测试了下,还真无法工作了。

检查代码发现里面有runCommand(‘cal’),这样的代码。去查了下,发现cal是linux查看日历的命令。估计是新版本的yahoo widgets去掉了相关命令的支持。重新下载了个yahoo官方的日历组件,将runCommand(‘cal’)用新版yahoo插件中相关代码替换后我的widget终于又可以正常工作了。

我的这个农历组件已经发布两年多了(看截图:-),直到现在才有人给我反馈(不过,我也不知道从啥时候开始出问题),看来这东西还真没几个人用。

下载

农历截图

三清山

五岳归来不看山,黄山归来不看岳。

去过黄山之后,登山的选择似乎就变得很小了。抱着地图看了一圈,距离比较近的似乎就只有三清山可以去去了。

话说三清山也算是很早就想去的一个地方了。虽说三清山并不算太出名,但三清山人有一套不错的说辞。徐霞客将太多的词语给了庐山,似乎庐山已经是最好的了。游览过三清山后却叹一山还有一山高,一时词穷,所以索性封笔。虽说这多半是后人的戏言,却让我多少还有些心生向往。

很多去过三清山的人都对三清山有不错的评价,说三清山接近黄山。确实只是接近而已。从某些角度上说三清山有些地方和黄山还是有几分相似之处,不过三清山却比黄山要俊秀不少。如果说黄山是一个大家闺秀,那三清山就只能是小家碧玉了,虽有几分姿色,却也难登大雅之堂。

本在出行前就基本上将行程给安排好了,但最终计划基本上全部乱了,把一切搞得一团糟。不能说三清山不好,只是由于一些主观和客观原因让这次的行程没有预想的愉快。

三清山确实很小

最初的计划是在山上住一晚,但看网上的介绍似乎没有这个必要。事实证明确实没有这个必要。相比黄山而言三清山要小了不少,如果安排合理一天下来绝对绰绰有余(但是我的安排完全砸锅了)。

糟糕的导游图

在出发前就到网上找好了导游图,并做了个基础的行程安排。到景区后又买了两张导游图。这里的导游图一张不同一张,而且更糟糕的是,似乎没有一张是正确的。最终导致我将东/西栈道走了两遍,然后没能逛完南清园(主要景区之一),最糟糕的是还错过了最后一班回玉山的公交。

我真的不骗你

我并不是对所有的托都特别的反感,我相信大多的托多少还是有些职业道德的。有些东西反正是需要的,让人介绍介绍,买卖成了大家高兴也并无什么不好。却不想这次遇到了没啥职业道德的托。说得好像只此一家,后面还要加上一句,我真的不骗你。不骗才怪。

鸡婆女

栈道结冰,大家依次扶着围栏缓慢的移动。前面的那位大小姐一路叽叽YY的抱怨个没完没了。对面过来一位小姑娘,结果两人面对面的站了几秒,然后对面的小姑娘小心翼翼的让开。这位大小姐开始愤愤不平的抱怨到,也不知道让一下。苍天啊,如果对方是个男士你还可以说对方没有绅士风度,但你凭啥非得要一个和你年纪相仿的小姑娘给你让道。为了避免耳朵生茧,我绝对先行一步。走的时候不小心小滑了一下。这位大小姐轻蔑的说啥“超、超、超……”。我想要是我真的滑到,她还不得乐掉大牙。真想回敬她一句。不是我想超,实在是受不了你的鸡婆。

照片

照片放在我的相册:http://www.haokanbu.com/story/172460/

[Django]增强的创建app的命令

简介

下载地址

虽然django的admin漂亮的实现了CRUD,不过在有时候admin并不是这么好用。然后开始进行手写CRUD,接着发现自己又陷入了重复操作中。相比而言Ruby自动生成的添加删除功能就好不少,你生成的基础框架是可以扩展的。

为了减少手动书写CRUD的工作量,我写了一个扩展的startapp command。使用这个命令会自动生成 list/new/edit 的操作和html文件(这样修改起来就方便多了)。

使用说明

如需要在其他工程使用该命令,只需要将项目中的django_extensions文件夹复制到其他工程的app目录,并在settings.py里把django_extensions添加到app列表里。该扩展命令为create_app,使用方法和django官方的startapp一致(如:manage.py create_app blog)。

命令演示

为了方便演示,该扩展命令包含了一个演示工程(hidjango)。下面的步骤是windows平台(因为用了几个bat)。

  1. 运行\hidjango\scripts\create_app.bat。根据提示输入app的名称,如blog。
  2. 打开\hidjango\settings.py,在app列表里添加 hidjango.blog 。
  3. 运行\hidjango\scripts\syncdb.bat,初始化数据库。
  4. 修改\hidjango\urls.py,添加app的映射 (r’^’, include(‘hidjango.blog.urls’)),
  5. 运行\hidjango\scripts\runserver.bat启动开发服务器。
  6. 在浏览器输入http://127.0.0.1:7000/访问页面,并可以实现完整的添加删除操作。

注:

  • command的py代码大部分都是从django-command-extensions(http://code.google.com/p/django-command-extensions)里复制过来的,我只做了少部分的修改。
  • 该命令还比较简单,还有很多可以扩展的地方。比如app_name不一定和model_name相同等。

模板文件预览:

/django_extensions/conf/app_template/
|~templates/
| `~{{ app_name }}/
|   |-base.html
|   |-edit.html
|   |-list.html
|   `-new.html
|~templatetags/
| `-__init__.py
|-__init__.py
|-admin.py
|-forms.py
|-models.py
|-tests.py
|-urls.py
`-views.py