Category Archives: 瞎折腾

中国人只会山寨?

开始有个习惯每个月看看 NetCraft 的 Web Server Survey,了解一下最新的服务器发展。通常总是那么几个产品上下沉浮,感觉也就和看浏览器市场占有率差不多。却没有浏览器竞争来的激烈,服务器排名也没那么好看。

和浏览器不同的是,服务器可以是独家享用的,Google 的 GFE 就是占据 第三的宝座,却不能让外人尝鲜。这也说明 Google 的强大,看了报告总是想,他一家公司做的服务器,自家用,竟然能排到第三

然而,2月的报告出来看了感觉很雷……真的,真的是雷了。Google 的第三没了……给腾讯抢走了……竟然,是腾讯!仔细看看倒也觉得不出奇了,腾讯出了个自称是 QZHTTP 的 Web Server,然后把旗下 QZone 的网站都给换上了 QZHTTP。NetCraft 的统计是按照域名算的,而 QZone 是无数子域名的泛解析,我不知道是不是每个 QQ 用户都会自动拥有 QZone 的子域名,反正这一下子就是来了2千万个域名,nginx 说是发展很快,出道这几年也才有3百万个站点……

于是大家的好奇心也就不在这“为啥有这么多站点”上面,而是,QZHTTP 到底是个什么东西?略加搜索,在某外国友人的博客找到此文

外国人也是关心 QZHTTP 的,不过他们会比我们多想一点,就是,怎么是“中国人”做了个牛逼服务器出来?于是激烈的讨论也就展开了。所谓激烈,自然是有各种观点,基本分了这么几类:

  • 技术派:QZHTTP 不知道用了啥技术,也许就是换了名字的 Apache?IIS都有可能啊。拿各种软件测一下,好像是 thttpd?不过在没有可靠信息的情况下,也不能乱说。我宁愿知道更多有关的信息啊。
  • 中国人爱山寨派:QZHTTP,呸!明显是山寨的 Apache 啊,中国人 Windows 用盗版的,迪士尼乐园有山寨的,Web Server 肯定也是假的!
  • 国货当自强派:我就是腾讯的!QZHTTP 就是我们自己写的,和 Apache 什么开源软件,通通没有关系!
  • “中国人都不行”之无逻辑派:中国人能写 Web Server?那牛奶里怎么会有三聚氰胺的?
  • “楼上某些人法盲”派:你们想什么啊,抄就抄呗,开源的 License 只规定,改了之后如果发布出去,才需要公开代码。人家只是改了自己用,给别人提供服务,那就不用公开源代码啊。那明明是合法的嘛。法盲们,回家好好看看那些 License 吧~
  • “对对!中国人都不行”之反语派:是啊是啊,中国人都不行,完全不懂创新,只会抄袭。什么指南针、印刷术、火药、造纸术,通通都是抄的。开源软件的协议里都写了嘛,本软件的代码大家随便看,随便改,就是中国人不行~

对于 QZHTTP 和相关讨论,我的观点和认识是:

  • QZHTTP 应该不是简单的 Apache 换了名字。我想腾讯没有必要这么做,因为 qq.com 还是用的 Apache,而用 Apache 不是什么丢人的事,除非腾讯玩非主流~
  • 自称来自腾讯的某人说法太过绝对了一点。has nothing to do with 说的轻松,我不否认腾讯有能力写一个自己的 Web Server,但是我觉得一个程序员在开始写 Web Server  之前没有好好研究过 Apache 或者其他优秀的开源项目就动手,是难以令人置信的。
  • 中国人的不注意知识产权以及食品安全问题,早已伤害了各国人民的感情,也许脆弱的不仅仅是我们,但最后受伤的还是我们。
  • 老祖宗创造四大发明的那个时代已经远去,要证明中国人除了山寨还是会创新,或者山寨也是另一种创新,这都得靠我们自己。

ARP 擒贼记

注意!本文涉及标题党

之前一直在做的一个 reverse proxy,在 RHEL 上用了 nginx 。基本功能是根据 cookie 做 load balance 和特定网页内容的替换。功能上是没有问题了吧,性能的话我觉得能满足公司需要,虽然看上去不是太好。

这个小项目一直是不顺利的,主要原因就是 nginx 得不到认可。基本上和每一个人说我用了什么的时候,都要先介绍 nginx。Net Craft 给的报告是不难看,好歹也算第四大应用广泛的 Web Server 了。前三是 Apache、IIS 和 GFE。Apache 做 reverse proxy 太慢,IIS 我不会用(也不知能不能做 reverse proxy),GFE 是人家的私人珍藏…… 那么用 nginx 还是有些道理的吧。

昨天,正当梁生还在质疑 nginx seems too young to be proven 的时候,我们的 server 开始变得不稳定。基本上就是好一阵坏一阵,不能用的时候错误很奇怪,不是连不到而是 connection refused。不但网页看不到,连 ssh 都连不到。连上的 ssh 也会在几分钟内断开。起先是以为网线接触不良,但是看 message.log 没有看到 eth0 down 的迹象。于是只好带着疑问下班,哦,我真不愿意看到这种情况啊。梁生会不会得意的笑,哈,我说你这 server 不行吧,too young~

我知道这个问题和 nginx 是无关的,应该是网络问题。硬件是不大会有问题的,我一直以为这还是软件的问题。不知道为啥,遇到诡异的局域网问题,我就会自然的想到 ARP。百度上搜 ARP 的结果是恐怖的,Google 上要好些,曾几何时 ARP 劫持在中国大陆的泛滥,让很多人以为这是一个病毒的名字。我是觉得处处防范的企业内部出现病毒是不大可能的,而且现在的故障不像是 ARP 劫持,倒像是……哦,谁偷了我的 IP 啊~~

Keats 给我的信息是很有用的,就是不断地 ping 那个 IP,TTL 值竟然会变,一会儿 64 一会儿 128,64的时候能连上,128就connection refused。于是问题变得清晰起来,这分明是两台机器嘛,RHEL5 的默认 TTL 是 64 的,返回 128 估计就是给某台 Windows XP 抢了 IP。于是乎,arp -a 蹲点蹲了一阵,终于让我揪出了抢我 IP 的 MAC Address~ 交给 Keats,剩下的事情,就不是我们 Team 的啦,Technical Team 的同事们加油啊,你们有什么妙招根据 MAC 地址把那台机器的主人找出来吗……

Twitter 和饭否同步

Twitter饭否上看到 Zhaonc, aka Nelson 同学一直在折腾同步,我闲得无聊,也开始折腾这事。他的研究结果是,饭否发的消息最后能自动跑到 Twitter 上,并写得此文 Twitter与饭否同步。于是我非要逆向行驶,目标是搞个 Twitter 发的消息自动跑去饭否的方法,方法现在找到了,于是我开始写本文……

啰嗦完毕,说正事。那些国外的第三方工具啊,大都是不认识饭否的,认识饭否的又竟然不认识中文。Ping.fm 倒是支持 Custom URL ,我尝试写个脚本让他支持饭否,可是又发现速度奇慢,还老丢东西。最后一怒之下自己写了个脚本,用最笨的办法吧,却是最靠谱的。放到 Dreamhost 上 cron 了10分钟一次,效果奇佳。 Continue reading

人肉,五毛,阿三……和其他

请注意:此文涉及标题党 及 火星人 🙂

无意中发现了 Mechanical Turk Amazon 旗下网站,点过去发现,是个类威客网站。原本以为是那种像 rentacoder.com 的网站,写代码赚钱。仔细一看之后不是,这里的活儿通常都比较不需脑子,或者不需技术,又挺费力,赚得也不是很多(相比给人写代码)。然而在看着顺眼的情况下,我还是注册了一个帐号稍加挖掘……这站点果然是了不起的。

列3个这里比较典型的任务:

  • 给公司名字 找网站地址,电话号码
  • 给学校名字 找本年度开学和放假日期
  • 给博客地址 判断评论是否 nofollow

任务回报 USD 0.01~0.1 一次不等。都不需啥技术,nofollow 那个只需理解啥叫 nofollow 就行:就是超链接是不是写着   rel=”nofollow”, 这个是关于 SEO 和 spam 的,说清楚就有的说了,但是要干活儿不用知道那么多~ Continue reading

研究的结果……我是小白?

今天看到一则新闻:3G频段分配完毕

  • 中國電信獲得的頻段是1920-1935MHz和2110-2125MHz;
  • 中國移動獲得的頻段是1880-1900MHz和2010-2025MHz;
  • 中國聯通獲得的頻段是1940-1955MHz和2130-2145MHz。

于是引发了不少讨论,主要是关于 iPhone 3G 究竟能不能用联通的 3G 网的问题。

刚开始我看这则新闻,就觉得不能用。iPhone 3G 是支持的频段是 850, 1900, 2100 MHz。都不在联通的频段范围内。然而论坛上大有小白说能用,理由很简单,iPhone 3G 是 WCDMA ,联通的网也是 WCDMA ~ 于是窃笑,他们竟然连频段都不懂……

想美国人虽有 3G ,可 T-Mobile 众却是享受不到 iPhone 3G 的,因为他们的频段是 1700MHz 。可见联通也是一样啊。

然而当发现论坛上小白越来越多的时候,我有些开始怀疑自己的看法了。于是请教了GFWed维基百科,发现世界上绝大多数 WCDMA 都是 2100MHz ,即便不是,也不会是 2130 MHz 这中莫名其妙的数字~ 再略加挖掘,终于找到: UMTS Band I 2100Mhz: Uplink 1920-1980Mhz, Downlink 2110-2170MHz 正好把联通的频段包含在内~

于是,iPhone 3G 是可以用联通的网络的,大部分水货 3G 手机都是可以用联通的网络的…… 再于是,原来我才是小白……

init.d script for nginx, RedHat

在RHEL 5.2上经过测试,debian/ubuntu系其实不需此脚本,因为apt源里装的已经自带了。不是我写的,我只是拿来改到能用为止…… 不过还真是找了挺久。网上流传的某些版本不如这个好~
start-stop-daemon 好像 RedHat 上也没有自带,那个就随便搜搜装一个吧。

#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
PIDFILE=/usr/local/nginx/logs/nginx.pid

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile $PIDFILE 
          --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile $PIDFILE 
          --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile $PIDFILE 
          --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE 
          --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE 
        --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

nginx, AWStats or Not?

JAWStats

虽然已经有了免费好用的 Goolge Analytics,我想还是不能放弃原始 log 的分析。于是想到了 AWStats,然而我并非一个经验丰富的 Web Master,我只是一个菜鸟……我发现我根本搞不定 perl 和 cgi 🙁 。因为 nginx 本身不支持执行 cgi,而 fcgi 似乎也配置复杂(远不如 php 的 fcgi 方便啊),于是我只能用 AWStats 生成静态页面来看,大大降低了可用度……当然,还有非常重要的一点,AWStats 生成的页面太难看了,对于我这种只是想做了看看而非实际应用的人来说,根本就是不能忍的~

于是乎,nginx, AWStats or Not?

好吧,长话短说,Yes! 最后我终于发现了 JAWStats…… 这个使用 PHP 写的,可以读取 AWStats 生成的 data,再生成更加漂亮的页面,或者那个说烂了时髦词汇—— Web 2.0/AJAX。 对我来说还有更大的意义,我不需要去搞难缠的 perl/cgi 了,在我已经配置好 php 的 nginx 上,JAWStats 只需5分钟便能安装完毕~ 然后这个界面还是挺令人满意的哈~

九点,新的总是好的

豆瓣又改版了,九点换了个醒目的链接,广场撤走了。印象中豆瓣改版改得很勤快,却总是屡屡换来骂声。我是很喜欢新事物的,于是改版之类的事情让我来评论,通常只有正面的回应。新东西出来,有些能玩的小功能,就能让我忘掉重重的不便,甚至不顾保留很久的习惯了。

然而这次的改版又有些不同,用豆瓣日志上的话来说,九点被重新设计,昨天是新九点正是上线。小试了一下,我想我是真的挺喜欢新九点。

九点上线都有两年时间了,我一直不喜欢这个东西,几乎没怎么用过。RSS 阅读器我一直在使用的是 Google Reader 和 抓虾。 Google Reader 的好处是和 Gmail 账户整合,简洁友好的界面, 值得信赖的抓取能力,方便的同步功能…… 至于抓虾,我用它完全是因为热文。 其实我并不喜欢订阅 RSS,因为事实上很少有 Feed 能让我觉得每篇文章都值得一读。于是订阅了一堆 Feed 的结果是,我更本看不完,还是要从中筛选。倘若退订一些,又觉得不够来源丰富,或者不够看。抓虾的热文是个好东西,不花力气就能找到能看的东西。

之前我一直很奇怪豆瓣的九点不能做到这样,一套二套的分类太过CCAV,我实在不理解各自的区别(豆瓣的几个广场我也搞不清)。然后本以为内容聚合是豆瓣的强项,九点却也没能给我这种感觉。

不过现在好了,新的九点,文化、生活、科技、趣味,简单的四类,首页聚合的几篇文章质量也似乎颇高。推荐加评论更是豆瓣必不可少的。加上我的订阅里面,“你可能感兴趣的博客……”,这才是真正的豆瓣嘛。

推荐阅读:

[配置笔记]Ubuntu + nginx + MySQL + PHP

本来想写个How-To的,但是突然觉得自己没有功力教会别人,所以就不做标题党了。配置笔记,基本上是记录给自己看得,能够给别人有所帮助就更好了~

最近不断的看到有关 nginx 的消息,基本上都是正面的,看起来性能非常好。对于性能好的东西,我通常有一种莫名的恐惧,因为这些高级货一是要用到好的硬件上,二是配置复杂,如果还有三的话,那就是我通常不需要这么高的性能。然而这次稍稍看多了些 nginx 的介绍,其实它还是轻量级的,出道也不久,却能够被不少网站重用。俄罗斯人写的程序,作者自称英文较差,不过文档却也有了多国语言版,看来这东西真是受世界各国人民的喜爱啊~

晚上不想玩WoW,就装了个虚拟机,搞了 nginx 玩玩,记录如下。 Continue reading

Cappuccino小试

最近出了个Cappuccino/Objective-J,很神奇的东西。首先,当然要开源。Cappuccino是一个framework,用来构建如同桌面应用的web应用。Objective-J是一种新语言,基本上就是Objective-C的JavaScript Port。Cappuccino用Objective-J来实现,由于构建在JavaScript,代码在客户端被解析,无需任何插件。

于是小试一番,把网站上的demo拿来改改,竟然真的可以玩出小小花样。不过都是在艰难的摸索中,愣是花了我一个上午的时间,才写出个勉强可以看出意思来的页面~

这东西出来还没几日,不指望立刻看到许多成功应用,更不指望自己能够拿来做什么东西,不过小试过后还是有不少想法的。

这是真正的Web Application,在浏览器端,以往的开发从来都是需要用到HTML+CSS+JavaScript。虽然优秀的JavaScript Framework已经有不少选择,省略的自己写类似HTTPRequestObject之类的底层代码,然而我们还是要接触大量的代码,这些和程序本身的逻辑相悖。HTML+CSS从来都是写网页的工具,用他们来写一个应用,动态的部分我们需要JavaScript和服务器端的交互来实现,于是很多时候精力又放到了HTML+CSS,JavaScript的调试上边。Cappuccino带来了新的概念,浏览器端我们只需要掌握一门语言,仅仅关注程序本身的逻辑,而页面的呈现HTML+CSS+JavaScript都交给framework去做。

JavaScript应用将更加频繁,现在的Web Application已经十分依赖JavaScript。而将来如果有更多类似Cappuccino的东西来生成JavaScript,想必这对客户端本身的要求会越来越高。生成的JavaScript会是大量的,我们需要更高效的JavaScript Engine。于是想到Google Chrome的v8,据说Firefox 3.1的TraceMonkey会更快,不管怎样,我们需要这么个东西。

Objective-J,不知道有没有更好的实现方式。如果没有做过Mac上开发的话,对于Objective-C有所了解的人真是不多,能够熟练应用的人更在少数。虽然有GNUStep的存在,语言本身没有平台限制,但是没有了Cocoa API,Objective-C的用处实在是少的可怜。在我看来学习这么一个语法奇特的新东西是一种负担。

不管怎样,Cappuccino还是让人有所期待。不仅仅是它本身的完善,更多应用的推出。更希望的是其他类似概念的framework的涌现,web应用必定会更加精彩。