By Shuai Yuan on August 30, 2012
又到了一年一度回学校复习功课的日子。我们本应该是复习高中的课程,可我却从初中部的大门进入。天气阴沉,滴着雨滴,地上坑坑洼洼的蓄了不少水。进了大门,是我熟悉的天桥。前面有三个人,在不紧不慢的走着,其中两个人并排,挡在我的路上。我走路向来是急性子,于是想从边上绕过去。走左边,被挡回来;走右边,又被挡回来。于是想想,干脆从右边的楼梯下去,另寻他路去教室好了。可是走到楼梯一看,右边的小路上已经出现了一个大水坑,没法走了,只好无奈的退回来。还好前面就是大厅,前面挡路的两位一回身,从左边上楼了,于是我和还剩下的一位并排走。
这时我明白,原来我们进初中部的大楼,就是要去初中部的教室。走着,我们俩聊着,我告诉他我是大学生,他告诉我他是数学老师,这次复习要从小学课程开始。正说着,我们走到教室门口,却一眼看到冰冷的铁锁。心一下子凉了,千里迢迢赶回来,竟然扑空了么?
两个人正在着急,不经意回头一看,却发现原来是教室办公室的一栋楼灯火通明,原来大家集体搬了地方。我们兴冲冲的赶过去,远远地就能看到屋里很明亮,透着窗户看到一股淡淡的雾气,好像让人也一下子裹进教室里的温暖和热闹去了。走到门口,发现这是二班,不是我的一班。屋里面,大家在大声说话,走道上有人在来回走动,发作业本、发卷子,还有一些打打闹闹的,正是上课铃响前的熟悉场景。我一眼看到何文欢,于是敲敲玻璃,冲他比一个指头,又比两个指头,是问他“一班是在二楼么?”结果连比划了三次,他也没有明白,我只好推开门,去问门口的同学。
一下子热浪和声浪就真真切切的传了过来,原先模模糊糊地像是透了重重的雾气,这下子就在眼前。看到有人推门,整个教室顿了一下;又看到是我这样一个无关的人,很快大家又继续自己的活动。我问清楚一班的位置,关上门,正想要离开,突然听到何文欢叫我一声。我再打开门,他冲我喊“第X页第一句话是什么意思?”,还一边挥舞着手中的卷子。我愣了一下,手上没有卷子,我哪知道他问的是什么。我冲他喊,让他把卷子拿过来,但是他的同桌胡康景按着他,坚决不许他把卷子拿给我。没奈何,我从身边桌子上抽了一份,看到了一张简陋的英文卷子,一下子分不清楚有三道还是四道题,歪歪扭扭的像是手写又油印出来的,还全都是作文题。
我正想仔细的看看题目是什么,梦醒了。
Posted in 如歌的行板 |
By Shuai Yuan on October 14, 2011
今年的搞笑诺贝尔奖名单已经公布:
- 生理学奖:授予Anna Wilkinson,Natalie Sebanz,Isabella Mandl和Ludwig Huber,以奖励他们有关“没有证据显示红腿陆龟打哈欠会传染”的研究;
- 化学奖:授予日本团队Makoto Ima,Naoki Urushihata,Hideki Tanemura,Yukinobu Tajima,Hideaki Goto,Koichiro Mizoguchi 以及 Junichi Murakami,以奖励他们有关芥末警报器的发明;
- 医学奖:授予Matthew Lewis,Peter Snyder,Robert Feldman,Robert Pietrzak,David Darby,Maruff,Mirjam Tuk,Debra Trampe和Luk Warlop,以奖励他们有关憋尿可能产生的影响的研究;
- 心理学奖:授予Karl Halvor Teigen,以奖励其对“为什么人类会叹气”的研究工作;
- 文学奖:授予John Perry,其成果是“拖延”理论。他提出:作为一个高产者,应当总是集中精力去做那些“重要的事”,作为一种避免从事那些“更重要的事”的方式;
- 生物学奖:授予Daryll Gwynne和David Rentz,以奖励他们有关“发现不同种类的甲虫会和不同种类的澳洲啤酒瓶交配”的成果;
- 物理学奖:授予Philippe Perrin,Cyril Perrot,Dominique Deviterne,Bruno Ragaru以及 Herman Kingma,以奖励他们有关“为何铁饼运动员总是会昏厥而扔链球的人则不会”的研究;
- 数学奖:授予历史上各色的世界末日预言家们,以表彰他们“以实际行动告诉世人,在进行数学估算时小心谨慎是多么的重要”;
- 和平奖:授予立陶宛市长Arturas Zuokas,以奖励他成功解决了道路乱停车的问题,方法是驾驶一辆装甲车去压碎它们;
(市长大人玩得多HIGH啊!)
- 公共安全奖:授予John Senders,以奖励他进行的一项实验。在实验中,一名驾车人的面前有一个鸭舌帽不断掉下来骚扰他的视线,干扰他的驾驶。
Posted in 他山之玉 | Tagged funny, life, science, scientist |
By Shuai Yuan on October 13, 2011

Dennis MacAlistair Ritchie,C语言和UNIX之父,出生于1941年9月9日,于2011年10月8日辞世。在此宣传一下他的事迹,以使这位伟大的计算机科学家更为世人所知。
- Dennis出生在纽约,毕业于哈佛大学,拥有物理和应用数学的学位。他于1967年加入贝尔实验室工作,1968年得到了哈佛大学的博士学位;
- Dennis最著名的贡献就是发明了C语言,后来和Ken Thompson共同编著了《The C Programming Language》;二人同时还发明了UNIX操作系统。注意了Apple Fans,你们手上设备的iOS起源就在这里;
- 1983年,Dennis和Ken二人因为在通用操作系统理论方面的贡献而荣获图灵奖(Turing Award)。因为发明了C语言和UNIX操作系统,二人还一同荣获了1990年的IEEE Richard W. Hamming Medal,1998年由美国总统克林顿颁发的National Medal of Technology,和2011年的Japan Prize for Information and Communications;
- Dennis在贝尔实验室期间的用户名是dmr。这在后来成为它的代号,广泛出现于讨论组和邮件列表;
像Dennis这样的大牛总会说一些特立独行的段子,比如,
- I am not now, nor have I ever been, a member of the demigodic party.
我不是,也从来不曾是半人半神。
(而很多计算机界人士都认为他谦虚了)
- Usenet is a strange place.
新闻讨论组是个奇怪的地方。
(现在Usenet被广泛用于付费盗版下载,就更莫名其妙了)
- UNIX is very simple, it just needs a genius to understand its simplicity.
UNIX非常简单,它只不过需要一个天才来理解这种简单。
(感谢Linux和Apple的天才,让更多人能够享受这种优秀的操作系统)
- C is quirky, flawed, and an enormous success.
C语言是诡异的、有缺陷的、极其成功的。
(我还记得本科考试C语言时的惨烈)
- C++ and Java, say, are presumably growing faster than plain C, but I bet C will still be around.
C++和Java(的用户群)想必比C语言发展得快吧,但是我赌C语言仍会存在。
- When I read commentary about suggestions for where C should go, I often think back and give thanks that it wasn’t developed under the advice of a worldwide crowd.
当我读到一些关于C语言应当如何如何的评论时,我总是回想,并庆幸它并没有按照这个世界给出的建议来发展。
(大牛的特点就是自信+实力)
Posted in 如歌的行板 | Tagged life, programming, scientist |
By Shuai Yuan on September 4, 2011
伦敦是一个国际化的大都市,拥有历史上最古老的地铁,每年又在不断的扩展路线、改造车站等。我分享一年来积累的交通经验,希望能为新来的留学生提供帮助。
很多同学都在群里、论坛上着急的征飞友、征拼车。其实伦敦这边交通很发达,只要事先查好路线不会花很大力气。如果决定用接机服务,可以选几个便宜的,包括
https://www.atnworld.net/totallydriven/index.php
https://www.simplyairports.co.uk/booking/
当然各大机场也都有自己的接机服务,一般会贵一些。
在计划交通的时候,最有用的地址信息是邮编。英国的邮编很细,尤其是市区内。伦敦的火车、大巴公司繁多:购买火车票是联网的,在NationalRail就可以买到所有运营商的车票;大巴车票需要去单独的公司网站购买,一般提早一些会有优惠。
http://nationalrail.co.uk
http://uk.megabus.com
http://www.nationalexpress.co.uk
如果决定自己坐火车倒地铁,下飞机应该先买一张Oyster卡。伦敦的交通很贵,有Oyster卡可以省不少钱。入学后可以去申请18+ Student Oyster Card,购买周票以上的有更多优惠(如果是单次交通和日票则和普通卡相同)。你购买的Oyster都可以在TFL网站上注册,并且可以把一张卡的钱(包括办卡费)都转移到另一张卡中,而无需去地铁站办理。
http://www.tfl.gov.uk/tickets/14312.aspx
同时你还可以在TFL网站上为自己的Oyster开通自动充值(auto-top-up)。但要你先注册帐户、绑定卡片后才可以。
https://oyster.tfl.gov.uk/oyster/link/0004.do
在伦敦旅行还有很多省钱或便利的方法。比如16-25 Railcard每年花费£28,买火车票时可以1/3 OFF(也就是说如果每年你的火车票花费在£84以上就应该去办一张);比如伦敦中心城区有很多的Barclays Cycle Hire自行车站,最划算的是申请钥匙并交一年使用费£45,每次使用30分钟内都免费,一个人来来往往尤其方便。
http://www.16-25railcard.co.uk/
https://web.barclayscyclehire.tfl.gov.uk/member
伦敦是个交通发达的大城市,但是道路、地铁改造或者临时活动导致交通管制的情况也很多见,尤其是最近迎接奥运会,几乎每个周末都会有部分地铁停运。计划线路可以使用Google Maps(2011年新加入了公交线路,一下子实用起来了)和TFL Journey Planner服务。
http://maps.google.co.uk
http://www.tfl.gov.uk/
完整的地铁和火车线路可以参见这个文档,对于计划郊区旅行的同学很有用。
http://www.nationalrail.co.uk/passenger_services/maps/London_Connections.pdf
公交车、地铁和火车等都是计时的,在中心城区比较准,郊区的地方就不很准了。如果你用Android手机,可以参考Pubtran London应用,出门在外也可以方便的了解线路和临时交通管制。
https://market.android.com/details?id=cz.fhejl.pubtran.london&hl=en
Posted in 如歌的行板 |
By Shuai Yuan on August 29, 2011
前几天去看了Wellcome Trust Dirt主题展览,两个展品印象颇深。
1- 1893年和1895年的纽约街道对比。1893年NY的街道上垃圾堆积如山,那时的美国城市都是“臭”闻昭著,1830年代爆发的霍乱曾经一举杀死12%的NY城市人口。后来他们的卫生长官Colonel George Waring借助军事化管理,实施严厉而全面的整治措施,终于使城市面貌焕然一新。城市卫生条件是非常能反应一个城市现代化程度的。我的切身体会,立水桥、天通苑的脏乱说明北京还有很多路要走;即便是伦敦,并不少见的垃圾也在考验着城市管理者和居民的素质。印象最好的是阿姆斯特丹,非常干净整洁的城市,被评为适宜居住并不仅仅是看气候和经济的。

Courtesy NYPL Digital Gallery(nypl.org)

Courtesy NYPL Digital Gallery(nypl.org)
2- 1854年伦敦爆发了霍乱。大多数的医学家、科学家都认为Soho地区的霍乱是因为垃圾污染了空气引起的;Dr. John Snow提出了自己的看法:泥土进入水中导致了传染病。虽然当时没有多少人认可他的结论,但在他的不懈努力下,Soho地区的水井关闭了,对霍乱的消灭起到了重要作用。他凭借的,是一副自己绘制的霍乱分布图。
Dr. John Snow的工作在20年后才终于得到了认可,他也因此在历史上留下一笔。这件事又一次说明了在科学工作中怀疑态度、身体力行、坚持己见、客观细致是多么的重要。

Courtesy Dr. John Snow
Posted in 如歌的行板 | Tagged life, oversea, science |
By Shuai Yuan on July 31, 2011
via 煎蛋
via StackOverflow
虽说是程序员向,不过内容和编程本身其实并没什么太大关系,请各位听我细细道来。
StackOverflow是一个程序员向的问答网站,广大程序员们在上面交流经验、提问答疑,三天前,一位名叫Freewind的用户发布了下面这个问题:
![[程序员段子] 1927年12月31日午夜一秒谜案](http://pic.yupoo.com/jdvip/BfTotBeK/medium.png)
我在用Java编写一段比较两个字符串时间间隔的程序,然而当我比较“1927-12-31 23:54:07”和“1927-12-31 23:54:08”这两个时间时,输出结果却不是1……而是353。
当我把两个时间分别往后调整1秒,变成“1927-12-31 23:54:08”和“1927-12-31 23:54:09”,结果就又是1了!——可为什么那两个时间的结果,却是353呢?
面对这一诡异的问题,网友们很快追问,“你的区域(Locale)设置是什么?这可能是个区域问题/和当地夏令时之类的东西有关。”
楼主很快附上了Java版本号和区域设置:
sun.util.calendar.ZoneInfo[id="Asia/Shanghai",
offset=28800000,dstSavings=0,
useDaylight=false,
transitions=19,
lastRule=null]
(……没错,Freewind君,似乎是一位魔都死程。不知道这里有没有人认识这位老兄?)
在这份追加信息出现仅仅两分钟之后,StackOverflow站上的问答狂人Jon Skeet给出了如下答复——
这是因为上海的时区在12月31日发生了变化。
请看这里。(网页截图如下)
![[程序员段子] 1927年12月31日午夜一秒谜案](http://pic.yupoo.com/jdvip/BfTouAgU/medium.jpg)
(1928年1月1日0点0分,当地时间由地方平时(Local Mean Time)改为北京时间/中国标准时间)
简单地说,在1927年末的最后那一个午夜,时钟被往回拨了5分52秒。所以“1927-12-31 23:54:08”这一秒,事实上,发生了两次,而看起来在计算当地时间时,Java将其视为了后面那一个时间点,于是就产生了这一差别。
这正是时区世界的奇妙与不可思议啊。
在StackFlow网民们纷纷膜拜Jon Skeet的神速之时,其他程序员也以测试的方式验证了这一结果的正确——美国时间木有这个问题。看来,当一枚程序员,有时真的需要上通天文、下知地理啊……
Posted in 如歌的行板 |
By Shuai Yuan on July 12, 2011
前几天和国内读硕士时的导师李老师见面,他跟我讲了博士学习,特别是留学生要注意的三件事,说得清晰明了,我也很有收获。这些是他在爱丁堡讲学向留学生做报告的内容,我在此记录并传播。
第一,是知道应该干什么,即找准科研方向。如果自由度比较高,不需要严格遵照导师的安排,可能会产生迷惘,精力也不宜集中,白白浪费了时间。他建议从国家的科研计划入手,看看国家想要在10,20年之后做成什么事情。这样既可以确定自己的课题目标,又容易成为国家所需要的专业人才。
第二,是知道怎么干,简单的说就是集中、努力。他提出在选定的课题上努力10000小时的目标,包括学习基础知识、最新论文、自己的研究、实验和交流等等。一万个小时看似遥远,其实每天工作8小时,只需要1250天就够了,还不到4年的时间。不论是在英国还是中国,这个时间都小于一般博士学制时间,所以是完全应该做到的。
第三,是了解文化。虽然读博士是想要成为专业人才,但是层次不同,一些基本的技能也需要加强,比如清晰的逻辑、礼貌的态度、大度的胸怀、准确的语言等等。由于人在国外,想要好好做人做事,必须得适应异域文化,才能不闹笑话。他建议我们遇事站在外国人的立场,仔细考虑他们的利益和动机;不是头脑发热的保卫祖国、保卫传统,而是尽量争取调和和理解。
——
一开始没写清楚是哪位导师,闹误会了。感谢关心我的朋友和同学们。
Posted in 如歌的行板 |
By Shuai Yuan on June 15, 2011
非常有意思的思路,很欢乐!原帖还有一些Optimization.
#!/bin/bash
function f() {
sleep “$1″
echo “$1″
}
while [ -n "$1" ]
do
f “$1″ &
shift
done
wait
example usage:
./sleepsort.bash 5 3 6 3 6 3 1 4 7
http://dis.4chan.org/read/prog/1295544154
Posted in 如歌的行板 | Tagged develop, programming, trick |
By Shuai Yuan on May 17, 2011
如果使用了jsr107 Cache服务,升级到GAE SDK 1.5之后会出现如下错误:
INFO: net.sf.jsr107cache.CacheException: Could not find class: ‘com.google.appengine.api.memcache.jsr107cache.GCacheFactory’
at net.sf.jsr107cache.CacheManager.getCacheFactory(CacheManager.java:46)
at razorclaw.servlet.Main.checkCache(Main.java:269)
at razorclaw.servlet.Main.doExecute(Main.java:150)
at razorclaw.servlet.Main.doPost(Main.java:129)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.appengine.tools.appstats.AppstatsFilter.doFilter(AppstatsFilter.java:141)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:351)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
因为Google发布库的时候忘记把.class放进去了,只有METAINF……
临时的解决办法有两个,
1-用javax.cache。但是Google的 技术支持说这个库已经不维护了,以后最好少用。
2-用1.4.3版的appengine-jsr107cache-1.4.3.jar替换appengine-jsr107cache-1.5.0.jar,具体路径($GAESDK$/lib/user)取决于安装方法。
ref:
http://groups.google.com/group/google-appengine-java/browse_thread/thread/5820852b63a7e673/9b47f475b81fb40e?show_docid=9b47f475b81fb40e&pli=1
Posted in 如歌的行板 | Tagged bug, develop, error, gae, Google, programming, trick, web |
By Shuai Yuan on May 12, 2011
我要 陪你到山巅,看群星划过夜空
我要 陪你到沙滩,听波涛拍响海岸
我要 看你偎在我肩头,让我数你长长的睫毛,看你大大的眼
我要 陪你一起发呆,看暖暖的阳光透过水瓶,变幻五彩的光线
我要 陪你去划船,看青青的湖水绿绿的柳,让温柔的春风抚摸你的脸
我要 把你抱在怀里,举在空中,让全世界都看到 我对你的凝望,和你快乐的笑颜
每一天 每一时 每一刻
我都在重复对你的思念
停不下来,也不想停下来
只有这样 才让我觉得,离你 并没有那么远
我好想念你,想念你的一切
只想和你背靠背 肩靠肩
让我飞快的奔向你,让你张开双臂
让时间就此停滞,让喧嚣全都消失
终于 我能吻上你的唇 你的脸
我闻到花草的芬芳
我听到美妙的乐章
终于 我能紧紧地抱着你
再也不让你离开我身边
于2011.05.12
Posted in 如歌的行板 | Tagged life, love |