<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>车东[Blog^2]</title>
      <link>http://www.chedong.com/blog/</link>
      <description>良好引用，良好结构，良好导航 Well referenced and well organized, with easy navigation</description>
      <language>zh-cn</language>
      <copyright>Copyright 2008</copyright>
      <lastBuildDate>Tue, 22 Apr 2008 21:17:27 +0800</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>[AD] “我不是一个塑料袋” 博客大巴环保袋设计大赛 一等奖为MacBook Air + 5000￥</title>
         <description><![CDATA[<p>“我不是塑料袋”是一个很有趣的设计创意： <a href="http://www.britishcouncil.org/ZH/china-arts-ukarts-fashionanddesign-articles-imnotaplasticbag.htm">I'm not a plastic bag</a></p>

<p>此次<a href="http://zhuanti.blogbus.com/bag/">我不是塑料袋：环保袋设计大赛活动</a>的奖品为：<br />
    评委会奖(1名)：MacBook Air + 5000元现金<br />
<img src="http://zhuanti.blogbus.com/bag/images/a1.jpg" /> ( 歌手<a href="http://www.douban.com/subject/2336423/">Yael Naim</a>的那首<a href="http://julices.blogbus.com/logs/19459224.html">《New Soul》</a>你每天在电梯中都会听到多次吧？ )<br />
    独树一帜奖(2名)：价值5000元以上的尼康D60单反相机1台 + 5000元现金<br />
    不拘一格奖(2名)：价值2000元以上的多普达S1手机1台 + 5000元现金</p>

<p>* 奖品涉及到的个人所得税由获奖人自理<br />
* 所有参加投票的网友均有机会抽取100名参与奖： BlogBus明信片一套*50套 触动传媒提供小礼品*50个</p>]]></description>
         <link>http://www.chedong.com/blog/archives/001428.html</link>
         <guid>http://www.chedong.com/blog/archives/001428.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">个人爱好|Hobbies</category>
        
        
         <pubDate>Tue, 22 Apr 2008 21:17:27 +0800</pubDate>
      </item>
            <item>
         <title>启用MEMCACHE_COMPRESSED压缩，“扩容”MemCached</title>
         <description><![CDATA[<p>尝试：<br />
启用了PHP <a href="http://cn.php.net/memcache_set">memcache_set()</a>函数中的 MEMCACHE_COMPRESSED压缩选项，而<a href="http://cn.php.net/memcache_get">memcache_get()</a>可以在后续读取过程中自动对压缩的缓存对象进行解压缩。</p>

<p>效果：<br />
测试了一下，对于<a href="http://hengge.blogbus.com/logs/1473571.html">博客大巴目前的应用</a>来说，启用压缩后，相同的容量（2G）存储的对象数量增加了约一倍，缓存命中率从50%左右，提高到了60%左右。进一步提高命中率硬件投入还是必须的，又增加了2倍的内存后终于做到了缓存命中率提高到90%；</p>

<p>前提0： 内存缓存有用，且命中率值得提升；<br />
从60%提高到90%，还是从90%提高到95%，要看hit后的性能能够提升是否值得；</p>

<p>前提1：MemCached已经用满<br />
先用<a href="http://code.sixapart.com/svn/memcached/trunk/server/scripts/memcached-tool">memcached-tool</a>查看一下memcached的容量统计，看memcached是不是已经用满了。如果充分运行时MemCached的空间尚未用满，启用一下压缩是没有意义的； 而且：发现没有用满的MemCached，最好减少相应MemCached的容量，空余出更多内存给其他服务做缓存；</p>

<p>前提2： 压缩率<br />
缓存的数据的确有大于几百字节的，如果都是小于100字节的键值对，压缩可能反而带来膨胀。由于缓存对象的大小在Memcached中都是按照固定大小分块存储的，最小也要88 B。所以对于过小数据带来的压缩膨胀并不是太大的问题；</p>

<p>前台应用的CPU损耗：<br />
对数据的额外压缩CPU损耗远远低于缓存命中率提升减少后台数据库访问带来的性能提升，和<a href="http://www.chedong.com/tech/compress.html">http的gzip/deflate压缩</a>类似，压缩后数据一般为原数据大小的30%左右，节省了70%的传输性能消耗所得会大于文件压缩带来的性能损耗；</p>]]></description>
         <link>http://www.chedong.com/blog/archives/001431.html</link>
         <guid>http://www.chedong.com/blog/archives/001431.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">缓存|Cache</category>
        
        
         <pubDate>Sun, 13 Apr 2008 21:55:29 +0800</pubDate>
      </item>
            <item>
         <title>利用Header机制隐掉Vary，提高mod_cache缓存的命中率</title>
         <description><![CDATA[<p>HTTP 1.1的规范建议所有的请求输出都包含Vary Header，目的是针对对前端缓存服务器，增加针对Vary制定的各种Header类型进行不同的缓存处理，在浏览器规格复杂的情况下，不利于缓存的命中，所以要在被缓存的服务器上设置： <br />
<blockquote>    Header unset Vary</blockquote></p>

<p>问题是这样被发现的：最近使用<a href="http://httpd.apache.org/docs/2.2/mod/mod_mem_cache.html">Apache 2.2的内存缓存mod_mem_cache机制</a>进行后台静态文件加速。但是总是发现几乎是只代理而不缓存，而内存缓存模式又没有统计工具查看缓存内容和命中率。转为用<a href="http://httpd.apache.org/docs/2.2/mod/mod_disk_cache.html">mod_disk_cache</a>后，前端缓存目录空间增加非常快，以至于经常需要删除文件，而删除文件的I/O损失超过了直接访问后台访问的加速所得。后台明明只有几M模板图片和CSS文件，为什么缓存空间上G而且命中率那么低呢？查看了一下缓存目录下的文件，Apache的前端磁盘缓存就会根据浏览器除了针对内容的.data文件和.header文件外还有一个.vary目录，而这个vary目录下又会按照顶级的cache规则再mapping出2级目录来，目录节点个数过多造成磁盘空间的浪费：<br />
<blockquote>a/b/Jqyw8OvBIlgaef7Zb8lQ.data<br />
a/b/Jqyw8OvBIlgaef7Zb8lQ.header<br />
a/b/Jqyw8OvBIlgaef7Zb8lQ.header.vary/a/b<br />
</blockquote><br />
当遇到和原有Vary不同的Header时，会在 header.vary目录下生成更多的缓存；从Apache的讨论组上看原因就是<a href="http://archive.netbsd.se/?ml=apache-httpd-dev&a=2007-09&t=5183550">IE的AcceptEncoding请求头信息里增加了一个空格</a>；<br />
<blockquote>IE    : Accept-Encoding: gzip, deflate<br />
Firefox: Accept-Encoding: gzip,deflate</blockquote><br />
于是按照Fernando的方法，将后台的Vary Header禁掉了。缓存空间立刻停止了增长（还是个别有header.vary目录出现）。</p>

<p>另外一个配置优化是不要启用后台的Expires Header；<br />
<blockquote>        ExpiresActive  off</blockquote><br />
由前端的Cache服务器设置缓存规则，基本上到后台的访问就很少了；</p>

<p>记录一个调试缓存缓存用命令行看Header输出的方法：<br />
用<a href="http://www.chedong.com/phpMan.php/man/curl">curl</a> -I 查看HTTP头信息；<br />
查看缓存后输出结果：<br />
curl -I http://www.example.com/foo.bar<br />
查看缓存前的服务器输出：<br />
curl -I -H "Host: www.example.com" http://ip.address.of.example/foo.bar<br />
<blockquote>[chedong]$ curl -I -H "Host: public.<a href="http://blogbus.com">blogbus.com</a>" http://192.168.1.17/rss/xianguo.png<br />
HTTP/1.1 200 OK<br />
Date: Sat, 12 Apr 2008 07:09:51 GMT<br />
Server: Apache<br />
Last-Modified: Mon, 28 Jan 2008 03:34:55 GMT<br />
Accept-Ranges: bytes<br />
Content-Length: 1353<br />
Content-Type: image/png</p>

<p>[chedong]$ curl -I http://public.blogbus.com/rss/xianguo.png<br />
HTTP/1.1 200 OK<br />
Date: Sat, 12 Apr 2008 07:10:01 GMT<br />
Server: Apache/2.2.8 (Unix)<br />
Last-Modified: Mon, 28 Jan 2008 03:34:55 GMT<br />
Accept-Ranges: bytes<br />
Content-Length: 1353<br />
Cache-Control: max-age=20736000<br />
Expires: Mon, 08 Dec 2008 06:27:41 GMT<br />
Node: B01-AD-01<br />
<strong>Age: 2540</strong><br />
Content-Type: image/png</blockquote></p>]]></description>
         <link>http://www.chedong.com/blog/archives/001429.html</link>
         <guid>http://www.chedong.com/blog/archives/001429.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">缓存|Cache</category>
        
        
         <pubDate>Sat, 12 Apr 2008 09:07:23 +0800</pubDate>
      </item>
            <item>
         <title>[博客大巴招聘] PHP程序员，工作地点在上海 欢迎应届毕业生</title>
         <description><![CDATA[<p>纯技术人员工种，需要撰写代码，这确实是个体力活，所以我们需要您比较年轻。但我们一样需要您有至少一年的网站开发的工作经验（学生时代自己摆弄建站亦可），曾经独立开发过某个项目（或者是主要成员）。 我们需要您有在LAMP平台上纯熟的工作经验，可以基于SVN和其他开发人员进行协同开发，能够直接投入到独立开发工作之中。 如果您曾经开发过/Hack过Blog系统，那是会得到加分的。技术能力当然很重要，但我们更看重您的学习和钻研能力。</p>

<p>简历请寄到：<a href="mailto: job@blogbus.com">job@blogbus.com</a>，最好附上以前项目的主要项目开发经历：使用的软件包/框架/类库等； 以及你对加入<a href="http://blogbus.blogbus.com/logs/2005/09/1473749.html">博客大巴十大要求</a>的理解；面试时间一般是每周四下午，公司的<a href="http://www.blogbus.com/about/contact.html">具体地址是</a>：上海市徐汇区龙华路2577号5号楼。</p>

<p>如果你在实习：可以考虑以下这个题目（一个月内学习并完成）<br />
一个每天十万级访问的RSS阅读器（每秒2处理完成个请求）；<br />
用户数量1万人，每人平均有20个RSS（每个人有5-100个RSS） FEED（总计有10万个不同RSS，想办法从google blogsearch上搜集一下）； <br />
更新频度：所有FEED平均每天至少2次，其中热门FEED每小时同步一次（占5%）；<br />
估算一下存储量，访问速度和RSS解析（<a href="http://simplepie.org/">SimplePie</a>）的容错问题等。 </p>

<p>基于LAMP平台+MemCached ，目前我们的<a href="http://www.chedong.com/phpMan.php/man/php">PHP</a>开发编辑器是： <a href="http://www.activestate.com/Products/komodo_ide/komodo_edit.mhtml">Komodo Edit</a> 服务器端直接用<a href="http://www.chedong.com/phpMan.php/man/vi">vim</a>编辑； <br />
版本控制是<a href="http://www.chedong.com/phpMan.php/man/svn">Subversion/SVN</a>和<a href="http://tortoisesvn.tigris.org/">Windows客户端 TortoiseSVN</a><br />
Windows下的远程登录是<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html">PuTTY</a></p>

<p>大部分操作都是在Linux命令行下操作，所以<a href="http://www.chedong.com/blog/archives/000634.html">awk</a> / <a href="http://www.chedong.com/blog/archives/000224.html">perl</a>/ <a href="http://www.chedong.com/blog/archives/000432.html">grep</a>之类的需要能够熟练到代替简单的过滤排序等<a href="http://www.chedong.com/blog/archives/000830.html">SQL操作</a>；</p>]]></description>
         <link>http://www.chedong.com/blog/archives/001426.html</link>
         <guid>http://www.chedong.com/blog/archives/001426.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">工作招聘 |recruit</category>
        
        
         <pubDate>Thu, 27 Mar 2008 14:32:11 +0800</pubDate>
      </item>
            <item>
         <title>BugFree的使用：开发过程的量化统计工具</title>
         <description><![CDATA[<p>上海互联网同行经常能有一些很务实交流，比如：<a href="http://VeryCD.com">VeryCD</a>向<a href="http://www.blogbus.com">博客大巴</a>介绍过<a href="http://www.chedong.com/blog/archives/001420.html">Google的免费企业邮箱</a>的注册方法和<a href="http://www.cdnunion.com/">CDN服务商</a>， 而同客齐集的交流中我向<a href="http://home.wangjianshuo.com/cn/">王建硕</a>请教过：微软是如何量化开发人员的工作饱和度，评估开发人员的工作效率并鼓励开发者按时完成任务的？从后来通过对BugFree这套系统的使用交流中了解了一些考核机制在任务跟踪系统中影响这些因素的方法。</p>

<p>如果说GTD是一个人的目标管理，那么任务跟踪系统就是帮助实现团队的目标管理： 而且一件事情同时被多个人跟踪，还是非常有助于减少任务的被跟“丢”几率的，一个任务的角色有任务的创建者（甲方）和任务执行者（乙方）两个角色； 而开发团队一般会有3个角色来进行任务的跟踪，项目的发起者（产品经理），项目的执行者（开发人员），项目的确认（测试人员），而一个任务按照进行中，完成确认，关闭这几个状态，也有发起时间（创建者），解决时间（执行者），完成确认时间（创建者）这几个关键时间点， 利用这几个时间因素结合创建人，创建原因等因素，通过BugFree的查询生成器可以完成很丰富的开发过程指标统计甚至完成一些初步的KPI考核指标统计；</p>

<p><strong>开发人员的工作饱和度</strong><br />
就是简单的任务量累计，按照每个需求的预算时间进行累加，比较开发人员的工作时间；</p>

<p><strong>任务的平均关闭时间</strong><br />
总工作时间 ÷ 关闭的任务数，用于评估开发人员的工作效率；<br />
1 开发人员不要将手边积累过多的任务，从而让大量的任务处于等待状态；<br />
2 开发人员会要求需求人员尽量将任务分解： 不要有超过2天的任务，便于及时的确认进展；<br />
3 开发人员完成任务后主动告知需求人员，尽快确认完成并关闭任务；</p>

<p><strong>项目响应速度</strong><br />
项目无更新时间不得超过一定时间（比如： 24小时） ，就是统计：项目状态不等于关闭， 最后更新时间相比现在大于24小时的任务，每天统计：被发现就要发出警告相应项目的执行者； 即使项目没有完成，也要通过编辑项目向项目的发起者进行反馈，避免任务被长期无响应状态；</p>

<p>为此： 项目的开发者还需要遵循以下规则；<br />
1 跟踪系统本身只是用于备忘和时间的统计，任务完成还是需要同事间直接（最好是面对面的）交流；<br />
2 项目的执行方不能关闭任务，只能由创建者关闭；<br />
3 执行者另外需要其他开发人员帮助的时候，需要开启新的任务作为咨询；<br />
4 任务类型只计算新增需求，旧需求的错误修正，不计算为工作时间；</p>

<p>设计以上的规则的目的是：<br />
开发者：作为任务的执行者在任务启动后应及时的解决并要求创建者关闭任务，开发者会尽可能多和任务的创建者沟通，尽可能在项目进入任务跟踪前将项目的需求细化并在完成后及时提交测试并关闭，从而达到满足工作工作饱和度的同时，减少单项目完成时间指标；<br />
需求人员：细化需求合理估算工时避免返工，因为项目的执行者是不用对项目需求的合理性负责的，按时开发完毕后因为需求设计错误为开发者计入工作时间，让需求的提出者（产品经理）成为项目风险的承担者，从而避免产品经理即无责任也无权利的状态；</p>

<p>此外： 什么指标可以体现开发者除了完成任务本身外还在不断找新方法提高效率呢？</p>]]></description>
         <link>http://www.chedong.com/blog/archives/001418.html</link>
         <guid>http://www.chedong.com/blog/archives/001418.html</guid>
                  <category domain="http://www.sixapart.com/ns/types#category">技术笔记|Tech Notes</category>
        
        
         <pubDate>Thu, 13 Mar 2008 22:10:03 +0800</pubDate>
      </item>
      
   </channel>
</rss>
