陶渊明 -「桃花源记」

        晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷,渔人甚异之。复前行,欲穷其林。

  林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田美池桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。

  见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”

  既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。

  南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终,后遂无问津者。

老子 - 「道 德 經」

第 一 章

道 可 道 , 非 常 道 。 名 可 名 , 非 常 名 。  
无 名 天 地 之 始 ﹔ 有 名 万 物 之 母 。  
故 常 无 , 欲 以 观 其 妙 ﹔ 常 有 , 欲 以 观 其 徼 。  
此 两 者 , 同 出 而 异 名 , 同 谓 之 玄 。  
玄 之 又 玄 , 众 妙 之 门 。  

第 二 章

天 下 皆 知 美 之 为 美 , 斯 恶 已 。  
皆 知 善 之 为 善 , 斯 不 善 已 。  
有 无 相 生 , 难 易 相 成 , 长 短 相 形 ,  
高 下 相 盈 , 音 声 相 和 , 前 后 相 随 。  
恒 也 。 是 以 圣 人 处 无 为 之 事 ,  
行 不 言 之 教 ﹔ 万 物 作 而 弗 始 ,  
生 而 弗 有 , 为 而 弗 恃 , 功 成 而 不 居 。   
夫 唯 弗 居 , 是 以 不 去 。   

Go - See what packages my app imports

It’s often practical to see what packages your app is importing. Unfortunately there isn’t a simple way to do that, however it is doable via the go list tool and using templates.

Go to your app and run the following.

$ go list -f '{{join .Deps "\n"}}' |  xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}'

Here is an example with the clirescue refactoring example:

$ cd $GOPATH/src/github.com/GoBootcamp/clirescue
$ go list -f '{{join .Deps "\n"}}' | xargs go list -f '{{if not .Standard}}{{.ImportPath}}{{end}}'
github.com/GoBootcamp/clirescue/cmdutil
github.com/GoBootcamp/clirescue/trackerapi
github.com/GoBootcamp/clirescue/user
github.com/codegangsta/cli

If you want the list to also contain standard packages, edit the template and use:

$ go list -f '{{join .Deps "\n"}}' |  xargs go list -f '{{.ImportPath}}'

Go - EBNF

Notation

The syntax is specified using Extended Backus-Naur Form (EBNF):

Production  = production_name "=" [ Expression ] "." .
Expression  = Alternative { "|" Alternative } .
Alternative = Term { Term } .
Term        = production_name | token [ "…" token ] | Group | Option | Repetition .
Group       = "(" Expression ")" .
Option      = "[" Expression "]" .
Repetition  = "{" Expression "}" .

Productions are expressions constructed from terms and the following operators, in increasing precedence:

|   alternation
()  grouping
[]  option (0 or 1 times)
{}  repetition (0 to n times)

Lower-case production names are used to identify lexical tokens. Non-terminals are in CamelCase. Lexical tokens are enclosed in double quotes "" or back quotes ``.

Makefile:简介

Make 可以简化编译过程,如果有一个近百个源文件的项目,如果有个文件更改后工程需要重新编译,那么一直用gcc -c a.c这些个命令敲来敲去会屎人的。运行make时候,他会寻找指定目录下(默认是 .)的 Makefile 文件并且分析依赖关系进行必要的编译。

Makefile文件的基本格式很简单:

目标文件: 依赖文件1 依赖文件2 依赖文件3 。。。。
[tab]编译命令

他的意思是目标文件是依赖于冒号后面几个文件的,如果这些依赖文件有更新的,那么其目标文件也需要更新。

Makefile 中可能有很多以上条目,他们共同组成了一个有向无回路图(DAG图),这样可以传递依赖。make 命令会把 Makefile 文件的第一个目标文件作为默认目标,当执行 make 命令时,make 会考察这个目标文件的依赖关系,进行编译。也可以指定,比如这个 Makefile:

main: a.o b.o
[tab]gcc -o main a.o b.o
a.o : a.c c.h
[tab]gcc -c a.c -o a.o
b.o: b.c c.h
[tab]gcc -c b.c -o b.o
// [tab]的意思是这里用tab字符代替,不能有其他的什么字符

在命令行里执行make,分析关系并生成main,如果是make a.o那么他只会编译到 a.o 。

游戏发展史:Valve

Valve 虽然从来是『有再一再二,没有再三再四』,但是不得不承认,无论是半条命还是 steam,都称得上『划时代』。

名不见经传的英雄 Unlikely Heroes

1996年,微软已经从一个小作坊成长为世界上最富有的公司之一,最早的一批员工都已经成为了百万富翁。其中两名老员工一直爱玩游戏,现在有了足够的资金做自己想做的事情,他们决定成立自己的公司。

不幸的是,他们对游戏开发毫无经验,只参与过操作系统以及功能性产品的编写,后来一个好友将他们介绍给了著名的id软件创始人——约翰·卡马克,卡马克说服他们应该拿到Quake引擎的许可并做一个游戏。他们同意了,并认为追寻梦想的时机已到。

加布·纽维尔和麦克·哈灵顿为新公司想了几个名字,包括果蝇、全息盒子以及犀牛疤痕(Rhino Scar),但最后他们选定了一个很简单的名字阀门(VALVE)。

和卡马克见面后,纽维尔和哈灵顿创建了他们的公司,并在纽维尔的婚礼遮天正式注册成立。

【G胖 加布·纽维尔 Valve创始人】:我最初建立一家游戏公司的动机带有一定社会性,我很享受与一帮聪明人一起工作,创造能影响不同群体的游戏。1996年,我在想有哪些选择,在这个问题上我又很大的自由,环游世界,度个假什么的。我最喜欢Valve的一点就是这种特定的工作环境。

不同于Bungie仅靠一人慢慢白手起家,Valve想立马就开始制作高预算游戏,两个人是远远不够的,尤其这两人还从来没做过游戏。于是Valve便开始物色人才,他们的做法不同于当时业界的标准,不仅招募专业人士,还有MOD作者。他们意识到某些mod作者可能比专业人士更有天赋。伺候Valve便开始开辟新的疆土。

公司完全依靠两位创始人的资金运作,这样一来公司便承担得起一般小工作室承受不了的风险。然而仅有两个想追梦的人还远远不够,没有人看好他们,找到一个愿意发行他们作品的发行商几乎不可能。尤其当纽维尔和哈灵顿宣称游戏采用了极其复杂的技术时,发行商们不相信他们能兑现诺言,最后他们找上了“雪乐山在线”(SIERRA Online),雪乐山刚好打算发行一款3D动作游戏,最好使用Quake引擎制作。Valve团队令他们印象深刻,有了足够的信心与其展开合作,即使失败了,仅仅一款游戏的合约也让雪乐山有退路。

游戏发展史:Bioware

一个公司能够成为欧美 RPG 玩家心目中『经典』的代言,不得不说是有两把刷子的。

启程 Setting Out

1995年,电子游戏已经不再只是孩子的玩具,即使是医生也可能成为玩家。就在这一年,三名医学院毕业生决定在投身医药行业之前做出自己的游戏。就是这样, Ray Muzyka, Greg Zeschuk和Augustine Yip在Zeschuk的地下室创建了自己的公司。谁能想到这样一个组合最后能成为RPG巨匠?他们的名字代表着精品——Bioware.

公司制作的第一款游戏叫做《超钢战神》,这是1996年的一款为MS-DOS平台执着的第一人称载具射击游戏。Bioware尝试提升游戏画面表现,将可变形地表作为一大卖点。游戏还有着复杂的背景故事,在那个年代多数射击游戏内容都只是枪枪枪,这种级别的游戏内涵着实不平常,这也成为了公司以后的立足之本。

《超钢战神》之后Muzyka和Zeschuk想要继续制作游戏,但作为创业伙伴的Augustine Yip决定投身医药行业,离开了公司。尽管如此Bioware还是继续制作了他们的下一款游戏《战场:无垠》并且开始寻找发行商。当interplay旗下的黑岛工作室看过游戏之后,他们并不想仅仅发行游戏,而是想将其打造为公司的标志品牌,并授权Bioware将《战场》做成一款官方D&D规则游戏,结果就是1998年的《博德之门》。

故事发生在AD&D第二版规则设定的“遗忘之地”,游戏保有一切RPG的特性,从移动、攻击到施法,一切结果都是通过计算获得的。Bioware明智地决定让这一过程对玩家不可见,如此一来,即便是从未看过AD&D规则书的玩家也能很快上手,投身进“遗忘之地”之中。游戏是实时进行的,这在D&D电子游戏里尚属首例,玩家可以在战斗开始前按下“暂停”,选择每个队友的进攻路线,再继续游戏观看战略实施。游戏还拥有当时的顶尖画质,充分利用了PC业界的新技术——专用独立显卡。不同于《暗黑破坏神》的杀杀杀&刷刷刷,《博德之门》将重心放在了剧情上,引人入胜的史诗般任务至少花费数十小时,一个法师学徒为其师父报仇的故事都能谋杀玩家的大量时间。支线任务大多也和主线一样有趣,D&D饭也能遇到很多设定中的著名角色并与之互动,对很多玩家来说是梦想成真。虽然画面在今天看来已经过时,但时至今日博德之门依旧是游戏史上剧情最佳的游戏之一。这还没完,游戏提供了多人模式,允许好友组队一起完成任务。这是首款能这么做的PC RPG,这使得游戏大受欢迎,因为核心玩家能在游戏中一路帮助他缺乏经验的朋友。所有这一切成就了1998年最卖座的游戏之一,成为一代RPG名作。

仅仅成立3年并推出两部作品,Bioware从医生的爱好成为了业界领导者,这一切都来得太快,没人知道他们能否将这股劲头保持下去。幸运的是,Bioware的成功之路才刚刚开始。