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

SMTP on Leopard

Leopard 上预装了 postfix, 但是smtp 服务 25 端口没有打开, 默认只能用 sendmail 发送邮件

PHP没有问题, 发送邮件可以用 sendmail 或者 smtp.
Python 倒是没有支持的那么完善, smtp 用到 smtplib, sendmail 命令则没有包装

解决方法有两种
自己写一个函数包装一下sendmail
def sendmail():
    sendmail_location = "/usr/sbin/sendmail" # sendmail location
    p = os.popen("%s -t" % sendmail_location, "w")
    p.write("From: %s\n" % "from@somewhere.com")
    p.write("To: %s\n" % "to@somewhereelse.com")
    p.write("Subject: thesubject\n")
    p.write("\n") # blank line separating headers from body
    p.write("body of the mail")
    status = p.close()
    if status != 0:
        print "Sendmail exit status", status

或者打开 smtp 端口
sudo postfix start
测试一下
telnet 127.0.0.1 25
不用的时候关闭
sudo postfix stop
comments: 0  
by kernel1983

PythonGameLibraries

回到python
最近又在看图形方面的东西, python官方网站wiki上GameLibraries给出了很多链接.
这里我们能大概的看出三个流派, PyGame/PyGlet/PyOpenGL, 除此以外也有部分散兵游泳, 比如blender和panda3d.
PyGame是包装的SDL, PyGlet和PyOpenGL直接面对OpenGL, 但是包装的方式不同, PyGlet采用的是ctypes方式, 从python2.5开始, ctypes已经进入标准库. PyOpenGL则是SWIG方式, SWIG是一个工具, 能够快速的让许多脚本语言调用C写的库.
comments: 0  
by kernel1983

GAE Java

最近GAE Java横空出世, 给了我一个读读Java代码的适当理由

对于xml天马行空的Java框架世界以及J2EE我是完全一头雾水, 不过基本的Servelet/JSP我还是有点模糊印象, 下载了GAE Java SDK以后, 找了最简单的示范代码来阅读.

JSP文件会被先转为servelet, 最终被编译成class文件, servelet代码也很好认识, 看到doGet/doPost这样的方法, 就能够猜出大概含义.
另外在我们经常使用的web framework中的url dispatch, 也可以从web.xml体现出来, 不过不知道它功能上是不是可以更加灵活一点, 比如支持个正则表达式什么的.
ORM的话, 这次从GAE的文档上就可以看出, 是通过JDO来支持google datastore.
Google之前的GWT似乎也派上了用场, 要是你只擅长写java的话.
这么看来, 该有的都有了, 基本不需要其他的框架. 或许有朋友会在上面部署spring或者struts, 实现MVC, 全凭个人喜好.

另外, 我发现初学者如果在google搜索spring或者struts, 往往会被大量的口水误导, 或许这辈子都搞不清楚那些是什么玩意. 首先要打好servelet基础, 然后要去他们的官方网站, 比如struts 读它的 hello-world, 才会最快的上手.

总的来说, GAE Java还是相当 KISS 的, 通过Java Servelet支持Java世界中的everything, 和GAE Python通过支持WSGI标准来支持几乎所有的python框架一样.

Web Serverside差不多各种语言都有演绎, 大多都在重复相同的思路, 已经没有什么悬念.
相比而言Clientside前端编程只有Javascript一家独大, 并且还有较大的空间可以挖掘.
Webkit的趋势越来越好, 相信在不久的将来会一统desktop和mobile, 让我们拭目以待.
comments: 1  
by kernel1983

Sizzle

/*!
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */

在jQurey 1.3.x 代码中找到的注释, 一个更加轻量级的js框架 Sizzle. 如果有时候你觉得 jQurey 还是太大了, 就用这个吧!

OK, 说说这次我为什么又跑去看 jQuery 代码, 主要是为了搞清楚一个问题:
首先, 如果html里面有一个div和一个span指定了相同的id怎么办? getElementById 毫不客气, 只认第一个.

在 jQurey 中, 如果你要选择后面那个元素, 那么$('span.id_name')或许是我们的另外一个选择, 这时我们享受了框架给我们提供的便利.
仔细想想, 框架一定不是简单的包装了 getElementById 这个常用函数, 它一定做了很多额外工作.

在jQuery 1.3.x 中 CSS Selector Engine 这样的工作被交给了 Sizzle 来完成, 查看 1.2.x 的代码则发现是 jQuery 自己做了这部分功能.
这也是为什么 1.3.x 宣称自己有着更好性能的原因.
comments: 3  
by kernel1983
1