PHP——成也Web,败也Web

早年我并不知道Python写的Web应用是怎么部署的,总觉得像PHP、ASP一样,仅仅提供一个语言级别的执行模块,直接嵌入Web服务器运行,甚至于直接对外提供带扩展名的URL都是自然而然的事情。

前一阵学习了Python,总是如别人一样,不自觉的和PHP进行对比。随着学习的逐步深入,更发现PHP的发展受限于其Web出身,恐将来难成正经的通用开发语言。

先说说PHP从历史到今天分别是怎么运行的:

  • CGI SAPI:由Web服务器的请求处理进程fork+exec这个CGI,用环境变量单向传递Headers给应用程序,应用程序从stdin读request body,其stdout会被Web服务器作为response headers和body输出给客户端。Web服务器和PHP CGI的关系是父子进程间通信,当应用程序的响应速度较慢时(忙于计算、外部I/O等),会阻塞对应的Web服务器进程/线程;而且因为CGI进程的输入之一是环境变量,导致其只能一次性使用,需要承担频繁fork()的开销
  • Apache2Handler等Web服务器模块类SAPI:Apache2调用Handler,并向其传递server_context;Handler利用server_context读到Header、body等内容之后构造起PHP脚本的context,也就是$_SERVER之类,然后开始执行PHP脚本。而脚本执行的输出也直接被Web服务器收集。PHP和Web服务器在同一个进程内执行,处于完全从属的地位。Apache2Handler方式本来可以通过多线程等方式让Apache不受PHP阻塞,但由于PHP社区的坚持,目前常见的Apache2+PHP配置都是prefork MPM的,以至于性能相当一般
  • FastCGI SAPI:原理是把每次fork处理一个请求,变成一个不退出的循环,每循环一轮就处理一个请求;多进程listen在同一个socket上,实现并发。PHP-FPM是后来的一个民间补丁项目,提供了更好的进程管理和附加功能,处理完License问题之后,FPM合并入PHP主线。Web服务器和PHP的关系是网络通信的关系,可以分离到不同服务器上部署。Web服务器可以使用多线程或者I/O复用技术来处理别的请求,性能会>比前二者好很多。但FPM的实现仍然不够好。

PHP的各种扩展模块,大都是偏重于数据库、字符串处理等应用层面的功能,充分体现了其作为Web开发利器的特点;而对于I/O、POSIX基础功能,则关注较少。
Web开发之外的领域,用PHP写独立运行的服务器,并不是主流的用法。其依赖的pcntl、pthread等模块也是较晚加进来的,而且也没啥人用。用

  1. PEAR Net_Server(无人维护) 通用服务器框架
  2. PEAR HTTP2 协议解析库
  3. PEAR HTTP_Server(无人维护) HTTP服务器框架
  4. PECL pecl_HTTP(需要编译) HTTP服务器框架,我没编译出来……
    等几个模块,可以很容易的创作一个独立的HTTP静态文件或SOA服务;但如果想在其中运行一般的Web PHP脚本,就需要用PHP本身实现一个SAPI:
  • 输入方面是很容易仿制的,除了需要构造Predefined/Reserved Variables(感谢作者,$_SERVER等只是普通数组,只须填充内容即可)再写一下上传文件自动存盘的处理就差不多了
  • 输出方面就比较麻烦,因为“写”是动作,是对外部环境施加影响的。考虑到PHP深深的“假设stdout”情结,须使用output buffer机制收集输出内容,副作用是chunked输出的程序会丧失分段效果,变成缓冲输出;header()函数需要用pecl-apd扩展中的override_function()函数,但此扩展却无法兼容当前的ZendAPI,无法编译成功

传统上,协议解析是SAPI的工作,PHP的语言引擎部分从属于SAPI,以至于没积累出什么好用的协议解析库;而PHP书写的Web应用向来都是直接调用SAPI提供的函数,积习难改,以至于想用PHP本身来写Web服务器就须要去实现一个SAPI,但又会遭遇到这个语言本身的Web烙印太深、假设太多,以及不够“动态”的问题。
传统上,网络通信向来也不须由PHP来处理,以至于也没积累出什么好用的通信框架库。

最终,PHP成了一个Web only的开发语言。真可谓成也Web、败也Web。

一些新兴的PECL扩展提供了高性能I/O框架,比如swoole,但因为上述SAPI的问题,目前尚未出现像Python那样用PHP本身写的PHP Web服务器。

相比之下,不用写<%的Python语言,其发展道路就更加general purpose一些:

  1. 标准库中有os、multiprocess、threading、select等模块,一看就是面向系统编程而非仅仅针对Web开发
  2. 标准库中的SocketServer及其MixIn classes、HTTPServer等可用于写服务器;CGI模块可用于解析HTTP协议请求
  3. 标准库中的wsgiref是纯Python的。也就是说,用Python语言写一个WSGI Server很容易且是提倡的做法
  4. yield语法加入语言比较早,可以实现协程
    在Web应用方面,Python的WSGI接口已经基本统一江湖。WSGI不是通信协议,而是语言级别的调用约定(关于这个函数后面带几个什么样的参数的约定),而WSGI可以用纯Python实现,因此不会遇见用PHP实现SAPI的尴尬。由于Python没有像PHP那样深深的Web烙印(甚至早年在Web上的部署并不太方便)加上标准库中很早就带有各种基础模块,导向结果就是出现了很多优秀的高性能框架和服务器软件。现在流行的组合是用 gunicorn WSGI Server运行WSGI应用程序,管理多个worker充分利用多处理器,用gevent消除I/O等待时的浪费;对外提供HTTP服务,前面套一个nginx提供静态文件和访问控制、rewrite等功能。
Posted in 默认分类 | Tagged | 1 Comment

墨菲定律之多处保存必然会出现不一致——谈Linux上的时区问题

技术部的工作日报,原本是早晨9点发,脚本换了一台服务器运行之后变成17点了。算算时差也知道是时区问题。

检查了一下, /etc/timezone 内容误为 Etc/UTC,而 /etc/localtime 是从 /usr/share/zoneinfo/Asia/Shanghai 复制过来的,二者不一致。date命令使用 /etc/localtime 而 cron 按 /etc/timezone 文件执行,于是造成了执行时间不对的问题

另外需要注意的是,cron 只在开始运行时读取一次该文件,而每分钟唤醒时不再读取,所以改过文件之后还得重启该服务;又得注意的是,service cron stop 似乎并不会终止cron进程,所以……你懂的

以上就是墨菲定律之:多处保存,必然会出现不一致

Posted in 默认分类 | Tagged , | Leave a comment

六月台湾游

不知怎么的,突然就想去台湾了,于是4月底急吼吼的准备了户口本等资料,预约了东城分局出入境办理台湾通行证和护照。看了看日历,5月4日星期六,我不上班公安上班,就这天吧。结果交了申请之后直接告诉我5月31号再来取……期间去了两次都催不出来,直到拿到证件,看了签发日期,才知道异地办理的确不如在家办理快。不过咱不就是为了从北京出入境办个G个人旅游签注嘛!忍了。这期间先买了从北京到厦门的飞机票,也挺贵的,1371元呢!

下一步就是订票和办理入台许可。5月31日拿到证当天扫描完毕,把资料发给中青旅淘宝店,然后就是焦急的等待。6月5日,终于拿到了,才订了金门的住宿、金门到台北松山的机票。

大概的日程记录如下:

6月10日 北京-厦门 CA1809;厦门五通码头-金门水头码头 乘船;参观金门民防坑道、莒光楼、民国福建省政府,还驱车看了一眼八二三炮战纪念堂的外观

6月11日 金门马山观测所、翟山军用坑道;乘飞机去台北,当天去淡水渔人码头、情人桥游玩

6月12日 国父纪念馆、淡水红毛城、真理大学、淡江高中、台北故宫、中正纪念堂、台北101、饶河街观光夜市

6月13日 办了TR PASS Y火车票;去了北投温泉博物馆、露天温泉,又去朵儿咖啡馆喝杯咖啡,还去松山机场三层观景台看了一会儿飞机。下午去基隆,感觉太村了,吃了个夜市又回台北住,在基隆火车站拍了铁路0公里标志

6月14日 参观总统府,乘火车去看了暖暖火车站、平溪线小铁路放天灯,最后去了九份住下,出来吃饭时看了一下阿妹茶馆,也就是《千与千寻》的取景地

6月15日 参观黄金博物馆,淘了个金,然后去了野柳地质公园。穷酸的只剩下五六百块现金,看到7-ELEVEN特别激动,赶快补充了现金去吃了个螃蟹。夜间又回九份住,比昨天贵

6月16日 乘火车去了苏澳,泡了个坑人的冷泉。还在苏澳新火车站见到了Aroean,真是太巧了。经花莲到达台东,在花莲火车站广场拍了些照片,喝了一杯用本地瑞穗咖啡豆做的咖啡;路过池上站太晚了,没便当

6月17日 乘船去绿岛逛了一下,晚上回来在台东城区逛街,结果发现不太兴旺,而且公交车也很早就收车。和我一起等车的还有五个小姑娘,我表示可以拼车一起走。她们于是去7-ELEVEN用ibon机叫出租车,未果。好不容易街上拦了一辆出租车,本来想只上一半人,结果遇到彪司机了,五个小姑娘装后排座上,我坐前面,一车全拉走!于是我就请了车资,没让她们花钱。

6月18日 早晨在台东火车站看到宪兵服务台,我看了一眼,大兵就要给我发人才招募的广告。难道我暴露了?没理他,继续等车,坐到高雄,转捷运到桥头糖厂参观了一下,买了好多黑糖(其实就是红糖吗?)随后就开始下雨。转战西子湾,参观了打狗铁道故事馆(原高雄港火车站)、英国打狗领事馆官邸旧址,去了一趟旗津,吃了大碗冰,然后才开始找住宿。在火车站附近住下之后又乘地铁去了瑞丰夜市吃饭

6月19日 早晨捷运转高铁,直达桃园,然后在高铁站7-ELEVEN买了“我的美丽日记”面膜。说实话我真不知道她们为什么都喜欢这个品牌。随后转公交车时遇到不能刷卡的加班车,付现金到机场。面膜放在行李里,直挂北京;手里只拿相机和iPad,然后去免税店买了烟酒。吃饭时时间已经快到了,于是牛肉面只吃了牛肉我就跑了,结果发现还没开始登机,唉我的面啊!到香港机场,我主动报告我带了超量香烟,海关没为难我。在机场吃了个许留山,再去乘机的时候,手里的液体被要求托运,于是又花了50块钱打包费。到北京都夜里了,提了货就出来回家

过了几天,发现身份证、备用电池等东西丢失了。我觉得大概是丢在飞机上或者首都机场T2了。呵呵

 

这几天的体验,觉得台湾是个不紧张的地方,即使台北高雄这种大城市,也不像北京。各处景点的游客都很少,而且基本上都不要钱或者很便宜;吃饭也很便宜。他们那里大量依赖硬币,于是有了《听说》电影里吃夜市数了半天零钱的典故。台湾还很依赖机车(摩托车),红灯放绿的时候,噪音跟飞机起飞差不多。派出所厕所随便用、宪兵降旗可以紧密围观、路上垃圾桶很少主要是扔给7-ELEVEN。金融方面,高端洋气上档次的银行都受理人民币和银联业务,大部分商户也可以刷银联信用卡,算是被大陆经济入侵了吧。

Posted in 默认分类 | Tagged , , , , | 4 Comments

postfix 中一次查询多个 maps 需要注意的地方

今天遇到的一个情况,需要配置 postfix 完成下列功能:

  1. 对于特定域名的收件人地址,把信发给特定的服务器
  2. 其它的随机选择出口 IP 往外发送

这两个功能分别都很容易实现:

第一个用 transport_maps 的域后缀匹配功能

example.com smtp:chsMX.example.com

第二个在 main.cf 里创建多个指定 IP 地址的 smtp 出口,然后在 transport_maps 里查询一个 tcp 类型的外部服务,在该外部服务里用随机算法选择出口

但是,两个一起用的时候会出现问题。因为 postfix 会先拿完整的邮件地址去依次查询两个 maps ,第一个匹配不上,然后匹配第二个,成功后直接返回了,导致特殊的邮件域路由功能失效。解决方法是把第一个改为 pcre 或者 regexp 格式的查询表:

/.+@example.com/ smtp:chsMX.example.com

这样就可以确保需要特殊处理的邮件域匹配在第一个查询表上,而不会去查询第二个查询表。

Posted in 默认分类 | Tagged , | Leave a comment

我团年会 2013

今年的年会的日子是2月23日,又延续了我团在春节后鼓舞士气,而不是春节前年终放松的传统。

CJ同学想让我运他和她媳妇(也就是我同事)一起去,但是考虑到运输风险,以及我想在全集团单身MMs面前展示自己still available这个原因,所以我还是自己开车去的。午饭时YLM姑娘说找不到地方了,但我当时不知道是有私心还是赶时间,居然没去接她,实在是罪过。

到了现场,把票给CJ,然后开始找弥新锋索要第一年年会的徽章。凑齐三个之后,冒充资深老员工跑去照相。二楼签名墙的摄影师是王程,但快排到我时她说我用蓝票应该去一楼,于是又转一楼,在场地里签名拍照。

虽是年会,但我有点走神,因为要把CJ同学介绍给我们部门,作为潜在招聘对象。所以,年会开始前和前几十分钟我一直在联系给他引见我们的面试官。

 

这次年会的片头很好,我们一贯钟爱的《让子弹飞》再次成为创作基础。听着激昂的音乐,大家的情绪也逐渐亢奋起来。此时,再插入一段回顾历史的老照片,我的泪都出来了。我拿出手机,发了一条微博#美团年会#我以为我们已经习惯优秀,回顾过去,才知道我们走过多远。我庆幸,在这进步的历程中,有我一份力

节目很好,PLMMs也很多,但不知道哪一个属于我。这就是传说中的职场得意情场失意吗?

有个节目,正在上演中,一个演员突然晕倒,被抬下去了。那个晕倒的姑娘正是去年我补入职培训的时候,在课上调戏我的那个。

年会后,是销售部 kickoff 会议,我退场吃饭去了;饭后,回来接了好友LK姑娘,路上聊了好多。这时我发现有些事得有人倾听才能说,有些事说到了才能理清。这次聊过之后,对自己的认识又清晰起来了。

Posted in 默认分类 | Tagged , | 3 Comments

复习了一下ApacheBench的用法,兼谈服务性能测试的多因素问题

我最近有点关注 python web 开发,看了不少关于高性能IO库的对比评测,没怎么看明白,突然觉得自己对于 ab 的用法似乎不怎么想得起来了,于是复习了一下。

实验环境要尽量简单,要能凸显影响性能的几个因素,并能通过改变其中的单个因子再观察性能变化,来得到各因子和性能之间的关系。

服务器端 gunicorn -w 4 -k sync 执行一个只有一句 time.sleep(1) 的服务器程序,确保每次请求的服务时间不低于一秒

ab -c4 的情况下:

Concurrency Level: 4
Time taken for tests: 25.248 seconds
Complete requests: 100
Failed requests: 2
(Connect: 0, Receive: 2, Length: 0, Exceptions: 0)
Write errors: 0
Total transferred: 16000 bytes
HTML transferred: 1400 bytes
Requests per second: 3.96 [#/sec] (mean)
Time per request: 1009.932 [ms] (mean)
Time per request: 252.483 [ms] (mean, across all concurrent requests)
Transfer rate: 0.62 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 951 217.0 1009 1013

测试结果中需要注意的:

  1. Time taken for tests * Concurrency Level == Time per request * Complete requests都是处理所有的请求的总耗时。
  2. Time per request(mean) == Time taken for tests/Complete requests

注意:建立连接耗时最大值接近一秒。

并发数提高一倍,ab -c8 的情况下:

Concurrency Level: 8
Time taken for tests: 25.114 seconds
Complete requests: 100
Failed requests: 11
(Connect: 0, Receive: 11, Length: 0, Exceptions: 0)
Write errors: 2
Total transferred: 16000 bytes
HTML transferred: 1400 bytes
Requests per second: 3.98 [#/sec] (mean)
Time per request: 2009.158 [ms] (mean)
Time per request: 251.145 [ms] (mean, across all concurrent requests)
Transfer rate: 0.62 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 1507 756.6 2005 2015

需要注意的是:

  1. Time per request 翻倍了,而 Time per request * Completed requests 自然也就翻倍了。而 Requests per second 并没有随着并发数的增加而提高。服务器端 sync worker 每次只能处理一个请求,在客户端并发超过服务器端 worker 数,而请求又不能快速处理完毕的情况下,会造成请求积累,所以处理时间会变长
  2. 建立连接耗时的最大值也翻倍了

服务器改用 -k eventlet 试试呢?

客户端先用四个并发:

Concurrency Level: 4
Time taken for tests: 25.097 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 16000 bytes
HTML transferred: 1400 bytes
Requests per second: 3.98 [#/sec] (mean)
Time per request: 1003.861 [ms] (mean)
Time per request: 250.965 [ms] (mean, across all concurrent requests)
Transfer rate: 0.62 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 1

注意建立连接耗时比 -k sync 时大大降低

八并发呢?

Concurrency Level: 8
Time taken for tests: 13.046 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 16000 bytes
HTML transferred: 1400 bytes
Requests per second: 7.67 [#/sec] (mean)
Time per request: 1043.689 [ms] (mean)
Time per request: 130.461 [ms] (mean, across all concurrent requests)
Transfer rate: 1.20 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.5 0 3

处理能力翻倍了;建立连接耗时依然很小

这是服务器端异步处理的好处:一个 worker 可以处理多个并发请求,也就是说目前服务器的处理能力是高于 -w 4 参数指明的 worker 数的。

我认为:

  • Concurrency Level 和 Requests per second 比较接近的情况,说明服务器还没到性能极限
  • ab 压力测试过程中出现大量错误,可能是服务器过载的表现
  • sync 的情况下,显然并发数是不能超过 worker 数的
  • async 类型的 worker,并发数和 worker 数的比例关系,和服务程序的复杂度有关,和 CPU 核数也有关
Posted in 默认分类 | Leave a comment

7月份去了厦门游玩

一直想去南方游玩,直到六七月份才确定把厦门作为目的地;直到谢同学、雷总、漪澜等人突然决定要去云南,我才定下和他们同一天出发,匆匆忙忙。先是在海航网站买了票,又托雷总用支付宝红包买了回程票,再去携程翻了好久,翻了一个价格勉强能接受的宾馆。但我始终强忍着,没有看旅游攻略,因为以前总是计划性太强,疲于奔波,比不放假还累,这次一定要随心所欲,玩到哪算哪。

13日早晨,我开车带谢、雷去了机场,到停车场把车交给时间不太紧张的谢,我自己从T2赶去T1了。或许是海航惩罚我选水果餐,我的登机牌不能自助办理,我又耐心不足,排了好几次柜台又放弃了好几次,还忽悠前面两位第一次坐飞机、二代身份证、没行李的旅客去自助办理,终于换了登机牌,而此时已经只剩下半个小时,有幸走了加急安检通道。飞机上先给我发了水果餐,然后又给全飞机包括我发了标准餐,好充实~

到厦门之后,看到免费手绘地图,拿了一张,是手礼网的美食旅游图,不得不称赞广告做得到位!出了候机楼,马上就是阳光的暴晒,感觉只热不潮湿。我按姚师兄的建议,在机场外绕了半天,先走到厦门航空、厦门太古门口,然后又绕回南停车场,找到公交站,坐37路公交车到火车站(湖东),车站对门就是我团厦门站办公室。上楼,因为多多33给我说错了房间号,我还看了半天,正欲推门进去时,两位在外抽烟的同事想问我,我于是主动出击,推门进去问东溟在吗,然后就被迎进去了。一进门,见到了多多美女和东溟jj(以前她在总部,人称东哥),跟大家打了招呼之后,在男厕所“小团”门口拍照留念;东溟jj还笑话我居然戴工牌和名片,显得不够亲近,我解释说是为了方便对切口。然后我们三人,加上摄影师郑先生,还有另一个mm一起去楼下商场饭饭。饭后请多多美女给我指了一些常见游玩的地方,我就坐公交车去宾馆了。宾馆挺有意思,居然是个退盟的如家,呵呵

办理入住之后,就去轮渡码头,坐了15块钱的观光船,先绕鼓浪屿视察一圈,然后登岛。鼓浪屿码头给我的感觉不是太好,很多个人执业的导游围着登岛的客人招揽生意,感觉导游量有点过剩,我往右走了几步远离码头之后,导游费就从20降低到了10块。又走了几步,拐进福州路,进了小道,绕了几道弯,过了环卫码头,恰逢日落,赶快把手机相机掏出来一顿狂拍,好美的日落!

晚霞看完日落,把手机拍的照片发给妈妈和各位mms。休息一下之后,顺着环岛的小路走到南边沙滩,吃了个沙茶面、海蛎煎,继续走,又喝了杯咖啡(下次不喝冰摩卡了,不好喝!),在咖啡店坐了良久,好累。飞机从岛上空飞过,一架又一架;天上的丝丝云,感觉很干净。好累,回去了。

很喜欢鼓浪屿。晚上回来买了88元鼓浪屿景点套票+导游,居然是第一单,算是支持一下美团厦门站的兄弟姐妹们!

 

第二天早晨跑去轮渡码头,想用美团券现场跟团去鼓浪屿,但只约到下午那一场,只好去对面的大清一等邮局,把昨天在船上买的明信片消耗了一下,然后坐公交车回去了。本来想看看南普陀寺,但是看到门口people mountain people sea我就害怕了,改玩厦门大学,穿过去之后发现厦大真是厉害了!一般的学校顶多有个人工湖啥的,人家厦大直接就是一片海!白城校门出去之后有个天桥,过了天桥就是海滨浴场!但我没从这里出去,而是走到海滨校门,在学校食堂吃了个饭:四两米饭、两块鱼排、一份西红柿鸡蛋,5块钱,加上外人买饭差价,才六块八,想起当年在我们学校五块六只能吃个小鸡炖蘑菇加米饭,真是泪流满面!饭后去胡里山炮台看了看,发现这里居然是福州军区对金门前线广播站遗址。因为前一阵我刚读过《三体》,不禁浮想联翩……是红岸吗基地?其实事后想想,也可能不是红岸,而是黑暗森林威慑系统的发射站。炮台下面有个单向门,通往沙滩,但我还要回去的,所以没从这个门出去。

从炮台出来,已经大量失水,赶快喝脉动,然后坐公交车去轮渡,一个导游三个游客的微型旅游团出发去鼓浪屿。那个导游mm,我已经记不清是姓刘还是姓柳了,矮矮的黑黑的,问我上大学几年级了……其实我都上班五年啦,一是来游玩二是来考察我团当地的生意啦!上岛之后导游mm就介绍说,她们是唯一的总部设在鼓浪屿内的旅行社,然后我就感叹啊,说我团选择合作伙伴果然讲究,强强联手啊!跟着导游,从南路(左路)开始,逛了一些地方,看了钢琴博物馆,很是喜欢;菽庄花园内的借景也是很好的。天气太热,逛完之后我就请导游回去休息了。“不登日光岩不算到厦门”,于是又冒着暴晒去了日光岩,路上还买了莲雾和另外一个什么水果,还买了台湾小镜子,回头留着看看可以送给哪个mm。其实日光岩最顶端不算太好,人多拥挤,不如低一点的观景台。日光岩下来,想去看看郑成功纪念馆,结果发现已经下班了;去琴园看百鸟,其时已经很累了。走龙头路商业区(又买了个什么固体香水之类的东西,买贵了)到码头,回去也~

第三天早晨去了南普陀寺,但里面在维修,粗粗看了一下就上后山了,好累啊。到山顶,看到国家测绘标志,一个三角锥形的水泥骨架。过了测绘标志就是植物园,买票进去看看。这植物园倒是挺野的,不像北京植物园的人工痕迹那么重。从植物园出来,坐公交车又去了胡里山,从沙滩栈道走啊走的,路过炮台下面的单向门,走到了珍珠湾,突然想起这里是我团在卖的两家自行车出租店的所在地,于是找到300号那一家,租了个自行车,顺着环岛路骑。这里有个小插曲,其实租自行车的价格没那么贵,我说我团购还没买,他们就直接说可以按团购价,不过我还是坚持买了团购,为了支持厦门站的兄弟姐妹嘛。骑了没多远,就到“三民主义统一中国”对面了。掏出手机,终于搜到了对岸的信号,但tmd不能漫游!!打回北京联通客服,开通了国际(及港澳台)漫游,再连,还是连不上,可能是信号太弱了吧。站在这里,给游海北打了电话,说我看见了自由。然后继续往前,路过海滨浴场、路过横渡厦金海峡游泳活动现场,一直骑到“一国两制统一中国”,给张涛师兄打了电话。拍照之后掉头回来,路上快累死了,补充了水、脉动、冰椰汁等各种液体,还吃了一根烤肠,但感觉还是很空虚。等我回到自行车店,店员见到我第一句话就是:瘦了一圈。因为补水量太大(每小时补一公斤,都不用撒尿,全都出汗了),有点拉肚子,一直拉到回北京之后好几天。多多还在微博上说我疯了,这种天去骑自行车。其实栈道、租车那一会头上是有朵下雨的云的,但我骑出去之后就远离了,没被淋到太多雨。晚上洗澡,发现晒伤很严重,拉肚子也挺严重,但还是坚持出去吃了亚尖海鲜大排档。我真是不要命!

由于手机漫游没成功,我很不爽,于是又去美团买了去金门围观的游船票,约好次日取票。周一早晨直奔码头上船。天哪,我居然大方到买了200元的三楼茶座(船票才76元),就为了人少视野好。开了好久,路过了军控线,给军控线浮标拍照,发现这里很有《Ice Age》的感觉呢!很快,到了离自由只有一步的“三民主义统一中国”大担岛标语面前,掏出手机来强制漫游,发现对岸实力还是不行,中国联通四格信号,台湾四个运营商,其中只有中华电讯和台湾大哥大可以连上,一格;另外两家根本就连不上。然后开了数据漫游想翻墙,发现居然是广东联通的IP地址,翻墙失败不说,谢同学此时给我发微信,搞得我惨遭高额漫游!该拍的拍了,该漫游的漫游了,就开始往回开。其时我真的有跳船游过去的冲动,但游船解说员说大担岛上有防护网……回到轮渡码头,步行去第一码头坐了BRT。厦门BRT有意思啊,比北京的强,是在高架桥公交专用道上跑的,没多久就到火车站了。去厦门站办公室拉着同事一起饭饭。回到办公室恰逢总部培训新合同系统,我只好趴那玩ipad、去手礼网买特产(因为前一天在网上夸他们,被送了10块钱券)、睡觉。过了一会实在等不起了,拉着郑先生给我和多多、东溟在小美(厕所)门口拍了照片,就匆匆忙忙乘出租车走了。不过厦门实在很小,很快就到了机场,一进门就是手礼网柜台。办了自助登机牌,提货刷卡,大包小包的进安检去了。厦门机场安检不太好,楼上安检,然后下楼才到我的登机口。

剩下的就按部就班了。不过到北京之后我居然把iPad丢在飞机上了……太丢脸了,以前还笑话过别人呢,没想到自己也这样。先跑去MF值机,发现是CZ代理的,问MF的人在哪里(我以为MF是自己处理地面事务),跑去MF值班窗口问,她们问了一下之后让我去机场客服,我这时才想起来北京地面是BGS公司的,真是急糊涂了。领会iPad之后就回家了,好累,休息,明天上班!

 

厦门很热,但我很怀念。

Posted in 默认分类 | Tagged , , , , , , , | 1 Comment

版本差异还是发行版差异?

同事前几周在做 xen 虚拟机,玩了几天说 loop 内核模块的 max_loop=8 不够用,得改。今天我追了一下细节,发现了问题:
CentOS 5 里面用 virt-install 安装的 xen domU 虚拟机,用普通文件作为虚拟机的硬盘,在刚刚进入安装界面的时候已经生成了配置文件,其类型为 tap:aio ;而 Ubuntu 12.04 里用同样的方法安装,进入安装界面之后还没生成,不知道改存到哪去了,反正 /etc/libvirt/ 和 /var/lib/libvirt/ 都没有。用 virsh dumpxml 弄出来看了看,有一段 <driver name=’file’/> ;再用 losetup –all 查看,确实是把虚拟硬盘按 loopback 文件处理的。

细节差异:CentOS 5 用的是 -xen 内核做 dom0 ,而 Ubuntu 12.04 用的是普通内核,不带 -xen 后缀(甚至可以在此内核上再加载 kvm 模块!!),virsh 需要加 –connect xen:/// 参数,而不能自动判断。怀疑是不是因为 hypervisor 类型判断的问题,导致误动作了?

Posted in 默认分类 | Tagged , , | 2 Comments

打别人的车,让别人无车可打,但有时自己也打不到

2012年会的节目里有一句词:"打别人的车,让别人无车可打"反映了我团员工对工作积极认真,为了服务广大商户工作到夜间的精神,另一方面也说明了一个问题,就是夜间打车确实困难,不但别人无车可打,我们的人也经常无车可打。

上周二美兰大人注意到我在论坛发的召集顺风车的帖子,于是当天就有同事约夜班后一起走,我也就把原计划次日早晨提前来做的工作改在夜间了。2340左右我干完活就上网打发时间。零点,走了几个。零点半,浩哥要走,路过我座位才恍然大悟原来是我捎大家走。我犹豫要不要等齐人一起走,送下楼想起钥匙放楼上了,只好嘱咐注意安全目送她。一点,跟我约好的追我吧追我吧三金妹子、火星妞和李娜终于工作完成,我把她们分别送回家。

论距离,天通苑立水桥不算很远,但要冒着寒风步行回家也不是容易事,少说也得个吧钟头,路上还会路过分尸案案发地;打出租车,现在的出租车又太挑客,大半夜还妄图双向拉客,鄙视天通苑方向的单向客流,况且后半夜也确实没什么车。矛盾啊!还好天气逐渐转暖,这个矛盾会减缓几个月。

我尽一己之力,能帮助个别同事,但不能解决根本问题。如果公司能出面,或补贴费用,或约车派车,则善莫大焉。

Posted in 默认分类 | Tagged , , | Leave a comment

开始补入职培训课程

今天参加了入职培训课程,因为我来的时候直接投入工作了,没去参加培训;好像每次工作都这样,入职之后立刻投入战斗。作为一名互联网行业的老兵、美团的老兵,我今天终于补上了这一课。听HR姐姐讲她来美团的过程,也是那么的神奇;再听她讲以前我团的初期故事、中关村时期的故事,那些情景仿佛就在昨天。我是多么怀念每周听王兴在台上告诉我们,我们在全国已经有多少多少同事,开了多少多少分站的日子啊!局促不再,我团不但定义了行业,还引领了行业,我们更应该努力,创造下一个辉煌。

花絮:有个编辑部新来的姑娘一直看我,还笑。下课后我就去问她为啥笑,她居然说,她看我时我正好也在看她,所以就笑了。我呵呵。冷了两秒钟以后她问我啥星座的。我回答了之后就反调戏之,说姑娘你还没有男朋友吧。结果这句话被HR姐姐听见了,笑带严肃的批评了我,说你来补课的不是来泡妞的⋯⋯姐姐们啊,我是被调戏的好不好!被!

其实我们公司美女挺多的,我也有喜欢的。以后不能这样跟新来的小姑娘打情骂俏。否定追求,就是否定自己。谨以自勉。

Posted in 默认分类 | Tagged , | Leave a comment