2013年12月12日星期四

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

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

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

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

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

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

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

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

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

2013年11月8日星期五

关于最近这次GoAgent波动的一些情况

本来是想说GAE Proxy的波动,但由于没有在使用除GoAgent之外别的GAE代理软件,不好贸然下结论,所以单就在GoAgent上遇到的情况说一下。

事情的开端大约在本周一(2013年11月04日),当时我偶然发现YouTube视频我无法观看了,而且几乎是所有的都无法观看。除了视频之外别的内容都是没有问题的。一个很正常的反应就是点开Chrome的“审查元素”,想看看是不是页面上有哪些js之类的东西下载失败了。

一看,还真有下载失败的,大约是这样的链接:
这个是个XML,还有别的也有类似的下载失败的报错。失败的情况很诡异,感觉像是从GAE的服务器到r7---sn-a8au-p5qz.c.youtube.com这种主机的连接超时,仿佛被IP黑洞了。但我的GoAgent用的是国外的IP,不可能是GFW在干扰。所以有一种解释就是,Google不允许GAE服务端访问这些主机了。

难道是Google发现天朝这边每天有N多人挂着GAE Proxy看YouTube,流量不堪重负了?

然后就是昨天大规模的GoAgent用户出现403错误的情况了。具体地说,所有在GoAgent里面用的是google_cn的用户,都会遇到这个问题。我之前在Google+上也发PO说了。这个问题是因为北京谷翔那些所谓北京IP在GAE支持上出现了问题。同样的GET请求,有的时候它们能正常响应,有的时候会报403。当时我测下来觉得比例大概是1/2至1/3,现在再看似乎出错的机率更高了。这也许说明Google正在逐步关停这批服务器的GAE支持,再过一段时间可能就完全不能用了。到底是重启服务还是完全关闭,Google没放话,谁也不知道。

注意到这些情况的同时,我自己GoAgent上用的那个国外IP好像也开始出现问题了。ping值开始变得很高,并且也开始丢包(以前这个IP虽然ping值也不小但从不丢包)。这些都没关系,可能是网络波动。但它现在不仅仅是YouTube视频看不到,连Twitter上的某些js文件也开始读不出来。

我自己备有一些可用的Google服务器IP,是以前有一次特地花了大半天时间自己挖的。既然现在国内国外的Google服务器都开始出问题,那就有必要把这些IP全部拿出来再检查一遍。检查的结果是:

  • 至少有一个IP(目前用的这个),对于Internet上的部分内容无法读取了。
  • 有一部分IP,如果用在GoAgent上会报证书错误,说不是*.appspot.com的证书。
  • cn段的IP,目前成功的比例已经掉到1/10左右,可以说已经是不可用的状态。
  • 其余的则没有问题,包括YouTube视频也能顺利播放。

第一种情况,在昨天晚些时候已经得到了解决,似乎Google也发现了他们的GAE服务出了状况,参见这里
对于那几个报证书错误的IP,用在hosts上却没有问题。包括cn段的IP用在hosts上也不会有问题。个人估计这应该跟SPDY协议有关系,因为用在IE上时证书也是不对的。

所以目前的结论是:Google在对服务器集群做调整。到底最终会调整成什么样,还不知道,但目前起码导致了GAE服务可用性的一些变化。Google有可能在把某些服务器的可用范围收窄,至少在非SPDY协议上这样做了。在GoAgent的C/S通信能支持SPDY之前,可以更换GoAgent中使用的GAE服务器IP来解决这种问题(比如官方建议的改用google_hk的做法)。GFW至少目前还没把所有的GAE服务器IP给封掉。

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年9月27日星期五

装逼犯,犯装逼

昨天在知乎上发现了一个话题,关于夏俊峰为什么被判死刑。看过之后,我把这个网页的URL贴到了Google+上,然后评论说这简直就是装逼犯大集合。
今天早上,发现有人尖锐地表示了反对意见,说屁股决定脑袋,还说容不下反对的声音。那么我就来谈谈,为什么说“装逼犯”三个字。

人都是有感情又有理性的。有的人感情超过理性,有的人理性超过感情,这是常态。fifty-fifty的不能算是病,但个人觉得叫一声“奇葩”还是配得上的。面对一件事情,到底是感性占上风还是理性占上风,各有各的情况,不一而足。但是要彻底否认掉自己的感情部分,作出一副理中客的样子,要么是没人性的冷血动物,要么就是在装。我特鄙视这种爱装的人,所以加上一个“逼”字,简称“装逼”。这种人,英语里面一般被唤作jerk。

关键这种人还特别喜欢否认别人的理性。民意汹涌,那都是脑残,缺乏独立思考能力,愚蠢的草民,被洗脑洗坏了,被媒体利用了,脑子里都是屎……。为什么会这样?我目前理解为好让人觉得他们与众不同。一般爱装逼的人都想与众不同、出水芙蓉、卓尔不群、鹤立鸡群,好(去声)清高,不屑于与大众为伍。“草根?呸,我看是民粹!”他们大概都是这样想的。

其实装逼和闷骚一样,都是别影响别人就还算不错。话憋在心里还好,谁管你怎么想,我又不是共产党。可惜之所以装就是要给人看的。自己“胸怀远大”不要紧,跑去揪着别人谈理想,那就是在犯贱,所以简称“装逼犯”。其实根源还是那句话:别把自己太当回事。谁也不是傻子。

我写东西呢,比较散,比较懒,也比较绕,有时候不太容易理解。唉,都是以前当钓鱼党落下的坏毛病。那么,为了帮助理解,我就来打个比较通俗一点的比方。
你和一群朋友去唱卡拉OK,点了几扎啤酒,本打算唱得高兴喝得High。偏偏有个家伙,拉着每个人说,喝酒唱歌对嗓子不好,喝酒损害肝脏细胞,憋尿对身体不好,光线一闪一闪容易诱发癫痫……
他说得不可谓不对,可其实这些道理你也都知道。但是你对这个家伙有什么感觉?讨厌,对吧。管你屁事啊?还有,你觉得不好,你自个儿回去好了。在这里装什么装啊?What a JERK!
最后再简单地总结一下:你怎么想,是你的事。要说出来,就要准备面对别人的喷。你说的这些老子眼下很不爱听,骂你装逼是活该。不是每个人都得学你,边吃面条边拉屎

2013年9月26日星期四

小贩之死,司法之死

夏俊峰案,昨天中午终于以当事人夏俊峰被处死而告一段落。毫不独立的司法,作出了毫无考虑的判决和毫无人性的执行,毫不意外。

我想告诉所有以为这事情跟自己无关,自己只是看个热闹,评论上两三句,过两天就会忘了这事的人:司法要是不独立,不能体现公平与正义,你们所有人都会有这个下场。
早先人们去打官司,是相信站在法庭之上,一定会有一个相对公正的说法。但后来,人们渐渐不相信法律了。“法律是有钱人的游戏”、“你能告得过政府?”这种话,相信各位都听得不爱听了。
不信就不信吧,但是法律并不会就此放过你。既然你选择了离一个你不喜欢的东西远一点,那么你的仇家就会来把你往那边去挤——这个道理是必然的。有的官司,你不得不打,不想打也得打,比如夏俊峰。
你能怎么样呢?提交证据,质疑对方的证据,然后法官那边或冷冷或笑嘻嘻地来一句:“辩护方的意见不予采纳”。

小时候我看港片,警匪片或律政剧中常常有这样的场景:带着假发的律师正在振振有词、咄咄逼人的时候,对方律师站起来一句“我反对”,有的时候都不需要说出理由,法官就会说一句“反对有效”或“反对无效”,然后要不前者可能就不得不换一种方式提问,要不后者就只能郁闷地坐下。
我一直觉得很不能接受:拿锤子那老头子凭什么这么独裁?直到我看过了一些介绍英美法系的文章,才有一点明白。然而,我还有一个疑问:那个老头,以及那十二个陪审员,凭什么有掌管别人生杀的权利?
答案很简单:你把这个权利交给了他们。就算你就是被告本人,既然你站在法庭上,接受审判,就是愿意玩这个游戏,这个大家约定规则的游戏。我们每个人都同意,在必要的时候,按照这个规则来玩这个游戏。那是因为我们觉得,只有按照这样的规则,无论将来那一天我是原告还是被告,都是公平的。谁要想打破这个游戏规则,让规则有利于其中的某一方,大伙儿都不答应。谁能保证自己永远不站错位置?我错了,它们有枪,还有坦克,它们一定会站原告席的,是我太天真!

上海电视台,曾经放过一个很鸡巴操蛋(我不是粗鄙之人,但是在这里我完全不希望掩饰自己的情绪)的“公益广告”。一个傻女人依次问一群小朋友“谁愿意当法官/律师/证人”,小朋友很踊跃。然后傻女人问“谁愿意当坏人”,没有人举手。
第一次看这狗屁玩意儿的时候,我一口饭差点唾屏幕上!法庭之上如果有所谓的“坏人”,那这个游戏大家还是不要玩了。都他妈的帮人定好性了,还走这过场干屁?!过家家?!!共产党的司法家们不是都一群酒精考验过了的老家伙吗?!!!

这样子司法,是一件很鸡巴操蛋(原谅我再粗鄙一次)的事情。(以下第二人称所指与上面有所变化)你若是一个人玩,没有问题。想让大家陪你一起玩,就不能这样任性瞎胡闹。现在大家都有意见了,你不赶紧收敛收敛,还摆出一副“挡我者死”的态度,这才是真正的作死。你以为处死了小贩,这事就算结了?同样死去的,还有司法,还有你定下的这些游戏规则。
这些规则我们本来就没同意过,你有枪有坦克,好吧,你说了算。但这事儿除了同意和不同意,还有别的路子可走。你非要我同意你的规则,可以,没有问题。但是老子可以不陪你玩了。公平和正义,不仅仅只有在法庭上才能实现。可以实现的方式有很多。法庭也不是自盘古开天以来就有。

你不给我一个说法,我就给你一个说法。这话好像听起来很耳熟吧?

2013年9月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年9月21日星期六

自己给iOS7升级下载加速

通知出来了好几天了,今天准备给老婆的手机升iOS7。于是先把iTunes升到11.1(下载速度还不错),然后连上手机。一检查,嗬,1.19G,告诉我下载要18个小时。
按照惯例,打开IE设上代理,准备用GoAgent加速。现在估计用时只要不到一个小时,完全可以接受。
但是担心的事情来了,免费GAE的每个AppID有1G/天的流量限制,而我的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年9月10日星期二

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

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

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

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

2013年9月9日星期一

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

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

个人觉得,财新网这篇文章的摘要,写得相当的不严谨。不过国内的媒体一贯习惯博人眼球,这样写也很正常。其实如果能认真读完全文,大概不至于被吓得不敢上网。相比之下,《纽约时报》的一篇报道就要更为准确一些:
最新披露的文件显示,美国国家安全局(National Security Agency,简称NSA)在长期的加密技术秘密战争中占了上风,它利用超级计算机、技术花招、法院指令和幕后劝说,对互联网时代保护日常通讯隐私的主要工具造成了损害。
这段话里面,明确提到了这么几个手段,我觉得基本上可以比较准确地概括全文的内容:

  • 超级计算机:也就是硬来,霸王硬上弓,利用超级计算机+分布式计算的强大计算能力,暴力破解猜密码。这个没啥好怕的。你要是能让政府动用举国之力来对付你,你大概也不会因为这些事情而害怕了,多少会是个英雄/领袖什么的吧?换句话说,要是在中国,找几个人把你关起来拷问,大概成本会低很多,估计也更合领导的意。不小心弄死了参照李旺阳处理就行。
  • 技术花招:也就是第一篇文章所提到的,利用(甚至主动引入)产品、协议、服务的漏洞,或者植入软件/硬件木马,试图在加密前或解密后获取到信息。既然是叫做“花招”,那么就是一些旁门左道的东西,有用是有用,但并不是说整个Internet的安全体系就此崩塌了,防漏堵缺就可以了。
  • 法院指令:要求企业交出密钥或解密后的明文,或者获得访问权限。在美国这算事儿,在天朝大伙儿应该都习惯了吧?没什么好害怕的。
  • 幕后劝说:相对于“法院指令”,其实也就是红脸和白脸的区别而已。我觉得在天朝根本不需要什么“幕后”劝说。所以也一样,没什么好怕的。

所以,看吧。NSA也不是说真的拥有了什么颠覆性的力量。现有的Internet安全体系还在,强如NSA也只能绕着边儿想办法。谍报机关嘛,真逼急了啥办法不会想?真没必要自个儿吓自个儿。

2013年9月6日星期五

一例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年9月5日星期四

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年8月29日星期四

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

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

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

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

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

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

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

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

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

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

2013年6月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年6月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

上海电信开始屏蔽Google翻墙IP

家里用的上海电信光纤宽带,最近通过PPPoE分配到114.92.76.*的地址。然后就发现Google+无法访问了,hosts失效。实测发现203.208.46.160~203.208.46.165这六个IP地址被屏蔽。目前还不知道是ISP还是GFW所为,不过反正它俩都是蛇鼠一窝。

tracert结果见下图。
从这个现象来看,被干掉的应该是响应包,请求包应该是放行了。这说明屏蔽者企图制造服务器DoS的假象,用心非常险恶。可见的最后一跳是203.208.62.7,与未屏蔽时一致,查IP可知这是guxiang的路由器。若无其它接入点上的tracert印证,仅从这个看的确很像是guxiang内部出的问题。普通用户可能以为服务器宕机,或者网络故障等等。

这几个IP的确是被用于翻墙最多的那几个。被广泛用于网上流传的各种hosts,以及GoAgent的配置文件中。被优先干掉,我一点也不奇怪。不同地区、不同运营商的网络情况也不一样。长宽更惨。从网友的反馈来看,有的外省市可能屏蔽得更多。这动向值得注意,是最近有什么值得收紧的事件吗,还是只是因为7月1日快到了?

2013年5月9日星期四

赶一下白宫请愿的早集

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

有意无意中看到知乎上的某个问题的一大串回答让我是又好笑来又好笑。很多人连白宫请愿是怎么回事都没搞清楚,就开喷。我们先来看看人家的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年5月5日星期日

让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年4月19日星期五

也谈“不抗争”


在多种场合,均听到过一些所谓墙外人士对于内地民众大放厥词,怒斥其“不抗争”,心甘情愿生活在光明的地狱中,千年奴性不改云云。
这些人士,有的是港澳台的同胞,有的是已经完成肉身翻墙的回头客,有的是海外的Banana,有的只是在国外留了几天学的小年轻。一开始,也懒得跟这些人辩论。思维逻辑不清楚,无法突破自身思路的禁锢,旁人怎么讲也是无用。但后来,和者众,乃至有的所谓墙内人士也似乎承认这种说法,我觉得就有必要拿出来说说了。

我不知道什么是所谓的心甘情愿。我只知道各地的工程车辆都在竞相碾人;我只知道这些年党国的维稳经费已经超过了军费开支;我只知道前不久展出了我国研发的7.62mm“警用”MiniGun;我只知道去年一个残疾人试图恢复正常生活的过程,甚至可以再拍一部Argo。
如果真的都心甘情愿,何须如此?若人民真的都是自甘奴,还需要把所有新闻媒体都牢牢地控制住吗?反正猪只爱吃喝拉撒睡,对别的事又不关心。还需要对那些出头鸟杀一儆百吗?既然奴性已经千年下来固化在基因里面了,那么那几个蹦跶不休的就当是基因变异,不理睬或至多赶走就是,还需要劳驾蝙蝠侠出手来营救?

那些自以为掌握了民众真实想法的人,我要告诉你们:
别人告诉你这些,你还真以为他们就是这样想的?太天真了。有几个生活在威权主义集权国家恐怖统治高压之下的人民会随便跟他人讲真话?我,温顺老实人畜无害的瘦小子一个。但即便是在午饭之后——人一天中最为放松、戒备心最少的时段,在闲聊时若讲到这些所谓“敏感”问题,都不会有任何人对我讲真心话,何况你一个外乡人。谁知道你是啥玩意儿?即使很多人可能没怎么见过熊猫,苏共KGB的故事,听得还算少么?
所以,别以为在中国大陆生活了几个月乃至几个年头,就能了解所谓墙内民众的真实想法。扔掉你的海外护照,放弃你的海外公民身份,抛开那种若有若无的道德优越感,真正地成为一个墙内人,你才能算是刚刚上了路。要思考,这里的一切都不是你表面上看上去那样简单。这里的每个人都把自己层层地包裹了起来。既然这里是地狱,那么不穿护甲的人是活不下去的。要想真正理解这些,你得睁开你的心眼认真去看,而不是这样隔岸观火地说些屁话。

再说,您说的那些,我们早就知道了。八十年代的时候我们就在饭后餐桌上激烈地讨论过了。您还真以为我们不知道哪?想当年,坦克开过来的时候……

2013年4月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年4月8日星期一

论天赋与竞争


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

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

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

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

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

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

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

2013年4月3日星期三

也谈“量刑要适度”


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

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

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

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

2013年3月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年3月3日星期日

用了五年的笔记本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。反正2G内存也只有XP能舒服点。以后这台机器就不要考虑其它操作系统了。

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

2013年2月27日星期三

360病及其它


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

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

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

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

2013年2月7日星期四

关于GFW请愿的那些事儿


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

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

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

再后来,签名进展异常缓慢。我签的时候有三千多,现在也才刚过一万。估计信息就只在一个不大的圈子里面传播。同时,还有网评员和小秘书在信息流动过程中捣蛋。总结了一下,我大致见过以下论调:

  1. 投了也没用。
  2. 懒得去理这样的破事。
  3. 侵犯GFW工作人员的自由!
  4. 太麻烦!
  5. 不懂英文!
  6. 不是只有美国籍才能投票吗?
  7. 什么是GFW?


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

2013年1月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年1月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年1月7日星期一

国内域名快要到期

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

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

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

2013年1月5日星期六

拖人翻墙的步骤

以下步骤需在已翻墙的电脑上完成:
  1. 注册Google账号
  2. 开通GAE,完成GoAgent服务端上传。
  3. 向新Gmail邮箱发Dropbox邀请,完成Dropbox账号注册
  4. 向新Dropbox账号Share翻墙所需文件和工具。
以下步骤在“新人”的电脑上完成:
  1. 安装Dropbox客户端,同步文件到本地。
  2. 为切换hosts设置桌面快捷方式,完成hosts替换。
  3. 设置GoAgent为开机启动,或设置为桌面快捷方式,设置proxy.ini。
  4. 下载Chrome最新版本,安装,设置好Google账号。
  5. 在Chrome中安装SwitchySharp插件,导入切换规则。
  6. hosts方式完成Facebook账号注册,完成邮箱验证和手机验证。
  7. GoAgent方式完成Twitter账号注册,完成邮箱验证。
  8. 去Dropbox中拿完所有能拿的Space奖励
  9. 注册豆荚VPN,完成邮箱验证。
  10. 设置VPN拨号连接。
  11. 在Chrome中导入IE收藏夹,从HTML文件导入常见墙外网站。
  12. 安装Google Drive客户端,设置本地文件同步。
  13. 在Google Drive中Share翻墙文件和工具(作为冗余)。
最后,向“新人”教授hosts更新方法、GoAgent启用方法,以及VPN连接和断开的方法。完成。