<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
 <channel>
  <title>Hozaka.Guo</title>
  <link>http://hozaka.blogbus.com</link>
  <description><![CDATA[]]></description>
  <generator> by blogbus.com </generator>
  <lastBuildDate>Thu, 01 Jan 1970 07:00:00 +0700</lastBuildDate>
  <image>
									<url>http://public.blogbus.com/profile/4/0/4/1314404/avatar_1314404_96.jpg</url>
									<title>Hozaka.Guo</title>
									<link>http://hozaka.blogbus.com</link>
								</image>  <item>
   <title>Console2 错位问题</title>
   <description><![CDATA[<p>在 Windows 平台上 Command Prompt 之烂为很多开发人员所诟病，任何一方面都不能和 Linux 或者 Mac OS 的 Terminal 相比。一个朋友推荐我使用 Console2 ，用过以后爱不释手，唯一的问题就是在显示中文的时候会产生错位。</p><p>在 Google 和 SourceForge 上查了很多资料，也稍微了解了一下 Console2 的工作方式，解决这个问题并不是很复杂。</p><p>产生这个 bug 的原因是因为 Console2 只是作为一个 command 窗口的代理，负责讲输入输出流在两个窗口之间传递，而输出部分则是读屏的方式，因此收到 Command 窗口字体设置的影响，了解这一点以后，最简单的方式就是修改掉 Command Prompt 的字体设置，用一个 TypeTrue 字体替代默认的光栅字体。</p><p><a href="http://sourceforge.net/projects/console" target="_blank">Get Console2 on SourceForge.net</a> </p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/7214410.html">关于开发和国际化的分离</a> 2007-07-30</div><div><a href="/logs/6031901.html">Safari 的 JavaScript 解析引擎</a> 2007-06-20</div><div><a href="/logs/5690564.html">rails 与 i18n</a> 2007-06-06</div><div><a href="/logs/4413063.html">Rails 中的 RJS 模板</a> 2007-01-30</div><div><a href="/logs/4340814.html">inu.cc 开发日志</a> 2007-01-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F16997886.html&title=Console2+%E9%94%99%E4%BD%8D%E9%97%AE%E9%A2%98">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/16997886.html</link>
   <author>Hozaka</author>
   <pubDate>Fri, 14 Mar 2008 16:29:43 +0800</pubDate>
  </item>
  <item>
   <title>ActiveRecord 中的 include 关系</title>
   <description><![CDATA[<p>对 include 很多开发者避而不谈，也有很多人趋之若骛。其实归根结底只是生成了不同的 SQL 语句。至于造成的影响，见人见智，当然和项目的需求有很大的关系。</p><p>但是有一点，include 既不是天使也不是恶魔。</p><p>合理的使用 include 可以避免 N+1 的问题，但是 Rails 生成的 SQL 确实不怎么好看&hellip;&hellip;而且今天还发现了一个问题：</p><p>A 中声明了一个关系
</p><pre>has_many :items, :order =&gt; 'some_time_field DESC'
</pre>
<p>但是在执行 A.find(123, :include =&gt; :items) 的时候，可以发现对象的 items 集合并没有按照预想的顺序排列，查看 log 中的 SQL 记录，发现 order 子句并不在里面。</p><p>暂且归结为 BUG 或者未完成状态吧&hellip;&hellip;</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/5939625.html">Rails 中的扩展</a> 2007-06-16</div><div><a href="/logs/4864143.html">关于 ruby / rails 的线程模型</a> 2007-03-26</div><div><a href="/logs/4636163.html">inu.cc 开发日志</a> 2007-02-28</div><div><a href="/logs/4480792.html">inu.cc 开发日志</a> 2007-02-07</div><div><a href="/logs/4351504.html">rails 的中文编码</a> 2007-01-22</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F10070835.html&title=ActiveRecord+%E4%B8%AD%E7%9A%84+include+%E5%85%B3%E7%B3%BB">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/10070835.html</link>
   <author>Hozaka</author>
   <pubDate>Fri, 28 Sep 2007 16:47:26 +0800</pubDate>
  </item>
  <item>
   <title>关于开发和国际化的分离</title>
   <description><![CDATA[<p>当前的项目有一个需求：网站有多个语言的版本，但是翻译工作不是由公司总部的人完成，翻译工作人员分布在世界各地；另一个情况就是项目经常更新，换句话说 catelog 会经常更新。面对这样的情况，老板要求不使用 poEdit 客户端，而使用 web 方式来访问、修改和更新。</p><p>因为项目是基于&nbsp; Ruby on Rails 开发的，I18N 的实现使用&nbsp; GetText&nbsp; ，面对这样的要求，自然反应就是需要一个 po parser ，放在 prealpha 服务器上，所有的翻译工作人员通过这个页面来管理自己所负责的 catelog。</p><p>google 了好多内容，都没有发现一个现成的 po file parser。想从 gettext 的源代码里面找到 parser 代码，却发现&nbsp; gettext 这个 gem 里面基本都是 module_eval 的实现方式，相当的丑陋，所以放弃了。</p><p>最终，还是去找到了 gettext 这个项目的规范文档，按照规范自己写了一个简单的 parser，还不支持 comment，暂且凑合吧，等以后有空余时间了再做扩展。</p><p>&nbsp;</p><p>P.S. 计划赶不上变化，所以在项目的开发过程当中要做好充分的心理准备。这是一个经验的积累，不是一朝一夕就能达到的。当面对一个需求，能够预测到以后可能会做哪些扩展，怎么设计结构最为灵活，这是一个架构师必须具备的素质。 </p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="/logs/6031901.html">Safari 的 JavaScript 解析引擎</a> 2007-06-20</div><div><a href="/logs/5690564.html">rails 与 i18n</a> 2007-06-06</div><div><a href="/logs/5036435.html">关于最近</a> 2007-04-14</div><div><a href="/logs/4480792.html">inu.cc 开发日志</a> 2007-02-07</div><div><a href="/logs/4413063.html">Rails 中的 RJS 模板</a> 2007-01-30</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F7214410.html&title=%E5%85%B3%E4%BA%8E%E5%BC%80%E5%8F%91%E5%92%8C%E5%9B%BD%E9%99%85%E5%8C%96%E7%9A%84%E5%88%86%E7%A6%BB">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/7214410.html</link>
   <author>Hozaka</author>
   <pubDate>Mon, 30 Jul 2007 14:47:06 +0800</pubDate>
  </item>
  <item>
   <title>Safari 的 JavaScript 解析引擎</title>
   <description><![CDATA[<p>昨天在对旧项目做修补的时候，重写了一个通用的 Validator 类，本来打算以后在其他项目中也可以使用。写完以后在浏览器下测试，Internet Explorer，Firefox 下都表现得非常好，然而在 Safari 下，无论如何都没有反应。</p><p>由于当时是作为表单验证的，绑定在 onsubmit 事件中， onsubmit=&quot;return checkForm();&quot;。第一反应就是：难道 Safari 不支持这种写法？来来回回折腾了半天，终于发现问题了。在类的内部，一个方法定义中，变量没有加 var 声明。因为这个原因，导致 JavaScript 解析到这里出错，类无法加载。偏偏我的 Safari 没有调试工具，JavaScript 错误也没有提示，郁闷啊。 </p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://hozaka.blogbus.com/logs/4486868.html">学习笔记</a> 2007-02-08</div><div><a href="http://hozaka.blogbus.com/logs/4480792.html">inu.cc 开发日志</a> 2007-02-07</div><div><a href="/logs/16997886.html">Console2 错位问题</a> 2008-03-14</div><div><a href="/logs/5036435.html">关于最近</a> 2007-04-14</div><div><a href="/logs/4864143.html">关于 ruby / rails 的线程模型</a> 2007-03-26</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F6031901.html&title=Safari+%E7%9A%84+JavaScript+%E8%A7%A3%E6%9E%90%E5%BC%95%E6%93%8E">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/6031901.html</link>
   <author>Hozaka</author>
   <pubDate>Wed, 20 Jun 2007 17:33:53 +0800</pubDate>
  </item>
  <item>
   <title>Rails 中的扩展</title>
   <description><![CDATA[<p>最近公司一个项目，需要将新网站接入美国总部的 ERP 系统，同时对流程做一部分的扩展。在这之中碰到的最大的问题，就是没有旧系统的设计并不符合 ERP 的需求，而因为要保证整个过程的无缝链接以及敏感数据的安全，对于数据库的改动限制非常大。</p><p>同事 Daniel 负责这次的更新，我们对这个问题也讨论过好多次，在 Rails 如何实现这样的功能呢。最后选出了一种不破坏旧系统的结构，也不需要数据导入的方式。只在需要进行 ERP 扩展的对象上增加相应的字段，然后使用 Order 对象的子类 ERPOrder 进行封装，将这个类传递到 ERP 系统代替原来的 order 对象。这样下来，几乎整个 ERP 的交互过程不需要做太大的改动，流程控制也变得简单且清晰，状态判断以及异常处理也变得非常合理，代码精简不少。</p><p>对 ERPOrder 类的编码中，深刻体会到 Ruby 语言的动态性带来的便利。为了避免这次的情况，能为以后更新版本的系统提供兼容，我们将很多业务逻辑抽取出来，作为 module mix in 到 erp 对象中。以后即使系统再次升级，也不用担心是否会影响到 order 对象本身的业务逻辑以及数据验证。</p><p>不过对于 Ruby 中的&nbsp; module，mixin，include 机制还不是了解得很透彻，以后要多学习了</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://hozaka.blogbus.com/logs/4864143.html">关于 ruby / rails 的线程模型</a> 2007-03-26</div><div><a href="http://hozaka.blogbus.com/logs/5690564.html">rails 与 i18n</a> 2007-06-06</div><div><a href="http://hozaka.blogbus.com/logs/5405081.html">易游，OpenID 与 Ruby on Rails</a> 2007-05-17</div><div><a href="http://hozaka.blogbus.com/logs/4636163.html">inu.cc 开发日志</a> 2007-02-28</div><div><a href="http://hozaka.blogbus.com/logs/4413063.html">Rails 中的 RJS 模板</a> 2007-01-30</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F5939625.html&title=Rails+%E4%B8%AD%E7%9A%84%E6%89%A9%E5%B1%95">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/5939625.html</link>
   <author>Hozaka</author>
   <pubDate>Sat, 16 Jun 2007 19:43:32 +0800</pubDate>
  </item>
  <item>
   <title>rails 与 i18n</title>
   <description><![CDATA[<p>最近因为有做多语言版本的需要，多了解了一些 rails 与 i18n 的内容。</p><p>rails 项目要实现多语言版本，也就是我们常说的 i18n，有好多种实现方式。不过最普遍使用的，就是 gettext 。虽然网上有许多利用 gettext 实现国际化的例子与示例代码，但是照抄那些代码并不能给自己带来实质性的提高，还是需要总结一下的。</p><p>gettext 的工作原理，是将所有需要国际化的字符串，以类似于 Java 的资源的形式引用，例如 _(&#39;COMPANY_NAME&#39;) 实际上就是把 COMPANY_NAME 作为资源键，通过方法 _() 就能得到所需语言的字符串。</p><p>建立这个字符串资源需要使用到 poedit 。这是一个基于 GNU 的开源项目，与 gettext 配合可以达到非常好的效果。</p><p>具体的操作流程，随便搜索就有很多，大致的概括如下：</p><ul style="list-style-type: decimal"><li>将原项目中需要国际化的内容，替换成对应的键</li><li>建立 po 目录，使用 rake updatepo 命令，将项目中所有的键取出，得到一个 .pot 文件<br /></li><li>在 po 目录中建立相应的语言目录，比如 en_US，zh_CN 等</li><li>使用 poedit，从 .pot 文件导入目录，保存得到一个 .po 文件</li><li>将 .po 文件复制到所有语言版本目录下，并使用 poedit 翻译成相应的语言</li><li>使用 rake makemo 命令，自动在 locale 下创建对应的语言版本以及 .mo 文件，翻译工作完成</li><li>在项目中，使用 set_locale 方法设置需要的语言版本</li></ul><p>整个过程并不复杂，需要注意一点就是各国语言文字的表现可能不尽相同，需要多考虑一下页面的布局与美观，不能因为字符问题就把原有的设计破坏掉</p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://hozaka.blogbus.com/logs/5939625.html">Rails 中的扩展</a> 2007-06-16</div><div><a href="http://hozaka.blogbus.com/logs/5405081.html">易游，OpenID 与 Ruby on Rails</a> 2007-05-17</div><div><a href="http://hozaka.blogbus.com/logs/4864143.html">关于 ruby / rails 的线程模型</a> 2007-03-26</div><div><a href="http://hozaka.blogbus.com/logs/4636163.html">inu.cc 开发日志</a> 2007-02-28</div><div><a href="http://hozaka.blogbus.com/logs/4413063.html">Rails 中的 RJS 模板</a> 2007-01-30</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F5690564.html&title=rails+%E4%B8%8E+i18n">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/5690564.html</link>
   <author>Hozaka</author>
   <pubDate>Wed, 06 Jun 2007 23:52:38 +0800</pubDate>
  </item>
  <item>
   <title>易游，OpenID 与 Ruby on Rails</title>
   <description><![CDATA[<p>5.1 去了北京一趟，易游的 OpenID 的开发暂停了一段时间，回来以后如期完成。虽然这次在北京有很多收获，都是对个人的，但是回来以后要处理的事情太多了，没有时间来 blog 记录下来。5 月 16 号，<a href="www.inu.cc/openid" target="_blank" title="易游 OpenID 通行证">易游 OpenID 通行证</a> 终于上线了。</p><p>OpenID 这东西，虽然 2 年以前就推出了，不过一直没有进行推广。最近不知道由于什么契机，进入了全世界的视线。简单的描述 OpenID 的作用，就是使用一个全球唯一的 URI 地址，比如 hozaka.inu.cc ，作为你在所有支持 OpenID站点的 ID，以此免去了记录不同的用户名、不同的密码，以及繁琐的注册操作。这其中的便利只有真正了解或者使用过以后才有体会。</p><p>在国外，AOL 与 Microsoft 先后宣布支持 OpenID 协议；而在国内，还没有一家成熟的 OpenID Provider 服务商，易游可以说是第一个吃螃蟹的商业站点。另一方面，国内 IT行业对于 OpenID 还处于一个非常初步的阶段，这一点在目前 OpenID 的讨论、资料、资源以及支持者的稀缺得以表现。到今天为止，我也只了解到 <a href="http://www.yupoo.com/account/openid" target="_blank">Yupoo.com</a> 和 <a href="http://www.loopo.cn/login" target="_blank">LooPo.cn</a> 两个站点对 OpenID 提供了良好的支持，也缺乏一个实体组织进行相关的推广。营造这样一个氛围需要每一个站长的努力与付出，这一点，我们易游带头了，也希望国内知名站点能为这样一种方便所有用户的技术提供支持与推广。</p><p>我负责了易游 OpenID 通行证的部署与开发，对我的提高是非常大的，甚至自己能清晰的看到，自己从开发易游第一版的不成熟，到现在代码的精简、高效，以及对于 Ruby，对于 ROR 的理解，对于架构的把握，都提高到了另一个层面。只是国内相关的资源实在寥寥无几，也没有办法就某个问题讨论与研究，估计 Ruby on Rails 在国内，还是需要一年左右的时间，才能发展到一个相对成熟的阶段，作为一个 Web开发者我很期待。</p><p>这次的 Blog 有点杂乱，随便写写了~~ </p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://hozaka.blogbus.com/logs/4636163.html">inu.cc 开发日志</a> 2007-02-28</div><div><a href="http://hozaka.blogbus.com/logs/4413063.html">Rails 中的 RJS 模板</a> 2007-01-30</div><div><a href="http://hozaka.blogbus.com/logs/5939625.html">Rails 中的扩展</a> 2007-06-16</div><div><a href="http://hozaka.blogbus.com/logs/5690564.html">rails 与 i18n</a> 2007-06-06</div><div><a href="http://hozaka.blogbus.com/logs/5036435.html">关于最近</a> 2007-04-14</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F5405081.html&title=%E6%98%93%E6%B8%B8%EF%BC%8COpenID+%E4%B8%8E+Ruby+on+Rails">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/5405081.html</link>
   <author>Hozaka</author>
   <pubDate>Thu, 17 May 2007 23:33:58 +0800</pubDate>
  </item>
  <item>
   <title>Ajax 优化，用户体验优化</title>
   <description><![CDATA[<p>最近一段时间一直都在看网站优化的内容，我关注的不外乎两点：速度的优化与用户体验的优化。</p><p><font size="4"><strong>JavaScript</strong></font></p><p>一直泡在 IBM 开发社区里，多多少少还是有点收获的，至少在以前的基础上有了不小的提高，其中 <a href="http://www.ibm.com/developerworks/cn/xml/x-ajaxxml3/index.html?S_TACT=105AGX52&amp;S_CMP=techcsdn" target="_blank">Ajax 和 XML: 五种 Ajax 反模式</a> 直接了当指出了五种最容易陷入的 ajax 陷阱。虽然说这几点内容都是很简单的，但是往往实际开发中就是这类失误容易被忽略，为整站的速度埋下不稳定因素。</p><p>总结出来以下几点：</p><p>1、过多的，或者不合理的使用定时器（window.setInterval），将导致客户端资源枯竭，同时大量浪费服务器资源；</p><p>2、对于用户行为触发的行为，应当考虑在适当的时间点调用相应的处理机，而不是一触发就运行。最普遍的例子就是 tab 选项卡。用鼠标点击代替鼠标滑过切换选项卡，能得到更好的用户体验，避免不同内容闪动的错觉。</p><p>3、准确判断服务器返回状态，对于不同的状态应当有不同的处理，当然，要包括错误处理、异常处理。相信没有一个用户会知道点了某个按钮没有反应到底是怎么回事，他们也不会注意到浏览器状态栏里 &quot;Script Error&quot; 的字样。</p><p>4、 使用适当的方式来描述数据。这一点在大量应用 Ajax 技术的站点尤为重要，返回 XML，HTML，JavaScript 片段，还是 JSON 数据，都需要根据实际需求来判断。这一点改进能够在很大程度上提升站点的响应速度，还能减少服务器资源的消耗。</p><p>5、应用正确的、合理的 html 结构。单纯的 JavaScript 应用对于一个网站来说只能是点缀，结合适当的 DOM 模型才能产生出多种多样的效果，给用户带来更好、更便捷的体验。合理的结构对搜索引擎来说更为友好。</p><p><strong><font size="4">User Experience&nbsp;</font></strong></p><p>用户体验永远是一个成功的站点关注的焦点，无论是设计师，还是开发者，都应该有深入的了解。我的切身体验告诉我，一个了解用户心理的开发人员，在架构的设计、细节的处理、功能的定位上，都能够和设计师很好的交流，从而得出一个非常好的解决方案。我个人认为，国内的很多站点就是因为缺乏这种意识，使得用户更喜欢国外的设计优秀的站点，尤其是对互联网了解比较深入的人群。</p><p>这当中，我最欣赏的是 <a href="http://blog.rexsong.com/" target="_blank">一叶千鸟的 blog</a> ，他对于细节的关注，每一点都一针见血。同样对这类问题研究了这么久，自己对这些细节都没有在意，惭愧啊~~~</p><p>用户体验的话题，我觉得很难总结，靠的是一种直觉和经验。多把自己放在用户的位置，再放在普通用户的位置，考虑这个问题，就比较容易得出一个好的解决方案来。 </p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://hozaka.blogbus.com/logs/4496446.html">学习笔记</a> 2007-02-09</div><div><a href="/logs/5939625.html">Rails 中的扩展</a> 2007-06-16</div><div><a href="/logs/5036435.html">关于最近</a> 2007-04-14</div><div><a href="/logs/4351504.html">rails 的中文编码</a> 2007-01-22</div><div><a href="/logs/4340814.html">inu.cc 开发日志</a> 2007-01-21</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F5124522.html&title=Ajax+%E4%BC%98%E5%8C%96%EF%BC%8C%E7%94%A8%E6%88%B7%E4%BD%93%E9%AA%8C%E4%BC%98%E5%8C%96">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/5124522.html</link>
   <author>Hozaka</author>
   <pubDate>Mon, 23 Apr 2007 17:11:56 +0800</pubDate>
  </item>
  <item>
   <title>关于最近</title>
   <description><![CDATA[<p>最近这段时间发生的事情太多了&hellip;&hellip;</p><p>首先是公司里，团队里的人陆陆续续在这个月里都外出培训，自然而然的，开发的重担压在了我一个人的身上，还要带领两个成员开始 rails 的开发，希望这两棵苗苗能在不久的以后帮我分担一些开发上的压力，呵呵~~</p><p>Ellison  和我谈了很多次，关于自己的定位问题。我想，经过这么长时间，我的目标越来越明确了，我希望做的，是一个管理者，而不是一个开发者。虽然，对代码的执着、对完美的追求，我喜欢写代码的感觉，头脑里各种思路激烈的碰撞。但是目前，对于团队，我想我成为一个规划者更加合适，程序的架构、工作的分配，用我的经验给团队带来更高的效率，这方面的能力我还欠缺，这样也是一个磨练自己的机会。</p><p>谈谈最近的开发进度吧，因为基于团队发展的考虑，取消了一个项目，时间一下子松了许多 ，我也有更多的时间可以关注最近一段时间以来这块领域的动向，可以看一些积攒了很久的技术文档。初步决定这一个月是由我们来讨论易游下一个版本的规划的，不过由于培训的关系，人一直都不齐，所以安排研究 OpenID 的协议了。</p><p>看了一个星期的文档，对 OpenID 有了一定的了解，同时因为 <a href="http://openidenabled.com" target="_blank" title="OpenID Enabled">OpenIDEnabled</a>  本身需要使用 OpenID 登录，也可以说切身体验到了 OpenID 的便利，确实很有前途啊，值得研究。</p><p>最后，这个月底，我要去北京，陪陪我的小猪~呵呵，就当是这段时间以来的休息，在那之前，还需要把我不在的那段时间的工作安排好，这也是一个规划者、管理者的责任。不能辜负 Ellison、Season、Gary 他们对我的期望，A-Za-A-Za Fighting! </p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://hozaka.blogbus.com/logs/5405081.html">易游，OpenID 与 Ruby on Rails</a> 2007-05-17</div><div><a href="/logs/5939625.html">Rails 中的扩展</a> 2007-06-16</div><div><a href="/logs/4486868.html">学习笔记</a> 2007-02-08</div><div><a href="/logs/4413063.html">Rails 中的 RJS 模板</a> 2007-01-30</div><div><a href="/logs/4304326.html">Web 开发插件推荐：Firebug</a> 2007-01-16</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F5036435.html&title=%E5%85%B3%E4%BA%8E%E6%9C%80%E8%BF%91">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/5036435.html</link>
   <author>Hozaka</author>
   <pubDate>Sat, 14 Apr 2007 17:02:14 +0800</pubDate>
  </item>
  <item>
   <title>关于 ruby / rails 的线程模型</title>
   <description><![CDATA[<p>inu 的项目中有一个导入功能，将用户从浏览器、del.icio.us 导出的收藏条目导入到 inu 收藏夹中。这个功能推出以来，用户的反响并不好，其主要原因在于：速度慢，考验用户的耐心。</p><p>速度慢的问题，根本原因在于 model 层需要做的工作非常多，也是目前不完善的架构以及比较特殊的需求导致的，可以说不能从根本上解决。每次导入一条记录，都需要更新好几个表，本身 ruby 在目前虚拟机下效率并不高，所以导入的速度并不理想。</p><p>那么，退而求其次，可以设置一个直观的进度条来告诉用户目前导入的进度，可以在很大程度上缓解用户的焦虑、不信任的心理。</p><p>解决方案是确定了，可是问题由此而来：ruby 是单线程的。</p><p>严格来说，应该是目前的虚拟机还不支持真正多线程的 ruby 应用。虽然 ruby 中确实有 Thread 类 ，但是查阅相关文档可以知道，这个类是一个伪 Thread，不同于真正的多线程。如果通过 join 将子线程挂到当前的主线程中（某个 mongrel 进程），那么该线程在结束之前会等待所有的子线程结束。通常情况下这种机制可以模拟出和其他语言相类似的线程模型。但是在 rails 中，有新的问题产生：无论是 FastCGI 还是 Mongrel ，都是一个请求独占一个进程，每次请求都会创建新的 Controller 实例，请求结束后该实例销毁。也就是说，在 Controller 内无论是不使用线程、或是把子线程挂到主线程上，在所有操作结束之前，当前进程一直处于 block 状态。</p><p>很可怕！</p><p>通常用 thread 是在不影响主线程的情况下处理耗时很多的操作。但是这种机制明显不能应付这种需求。一台服务器上 mongrel 数量有限，都被阻塞了，相当于服务器在这段时间内不能接收其他的请求。</p><p>那么是否让 thread 单独执行就可以了呢？答案也是否定的。在单独的线程中，Model 类将不再是 Model。其实意思是：线程中的 ActiveRecord 类不再具有标表间关联（目前我测试出来就这么多，可能还会失去更多东西），只是一个普通的实体类。对于这样的导入，无疑就是毁灭性的。</p><p>至此，可以确定，这个应用不可避免的要阻塞一个 mongrel 了。那么如果要反应当前导入的进度，就是要发起一个新的请求，查询导入状态。如果这个请求发送到 rails ，意味着用户的导入要占用 2 个 mongrel ，服务器不可能有这么多的资源。</p><p>最终我采取了一种折中的方案，导入时创建一个可访问的静态资源，查询进度的功能由这个静态资源来完成，而 web 应用对于静态资源的访问则由 apache 来完成。</p><p>至此，问题算是解决了，虽然算不上完美。期望 ruby 的虚拟机能够尽快支持 multi-thread 吧！ </p><!--sp--><div class="relpost"><br/><h3>随机文章：</h3><div><a href="http://hozaka.blogbus.com/logs/5939625.html">Rails 中的扩展</a> 2007-06-16</div><div><a href="http://hozaka.blogbus.com/logs/5690564.html">rails 与 i18n</a> 2007-06-06</div><div><a href="http://hozaka.blogbus.com/logs/5405081.html">易游，OpenID 与 Ruby on Rails</a> 2007-05-17</div><div><a href="http://hozaka.blogbus.com/logs/4636163.html">inu.cc 开发日志</a> 2007-02-28</div><div><a href="http://hozaka.blogbus.com/logs/4413063.html">Rails 中的 RJS 模板</a> 2007-01-30</div></div><div class="addfav"><br />收藏到：<span class= "delicious"><a href="http://delicious.com/save?url=http%3A%2F%2Fhozaka.blogbus.com%2Flogs%2F4864143.html&title=%E5%85%B3%E4%BA%8E+ruby+%2F+rails+%E7%9A%84%E7%BA%BF%E7%A8%8B%E6%A8%A1%E5%9E%8B">Del.icio.us</a></span></div><br /><br /><div class="sysmsg"><b><a href="http://www.blogbus.com" target="_blank">博客大巴，你的个人传媒早班车</a></b></div><br /><br />]]></description>
   <link>http://hozaka.blogbus.com/logs/4864143.html</link>
   <author>Hozaka</author>
   <pubDate>Mon, 26 Mar 2007 16:37:59 +0800</pubDate>
  </item>
 </channel>
</rss>
