善意提醒

如果您打开本站很慢,布局排版混乱,并且看不到图片,那么可能是因为您还没有掌握用科学的方法上网的本领。

2013-12-12

关于好奇金装纸尿裤条码的问题

从儿子出生以来,基本上一直用的好奇。主要是用的金装的。中间有一段时间用过银装,感觉效果不好,后来就再也没用过。也买过一箱帮宝适,感觉不太好,混用了一段时间,后来也没买过。一直觉得好奇金装的效果很不错,当时只是觉得宝宝不会红屁股,别的还没想太多。

前段时间爱婴室发短信给我们,说好奇全场 75 折。跑过去「抢」了一包 M 号两包 L 号,以为到下次再买将会是明年的事情了。这些天旧的用完了,于是刚启用这几包,却发现很不对劲。以前从来不出问题的好奇金装,现在晚上开始漏尿。开始时检讨可能是自己的问题,于是仔细检查,小心包裹,包好后注意用手指把侧面的挡给竖起来。但就算是这样,还是会漏。后来发现好像是吸水性太差。吸不了多少尿,表面就会开始渗出来。一个晚上裤子得湿两趟,运气不好连衣服被子都得湿。而换下来的纸尿裤却并没装多少尿。不管 M 号还是 L 号都这样。

上网准备看看别的品牌是不是会好点,查下来才发现原来所有品牌都有人反映有这种问题。有的说是买到了「假货」,有的说是产地和/或批次的问题。总之感觉是质量问题。我们也觉得早先在超市和网上买的好奇金装用得好好的,就算一大包尿沉甸甸的,表面可能会有潮气,但至少不会把裤子给搞湿。难道真是遇到所谓「假货」了?

于是,昨天中午,我去超市又买了一包好奇金装 L 号。回家一比,从外包装上就看出问题。其实问题很明显:条码压根就不对。超市买的是 880 开头,正宗韩国货。不对劲的那几包,则是 69 开头,国货!册那,我本来应该能看出来的,之前买进口牛奶的时候,对于条码已经很熟了。还是太大意了,买的时候以为只要是金装都没问题,没想到会遇上李鬼。

李鬼的外包装上还写的是「原产地:韩国」,但这条码明显就不是。网上搜了一下,一种很流行的说法,包括各电商客服的回复,都是说:不管 880 还是 69 都是从韩国进口的,69只是中国这边要求韩国厂商在外包装上印上 69 的条码。

这种说法貌似是来自进口商那边的标准口径,我估计不同的意见大概也被公关和谐得差不多了。但是事实是不会说谎的。昨天晚上宝宝就包的正宗韩国货。果然,一晚上下来,完全没漏,裤子一点没湿。前天用的 69 货一晚上湿了两条裤子。进口货就是让人放心。我看网上那些评论晚上侧漏或吸水性差的,大概都是买到了 69 货。

既然商家都是这个说法,理都没处找,经济损失可能没法挽回。只能以后买的时候自己当心,都去超市看清楚条码再买,国内电商的网购就不指望了,贵嘛就贵一点好了。大冬天晚上尿湿被窝,然后被人拎起来换裤子,换你是宝宝你乐意?

唉……,国货,我该说你啥才好?其实就算是国货,只要好用,我也不会觉得受了多大的欺骗。可你这国货连张纸尿裤都做不好,我还能指望你啥?!

2013-10-23

黑客故事 3:谈谈密保问题

Internet 上,从很早开始,就出现了一个东西,叫做「密保问题」。
「密保」是「密码保护」的意思,有的也叫做「密码找回问题」,反正都是一个意思:自己设一个问题,和一个答案,如果密码丢了,靠这个答案就能重设密码。
这里面,重要的是「答案」。「问题」嘛,只是用来帮助你回忆起「答案」是什么。理论上,这个问题的答案应该只有你自己一个人知道。很多网站在注册的时候也提示了,像谁谁谁的生日、姓名、电话号码等等不止一个人知道的东西,最好不要用来做密保问题。

一般说来,要让密保问题有点价值,下列办法都是可以考虑的:
  • 填一个牛头不对马嘴的答案:问题是这样很容易忘记。
  • 用自己心中的小秘密:嗯,这个听上去不错哦。
  • 填一个错误的答案,或者正确答案的反义词:若能坚持这个原则,倒是可以考虑。
  • 不管什么问题,答案总是填自己的第二密码:这就相当于多记一个密码,而且还是不常用的密码,很容易忘。
  • 瞎填一气,自己也不记得:那就相当于放弃这个功能,倒也不一定是坏事。
想来想去,好像没有什么太好的办法。始终还是那句话:安全的不方便,方便的不安全。其实,高级一点的点子,例如手机短信绑定之类的,可能还有一定的准入门槛,但邮件找回密码应该是不需要多少成本的。我自己就做过一个,很简单。虽然邮箱也很容易被盗,但至少,你把防盗号的责任丢给别人(邮件服务提供商)了。

※  ※  ※  ※  ※  ※  ※  ※  ※  ※  (好了我知道该讲故事了)

有一年的夏夜,我在网上闲逛,遇到了一个灰色站点。这种站点往往是很好的练手目标,对它无论干什么事情,都不会有实际上的法律风险。我这次遇到的这个,是一个成人交友社区。其实就是找一夜情的,不过在我看来更像是皮条客网站。网站制作极其简陋,可见其作者就没打算在技术上投入多大力量。也因此,它拥有一个很初级的密保系统——不限尝试次数,当场返回结果,回答正确后立即允许修改密码。

这个皮条客网站的设计,从业务层面来说,是下了一点功夫的。女性能看到男性的所有资料,而男性要看女性的联系方式,需要成为「会员」。换句话说,得掏钱。

会员费一年大约一百多,说多不多,说少也不算少。我很好奇,真的有人会为了这种事情花钱吗?于是我注册了一个女性的账号,进去看了一下。嗬,会员还真不少。而且那些个傻男人为了勾搭女人,还把自己的资料一股脑地往上放,写得那叫一个详细。他们可能以为真的有女人会看了资料里面填写的「尺寸」之后主动联系他们吧?

好吧,资料齐全的一个坏处就是,社工变得相当容易了。虽然我没那个闲工夫。但光是翻翻这些资料就挺有意思的。另一个要命的地方是,还真的有人用生日做自己的密保问题的,而且他在个人资料中还真的如实填写了自己的生日。这我就有点搞不明白了,这是要向女神双手奉上一切的意思?

嗯,于是我就小花了点时间,稍微检查了一下这帮家伙的密保问题和答案,还真有点意思:

  • 问题:13579;答案:24680。这种,唉……,怎么说呢?算鄙视他人的智商吗?
  • 问题:1234567890;答案:qwertyuiop。诸如此类也不少。这算是懒吗?
  • 答案是自己生日、手机号码、身份证号码等等的,就不说了。居然还有把问题重复一遍作为答案的。真的以为没有人能猜得到吗?
  • 有个家伙,密保问题的答案就是「1」。我都要笑死了。这是在玩「最危险的就是最安全的」游戏吗?

其实,我能理解。注册这种网站的人,在密保问题上不一定特别较真。你真让他注册网银账号,十有八九不敢这样玩。不过一年也要一百多块钱,换作是我,才不舍得就这样就扔掉了。哎,咱们村果然到处都有土豪是吧?

※  ※  ※  ※  ※  ※  ※  ※  ※  ※  (好了故事讲完了,我是不会告诉你们那些女人的 QQ 号的)

弱密保答案,并不是大问题。真正的大问题还在于:你是不是在所有网站注册账号的时候,都用了同一个密保问题,或者同一个密保问题答案。

也许这样会比较好记,但是特别容易遭受钓鱼攻击。人往往在急着想找某个资源的时候,特别容易犯这种错误:那个资源只在某个论坛上有,但要下载贴子里面的附件需要先注册用户,而注册用户时需要填一个密保问题。

好了,现在别人有你的密保问题了,当然,密码也有了。不过密码上次在 CSDN 事件中被搞过一回,大家的警惕性都还比较高。而密保问题有的人可能就会忽视了。

安全意识够的用户,当然不会填跟别的网站上密保问题相同的内容。但问题是,要始终坚持这个原则,记性得足够好才行。最好的办法,就是用随机字符串当密保问题的答案,然后交给 1password 之类的东西去管理。这样一来,密保问题就跟密码其实是一回事了。——其实本来就是多此一举:如果根据密保问题就可以拿到密码,那么干嘛还要去记密码呢?真是的。

总的说来,密保问题这个东西并不是一个好的设计。它如果单独作为一道安全关卡,很可能会降低整个系统的安全防护等级。而如果配合别的安全措施一起使用呢,带来的好处并不见得会多,倒是会增加忘记的风险,最后变成画蛇添足。建议技术能力不够的网站,还是把用户认证这种事情交给专业的来做吧,比如 Google Open API 之类。起码这样皮球就踢给别人了。

2013-10-18

终于把户口迁到了上海

写这些个没有什么别的目的,一来给这漫长又烦心的事情划上句号时留个纪念,二来在某些具体的事务处理上希望对他人能有所帮助。

Chapter One

大约一年多以前,公司领导问我有没有意向把户口迁到上海。

这事儿其实到公司面试的时候就给我画过饼。其中的关节我也清楚:「高新技术成果转化」,要报项目,就需要有个项目负责人。这个人如果是外地户籍,那么就可以顺势申请人才引进。而反正得写个人,名额当然是留给公司的骨干当福利。既然是骨干,的确也是「人才」嘛。

因为太太是上海户口,所以我其实并没有很强烈的要迁户籍的需求。但本着:

  1. 想把一家人的户口放在一起。
  2. 不想每年都因为续办居住证的事情跑东跑西费力伤神。
  3. 退休前总归是要迁过来的,不然养老金白缴一大坨。

的考虑,我还是很爽快地接受了公司提供的这个福利。

Chapter Two

表达了我的意愿之后,大概公司方面一直在折腾项目申报的事情,从年初一直等到夏天快过完,终于有动静了。项目申报应该是已经差不多了,至少是批下来了。于是给到我手里一份清单,让我提交相关的材料:

  1. 学历学位证书原件及复印件;
  2. 引进人才单位的营业执照、机构代码证、高新技术企业、软件企业原件及复印件;
  3. 成果转化认定证书原件及复印件;
  4. 盖章后的项目认定申请书原件及复印件;
  5. 劳动合同原件及复印件(从进单位起且申报日起三年以上);
  6. 人事档案所在单位出具的同意调动函(原件,如果档案在上海则请档案保管单位出具档案保管证明);
  7. 政治表现鉴定原件(包括是否参加法轮功等邪教组织、是否有刑事犯罪记录等);(由档案保管单位出具)
  8. 未婚者提供未婚证明,已婚者提供结婚证书原件及复印件,离婚者提供离婚证书原件及复印件
  9. 上海由落户条件的证明;房产证、直系亲属的居民户口簿、同意落户证明
  10. 引进人员业务考核能力证明(专利、论文等,需要提供原件及复印件);*
  11. 居住证原件及复印件、保险缴纳证明(网上打印并请在保险证明页面上写上用户名和密码)、近一年纳税证明等;
  12. 已婚者其配偶及未满 18 周岁子女随调;
  13. 在上述条件已准备好的基础上,在区级以上医院体检;

蓝色的部分,公司可以提供。红色的部分,跟我无关。其余的,就是需要我提供的东西了。

应该说来,这份清单并不算很过分,基本没有什么故意刁难或刻意抬高准入门槛的成分。于是我就着手开始准备了。一条一条地过:

  • (1)学历证、学位证:这个相信能办下居住证来的,基本都没有问题。
  • (6)同意调动函:这个是啥?看括号里面的内容,由于我档案还在重庆那边,所以看起来至少得托人跑一趟。
  • (7)政治表现鉴定:这个又是啥?不过从括号里面的内容看来,我觉得不是啥重要玩意儿。并且应该和上一条一起办掉。
  • (8)结婚证:这个也没有问题。
  • (9)落户证明:这个也是居住证的必要材料之一。不过虽然房产证上有我的名字,因为老婆是户主,是否需要她签署同意落户证明?我不太清楚。我们还是写了一张,不过从最后还给我的材料看来,应该是不需要的。最后上户口的时候派出所也没有要求这个东西。
  • (10)业务考核能力证明:这个也不知道是啥。咨询过办事人员,说这个是可选的项目,没有的话就不用提供。
  • (11)居住证、保险缴纳证明、纳税证明。
    • 1.居住证:没有问题。但由此看来,要办人才引进的落户,貌似一定要先有居住证。
    • 2.保险缴纳证明:在网上有两个页面,一个页面是应缴和实缴分开的记录,另一个页面是一个表格,有打印按钮。我一开始打印成了后者,但材料被退回来,说要的是前者。我也不知道这两者有什么区别,光看内容我觉得两者应该都可以才对。反正对方要求什么就给什么吧。后来过了一段时间,再看后者的页面已经不太正常了。大概有很多人都打错了吧。
    • 3.纳税证明:清单里面写的是只要近一年,但交了材料后又说需要到上海之后的全部记录。这坑爹玩意儿搞了我很久。
  • (13)体检很简单,找家二级以上医院缴钱就行。可以在网上查一下,有的医院周六也可以体检,并且可以对比后找一家收费便宜项目简单一点的。嗯,收费便宜项目肯定简单嘛。我是在枫林路那个中山医院做的。

初步看起来没啥大问题。红色的几个项目可能需要花点时间,但应该都还好,至少我是这样觉得的。

事实证明,图样图森破,我错了。

Chapter Three

档案的问题,其实是个老问题了。

2002 年毕业之后,根据报到那一套手续来到一家当时还挺大的单位工作,在福建省。工作刚满一年没多久,我就辞职了。而档案当然就扔在原来的人才中心没有去管。

后来过了大约一年,我准备把户口转回重庆老家。当时也经历了很多的麻烦,其中之一就是,档案转到了重庆之后,这边的人才中心说我档案里面缺材料,缺个什么干部转正定级表。解决办法是让我回原单位去补这个材料,因为我已经工作满一年,理应有这个。可见是原来公司的人事偷懒没有做。当时一来因为不想买飞机票再过去一次,二来原来那家当时还挺大的单位,在我辞职后短短半年内就分崩离析从市场上消失了。所以在经过一阵扯皮后,这事情以重庆人才方面强调说他们只是代为保管我的档案,不把我当干部,而告一段落了。

于是,这次要去开「同意调动函」的时候,又遇到了这个问题。

  • 重庆人才说他们开不出来,理由是我没有干部身份,不是他们那边管的「干部」。
  • 而上海人才这边的说法是「什么干部身份?都什么年代了。我们不需要这些个」。
两边各执一词,最后重庆人才勉强写了一张东西,不过在上面坚持注明了「没有干部身份,无法开具行政工资介绍信」等字样。

相比之下,「政治表现鉴定」就更搞笑一些。根据文档清单,这个玩意儿应该是找档案保管单位,也就是重庆人才开具。重庆人才说你又不在我这边工作,我不了解你的表现,找社区去开。社区那边又说你不住我们这边,人在上海,我怎么知道你表现怎样,回上海去开。

其实这两家的反应也在我的意料之中。如果真的回上海,肯定又会说你户口不在我们这边,不是我们辖区的居民,回户口所在地开去。所以又开始了扯皮,最后的解决办法是:找我现在的工作单位,开一个政治表现鉴定材料,盖上单位的章。然后给到重庆的社区这边。重庆这边收了我上海单位的材料,他们再开一个给重庆人才,最后重庆人才再开再盖章。搞笑的地方在于,我工作单位只是一个民营企业,居然轮到它来证明我「爱党爱国」。

总之,整个过程就是一层层踢皮球,一层层为自己免责。反正你只要能帮他们找到一个担责任的,让他们开东西就很容易,否则就很困难,塞烟塞钱都不一定顶事。这个规则,熟记于心,以后找政府机关单位办事情就会容易很多。

Chapter Four

开纳税证明的时候,又碰到另外一个棘手的问题。

我到上海后工作的第一家公司,在我离职前几个月,财务出了一些纰漏。那个穿着背心就来上班的老头子会计,不怎么会用 Excel,在报税的时候,把当时公司里所有员工的身份证号码最后三位都给截掉了。于是,我去打印税单的时候,最后那七个月的记录怎么也查不到。

这事儿以前续办居住证的时候就遇到过麻烦。好在当时还能通过人工干预的方式,把我那个被弄错了的以 000 结尾的身份证号码对应的税单给打印出来。办居住证可能要求没那么严格,于是就这样过去了。这次却被卡住了,税务系统的软件大概升过级,身份证号码不合法根本不让打印。而上海负责人才引进审批的这边要求纳税记录一个月都不能缺。

公司办这事的人后悔死了。早知道这么麻烦,当时在我简历上把这几个月给抹了就是了。可现在项目已经批下来,作为项目负责人我的简历也是其中材料之一,要改的话整个得推了重来。基本上是不可能的,于是又得我去搞定这事。

应该说,一开始走了一些弯路。因为不想请假,所以委托父母去办这事。但委托他人就有一个问题:受托的人不知道啥时候该硬啥时候该软,分寸不好拿捏。松江区税务局的不知道哪个混球跟我父母说这事儿错都错了,打印是肯定打印不出来的,改也改不了,得叫我原来单位的财务来打印才行。他们就相信了。

于是我联系原来单位的老板。所幸我们关系一直都不错,我离开后私下也有一些联系。于是派了单位的财务去跑了一趟。这个时候委托他人的第二个问题又浮出来了:你急他人可能感受不到,也不见得会为你尽心尽力地去在某些事情上努力去争取。松江区税务局的人跟那个财务说,你来也没用,打印不了。于是这事就又卡住了。

这件事情上最主要的一个经验教训就是:办棘手的事情,一定要自己出面!

我请了假,亲自跑了一趟松江。在办税大厅里面兜了两圈,我发现二楼有个咨询台,里面坐的是正经的工作人员而不是前台小妹或保安大叔。去那个咨询台问问题的人,总是很快就离开。站在旁边听了一下,工作人员的解答很明确也很专业,似乎对每个问题都早有答案的样子。我觉得,这就是问了顶事儿的人。楼下小妹那边问了可能也是白问。

所以,另外两个经验教训就是:问事情要问对人。多看多听一定没错。

果不其然,我刚把我情况说完,对面就给出了很明确的答复:你这个情况,需要补申报。反正你也是零申报对不对?那就很简单了。balabala……

接下来的事情,说简单不简单,但至少路是变得清晰了。

  1. 在大厅拿一张申报个税的单子。
  2. 因为单子里面的东西太过专业,所以联系原单位的财务,在其指导下填写。一行写一个月的情况,一张表刚好写七个月。
  3. 拿着单子到原来的单位里面,盖个公章。
  4. 联系上原来单位的税务专管员(大妈一个),到对方所在的税务所(在欢乐谷那边,跑死我了),让其签字同意。
  5. 联系原单位的财务,制作报税用的压缩包。复制到自己的 U 盘上(顺便看了看文件格式,土得掉渣。开发这种软件大概真不需要什么技术含量吧)。
  6. 拿着 U 盘和申报单,去办理补申报的事情。我本来以为是到区办税大厅,结果后来被支到某个税务所。反正事能办掉就好。
  7. 如果着急的话,留下自己的电话号码,让对方在补好税之后,打电话通知自己。得到通知之后,就可以去打印出完整的个税缴交凭证了。如果对方不同意打电话通知,拍桌子把他们领导轰出来。纳税人要有点纳税人的样子!

没错,上面那一句也是一个经验。你不欠他们的,他们欠你。当然,如果工资高到不是零申报的话,过程可能会麻烦一点。反正问专业人士就对了。

Chapter Five

以上事情折腾完,春节都过了,已经到了第二年。我本来以为一切都 OK 了,谁知道又有波澜。公司这边的办事人员表示,还缺一些东西,包括:

  1. 我太太的简历,敲她公司的章,还要公司出具一份工作证明。
  2. 婚育证明:我当场表示,去年我还未育,现在我有儿子了。于是让我提供儿子的出生证明。
  3. 我的户口簿和身份证。

好吧,前面两个算是我们对之前那个清单的理解错误。貌似就算配偶和子女不随调/随迁,对方也要拿到所有的证明材料。所幸这些材料我准备起来都没有什么问题。但是过了一段时间我又接到电话,问我户口本上盖的派出所的章和我身份证上的派出所名字对应不起来,是 怎么回事

好吧,由于当时王护士长已经夜奔过了,所以我就在电话里面把他大骂了一通。对方表示充分理解,但还是说因为在系统里面找不到你原来的派出所,所以这事情又没(ka)法(zhu)做(le)。不管我怎么解释都没用。

好在这不算什么大问题,毕竟和前面那些个问题比起来,我在这个事情上完全没有任何责任和过失。最后沟通下来的结果,是让我到重庆新派出所那边去办一个户籍证明,拿到上海来交上去就算了事。

又过了几个月……,真的是几个月,大概审批需要时间吧。大约在八月底,我终于拿到了据说是审批通过了可以去办调动手续了的几份材料:

  • 《迁沪落户确认单》
  • 《调动人员情况登记表》
  • 《调令》(都这样称呼,但实际 Title 不是这个。红头文件,有文号的)
  • 《申报常住户口登记表》

我长出了一口气——终于结束了!

我又错了,还早着呢!

Chapter Six

拿到调动材料之后,我真的是还没高兴几分钟,就被泼了一盆冷水。《迁沪落户确认单》上面写的「从福建省」而不是从「从重庆市」。没理由搞错啊?我提交的材料上,最多只有简历提到了曾在福建省工作,但上一份工作已经是在上海了。户口、身份证、户籍证明、人才中心开的所有材料上面,都没有跟福建省相关的东西。这事更可能是人事局那帮人的工作失误。于是这张单子只好让公司交还给人事局那边重新去修正。

因为只有一份材料上有错误需要修正,所以我本来准备先跳过需要这份材料的步骤,先办下面的事情,至少先把耗时间多的「调档」这桩事给做了。但后来就发现要办的手续其实是一环扣一环的,要调档就会把《调令》原件给收掉。而《调令》在第一步骤「开具《准予迁入证明》」的时候就要用到,于是之好停住等修正完成。由于当时公司有一些人事变动,所以以上材料交到我手上的时候,离开具日期已经又过了快一个月。众所周知这些政府公文都有时效性的,材料上就有注明「有效期 XX 天」。现在又有内容搞错需要重开,这下我的时间就变得很紧张了。

大约又过了两个星期,终于通知我说《迁沪落户确认单》改好了。其实就是拿笔划掉「福建省」然后写上「重庆市」并敲一个更改章。这点工作当然不需要两个星期,但这些政府机关办事效率就是有这么低,特别是在逐级提交的情况下。所以这里又有一个经验教训:赶时间的事情,尽可能自己牵头来主导。

Chapter Seven

材料齐备之后,第一个步骤很快就搞定了。虽然公安分局那边找茬说要看房产证,而我去办的时候并没有带,但当领导被轰出来之后,事情很快就得以解决。这也就是政府混球之所在:手续上或指南上并没有写需要房产证,基层的人想看,于是就要看,领导说可以不看,于是就可以不看。这帮混球压根就没想过,谁才是他们该服务的对象!

但是,在重庆人才那边,老问题又跳出来了。

重庆人才说,你档案里面缺东西(干部转正定级表),不具备「干部身份」,档案可以给你寄过去,但行政关系介绍信我们开不了。
转而咨询上海人才,答曰「行政关系介绍信跟干部身份有什么关系?不是干部还不能调动工作了?你们内地就是搞!」

来回交涉了几次,基调始终是如此。上海说我们这边九几年就取消大学生的干部身份这回事了,现在都市场化就业了,我们这边都开《流动人员介绍信》,你们那边不管什么介绍信,反正要开一个过来,否则你以后社保什么的可能会遇到问题。重庆这边就咬定了我们这边只开过《干部介绍信》,别的没开过不会开也不能开。还拿出一份写着我自愿把档案转走,介绍信不开,转走以后有任何问题都与他们无关的确认单骗我委托办事的人签字。把领导轰出来也没用。

现在平心而论,重庆人才是一坨狗屎。骗人签字这种下三滥的手段也做得出来。当时字都签了,还好我打电话给追回来了。在旁人看来,上海都开绿灯表示愿意接收了,你重庆有什么道理不放人?大家都在猜重庆那边是不是在讨好处费。且不说内地落不落后什么的,薄王等人能够在重庆兴风作浪,怪不得别人。

这事儿最后是这么解决的:我爸亲自驾临重庆人才,脸红脖子粗地把他们领导轰出来,然后让他打电话到上海人才这边沟通,最后双方才达成一致。解决方案是,重庆人才寄出我的档案,同时出具一份证明信之类的东西,大概就是把为什么不能开具行政关系介绍信的原因讲一下,跟着档案用机要件一起寄到上海。如果有类似情况的朋友要参考这个做法,建议让双方人才直接沟通,别的上海人才中心要的东西可能不一样,具体要以对口双方协商达成一致为准。

Chapter Eight

好吧,我一度以为最大的绊脚石已经没了。

实际上,最大的那块,的确是没了,但还有点别的问题。先说说接下来一些手续的办理情况。

办完调档手续,收取 50 元寄费,重庆人才说每周一、三会集中寄一次档案。当时办理的时候是周二,周四再去问,答曰已经寄出了,要大约两周才能到。然后就去派出所开《户口迁移证》,这一步没有遇到什么问题(其实在派出所一直都没遇到什么大问题),接下来就是等档案到上海了。

大约过了一周,我打电话到上海人才。对方告诉我,首先,我的档案还没到,其次,到没到我可以从网上查。找了一下,查询页面原来在 这里

这个页面对于 Chrome 的支持不算太好,不过仍算可用。如果档案到了,会提示存放于哪个人才中心,以及 IC 卡号。能查到这些,就说明档案已经到了。

等档案的时候,我把《申报常住户口登记表》给填了,敲上单位的章。档案到了之后,就带着所有材料(能带的都带上,不想跑冤枉路了,也懒得每次都轰对方领导),去人才中心。人才中心在《申报常住户口登记表》上填写、敲章,收档案保管费,然后开具存档凭证(后面的手续没怎么用到)。人才中心一共就没几个人,中午把门锁起来,大概在睡午觉——唉,算了不吐槽了。

接下来,要带着材料去梅园路人事局那边开《申报户口证明信》。这次又碰到一块绊脚石:打印出来的《申报户口证明信》上面又是写的从福建省调入。修正方式还是和上次一样,笔划掉写上正确的,然后敲更改章。人事系统这一块的事情至此算是完结了。剩下的都是公安系统的事情了。

带上所有材料,到落户地派出所上户口。去照身份证照片,采集指纹,交 20 元工本费。然后户口页就可以打印好了。身份证一个月之后来拿。到这里,整个人才引进落沪的手续,基本算是完成了。其实办这一步的时候,《迁沪落户确认单》的有效期严格说来已经过了。但是一来由于有十一长假在中间,其次也没有超过几天,所以对方没问,我也没提,你好我好大家好才是真的好。

Chapter Nine

最后这一章节,把审批通过之后的所有流程重新整理一下,列个表。供有办理同样手续的朋友参考。网上能查到的这方面信息实在是不算太多。

序号
办理地点
代办*
需要材料**
开具材料
备注
1
落户地公安分局
调令
调动人员情况登记表(收)
迁沪落户确认单
身份证
房产证等
准予迁入证明

2
档案保管单位
调令(收)
身份证
档案(寄出)
行政关系介绍信(寄出)
收取寄费
3
原户口所在地派出所
准予迁入证明
原户口簿(收)
身份证
户口迁移证
收原户口簿中个人页
4
接收档案单位
否***
申报常住户口登记表
调令复印件
身份证
申报常住户口登记表(章)
存档凭证
收取档案保管费
5
梅园路77号819室
不清
申报常住户口登记表(收)
户口迁移证
身份证
申报户口证明信
部分电梯不到8楼,乘坐时需注意
6
落户地派出所
迁沪落户确认单(收)
准予迁入证明(收)
户口迁移证(收)
申报户口证明信(收)
身份证
新户口簿(若有)
房产证
新户口簿
身份证申领凭证

收取身份证工本费
7
落户地派出所
不清
身份证申领凭证(收)
旧身份证(收)
新身份证
上一步骤办理一月之后
*委托他人代办时,应准备好委托人和被委托人的身份证复印件,以及被委托人的身份证原件。
**有些基层办事人员会临时起意要看更多的材料,所以最好是把能带的都带上。如果只能带一部分,建议事先电话或现场咨询好,以免白跑一趟。
***据说必须本人办理,但从办理内容上看没觉得有这个必要性,只是没有去亲自试验。

Chapter Ten

经验教训总结如下:

  • 棘手的事情,尽量自己亲自去现场办。
  • 赶时间的事情,争取自己主导,尽量避免提交后等结果的做法。
  • 多听多看,就算赶时间也不要慌乱。
  • 问事情要问对人,无足轻重的事情可以问保安,关键事情要问专业人士。
  • 多方各执一词时,拉到一起来沟通。中间转来转去你谁也说不服。
  • 能带的材料尽量带,公务员的节操无下限。
  • 中国公务员怕领导,办事难就把领导轰出来说话,最好是有领导不敢惹,保安不敢碰的角色出面(比如我爸)。
  • 赶时间的情况下,尽量选轨道交通 + Taxi,公交车不太靠谱,而且有的站合并了改线了拆了你对地方不熟的话不一定知道。
  • 委托别人办事,一定要明确而仔细地授权,让对方谨慎办事,有意料之外的情况多电话沟通。
  • 办事难很多都是因为怕担责,要化解的话,要么帮对方找到可以推卸责任的「下家」,要么把能担责的人给叫(hong)出来。
  • 税务局办税大厅有免费的纸和复印机用,有些证件你没事多印几张终归是没错的。
  • 公务员跟你说「办不了」、「没办法」,不见得就真的没办法。千万别气馁。如果你觉得这事没啥原则性问题,那么那些公务员只是懒和不负责任而已,一定会有路子的。

2013-09-22

GoAgent 证书问题一例

昨天准备在太太的电脑上用一下 GoAgent,结果发现很多网站都不能用。很奇怪的是,Twitter 页面能打开,但 CSS / JS 看起来基本上都不对。而在我自己的电脑(LAN 内部)上却是好的。所以很明显是 Local 而不是 Network 的问题。
看 GoAgent 控制台上的日志,问题似乎跟 SSL 的连接建立有关系。再把 Chrome 的「审查元素」功能打开,Console 里面一堆错误。随便挑了个页面试图打开,好了,这下清楚了,证书有问题。
看了看 GoAgent 的官方 Q & A,基本上只提到说证书需要导入。很多在网上问这类问题的人,得到的也是类似回答。但问题在于,证书的导入是没有问题的,重新导入也没有效果。而且并不是所有网站都不能通过 GoAgent 代理。

其实问题很简单:GoAgent 仿冒的证书被占用啦。
官方其实也提到过这个事情:
因为 GAE 平台限制,没法支持真正的 ssl 加密,goagent 只能通过伪造证书的方式做到代理 ssl 加密的网站,这个证书就是用来欺骗浏览器的。
GoAgent 实际上相当于一个「中间人」。当访问 HTTPS 站点时,就得采用 SSL 中间人攻击的类似方式,才能完成代理的工作。SSL 中间人攻击怎么弄?导入受信任的根证书,然后利用这个根证书签发的证书把内容拆开后重新组装、加密、封包,骗完甲方骗乙方,欺骗通讯双方。否则两端任何一方觉得这内容不对劲,SSL 传输就会失败。这其实也就是为什么必须要干掉 CNNIC 相关的根证书的原因

所以,对于每一个 HTTPS 站点,GoAgent 都会生成一份用自己根证书签发的数字证书。看看 GoAgent 的 local 目录下,如果访问过 HTTPS 站点,则一定会有一个 certs 目录。这生成的证书,就放在这个 certs 目录下。其实一看这个目录里面都有些什么文件,就很明白了:
这次的问题在于,GoAgent 有不同的版本,其携带的根证书也是变化过的。至少我机器上随便打开 CertMgr 就见到了五个不同的版本:
如果升级的时候不把 certs 目录清空,就有可能会有部分站点对应的证书还是以前的老的、用旧的根证书签发出来的。GoAgent 客户端一看,噢,证书已经有了,就不再重新生成了。但 Chrome 觉得证书不对,于是 SSL 握手就被挡了。

解决办法很简单,每次升级 GoAgent 的时候,把 local/certs 目录删掉。或者干脆每次用新目录来升级好了。

2013-09-21

自己给 iOS7 升级下载加速

通知出来了好几天了,今天准备给太太的手机升 iOS7。于是先把 iTunes 升到 11.1(下载速度还不错),然后连上手机。一检查,嗬,1.19G,告诉我下载要 18 个小时。
按照惯例,打开 IE 设上代理,准备用 GoAgent 加速。现在估计用时只要不到一个小时,完全可以接受。
但是担心的事情来了,免费 GAE 的每个 AppID 有 1GB / 天的流量限制,而我的 GoAgent 没能及时切换到下一个可用的 AppID,结果 iTunes 这边报了个错,然后下载又重新开始了。没想到这 iOS 升级包的下载居然不支持断点续传。我又试了下,哪怕是手动点「暂停」,也没法进行续传,每次下载都会重头开始。看来这乔布斯死了之后,苹果真是要没落了。

接下来的时间,我考虑了以下解决方案:
1. 开 VPN:可手头上的 VPN 速度都跟直接下载差不多。何况有些 VPN 还有流量限制。不肯花钱的后果就出来了。
2. 找代理:手头上没现成的。不管是去搜 Google 还是开 ProxyHunter 都得花时间。懒得去找了。
3. SSH Tunnel:目前手头上访问起来快一点的只有台 H3C 的交换机,大概是深圳的地址。不过 SSH 没开,要想架隧道还得要我去帮它开。由于担心被抓去集中营活摘器官,并且从这台交换机到 appldnld.apple.com 的 ping 值并不好,所以最后还是放弃了。

最终,还是自己找了组 appldnld.apple.com 比较快的地址,解决了这个问题。100ms 左右的 ping 值,偶尔丢包。放在 hosts 里用上去之后,显示的估计用时也是不到一小时,跟开 GoAgent 加速的效果相当。那就先这样用吧。话说这苹果的 DNS 设置咋自己就解析不到这组地址上去呢?是我 RP 问题?

2013-09-10

写了个批量测试服务器 Ping 值的小工具

不时有人问我要 hosts,但是很多时候也不敢贸然的给。担心泄漏是一方面。另外一方面,我这边可以用的 hosts,在别人那边可能用不了。我这边用起来很快的 hosts,在人家那边可能像乌龟爬。叫别人 ping 一下当然不是什么太麻烦的事情,但如果连试好几个 IP 都不行,有时候也是很头大的事。效率也很低下。

因此想,要是有个能批量 Ping,并且能很容易看到输出结果的工具,就好了。用批处理做个批量 Ping 是很容易的,但结果并不是特别一目了然。于是干脆自己动手做了一个。
启动时会加载当前目录下的 server.list 文件,文件中每行写一个地址(这几个地址有些人可能一看就知道是什么东西了)就可以了。写域名也是可以的,但我这里输出结果中并不包含域名解析的结果。
目前只打算简单做成这样,反正只当小工具用用。如果觉得网络不顺的时候,就启动起来跑一跑看看。然后也可以把一堆 IP 丢给别人自己校验去。

有需求的朋友可以去拿来用下。工具的下载地址:Dropbox镜像 Mega下载页面
为了减少 CRT 依赖性,上面的发布版本是静态链接的。如果想用动态链接版本,或者担心木马、病毒什么的,就下载下面的源代码自己编译吧。VC6 就可以。反正自己也没写多少代码,许可证什么的就懒得去弄了。
源代码下载地址:Dropbox镜像 Mega下载页面

2013-09-09

斯诺登关于 NSA 解密能力爆料的解读

斯诺登最近大概向媒体爆了些料,有不少人被吓着了。比如这篇 文章 一开头就这样写道:
美英三家媒体联合报道称,美国情报机构通过向企业产品注入漏洞等手段,破解 HTTPS、SSL、VPN 等全球互联网主要加密技术,实施监听;美国国家情报总监克拉珀回应称此事「不是新闻」
看起来很吓人对吧?HTTPS、SSL、VPN,这些几乎是我们日常用得最多的翻墙技术手段。如果 NSA 能搞定,那么墙国要山寨过来也就只是时间问题。很多看到的人就是这样推理的。
那么,到底是不是真的有那么吓人呢?

个人觉得,财新网这篇文章的摘要,写得相当的不严谨。不过国内的媒体一贯习惯博人眼球,这样写也很正常。其实如果能认真读完全文,大概不至于被吓得不敢上网。相比之下,《纽约时报》的一篇 报道 就要更为准确一些:
最新披露的文件显示,美国国家安全局(National Security Agency,简称 NSA)在长期的加密技术秘密战争中占了上风,它利用超级计算机、技术花招、法院指令和幕后劝说,对互联网时代保护日常通讯隐私的主要工具造成了损害。
这段话里面,明确提到了这么几个手段,我觉得基本上可以比较准确地概括全文的内容:
  • 超级计算机:也就是硬来,霸王硬上弓,利用超级计算机 + 分布式计算的强大计算能力,暴力破解猜密码。这个没啥好怕的。你要是能让政府动用举国之力来对付你,你大概也不会因为这些事情而害怕了,多少会是个英雄 / 领袖什么的吧?换句话说,要是在中国,找几个人把你关起来拷问,大概成本会低很多,估计也更合领导的意。不小心弄死了参照 李旺阳 处理就行。
  • 技术花招:也就是第一篇文章所提到的,利用(甚至主动引入)产品、协议、服务的漏洞,或者植入软件 / 硬件木马,试图在加密前或解密后获取到信息。既然是叫做「花招」,那么就是一些旁门左道的东西,有用是有用,但并不是说整个 Internet 的安全体系就此崩塌了,防漏堵缺就可以了。
  • 法院指令:要求企业交出密钥或解密后的明文,或者获得访问权限。在美国这算事儿,在天朝大伙儿应该都习惯了吧?没什么好害怕的。
  • 幕后劝说:相对于「法院指令」,其实也就是红脸和白脸的区别而已。我觉得在天朝根本不需要什么「幕后」劝说。所以也一样,没什么好怕的。
所以,看吧。NSA 也不是说真的拥有了什么颠覆性的力量。现有的 Internet 安全体系还在,强如 NSA 也只能绕着边儿想办法。谍报机关嘛,真逼急了啥办法不会想?真没必要自个儿吓自个儿。

2013-09-06

一例 C000001D 错误的分析

公司客服收到用户反映,说我们的软件使用到某个功能的时候,报了一个错误。错误信息只有「External exception C000001D」这么一段文字。

搜一下 C000001D,很容易就能知道对应的含义是 STATUS_ILLEGAL_INSTRUCTION,也就是说程序使用了当前 CPU 所不支持的指令集。我们自己的程序并没有使用太新的指令集,但有一些第三方的接口库可就未必了。由于功能基本上是计算密集型的,所以这些第三方的库如果没注意编译开关,完全有可能造成这种情况。

让客服电话采集了一下用户的硬件信息,果不出所料:AMD Athlon XP 3000+。根据维基百科的 资料 显示,2003 年面市,这是一款可以称得上老旧的 CPU。支持的指令集:MMX、SSE、3DNow,并不算多,关键是没有 SSE2

为什么会怀疑到 SSE2 上面呢?因为前不久刚看了一篇博文,说 Win8 需要 CPU 支持 SSE2 才能安装。这说明 SSE2 所能提供的,已经几乎是现在开发的新软件所必需的基本能力了。另外很多编译器已经默认把 SSE2 优化给打开了。也难怪——这年头,还有谁在用 Pentium III 吗?

总之,合理怀疑之后,先来看看是不是这么一回事。这种事情如果要通过正常途径去沟通,不见得效果好。说不定那个当初负责编译出这个库的程序员早换工作了。就算人还在,编译选项和指令集之间的关系搞不清的程序员大有人在。问还不如自己动手看。以下是用 dumpbin 对其中一个第三方 DLL 库反汇编出来的某个函数的部分代码:
1001314E: 66 0F 6F 06        movdqa      xmm0,xmmword ptr [esi]
10013152: 66 0F 6F 4E 10     movdqa      xmm1,xmmword ptr [esi+10h]
10013157: 66 0F 6F 56 20     movdqa      xmm2,xmmword ptr [esi+20h]
1001315C: 66 0F 6F 5E 30     movdqa      xmm3,xmmword ptr [esi+30h]
10013161: 66 0F 7F 07        movdqa      xmmword ptr [edi],xmm0
10013165: 66 0F 7F 4F 10     movdqa      xmmword ptr [edi+10h],xmm1
1001316A: 66 0F 7F 57 20     movdqa      xmmword ptr [edi+20h],xmm2
1001316F: 66 0F 7F 5F 30     movdqa      xmmword ptr [edi+30h],xmm3
10013174: 66 0F 6F 66 40     movdqa      xmm4,xmmword ptr [esi+40h]
10013179: 66 0F 6F 6E 50     movdqa      xmm5,xmmword ptr [esi+50h]
1001317E: 66 0F 6F 76 60     movdqa      xmm6,xmmword ptr [esi+60h]
10013183: 66 0F 6F 7E 70     movdqa      xmm7,xmmword ptr [esi+70h]
10013188: 66 0F 7F 67 40     movdqa      xmmword ptr [edi+40h],xmm4
1001318D: 66 0F 7F 6F 50     movdqa      xmmword ptr [edi+50h],xmm5
10013192: 66 0F 7F 77 60     movdqa      xmmword ptr [edi+60h],xmm6
10013197: 66 0F 7F 7F 70     movdqa      xmmword ptr [edi+70h],xmm7
1001319C: 8D B6 80 00 00 00  lea         esi,[esi+00000080h]
100131A2: 8D BF 80 00 00 00  lea         edi,[edi+00000080h]
100131A8: 49                 dec         ecx
100131A9: 75 A3              jne         1001314E
SSE2 的指令集可以参见 这里。其实看到 movdqa 就已经很明白了。这个 DLL 库的确用了 SSE2,那么,报错就是很正常的事情。

在分析这个问题的时候,我花了一点时间,希望能找到一个能够列出程序所使用的指令集的静态分析工具,但没有找到答案。当然,就这次的情况而言,我能通过 XMM 寄存器很容易地找到并筛选出 SSE2 的指令。但要是能有一个自动化工具,就更好了。也许还是有这种工具的,只是我目前还不知道吧。如果有谁知道,还望不吝告知。

2013-09-05

GAE 升级 Python27 折腾手记

Google 把 GAE 的 Python 运行环境从 2.5 升级到 2.7,已经有好一些日子了。因为只扔了自己的两个小小的应用在上面,所以一直没去处理。最近总算有些时间,于是把这个折腾完了,还很花了一些工夫,特记录一下。

去看了 GAE 的在线文档。中文的文档是只有 2.5 的部分,繁体中文也只是对 2.7 给出了一个链接而已。技术方面的东西还是直接参考 英文资料 来得好。

具体的做法,官方文档上写得很清楚,就不在这里说了。但是我的升级过程并不是很顺利。最后总结一下有这么几个问题,供大家参考:
  • 按照文档,app.yaml 里面的 handle script 要从 .py 改成 .app,但千万别手贱去把 .py 文件真的改名成 .app。其实只是 app.yaml 里面要改而已,文件还得是 .py 为后缀名。
  • app.yaml 中还要引入 webapp2 这个 library,这个在官方文档中没有明确地指出。具体写法是:
libraries:
- name: webapp2
  version: "2.5.1"
其实 version 可以写 latest,但要承担最新库无法向下兼容的风险。
  • 要更新就索性别留旧版(Python 2.5)的程序在 GAE 上,否则页面顶部的警告一直会有。
其余过程还算顺利,至少升级到 2.7 算是成功了。

2013-08-29

推荐几个对青少年有教育意义的老 PC 游戏

前言
青少年玩游戏,很容易被家人说成是「玩物丧志」。不可否认,现在绝大多数的游戏,不论是单机还是网游,其目的不外乎都是娱乐消遣发泄。其实我也认为,如果一个游戏不是为了让人玩,而是为了教育人,那么不可能是好游戏。不过,的确有那么几个游戏,有一点不同。

通常而言,所谓「有教育意义」的游戏,一般是指那些专门为了教育目的而生的游戏。特别是对于幼儿,这类游戏有很多。另外,有一些游戏,也打着所谓「寓教于乐」的旗号,——虽然实际上两者可能都做不到。
我觉得,真正有教育意义的游戏,首先要是一个优秀的游戏,从娱乐的层面的优秀。其次,如果这个游戏能让人在玩过爽过之后,有一些别的收获,那么就算是有教育意义了。
另外,这种游戏还应该具有一些特质:
  • 不容易让人沉迷:从游戏的层面来看,能让人沉迷其中对它是好事。但如果在它上面耗费了太多精力和时间,所谓教育意义就被抵消了。一个标准就是,要有始有终。开始便能很快引人入胜,结束后也不会让人过多的留恋于其中不能自拔。
  • 难度不高:如果大量的时间花在攻克难关上,就算游戏本身吸引人,但也很可能让一部分人知难而退或半途而废,所谓教育意义也就达不到了。
  • 健康向上的剧情和心态:游戏传递的,至少不应该是负面的情绪。积极、活泼、开朗、乐观、淡定泰然、不惧挫折、适当的自我调侃与解嘲、自然的正义感,等等。
  • 丰富的知识性:不是专门的教育类游戏,自然不会全部围绕知识性来构建剧情。但游戏中至少要让玩家能接触到平时接触不到的知识。日本光荣 KOEI 就在这方面做得非常好!
以我二十余年的经验,推荐一些这类的游戏给青少年玩家:

大航海时代Ⅱ
其实 KOEI 的游戏在知识性上一贯都做得非常不错。只是,我觉得有必要把这个游戏单独拿出来提升到另一个高度。因为它对我的世界地理的帮助实在是太大了。
全世界的大城市,大港口占了相当一部分,而找到并访问这些港口,是你游戏中几乎是必须完成的任务。为了找到某个地方,你得学会经纬度是怎么回事,然后还得搞一张世界地图,根据经纬度在地图上查到大致位置,然后在游戏中才能比较容易地发展剧情。幸好当时我家里墙上刚好贴了一张世界地图。
游戏中的地图当然不是完全真实的,但大致差不多。并且在航行过程中还会遇到海流、风向等问题。想远航美洲大陆?要是找对航路和时间,就会变得比较简单。那么当地理课讲到洋流和信风的时候,一下子就懂了。
另外,游戏对于历史也是有一定帮助的。虽然剧情不是真正的历史,但那个时代的一些东西还是依稀可见。各地的风土人情也刻画得很不错。这些甚至体现在了游戏的配乐中。
值得一提的是,尽管游戏中城市名称的某些译法不是很习惯,但也正好避免了学地理之类课程时背字不背义的问题。莫三比克和莫桑比克这种区别,相信一眼就能看得出来。并且,给船命名的时候,能够认识并熟悉很多繁体字。我一直到现在都能记得「號」字有十三划。
推荐给想了解世界的青少年。

Museum Madness
和别的不同,这个游戏我觉得本来就是一个「专门为了教育目的而生」的游戏。一个博物馆被病毒入侵然后 Madness 了,管理机器人找一个小孩子求救,然后他们一起去每个馆把搞乱了的东西复原回来。每个馆都有至少一个谜题需要解答,有的是拼图,有的是 AVG / RPG 性质的对话 + 选择,有的是玩一个小游戏,等等。在解答谜题的过程中,会穿插着对科学、历史等的说明,博物馆嘛。
推荐的意义在于:
  • 英文游戏,但英文难度不高,对话文字可以慢慢读,适合国人学习英语。
  • 可玩性不错,流畅度很好,谜题难度也适中。大部分地方不会英文也不会卡关。
  • 科普的知识还真不是小学 / 初中阶段所有人都知道的,看看也不错。
另外,现在看到这个游戏,我就想起了《博物馆奇妙夜》。真的是挺好的感觉。中国的历史更加悠久,但就出不来这种片子,也出不了这等游戏。
推荐给想加强英文阅读的青少年。游戏可以从这个地方 下载 到,点那个 GET IT 就可以。

轩辕剑外传——枫之舞
作为 VGA 时代 320×240 分辨率下的代表性巨作《轩辕剑Ⅱ》的外传,个人认为比原作更富教育意义。《轩辕剑Ⅱ》其实也挺值得推荐的,主要在于其对于中国传统文化——水墨山水、以及《山海经》中内容等的完美展示。而《枫之舞》在剧情和人物方面胜出。
剧情几乎都是虚构的,对历史没有太多帮助。但游戏里的不少人物都是确有其人。随着剧情发展,反派浮出水面,似乎一切都只是一个做得不错的 RPG 而已。然而,精髓来了——最后的大反派,并不是真正意义上的「坏人」。
这也是我日后尊敬 Falcom 的一个原因之一。很少有人愿意像动画片里面一样,真正甘心做一个彻彻底底的坏蛋。纵然是所谓「坏人」,也有他自己的理想。他只是在自己的实践中出了问题。不把「好」、「坏」绝对化,留给看完结局之后的玩家一点思考的空间,是这个游戏与普通的打来杀去最大的不同。
另外,游戏中主人公的对待生活、世事的态度,让我很羡慕。悠然自得,但又充满正义感。谦恭有礼,但又不时玩俏皮。自己从未做到如此。
推荐给想要成熟一点的青少年。

银河英雄传说Ⅳ
这个游戏本身也算得上是精品。但是推荐的其实不是游戏本身,而是游戏对应的文学作品。
《银河英雄传说》这部架空历史小说(不是指动画或漫画),我认为是一部对于青少年来说非常棒的三观纠正入门级教材。我认识的很多人,都是从接触它开始,慢慢学会了独立思考。对于国外的小孩,或许这方面不是问题,但对于被洗脑残害了十余年的可怜人,能有机会接触这么多不同的思想真的是太好了。

小说本身是很优秀的,但在这里就不详谈了,感兴趣的可以点 这里(需「科学上网」)。而游戏值得推荐的地方在于——它非常忠实于原著。不少语句都是从原著中一字不漏地照搬过来的。这也保证了那种原汁原味的感觉,甚至连作者的写作风格都能体现在游戏中。这使得对游戏感兴趣的玩家能够有兴趣去翻阅原著,进行更深层次的思考。而对游戏不感兴趣的玩家可能就很难对原著感兴趣。实际上起到了一个引荐和筛选的作用。
推荐给希望开始思考人生的青少年。

后语
个人以为,这就是所谓的精品中的精品了。只是可惜,这少数的几个能够真正做到「寓教于乐」的游戏,基本都是目前看来很「老旧」的游戏。也许是现在的所谓「新」游戏还没有足够的时间来检验,但又也许是现在的游戏已经不追求这种目标了。看到现在的网游都是用来赚钱的,我看我还是死了这条心吧。

为避免版权问题,本文所有图片均来自 Internet。

2013-06-28

Blogger 上的博客如何提交完整的 Sitemap

Blogger 现在可以输出 Atom 1.0 和 RSS 2.0 两种版本的 feed(参见 官方说明)。不过无论哪种 feed,都只包含最多 26 个 Post。

对于通常的 feed 订阅而言,最新 26 个 Post 应该是足够了。反正 RSS 阅读器只需要最新的那几个 Post 就行。但对于想把站点的 Sitemap 提交到 Google 的 网站站长工具 去做 SEO 的情况,26 个 Post 就太少了。既然是 Sitemap,当然希望是全部的页面了,那么有什么办法呢?

这里有个老外的 页面,说明了一种办法。大致说起来就是,Google 在提供 feed 订阅的 URL 中,还有两个未公开说明的参数:start-index 和 max-results。前者表示这次的 feed 输出从哪个(序号的)Post 开始,后者表示这次最多输出多少个 Post。于是如果要提交超过(默认的)26 个 Post 的 Sitemap,就可以用类似下面这种:

http://blogname.blogspot.com/feeds/posts/default?alt=rss&max-results=500

不过,看起来 max-results=500 应该是一个上限。本人是没有那个条件去试了,博文数量差着一个 0 哩!对于博文数量超过 500 的情况,上面那个老外的博文中也提到了一个办法,就是分段提交 Sitemap。比如:

http://blogname.blogspot.com/feeds/posts/default?alt=rss&start-index=1&max-results=500
http://blogname.blogspot.com/feeds/posts/default?alt=rss&start-index=501&max-results=500
http://blogname.blogspot.com/feeds/posts/default?alt=rss&start-index=1001&max-results=500
……

反正这些页面是都提交上去了,Google 会自己把它们合并起来的。

2013-06-27

自己写了个帮助快速替换 hosts 的工具

替换 hosts 对于会的人而言并不是一件复杂的事情。不过仍然稍嫌繁琐:目录本来就比较深,还要涉及到文件复制和改名。稍一不留意还有搞错掉的可能。

两个月前,我终于无法忍受了,自己写了一个批处理来解决这个问题。人容易出错,人会烦,机器不会出错——如果你程序写对了的情况下。作为程序员,就应该有自己动手丰衣足食的觉悟。因此就有了 SetHosts.bat 的第一版:
@echo off
pushd %SystemRoot%\system32\drivers\etc\
copy /y %1 hosts
popd
只这样显然是不够的。在命令行下敲指令,这不是我的初衷。虽然 Windows 的 Drag & Drop 可以省很多事情,但我还想做得更多。把这个 BAT 注册成某个特定后缀的文件的默认打开程序不是很好吗?这样以后直接双击文件就可以完成替换了。

于是当时我自己用 regedit 在注册表上填写了关联文件打开方式的相关信息。现在我可以双击 hosts_cn.fkw 或 hosts_us.fkw 来快速地应用某个我事先准备好的 hosts 文件了。
应该说,自己用用,这样是足够了。不过我还想做的更好一点。让程序自己完成这个填写注册表的过程,不是更好吗?于是有了 SetHosts.bat 的第二版:
@echo off
if {%1}=={} goto install
if {%1}=={/u} goto uninstall
if {%1}=={/U} goto uninstall
pushd %SystemRoot%\system32\drivers\etc\
copy /y %1 hosts
popd
goto :eof
:install
set MY_TEMPREGFILE=%TEMP%\temp.reg
set MY_SETHOST=%~f0
set MY_SETHOST=%MY_SETHOST:\=\\%
echo Windows Registry Editor Version 5.00>%MY_TEMPREGFILE%
echo.>>%MY_TEMPREGFILE%
echo [HKEY_CLASSES_ROOT\.fkw]>>%MY_TEMPREGFILE%
echo @="Fuckwall.Hosts">>%MY_TEMPREGFILE%
echo [HKEY_CLASSES_ROOT\Fuckwall.Hosts]>>%MY_TEMPREGFILE%
echo [HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell]>>%MY_TEMPREGFILE%
echo [HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell\edit]>>%MY_TEMPREGFILE%
echo [HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell\edit\command]>>%MY_TEMPREGFILE%
echo @="\"C:\\Windows\\Notepad.exe\" \"%%1\"">>%MY_TEMPREGFILE%
echo [HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell\open]>>%MY_TEMPREGFILE%
echo [HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell\open\command]>>%MY_TEMPREGFILE%
echo @="\"%MY_SETHOST%\" \"%%1\"">>%MY_TEMPREGFILE%
regedit /s %MY_TEMPREGFILE%
del /q %MY_TEMPREGFILE%
set MY_TEMPREGFILE=
set MY_SETHOST=
echo 处理程序安装成功
echo 您可以双击后缀名为fkw的文件来直接更换hosts
echo.
pause
goto :eof
:uninstall
set MY_TEMPREGFILE=%TEMP%\temp.reg
echo Windows Registry Editor Version 5.00>%MY_TEMPREGFILE%
echo.>>%MY_TEMPREGFILE%
echo [-HKEY_CLASSES_ROOT\.fkw]>>%MY_TEMPREGFILE%
echo [-HKEY_CLASSES_ROOT\Fuckwall.Hosts]>>%MY_TEMPREGFILE%
echo [-HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell]>>%MY_TEMPREGFILE%
echo [-HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell\edit]>>%MY_TEMPREGFILE%
echo [-HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell\edit\command]>>%MY_TEMPREGFILE%
echo [-HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell\open]>>%MY_TEMPREGFILE%
echo [-HKEY_CLASSES_ROOT\Fuckwall.Hosts\shell\open\command]>>%MY_TEMPREGFILE%
regedit /s %MY_TEMPREGFILE%
del /q %MY_TEMPREGFILE%
set MY_TEMPREGFILE=
echo 处理程序反安装成功
pause
goto :eof
这下不仅注册有了,注销(反安装)也有了。以后看到 fkw 后缀的文件,就可以快速地 Fuckwall 了。……于是今天方校长就请病假了。

如果整代码有困难,那么可以从下面两个链接之一进行下载:
Dropbox: https://dl.dropboxusercontent.com/u/44933633/SetHosts.bat
Mega: https://mega.co.nz/#!Bhx2yYoR!ElR26mi-iGqx5WU3YJks8ViINKEE_wlv1Y32Mil6UEU

2013-05-09

赶一下白宫请愿的早集

最近关于白宫请愿的话题很火,在其光环作用下,飘猪老鼠林昭神马的很快就过气了,连京温还没怎么热就已经要温了。我也想就这个事情说上几句,免得后面喋喋不休。

有意无意中看到知乎上的某个问题的一大串回答让我是又好笑来又好笑。很多人连白宫请愿是怎么回事都没搞清楚,就开喷。我们先来看看人家的 Introduction。需要注意的是以下这句:
If a petition gets enough support, White House staff will review it, ensure it’s sent to the appropriate policy experts, and issue an official response.
我替不懂英文也不知道 Google Translate 的同志翻译一下:如果一份请愿得到足够的支持(票数达标),白宫工作人员会审读,确保它会被发送给适当的政策专家,并给出一个正式的回应。

所谓正式的(或者说官方的)回应,也可以是「这个问题不在联邦政府职权范围内,我们无能为力」这种。这只是一个政府与民众互相沟通的渠道而已——人家说得很明白,一个工具。外国人办事比较认真,回复不像我们这边这样马虎了事。但人家也并没有义务一定要给出某个特定的回答,更不是某些人理解的「票数达标就得照我说的做」——说实话,我真怀疑这种智商属于人类吗。

实际情况是,如果票数没有达标,请愿根本不会到白宫工作人员那边。系统自动把它归档(Archive)了。FAQ 上说得更直接——Remove。当然,我并不怀疑一毛们的刷票能力。不过,别忘了人家还有 Moderation Policy。另外,每个请愿的页面上,都有着红色的 Report this Petition as Inappropriate。出于尊重读者智商的缘故,看到这里的我就不翻译了。

事实上,一毛们的搅混水行为,对白宫或白宫网站甚至都形不成什么有效的骚扰。条款规定,多份陈情可以用一份回应来应对。要是垃圾请愿多得厉害,还可以把适度条款搬出来。
骚扰行为更主要的意义,在于向国内民众展示类似这样的意思:「看,白宫网站是搞笑用的。」以期阻止将来的更多请愿可能会对干部子女和家属造成的实质性威胁。题外话戳一句:小的们真是太体恤太懂事了。大王叫伊去巡山,伊把山上的屎都给吃了。

具体在眼下这个环节,我希望能阅读到这里的读者在将来能做这样两件事情:
  1. 对于有意义的请愿,在自愿的前提下,投上自己的一票。足矣。
  2. 对于无意义的请愿,不投票,并且举报。这也算意见表达,别给脑残和一毛留情。
我相信,看到这里的读者都是有足够判别能力的。不再啰嗦了。
不过我还想对某些人说一句:注意你们的 IP 地址,别老用 61398 的。你们没看见外交部发言人每次都满嘴的沫吗?

2013-05-05

让 GoAgent 直接使用自己指定的 Google 服务器 IP 地址

一直很疑惑,为什么 proxy.ini 中把 [google_cn] 下面的 hosts 改成了自定义的 IP 地址,但日志中显示 GoAgent 客户端还在寻找其它的 Google 服务器 IP,并试图作为 GAE 代理进行连接。


因为一直都算还能用,所以就没下决心来解决这个问题(发现自己真的很懒)。但最近 GoAgent 客户端自己找到的IP越来越不靠谱,有时候甚至会导致一半左右的请求都会被重试,实在是太浪费时间了。而且第一次使用的时候 DNS 解析导致的等待也让人很不爽。所以终于决定来看看到底是怎么回事。

一看代码就明白了,问题很简单:GoAgent 客户端针对 [google_cn] 这个 Section 有特殊行为。它会去从 www.google.cn 和 www.g.cn 这两个域名进行解析得到 IP(好像会无视 proxy.ini 中自己设的地址或 IP),然后进行建立 SSL 连接的测试,根据测试情况决定是否切换到 [google_hk](这又是一个特殊行为)。

这种做法,对于初级用户可能会比较适合。但如果想自己控制 GoAgent 客户端使用哪个 Google 服务器 IP,最好是另外开一个 Section,比如 [google_cn2] 或 [google_us] 之类。这样就不会碰到代码里面预设的这些特殊行为了。

PS: 以上内容基于 GoAgent 2.1.11 / 2.1.15 测试。

2013-04-10

修改 GoAgent 客户端以支持 Mega

为了能用来访问 Mega,对 GoAgent 客户端代码做了略微的修改。不过首先要说明一下为什么会有这个修改。

Mega 是个总部位于 New Zealand 的网盘服务。服务器当然全世界都有,但至少在我这边 ping 值不好。严重的时候 600ms 以上,并且丢包。这样的话,不管本地有多少带宽,实际上也是不可用的。总不可能花上一整天的工夫来传一个 ISO 吧。
开着 VPN 会快,但流量和费用都是问题。于是很自然地想到了是否可以通过 GoAgent 之类的 GAE 代理来访问。Google 服务器与 Mega 之间的带宽应该是不成问题的,而 Google 服务器与我之间的速度也是我可以在一定程度上控制的。不过测试下来发现 GoAgent 不支持 OPTIONS 这种 HTTP Method,而且这个局限性是 GAE 导致的。GAE 只支持GET / POST / HEAD / POST / DELETE 这五种 HTTP Method。偏偏 Mega 在登录和上传下载的时候都会发 OPTIONS 请求,于是这个方案一度被搁置了。
后来 Mega 的速度进一步下降,有时候一整天都传不完一个 100M 的文件。于是这个方案又被我拿出来考虑。这次我准备绕开服务端的限制,直接从客户端下手。OPTIONS 请求涉及的数据量是很小的,文件传输用到的 CONNECT 之类才是主要的带宽压力。因此可以让客户端在遇到 GAE 服务器无法处理的 HTTP 请求时,直接将其发到目标服务器。由于 Mega 目前还没有被 GFW 给 IP 黑洞,因此应该可以在一种「混合模式」下被通过 GoAgent 访问到。

下面介绍一下修改方法,以 GoAgent 2.1.15 版(2.1.17 还需要服务端改动才行)为例:

首先在 local/proxy.py 中找到这两行:
"""rules match algorithm, need_forward= True or False"""
need_forward = False
第一行是注释。而下面这个 need_forward,就是用来控制是否把一个请求直接送出(FWD),而不是送去 GAE 服务器进行中转。

在后面的 if 语句前,加入这样的内容:
if self.method != 'GET' and self.method != 'POST' and self.method != 'HEAD' and self.method != 'PUT' and self.method != 'DELETE':
    if host not in http.dns:
        http.dns[host] = list(set(http.dns_resolve(host)))
    need_forward = True
非 Python 程序员也应该很容易读懂这段代码,不过要提醒一下:Python 中缩进是很关键的,改代码时一定要用空格正确地缩进。
最后,别忘了把下面那个原来的 if 改成 elif。

这样改过之后的 GoAgent 客户端,在遇到 GAE 服务端不能处理的那些 HTTP 请求类型时,就会把它们直接发到目标服务器上。
从理论上讲,这个小修改不会对 GoAgent 的翻墙能力有任何的增加,但可以让它具有更大的适用范围。一些原来不能用 GoAgent 访问的站点(比如上面提到的 Mega),现在可以用它来访问了。GAE 的流量按天计算(VPN 一般按月,VPS 也是)。并且因为可以使用多个 GAE 账号,因此流量基本上是免费且无限的。Mega 那 50GB 的大空间,终于具有一定的可用性了。

2013-04-08

论天赋与竞争

今天偶然谈到一个话题。我发现,一个健康、聪明的宝宝,能够给爸妈省下非常多的钞票。换句话说,这就是体能、智能在生存竞争上的优势的具体体现。
只是,我觉得,原始社会的时候就是这个游戏规则,到现在咱们还是这个规则,这个社会体系是不是建设得太失败了一点?

我总觉得,人类社会发展到现在这个阶段,从技术或生产力上讲,应该已经有能力解决成员的基本生存问题(温饱)了。那么,区分成功还是失败,或者说人们奋斗的目标,应该是看一个人能不能实现自我的价值,做自己想做的事。有的人可能不擅长打猎,有的人不会种田,但是他可能会唱歌,这可以使他人愉悦。不需要一个人什么都会。即使他不会任何直接产生食物的技能,也不会饿死。社会化分工,这就是人类社会出现的意义。

在社会形态发展还不完善的时候,可能有的人还是会有生存问题。艺术家要是画卖不出去,也会有生计问题。所以这才需要社会形态继续发展。一方面生产力要更高,才能有足够多的资源来供养这些不直接生产生活资料的人。另一方面,需要保障制度的逐步建立,需要合同方式的完善,来消除因为成员个体的分离带来的沟通上的问题。——无论政治还是经济,本质上都是在解决沟通问题。

一个能够保障个人基本权利(包括生存权)的社会,才能更好地保障多样性。否则世界上将只存在猎人和农民,人类社会也就不会再进步。基因需要多样性,社会成员同样需要多样性。即使是所谓人渣,也有他存在的意义和价值。所谓的天赋,包括体能、智能,乃至于道德上的高低,都不应该成为淘汰个体的理由。

我并不是说天赋不应该有优势,而是说这些天赋上的(貌似)弱者不应该必然被淘汰。丛林法则是一种自然状态下低等级的演化规则,其重点是「适者生存」。而既然是「适者」才能生存,那么其演化所产生的结果必然越来越趋向于适应某一种特定的环境。一旦环境发生非常大的改变,或者说「游戏规则改了」。那么演化的结果就可能会变得毫无意义,甚至整个种族都会有危险。而其原因就是,本来也许能适应新环境的成员,在之前的演化中被无情地淘汰掉了。

我们人类是(目前看来)有一定智力的种族,也希望能拥有其它动物所不具备的改变自身命运的能力,那么就一定不能按照动物的演化规则来生活。所以我觉得,如果一个现代社会里面,成员还要为了基本的生存条件而奋斗,要像动物一样靠天赋进行生存竞争,这个社会的设计和演化是失败的。

不过也许这个社会中有一部分成员就是想让其他人活得像动物,弱肉强食。谁知道呢?!

2013-04-03

也谈「量刑要适度」

看到有的人在说什么「量刑适度」,真心觉得搞笑。
这种人,就是把公权和私权混为一谈分不清的那类人。

要动用公权力侵犯私权时,疑罪从无原则无疑是非常重要的。因为双方力量并不对等。
而个人之间的质疑乃至问罪,没有必要搞什么疑罪从无。双方力量都是对等的。一方可以质疑,另一方也可以回应。一方可以乱扣罪名,另一方也可以把真相公之于天下让大家看看。就算捅到媒体,舆论一边倒。你可以骂别人傻逼,可以觉得别人真的是傻逼,可以骂群众无脑盲从,可以愤世嫉俗愤然删号滚蛋。但人家就是有这个权利。发表自己的见解,没有问题,但想修改游戏规则,是很不明智的。

从另一方面看,对于公权,不仅不能疑罪从无,还应该要用最恶意的角度去揣测。这个原则,也应该可以适用于双方力量明显不对等的情况。没有人会认为保护伞公司不应该接受政府同样的待遇吧?

更何况,有的时候,超出目前状况之外的恶意揣测,往往是为了自我保护,而不是要加害于他人。黄浦江上的猪,没有检测出可感染人类的病毒,就应该为此放一百二十个心了吗?目前还没有证据显示 H7N9 可以在人类之间传染,于是友人咳嗽高烧也可以不用防护地去探病吗?没有上过 CSDN,于是就不用修改密码了吗?没有反对过伟大的党,于是就可以举手支持 73 条了吗?如果只是走一步看一步,人类存活不到现在。你可以自己这样做,但要求别人也跟自己一样,要么是站着说话不腰疼,否则不是脑残就是别有用心。

2013-03-21

如此错误检查,还不如不要

今天在查一个 Bug。表面现象很奇怪,至少让测试组觉得很奇怪。故障现象是这样的:
有一个列表框,如果里面只有两条记录,那么没事。如果有三条以上的记录,那么在删除记录时会「随机」出现程序无响应的情况。

上面这段错误描述中,「随机」二字之所以打引号,是因为其实不是随机的。只是测试组的同事没有找到规律而已。只要按从下到上的顺序进行逐个删除,就很容易遇到故障。

这种现象,有经验的程序员一看就知道跟序号、数组之类的东西有关。
果不其然,在代码中我找到了这样的一段:
pItem = ListView->Selected;
for (; pItem != NULL;)
{
    int iWhich = (int*)pItem->data;
    if (iWhich >=0 && iWhich < ItemArray.GetSize())
    {
        ItemArray.RemoveAt(iWhich);
        ListView->Delete(pItem->Index);
    }
    pItem = ListView->Selected;
}

这里解释一下,ListView->Selected 能拿到列表内当前选中的第一行,而 ItemArray 是一个项目组自己实现的数组对象。这两个东西都没啥毛病。

坑爹的代码就是这一句:
if (iWhich >=0 && iWhich < ItemArray.GetSize())
我能理解,写的人是想把iWhich的取值限定在某个区间。因为这个 iWhich 接下来会被用作数组下标。如果越界,后果不堪设想。有这个意识,是好的。
但是,仅仅意识到这个问题,还不够。接下来还有问题了:iWhich 会越界吗?什么情况下会?

我相信,如果写这段代码的人当时有问过自己这个问题,那么就不会有这个 Bug 了。
这个 iWhich 来自一个 pItem->Data,这是一个 ListView 行对象附带的 DWORD 类型的数据,其值是由使用者(程序员)赋值的。
也就是说:如果你给它正确赋值,那么就不会有不正确的值出现。如果它有问题,那么是你前面的程序造成的。

也许还是有程序员会担心,这个 pItem->Data 会不会什么时候被改掉。也可能赋值的地方是另一个程序员写的。而写这段代码的程序员出于防御性编码的目的,写下了这样的判断。那么 OK,没有关系,判断就判断吧。可是判断为 FALSE 的时候怎么办呢?
他什么都没有做。

其实,判断为 FALSE 之后,从 ListView 中删掉这一行,应该是安全的。从上面的代码中可以看出,删除行的时候,只用到了 pItem->Index。这是由操作系统自行维护的值,不会存在 Data 那种「可能没有正确赋值」的情况。
又或者,实在不放心,那么直接把整个函数 return 掉,甚至报个错,也是可以的。
现在的处理方式就直接导致了死循环。这是很糟糕的情况,单核机器的用户甚至可能会几乎没有机会来做什么处理。

好了,上面这些就是我这篇博文想说的:有防御性编码的意识,很好!但是处理方式也要正确有效。你不应该在避免一个错误的同时,引入另一个错误。

那么,最后还有个遗留问题:iWhich 为什么会越界呢?
我想,对于合格的程序员,这个问题不应该成为问题。所以我就不说了。

2013-03-03

用了五年的笔记本 XP 系统重装了

其实重装系统这种事情也没什么可写的。无论是重装系统还是拆机换 CPU,我都已经轻车熟路了。不过过程中还是遇到了几件值得加深记忆的事情,权且当作流水帐记一下吧。

这次换了个 CPU:把 AMD MK-36 换成了 AMD TL-66。MK-36 只是 64 位而已,但由于用的是 XP 32 位版,其实没有任何优势。TL-66 增加了主频,而且变了双核,可以说是鸟枪换炮了。这要搁在当年买笔记本的时候,不说 TL-66 根本没面世,就算有得选,也不是加几百块钱能了事的。现在淘宝上一百来块就搞定了,还送了个耳机。

换了 CPU,Chrome 卡的问题还是没能解决,于是把系统给重装了。本来准备上 Win7,结果发现装 64 位版本的话 disk.sys 不支持,也没有官方驱动能解决这个问题。如果上 32 位版 Win7,显卡驱动可能也是个问题。这款笔记本官方只提供 Vista 的驱动。最后还是装回了 XP。反正 2GB 内存也只有 XP 能舒服点。以后这台机器就不要考虑其它操作系统了。

但重装了系统,仍然没有解决 Chrome 卡的问题,而且卡得愈发厉害。最后终于发现是电池的问题,拔掉电池就一切正常了。现在依然很正常地在用,只是谷歌拼音的切换略慢,有时候刚呼叫出来的时候会丢几个键击。电池上有个垫脚,导致现在本子变成三脚猫,不得已只好找了一叠名片来垫上。

2013-02-27

360 病及其它

提到不要用 360,总会有人跳出来问:你有更好的吗?
别人说自己笨就算了,没怎么见过把自己的笨拿出来秀的。不过算了,术业有专攻,确实不能期望每个人都有及格的信息安全相关技能。那么,这个逻辑是否正确呢?是不是没有更好的替代品之前,360 尽管是个臭流氓,但仍然是个还算不错的选择呢?

要我说,这是一种典型的把自己的 XX 寄托在别人身上的毛病。这毛病极坏!不过,所有使用360 的人,或多或少都有这个毛病。
自己安全不安全?不知道。不知道要去弄明白啊!他不,他去听 360 的。360 说我安全,360 说我体检一百分,360 说你的电脑高风险,360 说你给我装的 GoAgent 是病毒。

许多年前,有一群人也是,觉得某个党挺好,于是什么都相信它。于是他们觉得找到了替代品,旧的那个可以不要了。于是旧的那个被赶到了一个小岛上,后面的事情大家都知道了。
人民是很容易偷懒的,一旦他们觉得某个英雄可以拯救他们,某个国王英明贤德,他们很容易就会把一切都交付了。国人如此,其他国家的人民同样是如此。不过区别是,不少其他国家的人民已经从历史的教训中学得比较聪明了,而我们的政府还在不停地对我们的人民洗脑、欺骗。
360 也一样。把操作傻瓜化的同时,一切都拱手交给它了。我还记得 WALLE 里面飞船上那些人类,一切都交给了机器,以至于变得肥头大耳四体不勤站都站不稳活像笼子里的哈姆太郎宠物鼠,自己却浑然不觉。不同的是,船长与方向盘搏斗的时候,所有人都在为他加油,没有傻逼跳出来说我们活得挺好的挺舒服的要吃有吃要睡有睡要玩有玩安全和谐别给劳资破坏来之不易的大好稳定局面。

好吧,我再次承认,不是所有人都有及格的信息安全相关技能(事实上是大部分人都没有)。这不丢脸,就好象我不会任何武功,来个强盗一刀就把我给灭了。只是,我也不会去做那些危险的事情,爬上火车打架就留给 007 他们吧。不具备信息安全相关技能,就自己小心谨慎一点。查杀木马你不会,预防堵漏你也不会,物理断网你总会吧?怕中木马,污七八糟的网站就少去晃荡,盗版软件就少去下载。怕网游被盗号,就别扔那么多钱和时间进去玩,更别去到处翻什么破解外挂。老在垃圾堆里刨吃的,人能健康吗?步行街上那么多漂亮妹子你不去追,宅在家里玩什么网游?妹子会传染你艾滋病吗?12 月 1 日的讲座你真该好好听听。怕网银丢钞票,就别去玩网上支付,货到付款总会吧?什么你不会数钞票……?思想有多远,你就给我滚多远。

2013-02-07

关于 GFW 请愿的那些事儿

白宫网站上那个关于 GFW 的请愿活动,我最开始是在周末看到的。大约在一月底的时候。

因为个人原因,周末上 G+ 的时间并不多,基本上就是瞄上一眼,发评论都不一定有时间。当时只是简单把 PO 转了一下(G+ 还没有收藏功能真遗憾)。一方面因为我之前在「死星事件」中刚知道白宫网站请愿这事儿,觉得这次活动还有那么一点儿小意思,值得去做一下。另一方面,当时那个 PO 是以一个教程的形式写出来的。也许作者的初衷是想让读者无需任何脑力即可操作,但结果就是那段文字看起来相当复杂,普通人(包括我)一眼看上去就会觉得「哎呀这么麻烦啊」。当时我的想法很简单:这大概是一个要花点时间的事情,等有空再做吧。反正截止日期我看过,2 月 24 日,还有近一个月,中间还有春节假期,时间大把的有。

后来没过两天,我发现这件事情其实很简单。起码比我上 1 号店买个牛奶要简单多了。唯一的问题就在于,即使用 Gmail 注册,确认邮件也是过了一阵子才收到,至少没有像大多数网站那样秒到。流程稍微一卡,我转过头就做别的事情去了,以至于这事儿最终分了两步才完成。不过我想说的是,过程真的很简单,除了一个邮箱无需任何其它条件,也没有什么后遗症——如果你连转发政治 PO 都不怕的话。

再后来,签名进展异常缓慢。我签的时候有三千多,现在也才刚过一万。估计信息就只在一个不大的圈子里面传播。同时,还有网评员和小秘书在信息流动过程中捣蛋。总结了一下,我大致见过以下论调:
  1. 投了也没用。
  2. 懒得去理这样的破事。
  3. 侵犯 GFW 工作人员的自由!
  4. 太麻烦!
  5. 不懂英文!
  6. 不是只有美国籍才能投票吗?
  7. 什么是 GFW?

有兴趣的话各自对号入座。至于对这些论调,我就不发表评论了。不是没有话说。要说的话很多。但是相信各位至此已有相关的心理准备,在下就不多啰嗦了。
我 Google+ 个人资料里面的个人宣言是这样写的:人在做,我在看。不是我以老天爷自居。所谓众生相,其实谁都看在眼里。至于在不在乎,那就只有各位自己心里去掂量了。不管诸位在不在乎,这破事儿,反正我,是看定了。

2013-01-25

VC6 最佳拍档,Platform SDK Feb 2003

很长一段时间内,一直用 Platform SDK Server 2003 SP1 来搭配 VC6 进行开发工作。但这个组合其实并不是很合适。这个版本的 Platform SDK 里面,有一些东西是 VC6 的 CRT 已经无法支持的,比如对 __time64_t 进行操作的那些时间函数。另外在链接到 shell32.lib 之类的库的时候,也会报错说调试信息的格式已经不匹配了。

最后一个支持 VC6 的 Platform SDK,是 Platform SDK Feb 2003,比我之前用的 SDK 版本要更旧一点。微软官网已经不提供下载了,目前给出的所有链接都是失效的。好在有网友通过 独立Blog 提供了 cab 包方式的下载。我把这些 cab 包中打包的文件提取出来后制作成了 ISO 光盘镜像,便于刻盘保存,也更方便下载。

以下下载链接来自于 Mega 网盘。下载无需注册,但国内下载速度不太好说,有快有慢,并且(从 Mega 的性质看来)随时可能被墙。可以尝试一下 ping mega.co.nz,如果 ping 值高于 600ms,建议通过 VPN 下载(GoAgent对于Mega不顶用),或者另寻它途。
Platform SDK Feb 2003.iso (346.8 MB)

值得一提的是,这个版本的 SDK 需要你的默认浏览器是 IE 才行。貌似通过 ActiveX 控件实现的安装向导,以后的版本没有继续采用,明显是一个失败的设计。

2013-01-16

关于 BCB 中 Package 的两点注意事项

BCB 通过 Package 实现了自定义控件的能力,用起来的确很方便。很容易地就可以扩展 IDE 的能力,设计出更为强大的软件。但在实际使用中也发现有两个值得注意的地方。

1. Runtime packages

如果打上了 Build with runtime packages 复选框的勾,那么 BCB 在 Link 的时候将会把 Runtime packages 中列出的 Package 以动态链接的方式 Link 到 Project 的输出文件(EXE 或 DLL 等)中。在发行的时候,必须带上这些 Package 对应的 BPL 文件,EXE(或 DLL)才能正常工作。

Runtime packages 是一个分号分隔的 Package 名列表。没有在列表中的 Package,会静态链接到 Project 输出文件。如果不选择 Build with runtime packages,则所有的 Package 都会静态链接到 Project 输出文件。这大致相当于在 VC 中选择 Use MFC in a Static Library。

2. Package 设置的归属

一直以为 BCB 的 Components->Install Packages 里面的内容是个全局的设置。后来才发现原来是属于 Project 里面的 Options 之一。准确地说,是其中的 Runtime packages 部分的设置属于 Project。

也就是说,如果在某一个 Project 中设置了一个 Runtime packages 列表。那么这个设置只会应用在这个 Project 的编译结果中。对于别的 Project,依然保有并使用各自的设置。

2013-01-07

国内域名快要到期

八年前不懂事,通过国内商注册了域名,而且后来图便宜一下子续费了好多年。于是 superliufa.com 这个域名一直要到 2013 年 01 月 10 日才到期。当时看来是很久远的事情,不过现在看来大限就快到了。

根据以前过期的域名看来,该国内商有个流氓措施,就是会在域名过期后自己掏钱续费一年,但是收回所有管理权限,让你没法马上转移。不过我不着急呀!我的网站,一不用来挣钱,二不用来炒流量。一年后咱们走着瞧,奸商您要是兜里有俩闲钱咱们就再斗个一年,爷生命线挺长,耗得起。

不过,如此一来,这个架在 Blogger 上的博客,墙内的朋友很快就要无法访问了。墙外的地址是 superliufa.blogspot.com,届时(2013 年 01 月 10 日后)我将会取消博客上的自定义域名选项,这样首页就不会再跳转到 blog.superliufa.com 了。要翻墙的赶紧啊!可以参考我的 翻墙系列文章(虽然还不多),千万别输在起跑线上哦!