技术手记

讨论下密保, 找回密码和申诉

想起来写这么一篇完全是因为最近在酷壳 (CoolShell) 上看到这么一篇 http://coolshell.cn/articles/5987.html 并在后面跟人口水战了一把, 有一些想法提出来.

首先, 密保. 密保应该是在密码外, 多出来的一层或多层安全措施, 可以是另外一套校验码 (比如以前 WoW 的充值卡背面的阵列数字), 也可以是短信或类似的动态口令, 还能是硬件 (比如 U 盾). 其目的都是为了使得帐户更安全, 当密码过于简单被人破解, 或被不该知道的人知道密码后并不能进入帐户. 这个东西很赞, 很多时候也很烦, 所以一般不是特别要紧的东西, 相信大多数人都会尽量放弃密保. 今天我去尝试了下 Gmail 的两步登陆, 发现把整个工作量增加了很多, 而且如果手机丢了, 登陆帐户将非常麻烦, 没补过手机卡, 不知道这个纠结的时间会持续多久, 所以最后还是取消掉了. 之前 QQ 的异地登陆密保卡也因为宽带动态 IP 经常被识别成邻省而烦不胜烦, 最终取消. WoW 的密保卡也是经常忘了在哪, 电脑里保存的电子版要切出来看一下再切进去输一次, 巨烦无比, 最终也放弃. 倒是银行的一直不敢动, 还有以前公司的 Token, 一是这俩用起来比较简单, 二是实在关系要紧事, 不敢怠慢.

然后是找回密码. 顾名思义这个功能应该是密码忘记, 或被他人恶意篡改后需要找回来的时候需要. 一般密码找回无非是用备用邮箱重置密码, 或用绑定过的手机接收一个校验码来重置密码. 但是, 如果比较悲剧的是备用邮箱压根没绑定, 或一起被盗, 手机也丢了的情况下, 只能各种叫天不应叫地不灵, 这时候就需要走到下一个功能的流程里去. 顺便说下, Facebook 有一个非常好玩的找回密码功能, 他把你经常联系的好友照片展示给你, 让你选这是谁, 或者给你个名字让你选哪张照片是他, 连续若干次, 如果对了就让你重置密码.

申诉, 个人感觉这又是企鹅家非常有特点的一个服务 (或者说过度设计的一个坑爹功能). 其他服务的帐号, 丢了总有办法找回来, 邮箱也好手机也好, 重置下就行. 如果没绑邮箱又没绑手机, 这时候找不回来只能说明这个东西并不重要, 只能算了, 或者通过一些诡异的私人渠道去联系帐号所在服务的所有人去进行重置, 但是这种方式的可行性实在太差 (我只在 BBS 上帮人干过这事 -___-), 而 QQ 号就是这么个神奇的东西, 他对很多人很重要, 但是很多人又没有绑邮箱/手机的意识, 特别是早些年, 有手机的人都不多, 怎么绑? 而且好多人唯一的一个邮箱就是 QQ 邮箱… 这时候, 只能上土办法, 人工申诉. 当然, 腾讯做的稍微自动化了一点, 提供一些以前的密码, 或注册时的一些个人信息, 以及一些好友信息, 就可以进入申诉流程处理. (我不了解后面的具体流程, 我猜是机器做大部分数据判断, 如果明显符合可能不用触发人工审核, 比较含糊的将数据准确性交由人工最终审核)

原帖中争论的几个焦点和我的看法是

1. 腾讯是否有权收集用户信息?
狗: 我个人觉得腾讯压根犯不着在这个地方收集身份证号等信息, 要想弄, QQ 整个游戏产品线都非常容易收集, 而手机号这些, 本来如果要办密保就该提供吧, 只是如果没有这些信息, 实在想不出申诉怎么申

2. 腾讯为啥把找回密码这么简单一事就弄成这么复杂的申诉流程? 直接找回不就完了?
狗: 要知道腾讯活了多少年了, 之前的多少用户的信息是不全的, 压根没法按常规方式找回密码. 比如原帖楼主, 一个多年不用的号突然要用, 密码被盗或自己忘了, 当时没绑手机, 邮箱不知道是否就是自己现在在用的, 那只能进入申诉流程. 我自己最早的 QQ 号是 01 年开始用的, 而我 05 年才拥有自己的手机, 而且随着上学, 实习, 工作, 这些年已经换了好几个号, 不是每次切换都会记得把这些号都转一次的, 有时候也没法转 (我去香港呆过半年, 手机号换香港的, 则大陆的号可以取消绑定, 而香港号无法绑定上密保, 你让我怎么办? 绑老爸的?), 而邮箱, 因为 Gmail 太好用, 我以前留的那个 Yahoo 邮箱早被删号了, 而如果 QQ 密码不丢, 估计我也会忘记有这么回事. 而更多的群众用户的情况是, 压根不用邮箱, QQ + 百度就是他们的网络入口, 手机号非常勤快的说换就换, 都不在乎后面会有什么关系. 所以, 除去少部分精英, 大部分人并没有常规找回密码的意识和能力

3. 不能引导教育用户跟精英一样可以享受密码保护功能么?
狗: 这个… 如果大家愿意去调查下, 这个还真的很难… 当然, 做还是要努力去做的, 拉动一部分是一部分. 而在提示安全信息上, 老实说腾讯做的还比较好了, 提示加入密码保护, 威逼利诱绑定手机等信息, 聊天里随便说点和钱有关的就会弹信息提示注意资金安全, 应该有些用, 但是还是架不住更多的人是小白这个事实. 最重要的, 这些小白你没法抛弃, 3Q 大战已经很好的揭示了强制等手段是无效的, 还可能起到反作用

4. 那申诉流程能靠谱点么?
狗: 我记得我曾经申诉过一回, 感觉还算合理, 要求提供以前用过的几次密码, 注册时间地点, 一些好友信息 (QQ 号, 备注名什么的) 等, 相信这些资料不可能 100% 对上, 那就只能触发人工审核看有多少的匹配度, 或者机器也可以设个阈值直接判. 除了这些, 真想不出有啥靠谱的方法. 比如 Facebook 那个非常赞的功能, 放 QQ 上就未必适用, 一个是实名真实网络的延伸, 一个更多的是虚拟关系, 我 QQ 上很多人我未必就记得他们的很多细节, 经常联系的人, 可能也会忽视他们的一些变化 (比如头像等)

5. 别人可以恶意申诉, 然后自己又要申诉回来
狗: 这个没遇到过, 不好评价, 不过考虑到本来申诉的适用场景, 如果有人通过社会工程学获得一些个人信息, 然后去恶意申诉抢帐号, 那似乎也是无解? 不然如果自己帐号真丢了去申诉时, 怎么判断哪个真那个假?

总结
这个事情在腾讯那 (在人人上很可能也一样) 就是无解的, 而目前这个解决方案已经是比较好的妥协各方利益了. 我 BS 小白和喷子, 但更 BS 那些只活在理想国里干着喷子事的所谓 “精英”, 就跟最近微信启动页上引用的 M.J. 的那句话: “如果你说我是错的, 那最好证明你是对的”. 有能力去调研下实际情况, 然后给出有效解决方案, 比建立在自己假设上提出一堆看似牛逼实则无用的方案要踏实的多.

P.S. 当然, 我也没有提出更优的解决方案, 所以, 我同意被划到小白和喷子的行列, 不过, 那些 “精英” 请不要站在道德制高点, 显得好像你就高人一等, 同时还是一样的乱喷.

面试题, 随机抽样问题及扩展

今天看到张栋在新浪微博上说一个他当时被 Google 面试时碰到的一个问题 (其实我也碰到过), 觉得这个问题很有意思, 我自己也在工作中碰到过该问题的实际应用, 扩展一下, 大家一起活动下脑子玩玩 :) (答案我就不说了, 不然多没意思)

原始版
有一个店老板, 他决定从每天光顾他的店的顾客中随机选出一个人, 在当天打烊时给这位顾客发去一份小礼品, 问怎样选才能保证随机 (我表达能力太弱, 没看懂的请直接看抽象版. 关键点, 顾客不是同时来, 所以没法让这一堆人站好随机挑, 而且每天会来多少人你不知道, 可能打烊前突然来一大拨人, 老板比较呆, 只能记住一两个人, 没法把所有人的信息都记录下来)

抽象版
有一个数据流输入过来, 请在数据流停止时, 返回数据流中的随机的一个数. 注意, 数据是流, 只能一次读, 而且数据流很大, 本机无法完整存储 (最多也就很少几条)

实际应用
从每天的日志中, 对符合条件的日志, 随机抽出一条来做校验, 数据太大只能一次读过去, 要保证是随机的

加强版
如果店老板每天不是送一个人礼品, 而是送 k 个人礼品, 怎么办?

加强版的抽象
从数据流中返回随机的 k 个数

加强版的实际应用
从每天的日志中随机挑出 k 条来做校验

带权版
每个顾客有一个会员级别, 级别越高的人获奖概率越大, 怎么办?

带权版的抽象
数据流中每个数有权重 w[i], 对数字 i, 返回他的概率从 1/n 变为 w[i] / SUM(w[j], j from 1 to n). k 个数的情况类推

带权版的实际应用
从日志中按权重挑出一条或 k 条来做校验

分布式版
老板开了 m 家分店, 希望还能按平均概率给随机一位或 k 位顾客奖品, 怎么办?

分布式版的抽象
有 m 个数据流, 最后返回的是 m 个数据流合并后的随机数, 一个或 k 个

分布式版的实际应用
日志太大, 一台机器搞不定, 分布式抽取随机的一条或 k 条来做校验 (我下星期会做这个, 所以不要说面试题都是面试官蛋疼想出来坑爹的…)

nginx/php/检索折腾记

仅仅是想实现一个查询接口, 后台每天凌晨更新一份数据, 按存储. web 端可以查询所有 key1 对应的记录, 或者 key1 + key3 的记录, key2 不管, 但是也是个 key, 而且结果要按 key1, key2, key3 来排序. 这里有个问题是只按 key1+key3 查, value 有多个

只会很土鳖的 php 和 python, 于是考虑 php 做 web, 后面用 python 来做查询

机器上没有 web server 和 php, 于是先装. 没有 root 权限, 所以尽可能简单的搞, 把 nginx, pcre, php 都下到 /home/yewen/soft, 解压备用. pcre 是一个库, nginx 需要这个库的支持才能读取跟 php 连起来的部分配置

# 编译安装 nginx
cd ~/soft/nginx-1.1.1
./configure --prefix=/home/yewen/nginx --with-pcre=/home/yewen/soft/pcre-8.13
make
make install

# 改配置
cd ~/nginx
vim conf/nginx.conf

# 此处修改端口号 (http/server/listen)
# 修改 php 支持 (去掉 http/server/location ~.php 那一大段的注释, 不是 proxy)
# 修改 php 支持的路径fastcgi_param SCRIPT_FILENAME /home/yewen/nginx/html$fastcgi_script_name;
# 直接启动
./sbin/nginx

# 编译安装 php, 必须启用 fpm
cd ~/soft/php-5.3.8
./configure --prefix=/home/yewen/php --enable-fastcgi --enable-fpm
make
make install

# 改配置
cp php.ini-production ~/php/etc/php.ini
cd ~/php/etc
cp php-fpm.conf.default php-fpm.conf
vim etc/php-fpm.conf

# 将 user/group 改为本地用户
# 去掉 pm.min_spare_servers和 pm.max_spare_servers前面的注释并设置合理值

# 启动
cd ..
./sbin/php-fpm

写了个很简单的 php, 就是接受一个输入 key, 然后把这个 key 作为参数, system 调用 python 处理, 输出到某临时文件, 然后 php 再读这个文件输出, python 处理是用的最土鳖的扫描文件的方式, 而且由于文件里是按 key1, key2, key3 的顺序排序, 我们的查找有按 key1+key3 来的, 所以必须扫描整个文件, 后来发现这么搞实在不靠谱, 一次检索太慢了, 要数据规模稍微大点, 并发多点, 那就崩溃了

于是考虑把所有数据都加载到内存里来, 用 python 做一个 daemon, 然后 php 通过本机 socket 跟这个 daemon 互动. 不会搞 socket, 于是先学 php 和 python 的 socket 使用, 很简单, 只是因为我为了省事 php 编译的太简单, 居然不支持 socket 方法, 问了下 felix021, 改用fsockopen搞定.

这时候 python 是把所有数据 load 到内存, 用一个以 key1 为 key 的 dict 存储, dict 的每条记录是一个 list, 存储了所有 key1 对应的记录. 如果查询是只有 key1 的, 把这个 list 做下格式化返回就行了, 如果是 key1 + key3 的查询, 则把 key1 的 list 取出来, 做一次遍历, 看 key3 是否就是我们要的, 如果是, 加入结果 list, 最后把这个结果 list 做格式化返回. 因为每个 key1 对应的记录撑死也就几万条, 查询速度完全没有问题, 内存占用 3.2G.

后来发现这台机器没法提供对外服务 (这么坑爹的事情这么晚才得到确认), 换用一台台式机来处理, 这时候内存显然不能这么乱搞, 优化一下, 开始写人肉索引. 内存里还是一个以 key1 为 key 的 dict, 只是 value 改成 key1 在原始文件里的偏移量. 查询的时候, 打开文件跳到 key1 对应的偏移量挨条扫描, 直到到达 key1 结束的地方. 速度还是很好, 因为文件操作毕竟不算多, 至少人肉感觉不出来有迟钝, 内存占用 10M.

把这个问题泛化下, 貌似就可以做面试题了, 一个简单的查询系统. 只要按某个 key 有序, 一开始可以全内存搞, 扩大数据规模后就必须内存索引 + 磁盘文件, 再大就要多级索引, 再大就分库. (我决定今年面试我一定要问这个问题, 如果看过我 blog 的, 那就现场写实现, 如果不考虑做 list 格式化, 整个程序不超过 50 行)

Jeff Dean 对 G 的架构的串讲

原始来源: http://www.tektalk.org/2011/08/09/jeff-dean-%E8%B0%B7%E6%AD%8C%EF%BC%8C%E8%BD%AF%E4%BB%B6%E7%B3%BB%E7%BB%9F%EF%BC%8C%E7%BB%8F%E9%AA%8C%E6%95%99%E8%AE%AD/

很多资料外面都有, 不过听下串讲还是不错的

slides: http://www.tektalk.org/wp-content/uploads/2011/08/101110-slides4.pdf

youtube 的视频: http://www.youtube.com/watch?v=ulBalk7Od-Q

历史上的两次事故

/* 关键词: 封连线
* 死程序员的解读: gdb 中断时强行修改变量值, 继续执行导致程序无法检测异常, 出 core
*/

/* 最近一次是 08.2.21, 萧山 (未发生路外事故), 来源 http://news.sina.com.cn/c/2011-07-28/055022890573.shtml */

2月21日17时55分,上海局萧山~萧山西间0038G发生红光带。信号工在处理故障时,不登记停用,不联系汇报,违法使用封连线短路三组继电器接点,导致0038信号机显示错误升级,致使k76次旅客列车在萧山站以正常速度通过,闯入已停留N448次旅客列车的同一闭塞分区,K76次列车在车站值班员连续七次呼叫机车乘务员前方有车,要求慢行的情况下,经紧急制动停车,两车首尾仅仅相距130米,距发生追尾冲突、造成车毁人亡的严重后果差之毫厘之间,后果十分可怕,构成客车一般C类事故。

/* 影响最大的是荣家湾, 来源 http://bbs.railcn.net/viewthread.php?tid=7459 上面新浪那个来源也可以部分参考 */

1997年4月29日10时48分,京广线湖南省境内荣家湾车站发生了324次旅客列车与818次旅客列车追尾冲突行车特大事故。

一、事故经过
(一)概况
1997年4月29日10时48分,昆明开往郑州的324次旅客列车行至京广线荣家湾站1453公里914米处,与停在站内4道的818次旅客列车尾部冲突,造成324次旅客列车机后1至9位颠覆,10至11位脱轨;818次旅客列车机后15至17位(尾部3辆)颠覆。
(二)经过
1997年4月29日,818次旅客列车(长沙——茶岭)全列编组17辆,总重901吨,由长沙机务段ND2型222号机车牵引,司机李睿、副司机李伟和长沙列车段运转车长罗建华担当值乘,长沙客运段担当客运乘务。列车于10时35分到达荣家湾站4道停车,计划待避客车324次。
324次旅客列车(昆明——郑州)全列编组17辆,总重882吨,由长沙机务段DF42520号机车牵引,司机李建文、副司机陈勇和长沙列车段运转车长谭列军担当值乘,郑州客运段担当客运乘务。列车10时42分通过黄秀桥车站后,荣家湾车站值班员曾海泉即布置信号员李满娟办理324次列车Ⅱ道出站信号。324次列车凭荣家湾车站进站信号机绿色灯光进站,行至12号道岔处,司机发现列车进路不对,立即采取紧急制动,停车不及,与停在站内4道的818次旅客列车尾部发生冲突。

二、现场勘察、鉴定及模拟试验
(一)列车冲突时间、地点及现场状态 I
冲突时间:1997年4月29日10时48分。
冲突地点:京广线1453公里914米处。(荣家湾站内4道)。
事故机车、车辆于5月2日7时48分全部起复,车站恢复正常行车。
(二)人员伤亡及损失情况 <$8]lX
1.人员伤亡情况:这起行车事故共造成死亡126人,重伤48人,轻伤182人。 zI
2.行车设备损坏情况:机车报废1台,客车报废11辆、大破3辆、中破1辆、小破1辆,线路损坏415米,直接经济损失415.53万元。
(三)与事故有关的设备现状
信号员在办理324次1道正线通过进路时未发现控制台有任何异状,光带显示正确。事后经查证控制台和解锁盘各部铅封守好齐全;12号道岔反位开通4道,道岔无任何损伤。 &eHe
(四)列车运行监控记录装置检索情况 324次本务机车DF4型2520号列车运行监控记录装置主机(长机—016),从机车上封连线卸下后送岳阳机务段转储检索。

记录数据为:
信号显示:324次列车9时35分从长沙开车至荣家湾进站信号,全程显示绿灯。
进站速度:荣家湾进站时,每小时117公里。
列车管风压:荣家湾进站时为600千帕,行至1454公里12米处,风压为550干帕,3秒钟内降至零。
撞车位置:1453公里914米处。
检索结果表明:324次列车进荣家湾站时信号显示绿色灯光,就由1道正线通过。机车乘务员发现错进轨道时,立即采取了紧急制动措施。
(五)事故原因模拟试验情况
1997年5月3日9时03分至10时26分,技术调查组根据“4·29”事故调查领导小组批准的“4.29特大事故调查组模拟试验提纲”,对4月29日324次旅客列车与818次旅客列车尾部冲突原因进行了现场模拟试验。模拟试验的结果验证了事故发生的原因。

三、错接二极管犯下滔天罪
经过调查、模拟试验及技术分析结果表明,导致这起行车事故的原因及过程是:4月29日8时许,长沙电务段荣家湾信号工区工长吴荣忠,安排信号工郝任重、谢兰英对荣家湾站内南端12号道岔区段以南的道岔及信号机的电缆盒进行配线整理、加端子脾和内部卫生清扫,吴荣忠自己在信号楼内担任联系。8时30分左右,谢兰英步行来荣家湾站南端14号道岔处,开始对14号电缆盒进行清扫、加装端子牌编号;郝任重骑自行车来到12号道岔处开始进行作业,郝先打开12号道岔XB变压器箱,半箱内的1号端于电缆线甩开,擅自使用二极管封连线,将1、3号端子封连(此时12号道岔处于定位),而后又将HZ一24电缆盒打开,进行配线整理。10时22分,车站办理818次旅客列车进4道接车线路时,郝任重发现12号道岔由定位转至反位,马上打电话问吴“现在上行什么车进4道”?吴回答“是818次”。吴告诉郝“818次进站后我要接车”,并要求郝停止作业。10时35分,818次列车进入4道停车后,郝任重又用电话与吴荣忠联系,问“上行还有车吗”,吴回答“上行有车”。但郝任重未及时将二极管封连线卸下,恢复1号端子电缆线,而是坐在工具箱上与荣家湾工务工区巡道工彭拔群聊天。10时42分,车站办理324次旅客列车E道通过进路,控制台Ⅱ道上行进出站信号均显示绿灯,Ⅱ道通过进路显示白光带,12号道岔显示定位(由于郝的二极管封连线未卸下,甩开的1号端子线未接上,故12号道岔实际仍处于反位)。当郝任重看到324次列车将要进站时,仍未将二极管卸下,恢复1号端子电缆线,也不采取拦停列车的措施,而是站在一旁躲车,直至324次与818次尾部发生冲突。事故发生后,吴荣忠在运转室给郝任重打电话,问郝“是不是你支了什么设备,自己去检查一下”。郝接完电话,急忙回到12号道岔XB箱处,将二极管封连线卸下,恢复1号端子电缆线,骑自行车离开现场。

四、结论
这起事故的直接原因是:长沙电务段荣家湾信号工区信号工郝任重当日在12号道岔电缆盒整理配线作业时,瞒过车站值班员,将12号道岔XB变压器箱内1号端子电缆线甩开,致使12号道岔在反位时不向定位转动;又擅自使用二极管封连线,将l、3号端子封连,造成12号道岔定位假表示,破坏了12号道岔与Ⅱ道通过信号的联锁关系。郝任重在818次列车进站后及发现324次列车将要进站时,既不将二极管卸下,恢复1号端子电缆线,又不拦停列车,导致本应从Ⅱ道通过的324次旅客列车进入4道,与停在该道的818次旅客列车尾部相撞。
因此,这起事故的直接责任者是长沙电务段荣家湾信号工区信号工郝任重。

五、事故性质
关于这起事故的性质,有两种意见。一种认为:这是一起生产过程中的破坏事故。另一种认为:这是一起违章作业造成的责任事故。

有关铁路票价计算方法

原帖见 http://bbs.hasea.com/thread-306466-1-32.html 和 http://bbs.hasea.com/viewthread.php?tid=331506&page=1#pid4828054

中间和里程无关的票价只有这么几类, 均和动车组无关

附加费的种类有:客票发展金、候车室空调费、卧铺票订票费。客票发展金以前叫“软票费”,旅客票价不大于5元时为0.5元,大于5元时为1元;候车室空调费向乘车超过200km的硬席旅客收取,金额为1元,软席旅客不收候车室空调费;卧铺票订票费向购买卧铺票(包括各种等级的软卧、硬卧)的旅客收取,金额为10元。

和动车组票价计算有关的 (其中北京 S2 已经不是这么算的了)

动车组二等组在二等软座的基础上上浮10%,即
0.2805×110%=0.30855(元/千米);
一等座在二等组基础上再上浮20%,即
0.3366×120%=0.37026(元/千米);
特等座在二等组基础上再上浮50%,即
0.3366×150%=0.462825(元/千米);
每票另收硬座基准费率2%的意外伤害强制险,即
0.05861×2%=0.0011722(元/千米)。

普通动车组公布票价:(L为运价里程, 20 起算)
二等:0.2805*1.1*L+0.05861*L*0.02即0.3097222*L
一等:0.3366*1.1*L+0.05861*L*0.02即0.3714322*L
1000km以上二等票价按同里程新空特快硬卧下铺计价,一等与二等票价比为1:1.25。
此外,S2线动车组执行20km起价,并在公布票价基础上打0.76的折扣;京津C车津塘段按普D计价。

HTC Desire (G7) 折腾记

作为一个还算追新的 IT 民工, 在民工聚集处掏出 Nokia 1200 时总会被人 bs 一番, 加上晚上睡觉前, 早上醒来在床上挺尸, 以及吃饭等餐, 蹲坑无聊时还是需要有个打发时间的玩意儿 (勤奋的同学管这叫利用碎片时间学习, 笨狗太懒, 还是玩吧), 在清明节假期于木樨地某淘宝店入手 HTC Desire (G7) 咖啡色一台, 同时被忽悠的还有某喵一台白色的 G7, 阿牛一台同样是咖啡色的 G7, 当时入手价格是 2690/2810 (咖啡色/白色, 裸机带原装电池/充电器/线, 送 4G 卡/屏幕膜/套/擦镜布/读卡器), 跟老板说不要送的东西能不能便宜点, 说其实本来就没几个钱, 也便宜不到哪去, 就这样机器带回家了.

回来后在默认的 Android 2.2 (HTC Sense 2.1?) 用了一个星期, 大概摸熟了这机器的特点. 因为不爽买回来时系统里一堆莫名其妙的东西 (比如压根就没启动还老崩溃的搜狗输入法), 以及严重需要腾 ROM 空间给邮件等需求, 响应 Android 手机使用者的特点 (刷机重启换电池), 开始踏上刷机的不归路.

我自己手里这台机器到我手时已经 S-OFF, 所需的只是 root 权限, 按教程搞了个 unrevoked, 结果总在最后一步提示错误, 说 cid missing, 一开始以为是 3.32 的 unrevoked 有问题, 换 3.2 依旧, 搜了下找到这篇 http://www.miui.com/thread-16907-1-1.html, 按其方法顺利搞定, 越狱拿到 root 权限, 刷机一切顺利.

另外某喵和阿牛的机器就开始各种诡异了, 先说某喵的. 这个机器是 S-ON 的, 但是一开始没发现, 还是走 unrevoked, 遇到 cid missing 时很开心的用 adb shell 将 misc.img 给改了, 但是改完发现还是越狱不能, 进 recovery 各种折腾后把很多系统文件都搞没了, 后面感觉还是绕不开要 S-OFF, 只能想办法从这里开始. 接下来主要参考的资料是 hiapk 的这一篇 http://hiapk.com/thread-531173-1-1.html, 一开始觉得这个教程很靠谱, 但一看里面要刻盘, 然后再想家里一台台式机一台 X200 两台 X201i 都是没光驱的货, 对此方法就完全没了兴趣, 加上那个丑陋的开机第一屏, 怎么看怎么不爽, 总觉得应该有更合理的方法. 在考虑虚拟机或者量产 U 盘的可能被无数的帖子提示不靠谱后, 发现了用 MaxDos 直接加载 .iso 的方法, 觉得这个有戏, 去 http://skycn.com/soft/19793.html 下载了 MaxDos 装上, 然后把 hiapk 里给的那个 alpharev.iso 改名 maxcd.iso 放到某盘根目录下 (名字路径一定不能错, 笨狗就因此多重启了好几次机器), 重启时选 MaxDos, 然后选加载 maxcd.iso 启动, 顺利进入刷 S-OFF 的界面, 插 USB, 搞定. 然后就一切顺利了, 改版的系统大多自带了 root, 直接刷上就行了.

在搞定某喵的机器后笨狗信心大涨, 立马决定应该把阿牛从 JS 刷的破系统中解救出来. 这个机器拿到手时压根不能进 recovery, 用 unrecoved 越狱失败, 各种理解不能. 一开始没细看就认为跟某喵的是一个德行, 把机器拿过来继续进 MaxDos, 结果插上手机说这货不支持, 仔细看了看英文提示, 确实不支持, 把电脑和手机各重启一遍, 还是不支持… 怒. 再重启手机时一看, 我擦这好像已经 S-OFF 了也, 那 recovery 进不去是咋回事? 而且那个蛋疼的 unrevoked 不管刷自带的 recovery 还是别人的都搞不定. 继续搜刷 recovery 的方法, 看了很多, 也忘记原帖在哪了, 大致是按 http://bbs.xda.cn/forum-viewthread-tid-5874045.html 里提到的方法, 用 http://alpharev.nl/ 里的 PB99IMG_bravo_CM7.zip 弄内存卡里刷 recovery 成功, 既然 recovery 能进了, 那还不就是怎么搞都可以了…

个人觉得 alpharev 的 S-OFF 第一屏实在是不够美观, 半夜不小心看到说不定还会吓出心脏病, 继续按 http://hiapk.com/thread-531173-1-1.html 二楼里的做法改第一屏. 一开始看漏了要在手机 fastboot 界面下接 USB 线, 还想怎么手机连上去死活没反应, 把那个修改第一屏的两个包都搞下来试都不行, 还骂什么破玩意儿下载就扣积分. 冷静了下后想那个帖能被回三百多页并且没看见几个骂人的, 那一定是笨狗哪里搞错了, 把教程仔细又过了一遍, 果然是漏了要在 fastboot 模式下连手机, 重启一次手机, 果然顺利搞定.

目前用的 ROM 是 hiapk v3.4, 基于 2.3.3 的内核 + CM7.0. 刷完后进系统先别登陆 Google 帐户, 不然 Edge 开始哗哗走流量, 先跳过设置, 连上 wifi 后, 把 GPRS 关了慢慢折腾, 做如下设置改动: 1) 长按 Home 键的电源控制; 2) 电源小插件的开关; 3) 状态栏电源控制的开关; 4) 桌面改成 5 行 4 列; 5) 解锁界面改成默认滑块; 6) 修改上滑手势为显示/隐藏扩展栏 (这个是被逼的, 因为经常莫名其妙扩展栏就不见了); 7) 装自己用的一堆东西: (按字母序) Adobe Flash Player, Adobe Reader, QR Droid, Google Reader, System App Remover, 百度地图, 百度输入法, 百度文库, 飞信, 墨迹天气, 奇艺, 人人, 手机 QQ, 有道词典, 掌上百度; 8) 用 System App Remover 卸载 ROM 私货 hiapk 市场, Music^3, Google 输入法, 剩下私货中的智能拨号还行, 留下了; 9) 修改默认铃声等, 启用震动 (不然手机放口袋里短信什么非常容易漏过去), 如果不设全局, 则短信什么的都要进到程序界面, 然后 menu 键进设置里找震动; 10) 登陆寨厂 Exchanger 服务器, 同步最近一天邮件和日程 (随时可以被催命了)

最好养成如下习惯: 1) 用 Google Contact 管理联系人, 其他管理方式都各种不安全和不靠谱, 折腾过几次后就老老实实被 Google 绑架了; 2) 经常记得备份短信和通话记录, 不然以当前 Android 各种 ROM 的稳定性, 除非已经找到一个非常稳定的版本, 不然都各种诡异.

// 昨天终于搞定某喵和阿牛机器, 暗爽, 同时今天笨狗机器有一些莫名小问题 (比如无线抽风), 手贱重启后无法进系统, 又刷几次, 再跟某虹聊天才发现 Desire 已经跌到 2k2 的价位, 感慨上篇 hi blog 后, 愤而出本文

[转载加翻译]Good PM, Bad PM (一)

小小财神】:评价加翻译。这个文章是微软产品经理对产品经理的认知。虽然我认为微软对产品团队的重要性比较忽视,看到这篇文章,微软对产品经理还是比较重视的,只是微软的产品经理是个small business unit ceo的概念,涵盖了组织、协调、战略、规划、设计、营销和市场多方面的工作,这样的人才在国内特别稀少。国内的产品经理多是讲用户需求、体验和微创新,国内互联网企业也组织了比较大的产品团队,里面所有的人都叫产品经理,实际上如果按照本文的认知,国内的产品团队只有个别人可以叫做产品经理,多数人只能称为助理产品经理。

我翻译这篇文章的时候也思考了很多,外企多使用精英型的产品经理模式,包括google,对产品经理的要求非常高,甚至要求必须是技术出身;国内互联网多使用产品团队模式,两种模式的好坏以后再说。大家理解的时候先将文章中的PM理解为整个产品团队,而不是一个人。

Good product managers know the market, the product, the product line and the competition extremely well and operate from a strong basis of knowledge and confidence. A good product manager is the CEO of the product. Good product managers take full responsibility and measure themselves in terms of the success of the product. They are responsible for right product/right time and all that entails. A good product manager knows the context going in (the company, our revenue funding, competition, etc.), and they take responsibility for devising and executing a winning plan (no excuses).

Bad product managers have lots of excuses. Not enough funding, the engineering manager is an idiot, Microsoft has 10 times as many engineers working on it, I’m overworked, I don’t get enough direction. [Netscape CEO] Barksdale doesn’t make these kinds of excuses and neither should the CEO of a product.

好产品经理非常了解市场、产品、产品线和竞争,运作中有丰富的知识基础和自信。 好产品经理是产品的CEO,他承担产品的全部责任,并自我衡量产品的成功。 他们为所有适当的产品/适当的时间、所有流程负责。 好产品经理了解进入的背景(公司,收入,竞争等),他们承担制定和执行一个成功的计划(没有借口)。

坏产品经理有很多借口:没有足够资金;工程师经理一个白痴;微软拥有10倍多的工程师为它工作,我们劳累过度;我没有得到准确的方向知道。 [网景公司总裁]巴克斯代尔不会使用这些借口,所以产品经理也不应该。

小小财神评】产品CEO的概念,实际上是对产品经理最高要求,要求对每个方面都有清晰的认知。

我觉得最主要的是产品经理心态问题,积极心态是产品经理必有的特质,控制自己可以控制的事情也是产品经理的思维特性。不找理由,不迁怒于人,是一个产品经理基本的心态要求。

Good product managers don’t get all of their time sucked up by the various organizations that must work together to deliver right product right time. They don’t take all the product team minutes, they don’t project manage the various functions; they are not gophers for engineering. They are not part of the product team; they manage the product team. Engineering teams don’t consider Good Product Managers a “marketing resource.” Good product managers are the marketing counterparts of the engineering manager. Good product managers crisply define the target, the “what” (as opposed to the “how”) and manage the delivery of the “what.” Bad product managers feel best about themselves when they figure out “how”. Good product managers communicate crisply to engineering in writing as well as verbally. Good product managers don’t give direction informally. Good product managers gather information informally.

好产品经理不要使他们的时间被各种不同组织灌满,而且合理组织正确的时间交付正确的产品。 他们不是处理所有的产品团队会议记录,他们不是项目式管理的各项功能,他们不是忙于处理各种工程问题(打地鼠)。 他们不是该产品团队的一部分,他们管理产品团队。 工程师团队不应当简单认为好产品经理是“市场资源”, 产品经理应该是工程师经理的市场伙伴。 好产品经理清晰确定目标,确立目标是“什么”(而不是“如何”),同时管理交货“什么”。坏产品经理对自己感觉最好,他们想出“如何”(how)。 好产品经理清晰的和工程师团队进行口头和书面沟通。 好产品经理不给非正式的方向信息,但好产品经理非正式地收集信息。

小小财神评】好的产品经理解决的是发现问题,确立重点,而不是解决问题,如果产品经理集中在解决问题则是本末倒置。

Good product managers create collateral, FAQs, presentations, and white papers that can be leveraged. Bad product managers complain that they spend all day answering questions for the sales force and are swamped. Good product managers anticipate the serious product flaws and build real solutions. Bad product managers put out fires all day. Good product managers take written positions on important issues (competitive silver bullets, tough architectural choices, tough product decisions, markets to attack or yield). Bad product managers voice their opinion verbally and lament that the “powers that be” won’t let it happen. Once bad product managers fail, they point out that they predicted they would fail.

好产品经理创造可利用的市场宣传资料、常见问题解答、演示和白皮书。 坏产品经理抱怨说,他们整天回答问题销售队伍的问题,并泛滥成灾。 好产品经理充分考虑产品的严重缺陷,建立真正的解决方案。 坏产品经理整天扑火。 好产品经理书写重要的立场观点(竞争解决方案,艰难的架构选择,艰难的产品决策,市场进攻策略或收益)。 坏产品经理口头表达自己的意见,并感叹说“权力”才不会让这种事情发生。 坏产品经理一旦失败,他们指出,他们早就预计将失败。

小小财神评】产品经理对市场成功负责,要学会建立合适的市场营销知识体系,不会市场的产品经理不是好产品经理,好PM要会FAB,市场策略。好产品经理不依靠权力去贯彻执行,而是依靠领导力。

扯淡一句, 到 xx 年解决一票难求

最近大家很乐衷于发某新闻图, 同之前三峡那个. 看到这个, 忍不住想扯淡一句, 这个需求关系变化实在太快了, 每年的春运铁路客流的增长速度那么快, 超级大疯子刘跨越估计也是没预料到的, 还是希望 350 高铁骨干网尽快成型, 250 支线和城际快点铺开吧. 是扯淡一句不是愤一句, 要写愤一句估计半天内我就被人喷死了.

作为资深伪五毛, 发个搜来的数据:

历年铁路春运人数数据

2004: 1.4亿
2006: 1.49亿
2007: 1.56亿
2008: 1.96亿 (原文注释: 这一年有南方天气因素, 更多选择铁路)
2009: 1.92亿
2010: 预计客流 2.1 亿 (估计是去年或更早点的数据, 2010 还是预估)
2011: 预计客流 2.3 亿

// 2011.01.17 15:43 更新

其实对 “一票难求” 的定义大家也不一致, 如果是大家都能走的了, 大部分情况下还是不会 “一票难求”, 只是如果 “限定日期限定车次限定席别” 这种就比较麻烦, 这种也是黄牛最爱. 如果接受 临客, 接受 其他席别 (比如不一定非得是硬卧), 接受在可调整访问内改变日期, 还是可以的, 至少最近两年我都是硬卧来回, 有临客有改签, 非常好买票

今年懒得去折腾了, 过年不回家

乱弹某家的分词

作为一个严肃的 IT 民工, 对于某家退出这事还是挺关注的, 最近两天比较好玩的一个是 “你妈逼”, 一个是 “美少女战士”, 外行看热闹, 内行看门道, 我们也来乱弹下这里面的门道.

早几年在某家实习的时候, 大概瞄过几眼分词结果, 由于这个内容算是比较敏感的东西, 当时也傻乎乎的对这个没兴趣, 所以没有去看具体怎么做的, 只是觉得怎么这么挫, 分词出来切的这么碎, 你说把 “山谷歌曲” 这样的切开也就算了, 但是自家公司名单独输入时也切开, 这个有点说不过去吧. 后来在搜索结果中看多了, 觉得应该不是这样的, 只是我们都在自作聪明觉得自己很牛叉, 实际上, 最后他应该还是用了很强的方法将其重新粘结起来, 所以效果和更懂中文那家比起来, 应该也是伯仲之间. 下面我们用黑盒测试来分析看看.

回到第一段那两个情况, 第一个由于是粗口, 我们就还是不分析了吧? 还是大家觉得就这种才刺激? 在这个情况里, 真实的原因绝不是因为 “妈” 和 “逼” 两个字是被过滤的而导致只搜出 “你”, 而是 “妈逼” 这个词被过滤, 不信大家分别搜 “你妈逼”, “妈逼”, “妈”, “逼”, “妈了个逼”, 可以发现只有 “妈逼” 俩字挨一起出现才会被过滤, 其他情况都不会. OK, 这里我们得到结论一, 安全搜索里提示的切词结果并不是他们家最终的切词结果, 充其量只能算是最细力度的基本词, 回头他会拼回去的, 而这个拼接功能非常强大.

一上来就拿粗口一句来做样例, 实在是有辱斯文啊, 罪过罪过. 再来看 “美少女战士”, 关于为什么 “美少女战士” 会被提示 “美” “少女” “战士” 被过滤, 而 “少女战士” 等就不会的原因, 见上一段分析, 这里我们分析另一个维度, 请大家去试试看 “美少女戰士”, 是不是什么状况都没发生? 而右上角还是提示我们安全搜索是打开的, 这可以得到结论二, 某家不做简繁转换, 简体就是简体, 繁体就是繁体, 当两种语言来对待, 而且简繁过滤词表不一样.

我刚很犯贱的想去试试看 “胡萝卜”, 结果直接就被盾了, 我真想说功夫网的中文处理能力真的有待提高啊…

OK, 等了一会, 恢复后我们继续. 来看看某家在浸淫输入法也好几年后对中文纠错的情况, 先来个简单的, “开心网”, 没错, 一切正常, 那 “开星网” 呢? 会提示我们是不是 “开心网”, 不过很奇怪, 为什么只有前面两个字飘红了? 再试了下 “开星”, 能纠成 “开心”, 看来是按纠错词来给出建议的, 只标记纠错的部分? 为了验证这一想法, 再试了下 “开心不开星” 这样的纠结查询, 果然. 但是回头当我用 “kaixin”, “kaixing”, “kaixinwang” 再实验的时候, 感觉这个又不是很确定了. 今天在某群里, 一群无聊的人在试各种各样奇怪的查询, 比如 “小泽玛利亚”, 华丽丽的被提示每个字都是屏蔽字, 有了前面分析的结论一, 我们知道这其实是因为这五个字有机结合的时候才被屏蔽的, 但是纠错呢? “小泽玛莉亚” 就丝毫没事, 也不提示我们正确的写法, 抑或这种译名某家也没有说确定哪一个才是正确的? 再试试看 “xiaozemaliya” 呢? 也还是不提示, 仔细看了下, 我用的确实还是简体中文的 .com.hk, 按理应该跟 .cn 逻辑一样啊, 也不给纠错提示, 太失望了, 难怪某家占有率一直上不去, 这种淫民大众的基本需求都满足不了. 但是 “小澤瑪利亞” 这个, 却能飘红 “玛利亚”, 这个让我表示比较理解困难, 同理, 用 “小澤玛丽亚” 会提示 “小澤玛利亚” 并标红 “玛利亚”, 而且搜出来的结果中大多也是简体 “小泽玛利亚”, 这个同样理解困难, 某家的拼接术太强了.

后记, 这些乱七八糟的分析足以见得 IT 民工们都是多么的无聊和猥琐, 连测试用例都这么的圈圈叉叉. 不过另一方面来说, 优秀的 IT 民工还是应该刨开口水战, 去分析看看真正的技术细节是怎样的, 今天发了个搜 “百度” 出 “www.google.cn/sh2009” 的广告截图发出来, 那些喷子们却又一个都不敢说话了, 果然只是一群不值一提的喷子. 截图见 http://att.newsmth.net/att.php?p.26.804632.482.jpg, 怎么弄出这个效果各位自行分析 :)