标记说明:转载原创

June 25, 2009

可怜的还是凡人  

铂 Platinum

如果你见过外面的那些世界,你会想尽各种方法重见光明,用 ssh -D,用 tor,或者别的什么方式,可怜是那些不会穿墙的民众,他们在被糊弄成傻子的同时还要对他们的主子感恩戴德,想想那个朝鲜纪录片里刚被做完白内障手术就径直走向伟大的金日成主席像的东西们,他们到底更接近人还是更接近牲口?

曾经在丹东呆过几年,当时还在上初中的我偶尔拿着望远镜看着对面的朝鲜新义州,还没有意识到我正在近距离观察着世界上最神秘的国家,街道上没有行人,烟囱(虽然在丹东这头,旧式的烟囱已经几乎消失了)里没有烟。后来才知道,正是那几年,朝鲜还在闹饥荒,每年都要饿死数十万人。荒诞到可笑,却又笑不出来,五十步百步而已,我们没有像金正日那样父传子、或者像卡斯特罗那样兄传弟,我想解放后的几代人的命运是否应该感激那架 B-29

虽然水煮青蛙的例子并不真实,但是可以肯定,文火肯定可以煮熟青蛙的。想到即将来临的黑夜,期盼光明的重新到来实在太远了点。我恐惧的不是今天被封的这几个小时,而是我之前真的没有想到过现在的一切限制措施还只是开始,欲望没有满足的时候,不受约束的权利只会得寸进尺的不断循环。我们也算经历了十余年乏善可陈的互联网史,我见证了 xys google sourceforge wiki flickr blogspot youtube 的封了又解解了又封,但相比即将加深的痛楚,之前的经历已经不算什么了

忘了哪个港片里的一情节,两个黑帮几十号人坐一起都假装很乐呵,突然某帮一个新出道的小弟由于缺乏经验,不小心把家伙掉地上了,气氛变得凝重而搞笑,就是现在这种效果。

如果没有现实的朝鲜做例子,就算再多的历史典故也不会让我产生这种惊讶,我以为这种情况是不可能发生的——“你当那几千万人都是傻子么”,现在我只能遗憾的说,看起来是这样。为何我要为凡人操心?什么是我所说的凡人?举个例子,大概是 04 年的时候,我曾经的一个同事,在用 google 的时候碰到了“Connection reset by peer”,他不无嘲讽的说 google 被他搜挎了,他的意思是他的无敌关键词耗费了 google 大量的资源,google 撑不住,服务器垮了,被他一个人搞垮了,可见 google 有多烂,还是用 baidu 好,他几次这么说之后我不得不很认真的去确认他的意思,“你到底是在开玩笑,还是真的这么认为?”(其实这都不用问,人们可能会天天抱怨同一件事情,但不会天天讲同一个笑话)。进而在今天这个时候,我不得不做更多设想,如果一两年后 GFW 的工作卓有成效,五六年后人们该如何认识互联网?就像我那个傻逼同事如何认识 google 一样?或者哪怕说现在,又有几个人能数过来有多少事情被压制、淡化掉了?你今天能知道有个石首骚乱,或者往日的几起屈指可数的事件,也不过是百密一疏而已,还真有人以为这是民众的胜利、互联网的胜利了,就好像真以为是八路军把日本鬼子赶出中华大地的。就算能穿墙的,也千万别以为自己能独善其身,按照传统情节,当一个村庄被诅咒的时候,全村人都好不了

斯布雷斯,你说……我们都是凡人吧?

干嘛突然问这个?你不知道法师最讨厌的就是承认这个吗!

我经常说自己是“不加掩饰的恶毒”,没想到这些人比我更不加掩饰,就好比,你要跟法院打交道了,你本以为法官会跟你说几句黑话,暗示你这事要多少钱才能办成,结果真等见面的时候,法官二话不说很熟练的掏出张菜单一样的东西,明码标价、井井有条,这时候你晕菜不?当 CCAV 推出这么傻逼的《很黄很暴利》第二季并且毫不在意人们谈论那个倒霉的实习生的时候,我被这种简单明了的直白搞的很晕

答:(坚定地)帝国将连同其所有长处一齐消逝。累积的知识会散失,而既存的秩序会崩溃。星际战争永无休止,星际贸易则无法进行;人口剧减而大批星球将脱幅而去,和银河主体失去连系。——剩下的就什么也没有了。

问:(一片寂静中的微小声音)永远?

答:心灵历史学能够预见灭亡,也能描绘接踵而来的黑暗时代。帝国,各位,正如前述,屹立了一万两千年;而将来的黑暗时期则会持续不止一万两千年,而是三万年。第二帝国将会兴起;但在两个帝国之间,将有一千个世代的人类在受苦受难。我们必须为这些人奋斗。

“战争即和平,自由即奴役,无知即力量”

真理部万岁!你们全家都万岁!操你妈的

Posted by Platinum at 03:51 AM | No more content | Comments (0)

June 15, 2009

确保大家都不是 SB,包括自己  

铂 Platinum

已经在不同的地方看到两次这种问题了(可能更早碰到过的没太注意,我相信也有),简单的说就赏罚混乱。

比方说,一些人被安排集体做某件事,可能做的很糟糕——因为各种原因,比方说目标不明确,员工之间不配合,等等,如果不承认这件事已经做砸了,可以找个可笑的借口说延期了(过了 deadline 就是 death,但我见过很多事情连个明确的时间安排都没有),但我说的碰到过两次这种难以琢磨和容忍的事情是,这个时候居然请大家吃饭!

在所有的改善状态的方法里,在这种不恰当的时机聚餐是最错误的选择。这颇有些游戏风格,比方说 KOEI 的《三国志》或者类似的游戏里,所有的问题都简化成几个整数甚至自然数,如果某人忠诚度不够,你赏他件宝物马上就忠诚度 100 了,跟我说的问题比较相似的操作,叫大宴群臣。在游戏里可以这么干,但在现实中这么干简直就是小学生的思维。作为一个主管可以去琢磨为什么效率不高,哪个环节需要被改进,可以有勇气把所有错误承担下来,说归根结底是自己领导不利。不去追究其他人的责任已是最大的宽容,但是对着一个失败的事情摆庆功宴,在我看来是匪夷所思。这是在向员工传达错误的信息,他们会想“哇,我做的这么烂都可以得到主管的认可,他的要求还挺低的嘛”,我相信他们不会去怀着感激的心态,只会认为他们的主管是老好人或者是 SB(其实两者差不多)

大概是在去年的这个时候?在我为一个项目扰的很烦躁并认为那个方案根本就是个错误的时候,突然有一天中午收到通知,所有项目组同仁去吃金钱豹自助!我真的被震惊了

提出去吃自助的主管在我看来并没什么问题,如果大家都是聪明人、心知肚明的话,最简单的理由“反正花的又不是我的钱”。这种人很多,用一个很不敬的比喻,这不是蛀虫,这是蝗虫,人家根本不在乎公司的运营情况,反正换工作也不是很麻烦的事情。我只能认为更上一级的批准此事的主管被耍了(或者更上级,总有人要为此买单吧)

有一个公司我虽然没呆多久,但是正好赶上了年会,我非常敬仰的蔡总在年会上就是这么很直白的说,本来之前的打算是全公司集体去沿海城市旅游,但是最终只是在办公楼所在的地下餐厅办了场自助,因为我们今年做的并不好,离预期差了很远。食物很丰盛,也有抽奖等环节,简单的说年会办的并不寒碜,但是最重要的信息已经传达到了:“再这么下去很危险,所有人都需要努力了”

把这种事情延伸开,我想说下个人不太光彩的经验。

我从小到大撒过很多次谎(仔细计算数量的话,真的很多,而且我相信所有人都如此),我相信有些谎很巧妙,可能我临场发挥不会很好但提前精心安排的话还称得上是成功的,但是,我几乎从来没骗成过我妈。作为家长,这真的很难做到,我见过很多人把自己家长涮的跟孙子似的,但是不管大谎小谎我妈都能轻易识破。我从小学骗到初中,最终我放弃了,相对于我了解的其他同学,我对我妈说的事情可能比任何孩子对母亲透露的都多,我可以隐瞒一些事情不说,她也知道我在隐瞒并允许我保留自己的秘密,但我没法对她说谎

反过来讲,我认为很多家长的教育太失败,根本原因就是被自己孩子涮了,在最初一些谎言成功后,孩子的策略已经不是对父母的策略而是对一个“熟人”的策略,之后就是失控,家长已经把握不定孩子到底是怎么想的了。我拿一个真实而夸张的例子,初中的一任班主任讲的,我们班里有一个最无可救药的问题儿童,他的母亲有一次在车站碰到了班主任,便打个招呼问候一下,顺便寒暄到他的孩子在学校表现还好么,班主任很无奈的说,不知道,我已经有半年多没见到他了。但类似的例子还有不少,虽然没这么糟糕,比方说进京念书或者出国念书的,有很多糟蹋父母钱的垃圾,已经多到见怪不怪了。

能让我明白诚实有多重要,不是因为被灌输多强的道德观念,而是在我妈面前失败了足够多次数后承认现实,明白撒谎的代价和后果,这才是最强的约束力。单单教育子女说“天外有天”或者“出来混迟早要换的”,孩子只能明白句子的语法结构,但明白不了深层含义。所谓诚实与否,不是说一个人从来不撒谎,而是说撒谎的底线是什么、会为什么样的事情撒谎。

跟人相处,心照不宣应该算是一种不错的状态。

Posted by Platinum at 01:22 AM | No more content | Comments (0)

June 5, 2009

特权俘虏  

铂 Platinum

最近看的两部电影和一本书,很凑巧,有些相通的地方,而且这三部作品对这个问题都是点到为止。

这个问题是在看完电影《朗读者》后看的一篇评论杀人犯在我们当中,觉得很有收获,其结尾是这样写的

普利摩·李维曾说:“所有幸存者的回忆都不可靠,不全面,因为他们有幸活到解放。而活得那么久是因为他们比别人喝多一口水,吃多半块面包,甚至可以做轻微一点的苦工,他们是特权俘虏……特权俘虏是集中营人口中的少数,却是幸存者中的多数。他们甚至把反抗的囚犯的头压进汤锅里活活淹死。纳粹让这些人满身罪恶,满手血腥,尽可能地受到牵累,建立起强烈的共犯关系……这些犹太人连自己人也不放过,只是为了多活一个礼拜。这才是集中营的真面目,不只杀人,而且毁灭灵魂。”

“其实能侥幸能活过集中营的这些人,其实并不是真正的见证人。他们其实并未陷落地狱底层。那些真正掉入底层的人,那些亲见蛇蝎恶魔之人,不是没能生还,就是从此哑然无言。”

不了解这些,我们会跟我们的上一代同样盲目。

以至于看《伪钞制造者》时,留意了这个问题

前几天看完米兰·昆德拉的《玩笑》,中间有这么一段

但是《绞刑架下的报告》怎么讲?只有伏契克才能写出它!

而那些缄口不言的英雄又怎么讲?那些英雄不需要把他们最后的时刻变成一个壮观、公开的讲演。伏契克,尽管那是根本没有名气,却认定把他在监狱里的所思所感和所经历的事情告诉世人,给人类留下一些具有概括性的名言是非常重要的。于是他在碎纸片上把这些话全部都潦草地写出来,让那些把纸片偷带出狱,并妥善保存它们的人去冒生命危险。想一想他对那些思想和印象肯定会有的想法吧!想一想他对自己肯定会有的想法吧!

现在他说得太出格了。难道伏契克只不过是个自负的夸夸其谈者吗?

然而没有什么能阻止卢德维克。不,他回答道,那不是驱使伏契克写作的主要原因。主要原因是他的软弱。因为私下表现得勇敢,没有目击者,没有承认,只是面对着自己——这样做需要超乎寻常的尊严和力量。而伏契克却需要一个观众。他在单人牢房幽闭中给自己创造了一个虚构的观众。他需要被人瞧见!让掌声来支持他。如果不是真的,那就是虚构。他需要把他的单人牢房变成一个舞台,要使他的命运变的可以忍受,就的表演它,描绘它,而不是仅仅经历它!

我觉得前面那段评论中的“盲目”这个词用的好。这是群氓和贱民们的显著特征。正是盲目带动了狂热,盲目才是根源,让乌合之众们被教唆、被蛊惑、甚至心甘情愿的去自杀。智力是人和动物的显著差别,在面对死亡的时候,需要尽最大努力搞明白事情的因果关系,换做是我,无论如何也不会甘心去做别人的垫脚石,自尊心不能接受如此。死者没有尊严,广场上的一坨烂肉没有尊严,有些人奉之为英雄和烈士,在我看来这些烂肉或者还会动的肉全都是成就他人名望的垫脚石,抑或是名人随手捡起并抛出去的石子、被淘汰掉的失败基因、进化论的实例。

看看谁会慷慨激昂的悼念那些可笑的卒子,都成了我和刘涛寻找下一个傻逼粪青的乐趣所在,去年和今年各有一个

有句话一直想记下来,一个很老的闷片《阿基尔,上帝的愤怒》,我当初是在《看电影》上看到关于这个片子的介绍的,其中的一句评语吸引了我去下载来看了个究竟

而整次远征,可以看成人类如何被幻想迷惑,被欲望引导,被独裁控制,直到走向死亡的全过程

Posted by Platinum at 01:51 AM | No more content | Comments (1)

May 28, 2009

关于 RO(上)  

游戏 Game

引子

游戏里有个叫“商人”的职业,可以跟 npc 砍价以更便宜买到东西。比方说一种人人都要喝的补给品血瓶,商人买需要 36 元(说的是游戏币),其他人买需要 40 元,那通常这东西的价格是 38 元。为了取得更好的销量,我通常放到人们更需要的地方,比方说同样一杯水,在超市里和在沙漠里的价格是完全不同的。于是我跟 foolfish 吹嘘,我说我以 41 元的价格放练级地点附近,照样能卖出去,说明我很有头脑。foolfish 说,这没什么,你摆 400 也能卖出去,因为总会有人走眼,当成 40 给买走。我以为他在开玩笑,于是恶作剧一样的把价格改成 400。

过一会,我发现居然卖掉了两瓶,恶作剧成功,我笑的很疯狂,接着又切换会大号继续练级了。因为游戏客户端可以开好几个,因此我通常开两个,一个用来在正常玩,另一个额外挣点生活费,因为卖东西只需很简单的几下设置把商店开起来后,就相当于一个自动售货机。很快我已经忘了刚才的事情,等过了一个来小时后,我呆住了,之前的那个恶作剧不是偶然,我已经卖掉了数十瓶,身上的现金已经是我之前财产的两倍多,而手推车里还有大半货物没卖出去呢。

这时候绝对不是恶作剧那么简单了,居然会有这么多人忽略了实际的价格,按照通常的习惯来买东西。利润比从 12% 变为 1011%,这真的很疯狂。我停止了打怪,给商人号的手推车里补满了血瓶,然后去睡觉了。

等我在醒来,手推车空空如也,我身上已经有三十多万游戏币了。感觉良好,请祖国人民放心。

Posted by Platinum at 05:51 PM | Continue reading (17.4 KB) | Comments (0)

May 27, 2009

求解惑:为什么 18 位身份证的校验最后要除 11 而不是 10  

代码 Coding

最近才需要做这个功能,才明白这个问题。18 位身份证的最后一位是校验位,取之前 17 位每一位乘以对应系数的和,得到个大整数,最后除以 11,得 0 - 10 这 11 个数,如果是 10,身份证上用 X 代替。

可能是我选的关键词有问题,以至于搜了好久也没能解开我的疑惑,为什么要除 11 而不是 10,如果除 10,身份证上将不再有 X,那会有更大的适用性。例如,在数据库里可以作为大整数而不是字符串存放,又比方说计算器那类很弱的液晶屏有些只能显示数字不能显示字母。我搜了半天只搜到很多人有跟我一样的疑问,却没有人能正经回答这个问题。

我搜到的回答,都是在解释“为什么会有 X”,这很好解答,“因为除以 11 后有可能余 10,所以用 X 代替 10”。但我的问题是“为什么要除以 11,而不是 10”,这是两个问题,所答非所问。

小张说设计身份证的人不至于这么简单的问题都绕不开,一定有更深层原因,比方说某些惯例、规范之类的。可在我看来除 10 的好处远大于 11 的。我也希望设计者不是 SB,但我实在想不出原因了,在表示谨慎的怀疑的同时求解


Update 感谢所有热心解答的朋友,希望得到更多的解答,你可以在这里留言

网友 卷心菜 给出的解释是这是 ISO 标准,我看了下这个 ISO 7064:1983, MOD 11-2,搜出的结果都是跟身份证有关的,我怀疑这是中国提交到 ISO 的标准,而非沿用 ISO 的已有标准,而且还没到最终原因上

网友 tangfl 的解释是因为 11 是质数,所以碰撞几率更小。还没怎么细想,感觉这种简单的 hash,在 MOD n 时碰撞几率就是 1/n,应该跟是不是质数没关系。也可能是我思维还没跟上去


另附身份证校验的 PHP 函数,如果像我一样之前没接触过的可以快速了解一下。

<?PHP
function checkIdentity($sIdentity) {
    if (
strlen($sIdentity) != 18) {
        return 
FALSE;
    }

    
$sVerify "10X98765432";
    
$aWeight = array(7910584216379105842);
    foreach (
$aWeight as $iOrder => $iWeight) {
        
$iVerify += $sIdentity[$iOrder] * $iWeight;
    }
    if (
$sVerify[$iVerify 11] != $sIdentity[17]) {
        return 
FALSE;
    }

    
// 还有些别的判定,户籍编号、日期合法性之类的,略

    
return TRUE;
}
?>

Posted by Platinum at 02:38 PM | No more content | Comments (4)

May 14, 2009

杂念 2009.05.14  

铂 Platinum

最近开始看美剧了,《别对我说谎(Lie to me)》感觉一般,但总比《Lost》那种无聊SB封建迷信片子要好吧。松鼠会里虽然也有介绍,但实在说的是太浅了,没什么价值,我更希望看到像那堆批判《豪斯医生》的文章。

我不太喜欢其中的故弄玄虚,即归纳出一个表情,然后放点克林顿、尼克松、一些美国近代著名公案的被告们的相同表情。这太片面了。就像算命书里,关于算名字的,告诉你怎么选字,然后说些王侯将相事业多NB,因为他门的名字符和我算命经里哪条哪条,其实这些规矩正是专门为这些名人修正过的啊。就像《实话实说》刚开办不久,有次节目嘉宾是最早在媒体上揭露圈圈邪教的一名记者,说了个事,那些教徒要跟他理论,跟他说你知道雷锋吧,雷锋行善就是因为他信圈圈,记者回敬他们说,你这完全是逻辑错误,比方说你爹是白胡子老头,你不能说白胡子老头都是你爹。

当然导演是聪明人,他知道哪些是娱乐大众的,哪些是说事的(再岔开,《贫民窟的百万富翁》这种道德败坏的宿命论片子能成奥斯卡最大赢家,基本上是因为那些学院教授都相信人民是SB)。这个片子给我的提示是,要如何克制那些微小的表情和举动,要训练自己,虚弱的时候脸应该像打过肉毒素一样,让别人琢磨不透你到底在想什么,特别跟很聪明的人谈话的时候。虽然两样我都不会,但我觉得控制表情比控制持刀歹徒更难炼就。就像以前看唐骏的人物特写,连口头禅都能戒,这事让我琢磨好久,一个人自制力如此,真的很可怕。


最近两年多遇到的两个对我来说很重要的人,都很无奈的说我很坦率(按我自己的形容,直白得令人尴尬)。我觉得更糟糕的是,我不认为这是错的。我知道,很多人喜欢当爷,我也不是没装过孙子,但很多时候没有去做那些我认为最正确的选择。这和人类为什么会自杀一样让人费解。

对话可能是这样开头的,“我打算说的这个事,可能你会觉得这个不错,做出很赞赏的表情,也可能心理在想,这傻逼都说了些什么胡言乱语,这都无所谓,只要你知道我想的是什么就好,怎么判断是你的事情”

其实你知道我昨晚最后的念头是什么么

干好了,大家都有肉吃,退一步讲,就算没干成,你也欠我个人情(我是比较自负,认为出了问题自己不会是拖后腿的那个),将来给我闺女找学校的时候你起码能指点我一下钱往哪送


最近读了一本书,《计算机程序的构造和解释(Structure and Interpretation of Computer Programs)》,说实话没看多少,只看了几十页,越看越费力,绝对不适合在地铁或者厕所里阅读。但必须对所有程序员吐血推荐此书。而作为一本美国教材,这种教育差距挺让人绝望的,因为你永远没法假设中国能有几所大学会用这本教材作为本科教材(我不想做没有建设性的抨击,说谭浩强爷爷一个人教你 BASIC、Fortran、Cobol、Pascal、C …………等等等等,有多不好)。但一个学生能在大二之前读通此书的话,真可以说前途无量。


最近看的值得一提的电影是《谍影重重》三部曲。我憎恨剧透,简单说两句不太透的:我很奇怪前两部的 IMDB 评分没上 8。很励志,可以教教小男生什么叫有型。很聪明,就像以前看过的一句对《疯狂的石头》的评价:“这是一部不侮辱观众智商的电影”,其实看到聪明的电影跟看到聪明的人一样,你第一眼就能认出来。我在试字幕挂没挂上的时候看了个半分钟画面,之后就认定这个片子一定要看。

还好,我是今年才知道这部片子,不然要知道有三部非急死。


发现自己有很多强迫症状,很怀念那个强迫症电视剧《神探阿蒙(Monk)》,可以理解为《雨人》偏正常人版,只不过片子太老就算有人去下最初的几季可能也没什么源了。

Posted by Platinum at 12:34 AM | No more content | Comments (0)

May 10, 2009

针对应届生的 PHP 面试题  

代码 Coding

为什么要招应届生?不是因为便宜,有人说还没跳过槽的人忠诚度能搞些,这也不尽然,有些人没经受过工作的压力,总以为自己碰巧找到个压力大的工作,换换会好些。我的原因是……应届生好调教。在他们没有被各种枯燥乏味的工作折磨的以为写程序本来就这么 SB 之前好好洗洗脑子。


1、2、3 是基础题,4、5、6 问的是数据库操作,7 算是综合能力吧。

1. 进制运算

可以是让他模拟一些简单的字符串函数,类似 bin2hex、base_convert、base64_encode,或者单纯的,让他手动算一下 7 进制的 54321 显示为 9 进制是多少。

应该高中或者之前就能接触到 2 进制 10 进制之间的换算了吧,当然,他当时很可能没听懂。通常的情况,如果以前没留意这个问题但有理解能力的,可能能在几分钟的做出一些成功不成功的尝试。至少不应该很茫然。最糟糕的情况,连整数的最大值是多少都不知道,那就算了。

2. 描述一下常见的关于读取文件内容的操作,及各自的特点

应该不用迟疑太久就把 file、fopen、file_get_contents、readfile 列出来。表现好点还可以提下 readfile 的流式读取不占内存之类的。如果看的教材太老,可能只会说 fopen。最糟糕的辩解是不说跟数据库打交道比较多,文件操作没怎么接触过,完全无视文件静态化的存在。

3. 怎么模拟一个 POST 表单提交

答 socket 或者 cURL 都可以。

4. 列举一些常规优化方式

正确索引(就不强求完全理解多列索引了,最好能知道每个查询只能用到一个索引),知道索引提高查询速度、降低插入速度。正确的字段类型(能知道 char 和 varchar 的区别和优缺点)。text 类字段可以单放一个表用主键关联。总之他能说的越多越好。顺便问问他他所知道的最大处理能力是每秒多少条,哪怕是测试环境里的 benchmarking(今天看到份简历,号称三年工作经验,将半个月三万条插入形容为他所遇到的最高的负载,写在简历的醒目位置)。

5. “你知道,把时间存在数据库里有两种方法,一种是用时间戳,就是 PHP 函数 time() 产生的那种整数,另一种是 MySQL 里字段类型设成 datetime。那么,为什么一定要后一种方式?”

最简单的一个例子,如果存的是时间戳,你无法按类似“所有周三的数据”这种方式显示内容。这表明了他的学习阶段:是否接触了类似日志分析类的东西。因为这些是早晚都要接触到的。

6. 简单联表查询

有这么两个表

user 表:

id  name
1   张三
2   李四
3   王五
4   赵六

apple 表:

id  user  number
1   1     5
2   3     3
3   1     8
4   4     6
5   3     2
6   4     2

apple 表的 user 字段跟 user 表的 id 对应,一条 SQL 语句查出每个人都有多少苹果

如果他不知道 join,可能会这么写

SELECT user.name, SUM(apple.number) FROM user, apple WHERE user.id = apple.user GROUP BY user.id

正确答案应该是这样

SELECT user.name, SUM(apple.number) FROM user LEFT JOIN apple ON user.id = apple.user GROUP BY id

这两条语句的差别是,不用 join 无法显示出李四有 0 个苹果 -_-

7. 假设我们要做一个公交系统的常见服务,就是做查公交车怎么倒车的。假设完全由你自己来搞,我只关心最后结果,你会怎么做这个项目。说的越详细越好。

可能需要不断提示。考查一个人的做事能力,比方说他首先会想到需要数据,数据库应该怎么设计,有几个表,什么样的字段。
可以加分的地方可以有这么几个点。给站名编 id,匹配数字的速度要远大于匹配字符串。站点之间要距离的数据,这样计算最优倒车路线应该能考虑到站数,倒车次数、距离等权值。如果很有远见,任意两点之间的数据应该是提前算好的,比方说有 200 条公交线路和 2000 个站点,始发终点的组合可能是 2000 * 1000,每种线路可能有 1 - 6 种方案,有个表是来装这近一千万行结果的,如果有线路变化,再用本地的机器重新算一遍线路。这样整个系统才有实用价值。不然可能每次查询都需要耗费数秒或者更长时间,只能当单机软件用。


这些题本身是交流的话题,而不是“做对 5 道以上我就招你”这种门槛。我面试时每道题都会给予充分的时间,如果他做不上来,也起码能判断他的思考方式,而忌讳说“如果你不知道就明说,咱们赶紧做下一题”。同时也能观察出性格等方面。比方说第 6 题,有人把 SUM 写成 COUNT,我就问他你看看前面写的是否有问题,同时又怕太明显,又补充一句“也可能什么错误也没有、我在误导你,你自己判断”,于是他就不再理会、继续接着写完整个 SQL。再综合他的其他一些表现,我的结论是此人主见极强的,我不会用。属于出了 BUG 第一念头是 BUG 在解释器上、做出来的程序跟产品需求不符时会说是你产品没说明白的那种。相反,我很欣赏那些在做完第一道题的 7 进制转换后还知道验算的,因为既然是笔算就很容易出错。我觉得这种人思考严谨、负责任。

其他的一些知识,比方说 memcache、SVN、单元测试这些,都属于经验问题,应届生很少需要接触到这些东西(甚至文件静态化也很少碰到),不像上面,我需要以此来判断面试者对编程是否已经入门。

还是在 ngacn 上看到的一句话,团队需要两种人,要么 NB 的,要么听话的。

Posted by Platinum at 03:21 PM | No more content | Comments (7)

April 18, 2009

绝招二则  

代码 Coding

都是从同事那听说的,当时觉得很绝,又觉得不好广为传播,现在已经过了三四年了,应该可以“解禁”了吧。

桌面软件必然会被破解,高明点的会给你弄出个 keygen,恶劣的会给你整个 crack patch。同事当时在做共享软件,被 cracker 搞的很影响收入。于是他再出新版的时候,同时偷偷以另外的身份放出破解程序,那些 cracker 一看有破解了,自然不会再碰别人剩的馍,转而去破解其他软件。而真正的使用者在下载了破解程序后发现……破解不好使。

前几年流氓软件铺天盖地,装机量几百万的流氓软件很平常,但是流氓也有流氓的烦恼:软件是要升级的,哪怕是流氓软件。要你去做自动升级程序你会怎么做?去网上某个地址读一个文本或者 XML 文件,里面写着版本号,有变化就去下载新版本的。但要知道,这么大的访问量,自己也要掏很多钱买机器买带宽的。为了节省开支,人家不去读版本文件,改读 DNS,把 ip 当版本号,比方说检查 version.example.com 这个域名的 ip,软件版本是 1.06,查 ip 一看是 1.0.7.0,哦,有新版了,那就升级吧。

Posted by Platinum at 12:19 AM | No more content | Comments (5)

April 17, 2009

打造一套高度可扩展的缩略图网站接口  

代码 Coding

关于缩略图,大部分网站是这样处理的:在获得一张图片的同时,显式或隐式的生成几种不同大小的图片,以备将来使用。比方说,用户头像、上传的照片。通常这已足够。特别是那些功能相对简单(这绝不是贬义,如果不喜欢,你可以理解为“专一”)的网站。

但是需求总是在变化的,比方说在一次改版后,设计师希望用户的头像从 50px 扩大到 60px,使之更美观,你可以抱怨设计师的反复无常,继而以种种理由告诉设计师这东西没法变——需要太多的时间和精力应对每次改变。但从一个较长的时间跨度来看,不改版是不可能,你不能指望设计师从一开始就把所有需求钉死,就好像你永远也不可能写出完美的程序一样。

另外,在上一个项目中,用户头像和相册功能是不同的人来做、运行在不同的服务器上,但都是图片处理,都需要考虑临时目录、磁盘剩余空间、负载等问题。

缩略图接口就是为了解决以上两个问题

甚至我也说不好,是不是因为之前看过的 Abusing Amazon images 一直让我念念不忘(可能这个页面更直观一些),所以让总想在工作环境中尝试它。那篇文章的核心就是通过复杂的 url 来控制图片的合成、旋转之类的各种效果。这样实际上所有图片的使用都分成了两个问题:1.图片服务器根据集成在 URL 上的各种参数来返回相应的图片。2.图片的调用者只需要关心,输入几个参数,返回一个对应的 URL 字符串,他根本不用管 URL 的具体格式,只要保证在模板中恰当的放到 <img src=" 后面

我只是想缩放图片,没有 Amazon 的那么复杂。实际上 URL 中要包含这些参数:缩放后的宽高、缩放方式(这个稍后解释)、图片的原始 URL。

比方说原始 URL 是 http://photo.example.com/dir/hash.jpg

那么缩放后的 URL(假设是宽高各 60 的)就可能是这样:http://resize.example.com/w60/h60/style1/photo.example.com/dir/hash.jpg

缩放的服务器在接收到 URL 后,先 wget 这张图片到本地,然后用 imagemagick 的 convert 命令缩放,最后 readfile 该图,或者缓存里已经有了,直接 readfile,但无论如何,最终都是返回图片。

而在用户看到的大部分页面里,HTML 代码里都直接链接着 resize.example.com 而非 photo.example.com 的图片,所有的访问压力、所有需要动用的手段(反向代理、CDN 之类的)也都集中在这个图片接口的域名 resize.example.com 上

简单的原理或者说过程即是如此,但实践中遇到的各种各样的问题还有很多。


这是一个高负载的应用,对 CPU、内存、硬盘容量和速度要求都很高,但核心的部分就是 imagemagick convert,绝大部分的资源消耗都在这里。因此使用哪种语言、哪种 web 服务器,都是无足轻重的事情。

我虽然用的 PHP,却没有使用 MagickWand 这个扩展。最大的理由,KISS 原则,我不想在任何升级后还要等相应的扩展被编译、测试后才能使用,所说的升级包括 PHP、MagickWand、ImageMagick 这三者,他们之间的组合所可能产生的问题要比 PHP 和 ImageMagick 的两者各自的升级带来的问题要多得多。实际上 PHP 只是 URL 参与到 convert 命令参数之间的翻译工具,实际的转换我都是在用 exec("convert -q ...") 来完成。并且升级是必要的,举个例子,即使是 2008 年的 ImageMagick 6.3.2,在处理 GIF98a 动画格式时仍然有 BUG。

Posted by Platinum at 11:45 PM | Continue reading (10.4 KB) | Comments (4)

April 16, 2009

臭豆腐是人类最恶心的发明  

铂 Platinum

我真搞不明白清朝那个始作俑者是怎么想的:豆腐放坏了——他不可能没有其他东西放坏的经历——以至于这东西看起来跟屎一样,闻起来也跟屎一样,按照常人的判断,绝对不需要再用嘴来尝一下是不是吃起来也跟屎一样。但他终究还是吃了。

吃完还不要紧,在他吃的时候,他身边的人必然会惊呼“王致和吃屎啦!”他怎么说服别人的我不知道,但一定很有技巧,肯定不是我所想的台词“虽然这东西看着闻着跟屎一样,但吃起来真的很香,不信你尝尝”

但我万万没想到,肯去验证这东西是不是屎的人比重会这么大。一至于百年之后,这个行业依然存在。ctmd

Posted by Platinum at 11:01 PM | No more content | Comments (1)

    July 2009    
1234
567891011
12131415161718
19202122232425
262728293031

[ Show the Last 10 Archives ]


按分类归档


按月归档

[ More Archives ... ]



链接

其他

Search in Soulogic.com
Google

访客来源列表


用户名
密码