Blogs

(-1)^(1/3):从 C++ 到傅立叶变换

image 一直好奇一个关于 power function 算法的问题,直到自己动手写 power function。

在不同的编程语言里,遇到过同一个问题:(-1)^(1/3) 是多少。 很显然,在实数集里,这个表达式是有意义的,正如右图 Google Calculator 给的结果,在实数集里,它等于 -1。但是在很多编程语言的实数集运算中,这个表达式是无意义的。

譬如在 C++ 里,用 cmath library, 当你计算 (-1)^(1/3) 时,你得到输出结果是:

 -1.#IND 

C#里,用 System.Math, 作同样的计算,得到的输出结果:

NaN

R 里,不使用复数集,得到的结果也是一样的:

[1] NaN

同样的在 VBA 里,如果不 call Excel的 power function ( i.e. Application.WorksheetFunction.Power) ,而是直接使用 ^, 得到的结果仍然是 run-time error. 其它的编程语言也类似。

复数集中,如果用 MATLAB, 得到的结果:

 0.5000 + 0.8660i

Maple,结果:

.5000000001+.8660254037*I

R 的复数集(i.e. as.complex(-1)^(1/3)),得到的结果:

[1] 0.5+0.8660254i

很显然,所有的语言的 power function 用的是同一种算法。这种算法无法得到实数解,而复数解得到是同一个数值。因为 power function 太基本,虽然有疑问,但是也没有过多的想这个问题,直到后来用 Q

Q 的语法和 C++/C#/JAVA,或者 MATLAB/R/MAPLE 都不太一样,"^" 符号的定义和 C++/C# 相同,不是 power function。刚开始用的时候,不知道 Q  的 power function 是 xexp,觉得 power function 又不难,自己写一个吧,但是真正开始写,却又卡壳了:(int,int) 的函数好写,那 (double, double) 的呢?

拿出算法圣经《 Numerical Recipe 》(第三版),但是却发现它没有给出 power function 的算法,大概是太基础了吧,所以自己又想了一下,幸亏 Q  里的 log 和 exp 还是 logexp,后来就想到用

exp(y*log(x)) = exp(log(x^y)) = x^y

来定义 power function,解决非整数的问题。这样的以来,一般的问题都解决了,但是因为用到了 log(x) , x 的值必须非负(0 的问题可以很简单的处理),所以一旦 x<0,这个算法就不适用了 —— 这时才突然的想到莫非上面的那些问题的症结正在此?实数集的问题是由于 log(x), x<0 在实数集里无定义,那复数集呢?在 MATLAB 里试了

>> exp(1/3*log(-1))
ans =
   0.5000 + 0.8660i

果然是这样的。所有的算法都依赖于 log 函数来获得 power 函数的值,这导致了上述问题在实数集无定义,而在复数集因为 log(-1)  =  3.1416i  这个默认值,导致了 0.5000 + 0.8660i  这个结果。

但是问题还没有结束。看到 log(-1),自然想到了 2*log(i), 然后自然而然的想到傅立叶变换里常用的 trick 可以解出 log(-1)的一般表达式(为了省事儿,下面用 LaTex写了):

image

有了 log(-1)的通解,我们可以让 power function 获得任意 x^y, x<0 的所有解。譬如 (-1)^(1/3)简单测试一下,在 MATLAB 里,

x=2*i*(pi/2+2*(-3:3)*pi)
exp(1/3*x)

得到:

x =
        0 -34.5575i        0 -21.9911i        0 - 9.4248i        0 + 3.1416i        0 +15.7080i        0 +28.2743i        0 +40.8407i
ans =
   0.5000 + 0.8660i   0.5000 - 0.8660i  -1.0000 - 0.0000i   0.5000 + 0.8660i   0.5000 - 0.8660i  -1.0000 + 0.0000i   0.5000 + 0.8660i

结果里面包含了它的所有三个解。因为当 x<0, x^y = (-1)^y*(|x|)^y,所以只要有 (-1)^y ,就可以得到任何负数的 power function ( exp(a+bi)也可以用上面的方法转化成三角函数来解)。

上面的长篇累牍都起源于一开始的时候不知道 Q 的 power function 是 xexp,但是如果不是自己去写 power function,恐怕也没有机会搞明白 (-1)^(1/3) 这个简单的问题,俗谚云:“看人挑担不吃力,事非经过不知难。”诚哉:)

Blog分类: 

How Blue Taiwan Is: 台湾的选举地图

Rplot

台湾2012年选举结束,国民党胜出,在 维基百科上看到了投票的结果,很好奇蓝绿投票的地理分布,于是用维基百科上给的投票数据,又从网上找来了免费的台湾 GIS 数据,在 R 里自己画了一下。这个 GIS 数据比较古老,和现在台湾的行政区划略有不同,譬如嘉义县和嘉义市、新竹县和新竹市还没有分开,而高雄市和高雄县、台南市和台南县、台东市和台东县却是分开的,还有没有新北市,只有台北县(所以上图的 Taipei 图例其实是新北市,忘记改了,呵呵)。好在边界的坐标没有大变,所以手动的作了调整,毕竟是免费的 GIS。arcGIS要更精确些(包括边界的 polygon ),但是那个要钱的:)

每个投票区域的“蓝”度由 蓝票/(绿票+蓝票) 的比例来决定,按照这个简单的算法,台湾版图上最蓝的是花莲,其次是台东和苗栗。最不“蓝”的是云林,嘉义和台南。图例的括号里的数字就是这个地区的“蓝”度。

从这个得票的地理分布和最终国民党和民进党最终 51.6% 比 45.6% 的得票率来看,民进党的竞选纲领有问题,明显的没有获得中间选民的支持,而是过于政策导向 (policy-oriented) 了。蔡英文的竞选过于侧重 base 选民,忽略了 swing 选民,失败也是在情理之中。不过有时候这确实也是一个很艰难的问题,如果不能得到 base 选民的支持,就无法从党内初选中胜出,参加最终的角逐。党内的 median voter 的 preference 如果和全部选民中的 median voter 的 preference 相差太远,不是一件好事。 同样的,就即将到来的美国大选而言,如果 Romney 能赢得初选,他对于 Obama 的威胁时最大的,但是正是因为他能和 Obama 争夺中间选民,反而使共和党内铁杆选民对他的支持减弱了,因为他会被认为不是真正的 conservative 。

下面是生成这副地图的 R  codes:

   1:  library(maptools)
   2:  library(RColorBrewer)
   3:  tw.map <- readShapePoly('taiwan/TWN_adm2.shp')
   4:  mcol=brewer.pal(9, 'Blues')
   5:   
   6:  votes = read.table('votes.csv',sep=",")
   7:  votes = votes[ ,2:5]
   8:  votes=votes[votes[,1]!="",]
   9:  votes
  10:  names(votes)<-c("loc","total","green","blue")
  11:  votes$bratio <- votes$blue/(votes$green+votes$blue)
  12:  votes$col <-floor(((votes$bratio-min(votes$bratio))/(max(votes$bratio)-min(votes$bratio)))*8)
  13:   
  14:  provname=votes[,1]
  15:  f=function(x,y) ifelse(x %in% y,votes[votes$loc==x,6],-1);
  16:  colIndex=sapply(as.character(tw.map$NAME_2),f,as.character(provname));
  17:  colIndex[c(1,15,17)] = colIndex[c(8,14,16)]
  18:  fg=mcol[colIndex+1]
  19:   
  20:  votes = votes[order(votes$bratio,decreasing = T),]
  21:  bkp=paste(as.character(votes$loc)," (",as.character(round(votes$bratio,2)),")",sep="")
  22:  plot(tw.map,col=fg)
  23:  legend("topleft", bkp,fill=mcol[votes$col+1], bty="o", cex= 0.75, pt.lwd=3)
Blog分类: 

舞剧《牡丹亭》

img_111

昨天在林肯中心看了金陵艺术团的舞剧《牡丹亭》,很震撼。从头到尾没有对白的演绎这样一个复杂的爱情故事,并且能让我这样的舞蹈门外汉能够马上意识到舞剧的每一幕对应的是原剧的哪一出,在结尾的时候还被深深感动,我觉得这个舞剧改编得很成功。(文科博士的一个通病就是过于 critical ,这都是当年被逼读 N 多 paper,写 N 多 review 留下的后遗症,如果不 critical 到 cynical, 便无法体现所谓独立思考之精神 -_-)。这部舞剧是我今年看多的最好的演出,没有之一。

金陵艺术团这个名字可能有些陌生,其实它就是南京军区政治部前线文工团,大概是对外演出的需要,所以有了这个艺名,否则 Battlefront Culture Troupe of the Political Department of Nanjing Military Area of the Chinese People's Liberation Army 听起来太斯大林了。 07年春晚深受好评的舞蹈《小城雨巷》就是前线文工团的作品,那时的领舞胡琴心就是现在《牡丹亭》的杜丽娘。

“金陵”这个名字起得很好。中国每一个地名都是千百年来的文化沉积的印象符号。这样的符号已经被人格化。 就像金陵对应的该是吟着婉转南曲:“则为你如花美眷,似水流年,是答儿闲寻遍”的书生柳梦梅;而燕京对应的该是唱着粗壮北曲:“猛见了荡地惊天女俊才,咍也么咍,来俺里来。”的地府胡判官。长安是杜宝,洛阳是年轻的甄氏(年轻的三个字很重要,但是《牡丹亭》里并没有写年轻的甄氏是如何的,只是说她是魏朝甄皇后之后,所以我们权且以洛神替代^_^)。杜丽娘还是金陵。这是一部关于杜丽娘和柳梦梅的舞剧,自然要金陵来演。

《牡丹亭》出彩之处在于文字,改编成了舞剧,没了语言,很多场景的表达变得艰难起来,譬如《闺塾》的春香闹学,几句话语,“今夜不睡,三更时分,请先生上书”,“俺衙内关着个斑鸠儿,被小姐放去,一去去在何知州家”,春香的俏皮可爱跃然纸上,但是在舞剧里却很那体现的这样淋漓尽致,大概这也是为什么舞剧中把《闺塾》改为一群丫头陪读,而春香这个角色也泯然于众人中。

这样的更改也算合理,因为只有两个小时的演出,勾勒的人物过多,则重点人物不突出,冲突也冲淡了。不过有些舞剧中的有些人物,譬如陈最良和石道姑,虽然只有寥寥几笔(陈最良主要是在剧中的《闺塾》,石道姑剧中的《冥誓》),但是也充分体现原作人物的特点,当然也许是因为这两个人,特别是陈最良本来就比较脸谱化,在戏中没有太大的性格发展吧。

舞剧由序和四幕构成,改编中也有不少惊喜,本着不剧透的原则,只说一下框架上的更改,对于两个小时的舞剧而言,我觉得这样的改动还是比较合理的。

《序》主要是柳梦梅的原作中《言怀》里提到那个梦。但是鉴于后面的发展,也许《序》其实是写实的——柳梦梅和杜丽娘真的邂逅有一面之缘,但是我自己更倾向于是柳梦梅的梦,传奇般写实就俗套了。

第一幕《闺塾 惊梦》,涵盖了原作第三到第十出的内容,剪裁的很得当,由闺塾、毛诗而梦柳梦梅;

第二幕《写真 离魂》,相思成疾,写真、离魂。

第三幕《魂游    冥誓》,是对原作的大改。杜丽娘离魂之后并没有去冥司受判,也未魂游于旧花园中,而是游荡在集市上看到了赴京赶考的柳梦梅,而柳梦梅也并未拾画于山石之下,而是意外的购得丽娘的画像于市井之中。然后他回梅花观歇息,对着画茶饭不思,丽娘也从集市中随画而至,接上原作《幽媾》,《欢挠》,而后《冥誓》,丽娘和柳梦梅私结百年之好;

第四幕《冥判 回生》。舞剧中的时间始终定格在杜丽娘香陨前后,没有枉死城三年的等待,杜丽娘死后魂魄遇到了柳梦梅,并与之冥誓。冥誓之后,生离死别,杜丽娘方才被黑白无常压入地府,接受冥判,丽娘抗争不屈,而人间的柳梦梅则捧着丽娘的画像四处向人寻问,直到打听出画上的人是杜丽娘,他直奔杜府而去,而此时的丽娘正陨世不久,杜府上下正抚尸痛哭。阴间里,冥司的胡判官或因丽娘不屈、或因柳杜二人的情真意切,或者两者兼而有之,终于让丽娘回生,丽娘在柳梦梅的怀抱中复苏。大婚结局,就是上面那张绚丽的婚妆。

整个故事都是围绕着杜、柳二人,没有完颜亮,没有李全,没有杨夫人,没有中状元,比原著简单了许多,但是舞剧的演绎一样的感人,辅以恰到好处的舞台道具设计,确实是一部佳作。

唯一稍感遗憾的是我们看得那一场并不是胡琴心和许鹏的杜丽娘和柳梦梅,而是许(?)馨予和韩波二人搭档。介绍的册子上仍然写的是胡琴心和许鹏,不知道换角的原因是什么。 但是对于我这个外行而言,许、韩二人跳得也已经非常好了。

结尾时,幕布落下,幕布上一字一字写下的,正是汤显祖《题词》中的句子:情不知所起,一往而深,生者可以死,死者可以生。

Blog分类: 

辫子、胡桃夹子和黄道周

SAMSUNG            上周周末晚上去林肯中心看芭蕾舞《胡桃夹子》,本来是圣诞节的剧目,图个热闹高兴,但是第二幕在 Land of Sweets 中出现的三个中国人模样的角色确实让人觉得怪异。一男两女。男的戴着斗笠留着辫子,让人想到晚清时西方人对于中国人的 stereotype —— 又想到,在京剧的剧目中,但凡是牵扯到西方或者北方的“番邦”角色,他们的打扮也多是一副满人的辫子装束,譬如《大登殿》、《四郎探母》等等,所以犹为觉得辫子刺眼 —— 我们用来戏谑番邦的装束却又被被人强加在了我们自己身上,不舒服之余,又觉得有些 ironic ...

早一些时候去大都会博物馆看了“十七世纪中国政治异见者艺术展”,其实就是黄道周、八大山人、石涛、洪仁等人的书画展。特别是黄道周,书画造诣都很高。并且就道德而言,黄道周被乾隆称为“一代完人”。但是不敬的想一下:黄道周和后来成了贰臣、“道德很有问题”的洪承畴相比,在崇祯帝吊死煤山前,究竟谁对明朝贡献更大?

黄道周和洪承畴都是闽南人,都是进士出身。黄道周大概算是理想主义者,对于朝政多有不满,不能见容于朝臣,所以一共在朝廷为官的日子也没有多久,并且主动或者被动的不断被牵扯入东林党人的党争。而洪承畴的大多数时间都忙碌在镇压农民起义上。

杨嗣昌被崇祯皇帝任命为兵部尚书,黄道周和洪承畴对此都有异议。黄道周主要是在争两点:一 为天下纲常,也就是杨嗣昌夺情之事,二为边防大计,是杨嗣昌与后金媾和。洪承畴的异议主要在于杨嗣成不合乎实际的镇压农民军的方案,认为他所谓“三月”灭贼只是大话。

黄道周积极反对杨嗣昌,平台召对之后被连贬六级,离开了朝廷;洪承畴虽然深知杨嗣成的计划不切实际,但只是私下里尽量消除杨嗣昌计划的不利之处,后来大破李自成,几乎完成了对李闯的镇压……

黄宗周被贬似乎对于明朝没有太大的影响,但是洪承畴的投降却给了明朝沉重的一击 —— 才有了后来的辫子。

有时历史也挺 ironic 的,让人忍不住想,明朝的这些完臣到底是对于明朝有怎样的影响,譬如和黄道周写入同一列传的刘宗周,在南明风雨飘摇之际,一会儿上奏说要斩这个,斩那个,似乎能不能斩、该不该斩都不必要,只要“可斩也”三个字便足以昭显自己的正气凛然。读书至此,总让人觉得似乎大敌压前,当务之急不是任何实际的御敌之道,而是如何才能成就个人的完美与道德 …… 不知道这算不算不道德。

而对于黄道周,最后一个 ironic 之处在于尽管他坦言要效仿魏征:“臣愿为良臣,毋为忠臣”,但是最终他却成了忠臣而不是良臣。

Blog分类: 

数据挖掘:eBay上的Galaxy Note

Rplot01

从有Samsung  Galaxy Note 的消息开始,就很期待这款 5.3 寸屏的手机(5.3 寸啊!5.3 寸啊!5.3 寸啊!),但是不出所料,这款手机要很迟才能在北美上市(甚至连会不会上市都还是一个未知数),所以当 Galaxy Note 在欧洲和亚洲发布之后,就只能关注 eBay,等待它从亚欧流入北美。

当欧洲刚刚发布这款手机的时候,eBay 也同步有人开始售卖,一开始的价格大约在 $1000 左右,并且数量很少。等了一段时间,香港的发布会过后,随着大量香港卖家的加入,价钱开始迅速下跌,很快跌倒了$800左右。作为以数字为生的人,当然会“萌”任何时间序列的漂移、扩散和跳跃(不负责的翻译 drift,  diffusion, & jump),但是不断的刷新去查看eBay页面是在令人厌恶,于是就写了一个简单的 C# 程序,定时去“挖掘”eBay 页面上的价格。

但凡提及买卖/价格,就不能不考虑风险(风险也是钱啊),特别是在 eBay 这样高风险的地方。eBay 正好在推出一个新的 beta 产品页面,在 这个页面上 eBay 已经利用自己的算法选出了风险和价格最优的产品,这样一来,挖数据就简单多了,就像附在后面的 C# codes 里显示的那样,只要 request 页面数据,把数据转化成 string,然后利用 C# 自己的 string search/index method,找到相关数据 CSS class, 读入数据即可(数据量很小,所以任何优化都不用做)。然后把数据不断存入 txt 文本。

开始测试时是每两个小时 quote 一次,后来改成一个小时 quote 一次。屏幕上跳出的数字,很像交易所的证券,所以就干脆把它用 chartSeries (R 的 quantmod package)画出来,然后就从数据里发现了很有趣的规律:

  1. 首先总的价格趋势是下跌的,因为开始的高价格完全是因为 supply 的不足,再加上消费类电子产品本身的贬值以及与之相竞争的 HTC,Samsung Android 手机的推出(譬如在北美正式销售的 Galaxy SII skyRocket)

  2. 其次从 Nov 11 到 Nov 14 之间,在微观结构上是两个卖家相互竞争导致价格下跌。为了拿到 eBay 页面上的产品推荐,风险相同的卖家不得不通过降价来相互竞争,但是降价的幅度一般都比较小,特别是从 Nov 13 开始,基本上就是几毛几毛的降;

  3. Nov 15 左右出现了一段价格的稳定期,大约是一家放弃了价格的竞争;

  4. Nov 16 其中一家的货卖完了,剩下的一家觉得自己暂时处在低风险卖家的垄断地位,所以遽然的开始升价,我们看到了一个大大的 jump;

  5. 但是 jump 过后显然市场的反应冷淡,并且我们在上面说过价格的总体趋势是下跌的,如果不能及时卖出,卖家始终有一个 negative carry (也就说价格对于时间的一阶导数是负的),还有最重要的是差不多这个时候,Apple 开始 ship unlock 的 iPhone 4S ,价格大约在 $649 ,对于 Galaxy Note 的价格也是一个打击;

  6. 所以过了 Nov 17 同一卖家又开始降回比原来更低的价格水平

  7. 然后 Nov 18, 价格又开始大幅度的下调,因为有一个新的竞争者出现,而现在手里还攒有大量货的早期卖家基于自己的进货成本,不得不加大降价的力度, theta bleeds :)

当然数据有限,很多只是我的猜测,不过数据本身挺有趣的,不仅本身是一个很 behavior economics的测试,如果数据点足够的多,还能 fit 出一个 term structure 模型来。。。

。。。 所以到后来忘了,我只是来买手机的。。。

image

附 C# codes:

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
 
 
/// <summary>
/// Fetch eBay Price 
/// </summary>
class WebFetch
{
    static void Main(string[] args)
    {
        while (true)
        {
        // used to build entire input
        StringBuilder sb = new StringBuilder();
 
        // used on each read operation
        byte[] buf = new byte[8192];
 
        // prepare the web page we will be asking for
        HttpWebRequest request = (HttpWebRequest)
            WebRequest.Create("http://www.ebay.com/ctg/Samsung-Galaxy-Note-32GB-Black-Unlocked-Smartphone-/110509414");
 
        // execute the request
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        
            // we will read data via the response stream
            Stream resStream = response.GetResponseStream();
 
            string tempString = null;
            int count = 0;
 
            do
            {
                // fill the buffer with data
                count = resStream.Read(buf, 0, buf.Length);
 
                // make sure we read some data
                if (count != 0)
                {
                    // translate from bytes to ASCII text
                    tempString = Encoding.ASCII.GetString(buf, 0, count);
 
                    // continue building the string
                    sb.Append(tempString);
                }
            }
            while (count > 0);
 
            string page = sb.ToString();
 
            //page = Regex.Replace(page, @"<(.|\n)*?>", "");
 
            // print out page source
            string targetString = "bbx2-pv";
            int first = page.IndexOf(targetString);
            string price = page.Substring(first + targetString.Length + 2, 7);
 
            targetString = "ship tfsp bbx2-s";
            first = page.IndexOf(targetString);
            string temp = page.Substring(first + targetString.Length + 2, 20);
            targetString = "</s";
            first = temp.IndexOf(targetString);
            string shipping = temp.Substring(0, first);
 
            if (shipping == "Free shipping") shipping = "$0";
 
            DateTime time = DateTime.Now;
 
            string path = @"C:\Users\Kai\Dropbox\Mis\Android App\GalaxyNote.txt";
 
            using (StreamWriter sw = File.AppendText(path))
            {
                sw.WriteLine("{0}\t{1}\t{2}", time.ToString(), price, shipping);
            }
 
            Console.WriteLine("{0}\t{1}\t{2}", time.ToString(), price, shipping);
 
           Thread.Sleep(1000 * 60 * 60);
        }
        
    }
}
Blog分类: 

办公室的威士忌

PIC-0106  PIC-0107

备份手机上的文件,发现了这两张挺“古老”照片。看拍摄时间,第一张是 2008 年 7 月 4 日凌晨 11:48:36, 第二张是 2008 年 7 月 6 日 凌晨 12:07:20,两张照片相差差不多24 小时,地点是念研究生时的办公室。

那时办公室总放有烈酒,Jim Beam 的肯塔基波本威士忌或者 Jack Deniel's 的田纳西威士忌,没有冰,也不用 mixer,只有一次性塑料杯,半杯入腹,挑灯夜读,精神百倍,感觉就像肯塔基或者田纳西的庄稼汉喝罢了酒,兴致高昂的扛着锄头下地 —— 当然这只是我那时的想法,肯塔基和田纳西并不一定要种庄稼,他们下地也不一定扛锄头。

也喝苏格兰威士忌,在看《1Q84》,书中又提到 Cutty Sark,记得村上春树在《发条鸟编年史》就提到过 Cutty Sark —— 价钱、味道和作用都和 Jim Beam 差不多,只是无法满足我关于庄稼汉锄地的遐想,苏格兰的威士忌总让人想起临死前喊着 freedom 不想锄地的庄稼汉,不符合我熬夜看书写论文的意境 —— 想过在答辩之后,跑到校长住的钟楼前大喊 freedom,但是这个想法在清醒的时候总记不起来。(其实校长不住在钟楼里,但是因为学校有一个很高的钟楼,从一开始看见它,我们就假设校长住在里面。一位金融界的前辈说过:“if it acts like a duck, it is ok to assume it is a duck.” 既然我们不知道校长住在什么地方,那么假设他住在钟楼里也无妨。)

后来酒被研究所的老板发现了,说我这样在办公室放烈酒不好。所以思考了一下,就把威士忌放在樱桃可乐瓶子里了,于是总在案头放一瓶樱桃可乐。

现在看来,被教授发现酒瓶应该是 2008年 7 月 4日或者5 日白天的事情。 这就是图片的奇妙之处,仿佛把一切时空都固定下来,而两张图片又让时空动了起来 ——

譬如我的纸杯都扔了,因为喝樱桃可乐不需要纸杯;

譬如我当时还在教一门《国际关系》的课,因为我的桌子上还放着本《Essentials of International Relations》(第一张照片杯子后面那本花皮的);

譬如我当时还在读芝加哥警察局的机密档案(书架上成堆的大信封),因为要作一个关于芝加哥犯罪率的研究;

酒瓶下面始终压着两本书,白皮的是 《Stochastic Games and Applications》,红皮的是《十一届三中全会以来 重要文件汇编 (机密)》(记得本科学公文时学过,我国的文件分密、机密、绝密三等),是当时主要在钻研的两本书。

没想到是若干年后,会一直跟 stochastic 打交道了( game也在玩,现在在玩一个叫做 Dragon of Atlantis 的网页游戏,只是不再搞 stochastic game 了);还有就是不再看我国的机密文件了:)

还有就是不喝酒了。。。

Blog分类: 

1Q84

519RHf5fmYL._SS500_ 好久没有没有读过小说了。上次读小说还是去年冬天看的刘慈欣的《三体 III》。《三体 III》刚出来的时候北美这边买不到,只有很粗糙很费眼的扫描版,放进 Kindle 之后,即便是用了“多看”系统,调节了对比度,还是看得艰难。但是即便是如此,还是一览为快——并且还是在波多黎各读的,因为当时正赶上去波多黎各旅行,还记得在一间叫做 Rio Mar Beach  Resort 旅馆的窗边听着蛙鸣,对着漆黑的夜空读三体人入侵地球:)赶巧的是第二天有一家 hedge fund 突然打电话来面试,只是一些闲聊的问题,被问道现在正在读什么书,我回答说  a book about three - body problem,电话那边突然来了兴趣,于是聊了会儿数学,不过忽略了外星人入侵地球的那部分:)

其实前阵子和别人聊起,《三体》的作者刘慈欣或许看过国际关系的入门教材,特别是 Waltz 的理论,因为他对宇宙社会学的公理化总结和 Waltz 试图作的国际关系的公理化总结非常相似,而刘慈欣《三体II》里的理论核心其实是国际关系里 Walt(不是 Waltz) 的 balance of threat 理论(有别于经典的 balance of power),所以《三体》读起来才有一种亲切感,呵呵。

然后这大概有一年的时间,基本没看过一本小说,读的都是非小说类的读物,历史、政治、经济、人物传记之类的,新书和旧书都有,最近的一本是刚出版的 Vogel 的Deng Xiaoping and the Transformation of China。挺喜欢读这种退了休的老先生的书,因为写书多半是出自个人的兴趣,而不是为了评 tenure,因此可读性要更强一些 —— 虽然就纯粹社会科学研究而言,我是坚决支持量化分析的,但是就个人兴趣而言,我很厌恶在读书的时候看到大量的回归表格,更厌恶看到significance level 的星星 -_-

昨天打开 Android 手机的 Market 时,发现了村上春树 1Q84 的英译版,前两卷是 Jay Rubin  翻译的,在 Android 的 Google Book 上看了一个开头,然后决定从 Amazon 购买放入 Kindle。

看翻译小说,其实更多看得是译者,所以年初 1Q84 的中文版出来的时候,并没有特别在意,因为译者是一个没有听说过的人。如果只是本格侦探小说譬如东野圭吾,其实也就罢了,字幕组翻译的都可以忍耐(其实有些字幕君还是很不错的),村上春树的小说还是等信赖的译者吧——当时就这么想。

不过我并不知道 Jay Rubin 会翻译这部书,也不知道这部书会在五天前十月二十五日上架,是个惊喜,所以,一年之后,又开始看小说了:)

Blog分类: 

大登殿

1166672953

中午吃饭听了一会儿戏,管波、李胜素和于魁智的《大登殿》,讲的是薛平贵打进了长安城,封赏王宝钏和代战公主的故事。突然想到,京剧里代战公主的装扮是满人贵妇摸样,虽然代战公主是个俏皮可爱的角色(据说尚小云演的最好,可惜搜索了一下,只找到尚小云《武家坡》里演的王宝钏),但是戏词里不乏对代战公主和她的西凉国的揶揄之词,譬如马达说西凉国女子行礼:

到了咱们那国行礼,是山东老爷开宝,大敞门。

而说起中原女子行礼(万福礼),紧上加紧,代战公主很天然呆的说:

哟,那不成了兔捣碓了嘛

一旁的江海接到:

不捣碓,八月十五不给您月饼吃

这不正是把代战公主比作了兔子么?-_-||| 《大登殿》这戏来自于清代乱弹《红鬃烈马》,清末应该就有了吧,京剧早期和程长庚、余三胜齐名老生张二奎就唱过薛平贵。

其实不只《大登殿》,《四郎探母》、《雁门关》里的辽人也是满人打扮(譬如铁镜公主),并且番邦女子一贯的耍宝逗趣。

呵呵,所以晚清真是变了啊,想雍正那会儿,翰林徐骏因为在奏章上笔误,把陛下,误写为“狴”下,又在诗中有“清风不识字,何得乱翻书”一语,就被雍正帝认为是讥讽满人不识字而就掉了脑袋。到了清末, 满人“不捣碓,八月十五不给您月饼吃”也无妨了,呵呵。

Blog分类: 
Free Tags: 

降级回 Drupal 6.22

image

前几天升级到了 Drupal 7.8,正如预料的那样,问题成堆,每抓住一条虫子,就会发现这条虫子背后还有 N 条虫子,杀死了这条虫子,又发现产生了更多的虫子 。。。当然最好是治标而非治本,如果能系统的更新以前做过的 PHP 和 MySQL codes 的更改,自然是最好的,但是这又必须要求去钻研 Druapl 7 浩繁的 API 手册,现在的 Drupal 已经不是当年的 Drupal 了。所以,最后还是决定 roll back 会 Drupal 6.22。如果没有太多的时间就不打算在升级了。

呵呵,突然想到中国历史上的改革,为什么大多数情况下改良的尝试最后都以向保守势力妥协而告终?大概和我升级 blog 是差不多的道理吧。其实重新建设比修改补丁更容易,之所以要修改补丁,是以前积累下来的东西太多:)

顺便附上上次升级完写的 blog,因为数据库重新 dump 了升级前的备份,所以这篇 blog 消失了:

Drupal 7 今年一月就已经正式发布了,但是一直在用着陈旧的 Drupal 6。按照以前的习惯,Drupal 在 pre-alpha 阶段的时候,就该兴冲冲的从 CVS 里check out (不知道现在 Drupal 的 version control system 还是不是 CVS 了,好久没有登陆了),安装测试,然后去报告 bug。但是现在一想到升级,想到要写无穷尽的 PHP,MySQL, CSS, HTML 代码 (原来自己手动更改过很多 Drupal 的代码和数据库),就懒得升级 —— 倒不是因为难或者麻烦 —— 现在每天都要写 N 多的  C#, R, C++, Matlab, VBA, etc ,PHP 和 MySQL 相对要简单许多,而是因为没有乐趣了 –__- 

从经济学的角度讲,大概这是边际效用递减,每天埋头读大部头的康德、黑格尔、沃尔茨、基欧汉之余有个把儿钟头可以忙一会儿毫不相关的 PHP coding 带来的乐趣要远远大于现在花几个钟头 debugging C++ 或者一行一行看 implementation 研究为什么 R 的 Gauss–Kronrod quadrature 算法要比 Matlab 慢几十倍的原因之后再来改 PHP 的乐趣;或者从很哲学的角度讲,世界总是一座 besieged fortress, 再或者简单用俗语说,就是 “贝戈戈”:)

不管怎样,总算突然有了兴趣,把 blog 升级到了 Drupal 7.8。久违了,Drupal :)

Blog分类: 
Free Tags: 

教皇· 伶人

'Absolute Monarchs -  A History of the Papacy' By JOHN JULIUS NORWIC

前阵子早上挤地铁的时候一直在看 Absolute Monarchs: A History of the Papacy,从 Android 的 Google Book 上下载的免费预览,只能看前四章。被这本书的名字吸引主要是因为 Perry Anderson 的巨著 Lineages of the Absolutist State。Absolutism 的兴起是欧洲 17 到 18 世纪的事情了,所以很好奇可以追溯到公元初的教皇如何是 absolute  monarch。但是就能免费读到的四章而言,没有任何关于 absolutism 的讨论, 倒是有教皇和教会的不少八卦,譬如早期教会的某位长老(presbyter)是一名太监,同时还掌管着罗马皇帝康茂德(Commodus)的后宫。当然也有一些其它比较有趣的事情,譬如在基督教的早期,东部教会关于教义曾有数次比较大的辩论,而此时以罗马为中心的西部教会却并未积极参与(例如第一次尼西亚会议),除了地理上原因外,另一个主要原因是当时的拉丁文语言词汇不如希腊文那么丰富,许多语言上的细微差别无法在拉丁文中体现出来。

可能原来是学外交的缘故,对于这类语言的细微差异总是很感兴趣,因为对于国家而言,语言上的细微差别可能是一场战争的诱因之一,譬如鸦片战争。第二次鸦片战争结束缔结的《中英天津条约》,其中第五十一款:

嗣后各式公文,无论京外,内叙大英国官民,自不得提书字。

哥伦比亚大学刘禾教授所著的 The Clash of Empires: the Invention of China in Modern World Making 对于“夷”字翻译导致的中英冲突有详细的考证。“夷”字的英译,该在 foreigner 与 barbarian 之间,但是英语中无法用一个词准确的与“夷”对等以至于后来简单的把夷与 barbarian 划上等号,导致争端不断(当然这也不纯粹是翻译的问题,古语云,欲加之罪,何患无辞)。其实,如果“夷”字是 barbarian 的话,那么《孟子·离娄》中的这句话该怎么翻译?

孟子曰:“舜生于诸冯,迁于负夏,卒于鸣条,东之人也。文王生于岐周,卒于毕郢,西之人也。

不仅是在过去,即便是现在,仍有这样的问题,记得原来上课时仔细讨论过公报中 recognize 和 acknowledge 的差别,两者翻译成汉语都可以翻成“承认”,但是英语本身的差异就消失了。

然后免费的前四章就读完了,由于保持着念博士时的“优良传统”—— 只看书不买书 (可惜现在没有图书馆了),所以“专制”教皇的故事就只能读到公元六世纪末的 Gregory the Great 。

然后只能翻手机上的存书。所以又翻开了章诒和的《伶人往事》,因为这是一本很不错的地铁读本,故事都比较短(除了马连良那一章),适合10分钟时间的阅读,有始有终。以前读过几遍,注意的多是八卦掌故等叙述性的部分,这次再读,仔细看了作者的一些议论。

既是“往事”,所以感慨大多怀旧,或者厚古薄今。前后翻阅,又觉得作者逻辑难以自洽,比如她感慨现在的剧坛处处可见官、商的影子,但是旧时代的剧坛又何尝不是?其实作者应该乐见官、商捧出来的剧坛(就像四大名旦之所以成为四大名旦与背后捧的人密不可分一样),因为她本人是不喜欢“人民的剧坛”的(建国后对于戏剧文化的一系列改革)。

又好比作者感慨现在没有堪比旧时代的戏剧大家了,其实这也未尝不是一件好事 —— 说明普通人的选择多了,不必被某种职业所禁锢。要知道倡、优与隶、卒在古代都是地位远低于士农工商的贱民(也就是入贱籍的人),往往世代相传,不能变更,出身乐户,就不得不作一辈子的乐工倡优。所以身隶贱籍,唯一能有所改变的,就只有做好一行,以希望能得到上层人士的青睐(譬如唐明皇,李后主,后唐庄宗这样的人物)。后来虽然雍正帝“开豁为良”,革除了各地贱籍,令其改业为良,但是正如《伶人往事》中所记录的,很多人其实也只有到了走投无路才去做伶人,因为社会习惯上的偏见是根深蒂固的。倘使程砚秋有别的选择,估计他也不一定再选择梨园行,就像程砚秋成名后发誓不让自己的儿女再入学戏一样——后来也确实如此,程砚秋三子一女,没有一人入梨园。当然确实也有人完全是因为兴趣而唱戏的,譬如过去的那些票友们,但是不同之处仍然是在于这些人是有选择的。所以人们能选择是否演戏是一件好事,像程砚秋这样被棒打出来名角儿,不要也罢(程砚秋在出师前腿就被师父打伤,后来一直到他到欧洲考察戏剧时,才由德国医生手术治好)。

虽然不很赞同作者的一些议论,但是她的叙述部分还是很好看的。特别是一些小掌故,譬如一位叫做陈叔通的 fans 兼好友给程砚秋的信:

再弟尚有一语,兄所得之钱乃血汗得来,股票不可买,不可入股,银号即利厚不可贪,弟意存入中国与兴业两行均可,千万!千万!此中事我较明白,决可负责。

读罢乐而开笑。继续看了他给程砚秋的一些书信:

假如满洲得往演唱,恐亦不能去!此即有名之人不易做人也。

可惜马连良没有一位这样的有远见的挚友! 还有新中国刚成立时的信:

以后不再是挂头牌的时代。

后来戏剧改革时期:

你以后千万对周(扬)、田(汉)、夏(衍)要谦虚,说明要他们指教……

虽只言片语,足见得此人高远。 陈叔通是清末进士,选庶吉士,后来做过商务印书馆的董事和兴业银行的董事。卒于1966年2月17日,正好是《五一六通知》前三个月,享年90岁。

Blog分类: 

Pages