<?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"
	>

<channel>
	<title>超現実いもす(imos)の日記</title>
	<atom:link href="http://imoz.jp/feed/" rel="self" type="application/rss+xml" />
	<link>http://imoz.jp</link>
	<description>ITと数学の狭間の情報科学と戦う戦士いもす(imos)の日記。</description>
	<pubDate>Mon, 22 Feb 2010 14:06:22 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>ja</language>
			<item>
		<title>C++で可変長引数を扱う方法</title>
		<link>http://imoz.jp/2010/02/va_args_for_cpp/</link>
		<comments>http://imoz.jp/2010/02/va_args_for_cpp/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 14:06:22 +0000</pubDate>
		<dc:creator>imos</dc:creator>
		
		<category><![CDATA[C/C++]]></category>

		<category><![CDATA[C++]]></category>

		<category><![CDATA[ostringstream]]></category>

		<category><![CDATA[template]]></category>

		<category><![CDATA[オーバーロード]]></category>

		<guid isPermaLink="false">http://imoz.jp/?p=640</guid>
		<description><![CDATA[				C++で double a=1.4; int b=3; string c("hoge"); みたいなのに対して DE(a,b,c); ってやると 1.4, 3, hoge って風に出力してくれるようなものがあると便利だと思って少し考えたのだけどなんかあんまり出来る気がしない (2月21日 23:18:20)
				という@ir5の発言を受けて．少し考えてみたところ実は "," の演算子のオーバーロードを行うことによって意外と解決できるのではないかと考えた．
				
				あっけなく解決してしまったが以下のようなコードが要求を満たす．本当は ostreangstream をそのまま継承したクラスを作って単体で解決したかったのだが，仕方がないので Imos Library から cstr をひっぱってきて string を継承してとりあえずは目標達成．
				
				001: #include &lt;string&gt;
				002: #include &lt;iostream&gt;
				003: #include &lt;sstream&gt;
				004: using&nbsp;namespace&nbsp;std;
				005: 
				006: #define DE(...) cout &lt;&lt; (dbp(),__VA_ARGS__).substr(2) &lt;&lt; endl;
				007: 
				008: template&lt;class&nbsp;T&gt;&nbsp;string&nbsp;cstr(T&nbsp;a)&nbsp;{
				009: &nbsp;&nbsp;&nbsp;&nbsp;ostringstream&nbsp;os;&nbsp;os&nbsp;&lt;&lt;&nbsp;a;&nbsp;return&nbsp;os.str();
				010: }
				011: 
				012: struct&nbsp;dbp:&nbsp;string&nbsp;{
				013: &nbsp;&nbsp;&nbsp;&nbsp;template&lt;class&nbsp;T&gt;&nbsp;dbp&nbsp;operator,(T&nbsp;x){
				014: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*this&nbsp;+=&nbsp;&quot;, &quot;&nbsp;+&nbsp;cstr(x);
				015: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;*this;
				016: &nbsp;&nbsp;&nbsp;&nbsp;}
				017: };
				018: 
				019: [...]]]></description>
			<content:encoded><![CDATA[				<blockquote><p><a href="http://twitter.com/ir5" target="_blank"><img style="border:1px solid #888;padding:8px 24px 8px 0px;" title="ir5" src="http://imoz.jp/wp-content/uploads/ir5.png" alt="" width="92" height="92" align="left" /></a>C++で double a=1.4; int b=3; string c("hoge"); みたいなのに対して DE(a,b,c); ってやると 1.4, 3, hoge って風に出力してくれるようなものがあると便利だと思って少し考えたのだけどなんかあんまり出来る気がしない (2月21日 23:18:20)<br clear="all" /></p></blockquote>
				<p>という<a href="http://twitter.com/ir5/status/9430373027" target="_blank">@ir5の発言</a>を受けて．少し考えてみたところ実は "," の演算子のオーバーロードを行うことによって意外と解決できるのではないかと考えた．<br />
				<span id="more-640"></span><br />
				あっけなく解決してしまったが以下のようなコードが要求を満たす．本当は ostreangstream をそのまま継承したクラスを作って単体で解決したかったのだが，仕方がないので Imos Library から cstr をひっぱってきて string を継承してとりあえずは目標達成．</p>
				<p>
				<div class="imocode" style="line-height:1em;">001: <font color="#880000">#include &lt;string&gt;</font><br />
				002: <font color="#880000">#include &lt;iostream&gt;</font><br />
				003: <font color="#880000">#include &lt;sstream&gt;</font><br />
				004: <font color="#008888">using</font>&nbsp;<font color="#008888">namespace</font>&nbsp;std;<br />
				005: <br />
				006: <font color="#880000">#define DE(...) cout &lt;&lt; (dbp(),__VA_ARGS__).substr(2) &lt;&lt; endl;</font><br />
				007: <br />
				008: <font color="#008888">template</font>&lt;<font color="#008888">class</font>&nbsp;T&gt;&nbsp;string&nbsp;cstr(T&nbsp;a)&nbsp;{<br />
				009: &nbsp;&nbsp;&nbsp;&nbsp;ostringstream&nbsp;os;&nbsp;os&nbsp;&lt;&lt;&nbsp;a;&nbsp;<font color="#008888">return</font>&nbsp;os.str();<br />
				010: }<br />
				011: <br />
				012: <font color="#008888">struct</font>&nbsp;dbp:&nbsp;string&nbsp;{<br />
				013: &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008888">template</font>&lt;<font color="#008888">class</font>&nbsp;T&gt;&nbsp;dbp&nbsp;<font color="#008888">operator</font>,(T&nbsp;x){<br />
				014: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<font color="#008888">this</font>&nbsp;+=&nbsp;<font color="#0000ff">&quot;, &quot;</font>&nbsp;+&nbsp;cstr(x);<br />
				015: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008888">return</font>&nbsp;*<font color="#008888">this</font>;<br />
				016: &nbsp;&nbsp;&nbsp;&nbsp;}<br />
				017: };<br />
				018: <br />
				019: <font color="#008888">int</font>&nbsp;<font color="#000088">main</font>()&nbsp;{<br />
				020: &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008888">double</font>&nbsp;a&nbsp;=&nbsp;1.4;&nbsp;<font color="#008888">int</font>&nbsp;b&nbsp;=&nbsp;3;&nbsp;string&nbsp;c(<font color="#0000ff">&quot;hoge&quot;</font>);<br />
				021: &nbsp;&nbsp;&nbsp;&nbsp;DE(a,&nbsp;b,&nbsp;c);<br />
				022: &nbsp;&nbsp;&nbsp;&nbsp;<font color="#008888">return</font>&nbsp;0;<br />
				023: }
				</div></p>
]]></content:encoded>
			<wfw:commentRss>http://imoz.jp/2010/02/va_args_for_cpp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Twitter Bot "ないんたん" について</title>
		<link>http://imoz.jp/2010/01/ninetan/</link>
		<comments>http://imoz.jp/2010/01/ninetan/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 09:56:44 +0000</pubDate>
		<dc:creator>imos</dc:creator>
		
		<category><![CDATA[インターネット]]></category>

		<category><![CDATA[Twitter]]></category>

		<category><![CDATA[ないんたん]]></category>

		<guid isPermaLink="false">http://imoz.jp/?p=634</guid>
		<description><![CDATA[				まとまった情報を載せていなかったので一度まとめておきます．
				「ないんたん」のアカウント名： @ninetan
				「ないんたん」の由来： 大阪大学にある SX-9 というスーパーコンピュータが由来
				「ないんたん」の目的： 第一にかわいさ，第二に便利さ，第三に面白さ
				
				あいさつ機能
				Botとして標準的な挨拶の機能を備えています．ただし現状では挨拶返しに対して正しい対処ができません．
				警報機能
				大阪，京都，東京に関して警報を感知する機能があります．ただし大阪は北部，京都は南部，東京は23区限定です．大阪限定の情報を得るには @osaka_cluster をフォローし，京都限定の情報を得るには @kyoto_cluster をフォローしている必要があります．
				計算機能
				「1+1は何？」等のメッセージを受け取ると計算を行い，その結果を発信します．その他，その日の平均株価，現在の(大阪の)気温等について返答することができます．
				例：
				
				001: 12345*12345がわからないよ！
				002: // 12345*12345の計算結果について通達がある
				003: 
				004: 今の気温を教えて！
				005: // 現在の気温について通達がある
				006: 
				007: 1ドルって何円かな？
				008: // 1ドルの為替レートについて通達がある
				
				
				カウント機能
				ないんたんは数を数えることができます．
				
				[変数++] … 変数のカウントを1つ加算しメッセージを発信します
				[変数--] … 変数のカウントを1つ減算しメッセージを発信します
				[変数] … 変数のカウントを1つ加算します．メッセージはキリの良い数に到達した時のみ発信します
				[変数?] … 変数の状態を示すメッセージを発信します．
				[変数=正の整数] … 変数のカウントを指定の値に設定します．
				
				単位はただしそうなものをないんたんが判断し決まります．基本的に一度決まった単位は以後変わることがありませんが，手が入ると変更される可能性があります．
				例：
				
				001: コーヒーこぽこぽ&nbsp;[コーヒー]
				002: // コーヒーのカウントが1加算される．通達はされない．
				003: 
				004: コーヒーごくごく&nbsp;[コーヒー++]
				005: // コーヒーのカウントが1加算され，通達がある．
				006: 
				007: @ninetan&nbsp;コーヒーリセット！&nbsp;[コーヒー=0]
				008: // コーヒーのカウントが0に設定さ，通達がある．
				009: 
				010: @ninetan&nbsp;コーヒーどれくらい飲んだっけ？&nbsp;[コーヒー?]
				011: // コーヒーの状態について通達がある．
				
				
				その他
				上記には書かれていない様々な機能が多数実装されています．ぜひ可愛がってやってください．
]]></description>
			<content:encoded><![CDATA[				<p>まとまった情報を載せていなかったので一度まとめておきます．</p>
				<p>「ないんたん」のアカウント名： <a href="http://twitter.com/ninetan" target="_blank">@ninetan</a><br />
				「ないんたん」の由来： 大阪大学にある SX-9 というスーパーコンピュータが由来<br />
				「ないんたん」の目的： 第一にかわいさ，第二に便利さ，第三に面白さ<br />
				<span id="more-634"></span></p>
				<h2>あいさつ機能</h2>
				<p>Botとして標準的な挨拶の機能を備えています．ただし現状では挨拶返しに対して正しい対処ができません．</p>
				<h2>警報機能</h2>
				<p>大阪，京都，東京に関して警報を感知する機能があります．ただし大阪は北部，京都は南部，東京は23区限定です．大阪限定の情報を得るには @osaka_cluster をフォローし，京都限定の情報を得るには @kyoto_cluster をフォローしている必要があります．</p>
				<h2>計算機能</h2>
				<p>「1+1は何？」等のメッセージを受け取ると計算を行い，その結果を発信します．その他，その日の平均株価，現在の(大阪の)気温等について返答することができます．</p>
				<p>例：</p>
				<p>
				<div class="imocode" style="line-height:1em;">001: 12345*12345がわからないよ！<br />
				002: <font color="#008800">// 12345*12345の計算結果について通達がある</font><br />
				003: <br />
				004: 今の気温を教えて！<br />
				005: <font color="#008800">// 現在の気温について通達がある</font><br />
				006: <br />
				007: 1ドルって何円かな？<br />
				008: <font color="#008800">// 1ドルの為替レートについて通達がある</font>
				</div>
				</p>
				<h2>カウント機能</h2>
				<p>ないんたんは数を数えることができます．</p>
				<ul>
				<li>[変数++] … 変数のカウントを1つ加算しメッセージを発信します</li>
				<li>[変数--] … 変数のカウントを1つ減算しメッセージを発信します</li>
				<li>[変数] … 変数のカウントを1つ加算します．メッセージはキリの良い数に到達した時のみ発信します</li>
				<li>[変数?] … 変数の状態を示すメッセージを発信します．</li>
				<li>[変数=正の整数] … 変数のカウントを指定の値に設定します．</li>
				</ul>
				<p>単位はただしそうなものをないんたんが判断し決まります．基本的に一度決まった単位は以後変わることがありませんが，手が入ると変更される可能性があります．</p>
				<p>例：</p>
				<p>
				<div class="imocode" style="line-height:1em;">001: コーヒーこぽこぽ&nbsp;[コーヒー]<br />
				002: <font color="#008800">// コーヒーのカウントが1加算される．通達はされない．</font><br />
				003: <br />
				004: コーヒーごくごく&nbsp;[コーヒー++]<br />
				005: <font color="#008800">// コーヒーのカウントが1加算され，通達がある．</font><br />
				006: <br />
				007: @ninetan&nbsp;コーヒーリセット！&nbsp;[コーヒー=0]<br />
				008: <font color="#008800">// コーヒーのカウントが0に設定さ，通達がある．</font><br />
				009: <br />
				010: @ninetan&nbsp;コーヒーどれくらい飲んだっけ？&nbsp;[コーヒー?]<br />
				011: <font color="#008800">// コーヒーの状態について通達がある．</font>
				</div>
				</p>
				<h2>その他</h2>
				<p>上記には書かれていない様々な機能が多数実装されています．ぜひ可愛がってやってください．</p>
]]></content:encoded>
			<wfw:commentRss>http://imoz.jp/2010/01/ninetan/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Adobe AIR と WebKit</title>
		<link>http://imoz.jp/2009/12/adobe-air-and-webkit/</link>
		<comments>http://imoz.jp/2009/12/adobe-air-and-webkit/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 15:31:22 +0000</pubDate>
		<dc:creator>imos</dc:creator>
		
		<category><![CDATA[Adobe AIR]]></category>

		<category><![CDATA[3D]]></category>

		<category><![CDATA[CSS]]></category>

		<category><![CDATA[WebKit]]></category>

		<guid isPermaLink="false">http://imoz.jp/?p=611</guid>
		<description><![CDATA[				関西アンカンファレンスなるイベントに参加してきました．久しく勉強会のようなイベントに参加していませんでしたが，今回友人が行くと言っていたので参加してきました．アンカンファレンスというのは発表内容が当日に決まるという形式のイベントで，自分も前日に用意をし始め「HTMLで作るデスクトップアプリケーション」というタイトルで発表させていただきました．内容は Adobe AIR と WebKit がすごいという事を主張するだけの内容でしたが，それなりに反響(?)がありほっとしています．(※右の画像はデモ3で，CSSで3Dが扱え，その中にFlashオブジェクトも格納できるというデモ)
				
				以下が発表時に使ったスライドはslideshareにアップロードしたら崩れが激しかったのでやめました(もともと情報がほとんど載っていないので良いかなとか)．デモで使ったものは (1) Hello world! (2) Transparent (3) iMac にアップロードしておきました．ただ，Macしか手元にない(というかWindowsで動かす気があまりない)ので，動かし方の説明はMacのみになりますがご了承ください．（ Windows の場合でも Adobe Dreamweaver を持っていれば苦労なく動かせます．）
				とりあえず動かしたい人向け Adobe AIR編 (デモ1，デモ2) (for Mac)
				まず Adobe AIR SDK 2.0 beta をダウンロードし，そのディスクイメージの中の runtimes/air/mac の位置にある Adobe AIR.framework というフォルダを適当な場所に移動してください(以下ではホームフォルダ直下のライブラリの中 ~/Library に移動したものとして話を続けます)．次に bin の中にある adl (と adt) をパスの通っている場所に移動してください(わからなければホームフォルダ直下とかでも良いですが，コマンドが adl ではなく
				 ~/adl として実行しなければならなくなります)．そして以下のコマンドをターミナルに打ち込み Adobe AIR を起動します．
				
				$ adl -runtime ~/Library application.xml
				
				ここまでできれば後は自分で色々できると思います．サンプルを見ながら色々やってみてくれるとありがたいです．
				 
				とりあえず動かしたい人向け [...]]]></description>
			<content:encoded><![CDATA[				<p><img style="border:1px solid #888;margin:3px;" title="imac" src="http://imoz.jp/wp-content/uploads/imac-3dcss.jpg" alt="" width="200" height="200" align="right" /><a href="http://www.msng.info/archives/2009/12/kansai_unconference_application.php" target="_blank">関西アンカンファレンス</a>なるイベントに参加してきました．久しく勉強会のようなイベントに参加していませんでしたが，今回友人が行くと言っていたので参加してきました．アンカンファレンスというのは発表内容が当日に決まるという形式のイベントで，自分も前日に用意をし始め「HTMLで作るデスクトップアプリケーション」というタイトルで発表させていただきました．内容は Adobe AIR と WebKit がすごいという事を主張するだけの内容でしたが，それなりに反響(?)がありほっとしています．(※右の画像はデモ3で，CSSで3Dが扱え，その中にFlashオブジェクトも格納できるというデモ)<br clear="all" /><br />
				<span id="more-611"></span><br />
				以下が発表時に使ったスライドはslideshareにアップロードしたら崩れが激しかったのでやめました(もともと情報がほとんど載っていないので良いかなとか)．デモで使ったものは <a href="http://imoz.jp/files/uploads/kansaiun09/hello.zip">(1) Hello world!</a> <a href="http://imoz.jp/files/uploads/kansaiun09/transparent.zip">(2) Transparent</a> <a href="http://imoz.jp/files/uploads/kansaiun09/imac.zip">(3) iMac</a> にアップロードしておきました．ただ，Macしか手元にない(というかWindowsで動かす気があまりない)ので，動かし方の説明はMacのみになりますがご了承ください．（ Windows の場合でも Adobe Dreamweaver を持っていれば苦労なく動かせます．）</p>
				<h2>とりあえず動かしたい人向け Adobe AIR編 (デモ1，デモ2) (for Mac)</h2>
				<p>まず <a href="http://labs.adobe.com/downloads/air2.html" target="_blank">Adobe AIR SDK 2.0 beta</a> をダウンロードし，そのディスクイメージの中の runtimes/air/mac の位置にある Adobe AIR.framework というフォルダを適当な場所に移動してください(以下ではホームフォルダ直下のライブラリの中 ~/Library に移動したものとして話を続けます)．次に bin の中にある adl (と adt) をパスの通っている場所に移動してください(わからなければホームフォルダ直下とかでも良いですが，コマンドが adl ではなく<br />
				 ~/adl として実行しなければならなくなります)．そして以下のコマンドをターミナルに打ち込み Adobe AIR を起動します．<br />
				<code><br />
				$ adl -runtime ~/Library application.xml<br />
				</code></p>
				<p>ここまでできれば後は自分で色々できると思います．サンプルを見ながら色々やってみてくれるとありがたいです．</p>
				<p><img style="border:1px solid #888;margin:3px;" title="hello" src="http://imoz.jp/wp-content/uploads/hello.png" alt="" width="300" height="200" /> <img style="border:1px solid #888;margin:3px;" title="transp" src="http://imoz.jp/wp-content/uploads/transp.png" alt="" width="300" height="200" /></p>
				<h2>とりあえず動かしたい人向け WebKit編 (デモ3)</h2>
				<p>こちらはとりあえず SnowLeopard の入った Mac と最新版の Safari が必要です．入っている imac.html を Safari で開いてもらえると iMac が回転します．動画は Mac のアレなので一緒には入れませんでしたが，動画を入れたい方はてきとーな Flash を video.swf という名前に書き換えて同じフォルダに入れてくれると入ります．</p>
				<p><img style="border:1px solid #888;margin:3px;" title="imac-start" src="http://imoz.jp/wp-content/uploads/imac-start.png" alt="" width="300" height="300"> ⇒ <img style="border:1px solid #888;margin:3px;" title="imac-end" src="http://imoz.jp/wp-content/uploads/imac-end.png" alt="" width="300" height="300"></p>
]]></content:encoded>
			<wfw:commentRss>http://imoz.jp/2009/12/adobe-air-and-webkit/feed/</wfw:commentRss>
		</item>
		<item>
		<title>新iMac 27インチはディスプレイとしても使える</title>
		<link>http://imoz.jp/2009/10/new-imac-27-inch-as-display/</link>
		<comments>http://imoz.jp/2009/10/new-imac-27-inch-as-display/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 07:01:15 +0000</pubDate>
		<dc:creator>imos</dc:creator>
		
		<category><![CDATA[ブログ]]></category>

		<category><![CDATA[Apple]]></category>

		<category><![CDATA[Core i7]]></category>

		<category><![CDATA[iMac]]></category>

		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://imoz.jp/?p=607</guid>
		<description><![CDATA[				mini DisplayPort になってなかなか進歩がないなと思っていたらついにこのような iMac が出てしまった．1ヶ月ほど前から 24 インチディスプレイを買おうと思っていたが，新しい iMac に Blu-ray 又は 4 コアが搭載されればそちらを買ってそれで動かした方が良いかなと思い我慢していた結果，かなりいい結果に転んでくれました．2560*1440 はアニメを見るのにも良い比率で，27インチという大画面は夢が広がる．加えて MacBook Pro (2008 Late) のサブディスプレイとしても使えるともなると．それが学割を用いると，
				27インチディスプレイ + Core i7 + 8GB メモリ + 2TB HDD = 25万円以下
				という感じに．i7 は一見 Core2 Duo に劣る周波数に見えるが Turbo Boost が働くので 2 コアのみの使用であればおそらく上限の 3.46GHz で動作するし，そもそも 2 スレッドより多くを走らせると圧倒的な差が生まれる．もはやこれは買うしかない．なんというか i7 や Quad が(Mac Pro を除くと)Windowsにしかなかったのでハイスペックに憧れていたところでもあったのでもはや感動もの．
				そんなこんなで早々に予約してしまう予定です．wktk！
]]></description>
			<content:encoded><![CDATA[				<p><img src="http://imoz.jp/wp-content/uploads/imac.jpg" alt="" title="imac" width="200" height="200" align="left" style="border:1px solid #888;margin:3px;" />mini DisplayPort になってなかなか進歩がないなと思っていたらついにこのような iMac が出てしまった．1ヶ月ほど前から 24 インチディスプレイを買おうと思っていたが，新しい iMac に Blu-ray 又は 4 コアが搭載されればそちらを買ってそれで動かした方が良いかなと思い我慢していた結果，かなりいい結果に転んでくれました．2560*1440 はアニメを見るのにも良い比率で，27インチという大画面は夢が広がる．加えて MacBook Pro (2008 Late) のサブディスプレイとしても使えるともなると．それが学割を用いると，</p>
				<p>27インチディスプレイ + Core i7 + 8GB メモリ + 2TB HDD = 25万円以下</p>
				<p>という感じに．i7 は一見 Core2 Duo に劣る周波数に見えるが Turbo Boost が働くので 2 コアのみの使用であればおそらく上限の 3.46GHz で動作するし，そもそも 2 スレッドより多くを走らせると圧倒的な差が生まれる．もはやこれは買うしかない．なんというか i7 や Quad が(Mac Pro を除くと)Windowsにしかなかったのでハイスペックに憧れていたところでもあったのでもはや感動もの．</p>
				<p>そんなこんなで早々に予約してしまう予定です．wktk！</p>
]]></content:encoded>
			<wfw:commentRss>http://imoz.jp/2009/10/new-imac-27-inch-as-display/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SSL 越しに telnet する</title>
		<link>http://imoz.jp/2009/10/telnet-over-ssl/</link>
		<comments>http://imoz.jp/2009/10/telnet-over-ssl/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 13:55:44 +0000</pubDate>
		<dc:creator>imos</dc:creator>
		
		<category><![CDATA[プログラミング]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://imoz.jp/?p=599</guid>
		<description><![CDATA[				Gmail のデータをプログラムで取得するべく IMAP プロトコルを調べて Gmail とたたかおうと思ったところ，残念ながら SSL を使ってアクセスをしなければならないようで，しかし telnet は残念ながら SSL を持っていない．そこでどうにかしないといけないなーと思ってぐぐっていたところ，SSL越しにTelnetをする方法として鯖の缶詰で紹介されていたのでそれを使ってみたがどうやら認証が通るのに LIST コマンドで失敗していた．ちなみにそのコマンドは以下の通り，
				
				$ openssl s_client -connect server:port -quiet
				
				最初はアクセス制限か何かかと思ったが Thunderbird とかはいけていたので，改行コードが実は間違っているんじゃないかと思い始め PHP で簡単に組んでみたところ案の定通ってしまいぐんにょり．そこでとりあえず stelnet というコマンドを作ってみた．
				
				そんなこんなでうっかり着色までやってしまった．サーバ側からきたメッセージは緑色．これを /usr/local/bin ぐらいに stelnet とか言う名前で投げ入れてやれば stelnet server port でアクセスできます，
				
				#!/usr/bin/php
				&lt;?
				/*
				SSL経由のTELNETシステム
				Copyright(C)&nbsp;2009&nbsp;imos.
				*/
				
				if&nbsp;($argc&nbsp;!=&nbsp;3)&nbsp;die("Usage:&nbsp;stelnet&nbsp;server&nbsp;port\n");
				$stdin&nbsp;=&nbsp;fopen('php://stdin',&nbsp;'r');
				$sock&nbsp;=&nbsp;@fsockopen("ssl://"&nbsp;.&nbsp;$argv[1],&nbsp;(int)$argv[2]);
				if&nbsp;(!$sock)&nbsp;die("Cannot&nbsp;connect&nbsp;to&nbsp;the&nbsp;server&nbsp;$argv[1]:$argv[2]\n");
				stream_set_blocking($stdin,&nbsp;0);
				do&nbsp;{
				&nbsp;&nbsp;&nbsp;&nbsp;$select&nbsp;=&nbsp;array($stdin,&nbsp;$sock);
				&nbsp;&nbsp;&nbsp;&nbsp;$dummy&nbsp;=&nbsp;array();
				&nbsp;&nbsp;&nbsp;&nbsp;stream_select($select,&nbsp;$dummy,&nbsp;$dummy,&nbsp;NULL);
				&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($select[0]&nbsp;==&nbsp;$stdin)&nbsp;{
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;fread($stdin,&nbsp;1024);
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;str_replace("\r",&nbsp;'',&nbsp;$data);
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite($sock,&nbsp;str_replace("\n",&nbsp;"\r\n",&nbsp;$data));
				&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;fread($sock,&nbsp;1024);
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strlen($data))&nbsp;{
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"\x1b[32m";
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$data;
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"\x1b[0m";
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
				&nbsp;&nbsp;&nbsp;&nbsp;}
				&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(feof($sock)&nbsp;||&nbsp;feof($stdin))&nbsp;break;
				}&nbsp;while&nbsp;(1);
				fclose($sock);
				
				echo&nbsp;"\n__EOM__\n";
				
				?&gt;
				
				-- 引数のチェックを行わなかったのと，100%のCPUを食うというバグがあったので修正 - 2009/10/16
				最近 Gmail に依存しすぎて，バックアップの方法を考えなきゃと思った結果がこれだよ！とりあえずラベル情報も保存したいので POP3 じゃ物足りないわけです．さて時間ができればバックアップ作るぞー．
]]></description>
			<content:encoded><![CDATA[				<p>Gmail のデータをプログラムで取得するべく IMAP プロトコルを調べて Gmail とたたかおうと思ったところ，残念ながら SSL を使ってアクセスをしなければならないようで，しかし telnet は残念ながら SSL を持っていない．そこでどうにかしないといけないなーと思ってぐぐっていたところ，SSL越しにTelnetをする方法として<a href="http://saba-kan.net/blog/2009/07/ssl%E8%B6%8A%E3%81%97%E3%81%ABtelnet%E3%81%A3%E3%81%BD%E3%81%8F%E6%93%8D%E4%BD%9C%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F%E3%81%84" target="_blank">鯖の缶詰</a>で紹介されていたのでそれを使ってみたがどうやら認証が通るのに LIST コマンドで失敗していた．ちなみにそのコマンドは以下の通り，<br />
				<code><br />
				$ openssl s_client -connect server:port -quiet<br />
				</code><br />
				最初はアクセス制限か何かかと思ったが Thunderbird とかはいけていたので，改行コードが実は間違っているんじゃないかと思い始め PHP で簡単に組んでみたところ案の定通ってしまいぐんにょり．そこでとりあえず stelnet というコマンドを作ってみた．<br />
				<span id="more-599"></span><br />
				そんなこんなでうっかり着色までやってしまった．サーバ側からきたメッセージは緑色．これを /usr/local/bin ぐらいに stelnet とか言う名前で投げ入れてやれば stelnet server port でアクセスできます，</p>
				<p>
				<div class="imocode" style="line-height:1em;">#!/usr/bin/php<br />
				&lt;?<br />
				/*<br />
				SSL経由のTELNETシステム<br />
				Copyright(C)&nbsp;2009&nbsp;imos.<br />
				*/<br />
				<br />
				if&nbsp;($argc&nbsp;!=&nbsp;3)&nbsp;die("Usage:&nbsp;stelnet&nbsp;server&nbsp;port\n");<br />
				$stdin&nbsp;=&nbsp;fopen('php://stdin',&nbsp;'r');<br />
				$sock&nbsp;=&nbsp;@fsockopen("ssl://"&nbsp;.&nbsp;$argv[1],&nbsp;(int)$argv[2]);<br />
				if&nbsp;(!$sock)&nbsp;die("Cannot&nbsp;connect&nbsp;to&nbsp;the&nbsp;server&nbsp;$argv[1]:$argv[2]\n");<br />
				stream_set_blocking($stdin,&nbsp;0);<br />
				do&nbsp;{<br />
				&nbsp;&nbsp;&nbsp;&nbsp;$select&nbsp;=&nbsp;array($stdin,&nbsp;$sock);<br />
				&nbsp;&nbsp;&nbsp;&nbsp;$dummy&nbsp;=&nbsp;array();<br />
				&nbsp;&nbsp;&nbsp;&nbsp;stream_select($select,&nbsp;$dummy,&nbsp;$dummy,&nbsp;NULL);<br />
				&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;($select[0]&nbsp;==&nbsp;$stdin)&nbsp;{<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;fread($stdin,&nbsp;1024);<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;str_replace("\r",&nbsp;'',&nbsp;$data);<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fwrite($sock,&nbsp;str_replace("\n",&nbsp;"\r\n",&nbsp;$data));<br />
				&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data&nbsp;=&nbsp;fread($sock,&nbsp;1024);<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strlen($data))&nbsp;{<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"\x1b[32m";<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$data;<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"\x1b[0m";<br />
				&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
				&nbsp;&nbsp;&nbsp;&nbsp;}<br />
				&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(feof($sock)&nbsp;||&nbsp;feof($stdin))&nbsp;break;<br />
				}&nbsp;while&nbsp;(1);<br />
				fclose($sock);<br />
				<br />
				echo&nbsp;"\n__EOM__\n";<br />
				<br />
				?&gt;</div>
				</p>
				<p>-- 引数のチェックを行わなかったのと，100%のCPUを食うというバグがあったので修正 - 2009/10/16</p>
				<p>最近 Gmail に依存しすぎて，バックアップの方法を考えなきゃと思った結果がこれだよ！とりあえずラベル情報も保存したいので POP3 じゃ物足りないわけです．さて時間ができればバックアップ作るぞー．</p>
]]></content:encoded>
			<wfw:commentRss>http://imoz.jp/2009/10/telnet-over-ssl/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
