5.22 城北骑行自驾游

这几天闲来无事又缺乏锻炼,于是继续和小翼同学骑车自驾游。今天的路线在城北,终点燕子矶。全程27公里。

522路线图
路线图

先发路线图。从汉口路出发->丹凤街->仁和街->百子亭->玄武湖环湖路->黄家圩->和燕路到燕子矶。回程绕幕燕沿江观光带(下燕路)->中央北路->中央路->傅厚岗->仁和街->丹凤街去金润发买东西。
燕子矶门票十元,没进去看。在外面随便拍了点照片。
远看的燕子矶,能看到点石体。
燕子矶外围
燕子矶外围

江边,隐约看到二桥。画面正前方那个背书包背对镜头的小孩子一分钟后将在爬墙时光荣的掉入江水里。
20090522181
江水,远处江面有几艘船。对面是八卦洲。从地图上看,这个地方的纬度位置大约相当于泰山新村。
20090522184
八卦洲

回程,从下燕路(下关-燕子矶)走。本来以为是一条沿江的破路,没想到最近新修得很漂亮,适合新手练车以及七十码。
路边的不知名寺庙
20090522188
路的一侧是幕府山,一侧是长江,很不错的景致
20090522189
幕府山北侧的景点:头台洞、二台洞和三台洞。收没票,没高兴进去。拼音打出来的是投胎洞、二胎洞,囧。。
20090522194
江上是中石化的加油站,不过是给船加油,稀罕
20090522195
最后是在靠近南京港的地方,南京大屠杀下关草鞋峡遇难同胞纪念碑。在这里日军杀害了手无寸铁的五万七千名放下武器的士兵和平民,是南京大屠杀中遇难同胞最多的地方。
20090522196
草鞋峡纪念碑

消费券盛况

5.20是南大校庆(虽然这日子和建校不搭介,哪天城头变幻大王旗不知北大会不会改改校庆玩玩),学校给每人发了10块钱餐票,仅当日有效。由于院里同一年级的同学大多数都不在学校(实习或者在家里),所以我们工学的研究生一人拿了20块钱,加上舍友辉哥天津出差,于是我们宿舍3人占有了80块钱的餐票,前一天摩拳擦掌准备大吃特吃(对面宿舍更绝,彭同学估计一人掌控了100块钱)。
我们的习惯是11点半开饭,为了抢吃炒菜,特地11点就到食堂,无奈发现炒菜窗口早已人头攒动,估计要排20分钟的队。旁边大娘水饺无人问津,显然不收券,嗯,不和谐。三个人华丽地合伙打了25块钱的中饭,一边抱怨着一食堂昂贵的价格。
吃饱了决定去水果超市碰碰运气。没想到居然是人山人海。小小的水超,不到10平方米的房间,除了四周的水果架子以外,里面至少挤了20个人,和高峰期的公交车有得一拼。不断有人在为凑齐10块钱的水果而不超标太多而绞尽脑汁。我的预算比较松,扛了一个最贵的西瓜,3.2一斤,在闷热极度拥挤的房间里排了10多分钟的队才交上票。我的预算是25元,抱了个24.4的瓜。
由于下午去了趟浦口,晚上回来得晚了。拿了10块钱的券本来打算吃开心哈利的炸鸡,无奈虽然排队付账的人不多,但排队等吃的人没有一个排也有2个班。炒菜早已售罄收摊,水超依然人满为患,连售卖饮料的窗口也排起了长队。最后拿券换了一篮的杨梅,掏钱吃饭走人。
事实上南大这次消费券的投入并不大,按鼓楼在校学生大约1.8万人估计,投入消费券面值18万,实际使用金额还要再打一个折扣。却也造成如此盛况(如果正常吃食堂的话,中餐+晚餐10元其实还是有点扛不住的),消费刺激作用可见一般。寒假回家时适逢台湾发放消费券,每人3600新台币,折合人民币900元。杭州也在年初发放了类似的市民消费券,人手50元。4万亿的经济刺激计划,摊到14亿中国人头上,就是每人RMB2850,但是这个计划几乎都是投资部分,消费只是其中很小的一块。出口短时间是没指望了。一边在投资上下猛药,一边忽视不温不火内需,国民收入总不能一直这么花吧?

红烧牛蛙

自从上次在Vivian家吃了一次牛蛙就念念不忘,整天摩拳擦掌的想要自己折腾一下,终于有机会了,周末到了。
周五下班后和mm一起去家乐福买了2只肥硕的牛蛙,外加果椒、洋葱、生姜等佐料,回到家打开电脑开始google菜谱,哈哈。
其实烧起来没有想象的那么困难,所有佐料下锅爆一下,把牛蛙用黄酒泡一会再放进锅里,加酱油炒熟,最后盖上锅盖,小火焖个10分钟就大功告成了。
还是挺好吃的,因为牛蛙本身很鲜。。。mm吃了之后说:批准这道菜进入我们的菜单,哈哈,以后如果有人来我们家蹭饭,又多了一道可以拿出来见人的菜了。。成就感满满的,hoho

命理学的东东

不要被题目吓到,我只是看美剧时看到一个宗教学教授说了点命理学的东东觉得挺好玩的,哈哈,就来这边乱写写,省的改天我又不记得了
4是代表创造的数字:四大元素、一年四季;
7是代表完美的数字:光谱有七种颜色、一个星期有七天
这么看来,417岂不就是:创造完美?哈哈哈
ps,我一定要用一篇博客把某人又臭又长的技术连载给腰斩。。。我很阴暗。。。

使用 Equinox 开发 OSGi 应用程序(上)

本文大量参考了IBM Developerworks上的文章使用 Equinox 开发 OSGi 应用程序,之所以重新发表,是因为原文使用的是Eclipse 3.3,现在主流的版本为3.4,其中有些不同的地方。另外有一部分语焉不详,很容易使人卡在半途(主要在下一篇里)。因此我针对3.4做了一些整理,也重新截了图,作为对OSGi入门开发的一个小结。
OSGi中文的大部分资料都和BlueDavy有很大的关系。如果想对OSGi有一个入门性或者较为深入的理解,请参阅BlueDavy编写的OSGi实战和OSGi进阶的OpenDoc。本文假定读者对OSGi有一些了解,所以对OSGi的介绍就不再赘述。
对于Eclipse(3.2+)来说,其上运行的所有插件都是OSGi的Bundle。其核心Equinox就是OSGiR4的参考实现。所以,在Eclipse里,我们通过开发插件的形式,开发符合OSGi规范的Bundle。我们从HelloWorld开始。

  1. 建立一个 plug-in 工程,File > New > Project,选择 Plug-in development > Plug-in Project
    新建插件项目
    新建插件项目
  2. 在建立工程的第一个向导,填入工程的名称:osgi.test.helloworld,使用缺省的工程路径。由于我们的项目是一个通用的 OSGi bundle,所以选择 equinox。比3.3多出来的Working Set的概念我还没搞清楚,就默认吧。
    新插件项目设置
    新插件项目设置

  3. 这个步骤主要是填写插件/Bundle一些信息。可以不做修改直接“Next”。其中最后的是关于Activator的设置,相当于一个Java程序的main()入口,控制着整个Bundle的生命周期。与3.3相比,多出了Execution Environment选项。如果只在本机HelloWorld的话,就用默认的环境。
    新插件项目信息
    新插件项目信息
  4. 去掉所有的模板设置,结束新建newpluginprojectnotemplate
  5. 完成,切换到插件开发的视角。新建了osgi.test.helloworld.Activator类,用于控制Bundle的生命周期,初始化等等(不过初始化工作不必都放在这里,OSGi提供了完整了Listener的支持)。最重要的配置文件是MANIFEST.MF,Eclipse提供了完整的编辑器支持,有几个标签页。比如在Dependencies里设置导入的包和依赖的Bundle/Plugin,Runtime则配置了导出的包及其他信息。newpluginprojectfinish
  6. 编辑 Activator.java,找到start()方法,输入 hello world 语句,代码如下:
    package osgi.test.helloworld;
    import org.osgi.framework.BundleActivator;
    import org.osgi.framework.BundleContext;
    public class Activator implements BundleActivator {
    	/*
    	 * (non-Javadoc)
    	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
    	 */
    	public void start(BundleContext context) throws Exception {
    		System.out.println("hello world");
    	}
    	/*
    	 * (non-Javadoc)
    	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
    	 */
    	public void stop(BundleContext context) throws Exception {
    	}
    }

    每个Activator都实现了BundleActivator这个接口。OSGi就通过这个调用接口的 start()和stop()实现Bundle的启动和停止。
    注意:bundle 的 Activator 必须含有无参数构造函数,这样框架才能使用 Class.newInstance() 方式反射构造 bundle 的 Activator 实例。

  7. 运行实例。和普通Java程序直接运行不同的是,运行Bundle需要一些配置。选择Run->Run Configurations…,在 OSGi framework 中右键点击选择 new 一个新的 OSGi 运行环境
    Bundle运行配置初始对话框
    Bundle运行配置初始对话框
  8. 在右边的运行环境对话框中,输入运行环境的名字、start level 和依赖的插件。Start Level越高,启动顺序越靠后。图中默认的Start Level(SL)为4,我们把helloworld的Start Level设置为5,即较后加载的Bundle。由于目前不需要其它的第三方插件,因此只需要勾上系统的 org.eclipse.osgi 插件,如果不选择此插件,hello world 将无法运行。只有当点击了 validate bundles 按钮 ,并且提示无问题之后,才表明运行环境基本 OK 了。runconfigrequirebundel1
  9. 点击“Run”,运行,应该能够在Console看到HelloWorld输出
    运行控制台
    运行控制台

OSGi控制台使用命令行控制Bundle的状态查看、加载、卸载和更新。OSGi的好处在于能够在不重启应用的情况下,实现对模块的热插拔。如通过SS命令查看所有Bundle的简单状态(SS=Simple Status)。图中模块的状态为ACTIVE。
runss
下图展示了OSGi Bundle的状态图:
我可以直接修改HelloWorld里Activator的代码,编译后。使用Refresh命令更新helloworld的Bundle,得到更新后的运行输出:runchangedrefresh
下面列出了主要的控制台命令。也可以在控制台中输入? 获得帮助

类别 命令 含义
控制框架 launch 启动框架
shutdown 停止框架
close 关闭、退出框架
exit 立即退出,相当于 System.exit
init 卸载所有 bundle(前提是已经 shutdown)
setprop 设置属性,在运行时进行
控制 bundle Install 安装
uninstall 卸载
Start 启动
Stop 停止
Refresh 刷新
Update 更新
展示状态 Status 展示安装的 bundle 和注册的服务
Ss 展示所有 bundle 的简单状态
Services 展示注册服务的详细信息
Packages 展示导入、导出包的状态
Bundles 展示所有已经安装的 bundles 的状态
Headers 展示 bundles 的头信息,即 MANIFEST.MF 中的内容
Log 展示 LOG 入口信息
其它 Exec 在另外一个进程中执行一个命令(阻塞状态)
Fork 和 EXEC 不同的是不会引起阻塞
Gc 促使垃圾回收
Getprop 得到属性,或者某个属性
控制启动级别 Sl 得到某个 bundle 或者整个框架的 start level 信息
Setfwsl 设置框架的 start level
Setbsl 设置 bundle 的 start level
setibsl 设置初始化 bundle 的 start level

终于发本本了

入职和实习的最大区别,除了门卡之外,就是是否需要自带笔记本上班。打入职的那一天起,我就在yy可以有一台华丽的新本本,老闫还号称帮我申请的是一台粉红色的DELL。。。好吧。。
今天终于看到了OA上领导对于申请本本的批示:先用库存。。。好吧,我明白了,那就是用旧的先。跑去行政部,心里一直在祷告,给我一台9成新的吧。。结果到了一看,果真是希望越大失望越大,D610,也就和我以前的DELL一个时代的产品,有五六年了吧。认了,签了收条,拎着大砖头回到座位上。
事隔多年,我又用上了512M的本本,真不容易,下午装软件装的我想抓黑板,用512跑office2007和oracle。。。简直是自虐。。。
吃亏是福,我就这么安慰着自己吧,好歹不用背着电脑包上班下班了。

越狱的主旋律结尾

虎头蛇尾的PB终于结束了,在我看来很主旋律。坏人死的死,坐牢的继续把牢坐穿,剩下一个脑残了。好人都有好报,Michael虽然死于脑瘤,但也留下了孩子。没什么太多的遗憾,也完全没有续拍的可能。
PB算是我追看的第一部美剧吧。在此之前看的美剧除了短剧兄弟连外,就是Friends了。我一向对电视剧不怎么感冒,而对纪录片倒是情有独钟,本科时收集了一大堆刻了盘,估计现在都看不了了。
我开始看PB时已经是S2了。之前虽有所耳闻但却提不起兴趣。记得某个晚上吴波在看EP03,声音开得比较大,吸引了整个宿舍的目光。虽然那时已经晚上11点半了,但我们还是坚持看了两三集,到一点多才上床。至此一发不可收拾,一直到现在一集不拉(基本在播出后一个星期内即看掉),即便是遭人诟病的S3。
这也是我追看的美剧里唯一善终的。之前看Justice和Shark,都播出不满两季即遭腰斩。Tudors看过S1,第二季的时候实在懒得再追了,现在似乎还活着。今年寒假开始看的Numb3rs,我的进度停在了S2,现在早就放到了S5。目前还在追看很热门的Lie to Me。前两天猛然发现是海上钢琴师那个主角主演的。
LP在字幕组打工,我偶尔也帮帮忙,翻了几集Law & Order和Monk。发现做一集字幕还是很辛苦的,感谢那些无私的字幕组。
Friends代表了上一代美剧迷,PB是这一代的标志。也许很多人不同意,但论在国内的影响力,PB的地位无与伦比。几乎从来没有哪部美剧的主角能在国内接那么多广告(不管山寨还是正规军),能把南京路给堵死,进度能偶尔在报纸上看到,剧终了能在新浪上搞个专题。不知道下一部重量级的美剧在哪里呢?

推荐一篇博文-我在南大的七年

算来已经连续三天没写博客了,前两天主要是忙,一个是APIS的权限系统的调整,虽然不着急,但是打算一口气搞定,所以花了很多时间。另外老板要我做一个精品课程申报的网站,我本来草草搞了一份,老板不满意,后来才照抄MIT OCW的弄了一下。课程主页在这里,没想到现在学院的课程体系已经搞得这么复杂,Java、软工和软工实践合成一门大课,像大学数学那样放在两三个学期上。
昨天看到刘未鹏总结性的博文:我在南大的七年,可能有很多人看过了。读后很有感触,特此推荐。手头忙完了,却开始感概了,小翼说在上海话里这叫“劳碌命”。

压缩软件

大概99年的时候,家里有了电脑。那时候机器贵硬盘空间小,虽然8000块钱的机器,硬盘只有5.1G。宽带还没普及,经常要用到1.44M的软盘。压缩软件自然居家必备。Windows 98的时代,Windows还原生不支持zip,需要Winzip来搞定。可是Winzip只是共享软件,非免费软件,过了试用期都会提示你付费,只好到处找破解版。后来Winrar不知为何取代了Winzip,占领了用户的桌面。(后文有解答)
这几天导师让我做个课程主页,里面要带上Slide。可是Office转换而成的HTML效果总是不尽如人意,而且一般总是IE only。还好有个网站叫Cometdocs,支持PDF->HTML。我先用PDF Creator打印成PDF,再上传到网站转换HTML。
转好了发现体积太大了。原本2M的Slide转成HTML居然涨到了10M。这也不能怪别人,HTML和PDF很不一样,背景图一张一张分开放,Slide一多就不行。正愁怎么发给老板,想到了7z的压缩比比zip好,于是就压缩成7z的格式试试。
一试吓一跳。25M的网站,压缩成zip剩下23M多,换成7z只剩下4.5M!!!原来7z支持文件间的对比压缩,而这些幻灯片的背景图大同小异,自然得到很理想的压缩比。不过文件间压缩的缺点在于,一旦只想解压缩一部分文件的时候,只能解压缩所有的文件之后再把目标文件给抽出来。
在搜索7z文件间压缩的时候,不经意看到善用佳软的两篇推荐7zip的文章,在这里这里。其中提到的传奇文章《压缩大战真相》,揭露了当初RAR PK掉ZIP的一些故事。
最后再给7-zip做做广告。全免费(个人可能无所谓用破解,但公司可承担不起这个法律风险),支持格式丰富,压缩比高,使用简单。用惯了winrar也不用怕,7zip也支持rar的解压缩,别人发给你的rar照样能打开,基本没有软件切换的成本。
想起来俺家小白也在我的唆使下用起了7-zip,挺好使的,是吧?