致水友们的一封信

标签:无

亲爱的水友们:

当您看到这封信的时候,我早已作出了一个非常艰难的决定。在中共当局停止对互联网进行审查和封锁之前,我决定将在下个月主机到期之时关闭本论坛。

我已经忍受了2年多了,从刚开始的一腔热情,到后来的满腔怒火,再到现在的无能为力,我想是时候say goodbye了。

推荐一款可供翻墙的CDN:CloudFlare

标签:无

一个月前就注意到这个叫CloudFlare的CDN,可惜设置时需要更改ns,而我在万网注册的几个CN域名是不能更改为未登记的ns的,于是一直没机会尝试。

今天又去买了个域名,然后就立即拿来测试了。在设置域名时,将一个子域的CNAME指定为ghs.google.com,然后与Google App Engine绑定。过了几分钟后,果然访问成功了。

在Chrome上使用小于12px的字号

标签:CSS, Google Chrome

很早以前Chrome就强制把小于12px的字显示为12px了,这导致要做一些特殊效果时很不给力,前些天在别人的CSS reset里看到了这一行,就是用于解决这个问题的:
-webkit-text-size-adjust:none;

自己瓜就别抱怨别人流氓

标签:无

最近有件事很火,忍不住评价一下。

起因就是有个做外挂的公司A说一家做网游的公司B偷窥玩家隐私,然后双方打起嘴仗来。

db.Property机制解析

标签:Google App Engine, Python

最开始接触GAE的API时,就对它的Property很感兴趣。因为我明明只是在Model定义时设置了类属性,但是它的实例的属性却必须和类属性的类型一致,还要接受各种检查之类的。只不过当时Python了解不深,看不懂其中的奥秘,而如今总算可以把它弄懂了。

Expando比Model的反序列化更花时间

标签:Google App Engine, Python

写了这样一个测试
from time import time

class Comment(db.Expando):
	email = db.StringProperty(required=True)
	content = db.TextProperty()
	format = db.IntegerProperty(default=0, indexed=False)
	approved = db.BooleanProperty(default=True)
	time = db.DateTimeProperty(auto_now_add=True)
	mod_time = db.DateTimeProperty(auto_now_add=True, indexed=False)

t=time()
Comment.all().fetch(1000)
print time()-t
从后台的执行情况来看,cpu时间是11078~11799ms。改成db.Model后,cpu时间是10319~10959ms,差不多少了0.8秒。

Model实例与dict和JSON相互转换的方法

标签:Google App Engine, Python

今天在读GAE SDK源码时发现,Entity实际上就是dict的子类,而Model也有个转换成Entity对象的_to_entity方法,于是可以轻易转换成dict对象,再用simplejson转换成JSON即可。

转换回去就更简单了,因为Model的构造函数是可以传字典参数的,而且还有个from_entity类方法。

« 看看还有什么好玩意