<?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 2008</copyright>
        <lastBuildDate>Thu, 21 Aug 2008 02:33:26 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>iTunes にお仕事をしてもらうために書いた使い捨てツール</title>
            <description><![CDATA[<p>iTunes で CD をエンコードする場合、初めて突っ込む CD だと CDDB に問い合わせてくれるようになっています。だれかが入力してくれてて CDDB に曲名が存在すれば、楽を出来る仕組みですね。</p>
<p>ただ、1 つの CD に複数のデータが存在する場合、ダイアログが出てきて、どのデータを使うのか聞かれることになります。エンコードする枚数が多いと、問い詰められる回数も当然増えます。</p>
<p>こいつが今回の敵です。</p>
<p>何かダイアログが出てきたら OK を押すだけの簡単なお仕事をするアルバイトの子を雇うことにしました。</p>
<p>またこの子には、うちのマシンの CPU の処理速度に応じて、約 4 分を測定してもらうお仕事も兼ねてもらうことにしました。</p>
<p>一応、エンコード中なのかどうかは以下のようなコードで教えてもらえるっぽいことを、あとで知りました。次回大量エンコードする際は使おうと思います。</p>
<pre>
var	iTunesApp = WScript.CreateObject(&quot;iTunes.Application&quot;);
var objConversionstatus = iTunesApp.ConvertOperationStatus;
WScript.Echo(objConversionstatus.ProgressValue);
</pre>

<p>以下が今回雇ったアルバイトの子です。</p>
<pre>
<span class="synComment">// itunes-clicker.cpp : コンソール アプリケーションのエントリ ポイントを定義します。</span>
<span class="synComment">//</span>

<span class="synPreProc">#include </span><span class="synConstant">&quot;stdafx.h&quot;</span>
<span class="synPreProc">#include </span><span class="synConstant">&lt;windows.h&gt;</span>
<span class="synPreProc">#include </span><span class="synConstant">&lt;shlobj.h&gt;</span>
<span class="synPreProc">#include </span><span class="synConstant">&lt;string.h&gt;</span>

<span class="synPreProc">#define strdup _strdup</span>

<span class="synPreProc">#define MAX_NUM_ENUMWND  </span><span class="synConstant">100</span>
<span class="synType">int</span>  g_cnt = <span class="synConstant">0</span>;                  <span class="synComment">// カウンタ</span>
HWND targetWnd;
<span class="synType">char</span> *targetText;
<span class="synType">char</span> *targetClass;
BOOL CALLBACK MankoProc(HWND hWnd, LPARAM lParam)
{
	<span class="synStatement">if</span> (g_cnt &gt;= MAX_NUM_ENUMWND) <span class="synStatement">return</span> FALSE;

	<span class="synType">char</span> buf[<span class="synConstant">1024</span>];
	<span class="synType">char</span> *tocmp;
	<span class="synStatement">if</span> (targetText != <span class="synConstant">NULL</span>) {
		tocmp = strdup(targetText);
		GetWindowText(hWnd, buf, <span class="synConstant">1024</span>);
	} <span class="synStatement">else</span> {
		tocmp = strdup(targetClass);
		GetClassName(hWnd, buf, <span class="synConstant">1024</span>);
	}
	<span class="synStatement">if</span> (strcmp(buf, tocmp) == <span class="synConstant">0</span>) {
		targetWnd = hWnd;
		<span class="synStatement">return</span> FALSE;
	}
    g_cnt++;
    <span class="synStatement">return</span> TRUE;
}

HWND Manko(HWND hWnd, <span class="synType">char</span> *textName, <span class="synType">char</span> *className)
{
	targetWnd = <span class="synConstant">NULL</span>;
	<span class="synStatement">if</span> (textName != <span class="synConstant">NULL</span>) {
		targetText = strdup(textName);
		targetClass = <span class="synConstant">NULL</span>;
	} <span class="synStatement">else</span> {
		targetText = <span class="synConstant">NULL</span>;
		targetClass = strdup(className);
	}
	g_cnt = <span class="synConstant">0</span>;
	EnumChildWindows(hWnd, MankoProc, <span class="synConstant">0</span>);
	<span class="synStatement">return</span> targetWnd;
}

<span class="synType">void</span> dialog_clicker(<span class="synType">void</span>) {
  HWND hWnd = FindWindow(<span class="synConstant">&quot;iTunesCustomModalDialog&quot;</span>, <span class="synConstant">NULL</span>);
	HWND hdialog;
	<span class="synStatement">if</span> (hWnd != <span class="synConstant">NULL</span>) {
		hdialog = Manko(hWnd, <span class="synConstant">&quot;OK&quot;</span>, <span class="synConstant">NULL</span>);
		<span class="synStatement">if</span> (hdialog != <span class="synConstant">NULL</span>) {
			PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(<span class="synConstant">101</span>, BN_CLICKED), <span class="synConstant">0</span>);
		}
	}
}


<span class="synType">int</span> _tmain(<span class="synType">int</span> argc, _TCHAR* argv[])
{
  <span class="synType">int</span> c;
	<span class="synStatement">for</span> (c = <span class="synConstant">0</span>; c &lt; <span class="synConstant">240</span>; c++) {
	  dialog_clicker();
	  Sleep(<span class="synConstant">1000</span>);
	}
	<span class="synStatement">return</span> <span class="synConstant">0</span>;
}
</pre>

<pre>
@rem encodeall.bat
@echo off
FOR /D %%x IN (???) DO CALL encode.bat %%x
</pre>

<pre>
@rem encode.bat
@echo off
echo run %1
set loc=0,X:\cds-wav\%1\CDImage.cue

echo %loc%
&quot;c:\Program Files\D-Tools\daemon.exe&quot; -mount %loc%
X:\itunes-clicker.exe
&quot;c:\Program Files\D-Tools\daemon.exe&quot; -unmount 0
</pre>

]]></description>
            <link>http://blog.woremacx.com/2008/08/fuck-with-itunes.html</link>
            <guid>http://blog.woremacx.com/2008/08/fuck-with-itunes.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">iTunes</category>
            
            <pubDate>Thu, 21 Aug 2008 02:33:26 +0900</pubDate>
        </item>
        
        <item>
            <title>Puregeek ブログについてお知らせ</title>
            <description><![CDATA[<p>ご存じの通り、Puregeek ブログという形で、hkn さんにブログを書いてもらう企画をやっていました。</p>
<p>突然ですが、Puregeek ブログは7月8日に終了という形をとらせていただくことになりました。</p>
<p>記事を書いてくださった hkn さん、企画に関わってくれた皆さん、読者の皆さん、ありがとうございました。</p>

]]></description>
            <link>http://blog.woremacx.com/2008/07/puregeek-blog.html</link>
            <guid>http://blog.woremacx.com/2008/07/puregeek-blog.html</guid>
            
            
            <pubDate>Wed, 09 Jul 2008 23:59:59 +0900</pubDate>
        </item>
        
        <item>
            <title>Fixdapbot というボットを作ってみた</title>
            <description><![CDATA[<p>Web::Scraper でスクレイピングしまくり。</p>
<p>自分の ID/password で、タスクを一覧、追加、完了という最低限の実装でとりあえず。</p>
<h4>使用例</h4>
<pre>
19:32 (woremacx) list
19:32 (fixdapbot) woremacx: #1 mt の permalink を直す
19:32 (woremacx) k
19:32 (woremacx) add TENGA 買い占める！
19:32 (fixdapbot) woremacx: task added: http://fixdap.com/p/woremacx/14711/
19:33 (woremacx) list
19:33 (fixdapbot) woremacx: #5 TENGA 買い占める！
19:33 (fixdapbot) woremacx: #1 mt の permalink を直す
19:33 (woremacx) done 5
19:33 (fixdapbot) woremacx: task done: http://fixdap.com/p/woremacx/14711/
19:33 (woremacx) わーい
19:33 (yusukebe_x61) TENGA破産ふらぐｋｔｋｒ
19:33 (woremacx) ｗｗｗｗｗ
19:34 (woremacx) 自分しか使えないボットを書いてみた
19:34 (woremacx) なんかこう、他の人のもいじれるといいんだけどなぁ
</pre>
<h4> ファイル置き場</h4>
<ul>
<li> <a href="http://pub.woremacx.com/Fixdapbot/">Fixdapbot</a></li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2008/07/fixdapbot.html</link>
            <guid>http://blog.woremacx.com/2008/07/fixdapbot.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Fixdap</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">IRC</category>
            
            <pubDate>Sat, 05 Jul 2008 19:45:45 +0900</pubDate>
        </item>
        
        <item>
            <title>Rails2 PDF が改訂されていた！</title>
            <description><![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://peepcode.com/products/rails2-pdf"><img alt="rails-pdf.png" src="http://blog.woremacx.com/2008/07/04/rails-pdf/2uIDsGkn2azxx1m4PoW3FQkR_500-thumb-300x226.png" width="300" height="226" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></a></span>

<p>ちょっと前に、<a href="http://peepcode.com/products/rails2-pdf">Rails2 PDF</a> という pdf をなんとなく買いました。<a href="http://peepcode.com/">PeepCode</a> というサイトで、DRM フリーな pdf とスクリーンキャストを売り物にしているサイトです。ほかには、<a href="http://www.pragprog.com/">The Pragmatic Bookshelf</a> とかがあるかと思います。</p>
<p><a href="http://peepcode.com/">PeepCode</a> の pdf を買うきっかけになったのは、Rails ML での宣伝を見かけたことです。宣伝から Web を開いて、掲載されているサンプルを見ました。サンプルの pdf は、レイアウトが心地よく、なにかにとりつかれて初 Paypal したのを覚えています。</p>
<p>残念ながら、ぼくが買った pdf は、Rails 2 の内容でした。確かその前後で Rails 2.1 が出ました。賢者モードになった自分に「レイアウトに感動するためだけに $9 払ったのか」と問い詰められ、少し落ち込んでました。</p>
<br/>
<p>ところが、と・こ・ろ・がです！、今日、久しぶりにサイトを見たところ、</p>
<blockquote class="entry" title="Rails2 PDF" cite="http://peepcode.com/products/rails2-pdf">
<p>Updated for Rails 2.1! Previous purchasers can login or revisit the link originally sent via email to download the updated version.</p>
<cite><a href="http://peepcode.com/products/rails2-pdf">Rails2 PDF</a></cite>
</blockquote>
<p>と書いてあるではありませんか！</p>
<p>なんということでしょう！さっそくダウンロードしましたとも！</p>

<h4>Rails2 PDF の更新履歴</h4>
<ul>
<li> june 11, 2008
<ul>
<li> Updated for Rails 2.1</li>
<li> New sections on Enhanced Migrations, Change Table, Named Scope, Dirty Objects &amp; Partial Updates, Timezone Support, Gem Dependencies and Git.</li>
</ul>
</li>
<li> december 3, 2007
<ul>
<li> Minor bugfixes.</li>
</ul>
</li>
<li> october 31, 2007
<ul>
<li> Added section about Foxy Fixtures.</li>
</ul>
</li>
<li> october 19, 2007
<ul>
<li> Correctly identified forward-slash on p16.</li>
<li> Added section on asset servers and asset tags.</li>
<li> Added debugger example, with sample session.</li>
<li> Added appendix with changelogs from ActionMailer, ActionPack, ActiveRecord, and ActiveSupport.</li>
</ul>
</li>
<li> october 17, 2007
<ul>
<li> First release</li>
</ul>
</li>
</ul>

<p>何度も改訂を重ねていてとても良心的ですね。</p>

<h4> 感想</h4>
<p>同じタイトルの専門書を 4 冊買ったぼくとしては、コロコロ中身が変わる分野で物理的な本を少しだけ改訂、出版するビジネスモデルって、ちょっとひどいなぁと思いました。</p>
<p>少し高くてもいいから、DRM フリーの pdf で、かつ、定期的な改訂ありのものを平行して売ってくれたらなぁと。</p>

<ul>
<li> <a href="http://peepcode.com/">PeepCode</a></li>
<li> <a href="http://peepcode.com/products/rails2-pdf">Rails2 PDF</a></li>
<li> <a href="http://www.pragprog.com/">The Pragmatic Bookshelf</a></li>
</ul>

]]></description>
            <link>http://blog.woremacx.com/2008/07/updated-rails2-pdf.html</link>
            <guid>http://blog.woremacx.com/2008/07/updated-rails2-pdf.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">pdf</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Rails</category>
            
            <pubDate>Fri, 04 Jul 2008 12:00:00 +0900</pubDate>
        </item>
        
        <item>
            <title>*::Nowa をアップデートした</title>
            <description><![CDATA[<p>xcezx さんから、utf-8 フラグ周りで化けていると思われるバグの報告受けました。
<p><img src="http://media.tumblr.com/2uIDsGkn2akm79hhj7gDIUKB_500.png" width="431" height="202" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" />
<p>encode_utf8 するオプションを追加して対策しました。
<p><img src="http://media.tumblr.com/2uIDsGkn2aklyymt9N4qmVbb_500.png" width="390" height="284" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" />
<p>これはひどい。woremacx 自重。
]]></description>
            <link>http://blog.woremacx.com/2008/06/updated-nowa-modules.html</link>
            <guid>http://blog.woremacx.com/2008/06/updated-nowa-modules.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Nowa</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl</category>
            
            <pubDate>Mon, 23 Jun 2008 22:20:09 +0900</pubDate>
        </item>
        
        <item>
            <title>Net::Amazon::S3 を Park Place のホストに使う</title>
            <description><![CDATA[<p>ローカルに建てた <a href="http://code.whytheluckystiff.net/parkplace/">Park Place</a> で使いたかったので。</p>
<pre>
$ diff -u Net/Amazon/S3.pm.orig  Net/Amazon/S3.pm
<span class="synType">--- Net/Amazon/S3.pm.orig       2008-03-27 17:40:40.000000000 +0900</span>
<span class="synType">+++ Net/Amazon/S3.pm    2008-06-18 05:10:04.323364757 +0900</span>
<span class="synStatement">@@ -110,7 +110,7 @@</span>

 use base qw(Class::Accessor::Fast);
 __PACKAGE__-&gt;mk_accessors(
<span class="synSpecial">-    qw(libxml aws_access_key_id aws_secret_access_key secure ua err errstr timeout retry)</span>
<span class="synIdentifier">+    qw(libxml aws_access_key_id aws_secret_access_key secure ua err errstr timeout retry s3_host)</span>
 );
 our $VERSION = '0.44';

<span class="synStatement">@@ -672,9 +672,10 @@</span>
     $self-&gt;_add_auth_header( $http_headers, $method, $path )
         unless exists $headers-&gt;{Authorization};
     my $protocol = $self-&gt;secure ? 'https' : 'http';
<span class="synSpecial">-    my $url = &quot;$protocol://s3.amazonaws.com/$path&quot;;</span>
<span class="synSpecial">-    if ( $path =~ m{^([^/?]+)(.*)} &amp;&amp; _is_dns_bucket($1) ) {</span>
<span class="synSpecial">-        $url = &quot;$protocol://$1.s3.amazonaws.com$2&quot;;</span>
<span class="synIdentifier">+    my $host = $self-&gt;s3_host || &quot;s3.amazonaws.com&quot;;</span>
<span class="synIdentifier">+    my $url = &quot;$protocol://$host/$path&quot;;</span>
<span class="synIdentifier">+    if ( !$self-&gt;s3_host &amp;&amp; $path =~ m{^([^/?]+)(.*)} &amp;&amp; _is_dns_bucket($1) ) {</span>
<span class="synIdentifier">+        $url = &quot;$protocol://$1.$host$2&quot;;</span>
     }

     my $request = HTTP::Request-&gt;new( $method, $url, $http_headers );
</pre>

]]></description>
            <link>http://blog.woremacx.com/2008/06/use-net-amazon-s3-for-park-place-host.html</link>
            <guid>http://blog.woremacx.com/2008/06/use-net-amazon-s3-for-park-place-host.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Net::Amazon::S3</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">ParkPlace</category>
            
            <pubDate>Sat, 21 Jun 2008 20:33:44 +0900</pubDate>
        </item>
        
        <item>
            <title>Firestorage.jp を Perl スクリプトから使う</title>
            <description><![CDATA[<p>LWP::UserAgent をつかってファイルをアップロードしてみましたよ！</p>
<p>コマンドラインからサクっと使えて便利ですよ！</p>
<br/>
<p>あと、人には絶対見られたくない恥ずかしい写真とか動画とか送るとき用に、AES かけれるようにしてみたよ！</p>
<p>一時ファイルを作らずに、AES で暗号化しながらアップロード、ダウンロードしながら AES で解読とかしてみました。</p>
<p>どう考えても汚い書き方なので、なんかもっとキレイかつ楽ちんに書ける方法あったらおしえてください。</p>

<h3>ふつうに使う</h3>
<h4>firestorage-put.pl</h4>
<pre>
usage:
# 2 つめのパラメータは省略可
$ firestorage-put.pl &quot;/path/to/your/file.avi&quot; label.avi
</pre>
<pre>
<span class="synPreProc">#!/usr/bin/perl</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use </span>HTTP::Request::Common;
<span class="synStatement">use </span>LWP::UserAgent ();

{
<span class="synIdentifier">    </span><span class="synStatement">sub</span><span class="synIdentifier"> HTTP::Request::Common::boundary </span>{
        <span class="synStatement">my</span> <span class="synIdentifier">@chr</span> = (<span class="synConstant">'A'</span> .. <span class="synConstant">'Z'</span>, <span class="synConstant">'a'</span> .. <span class="synConstant">'z'</span>, <span class="synConstant">'0'</span> .. <span class="synConstant">'9'</span>);
        <span class="synStatement">my</span> <span class="synIdentifier">@buf</span>;
        <span class="synStatement">push</span>(<span class="synIdentifier">@buf</span>, <span class="synIdentifier">$chr</span>[<span class="synStatement">int</span>(<span class="synStatement">rand</span>(<span class="synIdentifier">@chr</span>))]) <span class="synStatement">for</span> (<span class="synConstant">1.</span>.<span class="synConstant">30</span>);
        <span class="synStatement">return</span> <span class="synConstant">'-'</span> x <span class="synConstant">10</span> . <span class="synStatement">join</span>(<span class="synConstant">q{}</span>, <span class="synIdentifier">@buf</span>);
    }
}

<span class="synStatement">sub</span><span class="synIdentifier"> upload </span>{
    <span class="synStatement">my</span> <span class="synIdentifier">$filebody</span> = <span class="synStatement">shift</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$filename</span> = <span class="synStatement">shift</span> || <span class="synIdentifier">$filebody</span>;

    <span class="synStatement">local</span> <span class="synIdentifier">$HTTP::Request::Common::DYNAMIC_FILE_UPLOAD</span> = <span class="synConstant">1</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$ua</span> = LWP::UserAgent-&gt;<span class="synStatement">new</span>(<span class="synConstant">agent </span>=&gt; <span class="synConstant">&quot;Shockwave Flash&quot;</span>);
    <span class="synStatement">my</span> (<span class="synIdentifier">$sec</span>, <span class="synIdentifier">$min</span>, <span class="synIdentifier">$hour</span>, <span class="synIdentifier">$mday</span>, <span class="synIdentifier">$mon</span>, <span class="synIdentifier">$year</span>) = <span class="synStatement">localtime</span>(<span class="synStatement">time</span>);
    <span class="synStatement">my</span> <span class="synIdentifier">$id</span> = <span class="synStatement">sprintf</span>(<span class="synConstant">&quot;%4d%02d%02d%02d%02d%02d%d&quot;</span>, <span class="synIdentifier">$year</span> + <span class="synConstant">1900</span>, <span class="synIdentifier">$mon</span> + <span class="synConstant">1</span>, <span class="synIdentifier">$mday</span>, <span class="synIdentifier">$hour</span>, <span class="synIdentifier">$min</span>, <span class="synIdentifier">$sec</span>, <span class="synIdentifier">$$</span>);

    <span class="synStatement">my</span> <span class="synIdentifier">$exp</span> = <span class="synConstant">7</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$url</span> = <span class="synConstant">&quot;http://firestorage.jp/upload.cgi&quot;</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$res</span> = <span class="synIdentifier">$ua</span>-&gt;post(<span class="synIdentifier">$url</span>,
                        <span class="synConstant">Content_Type </span>=&gt; <span class="synConstant">'form-data'</span>,
                        <span class="synConstant">Content </span>=&gt; [
                            <span class="synConstant">Filename </span>=&gt; <span class="synIdentifier">$filename</span>,
                            <span class="synConstant">processid </span>=&gt; <span class="synIdentifier">$id</span>,
                            <span class="synStatement">exp</span> =&gt; <span class="synIdentifier">$exp</span>,
                            <span class="synConstant">Filedata </span>=&gt; [<span class="synIdentifier">$filebody</span>, <span class="synIdentifier">$filename</span>],
                            <span class="synConstant">Upload </span>=&gt; <span class="synConstant">&quot;Submit Query&quot;</span>,
                        ]);
    <span class="synStatement">if</span> (<span class="synIdentifier">$res</span>-&gt;content =~ <span class="synStatement">m!</span><span class="synSpecial">(</span><span class="synConstant">http://firestorage</span><span class="synSpecial">.</span><span class="synConstant">jp/download/</span><span class="synSpecial">\w+)</span><span class="synStatement">!s</span>) {
        <span class="synStatement">return</span> <span class="synIdentifier">$1</span>;
    }
    <span class="synStatement">undef</span>;
}

<span class="synStatement">die</span> <span class="synStatement">unless</span> <span class="synIdentifier">@ARGV</span>;
<span class="synStatement">my</span> <span class="synIdentifier">$res</span> = upload(<span class="synIdentifier">@ARGV</span>);
<span class="synStatement">print</span> <span class="synIdentifier">$res</span> ? <span class="synIdentifier">$res</span> : <span class="synConstant">&quot;failed&quot;</span>;
<span class="synStatement">print</span> <span class="synConstant">&quot;</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
</pre>

<h3>AES で暗号化しながらつかう</h3>
<pre>
usage:

$ dd if=/dev/zero of=2048 bs=2048 count=1
1+0 records in
1+0 records out
2048 bytes (2.0 kB) copied, 0.0172761 s, 119 kB/s

$ perl firestorage-aes-put.pl 2048
url: http://firestorage.jp/download/c56e...
key: 88c0f6d8a4e6aca71ccee0b2b022bf0c

$ perl firestorage-aes-get.pl http://firestorage.jp/download/c56e...
AES key: (キー 88c0f6d8a4e6aca71ccee0b2b022bf0c を入力)
saving 2048 ...done
</pre>

<h4>firestorage-aes-put.pl</h4>
<pre>
<span class="synPreProc">#!/usr/bin/perl</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use </span>HTTP::Request::Common;
<span class="synStatement">use </span>LWP::UserAgent ();
<span class="synStatement">use </span>Crypt::CBC;
<span class="synStatement">use </span>Digest::MD5;

{
<span class="synIdentifier">    </span><span class="synStatement">sub</span><span class="synIdentifier"> HTTP::Request::Common::boundary </span>{
        <span class="synStatement">my</span> <span class="synIdentifier">@chr</span> = (<span class="synConstant">'A'</span> .. <span class="synConstant">'Z'</span>, <span class="synConstant">'a'</span> .. <span class="synConstant">'z'</span>, <span class="synConstant">'0'</span> .. <span class="synConstant">'9'</span>);
        <span class="synStatement">my</span> <span class="synIdentifier">@buf</span>;
        <span class="synStatement">push</span>(<span class="synIdentifier">@buf</span>, <span class="synIdentifier">$chr</span>[<span class="synStatement">int</span>(<span class="synStatement">rand</span>(<span class="synIdentifier">@chr</span>))]) <span class="synStatement">for</span> (<span class="synConstant">1.</span>.<span class="synConstant">30</span>);
        <span class="synStatement">return</span> <span class="synConstant">'-'</span> x <span class="synConstant">10</span> . <span class="synStatement">join</span>(<span class="synConstant">q{}</span>, <span class="synIdentifier">@buf</span>);
    }
}

<span class="synStatement">sub</span><span class="synIdentifier"> upload </span>{
    <span class="synStatement">my</span> <span class="synIdentifier">$filebody</span> = <span class="synStatement">shift</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$filename</span> = <span class="synStatement">shift</span> || <span class="synIdentifier">$filebody</span>;

    <span class="synStatement">local</span> <span class="synIdentifier">$HTTP::Request::Common::DYNAMIC_FILE_UPLOAD</span> = <span class="synConstant">1</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$ua</span> = LWP::UserAgent-&gt;<span class="synStatement">new</span>(<span class="synConstant">agent </span>=&gt; <span class="synConstant">&quot;Shockwave Flash&quot;</span>);
    <span class="synStatement">my</span> (<span class="synIdentifier">$sec</span>, <span class="synIdentifier">$min</span>, <span class="synIdentifier">$hour</span>, <span class="synIdentifier">$mday</span>, <span class="synIdentifier">$mon</span>, <span class="synIdentifier">$year</span>) = <span class="synStatement">localtime</span>(<span class="synStatement">time</span>);
    <span class="synStatement">my</span> <span class="synIdentifier">$id</span> = <span class="synStatement">sprintf</span>(<span class="synConstant">&quot;%4d%02d%02d%02d%02d%02d%d&quot;</span>, <span class="synIdentifier">$year</span> + <span class="synConstant">1900</span>, <span class="synIdentifier">$mon</span> + <span class="synConstant">1</span>, <span class="synIdentifier">$mday</span>, <span class="synIdentifier">$hour</span>, <span class="synIdentifier">$min</span>, <span class="synIdentifier">$sec</span>, <span class="synIdentifier">$$</span>);

    <span class="synStatement">my</span> <span class="synIdentifier">$exp</span> = <span class="synConstant">7</span>;

    <span class="synStatement">require</span> HTTP::Request::Common;
    <span class="synStatement">my</span> <span class="synIdentifier">$url</span> = <span class="synConstant">&quot;http://firestorage.jp/upload.cgi&quot;</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$request</span> = HTTP::Request::Common::POST(<span class="synIdentifier">$url</span>,
                        <span class="synConstant">Content_Type </span>=&gt; <span class="synConstant">'form-data'</span>,
                        <span class="synConstant">Content </span>=&gt; [
                            <span class="synConstant">Filename </span>=&gt; <span class="synIdentifier">$filename</span>,
                            <span class="synConstant">processid </span>=&gt; <span class="synIdentifier">$id</span>,
                            <span class="synStatement">exp</span> =&gt; <span class="synIdentifier">$exp</span>,
                            <span class="synConstant">Filedata </span>=&gt; [<span class="synIdentifier">$filebody</span>, <span class="synIdentifier">$filename</span>],
                            <span class="synConstant">Upload </span>=&gt; <span class="synConstant">&quot;Submit Query&quot;</span>,
                        ]);
    <span class="synStatement">my</span> <span class="synIdentifier">$code</span> = <span class="synIdentifier">$request</span>-&gt;{_content};
    <span class="synStatement">my</span> <span class="synIdentifier">$in_cd</span> = <span class="synConstant">0</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$cb_looping</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$md5_inst</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$crypt_inst</span>;

    <span class="synStatement">my</span> <span class="synIdentifier">$len</span> = <span class="synIdentifier">$request</span>-&gt;header(<span class="synConstant">'Content-Length'</span>);
    <span class="synStatement">my</span> <span class="synIdentifier">$file_len</span> = <span class="synStatement">-s</span> <span class="synIdentifier">$filebody</span>;
    <span class="synStatement">my</span> <span class="synIdentifier">$new_len</span> = <span class="synIdentifier">$file_len</span> + (<span class="synIdentifier">$file_len</span> % <span class="synConstant">16</span> ? <span class="synConstant">16</span> - <span class="synIdentifier">$file_len</span> % <span class="synConstant">16</span> : <span class="synConstant">16</span>);
    <span class="synIdentifier">$len</span> += <span class="synIdentifier">$new_len</span> - <span class="synIdentifier">$file_len</span>;
    <span class="synIdentifier">$request</span>-&gt;header(<span class="synConstant">'Content-Length'</span>, <span class="synIdentifier">$len</span>);

    <span class="synStatement">my</span> <span class="synIdentifier">$key</span>;
    <span class="synIdentifier">$request</span>-&gt;{_content} =<span class="synIdentifier"> </span><span class="synStatement">sub</span><span class="synIdentifier"> </span>{
        <span class="synStatement">my</span> <span class="synIdentifier">$coderes</span> = <span class="synIdentifier">$code</span>-&gt;();
        <span class="synStatement">unless</span> (<span class="synIdentifier">$cb_looping</span>) {
            <span class="synStatement">if</span> (<span class="synIdentifier">$coderes</span> =~<span class="synStatement"> /</span><span class="synConstant">^</span><span class="synSpecial">(.*?)\015\012</span><span class="synStatement">/</span>) {
                <span class="synIdentifier">$cb_looping</span> = <span class="synIdentifier">$1</span>;
            }
        }
        <span class="synStatement">my</span> <span class="synIdentifier">$payload</span>;
        <span class="synStatement">my</span> <span class="synIdentifier">$finish</span> = <span class="synConstant">0</span>;
        <span class="synStatement">my</span> <span class="synIdentifier">$header_of_payload</span>;
        <span class="synStatement">if</span> (!<span class="synIdentifier">$in_cd</span> &amp;&amp; <span class="synIdentifier">$coderes</span> =~<span class="synStatement"> /</span><span class="synConstant">^Content-Disposition[^</span><span class="synSpecial">\012</span><span class="synConstant">]</span><span class="synSpecial">+?</span><span class="synConstant">; filename=</span><span class="synStatement">/</span>) {
            <span class="synIdentifier">$in_cd</span>++;
            <span class="synStatement">my</span> <span class="synIdentifier">$loc</span> = <span class="synStatement">index</span>(<span class="synIdentifier">$coderes</span>, <span class="synConstant">&quot;</span><span class="synSpecial">\015\012\015\012</span><span class="synConstant">&quot;</span>);
            <span class="synIdentifier">$header_of_payload</span> = <span class="synStatement">substr</span>(<span class="synIdentifier">$coderes</span>, <span class="synConstant">0</span>, <span class="synIdentifier">$loc</span> + <span class="synConstant">4</span>);
            <span class="synIdentifier">$payload</span> = <span class="synStatement">substr</span>(<span class="synIdentifier">$coderes</span>, <span class="synIdentifier">$loc</span> + <span class="synConstant">4</span>);
        } <span class="synStatement">elsif</span> (<span class="synIdentifier">$in_cd</span> &amp;&amp; <span class="synIdentifier">$coderes</span> =~<span class="synStatement"> /</span><span class="synIdentifier">$cb_looping</span><span class="synStatement">/</span>) {
            <span class="synIdentifier">$in_cd</span> = <span class="synConstant">0</span>;
            <span class="synIdentifier">$finish</span>++;
        } <span class="synStatement">elsif</span> (<span class="synIdentifier">$in_cd</span>) {
            <span class="synIdentifier">$payload</span> = <span class="synIdentifier">$coderes</span>;
        }

        <span class="synStatement">if</span> (<span class="synStatement">length</span>(<span class="synIdentifier">$payload</span>)) {
            <span class="synStatement">unless</span>(<span class="synIdentifier">$md5_inst</span>) {
                <span class="synIdentifier">$key</span> = Digest::MD5-&gt;md5_hex(<span class="synStatement">time</span>().<span class="synIdentifier">$$</span>.<span class="synIdentifier">$payload</span>);
                <span class="synIdentifier">$crypt_inst</span> = Crypt::CBC-&gt;<span class="synStatement">new</span>({
                    <span class="synConstant">key            </span>=&gt; <span class="synIdentifier">$key</span>,
                    <span class="synConstant">cipher         </span>=&gt; <span class="synConstant">'Rijndael'</span>,
                    <span class="synConstant">iv             </span>=&gt; Digest::MD5-&gt;md5(<span class="synConstant">'woremacx'</span>),
                    <span class="synConstant">regenerate_key </span>=&gt; <span class="synConstant">0</span>,
                    <span class="synConstant">padding        </span>=&gt; <span class="synConstant">'standard'</span>,
                    <span class="synConstant">prepend_iv     </span>=&gt; <span class="synConstant">0</span>,
                });
                <span class="synIdentifier">$crypt_inst</span>-&gt;start(<span class="synConstant">'encrypt'</span>);
                <span class="synIdentifier">$md5_inst</span> = Digest::MD5-&gt;<span class="synStatement">new</span>;
            }
            <span class="synIdentifier">$md5_inst</span>-&gt;add(<span class="synIdentifier">$payload</span>);
            <span class="synIdentifier">$coderes</span> = <span class="synIdentifier">$crypt_inst</span>-&gt;<span class="synStatement">crypt</span>(<span class="synIdentifier">$payload</span>);
            <span class="synStatement">if</span> (<span class="synStatement">length</span>(<span class="synIdentifier">$header_of_payload</span>)) {
                <span class="synIdentifier">$coderes</span> = <span class="synIdentifier">$header_of_payload</span> . <span class="synIdentifier">$coderes</span>;
            }
        }
        <span class="synStatement">if</span> (<span class="synIdentifier">$finish</span>) {
            <span class="synComment"># warn $md5_inst-&gt;hexdigest;</span>
            <span class="synStatement">my</span> <span class="synIdentifier">$left</span> = <span class="synIdentifier">$crypt_inst</span>-&gt;finish;
            <span class="synIdentifier">$coderes</span> = <span class="synIdentifier">$left</span> . <span class="synIdentifier">$coderes</span>;
            <span class="synIdentifier">$finish</span> = <span class="synConstant">0</span>;
        }
        <span class="synIdentifier">$coderes</span>;
    };

    <span class="synStatement">my</span> <span class="synIdentifier">$res</span> = <span class="synIdentifier">$ua</span>-&gt;request(<span class="synIdentifier">$request</span>);
    <span class="synStatement">if</span> (<span class="synIdentifier">$res</span>-&gt;content =~ <span class="synStatement">m!</span><span class="synSpecial">(</span><span class="synConstant">http://firestorage</span><span class="synSpecial">.</span><span class="synConstant">jp/download/</span><span class="synSpecial">\w+)</span><span class="synStatement">!s</span>) {
        <span class="synStatement">return</span> <span class="synConstant">&quot;url: </span><span class="synIdentifier">$1</span><span class="synSpecial">\n</span><span class="synConstant">key: </span><span class="synIdentifier">$key</span><span class="synConstant">&quot;</span>;
    }
    <span class="synStatement">undef</span>;
}

<span class="synStatement">die</span> <span class="synStatement">unless</span> <span class="synIdentifier">@ARGV</span>;
<span class="synStatement">my</span> <span class="synIdentifier">$res</span> = upload(<span class="synIdentifier">@ARGV</span>);
<span class="synStatement">print</span> <span class="synIdentifier">$res</span> ? <span class="synIdentifier">$res</span> : <span class="synConstant">&quot;failed&quot;</span>;
<span class="synStatement">print</span> <span class="synConstant">&quot;</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
</pre>

<h4>firestorage-aes-get.pl</h4>
<pre>
<span class="synPreProc">#!/usr/bin/perl</span>

<span class="synStatement">use strict</span>;
<span class="synStatement">use </span>LWP::UserAgent;
<span class="synStatement">use </span>Digest::MD5;
<span class="synStatement">use </span>Crypt::CBC;

<span class="synStatement">my</span> <span class="synIdentifier">$ua</span> = LWP::UserAgent-&gt;<span class="synStatement">new</span>;
<span class="synStatement">for</span> <span class="synStatement">my</span> <span class="synIdentifier">$url</span> (<span class="synIdentifier">@ARGV</span>) {
    <span class="synStatement">my</span> <span class="synIdentifier">$res</span> = <span class="synIdentifier">$ua</span>-&gt;get(<span class="synIdentifier">$url</span>);
    <span class="synStatement">my</span> <span class="synIdentifier">$content</span> = <span class="synIdentifier">$res</span>-&gt;content;
    <span class="synStatement">while</span> (<span class="synIdentifier">$content</span> =~ <span class="synStatement">m!</span><span class="synConstant">&quot;</span><span class="synSpecial">(</span><span class="synConstant">http://</span><span class="synSpecial">\w+\.</span><span class="synConstant">firestorage</span><span class="synSpecial">\.</span><span class="synConstant">jp/download[^</span><span class="synSpecial">\&quot;</span><span class="synConstant">]</span><span class="synSpecial">+?</span><span class="synConstant">act=download_file[^</span><span class="synSpecial">\&quot;</span><span class="synConstant">]</span><span class="synSpecial">+)</span><span class="synConstant">&quot;</span><span class="synSpecial">.*?</span><span class="synConstant">&gt;</span><span class="synSpecial">(.*?)</span><span class="synConstant">&lt;/a&gt;</span><span class="synStatement">!g</span>) {
        <span class="synStatement">my</span> (<span class="synIdentifier">$url</span>, <span class="synIdentifier">$saveto</span>) = (<span class="synIdentifier">$1</span>, <span class="synIdentifier">$2</span>);
        <span class="synStatement">unless</span> (<span class="synStatement">-e</span> <span class="synIdentifier">$saveto</span>) {
            <span class="synStatement">my</span> <span class="synIdentifier">$key</span> = get_key();
            <span class="synComment"># warn $key;</span>
            <span class="synStatement">my</span> <span class="synIdentifier">$cipher</span> = Crypt::CBC-&gt;<span class="synStatement">new</span>({
                    <span class="synConstant">key            </span>=&gt; <span class="synIdentifier">$key</span>,
                    <span class="synConstant">cipher         </span>=&gt; <span class="synConstant">'Rijndael'</span>,
                    <span class="synConstant">iv             </span>=&gt; Digest::MD5-&gt;md5(<span class="synConstant">'woremacx'</span>),
                    <span class="synConstant">regenerate_key </span>=&gt; <span class="synConstant">0</span>,
                    <span class="synConstant">padding        </span>=&gt; <span class="synConstant">'standard'</span>,
                    <span class="synConstant">prepend_iv     </span>=&gt; <span class="synConstant">0</span>,
                }) <span class="synStatement">or</span> <span class="synStatement">die</span>;
                <span class="synIdentifier">$cipher</span>-&gt;start(<span class="synConstant">'decrypt'</span>);

            <span class="synStatement">open</span>(<span class="synStatement">my</span> <span class="synIdentifier">$fh</span>, <span class="synConstant">&quot;&gt; </span><span class="synIdentifier">$saveto</span><span class="synConstant">&quot;</span>);
            <span class="synStatement">my</span> <span class="synIdentifier">$total_len</span>;
            <span class="synStatement">my</span> <span class="synIdentifier">$recieved</span>;
            <span class="synStatement">my</span> <span class="synIdentifier">$decrypt</span> =<span class="synIdentifier"> </span><span class="synStatement">sub</span><span class="synIdentifier"> </span>{
                <span class="synStatement">my</span> (<span class="synIdentifier">$payload</span>, <span class="synIdentifier">$pp</span>, <span class="synIdentifier">$qq</span>) = <span class="synIdentifier">@_</span>;
                <span class="synIdentifier">$total_len</span> ||= <span class="synIdentifier">$pp</span>-&gt;{_headers}-&gt;{<span class="synConstant">'content-length'</span>};
                <span class="synIdentifier">$recieved</span> += <span class="synStatement">length</span>(<span class="synIdentifier">$payload</span>);
                <span class="synStatement">print</span> <span class="synIdentifier">$fh</span> <span class="synIdentifier">$cipher</span>-&gt;<span class="synStatement">crypt</span>(<span class="synIdentifier">$payload</span>);
                <span class="synStatement">if</span> (<span class="synIdentifier">$total_len</span> == <span class="synIdentifier">$recieved</span>) {
                    <span class="synStatement">print</span> <span class="synIdentifier">$fh</span> <span class="synIdentifier">$cipher</span>-&gt;finish;
                }
            };
            <span class="synStatement">print</span> <span class="synConstant">&quot;saving </span><span class="synIdentifier">$saveto</span><span class="synConstant"> ...&quot;</span>;
            <span class="synIdentifier">$ua</span>-&gt;get(<span class="synIdentifier">$url</span>, <span class="synConstant">':content_cb'</span>   =&gt; <span class="synIdentifier">$decrypt</span>);
            <span class="synStatement">close</span>(<span class="synIdentifier">$fh</span>);
            <span class="synStatement">print</span> <span class="synConstant">&quot;done</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;

        } <span class="synStatement">else</span> {
            <span class="synStatement">print</span> <span class="synConstant">&quot;</span><span class="synIdentifier">$saveto</span><span class="synConstant"> already exists</span><span class="synSpecial">\n</span><span class="synConstant">&quot;</span>;
        }
    }
}

<span class="synStatement">sub</span><span class="synIdentifier"> get_key </span>{
    <span class="synStatement">local</span>(<span class="synIdentifier">$|</span>) = <span class="synConstant">1</span>;
    <span class="synStatement">local</span>(*TTY);
    <span class="synStatement">open</span>(<span class="synIdentifier">TTY</span>,<span class="synConstant">&quot;/dev/tty&quot;</span>);
    <span class="synStatement">my</span> (<span class="synIdentifier">$key1</span>,<span class="synIdentifier">$key2</span>);
    <span class="synStatement">system</span> <span class="synConstant">&quot;stty -echo &lt;/dev/tty&quot;</span>;
    <span class="synStatement">do</span> {
        <span class="synStatement">print</span> <span class="synIdentifier">STDERR</span> <span class="synConstant">&quot;AES key: &quot;</span>;
        <span class="synStatement">chomp</span>(<span class="synIdentifier">$key1</span> = <span class="synIdentifier">&lt;TTY&gt;</span>);
    } <span class="synStatement">until</span> <span class="synIdentifier">$key1</span> =~<span class="synStatement"> /</span><span class="synConstant">^</span><span class="synSpecial">[a-f0-9]{32}</span><span class="synConstant">$</span><span class="synStatement">/</span>;
    <span class="synStatement">system</span> <span class="synConstant">&quot;stty echo &lt;/dev/tty&quot;</span>;
    <span class="synStatement">close</span>(<span class="synIdentifier">TTY</span>);
    <span class="synIdentifier">$key1</span>;
}
</pre>


]]></description>
            <link>http://blog.woremacx.com/2008/06/firestoragejp_perl.html</link>
            <guid>http://blog.woremacx.com/2008/06/firestoragejp_perl.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Firestorage.jp</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl</category>
            
            <pubDate>Sat, 21 Jun 2008 11:03:33 +0900</pubDate>
        </item>
        
        <item>
            <title>PicLens で AV 女優ブログの画像でハァハァする</title>
            <description><![CDATA[<p><a href="http://www.piclens.com/">PicLens</a> がほんとすごい！</p>
<p>ぼくが <a href="http://www.piclens.com/">PicLens</a> を最初に知ったのは、<a href="http://june29.jp/">june29</a> さんの <a href="http://june29.jp/2008/06/04/tumblens-on-heroku/">TumbLensをHerokuにてリリース - cameraLady</a> というエントリでした。june29 さんが、Tumblr を PicLens で見る TumbLens というサイトを作っのです。PicLens に感動するとともに、Tumblr を PicLens で見る発想に感動しました。</p>
<br/>
<p>で、最近のぼくは、Flickr の新着ページ (<a href="http://www.flickr.com/photos/">Flickr: Photos &amp; video from everyone in Flickr</a>) を見るのに PicLens を使っていました。適当にカワイイ子が映っている写真を選んで、PicLens でひたすらその子が映ってる色々な写真を見るという使い方です。</p>
<br/>
<p>そんな中、新たな PicLens サイトが現れました。</p>
<p><a href="http://blog.livedoor.jp/avmaster/">avmaster</a> さんの <a href="http://sexnotes.org/">AV女優ブログ検索</a> です。</p>
<p><a href="http://blog.livedoor.jp/avmaster/archives/282542.html">AV女優ブログ検索運用日記 : Piclensを使って、スライドショーでみよう！ - livedoor Blog（ブログ）</a> で avmaster さんがエントリされているとおり、『女優さんの画像がスライドショーでみれる』のです！</p>
<p>画像集めてくるのめんどくせーなーと思ってたぼくにピッタリのサービスです！！</p>
<br/>
<p>PicLens 対応のサービスがもっと増えるといいですね！</p>
<p>ciao!</p>

]]></description>
            <link>http://blog.woremacx.com/2008/06/you-can-halahala-av-actress-pics-using-piclens.html</link>
            <guid>http://blog.woremacx.com/2008/06/you-can-halahala-av-actress-pics-using-piclens.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">PicLens</category>
            
            <pubDate>Sun, 15 Jun 2008 14:22:56 +0900</pubDate>
        </item>
        
        <item>
            <title>なんか</title>
            <description><![CDATA[<p>優秀なハカーの皆さんならすでにご検討されたようなことなんでしょうけど、思いついたので一応書いておきますね。</p>
<p>DBIC って、redhat 系由来の遅くなるパッチの当たってる環境では、DBIC_NO_WARN_BAD_PERL=1 をつけないと STDERR にうざいメッセージを吐く機構が DBIx::Class::StartupCheck にあります。</p>
<p>それみたく、Catalyst では使っていいプラグインのホワイトリストを持っておいて、うざいメッセージを吐くだけじゃなくて CATALYST_ENABLE_BACKWARD_COMPATIBLE_PLUGIN=1 (英語適当) みたいなのをつけないと起動しない仕組みとか入れればいいんじゃないのかなと思いました。</p>

]]></description>
            <link>http://blog.woremacx.com/2008/06/catalyst-old-plugin.html</link>
            <guid>http://blog.woremacx.com/2008/06/catalyst-old-plugin.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Catalyst</category>
            
            <pubDate>Fri, 06 Jun 2008 10:19:43 +0900</pubDate>
        </item>
        
        <item>
            <title>perl-mongers.org の障害回復のお知らせ</title>
            <description><![CDATA[<p>こんにちは、woremacx です。</p>
<p><a href="http://perl-mongers.org/">perl-mongers.org</a> を含む、woremacx.com でホストしている全てのサービスがほぼ半日間(午前8時前から午後6時前くらいまで)アクセスできない状態となっておりました。</p>
<p>これまでは、アナウンスなしに突然繋がらなくなることが多々ありました。がしかし、現在は <a href="http://perl-mongers.org/">perl-mongers.org</a> という公共性の高いサイトをホストしていることから、ご報告させていただくことにしました。</p>
<p>繋がらなくなっていた原因は、スイッチングハブの電源が抜けていたことです。単純ミスです。</p>
<p><a href="http://perl-mongers.org/">perl-mongers.org</a> をはじめ、woremacx.com でホストしている各種サービスをご利用のみなさまにご迷惑おかけしました。</p>
<p>今後とも、<a href="http://perl-mongers.org/">perl-mongers.org</a> をよろしくお願いいたします！</p>

]]></description>
            <link>http://blog.woremacx.com/2008/06/perl-mongers-org-back-online-now.html</link>
            <guid>http://blog.woremacx.com/2008/06/perl-mongers-org-back-online-now.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">announce</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl-mongers.org</category>
            
            <pubDate>Wed, 04 Jun 2008 21:57:32 +0900</pubDate>
        </item>
        
        <item>
            <title>父の日には新しい TENGA - TENGA フリップホール - を送ろう！</title>
            <description><![CDATA[<p>こんにちは。もう少しで父の日ですね！</p>
<p>こういうイベントって、何を送ろうか、毎年迷っちゃいますね。だけど今年は悩む必要なんて無いですよ！</p>
<p>そう。TENGA ですよ TENGA 。</p>
<p>今までの TENGA は使い捨てで不経済でしたが、今度の TENGA は「<a href="http://www.tenga.co.jp/products/fliphole.html">約50回の使用が可能。</a>」だそうですよ！</p>
<p>お父さんきっと喜びますよ！</p>
<a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0019ANUWU/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank"><img alt="tenga.jpg" src="http://blog.woremacx.com/2008/06/01/tenga.jpg" width="242" height="242" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
<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/B0019ANUWU/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41hEcwB0I5L._SL160_.jpg" alt="TENGA FLIP HOLE フリップホール" 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/B0019ANUWU/blogworemacx-22/ref=nosim/" name="amazletlink" target="_blank">TENGA FLIP HOLE フリップホール</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/B0019ANUWU/blogworemacx-22/ref=nosim/" title="TENGA FLIP HOLE フリップホール" target="_blank">amazlet</a> at 08.06.01</div></div><div class="amazlet-detail">tenga <br />売り上げランキング: 384<br /></div><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/B0019ANUWU/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/06/tenga-flip-hole.html</link>
            <guid>http://blog.woremacx.com/2008/06/tenga-flip-hole.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">TENGA</category>
            
            <pubDate>Sun, 01 Jun 2008 12:03:34 +0900</pubDate>
        </item>
        
        <item>
            <title>今日の MTOS hacks!</title>
            <description><![CDATA[<p>今日は、<a href="http://perl-mongers.org/">perl-mongers.org</a> の微調整 hack を行いました。</p>
<ul>
<li> convert lines break で &lt;pre&gt; を書いた場合に、シンタックスハイライトされるように変更しました。</li>
<li> Text::Hatena でシンタックスハイライトの方法を、vimcolor から google-code-prettify へ変更しました。mattn さんのエントリ(<a href="http://perl-mongers.org/2008/05/textvim-colortexthatenasuperpre.html">Text::Vim-Colorを使えなくてもText::HatenaでSuperPreを使う - perl-mongers.org</a>)が大変参考になりました。ありがとうございます。</li>
<li> Text::Hatena の AA 記法に対応しました。</li>
</ul>
<p>ということで、<a href="http://perl-mongers.org/">perl-mongers.org</a> をよろしくおねがいします！</p>
<ins datetime="2008-06-01T15:44:55+09:00">
<ul>
<li> yusukebe さんが、著者のアイコンを表示するようにしてくれました! nick work!</li>
<li> MT::Auth::OpenID にもともと入っていた、アイコンを取ってくるコードを復活させました。</li>
<li> MTOS-4.2rc1-en にアップグレードしました。</li>
</ul>
</ins>

]]></description>
            <link>http://blog.woremacx.com/2008/06/todays-mtos-hacks.html</link>
            <guid>http://blog.woremacx.com/2008/06/todays-mtos-hacks.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">MovableType</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">MTOS</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl-mongers.org</category>
            
            <pubDate>Sun, 01 Jun 2008 09:42:29 +0900</pubDate>
        </item>
        
        <item>
            <title>「perl-mongers.org」ブログの購読者数の伸びがヤバい！</title>
            <description><![CDATA[<p>こんにちは！こんにちは！こんにちは！</p>
<br/>
<p><a href="http://perl-mongers.org/">perl-mongers.org</a> ブログのライブドアリーダでの購読者数が、ものすごい伸びでビックリしています。</p>
<p>一日で 170 人近くもの皆さんに登録していただいて、とてもうれしく思います。</p>
<br/>
<p><a href="http://media.tumblr.com/2uIDsGkn29gtctjy5lIUkdAI_500.png"><img src="http://media.tumblr.com/2uIDsGkn29gtctjy5lIUkdAI_500.png" alt="http://media.tumblr.com/2uIDsGkn29gtctjy5lIUkdAI_500.png" /></a></p>
<br/>
<p>ランキング1位とかすごすぎます！</p>
<p>関心を持っていただいて本当にありがとうございます。</p>
<br/>
<p><a href="http://media.tumblr.com/2uIDsGkn29gtnhagv9T263I8_500.png"><img src="http://media.tumblr.com/2uIDsGkn29gtnhagv9T263I8_500.png" alt="http://media.tumblr.com/2uIDsGkn29gtnhagv9T263I8_500.png" /></a></p>
<br/>
<p><a href="http://perl-mongers.org/">perl-mongers.org</a> では皆さんのエントリをお待ちしています。</p>

]]></description>
            <link>http://blog.woremacx.com/2008/05/thanks-for-your-perl-mongers-subscribe.html</link>
            <guid>http://blog.woremacx.com/2008/05/thanks-for-your-perl-mongers-subscribe.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl-mongers.org</category>
            
            <pubDate>Tue, 27 May 2008 01:34:56 +0900</pubDate>
        </item>
        
        <item>
            <title>MTOS 4.15b5-en で、Page が Publish できなくなる問題をどうにかする</title>
            <description><![CDATA[<p>Page が Publish できなくなってしまいました。</p>
<p>勝手に Template の Page が Disabled になってました。Static とかに直しても出力されなくて困ったのでデータベースを眺めました。</p>
<p>mt_template テーブルの template_build_type カラムが 0 になってので、1 に直すと回復しました。</p>
<p>数時間前に Entry が Publish できなくなる現象に遭遇したときは、データベースを数時間前にロールバックしてなんとかしのいだのだけど、同じ方法で直せたのかもしれない。</p>

]]></description>
            <link>http://blog.woremacx.com/2008/05/mtos-cannot-publish-pages.html</link>
            <guid>http://blog.woremacx.com/2008/05/mtos-cannot-publish-pages.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">MTOS</category>
            
            <pubDate>Mon, 26 May 2008 01:54:26 +0900</pubDate>
        </item>
        
        <item>
            <title>perl-mongers.org を立ち上げました。</title>
            <description><![CDATA[<p>こんにちは！こんにちは！こんにちは！</p>
<p>vkgtaro さんによる</p>
<ul>
<li> <a href="http://vkgtaro.jp/2008/05/25/000636">perl-mongers.org を立ち上げました。</a></li>
</ul>
<p>というエントリで書かれているとおり、<a href="http://plucore.jp/">プラコア</a> CTO の vkgtaro さんたちと <a href="http://perl-mongers.org/">perl-mongers.org</a> というサイトをはじめました！</p>
<p>vkgtaro さんが <a href="http://perl-mongers.org/">perl-mongers.org</a> を取得するまでのぼくらに何があったかはさておき、<a href="http://perl-mongers.org/">perl-mongers.org</a> では何が新しいかをご説明します。</p>
<br/>

<p><a href="http://perl-mongers.org/">perl-mongers.org</a> では、OpenID でログインするだけで、スグに記事を書けます。従来のあったような、面倒なアカウント申請は必要ありません。<a href="http://perl-mongers.org/">perl-mongers.org</a> のトップページに行って、何らかの OpenID を入力するだけで、すぐにエントリする用意がととのいます。</p>
<p>詳しくは、</p>
<ul>
<li> <a href="http://perl-mongers.org/2008/05/sign-in-to-perl-mongers-by-openid.html">perl-mongers.org に OpenID でサインインしよう！ - perl-mongers.org</a></li>
</ul>
<p>をごらんください。</p>
<br/>

<p>OpenID を MTOS に組み込んだ件については、</p>
<ul>
<li> <a href="http://perl-mongers.org/2008/05/openid_mtos_author_hack.html">OpenID さえあれば MTOS に Author アカウントでエントリできるようにする hack! - perl-mongers.org</a></li>
</ul>
<p>でご説明しましたのでごらんください。MTOS のコアに手を入れているので、もっとまともな方法とかご存じの方いらっしゃれば、アドバイスなどいただけると非常にありがたく思います。よろしくお願いします。</p>
<br/>

<p>以上、かんたんに <a href="http://perl-mongers.org/">perl-mongers.org</a> についてご紹介してきました。</p>
<p><a href="http://perl-mongers.org/">perl-mongers.org</a> をよろしくおねがいします！</p>

]]></description>
            <link>http://blog.woremacx.com/2008/05/perl-mongers-org.html</link>
            <guid>http://blog.woremacx.com/2008/05/perl-mongers-org.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">perl-mongers.org</category>
            
            <pubDate>Sun, 25 May 2008 23:18:19 +0900</pubDate>
        </item>
        
    </channel>
</rss>

