<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Everybody loves Rui</title>
	<atom:link href="http://www.rui-yang.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rui-yang.com</link>
	<description>Stay hungry, stay foolish - 求知若饥，虚心若愚</description>
	<lastBuildDate>Tue, 15 May 2012 03:28:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Hadoop重新启动死亡的节点</title>
		<link>http://www.rui-yang.com/develop/hadoop%e9%87%8d%e6%96%b0%e5%90%af%e5%8a%a8%e6%ad%bb%e4%ba%a1%e7%9a%84%e8%8a%82%e7%82%b9/</link>
		<comments>http://www.rui-yang.com/develop/hadoop%e9%87%8d%e6%96%b0%e5%90%af%e5%8a%a8%e6%ad%bb%e4%ba%a1%e7%9a%84%e8%8a%82%e7%82%b9/#comments</comments>
		<pubDate>Tue, 15 May 2012 03:28:18 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[Hadoop]]></category>

		<guid isPermaLink="false">http://www.rui-yang.com/?p=502</guid>
		<description><![CDATA[近日发现运行中的Hadoop集群中的一个数据节点意外死亡了，搜索了一下重启死亡节点的方法，在此记录一下。当发现节点死亡时，只需要登录到该死亡节点上执行以下命令，即可重启该节点： $ hadoop-daemon.sh start datanode]]></description>
			<content:encoded><![CDATA[<p>近日发现运行中的Hadoop集群中的一个数据节点意外死亡了，搜索了一下重启死亡节点的方法，在此记录一下。当发现节点死亡时，只需要登录到该死亡节点上执行以下命令，即可重启该节点：</p>
<blockquote><p>$ hadoop-daemon.sh start datanode</p></blockquote>
<div class="none"><div class="g-plusone" data-href="http://www.rui-yang.com/develop/hadoop%e9%87%8d%e6%96%b0%e5%90%af%e5%8a%a8%e6%ad%bb%e4%ba%a1%e7%9a%84%e8%8a%82%e7%82%b9/" size="medium" count="true"></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.rui-yang.com/develop/hadoop%e9%87%8d%e6%96%b0%e5%90%af%e5%8a%a8%e6%ad%bb%e4%ba%a1%e7%9a%84%e8%8a%82%e7%82%b9/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一声叹息：两台服务器是为失败者准备的</title>
		<link>http://www.rui-yang.com/develop/%e4%b8%80%e5%a3%b0%e5%8f%b9%e6%81%af%ef%bc%9a%e4%b8%a4%e5%8f%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%98%af%e4%b8%ba%e5%a4%b1%e8%b4%a5%e8%80%85%e5%87%86%e5%a4%87%e7%9a%84/</link>
		<comments>http://www.rui-yang.com/develop/%e4%b8%80%e5%a3%b0%e5%8f%b9%e6%81%af%ef%bc%9a%e4%b8%a4%e5%8f%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%98%af%e4%b8%ba%e5%a4%b1%e8%b4%a5%e8%80%85%e5%87%86%e5%a4%87%e7%9a%84/#comments</comments>
		<pubDate>Mon, 27 Feb 2012 03:50:42 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[mood]]></category>

		<guid isPermaLink="false">http://www.rui-yang.com/?p=500</guid>
		<description><![CDATA[一、 总裁：“我们不需要两台服务器” 我：“可是我们需要双机备份” 总裁：“两台服务器是为失败者准备的，优秀的团队绝对不允许任何一台服务器出问题” 我：“唉…” 二、 领导：“我们的外网网站应该支持IE8” 开发：“我们需要安装IE8才能测试 领导：“技术支持部门会为你们测试” 技术支持：“我们不支持IE8” 开发：“我们需要安装IE8来测试 领导：“你们不允许安装未经批准的软件 开发：“唉…” 领导：“为什么我们的外网网站还没有支持IE8？” 三、 技术总监：“我们要准备把我们的MySQL换成SQL Server。” 开发人员：“这是出于什么目的？一切都运转良好呀，而且买SQL Server需要花费￥￥￥…” 技术总监：“因为MySQL不是‘企业级’的。” 唉… 四、 一个同事在写单元测试。当运行起来后，他发现有个测试断言失败了。他如何解决这个问题？他把它给删了，因为“没有人会注意到这些”。 唉… 五、 老板：我们需要在这放一个cookie——他指着屏幕。 我：什么？ 老板：在这放一个cookie——他再次指了一下屏幕。 我：呃… 技术负责人：他的意思是一个下拉列表。 六、 我：在我们把这些屏幕截图通过网络送出去之前应该用ffmpeg工具包把它们压缩一下… 团队负责人：谁打算去学习这些没有文档的api？我们先用多线程技术直接发送数据… 我：这样可能数据量太大… 团队负责人：没错，先干着。你抽空在“业余”时间研究一下那个api。 团队：哈哈… ….. 一个月后，多线程版的实现了… 团队：局域网上运行表现非常好…放到WiFi网络上试试 …. &#8230;<p class="read-more"><a href="http://www.rui-yang.com/develop/%e4%b8%80%e5%a3%b0%e5%8f%b9%e6%81%af%ef%bc%9a%e4%b8%a4%e5%8f%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%98%af%e4%b8%ba%e5%a4%b1%e8%b4%a5%e8%80%85%e5%87%86%e5%a4%87%e7%9a%84/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<h3>一、</h3>
<p>总裁：“我们不需要两台服务器”</p>
<p>我：“可是我们需要双机备份”</p>
<p>总裁：“两台服务器是为失败者准备的，优秀的团队绝对不允许任何一台服务器出问题”</p>
<p>我：“唉…”</p>
<h3>二、</h3>
<p>领导：“我们的外网网站应该支持IE8”</p>
<p>开发：“我们需要安装IE8才能测试</p>
<p>领导：“技术支持部门会为你们测试”</p>
<p>技术支持：“我们不支持IE8”</p>
<p>开发：“我们需要安装IE8来测试</p>
<p>领导：“你们不允许安装未经批准的软件</p>
<p>开发：“唉…”</p>
<p>领导：“为什么我们的外网网站还没有支持IE8？”</p>
<h3>三、</h3>
<p>技术总监：“我们要准备把我们的MySQL换成SQL Server。”</p>
<p>开发人员：“这是出于什么目的？一切都运转良好呀，而且买SQL Server需要花费￥￥￥…”</p>
<p>技术总监：“因为MySQL不是‘企业级’的。”</p>
<p>唉…</p>
<h3>四、</h3>
<p>一个同事在写单元测试。当运行起来后，他发现有个测试断言失败了。他如何解决这个问题？他把它给删了，因为“没有人会注意到这些”。</p>
<p>唉…</p>
<h3>五、</h3>
<p>老板：我们需要在这放一个cookie——他指着屏幕。</p>
<p>我：什么？</p>
<p>老板：在这放一个cookie——他再次指了一下屏幕。</p>
<p>我：呃…</p>
<p>技术负责人：他的意思是一个下拉列表。</p>
<h3>六、</h3>
<p>我：在我们把这些屏幕截图通过网络送出去之前应该用ffmpeg工具包把它们压缩一下…</p>
<p>团队负责人：谁打算去学习这些没有文档的api？我们先用多线程技术直接发送数据…</p>
<p>我：这样可能数据量太大…</p>
<p>团队负责人：没错，先干着。你抽空在“业余”时间研究一下那个api。</p>
<p>团队：哈哈…</p>
<p>….. 一个月后，多线程版的实现了…</p>
<p>团队：局域网上运行表现非常好…放到WiFi网络上试试</p>
<p>…. 由于数据延迟，慢的像蜗牛…</p>
<p>团队负责人：你有没有在业余时间研究一下那个ffmpeg？</p>
<p>我：唉…</p>
<h3>七、</h3>
<p>我知道，我们需要用 pngquaint软件 压缩60多个总共20多兆的PNG图片。</p>
<p>pngquaint软件崩溃了，怎么回事？</p>
<p>研究发现，这些PNG文件实际上是JPG文件，只是名称被改成了PNG，不知道之前那个程序员她想干嘛。</p>
<p>唉…</p>
<p>转自：<a href="http://www.lupaworld.com/article-216087-1.html">http://www.lupaworld.com/article-216087-1.html</a></p>
<div class="none"><div class="g-plusone" data-href="http://www.rui-yang.com/develop/%e4%b8%80%e5%a3%b0%e5%8f%b9%e6%81%af%ef%bc%9a%e4%b8%a4%e5%8f%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%98%af%e4%b8%ba%e5%a4%b1%e8%b4%a5%e8%80%85%e5%87%86%e5%a4%87%e7%9a%84/" size="medium" count="true"></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.rui-yang.com/develop/%e4%b8%80%e5%a3%b0%e5%8f%b9%e6%81%af%ef%bc%9a%e4%b8%a4%e5%8f%b0%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%98%af%e4%b8%ba%e5%a4%b1%e8%b4%a5%e8%80%85%e5%87%86%e5%a4%87%e7%9a%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu部署Git服务器</title>
		<link>http://www.rui-yang.com/develop/ubuntu%e9%83%a8%e7%bd%b2git%e6%9c%8d%e5%8a%a1%e5%99%a8/</link>
		<comments>http://www.rui-yang.com/develop/ubuntu%e9%83%a8%e7%bd%b2git%e6%9c%8d%e5%8a%a1%e5%99%a8/#comments</comments>
		<pubDate>Fri, 24 Feb 2012 14:35:20 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[Git]]></category>

		<guid isPermaLink="false">http://www.rui-yang.com/?p=492</guid>
		<description><![CDATA[Rui以前都用Subversion作为开发的代码版本管理工具，现在看到很多人在大力推荐Git，同时看到有很多知名的开源项目也纷纷从sourceforge和google code迁移到了Github上，外加Git又是Linus大神继Linux之后的又一开源力作，长期使用Linux作为首选Desktop OS的Rui岂有不上手一试之理。今天抽时间在自己的VPS上安装了Git，长期使用SVN的Rui在上手时确实还有些不习惯，这个问题留待日后边用边熟悉，今天就记录一下在Ubuntu上安装配置Git的方法。 首先安装git和gitosis: [server]$ sudo apt-get install git-core gitosis 然后将本地客户端机器生成公钥并上传到Git的服务器上： [client]$ ssh-keygen -t rsa -P &#8220;&#8221; [client]$ scp ~/.ssh/id_rsa.pub user@server:/tmp/ 在服务器端执行： [server]$ sudo -H -u gitosis gitosis-init &#60; /tmp/id_rsa.pub 如果屏幕上输出如下信息，表示执行成功。 Initialized empty Git repository in xxxxxxxxxx 确认配置了正确的权限： [server]$ sudo &#8230;<p class="read-more"><a href="http://www.rui-yang.com/develop/ubuntu%e9%83%a8%e7%bd%b2git%e6%9c%8d%e5%8a%a1%e5%99%a8/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>Rui以前都用Subversion作为开发的代码版本管理工具，现在看到很多人在大力推荐Git，同时看到有很多知名的开源项目也纷纷从sourceforge和google code迁移到了Github上，外加Git又是Linus大神继Linux之后的又一开源力作，长期使用Linux作为首选Desktop OS的Rui岂有不上手一试之理。今天抽时间在自己的VPS上安装了Git，长期使用SVN的Rui在上手时确实还有些不习惯，这个问题留待日后边用边熟悉，今天就记录一下在Ubuntu上安装配置Git的方法。</p>
<p>首先安装git和gitosis:</p>
<p><span id="more-492"></span></p>
<blockquote><p>[server]$ sudo apt-get install git-core gitosis</p></blockquote>
<p>然后将本地客户端机器生成公钥并上传到Git的服务器上：</p>
<blockquote><p>[client]$ ssh-keygen -t rsa -P &#8220;&#8221;</p>
<p>[client]$ scp ~/.ssh/id_rsa.pub user@server:/tmp/</p></blockquote>
<p>在服务器端执行：</p>
<blockquote><p>[server]$ sudo -H -u gitosis gitosis-init &lt; /tmp/id_rsa.pub</p></blockquote>
<p>如果屏幕上输出如下信息，表示执行成功。</p>
<blockquote><p>Initialized empty Git repository in xxxxxxxxxx</p></blockquote>
<p>确认配置了正确的权限：</p>
<blockquote><p>[server]$ sudo chmod 755 /srv/gitosis/repositories/gitosis-admin.git/hooks/post-update</p></blockquote>
<p>至此，已经完成了服务器端的配置。接下来在客户端执行以下命令：</p>
<blockquote><p>[client]$ git clone gitosis@server:gitosis-admin.git</p></blockquote>
<p>这时用户目录下多出了一个gitosis-admin的目录，里面包含了gitosis.conf文件和keydir目录，keydir中存放所有Git用户的公钥文件。现在需要在gitosis.conf文件中添加你自己的项目的段落：</p>
<blockquote><p>[group myproject]</p>
<p>writable = myproject</p>
<p>members = user@client-hostname</p></blockquote>
<p>其中members的值必须与之前上传的id_rsa.pub文件中的标识一致，多个用户之间用空格分割。接下去开始添加新的项目：</p>
<blockquote><p>[client]$ cd ~/gitosis-admin</p>
<p>[client]$ git commit -a -m &#8220;Create a new project!&#8221;</p>
<p>[client]$ git push</p></blockquote>
<p>将项目目录加入Git的管理：</p>
<blockquote><p>[client]$ cd myproject</p>
<p>[client]$ git init</p>
<p>[client]$ touch README</p>
<p>[client]$ git remote add origin gitosis@server:myproject.git</p>
<p>[client]$ git add .</p>
<p>[client]$ git commit -a -m &#8220;initial import&#8221;</p>
<p>[client]$ git push origin master:refs/heads/master</p></blockquote>
<p>如果输出中没有什么错误信息，那么Git的配置已经完成了，以后可以通过以下命令checkout代码：</p>
<blockquote><p>[client]$ git clone gitosis@server:myproject.git</p></blockquote>
<p>好了，开始体验Git的强大吧。</p>
<div class="none"><div class="g-plusone" data-href="http://www.rui-yang.com/develop/ubuntu%e9%83%a8%e7%bd%b2git%e6%9c%8d%e5%8a%a1%e5%99%a8/" size="medium" count="true"></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.rui-yang.com/develop/ubuntu%e9%83%a8%e7%bd%b2git%e6%9c%8d%e5%8a%a1%e5%99%a8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>亲爱的老板：程序员的10分钟就是3个小时</title>
		<link>http://www.rui-yang.com/life/%e4%ba%b2%e7%88%b1%e7%9a%84%e8%80%81%e6%9d%bf%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%8410%e5%88%86%e9%92%9f%e5%b0%b1%e6%98%af3%e4%b8%aa%e5%b0%8f%e6%97%b6/</link>
		<comments>http://www.rui-yang.com/life/%e4%ba%b2%e7%88%b1%e7%9a%84%e8%80%81%e6%9d%bf%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%8410%e5%88%86%e9%92%9f%e5%b0%b1%e6%98%af3%e4%b8%aa%e5%b0%8f%e6%97%b6/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 05:00:42 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[mood]]></category>

		<guid isPermaLink="false">http://www.rui-yang.com/?p=488</guid>
		<description><![CDATA[导读：国外程序员艾德·韦斯曼（Ed Weissman ）从业32年。某天老板告诉他产品有个问题，10分钟可以修复问题，谁知结果一干就是3个小时。本文就是艾德记录下的过程。 10:48 老板：嗨，艾德，苏在底特律说，“产品历史屏幕”上经常出现错误的发票号码（Invoice Part Number）。你能帮我们搞定这个问题么？ 艾德： 我现在在忙其他事。你到我的任务队列中提交一个ticket吧。 老板： 这事10分钟就够了。 艾德： 你确信么？ 老板： 嗯，确定。我一会开个网络会议。苏会演示给你看，然后你有空的时候再仔细看看。 艾德： 好的。 老板： 嗯。去你的 Outlook 中查收（会议）邀请吧。 11:05 收到 11:30 的网络会议的 Outlook 邀请，接受。 11:25 从我的IP电话呼叫了网络会议的800号码。拨了两次，都占线。从IP电话打我手机，同样是忙。哎，IP电话系统再次坏了。从我手机呼叫了网络会议的号码。我是第一个上线了，然后又挂掉了。在浏览器中点击链接进入了网络会议，还是第一个。 （艾德开始在浏览器的另一个选项卡中看 Hacker News。） 11:38 老板进入会议，问：苏在哪里？ 艾德： 我不知道。 老板： 你能看到我的屏幕么？ 艾德： 不能。 &#8230;<p class="read-more"><a href="http://www.rui-yang.com/life/%e4%ba%b2%e7%88%b1%e7%9a%84%e8%80%81%e6%9d%bf%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%8410%e5%88%86%e9%92%9f%e5%b0%b1%e6%98%af3%e4%b8%aa%e5%b0%8f%e6%97%b6/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>导读：国外<a title="程序员的本质" href="http://blog.jobbole.com/821/">程序员</a>艾德·韦斯曼（Ed Weissman ）从业32年。某天老板告诉他产品有个问题，10分钟可以修复问题，谁知结果一干就是3个小时。本文就是艾德记录下的过程。</p>
<p>10:48</p>
<p>老板：嗨，艾德，苏在底特律说，“产品历史屏幕”上经常出现错误的发票号码（Invoice Part Number）。你能帮我们搞定这个问题么？</p>
<p>艾德： 我现在在忙其他事。你到我的任务队列中提交一个ticket吧。</p>
<p>老板： 这事10分钟就够了。</p>
<p>艾德： 你确信么？</p>
<p>老板： 嗯，确定。我一会开个网络会议。苏会演示给你看，然后你有空的时候再仔细看看。</p>
<p>艾德： 好的。</p>
<p>老板： 嗯。去你的 Outlook 中查收（会议）邀请吧。</p>
<p>11:05</p>
<p>收到 11:30 的网络会议的 Outlook 邀请，接受。</p>
<p>11:25</p>
<p>从我的IP电话呼叫了网络会议的800号码。拨了两次，都占线。从IP电话打我手机，同样是忙。哎，IP电话系统再次坏了。从我手机呼叫了网络会议的号码。我是第一个上线了，然后又挂掉了。在浏览器中点击链接进入了网络会议，还是第一个。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>11:38</p>
<p>老板进入会议，问：苏在哪里？</p>
<p>艾德： 我不知道。</p>
<p>老板： 你能看到我的屏幕么？</p>
<p>艾德： 不能。</p>
<p>老板： 哦，等一下。我来做主（Let me be the host）。现在能看到了么？</p>
<p>艾德： ?嗯，可以了。但我想苏是不是去展示问题了。</p>
<p>老板： 对。我一会让她做主。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）<span id="more-488"></span></p>
<p><a href="http://www.linuxeden.com/upimg/allimg/120206/102052D17-0.jpg"><img title="time-management-clock" src="http://www.linuxeden.com/upimg/allimg/120206/102052D17-0.jpg" alt="time-management-clock" /></a></p>
<p>&nbsp;</p>
<p>11:47</p>
<p>苏进入会议：我们怎么在这里呢？</p>
<p>老板： 来这儿的目的就是让你给艾德展示“产品历史屏幕”出什么问题了。</p>
<p>苏： 展示“产品历史屏幕”的问题？</p>
<p>老板： 你知道的，你不说发票部分号码有时候会出错么？</p>
<p>苏：你指 mil-spec 订单？</p>
<p>老板： 我真的不知道。你不发送了ticket么？</p>
<p>苏： ticket 号码是多少呢？</p>
<p>老板：稍等，我查一下。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>11:53</p>
<p>老板： ticket 号码是 13827。记住了吧？</p>
<p>苏： 我怎么在我电脑上查看 ticket。</p>
<p>老板： 点击内网中的 IT 控制板。</p>
<p>苏： 我点不了啊。网络会议软件全屏了。</p>
<p>老板： ?那你在键盘敲击Alt+F4，然后去内网。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>11:57</p>
<p>苏： 搞定，ticket 号码是多少呢？</p>
<p>老板： 我应该写下来了。我再找找……</p>
<p>老板： 13827.</p>
<p>苏： 嗯，我看到了。 这个问题出现过几次。没人知道为什么。通常在 R27-83 这个号码时出问题了。</p>
<p>老板： 好，给艾德看吧。</p>
<p>苏： 我怎么回到网络会议界面呢？</p>
<p>老板： 你得重启了。刚才Alt+F4给关闭退出了。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>12:04</p>
<p>苏： 好了，网络会议软件打开了。你能看到我么？</p>
<p>老板：不能，你得点击“Host”按钮。</p>
<p>苏：在哪里？</p>
<p>老板： 在右上角的小方框中。</p>
<p>苏：是“History”框么？</p>
<p>老板： 不是，是“Attendees”框。</p>
<p>苏： 好的。现在你能看到我了么？</p>
<p>老板：不能。再试。</p>
<p>苏： 我试了。好像你得退出主模式吧。</p>
<p>老板： 哦，我忘了。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>12:14</p>
<p>老板： 我退出主模式了。你再试试。</p>
<p>苏： ?好的。现在你能看到我的屏幕了吧？</p>
<p>老板： 可以看到。</p>
<p>艾德： 我也可以。</p>
<p>苏： 好的，如果我进入主菜单，点击“Operations”，然后点击“Sales”，再点击“History”，我到了“Sales History”菜单。看到了吧？</p>
<p>老板：嗯。</p>
<p>艾德： 看到了。</p>
<p>苏： ?然后我按“Part”点击“Sales History Display”。输入”R27-93″，主屏幕弹出来了。然后我点击“Invoices”，我摁 F5，再 F3，再 F7，发票号码（Invoice Part Number）就变成了”GT548″。不应该这样的。</p>
<p>艾德：好，让我查看一下，再答复你。</p>
<p>老板： OK，再见。</p>
<p>苏： OK，拜拜。</p>
<p>艾德现在陷入了主模式，因为其他两位退出了。他不能退出。窗口锁定了。他重启电脑了。</p>
<p>12:38</p>
<p>艾德登录，进入开发系统。进入主屏幕，点击“Operations”，然后点击“Sales”，再点击“History”，到了“Sales History”菜单。然后按“Part”点击“Sales History Display”。他输入”R27-93″，主屏幕弹出。他然后点击“Invoices”，摁 F5，再 F3，再 F7，发票号码（Invoice Part Number）还是”R27-93″，本该就如此。在开发系统中工作正常。</p>
<p>12:46</p>
<p>艾德通过他的秘密后门登录产品。进入主屏幕，点击“Operations”，然后点击“Sales”，再点击“History”，到了“Sales History”菜单。然后按“Part”点击“Sales History Display”。他输入”R27-93″，主屏幕弹出。他然后点击“Invoices”，摁 F5，再 F3，再 F7，发票号码（Invoice Part Number）变成了”GT548″。苏没说错。</p>
<p>12:57</p>
<p>艾德查看了版本控制系统。这个问题弗瑞德（Fred）在11月11日已经 check out。艾德运行了一个 diff，看到弗瑞德已经发现他更改后的第425行的代码有问题，并修正了。</p>
<p>1:03</p>
<p>艾德呼叫弗瑞德，看他在忙啥。Voice mail。</p>
<p>1:07</p>
<p>艾德给弗瑞德发电子邮件，解释问题。</p>
<p>艾德继续看 Hacker News。</p>
<p>1:17</p>
<p>弗瑞德回拨艾德。艾德告诉他去看邮件。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>1:28</p>
<p>弗瑞德回拨：OK，我想起来了。程序出错，是因为一个离岸外包的程序员改变了“Operations”目录下所有程序的header。他在重新编译前不小心删了一行代码。不知怎么地，还通过了QA，现在苏发现了这个Bug。</p>
<p>艾德： 那么你现在能修复么？</p>
<p>艾德：不行吧。这个模块中还有12个其他的改动。我先看看，再打给你。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>1:36</p>
<p>弗瑞德回拨：在 XL500 模块通过之前，我是改不了这些变动。模块被冻结（on hol），必须得让QA先批准。所以我们只能等了。</p>
<p>艾德：好的，谢谢弗瑞德。我一会就给老板发邮件告诉他。</p>
<p>艾德给老板发了解释邮件。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>1:48</p>
<p>老板： 好，这个看起来是个问题。貌似我不得不升级指导委员会了（Steering Committee）。艾德，很高兴你能分出10分钟来。谢谢。</p>
<p>（艾德开始在浏览器的另一个选项卡中看 Hacker News。）</p>
<p>英文原文：<a href="http://edweissman.com/dear-boss-for-a-programmer-10-minutes-3-hours" rel="nofollow" target="_blank">Ed Weissman</a>      编译：<a title="伯乐" href="http://www.jobbole.com/">伯乐</a>在线 – <a href="http://blog.jobbole.com/12790/" target="_blank">黄利民</a></p>
<div class="none"><div class="g-plusone" data-href="http://www.rui-yang.com/life/%e4%ba%b2%e7%88%b1%e7%9a%84%e8%80%81%e6%9d%bf%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%8410%e5%88%86%e9%92%9f%e5%b0%b1%e6%98%af3%e4%b8%aa%e5%b0%8f%e6%97%b6/" size="medium" count="true"></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.rui-yang.com/life/%e4%ba%b2%e7%88%b1%e7%9a%84%e8%80%81%e6%9d%bf%ef%bc%9a%e7%a8%8b%e5%ba%8f%e5%91%98%e7%9a%8410%e5%88%86%e9%92%9f%e5%b0%b1%e6%98%af3%e4%b8%aa%e5%b0%8f%e6%97%b6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>langdetect, a simple java language identifier library</title>
		<link>http://www.rui-yang.com/develop/langdetect-a-simple-java-language-identifier-library/</link>
		<comments>http://www.rui-yang.com/develop/langdetect-a-simple-java-language-identifier-library/#comments</comments>
		<pubDate>Thu, 02 Feb 2012 06:30:45 +0000</pubDate>
		<dc:creator>Rui</dc:creator>
				<category><![CDATA[Develop]]></category>

		<guid isPermaLink="false">http://www.rui-yang.com/?p=485</guid>
		<description><![CDATA[When I use Apache Nutch to crawl the Chinese website, there&#8217;s a problem make me unhappy, the language-identifier plugin which nutch provide can&#8217;t detect Chinese characters, I have to find a new method to identify the language that the website &#8230;<p class="read-more"><a href="http://www.rui-yang.com/develop/langdetect-a-simple-java-language-identifier-library/">Read more &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>When I use Apache Nutch to crawl the Chinese website, there&#8217;s a problem make me unhappy, the language-identifier plugin which nutch provide can&#8217;t detect Chinese characters, I have to find a new method to identify the language that the website uses. Finally I went about solving this problem with &#8216;langdetect&#8217;, an open source java language detection library. The project is deployed on <a href="http://code.google.com/p/language-detection/">http://code.google.com/p/language-detection/</a>.</p>
<p>LangDetect support 53 languages, awesome! We can check the support language list from here: <a href="http://code.google.com/p/language-detection/wiki/LanguageList">http://code.google.com/p/language-detection/wiki/LanguageList</a>.</p>
<p>And we can use it as simple as the sample show in it&#8217;s project homepage.</p>
<pre>import java.util.ArrayList;
import com.cybozu.labs.langdetect.Detector;
import com.cybozu.labs.langdetect.DetectorFactory;
import com.cybozu.labs.langdetect.Language;

class LangDetectSample {
    public void init(String profileDirectory) throws LangDetectException {
        DetectorFactory.loadProfile(profileDirectory);
    }
    public String detect(String text) throws LangDetectException {
        Detector detector = DetectorFactory.create();
        detector.append(text);
        return detector.detect();
    }
    public ArrayList&lt;Language&gt; detectLangs(String text) throws LangDetectException {
        Detector detector = DetectorFactory.create();
        detector.append(text);
        return detector.getProbabilities();
    }
}</pre>
<p>When I test it, I found I need to add jsonic-1.2.x.jar into the project&#8217;s build path. Which is not contain in the package when I downloaded langdetect. So I have to download jsonic by myself and add it to build path of the project. After all, everything goes on the track now. Enjoy it!</p>
<p>By the way, langdetect provide a build of nutch&#8217;s plugin, we can integerate it with our cluster conviniently.</p>
<div class="none"><div class="g-plusone" data-href="http://www.rui-yang.com/develop/langdetect-a-simple-java-language-identifier-library/" size="medium" count="true"></div></div>]]></content:encoded>
			<wfw:commentRss>http://www.rui-yang.com/develop/langdetect-a-simple-java-language-identifier-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

