技术宅

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 行)

奇梦

昨晚上弄到很晚才睡, 感觉一直在做梦, 挺好玩的

第一个梦是别的公司给我发推荐奖金, 因为很多推给寨厂的实习生因为时间太短等原因被拒绝, 转给其他公司后过了, 或者是一些正式员工被寨厂面挂了后被推给其他公司, 也很顺利的过了试用期. 看了下人数, 远比我在寨厂拿到的多啊, 一边感慨到底是寨厂面试标准太严还是寨厂的推荐奖生效条件太苛刻, 一边注意到一个很奇怪的数字, 1364/每人. 醒来后在想为什么会是 1364 这个数字, 而不是整数的 500/800/1000/2000 等, 琢磨了下, 应该是 1364*110%=1500.4, 约等于 1500, 是公司已经把这部分要扣的税直接帮交了, 并让员工收益最大化么? (如果直接给 1500, 按 10% 扣税的话, 到手就只有 1350 了)

想清楚这一节后顿时觉得自己好冷, 做梦都这么无聊理工… 一定是昨晚上太凉快了被冷的

第二个梦是和愤青怨念熊 leemars 有关, 此熊最近搬家了, 这是背景. 梦里熊某天下班回去, 说不行我得快点赶回去, 不然就来不及做糕点了, 我当时就大脑短路说你做糕点干啥, 熊说我搬家后兼职弄了个糕点屋, 你要不要尝尝. 梦里过了几天, 愤青熊说老子不在这怨念下去了, 直接离职走人, 反正家里那个糕点屋做的比寨厂有意思多了, 也更赚钱. 貌似这个时候笨狗大脑终于物理短路了, 死活没想明白这中间的关联, 憋醒了…

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 后, 愤而出本文

投资瑕疵

清明节时买的 HTC Desire (G7), 到现在跌了四五百, 跌幅 15%+, 还连带被我忽悠的阿牛也被坑爹

最近 G/F/W 大规模抽风, 才买了两个月的年付 ssh 在公司疯狂掉线, ping 都 ping 不通

上周 Apple 官网有 3 天发货的 iPad 现货, 抢了个订单, 后面觉得没用自己又取消了, 其实买个倒手赚个打的费也没啥啊, 原价转个 Quota 给别人也没啥

对电子产品/网络设备的敏感度急剧下降… 最近手机诸多不爽需要折腾, 就是没事折腾, 回头写个 G7 折腾手记

PUZZLES 群聚段子补遗

0x00 某公司的报销制度非常苛刻, 只能一次报 20, 大发票不能拆开报几次, 所以他家的人都找小额发票
0x01 上面是铺垫. 这次给某人带了一把最大不超过 50 的手撕发票去
0x02 在 IW 的大会议室的某个角落, 给发票时不小心被别人看到了, 然后有人喊了一声 “发票, 发票”
0x03 于是我只好跟着喊了一句 “光盘, 光盘”
0x04 某熊在摆弄他的 ip4, 很 (此处感情请自行脑补) 的说, “人说用 iPhone4 的人傻钱多, 我终于也迈入钱多这个行列了”
0x05 某狗今天算了下, 手头上除了电脑就没有别的数码产品了, 无语啊
0x06 手机是黑白屏的, 数码相机没了, 各种 pad 更是毛都没, 我好像只满足 “人傻” 这个 feature

碎碎念 20110301 (20110309 写完)

最近有很多事情值得记录下, 想到哪写到哪吧

0x00 工程师的理想

年会上 “盒子里的梦想” 是一部绝佳好片, 同时也让很多人开始回忆或思考自己的理想/梦想是什么. 我一直固执的认为, 理想是在现有条件下, 在可预见的未来, 通过自己努力可以达到的愿望, 而梦想, 把理想定义的三个修饰词都换成未来条件, 不确定的将来, 必须要天上掉馅饼才能达到的愿望. 拿自己现在的状态来说, 理想是手上这几个项目能顺利推进并发布, 在此之间提升自己的能力和思维, 并获得公司升职和涨薪作为认可, 梦想, 梦想就是我现在隔三差五还是会买个彩票, 嗯, 你懂的.

最近看到挺多牛人从 Google 跳去 Facebook 的报道, 于是在 Twitter/Buzz 上评论了下, 大意是公司大了后很多事情就没那么灵活, 很多人的想法得不到满足, 觉得自己无法展现价值, 于是去能更自由发挥的地方. 在这点上认为钱真的是小事, 那些大佬们应该也早不缺钱了吧, 而且 G 家应该也还是会花挺大成本来挽留这些人的, 除非真的就是 G 的高管和 HR 们都脑子进水了, 不然就是所谓的大佬是 “水货”, 走了也不可惜. 换到自己身边来, 倒是看到挺多人去了创新工场, 虽然我一直不看好李开复, 也看不懂创新工场的盈利模式, 但是不阻碍挺多人放弃现有的稳定工作或自有创业跑去那边拿更少的钱更开心的每周六天的工作, 至少, 从我认识并且还能称得上熟悉的朋友表现出来的感觉就是, 他们真的在很 high 的做自己的事情.

身边的一个朋友最近出了点状况, 在换工作过程中就在纠结到底是去个相对稳定靠谱的国企, 还是去创新工场这样职位和工作内容都太对自己胃口的地方, 不过他的身体相对偏弱一点, 所以每周六天工作这个反倒是一个比较大的影响因素了. 上周末跟着某技术群去创新工场听几个讲座, 跟一大堆圈内朋友一起扯淡, 发现大家其实都是一样愤青, 只是愤青程度不同罢了. 考虑上个人情感因素, 我还是觉得寨厂的同学们是相对更愤青的, 究其本质, 还是寨厂的 KPI 文化导致了整个公司的一些奇妙状态, 比如已有的系统只要转的动, 那再烂也不会有人去动, 因为弄好了没成绩, 是你本来该做的, 而弄挂了是坏事, 再比如一些质量的问题, 在大家都在疯狂跑步前进的时候, 你在一步一步扎实前进, 等你扎实的成绩出来时, 别人可能早就甩开你了, 又回到第一个比如内的困境.

此部分未完待续, 属于工作是为了什么的继续

0x01 PUZZLES 群聚

0x0100 IT 民工们纷纷表示周末下午一点在中关村碰头是不是太早了点
0x0101 到达现场后立马出现了三台 MBA, ip4 这种大路货就不再有人围观和询问了
0x0102 zouyu 同学讲的时候, 问了下大家现在在用的手机系统, 笨狗坚持自己曾经用过的 s60v3 也是智能机, 现在的 n1200 不算
0x0103 是不是真的该去换个好点的手机? 好歹也要跟上时代吧? 自己没事折腾下应该也还好

// 因为各种蛋疼原因, 上面写于 3/1, 下面写于 3/8

0x0104 开场前大家在 IW 研究那几台 MSI 的平板, 全在扫雷, 触摸屏不能右键太疼了
0x0105 忘记是谁说的了, “高手扫雷都是不用右键的”
0x0106 大多数人表示, “扯淡, 扫雷不用右键那还扫个腿”
0x0107 一堆人继续很有兴趣的研究了下那个平板电脑怎么判断触屏操作的, 某人说是红外摄像头 (今天 PUZZLES 群还就这个问题讨论了很久)
0x0108 讲座完了后和 lxh 在平板上来了一局国际象棋, 俩新手 (我是纯入门, lxh 应该还是入门过的) 在上面下的让一群不会的人都看的蛋疼
0x0109 互相失误让了几个子后, 一致表示场面上子少一点比较好, 这样入门级选手才判断的过来, 有助于发挥真实水平
0x010a 最后和局… 至于为什么和局, 这个, 嗯, 主要是我太弱了, lxh 再让我他就死了, 不让我的话我就死了, 于是握手言和

// 继续因为各种蛋疼原因, 上面写于 3/8, 下面写于 3/9

0x010b zouyu 同学讲的 Web 应用转手机应用, 现在在 PC 领域应该也挺多的, 是个比较赞的快速推进方法, 但是要做好估计还是有难度
0x010c dikang 讲 ZooKeeper, 终于明白了为什么很久以前 czogogo 说 cosmos 的主控是投票得出的, 可以进行比较好的热备切换, 应该是一个原理
0x010d 不知道某家的 Hadoop 有没有引入这个功能, 在某群问了下没人理我, 问 boluor 也不是非常清楚的样子
0x010e 不过某家的集群问题大头应该不在这边, 今天还要去讨论下改进方向和方法. (更多涉密内容, 请自行脑补)
0x010f jin 讲 news cluster, 因为以前在某家做过 news search, 有不少东西是可以比较好明白问题描述的, 这个比较爽
0x0110 不过当年太弱也太傻, 没怎么看核心的东西, 所以也不好比较优劣度
0x0111 倒是看起来跟以前做的 image content search 更像一点, 做聚类然后方便 search
0x0112 大概了解了 M 家说的实时库和 T 家小库/大库等结合方式, 不知道在寨厂的太医院能不能做, 把反馈时间从天级别变成小时甚至分钟级别
0x0113 不过这个可能往另一个方向去想会更好, 比如个性化? Realtime xxxx? (更多涉密内容, 请自行脑补)
0x0114 题外话, M 家的人 PPT 做的都很好, 至少看着很舒服, 比如 zouyu 君的简洁流, 和 jin 的图文 paper 流
0x0115 这里有点打击 kangkang 了… 其实比国内大部分的 PPT 都要好了, 只是某狗在 UE 方面向来比较挑剔, 然后跟那俩对比了下
0x0116 聚餐还是很开心的, 聊了很多乱七八糟的东西
0x0117 发现 IT 民工都是一样愤青的, 只是愤青程度不一样而已
0x0118 不知道是因为在座的寨厂工友都偏激还是咋滴, 反正感觉寨厂工友是最愤青的 (熊你就不要装了, 你比我愤多了)
0x0119 KPI 文化害死人, 让大家都在变成螺丝钉而不是有理想的攻城师 (此处不是笔误, 故意的)
0x011a 理想这个东西, 很纠结, 但是必须要保持. 位卑言轻, 有理想也没用, 先在 KPI 文化下爬上去; 说话管用后, 推些理想的东西还是不错的
0x011b 所以说起点很重要, 环境也很重要, 最重要的, 是自己一直还能坚持自己的理想

0x02 2011/03/09 杂念

0x0201 今天早上更新 Win7 SP1, 本来是打算全新安装的, 不过看 Windows Update 都推送了, 就装玩玩吧
0x0202 不过 X201i 居然蓝屏两次才搞定, 真疼, 也还好他蓝屏我才有时间写这个
0x0203 最近几天在干跟 KPI 无关的事情, 但是确实是很理想的东西, 我很幸福
0x0204 SPILT: spill 的过去式和过去分词, 使溢出, 使流出, 泄密; 使摔下使跌倒; 他喵滴这说的不就是坑么
0x0205 自己对自己今年的目标是, 第一想尽办法干掉这个坑爹的玩意儿, 第二才是自己的项目推动
0x0206 都很美好, 都很有理想, 希望明年这时候, 我还能维持这么有理想
0x0207 最近每天 8:00 前来, 视情况 18:00-23:00 走, 做事, 积累, 无愧于心

技术宅拯救世界, Linux top 命令

今天才发现这个东西还可以配置的, 好玩. 以下为参考 top 的帮助后原创翻译, 注意所有字母区分大小写.

进入 top 后, 按大写 Z 可以进入彩色配置模式, a/w 选不同的配置, 如果要自己配置, 用大写 S/M/H/T 选要改的内容, 0-7 选颜色, q 不保存直接退出配置界面, 直接回车保存退出配置界面 (发现那四个配置居然刚好还是 SMTH, 而且 0-7 就是 telnet 标准配色)

在 top 界面下, x 打开/关闭当前排序列高亮, y 打开/关闭当前运行任务高亮, z 打开/关闭彩色, b 打开/关闭高亮区域加粗

用 f 进入显示列选项, 无论大小写都可以打开或者关闭某一列, 不在列表里的任意键按了后退出配置界面

用 o 可以进入显示列调序, 对应列编号大写上移小写下移, 不在列表里的任意键按了后退出配置界面

用大写 F 或 O 选择整个 top 按哪一列排序, 我选的按 CPU, 不在列表里的任意键按了后退出, 或者在正常的 top 界面下用 > 或者 < 移动选择按下一列/上一列排序 (推荐在用了 x 后再用 > 和 <, 这样比较直观) 最后全部配好了在 top 界面下按大写 W 保存配置 ========我是吐槽的分割线======== 果然技术宅拯救世界, 无趣的死 IT 民工啊