27 六月, 2006

ISBN : 国际标准书号

摘自:维基百科

ISBN号码由10位数字组成,并以三条线段加以分割,每组数字都有不同的含义。

第一组:区位代码[1] 0,1:英文 2:法文 3:德文 4:日文 5:俄文 7:中文

第二组:出版社代码 [2]

由各国的ISBN码分配中心,分给各个出版社。

第三组:书序码

该出版物代码,由出版社具体给出。

第四组:计算机校验码

只有一位,从0到10,10由X代替。

  1. 假设某ISBN号码前11位是:7-309-04547
  2. 计算加权和S:S=7×10+3×9+0×8+9×7+0×6+4×5+5×4+4×3+7×2 = 226;
  3. 计算S÷11的余数M:M = 226 mod 11 = 6;
  4. 计算11-M的差N:N = 11 − 6 = 5
  • 如果N=10,校验码是字母“X”;
  • 如果N=11,校验码是数字“0”;
  • 如果N为其他数字,校验码是数字N。

所以,本书的校验码是5

EAN:European Article Number(欧洲商品号),ISBN中心于2004年决定在ISBN的基础上再添加一组三位数字在最前,即將現有的10位書號前面加上"978"及重新計算稽核號,以轉換為新的13位格式 。该计划将于2007年实施。

中国大陆地区详细出版社名单见中国出版社ISBN代码表

13位ISBN的最后一位校验位的加权算法与10位ISBN的算法不同。具体算法是:用1分别乘ISBN的前12位中的奇数位,用3乘以偶数位,成绩之和以10为模,用10减去此模,即可得到校验位的值,其值范围应该为0-9

  1. 假设某13位ISBN号码前15位(包含‘-’符号)是:987-7-309-04547
  2. 位置为123-4-567-89(10)(11)(12)
  3. 计算加权和S:S=9×1+8×3+7×1+7×3+3×1+0×3+9×1+0×3+4×1+5×3+4×1+7×3 = 117;
  4. 计算S÷10的余数M:M = 117 mod 10 = 7;
  5. 计算10-M的差N:N = 10 − 7 = 3
  6. 所以,本书的13位ISBN的校验码是3


24 六月, 2006

python: locale - setlocale

错误:"locale.Error : unsupported locale setting"

locale.setlocale,最终调用本地OS上的setlocale的c/c++库。

如果本地OS不支持locale,或者本地OS的locale格式不同于locale模块的帮助文档中的描述,调用setlocale都会引发以上异常

以winxp简体中文,python 2.4为例,locale.setlocale(0,'')会返回locale字符串"Chinese_People's Republic of China.936",而不是locale.getdefaultlocale返回的"zh_CN.cp936",更多设置,需参考VC++的setlocale方法。而在中文Linux上,同样的方法,会返回标准的"xx_XX.xxx"格式字符串,譬如"zh_CN.GB18030",参考POSIX的setlocale man页。

严格说,这不算是bug。不过,为了提高Python程序的可移植性,保证这门语言的平台无关特性,最好能在将来的版本中解决这个问题


14 六月, 2006

MSN Spaces,易变的URL

echo的Space为例,从原先的http://spaces.msn.com/limbosun 改为现在的http://limbosun.spaces.msn.com

参考:MSN Spaces 6月5日将强制改变URL地址

原先的url,包括更老的“http://spaces.msn.com/members/limbosun”暂时都还能使用

同步的,所有的RSS(feed)订阅地址也跟着改变,而RSS内发布的文章和照片的Link和GUID也随之更改。很多RSS订阅/浏览工具根据link/guid来判断文章的唯一性,针对MSN Spaces的这些变化,可能会引起一些处理上的错误。

似乎大家都不太重视GUID(rss2.0)这个属性,那么是不是可以将文章title+发布日期作为判断文章唯一性的标准呢?


8 六月, 2006

python: 元组(tuple)的标准定义

元组(tuple),作为python序列数据类型的一种,标准定义如下:

A tuple consists of a number of values separated by commas

某些文章(譬如《A Byte of Python》,《Dive Into Python》)的定义却是:(与列表(list)类似的)在圆括号中用逗号分割的数据类型。

其实,圆括号"()"只在tuple输出的时候使用,而不是元组数据定义所必须的。

temp = 1,2,3,4 等同于temp = (1,2,3,4)

这就可以理解对于一个字典数据dictA,我们为什么能够使用for key, val in dictA.items()这样的语句,因为它和for (key, val) in dictA.items()是一样的

只有在声明空元组的时候,圆括号才是必须的

emptyTuple=()

其它:

一个元素的元组:

temp = 1, 等同于 temp = (1,)


8 六月, 2006

pyton: The __del__ method is not a reliable cleanup mechanism

Python初学者的经典教程《A Byte of Python》,在讲述“Class and Object Variables”的时候,有一个Person Class的例子,其中包括__init__和__del__实现。

比较C++,__init__类似于constructor,而__del__类似于destructor。实际上,Python的实现机制和C++有很大区别,特别是对于__del__。

作者也在此文末尾,特地提醒到:“ The __del__ method is run when the object is no longer in use and there is no guarantee when that method will be run. If you want to explicitly do this, you just have to use the del statement which we have used in previous examples.”

意思是说,如果想保证__del__顺利执行,需要显式调用del函数。否则的话,python会在垃圾收集的时候释放这些对象占用的内存,那时候,很难保证全局域中的Class声明本身是否还可用。很有可能你会在程序退出的时候,发生类似异常“exceptions.AttributeError:"'NoneType' object has no attribute...”。"NoneType"就是因为类声明已经先于对象被释放了(be set to None)

所以说,“The __del__ method is not a reliable cleanup mechanism”。你可以通过添加另外的方法实现这部分功能,如果一定要使用__del__的话,请务必显式(explicit)调用del来释放对象。


7 六月, 2006

I服了U,连岳

乘法口诀表(修正稿)

彻底服了,game over了

转抄一下,免得明天就看不到连老的blog了

1、接上级通知,乘法口诀表局部近日修正如下:
2、8X1=8;
3、8X2=16;
4、8X3=24;
5、8X4=32;
6、8X5=40;
7、8X6=48;
8、8X7=56;
9、8X8=65;
10、8X9=72。


7 六月, 2006

明天终于可以早起了

为什么?

因为我有了新一代“欧西亚无线电操纵时间投影闹钟”!!!

从明天开始,在这个超级无敌小闹钟的帮助下,我天天早起,努力奋发,可以相信,不远的将来,我就可以带着我的爱钟到了德国法兰克福(听听,这个地名多high)或者英格兰拉格比市,去接收传说中的无线电时间同步信号。

这是正面,多cool:

alarm clock front

这是背面,请特别注意那个线圈,谁家的alarm clock有这个玩意?

alarm clock back

时间投影,因为亮度关系,做了点拙劣的ps,实际情形,大家可以展开想象:天还没亮,一行红亮红亮的代表当前时间的数字投射到床顶的雪白的天花板上,high就一个字,口水都要流下来了

alarm clock projection


6 六月, 2006

大日子新闻

一位逝去的华为青年胡新宇:天堂里不再有加班
偶能活到今天,真不容易啊,感谢党,感谢父母,感谢朋友们

连岳:大日子

国务院新闻办说中国从来没有控制互联网
google与gmail几天来也越来越不稳定
这一切都说明,6月5号就要到了。
看来今天真的是大日子,google.com真的不能用了,gmail也不行了,google.cn还可以,baidu.com却一直没问题。