msgbartop
用铅笔写日记,记录那最原始的美丽
msgbarbottom

基于Gaelyk框架快速开发谷歌云计算应用

其实这篇文章很久就打算写了,本来的想法是计划等到我的wp4gae项目有了博客雏形的时候,顺便写出来的。

可是事与愿违,我打算用groovy实现绘制验证码遇到了技术瓶颈,项目就一下子死在那了…详见邮件列表存档 囧rz

这一死就死了近两个月……好了,言归正传,话说用gaelyk 开发谷歌云计算(简称GAE)还是蛮棒的,而且它也是难得的几个面向GAE平台的groovy框架.

我就是在groovy官网看到它的链接的,主页是:http://gaelyk.appspot.com/,可以说gaelyk是一个又轻量级又强大易用的框架.

首先,确保本地eclipse(原谅我,我用的是eclipse) 安装了Google App Engine Plugin for Eclipse,Groovy-Eclipse 插件.
根据消息,后者最新版本为 Groovy-Eclipse 2.0.2,安装地址为:
http://dist.springsource.org/release/GRECLIPSE/e3.5/
http://dist.springsource.org/release/GRECLIPSE/e3.6/ (for Helios)

顺便说一句,eclipse 最新版本3.6 在widnows下有内存溢出现象,经常导致假死,这已经是公认bug了.

在groovy 和 gae 插件安装了后,现在可以创建基于gaelyk的项目。
有两种选择:
1,只下载 gaelyk-0.4.2.jar 文件,在项目中导入.缺点是必须对项目目录结构很清楚。
2,就是下载官方提供好的项目模板,解压后,可以直接导入到eclipse中。而且里面还自带了一些GAE的jar包.

本人选择的是后者方法,里面还有一些例子,可以参考学习.

一切完成后,目录结构如图:
gaelyk-directory-layout

前期工作好了后,就可以开始开发项目了.

习惯了一般的b/s开发,忽然转变到云计算平台,一般人都不会太舒服。不过gaelyk 是遵循经典的MVC模式的,它把视图和后台的逻辑处理很明显的分开了.

视图前台显示部分交给了视图模板 *.gtpl(相当于jsp),而把处理程序通通放在了Groovlet 里(类似servlet)。这样的话,思路就变的清晰了.

和jsp一样,gaelyk提供如 request、response、appliaction、session 等隐式对象,随用随拿.

当然,gaelyk 还提供了一些特殊的内置对象,比如 params(据说是学ruby on rails),就是一个封装了请求体里面参数的键值对集合, 或者像 headers,就是请求头里面的信息,以供用户调用.
厌烦了log4j ?不妨尝试下 gaelyk的 GroovyLogger,一样很棒。

除了这些个一开始就实例化好待用的对象,官方叫它“积极变量”,gaelyk 还提供了一些“消极变量”(即第一次请求时才实例化),
有点类似于 饿汉模式 和 懒汉模式阿.
如 out、html.

当然还有一些 gae 的对象,如 datastore,用于操作数据库.厌烦了gae 自带的jdo、jpa 方式。尝试一下gaelyk的条件式查询,很是方便。最重要的一点是其中不会产生一句sql语句,呵呵,sql不好的同学们有福了 :)

在gtpl 视图模板里面,默认支持el表达式,原生态支持 小脚本、代码块以及表达式.(因为groovy也是java 囧rz)
还有更有趣的,gaelyk 导入类时支持通过 as xxx 起别名,很方便.而跳转和重定向的时候也有简洁的办法,直接 forward "url"、redirecr "url" 即可,再也不用Request.xxx.dispatch.xxxx.findforward 了.

gaelyk 还有一个亮点就是,支持地址重写.只要稍稍编辑 web.xml (交由 RoutesFilter 处理),再指定规则文件.
就可以实现伪静态了.
如 get "/topic/@title" forward:"/showtopic.groovy?title=@title" 即可.而且还可以通过 validate 进行验证,过滤掉非法参数. 让被注入成为往事. 呵呵
并且,从gaelyk 0.4.1 开始,支持缓存 cache 了.如 cache: 3.hours 即缓存3小时.

还有更让人叫绝的,gaelyk 里面根本不需要实体类,呵呵
因为Entity对象是可以直接构造的,而且groovy 里面没有对象类型的区分(灰常像php、javascript),也就给了方便.
比如我创建一个用户,包含用户名、密码.

Entity entity = new Entity("user"); 注意导包 import com.google.appengine.api.datastore.Entity

然后只需要用户从表单提交对应的值过来。填充入user实体中.
还在用request.getxxxbyxxx???忘了上面提到的 params ?

gaelyk 提供你想不到的方法访问实体,
entity['name'] = params['name']
或者
entity.password = params['password']

亦可 entity << params 全部填充.

这时候,只需调用 entity的 save() 方法,就可以将数据持久化了.
删除只需同样调用 entity 的 detele() 方法即可,若需起事务,只需把语句放入datastore.withTransaction{}的闭包中即可.

怎么样?增删就是如此的简单.

至于查询,更是简单.指定要查询的实体,扔给几个条件、标准就出来了(有点类似hibernate的Criteria查询).
创建query.
def query = new Query("user")

给出条件(相当于sql where)
query.addFilter("name", Query.FilterOperator.EQUAL, "xxx")

指定排序(相当于sql order by)
query.addSort("name", Query.SortDirection.DESCENDING)

预编译
PreparedQuery preparedQuery = datastore.prepare(query)

设定单次结果集大小,和漂移位置.实现分页
def list = preparedQuery.asList(withLimit(10).offset(20)) //查询20到30列.

这样增删查均完成了.gaelyk 真的是很省事呀.

当然,gaelyk 提供远不止这些,还有像 email 功能、memcache 功能、 BlobStore 、queue 等功能.这些我都没有用过,将来可能会更多.

不过作为一个开发者来说,这样的框架只会让我们的工作越来越方便,效率越来越高.

关于gaelyk 的更多例子,见:http://gaelyk.appspot.com/tutorial
如果对我的wp4gae源码有兴趣,请看:http://code.google.com/p/wp4gae/source/browse/

wp4gae现运行于 http://xia-zhengxin.appspot.com/,欢迎围观.
注:相当alpha的版本.

世界杯进入尾声

转眼已到7月10号,2010南非世界杯已经进入一二、三四名争夺战了。回头看本届杯赛,传统强队如巴西、德国悉数落马,亚洲球队全军覆没,非洲球队无一幸存。搞到最后,居然是荷兰和前欧洲冠军西班牙会师决战,真是让人大跌眼镜。

再说说我,这次世界杯的转播,我一般看的都是晚上 7:30 和 10:30 的两场,凌晨2:30的球没看几场(就是巴西对朝鲜的那场).感觉以前熬夜看球的那股劲已经一去不复返了.正是很怀恋以前的时光啊 哈哈

不过这次还好,季军争夺赛今晚就要打响了,还是看一看吧,虽然没什么看头.明天的那场就很难讲了.虽然是决赛,不过两支球队和球风都不是很喜欢,而且伟大的预言帝--章鱼哥已经放出话来,一针见血的指出西班牙会夺冠,连最后的一丝悬念也没有留给广大球迷…… :)

离闭幕也没几天了,世界杯的月份就算过去了。总体还行,还算成功.

最后值得一提的是,本人这个月的工资终于发下来了(数目就不透露了,丢不起那人)。好歹也算是对我这个月工作的一个价值的体现,还算不错.

不过本来说好干一个月转正的,居然又tmd的变卦到了月底,我无语~

本周杂记

不知不觉,已经进入7月份了。时间过的真快啊.一眨眼暑假就快来临了,可是这跟我又有几毛钱关系呢?

不过,说实话,这个天气的确是很贴切即将来临的暑假,真的是很热.
或者说是又闷又热,最近上海的天气的确是很不稳定.

总的来说,这周很平静.期间世界杯休赛了两天,终于可以睡会了.谢谢国际足联,谢谢欧足联,谢谢亚足联以及谢谢布拉特本人.

不过我还是想问问,wordpress 官方汉化小组是干什么吃的?
因为从wordpress 3.0 发布之日起(WordPress 3.0 “Thelonious” 2010年06月17日),我在后台不断的被推荐升级至最新版本.

wp 3.0 升级

上图那样的提示我不知道看了多少遍了.

我每次都在想,再等等,中文版就快来了.

可是直到今日此时此刻,仍无音讯.
瞧这办事效率 囧rz

还能怎么办,接着等呗.

再说说,刚刚巴西对阵荷兰的观后感,一句话概括:“巴西队是死在自己手里的”.

本人目前情绪稳定.表示影响不大。送走了巴西,接下来就看德国、阿根廷了.

ps:ie 8 真杯具,写个博客都这么费劲,默哀.

_完_ 小鑫 于 2010.7.3 凌晨.

如果世界杯在中国举办……

首先,我承认我这个想法确属于心血来潮,怎么说呢,或者说是一闪而过的念头.至于那个猴年马月变成现实我就不深究了.

我为什么会突然冒出这个想法,其实很简单。就是不知道广大球迷在看球时候有没有发觉,今年的南非世界杯赛场上,在著名品牌“阿迪达斯”、“索尼”、“三星”这些世界杯的常客的广告牌周边赫然出现了一个叫“中国-英利”广告牌.下图:

Yingli solar

在英文扎堆的场边广告里看到自己国家的文字,不得不说是一件很棒的事情.而且这届杯赛貌似没有看到“耐克”和“吉利”,它们应该算是世界杯的元老级赞助商了。能挤掉这些品牌,也是很能说明中国品牌的竞争力的,呵呵

于是,我便细数起来,这些品牌所属的国家,韩国、日本,02年韩日世界杯。美国 也举办过世界杯,意大利 更不要说了,英国也举办过,德国 也是 06年 等等

想想看这些国家均举办过世界杯,那么我们中国肯定也不能落下阿(不要跟我谈球技,请看今年的南非队和08欧洲杯的奥地利队).

不过如果真的举办世界杯的话,国足那帮废品倒是省心,因为可以直接作为东道主进入决赛圈.然后的问题就是由那几个城市承办世界杯,北方:北京算一个(作为首都,肯定要有)、天津也算一个。长江流域:上海算一个、江苏的南京也应该算一个。南方:广州也算一个、成都要不算一个?最后再搞个海南。呵呵

这几个城市可让世界杯的参赛队们够呛,如果小组赛踢完了回家也就算了。如果进入淘汰赛的话,今天在北京打比赛,明天还要飞到海南,活活累死了,哈哈。要怪只能怪我们国家国土面积大,这段距离在欧洲可以出几个国了,估计纵跨整个欧洲大陆都不是问题.

说不定,国足能利用这个优势,以逸待劳,然后……好了就此打住.

不过调侃归调侃,我真的希望能有那么一天。那样的话,国内广大球迷就再也不用熬夜、倒时差啦,真是福音呐
当年韩日世界杯的时候不就是活生生的例子吗 :)

世界杯杂记

不知不觉之中,世界杯小组赛第一回合已经接近尾声了.除了今晚即将登场的西班牙和瑞士等H组球队,大多数32强都悉数上演了各自世界杯的首演.

给我感觉这场亚洲球队表现尤为抢眼,韩日均一场首胜开始了本届杯赛之旅,而昨晚出场的朝鲜队更是打出了亚洲球队的骨气.
阔别世界杯决赛圈四十几年,再次归来的朝鲜队并没有表现出任何畏惧和怵场,开场就用密集的防守让五星巴西哑了火,硬是用顽强的意志和密集防守扛到了半场结束.当然其中朝鲜队也有机会.

不过下半场麦孔匪夷所思的进球打破了僵局,接下来卡卡的妙传又给了朝鲜队以重创.当然这个“重创”只是我的个人认为,换作一般球队估计早就兵败如山倒了,可是我看不出来有任何放弃的迹象.特别是朝鲜队某位后卫(对不起,他的名字我已记不起)在高强度的运动量下大腿抽筋,被抬到场边接受治疗。估计是无法坚持比赛了,朝鲜队已经准备换人了。

可是就是在第四官员刚打算举起告示牌的时候,这位队员居然回到了场内,他选择了坚持比赛.这是什么样的精神?永不言弃!
有这样的精神支撑的球队应该获得更多的尊重.

很明显,作为巴西球迷的我,此时更希望朝鲜队能够获得进球.

果然,机会出现在接近伤停补时的时候,朝鲜队利用巴西队松懈(准确的讲应该是轻敌),打出了快速反击。由他们的8号队员单刀将球送入了巴西队的网窝.也算是给五星巴西上了一课.呵呵

这时候巴西主教练邓加的表情可是很复杂的 :) 当然,单凭顽强的意志并不能带领朝鲜队在世界杯上走太远,在面对技术球队时,胜利总是奢望.最终,朝鲜队1:2 负于巴西. 可是我相信这场比赛将是一场难忘的比赛,会是一场将被载入世界杯历史的比赛.

在此祝福朝鲜队能够坚持走下去,成为黑马.

本届世界杯看到现在,很多人的感觉是进球太少。两场互交白卷,1:0 也有三四场。看的略显沉闷.
很多之前大为看好的比赛,最后都是平淡的1:1、0:0,不过我认为这只是世界杯的开始,接下来应该会更加精彩的,呵呵

本届世界杯开幕后,我一般都是看两场,7点半 和 10点整 的两场,最近端午小长假才有了更多的时间,让好看的比赛一场没落下.一转眼假期就接近尾声了,真有点舍不得,呵呵

哦,对了。今天是端午节,有没有吃粽子阿?我个人觉得不管喜欢与否,还是吃一个吧,也算是过过节了……

最后,BS一下CNTV(中国网络电视台),这个废品东西,用它看CCTV5居然延迟了2-3分钟。和同学们一起聊球赛,人家那边都进了,我这边还要等2分钟才能看到,囧rz 这哪里是什么直播呀?!有的时候连QQ弹窗都出来了,我这边还没进球……

还要BS下CCTV,出于保护主义关掉了mms://live.cctv.com,官方流也用不了.这不是逼我们去用CNTV吗??不过好在我谷歌到了网络上几个可用的mms媒体流.

mms://61.175.162.38/cctv5 (较稳定)

mms://222.77.190.24/cctv5

mms://222.77.190.24:9090/cctv5

以上地址经测试可用,延迟大概在5-10s,网速好的朋友可以考虑.

我这边很流畅,如图:
mms CCTV5 世界杯

注:
https://cnserver.tk/data/%E6%96%87%E6%A1%A3/CCTV%20MMS.txt
这里是我搜集的一些mms地址,如果发现更好的,会及时更新的.

最后,让我们一起享受世界杯,享受足球吧