<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>よく帰れない人のブログ</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/" />
    <link rel="self" type="application/atom+xml" href="http://deathmarch.orz.hm/atom.xml" />
    <id>tag:deathmarch.orz.hm,2009-01-18://2</id>
    <updated>2009-07-27T10:16:23Z</updated>
    <subtitle>よく家に帰れなくなってる人の技術系ブログ。 最近は帰れます。</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.261</generator>

<entry>
    <title>新しいglibcでのiconvについて</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2009/07/glibciconv.html" />
    <id>tag:deathmarch.orz.hm,2009://2.68</id>

    <published>2009-07-27T10:06:17Z</published>
    <updated>2009-07-27T10:16:23Z</updated>

    <summary>久しぶりにはまった。 glibcのいつ頃かしらないけど、 新しめのglibcには...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>久しぶりにはまった。</p>

<p>glibcのいつ頃かしらないけど、<br />
新しめのglibcにはiconvの機能も入ってる。</p>

<p>RedHat系のディストリで yum list *iconv* ってやって出てこなければきっとそう。</p>

<p>このバージョンのglibcの場合は、<br />
iconvのパッケージを入れなくてもiconvを必要とするものがビルドできるわけなんだけど、<br />
逆にソースから/usr/local/とかにiconvをインストールしてると、逆に動かなくなったりする。</p>

<p>その場合は/usr/localからiconvの痕跡を消せばおｋ</p>

<p>/usr/直下に入れた場合はシラネ</p>]]>
        
    </content>
</entry>

<entry>
    <title>コメントが投稿できない。</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2009/06/post-26.html" />
    <id>tag:deathmarch.orz.hm,2009://2.67</id>

    <published>2009-06-19T07:57:58Z</published>
    <updated>2009-06-19T08:35:13Z</updated>

    <summary> 「コメント投稿エラー 　コメントを投稿できませんでした。エラー: 不正な要求で...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Server" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="lighttpd" label="Lighttpd" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="server" label="Server" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<pre class="sh_desktop">
「コメント投稿エラー
　コメントを投稿できませんでした。エラー: 不正な要求です。」
</pre>
ってのが出てコメントできません＞＜<br />
<br />
ってのを後輩の竹の人経由で歌丸さんに教えてもらったので調べてた。<br />
<br />
ちなみに比較的特殊な環境でしか再現しないのと、<br />
そのあとlighttpdのモジュール紹介になるので<br />
「俺俺、超普通人」とか「lighty？なにそれ？」な人はヤンキーゴーホーム！<br />]]>
        <![CDATA[またまた結論から。<br />
ここのMTは静的ファイル鯖とアプリ鯖の2台でのリバースプロクシ構成になっているのだが、<br />
アプリ鯖へ通知されるREMOTE_ADDRがローカルアドレスなのが問題だった。<br />
<br />
全リクエストがそこからくるから、スパムリストにでもぶち込まれたんだろう。<br />
<br />
<br />
そいでは解決編。<br />
バックエンドサーバのlighttpdに、<br />
<a href="http://redmine.lighttpd.net/projects/lighttpd/wiki/DocsModExtForward">http://redmine.lighttpd.net/projects/lighttpd/wiki/DocsModExtForward</a><br />
このmod_extforwardってのを入れればOK<br />
<pre class="sh_desktop sh_sourceCode">
 server.modules = ( "mod_extforward" )
 #extforward.headers = ( "X-Forwarded-For" )
 extforward.forwarder = ( "192.168.10.100" => "trust" )
</pre>
こんな感じで設定してやれば<br />
バックエンドサーバで環境変数取ったときのアドレスが<br />
extforward.headersで設定した環境変数に変わってくれる。<br />
<br />
<br />
いじょ<br />
<br />
<br />
でもなぜかアクセスログの方はダメなんだよなー<br />
accesslog.formatだかなんだかを書き換えればいいけど、<br />
そういうことじゃないんだよな<br />]]>
    </content>
</entry>

<entry>
    <title>LinuxでのFirefoxの関連付け起動</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2009/06/linuxfirefox.html" />
    <id>tag:deathmarch.orz.hm,2009://2.66</id>

    <published>2009-06-17T13:38:47Z</published>
    <updated>2009-06-17T15:21:31Z</updated>

    <summary>あまりにも久しぶり過ぎてパスワード忘れてましたぜ旦那。 LinuxでFirefo...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Software" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="firefox" label="Firefox" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="linux" label="Linux" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[あまりにも久しぶり過ぎてパスワード忘れてましたぜ旦那。<br />
<br />
<br />
LinuxでFirefoxを関連付け起動（URLリンクをクリックして起動）とかしようとした場合、<br />
すでにFirefoxが起動してると、<br />
「既に起動してますぜ、旦那」って言われて起動できない。<br />
<br />
ので、なんとかする方法。<br />
<br />]]>
        <![CDATA[<br />
<br />
結論としては<br />
<pre class="sh_sh">
 firefox -P プロファイル名 -remote "openURL(開きたいURL,new-tab)"
</pre>
ってやればOK。<br />
-Pプロファイル名は省略可能。<br />
新しいウィンドウで開きたい場合は「new-tab」を「new-window」にすればOK。<br />
<br />
ただし、これをこのまま「システム→設定→お気に入りのアプリ」に設定してもダメ。<br />
<br />
これは「すでに起動してるFirefoxの新しいタブ/ウィンドウに開く」であって、<br />
まだ起動していない場合は起動してくれない。<br />
<br />
なんでこんなシェルスクリプト書いた。<br />
<pre class="sh_sh">
 #!/bin/bash
 #launch_ff.sh 
 FFCMD=firefox
 RUNFF=`ps ax | grep firefox | grep $1`
 
 if [ -n "$RUNFF" ]; then
     $FFCMD -P $1 -remote "openURL($2,new-tab)"
 else
     $FFCMD -P $1 $2
 fi
</pre>
使い方は<br />
<pre class="sh_sh">
 launch_ff.sh プロファイル名 開きたいURL
</pre>
これで起動してないときは起動して開き、<br />
既に起動している時は新しいタブで開いてくれる。<br />
<br />
か　し　こ<br />
<br />
<br />
<br />
<br />
<br />
ついでに、gmailをデフォルトメーラーにする方法。<br />
「システム→設定→お気に入りのアプリ」のメールクライアントのところに、<br />
コマンドで<br />
<pre class="sh_sh">
 /home/myuser/bin/launch_ff.sh \
  default "http://mail.google.com/mail/?view=cm&fs=1&tf=1&source=mailto&to=%s"
</pre>
とかやればOK。<br />
Google App使ってる人はURLを<br />
https://mail.google.com/a/yourdomain.com/?view=cm&fs=1&tf=1&source=mailto&to=%s<br />
にしてくだし。<br />
]]>
    </content>
</entry>

<entry>
    <title>Re:Re:Catalystアプリオレオレポリシー</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2008/03/rerecatalyst.html" />
    <id>tag:deathmarch.orz.hm,2008://2.65</id>

    <published>2008-03-04T07:52:33Z</published>
    <updated>2008-03-04T07:53:50Z</updated>

    <summary>久しぶりのえんとりー めがねのひとに触発されてオレオレポリシー。 Re:Cata...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Catalyst" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>久しぶりのえんとりー</p>

<p>めがねのひとに触発されてオレオレポリシー。<br />
<a href="http://hibinokoto.jp/archives/2008/03/post-251.html">Re:Catalystアプリオレオレポリシー</a></p>

<p>仕事も個人もCatalystなんで、特にポリシーは分けてない。<br />
会社のみんなも俺のポリシーでやればいいのに。<br />
</p>]]>
        <![CDATA[<p>・MyApp::Pluginとかは作らない。<br />
　だってそのアプリでしか使わないならMyApp.pmに書けば良いじゃない。<br />
　もしMyApp.pmが長くなってきたらそのとき考える。<br />
　他のアプリでも使いそうだったら全部C::P::Hogeにする。<br />
　CPANにあげなくてもC::P::Hogeにする。<br />
　そういうのはrun_script.plの中でPERL5LIBに足してパス通す。</p>

<p>・設定系は全部myapp.yml<br />
　connect_infoもフォームのセレクトボックスも、<br />
　DBには入れたくないけどハードコードしたくないのは全部myapp.yml</p>

<p>・myapp.ymlはリポジトリに入れず、myapp.yml.orgを入れる<br />
　myapp.ymlは動いてる環境に合わせて。myapp.yml.orgはデフォルト<br />
　更新があったらスクリプト使ってマージ。</p>

<p>・データベースの更新用にscript/updatedb.plとsql/update/を用意<br />
　sql/update/の下にSQLファイルを作って、updatedb.pl走らせればおｋ</p>

<p>・テンプレートはDreamWeaverで編集<br />
　タグとか打ってらんねーよ！</p>

<p>・ログは全部C::P::Log::Dispatch</p>

<p>・開発サーバは./script/run_script.pl ./script/myapp_lighttpd.plで<br />
・本番サーバは./script/myapp_fcgi_starter.pl startで。<br />
　場合によっては/etc/rc.d/init.d/にシンボリックを置く</p>

<p>まぁ　こんな所かな？</p>

<p>とりあえず「catalyst.pl MyApp」でできない部分。<br />
<blockquote><br />
MyApp/<br />
 +html_template/ # DreamWeaverで作ったテンプレート用ディレクトリ<br />
  +Templates/    # ttのファイルに変換するコマンド使って全部変換する<br />
    index.dwt    # DreamWeaverのテンプレート これを元にheader.ttとfooter.ttを作る<br />
  +static/<br />
   +css/<br />
   +images/<br />
 +lib/<br />
  +MyApp/<br />
   +CRUDBase/    # C::P::CRUD使うときの継承元<br />
    +Common.pm<br />
    +Groups.pm<br />
    +Main.pm<br />
  menu.yml      # 外に出してないC::P::MenuMaker用の設定ファイル<br />
  myapp.yml     # myapp.ymlはsvnに入れない<br />
  myapp.yml.org # こっちを入れる<br />
 +run/          # ログ・セッション・キャッシュ等のファイル置き場<br />
   DEBUG.MyApp  # 本番時は/var/run/myappや/var/log/myappに出す<br />
   session<br />
 +script/<br />
   dbic_console.pl # MyApp::Schemas::MyAppを使ってDBICでほにゃる用のコンソール<br />
   grant.pl      # updastedb.plの部品<br />
   myapp_lighttpd.pl # typesterさんのC::H::Lighttpdを元にprocsとか設定できるようにしたやつ<br />
   myapp_fcgi_starter.pl # ./myapp_fcgi_starter.pl [start|stop|restart|status]でFCGIプロセスを立ち上げる<br />
   run_script.pl # /usr/lib/やMyApp/libに無いけど取り込みたいモジュールのパスを通す。startup.plみたいなもの？<br />
   updatedb.pl   # MyApp/sql/update/以下のreleaseほげほげのファイルを使ってDBをアップデートする。<br />
   updateseq.pl  # updatedb.plの部品<br />
 +sql/<br />
   base.sql      # ベーススキーマ update以下にファイルが貯まってきたらここに統合<br />
  +update/       # SQLのアップデートファイルがいっぱい<br />
    release-YYYY-MM-DD-NN.sql<br />
 +template/      # TTのテンプレート置き場 root以下は嫌いです。html_templateからスクリプト使って吐き出される。<br />
</blockquote></p>

<p><br />
MTのバージョンあげたいなー<br />
デザインも変えたいなー<br />
というかブログ放置するならなくしちゃえばいいのにって思った。</p>]]>
    </content>
</entry>

<entry>
    <title>Fedora 7 kernel 2.6.22.1-27でVMwarePlayerのvmware-config.pl</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2007/07/fedora-7-kernel-2622127vmwarep.html" />
    <id>tag:deathmarch.orz.hm,2007://2.64</id>

    <published>2007-07-23T13:57:56Z</published>
    <updated>2007-07-23T14:00:44Z</updated>

    <summary>さらっと。 Fedora 7を使ってるのだが、kernel 2.6.22.1-2...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>さらっと。</p>

<p>Fedora 7を使ってるのだが、kernel 2.6.22.1-27だとVMwarePlayerのvmware-config.plがコケる。<br />
なので<br />
<a href="http://www.vmware.com/community/thread.jspa?messageID=645058">http://www.vmware.com/community/thread.jspa?messageID=645058</a><br />
のパッチを/usr/lib/vmware/module/source/vmnet.tarを解凍して当ててやれば通るようになる。</p>

<p>今のところ普通に動いてます。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Thinkpad X60 Atheros AR5BXB72 をFedora Core 6で</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2007/04/thinkpad-x60-atheros-ar5bxb72.html" />
    <id>tag:deathmarch.orz.hm,2007://2.63</id>

    <published>2007-04-05T06:46:40Z</published>
    <updated>2009-01-18T13:33:50Z</updated>

    <summary>久しぶりの投稿。 Thinkpad X60に乗ってるMIMO対応の ThinkP...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        久しぶりの投稿。
Thinkpad X60に乗ってるMIMO対応の
ThinkPad 11a/b/g/n Wireless LAN Mini Express Adapter(Atheros AR5BXB72)
がFedora Core 6で動くようになったのでメモ。

対応したAPもってないので11nやMIMOが動くかどうかはまだ不明。

        <![CDATA[lspciで
03:00.0 Network controller: Atheros Communications, Inc. Unknown device 0024 (rev 01)
と表示されるアレ。

必要なもの
・ndiswrapper SourceForge最新版(<a href="http://ndiswrapper.sourceforge.net/">NdisWrapper</a>)
今回は1.41を使用
livnaにある1.38やatrpmsの1.37では「modprobe ndiswrapper」した時点でハングアップする。

・Windows用ドライバ(<a href="http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-66449">IBM</a>)


まずはndiswrapperをビルド。
メンドイので解凍するとついてるspecファイルでrpmを作ります。

<pre class="sh_sh">
$ tar -zxvf ndiswrapper-1.41.tar.gz
$ cd ndiswrapper-1.41
$ rpmbuild -ba ndiswrapper.spec
</pre>
<pre class="sh_sh">
$ rpmbuild -ta ndiswrapper-1.41.tar.gz
</pre>
でもいいです。

そしてインストール
<pre class="sh_sh">
$ su
# rpm -ivh ndiswrapper-1.41-1.i386.rpm kernel-module-ndiswrapper-2.6.20-1.2933.fc6-1.41-1.i386.rpm
</pre>

次はWindows用ドライバのndiswrapperへの取り込み。

<pre class="sh_sh">
$ cabextract 7iwc21ww.exe -d 7iwc21ww
$ cd 7iwc21ww
$ su
# /usr/sbin/ndiswrapper -i ./WINXP_2K/NET5416.INF
</pre>

一応「ndiswrapper -l」で組み込まれてるか確認しよう。
以下のような結果になるはず。
<pre class="sh_sh">
# ndiswrapper -l
net5416 : driver installed
        device (168C:0024) present
</pre>

いよいよndiswrapperのロード。
の前に、modprobe.confの設定をしておく。
以下2行を追加。 wlan0はお好きなので。
<pre class="sh_sh">
options ndiswrapper if_name=wlan0
alias wlan0 ndiswrapper
</pre>

後は組み込むだけ！
<pre class="sh_sh">
# modprobe ndiswrapper
</pre>

これで「iwconfig」とやれば以下のようにでるはず。
<pre class="sh_sh">
wlan0     IEEE 802.11g  ESSID:off/any  
          Mode:Managed  Frequency:2.462 GHz  Access Point: Not-Associated   
          Bit Rate=54 Mb/s   
          Encryption key:off
          Power Management:off
          Link Quality:0  Signal level:0  Noise level:0
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0
</pre>

もし「wifi-radar」とか使ってたら、「/etc/wifi-radar/wifi-radar.conf 」の「interface」を自分が指定したものに変えておこう。]]>
    </content>
</entry>

<entry>
    <title>Class::DBIでのessentialの動的指定のバグ</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/12/classdbiessential.html" />
    <id>tag:deathmarch.orz.hm,2006://2.62</id>

    <published>2006-12-22T22:17:38Z</published>
    <updated>2009-01-18T12:38:38Z</updated>

    <summary>あー 超絶はまった・・・ Class::DBIにて、動的にEssentialを指...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Perl" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[あー 超絶はまった・・・

Class::DBIにて、動的にEssentialを指定するとおかしくなるバグがある。
動的に というか、2回以上。
<a href="http://rt.cpan.org/Public/Bug/Display.html?id=14798">http://rt.cpan.org/Public/Bug/Display.html?id=14798</a>
こんな風にrtCPANにも乗ってます。
1年前から超絶放置中。

まぁ もともと$model->columns(Essential => qw/hoge fuga moge/);
っていうの自体動的にやること考慮されていないんだろうけど、
普段はIDだけの高速引きで、時と場合によっては必要な分だけ引きたいというのは結構ある。
あらかじめ必要な分を引いてやらなければ、ループでその行を使うたびにPrimaryKeyでのSELECTが走るからだ。
（10万行のテーブルとかだと全体へのsearchが1回。
　あとはループで各行へのPrimaryKey引きが1回ずつの
　合計10万1回SQLが走るとかエグいことになる）

結論から言えば、
Class::DBI::ColumnGrouperのadd_groupメソッドを以下のように変えてやれば直る。
<pre class="sh_perl">
<enchtml>
sub add_group {
  my ($self, $group, @names) = @_;
  $self->add_group(Primary => $names[0])
    if ($group eq "All" or $group eq "Essential")
        and not $self->group_cols('Primary');
  $self->add_group(Essential => @names)
    if $group eq "All"
       and !$self->essential;
  @names = _unique($self->primary, @names) if $group eq "Essential";
  
  my @cols = map $self->add_column($_), @names;
  unless($group eq "All") {
    foreach my $col ($self->all_columns) {
      delete $col->{_groups}->{$group} if(exists $col->{_groups}->{$group});
    }
  }
  $_->add_group($group) foreach @cols;
  $self->{_groups}->{$group} = \@cols;
  return $self;
}
</enchtml>
</pre>

続きにて簡単な例をば。]]>
        <![CDATA[<pre class="sh_perl">
__PACKAGE__->table('group_master');
__PACKAGE__->columns(Primary => 'id');
__PACKAGE__->columns(All => qw(id disable name memo admin_only));
</pre>
こんな定義のテーブルがあったとして、
<pre class="sh_sql">
SELECT id, admin_only, name FROM table;
</pre>
とかいうSQLを発行したい場合に発生する。
こんな場合には普通に考えると
<pre class="sh_perl">
my @org_essential = $model->columns('Essential');
$model->columns('Essential' => qw/id admin_only name/);
my $it = $model->search_where(ほげほげ);
$model->columns('Essential' => @org_essential);
</pre>
とかやるわけなのだが、
これをやるとテーブル側としてはEssentialはIDだけなので他をSELECTしようとするのだが、
カラム側では自分がEssentialに入っていると思っているのでSELECTが走らず値が取れなくなる。

原因はClass::DBI::ColumnGrouperというモジュールにある。
このモジュールのadd_groupというメソッドが
<pre class="sh_perl">
columns(Essential => qw/ほげほげ/);
</pre>
とかした際の実態なのだが、
このメソッドではグループの追加は行っていてもグループの削除はしていない。
それが原因。

あー眠い・・・・]]>
    </content>
</entry>

<entry>
    <title>Catalyst::Plugin::Log::Dispatch</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/12/catalystpluginlogdispatch.html" />
    <id>tag:deathmarch.orz.hm,2006://2.61</id>

    <published>2006-12-22T04:23:11Z</published>
    <updated>2009-01-18T12:45:42Z</updated>

    <summary>CatalystでLog::Dispatchが使いたくて作った。 http://...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Catalyst" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[CatalystでLog::Dispatchが使いたくて作った。
<a href="http://search.cpan.org/~shot/Catalyst-Plugin-Log-Dispatch/">http://search.cpan.org/~shot/Catalyst-Plugin-Log-Dispatch/</a>
myapp.ymlに
<pre class="sh_desktop">
<enchtml>
Log::Dispatch:
 -class: File
  file:__path_to(debug.log)__
  min_level: debug
  mode:append
</enchtml>
</pre>
とか書いてあげれば使えます。]]>
        
    </content>
</entry>

<entry>
    <title>RapidSVN を Windows でビルドする</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/11/rapidsvn-windows-1.html" />
    <id>tag:deathmarch.orz.hm,2006://2.60</id>

    <published>2006-11-11T02:16:04Z</published>
    <updated>2006-11-11T17:42:32Z</updated>

    <summary>俺はどうもTortoiseSVNのシェル結合が気に食わなくて RapidSVNと...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Programing" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>俺はどうもTortoiseSVNのシェル結合が気に食わなくて<br />
RapidSVNというSVNクライアントを使ってるわけなんだが<br />
なんとなくリビルドしてみたのでメモメモ。</p>

<p>つーか Subversion系のビルドってば何でこんなに大変なんだ_no<br />
この記事一度ビルド成功した後まっさらにしてもう一度やりつつ書いてるんだが、<br />
次成功しなかったらどうしよう(笑</p>

<p>ってわけで、本文は続きに。</p>]]>
        <![CDATA[<p><strong>環境整備</strong><br />
・Visual C++ 2005 Express Edition<br />
・Microsoft Platfome SDK<br />
・wxWidgets<br />
の3つが必要。<br />
普段はwxDev-C++を使っているので、以下のページを見ながらインストールした。</p>

<p><a href="http://freepg.fc2web.com/index.html">フリープログラミング for windows</a>内の<br />
<a href="http://freepg.fc2web.com/cpp/topic_vce_001.html">Visual C++ Express Editionを使ってみる(Windows Platform SDK編)</a>と<br />
<a href="http://freepg.fc2web.com/cpp/topic_wx_vc.html">Visual C++ Express EditionでwxWidgetsを使ってみる</a></p>

<p>なお、今回は普通に使うバイナリがほしいのですべてReleaseでビルドする。</p>

<p>wxWidgetsの設定が終わった後、<br />
環境変数にWX=%WXWIN%をセットしておく。</p>

<p></p>

<p><strong>必要なファイルのダウンロードと配置</strong></p>

<p>・RapidSVNの最新ソース<br />
RapidSVNの最新ソースは<br />
<a href="http://rapidsvn.tigris.org/svn/rapidsvn/trunk">http://rapidsvn.tigris.org/svn/rapidsvn/trunk</a><br />
からsvn checkoutすればいい。<br />
既存のRapidSVNなりTortoiseSVNなりを使って、<br />
C:\temp\RapidSVNにチェックアウトする。<br />
今回はコマンドラインのSubversionを使ったので以下のコマンドでチェックアウトした。<br />
<blockquote>cd c:\temp<br />
svn co http://rapidsvn.tigris.org/svn/rapidsvn/trunk RapidSVN<br />
</blockquote></p>

<p>・Subversionのソース<br />
Subversionのソースは最新は1.4.Xだが、<br />
1.3.Xならaprやらexpatやらneonやら、Subversion自体のビルドに必要なものが同封されているので<br />
こちらを使った<br />
<a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=6781&expandFolder=6781&folderID=0">http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=6781&expandFolder=6781&folderID=0</a><br />
ここから<br />
subversion-1.3.2.zipをダウンロードし、<br />
C:\svnに解凍する。</p>

<p>・OpenSSL<br />
有志の方がWin32向けのビルドをしてくれている、<br />
<a href="http://www.slproweb.com/products/Win32OpenSSL.html">http://www.slproweb.com/products/Win32OpenSSL.html</a><br />
から<br />
Win32OpenSSL-0_9_8d.exe<br />
をダウンロードし、インストールする。</p>

<p>・db4-win32<br />
<a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=688&expandFolder=688&folderID=6781">http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=688&expandFolder=688&folderID=6781</a><br />
こちらのSubversionのページより<br />
db-4.4.20-win32.zipをダウンロードし、<br />
C:\db4-win32に解凍する。</p>

<p>・libintl<br />
<a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=2627&expandFolder=2627&folderID=688">http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=2627&expandFolder=2627&folderID=688</a><br />
同じくこちらのSubversionのページより<br />
svn-win32-libintl.zipをダウンロードし、<br />
C:\svn-win32-libintlに解凍する。</p>

<p></p>

<p><strong>環境変数の設定</strong><br />
ビルド時に必要になる以下の環境変数を設定する。<br />
<blockquote>SUBVERSION=C:\svn<br />
OPENSSL_SRC=C:\OpenSSL<br />
LIBINTL=C:\svn-win32-libintl</blockquote></p>

<p></p>

<p><strong>ソースファイルの修正</strong></p>

<p>C:\svn\build\win32\build_neon.batの編集</p>

<p>デフォルトではsubversionのパスがスタティックに書かれているので修正。<br />
<blockquote>/home/dave/svn/env/.dist_sandbox/subversion-1.3.2</blockquote><br />
となっている部分を<br />
<blockquote>%SUBVERSION%</blockquote><br />
に変更する。</p>

<p><br />
C:\svn\neon\neon.makの編集</p>

<p>今回ダウンロードしたOpenSSL-0.9.8dはフォルダ構成が違うので以下の部分を修正する。<br />
<blockquote>OPENSSL_FLAGS = /I "$(OPENSSL_SRC)\inc32" /D NE_HAVE_SSL /D HAVE_OPENSSL</blockquote><br />
　　　　　　　　　　　　　　　　　↓<br />
<blockquote>OPENSSL_FLAGS = /I "$(OPENSSL_SRC)\include" /D NE_HAVE_SSL /D HAVE_OPENSSL</blockquote><br />
と<br />
<blockquote>!IF "$(OPENSSL_SRC)" != ""<br />
LIB32_OBJS = $(LIB32_OBJS) "$(INTDIR)\ne_openssl.obj"<br />
!IFDEF OPENSSL_STATIC<br />
LIB32_OBJS = $(LIB32_OBJS) "$(OPENSSL_SRC)\out32\libeay32.lib" \<br />
　　　　　　　　　　　　"$(OPENSSL_SRC)\out32\ssleay32.lib"<br />
!ELSE<br />
LIB32_OBJS = $(LIB32_OBJS) "$(OPENSSL_SRC)\out32dll\libeay32.lib" \<br />
　　　　　　　　　　　　"$(OPENSSL_SRC)\out32dll\ssleay32.lib"<br />
!ENDIF</blockquote><br />
　　　　　　　　　　　　　　　　　↓<br />
<blockquote>!IF "$(OPENSSL_SRC)" != ""<br />
LIB32_OBJS = $(LIB32_OBJS) "$(INTDIR)\ne_openssl.obj"<br />
!IFDEF OPENSSL_STATIC<br />
LIB32_OBJS = $(LIB32_OBJS) "$(OPENSSL_SRC)\lib\VC\libeay32MT.lib" \<br />
　　　　　　　　　　　　"$(OPENSSL_SRC)\lib\VC\ssleay32MT.lib"<br />
!ELSE<br />
LIB32_OBJS = $(LIB32_OBJS) "$(OPENSSL_SRC)\lib\VC\libeay32MD.lib" \<br />
　　　　　　　　　　　　"$(OPENSSL_SRC)\lib\VC\ssleay32MD.lib"<br />
!ENDIF</blockquote><br />
の2箇所</p>

<p>C:\svn\neon\src\ne_xml.c編集</p>

<p>expat.hよりXML_MAJOR_VERSIONを引っ張ってきているのだが、<br />
ビルド時にエラーが出るので以下の部分をコメントアウトする<br />
<blockquote>#if !defined(XML_MAJOR_VERSION) || (XML_MAJOR_VERSION < 2 \<br />
　　　　　　　　　　　　　　　　&& XML_MINOR_VERSION == 95 \<br />
　　　　　　　　　　　　　　　　&& XML_MICRO_VERSION < 2)<br />
#define NEED_BOM_HANDLING<br />
#endif</blockquote><br />
　　　　　　　　　　　　　　　　　↓<br />
<blockquote>//#if !defined(XML_MAJOR_VERSION) || (XML_MAJOR_VERSION < 2 \<br />
//　　　　　　　　　　　　　　　　&& XML_MINOR_VERSION == 95 \<br />
//　　　　　　　　　　　　　　　　&& XML_MICRO_VERSION < 2)<br />
//#define NEED_BOM_HANDLING<br />
//#endif</blockquote></p>

<p></p>

<p><strong>いよいよビルド</strong><br />
まずはSubversionのビルドから。<br />
C:\svn\subversion_msvc.dswを開き、プロジェクトを変換する。<br />
zlib.dspでエラーが出るが、気にしなくてよい。</p>

<p>ビルドに入る前にdb4のインクルードファイルのパスが違うので修正する。<br />
ソリューションエクスプローラーより<br />
libsvn_fs_baseを探し、<br />
右クリック→プロパティ→構成プロパティ→C/C++→全般と選択し、<br />
追加のインクルードディレクトリ内の<br />
..\..\..\db4-win32 を C:\db4-win32 に変更する</p>

<p><br />
今回はSubversion自体をビルドするわけではないので、<br />
以下のものだけ選択してビルドする。<br />
<blockquote>libapr<br />
libaprutil<br />
neon<br />
libsvn_client<br />
libsvn_delta<br />
libsvn_diff<br />
libsvn_fs_base<br />
libsvn_fs<br />
libsvn_fs_fs<br />
libsvn_ra<br />
libsvn_ra_dav<br />
libsvn_ra_local<br />
libsvn_ra_svn<br />
libsvn_repos<br />
libsvn_subr<br />
libsvn_wc</blockquote></p>

<p>それぞれ単品をビルドするには、<br />
ソリューションエクスプローラーより目的の物を右クリックし、ビルドを選べばよい。</p>

<p><br />
最後にRapidSVNのビルドをする。<br />
C:\temp\RapidSVN\rapidsvn.dswを開き、プロジェクトを変換する。</p>

<p>ここでまたライブラリのパス等の修正をする。<br />
一つ目はdb4-libの修正<br />
ソリューションエクスプローラよりrapidsvnを右クリック、<br />
プロパティ→構成プロパティ→リンカ→全般と選択し、<br />
追加のライブラリ ディレクトリにC:\db4-win32\libを追加する。</p>

<p>次にwxpng.libの外部参照エラーを解決するため、依存ファイルにwxzlib.libを追加する。<br />
ソリューションエクスプローラよりrapidsvnを右クリック<br />
プロパティ→構成プロパティ→リンカ→入力と選択し、<br />
追加の依存ファイルにwxzlib.libを追加する。</p>

<p>以上で下準備は終了<br />
あとは上部メニューよりビルド→ソリューションのビルドと選択すればrapidsvn.exeの出来上がり。</p>

<p>最後に出来上がったrapidsvn.exeを適当なディレクトリにコピーし、<br />
同じディレクトリに以下のものをコピーすれば完了だ。<br />
<blockquote>C:\svn\apr\Release\libapr.dll<br />
C:\svn\apr-util\Release\libaprutil.dll<br />
C:\svn\apr-iconv\Release\libapriconv.dll<br />
C:\db4-win32\bin\libdb44.dll<br />
C:\svn-win32-libintl\bin\intl3_svn.dll<br />
C:\Windows\System32\ssleay32.dll<br />
C:\Windows\System32\libeay32.dll<br />
</blockquote></p>

<p></p>

<p><br />
<em>はぁ・・・・ にしても相変わらず文章下手だなぁ・・・ 死んだほうがよくね？</em></p>]]>
    </content>
</entry>

<entry>
    <title>MovableTypeが復活した</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/10/movabletype-1.html" />
    <id>tag:deathmarch.orz.hm,2006://2.59</id>

    <published>2006-10-16T13:40:51Z</published>
    <updated>2006-10-16T14:21:27Z</updated>

    <summary>以前サーバーを入れなおしたときに、SQLダンプ取ったつもりが文字コードミスって消...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="その他" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>以前サーバーを入れなおしたときに、SQLダンプ取ったつもりが文字コードミスって消滅してた。<br />
ついでにMT3.3にして復活。</p>

<p>久しぶりすぎてどう書いたものか・・・</p>]]>
        <![CDATA[<p>FastCGI系のがいろいろおかしいな<br />
また今度直すか</p>]]>
    </content>
</entry>

<entry>
    <title>プログラマーになる為に</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/08/post-25.html" />
    <id>tag:deathmarch.orz.hm,2006://2.58</id>

    <published>2006-08-15T21:59:00Z</published>
    <updated>2006-10-16T13:25:25Z</updated>

    <summary>http://d.hatena.ne.jp/nonomachon/2006080...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="その他" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p><a href="http://d.hatena.ne.jp/nonomachon/20060805">http://d.hatena.ne.jp/nonomachon/20060805</a><br />
<a href="http://d.hatena.ne.jp/amachang/20060804/1154679162">http://d.hatena.ne.jp/amachang/20060804/1154679162</a><br />
いくつかのエントリーに触発されて･･･</p>

<p>僕が思うにプログラマーになる為に一番必要なものは根性だ。</p>

<p>頭のよさ・発想力・経験値・扱える言語の数。　こんな物は時間さえかければ何とでもなる。</p>

<p>「初心者です。」と言っても教えてもらえることなど基本中の基本まで。<br />
そこから先に行くためには少ない・体系化されていない情報の中で自己学習し、問題を解決しなければならない。<br />
これにはある程度根性が必要だ。</p>

<p>また晴れて「職業：プログラマー」になれたとしても安心などできない。<br />
顧客の無茶な要望に答えるために徹夜をし、<br />
自分・もしくは他人のバグを治すために徹夜をし、<br />
明らかに無理な納期を守るために徹夜をする。</p>

<p>今度はそんな状況に耐えうる精神的なタフさが求められる。</p>

<p>顧客に怒られ、上司に厭味を言われ、SEに罵倒される。<br />
そんな状況でも外圧を力に変え、自ら成長していける根性が必要だ。</p>

<p>ある意味上のような状況でも楽しめるM気質と言ったほうがいいかもしれないが･･･</p>

<p><br />
そんなわけで<br />
・根性がない人<br />
・打たれ弱い人<br />
・すぐ投げ出してしまう人<br />
こんな人にはプログラマーはまったくお勧めしない。</p>]]>
        <![CDATA[<p></p>

<p>ただし「向いてるか向いてないか」とはまったく別問題なので注意。<br />
根性さえあれば「プログラマー」にはなれるが、<br />
「すごいプログラマー」になるには向いてる必要があるだろう。</p>]]>
    </content>
</entry>

<entry>
    <title>Amazonの新刊をAtomFeedで取得するサービス</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/06/amazonatomfeed.html" />
    <id>tag:deathmarch.orz.hm,2006://2.57</id>

    <published>2006-06-29T16:49:00Z</published>
    <updated>2006-10-16T13:25:26Z</updated>

    <summary>Amazonの新刊をAtomFeedで取得するサービスを作った。 いつも新刊が出...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Catalyst" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>Amazonの新刊をAtomFeedで取得するサービスを作った。</p>

<p>いつも新刊が出てないか本屋に見に行くのが面倒だったのと、<br />
気づかなくて買い忘れるとかよくあったから。</p>

<p>しばらく時間たって見ないとちゃんと動いてるかわからないけど、とりあえずこんな感じ。<br />
　　　　　　　　　　↓<br />
<a href="http://www.bindstorm.jp/anbs/">http://www.bindstorm.jp/anbs/</a></p>

<p>BloglinesとかRSSリーダ使ってる人は試してもらえると助かるっす(テスト丸投げ)</p>]]>
        
    </content>
</entry>

<entry>
    <title>ProFTPDで文字コード変換</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/06/proftpd.html" />
    <id>tag:deathmarch.orz.hm,2006://2.56</id>

    <published>2006-06-26T07:31:00Z</published>
    <updated>2006-10-16T13:25:26Z</updated>

    <summary>家の鯖には今までVineLinuxを使ってきたが、現在CentOSに移行中。 と...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Linux" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>家の鯖には今までVineLinuxを使ってきたが、現在CentOSに移行中。<br />
とりあえず4台中2台は移行完了。(1台は設定がまだまだだが)</p>

<p>移行後に困ったのが、FTPの文字コード。<br />
今まではVineLinuxだったのでホストの文字コードをEUC-JPにすればよかったのだが、<br />
UTF-8に対応しているFTPクライアントでいいのが見つからない。</p>

<p>ってことでProFTPD側にパッチ当ててサーバ側でEUC-JP<=>UTF-8の変換をさせることにした。</p>

<p>ProFTPd本家から1.3.0のソースと、↓のページを参考にRPMパッケ作成。<br />
pam認証あたりでてこずったけど、うまくいきました。<br />
(つーか日本語使いたくねぇんだけどな････)</p>

<p>http://www.hakusan.tsg.ne.jp/tjkawa/software/misc/proftpd-iconv/index.jsp</p>]]>
        
    </content>
</entry>

<entry>
    <title>Catalyst-Plugin-BasicProgress</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/06/catalystpluginbasicprogress.html" />
    <id>tag:deathmarch.orz.hm,2006://2.55</id>

    <published>2006-06-09T13:10:00Z</published>
    <updated>2009-01-18T12:48:11Z</updated>

    <summary>んー 実に2ヶ月ぶりの登校　じゃなくって投稿・・・ たまに人生という名の敵軍に投...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="Catalyst" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>んー 実に2ヶ月ぶりの登校　じゃなくって投稿・・・<br />
たまに人生という名の敵軍に投降したくなりますね。</p>

<p>んで、何かというとCatalyst-Plugin-UploadProgressを触りまして･･･<br />
あのアップロードのプログレスバーをアップロード以外でも使いたいな！と・・</p>

<p>Catalyst-Plugin-UploadProgressからすごい勢いでパクリました。<br />
<a href="http://deathmarch.orz.hm/files/Catalyst-Plugin-BasicProgress-0.01.tar.gz">Catalyst-Plugin-BasicProgress-0.01.tar.gz</a></p>

<p>ごめんなさい。</p>

<p>ドキュメントとかまったく何も書いてません。<br />
Module-Starterが吐き出したやつそのままです。<br />
サンプルCatalystアプリがついてるので感じてください。<br />
基本的にバックグラウンド処理に入りたいところで$c->go_progress_fork(オプションほげほげ)と呼んでやるだけです。<br />
UploadProgressと同様Cache系のプラグインが必須です。</p>

<p>さすがにこれはパクリすぎだからCPANにはあげないでおこう･･･</p>

<p>追記<br />
うまいことプログレスバーの画面に飛ばない場合は、<br />
go_progress_forkの直後に</p>

<pre class="sh_perl">
<enchtml>
my $time = time;
for(my $now = time; $now < $time + 10; $now = time) {
    # do nothing
}
</enchtml>
</pre>

<p>等sleep以外のwaitを入れてみてください。</p>]]>
        
    </content>
</entry>

<entry>
    <title>うおー　Thinkpad X60 ほっすぃぃぃーーー！！</title>
    <link rel="alternate" type="text/html" href="http://deathmarch.orz.hm/2006/04/thinkpad-x60.html" />
    <id>tag:deathmarch.orz.hm,2006://2.54</id>

    <published>2006-04-19T12:22:00Z</published>
    <updated>2006-10-16T13:25:28Z</updated>

    <summary>OS　　：WinXPProSP2 CPU　：Intel CoreDuo T240...</summary>
    <author>
        <name>shot</name>
        
    </author>
    
        <category term="その他" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://deathmarch.orz.hm/">
        <![CDATA[<p>OS　　：WinXPProSP2<br />
CPU　：Intel CoreDuo T2400 (1.83GHz)<br />
チップ：Mobile Intel 945GM Express<br />
メモリ：512MBx2<br />
VRAM：最大128MB(メインメモリと共有)<br />
HDD　：80GB(シリアルATA)<br />
IEEE802.11a/b/g、Bluetooth v2.0、1000Base-T、IrDA<br />
TypeII/I x 1、SDカード x 1<br />
バッテリが標準だと4時間程度だけどほっすぃぃぃぃぃぃい</p>

<p>という無駄エントリ</p>]]>
        
    </content>
</entry>

</feed>
