Friday, June 8

cape 7 海角七号

以前我介绍过《海角七号》里的一首曲子,现在终于有时间来介绍这个电影了。

剧透:我喜欢这电影里的歌曲,但是这个电影,太糟糕了!

注:我大概是5年前看的,现在全凭记忆,不google。所以不要在细节上追究。


这个电影一开始,是一个北漂玩音乐的年轻人(主角)在台北混不下去,骂娘,回到了家乡南方小镇,推到了一系列的多诺米骨牌...

家乡里,有一个酒店马上要开张,因此请来日本一个歌星来办开业典礼;请歌星嘛,顺便还请了一个小乐团暖场,给大家热闹热闹。小镇的管事人正好是这个主角的后爸(主角跟他不对付,也是主角以前离家出走的原因),所以这个后爸一看继子回来了,就找了个原因,把那个小乐团辞退了,说是要给本地音乐力量一些机会,办了个选秀,罗致本地优秀音乐人才:这就把刚回乡的继子顺利推上主唱的位置(只是暖场的而已)。

另外还有一条线,一群日本模特来到小镇,闹哄哄的,小车把一辆邮政自行车挤到,邮政大爷受了伤,主角(管事人的继子)也就临时当上了邮政大哥,天天去送信;而邮政大爷也来参加了选秀,一手月琴弹起来,为他赢得一个位置。

胜利出线的还有一个警察(脾气暴躁的交通警察,当天刚跟乱骑自行车的主角吵了一架),一个修车行的伙计,和一个小女孩。



Thursday, May 31

万历十五年 零章

黄仁宇的《万历十五年》 (1587, A Year of No Significance) 是一本好书,可惜少了零章。在此补上。

祝阅读愉快!


明朝(1368年-1644年):蒙元在中国的统治不得人心;朱元璋伙同陈友谅、张士诚等人起义推翻元朝,在公元1368年建立明朝。经历16个皇帝后在1644年被满清、李自成农民起义军夹攻而灭亡。

隆庆帝(1537年-1572年):嘉靖帝之子。逝世时36岁;儿子万历帝9岁登基。
万历帝(1563年-1620年):史称明神宗,全名朱翊钧,1572年-1620年在位,年号万历。
泰昌帝(1582年-1620年):万历帝的长子;因是宫女所生,不受宠爱。万历二十九年被立为太子;万历四十八年(1620年)万历帝驾崩后即位不足30天即暴毙。由儿子朱由校即位。

张居正(1525年-1582年):嘉靖二十六年进士;隆庆元年进入内阁;万历元年成为首辅。万历十年逝世。

申时行(1535年-1614年):嘉靖四十一年状元;万历十年张居正逝世后成为首辅。万历十九年离任。

海瑞(1514年-1587年):官至大理寺左丞、江南巡抚。万历十五年,73岁,病逝。

戚继光(1528年-1588年):在浙江训练乡勇成立“戚家军”抵抗倭寇入侵,后任蓟州总兵拱卫京师,守卫蓟州蒙古边境。万历十年被罢免,万历十六年,60岁,病逝。

李贽(1527年-1602年):国子监博士,姚安知府。万历八年弃官。万历十六年剃度出家。万历三十年在狱中自杀。


------------本章完-----------

有人说,你这不是剧透么?看完这章还怎么读下面的七章?
Come on! 人人都知道明朝后来被满清推翻,历史没有假如,还有什么剧情值得“剧透”的?

有了这个“零章”,能够看见在万历十五年这个“无关紧要的一年“里,各个角色的位置:

明朝: 57年后亡朝。

隆庆帝:已经死了15年。
万历帝:24岁,在位15年;从小孩长成了一个帝君。
泰昌帝:再过14年才能被立为太子。

张居正:已死了五年。

申时行:已成为首辅五年。

海瑞:73岁,11月即病逝。

戚继光:59岁,第二年1月病逝。

李贽:60岁。第二年剃度出家。

Thursday, February 22

Meditation 冥想

冥想


“冥想”其实是“不想”,把脑袋放空,休息一下。跟睡眠相比,冥想是一种“有控制的休息”。经常进行冥想锻炼的人更容易控制自己的情绪,在繁乱的高节奏现代生活里培育内心的清明。


冥想锻炼


冥想并不容易达到,特别是习惯了焦虑的成年人,因此需要循序渐进的训练。

1,找一个固定的时间,没有人打扰,也不用担心老板会来敲门的时间。一开始,5分钟就够了,
2,找一个安静的地点。
3,关闭手机的提醒功能,不要让 facebook, 微信等消息提醒来打断你。只要5分钟,这个世界不管发生来什么事情,都可以等你一下。
4,把闹表设好5分钟。
5,坐下来,闭上眼睛,把世界排除在外面。这个世界会在这5分钟里脱离开你,孤独地转动,但是你要给它一点信心,相信它能支持这几分钟。
6,什么都不要想。不要想昨天发生都事情,也不要想今天下午要交都作业。不要想任何事情。如果这很难做到,可以留意自己的呼吸。
7,因为闹表已经设置好了,所以如果闹表不响,就不要停止。不用惦记着时间。
8,相信我,第一个星期,你肯定办不到“5分钟什么都不想”。所以你在这几分钟里虽然思维东奔西跑,不要焦虑。这是必然的。
9,但是必须坚持下去。如果不完成第一个星期,就没有第二个星期。
10,当你能进入“不想状态”后,慢慢延长闹表时间,从5分钟到15分钟。达到15分钟的冥想状态,就算你入门了。
11,并不是越长时间越好。不要超过30分钟。
12,在气功行当里,这个过程叫做“入静”。


Wednesday, January 10

关于 blockchain 区块链技术


最近学习区块链技术,写了个PPT:

Blockchain technology and the mining process


Q&A:

Q:如果我把我拥有的coin卖给别人,就要建立一个新的entry,也就是一个新的block?
A:对。但不是要你来建立新的block。你的 transaction request会在全世界传播,由某个矿工抓进他的一个block中,成为这个block中的一个entry. 每个block 最大8MB,可以有16000个transaction records.

Q:如果没有矿工工作的话整个交易系统就不能运行了?挖矿的奖赏越来越少,总有一天没人愿意挖的吧。

A:确实,没有矿工工作的话整个交易系统就不能运行了。
有交易费用付给矿工的,比现在银行火耗少。其实这个交易费用是由发送方决定的。随便给。以后矿工可以挑选高价的交易来工作。这样就由市场来决定交易费用是多少。现在由于挖矿的收入很高,矿工都不挑选交易。
还有,如果大家都觉得当矿工不值得了,我就开一台低功耗的386慢慢跑,反正每10分钟就能做一个block出来,收一点零星的交易费用;

如 果你发现这样也有钱赚,就跑一个486来跟我抢生意,只要486的耗电比交易费用少,这笔买卖就可以做...

战争开始,我去买10台nvidia gpu来搞死你!


你看,矿工的数量也是市场动态调整的。


Q:抓重点,blockchain交易速度能否比单机快?每笔交易耗电多少? 
A:问题完全不在弦上。单机无所谓交易。只有网络才有交易。由于动态调整难度保证10 minute block time, 如果这个网络只有一 个Node,或者1 billion nodes ,都是10分钟完成交易(平均)。 

所以每一个block生成所耗电等于: 

全世界的矿机全负荷运行10分钟所用的电。 

与算法无关。由参与者决定。

bitcoin/blockchain的特点不在交易速度上。

Q:这样链式地记录数据,数据量大了以后如何查找?有个目录或检索系统吗?那个系统又是怎样保证安全的?
A:人家只管记流水账,就是不停添加,所谓安全是:

第一,超过50%节点验证这个区块内的交易是交易双方认可的(私钥签名认证) 
第二,用hash保证添加不能被篡改 
仅此而已。

你要检索是你的事情,和区块链无关,反正就是整个流水账都sync给你,你怎么建索引也是你的事情。 


谢谢吴大嫂和魏校的客串。

Monday, January 1

世纪之交

今年元旦流行“我的18岁”,缘由是“00后”的18岁已经来到,新的世代就要登上舞台,我们就要缅怀各自的青葱岁月了。

我忽然脱题地想起一个“世纪之争”。1999年底我和妻子正住在深圳蔡屋围一个逼匝的出租屋,在那夜随着人流到中心大道看花车游行(parade,不是protest),候到午夜,出来的游行团队居然打着深圳土著各个村庄的旗帜,完全没有国际大都市的范。我并没有很失望,因为我并不认为这天是百年一遇的“世纪之交”。

什么是“世纪之交”?我属于小众派。多数认为只要年数的百位数变化了,就是100年的变化。可是,如果你仔细看历法,能够发现“公元零年”是不存在的,“公元前1年”的下一年是“公元1年”;所以“一世纪”从公元1年开始,到公元100年底才足够100年,下一个世纪从公元101年,到公元200年底结束...二十世纪从公元1901年,到公元2000年底结束。因此直到2000年末,2001年元旦才是世纪之交啊。
把2000年元旦当作世纪之交,就相当于只安排了九十九年(从公元1年到公元99年)在第一个世纪,这么重要的世纪,数学上就不和洽了。这是我不能容忍的。因此我从心底里不认为这个时刻是世纪之交,只不过随大流到大街上混一个通宵而已。


到了下一个(真正的)世纪之交,我已经经历了网络公司从15人涨到70人,又缩小到5人的全过程,换了两个工作,忙得不可开交,根本忘记了这茬。

Saturday, December 23

从《我站在高岗上》到《相思泪》



连绵的青山 百里长呀
巍巍耸起 像屏障呀喂
青青的山岭 穿云霄呀
白云片片 天苍苍呀喂

连绵的青山 百里长呀
郎在岗上 等红妆呀喂
青青的山岭 穿云霄呀
站着一个 有情郎呀喂

我站在高岗上 远处望
那一片绿波 海茫茫
你站在高岗上 向下望
是谁在对你 声声唱

一听到这个,就能感受到阿里山原住民张惠妹的热力与奔放。她与这首歌真是绝配!

其实,她不是这首歌的原唱。这首歌是1957年香港在台湾拍的电影《阿里山之莺》的主题曲,原唱者是40年代上海歌坛七大歌星之一的姚莉,作曲者是她的哥哥姚敏。现在我们就来介绍一下他们。

姚莉今年95岁,是唯一在世的“40年代上海歌坛七大歌星”。她原唱的歌曲有《玫瑰玫瑰我爱你》、《春风吻上我的脸》等,当然还有我们刚听到这首《我站在高岗上》;而《春》和《我》这两首歌都是他哥哥姚敏的作品。

一代作曲家姚敏创造出很多杰出的作品,当时的七大歌星都有演唱。现代比较熟悉的有《总有一天等到你》、《三年》(后来有陈百强的粤语版本《盼三年》)。现在Youtube上甚至还能找到他作曲,并和周璇演唱的“天长地久”(1941年作品)


他写给周璇唱的《四季相思》也四处传唱:

春季裏 豔陽天  百草回芽遍地鮮
情郎呀 別離我  一去為客在外邊
梳妝懶 鏡無緣  打扮嬌妥何人見
莫不是 他在外  另有一個女呀天仙
忘記了 當初呀  那麼一段美良緣
少年郎 年輕郎  那能就把良心變
夏季裏 好太陽  荷花透水到處香
情郎呀 別離我  一去不知在何方
淚如泉 湧落胸膛 獨坐涼亭將郎望
鴛鴦枕 鴛鴦帳  何年何日繡呀成雙
海茫茫 天茫茫  何時能敍別離腸
少年哥 負心郎  拆散奴的好鴛鴦




Wednesday, October 18

天宫一号: 大约在冬季


天宫一号太空站在2011年9月升空。 

2011至2013年内,神舟八号、神舟九号、神舟十号飞船相继与天宫一号完成太 空交会对接,宇航员进入天宫操作。2013年6月最后一次对接之后,天宫一号预定的工作已全部完成。 

这时候,如果稳妥起见,可以控制天宫一号进入地球大气层双规,在规定的时间,规定的地点(一般选择浩瀚的南太平洋)坠毁。 

中国人不是穷怕了么,什么都要精打细算,所以把它超期服役,希望在天宫二号(2016年9月升空)之前一直运转。 这也是有先例的,下面的介绍你能看到礼炮7号太空站在世界各国宇航员的合作之下修修补补又工作了几年。

几个月后,就有电池发生了故障,无法修复;倒一直还有数据传输。直到2016年3月,数据传输都失败了,地面完全失去了控制。 中国给联合国写了封信,承认现在只能“跟踪与监测”:


现在只好等着它掉下来了。时间大约在冬季。地点大概在地球。很有可能大部分都在空中燃烧掉,但是8.5吨的大家伙,也可能有残余,不定掉在哪里。一阵飓风就可能把残余从一个大陆变换到另一个大陆。 


史上也有两次这样的太空站坠落,我们看看: 
1,苏联礼炮7号,21吨,在1982年4月至1992年2月间运转。1985年2月11日,联络中断。6月6日,宇航员进入其中更换了故障电池,太空站继续运作。1986年,宇航员还进入其中把一些设备取出来,转移到新的和平站(1986年2月升空),并发了一个22吨的引擎接上去,把它的轨道升高,预计在1994年进入地球轨道坠毁,或者找个航天飞机去回收。可是在80年代末和90年代初(那个春夏之交)太阳活动异常,它在1992年2月提前坠毁,没有掉到预定的南太平洋,而是在阿根廷的深山里。 

2,美国太空实验站 Skylab,77吨,1973到1979。坠落前几小时,地面人员还调整了参数,让它能掉在好望角以南,广阔的海洋,可是它燃烧的程度比预期的少,最后在西澳大利亚一个小镇旁坠落,一个家里掉了24块碎片。小镇给NASA开了$400澳元的“乱扔垃圾罚单”。 

3,这个不是太空站,是苏联一个卫星Kosmos 954,1977年9月上天,12月份就失控,1月24日掉到加拿大的阿尔伯塔、杀斯科册温一带。问题是,这是一个核能卫星,这些核废料散落到这两个省,花费了很多工夫收集。 


下面这个链接可以随时看到天宫一号现在的位置:
http://www.satflare.com/track.asp?q=37820

Labels: ,

Sunday, October 15

历史上的今天: 中共中央关于《划分右派分子的标准》的通知

六十年前的今天,1957年10月15日,中共中央发布《划分右派分子的标准》,条例有一二三四五六条,简单说来,反对共产党及其政策的就是右派分子,其中领导人物就是极右分子。

这并不是“反右”的第一天,只是这个通知把规矩明确下来而已。整个“反右”的过程大致如此:

1956年4月25日,毛泽东在中央政治局扩大会议上作了《论十大关系》的讲话,提出了“百花齐放,百家争鸣”的方针。这个讲话当时仅在党内传达,到四人帮被抓起来之后才于1976年12月26日,在《人民日报》上公开发表。

1957年4月27日,中共中央发布关于整风运动的指示,登载于5月1日的《人民日报》上,号召“知无不言,言无不尽;言者无罪,闻者足戒;有则改之,无则加勉”。这几句格言在1945年的《论联合政府》里就有提出来,现在中共已经当政了,还鼓励民众对执政党提意见,让大家很受鼓舞。

1957年4月30日,毛泽东在天安门城楼上召集民主党派负责人座谈,对他们提出了相同的要求。


可是,两个星期之后,毛泽东就发现事情正在起变化5月15日撰写的文章,6月12日党内印发,“我们对中间派过去所扣一切不适当的帽子都要取掉,以后也不要乱扣,只有扣帽子一事,对右派当别论”。
有人评论:
如果以善意推测,毛在最初请党外人士帮助党整风提意见时,并没有“钓鱼”的想法,那么这份“指示”则明确显示,从5月15日起,所有鼓励党外人士继续鸣放的行为,是名副其实的“钓鱼”或曰“引蛇出洞”了。


6月14日,毛泽东同志为《人民日报》写的一篇《<文汇报>在一个时间内的资产阶级方向》,指出:《文汇报》和《光明日报》“在一个时间内利用‘百家争鸣’这个口号和共产党的整风运动,发表了大量表现资产阶级观点而并不准备批判的文章和带煽动性的报道”

1957年7月1日,毛泽东同志为《人民日报》写的社论:
本报及一切党报,在五月八日至六月七日这个期间,执行了中共中央的指示,正是这样做的(不登或少登正面意见,对错误意见不作反批评)。其目的是让魑魅魍魉,牛鬼蛇神“大鸣大放”,让毒草大长特长,使人民看见,大吃一惊,原来世界上还有这些东西,以便动手歼灭这些丑类。

反右运动在中国大地红红火火地开展起来。


1957年7月18日,中共中央主席毛泽东在青岛省市委书记会议上说《一九五七年夏季的形势》,并提出“搞个劳动教养条例,除了少数知名人士之外,把一些右派都搞去劳动教养”。“有反必肃。杀人要少,但是决不废除死刑,决不大赦。对...公众公认为坏人的人,必须惩办”。这其实是文化大革命由公众审判(不经公检法)的起点。

8月3日,国务院公布了《关于劳动教养问题的决定》,主要针对的对象是“不够逮捕判刑而政治上又不适合继续留用,放到社会上又会增加失业的”人员。

这年国庆,人民兴高采烈地打着“把反右派斗争进行到底”的牌子:

然后就是开头这篇:10月15日,《划分右派分子的标准》颁布。


时光飞逝,到1978年9月17日,毛泽东、周恩来、刘少奇等人都已经离世,四人帮已经粉碎,中共中央发布55号文件《贯彻中央关于全部摘掉右派分子帽子决定的实施方案》,大概意思如此:
从一九五九年到一九六四年,先后五批摘掉约三十余万右派分了的帽子。目前,估计全国大约还有右派分子十万多名。他们经过二十一年长期的教育改造,大多数人有了转变,表现较好。
一九七五年,在特赦释放全部再押战犯的同时,毛主席、周总理指示摘掉章乃器的右派分子的帽子,产生了很好的影响。当时考虑到右派分子经过长期的教育改造,绝大多数有了转变,表现较好,准备全部摘掉他们的右派帽子。由于“四人邦”反党集团的干扰和破坏,毛主席的这个无产阶级政策,当时未能实现。
实现四个现代化,总是人多一点好。摘掉右派分子帽子的人中,不少是有用之才。

1981年6月27,中共中央通过《关于建国以来党的若干历史问题的决议》,关于反右运动总结如下:
在整风过程中,极少数资产阶级右派分子乘机鼓吹所谓“大鸣大放”,向党和新生的社会主义制度放肆地发动进攻,妄图取代共产党的领导,对这种进攻进行坚决的反击是完全正确和必要的。但是反右派斗争被严重地扩大化了,把一批知识分子、爱国人士和党内干部错划为“右派分子”,造成了不幸的后果。

2013年1月7日上午,孟建柱在全国政法工作会议上宣布,停止使用劳教制度。

2013年12月28日,第十二届全国人大常委会通过了《关于废止有关劳动教养法律规定的决定》,劳动教养制度正式废止。

Labels: ,

Tuesday, October 10

Python notes: re.match object is not subscriptable in 3.5. good in 3.6

Below is the screen shot of the same code running in two environments:


You can see that a[0] works well in 3.6 environment, but failed in 3.5 environment (which is the latest python 3 of Ubuntu).

Thursday, October 5

Practice caution when using cache (lru_cache in python)

I have a simple search code in python:

def SearchNode(name):
   for node in Nodes:
         if node.name == name:
              return node
   return None

Pretty simple. Nodes is global variable in this module. Because this function is called frequently, I added cache from functools for it:
@lru_cache(maxsize=5000)
def SearchNode(name):
   for node in Nodes:
         if node.name == name:
              return node
   return None
Sounds too trivial to create a unit test for it, so I apply it directly to my project. Two days later, my program is giving out different kinds of error, and it took me several hours to identify the source of error: the @lru_cache line. The call to this function always returns "None" for me.

 I actually added some code to iterate the legit names and do "SearchNode(name)", and the return values were always "None"!

After another hour of tracing and thinking, I finally understood the problem:

When building Nodes, I call this function for a new name, to make sure the name does not exist in the Nodes, before adding into the structure. So for each new name, the answer is always None, and the @lru_cache remembers this answer. So when I actually need the node, the @lru_cache still gives me the "None".


After locating the source of error, I can think of several ways to solve it (while still having the cache mechanism): Disable the cache first, only enable it after the Nodes is built; Reset cache after the the Nodes is built; Let the cache remember the non-None result. @lru_cache does not have the capability to do any of them, so I have make my own cache, using the third way:
SearchNode_cache = {}
def SearchNode(name):
   if node in SearchNode_cache:         return SearchNode_cache[node]
   for node in Nodes:
         if node.name == name:
              SearchNode_cache[node] = node              return node
   return None

You can easily add 2 lines to set a size limit for the cache, and remove the oldest item in it, to implement Least Recent Used mechanism.


Lesson learnt:
1, Any one simple line, no matter how innocent it looks, can jeopardize your project in a big way.
2, If the value of the Nodes can be modified, my current way is not correct.
3, So don't just copy my code. My application scenario might not be the same as yours.
4, Practice caution when using cache.

Labels: ,