善意提醒

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

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