2011年7月13日

关于中医的三个辨析



一、中医能治病就是好的
这里的"好"很容易引起误解。
通常当我们说核磁共振是好的,意思是它的技术先进。当我们说这个方子很好,意思是它达到了我们期望的效果,对它认同。
很多情况下我们争论中医好还是西医好往往是没有意义的,因为双方对好的理解不一样。
根据我的个人经验,中医主要应用在两个主要领域:普通小毛病,或者绝症。
在乡下,不少人感冒的时候,不想到医院看病,因为太贵,所以他们选择了吃点草药。而小毛病的治愈率本来就很高的,因此当一个人花很少的钱看完了病,他自然会对之认可,会觉得它是好的。
另一种情况是,当一个人生了绝症,看了各种医院都没有效果,最后他抱着死马当活马医的心态来看中医。
不少人把中医治疗绝症的事迹说得神乎其神,其实从概率的角度而看一点也不奇怪。因为治愈绝症的概率极低,而且我们事先就意识到这种概率分布,所以我们对治疗失败漠不关心,但是会牢记小概率的治愈事例,而这些小概率事件恰恰最容易传播,最后一传十十传百以后,大家只记住了小概率事件。好比99%的失败是无所谓的,而1%的成功是好的,但是我们会夸大这1%的成功。

二、凡是存在的,就是合理的
合理这个词,也是非常容易引起误解的。
通常它包含两个意思:合乎道德规范的,或者合乎理性分析的。
当我们用"存在皆合理"这一信条去分析历史事件时,我们的意思是能够运用理性分析事件在过去发生的原因,但是往往说着说着,就变成了为它在未来的存在进行辩护了。
要知道当某一事物过去或现在是合理的,将来未必合理。
某一事件,即使在将来也有长久的生命力,但是当有可选项的时候,就要分析哪个更有成效。

三、中医看整体,西医看局部
这是一个广为流传的谬论了。
要说到人与宇宙的关系,最可靠的证据莫过于细胞了。因为人体是进化而形成的,这其中的任何一环要成功,必须要适应当时的外界环境。人体之所以需要这么多种类的微量元素,正是因为各类细胞在进化的过程中,对包含这些元素的外界环境进行了适应性进化,所以尽管后来的环境变了,但是这些细胞的机制还是继承了下来。
我们再来看看饮食结构和锻炼的例子。
为什么我们会有这么多的现代病?因为人体的进化是长期积累的,而在漫长的历史长河中,大部分的时间里人类是吃不饱的,而且是素食为主,因此我们的消化吸收系统都为这种特征进行了适应性进化。所以当我们吃多了脂肪和糖含量高的食物,我们的身体无法把这些食物在细胞的层面吸收掉,最后脂肪和糖等在血液里积累起来,反而损伤了我们的身体。
所以在人类的身体发生大的进化之前,象我们祖先一样多吃素对身体是有好处的,象祖先一样多走多跑也是有好处的。这不是因为什么"天人合一"的玄学,而是因为我们的身体最适应这种生活方式,我们必须迁就细胞的生存方式。

2011年7月7日

末日的优雅 - 评《时间回旋》


《时间回旋》这本书我看了两遍。第一遍是中文版电子书,一周在手机上看完。第二遍是英文版电子书,在KINDLE3上看的,每次都是坐在往返公司的班车上看,断断续续地看了两个月。
第一遍看完的时候非常地激动,这两年中我看过最好的小说除了这本以外,也就是《三体》和《计算中的上帝》了。激动的主要原因还是在于故事的设定,非常适合一个理科宅男的趣味。
后来我就想到以这本书的文风和节奏,应该是非常适合学习英语的,于是下了英文版的电子书,传到K3上慢慢地看,也正是这种心态品出了此书的更多意味。
在看这本书的时候,我一般同时在听曹方和Keren Ann的音乐,特别是Keren Ann那慢悠悠带着慵懒气息的音乐,一直弥漫在我的阅读过程之中。我有时会想到,如果要将此书拍成电影,那么Diana大病初愈的场景,Keren Ann的音乐是最适合用来做背景音的。
我还常常将书中的人物和好莱坞的演员对应起来,比如文艺小生James Franco(http://movie.douban.com/celebrity/1019001/)来演Jason,蜘蛛侠Tobey Maguire(http://movie.douban.com/celebrity/1047997/)演Dupree,而演Diana的应该是Cate Blanchett(http://movie.douban.com/celebrity/1054441/),至于ED,毫无疑问应该由David Strathairn(http://movie.douban.com/celebrity/1007009/)来演
这种联想常常带来预料不到的乐趣,使我的阅读变得更加愉悦。
记得大刘曾经说过这本小说,认为它对末日的描写不够阴暗,因而对人性的肯定也达不到文学名著的高度。我曾读过《鼠疫》之类的小说,因此赞同大刘的评价。但是我想作者在写这本书时,未必想将人性升华到一定的高度。
如果一个美国人写末日小说,他会写一个普通人,为了拯救家人而牺牲自己。
如果一个中国人写末日小说,他会写一个英雄人物,为了拯救祖国而牺牲自己和他的部下。
但是作者是一个加拿大人,他没有美国人和中国人的这种情怀,因此他能通过Dupree这个旁观者的角度从容地描述末日的景观,而我所欣赏的正是这种优雅。当然这与我当前的心态有关,目前我已不适合去读《卡拉马佐夫兄弟》和《约翰-克利斯朵夫》了,即便是《悲惨世界》,我更愿意看百老汇剧而不是小说。
另一方面,我以为科幻文学并不适合表达人性的深度,因而它所构造的场景离我们的日常生活太远了,无法唤起我们的同理心,因而很难达成共鸣。
对我而言,科幻文学首先能满足智力上的愉悦,想象力的解放带来身心的极大放松。而此书情感上的描写是锦上添花,让我们在阅读的过程中不时停下来回味一番。

2011年7月4日

登黄鹤楼记


2号去登了黄鹤楼。
一路爬山而上,转了个弯,黄鹤楼突然跃入眼帘,气势逼人。于是入楼,一路拾级而上,爬到楼顶,兴奋地出去观望,然而四周建筑凌乱肮脏,不禁索然。
我想象着当年崔颢登临黄鹤楼的情景,那时大江开阔,碧野青葱,而楼下市井熙攘,人如蚁蝼。诗人想到仙人骑黄鹤而去的典故,而黄鹤楼在白云千载间,作为人世浮沉的见证,仍旧孤独在矗立在大江的烟波里,想到时间就象江水一般地流逝,不禁让人感叹此生之渺小,此心之寂寥。
中国的古典文学中很少有时间的意识,时间的流转只是大地周而复始不断循环的写照,只有当诗人登高远眺,看到壁野辽阔大江奔腾,才突然间意识到人世间的变化已然如此悠长。但是中国人的意识不会沉浸在时间里,不象西方文学有童年主题,中国人的时间感会转化成空间感,命运的变化最终反映在空间的游离,因而诗人们不断地在远方遥望乡关。
然而当我望着四周凌乱的建筑,我知道这座黄鹤楼只是一个极普通的景点而已,江边的高楼盖住了远方的地平线,浑浊的江面上汽轮络绎不绝。站在这座著名的黄鹤楼上,我感受不到哲学上的存在感,感受不到文学上的寂寥感。我们不再感受到此生之渺小,我们越来越多地感受到此生之豪迈,我们用飞机汽车征服时间,我们用高楼大厦征服空间。我们饥渴地吃而来不及回味,我们匆忙地走而来不及欣赏。
然而在对变化的高歌中,有时我们会感觉到荒诞,会感觉到迷失,突然间觉得自己成为了故乡的外乡人,突然间觉得自己成为了这片土地的掠夺者。仿佛那些美丽安静的一切,突然间变成了遥远的回响,突然间变成了尘封的记忆,而你自己,也被包含在那模糊的记忆之中。

262699_10150305659506204_760146203_9254232_4087912_n.jpg

269581_10150305659821204_760146203_9254233_6580867_n.jpg

2011年6月23日

拯救不读SD卡的G1手机之无卡拍照


我的手机自从不读SD卡以后,手机的相机、播放器功能都变成了摆设。前段时间卡片相机丢失以后,痛感手机无法拍照的不便。
于是GOOGLE了一番,折腾了个APP,让拍照以后将照片直接保存到APP的私有目录而不是SD卡。
APK很小,只有15K,下载地址:http://app.smallsmartsolution.com/ttdc.apk
说明几点:
1、由于是调用系统API拍照的,分辨率是最大值。
2、设置成横屏预览模式。
3、文件保存的路径是/data/data/com.smallsmartsolution.ttdc/,文件名是生成日期时间+.jpg。
4、拍照完成以后系统自动进入照片查看模式,但只查看SD卡的内容,所以象我的情况,其实是没有显示任何内容,需要按返回键退出。这可能是系统API的设定。
5、文件的下载需要利用ADB工具进行,用ECLIPSE的DDMS可以批量下载,没有别的办法。

2011年6月18日

DestAlarm – an Android APP

DestAlarm is a useful tool for your travel, it will alarm you up ahead of your destination.
The handset GPS will update every 30 seconds or 200 meters, and check current location with your destination, as soon as the distance is less than your set, then it will alarm you by notification and ringtone.
So keep your travel cool with this personal assitance.
Developed by tallrain, any feedback pls contact: tallrain@gamil.com, or RT me @tallrain.:)

https://market.android.com/details?id=com.smallsmartsolution.destalarm
image.png

2011年6月16日

Xbox/Kinect Tips


1、左手挥向左下角退出KINECT游戏。
2、在XBOX操作面板中,右手扇形挥手可启动KINECT识别。
3、HDMI线的质量会影响视频传播,我之前碰到过电视偶尔黑屏的情况,换线就好了。
4、通过无线路由,XBOX可以和家里的PC组成家庭网(PC采用WIN7操作系统),可以播放家庭网的视频、音频、照片。但是视频只支持WMV/AVI/MPG,音频只支持WMA。
5、在PC上安装TVersity软件和K-lite codec pack,可以直接在XBOX上播放PC上的RMVB/KMV等视频。

2011年6月9日

Use Excel to Read XML

Sub Button1_Click()

' clear data
J = Worksheets("Sheet1").UsedRange.Rows.Count + 1
Worksheets("Sheet1").Range(Cells(1, 1), Cells(J, 3)).Clear
 
' to create data
    Dim objDOM As Object
    Dim targetNode As Object
    Dim Clone As Object
    Dim Node As Object
    Dim ChartUnit As Object
    Dim targetNode2 As Object
    Dim Clone2 As Object
    Dim Node2 As Object
    Dim ChartUnit2 As Object
    Set objDOM = CreateObject("MSXML2.DOMDocument") 'UTF8
    'Set objDOM = CreateObject("MSXML.DOMDocument") 'Normal
    objDOM.async = False
    
    facility = "CFSW"
    fname = CStr(Worksheets("Sheet1").Cells(1, 6).Value)
    ret = objDOM.Load(fname)
    Dim objPageHeader As Object

    I = 1
    If ret Then
       Set targetNode = objDOM.DocumentElement.SelectSingleNode("//UserConfig/Facilities/Facility/Connectors").ChildNodes
       For Each Clone In targetNode
            Set ChartUnit = Clone.CloneNode(True)
            Set Node = ChartUnit.FirstChild
            If ChartUnit.HasChildNodes Then
                Connector = Node.Text
                Set targetNode2 = ChartUnit.ChildNodes.Item(11).ChildNodes.Item(0).ChildNodes.Item(10).ChildNodes
                For Each Clone2 In targetNode2
                  Set ChartUnit2 = Clone2.CloneNode(True)
                  Set Node2 = ChartUnit2.FirstChild
                  If ChartUnit2.HasChildNodes Then
                     Device = Node2.Text
                     Worksheets("Sheet1").Cells(I, 1).Value = facility
                     Worksheets("Sheet1").Cells(I, 2).Value = Connector
                     Worksheets("Sheet1").Cells(I, 3).Value = Device
                     I = I + 1
                  End If
                Next Clone2
            End If
       Next Clone
    End If
    
    J = Worksheets("Sheet1").UsedRange.Rows.Count + 1
    
    Columns("A:C").Select
    Range("C1").Activate
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Cells(1, 2), Cells(J, 2)) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range(Cells(1, 3), Cells(J, 3)) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range(Cells(1, 1), Cells(J, 3))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Rows("1:1").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Facility"
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Connector"
    Range("C1").Select
    ActiveCell.FormulaR1C1 = "Device"
    Range("A1:C1").Select
    Selection.Font.Bold = True
    Range("E2:F2").Select
    Selection.Cut
    Range("E1").Select
    ActiveSheet.Paste
    Range("E4").Select
    

End Sub




2011年5月23日

Android + Google Maps开发笔记(二):在ANDROID中使用GOOGLE MAPS自定义图层



一、创建图标:
1、创建图标marker.png文件,放在res/drawable目录下。

二、创建图层数据:
1、构造一个Overlay类,继承自ItemizedOverlay。
class MyLocations extends ItemizedOverlay
2、构造一个方法,用于实现加载定位图标。
public MyLocations(Drawable marker)
3、将各经纬度坐标作为GeoPoint合成OverlayItem,输入ItemizedOverlay。
items.add(new OverlayItem(GeoPoint, title, snippet));
4、将Overlay图层标记出来
populate();

三、绘制自定义图层:
1、获取标记图片: marker.png
Drawable marker = getResources().getDrawable(R.drawable.marker);
调用图片的函数必须public,否则不能使用getResources()方法。
2、设置图片的绘制区域大小
marker.setBounds(0, 0, marker.getIntrinsicWidth(), marker.getIntrinsicHeight());
3、设置缩放控制、显示模式等参数。
4、创建自定义Overlay层
MyLocations MyPlaces = new MyLocations(marker);
5、将创建的Overlay层添加到MapView中
mapview.getOverlays().add(MyPlaces);
6、绘图,将地图中心移到第1个标记点
mapview.getController().setCenter(MyPlaces.getCenter()); 
mapview.getController().animateTo(MyPlaces.getCenter());    

2011年5月21日

Android + Google Maps开发笔记(一)

关于ANDROID调试:
1. 普通APP需在项目文件中包含Android API,包含GOOGLE MAPS的APP需包含GOOGLE API。
2. 创建虚拟机的时候,也要选择对应的API。
3. 创建虚拟机的时候,需要增加GPS支持、键盘支持等参数,以方便调试。
4. 如果遇到API报错,在Manifest里Uses Sdk,定义Mini SDK Version与项目包含的API版本一致。
5. Debug Configuration > Launch Action > Launch Default Activity,这样在DEBUG的时候会自动加载APP。
6. 如果INSTALL APP失败,尝试关闭虚拟机,重新开始。

关于GOOGLE MAPS API:
1. 找到Android debug keystore文件,Eclipse > WIndow > Preferences > Android > Build > Default debug keystore。
2. 在JAVA的BIN目录下运行:
C:\Program Files\Java\jre6\bin>keytool -list -alias androiddebugkey -keystore "keystore文件路径" -storepass android -keypass android
产生MD5指纹。
3. 在http://code.google.com/android/maps-api-signup.html输入MD5 fingerprint,产生专属的GOOGLE MAPS API KEY。
4. 在main.xml中增加参数android:apiKey。

00.jpg

2011年5月12日

从ANDROID看智能终端的未来

这次GOOGLE I/O推出的Android@Home非常有意思。我在去年写过一篇文章《android和twitter将改变世界》,预言过ANDROID将引领终端智能化的浪潮,没想到GOOGLE的步子这么快。
本文则试图从智能终端与云的关系这个角度,进一步论述智能终端的发展趋势。
我们知道ANDROID为网络而生,通过TCP/IP网络,一头连着终端设备,一头连着云。终端主要是进行数据的输入和输出,而逻辑处理则主要由云来完成。如果说云是大脑的话,那么终端就是神经元。
我们从民用、公共、工业这三个领域各举一个例子,来说明智能终端的特点。

先看民用(ANDROID@HOME)的例子:电视。
电视经历了这些阶段:无线电视、有线电视、数字电视,对应的云分别是公共云、私有云、TCP/IP云,无线和有线的区别是云的传输通道不一样,模拟和数字的区别是云的传输格式不一样,并且从单向传输变成双向传输。
在数字电视中,机顶盒是一个非常关键的因素,它起着这两个重要的作用:解析数字信号、连接TCP/IP云。现在我们看到已经出现了不少采用ANDROID操作系统的机顶盒。
未来电视的趋势当然是智能化。GOOGLE通过内置CHROME的GOOGLE TV进行布局,而CHROME就起着机顶盒的作用,但是它用GOOGLE帐号取代了智能卡,将用户从运营商私人云中转移到GOOGLE云中。
CHROME和ANDROID的角色非常类似,个人的理解是ANDROID适合采集数据,CHROME适合展现数据。
通过CHROME,用户对电视节目的管理就可以在INTERNET上进行,除了通过PC订阅外,还可以通过PC将节目推送到电视上。
另一个智能化的重点是遥控器,类似KINECT的体验将是遥控器未来的方向。
设想一下以下场景:你从GOOGLE网上商场订购了一台ANDROID遥控器。你把它靠近GOOGLE TV,遥控器自动下载这款电视的触摸屏主题。这样你把它切换到电视模式将可以用来遥控这台电视机。你还可以坐在沙发上用声音遥控,当你发出遥控语音后,遥控器先后做了这些事:
1. 录制控制语音。
2. 将语音信号发送到GOOGLE的云。
3. 等待GOOGLE云的处理。
4. 接收GOOGLE编译过的的遥控指令。
5. 将遥控指令发送给电视机(通过WIFI/RFID/NFC)。
从这里我们可以看出,遥控器作为智能终端,并非终端本身的强大,而是它所连接的云的强大。

再看公共领域(ANDROID@PUBLIC)的例子:汽车导航。
GOOGLE在汽车领域有很大的雄心,其无人驾驶汽车项目据说是布林非常关心的。
导航仪也是一个非常好的智能终端的例子,导航仪这个市场出现没多长,就面临了智能化的压力。
智能导航仪的特点有:
1. 实时更新的地图。
2. 通过云的计算来设计行驶路线。
3. 支持语音指令。
4. 实时接收路况信息。
5. 云会建议你更改行驶路线。
6. 广播政府部门的通告。
7. 通过社交网络与好友互动。
概括一下,导航仪作为智能终端,将云的强大计算能力延伸过来,将INTERNET的社交能力包含进来。

最后看工业领域(ANDROID@INDUSTRY)的例子:工业控制。
当前工业控制广泛采用的技术是基于PLC/OPC的控制,其传输也是基于TCP/IP的,但是它受到很大的限制:
1、PLC所传递的控制信号是电路级的,不能被执行层识别。OPC起的作用仅仅是翻译。
2、OPC作为桥梁,它的信号通道采用的是古老的DCOM技术,而不是企业云。DCOM固有的缺陷造成开发和运营中的大量问题。
我相信GOOGLE在无人驾驶汽车项目上积累的经验,一定可以发挥到工业领域。因为从传感器收集信息,和将指令发送给各驾驶系统,这些都 需要实现工业级的控制。
这方面我了解到的信息不多,但在这里不妨大胆预言一下:
1. 需要进行数据处理的控制器件采用ANDROID之类的智能操作系统。
2. 控制器自身的功能模块,将通过安装驱动的方式被操作系统识别。
3. 控制器与外部系统通过企业云进行调度。
4. 控制指令被企业云翻译为WEB服务。

再补充一点个人想象,未来的智能终端传输指令的方式,很可能就是扩展的微博:不仅仅是文字,还可能是语音或动作、视频信号。
一条微博就是智能地球某个神经节点的信号,ANDROID就象《黑客帝国》中的电子章鱼。
而未来的某一天,当天网苏醒的时候,它发现自己不是诞生在美国国防部的机房,它一直睡在GOOGLE的云里。