Chinaunix首页 | 论坛 | 博客
  • 博客访问: 510765
  • 博文数量: 130
  • 博客积分: 10060
  • 博客等级: 上将
  • 技术积分: 1720
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-21 12:35
文章分类

全部博文(130)

文章存档

2011年(2)

2010年(9)

2009年(41)

2008年(78)

我的朋友

分类:

2009-07-07 15:52:02

先借了同事的书来看看,感觉各方面都不错,除了有些贵;

打算入手一本,网上买能便宜些。

阅读的过程中发现一些小bug,在china-pub上提交了:



勘误人:  hshqcn 时间:  2009-07-18 09:10:18
页码:  205 行:  -8
错误:  下一个头块... 更正:  next header block,是忠实于原文的,但是意思不对吧,应该表达出“按递增顺序的下一个”这样的意思。
附言:  


勘误人:  hshqcn 时间:  2009-07-18 09:00:18
页码:  204 行:  -4
错误:  作为本章的结束,... 更正:  不通顺
附言:  


勘误人:  hshqcn 时间:  2009-07-17 22:43:26
页码:  203 行:  +16
错误:  全球唯一的引用 更正:  globally unique reference,
这个函数还真厉害,竟然是全球唯一,不过为什么我开了两个终端,多次调用make_ref的结果序列一摸一样呢?就好像用同样的种子设置同一个随机函数。
附言:  


勘误人:  hshqcn 时间:  2009-07-17 22:40:24
页码:  203 行:  +13
错误:  在你回应第二条消息的时候,实际上只是回应了第一条消息的复制品。 更正:  有歧义,到底是第二次回应的是第一条请求消息的复制品,还是说,第二次回应本身是第一次回应的复制品?根据后面的示例代码以及英文来看,是后一种情况,服务器的应答重复了。
附言:  


勘误人:  hshqcn 时间:  2009-07-17 14:18:13
页码:  199 行:  +8
错误:  inet:setopts(Sock, ... 更正:  inet:setopts(Socket, ...
附言:  


勘误人:  hshqcn 时间:  2009-07-17 14:11:00
页码:  199 行:  +22
错误:  1. 这里Ni和Ki表示的都是从0~255的整型数。
2. IPV6
更正:  1.1 从 ... 到 ... ?
1.2 Ki应该是0~65535
2. IPv6,大小写含以不同吧,还有上一行的IPv4
附言:  


勘误人:  hshqcn 时间:  2009-07-17 14:07:45
页码:  199 行:  +21
错误:  {N1,N2,N3,N3} 更正:  {N1,N2,N3,N4}
附言:  


勘误人:  hshqcn 时间:  2009-07-17 14:04:20
页码:  199 行:  +20
错误:  另外一段 更正:  另外一端
附言:  


勘误人:  hshqcn 时间:  2009-07-17 13:48:45
页码:  199 行:  +16
错误:  服务 更正:  服务器
附言:  


勘误人:  hshqcn 时间:  2009-07-17 13:44:27
页码:  198 行:  -5
错误:  一个消息。在控制进程发过一个消息后, 更正:  一条消息。在控制进程收到一条消息后,
附言:  be sent


勘误人:  hshqcn 时间:  2009-07-17 13:41:40
页码:  198 行:  -8
错误:  这在必须同时等待多个套接字的数据的程序时,就显得无能无力了。 更正:  语句不通,语法问题。
附言:  


勘误人:  hshqcn 时间:  2009-07-17 13:39:29
页码:  198 行:  +15
错误:  调用recv函数时客户端会被阻塞。 更正:  The client will block until the server has called recv.
附言:  


勘误人:  hshqcn 时间:  2009-07-17 13:36:58
页码:  198 行:  +10
错误:  异步服务器 更正:  nonblocking server这里作异步讲不妥吧。
附言:  还有下一行。


勘误人:  hshqcn 时间:  2009-07-17 13:24:55
页码:  196 行:  +8
错误:  只要终止已经启动的服务器进程或者服务器进程组就可以了。 更正:  只要终止启动服务器或服务器组的进程就可以了。
附言:  just kill the process that started
the server or servers.


勘误人:  hshqcn 时间:  2009-07-17 13:21:11
页码:  196 行:  +3
错误:  seq_loop(listen) 更正:  seq_loop(Listen)
附言:  


勘误人:  hshqcn 时间:  2009-07-17 13:00:43
页码:  195 行:  -11
错误:  不是“上一节”的例子。 更正:  是“original”,我说怎么跟上一节的例子不同涅。
附言:  


勘误人:  hshqcn 时间:  2009-07-17 11:56:53
页码:  193 行:  +3
错误:  第二句,好像有语病,意思也不对。 更正:  重点要突出是驱动重整数据分片为正确的长度。
附言:  


勘误人:  hshqcn 时间:  2009-07-17 11:13:59
页码:  192 行:  -4
错误:  不应该是对数据做“转换”。 更正:  应该是C/S双方做“约定”,convention,非conversion。
附言:  


勘误人:  hshqcn 时间:  2009-07-17 11:11:45
页码:  192 行:  -5
错误:  说socket字节流是“无差异”的,费解。 更正:  undifferentiated,看意思应该是“无格式、平坦的、原始、未处理”之意。
附言:  


勘误人:  hshqcn 时间:  2009-07-17 11:02:33
页码:  190 行:  +21
错误:  颠倒因果了。 更正:  是先设置了消息格式为binary,然后才收到二进制格式的消息。
附言:  This is because we opened the socket in binary
mode.


勘误人:  hshqcn 时间:  2009-07-17 11:00:55
页码:  190 行:  +19
错误:  这段的最后一句,说程序收到消息转给套接字的控制进程。 更正:  消息流向表述的不准确,原文说控制进程收到消息,程序以消息序列的形式接收。
附言:  本章后面也提到套接字把消息转给其控制进程。


勘误人:  hshqcn 时间:  2009-07-16 23:03:42
页码:  186 行:  +8
错误:  整段有3个错误吧。 更正:  不想写了,可对照附言中的英文原文。
附言:  The filelib module has a small number of routines that can save
us some work. For example, filelib:ensure_dir(Name) ensures that all
parent directories for the given file or directory name Name exist,
trying to create them if necessary.


勘误人:  hshqcn 时间:  2009-07-16 22:59:01
页码:  184 行:  -8
错误:  你可以在一个操作中使用mode字段来设置多个文件属性,而使用access的话操作则更简单。 更正:  你可以在一个操作中使用mode字段来设置文件的多个属性,而更简单些的操作可以使用access。
附言:  You can use mode to set
several file attributes in a single operation, whereas you can use access
for simpler operations.


勘误人:  hshqcn 时间:  2009-07-16 22:49:23
页码:  181 行:  -1
错误:  下面是urls2htmlFile的代码: 更正:  下面是urls2html的代码:
附言:  虽然英文也是urls2htmlFile,但看位置明显是urls2html。


勘误人:  hshqcn 时间:  2009-07-16 22:48:03
页码:  183 行:  +22
错误:  写入一串新的字符串, 更正:  写入字符串“new”
附言:  new是上面程序中的字符串值。writes the characters new。


勘误人:  hshqcn 时间:  2009-07-16 22:30:13
页码:  182 行:  +12
错误:  它将URL列表精确地转换成二进制数据: 更正:  它从二进制数据中提取URL:
附言:  to extract
the URLs from a binary:


勘误人:  hshqcn 时间:  2009-07-16 22:28:15
页码:  182 行:  +9
错误:  扔到一个输出函数中去。 更正:  扔到一个输出例程中去。
附言:  routine,不是function。


勘误人:  hshqcn 时间:  2009-07-16 22:26:37
页码:  181 行:  -13
错误:  然后创建一个HTML文件,这个HTML文件所在的URL可以看做一个可以点击的链接。 更正:  创建一个HTML文件,其中的URL是可点击的链接。
附言:  and creates an HTML file, where the URLs are presented
as clickable links.


勘误人:  hshqcn 时间:  2009-07-16 22:22:34
页码:  181 行:  +17
错误:  file:write_file(File, IO)把数据写入IO,这里的IO指的是文件File的IO列表。 更正:  file:write_file(File, IO)把IO中的数据写入文件,IO是个IO列表。
附言:  这句错的也太离谱了。
file:write_file(File, IO)
writes the data in IO, which is an IO list to File.


勘误人:  hshqcn 时间:  2009-07-16 08:43:46
页码:  177 行:  +11
错误:  它的访问顺序从1开始 更正:  它的访问顺序从0开始
附言:  刚才写错了。
前面的例子证明是从0开始编号。


勘误人:  hshqcn 时间:  2009-07-16 08:43:07
页码:  177 行:  +11
错误:  它的访问顺序从1开始 更正:  它的访问顺序从1开始
附言:  前面的例子证明是从0开始编号


勘误人:  hshqcn 时间:  2009-07-16 08:36:46
页码:  175 行:  -3
错误:  因此file.erl的源代码应该位于下面这个目录之中:
/usr/local/lib/erlang/lib/kernel-2.11.2/src/file.erl
更正:  目录->文件
附言:  


勘误人:  hshqcn 时间:  2009-07-16 00:28:17
页码:  167 行:  +12
错误:  文件描述符In可以用来发送数据到标准输入,文件描述符Out则可以用来接收通过标准输出发送的数据。 更正:  数据流向搞反了。
附言:  {fd, In, Out}是Erlang进程用的,而且之前一句也表明了行动主体是Erlang进程,而非外部程序进程。再看原文: The file descriptor In can be used for standard input, and the file descriptor Out can be used for
standard output.3
再看脚注中给的链接中的代码,不用全部看明白,只看writeable(OutFile)测试以及测试失败路径下的注释:
update(File, In, Out) ->
InFile = File ++ In,
OutFile = File ++ Out,
case is_file(OutFile) of
true ->
case writeable(OutFile) of
true ->
outofdate(InFile, OutFile);
false ->
%% can't write so we can't update
false
end;
false ->
%% doesn't exist
true
end.


勘误人:  hshqcn 时间:  2009-07-15 22:54:53
页码:  161 行:  -13
错误:  不种语言之间 更正:  各种语言之间
附言:  


勘误人:  hshqcn 时间:  2009-07-15 22:47:22
页码:  160 行:  +5
错误:  所有向外部程序发送的消息的目标地址必须是端口连接进程的PID, 更正:  所有向外部程序发送的消息的必须用端口连接进程的PID标记,
附言:  这句很奇怪,因为端口连接进程只算是封装,如果它返回端口给外部,也可以通过端口直接跟外部程序通信;看原文:all messages to the external program must
be tagged with the PID of the connected process,


勘误人:  hshqcn 时间:  2009-07-15 22:32:22
页码:  161 行:  +6
错误:  IO列表 更正:  这 不是错误,但是个问题,IoList第一次出现在59页,但作为list_to_binary的参数出现,所以其解释未引起重视;看到这里就懵了,没印 象,看英文pdf索引找到237页,正确,译本索引指向英文230页,实际却在229页,这是第二个问题了,原问题是,应该在59页加个脚注。
附言:  


勘误人:  hshqcn 时间:  2009-07-15 22:22:10
页码:  161 行:  +8
错误:  把端口连接进程的PID从Pid1改为PidC。 更正:  把端口连接进程的PID从PidC改为Pid1。
附言:  Change the PID of the connected process from PidC to Pid1.


勘误人:  hshqcn 时间:  2009-07-15 14:19:48
页码:  171 行:  +5
错误:  则完全取决具体应用程序本身。 更正:  则完全取决于具体应用程序本身。
附言:  


勘误人:  hshqcn 时间:  2009-07-15 14:18:54
页码:  162 行:  +15
错误:  0,2,77 更正:  0,1,77
附言:  


勘误人:  hshqcn 时间:  2009-07-14 09:22:16
页码:  156 行:  -18
错误:  self() ! {C, ... 更正:  self() ! {chan, C, ...
附言:  协议不对,英文原文也有错误,参照可运行的代码修改。


勘误人:  hshqcn 时间:  2009-07-14 09:16:44
页码:  150 行:  +15
错误:  “这就意味着原本...”这句翻译的很别扭。 更正:  原文没有“原本”的意思。
附言:  


勘误人:  hshqcn 时间:  2009-07-13 13:38:52
页码:  145 行:  0
错误:  从该页开始,直到150页,示例代码中通过MM收发的消息格式不对,不符合lib_chan的协议,只能用于说明程序如何通过消息交互。 更正:  参考151页开始的聊天程序代码汇总,这里的代码是可运行的。
附言:  不是译文问题,英文原文如此。


勘误人:  hshqcn 时间:  2009-07-13 08:48:53
页码:  146 行:  -18
错误:  {Connected,MM} 更正:  {connected,MM}
附言:  


勘误人:  hshqcn 时间:  2009-07-13 08:47:35
页码:  144 行:  -8
错误:  这个函数尝试与本地主机的端口2223(...)。 更正:  这个函数尝试与本地主机的端口2223(...)连接。
附言:  


勘误人:  hshqcn 时间:  2009-07-12 08:18:44
页码:  139 行:  -13
错误:  执行M!close。 更正:  执行MM!close。
附言:  


勘误人:  hshqcn 时间:  2009-07-11 02:12:47
页码:  138 行:  +4
错误:  启动一个服务。 更正:  启动一个服务器。
附言:  


勘误人:  hshqcn 时间:  2009-07-11 01:33:21
页码:  401 行:  +16
错误:  异步的向Node... 更正:  异步的向Nodes...
附言:  


勘误人:  hshqcn 时间:  2009-07-10 13:19:41
页码:  133 行:  +3
错误:  myerl.example.com是直接对应本地网络,你可以在本地的/etc/hosts里加入想对应的域名入口点。 更正:  myerl.example.com位于本地网络中,是通过向/etc/hosts里加入相对应的域名入口点在本地解析的。
附言:  “是直接对应本地网络”不通顺,“想”应是“相”。


勘误人:  hshqcn 时间:  2009-07-09 09:00:14
页码:  120 行:  +14
错误:  trap_exits 更正:  trap_exit?
附言:  英文原文也是,原作者笔误?存疑。


勘误人:  hshqcn 时间:  2009-07-09 08:56:31
页码:  119 行:  0
错误:  它们之间的依赖关系表9-1。 更正:  它们之间的依赖关系见表9-1。
附言:  位置在表格9-1的上一行


勘误人:  hshqcn 时间:  2009-07-09 08:53:32
页码:  117 行:  +13
错误:  如果Pid由于某种原因消亡(其原因在变量Why中),那么这个函数就会执行函数Fun(Why)。 更正:  如果Pid由于某种原因消亡(其原因在变量Why中),就会执行函数Fun(Why)。
附言:  If Pid dies with reason, Why and then Fun(Why) is evaluated.
看上下文,“这个函数”指on_exit,但它是在主进程中执行的,而Fun是在另一进程被调用,所以不是on_exit执行Fun。


勘误人:  hshqcn 时间:  2009-07-09 08:48:00
页码:  117 行:  +12
错误:  若想执行一些动作。 更正:  若想执行一些动作,
附言:  


勘误人:  hshqcn 时间:  2009-07-09 08:47:25
页码:  114 行:  +10
错误:  示例程序area_server_final.erl:
最后4行代码错位了。
更正:  下版修正吧。
附言:  


勘误人:  hshqcn 时间:  2009-07-07 18:07:18
页码:  98 行:  +1
错误:  1.关于开发 更正:  1.关于并发
附言:  


勘误人:  hshqcn 时间:  2009-07-07 15:41:21
页码:  95 行:  +4
错误:  glurk.er 更正:  glurk.erl
附言:  


勘误人:  hshqcn 时间:  2009-07-07 15:12:13
页码:  92 行:  -9
错误:  它可以被所有其他的makefile, 更正:  它可以被所有其他的makefile包含,
附言:  页号计数不包括脚注。
原文:included by all makefiles。


勘误人:  hshqcn 时间:  2009-07-06 23:03:46
页码:  73 行:  +15
错误:  在字符串和使用括号的原子中, 更正:  在字符串和单引号括起来的原子中,
附言:  Within strings and quoted atoms,


勘误人:  hshqcn 时间:  2009-07-06 23:01:12
页码:  70 行:  +4
错误:  Sometag 更正:  SomeTag
附言:  


勘误人:  hshqcn 时间:  2009-07-06 23:00:37
页码:  69 行:  -18
错误:  因为a/2并没有从模块中导出。 更正:  因为a/1并没有从模块中导出。
附言:  


勘误人:  hshqcn 时间:  2009-07-06 16:03:30
页码:  67 行:  +17
错误:  分为3行 更正:  分为超过3行
附言:  模式部分的代码是5行,原文是“spreading over three lines”,over应该是修饰three的介词。


勘误人:  hshqcn 时间:  2009-07-06 15:53:42
页码:  66 行:  -3
错误:  缩减少 更正:  缩减
附言:  前一个页数写错了


勘误人:  hshqcn 时间:  2009-07-06 15:52:41
页码:  62 行:  -3
错误:  缩减少 更正:  缩减
附言:  


勘误人:  hshqcn 时间:  2009-07-06 14:59:11
页码:  62 行:  -3
错误:  MEPG 更正:  MPEG
附言:  还有P63 +1。


勘误人:  hshqcn 时间:  2009-07-05 20:00:53
页码:  44 行:  -1
错误:  代码中的英文注释 更正:  与系统无关的输出最好也翻译了。
附言:  包括但不限于P9、P27、P44、P45、P46等页的代码。


勘误人:  hshqcn 时间:  2009-07-05 19:20:02
页码:  45 行:  -4
错误:  并将value字段的值修改为done。 更正:  并将status字段的值修改为done。
附言:  页号计数不包括脚注。


勘误人:  hshqcn 时间:  2009-07-05 11:10:13
页码:  33 行:  +5
错误:  当X为奇数则返回true。 更正:  当X为偶数则返回true。
附言:  

阅读(560) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~