2010年12月30日星期四

阮一峰的网络日志

阮一峰的网络日志


悼任兰

Posted: 29 Dec 2010 05:21 AM PST

1.

今天早上,打开新浪微博,看到别人转发的消息

"作家、文化评论家、自由撰稿人-任兰(娃娃)女士因突发性心脏病于公元二零一零年十二月二十七日晚十一时在深圳仙逝,享年三十七岁。为寄托我们对她的哀思,兹定于二零一零年十二月三十一日下午二点整于深圳百花二路 '物质生活书吧' 举行追思纪念仪式。

特此讣告

任兰(娃娃)女士治丧委员会"

我愣了一秒钟,突然意识到,天哪,是任兰!

怎么会发生这样的事件?我无法相信,几乎当场失态。多年不见,没想到再见却是这样的消息。

2.

认识任兰是在2003年(或2002年底),忘了什么原因,大概是她发Email向我约稿。然后聊起来,发现居然是校友。我们读过同一所大学,都觉得没意思透了。不同的是,她毅然退学了,而我一直读到了毕业。

从邮箱里翻出了现存最早的来信,2003年4月28日,她群发通知变更了信箱:

"From: "Wa Wa"

Sent: 2003-04-28 22:38:32

Subject: 娃娃新邮箱

我已搬到wawa2046@tom.com 定居。

目前本人身体状况正常,三围之中围已经遭到破坏,下围未发生改变,上围有所发展。根据民意调查,总的来说,从后面看起来还是一个有吸引力的女人。

祝好。

娃娃"

然后是2004年6月1日:

"阮大侠,

在忙什么?还记得我吗?好久不见。我生了一个女儿,和蒋志,就是上次谬杂志的发起人。

我们九月份应会去上海,你那时在吗?还有什么新书要买吗?可以开单子来。我八月会去一趟香港。其实台湾的书更多更便宜,可惜太难去了。

从6月15日起,一连三个星期,凤凰卫视中文台"冷暖人生"将播出我和孩子他爹策划并参与制作的三期节目,有时间记得捧场啊!

日期:6月15,22,29
时间:晚10:35 -11:10

任兰/娃娃
于深圳"

最后的来信是2004年9月3日:

"站长,

你好!我是深圳的娃娃,九月底(26号左右)铁定会和蒋志去上海一趟,你在吗?如果凑巧的话,希望可以得见真身,真是仰久了。你在我的"上海想见的十个人"名单上,排在三甲内呢。

你的网站地址是什么?我搞丢了,到实名搜索上也找不到。现在我也干起了和书有关的事情,帮本地的一份大报每周写书评专栏,千五字的本周推荐,一次四本,个人化的,可以骂人,也可以偏心,爽!只是工作量挺大,老要往书店跑,每周还至少要读完两本书(另两本可以只翻一下)。

我的联系电话是:138xxxxxxxx,宅:2500xxxx。公司电话还不知道。你的电话方便透露吗?

我刚找了新工作,下周一去上班,在《女友》时尚版杂志的做编辑。

祝 好!

娃娃"

可惜后来还是没见成,再后来渐渐就没了联系,然后就是今天。

3.

翻看任兰的微博网志,我才知道她的人生变得如此丰富,相比之下,我未免有些自惭形秽了。

转贴吴文光的追思文章:

=============================

娃娃,这个名字我们会一直叫下去

吴文光(写于12月28日)

右:娃娃,左:丈夫蒋志,图为2009年蒋志拍摄《娇羞》系列后两人补拍的婚纱照之一(蒋鹏奕 摄)

今天不得不说一个悲伤噩耗:一个好朋友、和草场地密切相关的一个好朋友娃娃突发心脏病去世。

噩耗是刚刚突然收到朋友短信知道的,是昨天,27号,娃娃在深圳突发心脏病去世。这个消息太突然了!前几天还在深圳,和高鸣、还有老郭吃饭时说到娃娃也在深圳呢,但没见着面。之前两年12月在深圳OCAT做这个剧场节,娃娃都在,还来看演出,一起聊,喝蟹粥。但这次没见,以为她忙着或别的事,没有太留意。没留意间,我们25号前脚离开深圳,两天后娃娃后脚也离开,离开的不只是深圳,还有北京,还有中国,还有我们,还有这个我们依然挣扎其中的人间。

这个娃娃,可爱的娃娃,就这么撒手走了。留下蒋志,留下两个可爱的娃娃,留下我们,还留下被众多人关注的微博。她应该还留下很多,留下的是什么,这些会让我们这些还还没有走的人慢慢去想,去回味,去追念的。

很多有关娃娃的事这时都涌上来,堵在心里,挥之不去。大概是10年前吧,头次见到娃娃,在当时我住的冰窖口家里,娃娃来访,说是代蒋志当时工作的"凤凰周刊"采访。确实一张娃娃脸,说话不紧不慢,音调平均,清晰,敏捷。以后见得多是2005年有了草场地后,她几乎所有活动都来,比蒋志来得多,帮忙,所有重要的工作坊和讲座现场翻译都是她来担当,被尊称为"草场地首席翻译"。就在今年夏天的"荷中表演艺术交流"活动中,也有娃娃的现场翻译。没想到的是,这居然是娃娃在草场地的最后一次翻译。

娃娃的现场英文翻译是极有口碑的,大家这么说,被翻译的老外也这么说。有她在现场翻译,特别是表演工作坊,领导工作坊的艺术家的意思总能顺当流到参与人那边,准确,迅速,到位,甚至连节拍都有了。每次草场地一有国外艺术家来做工作坊,我马上就想:上帝保佑,让娃娃能有空能来。而娃娃的回复总是:没问题,吴老师,我随叫随到。为什么娃娃能这样?她说:我喜欢这种表演工作坊,也想给草场地帮忙,给大家帮忙。这是好事。即使是她还带着三岁的女儿时,也一样来做翻译,带着女儿一起来。让女儿自己一边玩。有一次她和工作坊做翻译,我和她女儿玩。后来小姑娘在我怀里睡着了。我很快乐,觉得自己是个称职的保姆和伯伯。

娃娃走了,我努力在回想曾经有过的那些令人高兴、快乐和值得怀念的事。我知道现在的蒋志、还有她的两个娃娃和亲人、还有她众多的朋友都很悲伤。我努力回想高兴的事,是想把悲伤赶走。对类似这样的噩耗,我不想接受,但没法拒绝,已经发生,我只有认为,这是宿命。她非要走,拉也拉不住。留下我们,就怀念,怀念那些美好的过去。

10年前,娃娃和我见面,自我介绍:我叫娃娃。"娃娃"这个名字叫了10年,是朋友中喜欢叫的名字,也只是留给喜欢她的朋友叫的。她的大名是任兰,也许很多人不知道。这个不重要,"娃娃"这个名字我们会一直叫下去,叫很多很多年,叫到我们也"走掉"为止。

娇羞的娃娃,蒋志 摄,2009

================================

4.

12月22日的微博,任兰写道:

"两岁半的小宝躺在床上,有点儿跑调地唱着一句自编歌:'小蚂蚁啊爱刷牙,天天刷牙真可爱----'完了,他指示:'你唱!'我严格按着他跑调的轨迹唱来:'小蚂蚁啊爱刷牙,天天刷牙真可爱----'小宝笑了。我问:'唱得像你吗?''像。你唱得真好听。'----瞧瞧人这情商!"

12月23日,她写道:

"我回深圳,简直就是回来生病来的~~~尽管我怀揣一颗深圳心,可我的北方身体,它已经不认这里的湿度、温度和光照。感冒发烧,如丝袜抽丝,懒蛇蛇,镇日价昏沉沉,再上不了台面。停博休养。祝圣诞及新年快乐!"

这就是她最后一次发言了,4天后去世。

5.

任兰曾经对我说过,因为喜欢三毛翻译的漫画集《娃娃看天下》,所以笔名起为"娃娃"。

那本漫画集的主角,是一个可爱的墨西哥女孩玛法达。

漫画中的人物依然可爱,可是喜欢漫画的人已经走了,怎不叫人感伤。

6.

一个活生生的人,转眼成了历史。十年前的文字,还恍然如昨日,可是我们已经从青年变成了中年。十年的青春去了哪里,又换来什么?

人生啊,还没有走出多远,还一事无成,就已经开始苍老,乃至衰亡。今天是娃娃,我们又会剩下多少时间呢?

7.

多想回到以前,和你重新认识,多多了解你,可惜此生已经没有机会了。

娃娃姐,想念你。

===================================

附录

书过眼001

文/任兰

转自http://blog.sina.com.cn/s/blog_4aecaefa0100o3tn.html

今天要介绍的是台湾朱家姐妹的小说,人家夸耀门第是一门三进士,她们是一门五作家,三姐妹加上父亲朱西宁,女婿谢材俊(笔名:唐诺)。母亲刘慕沙是日本文学翻译家,朱天衣后来不写了,改教小孩子写作文,教了二十年,也卓然有成。天文和天心一家都住娘家,"刘慕沙常在入夜到屋后遛狗,遥望每个房间灯光里埋首创作的剪影,只觉真是气势很旺的一座小说车间。"(《联合报》访谈)

据说,天文天衣两姐妹从未分开超过一个月以上,两人数十年如一日居住在同一幢屋子内,"一起生活,一起养猫救猫结扎猫,接触大致相同的寥寥可数友人,读一样的报,交换传递彼此看完的书云云。"朱天文由爱猫相陪,宅在家中写作。朱天心、唐诺夫妇把咖啡馆当作工作室,一早拎包出门,早中餐全在那儿,咖啡可以续杯,坐到下午"下班"回家。生活简单低碳。

唐诺自己是推理小说家,做过出版社总编。书评写得好,台湾出版的多本名家推理小说都是由他写的导读。格雷厄姆·格林、翁贝托·埃科、劳伦斯·布洛克、约翰·勒卡雷进入台湾的书店或多或少跟他有关。唐诺称自己是"专业读者"他把自己的写作当成一种报恩,"某种文字共和国公民的应尽义务"。在《阅读的故事》里跟着他这样专业的导游畅游书海,真是快事。

唐诺这样提到自己的作家太太:"小说家格雷厄姆·格林在他小说《输家全拿》中一个有趣的发想:书中的主人翁流落到赌城,偶尔从一个老头手中得到一个必然赢钱的赌法,但这个最后必然大赢的赌法非常诡异磨人,它必须先挨过一定阶段的输钱,只能输不能赢,而且明知是输亦一步也不能省----我记得写小说也是葛林迷的朱天心引用过这个例子,据说她在新小说能顺利开笔之前总要经过同样短则数日长则数星期的枯坐思索(在小说题材业已锁定的状况下),明知一无所获仍得每天带著书、草稿本和笔到写作的咖啡馆报到,她的口头禅便是:'去输钱。'"

两姊妹写得都非常慢,朱天文的长篇小说《巫言》写了八年,朱天心最近两本书之间隔了十年。当然,她们也并非在虚度光阴,其间天文跑去帮侯孝贤写了四个剧本:《千禧曼波》、《咖啡时光》、《最好的时光》和《红气球》。天心则是写一部大书失败,转而斩获了一本小长篇《初夏荷花时期的爱情》。

《巫言》是一本"写给下一轮太平盛世女性的、实物的备忘录。"有着博物志的庞大和芜杂面貌,新人类男女、老文人、不结伴的旅行者纷纷出画入画。作者说,这是一本从任何地方打开就可以读的书。朱天心的《初夏荷花时期的爱情》则是写"一对没打算离婚,只因彼此互为习惯(瘾、恶习之类),感情薄淡如隔夜冷茶如冰块化了的温吞好酒入久洗不肯再回复原状的白T恤的婚姻男女"用新的眼光看待彼此感情的故事。

朱天文和朱天衣使用的是古典雅致的中文,筑造在坚实的古文功底上,沾染了人间烟火,但还是有一种大气象。民国的好东西,被带到台湾去的,可不止故宫内的珍宝。梁文道曾这样向朱天文解释她在大陆受到追捧的原因:"如今的大陆文学是从口语上发展起来的,而台湾文学则是延续着书面文字的传统发展的,几十年下来之后,两者之间已经有了很大的差异,因此对于大陆读者来说,朱天文的文字就显得比较物以稀为贵了。"

确实如此,我认识的几名美院在读研究生,英文程度好到可以读原文书籍,可老师交待的阅读资料里,一篇鲁迅用文言文写的《摩罗诗力说》,大家都说不大看得懂。海峡这边的人中文不够好,却不代表不会欣赏好的中文。密度高的文字,上手便知。大部分的小说,我都是一两天翻完了。手机里的推理小说,更是以两小时一本速战速决。唯有这几个人的书,我爱惜地每天读一点点,含话梅似的,定要那滋味绵长。对待乌冬面和鱼翅捞饭,当然要采取不同的态度和速度。

说起朱氏姐妹,便不能不提到胡兰成和张爱玲。胡兰成的台湾版《今生今世》就是由朱天文任发行人的"三三书坊"在九零年率先出版的。台湾文学评论家黄锦树认为:"(胡兰成的)影响是全面的、压倒性的,从审美观、写作观、人生观、宇宙观,甚至,'民国观'。他'煽动了他们的青春'......一种饶具古典意味的浪漫写作,有一股纯真的傻劲,构成朱家姐妹写作的基本场景。"作为胡兰成晚年的大弟子,朱天文一直有意无意和张爱玲角力。

《巫言》取得了很高成就,有人认为她已经和张爱玲平了。朱天文自谦说自己写《巫言》的时候比张爱玲写《传奇》时大了近三十岁,胜之不武。我以为《巫言》就小说的技艺来说确实精湛,视野开阔,唯张爱玲的书是文人也爱看,女学生和女店员也爱看。朱天文的书就不大可能被翻得皱巴巴地丢在发廊的座椅上。

皇冠今年出版张爱玲的《对照记》,是一个新的选本,加入了首次面世的三万多字的残稿《异乡记》。这是张爱玲新一轮考古发掘热潮里的一波。最最新鲜的发现是张的未出版的英文自传的中译本《雷峰塔》和《易经》,在"淘宝"卖港台书的店子里,队都已经排起一条长龙了。

朱天文曾说过:"华语文学里有'三国'和'红楼梦'两大叙事传统,'红楼梦'传统阴错阳差漂洋过海到了台湾,一直没有断;'三国'阳刚的宏大叙事则在大陆。""红楼"传统正是通过张爱玲、胡兰成,薪火相传到朱天文、朱天心这里来了。说起来他们都是一条绳子上的蚂蚱。

* 《初夏荷花时期的爱情》朱天心 世纪出版集团上海人民出版社 2010年8月出版
* 《今生今世》(上、下)胡兰成 三三书坊/远流出版 1990年9月出版
* 《对照记》张爱玲 皇冠出版社 2010年4月出版
* 《巫言》朱天文 印刻出版公司 2007年12月出版
* 《阅读的故事》唐诺 世纪出版集团上海人民出版社 2010年8月出版


(完)


2010年12月27日星期一

阮一峰的网络日志

阮一峰的网络日志


PHP最佳实践

Posted: 26 Dec 2010 08:55 AM PST

今天下午,我在读下面这篇文章。

虽然名字叫《PHP最佳实践》,但是它主要谈的不是编程规则,而是PHP应用程序的合理架构。

它提供了一种逻辑和数据分离的架构模式,属于MVC模式的一种实践。我觉得,这是很有参考价值的学习资料,类似的文章网上并不多,所以一边学习,一边就把它翻译了出来。

根据自己的理解,我总结了它的MVC模式的实现方式(详细解释见译文):

  * 视图层(View):前端网页;

  * 逻辑层(Controller):先是页逻辑(Page Controller),负责处理页面请求;然后,调用业务逻辑(Business Controller),实现具体功能;

  * 数据层(Model):数据保存在数据库之中,上面有一个数据库抽象层,再上面则是一个"数据访问对象"(DAO),它生成"值对象"(Value Object)。业务逻辑通过DAO,操作值对象。

=======================================

PHP最佳实践

原载:http://www.odi.ch/prog/design/php/guide.php

译者:阮一峰


本文给出了PHP程序设计常见问题的解决方法,同时简单描述了PHP应用程序的架构。

1. php.ini设置

php.ini控制了解释器的行为,下面的一些设置保证了你的程序有最大的可移植性。

i. short_open_tag

设为0,即永远使用PHP的长标签形式:<?php echo "hello world"; ?>,不用短标签形式<?= "hello world" ?>。

ii. asp_tags

设为0,不使用ASP标签<% echo "hello world"; %>。

iii. magic_quotes_gpc

建议在脚本中包含一个全局文件,负责在读取$_GET、$_POST、$_COOKIE变量之前,首先检查这个设置是否打开,如果打开了,这对这些变量应用stripslashes函数。(注:该设置已经在PHP 5.3中被废除。)

iv. register_globals

不要依赖这个设置,永远通过全局变量$_GET、$_POST、$_COOKIE去读取GET、POST和COOKIE的值。为了方便起见,建议声明$PHP_SELF = $_SERVER['PHP_SELF']。

v. file_uploads

上传文件的最大大小,由下面的设置决定:

  * file_uploads必须设为1(默认值),表示允许上传。

  * memory_limit必须略大于post_max_size和upload_max_filesize。

  * post_max_size和upload_max_filesize要足够大,能满足上传的需要。

2. 配置文件(configuration file)

你应该把与应用程序相关的所有配置,写在一个文件里。这样你就能很方便地适应开发环境的变化。配置文件通常包含以下信息:数据库参数、email地址、各类选项、debug和logging输出开关、应用程序常数。

3. 名称空间(namespace)

选择类和函数名的时候,必须很小心,避免出现重名。尽可能不要在类以外,放置全局性函数,类对内部的属性和方法,相当于有一层名称空间保护。如果你确实有必要声明全局性函数,那么使用一个前缀,比如dao_factory()、 db_getConnection()、text_parseDate()等等。

4. 数据库抽象层

PHP不提供数据库操作的通用函数,每种数据库都有一套自己的函数。你不应该直接使用这些函数,否则一旦改用其他数据库(比如从MySQL 转为Oracle),你就有大麻烦了。而且,数据库抽象层通常比系统本身的数据库函数,更易用一些。

5. "值对象"(Value Object, VO)

值对象(VO)在形式上,就像C语言的struct结构。它是一个只包含属性、不包含任何方法(或只包含很少方法)的类。一个值对象,就对应一个实体。它的属性,通常应该与数据库的字段名保持相同。此外,还应该有一个ID属性。

  class Person {

    var $id, $first_name, $last_name, $email;

  }

6. 数据访问对象(Data Access Object, DAO)

数据访问对象(DAO)的作用,主要是将数据库访问与其他代码相隔离。DAO应该是可以叠加(stacked)的,这样就有利于将来你再添加数据库缓存。每一个值对象的类,都应该有自己的DAO。

  class PersonDAO {
    var $conn;

    function PersonDAO(&$conn) {
      $this->conn =& $conn;
    }

    function save(&$vo) {
      if ($v->id == 0) {
        $this->insert($vo);
      } else {
        $this->update($vo);
      }
    }


    function get($id) {
      #execute select statement
      #create new vo and call getFromResult
      #return vo
    }

    function delete(&$vo) {
      #execute delete statement
      #set id on vo to 0
    }

    #-- private functions

    function getFromResult(&vo, $result) {
      #fill vo from the database result set
    }

    function update(&$vo) {
      #execute update statement here
    }

    function insert(&$vo) {
      #generate id (from Oracle sequence or automatically)
      #insert record into db
      #set id on vo
    }
  }

DAO通常应该部署以下方法:

  * save:插入或更新一条记录
  * get:取出一条记录
  * delete:删除一条记录

你可以根据自己的需要,添加其他DAO方法,常见的例子有isUsed()、getTop($n)、find($criteria)。

但是,所有的DAO方法都应该与数据库操作有关,不应该执行其他操作。DAO只应该对一张表进行基本的select / insert / update,不应该包含业务逻辑。举例来说,PersonDAO就不应该包含向某人发送Email的代码。

你可以写一个工厂函数,根据不同的类名,返回相应的DAO。

  function dao_getDAO($vo_class) {

    $conn = db_conn('default'); #get a connection from the pool

    switch ($vo_class) {

      case "person": return new PersonDAO($conn);

      case "newsletter": return new NewsletterDAO($conn);

      ...

    }

  }

7. 自动生成代码

99%的值对象和DAO代码,可以根据数据库模式(schema)自动生成,前提是你的表和列使用约定的方式进行命名。如果你修改数据库模式,一个自动生成代码的脚本将大大节省你的时间。

8. 业务逻辑

业务逻辑直接反映使用者的需要。它们处理值对象,根据业务需要修改值对象的属性,使用DAO与数据库层交互。

  class NewsletterLogic {
    function NewsletterLogic() {
      ...
    }

    function subscribePerson(&$person) {
      ...
    }

    function unsubscribePerson(&$person) {
      ...
    }

    function sendNewsletter(&$newsletter) {
      ...
    }
  }

9. 页逻辑(控制器)

当一个网页被请求时,页控制器(page controller)就会运行,然后产生输出。控制器的任务,就是将HTTP请求转化成业务对象(business object),然后调用相应的业务逻辑,最后生成一个"展示输出"的对象。

页逻辑依次执行以下步骤(请参照后面的PageController类的代码):

  i. 假定页面请求之中,包含一个cmd参数。

  ii. 根据cmd参数的值,执行相应的动作。

  iii. 验证页面返回的值,生成一个值对象。

  iv. 针对值对象,执行业务逻辑。

  v. 如果有必要,可以导向另一个页面。

  vi. 收集必要的数据,输出结果。

注意:可以编写一个工具函数(utility function),处理GET或POST值,当有的变量没有赋值时,提供一个默认值。页逻辑不包含HTML代码。

  class PageController {
    var $person; #$person is used by the HTML page
    var $errs;

    function PageController() {
      $action = Form::getParameter('cmd');
      $this->person = new Person();
      $this->errs = array();

      if ($action == 'save') {
        $this->parseForm();
        if (!this->validate()) return;

        NewsletterLogic::subscribe($this->person);

        header('Location: confirmation.php');
        exit;
      }
    }


    function parseForm() {
      $this->person->name = Form::getParameter('name');
      $this->person->birthdate = Util::parseDate(Form::getParameter('birthdate');
      ...
    }

    function validate() {
      if ($this->person->name == '') $this->errs['name'] = FORM_MISSING;
      #FORM_MISSING is a constant
      ...
      return (sizeof($this->errs) == 0);
    }
  }

10. 表现层(Presentation Layer)

最顶层的页面包含实际的HTML代码。这个页面需要的所有业务对象(business object),由页逻辑提供。

这个页面先读取业务对象的属性,然后将它们转换成HTML格式。

  <?php
    require_once('control/ctl_person.inc.php'); #the page controller
    $c =& new PageController();
  ?>

  <html>
  <body>
  <form action="<?php echo htmlspecialchars($PHP_SELF) ?>" method="POST">
    <input type="hidden" name="cmd" value="save">
    <input type="text" name="name"
value="<?php echo htmlspecialchars($c->person->name); ?>">
    <button type="submit">Subscribe</button>
  </form>
  </body>
  </html>

11. 本地化(Localization)

本地化意味着要支持多种语言,这个比较麻烦,你无非有两种方法可以选择:

  A) 准备多重页面。

  B) HTML页面中去除特定语言相关的内容。

一般来说,A方法用得比较多,因为B方法会使得HTML页面的可读性很差。

所以,你可以先写完一种语言的页面,然后把它们进行拷贝,用某种命名法区别不同语言的版本,比如index_fr.php表示index.php的法语版。

为了保存用户的语言选择,你有几种方法:

  A) 将语言设定保存在一个session变量或cookie之中;

  B) 从HTTP头中读取locale值;

  C) 把语言设定作为一个参数,追加在每个URL后面。

看上去A方法比C方法容易得多(虽然session和cookie都有过期的问题),而B方法只能作为A或C的补充。

最后不要忘了,数据库中的字段也必须进行本地化。

12. 安装位置

有时候你需要知道程序的根目录在哪里,但是$_SERVER['DOCUMENT_ROOT']只是web服务器的根目录,如果你的程序安装在它的某个子目录之中,PHP没法自动知道。

你可以定义一个全局变量$ROOT,它的值就是程序的根目录,然后把它包含在每一个脚本文件中。那么,你要包含某个文件,就这样写require_once("$ROOT/lib/base.inc.php");。

13. 目录结构

首先,每个类都应该有自己的独立文件,还必须有一套文件名的命名规则(naming convention)。

软件的目录结构可以采用如下形式:

  / 根目录。浏览器从这个页面开始访问。

  /lib/ 包含全局变量(base.inc.php)和配置文件(config.inc.php)。

  /lib/common/ 包含其他项目也可以共用的库,比如数据库抽象层。

  /lib/model/ 包含值对象类。

  /lib/dao/ 包含数据访问对象(DAO)类,以及DAO工厂函数。

  /lib/logic/ 包含业务逻辑类。

  /parts/ 包含HTML模板文件。

  /control/ 包含页逻辑。对于大型程序来说,这个目录下面可能还有子目录(比如admin/, /pub/)。

base.inc.php文件中,应该按照以下顺序添加包含文件:

  * /lib/common之中经常使用的类(比如数据库层)。

  * 配置文件;

  * /lib/model之中所有类;

  * /lib/dao的之中所有类。

至于那些存放图片、上传文件的目录,这里就省略了。

(完)


2010年12月23日星期四

阮一峰的网络日志

阮一峰的网络日志


中国的税种(2010版)

Posted: 23 Dec 2010 12:03 AM PST

上周的《南都周刊》,有一篇《谁动了Mr.A的税单》

它通俗地介绍了我国的税种,很有阅读价值,可以了解很多有用的税务知识。

但是,它的行文和结构有点模糊,而且增值税全部都算错了,所以我整理了一个更清晰易读的版本。

=========================================

中国的税种(2010版)

资料来源:《谁动了Mr.A的税单》

原载2010年12月17日的《南都周刊》

1.

税种总数

根据财政部网站,我国目前共有19个税种。

它们分别是:增值税、消费税、营业税、企业所得税、个人所得税、资源税、城镇土地使用税、土地增值税、房产税、城市维护建设税、车辆购置税、车船税、印花税、契税、耕地占用税、烟叶税、关税、船舶吨税、固定资产投资方向调节税(从2000年起暂停征收)。

2.

个人所得税

针对个人收入的一种税。

税前月薪18000元,对应的个人所得税为2337.64元。

3.

增值税

针对生产、经营过程中实现的增值额的一种税。

购买500元的书籍和200元的CD唱片,价格中就包含了87元增值税(500/1.13 ×13% + 200/1.17 × 17%,图书的增值税税率为13%,电子音像制品增值税税率为17%)。

4.

消费税

针对11种消费品的一种税。

100ml的女士香水Chanel CoCo,市场售价为1480元。其中包含了17%的增值税215元,30%的消费税380元,以及城市维护建设税41.6元,总计636.6元,接近商品价格的一半。

每一瓶进口葡萄酒身上都有三种税,关税14%、消费税10%、增值税17%。

5.

营业税

针对经营活动营业额的一种税。

在餐馆吃顿200元的饭,其中包含5%的营业税10元。

个人出售不动产也要征收营业税,税率为5%。150万的价格卖出一套原价为100万的房产,营业税为7.5万。另外,还要对50万的利润征收4.5万的个人所得税(税法规定的税率为利润的20%,但实际缴纳时通常按售价的1%-3%缴纳)。

6.

城市维护建设税

为筹集城镇建设维护资金而征收的一种税,金额为增值税、消费税和营业税税额之和的1%~7%。

在市区的商店,购买一套100元的CD唱片,其中的增值税约为14.5元,对应的城市维护建设税为1.02元(14.5×7%)

7.

关税

针对进口商品的一种税。

个人随身携带苹果公司的iPad入境,会被征收关税。根据海关规定,iPad属于笔记本电脑类产品,应该按照5000元的标准,征收20%(即1000元人民币)的关税。

8.

车辆购置税

针对新购车辆的一种税。

日本生产的"斯巴鲁森林人"汽车,到岸价20万元,先征收25%的关税5万元,然后再征收消费税1万元和增值税4.42万元,此时该车价格已经超过30万元了。消费者购车时,还需另行支付10%的车辆购置税3万元。

2009年,政府对1.6升以下排量乘用车减按5%(原比例为10%)征收车辆购置税。2010年,优惠幅度从5%又调整为7.5%。

9.

车船税

针对使用中的车辆和船只的一种税。

根据2010年10月公布的《车船税法(草案)》,排量2.0升的小汽车,每年需缴纳车船税960元。

10.

房产税

针对房产的一种税。

月租3000元的出租房,每年征收12%的房产税4320元(3000×12月×12%)。

11.

土地增值税

针对转让国有土地和房产所获增值的一种税。

一套140万元的商品房,价格中包含5%的营业税7万元、城市建设维护税4900元、以及土地增值税约为20万元(与土地的增值额和房产面积有关)。

12.

契税

向房地产购买人征收的一种税。

购买一套140万元的商品房,除了支付房价以外,购房者还需另行支付3%的契税4.2万元,再加上印花税700元。

13.



印花税

针对交易凭证的一种税。

购买1万元股票,需缴纳1‰的印花税10元。

(完)


2010年12月20日星期一

阮一峰的网络日志

阮一峰的网络日志


Paul Graham:撼动硅谷的人(译文)

Posted: 19 Dec 2010 07:49 AM PST

《黑客与画家》写"译者序",遇到一个棘手的问题。

"应该如何介绍Paul Graham,才能让中国读者了解,这是一个在美国互联网界如日中天的教父级人物?"

正在发愁的时候,老天帮忙,让我看到了上个月《福布斯》杂志有一篇Paul Graham长篇专访,写得非常棒,是迄今最佳的关于他的介绍。

这么难得的材料,怎么能错过呢!我把全文翻译了出来,打算跟出版社沟通,收入《黑客与画家》的中译本。

==============================

Paul Graham:撼动硅谷的人

The Disruptor In The Valley

作者:Christopher Steiner

译者:阮一峰

原载2010年11月8日的《Forbes》杂志


Justin Kan and Emmett Shear watched their first startup, an online calendar called Kiko, implode when Google decided to do the same thing in 2006. They sold Kiko's scraps on eBay for $258,000 and wondered what to do with their lives. So the pair did the only thing they could think of: They went to see Paul Graham at his house in Cambridge, Mass., near Harvard Square. Graham sat them down and helped bang out a plan to create Justin.tv, now the Web's biggest portal for live video, with 31 million users a month and staked with $7.2 million of venture capital.

Justin Kan和Emmett Shear的第一个创业项目Kiko,是一个在线日历。2006年,Google也推出了同样的产品,他们就知道自己的项目完了。于是,他们把Kiko拿到eBay上拍卖,卖出了25.8万美元。他们拿着这笔钱,不知道下一步做什么。想来想去,他们觉得最好的办法,还是去马萨诸塞州的剑桥市找Paul Graham。在哈佛广场旁边Paul Graham的家里,他们见到了他。Paul Graham让他们坐下来,帮忙一起想出了一个新的创业项目Justin.tv。如今,Justin.tv成了全世界最大的视频直播门户网站,拿到了720万美元的风险投资,一个月的用户人数高达3100万。

Justin.tv is hardly the first, nor the last, company Graham has sent sprinting. Graham is the father of Y Combinator, a startup-rearing juggernaut that's part incubator, part drill sergeant and part liaison to the investor class. Y Combinator--a computer term for a program that runs other programs--has fired up 200 companies since 2005, jarred the balance of power between entrepreneurs and Silicon Valley's elite money, and chiseled a new paradigm for launching technology companies. Graham's formula: Get up and running (bugs and all), gather feedback, tweak and grow.

在Paul Graham推动的创业公司之中,Justin.tv不是第一个,更不是最后一个。他创办了Y Combinator,把扶植创业公司当成自己的使命。Y Combinator(简称YC)是一个孵化器,也是一个教导员,还是一个与投资人联系的中介。这个名字来自一个计算机术语,意思是启动其他程序的程序。自从2005至今,YC已经帮助建立了多达200家创业公司,改写了创业家和硅谷投资者之间的旧秩序,塑造了创建技术公司的新范式。Paul Graham的创业公式就是:搭建原型、上线运营(别管bug)、收集反馈、调整产品、成长壮大。

YC's three-month boot camp for startups, run twice a year in Mountain View, Calif., attracts 1,000 applicants for roughly 40 spots. Graduates are expected to emerge with a working product, customers and revenue. They also get a crack at pitching their ideas to investors on Demo Day, an event that lures venture capital's Sand Hill Road crowd and every prominent angel investor in the Valley.

YC为创业公司举办为期三个月的训练营,每年在加州的山景城办两次,每次吸引大约1000个申请者,从中挑出40个入选者。正常情况下,训练营结束时,学员会拿出一个能够运行的产品,有自己的客户和收入。他们还能在"展示日"( Demo Day)上向投资者推销自己的产品。那一天,沙丘路(注:硅谷的一条公路,以风险投资公司聚集闻名)上的风险投资家和所有著名的硅谷天使投资人,都会蜂拥而至。

YC puts up $11,000, plus $3,000 per founder, for each company in return for a piece of pure equity of around 5%. That equity could be worth real money should the companies take off. A high price for founders, perhaps, until you see scores of venture capitalists and angel investors jousting to pay handsome premiums for companies bearing the YC stamp. Of the 36 startups in YC's recent class, ended in August, 30 have raised fresh capital, many of them over $1 million.

YC向每一个入选项目提供1.1万美元的启动资金,外加每个项目成员3000美元的津贴,交换条件是项目5%左右的股份。如果项目成功,5%的股份会非常值钱。那些YC入选项目的创始人,可能现在还意识不到,直到一批批风险投资家和天使投资人竞相提供诱人的入股请求,他们才会醒悟,5%的股份是很高的代价。今年8月,YC最新孵化出的36家创业公司,有30家得到了风险投资,很多都超过了100万美元。

"We didn't mean to invent this new model," says Graham, who at 45 has sandy hair and a youthful earnestness. "It all happened by accident."

"我们本来并没有打算发明这种新模式,"Paul Graham说。他今年45岁,长着一头浅棕色的头发,声音听上去充满了年轻人的真诚,"这一切完全出于偶然。"

The accident was a summer program Graham started in 2005 for college students who were tinkering with business ideas. Instead of working a boring internship at a big company, Graham's pitch went, win $5,000 to work on your startup in Cambridge with guidance from Graham and his friend, MIT professor Robert Morris--two guys who launched Viaweb, a maker of software that built storefronts online, and sold it to Yahoo for $50 million in 1998.

这个"偶然"指的是2005年Paul Graham旨在帮助那些有创业念头的大学生的一个暑期项目。他劝说他们不要去大公司当枯燥的实习生,而是在剑桥市创办自己的公司,他们会从他和他的朋友----麻省理工学院计算机教授Robert Morris----那里得到5000美元资助和悉心指导。Paul Graham和Robert Morris曾经一起创办了Viaweb,那是一个帮助人们搭建网上商店的互联网软件,1998年被Yahoo以5000万美元的价格收购。

"It was supposed to be a throwaway project for these students," recalls Graham. "By the end of the summer we were like,"'Whoa, we've got something here!'"

"那个暑期的校园项目只是一次性的安排,并没有长远打算,"Paul Graham回忆道。"可是等到结束的时候,我们的感受就像是'哇,不可思议,我们找到宝了!'"

Graham received 400 applications for the summer program. Of the 8 he accepted, 4 had blossomed into serious ventures by the end of the summer: Loopt, a social-mapping ser vice, now with 4 million users; Reddit, a user-aggregated news site acquired by Condé Nast in 2006; TextPayMe, a mobile payment service bought by Amazon in 2006; and Kiko, thwarted by Google.

那年暑假,Paul Graham收到了400份申请表。他挑了8个,到了暑假结束时,其中有4个已经做得非常像样了。社会化地理服务网站Loopt,目前有400万用户;用户聚合的新闻网站Reddit,2006年被大型出版集团Condé Nast收购;移动支付服务网站TextPayMe,2006年被Amazon收购;在线日历网站Kiko,在本文开头已经提到了,由于Google推出同类产品而半途夭折。

Y Combinator's influence in Silicon Valley has burgeoned ever since. Some refer to its growing network of graduates as the YC mafia. They protect their own, collaborate and, to a person, regard Graham as their sensei. Some go on to be investors and mentors in their own right.

从那时起,Y Combinator在硅谷的影响力迅速发展。有人将不断壮大的YC毕业生关系网称为"YC匪帮"。这些经过Paul Graham培训的年轻人,迅速成长,互相合作,将他视为自己的导师。其中一些人,进而也成为有着自己风格的投资者和导师。

"The right advice has always been more important than money," says Greg McAdoo, a partner at Sequoia Capital, which has invested in Google, Yahoo, PayPal and YouTube. "But nobody has been able to do it on this kind of scale before."

"正确的建议,永远比金钱更重要,"Sequoia投资公司的合伙人Greg McAdoo说。Sequoia投资公司的投资对象,包括Google、Yahoo、PayPal和YouTube。"但是,以前从没有人做到像YC那样大的规模。"

Jealous types claim Graham runs a fund to pick off YC's best as soon as they leave the womb. YC has raised two pools of funding from outsiders--$2 million in 2009 and $8 million in 2010, from the likes of Sequoia Capital and prominent angel investors Paul Buchheit and Aydin Senkut--but that money is only for YC's small initial equity investments. Graham concedes that individual YC partners have invested in a few startups that hadn't been able to attract much outside funding. But, he insists, YC startups have no obligation to accept additional capital from anybody.

嫉妒者声称,Paul Graham自己有一个基金,专门挑选YC最优秀的学员,等到他们一毕业就抢先资助。迄今为止,YC确实收到过两笔投资,一笔是2009年的200万美元,另一笔是2010年的800万美元。这些钱来自Sequoia这样的投资公司,以及Paul Buchheit、Aydin Senkut等著名的天使投资人。但是,YC只把它们用作初始的小额股权投资。Paul Graham承认,YC合伙人用个人资金投资了一些创业公司,不过那只是在它们没有吸引到太多外部资金的情况下。他一再声明,YC扶植的创业公司没有义务接受任何人的强行入股。

Graham grew up outside of Pittsburgh, where his father, a physicist, designed nuclear reactors and his mother raised Graham and his sister. He started writing computer code in high school; one program predicted the flight paths of model rockets. Graham would eventually earn a Ph.D. in computer science from Harvard, where he intended to concentrate on artificial intelligence.

Paul Graham在匹兹堡的郊区长大。他的父亲是一个设计核反应堆的物理学家,他的母亲在家照看他和他的妹妹。他从高中就开始编程,其中有一个程序是预测实验火箭的飞行路线。后来,他在哈佛大学拿到了计算机博士学位,那时他的主攻方向是人工智能。

Disenchanted by the prospects of ever building a truly intelligent machine, Graham moved on to painting, attending the Accademia delle Belle Arti in Florence and the Rhode Island School of Design. He jammed into a tiny New York apartment to start his art career and was often broke. "I decided to go out and solve my money problem for good," he recalls.

因为对于开发一个真正具有智能的机器感到灰心丧气,Paul Graham毕业后就改行当了画家。他先到佛罗伦萨美术学院(Accademia delle Belle Arti di Firenze)学习,后来又去了罗德岛设计学院(Rhode Island School of Design)。他栖身于纽约一间极小的公寓,开始了自己的艺术家生涯,生活过得非常窘迫,常常入不敷出。"我决定不当画家了,首先要彻底解决自己的收入问题,"他回忆道。

Viaweb did that. Free and flush after the sale, Graham found a creative outlet writing essays and posting them to his Web page. He opined on esoteric programming issues and more accessible topics, such as "Why Nerds Are Un popular." One of his essays, "Beating the Averages," which praised Lisp, a programming language that helped Graham build Viaweb, snared 50,000 page views. "All of the sudden, I was writing for a lot of people, and that made me want to write more," he remembers.

Viaweb帮他实现了这一点。Yahoo收购Viaweb以后,Paul Graham变得既自由又富有,于是他把创造力用来写文章,并把它们贴在自己的个人网站上。他既写一些难懂的编程问题,也写一些比较大众化的题目,比如《为什么书呆子不受欢迎》。他的文章《拒绝平庸》吸引了5万人次的浏览量,内容是对Lisp语言的赞美,那种语言帮助他开发出了Viaweb。"突然之间,我有了一大批读者,这促进我写出更多的文章,"他回忆道。

Another essay, "How to Start a Startup," based on a talk he gave at Harvard, got him thinking seriously about angel investing and eventually inspired YC's formation.

他的另一篇文章《如何成立创业公司》,来源于他在哈佛大学的一次演讲。那次演讲使得他对天使投资进行了严肃的思考,最终导致了YC的成立。

Graham's three fellow founders--Morris, Jessica Livingston and Trevor Blackwell--were close confidants. Graham met Morris, an authority on the Unix computer language, at Harvard. When Bell Labs, where Unix was developed, wanted to integrate Web programming standards into Unix, it called Morris, then age 17. Livingston wrote the book Founders at Work, a collection of profiles of marquee technology entrepreneurs. (Graham was dating Livingston when YC began; they're now married.) Blackwell, another Harvard Ph.D., worked at Viaweb and later launched Anybots, which made the first walking robot that dynamically adjusts its weight distribution, like a human, as it moves across changing surfaces. The partners recently added Harjeet Taggar, who sold his startup after being part of YC's winter 2007 class.

Paul Graham还有三个伙伴:Robert Morris、Jessica Livingston和Trevor Blackwell。他们之间的关系非常亲密。Paul Graham在哈佛大学读书时结识了Robert Morris,后者是Unix系统编程专家。当Unix的开发者贝尔实验室希望在Unix中加入Web编程标准,他们就打电话给Robert Morris,那时他只有17岁。Jessica Livingston是《Founders at Work》一书的作者,那本书收录了许多卓越的技术创业者的故事。(YC成立后,Paul Graham与Jessica Livingston开始约会,现在他们已经结婚了。)Trevor Blackwell也是哈佛博士,起初在Viaweb工作,后来创立了Anybots,制造出了世界上第一个可以在行进中动态调整自身重量分布的机器人,它就像真人一样,能够穿越不同的地表。最近,Harjeet Taggar加入成为YC新的合伙人,他是2007届YC冬季班的学员,后来把自己的创业公司卖掉了。

Graham reckons the next crop of applications, due in late October, could hit 1,500. About 80 will earn the right to a nerve-racking interview with the founders in Mountain View. Many of the best applications come from accomplished programmers who have working product demos but lack gilt-edged Valley Rolodexes. But Graham and company aren't just looking for nifty concepts. "We realized early on that the founders matter more than the idea," Graham says.

Paul Graham估计,下一期YC训练营的申请项目可能达到1500个(到今年10月底截止),其中80个项目的创始人会来到山景城,进行紧张的面试。很多最优秀的申请项目,来自那些高级程序员,他们已经做出了产品的雏形,但是苦于在硅谷中谁也不认识。不过,Paul Graham和他的公司看重的,不仅仅是那些令人叫好的创意。"我们从一开始就认识到,创始人本身比他的创意更至关重要,"他说。

YC's vetting process plays a big role in attracting investors. "You're getting prescreened deal flow," says Ron Conway, a prominent Valley angel who invested in Google, PayPal and Twitter. Conway has put capital into 20 YC companies, including 7 from the latest class. Investors are also enticed by the $200 billion of cash piled up on the balance sheets of Apple, Microsoft, Google, Cisco, Oracle, Intel and Qualcomm. With any luck, some YC grads may soon get snapped up.

YC的评估过程,对吸引投资者起到很大作用。"你看到的项目,都经过了严格筛选,"Ron Conway说。他是硅谷很著名的一个天使投资人,曾经投资过Google、Paypal和Twitter。他在20家YC创业公司有投资,包括最新一届的7家。诱惑投资者的还有目前有利的市场形势,苹果、微软、Google、思科、甲骨文和高通手头共有2000亿美元的现金,随时可以用于收购。运气好的话,某些YC学员一毕业就会遭到哄抢。

For startups the YC experience revolves around Thursdays. During the afternoon entrepreneurs meet for scheduled office hours with Graham or one of the other partners. They report their progress and brainstorm how to solve nagging problems. Scribbling bullet points on a white board, Graham recently implored Francis Duong and Edmond Yue of TapZilla, which offers one discounted iPhone app at a time, to get a new deal up daily. The pair had, at that point, put up 10 apps in the span of a month, selling 10,000 in all. Graham wants TapZilla to become a site where app hounds feel compelled to check in every day.

对于创业公司来说,YC的经历大部分发生在星期四。那天下午,学员们按照约定的时间,与Paul Graham或者其他某个YC合伙人见面。他们报告项目的进展,然后一起讨论如何解决一些棘手的难题。最新的一个例子是,Paul Graham在白板上列出几个关键点,劝说Francis Duong和Edmond Yue做出改变。他们是网站TapZilla的创始人,这个网站每次以折扣价出售一个iPhone应用程序。Paul Graham希望提高该网站的更新频率,每天推出一个新的交易品种。在他们谈话的那个时候,TapZilla一个月推出10个应用程序,总销售量为10000件。Paul Graham要求TapZilla变成一个iPhone应用程序爱好者每天都觉得有必要查看一下的网站。

YC recruits say Graham has a knack for cutting straight to an idea's weakness or for amplifying its unique strengths. "His brain is a giant warehouse of startup failures and successes," says Rudy Adler, cofounder of 1000Memories, a website where people can celebrate deceased friends and family members.

根据YC新学员的说法,Paul Graham有本事一眼看出一个创意的不足之处,或者设法放大这个创意最独特的优点。"他的大脑就是一个巨型仓库,无数创业公司失败和成功的案例,他都知道得清清楚楚,"Rudy Adler说。他是网站1000Memories的创始人之一,这个网站供人们悼念逝去的亲友。

Adler's first idea involved a city-mapping site that tagged friends' favorite places. Graham was leery, having seen failed startups go down a similar path. Still, he let Adler and his mates give it a shot for a few weeks before refocusing them on 1000Memories, their auxiliary plan.

Rudy Adler本来想做一个都市地理服务网站,为年轻人最喜欢去的地方打上标签。Paul Graham对这个创意持怀疑态度,他见过好几个提供类似服务的创业公司最后都失败了。不过,他还是让Rudy Adler和他的伙伴先试着做上几个星期,然后再集中精力去做他们的备选项目1000Memories。

Startups who continually lose their way can lose Graham, too. "With Paul, you're either in or you're out," says one YC graduate. "You don't want to be out."

那些总是找不对方向的创业公司,最后也会被Paul Graham放弃。"对于他来说,你要么有前途,要么没前途,"一个YC毕业生说。"你可不想变得没前途。"

A home-cooked meal follows office hours. A recent dinner featured 60 pounds of chili, made in seven Crock-Pots, served over rice. Cookies followed. A guest speaker--often plucked from technology's A-list, such as Facebook's Mark Zuckerberg and Groupon founder Andrew Mason--spins tales as people eat.

面谈结束后是聚餐时间,大家一起吃家常饭。最近的一次聚餐,煮了七个电饭煲的香辣肉酱,浇在米饭上,然后还有小甜饼。吃饭的时候,还有特邀嘉宾出场,与大家见面聊天。那些嘉宾往往是技术行业的顶尖名人,比如Facebook的Mark Zuckerberg和Groupon的创始人Andrew Mason。

The avalanching interest in YC is on full display during its Demo Day. YC's warehouse space, corrugated with three rows of tables made from plywood and white melamine, overflows with angels and venture capitalists. (The space can accommodate only 150 investors at a time, so there are now three Demo Days per class.) Each startup gets two and a half minutes to make their case, show their product and leave a good impression.

业界对YC毕业生无以复加的热情,在"展示日"当天表现得一览无遗。YC的库房里塞进了三排胶合板质地、白色三聚氰胺面板的简易桌子,四周坐满了天使投资人和风险投资家。(这个库房最多只能容纳150个投资者,所以每一届学员的"展示日"不得不延长成3天。)每家YC创业公司有两分半钟的自我介绍时间,用来展示产品,力求给投资者留下美好印象。

The event is invitation only, but Graham says he allows in any investor who asks. Demi Moore and Ashton Kutcher, who has invested in several YC companies, showed up for the most recent gathering in August. Kutcher is just one of a growing group of 32,000 U.S. angel investors (so-called accredited individuals with more than $1 million in assets) who last year wrote checks totaling $12.4 billion, says Scott Shane, an economics professor at Case Western Reserve University.

只有收到邀请的人才能参加这个活动,但是Paul Graham说,任何提出申请的投资者都能得到邀请。好莱坞明星黛米•摩尔和她的丈夫艾什顿•库奇,在几家YC创业公司有投资,他们也出现在今年八月份的"展示日"上。他们只是美国32000名天使投资人中的一员,这个团体正在日益壮大。只要你的资产超过100万美元,就有资格当天使投资人。根据凯斯西储大学经济学教授Scott Shane的说法,美国的天使投资人在2009年总共拿出了124亿美元。

"It's all about hype," says Laurence Albukerk, managing director of EB Financial Group, a Valley firm that facilitates trading stock in young companies. "The more hype you get, the higher your valuation."

"这都是炒作惹的祸,"EB金融集团的常务董事Laurence Albukerk说。这家集团的主要业务,是在硅谷地区帮助交易新兴公司的股票。"市场炒作得越厉害,你对它们的估值就越高。"

Plenty of Valley insiders could do without all that hype, especially when the result is having to pay more for stakes in YC's offspring. "You show up and a lot of other VCs are there and everybody has good pitches, so things can get bid up," says Richard Heitzman, managing partner at FirstMark Capital, which put capital into StubHub, Netgear and TheStreet.com. "But in the end people are going to pay what they're going to pay. I don't begrudge them that value creation."

许多硅谷老手对这种炒作不满,尤其是当他们不得不因此付出更高的价格换取YC创业公司股权的时候。"你到了现场,其他许多风险投资家也都在场,大家的眼光都不差,价格就这样被哄抬上去了,"Richard Heitzman说。他是FirstMark Capital投资公司的执行合伙人,这家公司在StubHub、Netgear和TheStreet.com有投资。"但是最终来看,你应该付的钱总是要付的,我不会对这部分新增加的'价值'感到舍不得。"

The real winners are rising stars like Jessica Mah. "The competition this created for us was amazing," says Mah, a 20-year-old summer YC grad and founder of Indinero, a cloud-based accounting application for small businesses. (Mah graduated from Berkeley with a degree in computer science at age 19.) Indinero just raised $1.2 million in fresh capital at an undisclosed valuation. Mah says it was three times as much as Graham figured it would be.

真正的赢家是那些像Jessica Mah那样冉冉上升的新人。"这就是为我们创造出来的比赛,真让人着迷,"Jessica Mah说。她今年20岁,YC夏季班的学员,Indinero网站创始人,那是一个云端的小企业财务服务网站。(Jessica Mah从加州大学伯克利分校计算机系毕业时,只有19岁。)Indinero刚刚完成了初始融资120万美元,它的估值还不得而知。Jessica Mah说,这个金额是Paul Graham估计的三倍。

Indinero is Graham's archetype. Mah had a working prototype when she applied to join YC for the summer. Graham pushed her to add features, polish the site and incorporate the changes quickly. "Put it out there and let users decide," he says. At the end of August Mah had 2,500 customers; two months later she was up to 6,000. Critics piped up quickly, convincing Mah to make the interface more intuitive. "Watching somebody's blood pressure rise as they try to use your product can be enlightening," she says.

Indinero是Paul Graham推崇的典型模式。Jessica Mah在申请YC训练营时,就已经完成了可以正常运行的项目原型。Paul Graham帮助她加入新功能,打磨网站,快速应变。"把你的项目放出去,让用户决定下一步该做什么,"Paul Graham说。到了8月底,Jessica Mah已经有了2500个客户,再过了两个月,客户数量上升到了6000。对网站的批评声音逐渐增多,这使得Jessica Mah确信,必须让用户界面更符合直觉。"别人使用你的产品,你看着他们因此血压升高,这肯定会触动你,"她说。

Being able to prove a business concept in a hurry, even if the product isn't perfect, is especially attractive to investors, says Peter Bell, general partner with Highland Capital Partners, a venture firm in Lexington, Mass. that staked Digg, Mapquest and Ask Jeeves. "The power has always been with the entrepreneur if they have a good team and a good product," he says.

快速地证实你的构想在商业上可行,即使你的产品还不完善,也会对投资者产生特别大的吸引力,Peter Bell如是说。他是Highland Capital Partners投资公司的普通合伙人,那是一家位于马萨诸塞州列克星敦市的风险投资公司,在Digg、Mapquest和Ask Jeeves有投资。"如果你有一个好的团队和一个好的产品,你肯定会因此拥有很大的主动权,"他说。

Other investors aren't so sanguine. Michael Arrington, editor of the influential blog TechCrunch, tipped the pot on a simmering controversy in September when he accused a prominent group of angel investors (whom he calls "super angels") of colluding to keep competitors out of deals and hold valuations down, partly in response to Graham's newly empowered students. Arrington crashed a dinner at Bin 38, a haute San Francisco eatery where he says the group of investors was hatching its plan. "Mike is wrong--he wasn't there," says Dave McClure, an established Valley investor and one of the angels at the meeting. (Others who were present deny the allegations as well.) McClure does acknowledge YC's effect, however. "Paul has done a great job coaching his guys on the investment side of things, and there is a lot more competition for these deals now," he adds.

另一些投资者则不太喜欢现在的局面。著名网志TechCrunch 的编辑Michael Arrington,揭露了一场发生在今年9月份的非公开讨论。他指称,一群显赫的天使投资人(他把他们称为"超级天使")密谋如何压制竞价,企图把创业公司的估值降下来,这场讨论的部分起因就是他们看到Paul Graham的那些学员的主动权正在变得越来越大。Michael Arrington闯进了旧金山Bin大街38号的一家高级餐馆,据他说那些投资人就在那里密谋。"Michael Arrington一派胡言,他那天不在现场,"Dave McClure说,他是硅谷的著名人物,也是那天在场的天使投资人之一。(其他在场的人,也否认对他们的指控。)但是,Dave McClure承认YC效应不容忽视。"指导年轻人如何获得投资,Paul Graham成绩显著。现在(投资人)要想拿到好的项目,竞争比以前激烈多了,"他补充道。

Graham remains suspicious of the group but finds the whole dustup beside the point, given the overall size of the investor pool. "They couldn't have ever achieved anything, so the whole thing is really kind of comical," he says. Arrington disagrees: "Deals rarely get done without a few of these guys being involved," he says. "In layman's terms, what they were doing can definitely be considered collusion."

Paul Graham本人对这件事持怀疑态度,觉得外界对这件事的关注有点不正常。考虑到投资者人数的总体规模是那样庞大,单单几个人就试图控制价格,似乎是不可能的。"他们不可能取得任何成果,所以整件事真的是有点滑稽,"他说。Michael Arrington不同意他的看法,"那天在场的都是重要人物,没有他们的介入,几乎什么交易也做不成,"他说。"用通俗的话讲,他们那天的所作所为,绝对可以被称为串谋。"

For his part, Graham is always pushing better financing terms for entrepreneurs. One useful tool: convertible notes that turn into equity upon a startup's next valuation. The notes often come with valuation caps to protect early investors from being diluted should a company hit it big.

对于Paul Graham来说,他的立场总是设法为创业者争取更有利的风险投资条款。"转换券"(convertible note)就是一个很有用的工具,它的作用是在创业公司下一次估值时,自动转换成股份。它经常附有"估值上限"(valuation cap),防止一旦创业公司做大,早期投资人的股份被稀释。

Say a convertible note worth $1 million was equal to 50% of a startup's estimated worth at the time the note was written. Now say the company takes off and the next time it raises money it is valued at $100 million. The $1 million of debt becomes $1 million of equity, but that stake is worth just 1% of the company. However, if the note came with a valuation cap of $10 million, that means it would be worth 10%--or $1 million divided by $10 million--of that $100 million company. The caps give entrepreneurs more flexibility, allowing them to pit investors against each other by offering early backers lower valuation caps. "Convertible notes mean investors can no longer drag their heels," says Graham.

举例来说,有一张"转换券"价值100万美元,相当于(转换券签发时)创业公司估值的50%。现在假定,这家创业公司飞黄腾达,下一次融资时,它的估值变成了1亿美元。那么,1百万美元的"转换券"转换成股份,只占总股本的1%。但是,如果这张"转换券"带有1千万美元的"估值上限",就意味着它相当于总股本1亿美元的10%(这个比例的计算方法是,1百万美元的面值占1千万美元的10%)。"估值上限"使得创业者有了更多的灵活性,通过向早期投资人提供较低的"估值上限",使得投资人之间可以互相竞争。"转换券意味着投资人没法再扯后腿了,"Paul Graham说。

Like any good business, Graham's is drawing competition. David Cohen, chief executive of TechStars, an incubator based in Boulder, Colo. with satellites in Boston, Seattle and New York, says 100 similar outfits, mostly small, now exist across the U.S. TechStars accepts ten startups per year in each of its four markets. Those that make the cut stay for three months; 60% of its first 40 graduates have each raised more than $600,000 after leaving the program.

就像其他的生意一样,Paul Graham也开始有竞争了。根据David Cohen的说法,目前美国类似YC的团队有100家左右,但是大部分规模都很小。他是TechStars的首席执行官,那是一家位于科罗拉多州Boulder市的孵化器公司,在波士顿、西雅图和纽约还有分支机构。TechStars在这四个地方,每年各接受10家创业公司。这些经过挑选的创业公司,会在孵化器里待三个月。它的第一批40个毕业生离开孵化器后,有60%得到了超过60万美元的投资。

After Cohen's group there's a clear dropoff. But more big players are ramping up their own versions of YC. Chicagoan Eric Lefkofsky, the cofounder of Groupon who's flirting with billionaire status, is planning something in his city soon.

除了David Cohen的团队,其他团队离YC的差距目前还比较大。但是,不少大玩家正在酝酿他们自己版本的YC。Groupon创始人之一的Chicagoan Eric Lefkofsky,就在计划不久后在他的城市有所动作,他的身价高达10亿美元。

Graham welcomes the competition. "It's better for entrepreneurs," he says. "If we make a mistake and don't fund somebody great, they still have a chance."

Paul Graham对竞争表示欢迎。"这对创业者有好处,"他说。"如果我们犯错了,没有资助优秀的人,那么这些人在其他地方还有机会。"

(完)


2010年12月16日星期四

阮一峰的网络日志

阮一峰的网络日志


如何面试程序员?

Posted: 15 Dec 2010 10:57 PM PST

你要面试一个程序员,应该问他什么问题?

有人在Hacker News的讨论区里,请求指点,怎么才能在面试中发现合格的人。众人纷纷出主意,有很多高质量的回帖,我觉得挺有启发,就整理出了下面这篇文章。

===================================

如何面试程序员?

阮一峰 整理


一、提问之前的准备

首先,最重要的是,你自己一开始就应该想清楚:

  1. 需要新员工完成什么样的任务?

  2. 怎样的人能完成这样的任务?

  3. 哪些途径和方法可以发现这样的人?

只有明确这些根本性的问题,才能正确高效地完成面试。

二、提问的原则

假定你对上一节的三个问题,已经有了清晰的想法,那么接下来就可以设计如何提问了。

有一些提问的原则,是你应该遵循的:

  * 每一个面试问题都有明确的目的。你不仅自己了解,还能向其他面试官解释清楚。

  * 多提一些开放性(Open-ended)的问题,而不是那种用Yes/No就可以回答的问题。这样做使你有机会与面试者展开讨论,并且提出后续的问题,尽可能多地了解对方。

  * 不要问宗教、家庭、健康、个人隐私等方面的问题。

  * 不要问太复杂的问题。因为面试者没有太多思考时间,所以无法周全地回答,你也就无从判断他的能力了。

三、考察专业能力

为了确认面试者是胜任的,你可以问一些与职位相关的专业方面的问题。(不过通常来说,一次面试不足以看出一个人的专业能力。)

比如,你的招聘职位是系统管理员,你可以问"如何快速地在50台机器上部署Linux?"(提示:正确答案不是刻录50张安装光盘。)

另外,你还应该向面试者了解他的过去,因为过去是未来的最好预测依据。不过,提问的重点不要仅仅是他过去的成果,更要关注在当时的环境中,他是如何决策和实施的。

四、考察综合素质

因为人是会发展的,所以某种程度上,面试者的综合素质要比他的专业能力更重要。

所以,具体的技术问题(如何调用API、什么是设计模式、编程语言的语法等等)可以少问一些,更应该关注面试者的事业心、对工作的热情、进取心、自律能力、毅力等方面。

下面是一些典型问题:

  Why did you get into development?
  你为什么开发软件?

  How many technical books did you read in the past year?
  去年你读了几本技术书籍?

  What was your favorite technical book in the past year? What did you learn from it?
  去年你最喜欢的技术书籍是哪本?你从中学到了什么?

  What websites do you read regularly, related to development?
  平时你经常访问哪些编程类网站?

  Do you maintain any open-source projects?
  你有自己的开源项目吗?

  Do you code in your spare-time?
  业余时间你编程吗?

  Do you love programming, or do you do it for the money?
  对于你来说,编程是一种爱好,还是一种谋生手段?

  Have you accomplished anything important in your career yet? Do you want to?
  你的职业生涯之中有什么重要的成就?它是你主导的吗?

  What would make you feel that you have done something important?
  什么事情会让你很有成就感?

五、考察理性思维

某些情况下,你可能需要了解面试者的分析判断能力,看他能否全面地思考问题、客观地评价自己。

那么,你可以依次提出这样三个问题:

  What's your favorite programming language? Why?
  你最喜欢的编程语言是哪种?为什么?

  If you could add one feature to your favorite language, what would it be? Why?
  如果允许你为这种语言加一种功能,你会加什么功能?为什么?

  If you could remove one feature from it, what would it be? Why?
  如果允许你取消一种功能,会是什么功能?为什么?

这里的重点是,让面试者从正反两方面评价一件自己熟悉的东西,看看他的思维是否片面。答案无所谓对错,只要面试者有一个明确的立场,能够从正反两方面说出令人信服的理由,就可以了。比如,某个软件的口碑不好,但是面试者说他很喜欢,而且说得出一大堆理由,清楚地解释了这种软件的优点和缺点在哪里,这样就很好。

你还可以把这些问题,套用在其他东西上面,比如操作系统、文字编辑器等等。

(完)


2010年12月11日星期六

阮一峰的网络日志

阮一峰的网络日志


南京"外挂代练"事件判决书

Posted: 10 Dec 2010 07:54 AM PST

今天上午(12月10日)9点,南京市江宁区法院就"外挂代练案"作出一审判决:

"被告人董杰犯非法经营罪,判处有期徒刑六年,罚金人民币一百六十万元。

被告人陈珠犯非法经营罪,判处有期徒刑三年,缓刑四年,罚金人民币一百四十万元。"

我知道后简直无法相信,判决如此之重!

十个月的"外挂代练",竟然换来六年有期徒刑,以及300万元罚金!这恐怕是我国迄今第一起因为使用外挂(并非制作外挂)而判刑的案件,大概也是判得最重的一起。

国家司法机关如此保护大公司的利益,创造出对资本家有利的司法解释,将没罪的人送进监狱,真是令人发指。

有了这个判例,从今以后,网游公司赚钱就更容易了,谁敢用外挂,就把他送进监狱!面对滚滚财源,谁还在乎小人物的权利。董杰和陈珠的人生被毁掉了,没关系,只有这样才能让其他的小偷感到害怕。再说谁叫董杰和陈珠昏了头,竟敢在老虎身上拔毛?

陈珠给我的来信,就是在泣血:

"90多台电脑罚没了,8万多的存款也罚没了,说这是非法所得。此外,还有300万的罚金,我们能有这么多的钱吗??

他们说不管,到时候会有强制执行。

许多与案件一点关系都没有的东西,也被罚没了。那个移动硬盘,全是宝宝出生时候的照片和视频,还有那些银行卡,有我和董杰以前的单位工资卡,还有我妹妹交房贷的卡,里面也没有什么钱,也没有人汇过款,包括一个小灵通的卡,那是董杰父亲到南京时用的卡,统统都被没收。

指控我有罪的证据,仅仅是我招聘过1个人,以及业务用的QQ是我和老公共用的。就这样判决我三年有期徒刑(缓刑四年),罚金140万,太牵强了。还说我参与对账,那账本在哪里呢?还是我口头对账?为什么没有一点证据就能定我也有罪?

作为一个孕妇,我从不去工作室,那些做代练的小孩从来也没有到过我的卧室,证词里有人说我也会到网上银行查询每天的收入情况,我问是这个人看见的吗?还是他个人以为呢?法院叫我这些话到二审的时候提出。

我今天质问法官很多,法官不回答我任何问题,只叫我上诉。很让人绝望,就象掉入很深的黑洞,法官只说判决不是他们自己能决定的,我不知道到底是谁能决定,他们说是上面决定的,那上诉还用吗?

很崩溃,很绝望,已经没有办法思考,今天看见董杰,很憔悴瘦了很多,法院的警卫不给我在那哭,呵斥着叫我离开,倒是法官拉住他们,我知道我们有错,但是我们真的错到这样地步了吗,真的恶劣到人之唾弃的地步吗?我快活不下去了,我该怎么办???"

我劝陈珠冷静下来,准备二审。虽然可能没什么希望,但是还是要争一下。

====================================

挽救董杰和陈珠仅有的一丝希望,大概就是让这件事登上全国性媒体,成为热点事件,从而引起高层的注意,推动二审能够改判。

我希望大家救救他们,把这个消息以及下面的《判决书》转贴出去,让更多的人了解、关注这个案件。那些网游公司有钱有势,请得起最好的律师,媒体和官场到处都是他们的资源,有的是为他们说话的人,可是谁为董杰和陈珠这样的小人物说话呢?如果我们不这样做,他们微弱的呼救声就会迅速熄灭,仿佛寒夜中的火柴。

没错,我们是"沉默的大多数",从来就是被忽视、被支配、被蹂躏的命运。但是即使这样,我们也要让他们知道,人心自有公道,沉默中也孕育着爆发的力量,他们不能太过份。

愿意报道此事的媒体,请直接与陈珠联系。她的联系方式是QQ 61051919,手机15951806576,电子邮件lygbao@126.com。

关于此事的全部资料,请访问《南京"外挂代练"事件·专题网页》:http://www.ruanyifeng.com/special/gold_farmer/

谢谢大家。

=====================================

附:

南京市江宁区人民法院

刑事判决书

(2008)江宁刑初字第953号

公诉机关南京市江宁区人民检察院。

被告人董杰,男,1973年12月8日出生于江苏省连云港市,汉族,高中文化,个体经营者,住南京市江宁区XX街道XX号。因本案于2007年月12月8日被南京市公安局直属分局刑事拘留,2008年1月15日被逮捕,同年3月7日被取保候审。本院于2009年4月7日对其取保候审,同年10月7日对其继续取保候审。2010年11月27日经本院决定逮捕,同日由南京市公安局江宁分局执行逮捕。现羁押于南京市江宁区看守所。

辩护人曹力,江苏海浪律师事务所律师。

辩护人梁莉,江苏海浪律师事务所律师。

被告人陈珠(系董杰妻子),女,1972年6月14日出生于江苏省连云港市,汉族,初中文化,个体经营者,住南京市江宁区XX街道XXXX号。因本案于2007年月12月8日被南京市公安局直属分局取保候审。本院于2008年12月29日对其取保候审,2009年6月29日对其继续取保候审。

辩护人刘儒香,江苏海浪律师事务所律师。

辩护人庄毅雄,上海市三石律师事务所律师。

南京市江宁区人民检察院以江宁检诉刑诉[2008]851号起诉书指挥被告人董杰、陈珠犯非法经营罪,于2008年11月19日向本院提起公诉,本院于同日立案,依法组成合议庭,公开开庭审理了本案。南京市江宁区人民检察院指派代理检察员赵迅出庭支持公诉。被告人董杰、陈珠及辩护人曹力、梁莉、刘儒香均到庭参加了诉讼。审理中,公诉机关以补充侦查为由,分别于2008年12月31日和2009年3月17日建议本院对本案延期审理,并分别于2009年1月30日和2009年4月16日补充侦查完毕,提请本院对本案恢复审理。辩护人刘儒香以有新的的证据需要调取为由,于2009年5月21日建议本院对本案延期审理,本院于2009年6月20日恢复审理。辩护人曹力以有新的证据需要调取为由,于2009年6月21日建议本院对本案延期审理,本院于2009年7月20日恢复审理。现已审理终结。

南京市江宁区人民检察院指控:2006年以来,被告人董杰、陈珠在玩网络游戏过程中了解到利用非法"外挂"程序可以代游戏玩家代练升级并可以从中牟利,遂购买了数十台电脑,申请了QQ号、银行帐号、客服电话和电信宽带,向他人购买"外挂"经营代练升级。2006年9月至2007年春节,被告人董杰、陈珠雇佣人员在其居住地,通过使用向他人购得的名为"小金鱼"的"外挂"帮助《热血传奇》游戏玩家升级并牟利。2007年3月,被告人董杰、陈珠又通过互联网向他人购得的"冰点传奇"的"外挂"程序,以"土人部落"工作室的名义,雇佣员工在上海盛大网络发展有限公司经营的《热血传奇》游戏中以80元/周、300元/月的价格帮助玩家使用"冰点传奇""外挂"程序代练升级,先后替1万多个《热血传奇》游戏账户代练升级。自2007年3月至2007年12月7日,接受来自全国各地游戏玩家汇入的资金人民币1989308.6元。因董杰、陈珠使用的"冰点传奇""外挂"程序绕过了正常的游戏客服端与服务器端之间的通讯协议,使盛大公司计算机系统中的客户认证功能丧失,从而干扰了《热血传奇》游戏的正常运行。同时,又因破坏了网络游戏规则的均衡和公平,引起了众多游戏玩家的不满和投诉,严重影响了盛大公司的生产经营秩序。公诉机关认为被告人董杰、陈珠违反国家规定进行非法经营,扰乱市场秩序,情节特别严重,应当以非法经营罪追究二被告人的刑事责任。提请本院依照《中华人民共和国刑法》第二百二十五条、第二十五条第一款的规定处罚。

被告人董杰辩称:1、公诉机关指控的事实基本属实,但对指控其犯罪不能认同。2、自己以前的供述把部分责任推到妻子陈珠身上,其实陈珠到2007年4、5月份才知道自己使用"冰点传奇""外挂"。陈珠与自己去劳务市场仅仅是招保姆。

董杰辩护人曹力提出的辩护意见是:公诉机关指控被告人董杰构成非法经营罪的证据不足、法律适用不当。理由如下:1、非法经营罪侵害的客体是国家对市场交易秩序的管理,而不是对某一个企业生产经营秩序的侵犯。公诉机关指控被告人董杰行为的危害后果是干扰了《热血传奇》游戏的正常运行,严重影响了盛大公司的生产经营秩序,故指控被告人董杰犯罪行为的危害后果与其指控的罪名相互矛盾。2、《刑法》第225条所规定的"违反国家规定"只能是国家关于市场交易秩序管理的有关规定,公诉人在法庭辩论中所提出的《计算机信息网络国际联网安全保护管理办法》、《计算机信息系统安全保护条例》和《信息网络传播权保护条例》均不是国家关于市场交易秩序管理的法律法规,不能作为指控被告人董杰构成非法经营罪的法律规定。3、被告人董杰的行为也不符合公诉人所提的上述三个法规中所称的可构成犯罪的行为。

被告人陈珠辩称:自己当时因怀孕没有参与董杰的事情,公安机关提取的QQ聊天记录不以证明自己参与。开始在公安机关供述参与是因为孩子刚出生,为了让董杰以被取保候审,就将这些事揽到自己身上,但之后的供述是说的实话。

陈珠辩护人刘儒香提出的辩护意见是:指控被告人陈珠参与非法经营的证据不足,被告人陈珠不构成非法经营罪。理由如下:1、被告人陈珠被指控的"代练升级"经营行为不是我国法律、行政法规规定的需要经过国家相关部门特别许可方可专营、专卖的物品,也不是法律、行政法规规定的需要限制买卖的物品。公诉人提及的有关"条例"、"办法"均不是关于许可证制度或市场准入制度的规定,因此,被告人的经营行为未违反国家规定而侵害特定的许可经营和市场准入制度。被告人没有取得工商营业执照的行为,仅仅违反了工商行政管理规定,不属于犯罪行为。2、被告人陈珠未实施非法经营行为。购买设备、申请宽带、开设银行账号、招聘及管理员工均由董杰实施,陈珠未参与。部分所聘员工的证言也证实了陈珠未参与本案。公诉机关提交的证据无法形成证据链证明陈珠参与经营,两被告人前后供述不一致,故两被告人以往的供述不能作为陈珠参与经营的定案证据。

陈珠辩护人庄毅雄提出的书面辩护意见认为被告人陈珠不构成非法经营罪。理由是:1、公诉机关缺乏认定的证据和法律依据,并非一切违法经营行为都构成非法经营罪,现有的法律、行政法规也未规定破换技术保护措施的行为属于犯罪。公诉人也未提供任何客观证据证明本案已经构成"情节特别严重"。2、被告人陈珠从未参与代练。

经审理查明,被告人董杰、陈珠在玩网络游戏过程中了解到利用非法"外挂"程序可以代游戏玩家"代练升级"并从中牟利,遂通过互联网向他人(网名"拉哥")购买名为"冰点传奇"的"外挂"程序,并与该程序卖家"拉哥"协商合作利用"外挂"进行游戏代练,由"拉哥"提供"外挂"程序,由二被告负责代练及收费。2007年月以来,被告人董杰、陈珠陆续购置了九十多台电脑,申请了电信宽带,并冒用"蔡X"、"曾X"的身份办理了银行卡、客服电话,用于和游戏玩家联系及收取代练费。二被告人先后雇佣了十二名员工,在其居住的南京市江宁区XX街道XX家园XX栋XX号家中以"土人部落工作室"的名义,不断在上海盛大网络发展公司(以下简称盛大公司)经营的《热血传奇》游戏中做广告,以80元/周、300元/月等价格帮助游戏玩家使用"冰点传奇"的"外挂"程序代练升级。董杰、陈珠将雇佣来的员工分成客服组和代练组利用"外挂"软件"冰点传奇"日夜经营代练,并适时与"外挂"程序卖家"拉哥"联系进行版本升级,以对抗盛大公司游戏保护措施。至案发时止,已先后替1万多个《热血传奇》游戏玩家的账户代练升级。自2007年3月至2007年12月7日,二被告人收取了全国各地游戏玩家汇入的巨额代练资金,其二人仅通过户名为"张XX"的银行账户向"冰点传奇""外挂"程序卖家"拉哥"汇去的费用就达130多万元。

另查明,"土人部落工作室"的"外挂"----"冰点传奇"是使用"外挂"程序直接连接游戏服务器,同一台计算机可同时运行多个"冰点传奇"程序。利用"冰点传奇"程序可同时登陆多个《热血传奇》网络游戏账号。该"外挂"程序通过游戏封包的加密与解密算法的破解、游戏指令与数据结构的筛查、游戏地图文件的破解与转换等方法,通过发送网络数据包攻击、入侵游戏服务器,以达到增加和修改使用用户游戏的参数数据库里生存和成长的过程体验。该"外挂"程序修改了盛大公司《热血传奇》游戏的使用用户在服务器上的内容,帮助《热血传奇》游戏的使用用户完成自动化循环操作。因董杰、陈珠使用的"冰点传奇""外挂"程序绕过了正常的游戏客服端与服务器端之间的通讯协议,使盛大公司计算机系统中正常的客户认证功能受损,从而干扰了《热血传奇》游戏的正常运行,同时破坏了网络游戏规则,严惩影响了盛大公司的生产经营秩序。

上述事实,有下列经庭审举证、质证的主要证据证实,本院予以确认。

1、被告人董杰在侦查阶段的供述证实:其于2007年4月份至案发时与妻子陈珠雇佣员工在自己家中,利用向他人购得的名为"冰点传奇"的"外挂"程序帮助游戏玩家升级并牟利。其还使用youxi520网站在代练过程中登记玩家信息并进行管理。其知道盛大公司是不允许使用"外挂"软件的,如果发现了会封号。其使用的"冰点传奇""外挂"要经常升级,每次《热血传奇》游戏版本更新,卖家"拉哥"就通过QQ发补丁给其更新升级。如果在代练中遇到问题就找"卡哥"解决。

2、被告人陈珠在侦查阶段的供述证实:2007年3、4月份,其用"蔡X"、"曾X"等人的身份证办理了一些银行卡和手机卡,并在盛大公司传奇游戏里做广告喊话,说可以帮人代练,并留下QQ和手机号码,如果有游戏玩家需要代练,自己这边就会把银行账号告诉对方,并将已付付款的玩家账号挂到"冰点传奇""外挂"上练级。其和丈夫招聘了12名服务人员,并购置了80多台电脑。"拉哥"经常会传补丁给乙方升级,乙方共收到游戏玩家的汇款有几百万元,其中部分付给"拉哥"作为点卡钱,是通过一个户名叫"张XX"的工行帐号汇的。

3、证人徐斌(卡哥)的证言证实:2007年2月底,其在网上看到"热血传奇外挂,有意联系"的信息后,就和对方(网名叫"拉拉")联系了。"拉拉"希望找个中间人跟他合作,帮他租服务器、收款、转款,并把他的"外挂"程序发给其试用,其答应了"拉拉"并帮他向服务器商租了二台服务器。后来"拉拉"又介绍了一个网友(董杰),商定由"拉拉"提供《热血传奇》的"外挂"软件,其负责服务器续费,那个网友负责代练,代练收入的50%由代练网友打到其办的户名为"张XX"的工商银行卡上,其再帮"拉拉"取款、转款、服务器续费。到2007年12月初,那个网友汇到"张XX"工行卡上的钱大概有一百多万元,其在此过程中获利约13万元。

4、证人江X、苗X、秦X、季X、张X、金X、王X、王X、张X、陈X、胡X的证言均证实:他们用老板董杰装进每台电脑里的"外挂"程序帮盛大公司网络游戏"传奇"的游戏玩家代练。老板家有90多台电脑,除3、4台做客服外,其余电脑用于帮玩家代练,向玩家收费的标准为80元/周、300元/月,老板收到玩家的钱后就帮玩家挂机代练升级,代练时使用脱机"外挂"练级,由"外挂"自动控制角色打怪练级,不需要人手工操作。每台电脑都能挂30-40个游戏帐号。老板董杰将员工分成二组,6个男同事是技术员,负责看号、挂机练级,6个女同事负责做客服,胡X是主管。所有挂机的玩家帐号都要在youxi520网上登记,已经登记了11000多个客户资料。使用老板的"外挂"软件,只要把客户的账号、密码输入"外挂"程序,玩家自己就不需要进入游戏练级了。但"外挂"要经常升级,盛大公司的"传奇"游戏每次更新,他们的"外挂"就跟着换新版本,每次更新都是老板把程序拿来。季X、陈X、王X的证言还证实她们的代练对盛大公司有影响,所以盛大公司发现了挂机的账号就会封号。胡X的证言还证实他知道"外挂"是一种破坏性程序,破坏了游戏的运行秩序。苗X的证言还证实他是陈珠一个人去劳务市场招来的,陈珠问其有无玩过"传奇"游戏,他答复玩过"传奇"游戏后,陈珠就讲"玩过就可以干",并讲"一千多块钱一个月"。陈X、季X的证言还证实她们每天做的账要用QQ发给老板娘陈珠。王X的证言还证实以前她们做的账目都是陈珠在家里核对,陈珠刚生小孩不久,陈珠妹妹来帮忙对了几天账。胡X的证言还证实他们客服会将每天的代练营业额告诉陈珠,陈珠也会上网上银行查询每天的收益情况,陈珠知道这些收益是帮游戏玩家"外挂"代练而收取的费用,他们的账户都是董杰、陈珠夫妻二人掌握。

5、证人郑武的证言证实,2007年8月中旬,盛大公司发现一款针对该公司《热血传奇》游戏而制作的名为"土人部落"的"外挂",该"外挂"在网络游戏中大肆宣传代练升级,收费标准是80元/周、300元/月,并留下了联系电话、QQ号和付款账号。虽然盛大公司不断升级游戏系统,但"土人部落""外挂"也针对盛大公司的《热血传奇》游戏版本随时更新。

6、证人谢玉峰、张洪志、曾锐的证言证实,在《热血传奇》游戏中玩的时候,发现有人使用"外挂",其中有"土人代练工作室"在游戏中喊话"自动包月包周练级"、"专人代练"等,价格是80元/周、300元/月,还留有联系QQ和电话。他们对使用"外挂"的玩家账号进行投诉,盛大公司也对投诉进行过回访。由于出现这些"外挂",正常玩家对《热血传奇》游戏失去了信心。

7、中华人民共和国新闻出版总署新出网证(沪)字002号互联网出版许可证证实上海盛大网络发展有限公司业务范围有游戏作品互联网出版业务;中华人民共和国国家版权局编号软著登字第013925号计算机软件著作权登记证书证实LegEnd of MiRz(传奇)游戏软件已被合法登记;上海盛大网络发展有限公司企业法人营业执照证实盛大公司有互联网信息服务、游戏作品互联网出版业务的经营权限。文网文[2003]0002号网络文化经营许可证证实盛大公司有利用互联网经营游戏产品的经营权限;中华人民共和国增值电信业务经营许可证(编号B2-20040053)证实盛大公司获准经营包括互联网信息服务在内的增值电信业务。韩国Actoz Soft Co.Ltd公司授权委托书证实,盛大公司系其在中国的合作伙伴,其授权盛大公司调查与《热血传奇》游戏相关的侵权行为。

8、搜查笔录、扣押物品清单证实公安机关在江宁区XX街道XXXX号进行搜查并扣押涉案电脑、银行存折(卡)、手机、居民身份证、银行存款回单、移动硬盘及相关文件资料的事实。

9、查询存款(汇款)通知书、取款凭条、中国工商银行南京后宰门支行账户历史明细清单、中国工商银行江苏省分行营业部个人业务凭证、中国农业银行江苏省分行借记卡资料查询明细单、中国建设银行股份有限公司江苏省分行账户明细清单及视听资料光盘等证据证实:(1)被告人董杰、陈珠通过户名为"蔡X"等人的银行卡收取游戏玩家钱款及通过youxi520.管理玩家账号信息的事实;(2)被告人董杰向户名为"张XX"的工商银行卡汇款130余万元购买"外挂"充值点卡的情况。

10、南京市公安局网络警察支队宁公网勘[2007]393号远程勘验检查笔录证实了公安机关对胡X等员工反映的域名为www.youxi520.com的网站进行远程勘验检查并提取相关涉案数据刻录光盘的情况。

11、现场勘验检查工作笔录及刑事摄影照片证实南京市公安局江宁分局刑事警察大队于2007年12月7日对涉案现场江宁区XX街道XXXX号勘验检查并拍摄了现场照片。

12、南京市公安局网络警察支队宁公网勘[2007]403号电子证据检查笔录证实公安机关对扣押的电脑、U盘进行电子证据检查并制作工作记录提取电子证据的事实。

13、天津市质量监督检验站关于"土人部落外挂----冰点传奇"软件的检验报告证实,在同一台计算机上可同时运行多个"冰点传奇"的程序,并可利用"冰点传奇"程序同时登陆多个《热血传奇》网络游戏账号。

14、上海东方计算机司法鉴定所司法鉴定意见书证实,"土人部落外挂----冰点传奇"是使用"外挂"程序直接连接游戏服务器(无客户端挂机),通过游戏封包的加密与解密算法的破解,游戏指令与数据结构的筛查,游戏地图文件的破解与转换等方法,通过发送网络数据包攻击、入侵游戏服务器,以达到增加和修改使用用户游戏的参数数据库里生存和成长的过程体验。该网络游戏程序确曾攻击过盛大公司合法经营的网络游戏《热血传奇》服务器,修改了盛大公司《热血传奇》游戏的使用用户完成自动化循环操作。

15、发破案经过、抓获经过证实公安机关因盛大公司报案而将二被告人抓获的事实。

本院认为,被告人董杰、陈珠以牟利为目的,违反国家规定,未经国家主管部门批准,也未获得盛大公司许可和授权,将明知是破坏了他人享有著作权的互联网游戏作品技术保护措施并修改他人游戏作品数据的非法互联网出版物----"外挂软件"使用到盛大公司享有著作权的游戏程序上,进行有偿代练经营活动,牟取了巨额非法利益,侵害了盛大公司的合法权益,属于出版非法互联网出版物的行为,具有严重社会危害性,构成非法经营罪。公诉机关指控被告人董杰、陈珠犯非法经营罪的基本事实清楚,证据确实、充分,指控的罪名成立,本院予以采纳。

盛大公司是经中国新闻出版总署许可的经营游戏作品互联网出版业务的公司,其所经营的《热血传奇》游戏是经过中国国家版权局合法登记的游戏软件,受国家著作权法的保护,而本案中二被告人购买、使用的"冰点传奇""外挂"程序软件在出版程序上没有经过主管部门的审批,违反了《出版管理条例》的规定,在内容上也破坏了《热血传奇》游戏软件的技术保护措施,肆意修改盛大公司《热血传奇》游戏的使用用户在服务器上的内容,不仅违反了《信息网络传播权保护条例》的相关规定,而且侵犯了著作权人的合法权益,被《出版管理条例》、《互联网出版管理暂行规定》所禁止,属于《最高人民法院关于审理非法出版物刑事案件具体应用法律若干问题的解释》第十一条所规定的严重危害社会秩序和扰乱市场秩序的非法出版物。本案中二被告人购买了电脑,聘用了工作人员,先后替1万多名不特定人使用非法"外挂"程序进行代练,并收取费用,客观上是对该非法"外挂"程序的发行、传播,属于出版非法互联网出版物的行为,根据《最高人民法院关于审理非法出版物刑事案件具体应用法律若干问题的解释》第十一条的规定,应当以非法经营罪定罪处罚。

被告人董杰、陈珠的行为已经违反了《出版管理条例》、《互联网出版管理暂行规定》的相关规定,破坏了国家对于互联网出版市场的管理秩序,故对辩护人曹力提出的《刑法》第二百二十五条所规定的"违反国家规定"只能是国家关于市场交易秩序管理的有关规定,而不是对某一个企业生产经营秩序的侵犯,公诉机关指控被告人董杰犯罪行为的危害后果与指控的罪名相互矛盾的辩护意见不予采纳;同理,辩护人庄毅雄关于现有的法律、行政法规未规定破坏技术保护措施的行为属于犯罪的辩护意见,辩护刘儒香关于本案被告人陈珠被指控的代练升级经营行为(利用非法"外挂"程序)不是我国法律、行政法规规定的需要经过国家相关部门特别许可才能实施的行为,《信息网络传播权保护条例》不是关于许可证制度或市场准入制度的规定,被告人陈珠的行为不属于犯罪的辩护意见均不能成立,本院亦不予采纳。

被告人董杰、陈珠的行为严重扰乱了市场秩序,且二被告人在不到十个月的时间内非法经营数额超过130万元,已符合《最高人民法院关于审理非法出版物刑事案件具体应用法律若干问题的解释》第十二条第二款第(一)项规定的情节特别严重的情形,故对辩护人庄毅雄提出"本案构成情节特别严重没有法律依据"的意见不予采纳。

关于被告人陈珠及其辩护人提出的陈珠从未参与代练、未实施非法经营行为,公诉机关指控被告人陈珠犯罪证据不足的辩解及辩护意见,经查,证人张X、苗X、胡X、陈X、王X、季X的证言均证实陈珠为从事代练招录员工并曾负责核对代练收入帐目,被告人陈珠、董杰以往供述也对陈珠参与代练事实予以印证,故对被告人陈珠及辩护人的该点辩解及辩护意见,本院不予采纳。

在共同犯罪中,被告人董杰起主要作用,是主犯,应当按照其所组织、指挥的全部犯罪处罚。被告人陈珠起次要、辅助作用,是从犯,依法应当减轻处罚。为了维护社会主义市场经济秩序,依照《中华人民共和国刑法》第二百二十五条第(四)项、第二十五条第一款、第二十六第一、四款,第二十七条、第七十二条、第六十四条及《最高人民法院关于审理非法出版物刑事案件具体应用法律若干问题的解释》第十一条、第十二条第二款第(一)项的规定,判决如下:

一、被告人董杰犯非法经营罪,判处有期徒刑六年,罚金人民币一百六十万元(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2010年11月27日起至2016年8月27日止。罚金于本判决发生法律效力的第二日起十日内向本院缴纳)。

被告人陈珠犯非法经营罪,判处有期徒刑三年,缓刑四年,罚金人民币一百四十万元(缓刑考验期限从判决确定之日起计算。罚金于本判决发生法律效力的第二日起十日内向本院缴纳)。

二、作案工具、非法所得(清单见附件)予以没收。

如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向江苏省南京市中级人民法院提出上诉。书面上诉的,应当提交上诉状正本一份,副本二份。

审判长 张勇
人民陪审员 钱玉明
人民陪审员 王佳

二0一0年十二月九日

见习书记员 陶婷婷

下载《判决书》原件:Word格式(doc文件,50KB)

(完)


2010年12月9日星期四

阮一峰的网络日志

阮一峰的网络日志


CSS3圆角详解

Posted: 09 Dec 2010 03:40 AM PST

CSS3是样式表(style sheet)语言的最新版本,它的一大优点就是支持圆角。

网页设计大师Nicholas Zakas最新文章,清晰易懂地解释了CSS3圆角的各个方面,非常值得学习。以下就是我翻译的中文版。

=========================================

CSS3圆角详解

作者:Nicholas Zakas

译者:阮一峰

原文:http://msdn.microsoft.com/en-us/scriptjunkie/gg508841.aspx

发表日期:2010年12月8日


一、CSS3圆角的优点

传统的圆角生成方案,必须使用多张图片作为背景图案。CSS3的出现,使得我们再也不必浪费时间去制作这些图片了,而且还有其他多个优点:

  * 减少维护的工作量。图片文件的生成、更新、编写网页代码,这些工作都不再需要了。

  * 提高网页性能。由于不必再发出多余的HTTP请求,网页的载入速度将变快。

  * 增加视觉可靠性。某些情况下(网络拥堵、服务器出错、网速过慢等等),背景图片会下载失败,导致视觉效果不佳。CSS3就不会发生这种情况。

二、border-radius属性

CSS3圆角只需设置一个属性:border-radius(含义是"边框半径")。你为这个属性提供一个值,就能同时设置四个圆角的半径。所有合法的CSS度量值都可以使用:em、ex、pt、px、百分比等等。

比如,下面是一个div方框:

现在设置它的圆角半径为15px:

  border-radius: 15px;

这条语句同时将每个圆角的"水平半径"(horizontal radius)和"垂直半径"(vertical radius)都设置为15px。

border-radius可以同时设置1到4个值。如果设置1个值,表示4个圆角都使用这个值。如果设置两个值,表示左上角和右下角使用第一个值,右上角和左下角使用第二个值。如果设置三个值,表示左上角使用第一个值,右上角和左下角使用第二个值,右下角使用第三个值。如果设置四个值,则依次对应左上角、右上角、右下角、左下角(顺时针顺序)。

  border-radius: 15px 5px;

  border-radius: 15px 5px 25px;

  border-radius: 15px 5px 25px 0px;

(左下角的半径为0,就变成直角了。)

border-radius还可以用斜杠设置第二组值。这时,第一组值表示水平半径,第二组值表示垂直半径。第二组值也可以同时设置1到4个值,应用规则与第一组值相同。

  border-radius: 15px 5px / 3px;

  border-radius: 15px 5px 25px / 3px 5px;

  border-radius: 15px 5px 25px 5px / 3px 5px 10px 15px;

三、单个圆角的设置

除了同时设置四个圆角以外,还可以单独对每个角进行设置。对应四个角,CSS3提供四个单独的属性:

  * border-top-left-radius
  * border-top-right-radius
  * border-bottom-right-radius
  * border-bottom-left-radius

这四个属性都可以同时设置1到2个值。如果设置1个值,表示水平半径与垂直半径相等。如果设置2个值,第一个值表示水平半径,第二个值表示垂直半径。

  border-top-left-radius: 15px;

  border-top-left-radius: 15px 5px;

四、浏览器支持

IE 9、Opera 10.5、Safari 5、Chrome 4和Firefox 4,都支持上述的border-radius属性。早期版本的Safari和Chrome,支持-webkit-border-radius属性,早期版本的Firefox支持-moz-border-radius属性。

目前来看,为了保证兼容性,只需同时设置-moz-border-radius和border-radius即可。

  -moz-border-radius: 15px;
  border-radius: 15px;

(注意:border-radius必须放在最后声明,否则可能会失效。)

另外,早期版本Firefox的单个圆角的语句,与标准语法略有不同。

  * -moz-border-radius-topleft(标准语法:border-top-left-radius)
  * -moz-border-radius-topright(标准语法:border-top-right-radius)
  * -moz-border-radius-bottomleft(标准语法:border-bottom-left-radius)
  * -moz-border-radius-bottomright(标准语法:border-bottom-right-radius)

五、注意事项

虽然各大浏览器都支持border-radius,但是在某些细节上,实现都不一样。当四个角的颜色、宽度、风格(实线框、虚线框等)、单位都相同时,所有浏览器的渲染结果基本一致;一旦四个角的设置不相同,就会出现很大的差异。比如,下面这段代码在不同的浏览器中,渲染结果就相差很大。

  border-color: black;
  border-style: solid dashed;
  border-width: 1px 2px 3px;
  border-top-color: red;
  border-radius: 5%;

另外,并非所有浏览器,都支持将圆角半径设为一个百分比值。

因此,目前最安全的做法,就是将每个圆角边框的风格和宽度,都设为一样的值,并且避免使用百分比值。

(完)