<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>blog.woremacx.com</title>
        <link>http://blog.woremacx.com/</link>
        <description>Save the woremacx, save the world.</description>
        <language>en</language>
        <copyright>Copyright 2009</copyright>
        <lastBuildDate>Mon, 30 Nov 2009 21:34:39 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>vaginakun で google wave に入門してみた</title>
            <description><![CDATA[<p>google wave に招待してもらったけど、特にやることがなかったので、例によって単純な robot を動かしてみた。</p>
<p>発言を書き換える robot の作り方は、神記事(<a href="http://www.atmarkit.co.jp/fwcr/rensai2/wave02/03.html">Google Wave API開発ガイド（後編）JavaとPythonでGoogle WaveのRobotを作るには（3/4）−＠IT</a>) で完璧に解説されている。記事を見ながら appspot + google wave に入門し、vaginakun を google wave に解き放つことができた。</p>
<p>vaginakun@appspot.com を contact に入れて new wave 作れば、変換エンジンこそ古いものの #vagina の雰囲気を味わえるよ！</p>
<pre>
<span class="synComment">#!/usr/bin/env python</span>
<span class="synComment"># -*- coding: utf-8 -*-</span>

<span class="synPreProc">from</span> waveapi <span class="synPreProc">import</span> events
<span class="synPreProc">from</span> waveapi <span class="synPreProc">import</span> model
<span class="synPreProc">from</span> waveapi <span class="synPreProc">import</span> robot
<span class="synPreProc">import</span> urllib

<span class="synStatement">def</span> <span class="synIdentifier">OnParticipantsChanged</span>(properties, context):
  added = properties['<span class="synConstant">participantsAdded</span>']
  <span class="synStatement">for</span> participant <span class="synStatement">in</span> added:
    Greet(context, participant)

<span class="synStatement">def</span> <span class="synIdentifier">OnRobotAdded</span>(properties, context):
  root_wavelet = context.GetRootWavelet()
  root_wavelet.CreateBlip().GetDocument().SetText('<span class="synConstant">hello</span>')

<span class="synStatement">def</span> <span class="synIdentifier">OnBlipCreated</span>(properties, context):
  blip = context.GetBlipById(properties['<span class="synConstant">blipId</span>'])
  text = blip.GetDocument().GetText()
  
  d = urllib.urlopen(&quot;<span class="synConstant">http://woremacx.com/text2vagina/?text=</span>&quot; + urllib.quote(text.encode('<span class="synConstant">utf-8</span>')))
  res = d.read()
  
  blip.GetDocument().SetText(res)

<span class="synStatement">def</span> <span class="synIdentifier">Greet</span>(context, participant):
  root_wavelet = context.GetRootWavelet()
  root_wavelet.CreateBlip().GetDocument().SetText(participant + u&quot;<span class="synConstant"> さん、こんにちは！</span>&quot;)

<span class="synStatement">if</span> __name__ == '<span class="synConstant">__main__</span>':
  myRobot = robot.Robot('<span class="synConstant">vaginakun</span>',
      image_url='<span class="synConstant">http://vaginakun.appspot.com/assets/icon.png</span>',
      version='<span class="synConstant">4</span>',
      profile_url='<span class="synConstant">http://vaginakun.appspot.com/</span>')
  myRobot.RegisterHandler(events.WAVELET_PARTICIPANTS_CHANGED, OnParticipantsChanged)
  myRobot.RegisterHandler(events.BLIP_SUBMITTED, OnBlipCreated)
  myRobot.RegisterHandler(events.WAVELET_SELF_ADDED, OnRobotAdded)
  myRobot.Run()
</pre>

<h3>参考リンク</h3>
<ul>
<li> <a href="http://www.atmarkit.co.jp/fwcr/rensai2/wave02/03.html">Google Wave API開発ガイド（後編）JavaとPythonでGoogle WaveのRobotを作るには（3/4）−＠IT</a></li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2009/11/vaginakun-google-wave.html</link>
            <guid>http://blog.woremacx.com/2009/11/vaginakun-google-wave.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">googlewave</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">vaginakun</category>
            
            <pubDate>Mon, 30 Nov 2009 21:34:39 +0900</pubDate>
        </item>
        
        <item>
            <title>ぱそこん買った</title>
            <description><![CDATA[<ul>
<li> MacBook Pro (MB990J/A)</li>
<li> iWork '09</li>
<li> OmniOutliner Pro</li>
<li> ATOK 2009 for Mac</li>
<li> VMware Fusion 3</li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2009/11/macbook-pro.html</link>
            <guid>http://blog.woremacx.com/2009/11/macbook-pro.html</guid>
            
            
            <pubDate>Sat, 28 Nov 2009 22:00:00 +0900</pubDate>
        </item>
        
        <item>
            <title>ブルーレイレコ SHARP AQUOS BD-HDW32 を買った！</title>
            <description><![CDATA[<h3> これまで</h3>
<p>これまでは、デジタルチューナをパソコンに USB で繋いで使ってました。しかし、予約が面倒くさかったり、繋いでいる パソコンの消費電力がどう考えても高かったり、録画したファイルをパソコンの HDD から追い出すのが面倒だったりと、あまりいいことがありませんでした。</p>
<p>つきつめて考えると、「放送を録画する」「録画を見る」「パソコンなしに見れる形式・メディアで保存する」これが単純にできれば満足することがわかりました。</p>

<h3> そして購入</h3>
<p>満足いくテレビ生活を送るために、家電であるブルーレイレコーダを思い切って買いました。</p>
<p>どの機種にしようかかなりぐだぐだ迷ってましたが、最終的には、地上/BSダブルチューナ + ブルーレイ + iLink という条件と、かなりの金額を払う覚悟を決めて買いに行きました。</p>
<p>電気屋でいろいろ教えてもらいつつ、財布と相談しながら選んだのは、SHARP の <a href="http://www.sharp.co.jp/products/av/bd/prod01/bdhdw32/index.html">AQUOS BD-HDW32</a> になりました。</p>

<h3> 見るためのモニタも購入</h3>
<p>せっかくハイビジョンをある程度まともに扱える機械を買ったので、モニタも新しくしました。</p>
<p>テレビだといろいろ不要な機能がついてしまってどうしても割高になるので、ノングレアで HDMI で入力できるパソコン用モニタにしました。</p>
<p>パソコン屋で展示してあるものを見つつ、MITSUBISHI の <a href="http://www.mitsubishielectric.co.jp/home/display/product/business/rdt231wlm/index.html">RDT231WLM</a> にしました。</p>
<p>また、モニタにあわせて、DVI-D と既存のモニタ用にアナログ RGB を別々に使えるグラフィックカードも同時に買いました。</p>

<h3> 総括</h3>
<p>テレビに対して出費はかなりの額になりましたが、「放送を録画する」「録画を見る」「パソコンなしに見れる形式・メディアで保存する」ということが単純にできるようになり、また、マルチディスプレイになり、パソコンでの作業がやりやすくなりました。</p>
<p>最後に、ぐだぐだしているところで背中を押してくれた人ありがとう。</p>

<h3> 参考リンク</h3>
<ul>
<li> <a href="http://www.sharp.co.jp/products/av/bd/prod01/bdhdw32/index.html">ブルーレイディスクレコーダー BD-HDW32：シャープ</a></li>
<li> <a href="http://www.mitsubishielectric.co.jp/home/display/product/business/rdt231wlm/index.html">三菱電機 三菱ディスプレイ：ワイド液晶ディスプレイ RDT231WLM RDT231WLM(BK)</a></li>
</ul>

<div class="amazlet-box" style="margin-bottom:20px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B001UPL3V4/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/31XlZd%2BOLcL._SL160_.jpg" alt="SHARP AQUOS 地上・BS・110度CSデジタル ブルーレイディスクレコーダー HDD320GB BD-HDW32" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B001UPL3V4/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">SHARP AQUOS ブルーレイディスクレコーダー HDD320GB BD-HDW32</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/B001UPL3V4/blogworemacx-22/ref=nosim/" title="SHARP AQUOS 地上・BS・110度CSデジタル ブルーレイディスクレコーダー HDD320GB BD-HDW32" target="_blank">amazlet</a> at 09.09.06</div></div><div class="amazlet-detail">シャープ (2009-03-04)<br />売り上げランキング: 2558<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> ブルーレイデスクレコダーを購入してよかった。<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> 使い勝手がいまひとつ<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> あの woremacx さんが使っている！<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 思い切ったカイありました．<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B001UPL3V4/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>
<div class="amazlet-box" style="margin-bottom:20px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0028AEE6Q/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/31JHJG7At%2BL._SL160_.jpg" alt="MITSUBISHI 23型三菱液晶ディスプレイ(ノングレア) RDT231WLM(BK)" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0028AEE6Q/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">MITSUBISHI 23型三菱液晶ディスプレイ(ノングレア) RDT231WLM(BK)</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/B0028AEE6Q/blogworemacx-22/ref=nosim/" title="MITSUBISHI 23型三菱液晶ディスプレイ(ノングレア) RDT231WLM(BK)" target="_blank">amazlet</a> at 09.09.06</div></div><div class="amazlet-detail">三菱電機 (2009-05-22)<br />売り上げランキング: 7045<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-3-0.gif" alt="3" /> woremacx さんとオソロ！<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 良いもの買いました<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0028AEE6Q/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

]]></description>
            <link>http://blog.woremacx.com/2009/09/sharp-aquos-bd-hdw32.html</link>
            <guid>http://blog.woremacx.com/2009/09/sharp-aquos-bd-hdw32.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">AV</category>
            
            <pubDate>Sun, 06 Sep 2009 14:00:00 +0900</pubDate>
        </item>
        
        <item>
            <title>twitter の OAuth を使ったアプリを作っていただいた！</title>
            <description><![CDATA[<p>こんにちは！ woremacx です！</p>
<p>偉大なる <a href="http://lazy-people.org/">lazy-people</a> ファウンダーの id:tomyhero 先生に<a href="http://d.hatena.ne.jp/tomyhero/20090808/1249756610">アプリを作っていただきました</a>！</p>
<p>独自に IRC サーバを建ててから 2 年近くが経過しようとしています(参考:<a href="http://blog.woremacx.com/notes/2007/09/welcome-to-lovely-vagina-channel.html">woremacx notes: ヴ...について語り合う IRC チャンネルを開設しました</a>)。当初は、あらゆる発言(PRIVMSG)の文末に「ヴ...」がつくという単純なものでした。その後、チャンネルに参加していただいている皆さんのアイディアのおかげで、「ヴ...語変換」と呼べるものにまで発展することができました。しかも、エンジンは個別アプリに使用できるようモジュールとしての実装も作っていただきました。チャンネルに参加していただいている皆さんのご支援がなければ、ここまで発展・存続することはなかっただろうと思っています。</p>
<p>そんな IRC のチャンネルの気分を twitter で簡単に味わえるようになりました。</p>
<p>「<a href="http://vaginakun.sexnotes.org/">それいけヴ...君</a>」です！</p>

<h3>使い方</h3>

<h4>トップページを開きログイン</h4>
<p> <a href="http://vaginakun.sexnotes.org/">それいけヴ...君</a>サイトを開く。</p>
<p>「ログイン」リンクをクリックします。</p>
<img alt="20090809135228.png" src="http://blog.woremacx.com/2009/08/09/20090809135228.png" width="620" height="332" style="border: 1px solid #ccc; border: 1px solid #ccc; margin: 0 20px 20px 0;" />

<h4>ログインする</h4>
<p>確認画面が出てくるので、Allow をクリックします。</p>
<p>この手順が面倒な場合は、自動的に Allow をクリックするようなブラウザ拡張等を作っていただく手もあります。</p>
<img alt="20090809135506.png" src="http://blog.woremacx.com/2009/08/09/20090809135506.png" width="576" height="385" style="border: 1px solid #ccc; margin: 0 20px 20px 0;" />

<h4>発言する</h4>
<p>入力欄にメッセージを入力し、「語る」ボタンをクリックします。</p>
<img alt="20090809140201.png" src="http://blog.woremacx.com/2009/08/09/20090809140201.png" width="422" height="164" style="border: 1px solid #ccc; margin: 0 20px 20px 0;" />

<h4>変換後の発言が表示される</h4>
<p>次の発言のためのフォームが表示されるとともに、変換結果が表示されます。</p>
<img alt="20090809140436.png" src="http://blog.woremacx.com/2009/08/09/20090809140436.png" width="496" height="284" style="border: 1px solid #ccc; margin: 0 20px 20px 0;" />

<h4>twitter で発言を確認する</h4>
<img alt="20090809140601.png" src="http://blog.woremacx.com/2009/08/09/20090809140601.png" width="562" height="296" style="border: 1px solid #ccc; margin: 0 20px 20px 0;" />

<p>カンタンでしたね！</p>
<p>みなさんも、母なる言語を守る為にがんばりましょう！</p>

<h3>関連リンク</h3>
<ul>
<li> <a href="http://d.hatena.ne.jp/tomyhero/20090808/1249756610">woremacx先生の活動に感化されて - Lazy Programmer :-p</a></li>
<li> <a href="http://vaginakun.sexnotes.org/">それいけヴ...君</a></li>
<li> <a href="http://twitter.com/">twitter</a></li>
<li> <a href="http://twitter.com/vaginakun">vaginakun</a></li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2009/08/twitter-oauth-vaginatter.html</link>
            <guid>http://blog.woremacx.com/2009/08/twitter-oauth-vaginatter.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">twitter</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">vaginarepos</category>
            
            <pubDate>Sun, 09 Aug 2009 14:11:00 +0900</pubDate>
        </item>
        
        <item>
            <title>Angelos の中の人に会ってきた！</title>
            <description><![CDATA[<p>Angelos の偉大なる開発者である dann さんが、GW を利用した休暇で沖縄に遊びに来るというので、<a href="http://manko.perl-mongers.org/2009/05/manko-pm-001-vu.html">manko.pm #001 ヴ</a> を開催させていただきました。</p>
<h4> ヴ</h4>
<p>dann さんとお会いするにあたり、何かサプライズ的なものを用意したいと思っていました。前日くらいに IRC のとあるチャンネルで何かないかと聞いたところ、lyokato さんより、画用紙に「ヴ」を書いて掲げるというアイディアをいただきました。当日、近くのダイソーで画用紙とマジックを買って、実際に「ヴ」を掲げてみました。「ヴ」のおかげで、はぐれることなく無事お会いすることが出来たのでよかったです。</p>
<h4> 感想</h4>
<p><a href="http://dann.g.hatena.ne.jp/dann/20090506/p1">dann さんもエントリで書かれている</a>ように、普段から IRC で会話をしているので、物理的には初対面なのに、感覚としては初対面ではないという不思議な感覚でした。</p>
<p>一つだけ心残りなのは、「Angelooooooooooooos!」と一緒に連呼してもらうのをすっかり忘れていたことです。今後の manko.pm でぜひオ願いします。</p>
<p>短い時間でしたが、dann さんのアツいお話を色々聞かせていただくことができました。今すぐではないけれど、3 年後、5 年後も視野に入れて何か面白いコラボレーションをできたらいいなぁと強く思いました。</p>
<p>dann さん、今回は声をかけていただいて、ありがとうございました！</p>
<h4> see also</h4>
<ul>
<li> <a href="http://manko.perl-mongers.org/2009/05/manko-pm-001-vu.html">manko.pm #001 ヴ が開催されました - manko.perl-mongers.org</a></li>
<li> <a href="http://dann.g.hatena.ne.jp/dann/20090506/p1">ヴの中に人に会ってきた！ - dann@webdev - dann's portal</a></li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2009/05/vu-meets-dann.html</link>
            <guid>http://blog.woremacx.com/2009/05/vu-meets-dann.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">manko.pm</category>
            
            <pubDate>Wed, 06 May 2009 23:06:51 +0900</pubDate>
        </item>
        
        <item>
            <title>NBC でやってるドラマ Chuck が awesome すぎて目が離せない！</title>
            <description><![CDATA[<img src="http://12.media.tumblr.com/2uIDsGkn2jqplgesmtKQqkN2o1_400.png" height=176 width=400>
<p>NBC でやってるドラマ Chuck が、ひじょーに awesome です。</p>
<p>ドラマのスタートは、</p>
<blockquote class="entry" title="http://mamono.2ch.net/test/read.cgi/tv2/1195257823/" cite="http://mamono.2ch.net/test/read.cgi/tv2/1195257823/">
<p>チャックは家電量販店BUYMOREの情報家電部門NERDHERDで働くオタク青年。</p>
<p>過去に彼はスタンフォード大学で学んでいたがルームメイトで親友でもあったブライス・ラークリンの裏切り行為により大学を退学させられてしまう。</p>
<p>現在のチャックは親友に裏切られた心の傷を抱きながらも同じ店で販売員として働くモーガン、同居している姉のエリーエリーのボーイフレンドのキャプテンと共にまったりとした日常を過ごしていた。</p>
<p>チャックの誕生日パーティーの夜、ブライスから久々にメールが届く。ブライスは政府情報機関の極秘情報を全て盗み政府機関に処刑される寸前にチャックに暗号化されたデータを送ったのだ。知らずにメールを開いたチャックは膨大な情報量のサブリミナル画像を強制的に見せられ気絶してしまう。</p>
<cite><a href="http://mamono.2ch.net/test/read.cgi/tv2/1195257823/">http://mamono.2ch.net/test/read.cgi/tv2/1195257823/</a></cite>
</blockquote>
<p>という感じで、スパイアクションモノです。</p>
<p>チャック・バトアスキー(Zachary Levi)の頭の中に全機密情報がインプットされてしまったので、サラ・ウォーカー(Yvonne Strahovski)とジョン・ケイシー(Adam Baldwin)がチャックを保護する任務につきます。この保護で、チャックはスパイとして活動しながら、今まで通りの生活を送り始めます。この 3 人の関わり合いがぼくは面白いです。チャックが作戦現場で起こすドタバタであったり、チャックとサラの感情の揺れ動きあったり、その他チャックの勤務先での不思議な人間関係があったりと、コミカルなスパイアクションという感じで一度見始めると止まらなくなるドラマです。</p>
<p>そんな awesome なドラマなんですが、日本語字幕付きで流通してるのは、<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B001F4C6PC/blogworemacx-22/ref=nosim/">ターミネーター:サラ・コナー クロニクルズ</a> レンタル DVD の 5 枚目に入っている第1話のみで、日本の amazon にある <a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000VWC9YW/blogworemacx-22/ref=nosim/">Chuck - Complete First Season (4pc) (Ws Sub Ac3)</a> には残念ながら日本語字幕が付いてないです。</p>
<h4> リンク</h4>
<p>US からの接続であれば、The WB で Season 1 が、NBC.com で Season 2 が見れます。</p>
<p>なんとかすれば日本からも見れるので、そこらのあらすじサイトを参考に、ぜひわくわくしてください！</p>
<ul>
<li> <a href="http://www.nbc.com/Chuck/">Chuck | Watch Episodes Online for Free - Chuck TV Show, Series - Video Clips, Episode Recaps, Photos, Bios, Downloads &amp; Games NBC Official Site</a></li>
<li> <a href="http://www.thewb.com/shows/chuck/">The WB - Chuck - Full episodes of Veronica Mars, One Tree Hill, The O.C., Sorority Forever, Childrens' Hospital, Friends, Gilmore Girls, Smallville on TheWB.com, It's TV Online.</a></li>
<li> <a href="http://chuck-nbc.wikia.com/wiki/Chuck_-_Mondays_on_NBC">Chuck Wiki</a> (<a href="http://chuck-nbc.wikia.com/wiki/Category:Season_1_Television_Series_Episodes">エピソードガイド season1</a>、<a href="http://chuck-nbc.wikia.com/wiki/Category:Season_2_Television_Series_Episodes">エピソードガイド season2</a>)</li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2009/02/nbc-chuck-is-awesome-drama.html</link>
            <guid>http://blog.woremacx.com/2009/02/nbc-chuck-is-awesome-drama.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">chuck</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">drama</category>
            
            <pubDate>Mon, 09 Feb 2009 22:19:58 +0900</pubDate>
        </item>
        
        <item>
            <title>携帯向け将棋棋譜サイトを作った</title>
            <description><![CDATA[<p>最近なんとなく将棋を始めたいなぁと思って、いろんなサイトを見ていました。</p>
<p>PC 向けだと、&quot;Kifu for Windows&quot; があり、それの flash 版、Java applet 版が主催団体などにも貼られています。</p>
<p>ケータイ向けの便利ソフトとしては kif2swf があるのみで、いろいろまとまったデータを閲覧するのは手間がかかる印象を受けました。</p>
<p>そこで、自動更新型のサイト <a href="http://kifu.woremacx.com/">携帯向け将棋棋譜サイト - kifu::woremacx</a> を作りました。</p>
<p>やっていることは、適当な間隔で Web をスクレイピングして棋譜データを取得し、解釈し、盤に並べ、kif2swf にデータを埋め込んで、swf を作り直して公開するという簡単なお仕事です。</p>
<p>今のところ UTF-8 のみの出力で、スクレイピング先が 2ch 限定とあまりやる気がない状態だったりしますが、ぼちぼち広げていきたいと思います。</p>
<p>どうぞご利用ください。</p>

<h3> kifu::woremacx</h3>
<ul>
<li> <a href="http://kifu.woremacx.com/">携帯向け将棋棋譜サイト - kifu::woremacx</a></li>
</ul>

<h3> 関連サイト一覧</h3>
<ul>
<li> <a href="http://libpanda.s18.xrea.com/index.html">王子南交差点</a> / <a href="http://libpanda.s18.xrea.com/kif/kif.cgi">kif2swf</a></li>
<li> <a href="http://wiki.optus.nu/shogi/">将棋の棋譜でーたべーす</a></li>
<li> <a href="http://do.rojo.jp/shogi/">道路上将棋! 携帯向け無料ｵﾝﾗｲﾝ対戦将棋</a></li>
<li> <a href="http://homepage2.nifty.com/kakinoki_y/">柿木の将棋ソフトウェア</a></li>
<li> <a href="http://shougikakolog.hp.infoseek.co.jp/">将棋の棋譜貼り専門スレッド 過去ログ</a></li>
<li> <a href="http://www.geocities.jp/shogikifu/">将棋棋譜集</a></li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2009/02/kifu-woremacx.html</link>
            <guid>http://blog.woremacx.com/2009/02/kifu-woremacx.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">kifu</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">shogi</category>
            
            <pubDate>Mon, 02 Feb 2009 22:58:52 +0900</pubDate>
        </item>
        
        <item>
            <title>あけましておめでとうございます</title>
            <description><![CDATA[<p>あまけしておでめとうございます。</p>
<p>さて、はてなブックマークをチェックしていると、未だにこのブログの古い記事を参考にしていただいていることがあるようです。参考にしていただいたりブックマークしていただけるのは非常にうれしいですが、どんな分野においても進歩が速く、情報はすぐに陳腐化していきます。</p>
<p>そこで、うちのブログの古い記事に到達した場合には、情報が古いことを表示することにしました。どのくらいの基準でやろうかと迷いましたが、1ヶ月経過したら古い情報であることにしました。</p>
<p>しくみとしては、たぶん MT 4 から導入されたと思われる relative=js をまねして拡張することで対応しました。個別エントリのテンプレートに &lt;$MTEntryDate format=&quot;%x %X&quot; relative=&quot;js&quot;$&gt; と書かれているあれです。</p>
<p>ということで、今年も <a href="http://woremacx.com/">woremacx</a> をよろしくお願いいたします。</p>

]]></description>
            <link>http://blog.woremacx.com/2009/01/happy-new-year-2009.html</link>
            <guid>http://blog.woremacx.com/2009/01/happy-new-year-2009.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">info</category>
            
            <pubDate>Thu, 01 Jan 2009 09:00:00 +0900</pubDate>
        </item>
        
        <item>
            <title>XMind が使いやすくて良い</title>
            <description><![CDATA[<img src="http://data.tumblr.com/2uIDsGkn2h1sp3wqExSLtTnwo1_500.png" height="375" width="500">
<p>主に文章をデジタルデータとして管理する場合、多種多様な方法があり、個々人で慣れた親しんだ環境があるかと思います。</p>
<p>今日は、依存関係のある大量の文章を扱う場面で、全体の構造を把握しながら長文ノートを残しておきたくなり、ちょっと困ってしまいました。</p>
<p>ぼくの場合、扱う対象の全体の構造を、頭の中で明確に再現できるほど理解が深まっている場合だと、テキストファイル系でも平気です。ベタテキストや yaml 的なテキストで書き散らかして、あとで grep するかんじですね。しかし、理解度が乏しい場合、テキストファイルに全部突っ込んでると何が何やらわからなくなります。</p>
<p>今回は、何が何やらわからなくなっている状況なので、自分が取り組んでいることを整理するためツールが欲しくなりました。紙と鉛筆最強なんですが、それは見づらさと消しゴムの大量消費の観点から好きではありません。現代的なマインドマップ、そして、ツリー的に全体像を把握できつつ、各エレメントに長文ノートを残しておける環境が望む環境です。#vagina の皆さんに聞いたり、色々ぐぐったりして、ようやく XMind というマインドマップツールにたどりつきました。</p>
<p>データファイルは、zip でつつまれた xml です。xml なので、大量に入力することがあれば、ちょっとしたコンバータを書いてやればカンタンに取り込めそうです。</p>
<p>今日はほんと良いツールにたどり着きました。開発者の皆さんありがとう。</p>
<ul>
<li> <a href="http://www.xmind.net/">XMind - Social Brainstorming and Mind Mapping</a></li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2008/12/xmind.html</link>
            <guid>http://blog.woremacx.com/2008/12/xmind.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">mindmap</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">XMind</category>
            
            <pubDate>Thu, 04 Dec 2008 02:19:04 +0900</pubDate>
        </item>
        
        <item>
            <title>「テープ起こし」に関するブックマークコメントより</title>
            <description><![CDATA[<p><a href="http://b.hatena.ne.jp/entry/http://blog.woremacx.com/2008/11/repeat-audio-player-in-perl.html">はてなブックマーク - 「テープ起こし」を手助けするスクリプトを perl で作ってみる - blog.woremacx.com</a> より</p>
<blockquote cite="http://b.hatena.ne.jp/imo758/20081116#bookmark-10849858">
<p>imo758 さん: キー判定は抽象化してカスタマイズが楽になってるとなお良かったかも</p>
<cite><a href="http://b.hatena.ne.jp/imo758/20081116#bookmark-10849858" target="_blank">http://b.hatena.ne.jp/imo758/20081116#bookmark-10849858</a></cite></blockquote>
<blockquote cite="http://b.hatena.ne.jp/asakura-t/20081117#bookmark-10849858">
<p>asakura-t さん:「Okoshiyasu2」あたりを使ったほうがいいと思うんだ。 <a href="http://www12.plala.or.jp/mojo/Oko1.html">http://www12.plala.or.jp/mojo/Oko1.html</a></p>
<cite><a href="http://b.hatena.ne.jp/asakura-t/20081117#bookmark-10849858" target="_blank">http://b.hatena.ne.jp/asakura-t/20081117#bookmark-10849858</a></cite></blockquote>
<p>とのコメントを頂きました。ありがとうございます。</p>
<p>今回このスクリプトを作るまでに至ったぼくの行動を書いておきたいと思います。</p>

<h4> foobar2000 期</h4>
<p>出先でネットに繋がってないときに、テープ起こしする必要がありました。</p>
<p>ぼくのノートパソコンには Windows Media Player と foobar2000 しか使えるソフトが入ってませんでした。</p>
<p>foobar2000 で、C-a/s/d/f に逆方向シーク、 C-j/k/l/; に順方向シークをそれぞれ移動量を変えて割り当てて使ってみました。そうすることにより、キーボードから手を放すことなく自由に移動でき、良い感じだと思いました。</p>
<p>その場はなんとか無事に終わりました。</p>

<h4> ソフト開拓期</h4>
<p>今回またテープ起こしするときに、なんかいいソフトが一応調べてみることにしました。</p>
<p>ぐぐって出てきた記事(<a href="http://www.itmedia.co.jp/bizid/articles/0608/07/news082.html">ITmedia Biz.ID：「テープ起こし」に特化した再生ソフト</a>)を見て、Okoshiyasu2 は試してみました。</p>
<ul>
<li> Okoshiyasu2 の良い点
<ul>
<li> グローバルにキーボードを乗っ取ってくれるのは、Alt-Tab しなくていいので非常に良い。</li>
</ul>
</li>
<li> 変な環境に慣れてしまったので物足りない点
<ul>
<li> 移動量の違うシーク 4 種類で慣れてしまっているので物足りない。</li>
</ul>
</li>
</ul>

<h4> 作ったらいいんじゃね期</h4>
<ul>
<li> 今回使った古い系の foobar2000 は、Ctrl なしでホットキーを割り当てれることが判明しました。(現行系でも設定すれば出来るのかもしれないけど、やり方がわかりません＞＿＜)</li>
<li> perl のコンソールアプリとして作ってしまってもいいかもわからんね、と思いました。</li>
<li> どうせならシークしたポイントから常時 A-B リピートするモードがあっても良いね、とひらめきました。</li>
</ul>

<p>常時 A-B リピートは、非常にお気に入りです。</p>
<h4> だめなところ</h4>
<ul>
<li> 今のところ、Athlon64 X2 3800+ なマシンで常時 20% くらい CPU 食ってる出来の悪い子です。ループの構成が悪いと思います。バッテリー駆動してるマシンだと酷いことになると思いますｗ</li>
<li> ご指摘があったとおり、設定周りをベタ書きしているので、カスタマイズが容易ではないです。</li>
<li> ボリュームコントロール/ミュートがありません。</li>
<li> 一時停止すら実装してません。</li>
</ul>

<p>だめなところは、そのうち気が向いたら直していけたらいいなと思います。</p>

]]></description>
            <link>http://blog.woremacx.com/2008/11/from-bookmark-comment-about-audiotype.html</link>
            <guid>http://blog.woremacx.com/2008/11/from-bookmark-comment-about-audiotype.html</guid>
            
            
            <pubDate>Mon, 17 Nov 2008 19:40:21 +0900</pubDate>
        </item>
        
        <item>
            <title>「テープ起こし」を手助けするスクリプトを perl で作ってみる</title>
            <description><![CDATA[<p>ボイスレコーダーで 2 時間とか録音したのはいいけど、これどうやってテキストデータにするの？という事態が勃発しました。キーボードにシーク動作とか割り当てて、自動リピートとかあれば便利だなぁと思い、perl で書いてみました。</p>
<p>Alt + Tab で他のウィンドと行き来したあとで、全くキーを受け取らなくなる現象があってハマリました。GetEvents で入力があるか確認してから Input で入力内容を得るとハマらずに済みます。シーク時に Win32::MediaPlayer まわりに与える時間は ms に直して渡しました。</p>

<ins datetime="2008-11-17T20:07:28+09:00">
<p><a href="http://blog.woremacx.com/2008/11/from-bookmark-comment-about-audiotype.html">「テープ起こし」に関するブックマークコメントより - blog.woremacx.com</a> について関連エントリを書きました</p>

<h3> 今回のスクリプトのコンセプト</h3>
<ul>
<li> 自動的に A-B リピートになる</li>
<li> 4 種類の移動量でシークできる</li>
<li> perl で書いてあるため、perl の環境さえ入っていれば容易に改造できる</li>
</ul>
</ins>

<h3> 使い方</h3>
<p>開くファイルをスクリプトの引数として起動します。起動したら、勝手に 10 秒リピートになっています。</p>
<ul>
<li> q: 終了</li>
</ul>

<ul>
<li> j: 5 秒後</li>
<li> k: 10 秒後</li>
<li> l: 30 秒後</li>
<li> ;: 5 分後</li>
</ul>

<ul>
<li> f: 5 秒前</li>
<li> d: 10 秒前</li>
<li> s: 30 秒前</li>
<li> a: 5 分前</li>
</ul>

<ul>
<li> t: リピートするかのトグル</li>
<li> u: リピート秒数--</li>
<li> i: リピート秒数++</li>
</ul>

<h3> コード</h3>
<p>coderepos にもうｐしました <a href="http://svn.coderepos.org/share/lang/perl/misc/repeat-audio-player.pl">repeat-audio-player.pl</a></p>
<pre>
<span class="synPreProc">#!/usr/bin/perl</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;

<span class="synStatement">use </span>threads;
<span class="synStatement">use </span>Thread::Queue;
<span class="synStatement">use </span>Win32::Console;
<span class="synStatement">use </span>Win32::MediaPlayer;
<span class="synStatement">use </span>Time::HiRes ();

<span class="synStatement">sub</span><span class="synIdentifier"> keywatcher </span>{
    <span class="synStatement">my</span> (<span class="synIdentifier">$queue</span>) = <span class="synStatement">shift</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$console</span> = <span class="synStatement">new</span> Win32::Console(STD_INPUT_HANDLE);
    <span class="synIdentifier">$console</span>-&gt;Mode(ENABLE_PROCESSED_INPUT);

    <span class="synComment">#     my $mode = $console-&gt;Mode();</span>
    <span class="synComment">#     print &quot;ENABLE_LINE_INPUT\n&quot; if $mode &amp; ENABLE_LINE_INPUT;</span>
    <span class="synComment">#     print &quot;ENABLE_ECHO_INPUT\n&quot; if $mode &amp; ENABLE_ECHO_INPUT;</span>
    <span class="synComment">#     print &quot;ENABLE_PROCESSED_INPUT\n&quot; if $mode &amp; ENABLE_PROCESSED_INPUT;</span>
    <span class="synComment">#     print &quot;ENABLE_WINDOW_INPUT\n&quot; if $mode &amp; ENABLE_WINDOW_INPUT;</span>

    <span class="synStatement">while</span> (<span class="synConstant">1</span>) {
        <span class="synStatement">while</span> (<span class="synIdentifier">$console</span>-&gt;GetEvents) {
            <span class="synStatement">my</span> <span class="synIdentifier">@event</span> = <span class="synIdentifier">$console</span>-&gt;Input;
            <span class="synComment"># 0: event type: 1 for keyboard</span>
            <span class="synComment"># 1: key down: TRUE if the key is being pressed, FALSE if the key is being released</span>
            <span class="synComment"># 2: repeat count: the number of times the key is being held down</span>
            <span class="synComment"># 3: virtual keycode: the virtual key code of the key</span>
            <span class="synComment"># 4: virtual scancode: the virtual scan code of the key</span>
            <span class="synComment"># 5: char: the ASCII code of the character (if the key is a character key, 0 otherwise)</span>
            <span class="synComment"># 6: control key state: the state of the control keys (SHIFTs, CTRLs, ALTs, etc.)</span>

            <span class="synStatement">next</span> <span class="synStatement">unless</span> <span class="synIdentifier">$event</span>[<span class="synConstant">1</span>];

            <span class="synStatement">my</span> <span class="synIdentifier">$c</span> = <span class="synStatement">lc</span>(<span class="synStatement">chr</span>(<span class="synIdentifier">$event</span>[<span class="synConstant">5</span>]));
            <span class="synIdentifier">$queue</span>-&gt;enqueue(<span class="synIdentifier">$c</span>);
            <span class="synStatement">return</span> <span class="synConstant">0</span> <span class="synStatement">if</span> <span class="synIdentifier">$c</span> <span class="synStatement">eq</span> <span class="synConstant">'q'</span>;
        }
    }

    <span class="synStatement">return</span> <span class="synConstant">0</span>;
}

<span class="synStatement">sub</span><span class="synIdentifier"> worker </span>{
    <span class="synStatement">my</span> (<span class="synIdentifier">$queue</span>, <span class="synIdentifier">$file</span>) = <span class="synIdentifier">@_</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$wp</span> = Win32::MediaPlayer-&gt;<span class="synStatement">new</span>;
    <span class="synIdentifier">$wp</span>-&gt;load(<span class="synIdentifier">$file</span>) <span class="synStatement">or</span> <span class="synStatement">die</span>;
    <span class="synIdentifier">$wp</span>-&gt;play;

    <span class="synStatement">my</span> <span class="synIdentifier">$state</span> = {
        <span class="synConstant">mute </span>=&gt; <span class="synConstant">0</span>,
        <span class="synConstant">playing </span>=&gt; <span class="synConstant">1</span>,
        <span class="synStatement">pos</span> =&gt; <span class="synConstant">0</span>,
        <span class="synConstant">len </span>=&gt; res_to_sec(<span class="synIdentifier">$wp</span>-&gt;<span class="synStatement">length</span>(<span class="synConstant">0</span>)),
        <span class="synConstant">base </span>=&gt; <span class="synConstant">0</span>,
        <span class="synConstant">repeat </span>=&gt; <span class="synConstant">1</span>,
        <span class="synConstant">repeat_dur </span>=&gt; <span class="synConstant">10</span>,
    };

    <span class="synStatement">my</span> <span class="synIdentifier">%keymap</span> = (
        <span class="synConstant">j </span>=&gt; <span class="synConstant">5</span>,
        <span class="synConstant">k </span>=&gt; <span class="synConstant">10</span>,
        <span class="synConstant">l </span>=&gt; <span class="synConstant">30</span>,
        <span class="synConstant">';'</span> =&gt; <span class="synConstant">300</span>,
        <span class="synConstant">f </span>=&gt; <span class="synConstant">-5</span>,
        <span class="synConstant">d </span>=&gt; <span class="synConstant">-10</span>,
        <span class="synConstant">s </span>=&gt; <span class="synConstant">-30</span>,
        <span class="synConstant">a </span>=&gt; <span class="synConstant">-300</span>,
    );

    <span class="synStatement">printf</span> <span class="synConstant">&quot;repeats each %d secs</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>, <span class="synIdentifier">$state</span>-&gt;{repeat_dur};
    <span class="synStatement">my</span> <span class="synIdentifier">$console</span> = <span class="synStatement">new</span> Win32::Console(STD_OUTPUT_HANDLE);
    <span class="synStatement">my</span> <span class="synIdentifier">$seek</span> = <span class="synConstant">0</span>;
    <span class="synStatement">while</span> (<span class="synConstant">1</span>) {
        <span class="synIdentifier">$state</span>-&gt;{len} = res_to_sec(<span class="synIdentifier">$wp</span>-&gt;<span class="synStatement">length</span>(<span class="synConstant">0</span>));
        <span class="synIdentifier">$state</span>-&gt;{<span class="synStatement">pos</span>} = res_to_sec(<span class="synIdentifier">$wp</span>-&gt;<span class="synStatement">pos</span>(<span class="synConstant">0</span>));

        <span class="synStatement">if</span> (<span class="synIdentifier">$seek</span>) {
            <span class="synIdentifier">$wp</span>-&gt;pause;
            <span class="synIdentifier">$wp</span>-&gt;<span class="synStatement">seek</span>(<span class="synIdentifier">$state</span>-&gt;{base} * <span class="synConstant">1000</span>);
            <span class="synIdentifier">$wp</span>-&gt;resume;
            <span class="synIdentifier">$seek</span> = <span class="synConstant">0</span>;
            <span class="synStatement">next</span>;
        }

        <span class="synStatement">my</span> <span class="synIdentifier">$buf</span> = <span class="synStatement">sprintf</span> <span class="synConstant">&quot;%s / %s</span><span class="synSpecial">\r</span><span class="synConstant">&quot;</span>, sec_to_hms(<span class="synIdentifier">$state</span>-&gt;{<span class="synStatement">pos</span>}), sec_to_hms(<span class="synIdentifier">$state</span>-&gt;{len});
        <span class="synIdentifier">$console</span>-&gt;Write(<span class="synIdentifier">$buf</span>);
        Time::HiRes::<span class="synStatement">sleep</span>(<span class="synConstant">0.5</span>);

        <span class="synStatement">my</span> <span class="synIdentifier">$repeat_state</span> =<span class="synIdentifier"> </span><span class="synStatement">sub</span><span class="synIdentifier"> </span>{
            <span class="synStatement">printf</span> <span class="synConstant">&quot;</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
            <span class="synStatement">printf</span> <span class="synConstant">&quot;repeat %s</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>, <span class="synIdentifier">$state</span>-&gt;{repeat} ? <span class="synConstant">&quot;on&quot;</span> : <span class="synConstant">&quot;off&quot;</span>;
            <span class="synStatement">printf</span> <span class="synConstant">&quot;repeats each %d secs</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>, <span class="synIdentifier">$state</span>-&gt;{repeat_dur} <span class="synStatement">if</span> <span class="synIdentifier">$state</span>-&gt;{repeat};
        };

        <span class="synStatement">if</span> (<span class="synIdentifier">$state</span>-&gt;{repeat} &amp;&amp;
            <span class="synIdentifier">$state</span>-&gt;{<span class="synStatement">pos</span>} &gt;= (<span class="synIdentifier">$state</span>-&gt;{base} + <span class="synIdentifier">$state</span>-&gt;{repeat_dur})) {
            <span class="synIdentifier">$seek</span>++;
        }

        <span class="synStatement">while</span> (<span class="synIdentifier">$queue</span>-&gt;pending) {
            <span class="synStatement">my</span> <span class="synIdentifier">$c</span> = <span class="synIdentifier">$queue</span>-&gt;dequeue;

            <span class="synStatement">if</span> (<span class="synStatement">defined</span>(<span class="synIdentifier">$keymap</span>{<span class="synIdentifier">$c</span>})) {
                <span class="synStatement">unless</span> (<span class="synIdentifier">$state</span>-&gt;{repeat}) {
                    <span class="synIdentifier">$state</span>-&gt;{base} = <span class="synIdentifier">$state</span>-&gt;{<span class="synStatement">pos</span>};
                }
                <span class="synIdentifier">$state</span>-&gt;{base} += <span class="synIdentifier">$keymap</span>{<span class="synIdentifier">$c</span>};
                <span class="synIdentifier">$seek</span>++;
            } <span class="synStatement">elsif</span> (<span class="synIdentifier">$c</span> <span class="synStatement">eq</span> <span class="synConstant">'t'</span>) {
                <span class="synIdentifier">$state</span>-&gt;{repeat} = <span class="synIdentifier">$state</span>-&gt;{repeat} ? <span class="synConstant">0</span> : <span class="synConstant">1</span>;
                <span class="synIdentifier">$repeat_state</span>-&gt;();
            } <span class="synStatement">elsif</span> (<span class="synIdentifier">$c</span> <span class="synStatement">eq</span> <span class="synConstant">'r'</span>) {
                <span class="synIdentifier">$repeat_state</span>-&gt;();
            } <span class="synStatement">elsif</span> (<span class="synIdentifier">$c</span> <span class="synStatement">eq</span> <span class="synConstant">'u'</span>) {
                <span class="synIdentifier">$state</span>-&gt;{repeat_dur}--;
                <span class="synIdentifier">$state</span>-&gt;{repeat_dur} = <span class="synConstant">1</span> <span class="synStatement">if</span> <span class="synIdentifier">$state</span>-&gt;{repeat_dur} &lt; <span class="synConstant">1</span>;
                <span class="synIdentifier">$repeat_state</span>-&gt;();
            } <span class="synStatement">elsif</span> (<span class="synIdentifier">$c</span> <span class="synStatement">eq</span> <span class="synConstant">'i'</span>) {
                <span class="synIdentifier">$state</span>-&gt;{repeat_dur}++;
                <span class="synIdentifier">$repeat_state</span>-&gt;();
            } <span class="synStatement">elsif</span> (<span class="synIdentifier">$c</span> <span class="synStatement">eq</span> <span class="synConstant">'p'</span>) {
                <span class="synIdentifier">$seek</span>++;
            }

            <span class="synStatement">return</span> <span class="synConstant">0</span> <span class="synStatement">if</span> <span class="synIdentifier">$c</span> <span class="synStatement">eq</span> <span class="synConstant">'q'</span>;
        }
    }

    <span class="synStatement">return</span> <span class="synConstant">0</span>;
}

<span class="synStatement">sub</span><span class="synIdentifier"> main </span>{
    <span class="synStatement">my</span> <span class="synIdentifier">$file</span> = <span class="synStatement">shift</span>(<span class="synIdentifier">@ARGV</span>);
    <span class="synStatement">die</span> <span class="synStatement">unless</span> <span class="synIdentifier">$file</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$queue</span> = <span class="synStatement">new</span> Thread::Queue;
    <span class="synStatement">my</span> <span class="synIdentifier">$t1</span> = threads-&gt;<span class="synStatement">new</span>(<span class="synIdentifier">\&amp;keywatcher</span>, <span class="synIdentifier">$queue</span>);
    <span class="synStatement">my</span> <span class="synIdentifier">$t2</span> = threads-&gt;<span class="synStatement">new</span>(<span class="synIdentifier">\&amp;worker</span>, <span class="synIdentifier">$queue</span>, <span class="synIdentifier">$file</span>);
    <span class="synIdentifier">$t1</span>-&gt;<span class="synStatement">join</span>;
    <span class="synIdentifier">$t2</span>-&gt;<span class="synStatement">join</span>;

    <span class="synStatement">print</span> <span class="synConstant">&quot;done.</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
}

main;

<span class="synStatement">sub</span><span class="synIdentifier"> res_to_sec </span>{
    <span class="synStatement">my</span> <span class="synIdentifier">$param</span> = <span class="synStatement">shift</span>;
    <span class="synStatement">return</span> <span class="synStatement">int</span>(<span class="synIdentifier">$param</span>/<span class="synConstant">1000</span>);
}

<span class="synStatement">sub</span><span class="synIdentifier"> res_to_hms </span>{
    <span class="synStatement">my</span> <span class="synIdentifier">$param</span> = <span class="synStatement">shift</span>;
    <span class="synStatement">return</span> sec_to_hms(res_to_sec(<span class="synIdentifier">$param</span>));
}

<span class="synStatement">sub</span><span class="synIdentifier"> sec_to_hms </span>{
    <span class="synStatement">my</span> <span class="synIdentifier">$total</span> = <span class="synStatement">shift</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$sec</span> = <span class="synIdentifier">$total</span> % <span class="synConstant">60</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$min</span> = (<span class="synIdentifier">$total</span> - <span class="synIdentifier">$sec</span>) / <span class="synConstant">60</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$hour</span> = <span class="synStatement">int</span>(<span class="synIdentifier">$min</span> / <span class="synConstant">60</span>);
    <span class="synIdentifier">$min</span> = <span class="synIdentifier">$min</span> % <span class="synConstant">60</span>;

    <span class="synStatement">return</span> <span class="synStatement">sprintf</span> <span class="synConstant">&quot;%02d:%02d:%02d&quot;</span>, <span class="synIdentifier">$hour</span>, <span class="synIdentifier">$min</span>, <span class="synIdentifier">$sec</span>;
}

<span class="synStatement">sub</span><span class="synIdentifier"> sec_to_ms </span>{
    <span class="synStatement">my</span> <span class="synIdentifier">$total</span> = <span class="synStatement">shift</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$sec</span> = <span class="synIdentifier">$total</span> % <span class="synConstant">60</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$min</span> = (<span class="synIdentifier">$total</span> - <span class="synIdentifier">$sec</span>) / <span class="synConstant">60</span>;

    <span class="synStatement">return</span> <span class="synStatement">sprintf</span> <span class="synConstant">&quot;%02d:%02d&quot;</span>, <span class="synIdentifier">$min</span>, <span class="synIdentifier">$sec</span>;
}
</pre>
<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="width:150px;float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000OCUHRU/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41DSLdzTAYL._SL160_.jpg" alt="OLYMPUS Voice-Trek V-61" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000OCUHRU/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">OLYMPUS Voice-Trek V-61</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/B000OCUHRU/blogworemacx-22/ref=nosim/" title="OLYMPUS Voice-Trek V-61" target="_blank">amazlet</a> at 08.11.16</div></div><div class="amazlet-detail">オリンパス (2007-03-23)<br />売り上げランキング: 283<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-5.gif" alt="4.5" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-4-0.gif" alt="4" /> いろいろ使えます。<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> ライブの録音･再生に大活躍<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000OCUHRU/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>
<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="width:150px;float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000VJ2D8M/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41KSNYi%2BZ1L._SL160_.jpg" alt="OLYMPUS ICレコーダー Voice-Trek DS-60" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000VJ2D8M/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">OLYMPUS ICレコーダー Voice-Trek DS-60</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/B000VJ2D8M/blogworemacx-22/ref=nosim/" title="OLYMPUS ICレコーダー Voice-Trek DS-60" target="_blank">amazlet</a> at 08.11.16</div></div><div class="amazlet-detail">オリンパス (2007-09-14)<br />売り上げランキング: 1822<br /></div><div class="amazlet-review" style="margin-top:10px; margin-bottom:10px"><div class="amazlet-review-average" style="margin-bottom:5px">おすすめ度の平均: <img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5.0" /></div><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 音楽用にも<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 買うならコレ<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> 値段にはわけがある<br /><img src="http://images-jp.amazon.com/images/G/09/x-locale/common/customer-reviews/stars-5-0.gif" alt="5" /> クリアーな音質です<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B000VJ2D8M/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>

]]></description>
            <link>http://blog.woremacx.com/2008/11/repeat-audio-player-in-perl.html</link>
            <guid>http://blog.woremacx.com/2008/11/repeat-audio-player-in-perl.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Win32::Console　Win32::MediaPlayer</category>
            
            <pubDate>Sun, 16 Nov 2008 01:59:33 +0900</pubDate>
        </item>
        
        <item>
            <title>perl で Text::PukiWiki を書いてます</title>
            <description><![CDATA[<p>PukiWiki の convert_html.php を perl のモジュールとして使えるよう移植しはじめました。</p>
<p>まだちゃんと動くわけではなくて、なんとか perl で動くようにしただけの状態です。</p>
<p><a href="http://vaginarepos.org/">VaginaRepos</a> でひっそりやってましたが、飽きてフェードアウトする可能性が高くなったので晒しました。</p>
<p>当面やることといえば</p>
<ul>
<li> 各モジュール間のパラメータの渡し方を直す</li>
<li> 基本テスト</li>
<li> 基本プラグイン</li>
</ul>

<p>という感じです。</p>
<p>PukiWiki にない機能の追加などを考えている方がいらっしゃれば、ブランチを切ってからやってもらえるとうれしいです。</p>

<ul>
<li> <a href="http://svn.coderepos.org/share/lang/perl/Text-PukiWiki/trunk/">Text::PukiWiki</a></li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2008/11/text-pukiwiki-in-perl.html</link>
            <guid>http://blog.woremacx.com/2008/11/text-pukiwiki-in-perl.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">PukiWiki</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Text::PukiWiki</category>
            
            <pubDate>Sat, 15 Nov 2008 14:20:25 +0900</pubDate>
        </item>
        
        <item>
            <title>RTM の Firefox アドオンと Gmail ガジェットを試す</title>
            <description><![CDATA[<p>家でヒマしてるときにやることを管理する用の TODO リストが欲しくなったので、久しぶりに RTM 自体を使い始めた。</p>
<p><a href="http://www.itmedia.co.jp/bizid/articles/0811/04/news078.html">GmailにGadget機能――Remember The Milkも組み込み可能に</a> という記事を見つけたので、こちらを試してみることにした。</p>
<p>結論としては、au の携帯からの入力と Firefox アドオンを併用しようと思う。</p>
<h4> Firefox アドオン</h4>
<p><a href="http://data.tumblr.com/2uIDsGkn2g6380euzTx1b3iTo1_500.png"><img src="http://data.tumblr.com/2uIDsGkn2g6380euzTx1b3iTo1_500.png" alt="http://data.tumblr.com/2uIDsGkn2g6380euzTx1b3iTo1_500.png" /></a></p>
<p>Set task view here から、label とか選べる。</p>
<p>個人的に RTM の画面は好きではないのが、このアドオンは使いやすい。</p>
<p>Google apps for domain でも表示されるので良い。</p>
<h4> ガジェット</h4>
<p><a href="http://data.tumblr.com/2uIDsGkn2g636w9puOKvQAmGo1_500.png"><img src="http://data.tumblr.com/2uIDsGkn2g636w9puOKvQAmGo1_500.png" alt="http://data.tumblr.com/2uIDsGkn2g636w9puOKvQAmGo1_500.png" /></a></p>
<p>ラベルを選ぶには、設定からやらないといけない。</p>
<p>ケータイ向けの画面からすると、ひどく制限されている印象。</p>
<p>ケータイ向けの画面をガジェットにしてくれてもよかったかもしれないと思った。</p>
<p>ぼくのドメインの Google apps for domain では labs が使えないので残念。</p>

]]></description>
            <link>http://blog.woremacx.com/2008/11/try-rtm-fx-addon-and-gmail-gadget.html</link>
            <guid>http://blog.woremacx.com/2008/11/try-rtm-fx-addon-and-gmail-gadget.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">gmail</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">RTM</category>
            
            <pubDate>Tue, 11 Nov 2008 21:58:22 +0900</pubDate>
        </item>
        
        <item>
            <title>昔の広末涼子はすごかった</title>
            <description><![CDATA[<p><a href="http://alfalfa.livedoor.biz/archives/51389758.html">昔の広末涼子はすごかった:アルファルファモザイク</a></p>
<p>うん。ほんと昔の広末涼子はすごかった。ビーチボーイズとかちゃんとビデオに撮ってみてた。</p>
<p>そんな昔の広末涼子が懐かしくなってライブビデオ買ったよ！</p>
<p>150 円とかなのでお買い得だよ！VHS なので、買うときはレンタル上がりは避けてね！</p>
<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00005HIGY/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51YXHA6F4QL._SL160_.jpg" alt="広末涼子ファーストライヴ～RH DEBUT TOUR 1999" style="border: none;" /></a></div><div class="amazlet-info" style="float:left;margin-left:15px;line-height:120%"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00005HIGY/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">広末涼子ファーストライヴ～RH DEBUT TOUR 1999</a><div class="amazlet-powered-date" style="font-size:7pt;margin-top:5px;font-family:verdana;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/B00005HIGY/blogworemacx-22/ref=nosim/" title="広末涼子ファーストライヴ～RH DEBUT TOUR 1999" target="_blank">amazlet</a> at 08.11.11</div></div><div class="amazlet-detail">広末涼子 <br />ダブリューイーエー・ジャパン (1999-05-26)<br />売り上げランキング: 59110<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B00005HIGY/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div><div class="amazlet-footer" style="clear: left"></div></div>


]]></description>
            <link>http://blog.woremacx.com/2008/11/hirosue-ryoko-was-awesome.html</link>
            <guid>http://blog.woremacx.com/2008/11/hirosue-ryoko-was-awesome.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">広末涼子</category>
            
            <pubDate>Tue, 11 Nov 2008 12:00:00 +0900</pubDate>
        </item>
        
        <item>
            <title>Mojolicious アプリで Template::Toolkit をデフォルトのレンダラとして使う (解決編)</title>
            <description><![CDATA[<p>先ほど、<a href="http://blog.woremacx.com/2008/11/template-toolkit-as-renderer-of-mojolicious-app.html">Mojolicious アプリで Template::Toolkit つかいたいなー - blog.woremacx.com</a> という記事を書きました。</p>
<p><a href="http://d.hatena.ne.jp/charsbar/">charsbar</a> さんに、<a href="http://b.hatena.ne.jp/charsbar/20081110#bookmark-10766507">はてなブックマークのコメントで良い方法を教えていただきました</a>。</p>
<p><a href="http://github.com/abh/mojox-renderer-tt/tree/master">MojoX::Renderer::TT</a> を使えばよいとのことで、さっそく試したところうまくいきました。</p>
<p>どうもありがとうございました！！</p>

<pre>
<span class="synStatement">package</span><span class="synType"> Vagina;</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use warnings</span>;

<span class="synStatement">use base</span> <span class="synConstant">'Mojolicious'</span>;

<span class="synStatement">use </span>MojoX::Renderer::TT;

<span class="synStatement">sub</span><span class="synIdentifier"> dispatch </span>{
    (ry
}

<span class="synStatement">sub</span><span class="synIdentifier"> startup </span>{
    <span class="synStatement">my</span> <span class="synIdentifier">$self</span> = <span class="synStatement">shift</span>;

    <span class="synComment"># Use our own context class</span>
    <span class="synIdentifier">$self</span>-&gt;ctx_class(<span class="synConstant">'Vagina::Context'</span>);

    <span class="synIdentifier">$self</span>-&gt;renderer-&gt;add_handler( <span class="synConstant">tt </span>=&gt; MojoX::Renderer::TT-&gt;<span class="synStatement">new</span>( <span class="synConstant">mojo </span>=&gt; <span class="synIdentifier">$self</span> ) );
    <span class="synIdentifier">$self</span>-&gt;renderer-&gt;default_ext(<span class="synConstant">'tt'</span>);
    <span class="synIdentifier">$self</span>-&gt;renderer-&gt;types-&gt;type(<span class="synConstant">tt </span>=&gt; <span class="synConstant">'text/html'</span>);

    <span class="synComment"># Routes</span>
    <span class="synStatement">my</span> <span class="synIdentifier">$r</span> = <span class="synIdentifier">$self</span>-&gt;routes;

    <span class="synComment"># Default route</span>
    <span class="synIdentifier">$r</span>-&gt;route(<span class="synConstant">'/:controller/:action/:id'</span>)
      -&gt;to(<span class="synConstant">controller </span>=&gt; <span class="synConstant">'example'</span>, <span class="synConstant">action </span>=&gt; <span class="synConstant">'welcome'</span>, <span class="synConstant">id </span>=&gt; <span class="synConstant">1</span>);
}
</pre>

]]></description>
            <link>http://blog.woremacx.com/2008/11/mojox-renderer-tt.html</link>
            <guid>http://blog.woremacx.com/2008/11/mojox-renderer-tt.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Mojolicious</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Template::Toolkit</category>
            
            <pubDate>Mon, 10 Nov 2008 13:23:43 +0900</pubDate>
        </item>
        
    </channel>
</rss>

