2011/11/30

Google Reader的改版

Google Reader改版有一段时间了,但是改版后用户的反响却不怎么好,我作为一个曾经的Google Reader重度使用者也来说说自己的看法吧。
首先,这次的改版除了使用统一的UI风格之外,在功能上有这些变化:
1.取消了对文章的like,改为google+1。
2.取消了google reader的follow, share,改为google plus的分享。

对google来说,这样的修改更符合其整体战略,即使用google +1来支持喜欢的文章,使用google plus作为社交分享的平台。
然而,新的功能并不能完全替代老的功能。原因我认为有以下几点:
1.原版的like,可以看到还有多少个人like这篇文章,从而可以发现气味相投的人,进而关注其share的文章。新版的+1没有这个功能。
2.google plus的信息质量,并没有google reader分享的质量那么高。我在google reader里喜欢看某人分享的文章不代表我喜欢看他在google plus发布的所有信息。
3.由于某墙的原因,基于google plus的分享功能在中国使用的门槛大大提高了。

因而我认为,google reader的团队可以进行如下的修改,对一篇文章+1之后可以看到同样+1的用户。其次,引导用户创建一个google reader follower的google plus circle,可以将原来在google reader中follow的人导入到这个圈中,并将google reader的分享默认设置为对这个圈进行分享。这样的话,google reader的高信息质量就能在google plus中继续下去。

另外,我觉得google reader完全可以加入readability这样对文章重新排版美化的功能,现在每篇文章的字太小了,看起来真累啊。使用readability全屏看文章,就有一种在享受阅读的感觉。

接下来聊聊我为什么渐渐脱离了google reader。很大程度上来说,我觉得是因为有微博的冲击,微博吸收了我的精力,同样也吸收了很多blogger的精力。
第二点是国内没有什么好看的技术博客,就连新闻也大都是翻译国外的居多。与其如此,还不如直接看国外的网站。我现在比较多的上hackernews,这网站和reddit差不多是一个社会化阅读的网站,每天都有人投递各种it,创业,泛科技的文章,然后大家打分,将好文章推到顶上。

就在最近,google reader有了一点点小更新,将正在阅读的文章的标题修改为浅黄色,总而言之,还是希望他们把这个产品越做越好。

2011/11/27

徽杭古道 Team Building

这周四、周五去徽杭古道team building,早上八点从张江出发,经过五六小时的车程,来到了安徽省宣城市绩溪县。吃完了很朴素的中饭后,我们一行人就跟着导游开始重走古道。
徽杭古道是古代安徽商人与浙江通商的道路,大多数的时候,这条古道都是依山而建,蜿蜒崎岖,一路上有潺潺的溪水做伴,两旁是高低起伏的山丘和郁郁葱葱的树林。每过一个转弯,便又是另一道风景。相比于上海这座无山无水,平淡无奇的城市,这里的景色确实值得我好好欣赏,可惜平时缺乏身体锻炼,脚下的道路又异常艰难,让我不得不紧盯的地面,无暇欣赏山中的美景。走到江南第一关的时候,我的双腿已经酸软乏力,每走几十步,就得休息一会。
过了关之后,有一段比较轻松缓和的下坡路,这个时候太阳已经开始下山。等到我们再次上坡爬向夜晚住宿的农家乐客栈时,天已经黑的挺厉害了。农家乐客栈是一个三层楼的建筑,依山而建。偌大的山林中,只有这个建筑散发着白色的灯光。吃完七素一荤的晚餐,天空已经完全的黑了,气温也比白天冷了不少。我们稍作休整,就跟着经理去看看夜晚的星空。
为了避开客栈的灯光,我们稍微向山下走了一段路。当我戴上眼镜,抬头向天空望去,顿时被从没有看到过的星空震撼了。
上海的天空比starry night软件里选择大城市的光污染还要厉害,所以基本上看不到什么星星,更别提什么星座了。但是站在山中的我,能够清楚的看到璀璨的银河,W形的仙后座,正方形的天马座。
第二天早上,我们又爬了40分钟的上坡路来到蓝天凹这个景点。蓝天凹是一个比较平缓的山坡。,左边是高大的岩石绝壁,右边森林覆盖的山丘,向前望去,远处的山峦在蓝天的背景下互相重叠。大家都被这景色吸引住,纷纷拍照留影。
蓝天凹

接下来是一段比较长的下坡路,走到清凉峰山脚下吃完中饭,我们便返回上海了。
总的来说,这次野外旅行是我难得的一次接近大自然的机会,虽然准备不是很充分,身体没有锻炼好,衣服也不是很透气,不过那璀璨的星空和安徽的山水已经给我留下了深刻的印象。

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/26

使用游戏手柄控制电脑 Control Computer with Joystick

众所周知,长时间使用鼠标和键盘容易造成手部的损伤。所以我找到了一款可以使用手柄控制电脑的软件,使用下来感觉非常不错,它就是Joystick 2 Mouse 3.0。
Joystick 2 Mouse是一个自由软件,普通用户可以免费使用。
首先你需要下载安装这个软件,下载地址是:
http://www.softpedia.com/get/System/System-Miscellaneous/Joystick-2-Mouse.shtml。
安装后,就可以对游戏手柄的按键操作进行配置。
另外,如果你不知道手柄各个键的名字的话,可以使用Joystick Tester这个软件测试手柄。下载地址:http://www.softpedia.com/get/System/System-Miscellaneous/Joystick-Tester.shtml。

Joystick 2 Mouse默认将左摇杆控制鼠标的方向,△键对应鼠标的左击,○对应鼠标的右击,□是鼠标左键双击。基本上这些控制可以满足一般的需求,但我觉得右摇杆浪费了,我想用它来控制鼠标的滚轮。
设置方法如下:
1.双击Joystick 2 Mouse,进入Profile选项卡
2.在Joystick中选中使用的摇杆。
3.在Action Assignment(动作指定)方框内选择需要配置的按键。
一般来说,右摇杆上下的动作对应的是Z轴。
joystick配置右摇杆
 
4.选中Z轴向上(对应右摇杆向上推)这个按键动作,在theme中选择mouse wheel(鼠标滚轮),action(动作)选中scroll up向上滚屏。同理,设置Z轴向下为scroll down。
这样,在浏览网页的时候就可以使用右摇杆控制向上向下滚动了。

经过一系列的配置,使用游戏手柄浏览网页已经没有问题了,诸如google reader和微博用摇杆浏览真的是很爽。不过,输入问题还没有解决。
正好微博上一位同学发了他使用tablet pc输入面板的图,给了我启发:可以使用windows7自带的虚拟键盘。
点击开始(或者按win键)->所有程序->附件->TABLET PC->TABLET PC输入面板。
虚拟键盘就出来了。点击关闭,它还会收缩停靠在屏幕左边,真的很方便。

另外,输入中英文还需要空格、退格和回车,可以使用L1,L2,R1,R2等空余键位进行配置。

好了,你可以体验使用手柄控制电脑的爽快感觉了。

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就可以选择系统中已经安装的字体了。