见世界

假腿

上周boss有个非常规需求,刷视频广告。
这个项目用到一些不常用到的东西,而且有性能要求,在我看来还蛮有意思,听需求的同时就心里就做了架构。碰巧最后boss点名要我来做。呵呵,客气一下,接手。
当时牙疼发作好几天,一宿一宿不睡的疼,手头也还有一些工作(毕竟不算一个团队的,不能喧宾夺主)。周一晚上抽出一个小时写了原型,周二晚上,硬件需求与收益评估。上周三请假半天去做了根管治疗,回来发现竟然给了别人来做。
思路明确,简单有成效的事,当然都抢着做咯。
觉得挺可惜的,这里把架构稍微写一下,做个备份。

需求:模拟真实访问,浏览一个视频网站的广告。

分析cpc.png:

 

[caption id=”” align=”alignnone” width=”658” caption=”plan.png”][/caption]

代码比较简单,但也并非无处着力,简单说一下:
0.chrome提供丰富的API完成了大部分功能(切换代理,切换用户)
1.选择perl作为实现语言,一来比较熟悉,二来毕竟有非常多的工具,支持多线程。
2.http代理预期的有效比率和稳定性都不高, 计划使用“生产者-消费者”模式维护一个代理池。最好放在internet(或者中心机)上,单一出口也方便各种统计和复用。
3. 由于有许多机器再跑,部署繁琐,所以需要一个分发机制。设计:所有客户机上运行cronjob,每5分钟请求中心机指令,代码就放在中心机上。如此,在linux环境下部分实现了批量管理。(这也是我坚持要用linux的原因,win的默认工具太少了)

以上都是我使用过的模式,我觉得已经比较完善,在控制之中。
可惜没能由我来实现。sigh ╮(╯_╰)╭

这个项目的时效性很强,boss其实是有点急的。
今天上午找到我,又想让我来做这个事。
尽管拒绝很伤感情,但是我反对。
来看看我面对的情况:
接手做这件事的同事,先是用php实现了核心功能“循环访问”。
但是php毕竟不是为此设计的,于是改用python。
由于缺乏python的使用经验,到昨天为止,连续出现了一些bug,这才推到我这里。

这份代码,没有对代理进行过滤,没有考虑部署问题,也没有真正的多线程。甚至还有bug处在未修复状态。
但这是我同事的代码,另起炉灶显然不礼貌。
另一方面,时间紧迫,我无法用python实现同样地架构,我只能照着原来的思路改下去。
这个情况让我很焦躁,明知有较好的方案,我根本无心修复一个薄弱版本。
何况要消耗几乎一样的时间!

我对使用python这件事本事就不赞同。
语言应该按需选择,语法学习很简单。
但应用之前需要有一个“犯错”的过程,必须掌握更多的细节。
脱离应用学习一门语言,效果能持续多久?几周?一个月?
除了开阔一下眼界,我觉得就是浪费时间。
如果你不知道哪些能实现哪些不能,用到一个功能都要google一下是哪个函数,调用一个函数就要google一下函数原型,那说明时机还没到,尤其不该用在这种时刻。语言是用来炫耀的资本吗。
python是有多线程支持。封装好的多线程的确应用极其方便。
但始终存在这么一条朴素的真理:学过就会,没学过就不会。
咱们凡人接触多线程编程,至少要写几个原型,思考一会吧。

我知道一点python。
上家公司CTO姚博为我们团队写过一套牛逼的抓取程序。我对照写了我的第一个perl爬虫。
后来需要切代理抓简历,公司里一个大牛也尝试用python来写。(高手程序一定读)
但我自己水平不行,我认为有太多细节阻止我把注意集中在功能实现上了。
“用google写代码不是我的风格”是很装逼。但是我有腿,干嘛非要塞给我一双假腿呢?
总是用十分的能力做八分的事情以期能够完美地解决问题。一直是我心目中code的圣杯。
(话说python功能与perl重叠,语法风格却在perl的对立面,有谁主动同时掌握python与perl吗?)

我自己也有问题,在于总是觉得没什么好说的。
为自己争取权益,开不了口。
涉及个人的一些小坚持,开不了口。
伤害朋友感情,主观上开不了口。
结果boss以为我闹情绪,15台机器部署交给我了。
shit!自己的错我愿意负责到任何程度!
但是真的没有更好的部署方案了吗?

我不总跟自己为难。
花钱请我做这种工作其实是我赚了,对不对。
晚上吃着垃圾食品,听他们聊聊行情,也很好嘛。
搭把手给同事写写bat文件,也算是交流感情啦。

11点到家。
写博客到现在(2011年11月24日1:29:26)。
想想最近颇有一点事情要做呢。