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

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





2011/05/02

枪炮、病菌和钢铁 Guns, Germs, and Steel

文明V激发了我对人类史的兴趣,机缘巧合之下,我发现了《枪炮、病菌和钢铁》这本书,它让我了解到地理环境在人类文明发展过程中起到的重要作用。

作者在第三章详细的描述了几百名西班牙冒险者如何俘虏由八万军队护驾的印加国王,在这过程中几百名西班牙人竟然屠杀了7000名印加人。显然,书名中“枪炮”和“钢铁”所代表的武器装备是西班牙人战胜印加人的主要因素。然而更恐怖的是,西班牙人从欧洲带来的病菌在之后的几年中杀死了95%的美洲土著人。

“不同种族之间相互作用的历史就是通过征服、流行病和灭绝种族的大屠杀来形成现代世界的。”枪炮、病菌和钢铁是先进文明征服落后文明的直接因素,但不是不同文明间发展速度差异的终极原因。作者经过研究后得出的推理是:地理环境推动了粮食生产,而粮食生产养育了更多的人口,产生了更为复杂的社会结构,最终推动了文明的进步。

粮食生产对人类文明的进步有着重要的作用。在人类开始耕种、畜牧之前,他们过着狩猎采集的生活,居无定所,而且部落规模也不大,没有复杂的社会等级。而耕种粮食使人们定居下来,同时,生产出的粮食不但可以满足日常生活,还可以囤积下来。于是统治阶级和手工艺人等自身不耕种的群体得到了发展。

此外,人类对动物的驯化不但丰富了人们的食物种类和各种物品的原材料,有些动物还成为了人类的好帮手,马在军事上发挥的重要作用直到第一次世界大战后才被坦克取代。同时,人类和动物更亲密的接触产生了更致命的病菌,没有抗体的人群面对这些病菌很少能够存活下来。

欧亚大陆相对与美洲和非洲的优势体现在这几个方面,首先,那些容易培养而营养丰富的动植物的野生种群在欧亚大陆更多。有科学家挑选出世界上几千种野生禾类植物中种子最大的56种,其中32中分布在欧亚大陆,非洲大陆和美洲大陆都各自只有零星的几种。

其次,欧亚大陆的地理地貌适合农作物的传播,而美洲和非洲则不然。通常,相同纬度的地区有着相近的气候条件,适合农作物的传播。欧亚大陆东西轴向的地形特征满足这个条件,而北美洲的植物想要传播到南美洲,则必须要通过赤道炎热气候的考验。

因而,从一个大的时间跨度看各个大陆文明发展的差异,我们能够发现,欧亚大陆的人并不是因为天生聪明而发展出更先进的文明,更多的优势是欧亚大陆的人运气比较好,占据了地理环境的优势。

总的来说,《枪炮》这本书涵盖了人类从走出非洲到现代文明这样一个很长的时间范围,对于文明的比较也只停留在各个大陆的层次,但是它带给我一种从生物进化和物种演变来看文明发展的角度。

我们从小接受的教育是中华民族是一个勤劳勇敢的民族,老祖宗是多么的牛逼,某某技术领先于欧洲多少年。只是到了近代,软弱无能的清政府被欧洲人一炮轰开国门,进入了屈辱的近代史。然而,课本很少会分析为什么我们的文明曾领先于欧洲,而又在近代被超越。我是带着这样的疑问去看这本书,不过,作者分析的粒度显然比我的问题大的多,无法直接解答我的困惑。但是,作者也给出了一点分析,他认为,和中国大一统的社会相比,欧洲由于地理环境所致,更加的分裂,欧洲各国的相互竞争使得他们的文明得到了进一步的发展。
在我看来,欧洲君权和神权相互斗争也是一个重要的原因,两股统治力量的角逐,使中国那样集权专制的传统没有产生。
另一种观点是,中国近代的沉沦是由于对世界错误的认识而导致的。可笑的是,直到现在,某党还在用GFW来限制人民的视野。

BBC最近刚刚出了一套纪录片人类星球Human Earth,是当年行星地球Planet Earth的续集。在记录片中,还可以看到许多生活在恶劣环境中的人使用狩猎采集的方式来生存。再看看自己,正拿着一台有几亿晶体管的电脑,发布一篇文章,然后,全世界能上网的人就能看到。

2011/04/24

500 Days of Summer 中的长椅

在reddit上看到了这篇帖子,作者的朋友发现了500 days of summer 中的长椅。
然后有人贴出了各个场景在google map上的位置,不过这个地址更能快速的定位那个长椅的位置。

如果你没有看过这部电影的话,可以看看它的预告片: 

其实我更喜欢这个版本的预告片,背景音乐The Temper Trap的Sweet Disposition很赞

2011/04/03

对DIY装机的新想法

NICO:我来看看你的机箱出了什么问题
最近一直没有更新博客,除了家里有点事,自己肚子里没有货之外,还有一个原因是我打GTA4打得台式机电源烧坏了。我的一个朋友对此的评论是:你让孤岛危机2情何以堪。
事情是这样的,那天晚上我一边闻着机箱里弥散的焦味一边打通了GTA4最后一关,然后开始欣赏起长长的制作人表,突然,“破”的一声,电脑停止运行了。
GTA4的结局是主角Niko失去了自己最重要的人,而我在游戏外把电脑烧坏也让我有种痛失好友的感觉。
因为主板上没有什么烧坏的痕迹,但是开机完全开不了,所以我推测是电脑城奸商帮忙搞定的电源出了问题。果然,一位高手帮我拆开电源后发现,电源烧的里面的铜线都暴露出来了,包裹铜线的塑料早已在其他元件上面融成一团了。
后来去临近的电脑城买了一个新电源,花了260块。网上一查,同样的产品在电子商务网站上只要200块。

三大件之外其他配件的重要性,我在之前的文章里已经反思过了。这里,我得出了一些新的教训:
1.    机箱里传出焦味总归不是好现象。
2.    去电脑城装机还不如去网上买配件。明码标价,还带发票。

另外,我准备升级一下家里另一台老电脑。那台电脑是六年配的,CRT屏幕,很老的CPU和主板(nForce平台,那时AMD和NVIDIA关系还不错)。所以我准备升级一下屏幕,换一下主板和CPU。现在DDR3 2G的内存一条只要150,1T的硬盘也只要500,真是白菜价啊。这些配件我准备都从网上买了。

2011/02/25

革命为时过早

从过年前突尼斯革命开始,多个国家的人民走向街头,进行示威游行。一时间,仿佛是这个世界启动了独裁者删除程序似地,一个个集权的、腐败的政府被推翻了。爱凑热闹的中国人当然不会放过这个机会,有人在twitter上喊了一声要走上街头,结果“今天”和“明天”就成了敏感词,有一首歌也变成了“好一朵美丽的敏感词”。

现如今,第一轮的上街活动已经结束,第二轮的上街活动又在酝酿之中。但我并不支持这种革命,因为我有三个问题。
1.中国当前真实的国情如何?
2.革命后我们应当建立怎么样的体制?
3.如果要革命,如何以最小的代价完成国家体制的转变?

以软件工程的术语来比喻的话,这三个问题分别对应了需求分析,设计和构建三个阶段。我们可以把当今的中国看做一个已经运行的系统,但是这个系统有大量的问题,需要重构。我们期待一个新的系统能够解决这些问题。如果你要移植这个系统会怎么做?我觉得,弄清有哪些问题,问题的根源是第一步。第二步,就要考虑问题的解决方法。第三步,则是在适当的时机,使用适当的手段,平稳的将旧系统过度到新系统。
然而,现在走上街头,将事态扩大,并没有分析出问题,也没有对未来深思熟虑的考量。这种做法,最坏的情况,就是将现有的系统瘫痪,而无助于问题的解决。

我建议,可以建立一个维基百科一样的网站,显然,这个网站必须在墙外。这个网站的作用是让大家清楚的认识当前中国。另外,可以建立另一个网站讨论未来中国的政治体制。或许,现在已经有这样的网站或者组织,但是,他们离普通的群众太远。既然是革命,必定是以全国人民的幸福为考虑的重点,既然要民主,必定要人民都能理解什么是民主。如果只是一小部分人掀起的革命,最终只是一小部分人代替一小部分人统治剩下的人罢了。

要清楚的了解中国,给出一系列对症下药的解决方法,绝对不是我们这些初出茅庐的人现在所能做到的。要培养国民的法律,思维观念,也不是一朝一夕能够完成的。所以,革命,还是缓一缓吧。缓到什么时候?我是菜鸟,我不知道啊。

2011/02/07

BBC 统计学的快乐

终于把《统计学的快乐》看完了。这个视频是BBC拍的记录片,主讲人是曾经在TED演讲过的Hans Rosling教授,下面是整个视频的一些keynotes
1.       通过统计学,可以分析数据,探寻这个世界中的规律,让我们的生活更美好。
2.       美国的旧金山将各种数据公布给大众,例如,他们公开了旧金山各个地区发生过的犯罪事件,让人们知道哪些地方安全,哪些地方比较危险。旧金山的CIO已经公布了163个公共数据库,他们的下一步目标把即时的数据推送给公众。
[BBC:统计学的快乐].BBC.The.Joy.of.Stats.WS.PDTV.XviD.avi_snapshot_08.53_[2011.02.07_21.12.44]
3.       第一份统计资料诞生在瑞典1749。当时的政府通过人口统计发现了本国的人口数量正在减少,于是瑞典政府采取措施以提高国民的健康水平。
4.       光有数据没有用,数据经过分析才有价值。一个最简单的方法是取平均值。
每年死于车祸的人数基本维持在一个相同的数字,像这样的数字可以总结出社会现象,也就是隐藏在数据中的模式。
5.       数据的分布可以使用图形来表示,优美的清晰的图形可以让大众都明白数据隐含的信息。
Florence Nightingale(护士职业创始人)在战争期间,她收集了两年的士兵伤亡数据,并发明了Polar area diagram (日本人译作鸡头图,中文貌似没有什么好的译名)来说明士兵伤亡的原因。
6.       数据的可视化(virtualization)已经成为了一门学问,还有Data Designer这种专门设计数据展示的职业。片中的designer展示了伊拉克战争的预算和实际支出,两个方块的大小对比确实让人惊讶。
7.       Rosling教授又做了一遍他在TED演讲中那个世界人均收入和寿命变化的演示。最后,他专门提了一下中国:上海的生活水平跟意大利相当,而贵州和巴基斯坦差不多。
[BBC:统计学的快乐].BBC.The.Joy.of.Stats.WS.PDTV.XviD.avi_snapshot_32.12_[2011.02.07_21.58.47]
8.       关于GOOGLE的机器翻译
Franz Och Google的机器翻译项目的老大)说:“创造这个系统的人不需要懂中文,但是要懂统计学,计算机科学和其他大规模计算的基础科学。”
Google的人下一步要把语音识别和机器翻译结合起来。
Wow,巴别塔要造起来了。
9.       天文学家使用计算机,互联网等新科技探索星云形成的规律,片中的天文学家在写sql
10.   因为计算机可以模拟各种各样的情况,未来的科学研究因为计算机科学的发展可能会从以数据为中心,由数据驱动转变为由假说驱动,然后由计算机去验证。
11.   Stanford大学的Sep Kamvar从微博等收集人们的情绪,并从不同的维度来分析比较,例如:男人比女人快乐吗?。他在片中说:年轻人更容易将快乐和刺激联系在一起,而老年人更容易将快乐和平静联系在一起。
12.   Kamvar教授最后说:因为人们越来越容易将自我的信息以数字化的形式放在互联网上,所以我们可以从互联网上大量的数据中理解人活着是为了什么。

最后一个观点让我想起了这篇文章:通过互联网认识自己
ZachZachary M. Seward)是《华尔街日报》的外联编辑,主要负责《华尔街日报》与 TwitterFoursquare 这类公司之间的关系。Zach 今天在《华尔街日报》Digits 博客分享了自己通过互联网对过去一年个人生活的总结,以下是主要内容的摘录。

幸好,这个只是纪录片。

2011/01/08

数据仓库入门

最近我开始在某公司的BI部门实习,BI的全称是Business Intelligence,商务智能,个人感觉这个名字比较忽悠,就像云计算一样。我在实习的过程中主要是做数据仓库的项目。在这里记录一下自己的学习和实践。

数据仓库诞生的原因

随着时代的进步,许多企业都将信息技术运用于自身的生产、运营、销售等活动中。在这个过程中,企业积累了大量的历史数据,这些数据显然具有重要的价值。但是,由于数据的类型繁多,业务逻辑复杂,甚至各个部门采用不同的数据库管理系统,导致数据无法有效整合,无法为进一步的分析提供支持。另外,数据量的不断增长有可能导致数据库系统的性能下降。
所以,业界产生了数据仓库这种专门的技术来解决这一些列的问题。


数据仓库的定义

现在让我们来整理一下,数据仓库的输入是企业的各种数据。
我们希望通过数据仓库获取整个企业的信息,并且数据仓库能够确保数据的一致性,能够为决策提供支持。

Bill Inmon (数据仓库之父 http://en.wikipedia.org/wiki/Bill_Inmon ) 在1980年代提出了数据仓库的概念:"a subject-oriented, integrated, time variant and non-volatile collection of data used in strategic decision making".

我个人对数据仓库的理解是:一个旨在整合企业所有数据,为企业的决策提供可信数据的系统。


数据仓库的组成

一般来说,数据仓库有以下几个组成部分

操作源系统(Operational Source System)
这个部分相当于数据仓库的输入端,也就是企业在生产过程捕捉数据的区域,通常是一个在线事务处理系统OLTP(Online Transaction Processing),它会记录每一个事务的记录(Transaction Record)。

数据准备区域(Data Staging Area)
在操作源系统存储的数据每隔一段时间会送到数据准备区进行处理,这里是整个数据仓库的核心部分,里面的操作通常我们称之为ETL(Extract-Transformation-Load)抽取,变形和载入。
抽取是将数据源的数据载入到数据仓库。
变形有很多种,有数据清洗(将不合格的数据去除),装换格式,进行计算等等。最最重要的是,变形后,原本紧凑的,符合各种范式的数据将变成维度化(Dimensional)的数据。
数据仓库一般使用维度模型,这种模型是比起我们通常的数据库建模更强调数据模型的简单,易于理解,以后我会深入介绍。
载入是将变形好的数据存储到数据仓库的下一个部分。

数据展现区(Data Presentation)
经过ETL处理过的数据被存放在这个区域。这个区域是为各种查询,报表和分析提供支持。

数据获取工具(Data Access Tools)
用户通过这个工具来设计查询,报表并获取最终的数据。


数据仓库的特征

在这里简单罗列一些数据仓库(DW)和一般数据库应用OLTP的差别

OLTPDW
使命记录业务信息查询,分析历史数据
数据库操作增删改查都有对大规模数据的查询和分析为主,定期的插入、更新
数据库建模方式标准化模型

尽量遵守范式
维度建模
时间在保证事务acid的情况下尽快能的快尽可能的快
空间空间资源有限。

使用范式减少冗余。

OLTP的数据通常只存贮几个周到几个月
可以认为有无限空间。

为了快速查询,存在很多冗余。

专门存放历史数据。
复杂度数据库表结构复杂经过ETL后的数据一般是星型模型,更容易理解
数据操作简单源数据要经过ETL后才能进入数据仓库。复杂度被包含到了ETL中。

学习资源 参考资料

我的学习资料主要是Ralph Kimball (http://en.wikipedia.org/wiki/Ralph_Kimball )等著的《数据仓库工具箱》(Kimball's Data Warehouse Toolkit Classics)这套书:

http://www.kimballgroup.com/html/booksKimballClassics.html

这套书中总共有三本,第一本是《维度建模完全指南》,第二本是《ETL实践技巧》,第三本是《数据仓库生命周期》。
第一本有中译本,不过网上书店都没有卖了,貌似绝版了,计算机的好书好多都绝版了。
第二本网上有中文的pdf文档,不过翻译的质量不是很好。
第三本现在还能买到,是清华大学出版社出版的。

第一本书是了解数据仓库和维度建模的入门书籍,我现在就在看。
第二本书是讲ETL的,其中关于审计维,维度表和事实表数据推送的章节是重点。
第三本主要讲数据仓库项目管理的,内容比较泛,而且新手也不可能去管理项目吧,所以不推荐。


下集预告

下一篇文章会简单介绍一下维度建模,维度表和事实表。