2006年12月17日星期日

Feedburner的RSS广告简介

  Feed广告是Blog的一种盈利方式,和 Google AdSense for Feeds 一样,目前大多数Feed广告都不支持中文用户,目前我发现的支持中文Blog的Feed广告,只有 Feedburner Ad Networks ,我也申请使用了这个服务,下面我就介绍一下使用这个服务的一些经验。

  要申请加入Feedburner Ad Networks,必须要通过Feedburner来发布你的Feed,通常情况下,订阅数要超过500才有资格申请,申请后Feedburner会进行人工审核,审核通过后,你的Feed就加入了Feedburner Ad Networks并同时拥有Feedburner Networks的权限。

  目前Feedburner Ad Network使用的是CPM广告(每千人成本,Cost Per Impression,广告显示1000次所应付的费用),其CPM价格比通常的网站CPM价格要高很多,有的可以达到5-10美元/CPM,对于中文的Blog来讲,这种按显示次数给广告价的方式对于发布者来说是很合算的。

  由于Feedburner Ad Networks是由广告商来找Blogger发布广告的,就我个人经验来说,要想获得广告商的注意,加入某个 Feedburner Networks 是一个较好的选择,一般订阅人数过万的 Feedburner Networks 很容易引起广告商的注意,通常情况下广告商会对整个Feedburner Networks发布广告,这样,广告就会显示在个人的Feed上了。

Feedburner Ad Network

  FeedBurner的广告是需要经过先批复再显示的,如果你发觉某些广告价格过低,或者不适合在自己Blog上投放,也可以拒绝其发布,从这点看,FeedBurner给了广告双方都有一定的自由度。

  不过据我观察,Feed的这种广告所带来的收益并不算多,还不能和网站的Adsense相比,几千个订户的Feedburner的一个月广告,估计不会超过100美元。不过由于这种广告是按照显示次数计算而不是点击计算,并且和Adsense并不冲突,因此收入还是较为稳定,除非Feedburner无法访问

  Feedburner Networks除了在广告上有一定优势外,还有“合烧”Feed的功能,条件是你的Feed必须全都是Feedburner用户,并且都具有Feedburner Ad Networks的权限。这样,发布一个Network就可以将你的符合条件的Feed合烧在一起了,具体效果请参见我自己发布的合烧feed:http://feeds.feedburner.com/chinagfans 。

2006年12月16日星期六

使用Google Earth搜索圣诞礼物

  Google Earth又推出一个好玩的游戏,就是通过Google Earth来搜索圣诞礼物。是的,圣诞老人已经将宝物藏在Google Earth的某个角落,从12月12日到圣诞节前夕,会在圣诞老人的北极工作间上出现一条线索,如果你能找到答案并解决,你的Google Earth上就会出现一个圣诞礼物。每天,前一天的礼物都会自动暴露。

Google Earth圣诞礼物

  对这个游戏已经跃跃欲试了?好吧,那么现在就开始吧:

  第1步:下载最新版本的Google Earth,地址 http://earth.google.com/download-earth.html

  第2步:下载圣诞礼物专用的KML文件,地址 http://dev.keyhole.com/santa/2006/santa.kml

  请注意,你必须下载最新版本的Google Earth 4(PC 4.0.2416, Mac/Linux 4.0.2413)才能跟踪和看到圣诞老人的礼物。

  最后我提示一下,解谜其实相当简单,只要将问题中的一些关键词在Google里面搜索一下,就可轻松找到答案。不过我输入答案的时候,老是报网络错误,不知道是怎么回事。

  英文原文地址:http://earth.google.com/santa/William Long 翻译。

2006年12月15日星期五

Google专利搜索服务发布

  据CNETNews.com报道,本周三晚,Google正式发布了Google专利搜索服务,用户通过输入关键词、专利号、发明者和文件日期就可以搜索美国的专利产品。用户还可以浏览原始专利文件的扫描图像,并可以进行放大。Google的专利搜索涵盖了700万个专利文件。

  目前,Google的专利搜索只提供美国专利文件。做为一个搜索尝试,我们对于百度Google的Page Rank专利进行了一些搜索测试。

  首先,使用“YanHong Li”做为关键字搜索(注:不应搜索Li YanHong),第一条即搜索出“Hypertext document retrieval system and method”,效果不错。该专利的全部信息(专利号,日期,创作人,内容等)都按照一定格式列出来,还可以在线查看专利的具体内容,很方便。如下图所示。

Google专利搜索服务

  再次,使用“Lawrence Page”做为关键字搜索,搜索到的第一条是“Method for node ranking in a linked database”,里面也将专利的详细信息(专利号,日期,创作人,内容等)显示出来,如下图所示。

Google专利搜索服务

  总的来说,Google的专利搜索服务提供了一个简易的搜索美国专利的途径,可惜的是目前只有美国的专利,其他国家的专利还没有。

  Google专利搜索服务的地址是:http://www.google.com/patents

Firefox的Google工具栏中文版发布

  今天,收到Google发来的一个消息,说针对Firefox用户的Google工具栏中文(简体中文和繁体中文)3.0 Beta版已经发布了,于是我就开始下载试用一个看看。

  Firefox版本的Google工具栏下载地址参见Google工具栏网站,我访问的时候,不知道什么原因,点“同意并安装”之后没有任何反应,也没有出现拦截了安装的消息,卸载原先的2.0版本后再安装,还是没有反应,看来不是我本地FireFox环境有问题,就是安装页面有问题,试了一下老版本的安装页面,可以安装。

  没办法,我只好查看源文件,找到了3.0版Toolbar的安装文件地址,直接放到地址栏,终于可以安装了。

Firefox的Google工具栏

  安装还算顺利,最后出现了安装结束的界面,界面默认的搜索引擎是“中国(.cn)”的地址,不过我还是喜欢使用.com的地址。大致看了一下设置界面,和IE版本的工具栏4.0几乎一模一样,可惜发布的时间比IE版本的工具栏慢了好几个月。

Firefox的Google工具栏

  安装后我发现一个有趣的现象,因为我在IE中也安装有Google工具栏,我发现FireFox的这个Google工具栏会自动将我在IE里的一些设置复制过来,比如下面的图标中,那个百度搜索的图标是我在IE里单独设置的,但是FireFox没有设置却也自动有了这个图标。

Firefox的Google工具栏

  由于其全部的功能和IE版本的几乎完全一样,而IE版本的Google工具栏我以前介绍了很多,因此这里我就不再罗嗦介绍了,关于详细的Google工具栏技巧文章,有兴趣的朋友可以参考一下我的Google工具栏的这个栏目。

Firefox的Google工具栏

  下面是Google公关人员发来的关于此事的新闻稿,该文章不代表本Blog的观点和看法,供参考。

针对Firefox的Google工具栏3.0中文版发布了

  今天,Google(谷歌)发布了针对Firefox用户的工具栏中文(简体中文和繁体中文)3.0Beta版。最新版本的工具栏增添了定制按钮和网络书签的新功能,使得Firefox的用户可以拥有和IE用户一样的工具栏功能。自此,Firefox用户的搜索体验将更为个性化。

  所谓“定制按钮”就是用户点击自己工具栏上的按钮,即可访问、搜索自己喜爱的网站,并获得网站最新的RSS/Atom feeds.例如,热衷于新闻的人可以把他们喜欢的新闻网址添加到工具栏上,点击这些按钮,用户就能从工具栏上直接浏览这些网站最新的标题新闻。

  在新版本的Google工具栏上,用户还可以为自己喜欢的网址建立书签,并通过简单的操作为书签分类。举例说,如果用户在工作时定制了一篇有趣的文章并打算随后阅读,那么他只需要通过登录Google帐户,在家里的电脑上就能轻松找到之前定制的这篇文章。这项功能是为方便用户在不同电脑上的使用而设计的,书签被保存在用户的 Google帐户里。

  Google工具栏是备受用户喜欢的一款免费软件。通过Google工具栏,用户无需先打开Google主页就可以在工具条内输入关键字进行搜索。它旨在帮助用户最便捷地搜索到所需信息,让Internet变得更易于使用。

  除简体中文外,针对Firefox的Google工具栏3.0 Beta版提供其它25种语言的支持。在这次发布中,Google新添了英国英语,阿拉伯语,保加利亚语和希腊语等四种语言。最新版的Google工具栏支持Windows XP/2000 SP3+,Mac OS X 10.2+ or Linux。

2006年12月14日星期四

通过PayPal实现美元现钞转换为现汇

  中国是汇率管制的国家,居民手中的美元现汇可以转换为美元现钞和人民币现钞,但是美元现钞和人民币现钞却很难转换为美元现汇,今天我介绍一个方法,可以令没有美元的用户也拥有美元现汇的帐户。

  首先要现解释一下美元现钞和美元现汇的区别,在我国,居民外币储蓄存款有两种账户:现钞户和现汇户。现钞指的是外币的钞票和硬币或以钞票、硬币存入银行所生成的存款。现汇是指以支票、汇款、托收等国际结算方式取得并形成的银行存款。外币现钞只能运送到国外才能起到支付作用,在国内法律是禁止其支付的。根据国家外汇管理有关规定,现钞不能随意换成现汇。个人外汇买卖业务本着钞变钞,汇变汇的原则。国家的外汇管理政策也是鼓励持有现汇、限制持有现钞,因为现汇作为帐面上的资金比现钞更便于外汇管理。

  由于美元现汇兑换人民币高于美元现钞,且在流通和交易上都比现钞方便,因此一般都建议美元现汇存款不要轻易支取为现钞,以免让手中的外汇贬值。将手中的美元现钞转换为现汇,也可以使得自己的外汇升值,我今天想到一个方法,可以实现现钞转现汇的功能,实现我们手中的美元现钞“升级”为美元现汇。

  前提条件是,拥有一个招商银行的信用卡,并用这个信用卡激活了PayPal.COM的国际帐户。

  首先,在PayPal用同名再注册一个帐户,这时候,在银行将美元现钞存入招商银行的信用卡,并用这个卡关联的帐号转一笔美元到另外一个同名PayPal帐号,金额和存入信用卡的相同,之后,在那个帐号里,通过支票或者电汇的方式收款,耐心等待一段时间,支票寄到后去银行托收这张支票,托收成功后,存进去的就是美元现汇,这就实现了美元现钞转换为美元现汇。

  即使你没有美元,由于招商银行的信用卡可以通过人民币还款美元,你一样可以获得美元现汇。这也是通过人民币兑换美元现钞或者现汇的一个方法。不过如果你办理过港澳通行证并申请了一次签注,那么也可以直接去银行兑换几千美元。

  这个方法是突破外汇管制的一个思路,不过PayPal支票托收可能有些银行不做,另外这种转钱方法不知道是否违反PayPal的使用条例(同名帐户是否允许转钱),因此我也不知道这个方法是否有效,稍后我会实际进行一下验证,看看是否可以实现这个功能。

  补充一下相关费用:个人PayPal帐户之间转钱:免费;PayPal支票收款:5美元;PayPal电汇收款:20美元;中国银行托收:20人民币。

  大家如果对PayPal使用比较熟悉,也可以交流一下各自意见。

南京大屠杀纪念日

  今天是12月13日,是南京大屠杀六十九周年纪念日,南京大屠杀指的是日军于1937年12月13日攻陷中国首都南京之后进行的大规模屠杀、抢掠、强奸等战争罪行。

  南京大屠杀这个话题也是一个比较敏感的话题,今年在中国至少有两次相关事件引发了不少争论。

  第一次是关于“Google搜索南京大屠杀”的事件,该事件可能是由于公关公司的暗地炒作,也可能是网络愤青的偶然发现,由Google不能搜索这个词语的现象以及大众对网络知识的匮乏,引出了一个对于Google非常不利的结论,当然这个事情实在讨论太多,有兴趣的人可以自行上网搜索一下,应该可以知道Google无法搜索的真正原因,如果大家是在想不通过代理服务器也搜索这个单词,我建议搜索“南京大屠殺”,这个繁体词是可以搜索的。

  另外一起事件是“孟广美事件”,孟广美在台湾做一个节目时,提到了南京大屠杀,没有表现出较为庄重的表情,因此被愤愤们认定为是亲日派并大肆批判,使得孟广美隐姓埋名了一段时间,至今还没敢上凤凰台锵锵三人行亮相。

  不可否认的是,当今日本人对南京大屠杀的过程与死伤人数的确存在争议,有些认为死亡数百人,有些认为死亡4万人,有些认为死亡十万人。远东国际军事法庭认定为20万以上,中国学者考证为30万以上。

  关于日本人的这些看法,大家可以上上日文版本的维基百科,查看“南京大虐殺”条目即可,中文版的“南京大屠殺”左下部也有相关链接。

  鉴于目前中文版的维基百科大部分人仍然无法直接访问,我这里就转载一下中文版的“南京大屠殺”的条目的部分内容,供参考。

南京大屠杀

  南京大屠杀指侵华日军于1937年12月13日攻陷中国首都南京之后,在南京城区及郊区对中国平民和战俘进行的长达6个星期的大规模屠杀、抢掠、强奸等战争罪行。

  有关南京大屠杀的过程与死伤人数至今仍有争议,其中远东国际军事法庭认定为20万以上,中国学者考证为30万以上,而日本学者之研究则众说纷纭,难有统一定论。

  在中国,南京大屠杀往往是国民对日本右翼为侵略历史翻案的关注焦点之一。在日本,公众对南京大屠杀的认识却存在着广泛不同的情绪及观点,尤其是日本极右翼份子,认为南京大屠杀是被夸大、甚至是凭空捏造的反日外交工具,也有人认为否认南京大屠杀是历史修正主义、否认主义的表现。由於日本人对南京大屠杀的意见有着广泛的分歧,因此视乎讲话者的观点,南京大屠杀可能被称为「南京大虐杀」、「南京虐杀」、及「南京事件」等。对南京大屠杀的认识,是中日关系中存在的重要问题之一。

  南京大屠杀在日本叫做「南京大虐杀」,也叫“南京虐杀”、“南京事件”。英译则为Nanking Massacre(南京屠杀)或Rape of Nanking(南京的洗劫、南京的强奸)等,但往往人民对其的认知远不如对纳粹的种族灭绝过程的认知。

  战争背景

  1937年七七事变后,日本展开全面侵略中国的大规模战争。7月17日,国民政府军事委员会委员长蒋介石在庐山声明中表示:“如果战端一开,那就是地无分南北,年无分老幼,无论何人,皆有守土抗战之责任。”全国上下掀起全民抗战的浪潮。

  同年8月13日至11月12日在上海及周边地区展开淞沪会战。战役初期,日军于上海久攻不下,但日军进行战役侧翼机动,11月5日在杭州湾的全公亭、金山卫间登陆,中国军队陷入腹背受敌的形势,战局急转直下;11月8日蒋中正下令全线撤退;11月12日上海失守,淞沪会战结束。

  淞沪会战结束后,中国军队向南京方向溃退,中国首都南京处于日军的直接威胁之下。由于从上海的撤退组织的极其混乱,中国军队在上海至南京沿途未能组织起有效抵抗。中国将领唐生智力主死守南京,主动请缨指挥南京保卫战。11月20日国民政府宣佈迁都重庆。

  经过淞沪会战三个月鏖战,日军也损失甚巨。日本参谋本部原计划让上海日军“凯旋归国”,并没有进攻南京的计划。11月7日,日本参谋本部给上海派遣军和第十军的命令是:“扫荡上海附近之敌,追击的战线为苏州、嘉兴以东”。 然而日军中下级军官不愿就此罢休,11月15日的第十军军团扩大会议达成决议:“全军独断敢行,全力向南京方向追击。”11月22日,松井石根致电多田骏:“为了尽快解决事变,要求军部批准向南京进军和占领南京。”12月1日,日本参谋本部正式下达占领南京的命令。日军经过数月连续作战,此时进攻上海以西数百公里的南京,几乎没有后勤支持。日军军官称:“粮草不足就现地解决,弹药不足就打白刃战。”在西进途中,日军抢劫、杀害平民、强暴妇女的暴行已经开始。

  12月4日,日军逼近南京外围。8日,日军占领南京外围阵地,已从北、东、南三面包围南京,此时南京守军只剩西面的长江一条退路,然而唐生智做出“背水一战”的姿态,一方面下令集中力量固守复廓阵地,另一方面命令销毁长江上全部渡船,并令宋希濂三十六师看守城内通向下关的唯一通道挹江门,严禁部队从此处退出。自此,南京城内守军和平民的退路被全部切断。10日,日军发动全线进攻,但直到12日仍未能突破南京城防。12日晚7时,唐生智突然下令突围撤退,自己乘保留的汽艇出逃。南京守军瓦解,大部向下关溃退,在挹江门与三十六师发生激烈冲突,最终击破城门逃至下关。由于渡船已经销毁,许多难民与士兵仅试图依靠木板渡江,最终大多冻溺江中。其他人见渡江无望,返回城内。许多士兵脱下军装躲入南京安全区。

  暴行

  大规模集体屠杀

  南京下关码头尸体堆积如山(村濑森安(Murase Moriyasu,南京大屠杀参与者)拍摄)进城兵力约50000,执行军纪维持的宪兵却仅有17人的日军除了个别地或小规模地对南京居民随时随地任意杀戮之外,还对中国人,特别是解除了武装的军警人员以及日军认为是可能参加过抗日活动和适合兵役年龄的中国青壮年,进行过若干次大规模的「集体屠杀」。大规糢屠杀方法有机枪射杀、集体活埋等,手段极其残忍。

  12月15日(日军佔领第3天):已放下武器的中国军警人员3000余人被集体解赴汉中门外用机枪密集扫射,多当场遇难。负伤未死者亦与死者屍体同样遭受焚化。夜,解往鱼雷营的中国平民及已解除武装的中国军人9000余人被日军屠杀。又在宝塔桥一带屠杀3万余人。在中山北路防空壕附近枪杀200人。

  12月16日(日军佔领第4天):位于南京安全区内的华侨招待所中躲避的中国男女难民5000余人被日军集体押往中山码头,双手反绑,排列成行。日军用机枪射杀后,弃屍于长江以毁屍灭迹。5000多人中仅白增荣、梁廷芳二人於中弹负伤后泅至对岸,得免於死。日军在四条巷屠杀400余人,在阴阳营屠杀100多人。

  12月17日(日军佔领第5天):中国平民3000余人被日军押至煤炭港下游江边集体射杀。在放生寺、慈幼院避难的400余中国难民被集体射杀。

  12月18日(日军佔领的第6天)夜,下关草鞋峡。日军将从南京城内逃出被拘囚於幕府山的的中国难民男女老幼共57418人,除少数已被饿死或打死,全部用铅丝捆扎,驱集到下关草鞋峡,用机枪密集扫射,并对倒卧血泊中尚能呻吟挣扎者以乱刀砍戮。事后将所有屍骸浇以煤油焚化,以毁屍灭迹。此次屠杀仅有伍长德一人被焚未死,得以逃生。大方巷难民区内日军射杀4000余人。

  杀人竞赛

  1937年12月13日《东京日日新闻》有关杀人竞赛的报道。1937年12月13日,《东京日日新闻》(即现在《每日新闻》)报道两名日本军官的「杀人竞赛」。日军第十六师团中岛部队两个少尉军官向井敏明和野田毅在其长官鼓励下,彼此相约「杀人竞赛」,商定在佔领南京时,谁先杀满100人为胜者。他们从句容杀到汤山,向井敏明杀了89人,野田毅杀了78人,因皆未满100,「竞赛」继续进行。12月10日中午,两人在紫金山下相遇,彼此军刀已砍缺了口。野田谓杀了105人,向井谓杀了106人。又因确定不了是谁先达到杀100人之数,决定这次比赛不分胜负,重新比赛谁杀满150名中国人。这些暴行都一直在报纸上图文并茂连载,被称为“皇军的英雄”。日本投降后,这两个战犯终以在作战期间,共同连续屠杀俘虏及非战中人员“实为人类蟊贼,文明公敌”的罪名在南京执行枪决。

  强奸

  日军侵佔南京期间强奸了成千上万的妇女,他们不分昼夜并在受害妇女的家人面前施行强暴。有些妇女被日军强奸了好几次,往往有妇女受不住日军的折磨而死。除此之外,日军还强迫乱伦行为。估计当时发生的强暴案可能超过20,000宗。

  远东军事法庭的调查

  远东国际法庭的判决书上写道:「在日军佔领后最初六个星期内,南京及其附近被屠杀的平民和俘虏,总数达20万以上。这种估计并不夸张,这由掩埋队及其他团体所埋屍体达十五万五千人的事实就可以证明了(由红十字会掩埋的是43071人,由崇善堂收埋的是112266人,这些数字是由这两个团体的负责人根据各该团体当时的记录和档案向远东法庭郑重提出的)。」

  法官之一的梅汝璈指出,对于南京大屠杀一案“花了差不多三个星期的工夫专事听取来自中国、亲历目睹的中外证人(人数在十名以上)的口头证言,及检查和被告律师双方的对质辩难,接受了一百件以上的书面证词和有关文件,并且鞫讯了松井石根本人”,“审理是特别严肃认真的”。松井石根听取了法庭宣布的罪状和科刑后,表示“南京事件,可耻之极”。

  法庭判决书中遂有郑重声明:「这个数字还没有将被日军所烧毁了的屍体,以及投入到长江或以其他方法处死的人们计算在内。」值得注意的是:远东国际法庭认定被杀害者为二十万人以上,未包括屍体被日军消灭了的被害者在内,而且这个数字仅是「在日军佔领后六个星期内」的。

  东京审判判处死刑的7名甲级战犯中,松井石根的唯一罪状是南京大屠杀。

  战后日方观点

  许多曾在当时南京附近作战的日籍老兵承认南京大屠杀的存在。日本左翼的日本社会党及左翼背景的日本教职员组合对南京大屠杀也多抱持承认大规模屠杀的立场。但因为日本政府始终否认该罪行与日本右翼民族主义教育下,不少未经历过侵华战争的日本人否认南京大屠杀的存在。但因为秉持观点与政治立场不同,不少日本人对南京大屠杀有不同的解读与看法,其中死伤人数的部分,有二十多万人、四万、数千、数百乃至於完全否定者等各种说法。

  对大屠杀的不同看法

  日本对南京大屠杀最大的争议在於,否认方认为日军进入南京城后城内人口仅二十万人,认为拉贝日记等可以佐证,而拉贝日记记载的事实是——在南京城中的国际安全区内就有20万平民,中国方面认定至少有三十万人罹难;埋葬总人数的问题,也是否认方对南京大屠杀进行质疑之处。另外,日军无条件投降之后到盟军接收之前,有充足的时间销毁随军文件和照片等直接罪证,造成日后追查的直接证据不足,无法一一求证其事实,也是遭到否认方质疑之处。日本否认方认为有不少的书面记录都显示,日军进入南京后南京并未成为空城,没有屠杀的迹象;另外国民党军队仓促撤退,使不少国民党军成为游击队在南京进行巷战,使得平民死伤的责任不清楚。另外日本否认方提出,有国民党军便衣兵假冒日军犯罪而遭国际安全委员会发现的事情。

  研究大屠杀事件的日本学者对死亡人数主要有几种看法:

  二十数万人以上: 主要支持者有笠原十九司(都留文科大学教授)、洞富雄 (早稲田大学教授)、藤原彰(一桥大学教授)、吉田裕(一桥大学教授)、吉见义明(中央大学教授)、井上久士(骏河台大学教授)、本多胜一(新闻记者)、小野贤二(化学工作者)、渡辺春巳。

  四万人左右 : 主要支持者有秦郁彦(日本大学教授?法学博士),另外冈村宁次在《冈村宁次阵中感想录》中认为约有4到5万人被屠杀,抢劫、强奸等“大有其人”。

  两万至数千 : 主要支持者有亩本正己(元防卫大学教授)、板仓由明(南京戦史编集委员?南京事件研究家)、原刚(防卫研究所调査员)。

  认为仅有数百人死亡,乃至於完全否定的态度: 主要支持者有铃木明(雑志记者)、田中正明 (拓殖大学讲师)、东中野修道(亜细亜大学教授)、冨泽繁信(日本「南京」学会理事)、阿罗健一(近现代史研究家)、胜冈寛次(明星大学戦后教育史研究)、杉山彻宗(明海大学教授)、渡部昇一(上智大学名誉教授)、大原康男(国学院大学教授)、竹本忠雄(筑波大学名誉教授)、西冈香织(军事史学会会员)、深田匠(日本歴史修正协议会会长)、前野彻、铃木正男。

  早稻田大学教授洞富雄,1973年7月发表《南京事件和史料批判》。《驳南京大屠杀是所谓“无稽之谈”》(日本现代史出版会),批判铃木和山本的否定史观。1967年写成《近代战史之谜》(人物往来社,后半部分为《南京事件》),1972年4月出版单行本《南京事件》(新人物往来社),1972年11月出版日中战争史资料《南京事件》(河出书房新社),1982年日本文部省在审定教科书时对教科书文字进行修改,他又立即于同年12月出版定本《南京大屠杀》进行驳斥。

  1984年教文社出版了松井石根的亲信秘书田中正明的《“南京大屠杀”之虚构》。

  战后的关于南京大屠杀的诉讼和政界事件

  1973年日本作家铃木明出版《南京大屠杀之虚幻》一书中首次指出“百人斩”为虚构。此后在日本,关於“百人斩”是否属实成为争论的话题。2005年,参与百人斩的两名日军军官向井敏明和野田毅的3名遗属向东京地方法院控告《东京日日新闻》於1937年11至12月间的报道失实,和《朝日新闻》於1971年出版的《中国之旅》一书中所提及关於两名军人的「百人斩」竞赛失实并损害其名誉,向该两出版社索偿3600万日元。东京地方法院审判长土肥章大於2005年8月23日裁定报道属实并非捏造,驳回赔偿请求。撰写《中国之旅》的前《朝日新闻》记者本多胜一在判决后指「「百人斩竞赛」真实性无容置疑,原告意图否定整个南京大屠杀以至对中国发动侵略。不过在诉讼过程中找到新的事实和资料,却进一步肯定这个史实。」[1]

  众议员石原慎太郎1990年在接受采访时说:“人们说日本人在那里(指南京)搞了一次大屠杀,但那不是真的。它是中国人编造的故事。这个故事破坏了日本的形象,它全是谎言”。

  索尼公司董事长盛田昭夫、自民党国会议员石原慎太郎等人撰写的《日本可以说“不”》、《日本还要说“不”》、《日本坚决说“不”》三本书中说道:“无端挑起战争的好战的日本人,制造南京大屠杀的残暴的日本人,这就是人们对日本人的两个误解,也是‘敲打日本’的两个根由,我们必须采取措施消除它。”

  战时日军大佐、二战后日本法务大臣永野茂门,1994年接受《每日新闻》采访时说:“(在日军进入南京后)不久,我就到了南京”,“我认为南京大屠杀及其他事情是编造的谎言”。

  战时特别高等警察课(特高课)课长、二战后法务大臣、文部大臣、日本国土厅首脑奥野诚亮1988年春否认南京大屠杀,“东京审判无效”,要从舆论上“再审东京审判”,遭到日本国内外舆论抨击,当年5月被迫辞职。

  1986年9月,日本文部大臣藤尾正行宣称南京暴行不是战争罪行而“仅仅是战争的一部分”,并说1910年日本对朝鲜的吞并是朝鲜心甘情愿地成为殖民地,发言当日被日本首相中曾根康弘免职。

  1977年,日本文部省在一个标准历史书中把二战中的日本给战争对方造成的伤亡、日本的战争暴行,和强行将中国及朝鲜犯人送往日本劳动营的内容删去,只留下了一些美国轰炸东京的照片、一幅广岛废墟的照片和一份日本战争死亡人数的统计表。

  1965年,日本历史学家家永三郎起诉日本教科书审查部门大幅删改掩饰日军在南京大屠杀和整个侵华战争中的暴行描写,遭到日本右翼势力的在家门口的围堵骚扰。1970年,东京地区法院法官杉本良吉裁决,教科书审查不得超出纠正事实及印刷错误的范围,家永胜诉,右翼极端分子向律师、法官和家永本人威胁要暗杀他们。

  条目来源:维基百科,自由的百科全书

2006年12月13日星期三

Sentinel SuperPro加密锁编程开发指南

  本文将简要介绍Sentinel SuperPro软件加密锁的编程开发知识,可供需要进行软件加密锁开发的软件开发商快速学习掌握这种类型的加密锁的编程开发,快速保护自己的软件不受侵害,防止加密狗被破解。本文资源来源于Sentinel SuperPro加密锁开发套件中的开发手册,仅供大家学习,文字版权属于Sentinel SuperPro所有。

  一、加密锁简介

  Sentinel SuperPro加密锁是一个硬件/软件保护系统,功能主要是保护软件,即防止未经允许非法使用开发商的软件。如未把正确的加密锁与计算机连接,则被保护的应用程序将无法实现全部功能。因此,只有合法用户才能使用开发商的产品。

  使用SuperPro软件保护锁完成软件保护,就是将软件开发商的未被保护的应用程序与SuperPro软件保护锁加密算法相绑定过程。最终实现绑定后的应用程序没有软件保护锁不能单独运行,只有插入软件开发商自己定义算法的软件保护锁,应用程序才能正常运行。当软件开发商的软件销售给最终用户后,软件即使被非法复制,而没有软件开发商提供的软件保护锁软件不能被使用。这样一来,从技术上防止盗版起到软件保护的作用。

  应用程序和Sentinel Superpro软件保护锁加密算法的绑定,是通过API函数调用来校验软件保护锁是否存在来实现的。API函数验证分由三部分组成:

  1)询问部分:开发商的应用程序通过API调用向软件保护锁的驱动程序发出的“查询串”, 驱动程序自动将“查询串”传给并口或USB口上的SuperPro软件保护锁上的算法单元。

  2)运算部分:加密锁通过内部的算法芯片计算“查询串”,并将运算结果“响应串”返回给驱动程序。

  3)程序鉴定、行动部分:驱动程序将“响应串”返回给应用程序中的API函数调用。应用程序对返回值—“响应串”进行比较判断,判断与预知运算结果是否相等,根据判断的结果进行相应的行动。

  如果返回值—“响应串”与预知运算结果相等,则说明保护应用程序的软件保护锁存在,使用程序的用户为合法用户。不相等则说明保护应用程序的软件保护锁不存在,用户为非法用户,应用程序将终止被使用。

  SentinelSuperPro 系统一个主要优点是可对一个加密锁编程,以提供多种驱动程序类型,包括固定响应和可变响应。这样,所创建的软件锁具有非常多的类型。

  例如,可用单元存储固定数据(如序列号、用户名称)或存储控制功能询问的代码。然后,可简单地读取这些数据,以检验是否附加了加密锁。也可使用存储的数据控制程序流程或应用程序的函数。数据字组可以定义为只读的(锁定)或可读/写的。

  每个加密锁的前 8 个单元为系统信息保留。除了某些限制外,可以任意方式使用其它 56 个单元。

  二、加密锁编程接口

  下面以VB语言为例,说明使用SuperPro软件保护锁时,有关API调用的数据结构、函数以及必要的步骤。

  1.基本信息

  DEVELOPER ID:用户ID为加密编号,为固定数字,没有它就不能使用加密锁。

  地址:SuperPro 的地址从00H到3FH,以十六进制数表示。

  访问权限:SuperPro的每一个存储单元可以单独设置成不同的操作权限。

  1- 可读/写数据;2- 只读数据;3- 计数器;4- 算法

  2.数据结构

  APIPACKET

  Type APIPACKET

    data(4096) As Byte

  End Type

  除了sproInitialize, 所有的函数都使用APIPACKET数据结构,该结构在调用sproFindFirstUnit 时被初始化,在调用sproFindNextUnit的时候会根据下一个加密锁的信息进行必要修改。当函数正常返回时,APIPACKET中存放必要的返回信息。

  SuperPro驱动程序使用该结构中的信息与加密锁进行通讯。开发者不要自行修改其中的数据。SuperPro驱动程序不负责分配APIPACKET数据单元,开发者在程序中必须分配APIPACKET结构变量,并且把指针传递给不同的函数。

  3.API函数

  ● RNBOsproFindFirstUnit()

  RNBOsproFindFirstUnit() 函数定位具有指定的开发者ID的SentinelSuperPro 加密锁。在调用 RNBOsproInitialize() 之后,使用其他调用之前,必须首先调用该函数。如果找到了加密锁,讯息包或UNITINFO 记录中将包含有效的数据,如果未找到加密锁,讯息包或 UNITINFO 记录将被标记为无效的。

  RNBOsproFindFirstUnit() 将搜索所有连接在并行端口上的所有级联单位。如果存在多个加密锁具有相同的开发者 ID,RNBOsproFindFirstUnit() 存取找到的第一个加密锁。在需要的时候,可以使用 RNBOsproFindNextUnit()查找具有相同开发者 ID 的其他加密锁。

  参数

  RNBOsproFindFirstUnit() 调用需要以下参数:

  ■由 Rainbow Technologies 或者其他发布者为您指定的开发者 ID。

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproFindNextUnit()

  RNBOsproFindNextUnit() 函数搜索具有给定开发者 ID 的下一个加密锁。

  开发者ID是由第一次调用的 RNBOsproFindFirstUnit() 指定的。(要找到具有不同的开发者ID的加密锁,需要再 次调用RNBOsproFindFirstUnit()。)

  如果 RNBOsproFindNextUnit() 成功了,讯息包或者 UNITINFO 记录将包含下一个加密锁的数据。如果未成功,讯息包或者 UNITINFO 记录将被标记为无效的。要重新对讯息包或 UNITINFO 记录初始化,需要再次使用 RNBOsproFindFirstUnit() 以及 RNBOsproFindNextUnit()。

  RNBOsproFindNextUnit() 将搜索连接到任何并行端口上的所有级联单位。如果同时连接了几个加密锁,应用程序可 以多次调用RNBOsproFindNextUnit()。

  参数

  RNBOsproFindNextUnit()函数需要一个参数:指向讯息包记录或者UNITINFO 结构的指针。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproFormatPacket()

  RNBOsproFormatPacket() 函数检验讯息包记录大小的有效性,并且初始化它的缺省值。该调用必须在调用其他 API 函数之前进行,否则将返回错误码 2 (INVALID PACKET)。

  参数

  RNBOsproFormatPacket() 需要下列参数:

  ■指向讯息包记录 (RBP_RNBOspro_APIPACKET) 的指针。

  ■PacketLen 的值是一个整数, 包含了讯息包的长度 (1028 个字节) 。

  返回值

  所有的函数都返回一个无符号的 16 位的值。值为 0 表示操作成功了,其他的值都表明发生了错误。如果发生了错误,函数将返回附录中列出的状态码之一。如果返回的状态码为非 0 的值,那么函数返回的其他数据将是无意义的。

  ● RNBOsproGetVersion()

  RNBOsproGetVersion() 函数返回与 SentinelSuperPro 驱动程序有关的信息,应用程序可以使用该信息。

  参数

  RNBOsproGetVersion() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■指向用来返回主版本号的位置的指针。

  ■指向用来返回次版本号的位置的指针。

  ■指向用来返回修订版本号的位置的指针。

  ■指向用来返回驱动程序类型标识符的位置的指针。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproInitialize()

  RNBOsproInitialize() 函数使驱动程序执行所需的初始化操作。在调用任何其他的 API 之前,应用程序必须首先调用 RNBOsproInitialize() 一次。

  参数

  RNBOsproInitialize() 函数不需要任何参数。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproOverwrite()

  RNBOsproOverwrite() 函数使应用程序能够改变字组的值与存取码,但是被限制的单元(0 到 7)除外。在使用该函数的时候,需要同时提供写密码和重写密码。

  注意重写密码的能力是相当强大的。它的使用应该仅限于工作室中,而不应该在正式发布的应用程序中出现。如果您的保护方案不需要在应用程序中使用重写密码,Rainbow 可以通过编程使您的每一个加密锁具有一个“随机重写密码”。每个加密锁中将包含不同的重写加密锁密码,并且不能在最终用户实际使用中进行修改。

  参数

  RNBOsproOverwrite() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■您的写密码。

  ■您的两个字组长的重写密码。

  ■需要写入的定址。

  ■赋予该字组的存取码:0 (可读/写数据)、1 (只读数据)、2 (计数器)、3 (算法/隐藏的)。

  ■希望写到该定址上的值。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproQuery()

  利用RNBOsproQuery() 函数,应用程序可以发送询问字串到SentinelSuperPro 加密锁。应用程序还可以指定用来对字串进行转换的算法描述符。

  加密锁将使用自己的算法和指定的算法描述符中储存的信息对输入字串进行转换。然后加密锁将转换之后的字串返回到应用程序。应用程序将返回的字串与希望得到的字串相比较,即可知道所需要的加密锁是否仍连接在并行端口上。

  在软件开发阶段,高级编程序的鉴定 API:询问选项可以用来确认加密锁的算法描述符对给定的输入字串进行转换的结果。

  参数

  RNBOsproQuery() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■询问字串中的字节个数(最大值 56)。

  ■指向包含询问字串的缓冲区的指针(偏移量在前,段定址在后)。

  ■指向用来供驱动程序返回结果字串的缓冲区的指针。该缓冲区需要足够大,以便容纳整个的结果字串。另外一种可取的办法是,将某个位置的指针传递给驱动程序,但驱动程序仅返回结果字串的最后 32 个位。

  ■询问中使用的算法描述符的首(较低的)字组的定址。该定址必须是偶数。一般来说,较长的询问字串能够提供更好的保护。推荐的询问字串长度至少为 8 个十六进制字符(32 个位)。驱动程序允许的最长的询问字串的长度为 56 个字节。如果发送的字串长度小于 32 位,驱动程序将在添加一种已知的模式之后再将其发送出去。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproRead()

  应用程序可以使用 RNBOsproRead() 函数读取非隐藏的记忆体字组的值。非隐藏的字组的存取码为 0 (可读/写数据)、1 (只读数据)或 2(计数器)。算法/隐藏的字组的存取码为 3,它是不能被读取的。如果试图读取一个隐藏的字组,驱动程序将返回拒绝存取。通过检查该状态即可判断字组是不是算法字组。RNBOsproRead() 返回字组的值,而不是其存取码。要获得字组的存取码,可以使用 RNBOsproExtendedRead()。

  参数

  RNBOsproRead() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■被读取的定址。

  ■一个指针,在调用成功的时候,该指针指向驱动程序返回的指定字组的内容。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproDecrement()

  RNBOsproDecrement() 函数将可读/写的数据字组(存取码为 0)或者计数器字组(存取码为 2)的值减量 1。在使用该函数时需要提供写密码。如果试图对被锁定或者隐藏的字组减量,驱动程序将返回拒绝存取。如果字组中的值已归零,驱动程序将返回已归零。对这两种状态码应用程序都需要进行检查。RNBOsproDecrement() 可以用来限制演示程序能够被执行的次数。首先将一个计数器与一个算法描述符联系起来,然后在每次程序执行的时候将计数器减一。当计数器为 0 时,算法将自动被去激活。以后的询问将返回无效的响应。

  参数

  RNBOsproDecrement() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■您的写密码。

  ■需要被减量的数据字组或计数器的定址。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  ● RNBOsproExtendedRead()

  RNBOsproExtendedRead() 函数读取非隐藏的记忆体字组的值和存取码。未隐藏的字组的存取码为 0 (可读/写数据)、(只读数据)或 2 (计数器)。算法/隐藏字组的存取码为 3,它们是不可读的。如果试图读取一个隐藏的字组,驱动程序返回拒绝存取。通过检查该状态,能够确认一个字组是否是算法字组。

  参数

  RNBOsproExtendedRead() 函数需要下列参数:

  ■指向讯息包记录或者 UNITINFO 结构的指针。

  ■要读取的定址。

  ■指向指定字组的内容的指针,在调用成功时由驱动程序返回内容。

  ■指向指定字组的存取码的指针,在调用成功时由驱动程序返回存取码。存取码可能是 0 (可读/写数据)、1 (只读数据)或 2 (计数器)。调用不可能返回存取码 3 (算法/隐藏的)。

  返回值

  如果执行成功,函数返回成功。如果发生了错误,函数将返回附录中所列的状态码。

  4.必要的初始化步骤

  在调用API函数进行加密工作以前,必须在应用程序中完成以下有关加密的初始化工作。

  分配APIPACKET数据结构

  调用RNBOsproFormatPacket初始化结构(仅Win32程序使用)

  调用RNBOsproInitialize函数

  调用RNBOsproFindFirstUnit函数找到软件保护锁

  以上工作完成以后,开发者可以根据各自的需要在程序的任何部分进行读写、查询等工作。所有函数没有必然的前后顺序。

  当利用查询响应对,调用RNBOSproQuery进行查询时,需要对查询响应对进行适当转换。

  三、备注

  如果想了解更多有关软件保护锁的信息,请参阅加密锁手册SentinelSuperPro Developer Guide。

  附录.API状态码返回数值

  0 success - 调用顺利地完成。

  1 invalid function code - 指定了一个无效功能码。对于有效的 API 功能码,请查看您所使用的语言的包含档案(例如:SUPERPRO.H )。如果使用 Rainbow 提供的接口程序与驱动程序通讯,通常不应该产生该错误。

  2 invalid packet - 在命令讯息包中检测到核对和错误,该错误表明内部不一致。因是讯息包记录或 UNITINFO 结构还没有被初始化,或者可能已被篡改了。如果使用Rainbow 提供的接口程序与驱动程序通讯,通常不应该产生该错误。

  3 unit not found - 或者 RNBOsproFindFirstUnit(),或者 RNBOsproFindNextUnit() 无法找到指定的 SentinelSuperPro 加密锁。请确信发送了正确的开发者 ID。如果该加密锁消失(也就是说,已?被取消),该错误是其它函数返回的。

  4 access denied - 企图对字组执行非法操作。例如,您可能试图从算法/隐藏字组中读取、向锁定的字组中写入,或者将不是计数器字组或者数据字组的字组减量。

  5 invalid memory address - 指定了无效的 SentinelSuperPro 记忆体定址。有效的定址是十进制的 0-63(十六进制的 0-3F)。对于许多操作,单元 0-7 是无效的。必须使用第一个(偶数)定址引用算法描述符。

  6 invalid access code - 指定了一个无效的存取码。存取码必须是 0(读/写数据)、1(只读数据)、2 (计数器)或者 3(算法/隐藏)。

  7 port is busy - 因为端口被占用,所以请求的操作不能完成。导致的原因可能是有大量的打印任务,或者该端口上的某个单位正在执行写操作并阻塞了该端口。请再试一次该函数。

  8 write not ready - 由于暂时缺少足够的能力,不能执行写入或者减量操作。请再试一次该操作。

  9 no port installed - 在工作站上没有发现并行端口。

  10 already zero - 试图将已?包含 0 的计数器字组或者数据字组减量。如果使用该计数器控制演示程序执行,当对应的算法描述符被起动密码重新激活之后,可能会出现这种情况。

  12 driver not installed - 没有安装或者没有检测到系统设备驱动程序。不可能与该单位通讯。请验证设备驱动程序的加载是否正确。

  13 communications error - 系统设备驱动程序与该单位通讯时碰到问题。请验证设备驱动程序的安装是否正确。

  18 version not supported - 当前的系统设备驱动程序过期。请更新驱动程序。

  19 OS environment not supported - 客户程序库不支持该操作系统或者环境。请与技术支持联系。

  20 query too long - 发送的询问字串超过 56 个字符。请发送较短的字串。

  30 driver is busy - 系统驱动程序繁忙。请再试一次该操作。

  31 port allocation failure - 通过操作系统的并行端口争用处理器来分配并行端口时失败。

  32 port release failure - 通过操作系统的并行端口争用处理器来释放先前分配的并行端口时失败。

  39 acquire port timeout - 在规定的超时时间内请求使用并行端口失败。

  42 signal not supported - 特定的机器不支持信号线。例如,企图在一台 NEC 9800 计算机上使用 ACK 线。

  57 init not called - 没有初始化加密锁。在调用产生该错误的函数之前,请先调用RNBOsproInitialize() 函数。

  58 driver type not supported - 对于定义的操作系统和客户程序库,不支持驱动程序的存取类型。该驱动程序的存取类型无论是直接 I/O,还是系统驱动程序。

  59 fail on driver comm - 客户程序库与 Rainbow 的系统驱动程序通讯失败。

  60 API status unavailable - 扩充的 API 状态函数不可用。

  255 invalid status - 返回的状态码无效。