<?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>灰色的灵魂 &#187; Tech</title>
	<atom:link href="http://www.xuwenhao.com/tag/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.xuwenhao.com</link>
	<description>黑夜给了我黑色的眼睛, 而我注定要用它来寻找美金</description>
	<lastBuildDate>Thu, 11 Feb 2010 08:43:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Rails Magazine可以下载了</title>
		<link>http://www.xuwenhao.com/2009/03/15/rails-magazine-pd-now-available/</link>
		<comments>http://www.xuwenhao.com/2009/03/15/rails-magazine-pd-now-available/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 07:34:41 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=739</guid>
		<description><![CDATA[这里可以下载，呃，不知道2009会不会是Rails再次爆发的一年？]]></description>
			<content:encoded><![CDATA[<p><a href="http://railsmagazine.com/issues/1" target＝"_blank">这里</a>可以下载，呃，不知道2009会不会是Rails再次爆发的一年？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/03/15/rails-magazine-pd-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>你需要天使投资么？</title>
		<link>http://www.xuwenhao.com/2009/02/24/do-you-need-seed-funding/</link>
		<comments>http://www.xuwenhao.com/2009/02/24/do-you-need-seed-funding/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 09:58:25 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=731</guid>
		<description><![CDATA[广告一则: Trilogy Ventures 创业沙龙（互联网 手机应用方向） 时间：3月2日18:00-21:00 地点：上海交通大学闵行校区光彪楼 欢迎去玩。 Update：补充一下，Trilogy去年和前年各投了一家，今年估计机会会多一些，因为专门成立了Trilogy Ventures China专门投早期，此外，当天Speech胜者貌似有3000块奖金。]]></description>
			<content:encoded><![CDATA[<p>广告一则:</p>
<p><a href="http://www.trilogyventureschina.com/salon/" target="_blank">Trilogy Ventures 创业沙龙（互联网 手机应用方向）</a><br />
<img src="http://otho.douban.com/mpic/e66461.jpg" alt="Trilogy Ventures" /><br />
时间：3月2日18:00-21:00<br />
地点：上海交通大学闵行校区光彪楼</p>
<p>欢迎去玩。</p>
<p>Update：补充一下，Trilogy去年和前年各投了一家，今年估计机会会多一些，因为专门成立了Trilogy Ventures China专门投早期，此外，当天Speech胜者貌似有3000块奖金。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/02/24/do-you-need-seed-funding/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>重要的是持续改进</title>
		<link>http://www.xuwenhao.com/2009/02/22/continuous-improvement-is-the-importance/</link>
		<comments>http://www.xuwenhao.com/2009/02/22/continuous-improvement-is-the-importance/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 12:58:57 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=729</guid>
		<description><![CDATA[其实开发过程中重要的不是采用了什么样的工具，流程甚至理念，重要的是作为开发人员开发团队应该把精力花在是你的开发变得更好上。无论是你喜欢XP这样的理念，还是因为喜欢Joel而简单地使自己的流程符合Joel Test上，这些问题出现的本质是让你把精力放在把事情变好而不是只是在做做事情。每日构建、单步构建和自动测试是把你从每天“做做构建”、“做做测试”这样的事务中解脱出来；使用源代码管理是让你避免浪费时间去反反复复做做过的事情；不要加班是让你意识到你要做得是效率上得改进而不是重复劳动来做体力活。无论是不是已经有了这些流程，开发人员始终可以做的是每天把精力花在使今天比昨天好上面。只要你有意识去花时间进行改建，那么你之前没有用源代码管理你自然会发现花了很多时间做出来得东西被猫吃了；你没有为每个bug添加test case自然会发现同一个bug会反复出现；你没有用单步构建和每日构建自然会发现每次要发布得时候都会手忙脚乱要通宵加班。而有了这样的意识，即使你已经符合了Joel Test的12条你仍然可以发现你可以使用自动发布来让客户看到每天的开发结果；你可以使用创建VM Image来解决不同开发人员开发环境不同，可能有遗漏的依赖没有放入源代码管理中；你会发现Git比SVN更好地解决了开branch的开销和常常需要它记录一部分不完整代码的问题。 所以，重要的是始终在开发过程中保持持续改进的意识，工具和方法论反而是第二位的。]]></description>
			<content:encoded><![CDATA[<p>其实开发过程中重要的不是采用了什么样的工具，流程甚至理念，重要的是作为开发人员开发团队应该把精力花在是你的开发变得更好上。无论是你喜欢<a href="http://en.wikipedia.org/wiki/Extreme_programming" target="_blank">XP</a>这样的理念，还是因为喜欢Joel而简单地使自己的流程符合<a href="http://www.joelonsoftware.com/articles/fog0000000043.html" target="_blank">Joel Test</a>上，这些问题出现的本质是让你把精力放在把事情变好而不是只是在做做事情。每日构建、单步构建和自动测试是把你从每天“做做构建”、“做做测试”这样的事务中解脱出来；使用源代码管理是让你避免浪费时间去反反复复做做过的事情；不要加班是让你意识到你要做得是效率上得改进而不是重复劳动来做体力活。无论是不是已经有了这些流程，开发人员始终可以做的是每天把精力花在使今天比昨天好上面。只要你有意识去花时间进行改建，那么你之前没有用源代码管理你自然会发现花了很多时间做出来得东西被猫吃了；你没有为每个bug添加test case自然会发现同一个bug会反复出现；你没有用单步构建和每日构建自然会发现每次要发布得时候都会手忙脚乱要通宵加班。而有了这样的意识，即使你已经符合了Joel Test的12条你仍然可以发现你可以使用自动发布来让客户看到每天的开发结果；你可以使用创建VM Image来解决不同开发人员开发环境不同，可能有遗漏的依赖没有放入源代码管理中；你会发现Git比SVN更好地解决了开branch的开销和常常需要它记录一部分不完整代码的问题。</p>
<p>所以，重要的是始终在开发过程中保持持续改进的意识，工具和方法论反而是第二位的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/02/22/continuous-improvement-is-the-importance/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tool到用时方恨多</title>
		<link>http://www.xuwenhao.com/2009/02/22/too-many-tools-to-learn/</link>
		<comments>http://www.xuwenhao.com/2009/02/22/too-many-tools-to-learn/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 11:17:23 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=718</guid>
		<description><![CDATA[越来越发现，这个时代实在是工具太多了，多到有点让人讨厌了。随便干点什么，都要会一堆东西；学点新东西，发现要能用要再学一堆新东西。最近用ROR做点东西，发现真要做点Production Quality的东西，至少要用一堆工具，比如New Relic，比如Capistrano，然后如果想要用得爽还有一堆RSpec等等的东西可以用，更不用说HTML/CSS/Javascript/MySQL/Git这些基本的工具。如果在Java世界的话，用的东西更是多到让人厌恶。比起要用的工具，人生时间实在是短到让人绝望，不过没办法，只能慢慢玩了……]]></description>
			<content:encoded><![CDATA[<p>越来越发现，这个时代实在是工具太多了，多到有点让人讨厌了。随便干点什么，都要会一堆东西；学点新东西，发现要能用要再学一堆新东西。最近用ROR做点东西，发现真要做点Production Quality的东西，至少要用一堆工具，比如New Relic，比如Capistrano，然后如果想要用得爽还有一堆RSpec等等的东西可以用，更不用说HTML/CSS/Javascript/MySQL/Git这些基本的工具。如果在Java世界的话，用的东西更是多到让人厌恶。比起要用的工具，人生时间实在是短到让人绝望，不过没办法，只能慢慢玩了……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/02/22/too-many-tools-to-learn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>配置Rails应用</title>
		<link>http://www.xuwenhao.com/2009/02/13/configuring-rails-applications/</link>
		<comments>http://www.xuwenhao.com/2009/02/13/configuring-rails-applications/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 15:54:11 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=696</guid>
		<description><![CDATA[译者注：本文原文来自Rails Guides，版本为January 3, 2009: First reasonably complete draft by Mike Gunderloy。本文根据原文，按照Creative Commons Attribution-Share Alike 3.0授权。 本指南涵盖了可用于Rails应用中的配置和初始化特性。通过本指南，你可以 1.调整Rails应用的行为 2.添加在应用启动阶段运行的代码 本指南的第一版是基于Rails 2.3的源代码撰写的。虽然不保证向前兼容，但是本指南涵盖的信息可广泛地用于Rails 2.2。 1. 初始化代码的位置 Rails（至少）提供了五个好位置来放置初始化代码： 预初始化器（preinitializers） environment.rb 针对特定环境的配置文件 初始化器(load_application_initializers) 后初始化器（After-Initializers） 2. 使用预初始化器 Rails允许你使用一个预初始化器，在框架自身被装载前来运行代码。如果你把代码存放在RAILS_ROOT/config/preinitializer.rb中，这些代码会在任何框架组件（Active Record, Action Pack, and so on）之前第一个被装载。如果你想要改变任何初始化过程中某些类的行为，你可以在这里（preinitializers文件）做。 3. 配置Rails组件 基本上来说，配置Rails所做的工作就是配置Rails自身以及配置Rails的各个组件。environments.rb文件以及针对特定环境的配置文件（比如config/environments/production.rb）允许你设定各个组件的设置。例如，默认的Rails2.3中的environment.rb文件中包含这样一条配置： config.time_zone='UTC' 这是一条Rails自身的设置。如果你想要设定Rails的各个组件的设置，你也可以通过同样的这个config对象来做： config.active_record.colorize_logging = false Rails会使用这条设置来配置Active Record 3.1 配置Active Record ActiveRecord::Base包含许多种配置选项： logger接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger，该logger会传递给所有的新创建的数据库连接。你可以在ActiveRecord的model类或者其实例上调用logger来获取该logger。把该值设为nil会经用日志功能。 primary_key_prefix_type用于设置主键列的命名。Rails默认主键列的名字是id（该配置无需设定），但是你可以有两个别的选择： [...]]]></description>
			<content:encoded><![CDATA[<p>译者注：本文<a href="http://guides.rails.info/configuring.html" target="_blank">原文</a>来自<a href="http://guides.rails.info" target="_blank">Rails Guides</a>，版本为January 3, 2009: First reasonably complete draft by Mike Gunderloy。本文根据原文，按照<a href="http://creativecommons.org/licenses/by-sa/3.0" target="_blank">Creative Commons Attribution-Share Alike 3.0</a>授权。</p>
<p>本指南涵盖了可用于Rails应用中的配置和初始化特性。通过本指南，你可以<br />
1.调整Rails应用的行为<br />
2.添加在应用启动阶段运行的代码</p>
<p>本指南的第一版是基于Rails 2.3的源代码撰写的。虽然不保证向前兼容，但是本指南涵盖的信息可广泛地用于Rails 2.2。</p>
<h2>1. 初始化代码的位置</h2>
<p>Rails（至少）提供了五个好位置来放置初始化代码：</p>
<ul>
<li>预初始化器（preinitializers）</li>
<li>environment.rb</li>
<li>针对特定环境的配置文件</li>
<li>初始化器(load_application_initializers)</li>
<li>后初始化器（After-Initializers）</li>
</ul>
<h2>2. 使用预初始化器</h2>
<p>Rails允许你使用一个预初始化器，在框架自身被装载前来运行代码。如果你把代码存放在<code>RAILS_ROOT/config/preinitializer.rb</code>中，这些代码会在任何框架组件（Active Record, Action Pack, and so on）之前第一个被装载。如果你想要改变任何初始化过程中某些类的行为，你可以在这里（preinitializers文件）做。</p>
<h2>3. 配置Rails组件</h2>
<p>基本上来说，配置Rails所做的工作就是配置Rails自身以及配置Rails的各个组件。<code>environments.rb</code>文件以及针对特定环境的配置文件（比如<code>config/environments/production.rb</code>）允许你设定各个组件的设置。例如，默认的Rails2.3中的<code>environment.rb</code>文件中包含这样一条配置：</p>
<pre name="code" class="ruby">
config.time_zone='UTC'
</pre>
<p>这是一条Rails自身的设置。如果你想要设定Rails的各个组件的设置，你也可以通过同样的这个<code>config</code>对象来做：</p>
<pre name="code" class="ruby">
config.active_record.colorize_logging = false
</pre>
<p>Rails会使用这条设置来配置Active Record</p>
<h3>3.1 配置Active Record</h3>
<p><code>ActiveRecord::Base</code>包含许多种配置选项：</p>
<ul>
<li><code>logger</code>接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger，该logger会传递给所有的新创建的数据库连接。你可以在ActiveRecord的model类或者其实例上调用<code>logger</code>来获取该logger。把该值设为nil会经用日志功能。</li>
<li><code>primary_key_prefix_type</code>用于设置主键列的命名。Rails默认主键列的名字是<code>id</code>（该配置无需设定），但是你可以有两个别的选择：
<ul>
<li><code>:table_name</code>会另Customer类的主键为<code>customerid</code></li>
<li><code>:table_name_with_underscore</code>会另Customer类的主键为<code>customer_id</code></li>
</ul>
</li>
<li><code>table_name_prefix</code>使你可以在表名的前面设置添加一个全局的字符串。如果你将该值设为<code>northwest_</code>，那么Customer类会映射到<code>northwest_customers</code>表。默认该值为一个空字符串</li>
<li><code>table_name_prefix</code>使你可以在表明的后面设置添加一个全局的字符串。如果你将该值设为<code>_northwest</code>，那么Customer类会映射到<code>customers_northwest</code>表。默认该值为一个空字符串。</li>
<li><code>pluralize_table_names</code>规定了Rails使用单词的单数还是复数来命名数据库中的表名。如果该值被设置为<code>true</code>（默认值），那么Customer类会使用<code>customers</code>表，如果该值被设置为<code>false</code>，那么Customer类会使用<code>customer</code>表</li>
<li><code>colorize_logging</code>（默认为true）规定了在ActiveRecord的日志信息中是否使用彩色的ANSI代码。</li>
<li><code>default_timezone</code>决定了在从数据库中读取日期和时间时，是使用<code>Time.local</code>（如果设置为<code>:local</code>）还是<code>Time.utc</code>（如果设置为<code>:utc</code>）。默认值为<code>:local</code></li>
<li><code>schema_format</code>控制了从数据库中导出数据库模式到文件中所用的格式。选项<code>:ruby</code>（默认值）会使用一个数据库无关的migrations，选项<code>:sql</code>会使用（可能依赖于特定数据库的）SQL指令。</li>
<li><code>timestamped_migrations</code>控制了migrations的数字是使用连续的整数还是时间戳。默认值为<code>true<code>，代表使用时间戳，这在优多人共同开发同一个应用的时候是一个更好的选择。 </li>
<li><code>lock_optimistically</code>控制了ActiveRecord是否使用乐观锁。默认该值为<code>true</code></li>
<p>MySQL适配器增加了一个额外的配置选项：</p>
<li><code>ActiveRecord::ConnectionAdapters::MysqlAdapter.emulate_booleans</code>控制了ActiveRecord是否认为MySQL数据库中所有的<code>tinyint(1)</code>列为布尔值。默认该值为<code>true</code></li>
<p>数据库模式的导出器（schema dumper）增加了一个额外的配置选项：</p>
<li><code>ActiveRecord::SchemaDumper.ignore_table</code>接受一个表名的数组，该数组中的表不应包含在任何生成的数据库模式文件中。该设置在<code>ActiveRecord::Base.schema_format == :ruby<code>时才会起作用。</li>
</ul>
<h3>3.2 配置Action Controller</h3>
<p><code>ActionController::Base</code>包含了一些配置设定：</p>
<ul>
<li><code>asset_host</code>在所有<code>AssetHelper</code>中的辅助方法所生成URL的前面添加一个字符串。这是设计用来将所有的javascript，CSS以及图片文件转移到一个不同的主机（asset host）上。</li>
<li><code>consider_all_requests_local</code>通常在开发环境中被设为<code>true</code>而在生产环境中被设为<code>false</code>；如果它被设为<code>true</code>，则任何错误都会导致详细的调试信息会被导出到HTTP response中。如果你想做更细致的控制，将其设为<code>false</code>然后实现<code>local_request?</code>方法来决定哪些requests会在出错的情况下提供调试信息。</li>
<li><code>allow_concurrency</code>为了允许同步（线程安全的）的action处理，该值应当被设为<code>true</code>。默认情况下该值为<code>false</code>。你通常不应当直接修改这个配置，因为你需要一系列的其他调整使得线程安全模式可以正确地工作做。你可以在<code>production.rb</code>文件中简单地调用<code>config.threadsafe!</code>，它会为你做所有需要的调整。</li>
<p><br/></p>
<div style="background: ORANGE;">Threadsafe操作和开发模式下的一些功能不兼容。特别是自动的依赖装载和类重装载会在你调用config.threadsafe!之后被自动禁用</div>
<p><br/></p>
<li><code>param_parsers</code>让你可以设置一个handlers的数组，用于提取HTTP requests中的信息并将它放到<code>params</code>哈希中。默认情况下，multipart forms，URL-encoded forms，XML以及JSON的parsers是被激活的。</li>
<li><code>default_charset<code>设定了所有render默认使用的字符集。默认值为"utf-8"</li>
<li><code>logger</code>接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger，可以被用来在Action Controller中记录日志信息。把该值设为nil会禁用日志功能。</li>
<li><code>resource_action_separator</code>用来设置RESTful url中resource和action之间的分隔符。默认为"/"。</li>
<li><code>resource_path_names</code>用来设置一个RESTful action默认的名字的哈希。默认情况下，new action被命名为<code>new</code>而edit action被命名为<code>edit</code>。</li>
<li><code>request_forgery_protection_token</code>用来设置RequestForgery的参数名。调用<code>protect_from_forgery</code>会将它设为<code>:authenticity_token</code></li>
<li><code>optimise_named_routes</code>打开了一些生成路径表（routes table）的优化。它默认被设为<code>true</code></li>
<li><code>use_accept_header</code>用于设置确定response格式的规则。如果该值设为<code>true</code>（默认值），则<code>respond_to</code>方法和<code>Request#format</code>方法会根据Accept Header返回相应格式的response。弱该值设为<code>false</code>则request格式会单独由<code>params[:format]</code>来决定。如果没有<code>format</code>参数，则response的格式会根据request是否是一个Ajax request来决定返回HTML还是Javascript。</li>
<li><code>allow_forgery_protection</code>用于设置启用还是禁用CSRF保护。默认在测试模式下该值为<code>false</code>而在其他模式下为<code>true</code>。</li>
<li><code>relative_url_root</code>可以被用来告诉Rails你将会将应用部署到一个子目录。默认值为<code>ENV['RAILS_RELATIVE_URL_ROOT']</code></li>
<p>缓存功能代码将会增加两个额外的设置：</p>
<li><code>ActionController::Caching::Pages.page_cache_directory</code>用于设置Rails为你的Web服务器创建缓存页面的位置。默认值为<code>Rails.public_path</code>（通常该值被设为<code>RAILS_ROOT</code>"/public"+）。</li>
<li><code>ActionController::Caching::Pages.page_cache_extension</code>用于设置生成的缓存页面文件的扩展名（如果进来的requests已经带了扩展名则这里的扩展名会被忽略）。默认值为<code>.html</code>。</li>
<p>分发器（dispatcher）包含了这样一条配置</p>
<li><code>ActionController::Dispatcher.error_file_path</code>给定了Rails用来寻找出错文件如<code>404.html</code>的路径。默认值为<code>Rails.public_path</code>。</li>
<p>使用Active Record的session存储可以这样来配置</p>
<li><code>CGI::Session::ActiveRecordStore::Session.data_column_name</code>用于设置用来存储session数据的列名。默认值为'data'。</li>
</ul>
<h3>3.3 配置Action View</h3>
<p>Action View上只有不多的几个配置选项，从<code>ActionView:Base</code>的四个开始：</p>
<ul>
<li><code>debug_rjs</code>决定RJS response是否会被包装在try/catch块中，并alert()被捕捉的异常（并重新将其抛出）（译者注：即是否对rjs使用debug模式，使得rjs的异常在开发工程中会被alert显示出来）。默认值为<code>false</code>。</li>
<li><code>warn_cache_misses</code>是否在一个action的结果遇到view路径中缓存未命中时Rails会显示一个警告。默认值为<code>false</code>。</li>
<li><code>field_error_proc</code>提供了一个HTML生成器来显示来自于Active Record的错误。默认值为<code>Proc.new {|html_tag, instance| "#{html_tag}"}</code></li>
<li><code>default_form_builder</code>告诉Rails默认实用的表单构建器（form builder）。默认值为<code>ActionView::Helpers::FormBuilder</code>。</li>
<p>ERB Template handler提供了一个额外的选项</p>
<li><code>ActionView::TemplateHandlers::ERB.erb_trim_mode</code>提供了ERB使用的修剪模式（trim mode）。默认为'-'。查看<a href="http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/" target="_blank">ERB文档</a>获得更多信息</li>
</ul>
<h3>3.4 配置Action Mailer</h3>
<p><code>ActionMailer::Base</code>上由一系列可用的配置：</p>
<ul>
<li><code>template_root</code>提供了Action Mailer模版的根目录</li>
<li><code>logger</code>接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger，用来记录来自Action Mailer的日志信息。设为nil则禁用日志记录功能。</li>
<li><code>smtp_settings</code>用来为<code>smtp</code>邮件发送方式提供详细的配置信息。它接受一个哈希组成的选项，包括如下任意的选项：
<ul>
<li><code>:address</code>允许你使用一个远端的邮件服务器。请将它从默认的"localhost"改为你所用的邮件服务器。</li>
<li><code>:port</code>如果你使用的邮件服务器不在25端口上运行，请修改这个配置。</li>
<li><code>:domain</code>如果你需要指定一个HELO域名，请在这里指定。</li>
<li><code>:user_name</code>如果你的邮件服务器需要认证，请在这里设置用户名</li>
<li><code>:password</code>如果你的邮件服务器需要认证，请在这里设置密码</li>
<li><code>:authentication</code>如果你的邮件服务器需要人证，你需要在此指定认证的类型。它应该是<code>:plain</code>，<code>:login</code>，和<code>:cram_md3</code>三个符号其中之一。</li>
</ul>
</li>
<li><code>sendmail_settings</code>允许你对<code>sendmail</code>邮件发送方式进行详细的配置。它接受一个哈希组成的选项，包括如下任意的选项：
<ul>
<li><code>:location</code>—sendmail可执行文件的位置。默认为<code>/usr/sbin/sendmail</code>。</li>
<li><code>:arguments</code>—命令行参数。默认值为<code>-i -t</code></li>
</ul>
</li>
<li><code>raise_delivery_errors</code>设置如果邮件发送没能完成是否需要抛出一个错误。默认值为<code>true</code>。</li>
<li><code>delivery_method</code>设置邮件发送方式。可以使用的值有<code>:smtp</code>（默认值），<code>:sendmail</code>以及<code>:test</code></li>
<li><code>perform_deliveries</code>指定邮件是否要真得发送出去。默认值为<code>:true</code>，测试时可以方便地设为<code>false</code>。</li>
<li><code>default_charset</code>设定Action Mailer用于编码邮件主题和内容的字符集。默认为<code>utf-8</code></li>
<li><code>default_content_type</code>设置消息的主体所使用的默认的content type。默认值为<code>text/plain</code>。</li>
<li><code>default_mime_version</code>设置消息实用的默认的MIME版本。默认值为<code>1.0</code>。</li>
<li><code>default_implicit_parts_order</code>—当一个消息被隐式地构建（例如，邮件的多部分通过模版组装，而模版通过文件名设定了content type），这个变量控制多个部分的顺序。默认为<code>["text/html", "text/enriched", "text/plain"]</code></li>
<p>。数组中先出现的项在邮件客户端中有较高的优先级，并在mime编码消息的最后出现。
</ul>
<h3>3.5 配置Active Resource</h3>
<p><code>ActiveResource::Base</code>中有一个配置可以设置：<br />
<code>logger</code>接收一个符合Log4r或者Ruby1.8.x Logger类的接口的logger，用来从Active Resource中记录日志信息。设为nil时禁用日志功能。</p>
<h3>3.6 配置Active Support</h3>
<p>Active Support中有一些配置选项：</p>
<ul>
<li><code>ActiveSupport::BufferedLogger.silencer</code>设为<code>false</code>则禁用了对代码块的缄默日志（silence logging）功能（译者注：可以参看<a href="http://api.rubyonrails.com/classes/ActiveSupport/BufferedLogger.html#M001499">http://api.rubyonrails.com/classes/ActiveSupport/BufferedLogger.html#M001499</a>，缄默日志使得silence方法可以对指定的代码块屏蔽日志功能或者改变日志的level）。默认值为<code>true</code>。</li>
<li><code>ActiveSupport::Cache::Store.logger</code>设定了缓存存储操作所使用的logger。</li>
<li><code>ActiveSupport::Logger.silencer</code>设为<code>false</code>则禁用了对代码块的缄默日志（silence logging）功能。默认值为<code>true</code>。</li>
</ul>
<h3>配置 Active Model</h3>
<p>Active Model目前有一个单独的配置设置：</p>
<ul>
<li><code>ActiveModel::Errors.default_error_messages</code>是一个包含所有验证错误消息的数组。</li>
</ul>
<h2>使用初始化器</h2>
<p>在装载了框架以及任何gems和插件之后，Rails会开始装载初始化器（initializers）。一个初始化器是在你的应用中任何存储在<code>/config/initializers</code>中的ruby代码。你可以使用初始化器来存放哪些应该整个框架和插件装载后进行的配置设置。<br />
<br/></p>
<div style="background: YELLOW">如果你喜欢的话，你可以使用子目录来组织你的初始化器，因为Rails会渗入到initializers目录的整个文件目录层级中去。</div>
<p><br/></p>
<div style="background: SKYBLUE">如果你的初始化器有任何的顺序依赖关系，你可以通过命名来控制它们装载的顺序。例如，01_critical.rb会在02_normal.rb之前装载。</div>
<p><br/></p>
<h2>使用一个后初始化器（After-Initializer）</h2>
<p>后初始化器（如同你所猜想的）会在所有的初始化器装载之后运行。你可以通过在任何Rails配置文件中设立<code>config.after_intialize</code>来支持一个<code>after_initialize</code>代码块（或者一个这种代码块的数组）。</p>
<pre name="code" class="ruby">
config.after_initialize do
    SomeClass.init
end
</pre>
<div style="background: ORANGE">你应用的一部分，特别是观察者（observers）和路径（routing）在after_initialize代码块被调用时还没有建立好。</div>
<p><br/></p>
<h2>Rails环境设置</h2>
<p>Rails的一部分配置可以通过外部环境变量来配置。以下的环境变量会被Rails的不同部分识别出来。</p>
<ul>
<li><code>ENV['RAILS_ENV']</code>定义了Rails所运行在的环境（production，development，test等等）</li>
<li><code>ENV['RAILS_RELATIVE_URL_ROOT']</code>被路径代码用来在你部署你的应用到一个子目录时识别出URL。</li>
<li><code>ENV['RAILS_ASSET_ID']</code>会覆写默认的Rails生成的用户可下载资产的缓存失效的时间戳。</li>
<li><code>ENV['RAILS_CACHE_ID']</code>和<code>ENV['RAILS_APP_VERSION']</code>用来生成Rails缓存代码中的扩展的缓存键。这可以允许你对同一个应用有多个分开的缓存。</li>
<li><code>ENV['RAILS_GEM_VERSION]</code>在<code>RAILS_GEM_VERSION</code>没有在<code>environment.rb</code>文件中定义时，定义了使用的Rails gems的版本。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/02/13/configuring-rails-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>functional tests中的form_authenticity_token</title>
		<link>http://www.xuwenhao.com/2009/02/09/form_authenticity_token-in-functional-tests/</link>
		<comments>http://www.xuwenhao.com/2009/02/09/form_authenticity_token-in-functional-tests/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 15:25:01 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=682</guid>
		<description><![CDATA[又是一个前一阵遇到的很tricky的问题。 Rails2.0中加入了form_authenticity_token来防止部分的cross-site的攻击，ActionView中默认的form_for标签会自动加入类似于 的代码，如果你自己使用form_tag来创建form的话，可以用类似于 &#60;input type="hidden" name="authenticity_token" value="&#60;%= "#{form_authenticity_token}" %&#62;" /&#62; 的代码来加入这个隐藏的form中的authenticity_token。 但是手工加入这个token在functional tests中会带来问题，因为functional tests中是把allow_forgery_protection关掉的 可以在environments/test.rb中看到这样的配置 config.action_controller.allow_forgery_protection = false 但是authenticity现在是hardcode在代码中，所以跑functional tests通常会遇到这样的错误 ActionView::TemplateError: No :secret given to the #protect_from_forgery call. Set that or use a session store capable of generating its own keys (Cookie Session Store). 一种解决办法是在view中加入当前all_forgery_protection状态的判断代码，比如 &#60;input type="hidden" name="authenticity_token" value="&#60;%= "#{form_authenticity_token}" %&#62;" /&#62; 但是有位同学用了个更巧妙的hook的办法，在test_helper.rb中hook掉form_authenticity_token，如下 module ActionController [...]]]></description>
			<content:encoded><![CDATA[<p>又是一个前一阵遇到的很tricky的问题。</p>
<p>Rails2.0中加入了form_authenticity_token来防止部分的cross-site的攻击，ActionView中默认的form_for标签会自动加入类似于
<pre name="code" class="html">
<input type="hidden" name="authenticity_token" value="d4500add369b69aee5fca2c1955e4673c941b0d3" /></pre>
<p>的代码，如果你自己使用form_tag来创建form的话，可以用类似于</p>
<pre name="code" class="ruby">
&lt;input type="hidden" name="authenticity_token" value="&lt;%= "#{form_authenticity_token}" %&gt;" /&gt;
</pre>
<p>的代码来加入这个隐藏的form中的authenticity_token。</p>
<p>但是手工加入这个token在functional tests中会带来问题，因为functional tests中是把allow_forgery_protection关掉的<br />
可以在environments/test.rb中看到这样的配置</p>
<pre name="code" class="ruby">
config.action_controller.allow_forgery_protection    = false
</pre>
<p>但是authenticity现在是hardcode在代码中，所以跑functional tests通常会遇到这样的错误</p>
<pre name="code" class="ruby">
ActionView::TemplateError: No :secret given to the #protect_from_forgery call.  Set that or use a session store capable of generating its own keys (Cookie Session Store).
</pre>
<p>一种<a href="http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/b7f0bda9209c71f6" target="_blank">解决办法</a>是在view中加入当前all_forgery_protection状态的判断代码，比如</p>
<pre name="code" class="ruby">
<% if  protect_against_forgery? %>
&lt;input type="hidden" name="authenticity_token" value="&lt;%= "#{form_authenticity_token}" %&gt;" /&gt;
<% end %>
</pre>
<p>但是<a href="http://pauldoerwald.ca/2008/4/23/form_authenticity_token-in-functional-tests" target="_blank">有位同学</a>用了个更巧妙的hook的办法，在test_helper.rb中hook掉form_authenticity_token，如下</p>
<pre name="code" class="ruby">
module ActionController
  module RequestForgeryProtection
    def form_authenticity_token
      return "form_authenticity_token OVERRIDE!"
    end
  end
end
</pre>
<p>我比较喜欢后一种啦。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/02/09/form_authenticity_token-in-functional-tests/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>在新macbook上安装Rails+MySQL</title>
		<link>http://www.xuwenhao.com/2009/02/09/install-rails-with-mysql-on-new-macboo/</link>
		<comments>http://www.xuwenhao.com/2009/02/09/install-rails-with-mysql-on-new-macboo/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 14:37:33 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=672</guid>
		<description><![CDATA[嗯，嗯，嗯，这个问题前一阵来来回回折腾过不少时间，主要的问题在于 Macbook 466是64位的CPU Leopard自带的Ruby是32位的版本 如果安装的MySQL是64位版本的，就需要自己编译个Ruby 要不你就像我这样还是装个32位的MySQL吧 MySQL安装的注意事项 建议安装Startup Item，这样就开机自启动了 如果装了Startup Item但是不想开机自启动，那就修改/etc/hostconfig，把MYSQLCOM=-YES-改成MYSQLCOM=-NO- 默认的encoding是latin1，所以要改一下配置文件，按下面这么办就行了 $ sudo cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf $ sudo vim /etc/my.cnf # 在对应的节点添加如下信息 [client] default-character-set = utf8 [mysqld] character-set-server = utf8 default-table-type = innodb 记得数据库创建要在改完配置重启mysqld之后，不然创建的数据库默认还是latin1的 然后就是gem安装mysql的驱动了，抛弃掉Rails自带的过时的ruby版本的驱动了 sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config 如果您装的是64位的Ruby和MySQL那么改一个参数吧 sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config]]></description>
			<content:encoded><![CDATA[<p>嗯，嗯，嗯，这个问题前一阵来来回回折腾过不少时间，主要的问题在于</p>
<ul>
<li>Macbook 466是64位的CPU</li>
<li>Leopard自带的Ruby是32位的版本</li>
<li>如果安装的MySQL是64位版本的，就需要自己编译个Ruby</li>
<li>要不你就像我这样还是装个32位的MySQL吧</li>
</ul>
<p>MySQL安装的注意事项</p>
<ul>
<li>建议安装Startup Item，这样就开机自启动了</li>
<li>如果装了Startup Item但是不想开机自启动，那就修改/etc/hostconfig，把MYSQLCOM=-YES-改成MYSQLCOM=-NO-</li>
<li>默认的encoding是latin1，所以要改一下配置文件，按下面这么办就行了</li>
</ul>
<pre name="code" class="ruby">
   $ sudo cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf
   $ sudo vim /etc/my.cnf
   # 在对应的节点添加如下信息
   [client]
   default-character-set = utf8
   [mysqld]
   character-set-server = utf8
   default-table-type = innodb </pre>
<p>记得数据库创建要在改完配置重启mysqld之后，不然创建的数据库默认还是latin1的</p>
<p>然后就是gem安装mysql的驱动了，抛弃掉Rails自带的过时的ruby版本的驱动了</p>
<pre name="code" class="ruby">
sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
</pre>
<p>如果您装的是64位的Ruby和MySQL那么改一个参数吧</p>
<pre name="code" class="ruby">
sudo env ARCHFLAGS="-arch x86_64" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/02/09/install-rails-with-mysql-on-new-macboo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>D-Link的信号果然不好</title>
		<link>http://www.xuwenhao.com/2009/01/09/d-link-signal-is-wee/</link>
		<comments>http://www.xuwenhao.com/2009/01/09/d-link-signal-is-wee/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 13:52:19 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=658</guid>
		<description><![CDATA[果然如shute同学所说，D-Link 624的信号比Netgear WGR614差不少。]]></description>
			<content:encoded><![CDATA[<p>果然如shute同学所说，D-Link 624的信号比Netgear WGR614差不少。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/01/09/d-link-signal-is-wee/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>奇怪的tar的问题</title>
		<link>http://www.xuwenhao.com/2009/01/07/strange-tar-question-on-mac/</link>
		<comments>http://www.xuwenhao.com/2009/01/07/strange-tar-question-on-mac/#comments</comments>
		<pubDate>Wed, 07 Jan 2009 04:46:01 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=656</guid>
		<description><![CDATA[很奇怪的问题，在用脚本打包rails project然后上传服务器，因为本机和服务器间的网速很慢，而git会生成很多以._开头的文件，为了让tar包小一点，要把这些文件去掉，用了这样一条命令 tar -zcvf abc.tar.gz &#8211;exclude abc/\.git &#8211;exclude *\._* abc 在Centos下work得很好，但是在我的Mac上._开头的文件仍然在tar包中，两边的tar的版本都是tar (GNU tar) 1.15.1，这是为什么呢？或者谁能告诉我在Mac下应该怎么做？]]></description>
			<content:encoded><![CDATA[<p>很奇怪的问题，在用脚本打包rails project然后上传服务器，因为本机和服务器间的网速很慢，而git会生成很多以._开头的文件，为了让tar包小一点，要把这些文件去掉，用了这样一条命令</p>
<blockquote><p>
tar -zcvf abc.tar.gz &#8211;exclude abc/\.git &#8211;exclude *\._* abc</p></blockquote>
<p>在Centos下work得很好，但是在我的Mac上._开头的文件仍然在tar包中，两边的tar的版本都是tar (GNU tar) 1.15.1，这是为什么呢？或者谁能告诉我在Mac下应该怎么做？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2009/01/07/strange-tar-question-on-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>明年准备读的技术书</title>
		<link>http://www.xuwenhao.com/2008/12/30/tech-books-plan-to-read-in-20099/</link>
		<comments>http://www.xuwenhao.com/2008/12/30/tech-books-plan-to-read-in-20099/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 09:47:13 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Book]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=637</guid>
		<description><![CDATA[少说多做，慢慢修炼吧，希望明年能读完下面的书单，其实看了看量，读完是不太可能，争取读完超过一般吧 今年读了一半，需要读完的 最近在边写边读beta，已经读了大半了，明年出版了一定搞本回家。 花点时间仔细学习javascript吧，现在还是属于随手查代码改代码的阶段。 主要花点时间做题吧，还有就是看看高级的算法比如近似算法什么的。 基本命令还是不熟啊。 还没读过，但很期待 其实从上个月开始，就开始学用Ruby了，Ruby和Rails会作为明年我主要投资的知识资产吧。 javascript也会是我技术投资的一部分，没准备精通，能拿来熟练干活就行。 不知道能不能安排好时间慢慢看这本神作。 这两本估计不会有时间看了，但是也列在目标里吧。 没读完，但希望能读完的，主要还是书读了一半不读完总觉得不舒服 读了一半，基本的都知道了，但是貌似最近想想有些记不太清了，希望能重新翻开来读完吧。对Java采取保本的投资方式吧，长期不看好。 基本已经读完了，需要整理一下笔记。 读过了，但是需要重读一遍的 PM书中我最喜欢的一本，一定要再读个一两遍。 需要再让我反躬自省多读一遍的书。 厕所书，翻完拉倒 总结下来，明年要看的书更基本了，基本没有“大”的书，所谓架构模式等等，算是对过去几年工作的一个反省吧，太多时间花在这些东西上，技术基本功没有练好，是回过头重新看这些注重细节的书了。 其实还有一堆想读要读的，但是很多明年肯定是无望了，所以就不写了。今年读书上的进步就是终于找到了个做笔记的好办法，就是google docs，要查的时候search一下就完了，终于不会象以前一样读完就忘了，然后要找一点东西花好长时间重新翻书去，记在纸上过两天就彻底找不到了。]]></description>
			<content:encoded><![CDATA[<p>少说多做，慢慢修炼吧，希望明年能读完下面的书单，其实看了看量，读完是不太可能，争取读完超过一般吧</p>
<h3>今年读了一半，需要读完的</h3>
<p>
<a href="http://www.douban.com/subject/3052723/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s3046095.jpg" alt="" /></a><br />
最近在边写边读beta，已经读了大半了，明年出版了一定搞本回家。
</p>
<p>
<a href="http://www.douban.com/subject/1869705/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s1888787.jpg" alt="" /></a><br />
花点时间仔细学习javascript吧，现在还是属于随手查代码改代码的阶段。
</p>
<p>
<a href="http://www.douban.com/subject/2035809/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s2349297.jpg" alt="" /></a><br />
主要花点时间做题吧，还有就是看看高级的算法比如近似算法什么的。
</p>
<p>
<a href="http://www.douban.com/subject/2208530/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s2853784.jpg" alt="" /></a><br />
基本命令还是不熟啊。
</p>
<hr/>
<h3>还没读过，但很期待</h3>
<p>
<a href="http://www.douban.com/subject/3035267/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s3017735.jpg" alt="" /></a><br />
其实从上个月开始，就开始学用Ruby了，Ruby和Rails会作为明年我主要投资的知识资产吧。
</p>
<p>
<a href="http://www.douban.com/subject/3007076/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s3069995.jpg" alt="" /></a><br />
javascript也会是我技术投资的一部分，没准备精通，能拿来熟练干活就行。
</p>
<p>
<a href="http://www.douban.com/subject/1148282/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s1113106.jpg" alt="" /></a><br />
不知道能不能安排好时间慢慢看这本神作。
</p>
<p>
<a href="http://www.douban.com/subject/1231910/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s1847010.jpg" alt="" /></a><br />
这两本估计不会有时间看了，但是也列在目标里吧。
</p>
<hr/>
<h3>没读完，但希望能读完的，主要还是书读了一半不读完总觉得不舒服</h3>
<p>
<a href="http://www.douban.com/subject/1138768/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s2008098.jpg" alt="" /></a><br />
读了一半，基本的都知道了，但是貌似最近想想有些记不太清了，希望能重新翻开来读完吧。对Java采取保本的投资方式吧，长期不看好。
</p>
<p>
<a href="http://www.douban.com/subject/3227098/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s3391448.jpg" alt="" /></a><br />
基本已经读完了，需要整理一下笔记。
</p>
<hr/>
<h3>读过了，但是需要重读一遍的</h3>
<p>
<a href="http://www.douban.com/subject/2160659/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s2916998.jpg" alt="" /></a><br />
PM书中我最喜欢的一本，一定要再读个一两遍。
</p>
<p>
<a href="http://www.douban.com/subject/1152111/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s2304265.jpg" alt="" /></a><br />
需要再让我反躬自省多读一遍的书。
</p>
<hr/>
<h3>厕所书，翻完拉倒</h3>
<p>
<a href="http://www.douban.com/subject/1467587/"><img style="padding:20px 20px 5px 0;border:0" src="http://otho.douban.com/mpic/s1631790.jpg" alt="" /></a>
</p>
<hr />
总结下来，明年要看的书更基本了，基本没有“大”的书，所谓架构模式等等，算是对过去几年工作的一个反省吧，太多时间花在这些东西上，技术基本功没有练好，是回过头重新看这些注重细节的书了。</p>
<p>其实还有一堆想读要读的，但是很多明年肯定是无望了，所以就不写了。今年读书上的进步就是终于找到了个做笔记的好办法，就是google docs，要查的时候search一下就完了，终于不会象以前一样读完就忘了，然后要找一点东西花好长时间重新翻书去，记在纸上过两天就彻底找不到了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2008/12/30/tech-books-plan-to-read-in-20099/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>google code也不牢靠啊</title>
		<link>http://www.xuwenhao.com/2008/12/19/google-code-is-also-unreliabl/</link>
		<comments>http://www.xuwenhao.com/2008/12/19/google-code-is-also-unreliabl/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 14:12:30 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=629</guid>
		<description><![CDATA[想把做了大半的东西deploy到dreamhost上去，结果svn commit的时候google code总是502 Bad Gateway，搜了一下。貌似应该是google code的服务器问题，居然他家也会如此不牢靠啊。]]></description>
			<content:encoded><![CDATA[<p>想把做了大半的东西deploy到dreamhost上去，结果svn commit的时候google code总是502 Bad Gateway，搜了一下。貌似应该是google code的服务器问题，居然他家也会如此不牢靠啊。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2008/12/19/google-code-is-also-unreliabl/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>天天面试</title>
		<link>http://www.xuwenhao.com/2008/12/04/interview/</link>
		<comments>http://www.xuwenhao.com/2008/12/04/interview/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 11:05:15 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=621</guid>
		<description><![CDATA[忽然又天天面试，嗯pretty同学的同学们的人际网络真是广泛啊。 外包公司的面试真没意思，MS和G家的比较有意思，不过不知道能混过去么。今天去G家，烦了很多小错误，外加一个算法的时间复杂度出错，外加如何优化没想出来，不算太好。不过对于不是搞ACM和NOI出身而且最近好久没写代码的我来说，能让每道题目有正确的算法解答我也算对自己满意了，剩下的就听天由命了。 考虑基本功是继续看算法呢还是干脆看数学去？或者练英文？哎，本科没有好好学习呀。]]></description>
			<content:encoded><![CDATA[<p>忽然又天天面试，嗯pretty同学的同学们的人际网络真是广泛啊。</p>
<p>外包公司的面试真没意思，MS和G家的比较有意思，不过不知道能混过去么。今天去G家，烦了很多小错误，外加一个算法的时间复杂度出错，外加如何优化没想出来，不算太好。不过对于不是搞ACM和NOI出身而且最近好久没写代码的我来说，能让每道题目有正确的算法解答我也算对自己满意了，剩下的就听天由命了。</p>
<p>考虑基本功是继续看算法呢还是干脆看数学去？或者练英文？哎，本科没有好好学习呀。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2008/12/04/interview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>奥妙的Rails</title>
		<link>http://www.xuwenhao.com/2008/11/27/interesting-rails/</link>
		<comments>http://www.xuwenhao.com/2008/11/27/interesting-rails/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 14:36:25 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=619</guid>
		<description><![CDATA[发现这个东西的确写同样功能比起Java来，十分之一的代码都用不上。不过问题是……我要多花10倍的时间研究到底怎么把这十分之一的代码给写出来…… 所以结果其实也没节省时间。]]></description>
			<content:encoded><![CDATA[<p>发现这个东西的确写同样功能比起Java来，十分之一的代码都用不上。不过问题是……我要多花10倍的时间研究到底怎么把这十分之一的代码给写出来……</p>
<p>所以结果其实也没节省时间。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2008/11/27/interesting-rails/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>可恶的电信和114</title>
		<link>http://www.xuwenhao.com/2008/11/25/badchina-telecom-and-114/</link>
		<comments>http://www.xuwenhao.com/2008/11/25/badchina-telecom-and-114/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 13:58:34 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=614</guid>
		<description><![CDATA[不知道为什么，今天用safari频频遇到url被截断，类似于我输入http://www.google.com/，结果出来的是114的网站，然后告诉我我输入的http://www.goo/不能访问，我怀疑电信这个混蛋把我的dns解析劫持了然后想办法给自己的114带流量。如果真是如此的话，这种行为及其恶劣，比所谓的微软黑屏恶劣100倍以上。而对于电信一贯的卑劣口碑和这种行为它曾经做过，我深深怀疑这就是丫干的。]]></description>
			<content:encoded><![CDATA[<p>不知道为什么，今天用safari频频遇到url被截断，类似于我输入http://www.google.com/，结果出来的是114的网站，然后告诉我我输入的http://www.goo/不能访问，我怀疑电信这个混蛋把我的dns解析劫持了然后想办法给自己的114带流量。如果真是如此的话，这种行为及其恶劣，比所谓的微软黑屏恶劣100倍以上。而对于电信一贯的卑劣口碑和这种行为它曾经做过，我深深怀疑这就是丫干的。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2008/11/25/badchina-telecom-and-114/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>继续折腾Mac</title>
		<link>http://www.xuwenhao.com/2008/11/25/playing-with-mac/</link>
		<comments>http://www.xuwenhao.com/2008/11/25/playing-with-mac/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 13:35:58 +0000</pubDate>
		<dc:creator>Stanley Xu</dc:creator>
				<category><![CDATA[Life]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.xuwenhao.com/?p=612</guid>
		<description><![CDATA[去北京玩了四天，周日回来的，相机的读卡器不在身边，照片和游记之后再贴吧。 终于开始着手用ROR写代码，发现时过境迁我已经一点都不记得这玩意儿了，于是找了本Agile Web Development with Ruby On Rails第三版的电子书边看边写，结果异常烦躁，一度又想打退堂鼓了。于是东看看西翻翻，后来想想不能总是光说不练啊，而且当年做毕设的时候也是VB.NET屁也不会，一两个礼拜也把代码给写出来了，所以还是继续写吧，就当学习一下Web Development，话说工作这三年除了TU还真没怎么写过前台的代码啊。 偷懒的时候继续折腾Macbook，把系统语言改成英文的了。原因是装QuickSilver装不上，报错“无法装载的文件系统”，google什么结果也没有。于是换英文来搜，用了QuickSilver ＋ File System终于是搜到了，原因是Safari下下载的QuickSilver的dmg会自动加上.bz2的后缀，解压再装就不行了，需要去掉原来的.bz2后缀直接当作dmg来装就没问题。问题解决了想想以后估计还会遇上这样的情况，所以干脆把系统语言换成英文，至少google出错信息的时候结果会多一些。 最近看黄大叔的blog，发现了个穿墙利器hotspot shield，非常不错，因为是基于vpn的，比我之前常用的web代理要好很多，速度比较稳定，而且不会有关键词被屏蔽，而且它也有windows的版本。不过用这个有三点需要注意：第一，在Mac OS X下，它会在root下起一个ajaxserver的进程，而且不接通的时候会显示这个进程no responding，所以如果你看到它请不要以为误中了病毒；第二，是对于各种代理，请不要在通过他们访问网络的时候输入重要的私密信息；第三，用了这个玩意儿访问网页，会在所有的网页的header上加上广告，不过你可以通过定制的css去掉这个广告，虽然它仍然会使你访问的站点的上部看上去多了一个白条，不过比广告还是好多了。]]></description>
			<content:encoded><![CDATA[<p>去北京玩了四天，周日回来的，相机的读卡器不在身边，照片和游记之后再贴吧。</p>
<p>终于开始着手用ROR写代码，发现时过境迁我已经一点都不记得这玩意儿了，于是找了本<em>Agile Web Development with Ruby On Rails</em>第三版的电子书边看边写，结果异常烦躁，一度又想打退堂鼓了。于是东看看西翻翻，后来想想不能总是光说不练啊，而且当年做毕设的时候也是VB.NET屁也不会，一两个礼拜也把代码给写出来了，所以还是继续写吧，就当学习一下Web Development，话说工作这三年除了TU还真没怎么写过前台的代码啊。</p>
<p>偷懒的时候继续折腾Macbook，把系统语言改成英文的了。原因是装<a href="http://www.blacktree.com/" target="_blank">QuickSilver</a>装不上，报错“无法装载的文件系统”，google什么结果也没有。于是换英文来搜，用了QuickSilver ＋ File System终于是搜到了，原因是Safari下下载的QuickSilver的dmg会自动加上.bz2的后缀，解压再装就不行了，需要去掉原来的.bz2后缀直接当作dmg来装就没问题。问题解决了想想以后估计还会遇上这样的情况，所以干脆把系统语言换成英文，至少google出错信息的时候结果会多一些。</p>
<p>最近看<a href="http://www.wretch.cc/blog/JonasHwang" target="_blank">黄大叔的blog</a>，发现了个穿墙利器<a href="http://www.hotspotshield.com">hotspot shield</a>，非常不错，因为是基于vpn的，比我之前常用的<a href="http://www.orzin.com">web代理</a>要好很多，速度比较稳定，而且不会有关键词被屏蔽，而且它也有windows的版本。不过用这个有三点需要注意：第一，在Mac OS X下，它会在root下起一个ajaxserver的进程，而且不接通的时候会显示这个进程no responding，所以如果你看到它请不要以为误中了病毒；第二，是对于各种代理，请不要在通过他们访问网络的时候输入重要的私密信息；第三，用了这个玩意儿访问网页，会在所有的网页的header上加上广告，不过你可以通过定制的css去掉这个广告，虽然它仍然会使你访问的站点的上部看上去多了一个白条，不过比广告还是好多了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.xuwenhao.com/2008/11/25/playing-with-mac/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
