游戏发展史:Interplay

Interplay 对于新玩家而言已经过于陌生了,虽然早已不复往昔,但是给游戏业界留下的财富,仍旧不可估量。

新星崛起 Meteoric Rise

布莱恩·法戈的高中生涯都在 Apple II 游戏的陪伴下度过,毕业后他想到,如果自己去设计游戏,做出来的作品搞不好比手头这些都好玩。于是1992年他以Saber 软件公司的名义制作了《恶魔熔炉》,当时孤立一人的他,花费了整整一半的预算,在电脑杂志《Softtalk》上刊登了一则广告。之后为了吸引零售商进货,他又冒充普通玩家打电话给商店,询问能否买到杂志上宣传的这款酷毙了的新游戏。

计谋奏效了,零售商们也开始从 Saber 软件公司订购这款游戏,他们完全没有想到的是:所谓 Saber 实际上是一人企业,而他就是冒名电话背后的始作俑者。凭着这款游戏,法戈得到了 Boom 集团的关注,后一年他被吸收到该集团为他们工作,然而,当 Boom 的一次董事会以大打出手作结时,法戈意识到是该另立门户了。于是他召集死党,在1983年城里了自己的公司。

当时的他们对未来毫无头绪,然而他们没有料想到,公司将要经历的一系列大起大落是如此充满戏剧性,在整个游戏史上也属罕见。这家公司从小工作室起家,发展成为一流发行商,最后却不幸破产。当年也全亏他们慧眼识英雄,才扶持了暴雪、Bioware 和 Treyarch 这些如今行业的巨头。且听我以吟游诗人的曲调,将 Interplay 娱乐公司的这段兴衰史娓娓道来。

起初的 Interplay 并没有什么大作为,仅仅从事一些现有游戏的跨平台移植工作,甚至还从一家军事分包商处接活。最后他们终于同Activision达成协议,从事原创游戏开发。1984年他们的首部作品,冒险游戏《Mindshadow》问世,该作一定程度上基于罗伯特·卢德伦的小说《谍影重重》。在游戏中失忆的主角必须收集线索,找回自己不为人知的过去。游戏获得了一定的成功,Interplay 在原创游戏开发方面也借此迈出了一步。仅一年后,Interplay 出品了第一款真正意义上的大作《遗忘故事第一张:吟游诗人传奇》(冰城传奇),这款角色扮演游戏大量借鉴了《巫术》系列,而后者在病危获得官方授权的情况下,完美地运用了龙与地下城(DND)的规则体系。相比之下《吟游诗人传奇》要精致的多:多色彩,游戏音效和背景音乐的加入,使得 DND 式的冒险历程更为引人入胜。

游戏发展史:Blizzard

暴雪的大名已如雷贯耳,虽然现在也面临着一些困难,但是回顾往昔,光芒依旧耀眼。

1

就读于加州大学洛杉矶分校的迈克·默汉曾经对同学这样恶作剧:当艾伦·艾德涵暂时离开电脑时,默汉迅速把艾伦的电脑密码改成了 JOE,毫不知情的艾伦回来输入密码,竟然成功登陆了。这时轮到默汉大吃一惊,艾德涵究竟是怎么做到的?于是他招认了自己的恶作剧,然后请教艾德涵是如何破解的,然而,后者的惊讶程度丝毫不亚于默汉,他不过是输入了自己的密码而已。默汉终于明白了其中关键:由于机缘巧合,艾德涵自己的密码也刚好是 JOE。此后两人成为挚友,他们关系之好,最终又成为商业上的合作伙伴,之后20年中他们的工作室制作了数十款精品游戏,不仅成为游戏史上最伟大的传奇之一,更晋升为行业巨头,屹立于整个娱乐产业。他们的公司如此受欢迎,甚至拥有自己的年度大会。且不论两人是否还把 JOE 作为密码,在产品制作的完美程度和持续的卓越方面,世界上几乎少有同行能够同暴雪娱乐并驾齐驱,这是毋庸置疑的。

毕业之际,艾伦·艾德涵觉得这是实现理想的最佳时机,他热衷玩游戏,为何不以制作游戏为业呢?但是他不甘心在大公司当低级程序员,而是想自己当老板,自己决定工作计划。艾德涵决定创立自己的公司,于是他联系迈克·默汉,邀请他入伙,同时还联系了另外一名同学弗兰克·皮尔斯。

【弗兰克·皮尔斯】我与艾伦通过熟人认识,当时很凑巧,因为我确实很想制作游戏,觉得是一项很酷的事业,却苦于不知道如何着手,而艾伦对于自己想做的事情有着明确计划和确切的愿景,他想做的事刚好也是我感兴趣的,因为我少走了很多弯路,我们能够相遇是很幸运的。

【迈克·默汉】公司成立的第一天我才和弗兰克首次见面,当时我正在说话,一个陌生人出现了,于是我闭住了嘴,然后就这么结识了。

1991年2月8日,三人在加州科斯塔梅萨建立了他们的工作室『硅与神经键Silicon&Synapse』,艾德涵担任总裁,默汉担任副总裁,皮尔斯则是程序员。他们决心不紧要制作出伟大的游戏,更要在其过程中享受到乐趣。

聊斋:白狐

很多年前,一个昭阳四射的清晨,书生坐在树桩上苦读四书五经。书生一贫如洗三餐不饱,家里唯一值钱的就是那两担沉甸甸的书。

书生每天都坐在这片林子里,随便寻个坐处,读到天黑,日子一天天的就这样在圣贤书中流逝。

这日黄昏,书生正在读书,读到夕阳遍地时高呼:“书中自有黄金屋,书中自有颜如玉”,突地“吱吱”而鸣声随风而来,书生抬起头来,只见一团白影扑面而至,那是一只晶莹通白的小狐狸,雪白得一尘不染,两只眼珠溜溜而动,口里哀声连连。

说也来怪,小狐狸奔到书生面前时,竟兀自停住脚步,气喘吁吁。

书生一把抓住小狐狸,只见小狐狸雪白的后腿上,斜斜地插着一支箭,鲜血顺着箭头沽沽而下,染红了一片。小狐哀鸣几声,双目对着书生,写满了哀怜与乞求。

书生叹一口气:“小狐狸啊小狐狸,是谁忍心伤你这么深……”

语音未落,远处蹄声如雷阵阵踏来,小狐狸白溜的身子不停的颤抖,仿佛要从书生手里挣扎逃走,书生急忙捧紧小狐,一咬牙将箭拔出,撕下一片烂衣袍,将小狐狸的伤口包好,轻轻放入宽大的衣袖里,说也来怪,小狐狸竟忍住疼痛,一动不动的躺在书生的袖怀之中。

书生刚刚端起书,只听得马蹄声轰轰而至,数十匹高大骏马踏青飞来,为头的是一个虬髯大汉,满身华贵地叫道:“兀那书生,可曾见过一只受伤的狐狸逃过?”

书生抬起头来:“兄台说的可是一只满身雪白的狐狸?”

虬髯客身旁闪出一团绿影,娇喝道:“正是,正是我射中的那只狐狸,那小畜生呢?”

书生只闻香风扑面,迎面是一张如花笑脸,书生猛然间惊慌失措,意迷情乱,好半天才回过神来,指着身后结结巴巴的说:“刚刚从这边跑过。”

少女娇声说道:“多谢书生!我们追!”

Intro to BoltDB: Painless Performant Persistence

BoltDB is a pure Go persistence solution that saves data to a memory mapped file. I call it a persistence solution and not a database, because the word database has a lot of baggage associated with it that doesn’t apply to bolt. And that lack of baggage is what makes bolt so awesome.

Bolt is just a Go package. There’s nothing you need to install on the system, no configuration to figure out before you can start coding, nothing. You just go get github.com/boltdb/bolt and then import “github.com/boltdb/bolt”.

All you need to fully use bolt as storage is a file name. This is fantastic from both a developer’s point of view, and a user’s point of view. I don’t know about you, but I’ve spent months of work time over my career configuring and setting up databases and debugging configuration problems, users and permissions and all the other crap you get from more traditional databases like Postgres and Mongo. There’s none of that with bolt. No users, no setup, just a file name. This is also a boon for users of your application, because they don’t have to futz with all that crap either.

Bolt is not a relational database. It’s not even a document store, though you can sort of use it that way. It’s really just a key/value store… but don’t worry if you don’t really know what that means or how you’d use that for storage. It’s super simple and it’s incredibly flexible. Let’s take a look.

Storage in bolt is divided into buckets. A bucket is simply a named collection of key/value pairs, just like Go’s map. The name of the bucket, the keys, and the values are all of type []byte. Buckets can contain other buckets, also keyed by a []byte name.

Android: Volley+OkHttp with https

Android Network Simple

This article shows how to use volley with OkHttp and security your api with https. 本文可以在简书浏览。

使用 OkHttp 作为传输层的实现.

Volley 默认根据 Android 系统版本使用不同的 Http 传输协议实现. 3.0 以上使用HttpUrlConnection, 2.3 以下使用 ApacheHttpStack, 参考Android Http Client.

OkHttp 相较于其它的实现有以下的优点:

  • 支持SPDY,允许连接同一主机的所有请求分享一个socket。
  • 如果SPDY不可用,会使用连接池减少请求延迟。
  • 使用GZIP压缩下载内容,且压缩操作对用户是透明的。
  • 利用响应缓存来避免重复的网络请求。
  • 当网络出现问题的时候,OKHttp会依然有效,它将从常见的连接问题当中恢复。
  • 如果你的服务端有多个IP地址,当第一个地址连接失败时,OKHttp会尝试连接其他的地址,这对IPV4和IPV6以及寄宿在多个数据中心的服务而言,是非常有必要的。

庆余年: 又一叶

当年的废话

至于是如何和小眉认识的,已经有些记不清楚了,只记得那天太阳当空照,花儿对我笑,小鸟说操操操,喔,不对,那天好象国际上又出了件什么事儿,于是我们几个兄弟以此为由撮了一顿,中午我喝了太多的酒,头有些昏,腿有些沉,舌自然也有些笨了,一个人到街上的书铺借了本小说便直奔大南门外的烂草地,准备刮刮江风,冒充一下孤独;抽抽小烟,模仿一下绝望。

只是有太久没有出门了,所以没想到七月的太阳竟然会这么毒。

当然,这是一个常识,但现在我的问题就是缺乏常识。于是在石凳上坐了五分钟后,我便决定脱下满身汗臭的格子短袖,做个脱衣的俗人,脱俗之人。

当我的手指伸向短袖的第三个扣子时,不期有一道很清凉,很清凉的声音从我的正前方响了起来:

“天气还真是热呀!”

甜甜的、酸酸的、有营养……我自顾自地笑了笑,第一个反应是,这绝对是一个雌性动物才能拥有的声音,而且一定是个小雌。

我的第二个反应是,赶忙把第二个扣子给扣了起来。

我的第三个反应是,脑袋嗡地一声……世界果然大不同,居然有女子主动找我搭讪。

我把头深深地埋在怀里,用了半分钟的时间,猜度了种种可能,唯一把美女相约的可能排除掉后,勇敢地抬起头来,面对这个脸上可能涂了八层防晒霜的恐龙。

杂谈:指纹歌里的人生百态

“一螺穷,二螺富,三螺四螺开当铺……”童年时代,您可曾唱过指纹歌?童谣未必预示了命运,但却包含了人生百态。

指纹,是在每个人出生第六个月就形成,并跟随人一生一世的身体纹线,每个人的指纹都是独一无二的,世界上绝不会有指纹完全相同的两个人。所以,我国在一千多年前的唐代,就实行了指纹画押。古代的借据就是借户用中指和食指在借据上并列印上指纹叫作“花押”。直到现代,立据签约还仍然使用这种当事人在契约上按手印的方法作为凭信。刑事侦探还把鉴别手纹作为破案的重要手段。

两种最基本的指纹:纹如水流中的漩涡形,或中间的纹成封口的环状,叫涡纹,又叫螺纹;指纹呈流线形脱开,不封口,叫流纹,又叫箕纹。

螺是指螺旋状的环形纹,箕是指簸箕状的开口纹。张爱玲在《谈看书》中提到:十只手指上,螺越多越好,聚得住钱;男人簸箕也好,会赚钱,能够把钱铲回家;女人则是螺好,会积钱,手上没螺,拿东西不牢。

指纹歌的地图:盛行于东南沿海

在一些童谣集中载录了大量的指纹歌,如商务印书馆《各省童谣集》第一集(1923年)就收录了三首,分别采自安徽休宁、浙江杭县、浙江新昌;上海世界书局《绘图童谣大观》(1924年)也收录了三首,分别采自江苏的吴县、无锡和江都。

《各省童谣集》的编者说:“看螺纹定一生贫富贵贱,各省都有这种事,但所说各不相同,可见这事不足深信。”这话听起来,好像如果各地所说一致,就可以深信似的。这首曾经被打入“封建迷信”另册的趣味童谣,正因为异文众多,不足为信,才会给我们的童年生活带来许多相互打趣的快乐。

50 Shades of Go

Go is a simple and fun language, but, like any other language, it has a few gotchas… Many of those gotchas are not entirely Go’s fault. Some of these mistakes are natural traps if you are coming from another language. Others are due to faulty assumptions and missing details.

A lot of these gotchas may seem obvious if you took the time to learn the language reading the official spec, wiki, mailing list discussions, many great posts and presentations by Rob Pike, and the source code. Not everybody starts the same way though and that’s OK. If you are new to Go the information here will save you hours debugging your code.

This post covers Go 1.5 and below.

Total Beginner:

  1. Opening Brace Can’t Be Placed on a Separate Line
  2. Unused Variables
  3. Unused Imports
  4. Short Variable Declarations Can Be Used Only Inside Functions
  5. Redeclaring Variables Using Short Variable Declarations
  6. Can’t Use Short Variable Declarations to Set Field Values
  7. Accidental Variable Shadowing
  8. Can’t Use “nil” to Initialize a Variable Without an Explicit Type
  9. Using “nil” Slices and Maps
  10. Map Capacity