<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Ruby/Rails | A Bit? No!!!</title>
    <link>http://abitno.linpie.com/categories/ruby-on-rails</link>
    <description>Posts in category Ruby/Rails | A Bit? No!!!</description>
    <atom:link href="http://abitno.linpie.com/feeds/categories/ruby-on-rails" rel="self" type="application/rss+xml"/>
    <item>
      <pubDate>Sun, 10 Jan 2010 14:01:24 +0000</pubDate>
      <title>&#37096;&#32626;&#30340;&#37057;&#38391;&#21644;&#30127;&#29378;</title>
      <link>http://abitno.linpie.com/the-depressed-and-excited-deploy</link>
      <guid>http://abitno.linpie.com/the-depressed-and-excited-deploy</guid>
      <description>&lt;p&gt;&#22522;&#20110;&#21508;&#31181;&#19981;&#21516;&#30340;&#21407;&#22240;&#65292;&#25105;&#24471;&#21435;&#37096;&#32626;&#20004;&#20010;Rails&#31243;&#24207;&#65292;&#19968;&#20010;&#26159;&#20844;&#21496;&#30340;&#65292;&#19968;&#20010;&#26159;&#25105;&#33258;&#24049;&#30340;&#12290;&#20844;&#21496;&#30340;&#35201;&#37096;&#32626;&#21040;&#25105;&#33258;&#24049;&#30340;&#30005;&#33041;&#19978;&#65292;&#36825;&#26679;&#25105;&#23601;&#33021;&#22312;&#23478;&#38543;&#26102;&#20889;&#20195;&#30721;&#20102;&#12290;&#25105;&#33258;&#24049;&#30340;&#23601;&#31616;&#21333;&#20102;&#65292;&#26159;&#19968;&#30452;&#20197;&#26469;&#33258;&#24049;&#26790;&#24819;&#30340;blog&#65292;&#33267;&#20170;&#26410;&#33021;&#23436;&#25104;&#65292;&#21482;&#26377;&#20010;&#22823;&#20307;&#30340;&#26679;&#23376;&#65292;&#19981;&#33021;&#19981;&#35828;&#33258;&#24049;&#22826;&#25042;&#22826;&#25042;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#20844;&#21496;&#30340;&#20195;&#30721;&#37096;&#32626;&#26159;&#35753;&#25105;&#26497;&#20854;&#37057;&#38391;&#30340;&#65292;&#26412;&#26469;&#36825;&#20010;&#21608;&#26411;&#25105;&#26159;&#26377;&#20219;&#21153;&#35201;&#23436;&#25104;&#30340;&#65292;&#20294;&#26159;&#20170;&#22825;&#19968;&#26089;&#36215;&#24202;&#27809;&#21457;&#29616;&#29031;&#36827;&#31383;&#26469;&#30340;&#22823;&#29255;&#38451;&#20809;&#65292;&#26397;&#31383;&#22806;&#19968;&#30475;&#65292;&#21448;&#19979;&#38632;&#20102;&#65292;&#24322;&#24120;&#35752;&#21388;&#12290;&#12290;&#12290;&#20110;&#26159;&#24819;&#22312;&#23478;&#25226;&#20195;&#30721;&#37096;&#32626;&#22909;&#65292;&#24223;&#20102;&#32769;&#22823;&#30340;&#21147;&#27668;&#25165;&#25226;&#20195;&#30721;&#36816;&#34892;&#36215;&#26469;&#65292;&#26368;&#21518;&#21457;&#29616;&#25105;&#27809;&#26377;&#25968;&#25454;&#65292;&#27809;&#26377;&#25968;&#25454;&#65281;&#65281;&#65281;&#37057;&#38391;&#20102;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#25105;&#23601;&#36825;&#26679;&#19968;&#30452;&#37057;&#38391;&#30528;&#65292;&#26007;&#20105;&#30528;&#35201;&#19981;&#35201;&#21435;&#20844;&#21496;&#25226;&#25968;&#25454;&#23548;&#19968;&#20221;&#36807;&#26469;&#65292;&#22806;&#38754;&#19979;&#30340;&#38632;&#23454;&#22312;&#35753;&#20154;&#19981;&#24819;&#20986;&#38376;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#36807;&#20102;&#20013;&#21320;&#65292;&#24819;&#30528;&#24635;&#24471;&#25214;&#28857;&#20107;&#20570;&#12290;&#20854;&#23454;&#19981;&#26159;&#25105;&#27809;&#26377;&#20107;&#20570;&#65292;&#32780;&#26159;&#24819;&#20570;&#30340;&#20107;&#24773;&#22826;&#22810;&#65292;&#28982;&#21518;&#23601;&#20081;&#25104;&#19968;&#22242;&#65292;&#19981;&#30693;&#36947;&#24212;&#35813;&#20570;&#20160;&#20040;&#22909;&#20102;&#12290;&#23601;&#24819;&#30528;&#25226;&#33258;&#24049;&#30340;blog&#32473;&#37096;&#32626;&#21040;VPS&#19978;&#21435;&#21543;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&#19979;&#38754;&#24320;&#22987;&#65292;&#27809;&#26377;&#24223;&#35805;&#65292;&#25152;&#26377;&#25805;&#20316;&#26080;&#35828;&#26126;&#22343;&#22312;VPS&#19978;&#36827;&#34892;&#65293;&#65293;&#65293;&#65293;&#65293;&#65293;&lt;br /&gt;VPS&#30340;&#29615;&#22659;&#65306;Debian&#31995;&#32479;&#65292;Nginx&#26381;&#21153;&#22120;&#65292;&#19981;&#26159;&#25105;&#35013;&#30340;&#65292;&#21512;&#20249;&#20154;&#24050;&#32463;&#35013;&#22909;&#20102;&lt;br /&gt;&#25105;&#35201;&#20570;&#30340;&#31532;&#19968;&#20214;&#20107;&#24773;&#26159;&#25226;&#20195;&#30721;&#32473;&#25918;&#21040;vps&#19978;&#65292;&#22240;&#27492;&#32473;VPS&#23433;&#35013;Mercurial&#65292;&#20063;&#23601;&#26159;&#27742;&#20808;&#29983;hg&#12290;&#12290;&#12290;&lt;/p&gt;&lt;pre class="twilight"&gt;mkdir &lt;span class="Keyword"&gt;~&lt;/span&gt;/opt
&lt;span class="Storage"&gt;export&lt;/span&gt; X=/home/abitno/opt
&lt;/pre&gt;&lt;p&gt;&lt;span id='more_107'&gt;&lt;/span&gt;&#21518;&#38754;&#25152;&#26377;&#30340;&#19996;&#35199;&#37117;&#20250;&#23433;&#35013;&#21040;/home/abitno/opt&#65292;&#25152;&#20197;&#23450;&#20041;&#20010;&#21464;&#37327;&#26041;&#20415;&#19968;&#28857;&lt;/p&gt;&lt;p&gt;Mercurial&#26159;&#38656;&#35201;Python&#25903;&#25588;&#30340;&lt;/p&gt;&lt;pre class="twilight"&gt;wget http://download.huihoo.com/python/Python-2.6.1.tar.bz2
./configure --prefix=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
make
make install
&lt;/pre&gt;&lt;p&gt;&#23433;&#35013;Mercurial&lt;/p&gt;&lt;pre class="twilight"&gt;wget http://mercurial.selenic.com/release/mercurial-1.4.2.tar.gz
make all PYTHON=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
make install PREFIX=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#28982;&#21518;&#21021;&#22987;&#21270;&#19968;&#20010;hg&#39033;&#30446;&#30475;&#30475;&lt;/p&gt;&lt;pre class="twilight"&gt;hg init &lt;span class="Keyword"&gt;~&lt;/span&gt;/blog
&lt;/pre&gt;&lt;p&gt;&#36716;&#21040;&#33258;&#24049;&#30005;&#33041;&#19978;&#65292;&#25226;&#20195;&#30721;push&#32473;VPS&#65292;&#36825;&#26159;&#21807;&#19968;&#19968;&#27425;&#35201;&#22312;&#26412;&#26426;&#30340;&#25805;&#20316;&lt;/p&gt;&lt;pre class="twilight"&gt;hg push ssh://abitno@x.x.x.x:port/blog
&lt;/pre&gt;&lt;p&gt;&#22238;&#21040;VPS&#65292;&#23433;&#35013;Ruby&#30456;&#20851;&#30340;&#29615;&#22659;&lt;/p&gt;&lt;pre class="twilight"&gt;wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p248.tar.gz
./configure --prefix=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt; --with-default-kcode=utf8
make
make install

wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
ruby setup.rb

gem install rails mongrel 
&lt;/pre&gt;&lt;p&gt;&#25509;&#19979;&#26469;&#35201;&#23433;&#35013;nokogiri&#29645;&#23453;&#65292;&#38656;&#35201;libxml2&#21644;libxslt&#20004;&#20010;&#26412;&#22320;&#24211;&lt;/p&gt;&lt;pre class="twilight"&gt;wget ftp://xmlsoft.org/libxml2/libxml2-2.7.6.tar.gz
./configure --prefix=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
make
make install

wget ftp://ftp.gnome.org/pub/GNOME/sources/libxslt/1.1/&lt;span class="Constant"&gt;\&lt;/span&gt;
libxslt-1.1.20.tar.gz
./configure --prefix=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
make
make install

gem install nokogiri -- --with-opt-dir=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#28982;&#21518;&#26159;&#23433;&#35013;sqlite3&#65292;&#20026;&#20160;&#20040;&#35201;&#29992;sqlite3&#21602;&#65311;&#65311;&#65311;&#39740;&#30693;&#36947;&#25105;&#26159;&#24590;&#20040;&#24819;&#30340;&lt;/p&gt;&lt;pre class="twilight"&gt;wget http://www.sqlite.org/sqlite-amalgamation-3.6.22.tar.gz
./configure --prefix=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
make
make install

gem install sqlite3-ruby -- --with-opt-dir=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#22114;&#65292;&#23545;&#20102;&#65292;&#36824;&#26377;readline&#35201;&#23433;&#35013;&lt;/p&gt;&lt;pre class="twilight"&gt;wget ftp://ftp.cwru.edu/pub/bash/readline-6.1.tar.gz
./configure --prefix=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
make
make install
&lt;/pre&gt;&lt;p&gt;&#28982;&#21518;&#26159;&#23433;&#35013;Ultraviolet&lt;/p&gt;&lt;pre class="twilight"&gt;wget http://www.geocities.jp/kosako3/oniguruma/archive/onig-5.8.0.tar.gz
./configure --prefix=/usr --with-ruby-dir=&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;X&lt;/span&gt;
make
make install

gem install oniguruma ultraviolet
&lt;/pre&gt;&lt;p&gt;&#36825;&#20123;&#20010;&#19996;&#35199;&#24635;&#31639;&#26159;&#23433;&#35013;&#23436;&#25104;&#20102;&#12290;&#12290;&#12290;&#26399;&#38388;&#36935;&#21040;&#19981;&#23569;&#30340;&#38382;&#39064;&#12290;&#12290;&#12290;&#22909;&#20102;&#65292;&#19978;&#21320;&#30340;&#37057;&#38391;&#24773;&#32467;&#23436;&#20840;&#27809;&#26377;&#20102;&#65292;&#27599;&#24403;&#33258;&#24049;&#23436;&#25104;&#19968;&#20214;&#20107;&#24773;&#30340;&#26102;&#20505;&#24635;&#20250;&#26377;&#31181;&#30127;&#29378;&#30340;&#20852;&#22859;&#24863;&#12290;&#12290;&#12290;&#36214;&#32039;&#20986;&#21435;&#20080;&#20960;&#20010;&#21253;&#23376;&#21507;&#65374;&#65374;&#65374;&lt;/p&gt;&lt;p&gt;&#36824;&#35201;&#37197;&#32622;&#19979;nginx&#65292;&#36825;&#20010;&#23601;&#27809;&#20160;&#20040;&#22909;&#20889;&#30340;&#20102;&#65292;nginx&#21644;mongrel&#30340;&#32463;&#20856;&#25645;&#37197;&#65292;&#32593;&#32476;&#19978;&#19968;&#25235;&#19968;&#22823;&#25226;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#20174;&#27492;&#25105;&#30340;blog&#21363;&#23558;&#25644;&#21040;&#22269;&#22806;&#65292;&#25105;&#20063;&#23558;&#21578;&#21035;WordPress&#65292;&#20255;&#22823;&#30340;WordPress&#21834;&#65292;&#20320;&#20859;&#20102;&#25105;&#36825;&#20040;&#38271;&#26102;&#38388;&#65292;&#25105;&#35201;&#24323;&#20320;&#32780;&#21435;&#20102;&#12290;&#12290;&#12290;&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Sun, 29 Nov 2009 03:38:33 +0000</pubDate>
      <title>&#36890;&#23477;&#19968;&#26202;&#30340;&#25104;&#26524;</title>
      <link>http://abitno.linpie.com/award-to-my-last-night</link>
      <guid>http://abitno.linpie.com/award-to-my-last-night</guid>
      <description>&lt;p&gt;&lt;img src="http://abitno.linpie.com/system/files/2010/1/79/original/my-new-rails-blog.png?1263742040" alt="my-new-rails-blog" title="my-new-rails-blog" width="519" height="373" class="aligncenter size-full wp-image-2285" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span id='more_100'&gt;&lt;/span&gt;&#25105;&#29702;&#24819;&#20013;&#30340;blog&#32456;&#20110;&#25104;&#22411;&#20102;&#65292;&#24590;&#20040;&#26679;&#65311;&#24590;&#20040;&#26679;&#65311;&#25105;&#20877;&#27425;&#20026;&#33258;&#24049;&#30340;&#20135;&#21697;&#20852;&#22859;&#21040;&#19981;&#34892;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#25105;&#19968;&#30452;&#24819;&#29992;Rails&#26469;&#23436;&#25104;&#19968;&#20010;&#33258;&#24049;&#29992;&#30340;blog&#65292;&#19981;&#26159;&#25105;&#19981;&#21916;&#27426;WP&#65292;&#20063;&#19981;&#26159;&#25105;&#24819;&#37325;&#22797;&#21457;&#26126;&#36718;&#23376;&#12290;WP&#24456;&#20248;&#31168;&#65292;&#20294;&#23427;&#24182;&#19981;&#26159;&#25105;&#29702;&#24819;&#20013;&#30340;&#24418;&#35937;&#65292;&#32780;&#19988;&#25105;&#30475;&#19981;&#24815;PHP&#37027;&#31181;&#24418;&#24335;&#30340;&#20195;&#30721;&#12290;Rails&#30340;&#24320;&#28304;Blog&#20063;&#19981;&#23569;&#65292;&#20294;&#26159;&#19982;WP&#27604;&#36215;&#26469;&#36824;&#26159;&#26377;&#24046;&#36317;&#30340;&#12290;&#22905;&#20204;&#32479;&#32479;&#19981;&#26159;&#25105;&#30340;&#26790;&#20013;&#24773;&#20154;&#65281;&#65281;&#65281;&lt;/p&gt;&lt;p&gt;Rails&#30340;&#24320;&#21457;&#25928;&#29575;&#26159;&#26497;&#31471;&#39640;&#25928;&#30340;&#65292;&#25105;&#19968;&#20010;&#26202;&#19978;&#65292;&#23601;&#25226;&#19968;&#20010;blog&#30340;&#38607;&#24418;&#32473;&#20570;&#20986;&#26469;&#20102;&#12290;&#32780;&#19988;&#25105;&#36824;&#35201;&#25226;wp&#30340;&#19996;&#35199;&#20840;&#38754;&#36716;&#25442;&#36807;&#26469;&#12290;&lt;/p&gt;&lt;p&gt;&#19981;&#36807;&#20043;&#21069;&#36825;&#20123;&#19996;&#35199;&#25105;&#20063;&#37117;&#24050;&#32463;&#26377;&#20570;&#36807;&#20102;&#65292;&#21482;&#26159;&#27809;&#25972;&#29702;&#12290;&#27604;&#22914;&#36825;&#20010;&#39029;&#38754;&#65292;&#25105;&#21487;&#26159;&#19977;&#22825;&#25361;&#28783;&#22812;&#25112;&#25442;&#22238;&#26469;&#30340;&#65292;&#37324;&#38754;&#30340;&#27599;&#19968;&#20010;&#22270;&#29255;&#37117;&#26159;&#25105;&#33258;&#24049;&#29992;gimp&#20570;&#30340;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;WP&#30340;&#25991;&#31456;&#23548;&#20837;&#65292;&#20043;&#21069;&#25105;&#26366;&#32463;&#24819;&#29992;&lt;a href="http://abitno.linpie.com/rails-import-wordpress-xml-backup.html"&gt;ruby-libxml&#26469;&#35299;&#26512;xml&#30340;&lt;/a&gt;&#65292;&#21518;&#26469;&#24037;&#20316;&#20013;&#20102;&#35299;&#21040;&lt;a href="http://nokogiri.org/"&gt;nokogiri&lt;/a&gt;&#65292;&#24863;&#35273;&#26356;&#22909;&#29992;&#19968;&#20123;&#12290;&lt;/p&gt;&lt;p&gt;&#35486;&#27861;&#39640;&#20142;&#25105;&#36824;&#26159;&lt;a href="http://abitno.linpie.com/install-ultraviolet-and-oniguruma.html"&gt;&#36873;&#25321;&#30340;Ultraviolet&lt;/a&gt;&#65292;&#19981;&#36807;&#25105;&#21457;&#29616;&#23427;&#23545;PHP&#20195;&#30721;&#26681;&#26412;&#23601;&#27809;&#26377;&#39640;&#20142;&#25928;&#26524;&#21527;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#25105;&#20284;&#20046;&#24212;&#35813;&#27927;&#27927;&#30561;&#20102;&#12290;&#12290;&#12290;&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Sat, 28 Nov 2009 01:55:02 +0000</pubDate>
      <title>&#20102;&#35299;&#19979;Rack/MiddleWare/Rails/Metal</title>
      <link>http://abitno.linpie.com/understand-ruby-rack-middleware-rails-metal</link>
      <guid>http://abitno.linpie.com/understand-ruby-rack-middleware-rails-metal</guid>
      <description>&lt;p&gt;&#24537;&#37324;&#20599;&#38386;&#65292;&#24819;&#30475;&#19979;rails&#30456;&#20851;&#30340;&#20195;&#30721;&#65292;&#19981;&#30693;&#20309;&#22788;&#24320;&#22987;&#12290;&#23601;&#20808;&#20102;&#35299;&#19968;&#28857;&#24403;&#19979;&#27604;&#36739;&#28779;&#30340;metal&#12290;&#20570;&#19979;&#23567;&#35760;&#24405;&#65292;&#20272;&#35745;&#20197;&#21518;&#24456;&#38271;&#26102;&#38388;&#19981;&#20250;&#20877;&#30475;&#65292;&#20197;&#20813;&#36951;&#24536;&#12290;&#22823;&#37096;&#20998;&#20869;&#23481;&#26469;&#28304;&#20110;&lt;a href="http://railslab.newrelic.com/2009/06/05/episode-14-rack-metal"&gt;&#36825;&#20010;&#19975;&#24694;&#30340;&#36164;&#26412;&#20027;&#20041;&#21046;&#36896;&#30340;&#35270;&#39057;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#20808;&#20174;&#65330;ack&#24320;&#22987;&#65292;&#65330;ack&#30340;&#30446;&#26631;&#24456;&#31616;&#21333;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Rack&#22312;&#25903;&#25345;Ruby&#30340;WEB&#26381;&#21153;&#22120;&#21644;Ruby&#26694;&#26550;&#20043;&#38388;&#25552;&#20379;&#20102;&#19968;&#20010;&#26368;&#31934;&#31616;&#30340;interface&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&#19968;&#20010;&#22522;&#20110;Rack&#30340;app&#20854;&#23454;&#23601;&#26159;&#19968;&#20010;Ruby&#23545;&#35937;&#65292;&#36825;&#20010;&#23545;&#35937;&#21807;&#19968;&#30340;&#35201;&#27714;&#23601;&#26159;&#28385;&#36275;&#36825;&#20004;&#26465;spec&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;1&#12289;&#33021;&#22815;&#21709;&#24212;call&#26041;&#27861;&#65292;&#24182;&#19988;&#25509;&#21463;env&#21442;&#25968;&lt;br /&gt;2&#12289;&#36820;&#22238;&#19968;&#20010;&#25968;&#32452;[status, header, body]&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&#26469;&#30475;&#19968;&#20010;&#26368;&#31616;&#21333;&#30340;Hello world&#65292;&#36825;&#37324;&#30340;&#23545;&#35937;&#26159;&#19968;&#20010;lambda&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;require&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;rubygems&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="Keyword"&gt;require&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;rack&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
lambda_app &lt;span class="Keyword"&gt;=&lt;/span&gt; lambda { |&lt;span class="Variable"&gt;env&lt;/span&gt;| 
  [&lt;span class="Constant"&gt;200&lt;/span&gt;, {&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;Content-Type&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;text/html&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;}, &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;Hello World !&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;] 
}

&lt;span class="Support"&gt;Rack&lt;/span&gt;::&lt;span class="Entity"&gt;Handler&lt;/span&gt;::&lt;span class="Entity"&gt;Mongrel&lt;/span&gt;.&lt;span class="Entity"&gt;run&lt;/span&gt; lambda_app, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;Port&lt;/span&gt; =&amp;gt; &lt;span class="Constant"&gt;3000&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;span id='more_99'&gt;&lt;/span&gt;&#36816;&#34892;&#36825;&#27573;&#20195;&#30721;&#65292;&#28982;&#21518;&#25171;&#24320;&#20320;&#30340;&#27983;&#35272;&#22120;&#65292;&#35775;&#38382;&lt;a href="http://localhost:3000"&gt;http://localhost:3000&lt;/a&gt;&#65292;&#30475;&#30475;&#21543;&#65292;&#19968;&#20010;&#26368;&#31616;&#21333;&#30340;web&#31243;&#24207;&#23601;&#35477;&#29983;&#20102;&lt;/p&gt;&lt;p&gt;&#20877;&#26469;&#39046;&#20250;&#19979;rack&#20013;middleware&#30340;&#27010;&#24565;&#65292;&#30475;&#21517;&#23383;&#20854;&#23454;&#20063;&#24456;&#23481;&#26131;&#29702;&#35299;&#65292;&#23601;&#26159;&#20171;&#20110;&#20013;&#38388;&#30340;&#19968;&#20010;ware&#12290;&lt;br /&gt;&lt;img src="http://abitno.linpie.com/system/files/2010/1/78/original/rack-middleware-pic.png?1263742037" alt="rack-middleware-pic" title="rack-middleware-pic" width="519" height="122" class="aligncenter size-full wp-image-2274" /&gt;&lt;/p&gt;&lt;p&gt;&#21834;&#21834;&#21834;&#65281;&#65281;&#65281;&#25105;&#19981;&#20889;&#20102;&#65292;&#30475;&#37027;&#20010;&#35270;&#39057;&#21543;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#20197;&#21518;&#30475;&#19968;&#19979;&#36825;&#27573;&#20195;&#30721;&#65292;&#23601;&#33021;&#35352;&#36215;&#30456;&#20851;&#27010;&#24565;&#20102;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;require&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;rubygems&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="Keyword"&gt;require&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;rack&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;&#19968;&#20010;&#26631;&#20934;&#30340;middleware&#23601;&#26159;&#25353;&#29031;&#36825;&#20010;&#27169;&#24335;&#65292;&#39318;&#20808;&#21021;&#22987;&#21270;&#19968;&#20010;Rack app&#65292;&lt;/span&gt;
&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;&#28982;&#21518;&#22312;&#33258;&#24049;&#30340;call&#26041;&#27861;&#20013;&#22788;&#29702;&#35531;&#27714;&#36820;&#22238;&#30340;status, header&#21644;body&lt;/span&gt;
&lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;ClassRack&lt;/span&gt;
  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;initialize&lt;/span&gt;(&lt;span class="Variable"&gt;app&lt;/span&gt;)
    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;app&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; app
  &lt;span class="Keyword"&gt;end&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;call&lt;/span&gt;(&lt;span class="Variable"&gt;env&lt;/span&gt;)
    status, header, body &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;app&lt;/span&gt;.&lt;span class="Entity"&gt;call&lt;/span&gt;(env)
    [status, header, body &lt;span class="Keyword"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt; -- ClassRack&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;]
  &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;

lambda_app &lt;span class="Keyword"&gt;=&lt;/span&gt; lambda { |&lt;span class="Variable"&gt;env&lt;/span&gt;| 
  [&lt;span class="Constant"&gt;200&lt;/span&gt;, {&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;Content-Type&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;text/html&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;}, &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;This is a LambdaRack&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;] 
}

&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;Rack builder&#30340;&#29992;&#27861;&lt;/span&gt;
builder &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Rack&lt;/span&gt;::&lt;span class="Entity"&gt;Builder&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt; &lt;span class="Keyword"&gt;do&lt;/span&gt;
&lt;span class="Comment"&gt;  &lt;span class="Comment"&gt;#&lt;/span&gt;&#36825;&#37324;&#20351;&#29992;&#20102;&#19968;&#20010;middleware&#65292;&#29992;&#26469;&#25552;&#20379;log&#21151;&#33021;&lt;/span&gt;
  use &lt;span class="Support"&gt;Rack&lt;/span&gt;::&lt;span class="Entity"&gt;CommonLogger&lt;/span&gt; 

&lt;span class="Comment"&gt;  &lt;span class="Comment"&gt;#&lt;/span&gt;http://localhost:3000/&lt;/span&gt;
  map &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;/&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;
    run lambda_app
  &lt;span class="Keyword"&gt;end&lt;/span&gt;

  map &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;/class&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;
&lt;span class="Comment"&gt;    &lt;span class="Comment"&gt;#&lt;/span&gt;http://localhost:3000/class/&lt;/span&gt;
    map &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;/&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="Keyword"&gt;do 	    &lt;/span&gt;
      run &lt;span class="Support"&gt;ClassRack&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;(lambda_app)
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
    
&lt;span class="Comment"&gt;    &lt;span class="Comment"&gt;#&lt;/span&gt;http://localhost:3000/class/lambda/&lt;/span&gt;
    map &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;/lambda&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="Keyword"&gt;do       &lt;/span&gt;
      run &lt;span class="Support"&gt;Proc&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt; { |&lt;span class="Variable"&gt;env&lt;/span&gt;| [&lt;span class="Constant"&gt;200&lt;/span&gt;, {}, &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;lambda in nest map&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;] }
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;

&lt;span class="Support"&gt;Rack&lt;/span&gt;::&lt;span class="Entity"&gt;Handler&lt;/span&gt;::&lt;span class="Entity"&gt;Mongrel&lt;/span&gt;.&lt;span class="Entity"&gt;run&lt;/span&gt; builder, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;Port&lt;/span&gt; =&amp;gt; &lt;span class="Constant"&gt;3000&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#35980;&#20284;&#36824;&#27809;&#20889;metal&#65311;&#36816;&#34892;&#19979;&#38754;&#30340;&#21629;&#20196;&#23601;&#26126;&#30333;&#20102;&lt;/p&gt;&lt;pre class="twilight"&gt;ruby script/generate metal hello
&lt;/pre&gt;&lt;p&gt;&#19979;&#38754;&#26159;&#26356;&#22909;&#30340;&#20171;&#32461;&lt;br /&gt;http://m.onkey.org/2008/11/17/ruby-on-rack-1&lt;br /&gt;http://m.onkey.org/2008/11/18/ruby-on-rack-2-rack-builder&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Thu, 29 Oct 2009 14:35:05 +0000</pubDate>
      <title>Rails&#20013;Cache&#30340;&#37027;&#20123;&#20107;</title>
      <link>http://abitno.linpie.com/something-about-caches-in-rails</link>
      <guid>http://abitno.linpie.com/something-about-caches-in-rails</guid>
      <description>&lt;p&gt;&#22312;Rails&#20013;&#20570;&#32531;&#23384;&#26159;&#31616;&#21333;&#30340;&#65292;&#35201;&lt;strong&gt;&#24320;&#21551;cache&lt;/strong&gt;&#30340;&#35805;&lt;/p&gt;&lt;pre class="twilight"&gt;config.&lt;span class="Entity"&gt;action_controller&lt;/span&gt;.&lt;span class="Entity"&gt;perform_caching&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;true&lt;/span&gt; 
&lt;/pre&gt;&lt;p&gt;&#40664;&#35748;&#24773;&#20917;&#19979;&#21482;&#26377;production&#26159;true&#65292;&#20854;&#20182;ENV&#37117;&#26159;false&#12290;&lt;/p&gt;&lt;p&gt;Rails&#20013;&#23384;&#20648;cache&#30340;&#26041;&#24335;&#22810;&#20102;&#21435;&#20102;&#65292;&#29616;&#22312;&#29992;&#30340;&#26368;&#22810;&#30340;&#24212;&#35813;&#26159;memcache&#21543;&#12290;rails&#30340;guildes&#20013;&#26377;&#21477;&lt;em&gt;Page caches are always stored on disk&lt;/em&gt;&#65292;&#35980;&#20284;&#26159;&#25152;&#26377;&#30340;page cache&#37117;&#29992;filestore&#65311;&#22312;environment.rb&#20013;&#25351;&#23450;&#20351;&#29992;&#30340;&lt;strong&gt;store&#27169;&#24335;&lt;/strong&gt;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Support"&gt;ActionController&lt;/span&gt;::&lt;span class="Entity"&gt;Base&lt;/span&gt;.&lt;span class="Entity"&gt;cache_store&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;file_store&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;/path/to/cache/dir&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; 
&lt;/pre&gt;&lt;p&gt;&#21482;&#35201;&#19978;&#38754;&#20004;&#21477;&#35805;&#37117;&#37197;&#32622;&#22909;&#20102;&#65292;&#19979;&#38754;&#23601;&#31616;&#21333;&#30340;&#22312;&#38656;&#35201;cache&#30340;&#22320;&#26041;&#21152;&#20960;&#26465;&#35821;&#21477;&#23601;&#25104;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1&#12289;Fragment cache&lt;/strong&gt;&lt;br /&gt;&#23601;&#26159;&#32531;&#23384;&#19968;&#20010;&#29255;&#27573;&#65292;&#23558;&#38656;&#35201;&#32531;&#23384;&#30340;&#20869;&#23481;&#25918;&#20837;&#19968;&#20010;block&#20013;&#21363;&#21487;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;&amp;lt;&lt;/span&gt;&lt;span class="Keyword"&gt;%&lt;/span&gt; cache &lt;span class="Keyword"&gt;do &lt;/span&gt;&lt;span class="String"&gt;&lt;span class="String"&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="String"&gt;  something to cache&lt;/span&gt;
&lt;span class="String"&gt;&amp;lt;% end %&lt;span class="String"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;span id='more_93'&gt;&lt;/span&gt;&#22914;&#26524;&#35201;expire&#19968;&#20010;&#29255;&#27573;&#21487;&#20197;&#29992;expire_fragment&#26041;&#27861;&#65292;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Entity"&gt;expire_fragment&lt;/span&gt;(&lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;controller&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;articles&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;action&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;list&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;)
&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;2&#12289;Page cache&#21644;Action cache&lt;/strong&gt;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;Article&lt;span class="EntityInheritedClass"&gt; &lt;span class="EntityInheritedClass"&gt;&amp;lt;&lt;/span&gt; AR::Base&lt;/span&gt;&lt;/span&gt;
  before_filter &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;authenticate&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;only&lt;/span&gt; =&amp;gt; [&lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;edit&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;create&lt;/span&gt;]
  caches_page &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;index&lt;/span&gt;
  caches_action &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;edit&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;index&lt;/span&gt;;&lt;span class="Keyword"&gt;end&lt;/span&gt;
  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;edit&lt;/span&gt;;&lt;span class="Keyword"&gt;end&lt;/span&gt;
  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;create&lt;/span&gt;
    expire_page &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;action&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;index&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
    expire_action &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;action&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;edit&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#35980;&#20284;caches_action&#21644;caches_page&#30340;&#21306;&#21035;&#20063;&#23601;&#21482;&#26159;action&#38656;&#35201;request&#32463;&#36807;&#19968;&#27425;rails stack&#65292;&#37027;&#20063;&#23601;&#33021;&#32473;&#35201;cache&#30340;action&#21152;&#28857;filter&#20102;&#65307;&#32780;page&#30340;&#35805;&#23601;&#23436;&#20840;&#19981;&#20250;&#32463;&#36807;rails&#20102;&#65292;&#30452;&#25509;&#23601;&#35775;&#38382;&#38745;&#24577;&#32531;&#23384;&#30340;&#25991;&#20214;&#21435;&#20102;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3&#12289;&#20351;&#29992;Sweeper&#31649;&#29702;cache&lt;/strong&gt;&lt;br /&gt;Swepper&#23601;&#26159;&#19968;&#20010;Observer&#65292;&#20250;&#22312;&#30417;&#35270;&#21040;&#19968;&#20010;&#29305;&#23450;&#30340;Model&#21457;&#29983;&#26576;&#20123;&#29305;&#23450;&#30340;callback&#26102;&#25191;&#34892;&#29305;&#23450;&#30340;&#27963;&#21160;&#65292;&#27604;&#22914;expire&#32531;&#23384;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;ArticleSweeper&lt;span class="EntityInheritedClass"&gt; &lt;span class="EntityInheritedClass"&gt;&amp;lt;&lt;/span&gt; AC::Caching::Sweeper&lt;/span&gt;&lt;/span&gt;
  observe &lt;span class="Variable"&gt;Article&lt;/span&gt;
  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;after_create&lt;/span&gt;
    expire_page &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;controller&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;articles&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;action&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;index&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
    expire_action &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;controller&lt;/span&gt; =&amp;gt;&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt; articles&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;action&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;edit&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
    expire_fragment &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;controller&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;articles&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;action&lt;/span&gt; =&amp;gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;list&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;4&#12289;&#27983;&#35272;&#22120;&#31471;&#30340;&#32531;&#23384;&lt;/strong&gt;&lt;br /&gt;&#36890;&#36807;stale?&#26041;&#27861;&#26469;&#21028;&#26029;Headers&#20013;&#30340;etag&#21644;last_modifiled&#26159;&#21542;&#19982;server&#19978;&#30340;&#19968;&#33268;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;show&lt;/span&gt;
  &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;article&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Article&lt;/span&gt;.&lt;span class="Entity"&gt;find&lt;/span&gt;(params[&lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;id&lt;/span&gt;])
  &lt;span class="Keyword"&gt;if&lt;/span&gt; &lt;span class="Entity"&gt;stale?&lt;/span&gt;(&lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;etag&lt;/span&gt; =&amp;gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;article&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;last_modifiled&lt;/span&gt;=&amp;gt;&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;article&lt;/span&gt;.&lt;span class="Entity"&gt;updated_at&lt;/span&gt;.&lt;span class="Entity"&gt;utc&lt;/span&gt;)
    respond_to &lt;span class="Keyword"&gt;do &lt;/span&gt;|&lt;span class="Variable"&gt;format&lt;/span&gt;|
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
   &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;del datetime="2009-10-29T15:21:22+00:00"&gt;&#28982;&#21518;&#23601;&#26159;memcache&#30456;&#20851;&#30340;&#20102;&#65292;&#26377;&#26102;&#38388;&#20877;&#35760;&#24405;&lt;/del&gt;&lt;/p&gt;&lt;p&gt;&#23436;&#24037;&#65292;&#23601;&#36825;&#20123;&#35201;&#20889;&#30340;&#65292;&#19981;&#26159;guides&#65292;&#20010;&#20154;&#30475;&#30340;&#23567;&#23567;&#31508;&#35760;&#65292;&#19979;&#38754;&#26159;&#20851;&#20110;&#36825;&#26041;&#38754;&#30340;&#24456;&#22909;&#30340;&#25991;&#26723;&#65306;&lt;br /&gt;&lt;a href="http://guides.rubyonrails.org/caching_with_rails.html"&gt;http://guides.rubyonrails.org/caching_with_rails.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://neeraj.name/blog/articles/862-memcached-and-cache_fu"&gt;http://neeraj.name/blog/articles/862-memcached-and-cache_fu&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/memcached/wiki/FAQ"&gt;http://code.google.com/p/memcached/wiki/FAQ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.themomorohoax.com/2009/01/07/using-stale-with-rails-to-return-304-not-modified"&gt;http://www.themomorohoax.com/2009/01/07/using-stale-with-rails-to-return-304-not-modified&lt;/a&gt;&lt;/p&gt;&lt;p&gt;PS&#65306;Rails&#26159;&#19981;&#26159;&#24456;Agile&#65311;&#21704;&#21704;&#65292;Rails&#23398;&#36215;&#26469;Agile&#65292;&#29992;&#36215;&#26469;&#20063;Agile&#12290;&#12290;&#12290;&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Mon, 12 Oct 2009 16:51:57 +0000</pubDate>
      <title>&#23398;&#20064;Ruby on Rails&#30340;&#23567;&#20307;&#20250;</title>
      <link>http://abitno.linpie.com/ruby-on-rails-notes-1</link>
      <guid>http://abitno.linpie.com/ruby-on-rails-notes-1</guid>
      <description>&lt;p&gt;&#36825;&#20960;&#22825;&#19968;&#30452;&#20570;Rails&#24320;&#21457;&#65292;&#30475;&#30340;&#20070;&#36824;&#31639;&#26377;&#29992;&#65292;&#33267;&#23569;&#30693;&#36947;&#26377;&#20160;&#20040;&#19996;&#35199;&#21487;&#20197;&#29992;&#65292;&#34429;&#28982;&#35828;&#19981;&#24590;&#20040;&#20250;&#29992;&#12290;&lt;/p&gt;&lt;p&gt;&#20043;&#21069;&#37117;&#26159;&#22312;&#30475;&#20070;&#65292;&#24182;&#27809;&#26377;&#30495;&#30340;&#20570;&#19996;&#35199;&#65292;&#19968;&#20123;&#24456;&#23567;&#30340;&#38382;&#39064;&#37117;&#20250;&#28010;&#36153;&#26102;&#38388;&#12290;&#27604;&#22914;&lt;strong&gt;Memcached&lt;/strong&gt;&#36825;&#19996;&#35199;&#65292;&#24819;&#24403;&#28982;&#30340;&#35013;&#22909;&#20102;gem memcached&#65292;&#21487;&#36824;&#26159;&#24471;&#21040;&#20010;&#38169;&#35823;&#65306;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;gem_original_require&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;: no such file to load -- memcache
&lt;/pre&gt;&lt;p&gt;&#28982;&#21518;&#23601;google&#21834;google&#65292;&#26102;&#38388;&#23601;&#36825;&#26679;&#19968;&#28857;&#28857;&#28010;&#36153;&#12290;&#20854;&#23454;&#36825;&#20063;&#24618;&#25105;&#26681;&#26412;&#19981;&#30693;&#36947;memcached&#24037;&#20316;&#21407;&#29702;&#65292;&#21482;&#35201;&#31616;&#21333;&#30340;&#23433;&#35013;&#20010;client&#31471;&#30340;gem&#23601;&#33021;&#35299;&#20915;&#65306;&lt;/p&gt;&lt;pre class="twilight"&gt;gem install memcache_client
&lt;/pre&gt;&lt;p&gt;ruby&#20013;&#37027;&#20123;&#26522;&#20030;&#31867;&#22411;&#37117;&#26377;&#24456;&#20016;&#23500;&#30340;&#26041;&#27861;&#65292;&#19981;&#35201;&#21482;&#24819;&#30528;each&#21834;&#20160;&#20040;&#30340;&#65292;&#37027;&#20123;&#33258;&#24049;&#19981;&#24590;&#20040;&#29992;&#30340;inject&#65292;partition&#20160;&#20040;&#30340;&#21151;&#33021;&#24456;&#24378;&#22823;&#30340;&#12290;&lt;strong&gt;&#24403;&#33258;&#24049;&#35273;&#24471;&#26576;&#20010;&#21151;&#33021;&#27604;&#36739;&#19981;&#22909;&#23454;&#29616;&#26102;&#65292;&#22810;&#30475;&#30475;API&#20250;&#24456;&#26377;&#24110;&#21161;&#30340;&lt;/strong&gt;&#65292;&#35828;&#19981;&#20934;&#25105;&#24819;&#30340;&#21151;&#33021;&#22312;API&#20013;&#24050;&#32463;&#20248;&#38597;&#30340;&#23454;&#29616;&#20102;&#12290;&lt;/p&gt;&lt;p&gt;Ruby&#26159;&#24456;&#28789;&#27963;&#30340;&#65292;&#20063;&#26159;&#30456;&#24403;&#21160;&#24577;&#30340;&#65292;&#20294;&#26159;&#25105;&#20889;&#30340;&#20195;&#30721;&#22987;&#32456;&#37117;&#20687;&#26159;Java&#20195;&#30721;&#65292;&#24517;&#39035;&#35201;&#26377;&#24847;&#35782;&#30340;&#25226;&#20195;&#30721;&#20889;&#30340;&#26356;Ruby&#12290;&lt;/p&gt;&lt;p&gt;&#19981;&#35201;&#24819;&#24403;&#28982;&#65292;&#27604;&#22914;&#36825;&#20040;&#20010;&#36171;&#20540;&#35821;&#21477;&lt;/p&gt;&lt;pre class="twilight"&gt;a &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;1&lt;/span&gt;, b &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;span id='more_86'&gt;&lt;/span&gt;&#32467;&#26524;&#30495;&#30340;&#19981;&#26159;a = 1, b =2&#65292;&#32780;&#26159;&lt;/p&gt;&lt;pre class="twilight"&gt;a &lt;span class="Keyword"&gt;=&lt;/span&gt; [&lt;span class="Constant"&gt;1&lt;/span&gt;, &lt;span class="Constant"&gt;2&lt;/span&gt;]
b &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;2&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#36825;&#20063;&#24456;&#22909;&#29702;&#35299;&#20102;&#65292;&#22240;&#20026;ruby&#20013;&#26412;&#26469;&#23601;&#21487;&#20197;&#36825;&#26679;&#21019;&#24314;&#20010;&#25968;&#32452;&lt;/p&gt;&lt;pre class="twilight"&gt;a &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;1&lt;/span&gt;, &lt;span class="Constant"&gt;2&lt;/span&gt;, &lt;span class="Constant"&gt;3&lt;/span&gt;  &lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; a = [1, 2, 3]&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#35201;&#22810;&#27880;&#24847;&#25910;&#38598;&#20123;&#22909;&#29992;&#30340;&#25554;&#20214;&#65292;&#33267;&#23569;&#25226;&#23427;&#20204;&#30340;&#21517;&#23383;&#35760;&#19979;&#26469;&#65292;&#20813;&#24471;&#20197;&#21518;&#24819;&#29992;&#30340;&#26102;&#20505;&#25214;&#19981;&#21040;&#12290;&#27604;&#22914;&#36825;&#20010;&lt;strong&gt;better-edit-in-place&lt;/strong&gt;&#65292;&#26159;&#19968;&#20010;&#33021;&#35753;&#20320;&#28857;&#19968;&#19979;&#25991;&#26412;&#23601;&#21487;&#20197;&#21363;&#26102;&#32534;&#36753;&#30340;plugin&#65292;&#25105;&#24819;&#19981;&#20986;&#24590;&#20040;&#26469;&#25551;&#36848;&#23427;&#30340;&#21151;&#33021;&#26356;&#21512;&#36866;&#65292;&#24403;&#26102;&#24819;&#29992;&#30340;&#26102;&#20505;&#23601;google&#21834;google&#65292;&#26102;&#38388;&#20063;&#23601;&#36825;&#26679;&#28010;&#36153;&#20102;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#25105;&#24819;&#23545;rails&#35828;&#65306;&#20320;&#20182;&#22920;&#30340;&#22826;&#22909;&#29992;&#65281;&#65281;&#65281;&lt;/p&gt;&lt;p&gt;&#20170;&#22825;&#35201;&#26089;&#36215;&#65292;&#21040;&#23398;&#26657;&#20511;&#20960;&#26412;&#20070;&#26469;&#30475;&#12290;&#12290;&#12290;&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Fri, 02 Oct 2009 15:44:50 +0000</pubDate>
      <title>&#23433;&#35013;&#20351;&#29992;Oniguruma&#21644;Ultraviolet</title>
      <link>http://abitno.linpie.com/install-ultraviolet-and-oniguruma</link>
      <guid>http://abitno.linpie.com/install-ultraviolet-and-oniguruma</guid>
      <description>&lt;p&gt;&#35805;&#35828;&#21069;&#38754;&#24819;&#21040;&#29992;Ultraviolet&#26469;&#20570;Rails&#30340;SyntaxHighlighter&#65292;&#36825;&#20010;&#19996;&#35199;&#30495;&#30340;&#24456;&#24378;&#22823;&#65292;&#20351;&#29992;Textmate&#30340;syntax&#25991;&#20214;&#65292;&#25903;&#25345;&#30456;&#24403;&#22810;&#30340;&lt;a href="http://ultraviolet.rubyforge.org/syntax_gallery.xhtml"&gt;&#35821;&#35328;&lt;/a&gt;&#21644;&lt;a href="http://ultraviolet.rubyforge.org/themes.xhtml"&gt;&#20027;&#39064;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#19981;&#36807;&#23427;&#20381;&#36182;Ruby&#26368;&#26032;&#30340;&#27491;&#21017;&#34920;&#36798;&#24335;&#24341;&#25806;&lt;a href="http://www.geocities.jp/kosako3/oniguruma/"&gt;Oniguruma&lt;/a&gt;&#65292;&#34429;&#28982;&#22312;Ruby1.9&#20013;&#26159;&#26631;&#37197;&#65292;&#20294;&#26159;&#25105;&#29616;&#22312;&#29992;&#30340;ruby1.8.7&#65292;&#38656;&#35201;&#33258;&#24049;&#26469;&#23433;&#35013;&#12290;&lt;/p&gt;&lt;p&gt;&#21040;&lt;a href="http://www.geocities.jp/kosako3/oniguruma/"&gt;Oniguruma&#30340;&#23448;&#26041;&lt;/a&gt;&#19979;&#36733;&#30340;onig-5.9.1&#65288;&#19981;&#30693;&#36947;&#26159;&#19981;&#26159;GFW&#30340;&#38382;&#39064;&#65292;&#25105;&#24471;&#29992;&#20195;&#29702;&#25165;&#33021;&#35775;&#38382;&#65292;&#19979;&#36733;&#19981;&#21040;&#30340;&#25214;&#25105;&#35201;&#21834;&#65289;&#65292;&#28982;&#21518;&#19968;&#33324;&#30340;&#36719;&#20214;&#32534;&#35793;&#23433;&#35013;&#36807;&#31243;&#12290;&lt;/p&gt;&lt;p&gt;&#25509;&#19979;&#26469;&#23601;&#26159;&#23433;&#35013;&#19968;&#20123;gems&#20102;&lt;/p&gt;&lt;pre class="twilight"&gt;$ gem install oniguruma textpow ultraviolet
&lt;/pre&gt;&lt;p&gt;&#20855;&#20307;&#30340;&#20351;&#29992;&#20063;&#24456;&#31616;&#21333;&#65292;&lt;a href="http://ultraviolet.rubyforge.org/usage.xhtml"&gt;&#30475;&#23448;&#26041;&#30340;&#23567;demo&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#19981;&#36807;&#23433;&#35013;&#23436;&#26377;&#20010;&#23567;&#38382;&#39064;&#65292;&#24403;&#25105;&#36816;&#34892;uv --help&#26102;&#23601;&#20986;&#29616;&#20102;&#19968;&#29255;&#38169;&#35823;&lt;/p&gt;&lt;pre class="twilight"&gt;/usr/lib/ruby/gems/1.8/gems/oniguruma-1.1.0/lib/oregexp.so: 
libonig.so.2: cannot open shared object file: No such file or directory 
- /usr/lib/ruby/gems/1.8/gems/oniguruma-1.1.0/lib/oregexp.so (LoadError)
&lt;/pre&gt;&lt;p&gt;&lt;span id='more_81'&gt;&lt;/span&gt;ldconfig&#30475;&#19968;&#19979;&lt;/p&gt;&lt;pre class="twilight"&gt;ldconfig -p&lt;span class="Keyword"&gt;|&lt;/span&gt;grep libonig
&lt;/pre&gt;&lt;p&gt;&#26524;&#28982;&#20160;&#20040;&#37117;&#27809;&#26377;&lt;/p&gt;&lt;p&gt;locate&#19979;&#21457;&#29616;libonig.so.2&#22312;/usr/local/lib&#37324;&#65292;&#24403;&#26102;&#23433;&#35013;&#30340;&#26102;&#20505;&#24536;&#35760;&#25351;&#23450;&#36335;&#24452;&#20102;&#12290;&#12290;&#12290;&lt;br /&gt;&#36825;&#20063;&#22909;&#21150;&lt;/p&gt;&lt;pre class="twilight"&gt;echo &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;/usr/local/lib&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="Keyword"&gt;&amp;gt;&amp;gt;&lt;/span&gt; /etc/ld.so.conf
&lt;/pre&gt;&lt;p&gt;&#36825;&#26679;&#23601;&#22909;&#20102;&#65292;&#29992;&#30528;&#24456;&#33298;&#26381;&#65292;&#25928;&#26524;&#20063;&#26159;&#38750;&#24120;&#19981;&#38169;&#30340;&#12290;&#12290;&#12290;&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Thu, 01 Oct 2009 16:33:54 +0000</pubDate>
      <title>Rails&#23548;&#20837;Wordpress&#30340;xml&#22791;&#20221;</title>
      <link>http://abitno.linpie.com/rails-import-wordpress-xml-backup</link>
      <guid>http://abitno.linpie.com/rails-import-wordpress-xml-backup</guid>
      <description>&lt;p&gt;&#26368;&#36817;&#22312;&#29992;rails&#20316;&#19968;&#20010;blog&#31995;&#32479;&#65292;&#19981;&#35201;&#35828;&#25105;&#37325;&#22797;&#21457;&#26126;&#36718;&#23376;&#20160;&#20040;&#30340;&#65292;&#23601;&#20687;&#23398;&#31243;&#24207;&#30340;&#20154;&#19968;&#24320;&#22987;&#37117;&#21916;&#27426;&#23545;&#19990;&#30028;&#35828;&#22768;hello&#19968;&#26679;&#65292;&#23398;rails&#30340;&#25105;&#23601;&#24819;&#24320;&#21457;&#20010;blog&#26469;&#32451;&#25163;&#12290;&lt;/p&gt;&lt;p&gt;&#35805;&#35828;&#24320;&#21457;&#20010;blog&#20063;&#26159;&#30456;&#24403;&#19981;&#23481;&#26131;&#30340;&#65292;&#20043;&#21069;&#34429;&#28982;&#25226;&#12298;Agile Web Development With Rails&#12299;&#32473;&#30475;&#20102;&#23558;&#36817;&#20004;&#36941;&#65292;&#36824;&#30475;&#23436;&#20102;&#12298;Programming Ruby&#12299;&#21644;&#12298;The Ruby Way&#12299;&#65292;&#21487;&#26159;&#30495;&#20316;&#36215;&#19996;&#35199;&#26469;&#23601;&#19981;&#26159;&#37027;&#20040;&#20010;&#20107;&#20102;&#12290;&lt;/p&gt;&lt;p&gt;&#25105;&#20570;&#20010;blog&#26159;&#25171;&#31639;&#33258;&#24049;&#25343;&#26469;&#29992;&#30340;&#65292;&#25152;&#20197;&#20063;&#24819;&#35201;&#25226;&#22312;WP&#19978;&#36825;&#20123;&#25991;&#31456;&#32473;&#23548;&#20837;&#36827;&#21435;&#12290;RSS&#30340;&#20869;&#23481;&#19981;&#22815;&#20840;&#38754;&#65292;&#20063;&#32771;&#34385;&#36807;&#30452;&#25509;&#20174;&#25968;&#25454;&#24211;&#26469;&#23548;&#20837;&#30340;&#65292;&#20877;&#23601;&#26159;&#35299;&#26512;WP&#21518;&#21488;export&#20986;&#30340;xml&#20102;&#12290;&#19981;&#30693;&#36947;&#19968;&#33324;&#30340;&#26041;&#27861;&#26159;&#24590;&#20040;&#20570;&#30340;&#65292;&#25105;&#26159;&#36873;&#25321;&#30340;&#31532;&#19977;&#32773;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#35299;&#26512;xml&#21487;&#20197;&#29992;Ruby&#30340;&lt;strong&gt;&#26631;&#20934;&#24211;REXML&lt;/strong&gt;&#65292;&#19981;&#36807;&#25928;&#29575;&#19981;&#26159;&#19968;&#33324;&#30340;&#20302;&#21834;&#65292;&#24403;&#28982;&#35299;&#26512;&#25105;&#36825;&#31181;&#23567;&#21338;&#23458;&#30340;xml&#26159;&#27809;&#38382;&#39064;&#30340;&#12290;&#26368;&#21518;&#36824;&#26159;&#36873;&#25321;&#20102;&#26368;&#24555;&#30340;&lt;strong&gt;libxml2&#30340;ruby&#32465;&#23450;&lt;/strong&gt;&#65288;&#36825;&#20123;&#37117;&#26159;The Ruby Way&#19978;&#25512;&#33616;&#30340;&#65289;&#12290;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;import&lt;/span&gt;(&lt;span class="Variable"&gt;filename&lt;span class="Variable"&gt;,&lt;/span&gt; &lt;span class="Keyword"&gt;&amp;amp;&lt;/span&gt;block&lt;/span&gt;)
  doc &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Document&lt;/span&gt;.&lt;span class="Entity"&gt;file&lt;/span&gt;(filename)
  doc.&lt;span class="Entity"&gt;find&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;//item[count(content:encoded)=1]&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).&lt;span class="Entity"&gt;each&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;|&lt;span class="Variable"&gt;item&lt;/span&gt;|
    &lt;span class="Keyword"&gt;if&lt;/span&gt; (con &lt;span class="Keyword"&gt;=&lt;/span&gt; item.&lt;span class="Entity"&gt;find_first&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;content:encoded&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).&lt;span class="Entity"&gt;content&lt;/span&gt;).&lt;span class="Entity"&gt;strip&lt;/span&gt;.&lt;span class="Entity"&gt;size&lt;/span&gt; &lt;span class="Keyword"&gt;&amp;gt;&lt;/span&gt; &lt;span class="Constant"&gt;0&lt;/span&gt;
      &lt;span class="Keyword"&gt;yield&lt;/span&gt; item.&lt;span class="Entity"&gt;find_first&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;title&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;).&lt;span class="Entity"&gt;content&lt;/span&gt;, con
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;span id='more_80'&gt;&lt;/span&gt;The Ruby Way&#19978;&#35828;libxml-ruby&#24182;&#19981;&#24456;&#20687;Ruby&#30340;&#39118;&#26684;&#65292;&#19981;&#36807;&#25105;&#27809;&#20160;&#20040;&#24863;&#35273;&#65292;&#20272;&#35745;&#26159;&#33258;&#24049;&#30340;&#20195;&#30721;&#26412;&#26469;&#23601;&#19981;&#26159;Ruby&#39118;&#26684;&#12290;&lt;/p&gt;&lt;p&gt;&#19978;&#38754;&#30340;&#20195;&#30721;&#21482;&#26159;&#31616;&#21333;&#30340;&#21462;&#20102;&#26631;&#39064;&#21644;&#20869;&#23481;&#65292;&#32454;&#33410;&#38382;&#39064;&#23601;&#22810;&#20102;&#21435;&#20102;&#12290;&#21487;&#20197;&#32771;&#34385;&#21442;&#32771;&#19979;WP&#33258;&#24049;&#30340;&#23548;&#20837;&#20989;&#25968;&#65292;&#19981;&#36807;&#25105;&#29616;&#22312;&#36824;&#27809;&#30475;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#23548;&#20837;&#20043;&#21518;&#36824;&#26377;&#20010;&#38382;&#39064;&#23601;&#26159;&lt;strong&gt;&#25991;&#31456;&#20869;&#23481;&#30340;&#26684;&#24335;&#21270;&lt;/strong&gt;&#65292;&#36825;&#30495;&#26159;&#20010;&#20307;&#21147;&#27963;&#21834;&#65292;&#20026;&#20102;&#19982;WP&#20445;&#25345;&#19968;&#33268;&#65292;&#23601;&#21442;&#29031;wp-includes/formatting.php&#37324;&#38754;&#30340;&#20989;&#25968;&#25913;&#20889;&#25104;ruby&#30340;&#65292;&#24635;&#20307;&#25928;&#26524;&#36824;&#26159;&#19981;&#38169;&#30340;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#21478;&#19968;&#20010;&#27604;&#36739;&#22823;&#30340;&#38382;&#39064;&#26159;&#19968;&#20123;&#25554;&#20214;&#20135;&#29983;&#30340;&#20869;&#23481;&#19981;&#33021;&#23637;&#31034;&#20102;&#65292;&#25105;&#26368;&#22312;&#20046;&#30340;&#23601;&#26159;&lt;strong&gt;wp-syntax&#35486;&#27861;&#39640;&#20142;&lt;/strong&gt;&#30340;&#25928;&#26524;&#12290;wp-syntax&#21033;&#29992;&#30340;&#26159;GeSHi&#65292;&#25105;&#24456;&#21916;&#27426;&#23427;&#20135;&#29983;&#30340;&#26174;&#31034;&#20195;&#30721;&#65292;&#19981;&#36807;&#20284;&#20046;&#21482;&#26377;PHP&#29256;&#26412;&#30340;&#12290;&lt;/p&gt;&lt;p&gt;&#28982;&#21518;&#21448;&#25214;&#20102;&#19968;&#20123;Client&#31471;&#30340;javascript&#24211;&#65292;&#24863;&#35273;&#25928;&#26524;&#19981;&#22909;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#26368;&#21518;&#36824;&#26159;&#24819;&#29992;&#24378;&#22823;&#30340;ultraviolet&#65292;&#19981;&#30693;&#36947;&#19968;&#33324;&#37117;&#29992;&#20160;&#20040;&#19996;&#35199;&#12290;&#12290;&#12290;&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Fri, 11 Sep 2009 07:45:20 +0000</pubDate>
      <title>&#20889;&#20102;&#20010;&#23567;&#23567;&#30340;&#32763;&#35793;&#24037;&#20855;</title>
      <link>http://abitno.linpie.com/a-small-translate-tool</link>
      <guid>http://abitno.linpie.com/a-small-translate-tool</guid>
      <description>&lt;p&gt;&#26377;&#26102;&#20505;&#30495;&#30340;&#26159;&#24456;&#38656;&#35201;&#20010;&#32763;&#35793;&#65292;&#29305;&#21035;&#26159;&#20010;&#32654;&#22899;&#32763;&#35793;&#12290;&#12290;&#12290;&#26368;&#36817;&#36825;&#20960;&#22825;&#25105;&#20284;&#20046;&#19968;&#30452;&#27604;&#36739;&#28139;&#33633;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#36825;&#20010;&#19996;&#35199;&#26159;&#29992;ruby&#20889;&#30340;&#65292;&#26159;&#20010;&#22312;&#32447;&#32763;&#35793;&#30340;&#65292;&#29992;&#30340;google&#30340;API&#12290;&#26412;&#26469;&#32771;&#34385;&#30340;&#26159;&#29992;C&#35821;&#35328;&#65292;&#21487;&#26159;&#27809;&#25214;&#21040;&#30456;&#20851;&#36164;&#26009;&#23398;&#20064;&#65292;&#21516;&#26102;&#33258;&#24049;&#26368;&#36817;&#20027;&#35201;&#23398;&#20064;rails&#65292;&#19981;&#24819;&#20877;&#20889;C&#35821;&#35328;&#25226;&#33258;&#24049;&#30340;&#24605;&#32500;&#24324;&#20081;&#20102;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#21457;&#29616;TX&#26377;&#19968;&#20010;&lt;a target="_blank" href="http://imtx.cn/archives/650.html"&gt;&#29992;Python&#23454;&#29616;&#35843;&#29992;Google&#32763;&#35793;&lt;/a&gt;&#65292;&#20182;&#37027;&#26102;&#20889;&#30340;&#26102;&#20505;&#20272;&#35745;google&#36824;&#21482;&#26377;js&#30340;api&#21487;&#20197;&#29992;&#65292;&#19981;&#36807;&#29616;&#22312;google&#24050;&#32463;&#26377;&#20854;&#20182;&#35821;&#35328;&#21487;&#20197;&#35843;&#29992;&#30340;google&#32763;&#35793;API&#20102;&#65292;&#36820;&#22238;&#32080;&#26524;&#26159;&#20010;JSON&#65292;&#20195;&#30721;&#24456;&#31616;&#21333;&#65306;&lt;/p&gt;&lt;pre class="twilight"&gt;
&lt;span class="Keyword"&gt;require&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;net/http&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
connection &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Net&lt;/span&gt;::&lt;span class="Entity"&gt;HTTP&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;( &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;ajax.googleapis.com&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt; )
path&lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;/ajax/services/language/translate?v=1.0&amp;amp;langpair=es|en&amp;amp;q=gustas&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
resp, data &lt;span class="Keyword"&gt;=&lt;/span&gt; connection.&lt;span class="Entity"&gt;get&lt;/span&gt;(path)
&lt;/pre&gt;&lt;p&gt;&#23558;&#20250;&#36820;&#22238;&#36825;&#26679;&#19968;&#20010;json&lt;/p&gt;&lt;pre class="twilight"&gt;
{&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;responseData&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: {&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;translatedText&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;:&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;likes&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;}, 
&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;responseDetails&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class="Constant"&gt;null&lt;/span&gt;, 
&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;responseStatus&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;: &lt;span class="Constant"&gt;200&lt;/span&gt;}
&lt;/pre&gt;&lt;p&gt;&lt;span id='more_74'&gt;&lt;/span&gt;&#24590;&#20040;&#26679;&#65292;&#38750;&#24120;&#26041;&#20415;&#65292;&#20854;&#23454;&#36825;&#26679;&#23601;&#31639;&#26159;&#20889;&#23436;&#20102;&#12290;&#12290;&#12290;&#19981;&#36807;&#20026;&#20102;&#34920;&#29616;&#20986;&#36825;&#26159;&#19968;&#20010;&#23567;&#24037;&#20855;&#65292;&#25105;&#36824;&#26159;&#27515;&#19981;&#35201;&#33080;&#30340;&#32473;&#21152;&#20102;&#24456;&#22810;&#33039;&#20195;&#30721;&#65292;&#26377;&#20852;&#36259;&#30340;&#21487;&#20197;&#30475;&#30475;&#65292;&#30495;&#24515;&#30340;&#27426;&#36814;&#26377;&#20154;&#26469;&#25351;&#23548;&#65292;&lt;/p&gt;&lt;pre class="twilight"&gt;
&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;!/usr/bin/ruby&lt;/span&gt;

&lt;span class="Keyword"&gt;require&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;net/http&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="Keyword"&gt;require&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;open-uri&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;GoogleDictionary&lt;/span&gt;
  &lt;span class="Variable"&gt;HOST&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;ajax.googleapis.com&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
  &lt;span class="Variable"&gt;SERVICE_URL&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;/ajax/services/language/translate?v=1.0&amp;amp;&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;

  &lt;span class="Keyword"&gt;attr_accessor&lt;/span&gt; &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;from&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;to&lt;/span&gt;
  &lt;span class="Keyword"&gt;attr_reader&lt;/span&gt; &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;data&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;initialize&lt;/span&gt;(&lt;span class="Variable"&gt;&lt;/span&gt;)
    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;connection&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Net&lt;/span&gt;::&lt;span class="Entity"&gt;HTTP&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;(&lt;span class="Variable"&gt;HOST&lt;/span&gt;)
    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;from&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;nil&lt;/span&gt;
    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;to&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;en&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;translate&lt;/span&gt;(&lt;span class="Variable"&gt;query_data &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;)
    path &lt;span class="Keyword"&gt;=&lt;/span&gt;&lt;span class="Variable"&gt;URI&lt;/span&gt;.&lt;span class="Entity"&gt;escape&lt;/span&gt;(&lt;span class="Variable"&gt;SERVICE_URL&lt;/span&gt; &lt;span class="Keyword"&gt;+&lt;/span&gt; 
                     &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;q=&lt;span class="StringEmbeddedSource"&gt;&lt;span class="StringEmbeddedSource"&gt;#{&lt;/span&gt;query_data&lt;span class="StringEmbeddedSource"&gt;}&lt;/span&gt;&lt;/span&gt;&amp;amp;langpair=&lt;span class="StringEmbeddedSource"&gt;&lt;span class="StringEmbeddedSource"&gt;#{&lt;/span&gt;&lt;span class="StringVariable"&gt;&lt;span class="StringVariable"&gt;@&lt;/span&gt;from&lt;/span&gt;&lt;span class="StringEmbeddedSource"&gt;}&lt;/span&gt;&lt;/span&gt;|&lt;span class="StringEmbeddedSource"&gt;&lt;span class="StringEmbeddedSource"&gt;#{&lt;/span&gt;&lt;span class="StringVariable"&gt;&lt;span class="StringVariable"&gt;@&lt;/span&gt;to&lt;/span&gt;&lt;span class="StringEmbeddedSource"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
    resp, data &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;connection&lt;/span&gt;.&lt;span class="Entity"&gt;get&lt;/span&gt;(path)
    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;data&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; eval data.&lt;span class="Entity"&gt;gsub!&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;:&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;=&amp;gt;&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;).&lt;span class="Entity"&gt;gsub!&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;null&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;nil&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;)
  &lt;span class="Keyword"&gt;end&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;result&lt;/span&gt;
    &lt;span class="Keyword"&gt;if&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;data&lt;/span&gt;[&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;responseStatus&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;] &lt;span class="Keyword"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;data&lt;/span&gt;[&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;responseStatus&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;] &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="Constant"&gt;200&lt;/span&gt;
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;from&lt;/span&gt; &lt;span class="Keyword"&gt;||=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;data&lt;/span&gt;[&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;responseData&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;][&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;detectedSourceLanguage&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;]
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;data&lt;/span&gt;[&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;responseData&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;][&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;translatedText&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;]
    &lt;span class="Keyword"&gt;else&lt;/span&gt;
      &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;MESSAGE: ERROR DETECTED !!!&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;

d &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;GoogleDictionary&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;

&lt;span class="Keyword"&gt;case&lt;/span&gt; len &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;ARGV&lt;/span&gt;.&lt;span class="Entity"&gt;size&lt;/span&gt;
&lt;span class="Keyword"&gt;when&lt;/span&gt; &lt;span class="Constant"&gt;0&lt;/span&gt;
&lt;span class="Keyword"&gt;when&lt;/span&gt; &lt;span class="Constant"&gt;1&lt;/span&gt;, &lt;span class="Constant"&gt;2&lt;/span&gt;
  query_data &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;ARGV&lt;/span&gt;[&lt;span class="Constant"&gt;0&lt;/span&gt;]
&lt;span class="Keyword"&gt;else&lt;/span&gt;
  query_data &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;ARGV&lt;/span&gt;[&lt;span class="Constant"&gt;0&lt;/span&gt;]
  &lt;span class="Variable"&gt;ARGV&lt;/span&gt;[&lt;span class="Constant"&gt;1&lt;/span&gt;, len&lt;span class="Keyword"&gt;-&lt;/span&gt;&lt;span class="Constant"&gt;2&lt;/span&gt;].&lt;span class="Entity"&gt;each_with_index&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;|&lt;span class="Variable"&gt;v&lt;/span&gt;, &lt;span class="Variable"&gt;i&lt;/span&gt;|
    &lt;span class="Keyword"&gt;case&lt;/span&gt; v
    &lt;span class="Keyword"&gt;when&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;from&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;f&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;-f&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
      d.&lt;span class="Entity"&gt;from&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;ARGV&lt;/span&gt;[i&lt;span class="Keyword"&gt;+&lt;/span&gt;&lt;span class="Constant"&gt;2&lt;/span&gt;]
    &lt;span class="Keyword"&gt;when&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;to&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;t&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;-t&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
      d.&lt;span class="Entity"&gt;to&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;ARGV&lt;/span&gt;[i&lt;span class="Keyword"&gt;+&lt;/span&gt;&lt;span class="Constant"&gt;2&lt;/span&gt;]
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;

&lt;span class="Keyword"&gt;if&lt;/span&gt; query_data
  d.&lt;span class="Entity"&gt;translate&lt;/span&gt; query_data
  puts d.&lt;span class="Entity"&gt;result&lt;/span&gt;
  
  puts &lt;span class="Variable"&gt;URI&lt;/span&gt;.&lt;span class="Entity"&gt;escape&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;http://www.google.com/dictionary?aq=f&amp;amp;q=&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="Keyword"&gt;+&lt;/span&gt;
    &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;span class="StringEmbeddedSource"&gt;&lt;span class="StringEmbeddedSource"&gt;#{&lt;/span&gt;query_data&lt;span class="StringEmbeddedSource"&gt;}&lt;/span&gt;&lt;/span&gt;&amp;amp;langpair=&lt;span class="StringEmbeddedSource"&gt;&lt;span class="StringEmbeddedSource"&gt;#{&lt;/span&gt;d&lt;span class="StringEmbeddedSource"&gt;&lt;span class="StringEmbeddedSource"&gt;.&lt;/span&gt;&lt;span class="Entity"&gt;from&lt;/span&gt;&lt;/span&gt;&lt;span class="StringEmbeddedSource"&gt;}&lt;/span&gt;&lt;/span&gt;|&lt;span class="StringEmbeddedSource"&gt;&lt;span class="StringEmbeddedSource"&gt;#{&lt;/span&gt;d&lt;span class="StringEmbeddedSource"&gt;&lt;span class="StringEmbeddedSource"&gt;.&lt;/span&gt;&lt;span class="Entity"&gt;to&lt;/span&gt;&lt;/span&gt;&lt;span class="StringEmbeddedSource"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; &lt;span class="Keyword"&gt;if&lt;/span&gt; &lt;span class="Variable"&gt;ARGV&lt;/span&gt;[&lt;span class="Keyword"&gt;-&lt;/span&gt;&lt;span class="Constant"&gt;1&lt;/span&gt;] &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;d&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;span class="Keyword"&gt;else&lt;/span&gt;
  puts &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;MESSAGE: NO WORDS TO TRANSLATE !!!&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#35828;&#19968;&#19979;&#36825;&#20010;&#19996;&#35199;&#30340;&#29992;&#27861;&#65292;&#25226;&#23427;&#20445;&#23384;&#20026;&#19968;&#20010;&#25991;&#20214;translate.rb&#65292;&#28982;&#21518;&#23601;&#32473;&#23427;&#25191;&#34892;&#26435;&#38480;&lt;/p&gt;&lt;pre class="twilight"&gt;chmod +x translate.rb
&lt;/pre&gt;&lt;p&gt;&#20026;&#20102;&#33258;&#24049;&#20351;&#29992;&#19978;&#30340;&#26041;&#20415;&#65292;&#22312;~/.bashrc&#20013;&#21152;&#20004;&#20010;alias&lt;/p&gt;&lt;pre class="twilight"&gt;alias translate=&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;/path/to/translate.rb&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
alias t=&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;translate&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;1&#12289;&#40664;&#35748;&#30340;&#24773;&#20917;&#19979;&#26159;&#33258;&#21160;&#26816;&#27979;&#21407;&#26469;&#30340;&#35821;&#35328;&#65292;&#28982;&#21518;&#32763;&#35793;&#25104;&#33521;&#35486;&lt;/p&gt;&lt;pre class="twilight"&gt;
[mydream@archlinux &lt;span class="Keyword"&gt;~&lt;/span&gt;]$ translate &#25105;&#29233;Linux
I love Linux
&lt;/pre&gt;&lt;p&gt;2&#12289;&#20063;&#21487;&#20197;&#25351;&#23450;&#32763;&#35793;&#25104;&#20854;&#20182;&#35821;&#35328;&lt;/p&gt;&lt;pre class="twilight"&gt;
[mydream@archlinux &lt;span class="Keyword"&gt;~&lt;/span&gt;]$ translate &#25105;&#29233;Linux to ja
&#31169;&#12399;&#12289;Linux&#12398;&#24859;
&lt;/pre&gt;&lt;p&gt;3&#12289;&#36824;&#21487;&#20197;&#25351;&#23450;&#28304;&#35821;&#35328;&lt;/p&gt;&lt;pre class="twilight"&gt;
[mydream@archlinux &lt;span class="Keyword"&gt;~&lt;/span&gt;]$ translate &#25105;&#29233;Linux from zh to ko
&#45212; &#47532;&#45573;&#49828;&#47484; &#49324;&#46993;
&lt;/pre&gt;&lt;p&gt;4&#12289;&#21478;&#22806;&#22312;&#26368;&#21518;&#21152;&#19968;&#20010;&#21442;&#25968;d&#65292;&#20195;&#34920;dictionary&#65292;&#21487;&#20197;&#21516;&#26102;&#29983;&#25104;&#19968;&#20010;&#21040;google dictionary&#30340;&#26597;&#35810;&#38142;&#25509;&#65288;&#27880;&#24847;google&#30340;dictionary&#21644;translate&#19981;&#26159;&#21516;&#19968;&#20010;&#19996;&#35199;&#65289;&#65292;&#21487;&#20197;&#28857;&#24320;&#23427;&#22312;&#32593;&#39029;&#19978;&#26597;&#30475;&#35443;&#32048;&#24773;&#20917;&#65292;&#21253;&#25324;&#21457;&#38899;&#20160;&#20040;&#30340;&#65306;&lt;/p&gt;&lt;pre class="twilight"&gt;
[mydream@archlinux &lt;span class="Keyword"&gt;~&lt;/span&gt;]$ t internationalization f en t zh d
&#22269;&#38469;&#21270;
http://www.google.com/dictionary?aq=f&lt;span class="Keyword"&gt;&amp;amp;&lt;/span&gt;q=internationalization&lt;span class="Keyword"&gt;&amp;amp;&lt;/span&gt;langpair=en%7Czh
&lt;/pre&gt;&lt;p&gt;5&#12289;&#22312;4&#20013;&#20351;&#29992;&#30340;&#21629;&#20196;&#21644;&#21442;&#25968;&#37117;&#26159;translate&#65292;from&#21644;to&#30340;&#39318;&#23383;&#27597;&#65292;&#36825;&#26679;&#20351;&#29992;&#36215;&#26469;&#20854;&#23454;&#36824;&#26159;&#38750;&#24120;&#19981;&#38169;&#30340;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#23567;&#23567;&#25552;&#31034;&#65306;&#32473;&#33258;&#24049;&#30340;&#32456;&#31471;&#21152;&#20010;&#24555;&#25463;&#38190;&#65292;&#36825;&#26679;&#20250;&#27604;&#36739;&#26041;&#20415;&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Mon, 24 Aug 2009 14:47:52 +0000</pubDate>
      <title>Glade3&amp;Ruby&amp;GtkBuilder&#23567;&#31034;&#20363;</title>
      <link>http://abitno.linpie.com/glade3-ruby-gtkbuilder-sample</link>
      <guid>http://abitno.linpie.com/glade3-ruby-gtkbuilder-sample</guid>
      <description>&lt;p&gt;&#36825;&#31687;&#25991;&#31456;&#20027;&#35201;&#20869;&#23481;&#65306;&#39318;&#20808;&#36890;&#36807;Glade3&#30340;GtkBuilder&#24341;&#25806;&#35774;&#35745;&#22909;&#31243;&#24207;&#30340;GTK&#30028;&#38754;&#65292;&#28982;&#21518;&#22312;Ruby&#20195;&#30721;&#20013;&#35843;&#29992;&#36825;&#20010;glade&#25991;&#20214;&#26469;&#36827;&#34892;GTK+&#31243;&#24207;&#35774;&#35745;&#65292;&#26368;&#32066;&#32080;&#26524;&#26159;&#20010;&#23567;&#23567;&#30340;&#35745;&#31639;&#22120;&#12290;&lt;/p&gt;&lt;p&gt;&lt;img src="http://abitno.linpie.com/system/files/2010/1/66/original/calculate-of-abito-linpie-com.png?1263741976" alt="calculate-of-abito-linpie-com" title="calculate-of-abito-linpie-com" width="304" height="294" class="alignright size-full wp-image-1591" /&gt;&lt;br /&gt;&#21491;&#36793;&#37027;&#20010;&#23601;&#26159;&#26368;&#32066;&#25928;&#26524;&#22270;&#65292;&#26679;&#23376;&#36824;&#31639;&#19981;&#38169;&#12290;&lt;/p&gt;&lt;p&gt;ABitNo&#24320;&#22987;&#21872;&#21990;&#65292;&#19981;&#21916;&#27426;&#21872;&#21990;&#30340;&lt;a href="http://abitno.linpie.com/glade3-ruby-gtkbuilder-sample.html#code"&gt;&#21487;&#20197;&#30452;&#25509;&#21040;&#21518;&#38754;&#30475;&#20195;&#30721;&lt;/a&gt;&#12290;&lt;/p&gt;&lt;p&gt;&#20854;&#23454;&#20107;&#24773;&#26159;&#30001;&#20110;ABitNo&#36825;&#20004;&#22825;&#32473;&#33258;&#24049;&#25918;&#20551;&#20241;&#24687;&#65292;&#20170;&#22825;&#19979;&#21320;&#37266;&#26469;&#21518;&#21457;&#29616;&#27809;&#20160;&#20040;&#19996;&#35199;&#35201;&#20570;&#23601;&#20889;&#20102;&#36825;&#20040;&#20010;&#19996;&#35199;&#12290;&#20195;&#30721;&#24456;&#31616;&#38475;&#65292;&#19981;&#36807;&#21151;&#33021;&#32771;&#34385;&#30340;&#36824;&#31639;&#26159;&#21608;&#20840;&#30340;&#65292;&#24322;&#24120;&#20063;&#24212;&#35813;&#37117;&#22788;&#29702;&#20102;&#65292;&#21040;&#26368;&#21518;&#30475;&#19968;&#19979;&#20195;&#30721;&#23601;&#20960;&#21313;&#34892;&#65292;Ruby&#26524;&#28982;&#26159;&#23545;Programmer&#30456;&#24403;&#21451;&#22909;&#12290;&lt;/p&gt;&lt;p&gt;&#22914;&#26524;&#29992;C&#25110;&#32773;Java&#20160;&#20040;&#30340;&#26469;&#20889;&#30340;&#35805;&#65292;&#19981;&#32771;&#34385;&#30028;&#38754;&#22240;&#32032;&#65292;&#20195;&#30721;&#20063;&#20250;&#22810;&#20986;&#19981;&#27490;&#20960;&#21313;&#34892;&#26469;&#12290;&#22914;&#26524;&#26377;&#29275;&#20154;&#27426;&#36814;&#26469;&#37145;&#35270;&#25105;&#65292;&#25945;&#32946;ABitNo&#19968;&#19979;&#12290;&lt;/p&gt;&lt;p&gt;&lt;span id='more_70'&gt;&lt;/span&gt;&#36825;&#20165;&#20165;&#26159;ABitNo&#33258;&#24049;&#30340;&#19968;&#20010;&#31616;&#21333;&#23398;&#20064;&#36807;&#31243;&#32780;&#24050;&#65292;&#21478;&#22806;&#36824;&#21487;&#20197;&#30475;&#19968;&#19979;ABitNo&#20043;&#21069;&#20889;&#30340;C&#35821;&#35328;Glade3&#21644;GTK&#32534;&#31243;&#30340;&#20837;&#38376;&#25991;&#26723;&lt;a href="http://abitno.linpie.com/glade-3-gtk-2-begin.html"&gt;http://abitno.linpie.com/glade-3-gtk-2-begin.html&lt;/a&gt;&lt;br /&gt;Ruby&#21644;GTK&#31243;&#24207;&#35774;&#35745;&#25945;&#31243;&lt;a href="http://www.zetcode.com/tutorials/rubygtktutorial/"&gt;http://www.zetcode.com/tutorials/rubygtktutorial/&lt;/a&gt;&lt;br /&gt;GTK+&#31243;&#24207;&#35774;&#35745;&#25945;&#31243;&lt;a href="http://www.zetcode.com/tutorials/gtktutorial/"&gt;http://www.zetcode.com/tutorials/gtktutorial/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span id="code"&gt;&#19979;&#38754;&#21015;&#20986;&#30340;&#26159;Ruby&#25991;&#20214;&#20195;&#30721;&lt;/span&gt;&lt;/p&gt;&lt;pre class="twilight"&gt;
&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;!/usr/bin/ruby&lt;/span&gt;
&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;$&lt;/span&gt;KCODE&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;U&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="Keyword"&gt;require&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;gtk2&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;

&lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;Calculate&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;initialize&lt;/span&gt;
    &lt;span class="Support"&gt;Gtk&lt;/span&gt;.&lt;span class="Entity"&gt;init&lt;/span&gt;

    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;builder&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Gtk&lt;/span&gt;::&lt;span class="Entity"&gt;Builder&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;
    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;builder&lt;/span&gt;.&lt;span class="Entity"&gt;add_from_file&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;calculate.glade&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;)

    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;window&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;builder&lt;/span&gt;.&lt;span class="Entity"&gt;get_object&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;window&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;)
    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;window&lt;/span&gt;.&lt;span class="Entity"&gt;signal_connect&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;destroy&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) { &lt;span class="Support"&gt;Gtk&lt;/span&gt;.&lt;span class="Entity"&gt;main_quit&lt;/span&gt; }

    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;builder&lt;/span&gt;.&lt;span class="Entity"&gt;get_object&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;entry&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;)

    &lt;span class="Entity"&gt;get_button_exe_cmd&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;button_result&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;) &lt;span class="Keyword"&gt;do&lt;/span&gt;
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt;.&lt;span class="Entity"&gt;text&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Entity"&gt;calculate&lt;/span&gt;(&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt;.&lt;span class="Entity"&gt;text&lt;/span&gt;).&lt;span class="Entity"&gt;to_s&lt;/span&gt;
    &lt;span class="Keyword"&gt;end&lt;/span&gt;

    &lt;span class="Entity"&gt;get_button_exe_cmd&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;button_clear&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;) &lt;span class="Keyword"&gt;do&lt;/span&gt;
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt;.&lt;span class="Entity"&gt;text&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;0&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
    &lt;span class="Keyword"&gt;end&lt;/span&gt;

    &lt;span class="Entity"&gt;get_button_exe_cmd&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;button_backspace&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;) &lt;span class="Keyword"&gt;do&lt;/span&gt;
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt;.&lt;span class="Entity"&gt;text&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt;.&lt;span class="Entity"&gt;text&lt;/span&gt;.&lt;span class="Entity"&gt;chop&lt;/span&gt;
    &lt;span class="Keyword"&gt;end&lt;/span&gt;

    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;builder&lt;/span&gt;.&lt;span class="Entity"&gt;objects&lt;/span&gt;.&lt;span class="Entity"&gt;each&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;|&lt;span class="Variable"&gt;o&lt;/span&gt;|
      o.&lt;span class="Entity"&gt;signal_connect&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;clicked&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;) {
        &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt;.&lt;span class="Entity"&gt;text&lt;/span&gt;&lt;span class="Keyword"&gt;=&lt;/span&gt;&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt;.&lt;span class="Entity"&gt;text&lt;/span&gt; &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;0&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="Keyword"&gt;?&lt;/span&gt; o.&lt;span class="Entity"&gt;label&lt;/span&gt; : &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;entry&lt;/span&gt;.&lt;span class="Entity"&gt;text&lt;/span&gt;&lt;span class="Keyword"&gt;&amp;lt;&amp;lt;&lt;/span&gt; o.&lt;span class="Entity"&gt;label&lt;/span&gt;
      } &lt;span class="Keyword"&gt;if&lt;/span&gt;((o &lt;span class="Keyword"&gt;!=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;button_result&lt;/span&gt;) &lt;span class="Keyword"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
          (o &lt;span class="Keyword"&gt;!=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;button_clear&lt;/span&gt;) &lt;span class="Keyword"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
          (o &lt;span class="Keyword"&gt;!=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;button_backspace&lt;/span&gt;) &lt;span class="Keyword"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
          (o.&lt;span class="Entity"&gt;kind_of?&lt;/span&gt; &lt;span class="Support"&gt;Gtk&lt;/span&gt;::&lt;span class="Entity"&gt;Button&lt;/span&gt;))
    &lt;span class="Keyword"&gt;end&lt;/span&gt;

    &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;window&lt;/span&gt;.&lt;span class="Entity"&gt;show_all&lt;/span&gt;
    &lt;span class="Support"&gt;Gtk&lt;/span&gt;.&lt;span class="Entity"&gt;main&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;

  &lt;span class="Keyword"&gt;private&lt;/span&gt;
  &lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;Stack&lt;/span&gt;
    &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;initialize&lt;/span&gt;
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;arr&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; []
    &lt;span class="Keyword"&gt;end&lt;/span&gt;

    &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;push&lt;/span&gt;(&lt;span class="Variable"&gt;x&lt;/span&gt;)
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;arr&lt;/span&gt; &lt;span class="Keyword"&gt;&amp;lt;&amp;lt;&lt;/span&gt; x
    &lt;span class="Keyword"&gt;end&lt;/span&gt;

    &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;pop&lt;/span&gt;
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;arr&lt;/span&gt;.&lt;span class="Entity"&gt;shift&lt;/span&gt;
    &lt;span class="Keyword"&gt;end&lt;/span&gt;

    &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;empty?&lt;/span&gt;
      &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;arr&lt;/span&gt;.&lt;span class="Entity"&gt;empty?&lt;/span&gt;
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;check_parentheses&lt;/span&gt;(&lt;span class="Variable"&gt;str&lt;/span&gt;)
    stack &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Stack&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;
    str.&lt;span class="Entity"&gt;each_char&lt;/span&gt; &lt;span class="Keyword"&gt;do &lt;/span&gt;|&lt;span class="Variable"&gt;chr&lt;/span&gt;|
      stack.&lt;span class="Entity"&gt;push&lt;/span&gt;(chr) &lt;span class="Keyword"&gt;if&lt;/span&gt; chr &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;(&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
      &lt;span class="Keyword"&gt;if&lt;/span&gt; chr &lt;span class="Keyword"&gt;==&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;)&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
        &lt;span class="Keyword"&gt;return&lt;/span&gt; &lt;span class="Constant"&gt;false&lt;/span&gt; &lt;span class="Keyword"&gt;if&lt;/span&gt; stack.&lt;span class="Entity"&gt;empty?&lt;/span&gt;
        stack.&lt;span class="Entity"&gt;pop&lt;/span&gt;
      &lt;span class="Keyword"&gt;end&lt;/span&gt;
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
    stack.&lt;span class="Entity"&gt;empty?&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;calculate&lt;/span&gt;(&lt;span class="Variable"&gt;str&lt;/span&gt;)
    num &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;[&lt;/span&gt;+-&lt;span class="StringRegexp"&gt;]&lt;/span&gt;&lt;/span&gt;?&lt;span class="StringRegexpSpecial"&gt;\d&lt;/span&gt;+&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;(&lt;/span&gt;&lt;span class="StringRegexpSpecial"&gt;\.&lt;/span&gt;&lt;span class="StringRegexpSpecial"&gt;\d&lt;/span&gt;+&lt;span class="StringRegexp"&gt;)&lt;/span&gt;&lt;/span&gt;?&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;(&lt;/span&gt;e&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;[&lt;/span&gt;+-&lt;span class="StringRegexp"&gt;]&lt;/span&gt;&lt;/span&gt;?&lt;span class="StringRegexpSpecial"&gt;\d&lt;/span&gt;+&lt;span class="StringRegexp"&gt;)&lt;/span&gt;&lt;/span&gt;?&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;/&lt;/span&gt;&lt;/span&gt;
    reg &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexp"&gt;^&lt;span class="StringRegexpSpecial"&gt;&lt;span class="StringRegexpSpecial"&gt;#{&lt;/span&gt;num&lt;span class="StringRegexpSpecial"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;(&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;[&lt;/span&gt;*+-&lt;span class="StringRegexpSpecial"&gt;\/&lt;/span&gt;&lt;span class="StringRegexp"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexpSpecial"&gt;&lt;span class="StringRegexpSpecial"&gt;#{&lt;/span&gt;num&lt;span class="StringRegexpSpecial"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexp"&gt;)&lt;/span&gt;&lt;/span&gt;*$&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;/&lt;/span&gt;&lt;/span&gt;

    &lt;span class="Keyword"&gt;if&lt;/span&gt;(&lt;span class="Entity"&gt;check_parentheses&lt;/span&gt;(str) &lt;span class="Keyword"&gt;&amp;amp;&amp;amp;&lt;/span&gt; (str.&lt;span class="Entity"&gt;gsub&lt;/span&gt;(&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexpSpecial"&gt;\(&lt;/span&gt;|&lt;span class="StringRegexpSpecial"&gt;\)&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;/&lt;/span&gt;&lt;/span&gt;,&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;) &lt;span class="Keyword"&gt;=~&lt;/span&gt; reg))
      str.&lt;span class="Entity"&gt;gsub!&lt;/span&gt;(&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexpSpecial"&gt;\/&lt;/span&gt;&lt;span class="StringRegexpSpecial"&gt;\d&lt;/span&gt;+&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;(&lt;/span&gt;?!&lt;span class="StringRegexpSpecial"&gt;\.&lt;/span&gt;&lt;span class="StringRegexp"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="StringRegexp"&gt;&lt;span class="StringRegexp"&gt;/&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;\0&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt; &lt;span class="Keyword"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;.0&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;)
      &lt;span class="Entity"&gt;eval&lt;/span&gt;(str.&lt;span class="Entity"&gt;strip&lt;/span&gt;)
    &lt;span class="Keyword"&gt;else&lt;/span&gt;
      &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;Invalid expression&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
    &lt;span class="Keyword"&gt;end&lt;/span&gt;
  &lt;span class="Keyword"&gt;rescue&lt;/span&gt; &lt;span class="Variable"&gt;Exception&lt;/span&gt; =&amp;gt; err
    puts err
    &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;Unknown Exception&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
  &lt;span class="Keyword"&gt;end&lt;/span&gt;

  &lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;get_button_exe_cmd&lt;/span&gt;(&lt;span class="Variable"&gt;name&lt;span class="Variable"&gt;,&lt;/span&gt; &lt;span class="Keyword"&gt;&amp;amp;&lt;/span&gt;cmd&lt;/span&gt;)
    button &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;builder&lt;/span&gt;.&lt;span class="Entity"&gt;get_object&lt;/span&gt;(name)
    button.&lt;span class="Entity"&gt;signal_connect&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;clicked&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class="Keyword"&gt;&amp;amp;&lt;/span&gt;cmd)
    &lt;span class="Entity"&gt;instance_variable_set&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;@&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class="Keyword"&gt;&amp;lt;&amp;lt;&lt;/span&gt;name, button)
  &lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;

&lt;span class="Support"&gt;Calculate&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#22914;&#26524;&#26576;&#20010;&#20154;&#35201;&#23398;&#20064;Ruby&#30340;GTK&#32534;&#31243;&#65292;&#37027;&#36825;&#20010;&#20154;&#23601;&#19968;&#33324;&#19981;&#20250;&#26159;&#21018;&#23398;&#32534;&#31243;&#30340;&#65292;&#19981;&#30693;&#36947;&#36825;&#31181;&#24863;&#35273;&#23545;&#19981;&#23545;&#65292;&#20284;&#20046;&#27809;&#26377;&#21738;&#20010;&#20154;&#26159;&#20174;Ruby&#24320;&#22987;&#23398;&#32534;&#31243;&#30340;&#21543;&#12290;&#25152;&#20197;&#21602;&#65292;&#23601;&#30452;&#25509;&#25226;&#20195;&#30721;&#32473;&#21015;&#20986;&#26469;&#20102;&#65292;&#27809;&#26377;&#20889;&#27880;&#37322;&#65292;&#20027;&#35201;&#26159;ABitNo&#23454;&#22312;&#24456;&#25042;&#12290;&lt;/p&gt;&lt;p&gt;&#19981;&#36807;&#36824;&#26159;&#35201;&#35828;&#19968;&#19979;&#20854;&#20013;&#30340;&#19968;&#20123;&#38382;&#39064;&#65292;&#25105;&#39318;&#20808;&#26159;&#29992;&#19968;&#20010;&#31616;&#21333;&#30340;Stack&#26469;&#20445;&#35777;&#25324;&#21495;&#27809;&#26377;&#21305;&#37197;&#38169;&#35823;&#65292;&#28982;&#21518;&#29992;&#19968;&#20010;&#27491;&#21017;&#34920;&#36798;&#24335;&#20445;&#35777;&#36755;&#20837;&#30340;&#26159;&#21512;&#27861;&#30340;&#31639;&#24335;&#65292;&#19981;&#36807;&#36825;&#20010;Reg&#26377;&#20010;&#38382;&#39064;&#25105;&#19981;&#26126;&#30333;&#65292;&#23601;&#26159;&#20687;&lt;strong&gt;6.8.9&#36825;&#26679;&#30340;&#25968;&#23383;&lt;/strong&gt;&#31455;&#28982;&#36807;&#28388;&#19981;&#25481;&#65292;&#20294;&#26159;&#25105;&#22914;&#26524;&#30452;&#25509;&#25226;num&#37027;&#20010;&#34920;&#36798;&#24335;&#20889;&#20837;&#21040;reg&#37324;&#30340;&#35805;&#23601;&#19981;&#20250;&#20986;&#36825;&#20010;&#38382;&#39064;&#65292;&#24076;&#26395;&#26377;&#20154;&#25351;&#25945;&#12290;&lt;/p&gt;&lt;p&gt;&#33267;&#20110;Glade&#26041;&#38754;&#65292;&#26159;&#29992;&#30340;GtkBuilder&#65292;&#32780;&#19981;&#26159;&#24050;&#32463;&#36807;&#26102;&#30340;Libglade&#26684;&#24335;&#65292;google&#20102;&#19968;&#19979;&#27809;&#21457;&#29616;&#20851;&#20110;Ruby&#21644;GtkBuilder&#26041;&#38754;&#30340;&#36164;&#26009;&#65292;&#25152;&#20197;&#25165;&#24819;&#20889;&#36825;&#31687;&#25991;&#31456;&#30340;&#12290;&lt;/p&gt;&lt;p&gt;&#37027;&#20010;&#29992;&#26469;&#36827;&#34892;&#20449;&#21495;&#22788;&#29702;&#30340;get_button_exe_cmd&#26041;&#27861;&#20027;&#35201;&#26159;&#20026;&#20102;&#20445;&#35777;&#20195;&#30721;&#30340;&#31616;&#27905;&#30828;&#25277;&#20986;&#26469;&#30340;&#65292;&#21457;&#29616;&#20063;&#27809;&#31616;&#21270;&#20160;&#20040;&#19996;&#35199;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#19981;&#22810;&#35828;&#20102;&#65292;&#26377;&#20154;&#24895;&#24847;&#23398;&#20064;&#21487;&#20197;&#29992;glade&#25353;&#29031;&#19978;&#38754;&#30340;&#26679;&#24335;&#35774;&#35745;&#20010;&#30028;&#38754;&#65292;&#25226;&#37096;&#20214;&#30340;name&#20889;&#23545;&#23601;&#25104;&#20102;&#12290;&#12290;&#12290;&lt;/p&gt;&lt;p&gt;&#26126;&#22825;&#22238;&#23478;&#65292;9&#26376;&#20877;&#22238;&#26469;&#12290;&#12290;&#12290;&lt;/p&gt;</description>
    </item>
    <item>
      <pubDate>Fri, 07 Aug 2009 03:20:42 +0000</pubDate>
      <title>Ruby&#20013;&#22797;&#21046;&#23545;&#35937;&#30340;&#20960;&#31181;&#26041;&#27861;</title>
      <link>http://abitno.linpie.com/ruby-clone-object</link>
      <guid>http://abitno.linpie.com/ruby-clone-object</guid>
      <description>&lt;p&gt;Ruby&#20869;&#32622;&#30340;&#26041;&#27861;Object#clone&#21644;Object#dup&#21487;&#20197;&#29992;&#26469;copy&#19968;&#20010;&#23545;&#35937;&#65292;&#20004;&#32773;&#21306;&#21035;&#26159;&lt;strong&gt;dup&#21482;&#22797;&#21046;&#23545;&#35937;&#30340;&#20869;&#23481;&#65292;&#32780;clone&#36824;&#22797;&#21046;&#19982;&#23545;&#35937;&#30456;&#20851;&#32852;&#30340;&#20869;&#23481;&lt;/strong&gt;&#65292;&#22914;singleton method&lt;/p&gt;&lt;pre class="twilight"&gt;s &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;cat&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;s.upcase&lt;/span&gt;
	&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;CaT&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;
s_dup &lt;span class="Keyword"&gt;=&lt;/span&gt; s.&lt;span class="Entity"&gt;dup&lt;/span&gt;
s_clone &lt;span class="Keyword"&gt;=&lt;/span&gt; s.&lt;span class="Entity"&gt;clone&lt;/span&gt;
s_dup.&lt;span class="Entity"&gt;upcase&lt;/span&gt;		&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; &amp;quot;CAT&amp;quot;  (singleton method not copied)&lt;/span&gt;
s_clone.&lt;span class="Entity"&gt;upcase&lt;/span&gt;		&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; &amp;quot;CaT&amp;quot; (uses singleton method)&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;dup&#21644;clone&#37117;&#26159;&#27973;&#22797;&#21046;Shallow Copy&lt;/strong&gt;&#65292;&#20063;&#23601;&#26159;&#21482;&#33021;&#22797;&#21046;&#25509;&#21463;&#26041;&#30340;&#20869;&#23481;&#65292;&#32780;&#22914;&#26524;&#25509;&#21463;&#26041;&#21253;&#21547;&#21040;&#20854;&#20182;&#23545;&#35937;&#30340;&#24341;&#29992;&#65292;&#37027;&#20040;&#23601;&#21482;&#26159;&#20250;&#22797;&#21046;&#36825;&#20123;&#24341;&#29992;&#20102;&#12290;&lt;/p&gt;&lt;pre class="twilight"&gt;arr1 &lt;span class="Keyword"&gt;=&lt;/span&gt; [ &lt;span class="Constant"&gt;1&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;flipper&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="Constant"&gt;3&lt;/span&gt; ]
arr2 &lt;span class="Keyword"&gt;=&lt;/span&gt; arr1.&lt;span class="Entity"&gt;dup&lt;/span&gt;
arr2[&lt;span class="Constant"&gt;2&lt;/span&gt;] &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;99&lt;/span&gt;
arr2[&lt;span class="Constant"&gt;1&lt;/span&gt;][&lt;span class="Constant"&gt;2&lt;/span&gt;] &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;a&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
arr1				&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; [1, &amp;quot;flapper&amp;quot;, 3]&lt;/span&gt;
arr2				&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; [1, &amp;quot;flapper&amp;quot;, 99]&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&lt;span id='more_64'&gt;&lt;/span&gt;&#21487;&#20197;&#30475;&#21040;arr1&#20013;&#26377;&#19968;&#20010;&#21040;String&#23545;&#35937;&#30340;&#24341;&#29992;&#65292;&#20174;&#32780;arr2&#20063;&#22797;&#21046;&#20102;&#36825;&#20010;&#24341;&#29992;&#65292;&#24403;arr2&#20013;&#20462;&#25913;&#36825;&#20010;&#24341;&#29992;&#26102;&#65292;arr1&#20013;&#30340;&#20063;&#20250;&#21457;&#29983;&#21464;&#21270;&#12290;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&#22914;&#26524;&#35201;&#36827;&#34892;&#28145;&#22797;&#21046;Deep Copy&#65292;&#21487;&#20197;&#32874;&#26126;&#30340;&#37319;&#29992;Marshal&#27169;&#22359;&lt;/strong&gt;&lt;/p&gt;&lt;pre class="twilight"&gt;arr1 &lt;span class="Keyword"&gt;=&lt;/span&gt; [ &lt;span class="Constant"&gt;1&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;flipper&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="Constant"&gt;3&lt;/span&gt; ]
arr2 &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Marshal&lt;/span&gt;.&lt;span class="Entity"&gt;load&lt;/span&gt;(&lt;span class="Support"&gt;Marshal&lt;/span&gt;.&lt;span class="Entity"&gt;dump&lt;/span&gt;(arr1))
arr2[&lt;span class="Constant"&gt;2&lt;/span&gt;] &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Constant"&gt;99&lt;/span&gt;
arr2[&lt;span class="Constant"&gt;1&lt;/span&gt;][&lt;span class="Constant"&gt;2&lt;/span&gt;] &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="String"&gt;&lt;span class="String"&gt;'&lt;/span&gt;a&lt;span class="String"&gt;'&lt;/span&gt;&lt;/span&gt;
arr1				&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; [1, &amp;quot;flipper&amp;quot;, 3]&lt;/span&gt;
arr2				&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; [1, &amp;quot;flapper&amp;quot;, 99]&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#29616;&#22312;&#23601;&#20250;&#21457;&#29616;arr2&#20013;&#23545;String&#23545;&#35937;&#30340;&#20462;&#25913;&#19981;&#20250;&#23548;&#33268;arr1&#30340;&#21464;&#21270;&#20102;&#65292;&#22240;&#20026;&#28145;&#20102;&#12290;&#12290;&#12290;&#19981;&#36807;Marshal&#27169;&#22359;&#24182;&#19981;&#33021;&#25226;&#25152;&#26377;&#30340;&#23545;&#35937;&#37117;&#24207;&#21015;&#21270;&lt;/p&gt;&lt;p&gt;&#22312;class&#20013;&#36824;&#26377;&#19968;&#20010;&lt;strong&gt;&#19982;&#23545;&#35937;&#22797;&#21046;&#30456;&#20851;&#30340;&#29305;&#27530;&#26041;&#27861;initialize_copy&lt;/strong&gt;&#65292;&#36825;&#20010;&#26041;&#27861;&#20250;&#22312;&#20449;&#24687;&#22797;&#21046;&#23436;&#25104;&#21518;&#25191;&#34892;&#65292;&#30475;&#19979;&#38754;&#36825;&#20010;&#31034;&#20363;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;Document&lt;/span&gt;
	&lt;span class="Keyword"&gt;attr_accessor&lt;/span&gt; &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;title&lt;/span&gt;, &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;text&lt;/span&gt;
	&lt;span class="Keyword"&gt;attr_reader&lt;/span&gt; &lt;span class="Constant"&gt;&lt;span class="Constant"&gt;:&lt;/span&gt;timestamp&lt;/span&gt;

	&lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;initialize&lt;/span&gt;(&lt;span class="Variable"&gt;title&lt;span class="Variable"&gt;,&lt;/span&gt; text&lt;/span&gt;)
		&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;title&lt;/span&gt;, &lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;text&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; title, text
		&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;timestamp&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Time&lt;/span&gt;.&lt;span class="Entity"&gt;now&lt;/span&gt;
	&lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;

doc1 &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Document&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;Random Stuff&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;Haha&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
sleep &lt;span class="Constant"&gt;10&lt;/span&gt;
doc2 &lt;span class="Keyword"&gt;=&lt;/span&gt; doc1.&lt;span class="Entity"&gt;clone&lt;/span&gt;

doc1.&lt;span class="Entity"&gt;timestamp&lt;/span&gt; &lt;span class="Keyword"&gt;==&lt;/span&gt; doc2.&lt;span class="Entity"&gt;timestamp&lt;/span&gt;		&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; true&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#20063;&#23601;&#26159;&#20004;&#20010;&#23545;&#35937;&#26159;&#23436;&#20840;&#19968;&#26679;&#30340;&#65292;&#26500;&#36896;&#20989;&#25968;initialize&#34987;&#36339;&#36807;&#20102;&#65292;&#25152;&#20197;&#20004;&#20010;&#23545;&#35937;&#30340;&#26102;&#38388;&#25134;timestamp&#26159;&#30456;&#21516;&#30340;&#12290;&#22914;&#26524;&#35201;&#37319;&#29992;&#25191;&#34892;&#22797;&#21046;&#25805;&#20316;&#26102;&#30340;&#26102;&#38388;&#65292;&#25105;&#20204;&#21487;&#20197;&#36890;&#36807;&#32473;Document&#31867;&#28155;&#21152;initialize_copy&#26041;&#27861;&#26469;&#23454;&#29616;&#12290;initialize_copy&#35753;&#31243;&#24207;&#21592;&#33021;&#23436;&#20840;&#25511;&#21046;&#23545;&#35937;&#22797;&#21046;&#30340;&#29366;&#24577;&lt;/p&gt;&lt;pre class="twilight"&gt;&lt;span class="Keyword"&gt;class&lt;/span&gt; &lt;span class="Entity"&gt;Document&lt;/span&gt;    &lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;Reopen the class&lt;/span&gt;
	&lt;span class="Keyword"&gt;def&lt;/span&gt; &lt;span class="Entity"&gt;initialize_copy&lt;/span&gt;(&lt;span class="Variable"&gt;other&lt;/span&gt;)
		&lt;span class="Variable"&gt;&lt;span class="Variable"&gt;@&lt;/span&gt;timestamp&lt;/span&gt; &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Time&lt;/span&gt;.&lt;span class="Entity"&gt;now&lt;/span&gt;
	&lt;span class="Keyword"&gt;end&lt;/span&gt;
&lt;span class="Keyword"&gt;end&lt;/span&gt;

doc3 &lt;span class="Keyword"&gt;=&lt;/span&gt; &lt;span class="Support"&gt;Document&lt;/span&gt;.&lt;span class="Entity"&gt;new&lt;/span&gt;(&lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;More Stuff&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class="String"&gt;&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;Haha&lt;span class="String"&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;)
sleep &lt;span class="Constant"&gt;10&lt;/span&gt;
doc4 &lt;span class="Keyword"&gt;=&lt;/span&gt; doc1.&lt;span class="Entity"&gt;clone&lt;/span&gt;

doc3.&lt;span class="Entity"&gt;timestamp&lt;/span&gt; &lt;span class="Keyword"&gt;==&lt;/span&gt; doc4.&lt;span class="Entity"&gt;timestamp&lt;/span&gt;		&lt;span class="Comment"&gt;&lt;span class="Comment"&gt;#&lt;/span&gt;=&amp;gt; false&lt;/span&gt;
&lt;/pre&gt;&lt;p&gt;&#20877;&#27425;&#24863;&#24936;Ruby&#30340;&#39749;&#21147;&#12290;&#12290;&#12290;&lt;br /&gt;PS&#65306;&#20197;&#19978;&#20869;&#23481;&#20027;&#35201;&#26469;&#33258;&lt;strong&gt;The Ruby Way&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
