2010年12月30日星期四

别了,2010!

高涨的房价,滋生的草根研究投资/经济的冲动。正所谓,初中研究中考;高中研究高考;大学研究就业。2010年作为P民的我实在没什么可以总结,没房的我还是总结总结房地产吧。

2010年的重大新闻
1 国资委:78家央企将退出房地产业务
央企是国家的嫡系部队,2010年主子让嫡系撤退。估计快撤退干净了。
2 银监会压力测试(假设房价未来跌去60%银行是否会死)
目前是地产绑架银行的局面,银监会提前尝试挥刀自宫,确认能否留有一个蛋来保证传宗接代。
3 存款保险制度(即将实现)
此制度规定如果银行破产储户最多获赔20万。无论你银行里有几个亿,对不起,只给20万。这是对那些有些土鳖钱但没能力把钱输送到瑞士银行的人群占有资本的一种掠夺。
4 房产税
2010年关于房产税的报道很多。正统消息,嫡系消息,小道消息。到处都是房产税的消息,但是还没落实。2010国家算是对房产税退出做个热身。目前看目的已达到,毕竟屁民不会对以后征收房产税莫名惊诧。
5 货币政策
上调准备金六次,年底加息二次。银行放贷开始谨慎,毕竟钱袋子钱不是很多。贷款的民众还款压力在逐步增加中。
6 十二五与政改
十二五规划中删除了以经济建设为中心。2010年算是一个变革的开始,换一个套路出牌,清洗改革开放30年来积累的种种矛盾,种种利益。


这些新闻很有趣,串起来逻辑是那么的强。我用阴谋论的思维小小解读一下:
在(6)这个动荡的时期,是最好的整合利益链条的时期。为了收编温州炒房团与利益集团构成的土鳖资本,以太子党为首的军队红色资本早早退出了房地产领域,并发文(1)另嫡系早早撤退,勿贪多恋战。知己知彼,百战不殆。红色资本用(2)来分析本方实力,力争在收编土鳖资本的时候不能废了自己的王子军团(银行),底线是至少留着一个蛋传宗接代。用(5)来移植土鳖资本发展壮大。(3)为一些王子阵亡做了相应的准备,实现有法可依,稳草民情绪。红色资本在围剿土鳖资本的同时为了地方财政弹药的充裕采取(4)来做粮饷补给。

从后勤保障,到敌我形式分析,都已经做了相当的准备。买不起房的不要J动,先保住饭碗,别死在金字塔尖的格斗中。最后用一个高人的话做结案陈词:

“过去几年里我一直在说,做自己看得懂的事情。本意是我相信一些事情迟早要来,但是时间点是我不能准且提早太多时间知道的。我之前只看见,一个又一个相关的配套在确立。我不停的和周围的人说风险与危机,也因此被很多人看作神经病。即使新一轮房产政策还会因为各种以而导致夭折。而这样的夭折在我看来,会次级更多严厉的政策博弈与更残酷与直接的手段来干预。其实温总在年初那句可以看作摊牌的话已经说的很明白了:这个是涉及政权稳定的问题了。”

别了,2010!

2010年6月25日星期五

感慨一下自己的吉他水平

http://v.youku.com/v_show/id_XMTkxNDMwMTY=.html
两年前我知道我吉他弹得很差,但是现在回顾一下两年前的作品,不由感概,现在水平更差了,汗!看来不管干什么,在知道自己水平差,也要留下当时的快照。因为日后很可能水平更差!真是逆水行舟,不进则退啊!

2010年6月19日星期六

GTK+ OpenGL Extension 折腾日记

最近在做一个姿态模拟系统,端午节前请Lynn帮我设计了传感器的PCB,昨天刚刚送去打板。今天早上又收到咸蛋帮我画了个3D Max的十字架。貌似万事俱备,就差我开工了!

这套系统的作用就是根据传感器的输出数据来判定传感器所依附物体的姿态,然后在PC上以3D效果显示出来。核心的东东就是一个姿态的识别算法,其他什么数据传输,图像显示都是绿叶。

由于软件是在Linux上编写,我采用了GTK+。为了显示3D效果,我google调查了一下,需要GTK+ OpenGL Extension。OK,问题就是找到3D Sample了。可是我下载GTK+ OpenGL Extension的Release版本1.2.0编译上就遇到了问题。gtkglext-1.2.0是2006年的版本,我现在用的GTK+还是比较新的版本,很显然gtkglext-1.2.0版本太老了。当时的思路是google解决掉所有出错点。经过一番恶战,我的确解决了编译的错误,但是运行起来依然有问题,总是说"gtkglext example 'GDK_IS_GL_DRAWABLE (gldrawable)' failed"。再google,貌似是gtkglext自己的问题。最后决定用git抓取最新版本。抓下来后configure那里又不过,晕死了!提示configure: error: Invalid target for GDK: use x11 or win32。怎么办呢?干脆Merge一下1.2.0和git的版本算了,我首先Merge了gtk/gtkglwidget.c,毕竟之前报错总来自这里。看来是人品爆发了,merge完这个文件,编译,执行再不出错了!哈哈!看来root cause找到了!Yeah!

GTK+ OpenGL Extension 的shapes例子还不错,可以3D显示并旋转一个茶壶,这正是我想要的东西^_^。



后记: 2011/08/10已经实现当时的想法,详见 AMCC 1.0 release


2010年6月11日星期五

递归调用背后的玄机

在函数调用前,首先要将被调用函数所需要的参数放入堆栈。然后执行汇编指令CALL进行函数调用,与此同时CALL下面一条指令的地址也压入到了堆栈中。当函数返回时,调用RET指令。RET指令会从堆栈中取出一个地址(CALL压入的地址),之后程序从这个地址继续向下执行。这样调用完函数还可以按照既定顺序去执行。

函数调用是A调用B,递归调用则是A调用A。递归调用和函数调用在堆栈的处理方式上是有区别的,只是我们平时不会用汇编去玩递归,很多堆栈操作都被Compiler代工。

下面是一段使用递归调用的C函数代码:
0001: void
0002: merge_sort(int array[], int p, int r)
0003: {
0004: int q;
0005:
0006: if (r > p) {
0007: q = (p + r) / 2;
0008: merge_sort(array, p, q);
0009: merge_sort(array, q + 1, r);
000a: merge(array, p, q, r);
000b: }
000c: }

反汇编(objdump -d)后函数代码如下:

0001 <merge_sort>:
0001: push %ebp
0002: mov %esp,%ebp
0003: sub $0x28,%esp
0004: mov 0x10(%ebp),%eax
0005: cmp 0xc(%ebp),%eax
0006: jle 8048691 <merge_sort+0x7f>
0007: mov 0x10(%ebp),%eax
0008: mov 0xc(%ebp),%edx
0009: lea (%edx,%eax,1),%eax
000a: mov %eax,%edx
000b: shr $0x1f,%edx
000c: lea (%edx,%eax,1),%eax
000d: sar %eax
000e: mov %eax,-0xc(%ebp)
000f: mov -0xc(%ebp),%eax
0010: mov %eax,-0x10(%ebp)
0011: mov -0xc(%ebp),%eax
0012: mov %eax,0x8(%esp)
0013: mov 0xc(%ebp),%eax
0014: mov %eax,0x4(%esp)
0015: mov 0x8(%ebp),%eax
0016: mov %eax,(%esp)
0017: call 8048612 <merge_sort>
0018: mov -0xc(%ebp),%eax
0019: lea 0x1(%eax),%edx
001a: mov 0x10(%ebp),%eax
001b: mov %eax,0x8(%esp)
001c: mov %edx,0x4(%esp)
001d: mov 0x8(%ebp),%eax
001e: mov %eax,(%esp)
001f: call 8048612 <merge_sort>
0020: mov 0x10(%ebp),%eax
0021: mov %eax,0xc(%esp)
0022: mov -0xc(%ebp),%eax
0023: mov %eax,0x8(%esp)
0024: mov 0xc(%ebp),%eax
0025: mov %eax,0x4(%esp)
0026: mov 0x8(%ebp),%eax
0027: mov %eax,(%esp)
0028: call 8048414 <merge>
0029: leave
002a: ret


分析:
1 C[0008]对应A[0017],可以看出A[000e~0016]是把参数array,p,q
压入堆栈,这和普通的函数调用相同。所以很显然,在 r > p 的情况下, C[0008]的持续执行,会导致堆栈中有很多组 array, p,
q,r变量。
2 C[0009]对应A[001f],C[0009]什么时候调用?答:C[0008]引起的调用违反条件(r >
p)后,C[0009]会被执行。A[0018~001e]在做什么?嗯,这就是递归调用的特殊一面,如果是正常函数调用,是不需要这段代码的。那到底A[0018~001e]在做什么?就是把堆栈里面之前保存的一组参数提取出来,然后再讲这组参数压入堆栈,为C[0009]调用做准备。你可能会想拿出来在放进去这不是瞎折腾吗?非也!我们从C代码角度看,提取步骤让局部变量(array,p,q,r)的值已经变成之前堆栈保存的那组数据了,这是重点。之后再把局部变量放入堆栈这是为了后续函数调用做准备。
3 C[000a]对应A[0028],C[000a]什么时候调用?答:道理同上。A[0020~0027]在做什么?道理同上,哈哈。
4 对A程序的疑惑,为什么上来只有push,没有看到pop?其实leave就完成了这个动作,请看注释2。

总结:
递归调用需要在汇编语言级别做特殊处理。对于特殊处理,直白点讲,就是把最后吃进去的给我吐出来。吐到哪里?吐到局部变量里。这样变量就来了一次超级大变身!!!

注释1:C[000a] 代表 C语言000a行;A[000a] 代表汇编语言000a行;
注释2:LEAVE : Set SP to BP, then pop BP.

2010年6月9日星期三

How to become a world-class programmer

If you want to be a good programmer, you just program ever day for two
years, you will be an excellent programmer. If you want to be a
world-class programmer, you can program every day for ten years, or
you can program every day for two years and take an algorithms class.

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/

2010年4月16日星期五

OpenWrt岁月(一)

由于鄙人不想只停留在交换机的开发路上而忘记摘采盛开的路由器野花,面对OpenWrt的诱惑,女朋友走后我和她亲密接触并放纵了几个夜晚(昨天从晚上8点奋战到了今天凌晨1点)。本想透过svn
co svn://svn.openwrt.org/openwrt/trunk/去抓取ING的她,不过却始终无法成功,不知道是否北G*.F$#W所为。无奈选择了http://downloads.openwrt.org/kamikaze/8.09.2/kamikaze_8.09.2_source.tar.bz2

#tar xvfj kamikaze_8.09.2_source.tar.bz2 ./*
#make menuconfig (Target System选择BCM947XX/953XX [2.6])
这个配置方案以下简称"她"
#make

基本上就是上面这几步骤,就可以把方案需要的bin档案生成了,档案放在./bin目录下。插一句:为了更了解她,我加入了一个她的QQ群,进去后我就出来了,里面很像华强北的商家,天天讨论的话题都是刷机刷机刷JJJJ,我当然要的不是刷JJ这么简单,我要了解她的灵魂。

在与她亲密接触的途中,我带着疑惑考察了下面几个要点。

一 Flash分区
嵌入式系统的Flash就像PC的硬盘。硬盘有分区,Flash也有分区。她给Flash分了4个区块,分别是bootloader(cfe),kernel(linux),root
file system(rootfs),configuration(nvram),详细见下面结构:

/build_dir/linux-brcm47xx/linux-2.6.25.20/drivers/mtd/maps/bcm47xx-flash.c
static struct mtd_partition bcm47xx_parts[] = {
{ name: "cfe", offset: 0, size: 0, mask_flags: MTD_WRITEABLE, },
{ name: "linux", offset: 0, size: 0, },
{ name: "rootfs", offset: 0, size: 0, },
{ name: "nvram", offset: 0, size: 0, },
{ name: NULL, },
};

看到上面是否觉得奇怪,为何offset和size都为0,my god~
我迷糊了,到底每个区块从哪里开始,多大尺寸啊!不过又仔细看了看bcm47xx-flash.c,原来里面有动态分析Flash的代码,然后填充了bcm47xx_parts[]
的 size 和 offset 变量。那么问题又来了:用什么方法分析的呢?原来她的Firmware文件采用TRX文件格式,动态解析TRX
Head就可以分析出个个区块的offset和size了,具体TRX结构的详细信息请参阅
https://forum.openwrt.org/viewtopic.php?id=6938

二 Root File System
在Kernel目录下的.config文件中找到了CONFIG_CMDLINE的定义:
CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs,jffs2
init=/etc/preinit noinitrd console=ttyS0,115200"
所以她采用squashfs或jffs2来作为Root File
System,squashfs是read-only的文件系统,jffs2是r/w都OK的系统,如果你想在Router
Shell下用ipkg(轻量级包管理工具)来动态安装Package,那么推荐使用jffs2作为Root
FS,不过忧着点,Flash不是硬盘,没多少空间,动态df看看有多少结余,别纵欲过度。

三 启动流程
由于CONFIG_CMDLINE把init配置成了/etc/preinit,所以内核启动后会执行/etc/preinit,
preinit会做根文件系统的加载动作,然后执行/sbin/init。

/build_dir/mipsel/root-brcm47xx/etc/inittab
::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop
tts/0::askfirst:/bin/ash --login
ttyS0::askfirst:/bin/ash --login
tty1::askfirst:/bin/ash --login

/build_dir/mipsel/root-brcm47xx/etc/init.d/rcS
#!/bin/sh
# Copyright (C) 2006 OpenWrt.org

run_scripts() {
for i in /etc/rc.d/$1*; do
[ -x $i ] && $i $2 2>&1
done | $LOGGER
}

LOGGER="cat"
[ -x /usr/bin/logger ] && LOGGER="logger -s -p 6 -t sysinit"

if [ "$1" = "S" ]; then
run_scripts "$1" "$2" &
else
run_scripts "$1" "$2"
fi

看了inittab和rcS就很清楚了,接下来就是执行/etc/rc.d/S*,基本上就是初始化各种各样应用程序的脚本。

四 让我苦闷一晚的Web
在/etc/rd.d/下有一个文件叫S50httpd,是负责开启http server的脚本,她采用busybox内潜的httpd做http server
anders@ubuntu:~/share/openwrt/8.09.2/build_dir/mipsel/root-brcm47xx/usr/sbin$
ls -l
lrwxrwxrwx 1 anders anders 17 2010-04-16 14:21 httpd -> ../../bin/busybox
httpd是用www作为web目录的,于是我进入了www目录,发现里面竟然空空如野,WHY?她没有Web?那还玩个P :-(
不过,这么有名气的她,怎么可能没Web呢?上google搜索来搜索去都有web啊,为何我没有?(先讲讲五再回头说这个)

五 IPKG的包管理方式
In an OpenWrt firmware, almost everything is an .ipk, a software
package which can be added to the firmware to provide new features or
removed to save space. Note that packages are also maintained outside
of the main trunk and can be obtained from subversion using the
package feeds system:
$ ./scripts/feeds update
Those packages can be used to extend the functionality of the build
system and need to be symlinked into the main trunk. Once you do that,
the packages will show up in the menu for configuration. From kamikaze
you would do something like this:
$ ./scripts/feeds search nmap
Search results in feed 'packages':
nmap Network exploration and/or security auditing utility
$ ./scripts/feeds install nmap
To include all packages, issue the following command:
$ make package/symlinks

原来她有几个仓库,仓库里面有N多软件,web只是仓库的软件之一了,于是我用下面的方法安装了她的web:
anders@ubuntu:~/share/openwrt/8.09.2$./scripts/feeds update packages luci
anders@ubuntu:~/share/openwrt/8.09.2$./scripts/feeds install -a -p luci
anders@ubuntu:~/share/openwrt/8.09.2$make menuconfig
Administration
- LuCI Components
- luci-admin-full: M
anders@ubuntu:~/share/openwrt/8.09.2$make
anders@ubuntu:~/share/openwrt/8.09.2/build_dir/mipsel/root-brcm47xx/www$ ls
cgi-bin index.html luci-static resources


(To be continued..)

2010年3月16日星期二

likely & unlikey

GCC的likely和unlikely功能就是让很可能被执行的分支代码紧跟着je或jne这样的条件跳转指令后面。为何非要跟在条件跳转指令屁股后?主要是更好利用CPU指令Cache。想想看:如果要执行的语句都在Cache里,省去从Memory抓数据的时间直接去执行,速度岂不是快了?所以likely和unlikely这种功能主要是为了提速,去掉不会影响功能。

http://kerneltrap.org/node/4705

2010年3月12日星期五

Comparison of Hard Link and Symbolic Link

Comparison of Hard Link and Symbolic Link

ItemHard LinkSymbolic Link
Name resolution Faster. A hard link contains a direct reference to the object.Slower. A symbolic link contains a path name to the object, which must be resolved to find the object.
Object existenceRequired. An object must exist in order to create a hard link to it. Optional. A symbolic link can be created when the object it refers to does not exist.
Object deletion Restricted. All hard links to an object must be unlinked (removed) to delete the object.Unrestricted. An object can be deleted even if there are symbolic links referring to it.
Dynamic objects (attributes change)Slower. Many of the attributes of an object are stored in each hard link. Changes to a dynamic object, therefore, are slower as the number of hard links to the object increases. Faster. Changes to a dynamic object are not affected by symbolic links.
Static objects (attributes do not change) Faster. For a static object, name resolution is the primary performance concern. Name resolution is faster when hard links are used. Slower. Name resolution is slower when symbolic links are used.
ScopeRestricted. Hard links cannot cross file systems. Unrestricted. Symbolic links can cross file systems.

2010年3月7日星期日

LockMeter

最近在系统学习LDD3(以前都是临时抱佛脚),在第五章看到了关于LockMeter(http://oss.sgi.com/projects/lockmeter/)。LockMeter可以分析出不同Linux版本在SMP支持上的性能的差异,分析Lock
Hold/Wait Time。我很想在我的Kernel里面玩玩,但是看到LockMeter网站上支持的内核不够新(2.6.16
Latest),我的Kernel是2.6.32.3,或许Kernel已经加入了这个功能?于是我开始在我的2.6.32.3内核中找寻是否有相关的东西。在Document目录中发现了lockstat.txt,很像LockMeter,OK!menuconfig->Kernel
Hacking->Lock usage statistics,make bzImage/Update
grub.confg,一切妥当,boot新的内核,意外发生了:

Give up waiting for root device. Common problem:
- Boot args (cat /proc/cmdline)
- Check rootdelay = (did the system wait log enough?)
- Check root = (did the system wait for the right device)
- Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/dist/by-uuid/xxxxx doest not exist. Dropping to a shell!


奇怪,怎么就找不到硬盘了呢?我把rootdelay设置到了200都不OK!忙活了几个小时,不知道为何,思路有点乱,改天再研究!

2010年3月1日星期一

招聘的瞬间

今天Interveiw了一个人。未见人之前我首先拿到的是他的笔试卷子(C Language),做的比较差,成绩不超过20分。

我首先对这20分准备了几个问题:
1. 这次是才出来找工作吗?(如果是刚出来找,没有准备笔试的话,有时候会出现惨不忍睹的场面)
2 你平时用什么语言开发?(如果平时不用C开发,可能会做不太好)

见到人后,显示出来的是比较好的亲和力,眼神中透露出了期待和自信。第一印象还是不错的,于是开始了项目细节的盘问。

[团队协作问题]
Anders> 你当负责人时,下面几个人?(简历中有看到他当过一段时间项目负责人)
He> 最多的时候是3个。
Anders> 你平时如何和下面人协调工作?
He> 手下,也不能说手下,都是一起工作,我主要是做好环境和驱动,然后其他几个人做App(应用)。

[项目问题]
Anders> 你现在做什么产品?
He> 车载播放器, XXXXXX(一些产品介绍)
Anders> 你在项目中主要做哪些工作?
He> 构建WinCE环境和驱动
Anders> 你们项目都有哪些驱动?用什么总线?
He> 主要用IIC和UARD (他接下来说了很多CAN总线的东西,我具体问,他说目前没用到CAN)
Anders> 你能给我讲一下IIC这个总线吗?
He> 从历史说了一下,然后说了一下细节,提及到IIC 地址的部分
Anders> 能说下IIC里面地址是怎么确定的吗?
He> 由IC确定, IIC可以挂多个设备

[OS问题]
Anders> 你除了WinCE还用过其他OS吗?比如Linux
He> 稍微了解一下Ubuntu
Anders> 能具体说说Ubuntu吗?
He> 了解很少

[网络问题]
Anders> 你做过网络驱动吗?
He> 没做过,车载播放器目前还没加网络功能
Anders> 你对TCP/IP熟悉吗?
He> 不是很熟悉,就是大学学那些东西

[之前埋伏笔试的问题]
Anders> 这次是才出来找工作吗?
He> 陆陆续续有一个月了
Anders> 你平时工作用什么语言?
He> C++

[结束]
Anders> 我们大概工作是做网卡驱动,当前有一个任务是WinCE的,不过还有很多不同OS的驱动项目,所以我们需要一个比较全面的人
He> 他听到这里,应该知道他没戏了
Anders> 你有什么问题要问我吗?
He> 没有了
Anders> 感觉气氛不太轻松,我就感叹了一下福田那边的房租和房价缓和气氛(知道他从福田区过来)
He> 你指租金还是房价?
Anders> 租金,你的房租多少钱?
He> 我买房了 (这一瞬间,他的脸上出现了一丝得意,不过也难以掩饰他被淘汰的郁闷,估计初期他认为他胜算很大)

[总结]
基础太差(笔试成绩差,而且是出来一个月拼杀过后的成绩)
接触面窄 (只会WinCE,对其他OS没有任何接触。也不是很深入,说东西前爱说很多无用的东西,不直接切入主题,切入主题后说得很少,给人感觉夸夸其谈)
网络知识为0 (这点很不符合工作需要)
说他买房了那一瞬间的表情让我看到他缺乏沉稳,有些浮躁。

2010年2月23日星期二

WLK岁月(一)

从去台北那天起到现在,我的时间大部分都给了WLK (Windows Logo Kit)。现在Anders白天在公司Learns to
rock WLK,游走于匈牙利命名规则的代码间,彻彻底底在Rock Windows!晚上偶尔回家鸟悄的看LDD3,偷着Rock Linux。

最近的工作,事情多了许多。很多事情需要与PM/Sales/RD协调/沟通。我给自己打50分,不及格。因为自己在安排事情上不是很有条理,确切说计划性太差。现在的状况是,一天忙来忙去乱了阵脚,失去了方向。以后要加强!以后应该早上就规划好一天的事情。

2010年1月24日星期日

人在台北(五)

今天川哥驾车携全家(川嫂,Baby)陪我玩,从上午10点一直到下午8点,先开车去基金公路驻足看海,然后去野柳地质公园看女皇头,再去海龙珠吃地道的海鲜,吃饱后去海边YoungDoor喝下午茶,再驾车去故宫,故宫去晚了没看成国宝,不过还是买到些不错的纪念品。之后去川哥家稍适坐坐,见到了小黑,很不错的猫。I like,小黑也比较喜欢我,还和我撒娇,据说小黑不是对每个人都这样,看来我人品不错哦~晚餐吃的台湾牛肉面,味道不错,味道有些像深圳的御花溪牛肉面。


传说中的太平洋,很开阔,很像电视中一个失恋男人去吹海风的地方。










野柳地质公园一角
故宫扫的货,风铃/丝巾/筷子/镜子/记事本

川兄Baby,很好玩啊!会假哭,不过川兄自动Filter ^^

小黑哦

海龙珠吃的午餐
牛肉面晚餐
今天的座驾

今天得到了川哥全家的盛情款待,完全超出我的预期,非常感动!川兄有了小朋友,不怎么IT男了,开始了全新的Baby Project,当了老爸的人就是有包容性,做事很耐心哦,佩服佩服 ^^

2010年1月23日星期六

人在台北(四)


今天是周六,工作上的事情也安顿了一下,所以不用加班了。初来台北,第一个假日,今天出行的路线是中正纪念堂->西门町->101大楼

中正纪念堂很不错,看到了很多蒋公生前的物品,了解了一些历史知识。蒋公的字非常漂亮,人呢,也帅呆了。里面所陈列的东西完全超出我的想象,纪念堂里面也没太多工作人员,全凭大家自觉,重点是不收门票的策略让蒋公无价,记得深圳中山公园的逸仙馆门票五元,看来大陆还真是给其明码标价。


初识纪念堂

纪念堂外貌
爬楼梯途中拍摄
真迹
一些勋章
生前穿过的衣服
字的确漂亮,其实我写不好字主要是电脑搞怪 :-)
宋美龄也是才女,这张图里面展示的宋美龄的绘画作品。
蒋介石的名字中的介石和中正都是来自《易经》,车牌也选0888,看来还真迷信。
很逼真的蜡像,周围的家具都是蒋公生前用品。

离开中正纪念堂时候,最后买了本咸蛋叮嘱的JIN书。出了中正纪念堂,直接去了西门町,那里的木吉他餐厅比较有名,因为每天会有歌手在那里倾情献唱,据说很多人在那里唱红。很不巧,当时应该是张杰演出,可是waiter说他迟到了,不知道什么时候来,没有了艺人演唱的氛围,我也无心吃饭,所以就离开了。

接下来去了西门红楼,买了2件小玩意,很可爱,作为送给女朋友的礼物。


A面
B面

西门町对我来说没太多吸引力,就像深圳的东门。不过上面2个小玩意我还是很喜欢。对了,在红楼旁边找了阿奇给我画了一张Q版Anders,http://www.wretch.cc/blog/nathan1029这个网站可能会看到相关Update。

离开了西门町,我去了101,在101门口看到几个年纪大的人拉着横幅,宣传那些大陆比较敏感的主题。我也没拍照,以防惹祸上身。今天去101其实不太合适,因为能见度很差。Anyway,我还是上去看了。上了88层,89层,上下楼的电梯很快,据说是世界最快,600M/M,上升/下降时耳膜的确有些冲击,比飞机起飞/降落那种要强烈得多。楼上看的确有些恐高,不过能见度不好的确可惜,我没看到太多东东,只能在楼上拍拍那海市蜃楼般的真实视角了。





明天还没想好去哪里,约好了一个当地导游,开车载我出去,哈哈!

2010年1月19日星期二

人在台北(三)

工作忙到晚上9点,四处在协调专案,还好有些突破,希望会越来越顺。中午是吃的自助素食,阿弥陀佛,味道很不错,并且有肉类的感觉,(这个要稍微解释一下,这边素食做得很像肉类,好像是用黄豆透过特殊工艺制作出肉类的口感,然后再加很多调料弄出肉类的味道,什么素鸡,素鸭,素牛肉,其实味道还真不错的)我打算以后要多光顾一下,价位也不高 ,100多台币一餐饭,吃得还挺惬意。

台北的摩托车文化在大陆是很难见到的,当十字路口红灯变绿的时候,会听到呜的一声,一堆摩托车飞驰而过,如果你没见过这场面,我告诉你那是台北古惑仔要去火拼估计你可能都会相信。下面是我下班回来拍的一段视频,很有趣吧,嘿嘿!


2010年1月18日星期一

人在台北(二)

上午开会从10:30一直到13:30,中午和老板聊了好多,没想到老板的经历还蛮厉害,清华的本科,美国的硕士,博士。从物理到半导体,从宗教到幼儿园~

插入个话题,我的Notebook昨天是靠电池的电量来工作的,因为我的Notebook插头无法插入台湾那的插座里面。台湾的插头规格和大陆不一样,有两种,一种平行扁的,另一种是两个平行扁+1个圆柱的。比较讨厌的插座都不是那种万能的,而是只能插上面两种规格的插头,和大陆不一样,大陆的插座基本都是万能的,欧规,美规,估计火星的规格都可以插入!



为了买个变换插头,我跑了好多地方,真的不好买,众里寻她千百度,最后发现累得我稀屎拉一裤!不过最后还是买到了!就是下面这个69台币!



Anyway,Notebook可以使用了,还是蛮高兴的,晚上去一家古早传说饮食杂志馆点了一个宫保鸡丁饭,180台币,味道还不错哦~


LOGO瓷器?我也不知道干什么用的,痰盂?吐....^^


2010年1月17日星期日

人在台北(一)

[第一餐饭]

在新店市民权路的沙比欧餐厅,我点了一个清蒸柠檬鱼。


味道很不错,没有腥味,鱼的味道很鲜美,而且没有小毛刺,看我吃得也很狼狈,什么都没剩下。




餐后喝的Coffee,这个小奶杯很精致,好玩!


一餐饭是280台币,相当于人民币56,性价比我想比大陆高!
吃饭后去的家乐福,拍了一张夜景,台北道路比较狭窄,但是路面很干净!


下面是家乐福购物车上的装置,需要放入10块台币后才能推走此车,要不你无法解开铁链,购物后到推车统一停放处,再将此车与铁链扣在一起,你就可以取回你的10元台币。这个创意不错,防止顾客将购物车随处乱丢,节省了超市工作人员的工作,毕竟你有10块台币在里面。


宿舍的客厅,比较大


我居住的卧室



OK, 先写到这里!




2010年1月8日星期五

给ubuntu904升级内核

[2010_0107]

1 在kernel.org下载了2.6.32.3的内核,放置到了下面的路径中
anders@ubuntu:/media/Data/anders/ing/linux/linux-2.6.32.3$
2 为了减少折腾的时间,我使用之前ubuntu904系统的config档案
anders@ubuntu:/media/Data/anders/ing/linux/linux-2.6.32.3$ cp
/boot/config-2.6.28-11-generic .config
3 制作软连接
ln -s /media/Data/anders/ing/linux/linux-2.6.32.3 /usr/src/linux
3 配置内核 (其实什么都没配置直接退出保存,然后shell提示内核压缩算法,我选择了gzip压缩,之后一路回车逃避一大堆提示^^)
anders@ubuntu:/usr/src/linux$make menuconfig
4 编译内核 (这一步骤我用了2个小时,23:40编译,知道第2天凌晨1:40,汗!)
anders@ubuntu:/usr/src/linux$make

[2010_0108]

5 安装内核 (/boot目录会长出来 vmlinuz-2.6.32.3)
anders@ubuntu:/usr/src/linux$make install
6 安装内核Module (/lib/module/会长出2.6.32.3目录)
anders@ubuntu:/usr/src/linux$make modules_install
7 制作initrd文件
anders@ubuntu:/usr/src/linux$mkinitramfs -o /boot/initrd.img-2.6.32.3 2.6.32.3
8 修改grub启动选项
vi /boot/grub/menu.lst, 加入如下文字:
title Ubuntu 9.04, kernel 2.6.32.3(by Anders)
145 root ()/ubuntu/disks
146 kernel /boot/vmlinuz-2.6.32.3 root=UUID=E218500B184FDD63
loop=/ubuntu/disks/root.disk ro quiet splash
147 initrd /boot/initrd.img-2.6.32.3
然后设置 default 2 (因为我上面添加这个启动选项的顺序是第3个(0为index,所以为2)
9 reboot

ok,一切搞掂!使用新Kernel还是不错的,启动速度提高了10s,嘿嘿!