2008年05月16日

说了好处,短处也一定要说,web2py的最大短处是不能方便支持跨app的复用,虽然有xmlrpc,但我不喜欢这种方式,如果它不能做到这一点,我也就是玩玩而已,不过它适合个人玩,因为简单但又强大.为了打消掉我不满足,我对web2py的核心代码作了改动,虽然作者没明确表态表示好与坏,但我还是会进行下去.曾向limodou提议过一同改造web2py,但他更倾向再造轮子,对他这个轮子,我会给于关注,不过同时我要进行web2py的app复用,测试链接如下,如果你感兴趣,可以试一试,链接在我的本机上,如果我上线,一般会开.

http://fullip.3322.org/welcome/default/index/4

如果你不懂web2py架构,你不会了解我在说什么. 你现在所看到的是一个welcome小程序,它带有评论功能,但是在这个welcome小程序内,我没有使用一行评论代码,在服务端,我把两个小程序并为一个,而你在客户端,完全不知它是由两个web2py的小程序构成. 从功能上讲,我把web2py的应用程序变成了可插入式的,这比django的comments的middleware功能要有趣得多.

2008年04月02日

无论是python的django还是其它的web框架,与web2py比较起来,都不算创新,web2py的创新在功能上最大的要算是错误可以管理,它不象其它的框架把出现的错误都丢掉,注意它是可以管理这些错误的,可以把错误保存下来,以后可以再现它.总的来说它还太年轻,还没有一个能用的界面.

web2py大量使用’exec’来执行模块,这带来的一个问题,它需要反复读磁盘,即使是编译为.pyc文件仍然如此,我认为在并发下这会是一个io的问题,当然它的开发者不认为这是一个问题,不管怎样这或多或少都会有影响的,只不过是大小的问题,但量变很有可能导致质变,不过我部分的解决了这个问题,注意不是用cache,它仍会随时反映后端数据库的变化,所以这个关于性能的问题不再算是一个问题,代码稳定性还在测试.

web2py对开发者友好,不是一般的友好,是相当的友好,理解它很容易,使用它也很容易,所以强烈建议一个想接触python框架的学习者来说,它应该是你的第一个框架,不要一开始就学django或TG 或pylon.

2008年03月16日

我都有点不敢相信.看图:各种东西都不缺.

以前反对过django,但没有拿出替代品,所以反对无效,这回拿出另外一个框架来说事吧.不想作全面的比较,只想说说个人的感受,与diango相比,没有配置,当然更不会有安装一说. 没有所谓的中间件,没有写个url,就必然要写正则表达式, 也没有所谓的哲学, 更没有所谓的条条框框,可能django复杂,我看不懂或是不全懂,

web2py理解容易,当然框架理解容易的多了,但是这个框架对开发者友好,给我的感觉可能是如此.limodou

写过一个shell.py用于测试model代码,但我觉得可以更进一步,不需写这个shell.py,可以更进一步,直接在web上面写个界面出来,岂不更好,初试完成,不想再写了,以后再完善它吧.

2008年01月19日

在这个分支版本中,我开发了document show窗口,它是编辑器右边的一部分,我去除了弹出式的calltip的窗口,这样做的好处是,可以一直写程序,不受弹出式的窗口的干扰,另外就是它能随着你光标在文档内的移动而显现相应的文档,无论你是正在程序还是正在浏览程序,它可以随时随地的显现相关代码的文档,它与自动完成功能使用了同一线程技术.

目前这个功能只在分支版本中,不在发行版或主版本中.

ulipad产生错误时,会把错写入自身目录下error.txt中,这时你就发现经常是Import.py文件最多,这个在ulipad的中/minixs的文件,而且这个文件有几千行,看这个文件,只怕把你的眼睛都看花了.其实这个文件是在同目录下的__init__.py中记录的以#mXXXXXXXX.py的所有文件的一个映射,这个使用只是为了加快启动的速度,但如果发生错误只会指示这个文件本身发生错误,而不会指示某个mXXXXXX.py发生错误,而实际上是mXXXXXX.py文件真正错误,看Import.py文件的错误我想除了limodou没有人能看懂吧.我也不例外,如果才能让error.txt错误直接指示mXXXXXX.py文件呢?使用我写的/tools/目录下的rundev.py来运行ulipad,这时发生的错误在error.txt的指示中会直接指向mXXXXXX.py文件,这个文件通常很小,也容易读,如果你直接修改这个文件,再运行ulipad.py或ulipad.pyw程序,在error.txt中会直接指向你修改的位置,如果发生错误的话.

 

 

2008年01月17日

很久没有写blog,现在来补一下吧。这件事没有想那么多,一个很偶然的原因,起因于我同limodou的一次交流,征得lomodou同意,我在维护一个ulipad的分支版本,关于事件的过程,limodou的blog有记录:[UliPad]感谢ygao成为ulipad的一名开发者

这个分支的代码库路径是:

http://ulipad.googlecode.com/svn/branches/new_functions_test

我的回复是:

首先,感谢limodou为我们带来如此绝妙的程序,所以,我不只是在口头上说好,在行动上也希望它更好。
其次,limodou非常有激情,如果没有这一点,ulipad不会打动我。
我希望我能做好ulipad开发者的角色。
2007年04月09日
reload mixis功能使你在运行ulipad的时候,你就可以为它开发功能,简单地说,写源程序的时候写完功能就可以出来,
因为ulipad大量的运用mixin技术,这是可能的,但这在其它的python程序难以做到,夸张一点的地说,你甚至可以"热修复"。
使用要点:你可以打开ulipad重载mixin功能,当然你也可以不使用它而使用原先的模式,通过工具菜单的reload mixin来完成。
有可能,你写的功能错误,重载后当然不能正常工作,所以建议你复制一份ulipad的目录,通过tools目录下的run.bat运行一个实例,
rundev.bat运行reload mixin功能的版本另一个实例,发生错误时,只要改正就行了!
2007年03月11日

最先我是在学python的过程中,想找一个项目练练手,最后我找到了Boa Constructor.后来一发不可收拾,我觉得有些地方,要改改,就不断地增强了它,把我所看到python实现的editor中好代码都加了进去。Ulipad当然也不能例外,当它实现了强大的自动完成的功能时,给了我很深的印象,我就把它的mixin技术移植到了Boa Constructor。我发现的一些关于自动完成的bug及我所做的增强,最先是在Boa Constructor中实现的,后来又把这些提交到了Ulipad的作者:limodou。在Ulipad的邮件列表中,我说focus lost的bug在那里,他说在别处,紧跟着他又说我是对的,接着为了修复此处的bug和另外某处的bug,他重新实现了一小段代码,这段代码他以前用过,是在程序空闲时调用处理bug,这样一来这段代码会反复运行。他要重起用这段代段时,我说了自己的意见,我说是notebook的控件吞吃了kill focus的消息的传递。按“ctrl+tab”键时,focus lost传递的问题在Boa中不存在,这些我也说了,他还是起用了那段代码,为了验证我的想法,修复这个bug,我在Ulipad的源代码插入了5行代码,这个bug就不再出现了。我想我的方案简单的多而且有效,修复了 focus lost的传递的问题。关于函数及class参数的自动完成功能,我所做的增强patch,起先他要想一想更好的,后来我强调说只要5行代码就能用了,是的,它简单得不能再简单了,后来就加入到svn中了。当然他的想法可能更好(见邮件列表),但毕竟还未实现。后来相互交流了一下,我说了一些关于Ulipad的看法,他问了我一些patch的原由,最后是什么样子,对新功能感兴趣的直接去svn  r2013 中看吧。两个各自有不同想法的人,否定,肯定,再否定……,想要把一件事情作好,就是这样一个过程。


  至今Ulipad的源代码有些部分没看懂,我想是我能力有限,另外我要说的是,在源代码的注释及doc_string相对较少,很精练,有些地方恰到好处,有些就没有了,有种惜“注释”如金的感觉。这对于后来者及二次开发者都相对不利,不看完全部的代码,贸然下手,很不利。比如我正在实现的reload mixins的功能就是这样。有一行开关代码,我以为不重要,因为程序没有强调何时调用,我也没有仔细看,结果后来bug就找到此处了。


  有了reload mixins的功能,Ulipad以前的缺点,现在可以说是一种优点了,要重载类就不太容易,但分而治之重载部分功能,那就容易了,而且只要是应用了mixin技术的代码,天生就有了源代码改变,就自动应用它。由于后来Ulipad的一些功能,全都是建立在mixin中的,所以好处不言而喻,现在开发Ulipad,就相当有趣了,不再是重启动再启动,你只需保存,触发,瞬间就可看到结果。甚至你只需写好其本的框架代码(就是Mxxxxx.py文件),实现部分只需等待填入、保存、再写、再保存…..,写完了,功能就出来了。

2006年12月19日

Jolt大奖拥有“软件业界的奥斯卡”之称,svn和preforce都曾获得过。


SVN应该说是CVS成功的继承者,把CVS的缺陷全都克服了。在扩展boa过程,我使用了SVN。随着增加的功能越来越多,我自己都不知道做过哪些改动了。虽然可以在SVN可以查看,可是我用的客户端tortoiseSVN,一个功能就搞一个进程,受不了,一些java的客户端如有类似Tmate一些功能,就非常好用,自此我觉得SVN的功能有受限。接着就使用了perforce,不过除了官方的文档外,很少能找到其它的使用介绍。用惯了SVN,难以学perforce,好在坚持了下来。


perforce很不错,能满足我的要求,功能很贴心,难怪在google的guido要使用perforce做代码预览系统。perforce的主页有与SVN比较的文章。perforce_subversion.pdf