2009-04-11

山西行

北京——太原
北京到太原的动车刚开通,我们就乘着去了(163)。太原火车站下来不知吃什么,只好很没有追求的吃了开封菜,然后乘双层巴士(1.5)来到建南汽车站。太原的公交车开得太慢了-_-|||真不如做嘣嘣去,才多1块。

太原——平遥
建南到平遥的汽车(25)不是按点发车的,人满就走,下一趟接着来,反正不用等多久。一路颠簸1.5小时,就到平遥汽车站了。一出站就围过来一些三轮,说2元钱拉到古城。拒绝掉,问她已经找好住处了,并且不需要做游览车转,也是两块吗?人扭头就走了,不过还好心给指了个方向(西)。山西人民挺不错的。顺着手指的方向,转过一个路口,500步就到了。
一路上全是商贩,看到一店家门牌上赫然写着牛肉包则,暗笑错别字居然写这么大。
眼前豁然一座城池。城墙外面看来挺新,知道是前些年重新修造的,有点小失望,不过内墙还是旧貌,灰土土腐蚀得一层层的,看起来有点历史沧桑感。古城不是一座死城,里面生息着很多居民,所以医院、派出所、教堂一应俱全。顺着北大街一路向南,一路上人越来越多,租了辆自行车(10)都骑不动。路边很多客栈,便宜的(60)奢华的(未知)都有,中央区那几家比较著名的,大约200-300的样子。我们骑车绕到了僻静些的巷子,同样不错的房间,讲价讲到150。尽管僻静,但离城中央的市楼也只有200步:)
信步到城隍庙买票,才知通票刚刚调价到80,还包含双林寺和护国寺。来的真是时候,以前光古城通票就120。快到傍晚了,先上城墙观古城整体风貌。结果风大冻得够呛,从南门一直往东走,一路看了很多住家户的平房瓦房还有猪圈,看不到热闹的街区,也没有看到人,只看到两头大白猪,于是有点饿了。不知道人都哪里去了。房子都挺旧,但看起来大部分也都是二三十年前的房子,真正破旧不堪古色古香的房子,估计早已入土了。就连那些保护起来收门票的镖局、票号,我看也挺新的。走啊走,肚子和脚都叫苦了,直到东门才终于能下去了。接下来找小吃,mm很喜欢碗秃(3~5),吃了三家,市楼北边10米小胡同口那家地摊的口味极佳。姜糖有点辣,龙须酥有点甜,香草牛肉卖相很好看,特别是那外皮,本想买椟还珠的,结果只给了瓤,味道一般般。
找饭店时看了好几家有名的店,云锦城、天元奎、还有几家给外国人开的cafe——我们都没进去,太贵了,人又很多。转身进了一家驴友推荐店的隔壁,好像叫什么家常小吃,一看菜单真便宜啊真便宜,比刚才那几家便宜多了。同样呢——千古不变的硬道理,一分价一分货,点了几样东西都不好吃。好在是坐在沙发上吃的,体力很快恢复。吃完出来天就黑了,街上的人更多了。还有很多景点没去,第二天要想去就得给票签字。找了三个售票点,都提前下班了,终于找到个刚准备走,被我拉住签了字。又转了两圈,转到了演艺广场,演些山西民间戏,票价60,旋就走了。买牛肉,睡觉。
第二天一早吃了陈年老汤刀削面,味道还不错。然后去了城西的基督教堂做礼拜(城东还有做天主教堂,城中间还有庙宇和道观,小小古城的信仰生活真的很丰富)。基督教堂朴实无华,容量挺大,里面都是当地人,估计有1000人吧。唱完歌,开始有牧师讲道,可惜是方言听不懂,又没带圣经,只好悻悻离开。转到了衙门,门口居然碰到同事(平遥真小)。在衙门蹭了导游,结果先从牢房开始参观,然后到刑房里看古代刑拘,越看越闹心,于是弃导游自己转去了,正好遇到开堂判案的表演,挺好玩的。
还有个好玩的东东在文庙里,是古代考试用的小抄。两寸见方的小书,上面密密麻麻写着绿豆大小的字,这可是用毛笔写的啊,直叹弗如。
还有还有,银行的金库居然藏在进门第一间屋里的炕下面,真应了"最危险的地方也是最安全的地方"。
离开的时候,看到牛肉包则店门前有车肇事,引来数十人围观,嗯,天朝人民到哪都这样。对了,包则不是错别字,就是包子的意思。碗秃也叫碗秃则。

平遥——乔家大院
都说王家归来不看院,可是时间不够,还是选择去了乔家。平遥到乔家车程1小时左右(15),也是人满就发车。外面的车会向你喊里面没车了,不用理会,里面有车,且有正经的座位,外面上车就只能做马扎了,价钱也一样。下了车到乔家大院的路上全是小贩,感觉比平遥古城的都多,其中有卖香酥饼的,是抡大锤向打糕那样打出来的。1块钱手掌大小的一纸包,剥开来还是一纸包,再剥开还是纸包,一层层剥下来,里面就邮票大小的一小块饼,不过吃起来还不错,像花生味的锅巴。越往里走人越多,买票还要排10分钟的队(40真贵啊)。里面到处都是讲解员,完全不用请人了。大院没啥好说的,很小,不算富贵,也就是一商人抛弃的旧宅子,家里所有的东西都带走了,只留下三件"宝贝"。一会就转完了。

乔家大院——太原
路边拦车,车上写着平遥到乔家大院,实际也到太原(20)。也是1个多小时,回到太原建南汽车站。在车站西边吃了XX面皮,它们家只卖面皮、麻辣烫、米线、水煎包、灌肠(也是面食,跟北京的不一样)、馅饼。我们几乎吃了个遍,真的太好吃了!到路口乘11路车回到火车站。

太原——北京
依然是动车,三小时到北京西,结果到家又花了一个半小时

2008-04-15

阴谋论症候群——拳拳爱国

自从用上了微型博客,经常随手通过MSN写一两句心情或发个笑话,悠然间自成一篇,很快很方便,不过长文还是要写在这的。

最近读了丹布朗的几本书,大快朵颐。他的小说很有画面感,看书如同看电影。当把《达芬奇密码》的书和电影一起看,效果更佳。《骗局》也是,读起来很有007类美国大片的感觉。即使改编成游戏,也一定很好玩。

读书是快活的,读新闻则是令人反胃的。尤其是社会新闻,各种各样的精神病惹出千奇百怪的SB事,看标题好奇,看内容来气。烦死这帮低等、愚昧、顽固、无知的东西了。发誓再也不看社会新闻了。可是偶尔还会收到朋友发来的链接,点进去又(nasi要负主要责任)。……最近怨气太重。

除了社会新闻,门户头条还充斥着围绕闹运会和西藏的中外大论战。红脸黑脸一唱一和激起大国人民拳拳爱国之心,刹那间BBCNN等外媒一下子从"独立客观"变得比CCTV还假——真的吗?踢开CCTV不说(反正也不看),广电总局更惹人恨,把大国人民都当没有分辨能力的白痴吗?管好CCTV就得了,管那么多干吗?70/80/90后最好都别管,让大伙闹吧,反正这个时代闹不出20年前的样子了。哎~遍地都是荒唐事!

与其让这些充斥脑袋,生气发闷,刺激睾丸激素。还不如读读冒险小说来的畅快。

小小预测一下2009年1月1日的网站头条:

  • 去年北京闹运会顺利举行,是世上最成功的一届;
  • GDP增长10%,略有放缓,原因是(……此处略去10000条客观理由……);
  • 去年7,8月份给股市楼市注入了一针强心剂,10月起逐渐失效;
  • 昨天达赖喇嘛圆寂,中国政府同意灵柩运回西藏;

2008-04-07

Mac OS X Leopard使用感受

用了几天MM的Macbook 402,系统是最新的Mac OS X Leopard,又装了XP。说说真实使用感受,这回可不是Ubuntu模拟的

优点:

  • 外观无与伦比,尤其是上盖那个会发光的苹果。
  • 屏幕效果非常好。
  • 两个手指移动滚动条很实用。
  • 开机和关机速度非常快。
  • 界面和软件非常PP,尤其是Photo booth,简直把自拍的娱乐功能做到了极致。
  • Spotlight非常方便,快速查找软件和文件(Google桌面 for windows也有类似的功能)。
  • Automator自动化处理工作流程,很有特色。
  • "时间机器"很酷很强大。
缺点:
  • 触摸板和鼠标,加速很快,可惜启动速度太慢,短距离移动很闹心。(同样的设备,在XP下工作良好)
  • 不习惯没有窗口最大化功能。"最适合大小"总不适合我的心意。
  • 系统字体太小,还调不大。浏览器字体可以调大,但不是所有网站都能兼容。
  • Safari不能默认用新标签打开,调了也不好使。
  • 多数Widgets是针对美国的服务,国内没法用。
总得来说,Macbook从外到内都很炫很时尚,对于一般用户和图形设计者都很适用,尤其适合女孩。
对于Linux用户,估计对于Leopard也就是三天热度,基本不用动了,Linux可以实现同样华丽炫目的窗口特效。实用的Leopard功能也会逐渐在Linux平台上实现的,比如spotlight。另外,Linux的处处可配置性也是无法替代的。
对于Windows用户,whatever,懒得说了 :P

原以为是个新的GFW,竟然是个笑话

愚人节笑话怎成科研项目依据[转载自新语丝]

1983年我还在读高中的时候,国内权威媒体转载英国著名科学杂志《新科学家》的报道称,德国汉堡大学的科学家麦当劳把牛细胞和西红柿细胞杂交,培 育出一个新品种"牛西红柿",长出的西红柿吃起来有牛肉的味道,既富含维生素C又富含动物蛋白质,以后做汉堡包用不着用牛肉饼蘸番茄酱了,直接用牛西红柿 即可云云。读得我心潮彭湃,深信20世纪果然是生物技术的世纪。可惜后来又有报道称,那是愚人节的笑话。

去年《新科学家》的一名记者来采访我,我把这当笑话讲给他听,他难以相信,以为我真是在讲笑话。其实当时国门初开,国人对西方文化习俗还很陌生,读 不出恶搞文章中的微言大义,闹出笑话倒也情有可原。现在愚人节这一习俗在中国也广为人知了,甚至有的国内媒体在愚人节这一天也会制造搞笑的假新闻娱乐读 者。但是即便如此,国外愚人节笑话以及国外搞笑小报编造的愚人节似的假新闻,仍时不时会被国内的媒体当真,什么"美国国会将搬到孟菲斯"、"埃及金字塔里 发现彩电"、"博物馆管理员把木乃伊搞怀孕"之类,每隔一段时间就会冒出来。

还有比这更严重的。最近有关部门宣布,我国科学家创造性研制出十进制网络域名解析系统,我国十进制网络安全地址正式投入使用。这一消息在网上引起了 一片质疑声,被认为是一个闹剧,甚至是"汉芯"第二。该技术是上海一家民营研究所和浙江大学合作研制的,其发明人声称,这个技术依据的是美国互联网标准组 织IETF发布的互联网协议第9版(简称IPv9)RFC编号1606的文件。目前互联网采用的是IPv4,正在推广的是IPv6,这个IPv9看来比 IPv6先进多了,但是美国人实现不了,被中国的发明家给实现了。

那么这个被中国发明家拿来当依据的IPv9是什么玩意儿呢?原来它是互联网标准组织IETF在1994年4月1日发布的愚人节笑话。读一下提出 IPv9的RFC编号1606的文件,就不难明白其恶搞的意思,比如它说互联网IP地址面临短缺的主要原因是"发现了其他太阳系的智慧生命以及超光速堆 栈",要推广"把IPv9可寻址组件注射到血流中",以及充斥着"平行宇宙"、"纳米机器人"、"夸克-夸克晶体管"之类的科幻用语。

自1989年起,IETF几乎每年都要在愚人节发布一个搞笑文件,现在看来只有1994年发布的这一个产生了重大影响,而影响就发生在中国。这可真 是个国际笑话了。但这样一个笑话却成了重大科研项目,获得部委的支持,以国家安全的名义加以推广,就让人笑不起来了。把愚人节笑话当真本来是很可笑的事, 但是政府部门也把它当真,恶搞成了官搞,就很可悲了。

2008.2.14.

(XYS20080217)

双拼真的真的很快很快

双拼输入法(每个字只要敲两个键)真的真的很快很快,尤其当你只用一只手打字时,体会非常明显……
几乎所有常见的输入法都可以设置为双拼输入方式,建议选用微软的布局(最通用)。

学起来很简单的,我大二时花了一个小时就掌握布局了,三天时间随便聊聊天就灵活运用了。

看看这张图,就那么几个音节需要记忆,还很有规律。

使用方法参考旧文:马上学习双拼,加快打字速度!真的只需要1个小时!

重申这句话:

相信您在看完这篇教程后,会对它感兴趣。更希望双拼会成为您使用计算机打字的一个好帮手。

xiangxinninzaikanwanzhepianjiaochenghou,huiduitaganxingqu.gengxiwangshuangpinhuichengweininshiyongjisuanjidazideyigehaobangshou.(全拼,128个字母,麻烦)

xdxnnnzlkjwjvepmjcighb,hvdvtagjx;qu.ggxiwhudpnhvigwznnuiysjisrjidazideyigehkbhub.(双拼,81个字母,简单)

我的Ubuntu越来越像Mac OS了

继《我的Ubuntu越来越像XP了……X-(》,现在我的Ubuntu越来越像Mac OS了,具体点就是像没有Dock和Dashboard的Leopard。不是不想要,是没有模仿的好的。注意顶端的全局菜单 :P (参考《在GNOME中使用Global Menu》),这个已经很有Mac精髓了。所有程序的菜单都集成在顶端面板上,激活哪个窗口,就显示哪个窗口的菜单。无形中增大了窗口的工作区域。就像Mac那样,增强用户体验,把人的注意力引导到关键的地方。

到底是很PP呢,还是粉PP呢?
Windows用户,加油!

我的迷你博客

今日开放本座的迷你博客
    随手记录日常琐事
       或者即时心情
        以享亲友们
          小事不小
           更新
            快

我的迷你博客地址:
http://fanfou.com/sparkman
欢迎好友们订阅(如何订阅):
http://api.fanfou.com/statuses/user_timeline/sparkman.rss

国产的twitter就属"饭否"方便了,可以用MSN/QQ直接发文。有同好之士,欢迎加我。

2008-03-01

VTK:读入DICOM,体绘制

#参照VTK自带的例程 Examples/GUI/Python/VolumeRenderWithBoxWidget.py
#从 http://www.vtk.org/doc/nightly/html/ 或者 手册中参考 vtkDICOMImageReader,vtkImageShiftScale等类的使用方法,修改例程文件如下:
#由于 volumeMapper 之能接受无符号数 unsigned short 或者 unsigned char,所以必须加以转换。这里使用vtkImageShiftScale

#!/usr/bin/env python

# Demonstrate how to use the vtkBoxWidget to control volume rendering
# within the interior of the widget.

import vtk
from vtk.util.misc import vtkGetDataRoot
VTK_DATA_ROOT = vtkGetDataRoot()

dicomReader = vtk.vtkDICOMImageReader()
dicomReader.SetDirectoryName('.../DICOM/PATH...')
dicomReader.Update()
dataSpacing = dicomReader.GetDataSpacing()
#由于volumeMapper之能接收无符号数,所以必须加以转换
srange = dicomReader.GetOutput().GetScalarRange()
min = srange[0]
max = srange[1]

diff = max-min
slope = 40000/diff
inter = -slope*min
shift = inter/slope

shifter = vtk.vtkImageShiftScale()
shifter.SetShift(shift)
shifter.SetScale(slope)
shifter.SetOutputScalarTypeToUnsignedShort()
shifter.SetInputConnection(dicomReader.GetOutputPort())
shifter.ReleaseDataFlagOff()
shifter.Update()
print min,max,slope,inter,shift

# Load a volume, use the widget to control what's volume
# rendered. Basically the idea is that the vtkBoxWidget provides a box
# which clips the volume rendering.

tfun = vtk.vtkPiecewiseFunction()
tfun.AddPoint(70.0, 0.0)
tfun.AddPoint(599.0, 0)
tfun.AddPoint(600.0, 0)
tfun.AddPoint(1195.0, 0)
tfun.AddPoint(1200, .2)
tfun.AddPoint(1300, .3)
tfun.AddPoint(2000, .3)
tfun.AddPoint(4095.0, 1.0)

ctfun = vtk.vtkColorTransferFunction()
ctfun.AddRGBPoint(0.0, 0.5, 0.0, 0.0)
ctfun.AddRGBPoint(600.0, 1.0, 0.5, 0.5)
ctfun.AddRGBPoint(1280.0, 0.9, 0.2, 0.3)
ctfun.AddRGBPoint(1960.0, 0.81, 0.27, 0.1)
ctfun.AddRGBPoint(4095.0, 0.5, 0.5, 0.5)
#
compositeFunction = vtk.vtkVolumeRayCastCompositeFunction()
volumeMapper = vtk.vtkVolumeRayCastMapper()
volumeMapper.SetInputConnection(shifter.GetOutputPort())
volumeMapper.SetVolumeRayCastFunction(compositeFunction)

volumeProperty = vtk.vtkVolumeProperty()
volumeProperty.SetColor(ctfun)
volumeProperty.SetScalarOpacity(tfun)
volumeProperty.SetInterpolationTypeToLinear()
volumeProperty.ShadeOn()

newvol = vtk.vtkVolume()
newvol.SetMapper(volumeMapper)
newvol.SetProperty(volumeProperty)

outline = vtk.vtkOutlineFilter()
outline.SetInputConnection(shifter.GetOutputPort())
outlineMapper = vtk.vtkPolyDataMapper()
outlineMapper.SetInputConnection(outline.GetOutputPort())
outlineActor = vtk.vtkActor()
outlineActor.SetMapper(outlineMapper)

# Create the RenderWindow, Renderer and both Actors
ren = vtk.vtkRenderer()
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

# The SetInteractor method is how 3D widgets are associated with the
# render window interactor. Internally, SetInteractor sets up a bunch
# of callbacks using the Command/Observer mechanism (AddObserver()).
boxWidget = vtk.vtkBoxWidget()
boxWidget.SetInteractor(iren)
boxWidget.SetPlaceFactor(1.0)

# Add the actors to the renderer, set the background and size
ren.AddActor(outlineActor)
ren.AddVolume(newvol)

ren.SetBackground(0, 0, 0)
renWin.SetSize(300, 300)

# When interaction starts, the requested frame rate is increased.
def StartInteraction(obj, event):
    global renWin
    renWin.SetDesiredUpdateRate(10)

# When interaction ends, the requested frame rate is decreased to
# normal levels. This causes a full resolution render to occur.
def EndInteraction(obj, event):
    global renWin
    renWin.SetDesiredUpdateRate(0.001)

# The implicit function vtkPlanes is used in conjunction with the
# volume ray cast mapper to limit which portion of the volume is
# volume rendered.
planes = vtk.vtkPlanes()
def ClipVolumeRender(obj, event):
    global planes, volumeMapper
    obj.GetPlanes(planes)
    volumeMapper.SetClippingPlanes(planes)
 

# Place the interactor initially. The output of the reader is used to
# place the box widget.
boxWidget.SetInput(shifter.GetOutput())
boxWidget.PlaceWidget()
boxWidget.InsideOutOn()
boxWidget.AddObserver("StartInteractionEvent", StartInteraction)
boxWidget.AddObserver("InteractionEvent", ClipVolumeRender)
boxWidget.AddObserver("EndInteractionEvent", EndInteraction)

outlineProperty = boxWidget.GetOutlineProperty()
outlineProperty.SetRepresentationToWireframe()
outlineProperty.SetAmbient(1.0)
outlineProperty.SetAmbientColor(1, 1, 1)
outlineProperty.SetLineWidth(3)

selectedOutlineProperty = boxWidget.GetSelectedOutlineProperty()
selectedOutlineProperty.SetRepresentationToWireframe()
selectedOutlineProperty.SetAmbient(1.0)
selectedOutlineProperty.SetAmbientColor(1, 0, 0)
selectedOutlineProperty.SetLineWidth(3)

iren.Initialize()
renWin.Render()
iren.Start()

2008-02-06

《长江7号》湿了很多人

和MM看《长江7号》,都觉得怎么这么快就演完了,各种意犹未尽。
徐娇继承了周星驰的演技传统,相当地有才!
只是,和大多爱情片男女主角莫名其妙地爱地死去活来一样,徐娇和外星狗建立感情地描画有些仓促,应该加强一下才更可爱更有趣更可信。
周星驰挂掉后,煽情的功夫还可以做得更足,煽出更多人的眼泪。
说实话那一刻我已经湿了,还好仍差那么一点火候。
不只是那一刻,拍小强和电风扇那几段同样让我湿了。
周星驰把人们的目光真真切切的吸引到了城市最底层的小人物的生活里,挺有社会化意义。
电影院里一会爆笑一会吸鼻涕,这电影能做到这点已经很牛了。
 
"新如花"一开口,我就笑喷了——这才是周式喜剧!
另:我太土,想知道贵族学校的老师都穿旗袍吗 :P

2008-01-23

终于拿到驾照啦

考驾照真是个考验人技能和耐性的过程。报名的时候拉了5个人一起。学车的过程还不错,从酷暑到严冬,几个人互相都有个照应,也不会太无聊。只是报名排队太慢了,中间又赶上档案被考试单位弄丢耽误了俩月。真够折磨人的耐性了。还好这个历经8个月的漫长过程终于结束了!我也顺利地一次通关。
 
想起考场等候室里贴的警示标语:人生要经历无数次考试,只有这一次,关乎生命的安全。
还有更可恶的,等候室的大屏幕上不厌其烦的反复播放着车祸现场片子,大煞风景。
 
驾照虽到手,但还需多练习,不然又为城市添了个马路杀手。
 
什么时候再弄台车呢?