显示标签为“编程”的博文。显示所有博文
显示标签为“编程”的博文。显示所有博文

2011/07/23

开发微博应用 Develop Micro Blog Web App

不知不觉我变成了一个微博控,特别买了新手机之后,基本上上下班的零碎时间我都在刷微博。有一天,我突然想起了之前通过互联网认识自己这篇文章,作者利用自己在twitter和其他web服务上的数据分析自己一年的互联网生活。于是我想到可以在GAE上搭建一个分析自己微博的应用,这个应用能够使用图形化的方式展示自己在不同时间段发微博的条数。
说实话,整个应用十分简单,从微博上获取用户的所有微博,根据不同的时间粒度进行聚合,
然后展现出来就可以了。
说干就干,微博上先发了一条求助,问问同学们有没有相关的经验。马上得到了热心同学的响应,然后,我就去新浪微博开发的主页学习起来。http://open.weibo.com/wiki/index.php/%E9%A6%96%E9%A1%B5
新浪微博的认证方式使用的是Oauth,虽然早有耳闻,但从来没有尝试过。这里有详细的技术规范,有空可以去学习一下。http://hueniverse.com/oauth/,这里还有新浪微博对oauth的介绍:http://open.weibo.com/wiki/index.php/Oauth。
简单的说,这是一种不需要用户名密码,安全的授权方式。
1.    用户访问web app,web app向新浪发出一个对用户授权的申请。拿到一个requestToken。
2.    用户同意授权。
3.    页面跳转到web app的callback页面。
4.    Web app使用拿到新浪微博发的accessToken,接下来就可以为所欲为了。

从开发的角度来说,首先,得向新浪微博申请一个key和secret。
然后下载sdk。我用的是java版的sdk,貌似是一个日本人开发的。
发现sdk里面有一个web app的example,于是赶快在Eclipse建了一个web application,导入sdk和引用的lib库。还有call.jsp, callback.jsp。将其中WebOAuth.java中的key和secret换成自己的。
运行,访问call.jsp。饿,然后就发了一条“2057”,这么一条无意义的微博。
总的来说这个例子还是不错的。Getting started,就需要快速的结果来提升信心。

这个例子虽小,但五脏俱全。
Call.jsp是用户访问的页面,它有一个javabean,weboauth。

用户访问call.jsp就会向新浪发送授权请求,并指定授权完的返回页面。
RequestToken resToken=weboauth.request("http://localhost:8888/callback.jsp");
用户同意之后,就会跳转到callback.jsp页面,在这个页面中使用requestToken换取了accessToken。有了accessToken,就可以为所欲为了。
例如例子中,就使用了update这个方法发布了一条微博。
public static void update(AccessToken access, String content) {
        try {
            Weibo weibo = new Weibo();
            weibo.setToken(access.getToken(), access.getTokenSecret());
            Status status = weibo.updateStatus(content);
            System.out.println("Successfully updated the status to ["
                            + status.getText() + "].");
        } catch (WeiboException e) {
            e.printStackTrace();
        }
    }
    

接下来,通过getUserTimeline这个api就能获取到用户最新的200条微博。根据发布微博的时间进行聚合。然后以图形化的效果展示出来,就是最后的效果了。

之后,我把这个应用部署到了GAE上,地址是http://weibostatus.appspot.com 不过,由于这个应用还没有被审核通过,所以只能通过邀请的方式让用户使用,而且只有15个人。
提交审核后,新浪微博以没有应用图标把我给拒了,我看了一下他们的规范,实在有太多的要求,还是放弃了。

完成这个应用之后,说说我的感触。
整个开发过程,我除了花了两个晚上写代码调试,没有花费其他的多余资源。这要感谢google提供了google app engine这个平台。在这一点上,我认为云计算是个好东西,特别是对初创公司来说。创业的优势就在于能够早早的捕捉到用户的需求,开发出合适的产品。天下武功,唯快不破。在云计算平台上开发web app,能节约很多的时间和成本,不过熟悉云计算平台也算是一个成本。
各种网站开放API,也是一个很好的趋势,使用社交网络的用户关系,能够在短时间内吸引大量的流量。看看新浪微博上每天都有的猜猜你的XXX就知道了。
新浪微博对新应用的审核既有利也有弊。审核可以减少垃圾应用,避免亚塔利悲剧的再次发生。但同时,过高的门槛也阻止了创新。况且以新浪这种有什么流行,就自己造个轮子的做法,难保你的应用成功之后被新浪copy的悲剧发生。

2011/06/01

谈谈编程字体

之前在hacker news上看到了这么一篇文章:《十大编程字体》Top 10 Programming Fonts,作者总结了他认为的适合编程的十大字体。排名依次是:
10. Courier
9. Andale Mono
8. Monaco
4. Droid Sans Mono
3. Deja Vu Sans Mono
所有这些字体在原帖中都有示例截图。

虽然我们每天都跟各种字体打交道,但对字体中的各种学问知之甚少,上面的几个字体一般人都看不出什么差别。那么究竟什么才算是适合编程的字体呢。在Inconsolata字体的介绍中,作者给出了一个连接:http://www.lowing.org/fonts/ 里面有详细的评判标准和各种字体的样例截图。

优秀的编程字体标准:
1.       清澈的字符
2.       扩展的字符集(大概指ä这样的符号)
3.       容易区分1,I,l 
4.       容易区分0,o,O
5.       容易区分前引号和后引号,最好是镜像对称的
6.       清楚的标点符号,特别是花括号,圆括号和方括号

ABCDEFGHIJKLMNOPQRSTUVWXYZ
Abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
il1 o0O `’”[]{}<>,./\

ABCDEFGHIJKLMNOPQRSTUVWXYZ
Abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
il1 o0O `’”[]{}<>,./\

上面是windows中自带的字体Courier New和Consolas的比较。
可以看出排名第2的Consolas比起排名第10的Courier有以下改进:
1.  字体更粗,笔画更简单
2.  重新绘制的斜体字符,仔细看小写的af等字母
3.  采用了加竖线的0,更容易区分这些字符
遗憾的是,consolas的版权是微软所有,如果你使用mac或者linux,就不能使用这个字体了,这也就是它排名第二的原因之一。排名第一的Inconsolata是一个free的字体,你可以在任何地方使用它。

总的来说字体的表现和字体的设计,系统对字体的渲染和显示器的关系比较大。个人认为在windows下,液晶显示器上,Consolas的显示效果最好。
如果你没有试过这些字体,赶快尝试一下吧,这里附上eclipse里设置字体的方法:
点击windows->preferences
打开General->Appearance->Colors and Fonts,
点击Text Font, Edit就可以选择系统中已经安装的字体了。