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,就是文件。