http://radar.oreilly.com/2011/02/2010-book-market-2.html
Mike Hendrickson
2011-2-14

在这一部分,我们按照技术门类来分析一下计算机图书的销售情况。

在上一部分,我们把数据分成六大“门类”:系统与程序设计、Web设计与开发、商业应用、数字媒体应用、消费者操作系统与设备、IT人文(Computer Topics)。

这六大门类下面,是一级分类、二级分类、三级分类、四级分类,一共5层。比如说,系统与程序设计门类下面的一级分类有编程语言、数据库、软件工程、通用程序设计、安全,等等。

本部分将对比2010年与2009年的第四季度,也会将2010年与2009年的情况进行对比。

为了方便起见,下面给出了上一部分中展示过的Treemap,其中包含各个门类与一级门类2010年与2009年第四季度的对比。

这张图中的红、绿、黑色方块基本上反映了市场的波动情况。其中,代表高度增长领域的浅绿色方块非常少。但不要忘了这是2010年第四季度与2009年第四季度的对比。两个最大、最亮的绿色区域是“Android编程”和“Android消费者应用”,这两类图书从2008年微不足道的小方块成长为2010年相当可观的大市场。
查看全文 »

http://radar.oreilly.com/2011/02/2010-book-market-1.html
Mike Hendrickson
2011-2-10

自从上一次计算机图书市场报告发表之后的两年来,技术图书市场经历了一些重大的变化。恐怕不少读者根据图书市场日益疲软的征兆,已经看到未来发展的某些趋势了。实际上,我们早就断言过计算机图书销售情况预示着技术发展的趋势,大家也可以搜索一下有关计算机图书市场的其他文章。

本报告的数据来自Bookscan每周监控到的Top 3000图书的销售情况。Bookscan计量的是书店收银机的实际销售数据。换句话说,只要你在美国的书店里买过一本技术书,那么你购买这本书的信息十有八九已经进入了Bookscan的数据库里。Borders、Barnes & Noble以及Amazon等零售商实现了绝大多数技术图书的销售。

图书市场业绩综述

在讨论细分的计算机图书市场之前,我们先来了解一下截止到2011年1月2日这个周末,整个图书市场的表现情况。下面这张表涵盖了从The Girl with the Dragon Tatoo and Eat, Pray, Love to Decision PointsThe Ugly Truth的所有图书,只要是印刷、装订并以书的形式销售的,都包含在里面。

整体图书市场表现(所有图书,数据截止日期2011年1月2日)

所有图书,所有题材
青少年非虚构 -0.44%
青少年虚构 -3.46%
青少图书整体 -2.88%
成人非虚构 -1.91%
    计算机及互联网 -3.99%
成人虚构 -7.20%
其他 -13.12%
整体市场 -4.54%

从表中可以看出,计算机图书市场较上年下滑了4%。需要注意的是,计算机图书的销售量只占实体和在线书店所有图书总销量的1%。下面这张图展示的整体图书市场各门类的业绩增长情况。其中,幽默(Humor)类图书的增长在普遍低迷的市场背景下显得独树一帜(14.45%)。另一个增长的领域是青少年非虚构类中的教材/教辅类(21.55%)。我很奇怪,为什么教材/教辅类图书居然有这么高的增长率。
查看全文 »

原文地址:How browsers work

简介

Web浏览器恐怕是用户最多的软件了。本文将介绍浏览器的工作原理。想知道从你在地址栏中输入“google.com”,到窗口中显示Google主页的过程中都发生了什么?本文会为你揭开这个秘密。

要讨论的浏览器

今天,人们主要使用5种浏览器:Internet Explorer、Firefox、Safari、Chrome和Opera。这篇文章的分析源自开源浏览器——Firefox、Chrome和Safari,Safari是部分开源的。根据W3C对浏览器使用情况的统计信息,当前(2009年10)Firefox、Safari和Chrome共同的市场占有率已接近60%。因此,可以说开源浏览器已经占据了浏览器市场的半壁江山。

浏览器的主要功能

浏览器的主要功能就是呈现你选择的网络资源,换句话说,就是你向服务器请求资源,然后浏览器把它们显示在自己的窗口中。资源的格式通常是HTML,当然也有PDF、图像等等。资源的位置是使用URI(Uniform Resource Indentifier,统一资源标识符)来指定的。与此相关的内容在后面讨论网络的时候还会详细介绍。

浏览器如何解释HTML文件是由HTML和CSS规范规定的。这些规范是由W3C(World Wide Web Consortium,万维网联盟)维护的,W3C是负责制定Web标准的组织。

HTML当前的版本号是4(http://www.w3.org/TR/html401/),HTML5还在制定中。CSS当前的版本号是2(http://www.w3.org/TR/CSS2/),CSS3也正在制定过程中。

多少年来,浏览器厂商各自为战,纷纷埋头开发自己的扩展,对规范的支持始终不给力。结果就给Web开发人员带来了生死攸关的兼容性问题。而今天,大多数浏览器对规范的支持程度仍然参差不齐。

浏览器的用户界面大同小异,其中相同的界面元素包括:

  • 用于输入URI的地址栏
  • 后退和前进按钮
  • 书签选项
  • 用于刷新和停止加载当前文档的刷新及停止按钮
  • 返回主页的主页按钮

说来也怪,并没有哪个正式公布的规范对浏览器的用户界面作出规定,浏览器目前的外观是多年来浏览器厂商之间互相模仿和不断改进的结果。HTML5规范中没有定义浏览器必须具备的UI元素,但列出了一些公共元素,其中就包括地址栏、状态栏和工具栏。当然,有些浏览器还有自己专有的一些功能,如Firefox的下载管理器。相关的更多内容将在后面讨论用户界面时介绍。
查看全文 »

HTML5设计原理

2010年10月21日 Web开发, 翻译

Jeremy Keith在 Fronteers 2010 上的主题演讲

特别感谢以下朋友指出翻译错误。

今天我想跟大家谈一谈HTML5的设计。主要分两个方面:一方面,当然了,就是HTML5。我可以站在这儿只讲HTML5,但我并不打算这样做,因为如果你想了解HTML5的话,你可以Google,可以看书,甚至可以看规范。

实际上,确实有人会谈到规范的内容。史蒂夫·福克纳(Steve Faulkner)会讲HTML5与可访问性。而保罗·艾里什(Paul Irish)则会讲HTML5提供的各种API。因此,我今天站在这里,不会光讲一讲HTML5就算完事了。

说老实话,在正式开始之前,我想先交待清楚我所说的HTML5到底是什么意思。这话听起来有点搞笑:这会子你一直在说HTML5,难道我们还不知道什么是HTML5吗?大家知道,有一个规范,它的名字叫HTML5。我所说的HTML5,指的就是这个规范。但问题是,有些人所说的HTML5,指的不仅仅是这个规范,还有别的意思。比如说,用HTML5来代指CSS3就是一种常见的叫法。我可不是这样的。我所说的HTML5,不包含CSS3,就是HTML5。

类似的术语问题以前也有过。Ajax本来是一种含义明确的技术,但过了不久,它的含义就变成了“用JavaScript来做一切好玩的东西”。这就是Ajax,对不对?今天,HTML5也面临同样的问题,它本来指的是一个特定的规范,但如今含义却成了“在Web上做一切好玩的事。”我说的不是这种HTML5,不是这种涵盖了最近刚刚出现的各种新东东的HTML5。我说的仅仅是规范本身:HTML5。

刚才已经说了,我今天想要讲的内容不多,也没有打算介绍HTML5都包含什么。今天我要讲的是它的另一方面,即HTML5的设计。换句话说,我要讲的不是规范里都包含什么,而是规范里为什么会包含它们,以及在设计这个规范的时候,设计者们是怎么看待这些东西的。

设计原理

设计原理本质上是一种信念、一种想法、一个概念,是你行动的支柱。不管你是制定规范,还是制造一种有形的物品,或者编写软件,甚至发明编程语言。你都能找到背后的一个或者多个设计原理,多人协作的任何成果都是例证。不仅仅Web开发领域是这样。纵观人类历史,像国家和社会这样大规模的构建活动背后,同样也有设计原理。

就拿美国为例吧,美国的设计原理都写在了《独立宣言》中了。

我们认为这些真理是不言而喻的,人人生而平等,造物主赋予了每个人不可剥夺的权利,包括生存、自由和追求幸福。

这里有一句口号:生存、自由和追求幸福。这是被写进宪法中的核心理念,它关系到我们所有人的一切,也就是我们构建自己社会的原则。
查看全文 »

原文链接:A Brief History of Markup
2010年9月23日校毕

A Book Apart 的第一本书,由Jeremy Keith执笔;本文是该书第1章。

HTML是World Wide Web上统一的语言。使用它所提供的标签,人类已经创建了令人惊奇、姿态万千的超链接的文档网络。看看AmazoneBayWikipedia,再看看个人博客和专为猫咪建立的站点,无一不是HTML的杰作。

HTML5是这门通用语言的最新版。虽然这次升级的变化之大史无前例,但HTML更新换代已经不是第一次了。这门语言从诞生之日起一直在发展。

在发明Web的同时,Tim Berners-Lee先生创造了HTML(HyperText Markup Language,超文本标记语言)。1991年,他写了一篇名为“HTML Tags”的文档另见更早的www-talk上的记录),其中建议人们使用20来个元素编写网页。

说到用尖括号包围文本的标签,并不是Tim先生的首创。更早的SGML(Standard Generalized Markup Language,标准通用标记语言)中就开始使用这种标签了。Tim先生当时并没有发明新语言,而是着眼于利用已经存在的技术——在HTML5的发展过程中,这个倾向依然得到了体现。

从IETF到W3C:HTML 4诞生记

HTML 1?这个版本实际上是不存在的。最早的HTML官方规范,是由IETF(Internet Engineering Task Force,因特网工程任务组)发布的HTML 2.0。这一规范中的许多特性,都是在已有实现的基础上归纳总结出来的。比如说,1994年居于市场领导地位的Mosaic浏览器提供了一个<img>标签,作者可以通过它在自己的文档中嵌入图像。后来,img元素就出现在了HTML 2.0中。

W3C(World Wide Web Consortium,万维网联盟)继IETF之后成为HTML后续标准的制定者,其官方网站是http://www.w3.org。20世纪90年代中期以后,W3C对HTML进行了几次升级,直至1999年发布HTML 4.01

此时,HTML的发展走到了一个十字路口上。
查看全文 »

原文:The Good Enough Revolution

2001年,Jonathan Kaplan和Ariel Braunstein注意到摄像机市场中一种奇怪的现象。高端数字相机市场增幅最大,但销量最大的仍然是便宜、一次性的胶卷相机。那一年,美国总共卖出了1.81亿台一次性相机,而数字相机只有大约7百万台。瞅准这个机会,Kaplan和Braunstein组建了一家名为Pure Digital Technologies的公司,尝试把昂贵的数字成像的“巧克力”,与走到哪拍到哪的这种大众市场的“花生奶油”混合起来,创造一种新产品。他们给自己第一款产品起的名字叫Single Use Digital Camera(单用途数字相机),然后通过零售商——主要是像CVS这样的大药房——来发售。

这个概念似乎很有前途,但终究还是有不少缺点。Pure Digital创业管理团队成员Simon Fleming-Wood表示,问题在于这个业务模型意味着人们为了得到照片或CD,必须要向商家再返还20美元。还要假设零售商会把二手相机返回给Pure Digital,然后翻新,从而减少生产新相机的数量。但用户不会很快把相机送回来。有人觉得在1.4英寸的小屏幕上浏览照片可以接受,因此就留着相机,打算过一段时间再去打印。还有人解决了把照片下载到PC的问题,这样就更不会送还相机了。

快速地销售却没有快速回笼作保证,导致公司利润急剧下滑,最终导致相机停产。但是,Kaplan和Braunstein因此认识到:为了经济实惠、方便好用,用户可以放弃很多功能。为了把价格降下来,Pure Digital不得不反复权衡:使用便宜的镜头和其他组件,减少图像处理芯片的数量。拍摄的照片可以接受,但画质并不好。不过,Pure Digital还是卖出去三百万台相机。

对于一般相机零售市场,Kaplan和Braunstein也有了全新的认识。这个市场分成两大块:自动对焦、曝光的消费类相机(包括一次性产品)和独立镜头的单反专业相机(SLR,Single-Lens Reflex),后者可以更换镜头,而且要使用其他高端配件。毋庸置疑,当时相机销售量中的主体都是消费类相机(现在也是);SLR只对业余摄影爱好者和专业人士有吸引力。
查看全文 »

原文链接:http://www.kohala.com/start/rstevensfaq.html
校对时间:2010年9月19日

问题TOC

问:你怎么想到要写UNIX Network Programming返回TOC

1980年代,我在Health Systems International工作,那时候我们先后为很多平台开发过Unix[1]软件。我们跟大多数同时代的创业公司一样,经历过一系列硬件的变迁:起先是VAX-11/750[2],运行4.2BSD[3],然后是个头稍大的VAX(785),接着又是多台VAX(又加了一台8500),有几台PC运行着一种风格的操作系统(Venix、Xenix[4]、DOS),另外还有一台IBM大型机运行VM。因为有多台VAX运行4.xBSD,所以我们就通过以太网把它们连接起来运行TCP/IP,当然装有Unix系列操作系统的PC和那台大型机也都可以运行TCP/IP。除了使用标准的实用工具(ftp、rlogin),我们还着手使用套接字自己开发工具。当时几乎没有文档可查(我从一堆4.3BSD手册中找到两本Leffler等人编写的文档,但非常破旧),因而在想解决某个问题时,就得查源代码。就这样查了一段时间的源代码之后,我意识到应该把自己发现的东西诉诸文字。1988年我开始写UNP,因为每天都要工作,所以这本书写了两年。

我相信UNP以及我的其他书之所以能够获得成功,是我的背景起了决定性的作用。换句话说,我既不是Berkeley也不是AT&T的开发人员,因此写作中就没有“内存转储”[5]的问题。书中的所有内容都是我自己经过深入钻研想明白的。在深入钻研和思考各种原理的过程中,我经常会绕很大的弯子,有时候甚至会走进死胡同。但这个过程对于理解新知识是极为必要的。有很多次我想在书中把某方面的工作原理写出来,自己也觉得很明白,但才刚写了几个测试程序,马上就又碰到了新的、不懂的问题。我在自己的几本书中也尽力传达了这种探索的盲目性,因为我觉得看到某个问题的错误解决方案(并理解它错在哪里),常常要比直接看到正确的解决方案收获更大。

问:你为什么要写Advanced Programming in the UNIX Environment返回TOC

整个1980年代,我翻看最勤的就是Marc Rochkind的Advanced UNIX Programming。但那本书的内容只涵盖了System III[6],我也知道他没有升级那本书的打算。所以,我决定自己写一本高级的Unix图书。

问:你为什么要写TCP/IP Illustrated, Volume 1: The Protocols返回TOC

我对TCP/IP产生兴趣始于1987年夏天在菲尼克斯(Phoenix,美国亚利桑纳州首府)召开的Summer Usenix[7]大会,当时我买了一本Doug Comer的Internetworking With Xinu[8]。(我是在Jim Joyce的书店买的这本书,这个书店开在酒店的一个套间里,他可能也是第一个尝试在Usenix大会上卖书的人。会场上是不允许卖书的。)在回康涅狄格的飞机上,我从头到尾看完了这本书。撰写UNP期间以及1990年代早几年,Doug Comer“卷I”的第1版和第2版先后都被我翻得书脊开了胶。我毕竟是一个业内人士,相对于理论阐述,我更关心对实际工作有指导意义的内容。在翻阅Doug这本教材的过程中,我不断提出一些非常实际但又在书中找不到答案的问题。与此同时,一位在IBM教TCP/IP的朋友也时不时地向我询问一些问题,而这些问题不管是在RFC规范还是其他任何教材中同样也找不到答案。我开始编写一些小测试程序,观察程序运行的结果(参见我这本书的“附录C:sock程序”的开头),冥冥之中感觉到以这种方式来写一本书倒是个不错的主意。我也知道有很多唾手可得的现成工具(大多数都是Van Jacobson写的,了不起!)可以帮我理解这两个协议,这些工具谁都可以拿来用。比如说Tcpdump吧,它不仅仅是一个诊断网络问题的工具,更是一个辅助理解协议原理的无价之宝。最终,在经历了数年的网络编程之后,我慢慢地认识到:80%的网络编程问题根本就不是编程问题,都是对协议运行原理理解不够造成的。

问:你为什么要写TCP/IP Illustrated, Volume 2: The Implementations返回TOC

同样,我是Doug Comer的“卷II”(TCP/IP的Xinu实现)的忠实读者,但在遇到没有实现的功能时总会感到很无助,况且Xinu也不是标准。Berkeley的实现才是事实标准,而且其代码基也“小”(15000行C代码)到可以用1本书——尽管是一本“大”书——来讲完。

问:你为什么要写TCP/IP Illustrated, Volume 3: TCP for Transactions, HTTP, NNTP, and the Unix Domain Protocols返回TOC

这本书实际上是由3本更小的书构成的。第一部分“TCP for Transactions”是对Volume 1第24.7节的重要扩展。这一部分从两个方面讲解了T/TCP:一是通过实例讲解TCP协议扩展(第1至4章,延续了Volume 1的风格),二是分析了4.4BSD-Lite连网代码对T/TCP的实现(第5至13章,延续了Volume 2的风格)。第二部分“HTTP(Hypertext Transfer Protocol) and NNTP(Network News Transfer Protocol)”是对Volume 1的补充,因为这一部分讲解了构建于TCP之上的两个应用层协议。其中有一章详细地解释了繁忙的World Wide Web服务器上实际的数据包,展示了多变的、有时候完全不可思议的TCP行为及实现。这两部分的主题完全取材于Volume 1和Volume 2,而且都是相关领域中重要而流行的实际应用。第三部分“Unix Domain Protocols”是对Volume 2的补充,因为这一部分专注于这些协议在4.4BSD-Lite连网代码中的实现。所以说,最后这一卷其实是对前两卷的一个延伸。

问:我应该看其中哪本书?返回TOC

这取决于你对哪个领域感兴趣。UNP是一本网络编程教材:包含15000行C源代码和大量有关网络编程的详细解释。但是,UNP只介绍了基本的Unix和TCP/IP。相对而言,APUE则完全是一本Unix编程教材,没有涉及网络编程。事实上,可以将APUE看作是对UNP第2章的一个重要扩展。TCP/IPIv1纯粹讲协议:这些协议怎么运行,为什么那么运行(是对UNP第5.2节的一个重要扩展)。这本书里连一行C代码都没有。TCP/IPIv2讲的是TCP/IP的实际实现:包含15000行内核中的C源代码。TCP/IPIv3则是由协议(T/TCP、HTTP、NNTP)和实现(大约2200行内核C源代码)构成的。

我自己对网络编程非常感兴趣,但是我发现要做好网络编程,必须理解网络底层的运行系统(APUE)和底层的协议(TCP/IPIv[123])。

问:你跟Doug Comer合作写过书吗?返回TOC

没有,那个人是普渡大学的David L. Stevens。我们不是一个人。

问:写一本书要花多长时间?返回TOC

每一面大约要花2小时左右。这个时间包含了为出版商制作可供照排机使用的PostScript[9]文件的时间。这样算来,一本600页的书,大约要花1200小时。如果你不制作供照排机使用的文件(例如,让出版商自己排版和做索引),还可以节省一点时间,但我喜欢完全控制最终结果。

问:在写这些书的时候你是通过哪些方式来学习的?返回TOC

我阅读了大量源代码。实际上,阅读源代码的技能大学里通常都不会教,但其实要看懂代码也不是一件多难的事。(还记得John Lion在1977年出版的那本完整展示和分析UNIX Version 6源代码的A Commentary on the UNIX Operating System[10]吗?我很幸运,读研究生的时候,Dave Hanson就拿这本书当教材给我们上课。)虽然我看不到大多数Unix商业版的源代码,但好在仍有不少系统的源代码可以供我研究,例如:4.4BSD-Lite、FreeBSD、Linux、Minix、GNU,等等。

另外,我还会从一些有用的Usenet新闻组中学习。在新闻组里,可以看到解决相同问题的不同手段,可以学到从来没听说过的新知识,也可以目睹别人遇到的一些问题。我每天在Usenet上面阅读和发帖的时间大约是25分钟。

以下是我经常上的一些新闻组:news.admin.announce、comp.security.announce、comp.protocols.tcp-ip、comp.dcom.sys.cisco、comp.unix.bsd.bsdi.announce、comp.unix.bsd.bsdi.misc、info.bsdi.users、comp.unix.solaris、comp.unix.internals、comp.unix.programmer、comp.protocols.dns.bind、comp.protocols.dns.std、comp.protocols.dns.ops、comp.programming.threads、gnu.groff.bug、gnu.announce、gnu.gcc.announce、gnu.g++.announce、misc.books.technical、comp.protocols.time.ntp、comp.protocols.tcp-ip.domains、comp.org.usenix、comp.mail.mush、comp.protocols.nfs、comp.std.unix、comp.text、alt.sys.sun、comp.sys.sun.announce、comp.sys.sun.hardware、comp.std.announce、comp.os.linux.announce、comp.lang.java.announce和comp.lang.java.programmer。

问:你会回复读者的邮件吗?返回TOC

当然。我的电子邮件地址印在了这几本书前言的末尾,我会看收到的每一封邮件。不过,由于邮件的格式混乱,可读性差,这几年我还设计了几种推荐的标准格式。想知道这个标准格式的最简单快捷的方法,就是把你想让我帮你调试的源代码发给我(别笑,要是知道我收到过多少封包含这种请求的邮件,你就不会惊讶了)。其次,可以把构建书中某些源代码期间得到的make输出发给我,并问我怎么解决——出版商好心好意地提供了全部代码下载,但这些代码也只是提供下载而已,并不意味着他们配备了专人来答疑解惑。诸如此类的问题大多数都应该贴到相应Unix版本的新闻组中。

还有不少邮件询问我几年前写过的某篇文章中的某个具体的问题,信不信由你,这些细节我很难一下子都想起来。我的基本原则是,只要我能想出问题的答案,而且不必敲太多次键盘,我就会马上回复。可如果回答问题还需要翻箱倒柜地找书,乃至查阅相关资料,或者需要跟发件人来往通几次信以便了解问题的更多细节,我想我是没有这个时间的。

有很多读者通过邮件问我的编程问题,都应该发到某些Usenet新闻中去——特别是comp.unix.programmer。

问:我也想写一本书。我该从何做起呢?返回TOC

技术书市场跟小说市场完全不同。技术出版商无时无刻不在寻找好书,作者有没有名气都没有关系。我建议你先写出来一些东西(比如,书中比较主要的几章),然后再联系出版公司。联系出版公司的最佳途径是参加技术会议(Usenix、Interop,等等),到他们的展台前当面谈。正常情况下,他们都会对你非常热情的。

再给几个简单的建议:

  • 不要在太细节的内容上花过多时间。我保证这样写出来的东西90%都要改。
  • 不要在导言那一章(通常是第1章)花太多时间,等写完全书再回过头来写。一般来说,这一章是全书最重要的一章,因为它肩负着向读者介绍其他章节内容的重任。想想看,在写完全书之前,有些内容没准是会变的。
  • 如果承受不了批评就不要写书。以下是UNP第1版征求意见稿反馈回来的一些评论,你听听:“啊!这家伙难道一点语法和表达都不懂吗?”“怎么这个人我从来都没听说过呢?”“把括号里那些废话都删了算了”“术语前后不统一。”UNP第2版也有一些难听的话:“整本书到处都是以……开头的句子,根本没法理解。”

另外,要做好重写、重写、再重写的心理准备。这是UNIX Network Programming, Second Edition, Volume 1中的一页(280K的GIF图),看了之后你就知道我说的重写是什么意思了。这是该书第92/93页定稿前的一张照片,愿意的话你可以比较一下。而且,这还只是我自己校正某些表述时所做的修改,是交给其他审稿人审读之前的样子。

问:能谈一谈UNIX Network Programming是怎么出版的吗?返回TOC

前面说过,我是1998年开始写UNP的,基本素材是我整理的一些记录Berkeley连网代码工作原理的内部笔记。至于为什么要写这方面的书,我现在好像也没办法说得很清楚,不过倒是有几个小理由。首先,我已经在一家创业公司(HSI)工作了6年,公司发展很快,编程人员也越来越多,我可以多腾出一点时间来去做些别的事情,不用成天写代码和补漏洞了。加之,我取得博士学位也已经有6个年头了,而我在技术方面的著述还是零纪录。最后,我在HSI又招聘到了这个新人(Gray Wright),刚刚走出校门,思维敏捷,我只有在技术上不断进取,才不至被他落下。(UNP的前言里面提到过Gary,他是第一个阅读我写的所有文字的人。)

在决定了写书之后,接着还得决定要写什么。我个人想写一本计算机图形和网络方面的书。1987年我到楠塔基特岛(Nantucket,位于美国马萨诸塞州东南沿海的岛屿,避暑胜地)过感恩节,我记得当时还带着Tanenbaum[11]的Computer Networks和Foley与Van Dam合著的Fundamentals of Interactive Computer Graphics。但在我回到家以后,我就决定写一本网络编程方面的书。说写就写,我最早给这本书起的名字叫Network Programming。跟大多数新作者一样,我白天上班,晚上利用“闲暇时间”写我的第一本书。

我至今还保存着1989年1月Usenet上的一个帖子:“我正在找一本关于Unix的好书(难道你们大家不想吗?)。我对Unix以及C和Shell编程都已经非常熟悉了。现在打算学习Unix通信方面的知识,例如:套接字、协议,等等。”一周后,另一个标题为“IPC的问题”的帖子询问了实现IPC(Internet Process Connection,进程间通信)的各种方法的细节,我看那些内容都是Marc Rochkind[12]的书里没有讲到的。这些提问让我感觉到自己的决定是正确的。还有一个帖子是Rick Adams在1988年11月23日发的:“终于等到这一天了,不含ATT代码的4.3BSD文件现在人人可用了。”这意味着我可以在这本书里使用Berkeley的代码了。

就这样埋头写了几个月之后,我觉得应该看一看自己写的这些东西有没有出版价值。我跟贝尔实验室一个在Prentice Hall出版社出过书的朋友联系,他给了我那里一位编辑John Wait的电话号码。1988年6月我打了电话,并给他的秘书留了言,然后他竟然给我回了电话!他说话很有意思,想看看我写的东西,告诉我他会参加那一年在旧金山举行的USENIX大会。我注册了这次会议,但最后是让Gary Wright替我去的;他戴我的胸牌。Gary把我的手稿(278页)交给了John。(Gray不久后又在Unix Expo大会上遇见了John,同样还是挂着写着我的名字胸牌。为此,John甚至怀疑书稿其实都是Gray写的,他只是假托是别人写的而已。如果你在哪一届Unix大会上遇见一个人,他的胸牌上写着“Rich Stevens”,你可以这么跟他打招呼:“噢,想必你一定是Gary Wright。”)John说他需要把我写的这几章发出去审校,然后他要么(1)立即开车到纽黑文跟我签合同,要么(2)把合同寄给我,否则(3)跟我说干脆死了这条心去干点别的吧,不要继续写了。随后,我就去夏威夷去度假了,一个月之后我回来了,发现有一条找John的电话留言。我提前并不知情,原来审稿人里面还有Brian Kernighan[13],Brian对书稿的评价是:“相当不错,值得出版。……总之,具备一本好书的潜质。……不管怎么说,都很有必要继续写下去。”John把合同寄给了我,于是我接着往下写。

问:你并没有使用troff写书,是吗?返回TOC

当然用了。还有其他软件吗?troff在业内是首屈一指的,我花了好几年功夫学习它。我在写书的时候用的是-ms宏的一个修改版。在通过troff格式化页面之前,我在输入中添加了很多“微调”指令,很难想象如果用Frame这些细节上的调整怎么做到。我还使用pic制作了所有插图。我用键盘比用鼠标熟练得多,所以使用依赖菜单的绘图软件很耽误时间,也很难受。之所以没有使用TeX,是因为那几年TeX和PostScript不能很好地协同。要是书里数学方面的东西多一些,可能会考虑TeX。

关于生成供照排机使用的文件,我想多说一点。1989年,在我写完UNP的时候,出版商还没有条件处理供照排机使用的文件,当时只有类似贝尔实验室这样的机构才有自己的排字机。因此在写完UNP之后,我又写了15页的PostScript文件,保存在6张1.2MB的MS-DOC磁盘里,并亲自开车把这几张盘从纽黑文送到罗得岛州府普罗维登斯[14]的Typesetting Service Corp.。两天后,他们通过联邦快递(FedEx)把排版后的页面送到Prentice Hall,排版费也是我刷的Visa卡(781页,每页4美元,共3124美元),Prentice Hall后来又把这些钱补给了我。今天,作者只要把最终的PostScript文件通过ftp传给出版商,出版商就可以排版了。

问:你使用哪种Unix系统?返回TOC

我每天都在使用的是运行在Sparc Ultra 5上的Solaris。原因很简单:1990年我在买第一台工作站时,只有SparcStation SLC的价格低于5000美元。那几年,大多数工作站厂商都瞧不上低端市场(有些厂商到现在还是如此)。后来我把SLC升级到ELC,然后又将ELC升级到SparcStation4,最后又换成了现在的Ultra 5。(我大约每3年就升级或更换一次硬件。)我的机器里也安装了很多可自由使用软件(GNU C、GNU troff,等等),而且我发现大多数这类软件都会率先被移植到Sun平台上来,因此感觉还是很舒服的。

运行我这个kohala.com域名的服务器中安装的是BSD/OS(HTTP、匿名FTP、电子邮件、DNS,等等)。BSD/OS是非常优秀的系统,非常可靠,它可以一直运行下去不出任何问题。我喜欢它还因为它的源代码是开放的,平常可以时不时地看一看,偶尔也会自己动手解决一点问题。不过我也买了他们的服务,让他们自己来发现和修复一些bug。(对Sun和BSDI的所有产品,我都是照单付钱的,因此以上所说都是非常客观的。)

我的办公室里还有很多其他计算机,运行着各种风格的Unix(在写UNP第2版时是9种;参见该书原版第21页)。我主要用它们来编译和测试我在其他系统上写的代码,同时也可以方便地在不同的主机环境下运行客户端和服务器。

这些系统和Cisco路由器的管理工作完全由我自己负责,要是连这些都做不了,还怎么写Unix网络和编程的书呢。

问:你喜欢哪些技术书?返回TOC

以下是一个书单,排名没有先后之分。

  • The C Programming Language(Kernighan与Ritchie合著)。我始终很纳闷,为什么有人说这本书太复杂或者太粗糙。这本书简洁、明确,还配有很多示例。
  • Software Tools(Kernighan与Plauger合著)。这本书展示了如何设计然后实现许多简单版的Unix工具:grep、sort、ed等。(没错,连ed都有,这可是每个系统管理员都应该知道怎么使用的编辑器啊。我自己每年都要用很多次,经常在单用户模式下使用,编辑一些基本的配置文件。)我最喜欢引用这本书第250页中的那句话:“同样,如果你打算构建一些东西,一定要保证它们概念上的完整性——不要把一堆无关的‘功能’撺在一起。而且要以增量方式来构建,不要一下子全弄出来。”
  • The UNIX Programming Environment(Kernighan与Pike合著)。经典,在我看来现在仍然“没有过时”。这本书介绍了一些标准Unix命令行工具的用途(以及一些C编程知识),而Software Tools则是一本讲编程的书。
  • The TeXbook(Knuth)。我不用TeX,但我在排版时经常参考这本书。
  • The AWK Programming Language(Aho、Kernighan和Weinberger)。我经常用AWK,主要是编写小程序。不,我不用Perl——我认为它是一种只适合写不适合读的语言。
  • The Elements of Programming Style(Kernighan与Plauger合著)。这本书仍然是所有程序员的必读。
  • On Writing Well(Zinsser)。教你写作的一本好书。
  • Webster’s New World Guide to Current American Usage(Randall)。告诉你怎么克服高中英语课上灌输给你的那些不良表达习惯。

时刻放在我桌子上的两本书分别是Merriam Webster’s Collegiate DictionaryThe Chicago Manual of Style

你也知道,我不只看技术书,我喜欢的小说作者(或者说,他们书的精装本一上市我就出手的那些作者)有:David Baldacci、Patricia Cornwell、Michael Crichton、Patrick Davis、Nelson DeMille、Joseph Finder、Frederick Forsyth、Stephen Frey、John Grisham、Payne Harrison、Greg Isles、Douglas Kennedy、Phillip Margolin、Steve Martini、Douglas Preston和Lincoln Child, 以及Stuart Woods。不过,只有坐飞机的时候看这些书才是为了解闷的。

问:你名字中的W.表示什么?返回TOC

William。我父母想用我舅舅(叔叔)Bill的名字,但又想叫我Richard。他们觉得“William Richard”叫起来要比“Richard William”更顺口。

问:为什么专门为MTS(Michigan Terminal System)写APUE呢?返回TOC

我是1968~1973年在Michigan上的大学,我用的第一台计算机是运行MTS的IBM 360/67,作为未来的工程师,每个人都要上机学习Fortran编程语言。我们使用的课本是Brice Carnahan和James Wilkes自己编写的,Elliot Organick的那本Fortran IV是补充教材。MTS系统本身非常不可思议,包含了很多巧妙的想法,而且差不多是与Unix同时被开发出来的。与Unix一样,MTS蕴含的思想也领先于它的时代,这一点与其他IBM大型机操作系统相比尤其明显。只不过MTS运行在昂贵的IBM大型机上,而Unix则运行在便宜的PDP-11系列上。结果呢,也就不言自明了。

问:你编写的程序里为什么会包含goto?返回TOC

请参考高德纳1974年12月发表在ACM Computing Surveys, Vol. 6, No. 4上的论文,题目叫 Structured Programming with go to Statements。(事实上,那一期的Computing Surveys完全堪称经典。)我想给绝不使用goto的程序员出一道题,就是请在不使用任何goto语句的情况下重新编写tcp_input()(TCP/IPIv2第27章和第28章),注意不要造成任何性能损失(这道题看似简单,实际上可不好解)。


[1] Unix操作系统(官方商标是UNIX,有时候也写作Unix )最早是1969年由美国AT&T公司贝尔实验室的员工肯·汤普逊(Ken Thompson)、丹尼斯·里奇( Dennis Ritchie)、布赖恩·凯尔尼汗(Brian Kernighan)、道格拉斯·麦克伊罗(Douglas McIlroy)和 Joe Ossanna开发的。Unix是1971年最早在在PDP-11(PDP,Programmed Data Processor;PDP-11由DEC公司制造)上运行的操作系统,具有多用户、多任务的特点,支持多种处理器架构。AT&T公司以低廉甚至免费的许可将Unix源码授权给学术机构做研究或教学之用,许多机构在此源码基础上加以扩充和改进,形成了所谓的“Unix变体”,这些变体反过来也促进了Unix的发展,其中最著名的变体之一是由加州大学柏克利分校开发的BSD产品。后来AT&T意识到了Unix的商业价值,不再将Unix源码授权给学术机构,并对之前的Unix及其变体声明了版权权利。结果,导致了一场旷日持久的版权官司。这场官司一直打到AT&T将自己的Unix系统实验室卖掉——同时也为Linux的诞生创造了难得的条件,新接手的Novell公司采取了一种比较开明的做法,允许柏克利分校自由发布自己的BSD,但是前提是必须将来自于AT&T的代码完全删除,于是诞生了4.4 BSD Lite版,由于这个版本不存在法律问题,4.4BSD Lite成为了现代BSD系统的基础版本。要了解完整的Unix及其变体的时间线,请参考:http://www.levenez.com/unix/。——译者注

[2] VAX(Virtual Address eXtension)是一种可以支持机器语言和虚拟地址的32位小型计算机。VAX最初由DEC(Digital Equipment Corporation)公司在20世纪70年代初发明,是原来16位PDP-11的扩展产品。DEC公司1998年1月26日被Compaq(康柏)公司收购,后者2001年9月4日又被HP(惠普)公司收购。VAX被誉为最成功的小型机,其设计师、DEC技术灵魂、小型机之父戈登·贝尔(Gordon Bell)的个人主页为:http://research.microsoft.com/en-us/um/people/gbell/。——译者注

[3]]1974年,伯克利加州大学(University of California, Berkeley)从AT&T公司获得修改UNIX的许可,并在此基础上发布BSD(Berkeley Software Distribution,伯克利软件套件);换句话说,BSD是Unix的衍生系统。1BSD(first Berkeley Software Distribution)是1977年由伯克利的研究生比尔·乔伊(Bill Joy,Sun公司的联合创办人)整理开发出来的。1978年、1979年和1980年,Joy分别发布了2BSD、3BSD和4BSD。4BSD以后的版本由1980年成立的CSRG(Computer System Research Group,计算机系统研究小组)负责发行。该小组于1981年6月发行了称之为4.1BSD的新版本——不是5BSD。由于AT&T觉得5BSD会使用户将它和AT&T Unix System V混淆,Berkely同意改变BSD将来版本的命名规则,将版本号仅保留在4BSD上,以后只增加4后面的小版本号。到1995年CSRG解散时,BSD的最高版本是4.4。1990年代初、中期,NetBSD、FreeBSD以及OpenBSD(从NetBSD小组中分离出来)小组相继成立,它们努力的结晶成为BSD的三个主要变体。BSD的另外两个主要变体NeXTSTEP和Darwin(Mac OS X的核心, 由FreeBSD 4.5和NeXTSTEP混合派生)如今已经演变成苹果公司Mac OS X及iPhone OS的核心。BSD对Unix最重要的贡献之一是TCP/IP。BSD有8个主要的发行版中包含了TCP/IP:4.1c、4.2、4.3、4.3-Tahoe、4.3-Reno、Net2、4.4以及4.4-lite。这些发行版中的TCP/IP代码几乎是现在所有系统中TCP/IP实现的前身,包括AT&T System V 和Microsoft Windows。——译者注

[4] Xenix是微软为微型计算机推出的Unix版本。由于微软购买的授权无法直接让该操作系统以“UNIX”为名,便命名该系统为Xenix。微软在1979年从美国电话电报公司购买了 Version 7 Unix 的授权,并于1980年8月25日发布面向16位系统的版本,由SCO公司将该系统移植至英特尔8086/8088架构。在Unix V7的基础上,Xenix整合了BSD的技术,再加上当时x86处理器的价格低廉,很快便成为当时最受欢迎的Unix发行版。据The Design and Implementation of the 4.3BSD UNIX Operating System(Samuel J. Leffler、Marshall Kirk McKusick,Addison-Wesley,1991.3)称:“如果就运行它的机器数量而言,Xenix可能是发行量最大的一个Unix版本了。”——译者注

[5] “内存转储”原指把内存中的二进制数据以原来的表达方式转存成文件,用于对内存的运行状态进行事后分析。在这里指的是作者不会照搬开发文档,因此书的内容框架和语言表达自然更接近一般读者。——译者注

[6] UNIX System III (有时也称System 3)是由AT&T的Unix Support Group(USG)于1982年发布了一个Unix版本,也是第一个面向贝尔实验室之外发布的版本。UNIX System III综合了多个AT&T版本: PWB/UNIX 2.0、CB UNIX 3.0、UNIX/TS 3.0.1和UNIX/32V。System III支持DEC PDP-11和VAX计算机。之所以将这个版本称为System III,是因为它是UNIX/TS 3.0.1和CB UNIX 3这两个由贝尔实验室内部支持的Unix系统的对外发行版。这个版本的文档叫做UNIX Edition 3.0。之前,根本没有System I和System II这两个Unix版本。而且也没有官方发布的UNIX/TS 4.0(否则,就会有System IV了)。换句话说,System III之后就是基于UNIX/TS 5.0System V了。——译者注

[7] USENIX协会(USENIX Association)是一个高级计算技术协会。其前身是成立于1975年的Unix Users Group(Unix用户组),主要致力于Unix及类似系统的研发。1977年,AT&T的律师通知这个小组不能使用UNIX这个词,因为它是Western Electric(截止到1995年一直是AT&T的生产部门)的注册商标。于是,该小组遂更名为USENIX。这个协会受到了计算机操作系统领域的众多业内人士、开发人员和研究人员的推崇。这个协会每年都会举办一些会议和研讨会,最著名的是OSDI(USENIX Symposium on Operating Systems Design and Implementation ,USENIX操作系统设计与实现研讨会)、USENIX Annual Technical Conference(USENIX年度技术大会)、 USENIX Security Symposium(USENIX安全研讨会)、 FAST(USENIX Conference on File and Storage Technologies,USENIX文件及存储技术大会),以及SAGE(The USENIX Special Interest Group for Sysadmins,USENIX系统管理员特别兴趣小组——非盈利的专业系统管理员的国际性协会)主办的LISA(Large Installation System Administration Conference,大型系统管理员大会)。——译者注

[8] Xinu是一种类Unix操作系统,1980年代由Douglas Comer为教学在普渡大学(Purdue University)开发。Xinu这外名字既是递归缩写(Xinu Is Not Unix),又是“Unix”的反向拼写形式。这个系统曾被移植到很多硬件平台,包括DEC LSI-11和VAX系统、 Sun-2 and Sun-3工作站、Intel x86、PowerPC G3 和MIPS等。——译者注

[9] PostScript是1982年由John Warnock和Charles Geschke专门为打印图形和文字而设计的一种页面描述语言和编程语言,它与打印的介质无关,不管是在纸上、胶片上打印,还是在屏幕显示都没有问题。PostScript的主要目标是提供一种独立于设备的能够方便地描述图像的语言。独立于设备意味着,不需要借助任何具体设备的特性(例如,打印机的分辨率)来描述图像,因而这个描述不需要经过任何修改即可在其他的PostScript打印机上进行打印。PostScript作为一种语言,自己有语法和格式规范,这种语言描述的页面由PostScript文件表示。PostScript文件本身只是用PostScript语言描述了所要显示或者打印的文本及图像有哪些特征、参数,在显示或者打印PostScript文件的时候,再由PostScript解释器解释并打印或者显示。PostScript不仅与设备无关,而且与操作系统无关。无论是Windows操作系统,还是Unix操作系统,都可以阅读和打印PostScript文件。由于PostScript文件是以文本形式存储,因而文件比较小,适合在Internet上传输。(1982年12月,John Warnock和Charles Geschke离开施乐公司创建Adobe,以开发和销售PostScript为生。后来成就了Adobe“帝国”。)——译者注

[10] 完整的书名是Lions’ Commentary on UNIX 6th Edition, with Source Code,据说有中文版,暂时没找到。——译者注

[11]Andrew S.Tanenbaum获得过美国麻省理工学院的理学学士学位和加利福尼亚大学伯克利分校的哲学博士学位,目前是荷兰阿姆斯特丹Vrije大学的计算机科学系的教授。还出版过《分布式操作系统》(Distributed Operating Systems)、《分布式系统:原理与范型》(Distributed Systems: Principles and Paradigms)、《计算机组成:结构化方法》(Structured Computer Organization)、《现代操作系统》(Modern Operating Systems)和《操作系统:设计及实现》(Operating Systems: Design and Implementation)等计算机专著。其中,《操作系统:设计及实现》一书和书中示例的Minix操作系统(也是Tanenbaum领导开发的一个免费用于教学目的的类Unix操作系统)给予了林纳斯·托瓦兹创造Linux操作系统内核的灵感。在他的自传《Just For Fun》(英文意为“只是为了有趣”)中,托瓦兹把这本书描述为“引领我到达新高度的一本书籍”。Tanenbaum是ACM会员,IEEE资深会员,荷兰皇家艺术和科学学院院士,获得过1994年度ACM KarlV.Karlstrom杰出教育家奖。根据Pearson官方网站公布的信息(http://www.pearsonhighered.com/tanenbaum/),Computer Networks, Fifh Edition将于2010年10月出版。

[12]最早的Unix编程专著Advanced UNIX Programming(Addison-Wesley,1985)一书的作者,该书第1版出版19年后,作者推出了“升级版”——第2版,在自己的网站里(http://basepath.com/aup/),作者戏言:“说升级也许有点不恰当了。新版的篇幅达到750页,而旧版中差不多只有20段话没有改过,上一版介绍了70个系统调用,而这一版则达到了300个。”

[13]Brian W.Kernighan,贝尔实验室计算科学研究中心高级研究人员,著名的计算机科学家。他参加了UNIX系统、C语言、AWK语言和许多其他系统的开发,同时出版了许多在计算机领域具有影响的著作,包括The Elements of Programming Style、The Practice of Programming、The UNIX Programming Environment、The AWK Language、Software Tools等。

[14]从康涅狄格州纽黑文到罗得岛州府普罗维登斯大约105英里,约168公里。——译者注

原文链接:http://www.boxesandarrows.com/view/content-strategy-the

作者:Rachel Lovinger,美国最大的互动广告公司Razorfish(睿域营销咨询公司)的内容策略领导人。

不知道什么是“内容策略”?这很正常。我在公司的头衔里就有这个词组。每当有人问起我靠什么过活时,我心里都十分纠结。许多人对这个词组没有什么概念,但在谈话间,我发现多数人对它的理解都是错误的。这些人觉得“内容策略”就是写文案的意思。虽然不能说完全不着边,但总归还是没说到点子上。

近来,我经常使用一个类比,我认为内容策略之于写稿,就像信息架构之于设计。我为自已能想到这个类比感到很满意,毕竟在6年前,当Web发展的第一波开始退潮时,“信息架构”到底是什么意思也没有几个人知道。

当前的问题在于,必须想办法向不理解内容策略的人解释清楚:内容策略的主要目标是使用文字和数据,创造出没有歧义的内容,从而为有意义的交互体验提供支持。为此,我们必须成为善于跟形形色色的人有效沟通的专家。

然而,到底是什么原因导致了我们的工作那么难于跟别人解释呢?

问题或许在于,内容是无处不在的,所以任何人都认为自己很明白。只要你能读会写,就可以制造内容,对吧?(近6000个博客可以证明这一点。)但事实上,随着交互体验变得日益复杂,内容的本质也变得越来越复杂了。这时候,只从表面上来理解内容已经远远不够了。数字时代的内容策略专家必须成为数据方面的哲学家,努力探寻有关内容的抽象理论,而这一切就要从回答“什么是内容”这个问题开始。

一切皆内容

在我们为一家国际娱乐杂志的网站开发复杂的元数据系统时,我的同事也是好朋友Chris Sizemore说:“一切皆内容。”我还比较认同这个观点。

一切皆内容吗?设计是吗?是。结构呢?也是。元数据呢?当然也是了。你可能觉得对这句话还应该有更深刻的解释。好吧,那就只能说:“准确地讲,一切皆内容。”

你可能会问,在崇尚视觉效果的Web设计领域,着意关注内容的需求源自何处呢?随着网站功能的日益丰富,Web用户的品味也越来越高。要想吸引人,你的站点就必须提供到位的交互体验,以及更多配套的内容。但简单地增加内容是不行的,你必须让内容有的放矢、言之有物,而且还要有意义。

提到决定事物是否有意义的因素,我可以罗列出一大串,但就Web应用而言,我认为最主要的一个因素是联系。Z文章与点击的主题有关系吗?给我看看。B图片与我已经见过的一样吗?拜托,我可不想再看到同一张图片了!诸如此类微妙、动态而又复杂的关系,都需要找到一种计算机能够遵照执行的方式精确地表达出来。那我们就举个看起来似乎很直观的例子,比如说“相同”:你怎么确定两段内容是相同的?

你可能会说任何数据记录都是唯一的,因此是否相同一看便知。但这对于找出两段无论从哪方面说都完全一样的文字之间的关系却毫无帮助。噢,大概在内存中的字节相同可以说明两段内容相同罢。那么一篇文章与它的翻译版呢?一张图片与它的缩放版呢?从读者角度说,它们是相同的,只不过有一张小一些。还是那张图片,它与它的裁切版相同吗?

问到这,“相同意味着什么?”这个命题合乎有点像推理了。然而,在构建CMS(内容管理系统)的时候,这个问题却有着非常实际的含义。你怎样取得一篇文章及其翻译版,会对文章的编排、发表以及最终在站点上使用的方式造成巨大差异。而一张图片与它的缩放版、裁切版在CMS中保存的方式,则很可能会对呈现及访问它们产生意想不到的影响。

临界量

如果你只想展示非常短的一条信息,那(也许)可以随便把它一放,然后让用户自己去理解就行了。

图1 极其简单的网站用不着IA或内容策略

随着要展示的信息不断增多,用不了多久,就需要运用某些结构来组织这些信息,以方便用户找到它们。而这正是信息架构要解决的问题,即通过应用组织原则和视觉提示,让用户一打开站点就能迅速定位目标,而不必多费脑筋。如果碰巧赶上信息架构师(IA,Information Architect)对文字有兴趣,那么他可能会仔细地考虑按钮上的文本到底用什么语言最有利于传达信息。如果信息架构师没有这份心思或者经验,那么这时候就可以轮到内容策略专家(CS,Content Strategist)上场了。CS此时也要与IA密切协作,以确保站点的组织井然有序,同时还要确保相应的内容各就各位。

图2 复杂一些的站点就需要组织了

在设计和构建内容量极大的网站时,我们发现单靠手工组织这些内容是不现实的。在这种情况下,就需要用到自动化的、复杂的算法来解放人类了。为此,内容中必须包含机器能够识别的固有信息,例如通过搜索、浏览和相关链接来维系数据驱动的应用。内容策略专家的责任就是专注于怎么才能让内容有意义,同时也让站点的设计最恰当地利用内容。

实战演练

在经过了一番哲学思辨之后,我们终于搞清楚了谁要为内容负责了。那么,到底怎样才能让内容有意义呢?

为了让人们感觉内容与他们有关,必须选择那些对实现沟通目标效果最好的词汇和句子结构。至于表达方式,应该在深刻理解内容创作者的意图和内容消费者的需求的基础上来确定。为此,可以借助类似于编辑指南的手册来提供指导,或者提供一些让别人能够按照相同表达方式组织内容和消息的示例。

为了让机器更好地处理内容,需要将内容结构化并定义标准的元素,从而方便内容的使用和重用。需要对内容分门别类,为不同类别添加相应的元数据,以便于识别。需要在内容之间建立关联,使得它们的背景丰富,不显得单薄,同时也能支持各种复杂的功能。

为了保证创建内容的效率,需要评估和推荐一些解决方案,用于创建、增强、组织和使用内容,包括内容管理系统、元数据相关的工具、搜索引擎及方便的导航应用程序。需要创立业务规则及工作流,进一步优化这些工具和系统的使用。

为了保证内容面面俱到,需要确定站点的内容需求,清查已有的内容,发现缺口,落实新增内容的补给渠道,并控制将这些内容融合到产品中去的整个过程。在既定的背景和参考资料支持下,可能还要编写标签、概述,甚至更长的内容。

在做以上这些事并创造相应成果的过程中,不要因为过时的哲学问题而让实际上简单的问题复杂化。试试这个脑筋急转弯:“具备什么样品质的内容才能历经三个月都不会磨灭其价值,而又是什么样的品质会导致内容甫一问世就面临过时的危险?”(提示:没有唯一的答案。)

内容策略专家的策略

如果你是一名内容策略专家。

  • 问自己或同事一些有关内容的难题(例如:“内容是什么?”“什么因素会提升内容的价值?”)。
  • 头脑风暴,探讨怎样生成更有意义的内容,如何确定质量好与坏的标准。落实到一个投入/产出分析模型上。
  • 比较不同的内容模型并确定各自适合的用途。
  • 关注一些新出现的能够有效解决内容问题的工具。创造性地使用这些工具,包括发现新用途和新用法,然后把这些创意告诉工具的开发人员,以促进工具改进。

如果你与内容策略专家合作。

  • 花点时间认真严肃地思考一下内容。在讨论内容问题,而内容又似乎不是问题的直接诱因时,请保持几分耐心——有时候,只有这种态度才能拿出理想的内容方案。
  • 在开始规划站点之初,就在项目中考虑内容。千万不要在站点已经构建和设计完成后,才意识到需要找些内容来填充页面。

如果你没有与内容策略专家协作,但有这个意愿。

  • 向组织的负责人说明内容策略专家扮演的角色,以及他们为什么可以节省时间和精力,可以帮助避免问题,可以提升最终产品的品质。在项目收尾时,可以举出一些能够说明“如果早点想到这一点就好了”的例子。根据这些与内容相关的例子,你会发现自己可能成功了一半了。
  • 如果不行,再了解组织中哪个人对内容理论更感兴趣,鼓励他们多做一些相关的研究。过一段时间后,再给他们摆事实,讲道理,然后你的心愿就可以达成 了。

内容策略并没有一个放之四海而皆准的定义,不同的人对它的理解也不怎么一致,但这可不是对内容策略视而不见的理由。只有深刻认识到内容的重要性,像个哲学家一样思考问题,你才能够做到随机应变。

出处:RegExLib.com Regular Expression Cheat Sheet (.NET)

元字符 说明
^ 匹配字符串的开始位置
$ 匹配字符串的结束位置
. 匹配任意单个字符(换行符 \n 除外)
| 交替
{…} 指定要限定的数量
[...] 指定要匹配的字符集
(…) 对表达式进行逻辑分组
* 匹配零或多个前面的表达式
+ 匹配一或多个前面的表达式
? 匹配零或一个前面的表达式
\ 放在上面任何一个字符之前,表示匹配该字符本身。放在其他特殊字符后面,表示字符转义(见下面)
字符转义 说明
原始字符 除 . $ ^ { [ ( | ) ] } * + ? \ 之外的字符均匹配自身
\a 匹配铃声(闹铃)\u0007
\b 在[]中匹配一个空格 \u0008,在其他情况下匹配字边界(位于 \w 和 \W 字符之间)
\t 匹配制表符 \u0009
\r 匹制回车符 \u000D
\v 匹配垂直制表符 \u000B
\f 匹配换页符 \u000C
\n 匹配换行符 \u000A
\e 匹配退出键(符) \u001B
\040 匹配以八进制表示的 ASCII 字符(最多三位数);在没有前导零的情况下,如果只有一位数字或者相应数字与某个捕获组的编号对应,那就是反向引用(backreference)。字符 \040 表示一个空格。
\x20 匹配以十六进制表示的 ASCII 字符(两位数)
\cC 匹配 ASCII 控制符,例如 \cC 匹配 Ctrl+C
\u0020 匹配以十六进制表示的 Unicode 字符
\* 反斜杠后面如果不是一个可转义的字符,则匹配该字符本身。例如,\* 就相当于\x2A
字符类 说明
. 匹配除 \n 之外的任意字符。
[aeiou] 匹配特定字符集中包含的任意一个字符
[^aeiou] 匹配特定字符集中不包含的任意一个字符
[0-9a-fA-F] 连字符(-)用来指定连续的字符范围
\p{name} 匹配由{name}指定的命名字符类中的任意字符
\P{name} 匹配不包含在{name}指定的组或块范围中的文本
\w 匹配英文数字字母字符,在指定兼容ECMAScript的情况下,等价于[a-zA-Z0-9]
\W 匹配非英文数字字母字符,在指定兼容ECMAScript的情况下,等价于[^a-zA-Z0-9]
\s 匹配任意空白字符,在指定兼容ECMAScript的情况下,等价于[\f\n\r\t\v]
\S 匹配任意非空白字符,在指定兼容ECMAScript的情况下,等价于[^\f\n\r\t\v]
\d 匹配数字字符,在指定兼容ECMAScript的情况下,等价于[0-9]
\D 匹配非数字字符,在指定兼容ECMAScript的情况下,等价于[^0-9]

本想先找本算法和数据结构的书参考一下,但转念一想:不如考考自己的总结和逻辑表达能力。

loop、iterate、traversal和recursion这几个词是计算机技术书中经常会出现的几个词汇。众所周知,这几个词分别翻译为:循环、迭代、遍历和递归。乍一看,这几个词好像都与重复(repeat)有关,但有的又好像不完全是重复的意思。那么这几个词到底各是什么含义,有什么区别和联系呢?下面就试着解释一下。

  • 循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while语句。
  • 迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
  • 遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
  • 递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的斐波纳契数列。

有了以上定义,这几个概念之间的区别其实就比较清楚了。至于它们之间的联系,严格来讲,它们似乎都属于算法的范畴。换句话说,它们只不过是解决问题的不同手段和方式,而本质上则都是计算机编程中达成特定目标的途径。