A simple guest book on Google App Engine (Java)

终于算是有些时间,可以试试Google新推出的App Engine的Java语言支持。
Finally got some time to have a trial on Google App Engine – the Java Language.

我下载了Eclipse 3.4.1企业开发版并从更新站点安装了Google插件。在Google插件的帮助下,我在新工程里创建了一个简单的留言簿(GuestBook)模块,并根据文档和范例,写了一个留言(Comment)服务,下面跟用JDO(Java Data Objects)实现的DTO/DAO(Data Transfer/Access Objects)接起来。为了单元测试DAO,还依照GAE官方提供的方法写了JUnit test用的基类来创建App Engine的本地环境。
I’ve downloaded an Eclipse 3.4.1 EE and installed Google Plug-in for Eclipse via the update site. Using the Google Plug-in, I’ve created a GuestBook module, then a Comment service, and a JDO based DTO/DAO for Comment. In addition, I’ve tried out the unit test of a GAE project in local environment.

实际上做完这个例子兴奋劲就过去了,多少有些想法值得提一下,会放在下一篇博文里。
I’ve got some comments on this first trial, will update in another blog post later.

总之,以下是已经部署运行在Google云计算环境里边的例子应用:
Anyway, here is the running application hosted on Google’s cloud environment:

http://evis-lab.appspot.com/

源码也在Google Code上边,欢迎朋友们指正:
And the source code is always available here:

https://evis-lab.googlecode.com/svn/appengine/GuestBook/trunk

打算在GAE上尝试各种Java技术或框架的朋友们,不妨经常关注以下这个帖子:
For those are trying various Java techniques on GAE, a thread is strongly recommended:

Will It Play in App Engine (or this wiki page)


ActiveSync同步手机与Google通讯录及日历

从Google日历的英文版界面发现Google推出了新功能,与iPhone同步。现在只支持了同步通讯录和日历两个项目。使用iPhone的用户可以参考官方指南:http://www.google.com/support/mobile/bin/answer.py?answer=138740&ctx=sibling&topic=14252

而这个功能的实现方式很有趣。从配置步骤中可以看到,这个同步使用了Microsoft Exchange。难道Google买了微软的Exchange Server?从竞争关系上看感觉不太可能。也许Google仅是使用了Exchange的协议和标准而已,毕竟更好地支持iPhone会有可观的回报。

这是好消息,这意味着不只iPhone,手机版的ActiveSync软件都可以连接Google进行同步了。笔者的手机是索爱的G700c,预装有ActiveSync的Symbian/UIQ版本,其他手机没有测试过。下面简要介绍一下配置使用的步骤。

设置步骤

  1. 用索爱的官方软件备份手机,尤其是通讯录和日历。
  2. 在Google申请一个GMail账号,这也是各种Google服务可以通用的Google Account。如果已经有了,最好确保GMail的通讯录和Google日历都是空的,这样第一次同步会轻松很多。
  3. 运行手机的ActiveSync,在配置向导中,按照上边Google提供的指南配置同步账户,其中不太一样的是,用户名需以@gmail.com的后缀结尾,而连接互联网则需要用到GPRS。账户验证成功后才能进行下一步。
  4. 在配置中,勾选同步日历、同步通讯录,但同步邮件不能勾选,因为Google截止本文发稿时尚未支持邮件的Exchange同步。
  5. 进行第一次同步的时候,ActiveSync应该会提示是打算覆盖(覆盖掉手机数据)还是合并。这时选择合并,会把手机端的通讯录和日历上传到Google。同步的GPRS数据流量也许会上百KB。两边只有有这样一次一致过,以后的同步基本上就不会出问题,而且流量会比较小。
  6. 第一次同步成功后,可以登录自己的GMail查看一下通讯录,顺便再看一下Google日历。这时手机上有的项目,Google上应该都有。
  7. 为手机的ActiveSync配置同步频率,比如1小时,不推荐“推入”,费用比较高而且费电。
  8. 之后可以在手机上或GMail、Google日历里增改项目。两端会自动保持同步。

可以尝试一下把http://www.google.com/calendar/ical/china__zh_cn@holiday.calendar.google.com/public/basic.ics下载下来并导入到自己的Google日历里,经过同步以后手机日历也能显示中国节假日了。

疑难问题

如果手机以前已经配置过ActiveSync并可以正常使用,那么这款工具是不支持添加多个账户的。方便起见,可以选择卸载手机上的ActiveSync软件。索爱官网支持频道有这款软件最新版的下载。下载后再次安装到手机上,就可以重新配置账户了。

笔者在与Google首次同步过程中还发生了同步失败的情况,而这时去GMail里查看通讯录,条目已经进去一半左右。反复尝试未果,笔者便从自己PC机的Outlook中导出了通讯录(与手机上的内容一致)的CSV文件(Windows,逗号分隔),在GMail通讯录中删除刚才导入的,然后用其导入功能导入此文件。再次运行手机ActiveSync同步,同步成功,但手机和Gmail通讯录中各多出一些重复项(不是全部)。手工删除两端的多余的重复项目。再次同步,终于正常了。

同类服务

Google的GMail和日历都是免费服务,其同步功能也没有看到付费条款。当然,Google也有用于中小企业的Google Apps这样的付费版本。而在线Exchange服务提供商还有其他选择。比如笔者曾试过www.mail2web.com的服务,同样也可以由手机端的ActiveSync进行同步,这个网站后台应该是完整的Microsoft Exchange Server,所以可同步项目更全,包括了邮件、通讯录、日历、任务、便签等,缺点是从大陆这边的连接有点慢,也许它的收费服务会好一些。

扩展话题

从主题引申一下。手机是工具,这是这篇文章的基本假设。

在开源越来越活跃的今天,手机的数据和操作也慢慢从品牌私有的格式转向了符合一定的标准。通过对身边的一些人的观察,视手机为工具的人们往往不愿意换新手机,哪怕旧手机使用起来已经很不方便了。原因至少有一条,手机里边的通讯录很重要。广义来说,手机里的私人数据往往对于所有者都很重要。大部分品牌手机会提供可以在PC机上运行的同步软件或备份软件,而这些软件往往又把用户禁锢某一品牌甚至某一型号的手机上。只有这类同步符合一定标准,用户的选择权才能得以发挥。这就产生了新的市场机会,市场需要第三方来完善数据同步的解决方案。也正是应对这样的需求,个人信息管理软件(PIM)渗透到了移动设备的领域,微软有Outlook和Exchange Server;IBM有Lotus Notes和Domino Server;而Google则是先后提供了GMail、Google Calendar的在线服务。

编者按:用手机记一些私人事情时,无论缓急,可以优先考虑用手机自带的日历来记。这样可以让手机帮自己做日程管理,也锻炼了自己的时间观念。


在FeedBurner的Feed预览页面中增加订阅工具

很多博客、播客乃至其他一些应用都支持订阅源(Feed),比如提供RSS、ATOM。从技术层面看,RSS或ATOM分别都是一种XML标准。订阅者无论使用哪一种订阅工具(或阅读器,news reader),无论这种订阅工具是在线的还是离线的,只要订阅工具支持RSS等标准,订阅者就可以脱离原网站,以自己习惯的方式阅读网站的内容。

凡是为读者提供订阅源的网站,都不约而同的要把这个Feed “烧(burn)”一下。简单的说,烧一下就吸引眼球了,烧一下就有钱途了。说到比较著名的第三方“烧源”服务商,国际上有最近刚被Google收购的http://www.feedburner.com,国内比如http://www.feedsky.com,两者服务大同小异,或者说很像。

相信FeedBurner被Google收购后,会被更多国内博客、站长选择——整合了Google的在线广告业务AdSense。

跑题远了,FeedBurner有一项免费服务:预览页面(Optimize –> BrowserFriendly),能把目标RSS在浏览器中漂亮的展示出来,还提供进一步订阅的链接按钮。例子可以参考http://www.feedburner.com/fb/i/bf/new_style_zoom.gif

目标

为自己的Feed加入新的订阅工具,如国内的鲜果、抓虾。

效果

FeedBurner-BrowserFrindly-200901

步骤

详见http://www.google.com/support/feedburner/bin/answer.py?answer=78963

简单来说,要对目标工具定制一个“小鸡仔(chicklet,个人翻译)”,其实是一段XML。然后上传到某一网址。接下来在BrowserFriendly设置页面点击More Subscription Options,如下图。

FeedBurner-BrowserFrindly-config-200901

加入网址,点击Add(没反应就多点几次),在新出现的图标前打勾,如下图。记得保存。

FeedBurner-BrowserFrindly-add-chicklets-200901

之前有国内的网友制作了一些并放到了Google Pages上。博主也简单做了两个,网址分别是: