<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="rss.css" type="text/css"?>
<rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="ja-JP">
	<channel rdf:about="http://itoshi.tv/d/index.rdf">
	<title>Hacking is believing@itoshi.tv(without comments)</title>
	<link>http://itoshi.tv/d/</link>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/" />
	<description>二階堂愛 (Itoshi NIKAIDO) が綴る Hacking is believing な日常</description>
	<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
	<dc:rights>Copyright 2010 Itoshi NIKAIDO (二階堂愛) &lt;dritoshi@gmail.com&gt;, copyright of comments by respective authors</dc:rights>
	<image rdf:resource="http://itoshi.tv/d/itoshi_logo.jpg" />
<items><rdf:Seq>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20100208#p02"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20100208#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20100207#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20091119#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20091115#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20091113#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20091031#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20091114#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20091008#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20090930#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20090908#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20090830#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20090828#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20090821#p01"/>
<rdf:li rdf:resource="http://itoshi.tv/d/?date=20090815#p01"/>
</rdf:Seq></items>
</channel>
<image rdf:about="http://itoshi.tv/d/itoshi_logo.jpg">
	<title>Hacking is believing@itoshi.tv</title>
	<url>http://itoshi.tv/d/itoshi_logo.jpg</url>
	<link>http://itoshi.tv/d/</link>
	</image>
	<item rdf:about="http://itoshi.tv/d/?date=20100208#p02">
<link>http://itoshi.tv/d/?date=20100208#p02</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20100208#p02" />
<dc:date>2010-02-08T11:52:45+09:00</dc:date>
<title>Rapache (mod_r) を使って R で CGI を書くよ。テンプレートエンジンBrew編</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>R</dc:subject>
<description>前回は寧n、いえ、なんでもないです、前回のコードでは、cat() を使ってがんばってHTMLタグを出力していました。これは気持ち悪いです。RのコードとHTMLのコードを分けておかないと、どちらかに変更があった場合に、お互いの影響に配慮しながら修正をしなければならなくなります。これは面倒ですね。 こんなときは、テンプレートエンジンを使って、HTMLを作る部分とRのコードをなるべく分けるのが良いですね。R にも Ruby でいうところの erb のようなテンプレートエンジンがあります。今回は、brew というテンプレートフレームワークを使います。 brewのインストールと設定 まず brew をインストールします sudo R install.pakcages(&quot;brew&quot;) q() 次に apache の設定をします。 sudo mkdir  /var/www/brew sudo jed /etc/apache2/sites-available/default  RHandler に brew を設定します。     # brew         Directory /var/www..</description>
<content:encoded><![CDATA[<h3>Rapache (mod_r) を使って R で CGI を書くよ。テンプレートエンジンBrew編</h3><p>前回は寧n、いえ、なんでもないです、前回のコードでは、cat() を使ってがんばってHTMLタグを出力していました。これは気持ち悪いです。RのコードとHTMLのコードを分けておかないと、どちらかに変更があった場合に、お互いの影響に配慮しながら修正をしなければならなくなります。これは面倒ですね。</p>
<p>こんなときは、テンプレートエンジンを使って、HTMLを作る部分とRのコードをなるべく分けるのが良いですね。R にも Ruby でいうところの erb のようなテンプレートエンジンがあります。今回は、<a href="http://cran.r-project.org/web/packages/brew/index.html">brew</a> というテンプレートフレームワークを使います。</p>
<h4>brewのインストールと設定</h4>
<p>まず brew をインストールします</p>
<pre>sudo R
install.pakcages("brew")
q()</pre>
<p>次に apache の設定をします。</p>
<pre>sudo mkdir  /var/www/brew
sudo jed /etc/apache2/sites-available/default </pre>
<p>RHandler に brew を設定します。</p>
<pre>    # brew
        &lt;Directory /var/www/brew&gt;
          #SetHandler r-handler
          SetHandler r-script
          RHandler brew::brew
        &lt;/Directory&gt;</pre>
<p>前回のコードを brew を使って書き直してみます。まずメインのコードです。</p>
<pre>cd  /var/www/brew
sudo jed index.r</pre>
<p>ほぼHTMLですね。プロット部分を別なファイル hist.r に追い出しています。brew() でこれを読み込みます。</p>
<pre>&lt;% setContentType('text/html') %&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;;
&lt;html&gt;
  &lt;head&gt;&lt;title&gt;Test&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;% brew('/var/www/brew/hist.r') %&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>プロットを描画するコード hist.r は以下の通り。ほぼ R のコードですね。このコードは画像を作り、最終的にはその画像のパスが入った img タグを作ります。</p>
<pre>&lt;%
randomFileName &lt;- function(prefix, postfix) {
  filename &lt;- paste(
    prefix,
    sprintf("%08d", as.integer(runif(1, 0, 10^7))),
    postfix,
    sep=""
  )
  return(filename)
}

image_dir &lt;- "/var/www/images"
filename  &lt;- randomFileName("hist_", ".png")
filepath  &lt;- paste(image_dir, filename, sep="/")

data &lt;- rnorm(1000)
png(filepath)
hist(data)
dev.off()
%&gt;
&lt;img src="/images/&lt;%=filename%&gt;"&gt;</pre>
<p><a href="http://localhost/brew/index.r">http://localhost/brew/index.r</a> にアクセスすると前回と同じようにヒストグラムが表示されます。リロードするとグラフが変わるのを確認してみてください。</p>
<p>これで「HTMLを組む」コードと「計算しプロットを作図する」コードがだいぶ分かれて見通しが良くなりました。次回こそなにか役に立つものを作ってみたいと思います。</p>
<p><a href="http://itoshi.tv/d/?date=20100208#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20100208#p01">
<link>http://itoshi.tv/d/?date=20100208#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20100208#p01" />
<dc:date>2010-02-08T11:45:19+09:00</dc:date>
<title>Rapache (mod_r) を使って R で CGI を書くよ。グラフ画像出力編</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>R</dc:subject>
<description>前回のつづきです。前回は rapache の設定と簡単なCGIを作ってみました。今度は画像を出力して表示する CGI を作ります。内容は、乱数を適当に作ってヒストグラムを作画するCGIです。画像はランダムなファイル名で保存します。 # Functions header - function(contenttype) {   setContentType(contenttype)                                                    } html.head - function(content) {    cat(&quot;head\n&quot;)   cat(content)   cat(&quot;/head\n&quot;)  } html.body - function(content) {                                                   cat(&quot;body\n&quot;)                                                                  cat(conte..</description>
<content:encoded><![CDATA[<h3>Rapache (mod_r) を使って R で CGI を書くよ。グラフ画像出力編</h3><p>前回のつづきです。前回は rapache の設定と簡単なCGIを作ってみました。今度は画像を出力して表示する CGI を作ります。内容は、乱数を適当に作ってヒストグラムを作画するCGIです。画像はランダムなファイル名で保存します。</p>
<pre># Functions
header &lt;- function(contenttype) {
  setContentType(contenttype)                                                   
}
html.head &lt;- function(content) { 
  cat("&lt;head&gt;\n")
  cat(content)
  cat("&lt;/head&gt;\n") 
}
html.body &lt;- function(content) {                                                
  cat("&lt;body&gt;\n")                                                               
  cat(content)                                                                  
  cat("&lt;/body&gt;&lt;/html&gt;\n")                                                       
}                                                                               
randomFileName &lt;- function(prefix, postfix) {                                   
  filename &lt;- paste(                                                            
    prefix,                                                                     
    sprintf("%08d", as.integer(runif(1, 0, 10^7))),                             
    postfix,                                                                    
    sep=""                                                                      
  )                                                                             
  return(filename)                                                              
}                                                                               
                                                                            
# Main                                                                          
image_dir &lt;- "/var/www/images"                                                  
filename  &lt;- randomFileName("hist_", ".png")                                    
filepath  &lt;- paste(image_dir, filename, sep="/")                                
                                                                                
data &lt;- rnorm(1000)                                                             

# output html                                                                   
header("text/html")                                                             
html.head("&lt;title&gt;Test&lt;/title&gt;")                                                
                                                                                
png(filepath)                                                                   
hist(data)                                                                      
dev.off()                                                                       
                                                                                
html.body(                                                                      
  paste(                                                                        
    '&lt;img src="/images/',                                                       
    filename,                                                                   
    '"&gt;',                                                                       
    sep=""                                                                      
  )                                                                             
)</pre>
<p>リロードすると画像が変わるのがわかると思います。次回はもっと役に立つものを作ってみます。</p>
<p><object id="scPlayer" width="815" height="624"> <param name="movie" value="http://content.screencast.com/users/dritoshi/folders/Default/media/0a798fbd-6165-4640-bbff-cb13d80e91c0/bootstrap.swf"></param> <param name="quality" value="high"></param> <param name="bgcolor" value="#FFFFFF"></param> <param name="flashVars" value="thumb=http://content.screencast.com/users/dritoshi/folders/Default/media/0a798fbd-6165-4640-bbff-cb13d80e91c0/FirstFrame.jpg&containerwidth=815&containerheight=624&content=http://content.screencast.com/users/dritoshi/folders/Default/media/0a798fbd-6165-4640-bbff-cb13d80e91c0/2010-02-08_0022.swf"></param> <param name="allowFullScreen" value="true"></param> <param name="scale" value="showall"></param> <param name="allowScriptAccess" value="always"></param> <param name="base" value="http://content.screencast.com/users/dritoshi/folders/Default/media/0a798fbd-6165-4640-bbff-cb13d80e91c0/"></param>  <embed src="http://content.screencast.com/users/dritoshi/folders/Default/media/0a798fbd-6165-4640-bbff-cb13d80e91c0/bootstrap.swf" quality="high" bgcolor="#FFFFFF" width="815" height="624" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/dritoshi/folders/Default/media/0a798fbd-6165-4640-bbff-cb13d80e91c0/FirstFrame.jpg&containerwidth=815&containerheight=624&content=http://content.screencast.com/users/dritoshi/folders/Default/media/0a798fbd-6165-4640-bbff-cb13d80e91c0/2010-02-08_0022.swf" allowFullScreen="true" base="http://content.screencast.com/users/dritoshi/folders/Default/media/0a798fbd-6165-4640-bbff-cb13d80e91c0/" scale="showall"></embed> </object></p>
<p>寧々さんかわいいです。</p>
<p><a href="http://itoshi.tv/d/?date=20100208#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20100207#p01">
<link>http://itoshi.tv/d/?date=20100207#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20100207#p01" />
<dc:date>2010-02-08T11:17:53+09:00</dc:date>
<title>Rapache (mod_r) を使って R で CGI を書くよ。Hello, World編</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>R</dc:subject>
<description>みなさん、こんばとらー。仕事で遺伝子発現データベースを作っているのですが、表示するグラフが Pixiv が保有する全イラスト数である490万枚 (2009/06発表) を越えてしまいました、やりました!(なにが?  所内の内部向けなので、PVが数百ですがw むこうは2億PV。 画像を吐くために Sun Grid Engine で PC クラスタをぶんまわしたりしています、頭わるいですね。数値データをグラフにするだけなので、WWWサーバで on the fly でグラフを描画すべきなのですが、サーバが Celeron, メモリ 800MB というという有様だったので躊躇していました。今回は新しいサーバに引っ越したので、R で on the fly 描画にトライしたいと思います。 まずは mod_R, いわゆる rapache というまぎらわしい名前のパッケージをセットアップし動作するところまでやってみましょう。環境は Ubuntu 9.10 です。 rapache のインストール まず、R を apt の source list に入れる。これで apt で最新の R を入れ放題。 ..</description>
<content:encoded><![CDATA[<h3>Rapache (mod_r) を使って R で CGI を書くよ。Hello, World編</h3><p>みなさん、こんばとらー。仕事で遺伝子発現データベースを作っているのですが、表示するグラフが Pixiv が保有する全イラスト数である490万枚 (2009/06発表) を越えてしまいました、やりました!(なにが?  所内の内部向けなので、PVが数百ですがw むこうは2億PV。</p>
<p>画像を吐くために Sun Grid Engine で PC クラスタをぶんまわしたりしています、頭わるいですね。数値データをグラフにするだけなので、WWWサーバで on the fly でグラフを描画すべきなのですが、サーバが Celeron, メモリ 800MB というという有様だったので躊躇していました。今回は新しいサーバに引っ越したので、R で on the fly 描画にトライしたいと思います。</p>
<p>まずは mod_R, いわゆる <a href="http://biostat.mc.vanderbilt.edu/rapache/">rapache</a> というまぎらわしい名前のパッケージをセットアップし動作するところまでやってみましょう。環境は Ubuntu 9.10 です。</p>
<h4>rapache のインストール</h4>
<p>まず、R を apt の source list に入れる。これで apt で最新の R を入れ放題。</p>
<pre>deb http://cran.r-project.org/bin/linux/ubuntu intrepid/</pre>
<p>次に rapache と関連パッケージを入れます。</p>
<pre>apt-get install r-base-dev apache2-mpm-prefork apache2-prefork-dev
wget http://biostat.mc.vanderbilt.edu/rapache/files/rapache-latest.tar.gz
rapachedir=`tar tzf rapache-latest.tar.gz   | head -1`
tar xzvf rapache-latest.tar.gz
cd $rapachedir
./configure
make
make instal</pre>
<h4>rapacheの設定</h4>
<p>それでは Apache の設定をしましょう。最近は Ruby on Rails を使うので Apache の設定はひさしぶりです。</p>
<pre>sudo emacs -nw /etc/apache2/mods-available/R.load
LoadModule R_module /usr/lib/apache2/modules/mod_R.so</pre>
<pre>sudo emacs -nw /etc/apache2/mods-available/R.conf
&lt;IfModule mod_R.c&gt;  ROutputErrors  &lt;Location /RApacheInfo&gt;
  SetHandler r-info
&lt;/Location&gt;
&lt;/IfModule&gt;</pre>
<pre>cd /etc/apache2/mods-enabled
sudo sudo ln -s ../mods-available/R.load
sudo sudo ln -s ../mods-available/R.conf</pre>
<p>Apache を再起動する。</p>
<pre>sudo /etc/init.d/apache2 restart
* Restarting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for  ServerName
... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1  for ServerName
  ...done.</pre>
<p>これで apache の設定は完了。</p>
<p><a href="http://localhost/RApacheInfo/">http://localhost/RApacheInfo/</a>
にアクセスするとサーバーの状態が表示されます。
<img src="http://img.skitch.com/20100207-d368ma1y38tus8pdneghd9t1c6.jpg" alt="20100207-d368ma1y38tus8pdneghd9t1c6.jpg"></p>
<h4>RでCGIを書いてみる</h4>
<p>さっそく、Hello, world しましょう。</p>
<p>まずは Apache の設定をします。</p>
<pre>sudo jed /etc/apache2/sites-available/default
   # rapache
       &lt;Directory /var/www/rapachetest&gt;
         SetHandler r-handler
         RFileHandler /var/www/R/test.R
       &lt;/Directory&gt;</pre>
<pre>sudo mkdir /etc/www/R
sudo mkdir /etc/www/rapachetest
cd /etc/www/R</pre>
<p>Hello, world のコード書きます。</p>
<pre>sudo jed test.R
# Functions
header &lt;- function() {
  setContentType("text/html")
}
html.head &lt;- function(content) {
  cat("&lt;head&gt;\n")
  cat(content)
  cat("&lt;/head&gt;\n")
}
html.body &lt;- function(content) {
  cat("&lt;body&gt;\n")
  cat(content)
  cat("&lt;/body&gt;&lt;/html&gt;\n")
}

# Main
header()
html.head("&lt;title&gt;Test&lt;/title&gt;")
html.body("Hello, world!\n")</pre>
<p>以下にアクセスします。
<a href="http://localhost/rapachetest/">http://localhost/rapachetest/</a></p>
<p><img src="http://img.skitch.com/20100207-842sc1fa5upns1wrgrfcuj6n5b.jpg" alt="20100207-842sc1fa5upns1wrgrfcuj6n5b.jpg"></p>
<p>これで終了です。今回は rapache の設定と hello, world をやってみました。次回はグラフを画像を吐いてみます。</p>
<p><a href="http://itoshi.tv/d/?date=20100207#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20091119#p01">
<link>http://itoshi.tv/d/?date=20091119#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20091119#p01" />
<dc:date>2009-11-20T12:41:17+09:00</dc:date>
<title>理化学研究所の最新の成果をお伝えするついったーbotを作りました #shiwake3</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>Twitter</dc:subject>
<description>http://twitter.com/riken_news 事業仕分け関連の議論では、研究者のアウトリーチへの努力不足が言われているようです。大学や研究所でウェブや新聞などで成果発表するよう努力しているようですが、あまり届いていないようです。そもそもRSSも吐かないようなサイトが多く、これでは定点観測することは技術的にも無理があります。これを一般のひとやサイエンスファンのかたに強いるかたちになっているのが現状です。 一方、ついったーは情報の伝達が速いだけでなく、伝搬する範囲がとても広くヘテロだと思います。これは気軽にアカウントをフォローしたり、RTのように気軽に発言を転送する文化があるからでしょう。またRSSも出力するのでRSSリーダーで追いかけることも可能です。 というわけで、自分が所属している理化学研究所のプレスリリースを自動的についったーに流すプログラム (bot) を「非公式に」作成しました。研究者はもとより、サイエンスファンのみなさまにフォローして頂いて、気軽にRTしてもらえればと思います。現在のところは、今回話題になったNSC(スパコン)やSpring8、PSC(植物セ..</description>
<content:encoded><![CDATA[<h3>理化学研究所の最新の成果をお伝えするついったーbotを作りました #shiwake3</h3><p><a href="http://twitter.com/riken_news">http://twitter.com/riken_news</a></p>
<p>事業仕分け関連の議論では、研究者のアウトリーチへの努力不足が言われているようです。大学や研究所でウェブや新聞などで成果発表するよう努力しているようですが、あまり届いていないようです。そもそもRSSも吐かないようなサイトが多く、これでは定点観測することは技術的にも無理があります。これを一般のひとやサイエンスファンのかたに強いるかたちになっているのが現状です。</p>
<p>一方、ついったーは情報の伝達が速いだけでなく、伝搬する範囲がとても広くヘテロだと思います。これは気軽にアカウントをフォローしたり、RTのように気軽に発言を転送する文化があるからでしょう。またRSSも出力するのでRSSリーダーで追いかけることも可能です。</p>
<p>というわけで、自分が所属している理化学研究所のプレスリリースを自動的についったーに流すプログラム (bot) を「非公式に」作成しました。研究者はもとより、サイエンスファンのみなさまにフォローして頂いて、気軽にRTしてもらえればと思います。現在のところは、今回話題になったNSC(スパコン)やSpring8、PSC(植物センター)と生命分子システム(ターゲットタンパク)、感染症研究ネットワーク支援センターに加え、免疫、生命情報基盤、ゲノム医学、CDB(発生・再生), OSC(ゲノム)のニュースを配信しています。近々、全所のニュースを配信する予定です。</p>
<p><a href="http://twitter.com/riken_news">http://twitter.com/riken_news</a></p>
<p>日経バイオテクノロジーのヘッドラインを流す <a href="http://twitter.com/nikkei_btj">http://twitter.com/nikkei_btj</a> もあわせてどうぞ。BTJには、アカデミアのひとはワンコインで全文が見れるサービスもあります。業界紙は減る一方の苦しい戦いを強いられているのではないでしょうか、蛋白質・核酸・酵素は休刊するそうです。育てるつもりで加入してあげてください。</p>
<p>追記: あ、あれ? nikkei_btj 動いてない&gt;&lt; サーバ死んでる、近々直しますね。サーバの電源落ちてました。起動して様子みます。</p>
<p>追記: SPring8 のプレスリリースも追加しました。</p>
<p>追記: 次世代スーパーコンピュータ開発実施本部のプレスリリースも追加しました。</p>
<p>追記 (20091120): 今回仕分けの対象になった植物センターと生命分子システム(ターゲットタンパク)、感染症研究ネットワーク支援センターを加えました。さらに、免疫、生命情報基盤、ゲノム医学も加えました。</p>
<p><a href="http://itoshi.tv/d/?date=20091119#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20091115#p01">
<link>http://itoshi.tv/d/?date=20091115#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20091115#p01" />
<dc:date>2009-11-15T03:46:05+09:00</dc:date>
<title>科研費削減の反対署名活動が始まっています #shiwake3</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<description>科学研究費補助金の一部の執行停止に対する反対署名 ほかにも、賛成・反対に関わらず、事業仕分けに対して具体的なアクションを興している団体・サイトを探しています。事業仕分けWS3まとめWiki までお知らせください。</description>
<content:encoded><![CDATA[<h3>科研費削減の反対署名活動が始まっています #shiwake3</h3><p><a href="http://www.shomei.tv/project-1343.html">科学研究費補助金の一部の執行停止に対する反対署名</a></p>
<p>ほかにも、賛成・反対に関わらず、事業仕分けに対して具体的なアクションを興している団体・サイトを探しています。<a href="http://mercury.dbcls.jp/w/index.php">事業仕分けWS3まとめWiki</a> までお知らせください。</p>
<p><a href="http://itoshi.tv/d/?date=20091115#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20091113#p01">
<link>http://itoshi.tv/d/?date=20091113#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20091113#p01" />
<dc:date>2009-11-14T09:11:02+09:00</dc:date>
<title>「定量生物学の会」第二回年会の"参加登録開始" #q-bio2010</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<description>「定量生物学の会」第二回年会の参加登録を開始しました。すでに定員の半分が埋まっていますのでお早めにどうぞ! 現在、分子生物学・発生生物学・生物物理学・そして理論生物学など生命科学研究の各領域において、「定量的な方法論で新しい生命像を構築する」という活動が将来を担う大きな方向性として相互依存的に浮上しつつあります。定量生物学の会はこうした背景を受けて、定量性を高く意識した生命科学について、その方向性や解決すべき点などを具体的な問題設定のもとで議論する場として、昨年から本格的に活動を開始しました。幅広いバックグランドの研究者が集い、オープンな雰囲気で議論を進めています。  第二回年会のプログラムの詳細などは下記ＵＲＬをご覧下さい。 http://bit.ly/2pIqlL</description>
<content:encoded><![CDATA[<h3>「定量生物学の会」第二回年会の"参加登録開始" #q-bio2010</h3><p>「定量生物学の会」第二回年会の参加登録を開始しました。すでに定員の半分が埋まっていますのでお早めにどうぞ!</p>
<blockquote><p>現在、分子生物学・発生生物学・生物物理学・そして理論生物学など生命科学研究の各領域において、「定量的な方法論で新しい生命像を構築する」という活動が将来を担う大きな方向性として相互依存的に浮上しつつあります。定量生物学の会はこうした背景を受けて、定量性を高く意識した生命科学について、その方向性や解決すべき点などを具体的な問題設定のもとで議論する場として、昨年から本格的に活動を開始しました。幅広いバックグランドの研究者が集い、オープンな雰囲気で議論を進めています。</p>
</blockquote>
<p>第二回年会のプログラムの詳細などは下記ＵＲＬをご覧下さい。</p>
<p><a href="http://bit.ly/2pIqlL">http://bit.ly/2pIqlL</a></p>
<p><a href="http://itoshi.tv/d/?date=20091113#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20091031#p01">
<link>http://itoshi.tv/d/?date=20091031#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20091031#p01" />
<dc:date>2009-11-14T09:05:54+09:00</dc:date>
<title>Twitterのリスト機能を使ってバイオ関連のアカウントを集めてみた</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>Twitter</dc:subject>
<description>「バイオ関連の Twitter アカウントのリストをつくったよ」 にあるアカウントをすべてリストに追加してみました。ご自由にフォロー、どうぞ。 http://twitter.com/dritoshi/biology</description>
<content:encoded><![CDATA[<h3>Twitterのリスト機能を使ってバイオ関連のアカウントを集めてみた</h3><p>「<a href="http://itoshi.tv/d/?date=20091008#p01">バイオ関連の Twitter アカウントのリストをつくったよ</a>」 にあるアカウントをすべてリストに追加してみました。ご自由にフォロー、どうぞ。</p>
<p><a href="http://twitter.com/dritoshi/biology">http://twitter.com/dritoshi/biology</a></p>
<p><a href="http://itoshi.tv/d/?date=20091031#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20091114#p01">
<link>http://itoshi.tv/d/?date=20091114#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20091114#p01" />
<dc:date>2009-11-14T08:59:04+09:00</dc:date>
<title>「事業仕分けWS3 まとめウィキ」ができています #shiwake3</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<description>ぼうのうさんが事業仕分けWS3 まとめウィキを立ててくれました。ありがとうございます。この手のコンテンツはユーザーが編集に参加しないと意味がないと個人的には思っています。よって、かなりページの構造を修正してコンテンツを追記してみました。みなさんもどうぞ。 理想的にはあらゆる情報がここに集まるようになって、それぞれが考えたり行動したりするための情報リソースになったらいいなと思っています。</description>
<content:encoded><![CDATA[<h3>「事業仕分けWS3 まとめウィキ」ができています #shiwake3</h3><p>ぼうのうさんが<a href="http://mercury.dbcls.jp/w/index.php">事業仕分けWS3 まとめウィキ</a>を立ててくれました。ありがとうございます。この手のコンテンツはユーザーが編集に参加しないと意味がないと個人的には思っています。よって、かなりページの構造を修正してコンテンツを追記してみました。みなさんもどうぞ。</p>
<p>理想的にはあらゆる情報がここに集まるようになって、それぞれが考えたり行動したりするための情報リソースになったらいいなと思っています。</p>
<p><a href="http://itoshi.tv/d/?date=20091114#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20091008#p01">
<link>http://itoshi.tv/d/?date=20091008#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20091008#p01" />
<dc:date>2009-10-09T01:38:27+09:00</dc:date>
<title>バイオ関連の Twitter アカウントのリストをつくったよ</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>Twitter</dc:subject>
<description>みなさん、はっぴーつぶやきライフをエンジョイしていますか! かくゆう僕も毎日 Twitter life を「体調不良をつぶやいた後、しばらくポストしないと職場で死亡説が流れる」程度には嗜んでおります、ハイ。 さて、バイオ関連のアカウントも増えてきていますので、Wiki にまとめてみました。バイオ関連企業や組織、科学雑誌、バイオインフォ系ツール、ニュース・ブログなどのアップデート情報などいろいろあります。もし載ってないアカウントがあれば、どんどん追記してくださいな。 バイオ関連の Twitter アカウント</description>
<content:encoded><![CDATA[<h3>バイオ関連の Twitter アカウントのリストをつくったよ</h3><p>みなさん、はっぴーつぶやきライフをエンジョイしていますか!</p>
<p>かくゆう僕も毎日 Twitter life を「体調不良をつぶやいた後、しばらくポストしないと職場で死亡説が流れる」程度には嗜んでおります、ハイ。</p>
<p>さて、バイオ関連のアカウントも増えてきていますので、Wiki にまとめてみました。バイオ関連企業や組織、科学雑誌、バイオインフォ系ツール、ニュース・ブログなどのアップデート情報などいろいろあります。もし載ってないアカウントがあれば、どんどん追記してくださいな。</p>
<p><a href="http://bit.ly/ofYgq">バイオ関連の Twitter アカウント</a></p>
<p><a href="http://itoshi.tv/d/?date=20091008#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20090930#p01">
<link>http://itoshi.tv/d/?date=20090930#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20090930#p01" />
<dc:date>2009-09-30T09:43:37+09:00</dc:date>
<title>Google Chart API で tDiary に数式を埋めこむプラグインを作ったよ</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>tDiary</dc:subject>
<dc:subject>Ruby</dc:subject>
<description>やっつけで。 {{google_chart &quot;f(x)=\\int_0^{x}g(t)\\,dt&quot;}}  google_chart.rb def google_chart(tex)   tex = tex.to_s.strip   id = CGI.escapeHTML(tex)    url = &quot;http://chart.apis.google.com/chart?cht=txamp;chs=1x0amp;chf=bg,s,FFFFFF00amp;chco=000000amp;chl=&quot;   url  tex   %Q[img src=&quot;#{url}&quot;] end  参考)  http://twitter.com/sesejun/statuses/4481642930 http://blog.s21g.com/articles/1628</description>
<content:encoded><![CDATA[<h3>Google Chart API で tDiary に数式を埋めこむプラグインを作ったよ</h3><p>やっつけで。</p>
<pre>{{google_chart "f(x)=\\int_0^{x}g(t)\\,dt"}}</pre>
<p><img src="http://chart.apis.google.com/chart?cht=tx&amp;chs=1x0&amp;chf=bg,s,FFFFFF00&amp;chco=000000&amp;chl=f(x)=\int_0^{x}g(t)\,dt"></p>
<p>google_chart.rb</p>
<pre>def google_chart(tex)
  tex = tex.to_s.strip
  id = CGI.escapeHTML(tex) 
  url = "http://chart.apis.google.com/chart?cht=tx&amp;amp;chs=1x0&amp;amp;chf=bg,s,FFFFFF00&amp;amp;chco=000000&amp;amp;chl="
  url &lt;&lt; tex
  %Q[&lt;img src="#{url}"&gt;]
end
</pre>
<p>参考)</p>
<ol>
<li><a href="http://twitter.com/sesejun/statuses/4481642930">http://twitter.com/sesejun/statuses/4481642930</a></li>
<li><a href="http://blog.s21g.com/articles/1628">http://blog.s21g.com/articles/1628</a></li>
</ol>
<p><a href="http://itoshi.tv/d/?date=20090930#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20090908#p01">
<link>http://itoshi.tv/d/?date=20090908#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20090908#p01" />
<dc:date>2009-09-08T15:12:38+09:00</dc:date>
<title>RでSBMLを読み込む</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>R</dc:subject>
<description>RでSBML (Systems Biology Markup Language) を読み込む方法を調べたのでメモします。RSBMLを使いDOMとして読み込みます。読み込んだDOMをRgraphvizで図示します。 SBMLは生物モデルを表現するためのXML言語で、多くのシミュレータなので採用されている言語規格です。具体的には遺伝子やタンパク質、代謝などのネットワークを表現するときに使います。ネットワーク構造と反応、反応に関するパラメータを格納することができます。 インストール編 libsbmlを dmg でダウンロードしてインストールする。 http://sourceforge.net/projects/sbml/files/libsbml/3.4.1/libsbml-3.4.1-libxml2-macosx.dmg/download RSBMLをインストールする。 sudo R  source(&quot;http://bioconductor.org/biocLite.R&quot;)  biocLite(&quot;RSBML&quot;) Graphviz をインストールする。 http://www.ryande..</description>
<content:encoded><![CDATA[<h3>RでSBMLを読み込む</h3><p>Rで<a href="http://sbml.org/Main_Page">SBML</a> (Systems Biology Markup Language) を読み込む方法を調べたのでメモします。RSBMLを使いDOMとして読み込みます。読み込んだDOMをRgraphvizで図示します。</p>
<p>SBMLは生物モデルを表現するためのXML言語で、多くのシミュレータなので採用されている言語規格です。具体的には遺伝子やタンパク質、代謝などのネットワークを表現するときに使います。ネットワーク構造と反応、反応に関するパラメータを格納することができます。</p>
<h4>インストール編</h4>
<p>libsbmlを dmg でダウンロードしてインストールする。</p>
<p><a href="http://sourceforge.net/projects/sbml/files/libsbml/3.4.1/libsbml-3.4.1-libxml2-macosx.dmg/download">http://sourceforge.net/projects/sbml/files/libsbml/3.4.1/libsbml-3.4.1-libxml2-macosx.dmg/download</a></p>
<p>RSBMLをインストールする。</p>
<pre>sudo R
&gt; source("http://bioconductor.org/biocLite.R")
&gt; biocLite("RSBML")</pre>
<p>Graphviz をインストールする。</p>
<p><a href="http://www.ryandesign.com/graphviz/download/Graphviz%202.12%20Revision%203%20Intel.dmg">http://www.ryandesign.com/graphviz/download/Graphviz%202.12%20Revision%203%20Intel.dmg</a></p>
<pre>sudo cp /usr/local/graphviz-2.12/lib/libgvc.3.dylib /usr/local/lib/</pre>
<p>Rgraphviz を入れる。</p>
<pre>sudo R
&gt; source("http://bioconductor.org/biocLite.R")
&gt; biocLite("Rgraphviz")</pre>
<h4>RSBML利用編</h4>
<p>SBMLを読み込む。まず適当なSBMLをどこかからゲットする</p>
<pre>curl -O http://www.staff.ncl.ac.uk/d.j.wilkinson/smfsb/autoreg-2-1.xml</pre>
<p>SBMLをDOMとして読み込む。S4オブジェクトになる。</p>
<pre>R
&gt; library(rsbml)
&gt; dom &lt;- rsbml_read("~/Desktop/autoreg-2-1.xml")
&gt; dom
SBML Document (level = 2, version = 1)
Model of AutoRegulatoryNetwork (Auto-regulatory network)

Compartments (1):
Cell

Species (5):
Gene() in Cell
P2Gene(P2.Gene) in Cell
...
Rna() in Cell
P() in Cell

Reactions (8):
Gene + P2 -&gt; P2Gene by k1 * Gene * P2 where k1 := 1
P2Gene -&gt; Gene + P2 by k1r * P2Gene where k1r := 10
...
Gene -&gt; Gene + Rna by k2 * Gene where k2 := 0.01
Rna -&gt; Rna + P by k3 * Rna where k3 := 10

UnitDefinitions (1):
substance := item
</pre>
<p>Model の species ID へアクセスするには、みんな大好き apply family の sapply を使う。</p>
<pre>&gt; sapply(species(model(dom)), id) 
    Gene   P2Gene      Rna        P       P2 
  "Gene" "P2Gene"    "Rna"      "P"     "P2" </pre>
<p>Reactions も同じようにアクセスできる。</p>
<pre>&gt; sapply(reactions(model(dom)), id)
         RepressionBinding   ReverseRepressionBinding 
       "RepressionBinding" "ReverseRepressionBinding" 
             Transcription                Translation 
           "Transcription"              "Translation" 
              Dimerisation               Dissociation 
            "Dimerisation"             "Dissociation" 
            RnaDegradation         ProteinDegradation 
          "RnaDegradation"       "ProteinDegradation" </pre>
<p>DOM を Rgraphviz で図示する。rsbml_graph で S4 オブジェクトを graph オブジェクトへ変換できる。あとは graph オブジェクトを操作できるライブラリ、例えば、Rgraphviz などで好きに操作できる。</p>
<pre>&gt; library(graph)
&gt; g &lt;- rsbml_graph(dom)
&gt; g
A graphNEL graph with directed edges
Number of Nodes = 13
Number of Edges = 18 
&gt; nodes(g)
 [1] "Gene"                     "P2Gene"                 
 [3] "Rna"                      "P"                      
 [5] "P2"                       "RepressionBinding"      
 [7] "ReverseRepressionBinding" "Transcription"          
 [9] "Translation"              "Dimerisation"           
[11] "Dissociation"             "RnaDegradation"         
[13] "ProteinDegradation" 
&gt; library(Rgraphviz)
&gt; g.layout &lt;- layoutGraph(g)
&gt; pdf("autoreg-2-1.pdf")
&gt; graph.par(list(nodes=list(fontsize=30)))
&gt; renderGraph(g.layout)
&gt; dev.off()</pre>
<p><br clear="all">
<img class="photo" src="http://itoshi.tv/d/images/20090908_0.png" alt="画像の説明" title="画像の説明" width="500" height="500">
<br clear="all"></p>
<p>参考URLはここにまとめた。<a href="http://b.hatena.ne.jp/ichan/SBML/">http://b.hatena.ne.jp/ichan/SBML/</a></p>
<p><a href="http://itoshi.tv/d/?date=20090908#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20090830#p01">
<link>http://itoshi.tv/d/?date=20090830#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20090830#p01" />
<dc:date>2009-08-30T03:57:49+09:00</dc:date>
<title>MeCabと辞書のインストールメモ</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<description>Mac OS Xで。辞書は、naist-jdilc, はてなキーワード、Wikipediaのタイトルのを使います。 MeCabをtar ballからインストールする。ここからダウンロードする。http://sourceforge.net/projects/mecab/files/ tar zxvf mecab-0.98pre3.tar.gz cd mecab-0.98pre3 ./configure make sudo make install 辞書 naist-jdic を入れる。 curl -O http://iij.dl.sourceforge.jp/naist-jdic/40865/mecab-naist-jdic-0.6.1-20090630.tar.gz tar zxvf mecab-naist-jdic-0.6.1-20090630.tar.gz cd mecab-naist-jdic-0.6.1-20090630 ./configure --with-charset=utf8 make sudo make sudo make install 辞書を設定する。 sud..</description>
<content:encoded><![CDATA[<h3>MeCabと辞書のインストールメモ</h3><p>Mac OS Xで。辞書は、naist-jdilc, はてなキーワード、Wikipediaのタイトルのを使います。</p>
<p>MeCabをtar ballからインストールする。ここからダウンロードする。<a href="http://sourceforge.net/projects/mecab/files/">http://sourceforge.net/projects/mecab/files/</a></p>
<pre>tar zxvf mecab-0.98pre3.tar.gz
cd mecab-0.98pre3
./configure
make
sudo make install</pre>
<p>辞書 naist-jdic を入れる。</p>
<pre>curl -O http://iij.dl.sourceforge.jp/naist-jdic/40865/mecab-naist-jdic-0.6.1-20090630.tar.gz
tar zxvf mecab-naist-jdic-0.6.1-20090630.tar.gz
cd mecab-naist-jdic-0.6.1-20090630
./configure --with-charset=utf8
make
sudo make
sudo make install</pre>
<p>辞書を設定する。</p>
<pre>sudo jed  /usr/local/etc/mecabrc
dicdir =  /usr/local/lib/mecab/dic/naist-jdic/ </pre>
<p>はてなキーワードを入手する。</p>
<pre>wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv -O hatena.txt
emacs createDict.py</pre>
<p><a href="http://deepneko.dyndns.org/kokotech/2009/06/mecabwikipedia.html">http://deepneko.dyndns.org/kokotech/2009/06/mecabwikipedia.html</a> より引用。ありがとうございます。</p>
<pre>import sys
import re

year = re.compile("[0-9]{4}")

ng = [chr(i) for i in range(0,32)] 

def main():        
        for x in sys.stdin:
                if re.search(year,x):
                        continue
                k = x.split("\t")[1].strip()
                if len(k) &lt; 2:
                        continue
                for word in ng:
                        if word in k:
                                continue
                k = k.lower()
                cost = int(max(-36000, -400 * len(k)**1.5))
                print "%s,0,0,%s,名詞,一般,*,*,*,*,%s,*,*,はてなキーワード," % (k,cost,k)
if __name__ == '__main__':
  main()</pre>
<p>はてなキーワードから辞書を作る。</p>
<pre>nkf -Ew hatena.txt | python createDict.py | nkf -e &gt; hatenakeyword.csv
userdic = /Users/itoshi/Sources/dict/hatenakeyword.dic,/Users/itoshi/Sources/dict/jawikipedia.dic                                     
/usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/naist-jdic -u /Users/itoshi/Sources/dict/hatenakeyword.dic -f utf-8 -t utf-8 hatenakeyword.csv</pre>
<p>日本語の Wikipedia のタイトルをゲットする。</p>
<pre>wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-all-titles-in-ns0.gz
gunzip jawiki-latest-all-titles-in-ns0.gz
emacs -nw makedic.rb</pre>
<p><a href="http://neta.pg-feed.com/data/frame_292734.html">http://neta.pg-feed.com/data/frame_292734.html</a> より引用。ありがとうございます。</p>
<pre>﻿﻿#!/usr/bin/ruby

open($*[0]).each do |line|
  title = line.strip

  next if title =~ /^\./            
  next if title =~ /[0-9]{4}/
  next if title =~ /^[-.0-9]+$/

  score = [-36000.0 ,-400 *(title.size**1.5)].max.to_i
  print "#{title},0,0,#{score},名詞,一般,*,*,*,*,#{title},*,*,wikipedia_keyword,\n" if title.size &gt; 9
end</pre>
<p>Wikipedia のタイトルを mecab 辞書へ変換する。</p>
<pre>chmod +x makedic.rb 
./makedic.rb jawiki-latest-all-titles-in-ns0 &gt; jawikipedia.csv
/usr/local/libexec/mecab/mecab-dict-index -d /usr/local/lib/mecab/dic/naist-jdic -u /Users/itoshi/Sources/dict/jawikipedia.dic -f utf-8 -t utf-8 jawikipedia.csv</pre>
<p><a href="http://itoshi.tv/d/?date=20090830#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20090828#p01">
<link>http://itoshi.tv/d/?date=20090828#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20090828#p01" />
<dc:date>2009-08-28T08:29:17+09:00</dc:date>
<title>Twitterで自動フォロー返しするよ、ただしRで</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>R</dc:subject>
<dc:subject>Twitter</dc:subject>
<description>「protected なひと」と、「発言数が100回以下のひと(SPAMアカウント対策)」は自動でフォローされませんよー。 twitteRには Twitter API の friendship methods まわりが実装されていないので、curl で直接API叩いちゃってます。ただ、RCurlでPOSTメソッドでアクセスする方法がよくわからないので、curl -d を system からコールしてます。やりかた知っているひとがいたら教えてください。 あと、userFriends() とか user object な list を返すくせに、こいつがなぜか unlist できない。S4オブジェクトを格納した list は unlist できないとかですかね？ R ムズカシイネ＼(＾o＾)／ library(&quot;twitteR&quot;)  # make twitter's session myuser     - &quot;chii_pc&quot; mypassword - &quot;ちょびっツ&quot; mysession  - initSession(myuser, mypassword)  myfriends   -..</description>
<content:encoded><![CDATA[<h3>Twitterで自動フォロー返しするよ、ただしRで</h3><p>「protected なひと」と、「発言数が100回以下のひと(SPAMアカウント対策)」は自動でフォローされませんよー。</p>
<p>twitteRには Twitter API の friendship methods まわりが実装されていないので、curl で直接API叩いちゃってます。ただ、RCurlでPOSTメソッドでアクセスする方法がよくわからないので、curl -d を system からコールしてます。やりかた知っているひとがいたら教えてください。</p>
<p>あと、userFriends() とか user object な list を返すくせに、こいつがなぜか unlist できない。S4オブジェクトを格納した list は unlist できないとかですかね？</p>
<p>R ムズカシイネ＼(＾o＾)／</p>
<pre>library("twitteR")

# make twitter's session
myuser     &lt;- "chii_pc"
mypassword &lt;- "ちょびっツ"
mysession  &lt;- initSession(myuser, mypassword)

myfriends   &lt;- userFriends(myuser, session=mysession)
myfriends   &lt;- unlist(lapply(myfriends, function(x) x@screenName))

myfollowers &lt;- userFollowers(myuser, session=mysession)

addusers &lt;- lapply(myfollowers,
  function(myfollower) {
    # new friend or not?
    if (! any(myfriends == myfollower@screenName) ) {
      # protected or not?    
      if (! myfollower@protected) {
        # spam or not?
        if (myfollower@statusesCount &gt; 100) {
          return(myfollower)
        }
      }
    }
  }    
)

createFriendship &lt;- function(user, password, friend) {
  url &lt;- paste("http://twitter.com/friendships/create/", friend, ".xml", sep="")
  user.and.pass &lt;- paste(user, password, sep=":")
  cmd &lt;- paste("curl", "-u", user.and.pass, "-d", '""', url, sep=" ")
  
  cat(cmd, "\n")
  system(cmd)
  return(cmd)
}

devnull &lt;- lapply(addusers,
  function(myfollower) {
    if ( ! is.null(myfollower) ) {
      createFriendship(myuser, mypassword, myfollower@screenName)
      Sys.sleep(3)
      return(myfollower)
    }
  }
)</pre>
<p>あとは cron でぐーるぐる。</p>
<pre>*/5 * * * *   R --vanilla -q -f /どっか/ディレクトリ/chii_pc/following.r</pre>
<p><a href="http://itoshi.tv/d/?date=20090828#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20090821#p01">
<link>http://itoshi.tv/d/?date=20090821#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20090821#p01" />
<dc:date>2009-08-22T16:23:21+09:00</dc:date>
<title>どのように「アタシだけのヒト」と確信するのか、ベイズ的に考えてみた</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<description>みなさん、こんばんは。「アタシだけのヒト」みつかりましたか？天丼です、完全に「定番の挨拶」として流行らせようとしてますね。 いや、なかなかみつからないものですね、僕なんかはもうそろそろ探索範囲を広げてみようと考えていますよ。2次元の世界あたりはどうでしょうか? 3次元より狭いので探索空間はぐっと狭くなります、これは良いアイディアです。次元を落すのは高次元のデータ解析の基本ですからね。 さてそもそも「アタシだけのヒト」とはどんなヒト? きっと自分に対して誠実なひとなのではないか? と私は考えました。誠実が服を脱いで歩いていると巷で評判の私の言うことなので、どうかと思いますが、今日はそういうことにして、この問題についてベイズ的に考えてみます。 誠実なヒトは、約束を守るヒトです。アナタからみてアノヒトは  約束を守る性格 約束を破る性格  のどちからを取ります。また、アナタは  約束を守られる 約束を破られる  のどちらかを体験します。 このとき、アノヒトが「約束を守るひとである、と確信していく 」= 「アタシだけのヒトであると確信していく」様子をベイズの定理とベイズ更新 (bayes ..</description>
<content:encoded><![CDATA[<h3>どのように「アタシだけのヒト」と確信するのか、ベイズ的に考えてみた</h3><p>みなさん、こんばんは。「アタシだけのヒト」みつかりましたか？天丼です、完全に「定番の挨拶」として流行らせようとしてますね。</p>
<p>いや、なかなかみつからないものですね、僕なんかはもうそろそろ探索範囲を広げてみようと考えていますよ。2次元の世界あたりはどうでしょうか? 3次元より狭いので探索空間はぐっと狭くなります、これは良いアイディアです。次元を落すのは高次元のデータ解析の基本ですからね。</p>
<p>さてそもそも「アタシだけのヒト」とはどんなヒト? きっと自分に対して誠実なひとなのではないか? と私は考えました。誠実が服を脱いで歩いていると巷で評判の私の言うことなので、どうかと思いますが、今日はそういうことにして、この問題についてベイズ的に考えてみます。</p>
<p>誠実なヒトは、約束を守るヒトです。アナタからみてアノヒトは</p>
<ul>
<li>約束を守る性格</li>
<li>約束を破る性格</li>
</ul>
<p>のどちからを取ります。また、アナタは</p>
<ul>
<li>約束を守られる</li>
<li>約束を破られる</li>
</ul>
<p>のどちらかを体験します。</p>
<p>このとき、アノヒトが「約束を守るひとである、と確信していく 」= 「アタシだけのヒトであると確信していく」様子をベイズの定理とベイズ更新 (bayes updating) を使ってシミュレーションしています。その筋では reputation とか呼ばれている話です。</p>
<h4>設定</h4>
<p>まず誠実なヒトを定義しましょう。</p>
<ul>
<li>誠実: 約束を10回のうち8回まで守る</li>
<li>不実: 約束を10回のうち3回しか守らない</li>
</ul>
<p>誠実なヒトでも失敗もありますので8/10ということにします。マザーテレサも「愛したいなら許すことを知れ」的なことを言っていますしね。逆に不実のひととは3/10とします、嫌なやつです。</p>
<p>アタシだけのヒトも定義します。</p>
<ul>
<li>確信が0.9以上になったら「アタシだけのヒト」</li>
<li>確信が0.1以下になったら「アタシだけのヒトじゃない」</li>
</ul>
<p>このように決断することにします。肝心の確信 (belief) の度合いですが、これは</p>
<ul>
<li>P(性格)が事前確率</li>
<li>P(約束|性格)が尤度関数</li>
</ul>
<p>としたときの事後確率P(性格|約束)が確信度になります。t回目の約束のときにはt-1の事後確率を事前確率として使うことで確率を更新していきます。これがベイズ更新です。tDiaryで数式書く設定してないので、コードみてください(あとで追記するかも)</p>
<h4>シミュレーション</h4>
<p>さて、アノヒトと100回ほど約束をします。そのたびに「アタシだけのヒト」であるという「確信」がどう移り変わるでしょうか?</p>
<p>ここでは、仮にアノヒトは7/10の割合で約束を守る人だとしましょう。でもあなたはこれを知りえないので、実際に約束をしてみて、経験から確信度を変化させてみるわけですね。</p>
<h4>結果</h4>
<h5>第一印象がニュートラルだった場合のシナリオ</h5>
<p>もし最初の約束をしたときに、「アタシだけのヒト確信度」が五分五分だと思っているとします。以下のグラフの黒い線が確信の変化です。平均して20回ぐらい約束を繰り返してみて、「アタシだけのヒト」と確信しています。この線は、何度も人生をやりなおしみて、その平均を見ています。1000回生れ変わった設定です。灰色の線は1回ごとのシナリオを示しています。セーブしておいてそこから何度も始めてみた、という感じです。bad end になったシナリオがいくつかありますね。
<br clear="all">
<img class="photo" src="http://itoshi.tv/d/images/20090821_0.png" alt="シナリオ1" title="シナリオ1" width="480" height="480">
<br clear="all"></p>
<h5>性悪説、初対面の印象が悪い、こいつはないないwww みたいなシナリオ</h5>
<p>確信度が2/10 から始めてみます。32回目にしてやっと確信していますね。また dead end なシナリオも増えています。第一印象重要!!! 第一印象最悪でも最後はくっつく、みたいなおいしい話はアニメでは良く聞くのに、なぜか僕がそのようなめに会わないのもわかります。でも本当に良いひとだったらねばる価値はありそうですね。また確信が形成されるまでの間に、灰色の線が暴れています。この期間のみかけ確信度が高いところで決断してしまうと、判断すると見誤ることが可能性が出てきますね。
<br clear="all">
<img class="photo" src="http://itoshi.tv/d/images/20090821_1.png" alt="シナリオ2" title="シナリオ2" width="480" height="480">
<br clear="all"></p>
<h5>「嘘をつく悪いアノヒトに一目惚れ、ダメなヒトほど愛しちゃう」シナリオ</h5>
<p>4.5/10回の嘘つきに、最初の確信度0.8で一目惚れです。4.5ってところがアメとムチな感じでやらしいです。</p>
<p>平均して50回の約束ぐらいでゆっくりと気付くのですが、個別のシナリオ、つまり灰色の線をみると暴れまくりです。速攻バレてます。まあ、ずるずると付き合ってしまう、みたいなシナリオもないことないようですがレアのようです。これもお話の世界だけなのでしょうかね。ちなみに5.5回の嘘つきさんだと100回約束の間には「アタシだけのヒトじゃない」という決断には至りませんでした、やらしいですね。</p>
<p><br clear="all">
<img class="photo" src="http://itoshi.tv/d/images/20090821_2.png" alt="シナリオ3" title="シナリオ3" width="480" height="480">
<br clear="all"></p>
<h4>おわりに</h4>
<p>全体を通して面白いのは一度確信に至ると決断が変わらないことが多いようです。この現象は、ウォールステッターさんという国際政治学者が cry-wolf syndrome と呼び、真珠湾攻撃、キューバ危機のような政治的誤算が生じる理由として議論したそうです。</p>
<p>まあ、わーわー言いましたが、そもそも相手が自分のことを「アタシだけのヒト」だと確信してくれるかどうかは、また別の話ですけどね! 仮に誠実と思われても「良い人」どまりってこともあるし。ままならね〜</p>
<p>以下、Rのコードを載せておきます (つづく...かもしれない)。こなれてないコードですが...</p>
<pre>rm(list=ls())                                                                   
                                                                                
wolfboy &lt;- function (p, simNum, w0, true_prob) {                                
                                                                                
  w &lt;- rep(0, simNum)                                                           
  z &lt;- rep(0, simNum)                                                           
  w[1] &lt;- w0                                                                    
                                                                                
  for ( i in 2:simNum ) {                                                       
    z[i] &lt;- ifelse( runif(1) &gt; true_prob, 1, 0 )                                
    #cat(i, z, "\n")                                                            
    if (z[i] == 0) {                                                            
      w[i] &lt;- (w[i-1]*p[1,1]) / ( w[i-1]*p[1,1] + (1-w[i-1])*p[2,1] )           
    } else {                                                                    
      w[i] &lt;- (w[i-1]*p[1,2]) / ( w[i-1]*p[1,2] + (1-w[i-1])*p[2,2] )           
    }                                                                           
  }                                                                             
  return(w)                                                                     
}                                                                               
                                                                                
simNum &lt;- 100                                                                   
                                                                                
# def honest man                                                                
p &lt;- matrix(c(8/10, 2/10, 3/10, 7/10), nrow=2, byrow=T)                         
threshold.heaven &lt;- 0.9                                                         
threshold.hell   &lt;- 0.1                                                         
                                                                                
# your mind                                                                     
w0 &lt;- 0.5                                                                       
#w0 &lt;- 0.2                                                                      
#w0 &lt;- 0.8                                                                      
                                                                                
# man                                                                           
true_prob &lt;- 0.7                                                                
#true_prob &lt;- 0.45
                                                                                
# sim.                                                                          
ws &lt;- replicate( 1000, wolfboy(p, simNum, w0, true_prob) )                      
w.mean &lt;- rowMeans(ws)                                                          
pass.index &lt;- max( which(w.mean &lt;= threshold.heaven) )                          
cat(pass.index, "\n")                                                           
                                                                                
# plot                                                                          
png("wolf.png")                                                                 
matplot(1:100, ws[,1:30], type="l", col="gray", ylim=c(0,1),                    
        xlab="num. of date", ylab="Prob. of honest")                            
lines(w.mean, type="l", col="black")                                            
abline(h=threshold.heaven,  col="red")                                          
abline(h=threshold.hell,    col="blue")                                         
abline(v=pass.index, col="red")                                                 
dev.off() </pre>
<h4>元ネタ</h4>
<p>以下の2冊に元ネタの「羊飼いとオオカミ」の例が載っています。これを参考にしました。1のほうがやわらかい日本語で書かれていて読みやすいと思います。</p>
<ol>
<li><a href="http://www.amazon.co.jp/gp/product/4489020368?ie=UTF8&amp;tag=itoshitv-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4489020368">入門ベイズ統計—意思決定の理論と発展</a></li>
<li><a href="http://www.amazon.co.jp/gp/product/4254295111?ie=UTF8&amp;tag=itoshitv-22&amp;linkCode=as2&amp;camp=247&amp;creative=7399&amp;creativeASIN=4254295111">意思決定の基礎 (シリーズ意思決定の科学)</a></li>
</ol>
<p>参考文献: <a href="http://www.amazon.co.jp/%E3%81%A1%E3%82%87%E3%81%B3%E3%81%A3%E3%83%84-1-%E3%83%A4%E3%83%B3%E3%82%B0%E3%83%9E%E3%82%AC%E3%82%B8%E3%83%B3%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%82%B9-CLAMP/dp/4063343839%3FSubscriptionId%3D1CVA98NEF1G753PFESR2%26tag%3Ditoshitv-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4063343839"><img class="amazon" src="http://ecx.images-amazon.com/images/I/512FPGWKGRL._SL75_.jpg"
height="75" width="52"
alt="ちょびっツ 1 (ヤングマガジンコミックス)(CLAMP)" title="ちょびっツ 1 (ヤングマガジンコミックス)(CLAMP)">
ちょびっツ 1 (ヤングマガジンコミックス)(CLAMP)</a>
きっと、ちぃにはベイズ意思決定回路が実装されるに違いない。</p>
<p><a href="http://itoshi.tv/d/?date=20090821#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
<item rdf:about="http://itoshi.tv/d/?date=20090815#p01">
<link>http://itoshi.tv/d/?date=20090815#p01</link>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://itoshi.tv/d/?date=20090815#p01" />
<dc:date>2009-08-15T22:49:50+09:00</dc:date>
<title>RSS読みこんでTwitterに連投するだけのプログラムを書いた、ただしRで</title>
<dc:creator>Itoshi NIKAIDO (二階堂愛)</dc:creator>
<dc:subject>Twitter</dc:subject>
<dc:subject>R</dc:subject>
<description>みなさんおひさしぶりです。「アタシだけのヒト」みつかりましたか？ 僕は数年前に、そうだと思った人に逃げられてしまいました、てへっ。それ以来というもの、週末は、ひとりじめの時間に自分へのこほうび！ とばかりに仕事やハック、読書に明けたり暮れたりしちゃってます！ 贅沢ですね。 ひさしぶりに日記のようなものを書いてしまった。これははずかしいね (キャラかわってね？)。いや、最近はついったーばかりで、ブログを書かなくなりましたねー。 さて、そんなわけで、みんな大好きついったーとRがらみのクイックハックしてみました。自由な時間をすべて自分のために使える独身帰属貴族なおいらですが、おとなの夏休みの自由研究ですね。「おとなの」とつくとなんだか微エロな気がしてくるので日本語ってば不思議！ 。。。小ネタのためにくだらない前置きを読ませてしまってすみません 具体的には RSXML でどっかの RSS を parse して twitteR でついったーに連投します。apply family を2つ使うだけの簡単なお仕事でした！ 試しに書いたスクリプトをさらしておきますね。 自動的についったーに投稿するプ..</description>
<content:encoded><![CDATA[<h3>RSS読みこんでTwitterに連投するだけのプログラムを書いた、ただしRで</h3><p>みなさんおひさしぶりです。「アタシだけのヒト」みつかりましたか？ 僕は数年前に、そうだと思った人に逃げられてしまいました、てへっ。それ以来というもの、週末は、ひとりじめの時間に自分へのこほうび！ とばかりに仕事やハック、読書に明けたり暮れたりしちゃってます！ 贅沢ですね。</p>
<p>ひさしぶりに日記のようなものを書いてしまった。これははずかしいね (キャラかわってね？)。いや、最近はついったーばかりで、ブログを書かなくなりましたねー。</p>
<p>さて、そんなわけで、みんな大好きついったーとRがらみのクイックハックしてみました。自由な時間をすべて自分のために使える独身<del>帰属</del>貴族なおいらですが、おとなの夏休みの自由研究ですね。「おとなの」とつくとなんだか微エロな気がしてくるので日本語ってば不思議！</p>
<p>。。。小ネタのためにくだらない前置きを読ませてしまってすみません&gt;&lt;</p>
<p>具体的には RSXML でどっかの RSS を parse して twitteR でついったーに連投します。apply family を2つ使うだけの簡単なお仕事でした！ 試しに書いたスクリプトをさらしておきますね。</p>
<p>自動的についったーに投稿するプログラムをボットと呼びますが、これはボットではありません。なぜなら、「この子がロボット三原則に縛られることのないようにしたかった」からです！(元ネタしらないひとごめんなさい</p>
<p><a href="http://twitter.com/chii_pc">http://twitter.com/chii_pc</a></p>
<pre>library("twitteR")
library("XML") 

# tweet id database for redundancy check
posted_ids.file &lt;-  '/home/itoshi/Projects/chii_pc/posted_ids.rdat'
if ( file.exists(posted_ids.file) ) {
  load(posted_ids.file)
} else {
  posted_ids &lt;- 0
  save(posted_ids, file=posted_ids.file)
}  

# make twitter's session
myuser     &lt;- "chii_pc"
mypassword &lt;- "ちょびっツ"
mysession  &lt;- initSession(myuser, mypassword)

# twitter search
cat("Get rdf file...\n")
rdf.file &lt;- "/home/itoshi/Projects/chii_pc/tl.rdf"
url &lt;- '"http://pcod.no-ip.org/yats/search?query=%E3%81%A1%E3%81%83+(%E3%81%8A%E3%81%BC%E3%81%88%E3%81%9F+or+%E8%A6%9A%E
3%81%88%E3%81%9F)&amp;lang=ja&amp;fast&amp;rss"'
cmd &lt;- paste('curl -o', rdf.file, url, sep=" ")
cat(cmd, "\n")
system(cmd)

# parsing
cat("Parsing...\n")
doc &lt;- xmlTreeParse(rdf.file, getDTD=F)
tweets &lt;- xmlSApply(doc[["feed"]],
  function(entry) {
    if (xmlName(entry) == "entry") {

      author.name &lt;- xmlValue( entry[["author"]][["name"]] )
      if (author.name != myuser) {
        # make tweet
        tweet &lt;- xmlValue(entry[["summary"]])
        tweet &lt;- sub("^.+ : ", "", tweet)
        tweet &lt;- gsub("^@", ".@ ", tweet)

        # id
        entry.id &lt;- xmlValue( entry[["id"]] )
        entry.id &lt;- as.numeric( sub(".*/", "", entry.id) )
        cat(paste(entry.id, tweet), "\n")
        c(entry.id, tweet)
      }
    }
  }
)

# post
cat("Posting...\n")
posting_ids &lt;- lapply(rev(tweets),
  function(tweet) {
    entry.id &lt;- tweet[[1]]
    tweet    &lt;- tweet[[2]]
    
    if ( ! is.null(tweet) ) {

      # redundancy check
      if ( ! any(posted_ids == entry.id) ) {
        cat(paste("Post", entry.id, tweet, sep="\t"), "\n")
        # post new tweet
        Sys.sleep(5)
        updateStatus(tweet, session=mysession)
        return(entry.id)
      } else {
        cat(paste("Skip", entry.id, tweet, sep="\t"), "\n")
      }
      
    }
    
  }
)

# save tweet id database
posted_ids &lt;- unique( c(posted_ids, unlist(posting_ids)) )
save(posted_ids, file=posted_ids.file)

cat("Done\n" )</pre>
<p>以上のRプログラムを cron にしこむだけ。</p>
<pre>*/5 * * * *   R --vanilla -q -f /home/itoshi/Projects/chii_pc/chii_pc.r</pre>
<p>そのうち人工無能かしてみたいなー。</p>
<p>参考文献)
<a href="http://www.amazon.co.jp/%E3%81%A1%E3%82%87%E3%81%B3%E3%81%A3%E3%83%84-1-%E3%83%A4%E3%83%B3%E3%82%B0%E3%83%9E%E3%82%AC%E3%82%B8%E3%83%B3%E3%82%B3%E3%83%9F%E3%83%83%E3%82%AF%E3%82%B9-CLAMP/dp/4063343839%3FSubscriptionId%3D1CVA98NEF1G753PFESR2%26tag%3Ditoshitv-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4063343839"><img class="amazon" src="http://ecx.images-amazon.com/images/I/512FPGWKGRL._SL75_.jpg"
height="75" width="52"
alt="ちょびっツ 1 (ヤングマガジンコミックス)(CLAMP)" title="ちょびっツ 1 (ヤングマガジンコミックス)(CLAMP)">
ちょびっツ 1 (ヤングマガジンコミックス)(CLAMP)</a></p>
<p><a href="http://itoshi.tv/d/?date=20090815#c">ツッコミを入れる</a></p>]]></content:encoded>
</item>
</rdf:RDF>
