qyb的博客

xorg 也计划每半年一次的发布以及类似 Linux 的代码维护模式

由于这次 xorg 1.7 跳票十分严重,Peter Hutterer 建议对以后的版本开发以及发布进行改进,主要就是两点

1. master 只对 release manager 开放,和 Linux 开发模式类似——每个人在自己的分支上工作,由 Linus 负责合并其他程序员提交的 patch

2. master 维护阶段分成3步,merge window、bugfix、release freeze。他目前建议是 3M + 2M + 1M 的时间段,这样正好每半年做一次发布,也和 GNOME、Ubuntu/Fedora 的发布节奏吻合。

这种基于deadline的发布比起基于feature的发布来,商业性的意味更强一些,而少了工程师理想化的色彩....

最后要说的是,我注意观察了一下 QQ Mail 的更新周期,大概是每三周一次。现在我们团队正在实验类似的更新模式,对互联网产品来说,这种模式还是值得借鉴的。

Topic: 技术

再见理想

这个国庆假期是在江西过的,去了永新县的三湾,上了井冈山,今天又来到打响中共武装革命第一枪南昌,几乎可以算是一次“红色旅游”了

永新有名的是狗肉,有回一大早就在房里听到外面呜呜屠狗的声音,都说狗的智慧足够高,不知道狗狗们生活在如此的环境里会怎样发展身心,反正觉得这里的狗好像都挺和善。

永新县出了4位解放军中将和几十名少将,但是将军们的塑像和浮雕只是在给贺子珍纪念馆做陪衬。看起来他们为中国革命做的贡献皆不如这位女士,真是神奇的唯物史观

在三湾纪念馆里,陈列了经历三湾改编的几位将军的画像,其中有林彪和黄永胜。在井冈山烈士纪念馆里,2人则消失在朱彭陈罗谭粟等将星中。

为了接待全国参观学习的党员们,特别是为了接待中央和军队大员们,吉安地区规划出一个“井冈山市”,甚至市领导屈尊来兼任这个县级行政区的长官——我猜是为了名正言顺的全程陪同上级而不至于显得不务正业。不管怎么说,这个旅游点建设得不错:火车站极好,相比较看,通往这儿的火车就显得分外破旧了;市区是在茨坪这个海拔1000多米的地方凭空盖出来的,干净整洁。总体而言,井冈山很适合度假,我的意思不是旅游(vocation vs travel);来这个安安静静住个几天就好,景点不过黄洋界等红色故地,没有太多逛头。

贴士1:我们在井冈山一直是在革命博物馆南边的南苑宾馆二楼餐厅吃饭,价格还算公道。它好像主要业务是晚上的团餐,如果晚饭得早点去,否则就招待不上了。

贴士2:在南昌是亲戚安排的百瑞四季酒店,四星。我们住的标准间貌似网上的报价是388,个人觉得还算物有所值。现在就在用它的免费宽带写blog。百瑞是杭州的酒店管理公司,2楼的餐厅的杭州菜很好吃。晚上赣江边秋水广场的音乐喷泉值得一看。

南昌最有名的景点应该是滕王阁了,可是我很怀疑它只是为了验证《滕王阁序》才有不断重建的必要。明日登阁,不晓得会否看到一堆游客长吟落霞与孤鹜齐飞?

Topic: 生活

很尴尬的成为 SSL 中间人攻击的教材

见:http://wuhongsheng.com/it/2009/09/ssl-hijack/ ,现在这个所谓的漏洞已经得到修补,暂时不打算跨省追捕这个吴洪声

附带宣布一下,继 vip.sohu.com 提供 https 服务之后,mail.sohu.com 也计划提供全程加密的 https 连接。技术在 vip.sohu.com 上已经证明可行——主要是灵活处理 URL,在普通模式下静态资源比如图片/JS使用 CDN;在 https 模式下使用 https://mail.sohu.com。

Topic: 商业 技术

2.6.32 的 scheduler 变化

引用:http://lwn.net/Articles/352863/

"kernel 2.6.32 前瞻"里提到过,在和 BFS 进行了对比测试后,程序员们将在 2.6.32 里修复原来 CFS 的一些问题,这里都有些什么呢??

首先是 NEW_FAIR_SLEEPERS 特性缺省会被禁止掉。这个功能是当一个进程结束睡眠返回运行队列的时候,gives it a small runtime credit。现在看起来这个东东实现得有些问题,未来解决后也许会重新打开。

该特性实际上现在就可以关掉。CFS scheduler 提供了 15 个 bool 值来控制其运行(原文是说它有32768种组合),我们只需要简单的

echo NO_NEW_FAIR_SLEEPERS > /debug/sched_features

或许你的桌面就运转如飞了。

还有一个变化就是 Child-runs-first。【虽然我们在操作系统课里学到,fork() 之后的代码段究竟是 parent or child 首先执行是不可知的,但实际上操作系统的行为绝对不是完全随机的,我猜在 CPU 不那么多的系统上更是如此。】最近 Linux 的实现里,子进程会被安排优先执行,从概念上来说这样设计是对滴,因为通常意义上子进程的工作更重要;但这个有可能影响性能:在此时父进程的上下文信息被当前CPU、TLB保持,立即切换到子进程会有些延迟。在 kernel build 测试里,Parent-runs-first 性能有了显著提高。

有人提出质疑,说这样的变动可能导致那些假设子进程会首先运行的程序异常。尽管我觉得那些不按理论规范只凭经验写程序的人碰到麻烦是咎由自取,2.6.32里还是很厚道的留下一个kernel.sched_child_runs_first sysctl调用去向前兼容。

最后是 cpuidle,为了社会和谐,现代高功耗的 CPU 都有这个 idle 功能。一方面是在低功耗模式下,切换到普通模式由于本身这个操作是相当耗能的,所以在低功耗状态下会执行得很慢;另外这种切换有一个性能损失造成延迟...甚至 BFS 也没有解决这个问题。有人已经弄出一个 patch 解决问题(具体算法去看 LWN 原文),有可能会被合并到 2.6.32 里。

Topic: 技术

kernel 2.6.32 前瞻

先介绍一下现在内核的开发模式:一开始Linus大概花2-3周的时间从其它人的git里合并代码,他肯定不可能看懂所有的代码,但我们也知道他也会拒绝那些他不太喜欢的代码;然后关闭 merge window,发布一个rc1,理论上所有的功能都freeze,剩下的只是 bugfix;这里也有例外,要看linus的心情而定,比如2.6.31的rc2里是又额外添加了新feature的;接下来差不多每周发布一个新的rc,在 7-10个rc版本之后,一个新的内核版本就正式发布了。总之现在大约是每11-13周有一个新的2.6.x出来

下面看看2.6.32

  1. 在 Greg KH 发出威胁后,微软的程序员终于在列表上开始了回应,似乎 Hyper-V 驱动还能继续在 stage 里呆着。微软必须学好怎么在 kernel 开发者社区中生存
  2. 某些程序员在和 Brain Fuck Scheduler 进行了对比测试后,发现了当前调度器中的一些问题,在 2.6.32 中会得以修正。看起来 BFS 永远也不会被合并到tree里,希望它的一些概念能给我们使用 linux desktop 带来更好的体验
  3. devtmpfs 是一个争议很大的特性,有几个人认为它很垃圾,但linus看起来不这么想。devtmpfs 又称为 devfs 2.0,好处之一是在内核自举的时候就把设备都挂到 /dev 上,节省了执行 udev 的时间
  4. DRBD... 终于也要进入内核了,事实上 devtmpfs 受到质疑的原因之一就是它对 DRBD 设备的集成. DRBD 算是一个简易廉价的存储HA实现,我知道以前 zhanzuo.com 就在用这个特性
Topic: 技术

闪电邮箱会话功能第二弹:会话计算和显示

gmail的会话合并是通过主题来完成;而且没有参考Header里的字段——做一个简单的测试:回复一封信,换一个主题,然后可以看到回复信和原件并不在一个会话里。

根据主题来确定会话是一定要有的,几个中文webmail只有163、QQ、sohu正确的实现了In-Reply-To,为了更大的兼容性必须如此。

搜狐现在的方案是,同时根据Message-ID、In-Reply-To、References,以及信件的主题来做会话的归属计算。所以在 GMail 里看到的会话和 Sohu 里看到的会不太一样。

GMail 仅仅使用主题来计算可能是优化这种情况:发信人很懒,每次写信都是从读信页面里选择回复,然后换个新主题,删除掉所有内容,而不是重新写一封邮件。我们以后是否也换成这个策略等用户反馈吧

或者可以更智能的从内容里面的引用关系、相关度去计算会话??现阶段还只能想象了。

某些情况下我们会主动 break 会话:

  1. 和第一封时间超过 30 天的 (想象一下你订了一个服务叫“今日股评”)
  2. 会话总数量超过 100 封 (太多了对阅读信件UI是一个灾难)

===============================================

有的时候,信箱里会有2封或多封Message-ID一样的邮件,最简单的情况是你写一封信给自己,这样已发送和收件箱里各有一封;或者你发一封信给邮件列表,邮件列表会重新给你寄一份。

在一个会话里看到两封一模一样的信不那么优雅,我们的规则是这样:

  1. 首先隐藏不在本文件夹的信(比如一封信发给自己,那么在收件箱中,看到的是投递过来的信;在已发送中,看到的是发送出去的信)
  2. 然后隐藏新邮件(这样也是为了防止攻击,恶意顶掉别人发的信件)
  3. 最后保证,一个会话只显示一个 Message-ID
Topic: 商业 技术

RedHat Enterprise Linux 生命周期

开源爱好者在系统选型的时候可能很少有人去仔细考虑商业产品的生命周期问题,但这个策略对系统架构实在是影响巨大。即使你是在运行CentOS这样的免费克隆,也应该对RHEL的相关知识了如指掌。详情去看 https://www.redhat.com/security/updates/errata/ ,我这里只是简单介绍:

  1. 每个RHEL版本生命期是7年
  2. 7年里分为三个阶段,Production 1 Life Cycle Phase、Production 2 L C P、Production 3 L C P。。。下面就用 p1 p2 p3 来缩写吧
  3. 大致来说P1是头4年,P2是第5年,P3是剩下的2年
  4. 不管产品在哪个阶段,都可以得到技术支持、安全方面的更新、以及bug修补。关于这个bug修补,RedHat是有选择的,只有那些被认为影响业务运行的才会被修补。
  5. 在P1和P2阶段会发布Minor Release。就是Update1, Update2...或者说4.1、4.2. P1 阶段的Update相当于微软的ServicePack——这种Update并不只是简单的补丁集合,而会包括功能方面的扩展和增强——比如最近的 RHEL 5.4 一个显著变化就是加入了 KVM 的支持(Xen将被RHEL慢慢遗弃);P2阶段的Update将不包括功能的变化。这种企业发行版本的一个特点也是在功能不断更新(4年之久)的情况下,还可以长期保证客户、ISV的向前兼容能力。P1阶段的每次Update都会发行新的安装介质,在P2阶段除非极端必要,否则不会有新的介质出现(这一点RHEL做得不如CentOS,哈哈)
  6. 在长达7年的时间里,除了要应付业务和软件的变化外,另一个挑战就是硬件变化。在P1 阶段RHEL会积极的将最新硬件(我猜主要是认证厂商的服务器)驱动backport。P2阶段则是有选择的更新硬件驱动,上面说了P2阶段不会再有功能变化,因此只有那些不会影响软件堆栈的硬件驱动才会加入。如果你一定需要在尚不支持的硬件上运行P3阶段的RHEL版本的话,RedHat的方案是:现在已经进入了第6个年头,最新版的RHEL此时应该在P1或P2阶段,客户可以在新的RHEL上虚拟化上一个版本。

最后总结一下:RHEL的头四年可以获得最佳的软硬件支持,GNU/Linux Stack 对商业运行来说有价值的更新会被backport(epoll就曾经这样被移植回了RHEL3的2.4内核);在第5年将只有部分的硬件支持,这个时候应该开始把业务迁移到新的RHEL上;在最后2年就只剩下bugfix,给客户一个平稳过渡的时期。


现在RHEL4的P2已经快要结束,还在使用RHEL4的同志们该开始考虑升级到RHEL5了;或者再等半年,2010Q1据说6就会发布了

Topic: 技术

迪卡侬简介

在登顶启孜后,我已经从一个菜鸟成功升级为户外初级玩家,DKN店也去了有六七次,感觉DKN除了户外装备外,也蛮适合家庭购物买衣服买鞋的

迪卡侬有十几个自有品牌,分别对应不同类型的产品,我比较关注的东西包括:

  1. Quechua 户外系列. 首先是注意下面几个专利
    • novadry novadry 差不多相当于广告泛滥的 Gore-Tex 技术,简单说就是防水透气,没有这个专利的防水产品,透气性就差些了。
    • stratermic 这个定位是保暖,通常是抓绒衣?
    • equarea 这个定位是贴身排汗,买速干衣裤、内衣、袜子的时候注意一下有没有这个技术
    • vibram 这个不是迪卡侬自有的专利,是全球做登山鞋底的第一品牌。
    • AirCooling 这个主要是背包上使用,和背包另外一个相关的专利是 Symbium 背负系统 ,不过这个太专业了点儿,一般家用就不考虑了。

    这个系列陪我上山的东西包括:

    • 登山杖,500 light,经历过启孜峰大雪坡考验的。建议同时购买用于坚硬地面兼保护杖尖的橡皮头,29元一对
    • 背包,Forclaz 30 air,带有水袋出水口,自带雨罩——这次在山上碰到冰雹,立马感到这个额外防护的必要之处
    • 袜子2双,型号忘了。

    它的魔术头巾太没有性价比,而且花色只有一种。
    在这里给我家达达买过一件速干T恤和一条速干的7分裤。

  2. Tribord 这个是水上运动系列。
    我就买了一条平时擦汗的小毛巾,倒是给达达买了不少:比基尼,沙滩鞋
  3. Kalenji 都市步行/跑步系列
    上周六我全家都是穿这个牌子的鞋去爬山的,强烈推荐去看看它的鞋子。除了鞋子,还有跑步穿的衣服,相比较Q系更强调速干排汗的
  4. Domyos 休闲健身系列
    如果是 Quechua 定位是户外,Kalenji 定位是都市大街,Domyos 的衣服就定位在健身房里的穿着。达达有一件它的上衣
  5. Geonaute 电子配件/光学产品/运动包
    海拔表,这个以前说过了
    手电筒,在冲锋营帐篷里被我挂起来当电灯。特点是可以摇手柄自我充电,不过还没有机会使用这个特性
    相比较 Q 系来说它的包更休闲一些。买了一个给达达当书包
  6. Aptonia 运动防护
    我有时候强烈感到在三夫买的coolsun太烧包了,Aptonia的墨镜足够爬雪山用。不过这玩意涉及到眼睛保护,不敢大意,不清楚性能的前提下宁可买贵的。
    去三亚之前给达达买了一副小孩墨镜

它家的品类实在是包罗万象,虽然有些项目从来不玩,但货架也值得一逛——比如马术系列,有人就发掘出这个手套着实不错。

最后要说的是,去迪卡侬之前先在官方网站上大致浏览一下,看看哪些东西缺货,哪些打折,一个城市内也货比三家,一定可以节省不少时间和金钱。

Topic: 生活

闪电邮箱会话功能第一弹:显示发件人策略

大家在使用 GMail 的时候,有没有想过在会话列表里面,多个会话参与人是按什么原则显示出来的呢?

我们并没有去反向 GMail 的代码,只是按我们对会话阅读行为的理解,并参考了一下 GMail 的显示样式,定出如下规则:

  1. 后端把该会话的所有参与者地址都返回JS,分成两组:第一组是会话第一封信到第一封未读的发件人,第二组是第一封未读到最后一封的发件人。排序为按时间排序,并排重;第二组有可能还携带信件是否已读的标记。剩下的处理都在前端js完成
    • 如果只有一组,则可以按一个固定的策略显示
  2. 如果已读的第一个和未读的第一个发件人不同
    • 显示已读的第一个,即会话的发起者。跟随一个省略标记
    • 否则只显示省略标记
  3. 然后显示未读邮件的第一个,即未读的最新的发件人。
    • 剩下的未读邮件发件人尽量全部显示出来 (如果开发这个功能有障碍,那就先只显示最新的一个人好了)
    • 如果不能完全显示,则尽量显示最新收到的邮件发件人;别忘了再增加一个省略标记
  4. 为了尽量在这里展示更多的发件人信息,规则如下
    • 只显示 First Name,即:"Yingbo Qiu" <qiuyingbo@…>,只会显示 Yingbo
    • 没有 Name 的,只显示地址前缀,即: <qiuyingbo@…>,只显示 qiuyingbo
  5. 示例
    • Yingbo ... Xiaoyu, Jichuan, Yuan (全部已读)
    • Yingbo ... Xiaoyu, Jichuan, Yuan (全部未读)
    • ...Xiaoyu ... Jichuan, Yuan (会话的发起者也是 Xiaoyu,和第一个未读一致)
    • Yingbo ... Xiaoyu .. Jichuan, Yuan (混合了已读和未读)
    • Yingbo ... Xiaoyu ..Jichuan,Yuan (第二组中,Jichuan 信件已读。。。这种情况概率很小,一开始可以考虑不实现该特性;甚至让第二组返回的时候,只返回未读信件的发件人列表)
Topic: 商业 技术

Google Group 邮件列表偶尔会有延迟的情况

自从闪电邮箱的会话功能进行开发以来,我就一直在密切对比会话在我们这里,和 GMail 里的合并情况。碰到过几次信件已经在 GMail 那里形成会话了,但我们这里还没有收到。

一开始我很紧张,以为是我们这里拒信或者是什么其它的bug导致,后来发现,几乎都是因为 Google Group 的信件延迟造成——严重的情况下可能长达一个小时!

下面是今天收到的信件的 header:

Received: from mail-vw0-f137.google.com (unknown [209.85.212.137])
	by sohumx35.sohu.com (Postfix) with ESMTP id 5128ECAC2F8
	for ; Wed, 23 Sep 2009 14:25:14 +0800 (CST)
Received: by vws1 with SMTP id 1so470671vws.17
        for ; Tue, 22 Sep 2009 23:25:13 -0700 (PDT)
...
...
...
Received: by 10.220.68.102 with SMTP id u38mr167676vci.5.1253684010780;
        Tue, 22 Sep 2009 22:33:30 -0700 (PDT)
Received: by 10.177.112.39 with SMTP id p39gr101426yqm.0;
	Tue, 22 Sep 2009 22:33:26 -0700 (PDT)
Date: Tue, 22 Sep 2009 22:33:16 -0700 (PDT)

在从 10.220.68.102 发送到 vws1(mail-vw0-f137.google.com) 这台服务器的过程中,延误了50多钟。嗯嗯,不能全然迷信 Google

Topic: 商业 技术
订阅 RSS - qyb的博客