为四川人民祈祷! www.onefoundation.cn
logo of kjam.org
Archive: 2007-10

Django中的c变量

写pylons程序的时候,总是喜欢那些全局变量,session,request,还有h和c

尤其是c,相当于一个短小的命名空间,放入这个空间的变量,就可以暴露在模板中了。绝妙的主意,精彩的设计……

如何在django中这么做呢?django需要我们把要送到模板的变量写成一个字典,主意,是一个字典!伟大的动态的字典

v1=0
v2=0

return render_to_response('template.html',{'v1':v1,'v2':v2})

如果你有更多的参数,不久你就会厌倦了这样的写法。那么就学习pylons一样写一个c变量
c={}
v1=0
v2=0

c['v1']=v1 c['v2']=v2
return render_to_response('template.html',c)

无论有多少变量要传,最后一行都是这个样子。算得上django的小技巧吧!
comments: 2  
by kernel1983

Shanghaionrails

周末参加了shanghaionrails的活动,认识了不少玩ruby的朋友

要说ruby,我也试图学习过。语法中有些trick,使得我一时难以适应,于是放弃……从此看ruby的语法总是怪怪的。

不过一个群体总是可以让人克服这样那样的问题。很高兴认识这样的朋友们,也很期待有一个ruby或者rails的项目机会可以让我快速的了解更多ruby

依然惊讶于ruby的美丽符号,像可以在方法名中写上问号,冒号开始的symbol
comments: 1 | tags: ruby   
by kernel1983

Pylons的大杂烩

比较过rails和django

从来就没觉得这样的比较很恰当,为什么人们总是把这两样完全不同的东西进行比较。如果说乍看起来很像,那也应该是pylons而不是django,那么稍稍来了解一下pylons吧

Pylons的出现使得python世界之中的另外一个重要的framework TurboGears十分尴尬,Pylons和TurboGears几乎有着完全一致的设计理念,在我的理解中,Pylons实现得更加出色。个人观点:TurboGears可以不用搞了,注意:是个人观点。


Pylons的确是抄袭了很多框架的GoodIdea,在其中我们可以看到很多优秀的设计思想。

TG可能是最初吵着不要重复发明轮子的,于是写了一个脚本把一些它人为不错的东西捆绑了一起。这里面包括CherryPy和SQLAlchemy。Pylons做的更绝,不但绑了,而且绑了很多,比如你可以选择SQLAlchemy也可以选择SQLObject

再来说说和Rails很像的地方,关于Session的处理,它是可以放在各种地方,数据库,文件系统,Rails也是。但是Django不是,全部丢进数据库了,或许将来会有不同的打算。另外URL Dispatch方面Pylons使用的是Routes,它的主页上已经明确表明自己是Rails风格的Dispatcher。最后看看目录结构,和Rails一样让人莫不着头脑,当然仅对新手而言。

事实上,很长一段时间以来,我都没有去仔细了解Pylons。原因是我一直都没有正确的认识到Paste是什么。我自做聪明的认为Paste是一个脚本,但最后我才发现,Paste本身就是一个framework,非常low level的framework。这更加让人拍案叫绝。当TG开始整合各种库的时候,好比自己新写了一个类。但是Pylons从一开始就是继承了一个类,整个工作就在别人的基础上实现了,连自己这个轮子都不再需要被重新发明了。

像基本的输入/输出这样的功能,Pylons就是靠继承Paste得来的,顺便Pylons还得到了一个调式服务器和生成项目需要的脚本,这在几乎所有的框架中都有,Pylons当然也不能少。

接着Pylons需要一些模块来完成它需要的功能:为了实现像rails一样的URL Dispatch,Pylons吸收了Routes。为了实现Session和Cache,Pylons使用了Beaker。当需要模版引擎的时候,Pylons为我们提供了一堆候选者,Mako,Myght,Kid⋯⋯数据库还有SQLAlchemy和SQLObject两个现成的可以使用。Ajax也还有很多选择。

现在,Pylons的结构就大概的呈现在我们眼前了
comments: 3 | tags: pylons  rails  django   
by kernel1983

老朋友ffdshow

跟大家分享分享视频方面的
首先是播放

大家都知道播放网上down下来的视频用暴风影音就可以了,不过这应该是大概4年之前的认识了,那个时候刚刚发现这个暴好用的东西的时候,我急于向大家推荐

不过谁都知道Media Player Classic是一个开源的东西,向我这种极度懒惰的人,对于流氓软件或者恶意软件的防范之心超越一切。重装系统无异与慢性自杀,所以我永远不会装那些捆绑着希奇古怪插件的免费软件

如果你从来不播放rmvb的话,只需要两样东西就可以解决大部分需求:mplayerc(MPC)和ffdshow解码器,不用去装divx或者xvid,ffdshow可以满足大部分的需求 常见的divx格式h.264格式还有flv格式

需要嘱咐的就是,千万别到某某下载站去下载这些东西,mplayerc最好去sf下载,ffdshow最好去free-codec下载


接下来做一些深入的科普宣传

首先是ffdshow的名字含义。dshow就是DirectShow,熟悉DirectX的人应该有印象,Direct3D/DirectSound都是它的兄弟姐妹,可是随着时代的发展,它已经不属于DirectX的范畴了,现在想要使用DirectShow,我们必须安装Windows SDK。

提到ffdshow不得不提到另外一个项目,那就是ffmpeg。大家知道,音频/视频的编码解码,实际上就是一些算法的实现,ffmpeg就是这样一个编码的过程。如果是一个普通的程序需要实现编码/解码过程,可以调用动态库来实现,但是如果要让这个编码器在Windows系统中有效,就必须将ffmpeg封装成COM接口的形式。

ffdshow就是COM形式的ffmpeg。它可以对付大多数常见的编码,这是一个开源的实现。
comments: 0 | tags: dshow   
by kernel1983

Django ORM的查询条件

django的orm看起来相当的简单,但是要想用好,就得花上一些时间去仔细阅读reference了

只有应用中才会发现不足

往往做一些简单的应用,select都是等号。但是我们遇到了一个稍微别致的应用,查字典


Dictionary.objects.filter(word = w)

这样明显不行,如果我查询"china"一定找不到,因为是精确的match,所以你要输入"China"才可以找到中国
在这样紧急的情况,我们需要的是立刻查阅reference,原来上面的那一句等同于下面的
Dictionary.objects.filter(word__exact = w)

想要让查询忽略大小写,下面的写法就可以实现
Dictionary.objects.filter(word__iexact = w)

新的想法,当我输入前几个字的时候,可以查找出所有可能的单词
Dictionary.objects.filter(word__istartswith = w)

于是我们可以更加多样的控制SQL语句之中WHERE后面的条件,而不仅仅是等于
* exact
* iexact
* contains
* icontains
* gt
* gte
* lt
* lte
* in
* startswith
* istartswith
* endswith
* iendswith
* range
* year
* month
* day
* isnull
* search
* regex
* iregex
Django ORM为我们提供了这样的工具
comments: 0 | tags: django   
by kernel1983
12