<?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://niku.name/index.rdf">
	<title>ヽ（´・肉・｀）ノログ</title>
	<link>http://niku.name/</link>
	<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/" />
	<description></description>
	<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
	<dc:rights>Copyright 2010 ヽ（´・肉・｀）ノ &lt;niku@niku.name&gt;, copyright of comments by respective authors</dc:rights>
	<items><rdf:Seq>
<rdf:li rdf:resource="http://niku.name/20100829.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100818.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100723.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100808.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100808.html#c02"/>
<rdf:li rdf:resource="http://niku.name/20100808.html#c01"/>
<rdf:li rdf:resource="http://niku.name/20100722.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100720.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100714.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100624.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100623.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100605.html#p02"/>
<rdf:li rdf:resource="http://niku.name/20100605.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100603.html#p01"/>
<rdf:li rdf:resource="http://niku.name/20100525.html#p01"/>
</rdf:Seq></items>
</channel>
<item rdf:about="http://niku.name/20100829.html#p01">
<link>http://niku.name/20100829.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100829.html#p01" />
<dc:date>2010-08-30T00:13:45+09:00</dc:date>
<title>RubyKaigi2010に「参加」した</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>ruby</dc:subject>
<description>とても良かったです．RubyKaigiに参加することで，今までの僕を知り，これからの僕を考えることができました． 残念なRubyKaigiにいるだけの2日間 実は1日目終了時点では「思ったほどではないな…」と感じていました．2日目は風邪気味で途中で帰る位具合が悪く，なにもできませんでした．2日目終了時点では，僕のRubyKaigiはとても残念なことになっていました． 今ならわかるのですが，それは1,2日目の企画やスピーカーさんが悪かったのではなく，僕の，セッションへの姿勢が間違っていたからなのです． 僕の&quot;Conflicts and Resolutions&quot; 2日目を早めに切り上げてホテルでゴロゴロしている時「RubyKaigiに何かを期待しすぎていたのかもしれない」とひらめきました．無意識のうちに「RubyKaigiに&quot;いる&quot;だけで，何か神がかり的な展望が開けるのではないか」と期待していたようです．でも実際にはそんなことは起こりませんでした． 僕の認識「いるだけでいいことがある」は「いるだけではいいことはない」RubyKaigiの現実とConflictしていました．そこで自分の認..</description>
<content:encoded><![CDATA[<h3>RubyKaigi2010に「参加」した</h3><p>とても良かったです．RubyKaigiに参加することで，今までの僕を知り，これからの僕を考えることができました．</p>
<h4>残念なRubyKaigiにいるだけの2日間</h4>
<p>実は1日目終了時点では「思ったほどではないな…」と感じていました．2日目は風邪気味で途中で帰る位具合が悪く，なにもできませんでした．2日目終了時点では，僕のRubyKaigiはとても残念なことになっていました．</p>
<p>今ならわかるのですが，それは1,2日目の企画やスピーカーさんが悪かったのではなく，僕の，セッションへの姿勢が間違っていたからなのです．</p>
<h4>僕の"Conflicts and Resolutions"</h4>
<p>2日目を早めに切り上げてホテルでゴロゴロしている時「RubyKaigiに何かを期待しすぎていたのかもしれない」とひらめきました．無意識のうちに「RubyKaigiに"いる"だけで，何か神がかり的な展望が開けるのではないか」と期待していたようです．でも実際にはそんなことは起こりませんでした．</p>
<p>僕の認識「いるだけでいいことがある」は「いるだけではいいことはない」RubyKaigiの現実とConflictしていました．そこで自分の認識を「参加するといいことがある」に変更して，現実とのResolutionを図ったのです．そしてそれは成功しました．</p>
<h4>凄いRubyKaigiに参加した3日目</h4>
<p>気づきを元に，3日目は「何かを得よう」と意識してセッションに参加しました．そうするとセッションから拾える情報量が，これまでの2日間と全然違い「こういう事を言っているのは，たぶんこんな経緯があってのことなんだろうな」とか「これは言外にこういう意味も含んでいるに違いない」とか「ここがわかんないな…」「このフレーズにはとても共感できる」など，発表者からの情報に対しての，自分なりのまとめや経緯，疑問，感情などを生むことができました．</p>
<p>セッションを聞いて感想を生むことができたということは，「自分の」状態をより詳しく知ることができたということです．なぜなら「言外の情報を汲み取ったり補足できた」はそれに付随する知識を自分が保持しているからですし，「全然わからん」はそういった関係の知識を自分が保持していないから，「共感できるぞ…」は自分もそういう価値観を持っているからです．つまりセッションを通して，自分の現在保持している知識や価値観がどんなものか，RubyKaigi参加前以上に自分を知ることができました．</p>
<p>「今の」自分を詳しく知ることができただけでも素晴しいことなのですが，さらに良かったのは，それぞれのセッションが「これからの」自分をどうしようかなという選択肢にもなっていて，「こんな世界もあって，これを選ぶとそっちの方に行けるよ」という指針．角谷さんのセッションでいう「門」の役割も担っていたということです．今はまだ僕がどの門をくぐっていくか決めかねていますが，いずれどれかの門をくぐるかもしれません．あるいはそれ以外の門を自分で見つけたり建てたりするかもしれません．</p>
<h4>RubyKaigi2011にむけて</h4>
<p>高橋さんが「来年は最後のRubyKaigiです．最後のRubyKaigiで自分が何をしたいかを考えておいてください．まだ1年あるから大抵のことは可能なはずです」といったことをおっしゃっていました．僕は来年も参加するつもりです．そこで</p>
<ol>
<li>スタッフとして「参加」する</li>
<li>スピーカーとして「参加」する</li>
<li>皆と「コネを作る」</li>
</ol>
<p>の3点をやる予定です．もちろん「いる」じゃなくて「参加」する．です．</p>
<h4>RubyKaigiに参加させてくれてありがとう</h4>
<p>最後になりましたが，このようなKaigiを企画・運営してくれたスポンサー・スタッフ・スピーカー・参加者の皆さん，および会場を貸してくださったつくばセンターさん本当にありがとうございました．僕にとっては本当に大きな意味を持つKaigiになりました．それは今は証明できませんが，来年のRubyKaigiでお伝えできればと思っています．</p>
<p>RubyKaigi2011まであと300日くらいです．楽しみですね．</p>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100818.html#p01">
<link>http://niku.name/20100818.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100818.html#p01" />
<dc:date>2010-08-18T07:43:32+09:00</dc:date>
<title>ヽ（´・肉・｀）ノってどんなヤツ？</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<description>入社の時に適正検査をしたのですが，会社がその結果をくれました． DPIとDISTというやつみたいですね． おもしろかったので貼っておきます．僕ってこんなヤツみたいです．持久性の低さは自覚してましたが，やっぱり低かった…</description>
<content:encoded><![CDATA[<h3>ヽ（´・肉・｀）ノってどんなヤツ？</h3><p>入社の時に適正検査をしたのですが，会社がその結果をくれました．
<a href="http://jinzai.diamond.ne.jp/other.command?url=test/index.html">DPI</a>と<a href="http://jinzai.diamond.ne.jp/other.command?url=/test/dist.html">DIST</a>というやつみたいですね．</p>
<p>おもしろかったので貼っておきます．僕ってこんなヤツみたいです．持久性の低さは自覚してましたが，やっぱり低かった…</p>
<p><a href="http://niku.name/images/20100818_0.jpg"><img src="http://niku.name/images/s20100818_0.png" alt="dpi" title="dpi"  class="none"></a></p>
<p><a href="http://niku.name/images/20100818_1.jpg"><img src="http://niku.name/images/s20100818_1.png" alt="dist" title="dist"  class="none"></a></p>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100723.html#p01">
<link>http://niku.name/20100723.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100723.html#p01" />
<dc:date>2010-08-17T07:20:29+09:00</dc:date>
<title>文字列 / 正規表現 / ファイル入出力 / シリアライズ / インナークラス まとめ</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>java</dc:subject>
<description>Javaのファイル入出力の設計は綺麗かもしれないけど，かったるいというのは共通認識ですよねー… まだ途中ですが眠くて限界なので一旦上げちゃいます…ちょいちょい追記します．  java.lang.String Stringクラス リテラル クラスだから new String() って書ける．だけどあんまり書かない．どうするか？ &quot;hoge&quot; と書く．これがリテラル．  リテラルとは 値です   String オブジェクトのしくみ String オブジェクトは char[] の参照を持つ． String s1 = &quot;hello&quot;; String s2 = &quot;hello&quot;; s1 と s2 は同じStringオブジェクトを参照している．もし s1.replace(0,'a') として，s2の内容も変わったら…とても困る．だから String は不変オブジェクトになっている．s1 を変えると，新しい String の参照を作ってそちらを参照する． intern (正準化) バイト文字列から String を生成したりすると，同じ文字列の String オブジェクトが沢山できる．沢山作るとメ..</description>
<content:encoded><![CDATA[<h3>文字列 / 正規表現 / ファイル入出力 / シリアライズ / インナークラス まとめ</h3><p>Javaのファイル入出力の設計は綺麗かもしれないけど，かったるいというのは共通認識ですよねー…</p>
<p>まだ途中ですが眠くて限界なので一旦上げちゃいます…ちょいちょい追記します．</p>
<p><a href="http://niku.name/images/20100723_0.jpg"><img src="http://niku.name/images/s20100723_0.png" alt="20100723研修" title="20100723研修"  class="none"></a></p>
<h4>java.lang.String</h4>
<h5>Stringクラス</h5>
<h6>リテラル</h6>
<p>クラスだから new String() って書ける．だけどあんまり書かない．どうするか？ "hoge" と書く．これがリテラル．</p>
<dl>
<dt>リテラルとは</dt>
<dd>値です
</dd>
</dl>
<h6>String オブジェクトのしくみ</h6>
<p>String オブジェクトは char[] の参照を持つ．</p>
<pre>String s1 = "hello";
String s2 = "hello";</pre>
<p>s1 と s2 は同じStringオブジェクトを参照している．もし s1.replace(0,'a') として，s2の内容も変わったら…とても困る．だから String は不変オブジェクトになっている．s1 を変えると，新しい String の参照を作ってそちらを参照する．</p>
<h6>intern (正準化)</h6>
<p>バイト文字列から String を生成したりすると，同じ文字列の String オブジェクトが沢山できる．沢山作るとメモリ領域がが埋まります… intern すると，同じ文字列の String オブジェクトは 1 つの String オブジェクトを参照する．「正準化」というそうな．ドライバあたりで使うことが多い．</p>
<h4>文字列組立</h4>
<h5>StringとStringBuilder/StringBufferの違いは？</h5>
<p>Stringは不変(immutable)．StringBuilder/StringBufferは可変(mutable)</p>
<h5>StringBuilderとStringBufferの違いは？</h5>
<dl>
<dt>StringBuilder</dt>
<dd>1.5〜 同期化されていない
</dd>
<dt>StringBuffer</dt>
<dd>1.0〜 同期化されている
</dd>
</dl>
<p>最初StringBufferを使っていた，だけどそもそも文字列操作を並列処理で行うことってほとんどない(=同期処理不要)．そこでStringBuilderが登場した．</p>
<h4>FileIO</h4>
<dl>
<dt>IO</dt>
<dd>Input/Outputの略
</dd>
<dt>Stream</dt>
<dd>流れ
</dd>
</dl>
<ul>
<li>バイナリを読む<ul>
<li>FileInputStream</li>
<li>BufferdInputStream</li>
</ul></li>
<li>テキストを読む<ul>
<li>FileReader</li>
<li>BufferdReader 行単位で読むreadLineメソッド</li>
<li>InputStreamReader 文字コードを変換する</li>
</ul></li>
</ul>
<h5>StreamとBufferの関係</h5>
<p>StreamをBufferに貯めて出力する</p>
<h4>シリアライズ</h4>
<ul>
<li>オブジェクトをバイト配列にする</li>
<li>オブジェクトを他の環境へ持ち運べる</li>
</ul>
<p>transent修飾子をつけた変数はシリアライズ化に含まれない．</p>
<h5>シリアライズ可能なのは？</h5>
<ul>
<li>プリミティブ</li>
<li>配列</li>
<li>Serializableを実装したクラス</li>
</ul>
<p>のみ</p>
<h4>インナークラス</h4>
<p>staticと非staticに分けて考えるといい</p>
<dl>
<dt>static</dt>
<dd>普通にクラス宣言するのと変わらない
</dd>
<dt>非static</dt>
<dd>外側のクラスのインスタンスフィールドにアクセスできる！
</dd>
</dl>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100808.html#p01">
<link>http://niku.name/20100808.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100808.html#p01" />
<dc:date>2010-08-08T16:53:01+09:00</dc:date>
<title>Sapporo.jsに行った</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>javascript</dc:subject>
<description>おもしろかったです．主催の人が読んで進める形だったけど，主催の人が大変だったら，回し読みしてもいいかなと思いました． 途中でfirebugとかで検証しながら進めるのはいいですねー ちゃんとしたレポートは誰かが書くと思うので，読み合わせの途中に出た話題についてメモを残しておきます． 1 良いパーツ 1.1 なぜJavaScriptなのか  作者どんだけDOM嫌いなんだよ DOMってそんなに悪かったでしたっけ？ そうでもないような…   1.2 JavaScriptを解析する  昔VBScriptってあったよね 原著だとクラス型の言語はclassical languageになっている レキシカルなスコープを持つファーストクラスオブジェクト？   レキシカルな 書いてあるだけの部分で作用する．グローバルダイナミックの反対？  ファーストクラスオブジェクト 変数に何でも突っこめて，そのままそのものとして使える   1.3 プログラムをテストする簡単な方法 2 文法  ホワイトスペース = 空白だけじゃなくて，タブとかも含まれているよ  2.1 ホワイトペース  (鉄道ダイアログを見て)この..</description>
<content:encoded><![CDATA[<h3><a href="http://atnd.org/events/6122">Sapporo.js</a>に行った</h3><p>おもしろかったです．主催の人が読んで進める形だったけど，主催の人が大変だったら，回し読みしてもいいかなと思いました．
途中でfirebugとかで検証しながら進めるのはいいですねー</p>
<p>ちゃんとしたレポートは誰かが書くと思うので，読み合わせの途中に出た話題についてメモを残しておきます．</p>
<h4>1 良いパーツ</h4>
<h5>1.1 なぜJavaScriptなのか</h5>
<ul>
<li>作者どんだけDOM嫌いなんだよ</li>
<li>DOMってそんなに悪かったでしたっけ？<ul>
<li>そうでもないような…</li>
</ul></li>
</ul>
<h5>1.2 JavaScriptを解析する</h5>
<ul>
<li>昔VBScriptってあったよね</li>
<li>原著だとクラス型の言語はclassical languageになっている</li>
<li>レキシカルなスコープを持つファーストクラスオブジェクト？</li>
</ul>
<dl>
<dt>レキシカルな</dt>
<dd>書いてあるだけの部分で作用する．<del>グローバル</del>ダイナミックの反対？
</dd>
<dt>ファーストクラスオブジェクト</dt>
<dd>変数に何でも突っこめて，そのままそのものとして使える
</dd>
</dl>
<h5>1.3 プログラムをテストする簡単な方法</h5>
<h4>2 文法</h4>
<ul>
<li>ホワイトスペース = 空白だけじゃなくて，タブとかも含まれているよ</li>
</ul>
<h5>2.1 ホワイトペース</h5>
<ul>
<li>(鉄道ダイアログを見て)この図読めないと，この先つらいの？<ul>
<li>全然そんなことないよ！</li>
</ul></li>
<li>コメントアウトする時は毎行//で囲まないといけないの？<ul>
<li>この本ではそうなっていますよねー．</li>
<li>お使いのIDEやエディタのお力を借りてコメントアウトしましょう</li>
</ul></li>
</ul>
<h5>2.2 名前</h5>
<ul>
<li>予約語は使ったらどうなるの？<ul>
<li>種々の環境によって変わるみたい？？よくわからないなー？？</li>
<li>色々でわかりにくいので使わないようにしましょう</li>
</ul></li>
</ul>
<h5>2.3 数値</h5>
<ul>
<li>NaNになるのはどんな場合？<ul>
<li>Infinity/Infinity とか Infinity/0 とか 0/0 とか 'a'/2 とか</li>
</ul></li>
</ul>
<h5>2.4 文字</h5>
<ul>
<li>= 2つと = 3つはどう違うの？<ul>
<li>= 2つだと型変換して比較する．= 3つだと型変換しないで比較する．</li>
</ul></li>
</ul>
<h5>2.5 命令文</h5>
<ul>
<li>try節あるの？<ul>
<li>あるよー</li>
</ul></li>
<li>truthy とか falsy とかなんなの<ul>
<li>これ英英辞典にもないわ．きっとうまく訳せなかったんだろうなー</li>
</ul></li>
<li>break ラベル名 って書くと，ラベルの部分まで飛べるのは初めて知った</li>
</ul>
<h5>2.6 式</h5>
<ul>
<li>&amp; はないの？<ul>
<li>あるけど「悪いパーツ」なので使わないことになっている</li>
</ul></li>
</ul>
<h5>2.7 リテラル</h5>
<ul>
<li>ポインタしかねぇｗ</li>
</ul>
<h5>2.8 関数</h5>
<ul>
<li>こいつもポインタしかねぇｗ</li>
</ul>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100808.html#c02">
<link>http://niku.name/20100808.html#c02</link>
<dc:date>2010-08-08T16:47:40+09:00</dc:date>
<title>2010-08-08のツッコミ[2] (ヽ（´・肉・｀）ノ)</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<description>なるほどー．ありがとうございます．調べてみました．  別のメソッドなどを呼び出した時に，呼び出し先でも呼び出し元の変数が全て使えるのがダイナミックスコープ．意図的に渡すのを選んだ変数だけ使えるのがレキシカルスコープという感じでしょうか．</description>
<content:encoded><![CDATA[なるほどー．ありがとうございます．調べてみました．<br><br>別のメソッドなどを呼び出した時に，呼び出し先でも呼び出し元の変数が全て使えるのがダイナミックスコープ．意図的に渡すのを選んだ変数だけ使えるのがレキシカルスコープという感じでしょうか．]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100808.html#c01">
<link>http://niku.name/20100808.html#c01</link>
<dc:date>2010-08-08T11:54:26+09:00</dc:date>
<title>2010-08-08のツッコミ[1] (tmaeda)</title>
<dc:creator>tmaeda</dc:creator>
<description>レキシカルスコープの対になる用語はグローバルじゃなくて、ダイナミックスコープじゃないかと思います。</description>
<content:encoded><![CDATA[レキシカルスコープの対になる用語はグローバルじゃなくて、ダイナミックスコープじゃないかと思います。]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100722.html#p01">
<link>http://niku.name/20100722.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100722.html#p01" />
<dc:date>2010-07-28T07:20:07+09:00</dc:date>
<title>Collection / Generics</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>java</dc:subject>
<description>今日はコレクションをやりました．良く使う割にはあんまり知らないことがあったなぁ  collection java collection framework  List ArrayList LinkedList  Set (null なし) HashSet  Map (null あり) HashMap  SortedMap 順序ありMap TreeMap  SortedSet 順序ありSet TreeSet   Comparator と Comparable Comparable は interface で int compareTo(T obj) というメソッドを持っている．1,2,3とかa,b,cとか自然な順序を比較することができるというinterface．compareToで自分自身と比べる．Comparator も interface だけど，int compare(T obj1, T obj2) という風に，2つのオブジェクトを比較するためのインターフェース．Arrays.sort(someList, new SomeComparator()); という風に使う．  Com..</description>
<content:encoded><![CDATA[<h3>Collection / Generics</h3><p>今日はコレクションをやりました．良く使う割にはあんまり知らないことがあったなぁ</p>
<p><a href="http://niku.name/images/20100722_0.jpg"><img src="http://niku.name/images/s20100722_0.png" alt="20100722研修" title="20100722研修"  class="none"></a></p>
<h4>collection</h4>
<h5>java collection framework</h5>
<ul>
<li>List<ul>
<li>ArrayList</li>
<li>LinkedList</li>
</ul></li>
<li>Set (null なし)<ul>
<li>HashSet</li>
</ul></li>
<li>Map (null あり)<ul>
<li>HashMap</li>
</ul></li>
<li>SortedMap 順序ありMap<ul>
<li>TreeMap</li>
</ul></li>
<li>SortedSet 順序ありSet<ul>
<li>TreeSet</li>
</ul></li>
</ul>
<h5>Comparator と Comparable</h5>
<p>Comparable は interface で int compareTo(T obj) というメソッドを持っている．1,2,3とかa,b,cとか自然な順序を比較することができるというinterface．compareToで自分自身と比べる．Comparator も interface だけど，int compare(T obj1, T obj2) という風に，2つのオブジェクトを比較するためのインターフェース．Arrays.sort(someList, new SomeComparator()); という風に使う．</p>
<dl>
<dt>Comparable</dt>
<dd>このオブジェクト自身を比較できますよという印
</dd>
<dt>Comparator</dt>
<dd>比較するためのオブジェクトですよという印
</dd>
</dl>
<h5>equals / hashCode</h5>
<p>Object にある public method．変える時は適切にオーバーライドする．</p>
<h6>equals</h6>
<p>意味として等しいか？を示す．</p>
<p>たとえば，50円が2つ入っているリストを持つオブジェクトと，100円が1つ入っているリストを持つオブジェクトは等しいか？</p>
<ul>
<li>金額という観点から =&gt; 50*2=100 だから等しい</li>
<li>種類という観点から =&gt; 50 と 100 だから異なる</li>
</ul>
<p>そのオブジェクトをどういう風に使いたいかによって，「等しさ」は異なる．使う人間が定義してやらないといけない．</p>
<p>オマケ 同値(等しさ)の定理は以下の3つ</p>
<ul>
<li>X=X</li>
<li>X=Y なら Y=X</li>
<li>X=Y Y=Z なら X=Z</li>
</ul>
<h6>hashCode</h6>
<pre>public int hashCode()</pre>
<p>つまり，無限に存在するオブジェクトを，int数だけの有限空間に無理矢理突っこむという関数．異なるオブジェクトが同じhashCodeを返してもいい．やらないし，やらないほうがいいけど</p>
<pre>public int hashCode(){
    return 0;
}</pre>
<p>とか定数も禁止されてはいない．↑でやったMapやSetに値を入れる時のキーなどに使う．</p>
<pre></pre>
<h4>generics</h4>
<p>1.5から導入された．1.4以前だと</p>
<pre>List list = new ArrayList();
list.add("A");
list.add(new Integer(100));

String s = (String) list.get(0);</pre>
<p>みたいに書かないといけない．</p>
<ul>
<li>取るときのキャストがめんどくさい</li>
<li>そもそも一つのリストにいろんなオブジェクト入れる事あんまりないよね</li>
</ul>
<p>という理由から，「あるリストに決められたオブジェクトしか入れられない」と決めて，取るときのキャストを不要にした書き方を用意した．それがジェネリクス．こんなの</p>
<pre>List&lt;String&gt; list = new ArrayList&lt;String&gt;();</pre>
<h5>リストに決められたオブジェクトしか入れられないのは，いつチェックしてる？</h5>
<p>コンパイルの時．</p>
<p>コンパイルした後のバイトコードにはジェネリクスの情報は入っていない(イレイジャー erasure)．後方互換性(1.4でコンパイルできるものが1.5でコンパイルしてもちゃんと動く)のためにそうなっている．</p>
<h5>extends / super</h5>
<pre>List&lt;Number&gt; list = new ArrayList&lt;Number&gt;();
list.add(new Integer(100)); // できない</pre>
<p>はコンパイルエラーになる．なぜか？「IntegerはNumberではない」から．ジェネリクスでは普通にやるとオブジェクトの継承関係を見てはくれない．</p>
<p>不便すぎるので，ワイルドカードを用意した</p>
<pre>List&lt;?&gt; list = new ArrayList&lt;Object&gt;();</pre>
<p>で何でも入れられるリストになる．</p>
<p>でもそれだと1.4と同じ状態になってしまうので，条件つきのワイルドカードを用意した</p>
<pre>List&lt;? extends Number&gt; list = new ArrayList&lt;Number&gt;();
list.add(new Integer(100)); // できる！！</pre>
<p>これで「Number型を持つもの」をリストに入れられる．同様に &lt;? super T&gt; でTの親ならを何でも入れられるリストを作れる．でも〜の親ってあんまり宣言する機会がない．</p>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100720.html#p01">
<link>http://niku.name/20100720.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100720.html#p01" />
<dc:date>2010-07-25T09:54:32+09:00</dc:date>
<title>オートボクシング/enum まとめ</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>java</dc:subject>
<description>今，僕の行っている会社ではJavaの研修をやってくれるのです．素晴しいですね．せっかくなので覚えた部分をまとめてみました．今日はオートボクシングと列挙型です．  ボクシング・アンボクシング どんなの？ オブジェクト型とプリミティブ型を相互に変換する オブジェクトとプリミティブの違いは？  本質 メモリの使い方  特徴 プリミティブだとレシーバーを取れない ex) 1.plus(2)とかできない プリミティブだとnullを入れられない(初期値がある) プリミティブだと型を使ってポリモーフィズムを表現できない   あれ，プリミティブに良い所あるの？ 軽くて速いよ！ いつやるの？ コンパイル時にやる ボクシング  プリミティブ-オブジェクト自動変換 Integer.valueOf(prim) を使うと思いねぇ  アンボクシング  オブジェクト-プリミティブ自動変換 obj.intValue()を使うと思いねぇ．つまりobjがnullだとNullPointerExceptionになる  コンパイル時にnullチェックしてよ できない．例えば秒数末尾が偶数ならnull，奇数ならオブジェクトを..</description>
<content:encoded><![CDATA[<h3>オートボクシング/enum まとめ</h3><p>今，僕の行っている会社ではJavaの研修をやってくれるのです．素晴しいですね．せっかくなので覚えた部分をまとめてみました．今日はオートボクシングと列挙型です．</p>
<p><a href="http://niku.name/images/20100720_0.jpg"><img src="http://niku.name/images/s20100720_0.png" alt="20100720研修" title="20100720研修"  class="none"></a></p>
<h4>ボクシング・アンボクシング</h4>
<h5>どんなの？</h5>
<p>オブジェクト型とプリミティブ型を相互に変換する</p>
<h6>オブジェクトとプリミティブの違いは？</h6>
<ul>
<li>本質<ul>
<li>メモリの使い方</li>
</ul></li>
<li>特徴<ul>
<li>プリミティブだとレシーバーを取れない ex) 1.plus(2)とかできない</li>
<li>プリミティブだとnullを入れられない(初期値がある)</li>
<li>プリミティブだと型を使ってポリモーフィズムを表現できない</li>
</ul></li>
</ul>
<h6>あれ，プリミティブに良い所あるの？</h6>
<p>軽くて速いよ！</p>
<h5>いつやるの？</h5>
<p>コンパイル時にやる</p>
<h5>ボクシング</h5>
<ul>
<li>プリミティブ-&gt;オブジェクト自動変換</li>
<li>Integer.valueOf(prim) を使うと思いねぇ</li>
</ul>
<h5>アンボクシング</h5>
<ul>
<li>オブジェクト-&gt;プリミティブ自動変換</li>
<li>obj.intValue()を使うと思いねぇ．<em>つまりobjがnullだとNullPointerExceptionになる</em></li>
</ul>
<h6>コンパイル時にnullチェックしてよ</h6>
<p>できない．例えば秒数末尾が偶数ならnull，奇数ならオブジェクトを生成とか，コンパイル時に調べられない．</p>
<h5>void method(int num)l{} と void method(Integer num) は同じクラス内に書ける？</h5>
<p>書ける．オートボクシング導入(1.5)より前ではこれは普通のことだった．method(int型); だと前者，method(Integer型); だと後者が呼ばれる．</p>
<h4>列挙型(enum)</h4>
<h5>どんなの？</h5>
<ul>
<li>特殊なクラス．</li>
<li>同じ種類の定数を集めて書いておく時なんかに使う． enum Direction{ UP, DOWN, LEFT, RIGHT}; のような感じ．</li>
<li>UP, DOWN, LEFT, RIGHT の値が一意になることは保証されている．</li>
</ul>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100714.html#p01">
<link>http://niku.name/20100714.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100714.html#p01" />
<dc:date>2010-07-14T18:59:58+09:00</dc:date>
<title>twitterのlistに登録されているmemberをfollowするrubyスクリプト</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>ruby</dc:subject>
<description>twitterで，あるユーザーが作成したリストに含まれているメンバーを一括followするrubyスクリプトです．ruby1.9で動作確認しました． # -*- coding: utf-8 -*- require 'logger' require 'rubytter'  LOG = Logger.new('follow_user_on_the_list.log') USER = 'niku_name' # your twitter account PASS = ''   # your twitter password  # ex) follow list &quot;http://twitter.com/hdhsakym/robocup&quot; TARGET_USER = 'hdhsakym' TARGET_LIST = 'robocup'  # oauth = Rubytter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET) # access_token = OAuth::AccessToken.new(oauth.create_consumer, ACCES..</description>
<content:encoded><![CDATA[<h3>twitterのlistに登録されているmemberをfollowするrubyスクリプト</h3><p>twitterで，あるユーザーが作成したリストに含まれているメンバーを一括followするrubyスクリプトです．ruby1.9で動作確認しました．</p>
<pre># -*- coding: utf-8 -*-
require 'logger'
require 'rubytter'

LOG = Logger.new('follow_user_on_the_list.log')
USER = 'niku_name' # your twitter account
PASS = ''   # your twitter password

# ex) follow list "http://twitter.com/hdhsakym/robocup"
TARGET_USER = 'hdhsakym'
TARGET_LIST = 'robocup'

# oauth = Rubytter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET)
# access_token = OAuth::AccessToken.new(oauth.create_consumer, ACCESS_TOKEN, ACCESS_SECRET)
# @client = OAuthRubytter.new(access_token) # 2010/05/16現在 OAuth だと list 操作が 404 Not Found になる
@client = Rubytter.new(USER, PASS)

def all_users
  ary = []
  next_cursor = -1
  while next_cursor != 0
    begin
      res = @client.list_members(TARGET_USER, TARGET_LIST, {cursor:next_cursor})
    rescue =&gt; ex
      LOG.warn ex
      sleep 10
      retry
    end
    ary.concat res.users
    next_cursor = res.next_cursor
    LOG.info "next_cursor is #{next_cursor}"
    sleep 60
  end
  ary
end

all_users.each do |user|
  LOG.info "#{user[:screen_name]}処理中..."
  begin
    @client.follow user[:screen_name]
    sleep 60
  rescue =&gt; ex
    LOG.warn ex
    sleep 10
    retry
  end
end</pre>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100624.html#p01">
<link>http://niku.name/20100624.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100624.html#p01" />
<dc:date>2010-06-24T22:44:40+09:00</dc:date>
<title>整数値から紙幣の枚数をハッシュで返す</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>ruby</dc:subject>
<description>6152円はN円札がM枚…とかいうアレです．&quot;6152.bill&quot;で紙幣の単位と枚数のハッシュを返すようにしてみました． class Integer   def bill     raise if self  0     unit = [10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1]     unit.inject({}) do |result,item|       remain = self - result.inject(0){ |r, i| r += i.inject(:*) }       result[item] = remain/item       result     end   end end  0.bill                        # = {10000=0, 5000=0, 2000=0, 1000=0, 500=0, 100=0, 50=0, 10=0, 5=0, 1=0} 3.bill                        # = {10000=0, 5000=0, 2000=..</description>
<content:encoded><![CDATA[<h3>整数値から紙幣の枚数をハッシュで返す</h3><p>6152円はN円札がM枚…とかいうアレです．"6152.bill"で紙幣の単位と枚数のハッシュを返すようにしてみました．</p>
<pre>class Integer
  def bill
    raise if self &lt; 0
    unit = [10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1]
    unit.inject({}) do |result,item|
      remain = self - result.inject(0){ |r, i| r += i.inject(:*) }
      result[item] = remain/item
      result
    end
  end
end

0.bill                        # =&gt; {10000=&gt;0, 5000=&gt;0, 2000=&gt;0, 1000=&gt;0, 500=&gt;0, 100=&gt;0, 50=&gt;0, 10=&gt;0, 5=&gt;0, 1=&gt;0}
3.bill                        # =&gt; {10000=&gt;0, 5000=&gt;0, 2000=&gt;0, 1000=&gt;0, 500=&gt;0, 100=&gt;0, 50=&gt;0, 10=&gt;0, 5=&gt;0, 1=&gt;3}
6152.bill                     # =&gt; {10000=&gt;0, 5000=&gt;1, 2000=&gt;0, 1000=&gt;1, 500=&gt;0, 100=&gt;1, 50=&gt;1, 10=&gt;0, 5=&gt;0, 1=&gt;2}
18947.bill                    # =&gt; {10000=&gt;1, 5000=&gt;1, 2000=&gt;1, 1000=&gt;1, 500=&gt;1, 100=&gt;4, 50=&gt;0, 10=&gt;4, 5=&gt;1, 1=&gt;2}
begin
  -1.bill                       # =&gt; 
rescue =&gt; ex
  ex                            # =&gt; RuntimeError
end</pre>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100623.html#p01">
<link>http://niku.name/20100623.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100623.html#p01" />
<dc:date>2010-06-23T03:25:51+09:00</dc:date>
<title>twitter for iPhoneから自分のtumblrに投稿する方法</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>ruby</dc:subject>
<dc:subject>gae</dc:subject>
<dc:subject>product</dc:subject>
<description>twitter for iPhoneでは投稿に画像を添付することができ，設定で投稿先を選べます．通常はtwitpicとかyfrogになるのですが，google apps engineを利用して，自分のtumblrへ投稿することができました． サーバー側 まずgithubからソースを取得します git clone git@github.com:niku/twitter_for_iphone_gateway.git 取得したディレクトリのconfig.yamlに自分のtwitterアカウント情報とtumblrアカウント情報を記述します． google application engineのアプリケーション名を決めて，config.ruに記述します．今twifigになっていますが，たぶん同じ名前は使えないんじゃないかな．記述したら，その名前でgaeにアプリケーションを作成しておきます． ファイルをgaeにアップロードします． appcfg.rb . update iPhone側 twitter for iPhoneを起動したら  が出るので，印でくくった部分をタップ．以下も同じです．  ..</description>
<content:encoded><![CDATA[<h3>twitter for iPhoneから自分のtumblrに投稿する方法</h3><p>twitter for iPhoneでは投稿に画像を添付することができ，設定で投稿先を選べます．通常はtwitpicとかyfrogになるのですが，google apps engineを利用して，自分のtumblrへ投稿することができました．</p>
<h4>サーバー側</h4>
<p>まずgithubからソースを取得します</p>
<pre>git clone git@github.com:niku/twitter_for_iphone_gateway.git</pre>
<p>取得したディレクトリのconfig.yamlに自分のtwitterアカウント情報とtumblrアカウント情報を記述します．</p>
<p>google application engineのアプリケーション名を決めて，config.ruに記述します．今twifigになっていますが，たぶん同じ名前は使えないんじゃないかな．記述したら，その名前でgaeにアプリケーションを作成しておきます．</p>
<p>ファイルをgaeにアップロードします．</p>
<pre>appcfg.rb . update</pre>
<h4>iPhone側</h4>
<p>twitter for iPhoneを起動したら
<a href="http://niku.name/images/20100623_0.png"><img src="http://niku.name/images/s20100623_0.png" alt="アカウント選択画面" title="アカウント選択画面"  class="none"></a>
が出るので，印でくくった部分をタップ．以下も同じです．</p>
<p><a href="http://niku.name/images/20100623_1.png"><img src="http://niku.name/images/s20100623_1.png" alt="設定画面" title="設定画面"  class="none"></a></p>
<p><a href="http://niku.name/images/20100623_2.png"><img src="http://niku.name/images/s20100623_2.png" alt="連携サービス画面" title="連携サービス画面"  class="none"></a></p>
<p><a href="http://niku.name/images/20100623_3.png"><img src="http://niku.name/images/s20100623_3.png" alt="画像サービス画面" title="画像サービス画面"  class="none"></a></p>
<p><a href="http://niku.name/images/20100623_4.png"><img src="http://niku.name/images/s20100623_4.png" alt="カスタム画面" title="カスタム画面"  class="none"></a>
ここは先ほどgaeへアップロードしたアプリの名前に置き換えてください．</p>
<pre>https://"アプリケーション名".appspot.com/image</pre>
<p>です．</p>
<h4>どうなる？</h4>
<p>twitter for iPhone から画像つきで投稿すると，twitterは <a href="http://twitter.com/niku_name/status/16783623668">http://twitter.com/niku_name/status/16783623668</a> のようになり，tumblrは <a href="http://tumblr.niku.name/post/725826838">http://tumblr.niku.name/post/725826838</a> のようになります．</p>
<h4>参考にしたサイト</h4>
<p><a href="http://developer.atebits.com/tweetie-iphone/custom-image/">http://developer.atebits.com/tweetie-iphone/custom-image/</a> にtwitter for iPhoneの画像投稿時に送る情報が載っていました．</p>
<p><a href="http://www.tumblr.com/docs/en/api">http://www.tumblr.com/docs/en/api</a> にtumblrのAPI情報が載っていました</p>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100605.html#p02">
<link>http://niku.name/20100605.html#p02</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100605.html#p02" />
<dc:date>2010-06-05T09:24:01+09:00</dc:date>
<title>rubytterでfollowしている人全てを取得する方法</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>ruby</dc:subject>
<description>通常のTwitterAPIではcursorというのを指定して値を全取得します．rubytterでcursorを使うにはfriendsの2番目の引数にハッシュで指定してやればOKでした． # -*- coding: utf-8 -*- require 'rubytter' require 'oauth'  USER = '' CONSUMER_KEY = '' CONSUMER_SECRET = '' ACCESS_TOKEN = '' ACCESS_TOKEN_SECRET = ''  oauth = Rubytter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET) access_token = OAuth::AccessToken.new(oauth.create_consumer, ACCESS_TOKEN, ACCESS_TOKEN_SECRET) @client = OAuthRubytter.new(access_token) def all_friends   ary = []   next_cursor = -1   while n..</description>
<content:encoded><![CDATA[<h3>rubytterでfollowしている人全てを取得する方法</h3><p>通常のTwitterAPIではcursorというのを指定して値を全取得します．rubytterでcursorを使うにはfriendsの2番目の引数にハッシュで指定してやればOKでした．</p>
<pre># -*- coding: utf-8 -*-
require 'rubytter'
require 'oauth'

USER = ''
CONSUMER_KEY = ''
CONSUMER_SECRET = ''
ACCESS_TOKEN = ''
ACCESS_TOKEN_SECRET = ''

oauth = Rubytter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET)
access_token = OAuth::AccessToken.new(oauth.create_consumer, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
@client = OAuthRubytter.new(access_token)
def all_friends
  ary = []
  next_cursor = -1
  while next_cursor != 0
    res = @client.friends(USER, {cursor:next_cursor})
    ary.concat res.users
    next_cursor = res.next_cursor
    p next_cursor
  end
  ary
end

p all_friends</pre>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100605.html#p01">
<link>http://niku.name/20100605.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100605.html#p01" />
<dc:date>2010-06-05T09:00:32+09:00</dc:date>
<title>twitterでしばらくpostしていない人をfollowから外すと同時にリストに加えるスクリプト</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>ruby</dc:subject>
<description>簡単でした．そうrubytterならね． # -*- coding: utf-8 -*- require 'logger' require 'time' require 'uri' require 'net/http' require 'rubytter'  LOG = Logger.new(STDOUT) USER = '' # your twitter account PASS = '' # your twitter password LIST_NAME = '' # create twitter list name ex) last-post-was-quarter-year-ago PAST_TIME = Time.now - 60 * 60 * 24 * 90 # quarter year  #oauth = Rubytter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET) #access_token = OAuth::AccessToken.new(oauth.create_consumer, ACCESS_TOKEN, ACCESS..</description>
<content:encoded><![CDATA[<h3>twitterでしばらくpostしていない人をfollowから外すと同時にリストに加えるスクリプト</h3><p>簡単でした．そうrubytterならね．</p>
<pre># -*- coding: utf-8 -*-
require 'logger'
require 'time'
require 'uri'
require 'net/http'
require 'rubytter'

LOG = Logger.new(STDOUT)
USER = '' # your twitter account
PASS = '' # your twitter password
LIST_NAME = '' # create twitter list name ex) last-post-was-quarter-year-ago
PAST_TIME = Time.now - 60 * 60 * 24 * 90 # quarter year

#oauth = Rubytter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET)
#access_token = OAuth::AccessToken.new(oauth.create_consumer, ACCESS_TOKEN, ACCESS_SECRET)
#@client = OAuthRubytter.new(access_token) # 2010/05/16現在 OAuth だと list 操作が 404 Not Found になる
@client = Rubytter.new(USER, PASS)

begin
  @client.list(USER, LIST_NAME)
rescue Rubytter::APIError
  @client.create_list(LIST_NAME) # リストが無ければ作成する
end

def all_friends
  ary = []
  next_cursor = -1
  while next_cursor != 0
    begin
      res = @client.friends(USER, {cursor:next_cursor})
    rescue =&gt; ex
      LOG.warn ex
      sleep 10
      retry
    end
    ary.concat res.users
    next_cursor = res.next_cursor
    LOG.info "next_cursor is #{next_cursor}"
    sleep 60
  end
  ary
end


all_friends.select { |friend|
  if friend.statuses_count == 0
    true
  else
    Time.parse(friend.status.created_at) &lt; PAST_TIME
  end
}.tap{ |e| LOG.info "対象は#{e.size}人くらいいます" }.each{ |friend|
  name = friend.screen_name
  LOG.info "#{name}処理中..."
  begin
    @client.add_member_to_list(LIST_NAME, name) if @client.user(name).statuses_count != 0 # 0ポストの人はリスト登録に失敗する
    @client.leave(name)
    sleep 60
  rescue =&gt; ex
    LOG.warn ex
    sleep 10
    retry
  end
}</pre>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100603.html#p01">
<link>http://niku.name/20100603.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100603.html#p01" />
<dc:date>2010-06-03T22:53:34+09:00</dc:date>
<title>twitterのbioに特定のキーワードを書いている人を集めてlistにした(twpro対応)</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<dc:subject>ruby</dc:subject>
<description>twitterの自己紹介欄に「consadole」や「コンサドーレ」と書いてある人をリストに加えるスクリプトです． http://niku.name/20100516.html#p01 の改良版です．http://twpro.jp/ で検索した人も加えるようにしました．twproはajaxで値を返してくるので解析がちょっと面倒でした．API用意してくれないかな．コードは汚いけど使い捨てだからいいかなと思っています． # -*- coding: utf-8 -*- require 'uri' require 'net/http' require 'nokogiri' require 'oauth' require 'rubytter'  USER = 'niku_name' PASS = '' #CONSUMER_KEY = '' #CONSUMER_SECRET = '' #ACCESS_TOKEN = '' #ACCESS_SECRET = '' #PIN = ''  LIMIT = 500 # 500 は list 登録人数の上限値 SEARCH_WORDS = ['コンサドー..</description>
<content:encoded><![CDATA[<h3>twitterのbioに特定のキーワードを書いている人を集めてlistにした(twpro対応)</h3><p>twitterの自己紹介欄に「consadole」や「コンサドーレ」と書いてある人をリストに加えるスクリプトです． <a href="http://niku.name/20100516.html#p01">http://niku.name/20100516.html#p01</a> の改良版です．<a href="http://twpro.jp/">http://twpro.jp/</a> で検索した人も加えるようにしました．twproはajaxで値を返してくるので解析がちょっと面倒でした．API用意してくれないかな．コードは汚いけど使い捨てだからいいかなと思っています．</p>
<pre># -*- coding: utf-8 -*-
require 'uri'
require 'net/http'
require 'nokogiri'
require 'oauth'
require 'rubytter'

USER = 'niku_name'
PASS = ''
#CONSUMER_KEY = ''
#CONSUMER_SECRET = ''
#ACCESS_TOKEN = ''
#ACCESS_SECRET = ''
#PIN = ''

LIMIT = 500 # 500 は list 登録人数の上限値
SEARCH_WORDS = ['コンサドーレ', 'consadole']
LIST_NAME = 'consadole'

def get_members_from_lefthandle search_word
  (0..(1/0.0)).inject([]) do |base, num|
    uri = URI.parse("http://tps.lefthandle.net/search/#{num}/?s=#{URI.encode search_word}&amp;sort=follower")
    doc = Nokogiri::HTML(Net::HTTP::get(uri))
    result = doc.search('div.tweetuser').map{|e| e['id']}
    if result.empty?
      break base
    else
      base.concat result
    end
  end
end
def get_members_from_twpro search_word
  (1..(1/0.0)).inject([]) do |base, num|
    result = Net::HTTP::post_form(URI.parse("http://twpro.jp/search/search/#{num}"), word:search_word).body.scan /&lt;span class='name'&gt;&lt;a href='http:\/\/twitter\.com\/(\w+)'&gt;/
    if result.empty?
      break base
    else
      base.concat result
    end
  end
end
members = SEARCH_WORDS.map{ |search_word|
  lefthandle = get_members_from_lefthandle(search_word)
  twpro = get_members_from_twpro(search_word)
  lefthandle.concat(twpro)
}.flatten.uniq

oauth = Rubytter::OAuth.new(CONSUMER_KEY, CONSUMER_SECRET)
access_token = OAuth::AccessToken.new(oauth.create_consumer, ACCESS_TOKEN, ACCESS_SECRET)
#client = OAuthRubytter.new(access_token) # 2010/05/16現在 OAuth だと list 操作が 404 Not Found になる
client = Rubytter.new(USER, PASS)

begin
  client.list(USER, LIST_NAME)
rescue Rubytter::APIError
  client.create_list(LIST_NAME) # リストが無ければ作成する
end

# リストに登録
members.each do |member|
  p member
  begin
    client.add_member_to_list(LIST_NAME, member)
  rescue =&gt; ex
    p ex
    next if client.user(member).statuses_count == 0 # 0ポストの人は登録に失敗する
    sleep 10
    retry
  end
end</pre>]]></content:encoded>
</item>
<item rdf:about="http://niku.name/20100525.html#p01">
<link>http://niku.name/20100525.html#p01</link>
<xhtml:link xhtml:rel="alternate" xhtml:media="handheld" xhtml:type="text/html" xhtml:href="http://niku.name/20100525.html#p01" />
<dc:date>2010-05-25T04:32:41+09:00</dc:date>
<title>bookscanにscanを依頼した本の一部がページ抜けしていた(かもしれない)</title>
<dc:creator>ヽ（´・肉・｀）ノ</dc:creator>
<description>@bookscan_jpにスキャンを依頼したのですが，そのうち「Rubyベストプラクティス」のスキャン結果にページ抜けがあることに気づきました． 応援していますし，安い値段でやっている以上仕方ないのかなとは思いますが，ほぼ新刊の状態の本でこれだけ抜けられると，今後お願いするのには躊躇してしまいますね… 題にかもしれないと記述したのは，本の落丁の可能性は否定できないためです．あるいは元々こういうページ構成だったとか．この本をお持ちの方，まえがきの辺りの正しいページ構成はどのようになっているでしょうか？ 連続したスクリーンショットは以下のような感じです  5ページの後に7ページがあります．紙づまりした後のオペレーションを誤ったのでしょうか．6と8ページはどこに…  ここは問題ありません  ここも問題ありません  ここまでは問題ありませんでした  15ページと16ページが抜けました  ここは問題ありません</description>
<content:encoded><![CDATA[<h3>bookscanにscanを依頼した本の一部がページ抜けしていた(かもしれない)</h3><p><a href="http://twitter.com/bookscan_jp">@bookscan_jp</a>にスキャンを依頼したのですが，そのうち「Rubyベストプラクティス」のスキャン結果にページ抜けがあることに気づきました．</p>
<p>応援していますし，安い値段でやっている以上仕方ないのかなとは思いますが，ほぼ新刊の状態の本でこれだけ抜けられると，今後お願いするのには躊躇してしまいますね…</p>
<p>題にかもしれないと記述したのは，本の落丁の可能性は否定できないためです．あるいは元々こういうページ構成だったとか．この本をお持ちの方，まえがきの辺りの正しいページ構成はどのようになっているでしょうか？</p>
<p>連続したスクリーンショットは以下のような感じです</p>
<p><a href="http://niku.name/images/20100525_0.png"><img src="http://niku.name/images/s20100525_0.png" alt="5,7ページ" title="5,7ページ"  class="none"></a>
5ページの後に7ページがあります．紙づまりした後のオペレーションを誤ったのでしょうか．6と8ページはどこに…</p>
<p><a href="http://niku.name/images/20100525_1.png"><img src="http://niku.name/images/s20100525_1.png" alt="9,10ページ" title="9,10ページ"  class="none"></a>
ここは問題ありません</p>
<p><a href="http://niku.name/images/20100525_2.png"><img src="http://niku.name/images/s20100525_2.png" alt="11,12ページ" title="11,12ページ"  class="none"></a>
ここも問題ありません</p>
<p><a href="http://niku.name/images/20100525_3.png"><img src="http://niku.name/images/s20100525_3.png" alt="13，14ページ" title="13，14ページ"  class="none"></a>
ここまでは問題ありませんでした</p>
<p><a href="http://niku.name/images/20100525_4.png"><img src="http://niku.name/images/s20100525_4.png" alt="17,18ページ" title="17,18ページ"  class="none"></a>
15ページと16ページが抜けました</p>
<p><a href="http://niku.name/images/20100525_5.png"><img src="http://niku.name/images/s20100525_5.png" alt="19,本文1ページ" title="19,本文1ページ"  class="none"></a>
ここは問題ありません</p>]]></content:encoded>
</item>
</rdf:RDF>
