先借了同事的书来看看,感觉各方面都不错,除了有些贵;
打算入手一本,网上买能便宜些。
阅读的过程中发现一些小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。 |
附言: |
|
阅读(905) | 评论(0) | 转发(0) |