<?xml version="1.0" encoding="SHIFT_JIS"?>
<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:admin="http://webns.net/mvcb/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
	xml:lang="ja">
	<channel rdf:about="https://mitsuki.engawa.org/index.rdf">
		<title>Mitsuki's Magic Laboratory</title>
		<link>https://mitsuki.engawa.org</link>
		<description>生温い技術屋がぼんやりする日々</description>
		<dc:creator>mitsuki</dc:creator>
		<admin:generatorAgent rdf:resource="http://www.blosxom.com/?v=2.1.2"/>
		<admin:errorReportsTo rdf:resource="mailto:mitsuki at engawa dot org"/>
		<items>
			<rdf:Seq>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070426.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070424.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070419.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070418.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070417.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070416.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070415.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070411.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Ruby/20070410_hash.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070410.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070409.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070407.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070405.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070403.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Diary/20070402.html"/>
				<rdf:li rdf:resource="https://mitsuki.engawa.org/Unix/20070401_dlopen.html"/>
			</rdf:Seq>
		</items>
	</channel>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070426.html">
		<title>2007/04/26</title>
		<link>https://mitsuki.engawa.org/Diary/20070426.html</link>
		<description>* 09:40 世界樹の迷宮、その16　B18F 攻略完了、B19F侵攻中。Lv50(1st PT)。　夕べは久しぶりにぷよぷよで対人対戦。ざぐさんと実力均衡（ややわたしが負け気味）してて燃えまくり。まきぞえで埋まっていくせずさん合掌（まあ他のゲームでこてんぱんにされたのでいいよね……いつか鷹の餌にしちゃる）。* 15:40 ロボットと人権　ロボットの「人権」が問題になるのはロボットを「機械の人間」にしようとするからであって、知的機械であればそもそも「機械としてのプライド」があるだろう。　……みたいな話を、かれこれ 15 年くらい前に小林めぐみが書いてたのを思い出した。　全てを自動処理化する「google のプライド」は、実はこれに近いものがあるのかなーと思うとちょっと面白い。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a>|<a href="/Science">Science</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-26T09:47+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;0940&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070426.rdf#0940&quot;&gt;*&lt;/a&gt; 09:40 世界樹の迷宮、その16&lt;/span&gt;&lt;br&gt;
　B18F 攻略完了、B19F侵攻中。Lv50(1st PT)。
&lt;p&gt;
　夕べは久しぶりにぷよぷよで対人対戦。ざぐさんと実力均衡（ややわたしが負け気味）してて燃えまくり。まきぞえで埋まっていくせずさん合掌（まあ他のゲームでこてんぱんにされたのでいいよね……いつか鷹の餌にしちゃる）。

&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1540&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070426.rdf#1540&quot;&gt;*&lt;/a&gt; 15:40 ロボットと人権&lt;/span&gt;&lt;br&gt;
　ロボットの「人権」が問題になるのはロボットを「機械の人間」にしようとするからであって、知的機械であればそもそも「機械としてのプライド」があるだろう。&lt;br&gt;
　……みたいな話を、かれこれ 15 年くらい前に小林めぐみが書いてたのを思い出した。&lt;br&gt;
　全てを自動処理化する「google のプライド」は、実はこれに近いものがあるのかなーと思うとちょっと面白い。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070426.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070424.html">
		<title>2007/04/24</title>
		<link>https://mitsuki.engawa.org/Diary/20070424.html</link>
		<description>* 20:55 Linux と Cygwin と BSDCygwin使っている人いますか？ その17791 名前：名無しさん＠お腹いっぱい。[sage] 投稿日：2007/04/24(火) 02:16:45Linux : 山田ルパン→栗貫ルパンCygwin : のぶよドラ→わさびドラBSD : かないみか→こおろぎさとみこれくらい違う　激しくワラタ。* 21:10 世界樹の迷宮、その15くらい　えーなんか大分間があいたけど、B18Fあたりをうろついたり（Lv47くらい）、2ndパーティ育てたり（今Lv25くらい）してた。　ちなみに 2nd PT は「闇侍／医詩呪」という余り物編成なのだけど、闇：罠張りが雑魚相手に尋常でなく強力。騎と組むと使いやすそう。侍：まだあまり特性理解してないけど、ボス向き？詩：狩をやや支援側に向けた感じ？　TP余りすぎ。呪：便利は便利だけど基本的に攻撃力がないのが難しい。　といった具合で、王道の 1st（騎剣／医狩錬） に比べて癖がありすぎてどうにも。早めに Lv 上げてシャフルしようかなー。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Unix">Unix</a>|<a href="/Cygwin">Cygwin</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-24T21:11+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;2055&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070424.rdf#2055&quot;&gt;*&lt;/a&gt; 20:55 Linux と Cygwin と BSD&lt;/span&gt;&lt;br&gt;
&lt;blockquote&gt;
Cygwin使っている人いますか？ その17&lt;br&gt;
&lt;a href=&quot;http://pc11.2ch.net/test/read.cgi/unix/1154022733/788-791n&quot;&gt;791&lt;/a&gt; 名前：名無しさん＠お腹いっぱい。[sage] 投稿日：2007/04/24(火) 02:16:45&lt;br&gt;
Linux : 山田ルパン→栗貫ルパン&lt;br&gt;
Cygwin : のぶよドラ→わさびドラ&lt;br&gt;
BSD : かないみか→こおろぎさとみ&lt;br&gt;
&lt;br&gt;
これくらい違う&lt;br&gt;
&lt;/blockquote&gt;
&lt;p&gt;
　激しくワラタ。

&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;2110&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070424.rdf#2110&quot;&gt;*&lt;/a&gt; 21:10 世界樹の迷宮、その15くらい&lt;/span&gt;&lt;br&gt;
　えーなんか大分間があいたけど、B18Fあたりをうろついたり（Lv47くらい）、2ndパーティ育てたり（今Lv25くらい）してた。&lt;br&gt;
　ちなみに 2nd PT は「闇侍／医詩呪」という余り物編成なのだけど、
&lt;ul&gt;
&lt;li&gt;闇：罠張りが雑魚相手に尋常でなく強力。騎と組むと使いやすそう。
&lt;li&gt;侍：まだあまり特性理解してないけど、ボス向き？
&lt;li&gt;詩：狩をやや支援側に向けた感じ？　TP余りすぎ。
&lt;li&gt;呪：便利は便利だけど基本的に攻撃力がないのが難しい。
&lt;/ul&gt;
&lt;p&gt;
　といった具合で、王道の 1st（騎剣／医狩錬） に比べて癖がありすぎてどうにも。早めに Lv 上げてシャフルしようかなー。

]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070424.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070419.html">
		<title>2007/04/19</title>
		<link>https://mitsuki.engawa.org/Diary/20070419.html</link>
		<description>* 17:25 世界樹の迷宮、その14　B14F 攻略済み。3Dダンジョンでこういう風景ってのはちょっと新鮮だなあ。全員 Lv45。* 18:05 銀のエンゼル　あたった。30数年生きてて初だよｗ</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-19T18:07+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1725&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070419.rdf#1725&quot;&gt;*&lt;/a&gt; 17:25 世界樹の迷宮、その14&lt;/span&gt;&lt;br&gt;
　B14F 攻略済み。3Dダンジョンでこういう風景ってのはちょっと新鮮だなあ。全員 Lv45。

&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1805&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070419.rdf#1805&quot;&gt;*&lt;/a&gt; 18:05 銀のエンゼル&lt;/span&gt;&lt;br&gt;
　あたった。30数年生きてて初だよｗ
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070419.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070418.html">
		<title>2007/04/18</title>
		<link>https://mitsuki.engawa.org/Diary/20070418.html</link>
		<description>* 12:55 mistral　内部データの保存を Marshal.dump から YAML.dump に変更したら、文字コード指定付き Regexp の復元でこけたorz 　あと、素の文字列と（YAML化に伴って）\ でエスケープされた文字列それぞれから作った Regexp は hash が違うので（String のままなら一致するのにー）、それぞれを Hash に突っ込んだら重複してしまう。むーん。　可読形式で保存したほうがいろいろ楽かなーと思ってたんだけど、ますますめんどくさくなりそうなので Marshal に戻そう（しくしく）\。 $1, 'mods' => $2 }@@ -260,2 +260,3 @@             mods = nil+            encd = nil             unless val['mods'].to_s.empty?@@ -265,2 +266,3 @@                 mods |= Regexp::MULTILINE if val['mods'].include?( 'm' )+                'esun'.each_byte do |c| (encd = val['mods'][c.chr]) && break end             end@@ -270,3 +272,3 @@                   bind(r).-                  call( val.delete( 'regexp' ), mods )+                  call( val.delete( 'regexp' ), mods, encd )             val.each { |k,v| r.instance_variable_set( k, v ) }--></description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Ruby">Ruby</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-18T12:24+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1255&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070418.rdf#1255&quot;&gt;*&lt;/a&gt; 12:55 mistral&lt;/span&gt;&lt;br&gt;
　内部データの保存を Marshal.dump から YAML.dump に変更したら、文字コード指定付き Regexp の復元でこけたorz &lt;br&gt;
　あと、素の文字列と（YAML化に伴って）\ でエスケープされた文字列それぞれから作った Regexp は hash が違うので（String のままなら一致するのにー）、それぞれを Hash に突っ込んだら重複してしまう。むーん。&lt;br&gt;
　可読形式で保存したほうがいろいろ楽かなーと思ってたんだけど、ますますめんどくさくなりそうなので Marshal に戻そう（しくしく）\。
&lt;!--
前者については暫定でパッチは作ってみた。

--- rubytypes.rb.org	2007-04-18 10:51:07.575842900 +0900
+++ rubytypes.rb	2007-04-18 11:21:26.918508300 +0900
@@ -255,3 +255,3 @@
     def Regexp.yaml_new( klass, tag, val )
-        if String === val and val =~ /^\/(.*)\/([mix]*)$/
+        if String === val and val =~ /^\/(.*)\/([mixesun]*)$/
             val = { &apos;regexp&apos; =&gt; $1, &apos;mods&apos; =&gt; $2 }
@@ -260,2 +260,3 @@
             mods = nil
+            encd = nil
             unless val[&apos;mods&apos;].to_s.empty?
@@ -265,2 +266,3 @@
                 mods |= Regexp::MULTILINE if val[&apos;mods&apos;].include?( &apos;m&apos; )
+                &apos;esun&apos;.each_byte do |c| (encd = val[&apos;mods&apos;][c.chr]) &amp;&amp; break end
             end
@@ -270,3 +272,3 @@
                   bind(r).
-                  call( val.delete( &apos;regexp&apos; ), mods )
+                  call( val.delete( &apos;regexp&apos; ), mods, encd )
             val.each { |k,v| r.instance_variable_set( k, v ) }
--&gt;
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070418.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070417.html">
		<title>2007/04/17</title>
		<link>https://mitsuki.engawa.org/Diary/20070417.html</link>
		<description>* 12:55 世界樹の迷宮、その13　B13F 攻略中、Lv43。　剣士の属性追撃って、追撃対象が全体魔法なら全体に追撃するのか。超強ぇ。全体魔法が複数とか追撃が複数とかだとどうなるんだろう？　現行 PT で使えない武器をそのまま売るのもなんとなくもったいないので、荷物持ちに闇と侍と詩を作った。育てるのは一回終わらせてからかなあ、いつになるのか知らないけど。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-17T12:56+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1255&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070417.rdf#1255&quot;&gt;*&lt;/a&gt; 12:55 世界樹の迷宮、その13&lt;/span&gt;&lt;br&gt;
　B13F 攻略中、Lv43。&lt;br&gt;
　剣士の属性追撃って、追撃対象が全体魔法なら全体に追撃するのか。超強ぇ。全体魔法が複数とか追撃が複数とかだとどうなるんだろう？&lt;br&gt;
　現行 PT で使えない武器をそのまま売るのもなんとなくもったいないので、荷物持ちに闇と侍と詩を作った。育てるのは一回終わらせてからかなあ、いつになるのか知らないけど。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070417.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070416.html">
		<title>2007/04/16</title>
		<link>https://mitsuki.engawa.org/Diary/20070416.html</link>
		<description>* 09:20 世界樹の迷宮、その12　B11F 攻略（マッピング）完了。続けて B12F 攻略したのになかなか完了にならないなーと思ったら、ボス領域に入る隠し通路1個見逃してた。ボスは雑魚リンクしまくりで消耗品投入の総力戦になったものの、なんとか撃破。Lv42。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-16T11:03+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;0920&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070416.rdf#0920&quot;&gt;*&lt;/a&gt; 09:20 世界樹の迷宮、その12&lt;/span&gt;&lt;br&gt;
　B11F 攻略（マッピング）完了。続けて B12F 攻略したのになかなか完了にならないなーと思ったら、ボス領域に入る隠し通路1個見逃してた。ボスは雑魚リンクしまくりで消耗品投入の総力戦になったものの、なんとか撃破。Lv42。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070416.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070415.html">
		<title>2007/04/15</title>
		<link>https://mitsuki.engawa.org/Diary/20070415.html</link>
		<description>* 01:35 Twippera　最近愛用中の twitter フロントエンド Opera widget。職場からだと IM みたいなコネクション張りっぱなし系のアプリケーションは使いにくいのと、せっかく Opera を常駐使用してるので、これを選択。　アイコンクリックで @username が自動入力できたり、tinyurl で縮小された URL を自動展開してくれたり（開く前に URL が確認できて安心）、順調に機能アップしてる。作者の人の作業状況が twitter 自体でぽろぽろ流れてくるのも面白い。 　widget といえば、Opera 本体の Javascript を OFF にしてる間は widget が動作しないのはなんとかならないのかなあ。* 15:50 世界樹の迷宮、その11　例の 5 日間滞在クエストのせいか間があいてしまったけど、B10Fの続き。ボスのなんとかさん撃破。なんかすごく弱かった……Lv上がりすぎた？　続けて B11F 侵攻開始。ブシドーを仲間にできるようになった。　使ってみたいスキルがなかなか習得できるようにならないので、ついにネタバレ封印解除してスキルツリーを見てしまう。おかげでようやくアリシア（錬）がイオナズン習得（違）したけど、大分スキルポイント無駄にしてるなあ。シビアじゃないっぽいからいいけど。　というわけで全員 Lv39。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Web">Web</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-15T01:34+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;0135&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070415.rdf#0135&quot;&gt;*&lt;/a&gt; 01:35 Twippera&lt;/span&gt;&lt;br&gt;
　最近愛用中の twitter フロントエンド Opera widget。職場からだと IM みたいなコネクション張りっぱなし系のアプリケーションは使いにくいのと、せっかく Opera を常駐使用してるので、これを選択。
　アイコンクリックで @username が自動入力できたり、tinyurl で縮小された URL を自動展開してくれたり（開く前に URL が確認できて安心）、順調に機能アップしてる。作者の人の作業状況が twitter 自体でぽろぽろ流れてくるのも面白い。 

　widget といえば、Opera 本体の Javascript を OFF にしてる間は widget が動作しないのはなんとかならないのかなあ。

&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1550&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070415.rdf#1550&quot;&gt;*&lt;/a&gt; 15:50 世界樹の迷宮、その11&lt;/span&gt;&lt;br&gt;
　例の 5 日間滞在クエストのせいか間があいてしまったけど、B10Fの続き。ボスのなんとかさん撃破。なんかすごく弱かった……Lv上がりすぎた？　続けて B11F 侵攻開始。ブシドーを仲間にできるようになった。&lt;br&gt;
　使ってみたいスキルがなかなか習得できるようにならないので、ついに&lt;a href=&quot;http://www15.atwiki.jp/sekaiju_maze/&quot;&gt;ネタバレ&lt;/a&gt;封印解除して&lt;a href=&quot;http://www15.atwiki.jp/sekaiju_maze/pages/94.html&quot;&gt;スキルツリー&lt;/a&gt;を見てしまう。おかげでようやくアリシア（錬）がイオナズン習得（違）したけど、大分スキルポイント無駄にしてるなあ。シビアじゃないっぽいからいいけど。&lt;br&gt;
　というわけで全員 Lv39。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070415.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070411.html">
		<title>2007/04/11</title>
		<link>https://mitsuki.engawa.org/Diary/20070411.html</link>
		<description>* 10:50 世界樹の迷宮、その10　なんとなく5日間滞在クエストをやりはじめたら思いのほか時間がかかった＞＜　twitter のログみると4時間くらいやってたのかな。ねむいー。全員 Lv36。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-11T10:49+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1050&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070411.rdf#1050&quot;&gt;*&lt;/a&gt; 10:50 世界樹の迷宮、その10&lt;/span&gt;&lt;br&gt;
　なんとなく5日間滞在クエストをやりはじめたら思いのほか時間がかかった＞＜　twitter のログみると4時間くらいやってたのかな。ねむいー。全員 Lv36。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070411.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Ruby/20070410_hash.html">
		<title>Ruby の hash key は object そのまんま</title>
		<link>https://mitsuki.engawa.org/Ruby/20070410_hash.html</link>
		<description>404 Blog Not Found:perl|javascript - 文字列じゃないhash key　JavaScript や Perl の場合ハッシュのキーは文字列限定なので、オブジェクト（Perl はそのリファレンス）をハッシュのキーとして使った場合、ハッシュからキーを取り出したらもはやオブジェクトではなくなってしまう、という話かな（Tie::RefHash なんてあるのね……）。　Ruby の場合、データはすべてオブジェクトであり、ハッシュは「オブジェクトとオブジェクトを関連付ける入れ物」なので、キーにしたオブジェクトをハッシュから取り出しても元のオブジェクトのまま。そのため、以下のような破廉恥(?)なコードがごく自然に書けてしまう：input = [ 'hogehoge', 'foooooooo', 'nyoron' ]reply = { 'hoge' => 'fuga', /fo+o/ => 'bar' }input.each do |instr|    reply.each do |key, val|        puts "#{instr} -> #{val}" if instr[key]    endend　このコードは、配列 input の各文字列に対して、ハッシュ reply のキー（文字列または正規表現オブジェクト）を引数に [] 演算子を適用し、結果が FALSE/nil でなければハッシュの値を表示する。文字列の演算子 [] は、[] の中身が文字列なら普通の比較、正規表現オブジェクトなら正規表現にマッチする文字列を返す（一致・マッチしなければ FALSE/nil を返す）。実行するとこんな感じ：> ruby test.rbhogehoge -> fugafoooooooo -> bar> 　ちなみにこれ、最近遊びで書いてる IRC bot "mistral" の自動応答機能の心臓部の抜粋なのだけど、Ruby のこの性質のおかげで、特に工夫するでもなくキーワードに文字列だけでなく正規表現も使えてしまうので便利（キーワード登録時には正規表現であることを明記する I/F は必要だけど）。</description>
		<dc:subject><a href="/Ruby">Ruby</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-10T21:13+09:00</dc:date>
		<content:encoded><![CDATA[&lt;blockquote&gt;
&lt;a href=&quot;http://blog.livedoor.jp/dankogai/archives/50806528.html&quot;&gt;404 Blog Not Found:perl|javascript - 文字列じゃないhash key&lt;/a&gt;
&lt;/blockquote&gt;
　JavaScript や Perl の場合ハッシュのキーは文字列限定なので、オブジェクト（Perl はそのリファレンス）をハッシュのキーとして使った場合、ハッシュからキーを取り出したらもはやオブジェクトではなくなってしまう、という話かな（Tie::RefHash なんてあるのね……）。
&lt;p&gt;
　Ruby の場合、データはすべてオブジェクトであり、ハッシュは「オブジェクトとオブジェクトを関連付ける入れ物」なので、キーにしたオブジェクトをハッシュから取り出しても元のオブジェクトのまま。そのため、以下のような破廉恥(?)なコードがごく自然に書けてしまう：
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
input = [ &apos;hogehoge&apos;, &apos;foooooooo&apos;, &apos;nyoron&apos; ]
reply = { &apos;hoge&apos; =&gt; &apos;fuga&apos;, /fo+o/ =&gt; &apos;bar&apos; }

input.each do |instr|
    reply.each do |key, val|
        puts &quot;#{instr} -&gt; #{val}&quot; if instr[key]
    end
end
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;
　このコードは、配列 input の各文字列に対して、ハッシュ reply のキー（文字列または正規表現オブジェクト）を引数に [] 演算子を適用し、結果が FALSE/nil でなければハッシュの値を表示する。文字列の演算子 [] は、[] の中身が文字列なら普通の比較、正規表現オブジェクトなら正規表現にマッチする文字列を返す（一致・マッチしなければ FALSE/nil を返す）。実行するとこんな感じ：
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
&gt; ruby test.rb
hogehoge -&gt; fuga
foooooooo -&gt; bar
&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;
　ちなみにこれ、最近遊びで書いてる IRC bot &quot;mistral&quot; の自動応答機能の心臓部の抜粋なのだけど、Ruby のこの性質のおかげで、特に工夫するでもなくキーワードに文字列だけでなく正規表現も使えてしまうので便利（キーワード登録時には正規表現であることを明記する I/F は必要だけど）。]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Ruby/20070410_hash.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070410.html">
		<title>2007/04/10</title>
		<link>https://mitsuki.engawa.org/Diary/20070410.html</link>
		<description>* 17:50 世界樹の迷宮、その9　前半の山場っぽい B10F 侵攻中。泉が使えるようになったのですごく楽だ。Lv31。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-10T19:21+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1750&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070410.rdf#1750&quot;&gt;*&lt;/a&gt; 17:50 世界樹の迷宮、その9&lt;/span&gt;&lt;br&gt;
　前半の山場っぽい B10F 侵攻中。泉が使えるようになったのですごく楽だ。Lv31。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070410.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070409.html">
		<title>2007/04/09</title>
		<link>https://mitsuki.engawa.org/Diary/20070409.html</link>
		<description>* 13:30 世界樹の迷宮、その8　しばらくさぼってたので再開。B3F（裏）の敵はどうも B8F あたりと同系っぽいので、先に B8F から進めることにする。泉、竜のイベントクリア。Lv29。　ちなみに、ここで書いてるのは昨日やった分の記録であって、仕事中に遊んでるとかそーいうわけではないので、念のため（誰も気にはしてないとは思うけど）。* 13:45 twitterはじめました　たいぷちゃんとかせずさんがやってるので、なんとなくやってみた。　要するに IM の「今何やってる中」を汎用化・独立化したような代物なのだけど、単に他人のそれを時系列で並べて眺めてても面白いうえに、jabber みたいな IM ゲートウェイをはさむといろいろ応用できて更に面白い、ということらしい。　状態を blog に表示させるだけなら Badges にサンプルがいろいろあるので、とりあえず表示だけさせてみた（右上）。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a>|<a href="/Web">Web</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-09T13:45+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1330&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070409.rdf#1330&quot;&gt;*&lt;/a&gt; 13:30 世界樹の迷宮、その8&lt;/span&gt;&lt;br&gt;
　しばらくさぼってたので再開。B3F（裏）の敵はどうも B8F あたりと同系っぽいので、先に B8F から進めることにする。泉、竜のイベントクリア。Lv29。&lt;br&gt;
　ちなみに、ここで書いてるのは昨日やった分の記録であって、仕事中に遊んでるとかそーいうわけではないので、念のため（誰も気にはしてないとは思うけど）。

&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1345&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070409.rdf#1345&quot;&gt;*&lt;/a&gt; 13:45 &lt;a href=&quot;http://www.twitter.com/&quot;&gt;twitter&lt;/a&gt;はじめました&lt;/span&gt;&lt;br&gt;
　たいぷちゃんとかせずさんがやってるので、なんとなくやってみた。&lt;br&gt;
　要するに IM の「今何やってる中」を汎用化・独立化したような代物なのだけど、単に他人のそれを時系列で並べて眺めてても面白いうえに、jabber みたいな IM ゲートウェイをはさむといろいろ応用できて更に面白い、ということらしい。&lt;br&gt;
　状態を blog に表示させるだけなら &lt;a href=&quot;http://twitter.com/account/badge&quot;&gt;Badges&lt;/a&gt; にサンプルがいろいろあるので、とりあえず表示だけさせてみた（右上）。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070409.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070407.html">
		<title>2007/04/07</title>
		<link>https://mitsuki.engawa.org/Diary/20070407.html</link>
		<description>* 26:10 蘇るPC-9801伝説 永久保存版 第2弾　読み終わった。なんか全体的にインタビュー記事がよみづらいというか、文章としてわかりにくい。　ネタ的には、V30 関係と、ちょうどこないだ少しだけふれたテルプシコラとか PMD とかの FM 音源ドライバがタイムリーで面白かった。エルミック・ウェスコムの の iNHERITOR も産業系やってる人には面白いかもしれない。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Computer">Computer</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-08T02:09+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;2610&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070407.rdf#2610&quot;&gt;*&lt;/a&gt; 26:10 &lt;a href=&quot;http://www.amazon.co.jp/dp/4756148832&quot;&gt;蘇るPC-9801伝説 永久保存版 第2弾&lt;/a&gt;&lt;/span&gt;&lt;br&gt;
　読み終わった。なんか全体的にインタビュー記事がよみづらいというか、文章としてわかりにくい。&lt;br&gt;
　ネタ的には、V30 関係と、&lt;a href=&quot;http://mitsuki.engawa.org/Diary/20070321.html&quot;&gt;ちょうどこないだ少しだけふれた&lt;/a&gt;テルプシコラとか PMD とかの FM 音源ドライバがタイムリーで面白かった。エルミック・ウェスコムの の iNHERITOR も産業系やってる人には面白いかもしれない。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070407.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070405.html">
		<title>2007/04/05</title>
		<link>https://mitsuki.engawa.org/Diary/20070405.html</link>
		<description>* 10:30 mistral　たいぷちゃんの nak にインスパイアされた IRC bot を作り中。といっても nadoka の plugin なのでたいして難しいことはしてないのだけど。　とりあえず、発言の URL から TITLE 拾ってくる機能は実装したので、某香港チャンネルに放流。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Programming">Programming</a>|<a href="/Ruby">Ruby</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-05T10:33+09:00</dc:date>
		<content:encoded><![CDATA[&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1030&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070405.rdf#1030&quot;&gt;*&lt;/a&gt; 10:30 mistral&lt;/span&gt;&lt;br&gt;
　たいぷちゃんの nak にインスパイアされた IRC bot を作り中。といっても &lt;a href=&quot;http://www.atdot.net/nadoka/nadoka.ja.html&quot;&gt;nadoka&lt;/a&gt; の plugin なのでたいして難しいことはしてないのだけど。&lt;br&gt;
　とりあえず、発言の URL から TITLE 拾ってくる機能は実装したので、某香港チャンネルに放流。]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070405.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070403.html">
		<title>2007/04/03</title>
		<link>https://mitsuki.engawa.org/Diary/20070403.html</link>
		<description>* 09:55 世界樹の迷宮、その7　B3〜4F再攻略中。特にイベントなし。全員Lv25。* 10:00 あるあるｗやってる途中何か見たことあるなぁと思ってたらRijndael暗号でした　その昔、同じパターンで LZ77 だったことある。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-03T08:59+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;0955&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070403.rdf#0955&quot;&gt;*&lt;/a&gt; 09:55 世界樹の迷宮、その7&lt;/span&gt;&lt;br&gt;
　B3〜4F再攻略中。特にイベントなし。全員Lv25。

&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1000&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070403.rdf#1000&quot;&gt;*&lt;/a&gt; 10:00 あるあるｗ&lt;/span&gt;&lt;br&gt;
&lt;blockquote&gt;
&lt;a href=&quot;http://twc.xrea.jp/?20070402#d85&quot;&gt;やってる途中何か見たことあるなぁと思ってたらRijndael暗号でした&lt;/a&gt;
&lt;/blockquote&gt;
&lt;p&gt;
　その昔、同じパターンで LZ77 だったことある。
]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070403.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Diary/20070402.html">
		<title>2007/04/02</title>
		<link>https://mitsuki.engawa.org/Diary/20070402.html</link>
		<description>* 10:05 世界樹の迷宮、その6　B6F制覇、白いクリスタルの扉を開けられるようになった。　続けてB7F進出中\。　全員Lv24。リエル（医）がエリアキュア習得、及びリフレッシュの Lv 上げ中。毒痛すぎ。</description>
		<dc:subject><a href="/Diary">Diary</a>|<a href="/Sekaiju">Sekaiju</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-02T10:05+09:00</dc:date>
		<content:encoded><![CDATA[
&lt;p&gt;&lt;span class=&quot;para&quot;&gt;&lt;a name=&quot;1005&quot; href=&quot;https://mitsuki.engawa.org/Diary/20070402.rdf#1005&quot;&gt;*&lt;/a&gt; 10:05 世界樹の迷宮、その6&lt;/span&gt;&lt;br&gt;
　B6F制覇、白いクリスタルの扉を開けられるようになった。&lt;br&gt;
　続けてB7F進出中\&lt;!--のはずがB4Fに逆戻り中。あの不自然な空白は、やはりそういうことかー。--&gt;。&lt;br&gt;
　全員Lv24。リエル（医）がエリアキュア習得、及びリフレッシュの Lv 上げ中。毒痛すぎ。

]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Diary/20070402.trackback"/>
	</item>
	<item rdf:about="https://mitsuki.engawa.org/Unix/20070401_dlopen.html">
		<title>dlopen(3) した共有ライブラリファイルに書き込みしたら SEGV するらしい</title>
		<link>https://mitsuki.engawa.org/Unix/20070401_dlopen.html</link>
		<description>DSAS開発者の部屋:なぜ apache module を更新すると Segmentation fault するのかを読んで最初に思ったのは、なんで .so の上書きそのもので "Text file busy" にならないんだろーという点。　というのは最近の(*1) unix 系だと、exec(2) した実行ファイルを書き込み可能な形で open(2)等 しようとすると "Text file busy" なエラーになるので、そこからの推測で dlopen(3) でもそうなるんじゃないかなーと(*2)。exec(2) も dlopen(3) も実行可能バイナリをプロセス空間にマップするという意味では実質似たようなものだし。*1)昔の商用 UNIX は exec(2) しててもそのまんま書き込めたので、実行中の（.soではない）実行ファイルを上書き cp して SEGV なんてイベントがそれなりにあったらしい。*2)Windows は EXE も DLL も実行中は書き込みロックされるので、そちらからの連想もある。　というわけで、実行環境が手元になかったので、何故か手元にあった FreeBSD のソースを眺めてみた。　FreeBSD6 の場合、exec(2) した際に実行バイナリファイルを指す vnode に VV_TEXT フラグが付くので(src/sys/kern/kern_exec.c)、open(2) などファイルを変更する可能性のあるシステムコールではこれの有無をチェックして、VV_TEXT付きなら ETXTBSY を返す模様(src/sys/kern/vfs_vnops.c)。その結果 "Text file busy" のエラーになる。　じゃあ dlopen(3) はというと、実行バイナリを O_RDONLY で open(2) して mmap(2) してるものの(libexec/rtld-elf/rtld.c)、VV_TEXT をセットしている様子はない。って、RTLD はユーザーコードなので付けようがないと思い直して、なら mmap(2) が PROT_EXEC のときに付けたりしてないかなーと思ったけど、特にそういう処理はしてないぽい。そもそも VV_TEXT の付加処理自体 exec(2) と LKM 関連でしか使ってなさげ。　帰宅して実際の環境で動作中の .so を適当なファイルで上書きしてやると、見事撃墜成功。うーん……。　Linux の場合はこんな事例があった。ってそういえば livepatch とか調べた時に読んだような気がする。　exec(2) 中に上書きできなくなったのはセキュリティ的な理由（実行中にパッチ当てられても困る）と認識してたんだけど、.so が上書きできるんじゃ意味ないような気がする……なんか理由でもあるのかなあ。　というようなことを金曜にやってた。</description>
		<dc:subject><a href="/Unix">Unix</a></dc:subject>
		<dc:creator>mitsuki</dc:creator>
		<dc:date>2007-04-01T16:15+09:00</dc:date>
		<content:encoded><![CDATA[&lt;blockquote&gt;
&lt;a href=&quot;http://dsas.blog.klab.org/archives/50972695.html&quot;&gt;DSAS開発者の部屋:なぜ apache module を更新すると Segmentation fault するのか&lt;/a&gt;
&lt;/blockquote&gt;
を読んで最初に思ったのは、なんで .so の上書きそのもので &quot;Text file busy&quot; にならないんだろーという点。&lt;br&gt;
　というのは最近の(*1) unix 系だと、exec(2) した実行ファイルを書き込み可能な形で open(2)等 しようとすると &quot;Text file busy&quot; なエラーになるので、そこからの推測で dlopen(3) でもそうなるんじゃないかなーと(*2)。exec(2) も dlopen(3) も実行可能バイナリをプロセス空間にマップするという意味では実質似たようなものだし。
&lt;p class=&quot;comment&quot;&gt;
*1)昔の商用 UNIX は exec(2) しててもそのまんま書き込めたので、実行中の（.soではない）実行ファイルを上書き cp して SEGV なんてイベントがそれなりにあったらしい。&lt;br&gt;
*2)Windows は EXE も DLL も実行中は書き込みロックされるので、そちらからの連想もある。
&lt;p&gt;
　というわけで、実行環境が手元になかったので、何故か手元にあった FreeBSD のソースを眺めてみた。&lt;br&gt;
　FreeBSD6 の場合、exec(2) した際に実行バイナリファイルを指す vnode に VV_TEXT フラグが付くので(src/sys/kern/kern_exec.c)、open(2) などファイルを変更する可能性のあるシステムコールではこれの有無をチェックして、VV_TEXT付きなら ETXTBSY を返す模様(src/sys/kern/vfs_vnops.c)。その結果 &quot;Text file busy&quot; のエラーになる。&lt;br&gt;
　じゃあ dlopen(3) はというと、実行バイナリを O_RDONLY で open(2) して mmap(2) してるものの(libexec/rtld-elf/rtld.c)、VV_TEXT をセットしている様子はない。って、RTLD はユーザーコードなので付けようがないと思い直して、なら mmap(2) が PROT_EXEC のときに付けたりしてないかなーと思ったけど、特にそういう処理はしてないぽい。そもそも VV_TEXT の付加処理自体 exec(2) と LKM 関連でしか使ってなさげ。&lt;br&gt;
　帰宅して実際の環境で動作中の .so を適当なファイルで上書きしてやると、見事撃墜成功。うーん……。
&lt;p&gt;
　Linux の場合は&lt;a href=&quot;http://gotom.jp/~gotom/diary/?200412a&amp;to=200412091&quot;&gt;こんな事例&lt;/a&gt;があった。ってそういえば livepatch とか調べた時に読んだような気がする。
&lt;p&gt;
　exec(2) 中に上書きできなくなったのはセキュリティ的な理由（実行中にパッチ当てられても困る）と認識してたんだけど、.so が上書きできるんじゃ意味ないような気がする……なんか理由でもあるのかなあ。
&lt;p&gt;
　というようなことを金曜にやってた。]]></content:encoded>
		<trackback:ping rdf:resource="https://mitsuki.engawa.org/Unix/20070401_dlopen.trackback"/>
	</item>
</rdf:RDF>
