Thursday, December 1, 2011

缘来都是梦

有种感觉我们欺骗不了自己,那种心与心的对话、怦然心动的交接让我无限感怀。每当一切都幻化成空,我才发现梦境也如真实一般,成为我记忆的一种保留。
--题记

当我准备用粗糙的文字来描述梦的精致,它却早已溜走,留下一段残缺的映像。身临其境时的完满总是不能掩映住它之于我的尴尬——美好稍纵即逝。很遗憾,我的梦似乎总是缺少鲜活的色彩,甚至没有更多的铺陈,女主角的细心在我这里却已然无所谓。内心的驱使,总是推动着情节地快速演进,然而回过神来,我并不知道自己曾经说过什么,又或者听到过什么。默片也许是最好的解释!又或者缺少柯南那样的蝴蝶结变声器,为剧中的人物创造一种鲜活。也许我真的以为梦到了就是一切。

尽管梦一团矫揉造作的意象,但真实的梦却很难有如《Mulholland Dr.》一样零碎而完整,或者我更想说《Memento》可能来的更加贴切一点。正如我总是只能记住那梦醒前的一段,至于梦中的之前发生过什么,也许只有残留的映像,就像Teddy给Leonard Shelby的那张欢快的照片,一切都好像谜一样的过去,再也不可追溯。时常总会有种感觉,我们对自己的梦会有种无力感,我们并不能理解身体之中怎会发生如此一段的奇妙。而当理性的思考徘徊,我真怀疑自己是否也要像Lenonard一样做着影像剪辑,提醒自己。内心之中总会有种奇怪的想法,也许那是另外的一个我,是我不可追溯的过去。

--<source code>

补记
我以为只要很认真地喜欢, 就可以打动一个人。 却原来, 我只打动了我自己。。。



Monday, October 24, 2011

等你: a poem

等你,
无论是在雨中
还是阳光普照

等你,
你却还没有来,
我却早早开始默念起你的名字
心理摹划着与你的对话的点滴
一阵暖意涌上心头

等你,
鸟儿在身边嘀唱,
仿佛要拽去我的情思
时而炯炯注视着的松鼠,
也会让我在这微微春风中
有些倦意

等你,
行人的脚步
只是毫无逻辑的节拍
纵使那甜蜜地寒暄
也丝毫夺不走我注视着路口的眼神
我的目光如炬
延伸在时间和空间里

等你,
轻快的嘀叫已经日渐稀疏
远处的钟声鸣鸣做起
微风中有些凉意
有些犹豫
想要离去

等你,
默念变成祈祷
暖意消散离去

在过去的时间里
我属于这里
但你却无从寻觅

人在旅途: a poem

背起行囊
勒紧跨带
心有种放飞的向往

吸引我的
不是那日出的灿烂
也不是那星空的魅惑
只要是拿点点的向日葵
或是那浓郁的夜来香
撩动姿态
却也能情迷神往

奔行在空旷的大地上
那种苍茫的孤寂
更让抽身城市的琐碎之后的我
着迷
兴奋

阳光的曝晒
让空气更为的干燥
对速度的迷恋
让风儿也跟着狂舞
离乱的头发
抻着裸裂的嘴唇
不禁也要伴随着展翅翱翔而过的雄鹰
怒吼上几声
一种淋漓的畅快
化为身后的谈笑

人在旅途
遗失在路上的美好


中国人的关系: a paragraph

众所周知在中国做生意,或者更宽泛地讲在中国发展是很需要人际关系的,而所谓的关系现在又套上了一个时髦的词汇,人脉,显得更加的贴切和形象。

所谓的讲求人际关系,也就是说人与人之间的竞争,或者是在对某个事情的公断上,看的不是事物的本质,也就是个人或者单位的能力以及事情发展的来龙去脉,而更加关注一件事情对于自己所熟识的人的影响。至于这样一种人际纽带能发挥到何等的效应,自然也就成了莘莘学子所一直关注的对象,毕竟人人都不想寒窗苦读十载而成为人鱼肉的对象。学习重要,还是经营人脉重要?

但就像上文所说的,当今的人脉已经在西方的价值体系的冲击下,更加的侧重于相互之间之于对方的实际利益,任何东西都在一个开放的社会体系下可以得到一个较为公正和客观的量化,这样人人之间从陌生到朋友,再到挚交的人脉发展线路也就一目了然了。所以,青年学子更应当切实地关注学习,提升自我的能力和段位,这样自身的交际圈才能不断上升层次。

但这只是说了关系的一个方面,更确切地讲似乎只涉及到了朋友这个层次。而中国博大精深的关系学却也不仅仅限于此。觉得老美雾里看花似的理解,倒也无甚妨害:
Guanxi is the concept of relationship-management in China. It’s not about having 700 so-called friends on Facebook, but a network of trusted-sources that you actually use as opposed to collect. It’s deeply personal, analog and well-guarded. 摘自Curious about…Guanxi. 
而《学习》一文,李笑来的结束语可能更多的是透露着一种西方的价值观,一种体制之外的慨叹。

记住,一个人的幸福程度,往往取决于他多大程度上可以脱离对外部世界的依附。


Sunday, October 16, 2011

钓鱼小记

趁着和煦的阳光,早上起来去st. Georgia Island 去钓鱼。但其实是一无所获,都是些小黄花,尽管是只有这些,估计还被别人给的鲨鱼咬的死伤大半。

总结下来,这次初试经验就是:
1. 要带拖车,如果东西多,在断桥上走走可不是容易事
2. 大的水桶,其实用cooler + 冰 更好,但是福州人的想法就是用水更保鲜。。。
3. 多几套渔具,这样就不会在一套渔具上多花心思,免得鱼有些风吹草动就慌忙的提杆
4. 带把刀,钓大鱼或者鲨鱼,别人的经验就是用小块鲜鱼做饵料,而有刀的话就可以现场取材了。
5. 防晒霜,如果不怕大太阳,那就尽情地暴晒吧。
6. 当然钓鱼可能也有时间和地点问题,这样的选择就相当技术化了。

我们这种垂钓(这个词太恬静了),应该被称为recreational fishing(or sport fishing),与commercial fishing 相对应。而至于是淡水(fresh water)还是咸水(salt water),又有相应的细分。在Florida 还有本专门的Florida Sport Fishing的双月刊杂志,看来真是门学问。

关于钓鱼的时间,take me fishing 站点有个比较general 的讨论,基本上是认为晚上(afternoon to evening)比较适合钓鱼,因为经过白天的日晒,水面的温度升高,鱼比较愿意到水面觅食。还有就是潮汐时间是最适合钓鱼的。
In general, the best fishing is almost always on a rising or falling tide—not dead low or dead high tide when there is little or no water movement.
同样,那个站点也给出了salt water的一些有用的FAQ
What causes fish to bite?
Five factors contribute to fish behavior: water temperature, current, weather, structure and bait. Determining what combinations of these factors will trigger a bite is the central challenge in fishing.
What hooks should I choose?
Choose a hook that matches the size of the lure or bait that you will be using. Also consider the size and feeding technique of the fish you will be targeting.
Should I use artificial or natural bait?
While natural bait is tough for any fish to turn down, there are many situations where an artificial lure works better. In some cases, a lure will imitate the target fish's natural prey. Also, natural bait can be difficult to obtain and maintain. Many anglers choose to use artificial lures because they present a greater challenge to catching fish.

Tuesday, August 9, 2011

构成品系的HPFDC

By Rui Chen

国内的集邮收藏有种玩法叫做极限片,一张明信片上,邮戳、邮票以及明信片上的背景讲求三位一体。来了老美这边,并没有发现相似的玩法,他们只是各种各样的都来,各个国家的也都研究,更多的他们是按照Scott对喜欢的地区进行系统收刮。

而我不同,集邮对于我各有一种审美与知识的趣味,在拿起每一套邮票之前,我总是努力地会将他做一个分类,给自己一个接受它的理由。其实,经常去ebay上看看也是一个不错的选择,就像以前去赵涌在线,后来的,易趣。在一个更大的充分展示自己的平台上,确实是可以找到更多有趣的东西。当然,话说回来,和当地的集邮交流相比,邮费也确实是不小的压力。在加上,我并没有明确的收藏压力(短时间制作一个专题),去ebay上逛逛对我的吸引力也确实是不小。

既然是谈到集邮的审美功用,今天看到的有关preliminary artwork就是一个比较有意思的藏品选项,它也是所谓的邮票的手绘稿本。当然,这是制作邮票工程中必不可少的环节。而另一个则看起来更像是兴趣爱好,也就是hand painted的FDC(first day cover, 首日封)。而我想后者可能也是国内集邮公司关于极限片想法所借鉴的源泉吧。

有着悠久FDC历史(FDC这个概念最先是在1923年出来的,当时的united states postal service(现在的Post Office Department)开始在新邮票的发行时间和发行地上做起了文章,这样也就随之产生了FDC,与USPS的official FDC相对应,集邮爱好者在发行日其它地点所做的工作都是unofficial,这点很好理解)的美国邮政,HPFDC也伴随着成长为一个特别的门类。

如果非要给HPFDC做个注解,这篇文章无疑是做了相当多的工作。

关键词cachet
要解释清楚HPFDC,cachet是一个entry,简言之就是集邮爱好者或者是艺术爱好者(我相信很大程度上是both)在信封上所做的一些艺术性的诠释工作,这可以视为是邮票在FDC上的延伸。

首先,根据信封上basic design的不同可以分为四类:
P = Cachets produced by mass production methods (eg. printed)
T = Thermographed designs
HD = Cachets that are hand-drawn
HP = Cachets that are hand-painted or colored
随后通过它们的组合构成创意的呈现:
P only = A totally printed cachet - the most common, millions produced for most stamp issues 
P/HP = A cachet that is produced by printing the basic design, then painted or colored by hand (note: some producers of P/HP use the term HP to abbreviate this designation) - less common because of the time required to hand color each envelope 
T/HP = A cachet for which the basic design is produced by thermography, then colored by hand - less common than P/HP but can be mass-produced once the design is set. Some T/HP are also hand-colored after printing. 
HD/HP = A cachet that is produced by hand-drawing the basic design then hand painting or coloring it - these are normally quite rare as they require more time to produce. Some artists will spend up to 30 hours on a single envelope!
如果说上面只能算作是FDC定型后的艺术加工,下面对FDC材质本身的考虑则让HPFDC在制作考虑的维度上有了新的拓展。当然面对这些国内所谓的丝织封、锡箔封,我好奇为什么文章中并没有提到像金箔封这样的藏品(可能还是太少见):
P/A (silk) = A cachet that is composed of printed silk affixed to the envelope.
P/A (tin) = A cachet that is composed of a printed tin plate affixed to the envelope.
comment:
最先看到的Ellis animated cartoon实际上就是用Ellis来作为cachet设计的动画原型。

Monday, August 8, 2011

Say what I can say

By Rui Chen

我很喜欢这个标题,这表示,我的能力确实很有限。

有种躁动在心头涌动,让我感受不到风的清凉,我很想用电脑记录点什么,张望着,并没有电源的接口。我开始有些紧张,怀揣着手机准备打电话,又或是想象着自己就矗立在崖谷的对面,希冀自己也能吼上两嗓子,来宣泄心中的抑郁。但电话的那头朋友们都在忙碌着各自的“忙碌”,快节奏的生活也无法让他们抽身来静静地,细细地聆听我的苦闷;而身旁放眼尽是屋舍俨然,时时的丛木窸窣,却也能分明是一只只调皮的松鼠。

躁动,夏天,我。

我并不是第一次在一个地方静静的时候会感到一种难以言语的压抑,也不是第一次体会无人倾诉的痛苦,但每每当我移步换地,每每当我踏进清凉的房间,仿佛身体的痛苦,心灵上的折磨尽可在别人对我的信息传播之中消失的无影无踪。我也有些怀疑了,仿佛就像是身上带有了救生圈,再也不会感受到呛鼻的、苦涩的海水;嬉笑着竟也能直面那一阵阵的浪花。

可是,我经常不是一个人在这么想。尽管也有着一些生活的经验和独断的认识、想法,但却也受到旁人忠告的一次次冲击。仿佛就是一直用着二维的眼力看着惊艳的avatar。生活之于我也算是一种神奇,而我也常常惊叹自己过人的遗忘力与忍受力。我总是不敢轻易地闭上双眼,总是两腿盘起、端坐,不敢冥想,甚至是防空,生活的细节都被我尽力地挽留,无论是辛苦还是快乐,它们都是真实的。但当我厌倦不堪,眼皮直跳,我却也只能是屈服于身体,让自己在不停的变换中取得平衡。

我,黑夜,梦。

梦既是开始也是归宿。
当大幕拉起,
各人做起了主角,
真实、虚妄
在无言无色的幕布之下
尽显萎靡。

梦,企及的完满,
主角、摄影、导演。
梦,忧伤的遗憾,
近乎描白似的被动。

当我想抓住青春,
映入的却只是苍老,
当我想选择离开,
身体的震颤却也隐喻着某种真实。

总之在结尾有些不舍,
仿佛原本就知道那是个梦。
如果只是在拐角,
也许我们会沿着路口一直走下去。
走下去。

也许这就是生活,
伴随着真实的呼吸,
现实和虚妄都在无处不在的延伸。
但当一天虚妄都离开,
梦也不再亲近,
仿佛单调的生活却也从来不曾有过这般色彩,
我在哪里。
我不知道。

其实梦并不总是要降临在黑夜,其实梦也没有那么的骇人,其实梦也不一定都是没有色彩,没有声音,没有道具的。但就像say what I can say一样,梦也是如此,我只能梦到那些。

我并不是能很好地平衡好做什么样的梦和怎么做梦二者之间的关系,但我却也能特别的珍惜梦所带给我的一些别样的惊喜,只可惜梦境就是梦境,它不会有着生命的真实互动,也不会存在能逻辑严谨的延续与连贯,在梦中,我有时候也是个追逐者。也许梦带给我的就是一种体验。

我曾经问过别人,如果能像黑客帝国一样放弃现实的体验,转而追求另类的真实,你会做出何样的选择。每个人都会在我的描述之中,好不犹豫地选择当下的生活,并非是我的描述有任何的问题,或者是我个人的人品需要打上问号,全都是拜主人公Neo所赐,一个凌驾于游戏规则至上,甚至本身就是游戏规则的制定者,让我们看到的尽是生活是一种直白的恶心。人本身的自由倾向让选择变得毫无意义,而这也让我想起了很久以前的一句话,当人们将知识探索穷尽,研究走向终极,大概也就是人类的毁灭之时。

温度,色彩

作为灵长类的终极,在达尔文时代之前,人们总是拒绝与动物发生干系,甚至不认为自己也是动物的一部分。而人们也确实有理由如此骄傲,人脑的结构如此复杂,很惊人的一个创造就是产生出了基于语言的第二信号系统。这种抽象改造的能力,让温度和色彩在我们的心中发生的奇妙的效应。有时候这种心理上的快慰,让我们通过双眼从现实之中抽身寻求心灵上的宽慰。很多的时候,当我有了某种烦劳,只需要静静地独处、享受一阵清凉,生活的快意似乎也就蕴含在这种无忧无虑之中了。

当玻璃隔着两重的世界,置身窗内,仿佛一切都可以淡然,静默之中,微风拂过枝梢,望望远边的云彩,我想,生活之于我的恩惠也就是在敞亮的、惬意的房间之中享受独我的灵境。

Wednesday, August 3, 2011

Dream a dream

By Rui Chen

There is a famous Chinese saying goes like long night brings about dreams(Ye chang meng duo in Chinese).

As a child, it is often the case that I have to be reconciled to the dreams, even the nightmares. At that time, I was a moving boy that you can find me settled down to read a long book, even the classic literature. All I can be attracted by are some legendary short stories excerpt from one's autobiography, like the famous Norway's national hero Roald Amundse with his English competitor. Also there is a series of fourteen short stories named Adventure Series by Willard Price, which depicts the wonderful adventure experience encountered by the two teenage zoologists Hal and Roger Hunt all over the world. They did not only broaden my scope and knowledge, but also inspire me to explore more on the fancy and unknown things. You know, that is a kid's nature.

With some blur and opaque ideas of deaths(I do not know how I exactly get in touch with the DEATH concept, but I am actually frightened by a disease at around nine years old), I am aware I may go to the same fate cycle sooner or later. So nightmares become a shadow in my mind, especially I have to move to my own bedroom at almost the same year. My parents know that one day I have to face my own problem, and sleeping alone is just a small trial. But something just starts to happen, the wired ideas brought about the ghosts and witches when all the lights go black. That's probably the first tough time in my life. Every night I have to be reconciled to the nightmares. I do not know why I had so many bad dreams then. But I just didn't like them much; it seems I was always the prey by the various enemies. Even after I can try my best to find the best place, or I can use the superpower to jump the multiple storeys, I was still definitely chased. By then, I got totally kicked out and was awake in stirring mood.

It was just a dream. Like any other kids would told themselves after nightmares, I did comfort myself once and once again. But out of a sudden, I came up with a great idea that I should become one of them so that they may not pay great attention to this nobody. It really works. The nightmares would not become a serious problem since then.

That's just the first expressive touch with dreams during my childhood.

Tuesday, August 2, 2011

Makefile basics

By Rui Chen

--Makefile is really a broad topic, if need more, check the book Autotools.

Reading digest from Makefile tutorial(in Chinese)

每個Makefile中都應該寫一個清空目標文件(.o和執行文件)的規則,這不僅便於重編譯,也很利於保持文件的清潔。這是一個「修養」(呵呵,還記得我的《編程修養》嗎)。一般的風格都是:
clean:
 rm edit $(objects)
更為穩健的做法是:
.PHONY : clean
clean :
 -rm edit $(objects)
前面說過,.PHONY意思表示clean是一個「偽目標」,。而在rm命令前面加了一個小減號的意思就是,也許某些文件出現問題,但不要管,繼續 做後面的事。當然,clean的規則不要放在文件的開頭,不然,這就會變成make的默認目標,相信誰也不願意這樣。不成文的規矩是——「clean從來 都是放在文件的最後」。
上面就是一個makefile的概貌,也是makefile的基礎,下面還有很多makefile的相關細節,準備好了嗎?準備好了就來。

Part 2:
如果我們想定義一系列比較類似的文件,我們很自然地就想起使用通配符。make支援三個通配符:「*」,「?」和「~」。這是和Unix的B-Shell是相同的。
波浪號(「~」)字元在文件名中也有比較特殊的用途。如果是「~/test」,這就表示當前用戶的$HOME目錄下的test目錄。而 「~hchen/test」則表示用戶hchen的宿主目錄下的test目錄。(這些都是Unix下的小知識了,make也支援)而在Windows或是 MS-DOS下,用戶沒有宿主目錄,那麼波浪號所指的目錄則根據環境變數「HOME」而定。
通配符代替了你一系列的文件,如「*.c」表示所以後綴為c的文件。一個需要我們注意的是,如果我們的文件名中有通配符,如:「*」,那麼可以用轉義字元「\」,如「\*」來表示真實的「*」字元,而不是任意長度的字元串。


另給一個變數使用通配符的例子:
a. 列出一確定文件夾中的所有」.c"文件
objects := $(wildcard *.c)
b. 列出(a)中所有文件對應的".o"文件,在(c)中我們可以看到它是由make自動編譯出的。
$(patsubst %.c,%.o,$(wildcard *.c))
c. 由(a)(b)兩步,可寫出編譯並鏈接所有「.c"和」.o"文件
objects := $(patsubst %.c,%.o,$(wildcard *.c))
 foo : $(objects)
        cc -o foo $(objects)  
這種用法由關鍵字「wildcard」,「patsubst"指出,關於Makefile的關鍵字,我們將在後面討論。 


偽目標最早先的一個例子中,我們提到過一個「clean」的目標,這是一個「偽目標」,
clean:
 rm *.o temp
正像我們前面例子中的「clean」一樣,既然我們生成了許多文件編譯文件,我們也應該提供一個清除它們的「目標」以備完整地重編譯而用。 (以「make clean」來使用該目標)
因為,我們並不生成「clean」這個文件。「偽目標」並不是一個文件,只是一個標籤,由於「偽目標」不是文件,所以make無法生成它的 依賴關係和決定它是否要執行。我們只有通過顯式地指明這個「目標」才能讓其生效。當然,「偽目標」的取名不能和文件名重名,不然其就失去了「偽目標」的意 義了。
當然,為了避免和文件重名的這種情況,我們可以使用一個特殊的標記「.PHONY」來顯式地指明一個目標是「偽目標」,向make說明,不管是否有這個文件,這個目標就是「偽目標」。
.PHONY : clean
只要有這個聲明,不管是否有「clean」文件,要運行「clean」這個目標,只有「make clean」這樣。於是整個過程可以這樣寫:
.PHONY : clean
clean :
 rm *.o temp
偽目標一般沒有依賴的文件。但是,我們也可以為偽目標指定所依賴的文件。偽目標同樣可以作為「默認目標」,只要將其放在第一個。一個示例就是,如果 你的Makefile需要一口氣生成若干個可執行文件,但你只想簡單地敲一個make完事,並且,所有的目標文件都寫在一個Makefile中,那麼你可 以使用「偽目標」這個特性:




多目標Makefile的規則中的目標可以不止一個,其支援多目標,有可能我們的多個目標同時依賴於一個文件,並且其生成的命令大體類似。於是我們就能把 其合併起來。當然,多個目標的生成規則的執行命令不是同一個,這可能會可我們帶來麻煩,不過好在我們可以使用一個自動化變數「$@」(關於自動化變數,將 在後面講述),這個變數表示著目前規則中所有的目標的集合,這樣說可能很抽象,還是看一個例子吧。
bigoutput littleoutput : text.g
 generate text.g -$(subst output,,$@) > $@
上述規則等價于:
bigoutput : text.g
 generate text.g -big > bigoutput
littleoutput : text.g
 generate text.g -little > littleoutput
其中,-$(subst output,,$@)中的「$」表示執行一個Makefile的函數,函數名為subst,後面的為參數。關於函數,將在後面講述。這裏的這個函數是替換字元串的意思,「$@」表示目標的集合,就像一個數組,「$@」依次取出目標,並執于命令。


 This page is important to understand default variables.

我們可以把隱含規則中使用的變數分成兩種:一種是命令相關的,如「CC」;一種是參數相的關,如「CFLAGS」。下面是所有隱含規則中會用到的變數:
1、關於命令的變數。
AR
函數庫打包程式。默認命令是「ar」。
AS
彙編語言編譯程式。默認命令是「as」。
CC
C語言編譯程式。默認命令是「cc」。
CXX
C++語言編譯程式。默認命令是「g++」。
CO
從 RCS文件中擴展文件程式。默認命令是「co」。
CPP
C程式的預處理器(輸出是標準輸出設備)。默認命令是「$(CC) –E」。
FC
Fortran 和 Ratfor 的編譯器和預處理程式。默認命令是「f77」。
GET
從SCCS文件中擴展文件的程式。默認命令是「get」。
LEX
Lex方法分析器程式(針對於C或Ratfor)。默認命令是「lex」。
PC
Pascal語言編譯程式。默認命令是「pc」。
YACC
Yacc文法分析器(針對於C程式)。默認命令是「yacc」。
YACCR
Yacc文法分析器(針對於Ratfor程式)。默認命令是「yacc –r」。
MAKEINFO
轉換Texinfo源文件(.texi)到Info文件程式。默認命令是「makeinfo」。
TEX
從TeX源文件創建TeX DVI文件的程式。默認命令是「tex」。
TEXI2DVI
從Texinfo源文件創建軍TeX DVI 文件的程式。默認命令是「texi2dvi」。
WEAVE
轉換Web到TeX的程式。默認命令是「weave」。
CWEAVE
轉換C Web 到 TeX的程式。默認命令是「cweave」。
TANGLE
轉換Web到Pascal語言的程式。默認命令是「tangle」。
CTANGLE
轉換C Web 到 C。默認命令是「ctangle」。
RM
刪除文件命令。默認命令是「rm –f」。
2、關於命令參數的變數
下面的這些變數都是相關上面的命令的參數。如果沒有指明其默認值,那麼其默認值都是空。
ARFLAGS
函數庫打包程式AR命令的參數。默認值是「rv」。
ASFLAGS
彙編語言編譯器參數。(當明顯地調用「.s」或「.S」文件時)。
CFLAGS
C語言編譯器參數。
CXXFLAGS
C++語言編譯器參數。
COFLAGS
RCS命令參數。
CPPFLAGS
C預處理器參數。( C 和 Fortran 編譯器也會用到)。
FFLAGS
Fortran語言編譯器參數。
GFLAGS
SCCS 「get」程式參數。
LDFLAGS
鏈接器參數。(如:「ld」)
LFLAGS
Lex文法分析器參數。
PFLAGS
Pascal語言編譯器參數。
RFLAGS
Ratfor 程式的Fortran 編譯器參數。
YFLAGS
Yacc文法分析器參數。
==========
3、自動化變數
在上述的模式規則中,目標和依賴文件都是一系例的文件,那麼我們如何書寫一個命令來完成從不同的依賴文件生成相應的目標?因為在每一次的對模式規則的解析時,都會是不同的目標和依賴文件。
自動化變數就是完成這個功能的。在前面,我們已經對自動化變數有所提涉,相信你看到這裏已對它有一個感性認識了。所謂自動化變數,就是這種變數會把模式中所定義的一系列的文件自動地挨個取出,直至所有的符合模式的文件都取完了。這種自動化變數只應出現在規則的命令中。
下面是所有的自動化變數及其說明:
$@
表示規則中的目標文件集。在模式規則中,如果有多個目標,那麼,"$@"就是匹配于目標中模式定義的集合。
$%
僅當目標是函數庫文件中,表示規則中的目標成員名。例如,如果一個目標是"foo.a(bar.o)",那麼,"$%"就是 "bar.o","$@"就是"foo.a"。如果目標不是函數庫文件(Unix下是[.a],Windows下是[.lib]),那麼,其值為空。
$< 
依賴目標中的第一個目標名字。如果依賴目標是以模式(即"%")定義的,那麼"$<"將是符合模式的一系列的文件集。注意,其是一個一個取出來的。
$?
所有比目標新的依賴目標的集合。以空格分隔。
$^
所有的依賴目標的集合。以空格分隔。如果在依賴目標中有多個重複的,那個這個變數會去除重複的依賴目標,只保留一份。
$+
這個變數很像"$^",也是所有依賴目標的集合。只是它不去除重複的依賴目標。
$*
這個變數表示目標模式中"%"及其之前的部分。如果目標是"dir/a.foo.b",並且目標的模式是"a.%.b",那麼,"$*"的值就是"dir /a.foo"。這個變數對於構造有關聯的文件名是比較有較。如果目標中沒有模式的定義,那麼"$*"也就不能被推導出,但是,如果目標文件的後綴是 make所識別的,那麼"$*"就是除了後綴的那一部分。例如:如果目標是"foo.c",因為".c"是make所能識別的後綴名,所以," $*"的值就是"foo"。這個特性是GNU make的,很有可能不兼容於其它版本的make,所以,你應該盡量避免使用"$*",除非是在隱含規則或是靜態模式中。如果目標中的後綴是make所不 能識別的,那麼"$*"就是空值。
當你希望只對更新過的依賴文件進行操作時,"$?"在顯式規則中很有用,例如,假設有一個函數庫文件叫"lib",其由其它幾個object文件更新。那麼把object文件打包的比較有效率的Makefile規則是:
lib : foo.o bar.o lose.o win.o
           ar r lib $?
在上述所列出來的自動量變數中。四個變數($@、$<、$%、$*)在擴展時只會有一個文件,而另三個的值是一個文件列表。這七個自動化變數 還可以取得文件的目錄名或是在當前目錄下的符合模式的文件名,只需要搭配上"D"或"F"字樣。這是GNU make中老版本的特性,在新版本中,我們使用函數"dir"或"notdir"就可以做到了。"D"的含義就是Directory,就是目錄,"F"的 含義就是File,就是文件。

Sunday, July 31, 2011

About color

By Rui Chen

If we want to express the joy of our lives, we would probably choose the expression "The life is colorful". But what I did not realize before is that the Americans can have so much fun to create the various kinds of colors.

The motivation leading me to take a deep look at the painting colors is pretty simple, we need some type of painting oil to cover the unrecoverable rust and something made by oil smoke. After we going to Walmart, I am attracted by the Glidden colors. Even after going to Home Depot, the more and various colors can be found by the Brand of BHER.

Different colors can be found via pretty names like afternoon tea and cappuccino white. And finally we choose white on white for the toilet ceramics and white refrigerator, and natural wicker for the sort of yellow-white wall. We are kind of proud of ourselves what we nearly make it to cover the uncoverable marks.

As the various names, either loverly or plain straight-forward, they are just some help on distinguish the different colors. If you have specific color in your mind, maybe the digital computer can help you visualize it. That's also the way the Hom Depot guys do, they pick up the name and recognize the color components, and then use the digital computer to control the color mix process. Then you can enjoy your won color at your lovely home.

Hope one day I can use this knowledge to build my home!

Saturday, July 30, 2011

llvm patched with systemc library

By Rui Chen

In this article, I will get into the IR generated by the llvm-g++ along with the systemc library.

Understand the installation flow of PinaVM
The project is to mimic the idea of PinaVM, but I have to repeat the first few steps to understand the relationship between llvm-g++ and systemc library. Check out the /doc/install document for details.

One limit is that you have to use LLVM 2.6, which may suffer incompatible features with the latest version.

Start from autoconf part, which is Step 3 in the manual
1. autoconf
What the autoconf do is to seek a file named configure.ac (or configure.in for backward compatibility), and then runs the M4 macro processor to create the configure script.

2. configrue
command ./configure --with-tools-dir=$DOWNLOAD
Part of the output:
configure: Summary of variables:

DOWNLOAD_AND_COMPILE_DIR: /home/chenrui/Desktop/pinavm/download
INSTALL_PATH_LLVM: /home/chenrui/Desktop/pinavm/lib/llvm-2.7
INSTALL_PATH_LLVMGCC: /home/chenrui/Desktop/pinavm/lib/llvm-gcc
INSTALL_PATH_SYSTEMC_LLVM: /home/chenrui/Desktop/pinavm/lib/systemc-2.2.0-llvm
INSTALL_PATH_SYSTEMC_GCC: /home/chenrui/Desktop/pinavm/lib/systemc-2.2.0-gcc

configure: creating ./config.status
config.status: creating config.mk
config.status: creating config.sh
The code in the configure.ac file:
DOWNLOAD_AND_COMPILE_DIR="${TOOLS_DIR}/download"
INSTALL_PATH_LLVM=${TOOLS_DIR}/lib/llvm-2.7
INSTALL_PATH_LLVMGCC=${TOOLS_DIR}/lib/llvm-gcc
INSTALL_PATH_SYSTEMC_LLVM=${TOOLS_DIR}/lib/systemc-2.2.0-llvm
INSTALL_PATH_SYSTEMC_GCC=${TOOLS_DIR}/lib/systemc-2.2.0-gcc
So the "--with-tools-dir" means specifying the $DOWNLOAD directory for ${TOOLS_DIR}.

Another part of configure.ac:
# Defining files to be generated
AC_CONFIG_FILES([config.mk
                 config.sh])
Then config.mk and config.sh will be generated.
NOTE: normally, AC_CONFIG_FILES([Makefile]) is used(ref link).

Motivation to use SystemC and LLVM
I have done a simple literal translator with SystemC-to-VHDL translator with ANTLR, and I think it needs tremendous effort to crack the whole C++ grammar.
Besides, sc2v and gsc and many tools are based on their self-made compilers, which suffers a severe issue that only a small set of systemc grammar can be compiled.

Based on this understanding, it is very important to immigrate the translation method from ANTLR literal way to llvm-g++ based.


Generate simple backend first.
Another idea about working with C++ & Systemc with LLVM is that I can generate a VHDL experiment backend for test first and then connect it to the systemc frontend.

Friday, July 29, 2011

systemc: form installation to run

By Rui Chen

My OS is Ubuntu 11.04, and the installed systemc is 2.2.0.

Here are the command lines to install the package:
1. Goto the OSCI website, and download the latest package.
2. Create a separate folder named /usr/local/systemc-2.2
3. Go seeking the cpp file with the directory like  systemc-2.2.0/src/sysc/utils/sc_utils_ids.cpp, and then add two statements into the file:
#include "string.h"
#include "cstdlib"
using namespace std;
4. Go to the systemc-2.2 folder, and type
xx/systemc-2.2.0/configure
sudo make
sudo make install
The separate installation folder can also avoid the name collision if installation conducted in the same folder.

Verification of the installation
The example file is adopted here(ref), while the command line doesn't work, even the echo $SYSTEMC_HOME didn't show the directory for systemc.
So, I change the command to the absolute address as shown below:


reference for running the systemc program
http://linuxhao.com/Linux/doc/Linux_doc.asp?id=2938
If we change all the addresses to the absolute ones, then we can make it. The final command lines are below:
export SYSTEMC=/home/chenrui/Desktop/llvm/systemc-2.2.0 # chenrui is my computer name, I have checked that the systemc.h is in the systemc-2.2.0 folder.
g++ -I $SYSTEMC/include -L $SYSTEMC/lib-linux -o example.o example.cpp -lsystemc -lm
Besides, I have also changed the line 2 of example.cpp so that I can find the systemc library.
And then, it is pretty sure that you can "Hello World." output.

What a wonderful day.

Wednesday, July 27, 2011

GSC工具分析

作为我研究过的两个典型开源SystemC工具之一,GSC被认为比仰仗brutal force的sc2v的工具要强,而事实上,sc2v需要的仅仅是flex/bison,而在GSC则是基于一个C++ compiler framework(keystone)构建得到的,而且yacc的版本变为了btyacc,与此同时,它还引入了一个tree walker 工具,treecc。

详细内容参见
Project GSC -- 代码分析 email

Tuesday, July 26, 2011

心理学的blog辑录

社会发展越来越快,劳苦大众的心理疾病越来越多,读读心理学的Blog也还是挺有意思的,并且比政论的文章来的有意思。

Guide to psychology blogs 07年的总结 link 中文版
关于最佳blog最新的介绍 40-superb-psychology-blogs

在欧美心理学应该是一个较为发达的产业,同时,在我看来,它非常具有文科的色彩,与病人交流和对疾病的表述都说明了这一点。

下面还有一些lists可以选择合适的topics阅读
100-best-blogs-for-psychology-students/
101_fascinating_brain_blogs
top-100-fascinating brain blogs
--------
在众多的心理疾病中,最吸引我的还是personality disorder, 因为它是和成长有关系的,并且还不一定会爆发,可能会潜藏于人的心中一辈子。
bazhua的关于BPD的介绍link
台湾同胞的文章,文章1文章2(还有一些常见的心理疾病,当然文章比较老一些)

wiki上给出了来自WHO(world health organization)关于PD的分类,

ICD-10 groups for(F60.) Specific personality disorders :
Cluster ACluster BCluster C(F60.8) Other specific personality disorders

Monday, July 25, 2011

GSDII , EDIF 等ASIC流程中的格式

下面是集成电路中常用的文件数据格式。

GDSII:
它是用来描述掩模几何图形的事实标准,是二进制格式,内容包括层和几何图形的基本组成。

CIF:
(caltech intermediate format),叫caltech中介格式,是另一种基本文本的掩模描述语言。

LEF:
(library exchange format),叫库交换格式,它是描述库单元的物理属性,包括端口位置、层定义和通孔定义。它抽象了单元的底层几何细节,提供了足够的信息,以便允许布线器在不对内部单元约束来进行修订的基础上进行单元连接。

包含了工艺的技术信息,如布线的层数、最小的线宽、线与线之间的最小距离以及每个被选用cell,BLOCK,PAD的大小和pin的实际位置。cell,PAD的这些信息由厂家提供的LEF文件给出,自己定制的BLOCK的LEF文件描述经ABSTRACT后生成,只要把这两个LEF文件整合起来就可以了。

DEF:
(design exchange format),叫设计交换格式,它描述的是实际的设计,对库单元及它们的位置和连接关系进行了列表,使用DEF来在不同的设计系统间传递设计,同时又可以保持设计的内容不变。DEF与只传递几何信息的GDSII不一样。它还给出了器件的物理位置关系和时序限制等信息。

DEF files are ASCII files that contain information that represent the design at any point during the layout process.DEF files can pass both logical information to and physical information fro place-and-route tools.

* logical information includes internal connectivery(represented by a

netlist),grouping information and physical constraints.

* physical information includes the floorplan,placement locations and

orientations, and routing geometry data.

SDF:
(Standard delay format),叫标准延时格式,是IEEE标准,它描述设计中的时序信息,指明了模块管脚和管脚之间的延迟、时钟到数据的延迟和内部连接延迟。

DSPF、RSPF、SBPF和SPEF:
DSPF(detailed standard parasitic format),叫详细标准寄生格式,属于CADENCE公司的文件格式。

RSPF(reduced standard parasitic format),叫精简标准寄生格式,属于CADENCE公司的文件格式。

SBPF(synopsys binary parasitic format),叫新思科技二进制寄生格式,属于SYNOPSYS公司的文件格式。

SPEF(standard parasitic exchange format),叫标准寄生交换格式,属于IEEE国际标准文件格式。

以上四种文件格式都是从网表中提取出来的表示RC值信息,是在提取工具与时序验证工具之间传递RC信息的文件格式。

ALF:
(Advanved library format),叫先进库格式,是一种用于描述基本库单元的格式。它包含电性能参数。

PDEF:
(physical design exchange format)叫物理设计交换格式。它是SYNOPSYS公司用在前端和后端工具之间传递信息的文件格式。描述了与单元层次分组相关的互连信息。这种文件格式只有在使用SYNOPSYS公司的Physical Compiler工具才会用到,而且.13以下工艺基本都会用到该工具。

TLF
TLF文件是描述cell时序的文件,标准单元的risetime,hold time,fall time都在TLF内定义。时序分析

-------------------
EDIF介绍 zz:谈谈EDIF

说到LPM(Library of Parameterized Modules),就一定要谈谈EDIF(Electronic Design Interchange Format)。EDIF文件是EDA厂商之间和EDA厂商与IC厂商之间传递设计信息的文件格式。LPM最初是作为EDIF标准的附件出现的。

    EDIF和LPM的标准化过程:

    1988年,ANSI/EIA-548: Electronic Design Interchange Format (EDIF), Version 2.0.0。

    1990年,LPM标准提出,供EIA审核。

    1993年,EIA 618: Electronic Design Interchange Format (EDIF) Version 3 0 0 Level 0 Reference Manual,LPM作为EDIF标准的附件,成为EI


A的一个过渡标准。
    1995年,EIA PN 3714: Library of Parameterized Modules (LPM) Version 201。

    1996年,EIA-682: EDIF Version 400 (EIA-682-96) Electronic Design Interchange Format。

    1999年,EIA/IS-103A: Library of Parameterized Modules (LPM) Version 2.0。

    从年代上看来,88年到90年前后恰好是半定制设计风格超越全定制设计风格,成为VLSI芯片设计主流的时期。LPM标准的提出可能正是响应了半定制设计的需求。

    EDIF文件是EDA工具之间传递信息的标准格式。画过电路原理图和PCB的朋友一定知道,原理图文件绘制完毕后需要“生成网表”,进行 PCB布局布线之前先要“引入网表”,这样才能建立原理图文件和PCB文件之间的“逻辑映射关系”。EDIF文件就是网表文件的一种格式。在很多情况下, 原理图文件中的模块图形和PCB文件中的“封装”是一一对应的,这种“物理映射关系”就是通过“库文件”建立的。“库文件”包含了原理图模块的名称和图 形,也包含了封装文件的名称和图形,这样一来,“物理映射关系”就建立起来了。在不同的EDA工具之间,比如Protel和Cadence还有PowerPCB,逻辑映射关系是很容易互相通用的,但是由于支持不同的“库文件”,物理映射关系往往就建立不起来。

    在IC设计领域(包括PLD设计),EDIF文件就遇到了类似的问题:综合工具和实现工具必须达成一致。在LPM标准提出之前,这一点很难实现,毕竟IC设计领域存在太多的实现工艺和EDA工具。

    在LPM标准提出之前,对于某些逻辑的描述没有统一的标准,描述方法都是工艺相关(Technology dependent)的,所以综合工具生成的EDIF文件不具备可移植性。在采用了LPM标准之后,对于LPM库中包含的逻辑,所有的综合工具都采用同一 种行为描述方法,生成相同的EDIF文件,实现设计输入和网表的正确映射;实现工具包含各自工艺库与LPM库之间的唯一映射关系,从而能够“读懂”包含 LPM描述的EDIF文件,实现网表和工艺实现之间的正确映射。这样一来,EDID文件在不同的实现工具之间移植就不成问题了。(LPM并不是唯一的解决 方法,比如现在的EDA工具之间往往互相支持对方特定的库文件和网表格式,尤其像Synplicity这样的专业EDA公司,同时支持许多公司的器件和网 表格式和宏单元;而Altera和Xinlinx就不能互相支持)

    在这一过程中体现的原理是:通过增加一个映射层次,把一次映射关系转化为两次映射关系,两次映射关系的中介——包含LPM描述的EDIF文件——就具备了可移植性。

更多更详细的关于EDIF的内容,参见这里:EDIF 格式


FPGA和ASIC介绍

这篇文章介绍的比较综合,其中既讲到了仿真和综合,也谈到了工具,三颗星的文章吧,一些东西都已经看到过了。
Synopsys公司提供的综合工具DC把综合分为三个步骤进行:synthesis=translation+mapping+optimization。 
从这个综合的定义上看,translation实际上只能算是一小步。

Sunday, July 24, 2011

enum的翻译

By Rui Chen

VHDL 与systemc在enum的定义上有很大的不同。

VHDL-ref
Important Notes

  • It is illegal to define an enumeration type with a range.
  • It is assumed that the values are defined in ascending order. For this reason it is recommended to order the literals in such a way that the default value is the first one (it is referred to through the attribute 'left').
  • Objects of enumeration types are typically synthesizeable.
所以,VHDL的

Saturday, July 23, 2011

二义性

By Rui Chen

人类的活动不可否认都是伴随着人类的逻辑活动应运而生的,有对有错。很有意思的是,每次创造或者说是整理的较量都让我能深刻地感受到这种活动在走向完整时所作出的巨大努力,海森堡曾说过,“真理的对面往往是更大的真理”,他将真理同一化了。而就像哲学关于世界本原有着“一元论”,“二元论”以及“多元论”的理解,科学哲学在丰富和发展的过程中也在体会同样的经历,当然,总总言论的较量都是一种绝对化的产物,但也饱含各自的态度和思想。

上面这段引子旨在讲讲最近看到的Rube Goldberg Machine, 一种走向奥卡姆剃刀原则背面的Machine。仔细想想,这种Machine看似很fancy,但也确实是缺乏它必要的实用性,一件很简单的事情却要细分为这么多的步骤,然后,每一步走要设计的很精巧,搭配的要恰到好处才能完成最后的目标,如果是稍有差池,整个设计可以说是前功尽弃,就像OK Go制作的This Too Shall Pass每个演员身上厚厚的油漆就可以体会得到后面的炮击不知道演过多少次。

但为什么会去讲自己点子融入其中,创造出更多好玩的Rube Goldberg Machine呢?原因也没有那么复杂就是好玩,有兴趣。并不否认,这确实是很重要的一点,但我却并不仅仅这么看他们的意义,而让我无法释怀的在历史上中国也有很多次,简单有效的发明。

最为著名的是李约瑟提到的中国的风力手推车,一个轮子的设计,大家可能只会是在电视上的杂技节目中看到,而李约瑟却给它冠上了顶级设计的美誉,而现在他在那里。相反,在斯堪的纳维亚半岛上的壁画告诉我们,几千年的欧洲人就为他们的代步工具加上了方向盘,而这个看似多余的设计为我们数千年之后的汽车埋下了深深的伏笔。可能有人也会为这发展眼光打上深深的问号,这个时间也太长了。

而下面的故事也能给点启示(这个故事也经常以惯性思维的面孔示人),摘引如下:
1435毫米的轨距为国际上通用的标准轨距早期铁路是由制造电车的人按电车的轮距设计的,电车轮距又是根据英国马车的轮距设计的,而英国马车的轮距是从古罗马那里来的,古罗马马车的车距是根据两匹马屁股的宽度来决定的。也就是说古罗马两匹马的屁股的宽度最终决定了现代铁路铁轨之间的宽度。 
现代铁路的铁轨间距是4英尺8点5英寸,铁轨间距采用了电车轮距的标准,而电车轮距的标准则沿袭了马车的轮距标准。马车的轮距为何是4英尺8点5英寸?原来,英国的马路辙迹的宽度是4英尺8点5英寸。如果马车改用其他尺寸的轮距,轮子很快就会在英国的老马路上撞坏。 
标准轨由最先使用铁路的英国提出。设计及建造史托顿及达灵顿铁路的英国工程师罗拔史提芬逊提出4呎8½ 吋的轨距,并成功说服火车制造商生产4呎8½ 吋(即1435毫米)轨距的机车及车辆。由于史提芬逊成功设计的铁路是众人模仿的对像,亦使这轨距变得流行。1845年英国皇家专员建议用4呎8½ 吋作为标准轨距。1846年英国国会通过法案,要求将来所有的铁路都使用标准轨。除了英国的大西部铁路(Great Western Railway)是使用宽轨之外,英国的主要铁路都是标准轨。大西部铁路亦于1892年改成标准轨。
英国马路的辙迹宽度又从何而来?这可以上溯到古罗马时期。整个欧洲(包括英国)的老路都是罗马人为其军队铺设的,4英尺8点5英寸正是罗马战车的宽度。罗马战车的宽度又是怎么来的?答案很简单,它是牵引一辆战车的两匹马的的总宽度。 
段子到这里还没有结束。美国航天飞机的火箭助推器也摆脱不了马的纠缠———火箭助推器造好之后要经过铁路运送,而铁路上必然有一些隧道,隧道的宽度又是根据铁轨的宽度而来。代表着尖端科技的火箭助推器的宽度,竟然被两匹马的的总宽度决定了。而这些隧道的宽度只比火车轨道 的宽度宽了一点点,然而我们不要忘记火车轨道的宽度是由马的屁股的宽度所决定的。 因此,我们可以认为:今天世界上最先进的航天火箭和洲际导弹运输系统的设计,是两千年前便由 两匹马的屁股宽度决定l了。 这就是路径依赖,看起来有几许悖谬与幽默,但却是事实。
上面这个故事一方面说明了大众惯性思维(事实上在工程设计中,这也可以算是前向兼容)的强大,但另外一方面也说明在设计中的局限,如果总是以一种就事论事的态度来解决问题(当然毋庸置疑这是解决问题最快的途径),很少去想想这件事情所带来的危害,有时候结果还是挺严重的。

就像我在和别人交流时说的(当然可能这只是一种文化趣味),
我的理解是,针对特定问题是应该使用奥卡姆剃刀原则,但是,如果是面向一类问题,或者是未知的问题,奥卡姆剃刀就不适用了。所以,二者的区分应该在于前者功利,而后者是纯粹的爱好。纯粹的爱好往往可以将认识引导到一个比较有趣的层次。~~当然,社会的包容性也应该更强一些才行·,这样才能促成多元的文化
扩展阅读:
1. 软件设计中的设计模式和重构
2. 制度设计

科学把妹法之二

By Rui Chen

//这篇文章只能说是在看了松鼠会上的文章之后的小节。

相信这篇应该是在科学把妹法之后,再次在中文世界用一些外国的心理实验来规范讨论爱情理论的文章了。科学恋爱指南

之所以还能将这个谈恋爱纳入科学的范畴,就是因为有的心理教授的研究确实在这些网站上得到了成功,下面的Helen Fisher就是chemistry.com的chief scientific advisor。而这个网站也在众多的dating 网站中排到了第二位(link)。遗憾的是《科学恋爱指南》一文并没有提到match.com的相关研究(这里提到chemistry.com是match.com的姐妹网站(link))。

有趣的是match.com里的blog除了Dr. Fisher之外,另一位记者Whitney Casey也出过自己的书The Man Plan: Drive Men Wild-- Not Away (Perigee),但amazon上的评价却是相当极端的两种对立意见。(大部分人还是持反对观点的,如果没有套说得过去的理论,光靠表面文章,记者在这个上面还是都不过科学背景出身的Helen Fisher)

既然Dr. Fisher老师是如此一位了得的老师,自然收集她的作品也是不在话下,她的三本(amazon 专页)好书分别为:

Why Him? Why Her?: Finding Real Love By Understanding Your Personality Type(Jan, 2010)
WHY WE LOVE: The Nature and Chemistry of Romantic Love(2004)
ANATOMY OF LOVE: The Natural History of Mating, Marriage and Why We Stray(1994)。

然而很遗憾的是这三本书的电子版都很难找到,所以,其观点的入手只能是从书摘和文摘开始。

Neil Clark Warren PhD in Clinical Psychology, 相比于 Helen Fisher, 似乎她应该更对相亲的口味,毕竟算是正统心理学出身。
http://www.amazon.com/Neil-Clark-Warren/e/B001IOFFY8

6 dating advice books for men
http://www.match.com/magazine/article/11923/6-Dating-Advice-Books-For-Men/


书摘
We have many inborn tendencies. Indeed, scientists now believe some 50 percent of the variations in human personality are associated with genetic factors. We inherit much of the fabric of our mind.

Personality is composed of two fundamentally different types of traits: those of character and those of temperament.

Your character traits stem from your experiences.
The balance of your personality is your temperament, all of the biologically based tendencies you have inherited, traits that emerge in early childhood to produce your consistent patterns of feeling, thinking and behaving.

HashMap遍历的两种方式

By Rui Chen
Main ref blog: link
Doc ref: java2 HashMap

遍历HashMap必须要使用到索引变量,而HashMap中可以充当这个用途的只有两个set, entrySet, keySet. 主要参考的blog中对这两种方法进行了比较,参考code 如下:
第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) {     Map.Entry entry = (Map.Entry) iter.next();     Object key = entry.getKey();     Object val = entry.getValue(); } 效率高,以后一定要使用此种方式! 第二种: Map map = new HashMap(); Iterator iter = map.keySet().iterator(); while (iter.hasNext()) {     Object key = iter.next();     Object val = map.get(key); } 效率低,以后尽量少使用! 
作者也对代码效率差异进行了分析,结果如下:
例: HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面请看实例: 
public class HashMapTest { public static void main(String[] args) ...{   HashMap hashmap = new HashMap();   for (int i = 0; i < 1000; i ) ...{    hashmap.put("" i, "thanks");   } 
  long bs = Calendar.getInstance().getTimeInMillis();   Iterator iterator = hashmap.keySet().iterator();     while (iterator.hasNext()) ...{       System.out.print(hashmap.get(iterator.next()));   }   System.out.println();   System.out.println(Calendar.getInstance().getTimeInMillis() - bs);   listHashMap(); } 
  public static void listHashMap() ...{   java.util.HashMap hashmap = new java.util.HashMap();   for (int i = 0; i < 1000; i ) ...{    hashmap.put("" i, "thanks");   }   long bs = Calendar.getInstance().getTimeInMillis();     java.util.Iterator it = hashmap.entrySet().iterator();   while (it.hasNext()) ...{    java.util.Map.Entry entry = (java.util.Map.Entry) it.next();    // entry.getKey() 返回与此项对应的键    // entry.getValue() 返回与此项对应的值    System.out.print(entry.getValue());   }   System.out.println();   System.out.println(Calendar.getInstance().getTimeInMillis() - bs); } } 
对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。 
注:Hashtable的遍历方法和以上的差不多!

Thursday, July 21, 2011

Eclipse的task 标记

By Rui Chen

Eclipse的标记可以帮助定位,同时也有助于文档的管理,是一个不可多得工具,网上的介绍文章也很多,如这篇

eclipse task view from eclipse sdk 3.6.2

Tuesday, July 19, 2011

虚拟机安装RHEL

by Rui Chen

和安装UBUNTU一样,安装RHEL也是有虚拟机和双系统两种模式。前者,便是下载VMWARE workstations,然后像安装应用程序一样进行;而后者,可以是光盘也可以是U盘,也可以是硬盘,但如果是后面两种就需要使用到GRUB,安装好之后双系统的引导也是用GRUB来引导。

1.不能使用文本重写的方式直接对boot.ini进行修改,因为你不知道里面是什么。
深度GHOST C盘通过文件选项的方式并不能看到boot.ini,我的方法是通过 我的电脑-->属性-->高级-->启动与故障恢复编辑-->加入后保存。

2. 到底是C:grldr="GRUB"(ref)还是C:\grldr="grub for RHEL4"(ref),我觉得应该是后者。
修改之后得到,hal.dll 损坏或丢失的错误
不一定是真的丢失了,参考文章,事实上正如文章所分析的只是对应的分区可能不一样。
而根据我的XP还可以启动,也说明这个文件没有损坏。
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS //rdisk(0)指第一块物理硬盘partition(1)指第一分区
[operating systems]
multi(0)disk(0)rdisk(0)partition(1) //rdisk(0)指第一块物理硬盘partition(1)指第一分区\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect
对你的BOOT.INI进行修改将partition(1)都改成partition(2).不要只改一个哦!看清里面有两处partition(1)
通过这段引用,也可以看得清楚,物理硬盘的分区设置决定了能否找到hal.dll,从而成功启动。

3. command line
>kernel (hd0,4)/vmlinuz root=/dev/hda5 注:(d0,4)表示第一个硬盘的第5个分 区,即D:
>initrd (hd0,4)/initrd.img
>boot

6、  在GRUB提示符下输入如下命令行:
   GRUB>reboot (hd0,4)(--这条可以去掉,有问题)   GRUB>kernel /isolinux/vmlinuz   GRUB>inittrd /isolinux/inittrd.img  出处(--补注,最后采用的是这种方法注意GRUB是有错误的  
关于GRUB命令行的解释命令行解释 ,当然由于方法的有效性,并没有在GRUB命令上有太多的纠缠。

4.硬盘分区
在command line的环节中,我的都是(hd0,6),也就不求甚解了。
linux 安装过程中 /BOOT 是什么系统文件类型?EXT3?EXT2?SWAP?
除了swap以外剩下的选项都可以
但是推荐使用ext3或者ext4(如果已经支持的话用ext4)
一楼,可以存在单独的/boot分区哦,用于启动,而且swap和虚拟内存相差很大的,根本不是一回事
二楼,/home分区和/boot分区都是可以单独分也可以不单独分的,而且一般我不喜欢单独分区/home,而是单独分一个随便的区然后目录挂载好了,/home下用ln -s比较好 出处 
分区设计(按照下面的做法实际上就是四个部分,/boot, swap, /(超级根目录), /usr):

swap才8M实在太小了必须是物理内存的1.5到2倍
boot 100M没错
按F2新建一个分区
挂载点:/boot
文件系统:ext3;
大小100M; ;
固定分区大小;
强制主分区;
按F2新建一个分区
挂载点:无;
文件系统:swap;
大小(物理内存1.5~2)倍
按F2新建一个分区
固定分区大小;
根挂在点 /
文件系统:ext3;
大小:10240M; (10G)其实要更加物理硬盘的大小而定
固定分区大小;
按F2新建一个分区
挂载点:/usr
文件系统:ext3;
大小:使用全部剩余容量;
关键就是这几个个目录,

另外一篇讲手动分区的,也提到了自动分区的结果:分区


swap空间大小:
通常情况下,Swap空间应大于或等于物理内存的大小,最小不应小于64M,通常Swap空间的大小应是物理内存(内存条的大小)的2-2.5倍。但根据不同的应用,应有不同的配置:如果是小的桌面系统,则只需要较小的Swap空间,而大的服务器系统则视情况不同需要不同大小的Swap空间。特别是数据库服务器和Web服务器,随着访问量的增加,对Swap空间的要求也会增加,具体配置参见各服务器产品的说明。
swap数量:
Swap分区的数量对性能也有很大的影响。因为Swap交换的操作是磁盘IO的操作,如果有多个Swap交换区,Swap空间的分配会以轮流的方式操作于所有的Swap,这样会大大均衡IO的负载,加快Swap交换的速度。如果只有一个交换区,所有的交换操作会使交换区变得很忙,使系统大多数时间处于等待状态,效率很低。用性能监视工具就会发现,此时的CPU并不很忙,而系统却慢。这说明,瓶颈在IO上,依靠提高CPU的速度是解决不了问题的。SWAP问题
更多关于SWAP的讨论是凭经验的,我的笔记本1.5G内存,swap为512M,使用率很低。
关于分区:这里面关于boot的分区为50-100MB合适。


硬盘的分区是以下规则:
主分区最多只能有四个,扩展分区的名额也在四个里面。
也就是说要么有四个主分区,要么3个主分区和一个扩展分区。
而扩展分区只能有一个,他又可以分为多个逻辑分区,大概最多可以分256个逻辑分区吧,具体的不太清除了。
并且他不能作为一个真正的分区使用,只是一个用来容纳逻辑分区的容器。
在linux下,分区的形式为:
1-4为主分区或者扩展分区,5以后为逻辑分区。
只要发现了5以后的分区存在就可以断定一定有扩展分区存在。
另外1024的限制貌似针对lilo说的,grub应该没有这个问题,呵呵 出处
5.分区之后
百度文摘 不同的是,我选择的是default package

6. 重启
出现了kernel panic - not syncing: Fatal exception
错误代码分析for AS4.6
--无论怎么调整这里都无法通过,前面两句
sys_init_module+0xe9/0x1d0
syscall_call+0x7.0xb
--如果是cent0S 还有其他的解决方案(链接),但是对于dell没有效果,比照下,两者前面的话是不一样的。

另外尝试一下AS5 installation number(AS: advanced platform),因为是已经装过AS4,所以在这里,我只是选择了升级。

usb 1-1 cannot configure #1 error-71

Monday, July 18, 2011

回过头来的XP

by Rui Chen

安装XP的方法很多,当然也就是光盘和U盘,过往有过成功安装WIN7的经验,以为也会同样的简单,就用了U盘。

U盘地安装方法有两种,一种是安装盘,再一种是GHOST。
安装盘需要WIN ISO,以及ULTRAISO,然后写入重启,注意调整BIOS的顺序。

在就是GHOST,前几年比较流行的系统一个是番茄花园,后面就是雨林木风,现在好像是新萝卜花园(我下的是电脑城装机版)比较好一些。选择完系统之后,大家一般的操作就是找个老毛桃的WINPE系统还原工具(ishare 上面是有下的)。针对DELL,需要注意的就是SATA数据访问问题,需要在BIOS选项中修改ACHI to ATA 模式。

当然,上面的两个方法都没有成功,这也说明了XP和WIN 7的巨大区别。

下面的就是使用光盘的方法,也是在ishare上面下的nero mini 9,够用了,然后在刻盘的时候注意选择DVD而非CD(在左上角),刻录过程比较简单。但是,在开始写录之前,那个“结束光盘”选项值得注意(不用关心,都是一次写入的,准备好大小合适的空光盘,尽量不要用DVD刻录CD),在刻录的过程中尽量不要图速度,稍微放慢点,然后注意刻录完后进行校验。深度GHOST,小罗推荐的,最后用的是它。

关于刻录光盘的种类见下:

DVD+R DVD+RW DVD-R DVD-RW是可刻录光盘的种类。
DVD+R DVD-R 是一次性的,刻完了就不能删除。
而RW是可重复使用的,CD-RW也是一样的道理。
DVD-RAM是可以当硬盘用的光盘。
七、体会、建议
1、安装系统时,一定要对分区老老实实重新格式化一次,不要偷懒,主要是防止硬盘有坏区没有标出来,会给系统造成不稳定的隐患。
2、GHOST的系统最好用FAT32格式做,有二个理由:一是:FAT32→NTFS很容易,可以做到数据保全。NTFS→FAT32就不可能,如果一定要转,数据就丢失了。二是:GHOST对NTFS格式压缩明显不如FAT32的,同样是XRMPVOL_CN系统,NTFS文件系统经过GHOST最高压缩后,会比采用FAT32的大30M左右。
3、制作XP、2003的GHOST操作系统建议使用配置高的机器,虽然这个有争议,但实践表明:用低配置的机器或者用VM做出来的GHO镜像,恢复到机器上时,已经发现有不少是不能启动的。而用高配置的机器做出来的GHO却发现兼容性很好(王朝网络 wangchao.net.cn)  如何制作纯净的GHOST安装盘(XP)

我现在下的深度GHOST XP便是NTFS格式的。使用的是最后一个选项直接GHOST 到C盘。
安装完了WIN XP,之后就可以用深度的PM(partition magic)工具进行分区。(一个简单的教程
最后安装出来的系统程序大概是4G。

Friday, July 15, 2011

两个时钟域的interface问题

By Rui Chen
Interfacing the two clock domains
Problem formulation
The two(or multiple) synchronous systems at different clock frequencies want to interface to each other.

Intuitive definition for asynchronous
The two clock domains are considered to asynchronous to each other when it meets:
1. different frequencies
2. same freq but different phase angle

Problems introduced when considering the interface:
1. setup and hold time violation
2. meta-stability
3. unreliable data transfer

reference: asic world

Possible solution from Lecture 10 of BlueSpec docs, while 2 and 4 matches with the solutions given by asic-world:
When interfacing the two clock domains, the intuitive solution is to introduce the synchronizer. According to lecture 10 ppt, the synchronizers can be divided into the following seven categories(also depicted in Appendix C.8 of reference guide):

  1. 2-flop synchronizer
  2. Pulse Synchronizer
  3. Word Synchronizer
  4. FIFO Synchronizer
  5. Asynchronous RAM
  6. Null Synchronizer
  7. Reset Synchronizer
In this article, the five specific problems are addressed:
1. Meta-stability(also has a vivid doc in asic-world) 
2. Reset synchronization
3. Glitch elimination across clock domain boundaries
4. Inadequate hold times for receiving clock domains
5. Loss of correlation among signals crossing clock domains

A solution: Clock intent verification

For more info, search with multiclock design or multiple clock design

Synthesis and Scripting Techniques for Designing MultiAsynchronous Clock Designs
very useful article try to address the problems in the field.
SUNG 3rd place, very competitive
The papers at SunBurst website are also good ref for design: Check them out

Wednesday, July 13, 2011

谢谢大家,你们来了

By Rui Chen

当人们还在各自忙碌着自己的日程,行色匆匆之时,突然,身边不禁响起了一段音乐,又突然不知从各处闪现出来一堆俊男靓女,他们汇聚于醒目之处,载歌载舞,尽情展现一番,路人皆好奇,停驻下脚步,时不时也会附和,兴之所至,也会扭上一段。时光荏苒,当音乐变弱,节奏渐缓,这群舞者或歌者却又迷失,隐匿于匆匆人群之中,正如他们谜一样的出现,他们有没有兆头地离开了这个“舞台”,但从错愕路人的兴奋和交谈之中,你还是能够感受得到这群表演者所带来的欢欣和舒畅。

当然,作为娱乐方式,我们并不需要知道这种行为艺术叫什么名字,然而在发起者 Bill Wasik的眼中,它却有个正儿八经的名字, flash mob。伴随着全球的MJ纪念风暴,国人也逐渐认识了这样一种新的文化现象,在传播的过程中,“快闪族”一词也渐渐为人所熟识,更有人直接将快闪族和MJ群众舞蹈画上了等号。殊不知flash mob这种亚文化早在2003年便诞生在了曼哈顿的街头。

何谓flash mob
根据维基百科的解释,Flash mob一种通过新兴媒介(诸如电子邮件,短信,社交媒体)组织起来,在公众场合做一些看似无意义但不寻常的行为,在短暂活动结束之后各自离去,活动的目的通常是为了娱乐或讽刺。因而,本质上看来,这种活动就是天生为平民准备,愉悦个人,短暂放松的手段,而之所以出现在繁闹的纽约,一来是因为其文化的多样性与包容性,再者就是因为它快节奏的生活脚步以及繁重的生活压力。而中文的快闪族则更多的以观念时髦的年轻人为主,他们也有更多的自信和勇气将娱乐带给众人。

虽然,Bill Wasik并没有公开地诠释flash mob的含义,但大家都普遍认为这算作是Howard Rheingold的著作<Smart mobs: the next social revolution>之后的继承概念,中文的“快闪族”,在我看来由于文化背景和理解上的差异,而不足以体现出mob的底蕴,似乎“快闪暴民”更为贴切,而且带有某种程度的自嘲心理。

注:Bill Wasik 2003年是Harper's 的高级编辑。

我猜想,中文翻译之所以不翻译成文化暴民,可能原因就是暴民在人们的严重是一个相当负面的词语。然而,就我看来,暴民可以从两个方面解释这种文化现象之后的精神实质。首先,就是表演者对社会公约的一种违背,几乎所有的集会都是会选择一些人群喧闹的地方,如繁闹的步行街,中央车站,或者是喧嚷的商场,甚至是穿梭如流的十字路口,而选在这些人群喧闹的地方,诚然是为了表演的需要,吸引更多人的注意,但本质上也是为了感染他人,为了某个主题,表演者有时也会统一着装来讲这种看似无意义的街头聚会变成一种打破其他人生活节奏的主题宣讲。因此,如果你总是需要去寻找表演背后的意义,那你便总是可以找到他们唤醒社会认识的理由。

除此之外,有时候内容也会成为一种暴民文化,比较典型的例子就是在外人看来的恶作剧和搞怪,如日本百人快闪和枕头互打(pillow fight flash mob)等。然而,历数过往的历史,这种搞怪的渊源也就跃然纸上了,西班牙小镇布尼奥尔的西红柿节似乎可以看成是这种互打的先锋,而日本的搞怪活动早在日本的动漫作品中就让人耳熟能详。

这些具有社会公用的地方,

西班牙人的躁动与不安:

日本整人有很长的历史??



Tuesday, July 12, 2011

medical drama

By Rui Chen
07/12

About house
The real diagnosis 
一个讨论doctor 诊断真实性的帖子
2007/medical-mysteries/the-real-dr-house
看这个标题就还蛮好玩的, 真实世界中的house
medical review for house
当然最为重要的还是医生的专业观点

----
medical drama comparison
电视符号学是媒介研讨的一种方法 注:这篇文章写的比较的专业
gender analysis for GA 国内的同学写的还真专业
大叔归来  菜头的文字还是很有张力的,摘抄几段(应该将美剧还没有讲观众的智商BS一番,电影由于时间限制和表现方式的需要,常常会在这方面做一些努力)

我曾经在Twitter上写过一段话:
新闻看电视,手机无Wifi,春节等春晚,上网斗地主,阅读茅盾文学奖作品,看华表奖获奖电影,这就是21世纪文盲的标准像。
在我看来,美剧是脱离这种新文盲状态的必然娱乐。在美国那样一个万恶的纯商业社会里,只要不冒犯大众的基本价值观,编剧们可以任由想象力飞翔,经年累月地进行这种绞尽脑汁的比赛,看谁的故事更有趣,更动人。美剧好看就是因为这个道理,它唯一的目的就是取悦观众。任务失败,那就会被结季滚蛋,彻底从荧幕上消失。我之所以追看《Lost》,其实出发点非常恶毒:我想看到编剧怎么把自己活生生憋死。但他们坚持到现在,还没有暴毙身亡的迹象,于是我看到的就是各种奇峰突起,叫人冬天里洗澡停电---欲罢不能。
看到别人可以放飞想象力,自由驰骋,逼近智力的极限,这本身就赏心悦目。这么说虽然有些伤感,但是作为一头驴子,站在自己的圈门口,看着外面的野马如疾风一般掠过,哪怕嚼了满口的饲料,也会停下来,出神地眺望一番,幻想自己四蹄翻飞,风声过耳。就算是明天要和骡马并辔而行,不能越磨道半蹄,也觉得心中喜悦难当,想着赶紧拉完了回圈,等着马群从门前再次飞驰而过,好站在槽头再看一眼。

观众需要什么样的观影感受

By Rui Chen
07/12

水木社区的原帖(link)

看完原帖简单的反映就是,作者其实还蛮片面化,长期观看收视榜单的人都知道最火的电视剧应该首当其冲的算是AMERICA'S GOT TALENT(美剧迷:收视排行榜,注:2010年9月20号至2011年2月13号,在18-49年龄段的收视率,当然最近的也可以参看Nielsen TV ratings),当然,透过这个榜单,你也可以看到排到前几的除了搞笑就是歌舞,要么就是挂羊头,卖狗肉的医疗剧。所以,纯粹从美国人的观影角度出发,他们也不会花上很多的时间去看那些需要很多专业知识、以及引人入胜的压抑罪案或是医疗电视剧。而后者却是集中了相当多的专业领域的作家,如lie to me 的测谎检测,bones的人类学探案,就连搞笑的the big bang theory也是有着UCLA的物理老师撰写台词,并且另开blog做生动讲解。就此精良的制作,中国的电视工作者如何能寻求得到学术界的配合,而学术界一贯的艰深晦涩却也只能是在新生代中找到突破了。

当然,通过上面的介绍,我们也不难发现另外一个特点,那就是中国的文化产业不是十分地具有原创精神,泛化地谈也就是大多数当下的红火电视剧都是根据小说改编的,而改编之后总是免不了与原作者的内容从各个方面做比较,这在某种程度上也局限了编剧的思维。当然,这么做也是体制的原因,因为电视剧都是一箩筐地拍完,然后再一集集地播,因而在中间环节上缺少观众反馈的环节,所以,电视制作者采用这样的方式也就是为了降低风险,这样,电视剧也就成了小说的一个“周边”,根本没有什么新意。

另外一个特点就是中国的电视剧总是很缺乏想象,可能是观众的口味决定的,那就是在80后还在疯狂打拼的时候,他们注定也就不大可能成为各大电视台黄金时间的电视剧的消费主力。相应的,电视剧也就不大可能会有更多的专业知识或者是用陌生词语做引导来吸引观众,同样,电视剧不能太压抑,不能心理太不健康,这样美国电视剧的这些比较wired 和疯狂的一面也就不大可能进入到制片人的考虑范畴。踏踏实实在广电总局的眼里才是好孩子。

横跨
冯巩的小品《艺术人生》中,就有一个很有意思的桥段:
朱:我不知你怎么想的,你已经到了中年,为什么还这么拼命呢,是什么样的原动力在支撑你这么做呢? 
冯:不自信。在相声界我影视最好,演员里我导演导得最好。导演中我编剧编最棒,反正我就想玩个综合实力。朱:你总是拿自己的长处比人家的短处。冯:有一句话说的好,和帕瓦罗蒂比劈叉,和美国总统布什比说中国话。恩,说死他。 其实不自信人人都有,比如搞导游的代卖盒饭,老中医捏脚,电视主持人出书。
而在中国,你常常可以看到什么“影视歌”三栖的明星,当然,也不是说国外就没有这样的人,而Wikipedia中还有一个关于EGOT(Emmy, Grammy, Oscar, Tony, 注:分别是电视剧,音乐,电影以及舞台剧的最高奖项)的list(link),但在娱乐业发达的美国古往今来竟然也只有10位,而新中国的电影尚不足百年,各个行业的奖项似无定论,竟然也出来了这么多的三栖明星,这皮囊般的综合实力,我看不要也罢。
如果换个角度看所谓的综合实力,它也好比是美国政府、学术、商界的旋转门,今天这个歌没人听了,演出被砍了,明天就接个剧本演电影,后天如果行情好了,在出演电视剧什么的,所以所谓的“影视歌”三栖在这样的一个背景下,也透露着无尽的无奈,只能说中国的艺人光看一技之长在一个行当里似乎很难吃得开。所以,在中国你经常可以看到的情景就是,做电影的跑去做电视,做电视的串过来弄电影,有时候就连说说相声的郭德纲也会写写电影剧本什么的。

利益至上确实是文化产业的“七寸命脉”,而反过来,这些文化工作者却也以此为理由对像吉卜力工作室这样的文化模式,对像Animal Kingdom这样的独立电影的商业成功视而不见。事实上,当国人对于内容缺乏创意可求的时候,这才是真正难以获得共鸣的最大原因。

ref: link  作者电影的引入,导演的分类

Tuesday, June 21, 2011

开始写论文

什么是游戏

By Rui Chen

题注:尽管是码字,但是昨天已经码过一轮,无赖相信记事本不会掉线消掉自己的记录,所以,竟也没有保存过一次,今天打开电脑,发现电脑自动更新重启,无可奈何,所有的码字又需重来一轮.但回想尼古拉·奥斯特洛夫斯基在写《the making of steel》时的尴尬,面对原稿的遗失,依旧执着地完成心中的文字。有如明朝的张溥更有“七录七焚”的佳话。因此,我也有所动力重新整理一下昨日缩写的东西,顺便还可以校对一些东西。

游戏的本质
游戏就是game,但并非是game theory game,反过来,我觉得用game theory也只能说明game的一些特点,博弈求胜,但少了一些对娱乐有趣特点的刻画,而这也会让人对这个和电影旗鼓相当的休闲产业的理解有所偏颇。

红白机和街机
大凡谈到自己的经历,似乎没有人没玩过超级玛丽或是魂得罗的,也没有人会说自己曾经拒绝过街头霸王或者苹果机的诱惑。而这些在现在这些手拿ipad平板电脑或是怀揣上网本的这些小同学的眼里,这些可能都是不可触摸的历史了。确实,无论是拳皇,侍魂,恶狼传说还是一些忘记了名字的对战类游戏,他们都凸显着最为简单的游戏理念,在有限的时间内消灭对手。现在回想,都会感到那时满脸涨得通红,大汗漓淋的情景。
相比于街机,红白机可能要简单很多,里面的游戏可能大都是通关,冒险性质的。有时候能够足够沉迷这些需要连续通关不能存档的游戏,心里可能真的是要憋住一股劲,这种执着的游戏精神可能在电脑单机时代再也找不回了。
通关游戏不能存档似乎是很大的一个bug,街机的几款经典也逃脱不了,无论是三国演义(具体名字不清,和后面的三国战记不同),恐龙快打(面对这些名字我也是兴奋和差异,资料榜单:链接),三国战记,或者是西游释厄传等等,这些经典游戏让我们真的是不得不面对废寝忘食的生活。站在今天的角度回过头来看这些过往的经典,我觉得单机游戏的设计似乎也只能是这样了,它们之中不乏两人,四人的配合,它们之中也有着复杂多变的人际和人人的对抗,游戏再往上走可能就是游戏平台,游戏文化上的局限了。

从单机到局域网再到互联网
我其实到现在也没有搞清楚明白两台街机是如何联系到一起,然后形成四人的通关游戏的。但是要是我清楚地解释电脑与电脑之间如何构成网络对战却那么困难,无非就是局域网和互联网的介入。
几乎是在玩街机的同时,我也开始接触电脑。最早接触的一款电脑游戏应该是沙丘二代,即使是后面有使命与征服,红色警戒,帝国时代或是星际争霸的超越,这也是一款让我回味至今的游戏,当然他的游戏系统也并不复杂,简单的正反派设置,无科技树的发展,让我也在侍魂和拳皇之外,找到了一个简单的进阶游戏。
如果是提到单机游戏,就不得不提到有着和超级马里奥,街头霸王那样出众人气的大富翁,至少大富翁了。尽管是在最近的版本之中加入了即时性的设计,这款游戏却也始终达不到超级马里奥和街头霸王那样能够形成一种延续的文化,各种原因也很难解读,也许是国产游戏的发展始终就是不那么良性吧。街头霸王后来有了相应的漫画以及电影,就是在频繁的动漫展销会上你也可以看到那些明星式的cosplay。而马里奥兄弟在任天堂的wii之中也找到了自己的最新亮相。反过头来,这款靠掷骰子买卖地和股票,时不时碰碰运气的游戏之所以大受欢迎,很可能也就是因为掷骰子游戏所打下的基础了。
如果是要将所有的游戏都历数一遍,这也不大可能,而这其中我说钟爱的也太多太多,有模拟经营类的游戏如水上公园,铁路大亨等等,也有即使战略类游戏如星际争霸,红色警戒等等,当然也有战略模拟,角色扮演的游戏如大航海时代,太阁立志传,三国志等等(令人惊讶的是这些游戏都是出自光荣公司一家之手)。即使是在游戏模式是上,有时也会让我们惊讶地看到MUD游戏这种文字交互游戏始祖的影子。
KOEI(光荣公司)陆续地开发出它出名单机游戏的online版时,毋庸置疑,网络这个有别于单机PC的媒介为游戏这个大家族做了新的注解。它所用的套路再也不是简单的通关,或是战略

--to be continued
--MUD 文字游戏,就是设立一个文字系统,大家都在一个社区里面相互地聊天

Monday, May 16, 2011

zzC++:送给正在学习C++朋友的50条建议

按:无论学习多久,我们都还在路上。C++支持的编程范式太多,因此还是博大精深的,但是C++本身的核心语言我觉得和C还是差不多的。弄清楚概念是学习的一个很重要的前提,因此选择一本比较基本的书(广泛认可的就是C++ language或者C++ Premier)就行了,懂得matlab对于我顺着过来结合,理清很多的概念非常的有帮助。

1.把C++当成一门新的语言学习(和C没啥关系!真的。);
2.看《Thinking In C++》,不要看《C++变成死相》;
3.看《The C++ Programming Language》和《Inside The C++ Object Model》,不要因为他们很难而我们自己是初学者所以就不看;
4.不要被VC、BCB、BC、MC、TC等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;
5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;
6.会用Visual C++,并不说明你会C++;
7.学class并不难,template、STL、generic programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;
8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的C++水平并没有和你通关的能力一起变高——其实可以时刻记住:学C++是为了编游戏的;
9.看Visual C++的书,是学不了C++语言的;
10.浮躁的人容易说:XX语言不行了,应该学YY;——是你自己不行了吧!?
11.浮躁的人容易问:我到底该学什么;——别问,学就对了;
12.浮躁的人容易问:XX有钱途吗;——建议你去抢银行;
13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!
14.浮躁的人容易问:XX和YY哪个好;——告诉你吧,都好——只要你学就行;
15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;
16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;
17.C++不仅仅是支持面向对象的程序设计语言;
18.学习编程最好的方法之一就是阅读源代码;
19.在任何时刻都不要认为自己手中的书已经足够了;
20.请阅读《The Standard C++ Bible》(中文版:标准C++宝典),掌握C++标准;
21.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;
22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;
23.请看《Effective C++》和《More Effective C++》以及《Exceptional C++》;
24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;
25.和别人一起讨论有意义的C++知识点,而不是争吵XX行不行或者YY与ZZ哪个好;
26.请看《程序设计实践》,并严格的按照其要求去做;
27.不要因为C和C++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;
28.C++绝不是所谓的C的“扩充”——如果C++一开始就起名叫Z语言,你一定不会把C和Z语言联系得那么紧密;
29.请不要认为学过XX语言再改学C++会有什么问题——你只不过又在学一门全新的语言而已;
30.读完了《Inside The C++ Object Model》以后再来认定自己是不是已经学会了C++;
31.学习编程的秘诀是:编程,编程,再编程;
32.请留意下列书籍:《C++面向对象高效编程(C++ Effective Object-Oriented Software Construction)》《面向对象软件构造(Object-Oriented Software Construction)》《设计模式(Design Patterns)》《The Art of Computer Programming》;
33.记住:面向对象技术不只是C++专有的;
34.请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;
35.把在书中看到的有意义的例子扩充;
36.请重视C++中的异常处理技术,并将其切实的运用到自己的程序中;
37.经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;
38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;
39.C++语言和C++的集成开发环境要同时学习和掌握;
40.既然决定了学C++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;
41.就让C++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习C++语言本身为主;
42.当你写C++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);
43.别心急,设计C++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;
44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;
45.每学到一个C++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;
46.记录下在和别人交流时发现的自己忽视或不理解的知识点;
47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成Version 100.XX;
48.保存好你写过的所有的程序——那是你最好的积累之一;
49.请不要做浮躁的人;
50.请热爱C++!