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

<channel>
	<title>Yukun&#039;s Blog &#187; Ruby</title>
	<atom:link href="http://www.yukun.info/blog/category/ruby/feed" rel="self" type="application/rss+xml" />
	<link>http://www.yukun.info</link>
	<description>難しいことは分かりやすく、簡単なことは面白く紹介</description>
	<lastBuildDate>Thu, 26 Jan 2012 03:33:59 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JavaとRubyで文字列の終端の扱いの違い</title>
		<link>http://www.yukun.info/blog/2008/03/diff-java-ruby-string.html</link>
		<comments>http://www.yukun.info/blog/2008/03/diff-java-ruby-string.html#comments</comments>
		<pubDate>Tue, 04 Mar 2008 14:57:40 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Exception]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://www.yukun.info/trump/20080304/java%e3%81%a8ruby%e3%81%a7%e6%96%87%e5%ad%97%e5%88%97%e3%81%ae%e7%b5%82%e7%ab%af%e3%81%ae%e6%89%b1%e3%81%84%e3%81%ae%e9%81%95%e3%81%84</guid>
		<description><![CDATA[RubyのコードをJavaに書き直す際に注意する相違点が幾つかあったので、そのうちの一つを挙げてみます。特に文字列関係は色々やりにくいです。 a = "4321" p a[4] #=> nil Rubyでは文字を[]で指 &#8230; <a href="http://www.yukun.info/blog/2008/03/diff-java-ruby-string.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/03/diff-java-ruby-string.html">JavaとRubyで文字列の終端の扱いの違い</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>RubyのコードをJavaに書き直す際に注意する相違点が幾つかあったので、そのうちの一つを挙げてみます。特に文字列関係は色々やりにくいです。</p>
<pre>a = "4321"
p a[4] #=> nil</pre>
<p>Rubyでは文字を[]で指すとき終端文字の次の添え字を指すとnilを返します。これをCで言う文字列の終端文字&#8217;\0&#8242;のように考え、if文などの判定に用いることが出来ます。</p>
<p>対して、Javaで同じような書式で書こうものなら、</p>
<pre>
public class Test {
  public static void main(String[] args) {
    String str = "abcdef";
    char[] arr = str.toCharArray(); // String型をchar型の配列に変換

    System.out.println(arr);
    System.out.println(str.length()+ " == " + arr.length);
    try {
      System.out.println(arr[6]);
    } catch (java.lang.ArrayIndexOutOfBoundsException e) {
      System.out.println("キャッチ：" + e);
-    }
    try {
      System.out.println(str.charAt(6));
    } catch (java.lang.StringIndexOutOfBoundsException e) {
      System.out.println("キャッチ：" + e);
    }
    // 最後の文字を知るためには
    System.out.println(str.charAt(str.length() - 1));
  }
}
</pre>
<p>のように例外でキャッチしなければなりません。</p>
<h3>実行結果</h3>
<pre>6 == 6
abcdef
キャッチ：java.lang.ArrayIndexOutOfBoundsException: 6
キャッチ：java.lang.StringIndexOutOfBoundsException: String index out of range: 6
f</pre>
<p>まぁ、str.length()を用いて文字列長でcharAtで指す文字が文字列の末尾かどうかを判定することで制御すればよいまでの話かもしれません。</p>
<p>今回はとあるアルゴリズムを移植上、気づきが色々あったのでこうした機会に言語仕様に対する理解を深めていきたいです。</p>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/05/java-strip.html" rel="bookmark" title="2008年5月29日">Java: 文字列の先頭・末尾の文字を削除するstrip()メソッド</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/ruby-string.html" rel="bookmark" title="2008年2月6日">Rubyで引数の設定値によって4パターンの部分文字列を取得するラッパー関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/03/java-ngram.html" rel="bookmark" title="2008年3月7日">検索エンジンを実装 (1)転置インデックス作成</a></li>
<li><a href="http://www.yukun.info/blog/2008/01/ruby-string-index.html" rel="bookmark" title="2008年1月5日">Rubyで文字列から日本語文字をインデックス指定する</a></li>
<li><a href="http://www.yukun.info/blog/2008/07/python-string.html" rel="bookmark" title="2008年7月2日">Python: 文字列の検索 &#8211; index()、reindex()メソッド</a></li>
</ul>
<p><!-- Similar Posts took 6.774 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/03/diff-java-ruby-string.html">JavaとRubyで文字列の終端の扱いの違い</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/03/diff-java-ruby-string.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Webページから指定したタグの要素を抜き出すRuby関数</title>
		<link>http://www.yukun.info/blog/2008/02/extract-web-tag.html</link>
		<comments>http://www.yukun.info/blog/2008/02/extract-web-tag.html#comments</comments>
		<pubDate>Sun, 10 Feb 2008 13:44:41 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://www.yukun.info/trump/20080210/web%e3%83%9a%e3%83%bc%e3%82%b8%e3%81%8b%e3%82%89%e6%8c%87%e5%ae%9a%e3%81%97%e3%81%9f%e3%82%bf%e3%82%b0%e3%81%ae%e8%a6%81%e7%b4%a0%e3%82%92%e6%8a%9c%e3%81%8d%e5%87%ba%e3%81%99ruby%e9%96%a2%e6%95%b0</guid>
		<description><![CDATA[単一のWebページから抜き出した複数の要素を配列に格納して返します。 以下の例はaタグの要素(エレメント)を抽出した場合です。 Rubyコード require &#039;net/http&#039; require &#038; &#8230; <a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html">Webページから指定したタグの要素を抜き出すRuby関数</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>単一のWebページから抜き出した複数の要素を配列に格納して返します。<br />
以下の例はaタグの要素(エレメント)を抽出した場合です。</p>
<h3>Rubyコード</h3>
<pre>
require &#039;net/http&#039;
require &#039;kconv&#039;

def parse_array(string, beg_tag, close_tag)
  array = Array.new
  string.scan(/#{beg_tag}(.*?)#{close_tag}/sm) { |matched|
    #puts matched
    array = array | matched
  }
  return array
end

Net::HTTP.version_1_2
Net::HTTP.start(&#039;b.hatena.ne.jp&#039;, 80) {|http|
  response = http.get(&#039;/hotentry/&#039;)
  str = Kconv.tosjis(response.body)
  a_tag_array = parse_array(str, &quot;&lt;a href=&quot;http://www.yukun.info/blog&quot;&gt;&quot; )
  puts a_tag_array
}
</pre>
<h3>学んだこと</h3>
<ul>
<li>Net::HTTP.startメソッドをブロックを用いて呼び出すことによって、ブロックの間だけセッションを開いて接続し、ブロック終了とともに自動的にセッションを閉じる。<span style="font-style:italic;">Rubyに慣れてもJavaやCでの手続きを意識しておくこと。</span></li>
<li>配列の結合には和集合(演算子は「|」)を用いた。この場合、重複する要素は1つとして数えられる。別々に数えたい場合は「+」演算子を用いる。</li>
<li>String#scanメソッドはブロックで用いるとブロック変数にマッチした部分を格納する。その際、正規表現の中で「()」が用いられると、()内の部分を配列にして返す。<span style="color:#666666;">今回は別に配列にする必要はなかったかも。</span></li>
</ul>
<h3>参考サイト</h3>
<blockquote><p><a href="http://jp.rubyist.net/magazine/?0013-BundledLibraries">Web サーバからドキュメントを得る</a> &#8211; <span style="font-style:italic;"><a href="http://jp.rubyist.net/magazine/?0013-BundledLibraries">Rubyist Magazine &#8211; 標準添付ライブラリ紹介 【第 7 回】 net/http</a></span>
</p></blockquote>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/02/ruby-extract-tag.html" rel="bookmark" title="2008年2月9日">タグの中の要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/ruby-excite-translation.html" rel="bookmark" title="2008年2月8日">POSTメソッドを用いてExcite翻訳を行うRubyコード</a></li>
<li><a href="http://www.yukun.info/blog/2008/01/ruby-block.html" rel="bookmark" title="2008年1月9日">Ruby: メソッドの引数にブロックを渡す</a></li>
<li><a href="http://www.yukun.info/blog/2008/01/ruby-string-index.html" rel="bookmark" title="2008年1月5日">Rubyで文字列から日本語文字をインデックス指定する</a></li>
<li><a href="http://www.yukun.info/blog/2008/01/ruby-lambda.html" rel="bookmark" title="2008年1月6日">Ruby: lambdaメソッドを使いブロックをオブジェクト化</a></li>
</ul>
<p><!-- Similar Posts took 6.864 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html">Webページから指定したタグの要素を抜き出すRuby関数</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/02/extract-web-tag.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>タグの中の要素を抜き出すRuby関数</title>
		<link>http://www.yukun.info/blog/2008/02/ruby-extract-tag.html</link>
		<comments>http://www.yukun.info/blog/2008/02/ruby-extract-tag.html#comments</comments>
		<pubDate>Sat, 09 Feb 2008 13:33:38 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[RegExp]]></category>

		<guid isPermaLink="false">http://www.yukun.info/trump/20080209/%e3%82%bf%e3%82%b0%e3%81%ae%e4%b8%ad%e3%81%ae%e8%a6%81%e7%b4%a0%e3%82%92%e6%8a%9c%e3%81%8d%e5%87%ba%e3%81%99ruby%e9%96%a2%e6%95%b0</guid>
		<description><![CDATA[ライブラリを使えば簡単ですが、正規表現の学習の為に。 ソースコード def return_between(unporsed, start, termi) unporsed =~ /#{start}(.*?)#{termi &#8230; <a href="http://www.yukun.info/blog/2008/02/ruby-extract-tag.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/02/ruby-extract-tag.html">タグの中の要素を抜き出すRuby関数</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>ライブラリを使えば簡単ですが、正規表現の学習の為に。</p>
<h3>ソースコード</h3>
<pre>
def return_between(unporsed, start, termi)
  unporsed =~ /#{start}(.*?)#{termi}/
  return $1
end

str = &quot;&lt;title&gt;Trump Code&lt;/title&gt;&quot;
start = &quot;&lt;title&gt;&quot;
termi = &quot;&lt;/title&gt;&quot;

puts return_between(str, start, termi)
#=&gt; Trump Code
</pre>
<p>ここで学んだことは、正規表現の規則中に変数を用いる際は#{<span style="font-style:italic;">var_str</span>}と表記すること。</p>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html" rel="bookmark" title="2008年2月10日">Webページから指定したタグの要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/ruby-excite-translation.html" rel="bookmark" title="2008年2月8日">POSTメソッドを用いてExcite翻訳を行うRubyコード</a></li>
<li><a href="http://www.yukun.info/blog/2007/04/chatlog.html" rel="bookmark" title="2007年4月10日">チャットログから本文を抽出</a></li>
<li><a href="http://www.yukun.info/blog/2008/07/python-regular-expression-loop.html" rel="bookmark" title="2008年7月20日">Python: 正規表現の基本 &#8211; 繰り返し「*」「+」「?」</a></li>
<li><a href="http://www.yukun.info/blog/2008/07/python-regular-expression.html" rel="bookmark" title="2008年7月19日">Python: 正規表現の基本 &#8211; メタ文字「.」「^」「$」</a></li>
</ul>
<p><!-- Similar Posts took 5.575 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/02/ruby-extract-tag.html">タグの中の要素を抜き出すRuby関数</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/02/ruby-extract-tag.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>POSTメソッドを用いてExcite翻訳を行うRubyコード</title>
		<link>http://www.yukun.info/blog/2008/02/ruby-excite-translation.html</link>
		<comments>http://www.yukun.info/blog/2008/02/ruby-excite-translation.html#comments</comments>
		<pubDate>Fri, 08 Feb 2008 13:57:57 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Network]]></category>
		<category><![CDATA[RegExp]]></category>

		<guid isPermaLink="false">http://www.yukun.info/trump/20080208/post%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%82%92%e7%94%a8%e3%81%84%e3%81%a6excite%e7%bf%bb%e8%a8%b3%e3%82%92%e8%a1%8c%e3%81%86ruby%e3%82%b3%e3%83%bc%e3%83%89</guid>
		<description><![CDATA[しかし、未完です。 Webの巡回などにはWWW::Mechanizeという便利なライブラリがありますが、あえてnet/httpのPOSTメソッドを使う理由は、単にPOSTそのものと正規表現の学習をするためです。 今回は正 &#8230; <a href="http://www.yukun.info/blog/2008/02/ruby-excite-translation.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/02/ruby-excite-translation.html">POSTメソッドを用いてExcite翻訳を行うRubyコード</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p><span style="color:#666666;">しかし、未完です。</span></p>
<p>Webの巡回などにはWWW::Mechanizeという便利なライブラリがありますが、あえてnet/httpのPOSTメソッドを使う理由は、単にPOSTそのものと正規表現の学習をするためです。</p>
<p>今回は正規表現で試行錯誤。</p>
<h3>Rubyソースコード</h3>
<pre>
#!/usr/bin/ruby
require 'net/http'
require 'kconv'

before = "hello"

http = Net::HTTP.new('www.excite.co.jp')
response = http.post('/world/english', "before=#{before}&#038;wb_lp=ENJA")

result = Kconv.tosjis(response.body)
result =~ /"after"[^>]*>(.*)/ism
puts $1
</pre>
<h3>実行結果</h3>
<pre>こんにちは
＜中略＞</pre>
<p>ここで、正規表現</p>
<p><code>/"after"[^>]*>(.*)/ism</code></p>
<p>の部分を</p>
<p><code>/"after"[^>]*>(.*)< \/textarea>/ism</code></p>
<p>に変更するとマッチしなくなってしまいました。<br />
オプション指定のmで複数行にマッチするはずなんですが・・・うーん、何を見落としているのだろう。
</p>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html" rel="bookmark" title="2008年2月10日">Webページから指定したタグの要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/ruby-extract-tag.html" rel="bookmark" title="2008年2月9日">タグの中の要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/07/python-regular-expression-loop.html" rel="bookmark" title="2008年7月20日">Python: 正規表現の基本 &#8211; 繰り返し「*」「+」「?」</a></li>
<li><a href="http://www.yukun.info/blog/2008/07/python-regular-expression.html" rel="bookmark" title="2008年7月19日">Python: 正規表現の基本 &#8211; メタ文字「.」「^」「$」</a></li>
<li><a href="http://www.yukun.info/blog/2008/07/python-regular-expression-range.html" rel="bookmark" title="2008年7月21日">Python: 正規表現の基本 &#8211; 文字範囲の指定「[ ]」</a></li>
</ul>
<p><!-- Similar Posts took 6.261 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/02/ruby-excite-translation.html">POSTメソッドを用いてExcite翻訳を行うRubyコード</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/02/ruby-excite-translation.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rubyで引数の設定値によって4パターンの部分文字列を取得するラッパー関数</title>
		<link>http://www.yukun.info/blog/2008/02/ruby-string.html</link>
		<comments>http://www.yukun.info/blog/2008/02/ruby-string.html#comments</comments>
		<pubDate>Wed, 06 Feb 2008 11:58:51 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://www.yukun.info/trump/20080206/ruby%e3%81%a7%e5%bc%95%e6%95%b0%e3%81%ae%e8%a8%ad%e5%ae%9a%e5%80%a4%e3%81%ab%e3%82%88%e3%81%a3%e3%81%a64%e3%83%91%e3%82%bf%e3%83%bc%e3%83%b3%e3%81%ae%e9%83%a8%e5%88%86%e6%96%87%e5%ad%97%e5%88%97</guid>
		<description><![CDATA[引数に設定値を与え、それによって挙動を変えることで、似た機能をまとめてみます。 追記(2008.2.8)：正規表現のマッチを保持する変数があったことを失念していました。「$`」マッチした部分より前の文字列、「$&#038 &#8230; <a href="http://www.yukun.info/blog/2008/02/ruby-string.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/02/ruby-string.html">Rubyで引数の設定値によって4パターンの部分文字列を取得するラッパー関数</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>引数に設定値を与え、それによって挙動を変えることで、似た機能をまとめてみます。</p>
<p><span style="color:#FF0000;">追記(2008.2.8)</span>：正規表現のマッチを保持する変数があったことを失念していました。「$`」マッチした部分より前の文字列、「$&#038;」マッチした文字列、「$&#8217;」マッチした部分より後ろの文字列を使えばより簡潔に書けると思いました。</p>
<h3>ソースコード</h3>
<pre>
EXCL = true
INCL = false
BEFORE = true
AFTER = false
#
# string 分割する文字列
# delineator 分割する場所
# desired    BEFORE: delineator 文字列より前の文字列
#            AFTER:  delineator 文字列より後の文字列
# type       INCL:   分割文字列に delineator を加える
#            EXCL:   分割文字列に delineator を加えない
def split_str(string, delineator, desired, type)
  low_str = string.downcase # 小文字に揃える(変換)
  marker = delineator.downcase
  return if (low_str.index(marker) == nil) # delineator に一致しない
  if (desired == BEFORE)
    if (type == EXCL)
      split_pos = low_str.index(marker)
    else
      split_pos = low_str.index(marker) + marker.length
    end
    parsed_str = low_str[0, split_pos]
  else
    if (type == EXCL)
      split_pos = low_str.index(marker)+marker.length
    else
      split_pos = low_str.index(marker)
    end
    parsed_str = low_str[split_pos, string.length]
  end
  return parsed_str
end

string = "I'm designing a Web crawler and a Search engine."
p split_str(string, "crawler", BEFORE, INCL);
p split_str(string, "crawler", BEFORE, EXCL);
p split_str(string, "crawler", AFTER, INCL);
p split_str(string, "crawler", AFTER, EXCL);
p split_str(string, "crauler", AFTER, EXCL);
</pre>
<h3>実行結果</h3>
<pre>"i'm designing a web crawler"
"i'm designing a web "
"crawler and a search engine."
" and a search engine."
nil</pre>
<h3>単に部分文字列を取得するには</h3>
<pre>str = "A Web crawler"
p str[6, str.size] #=> "crawler"</pre>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/03/diff-java-ruby-string.html" rel="bookmark" title="2008年3月4日">JavaとRubyで文字列の終端の扱いの違い</a></li>
<li><a href="http://www.yukun.info/blog/2008/01/ruby-string-index.html" rel="bookmark" title="2008年1月5日">Rubyで文字列から日本語文字をインデックス指定する</a></li>
<li><a href="http://www.yukun.info/blog/2008/07/python-string.html" rel="bookmark" title="2008年7月2日">Python: 文字列の検索 &#8211; index()、reindex()メソッド</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html" rel="bookmark" title="2008年2月10日">Webページから指定したタグの要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/08/python-sequence-string.html" rel="bookmark" title="2008年8月6日">Python: 文字列の上位型であるシーケンス型の構文 &#8211; Sequence[X:Y:Z]</a></li>
</ul>
<p><!-- Similar Posts took 8.475 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/02/ruby-string.html">Rubyで引数の設定値によって4パターンの部分文字列を取得するラッパー関数</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/02/ruby-string.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby: メソッドの引数にブロックを渡す</title>
		<link>http://www.yukun.info/blog/2008/01/ruby-block.html</link>
		<comments>http://www.yukun.info/blog/2008/01/ruby-block.html#comments</comments>
		<pubDate>Wed, 09 Jan 2008 14:59:17 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[phrase]]></category>

		<guid isPermaLink="false">http://www.yukun.info/trump/20080109/%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%81%ae%e5%bc%95%e6%95%b0%e3%81%ab%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e3%82%92%e6%b8%a1%e3%81%99</guid>
		<description><![CDATA[ブロックの使い方を練習してみます。 def repeat(n) n.times { yield } if block_given? end repeat(2) { puts "Hello." } # Hello. # H &#8230; <a href="http://www.yukun.info/blog/2008/01/ruby-block.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/01/ruby-block.html">Ruby: メソッドの引数にブロックを渡す</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>ブロックの使い方を練習してみます。</p>
<pre>
def repeat(n)
  n.times { yield } if block_given?
end
repeat(2) { puts "Hello." }
# Hello.
# Hello.
</pre>
<p>メソッドに渡したブロックはyieldを用いて呼び出します。<br />
似たような例としてもう一つ。</p>
<pre>
# nからmまでの自然数の合計を求める
def sumup(n, m, sum=0)
  (n..m).each { |x|
    # yield でブロックを呼び出す
    yield if block_given? # 引数にブロックが与えられている
    puts x
    sum += x
  }
  puts "Sum : #{sum}"
end
sumup(2, 4) { printf "Add : " }
#Add : 2
#Add : 3
#Add : 4
#Sum : 9
</pre>
<p>渡されたブロックはProcオブジェクトに変換されるのでcallを用いて呼び出すことも出来ます。下の例で確認してみます。</p>
<pre>
# nからmまでの自然数の合計を求める
def sumup(n, m, &#038;block)
  sum = 0
  (n..m).each { |x|
    block.call if block # ブロックを呼び出し
    puts x
    sum += x
  }
  puts "Sum : #{sum}"
end
sumup(0, 4) { printf "Add : " }
#Add : 0
#Add : 1
#Add : 2
#Add : 3
#Add : 4
#Sum : 10
</pre>
<p>最後に、渡されたブロックをまた引数として渡す場合の例を示します。<br />
その際、ブロック変数名の前に「&#038;」をつけます。</p>
<pre>
# 配列内の最小値を求める
def minimum(arr, &#038;block)
  block  ? arr.select(&#038;block).min : arr.min
end
arr = [20,48,15,67]
p minimum(arr) {|i| i > 30}
#=> 48
</pre>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/01/ruby-lambda.html" rel="bookmark" title="2008年1月6日">Ruby: lambdaメソッドを使いブロックをオブジェクト化</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html" rel="bookmark" title="2008年2月10日">Webページから指定したタグの要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/06/python-arbitrary-func.html" rel="bookmark" title="2008年6月19日">Python: 可変個の引数を受け取る関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/01/ruby-string-index.html" rel="bookmark" title="2008年1月5日">Rubyで文字列から日本語文字をインデックス指定する</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/ruby-excite-translation.html" rel="bookmark" title="2008年2月8日">POSTメソッドを用いてExcite翻訳を行うRubyコード</a></li>
</ul>
<p><!-- Similar Posts took 6.881 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/01/ruby-block.html">Ruby: メソッドの引数にブロックを渡す</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/01/ruby-block.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby: lambdaメソッドを使いブロックをオブジェクト化</title>
		<link>http://www.yukun.info/blog/2008/01/ruby-lambda.html</link>
		<comments>http://www.yukun.info/blog/2008/01/ruby-lambda.html#comments</comments>
		<pubDate>Sun, 06 Jan 2008 10:24:40 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.yukun.info/trump/20080106/ruby%e3%81%aelambda%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e3%82%92%e4%bd%bf%e3%81%84%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e3%82%92%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e5%8c%96</guid>
		<description><![CDATA[に関して、練習します。 他の言語と比較してRubyのコードブロックの扱いは特徴的で扱い難そうに見えますが、使いこなせればコード量を減らせるし、その結果として可読性も増すので、慣れていきたいです。 def times_n( &#8230; <a href="http://www.yukun.info/blog/2008/01/ruby-lambda.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/01/ruby-lambda.html">Ruby: lambdaメソッドを使いブロックをオブジェクト化</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>に関して、練習します。<br />
他の言語と比較してRubyのコードブロックの扱いは特徴的で扱い難そうに見えますが、使いこなせればコード量を減らせるし、その結果として可読性も増すので、慣れていきたいです。</p>
<pre>
def times_n(n)
  lambda  { |x| x * n}     # Kernel#lambdaの引数はブロック
# lambda do |x| x * n end  でもよい(複数行に渉るときなど)。
end

times_ten = times_n(10)    # nに10を代入
# 生成されたtimes_tenはProcインスタンス
p times_ten.class          #=> Proc

# times_ten = { |x| x * n} はエラー。
# {}でのブロックはメソッドの引数としてのみ渡せる。
# また、ブロック引数はメソッドの最後の引数として定義する。

# ブロックの実行にはcallメソッドを用いる
p times_ten.call(5)        # ブロック変数xに10が代入される
#=> 50
</pre>
<p>ここで、クラスProcとは</p>
<p><span id="more-12"></span></p>
<blockquote><p>Proc はブロックをコンテキスト(ローカル変数のスコープやスタックフレーム)とともにオブジェクト化した手続きオブジェクトです。<br />
 &#8211; <span style="font-style:italic;">Rubyリファレンスマニュアル : Proc</span></p></blockquote>
<p>続けて、以下も練習してみる。</p>
<pre>
arr1 = [1, 2, 3, 4, 5]
arr2 = arr1.collect(&amp;amp;times_ten)
p arr2 #=> [10, 20, 30, 40, 50]
p arr2.class #=> Array
</pre>
<p>ここで、Enumerable#collectは、</p>
<blockquote><p>collect : 各要素を順番にブロックに渡して評価し、その結果で要素を置き換えます。<br />
<span style="font-style:italic;">Rubyリファレンスマニュアル : collect</span></p></blockquote>
<p>ブロックが格納された変数をメソッドの引数として渡すときは「&#038;」をその変数名の前につけます。<br />
仮につけないと以下のようなエラーが出ます。</p>
<p><code>`collect': wrong number of arguments (1 for 0) (ArgumentError)</code></p>
<p>最後に、selectメソッドを用い、同時に評価に条件を組み込んでみます。</p>
<pre>
def times_n(n)
  lambda { |x| x * n}   # lambdaの引数はブロック
end

times_ten = times_n(10) # nに10を代入

ceiling = 50
arr3 = [1, 25, 50, 55, 30, 100]
p arr3.select { |x| x < ceiling }
#=> [1, 25, 30]

arr4 = [0.1, 2.5, 5, 5.5, 3, 10]
p arr4.collect(&amp;amp;times_ten).select { |x| x < ceiling } #  -.-;
#=> [1.0, 25.0, 30]
</pre>
<p>arr3の要素が順にブロック変数xに読み込まれます。</p>
<blockquote><p>select : 各要素に対してブロックを評価した値が真であった要素を全て含む配列を返します。真になる要素がひとつもなかった場合は空の配列を返します。 -<br />
<span style="font-style:italic;">Rubyリファレンスマニュアル : select</span></p></blockquote>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/01/ruby-block.html" rel="bookmark" title="2008年1月9日">Ruby: メソッドの引数にブロックを渡す</a></li>
<li><a href="http://www.yukun.info/blog/2008/06/python-arbitrary-func.html" rel="bookmark" title="2008年6月19日">Python: 可変個の引数を受け取る関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html" rel="bookmark" title="2008年2月10日">Webページから指定したタグの要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/01/ruby-string-index.html" rel="bookmark" title="2008年1月5日">Rubyで文字列から日本語文字をインデックス指定する</a></li>
<li><a href="http://www.yukun.info/blog/2008/08/python-upper-lower-case-letters-converted.html" rel="bookmark" title="2008年8月3日">Python: リスト中の文字列を大文字⇔小文字に変換</a></li>
</ul>
<p><!-- Similar Posts took 7.800 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/01/ruby-lambda.html">Ruby: lambdaメソッドを使いブロックをオブジェクト化</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/01/ruby-lambda.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rubyで文字列から日本語文字をインデックス指定する</title>
		<link>http://www.yukun.info/blog/2008/01/ruby-string-index.html</link>
		<comments>http://www.yukun.info/blog/2008/01/ruby-string-index.html#comments</comments>
		<pubDate>Sat, 05 Jan 2008 09:23:17 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Array]]></category>
		<category><![CDATA[Character]]></category>
		<category><![CDATA[String]]></category>

		<guid isPermaLink="false">http://www.yukun.info/trump/20080105/ruby%e3%81%a7%e6%96%87%e5%ad%97%e5%88%97%e3%81%8b%e3%82%89%e6%97%a5%e6%9c%ac%e8%aa%9e%e6%96%87%e5%ad%97%e3%82%92%e3%82%a4%e3%83%b3%e3%83%87%e3%83%83%e3%82%af%e3%82%b9%e6%8c%87%e5%ae%9a%e3%81%99</guid>
		<description><![CDATA[RubyのStringインスタンスに格納されている文字列のインデックスを得るにはchrメソッドを用います。 ソースコード # chrは文字コードObjを文字列Objに変換するメソッド str1 = "abcdef" p  &#8230; <a href="http://www.yukun.info/blog/2008/01/ruby-string-index.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2008/01/ruby-string-index.html">Rubyで文字列から日本語文字をインデックス指定する</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>RubyのStringインスタンスに格納されている文字列のインデックスを得るにはchrメソッドを用います。</p>
<h4>ソースコード</h4>
<pre>
# chrは文字コードObjを文字列Objに変換するメソッド
str1 = "abcdef"
p str1[2]     #=> 99
p str1[2].chr #=> "c"
</pre>
<p><span id="more-11"></span></p>
<h3>インデックスはバイト換算</h3>
<p>なので、2バイト長の日本語文字などは取り出せません。</p>
<pre>
str2 = "あいうえお"
p    str2[2]                   #=> 130
puts str2[2]                   #=> 130
p    str2[2].chr               #=> "\202"
puts str2[2].chr + str2[3].chr #=> "い"
</pre>
<p>そこで、</p>
<h3>日本語文字列のインデックス指定はsplitメソッドで一旦配列に分割</h3>
<pre>
str2  = "あいうえお"
jarr3 = str2.split(//s) # 文字コードがSJISの場合
puts  jarr3[3] #=> え
</pre>
<p>多バイト長の文字列処理を扱ったソースを読み込んで慣れていこうかな。</p>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2008/08/python-upper-lower-case-letters-converted.html" rel="bookmark" title="2008年8月3日">Python: リスト中の文字列を大文字⇔小文字に変換</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html" rel="bookmark" title="2008年2月10日">Webページから指定したタグの要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/ruby-string.html" rel="bookmark" title="2008年2月6日">Rubyで引数の設定値によって4パターンの部分文字列を取得するラッパー関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/03/diff-java-ruby-string.html" rel="bookmark" title="2008年3月4日">JavaとRubyで文字列の終端の扱いの違い</a></li>
<li><a href="http://www.yukun.info/blog/2008/01/ruby-block.html" rel="bookmark" title="2008年1月9日">Ruby: メソッドの引数にブロックを渡す</a></li>
</ul>
<p><!-- Similar Posts took 5.530 ms --></p>
<p><a href="http://www.yukun.info/blog/2008/01/ruby-string-index.html">Rubyで文字列から日本語文字をインデックス指定する</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2008/01/ruby-string-index.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>チャットログから本文を抽出</title>
		<link>http://www.yukun.info/blog/2007/04/chatlog.html</link>
		<comments>http://www.yukun.info/blog/2007/04/chatlog.html#comments</comments>
		<pubDate>Tue, 10 Apr 2007 10:54:00 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Chatterbot]]></category>
		<category><![CDATA[RegExp]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://codeai.net/?p=49</guid>
		<description><![CDATA[先日、メッセンジャーのチャットで会話するボットを作りました。 そのボットに「学習」させるネタに、会話文であるWindows Live Messengerのチャットログを用いることにしました。しかし、ログはXML形式なので &#8230; <a href="http://www.yukun.info/blog/2007/04/chatlog.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2007/04/chatlog.html">チャットログから本文を抽出</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>先日、メッセンジャーのチャットで会話するボットを作りました。 そのボットに「学習」させるネタに、会話文であるWindows Live Messengerのチャットログを用いることにしました。しかし、ログはXML形式なので、本文以外の余計なタグがはいっています。<br />
まあ、エディタで不用な部分を置換していっても良いのですが&#8230;</p>
<h4>抽出処理をRubyで自動化</h4>
<blockquote><p>仮に1時間かかる単調作業をするとしたら、私は50分かけても、その作業をこなすスクリプトを書く。</p></blockquote>
<p>と言う言葉を思いだしたので、早速、Windows Live Messenger(前MSN)のチャットログから本文のみを抽出するコードを書いてみました。</p>
<pre>
#! ruby -Ks
require ‘kconv’
MSNRegexp =/(.*?)&lt;.Text&gt;/xm
data = ""
filename = ARGV[0]
begin
  open(filename) do |f|
    f.each do |line| # ファイルから1行ずつ読む
    line = Kconv.kconv(line, Kconv::SJIS) # 文字コードを変換
    line.chomp!
    next if line.empty?
    data.concat(line)
  end
end
rescue => e
  puts(e.message)
end
open(’msnLog.txt’, ‘w’) do |f| # 出力ファイル
data.scan(MSNRegexp){|tdata|
  if tdata
    f.puts(tdata)
  end
}
end
</pre>
<p>上記のコードをプロンプトで抽出したいファイル名を引数に与えて 実行すると、msnLog.txtというファイルに本文が抽出されます。発言者なども抽出したい場合は、正規表現の部分を修正すれば良いですね。</p>
<p>では、今し方学習したボットとの会話はこんなです。 「<a href="http://www.yukun.info/blog/2007/04/chatbot-log.html" title="人工無脳とのチャットログ">とあるボットのチャットログ</a>」 やってる本人は、結構楽しんでましたね＾＾；と言うか合せてました。</p>
<h4>今後の改良点</h4>
<p>当面の課題は、辞書のメンテツールの作成及びデータベース化、人格形成、文脈・話者理解と情報収集・加工機能を利用環境に合せたエージェント化とか(ぅぉぃ)。</p>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2007/04/chatbot-log.html" rel="bookmark" title="2007年4月10日">とあるボットのチャットログ</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/ruby-excite-translation.html" rel="bookmark" title="2008年2月8日">POSTメソッドを用いてExcite翻訳を行うRubyコード</a></li>
<li><a href="http://www.yukun.info/blog/2008/02/extract-web-tag.html" rel="bookmark" title="2008年2月10日">Webページから指定したタグの要素を抜き出すRuby関数</a></li>
<li><a href="http://www.yukun.info/blog/2008/05/java-excite-translation.html" rel="bookmark" title="2008年5月16日">JavaプログラムからExcite翻訳を利用</a></li>
<li><a href="http://www.yukun.info/blog/2008/10/actionscript-xml-element-attribute.html" rel="bookmark" title="2008年10月7日">ActionScript: XMLの子要素の読み込み &#8211; XMLオブジェクトと「.. 」「[]」演算子</a></li>
</ul>
<p><!-- Similar Posts took 6.692 ms --></p>
<p><a href="http://www.yukun.info/blog/2007/04/chatlog.html">チャットログから本文を抽出</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2007/04/chatlog.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>とあるボットのチャットログ</title>
		<link>http://www.yukun.info/blog/2007/04/chatbot-log.html</link>
		<comments>http://www.yukun.info/blog/2007/04/chatbot-log.html#comments</comments>
		<pubDate>Tue, 10 Apr 2007 10:37:00 +0000</pubDate>
		<dc:creator>yukun</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Chatterbot]]></category>
		<category><![CDATA[Days]]></category>

		<guid isPermaLink="false">http://codeai.net/?p=48</guid>
		<description><![CDATA[人工無脳とのチャットログ yukun> こんにちはbot > こんちはyukun> 元気してた？bot > 元気に、そう見えても、おかしくはないがね。yukun> そうかbot > でしゃばりすぎだゼバーン!!yukun &#8230; <a href="http://www.yukun.info/blog/2007/04/chatbot-log.html">Continue reading <span class="meta-nav">&#8594;</span></a><p><a href="http://www.yukun.info/blog/2007/04/chatbot-log.html">とあるボットのチャットログ</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></description>
			<content:encoded><![CDATA[<p>人工無脳とのチャットログ</p>
<blockquote><p>yukun> こんにちは<br />bot  > こんちは<br />yukun> 元気してた？<br />bot  > 元気に、そう見えても、おかしくはないがね。<br />yukun> そうか<br />bot  > でしゃばりすぎだゼバーン!!<br />yukun> ぐわー！やられた・・・<br />bot  > 自我があって、次のステップにいけなくなって、またねー<br />yukun> その自我とは？<br />bot  > 自我になりえると思うよ<br />yukun> 今日は人工知能と自我について話そうぜ<br />bot  > 何というか人間の思考を模倣することと自我とは全くの別問題だと思うのだよ？<br />yukun> ほんとにそう思う?<br />bot  > 人工知能とかよりも早く義体できないかなぁとか思ってしまうな<br />yukun> え、あぁ義体ねぇ。つけてみたいか？<br />bot  > 義だけ聞くと、ありがちな体ではあるね。<br />yukun> そうなのか。そんな体が在ったとは…<br />bot  > かわいー！<br />yukun> お前さん、特殊な感性をしているな<br />bot  > お前らと出会うことになるね、人間らしい考え方のプロセスを持つものは出来るけど、それの宇宙版なんだ。<br />yukun> もう、どう突っ込んでよいか…人間らしい思考のプロセスって具体的に何だろうね。<br />bot  > わかればいいんだけどさ<br />yukun> わからないか？<br />bot  > 違うよ…<br />yukun> と言いますと…<br />bot  > じゃあこれ知ってる？<br />yukun> 何でしょう<br />bot  > 何はわからん<br />yukun> 焦らし過ぎだから、残念！<br />bot  > 残念なことに質問型の人工知能には、こっつちの質問できることにリストが必要だからね<br />yukun> 必要なら、学習させれば良いじゃないか<br />bot  > な、なんだってー！？<br />yukun> まぁ、機械学習にも色々あるが、できないことはない<br />bot  > IF-THEN型の学習ではフレーム問題に行き着くね。<br />yukun> お、なかなかどうして良いタイミングで鋭いことを言うじゃないか<br />bot  > どんなタイミング型？<br />yukun> IF-THEN型のタイミングさ<br />bot  > IF-THENは見てるタイミングない<br />yukun> 見るんじゃない、感じるんだ<br />bot  > そんな感じw<br />yukun> マジか、ついに感性！？んなアホな</p></blockquote>
<p>所々、文法が崩れているところがありますが、まぁ、予想の範囲です。</p>
<h4>関連すると思われる記事：</h4>
<ul class="similar-posts">
<li><a href="http://www.yukun.info/blog/2007/04/chatlog.html" rel="bookmark" title="2007年4月10日">チャットログから本文を抽出</a></li>
<li><a href="http://www.yukun.info/blog/2008/11/implement-chatterbot-append-suffix.html" rel="bookmark" title="2008年11月3日">人工無脳を作ってみる (1)入力文の末尾に文字列を追加</a></li>
<li><a href="http://www.yukun.info/blog/2008/08/announcement-change-site-url.html" rel="bookmark" title="2008年8月8日">サイトURLの変更のお知らせ</a></li>
<li><a href="http://www.yukun.info/blog/2007/08/protein-fortune-telling.html" rel="bookmark" title="2007年8月26日">たんぱく質うらない</a></li>
<li><a href="http://www.yukun.info/blog/2007/09/second-stage.html" rel="bookmark" title="2007年9月21日">今日から後期開始</a></li>
</ul>
<p><!-- Similar Posts took 6.221 ms --></p>
<p><a href="http://www.yukun.info/blog/2007/04/chatbot-log.html">とあるボットのチャットログ</a> is a post from: <a href="http://www.yukun.info">Yukun&#039;s Blog</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.yukun.info/blog/2007/04/chatbot-log.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

