为四川人民祈祷! www.onefoundation.cn
logo of kjam.org

pikipikipiki goodbye

我终于决定放弃将Piki Port to WSGI这个想法了,虽然此时程序已经可以运行在WSGI Server环境,但是我即将大谈我的感想(感想排名不分先后)

1.框架不是一群无事可做的疯子写的

也许我们永远不会明白为什么这个世界有这么多框架(Python世界),也许我们明天就已经明白了。因为我们从头(WSGI)开始过,就这么简单!没有从头开始过的人,不会想到当自己解决完一个问题,依然需要面对接下来十个问题时候的痛苦,尤其是在赶时间的时候⋯⋯我想这样的理由同样适用于MFC或者Java之类一切有轮子的东西

2.直接在WSGI基础上开始工作并不是一件不可能的事情,但是没有人愿意做两次

但是为了真理,你至少得玩上一次⋯⋯这绝对可以帮助你理解你所使用的框架。如果你学JSP,你得会Servlet。玩Ruby,最好还是看一看Rails源码。

3.使用框架并不丢人

PHP是用C语言开发的WEB框架,C是用ASM写出来的万能框架

那么,同理,Python是用C写的基本万能的框架,Django/Pylons就是用Python写的WEB框架!对无聊的人补充一点:不比PHP慢,WEB的瓶颈不在CPU,大家都知道。

4.有这么多框架可以选择,太完美了

说这句话Rubyer肯定要嫉妒死,我们有Django,你们却只有Rails。但是,我们还有Pylons,还有TurboGear,还有⋯⋯不计其数。

如果现在要我做VeryCD或者douban,那么Pylons肯定是我的选择了,原因就和打CS之前要买枪一样简单,当然要选最先进和最适合自己的装备。这么说来TurboGears也在选择之列,不过Pylons更底层一点。

如果现在要我选择一种框架继续我的Jampad2,那么肯定是Django,快速开发是唯一的原因,个人网站不会追求那些缥缈的性能。


好了,写完了

还有一个要说的,放弃使用piki的原因,因为:

1.它的模版实现的思想太古老了,真的有代沟了
2.协议,pikipiki是GPL,Jampad更加倾向于BSD

正如我所说的,django或许是更好的选择。
comments: 289 | tags: Jampad   
by kernel1983

OO vs NS

面向对象技术很早就已经出现了,在过去的十多年中被人认识,熟知并追捧⋯⋯在那之后,如果某种语言不声称自己是面向对象的,必然遭到大众的遗忘

面向对象技术是重要的软件技术之一,但是说实话,也不是那么神圣。大多数的时候,我们几乎无需使用它

很多人认为写类就是面向对象了,在这里我必须指出,很多人写了无数个class以后依然没有使用过面向对象技术,其实他在使用的叫做命名空间(namespace)。没错,在C++等很多种语言中,都有这样的概念存在,C和PHP没有。许多人定义类实际上只是为了使用命名空间。

为什么,因为问题远没有复杂到需要OOP的程度。我们没有使用继承,没有抽象类,没有虚函数。我们不需要设计模式,我们要做的仅仅是做在一台电脑面前,默默的敲下代码,完成一件事情,一个程序只需要main()一个函数。

是的,最简单的情况正如上面所说的,当退出main()的时候,函数中的所有数据都被清除了。问题再复杂一点的时候,全局变量就是我们最简单的选择。但是事实远不像我们所想的那么简单,这也就是为什么世俗的眼光如此仇视全局变量的原因。

很明显,在程序简单的情况下,这样完全没有问题。一旦你的程序需要为别的程序服务,所有人必须保证自己的全局变量不会被别人使用,要不你可以在变量前面加上复杂的前缀,要不我们开始在迫于世俗的压力下用类来封装自己的代码。

我相信,迫于这样的压力做这样的事情的朋友都不会承认自己在使用OO技术。还是同样的原因,问题根本没有那么复杂。他们一定相信函数就可以解决这类问题,只是迫于世俗的压力去把代码封装成类。他们使用的技术实际上就是命名空间

我们很容易发现一个观点,似乎全局对象比较容易被别人接受,然而全局变量却被人所不齿。崇尚设计模式的人,一定空想着一个低耦合性的世界。然而,理想世界很遥远,或许真的有这样的完美世界,现在,我们依然要忍受着现实的缺憾⋯⋯哈哈,扯远了

我想说的是,就算你是一个OOP的坚决反对者,或者标榜自己对lambda是如何,那也不妨碍自己定义几个class

就像zen of python中所说的,命名空间是个好东西,让我们用吧
comments: 1964  
by kernel1983

Get Ready for RRobots

说ruby还年轻吧!一点也不错

为了玩一个RRobots的ruby游戏,你得忙活上一整天(对一个有开源经验的小伙子,要是换了我老爸级别的,花上一个月不知道玩的上不)

在windows下面使用ruby的one-click installer都不能解决问题,安装完成以后,tk是不能用的,唯一的解决方法是去ActiveState下载一个ActiveTcl完全安装,问题就解决了⋯⋯当然有人告诉你很快就解决了,没有人提示的话,就自己摸索吧!

Python的安装包应该是把tk包括在内了,不知道ruby的one-click installer是谁做的?

在Mac下面想跑起来就更复杂了,Pre-installed的1.8.2因为我无意中删除了/usr/X11R6目录就罢工了?又不是Linux要那玩意儿做什么!升级一下版本,用下面的命令编译
./configure --with-tcllib=tcl8.4 --with-tklib=tk8.4
 --enable-mac-tcltk-framework --enable-pthread
sudo make install

OK,我们可以玩上面的游戏了。

顺便介绍一下,RRobots是个机器人项目,tank大战,不过这些战争武器的行为可以通过编程来决定。我们自己写程序决定策略。对于程序员来说绝对是个有挑战的游戏!
comments: 2  
by kernel1983

Zope Plone 不要打架

经过番老大的指点,我知道了这样一个事实
Zope 2.9 可以安装 Plone2.5 Python必须是2.4 Zope 2.10 需要Plone 3 使用Python 2.5似乎没有什么问题
Zope 3 要和什么东西一起玩,现在还不是很清楚,不过我们可以自己在上面写程序玩
comments: 0 | tags: plone   
by kernel1983

无聊的速度比较

本质上Python是written in C。
翻译需要时间,但是不仅仅是翻译浪费了时间
差异的原因很多,尤其需要注意的是,Python的内存使用与C的本来就有许多的不同之处

C语言直接的使用内存,而且相当随意。玩C语言的时间长一点的,基本上都知道点内存中那些乱七八糟的分配情况。

接着,就有人拿出一段经典的代码开始测试C语言有多快:
for(int i = 0 ; i<=10000 ; i++){}
妄图用计算执行时间这样的方法,来告诉其他的朋友们C语言是多么的快

哈哈,按照常规的想法,如果用Python来写话,那就是这样:
for i in range(10000):pass
事实上,这两段代码做的事情完全不一样,这样的比较完全没有意义。

首先,我们需要考虑的是内存使用情况,C语言使用的是一个4bytes的内存,而Python则使用了10000个Python自己的Int对象,每一个对象占用的内存大小都至少大于4bytes,需要不断的malloc⋯⋯

这样看来,程序速度的比较本身就对Python不公平,因为他们根本没有做同样的事。表示一个数字100,可以用阿拉伯数字100,也可以直接找100个实物,所花的时间当然是不一样的。

事实上,我们可以这样来稍稍修正比较的结果:
for(int i = 0 ; i<=10000 ; i++)free(malloc(sizeof(int)));
这样似乎对Python稍微公平一些!不过我猜,还是C语言快啦,否则的话,为什么我们还需要C语言呢?所以说,根本就是无聊的比较,太无聊了
comments: 17  
by kernel1983
1...14151617181920