Blog的RSS输出终于恢复正常了
不得不说,值得庆祝,距离上一次GoogleReader上RSS更新已经有3个多月了,终于,恢复了。
“简单输入”是于2009.5.10母亲节推出的一款帮助中文输入的web app,参考了手机键盘的布局以及输入方式,帮助那些不习惯使用电脑键盘输入的用户完成中文、字母、数字和符号的输入。
“简单输入”的网址是 http://ezkeypad.at-labs.co.cc,使用过程中无需下载、安装、等待、升级。
在推出“简单输入”服务的第一个版本的同时,我们的开发团队一共完成如下的工作:
当前,我们只是完成了一个基本的框架,一个用户界面友好的用户输入程序还需要投入更多的精力来完善,使用户获得更好的使用体验。
我们的Roadmap如下:
如果你是一位热心的朋友,欢迎你将“简单输入”介绍给愿意使用她的人们,也欢迎你提出宝贵意见;如果你是一位开发者,欢迎你参与到我们的开发中来。
联系方式: tang.jiyu at gmail dot com
今天是母亲节,花费了近一个月业余时间的作品“简单输入 – 网页版”也正式上线了,作为礼物送给老妈。
老妈是一个与时俱进的人,看到现在计算机飞速发展,渐渐的感觉自己变成了“文盲”,于是利用退休时间学起电脑来,电脑的正常的使用可以循序渐渐的教会老妈,但是教电脑打字实在是个困难的事情,键盘的布置对于老妈来说实在是太复杂了,于是我灵机一动,见平日老妈发起短信来指法熟练,立马开发了这个“简单输入 – 网页版”,帮助老妈进行电脑输入。
简单输入 – 网页版 是一个web小程序,模拟手机键盘布局,提供多种输入法,用*键切换,支持:
简单来说就是一个web版的手机输入法。当前,用户可以通过使用web中的模拟手机键盘输入后,将输入内容拷贝至对应的地方。
访问的网址是: http://ezkeypad.at-labs.co.cc
欢迎大家留下宝贵的意见。
Django的设计自成体系,也蛮有趣,并颇为在理。
以前,开发普通的web程序的时候,不管是Apache还是IIS,只要设置了wwwroot,根据其里面的目录结构,就可以很容易的访问到放在wwwroot下的静态文件,例如一个文件的目录是 wwwroot/css/base.css,那么即可通过http://localhost/css/base.css访问到这个文件,挺方便的。当时在django中要实现这一功能,就稍微麻烦一些,需要一些列的设置,具体可以参看这里:
按照Django的设计思想,类似于Apache一样地web server已经能提供一个非常完美的静态文件访问服务了,而Django作为一个web framework来提供此类服务倒是不太适合,因此,在Django中,只有在debug模式下,才可以提供这个功能,方便开发人员调试,如果是真正的产品上线,就只能使用单独的服务器来提供静态文件了。
这两天在折腾app-engine-patch这个项目,这是一个使用在Google App Engine中的开源项目,在AppEngine中提供一个较为真实的Django环境,本以为想提供静态文件的访问也得稍显麻烦的设置一番,后来发现,在最新的0.9.2版中,只需要将文件拷贝到<root>/media中,即可通过http://localhost:8000/media/XXX来访问了,十分方便。
闲逛在douban.com,发现美剧真是越来越流行,N多朋友都在追美剧,可恶的美剧也是调足大家的胃口,以蜗牛般每周一集的速度播放着。不同的人,也有不同追美剧的方法,我自己是通过定时访问gougou.com,从他的搜索引擎寻找美剧的下载连接,由于太懒,于是写了个小工具 (可以看这里 http://is.gd/cEQL),通过GoogleReader来自动追gougou.com上的美剧,现在舒坦了,每日只需要看看自己的GR上的未读条目即可知道是否有最新的美剧提供下载。后来发现,在douban.com上的朋友很多都是通过Youku.com来追美剧,Youku上看美剧就更加方便了,都不用下载,直接在线看,不过画质稍微差一些。
为了满足这部分网友的需要,于是也码了几行代码,弄了一个小工具,现在使用GoogleReader也可以追Youku.com上的美剧了。
使用方法:
1. 访问http://pipes.yahoo.com/jiyu/youkusearch,在“请输出要在youku.com中搜索的内容”输入框中输入你想要追的美剧,例如,输入“越狱第四季”,然后点击“Run Pipe”。
2. 稍微等待一会,结果就出来了,搜索结果的上方有一个图标
,直接点击就可以订阅到GoogleReader了。
如果还不太明白怎么操作,可以看这里 http://is.gd/cEQL ,里面有截图。
Youku.com的更新一般比Gougou.com要快,这下子更加方便了。如果你用上了,觉得还不错,请给我留个言,鼓励鼓励~~~
如果你是:
1. 热爱美剧,每周追最新的《越狱》、《英雄》、《豪斯医生》、《实习医生格蕾》、《绝望的主妇》等。
2. 不方便BT下载,通常通过Gougou.com提供的影视搜索以及迅雷来下载最新美剧。
3. 凑巧你有订阅RSS的习惯 (如果不了解RSS,可以看这里),并且经常使用Google Reader或者其他经典RSS阅读器。
4. 或者你存在一种困扰,每到网上放出新剧来之前就寝食难安、兴奋,时不时的访问 http://www.gougou.com 来搜索最新的剧集。
那么下面介绍的这个小工具一定十分适合你,可以通过Google Reader或者其他RSS阅读器来追踪最新的美剧。 操作步骤十分简单,一共为两步:
1. 访问 http://pipes.yahoo.com/jiyu/gougousearch,你将看到如下的界面,在输入框中输入你想追的最新美剧的名称,最好同时加上当前的是第几季,例如,你可以输入“越狱第四季”,然后点击”Run Pipe”。
2. 一阵暴风骤雨般的计算后,会列出一堆结果,这些都是Gougou.com返回给我们的结果,也就是你想得到的东西,如下图。看到里面有订阅到Google Reader的按钮,你可以直接点击订阅,或者你有其他需求,可以点击旁边的菜单,直接获取RSS的输出。
3. 第三点不是步骤,只是为了做一些介绍,一旦订阅到Google Reader后,你可以将繁重的体力劳动交给计算机了,你需要按照你的正常习惯浏览GR里的新闻/博客,一旦Gougou.com中有相关数据的更新,就会通过你订阅的这个Feed通知你,一切都不用人工干预了。接到新剧集的Feed通知后,你只需要点击下载就好了。
还需要对Feed中的数据做一下说明,影片质量:star5表示接近DVD画质,推荐下载,数字越大,画质越好,其他两个数是影片的文件大小和格式。
如果你不是追美剧,但是你也关心Gougou.com中某一部电影的搜索结果,也可以使用同样的方法。希望大家玩得开心。
如果你关心实现,你可以继续读下去:
1. 实现原理很简单,写了一个小工具,帮助将Gougou.com的搜索结果转换为ATOM的格式,然后让Yahoo! Pipes来调用。
2. 用到了AppEngine作为web服务的hoster,用到了BeautifulSoup帮助解析HTML,用到了Feed Validator来验证Feed格式的规范性,说起来惭愧,因为比较懒,输出的Feed还是存在一些语法错误的,但是GR和Yahoo! Pipes都能正常识别,就先不管了,如果出现了使用问题再来修改吧。
一个例子:
想从http://localhost:8080/?keyword=something 获取keyword的值,通常来说,在你的脚本中只需要有如下代码:
class MainHandler(webapp.RequestHandler):
def get(self):
self.response.out.write(self.request.get(’keyword’))
但如果keyword如果是中文,情况就变得复杂了,直接使用self.request.get(’keyword’)是获取不到内容的,返回了一个空,或者是u”,通过查看google.appengine.ext.webapp.Request的父类webob的代码, 发现返回空的原因是解码错误了,于是使用下面代码可以获取到正确的值。
self.request.charset=’GBK’
self.response.out.write(self.request.get(’keyword’))
google的时候,发现有的兄弟说
self.request.get(’keyword’).encode(’utf-8′)也可以正常工作,但是我的环境中却不行。:-(
我的环境:Python 2.5.2, AppEngine SDK 1.1.7, Firefox 3.0.1
续:
此方法在真实的GAE环境中也是可以正常运行的。但是需要注意,如果URL传递过来的文本流是UTF-8的编码,则需要设置self.request.charset=’UTF-8′。我在使用Yahoo! Pipes的时候遇到过UTF-8的情况。
Google推出了一系列免费的产品,Gmail, Google Calendar, Google Reader, Google Notebook等,其目的就是增加用户粘合度,让大家最终离不开Google。我应该算这些产品的忠实用户吧,每日上班头一件事必是打开GoogleReader了解世界上发生的新鲜事,各种类别的博客、新闻、水木十大、影视、财经的Feed,让我完全不用流连于各大门户了解资讯,GR就搞定我关心的所有内容。同时,GR里面还可以标识已读的条目,让我时刻关注最新、未读的新闻。GR还有方便的搜索功能,一个简单的关键词语即可定位到最精确的条目。
当然,对GR有了依赖后,对于那些不提供RSS/ATOM输出的内容则觉得十分不方便,例如,家里只安装了歌华有线,为了获取最新的DVD电影,我常是定期的去gougou.com的首页查询最新电影的发布情况,时间长了,也觉得麻烦,找了一圈也没找到gougou.com最新电影的RSS输出,于是决定自己弄一个。
整了一天,也算初步实现了:
1. 使用 http://schedulerservice.appspot.com/ 的服务,定时(每隔24小时)去 http://www.gougou.com/rank/top_9_0.html 获取最新电影的情况,存入数据库中
2. 输出符合ATOM协议的内容,可以使用GR或者其他的RSS阅读器订阅。
3. 用到了AppEngine提供的web服务,使用BeautifulSoup解析HTML
其实你不用关心是怎么实现的,只需要关心下面的连接,将其加入到你的RSS阅读器就好了:
1. 下面是gougou.com 最新电影的Feed,里面包含DVD版、抢先版以及预告片,可以直接点击订阅。
2. 我对于预告片和抢先版,其实没有太大兴趣,于是用Yahoo! Pipes做了一个过滤,下面是链接,只包含gougou.com上提供DVD下载的最新电影,可以直接点击订阅。
1. How to access GAE-Util-Suit?
The website is http://gaeutilsuit.appspot.com.
2. What is GAE-Util-Suit?
GAE-Util-Suit is a web tool. It can be used to create AppEngine project files. The AppEngine developers could choose framework, module and service, then click button. All you need are ready for you.
3. Where is GAE-Util-Suit from?
GAE-Util-Suit is inspired by ZipMe of Manatlan (http://is.gd/9AXy). ZipMe is a handy script to download whole AppEngine project files as a ZIP package.
4. How to use GAE-Util-Suit?
It’s very easy. There are only 4 inputs:
* Input the project name.
* Choose framework
* Choose modules
* Choose services
At last, click button “Create Project”. There should be a ZIP package promoting to download. After downloading and extracting, you could import modules that you’ve chosen.
5. What are framework, module and service?
I’ve used AppEngine to create some small tools. With my experience, I thought an AppEngine project should be divided into three parts:
* At first, you should choose a framework. You could use built-in framework webapp. It’s easy. Otherwise, you could use django or other popular web frameworks.
* Then, you could choose modules. There are plenty of third party libraries written in Python. They’re always helpful when you develop some features. In this area, you could choose modules you want. Every module is in a ZIP file. So, there is no need to worry about 1000-file restriction.
* At last, you could choose services. AppEngine provides an Admin Console to help developers to monitor server status, datastore and so on. Obviously, the Admin Console is not good enough. So some other nice guys created some handy tools like ZipMe (http://is.gd/9AXy), appfilesbrowser (http://is.gd/9AY7) and so on. You could add these services into your project quickly.
6. Need contribution?
Currently, GAE-Util-Suit is a demo. Just show what the idea is. And I think it could also help the developers who write AppEngine apps. If you find any framework/module/service will help AppEngine development, please tell me. I will integrate them into GAE-Util-Suit. It may help more people.
7. Know issue
If you choose django framework, minimum size of the project package is 775KB. And if you’ve choosen modules or services, it will be bigger. When I download ZIP package from AppEngine, I could always download successfully, but package size is 500KB-600KB. Obviously, the package is broken. This will happen when you have a slow speed connection with AppEngine (My downloading speed is lower than 10KB/s).
8. Contact information
My email is tang.jiyu at gmail dot com. (replace at with @ and dot with .)
1. GAE-Util-Suit的网址?
URL: http://gaeutilsuit.appspot.com/
2. GAE-Util-Suit是什么?
GAE-Util-Suit是一个帮助创建AppEngine项目工程的web小工具,开发者通过选择需要的框架、模块或者服务,然后点击按钮,即可轻松创建一个AppEngine的工程。
3. GAE-Util-Suit是怎么来的?
创意来自于:manatlan的ZipMe (http://is.gd/9AXy),可以ZIP整个项目工程文件的并下载。
4. 如何使用GAE-Util-Suit?
通过GAE-Util-Suit创建AppEngine项目工程的时候,通常需要有4个输入:
最后,点击”CreateProject”按钮,即可得到一个项目工程的ZIP包下载。下载完毕后,解压缩,即可得到一个初始的工程,直接import对应的模块,即可使用。
或者:直接点击”CreateProject”按钮即可下载默认项目工程。
5. 什么是framework, module和service?
1. Framework
Framework即指框架。在开发一个AppEngine app的时候,第一步即需要选择一个框架,可以使用AppEngine自带的webapp,也可以使用复杂的Django,或者其他更多选择。
2. Module
Module即指第三方类库。开发app,自然少不了第三方类库的支持,而Python在这方面是及其丰富的。根据你的开发需要,选择不同的类库加入到项目中。
3. Service
Service即指服务。AppEngine提供了Admin Console来帮助开发者完成部分管理工作,不过似乎功能有所欠缺,不少人开发出来zipme (http://is.gd/9AXy)、appfilesbrowser (http://is.gd/9AY7)这样的小项目,非常的好用,通过选择service下面的选项,将这些服务很方便的集成到项目中来。
6. GAE-Util-Suit需要什么样的贡献?
当前GAE-Util-Suit只是一个demo型的东西,表达了一个想法,目的是为了帮助用AppEngine写程序的开发者们,当然,framework/module/service里面的东西还很少,如果大家觉得有常用的framework/module/service,可以邮件给我(tang.jiyu at gmail dot com),我把它们添加进来,方便更多的人。
7. 已知问题
如果你选择的是Django框架,那么你得到的ZIP包最小为775KB, 如果你加入的模块/服务,那ZIP包将会更大。我在测试下载包含Django框架的项目包的时候,通常提示下载成功,而ZIP包不过才500KB-600KB。我从AppEngine下载的速率才10KB/s,我猜测是下载时间过长,连接被重置,但是数据并没有下载完所致的。