<?xml version="1.0" encoding="utf-8" ?>


<?xml-stylesheet href="http://d.hatena.ne.jp/wadap/rssxsl" type="text/xsl" media="screen"?>


<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xml:lang="ja">
<channel rdf:about="http://d.hatena.ne.jp/wadap/rss">
<title>Unix的なアレ</title>
<link>http://d.hatena.ne.jp/wadap/</link>
<description>Unix的なアレ</description>

<dc:creator>wadap</dc:creator>
<dc:date>2011-10-11T16:48:14+09:00</dc:date>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://d.hatena.ne.jp/wadap/20111011/1318319215"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/wadap/20110807/1312704699"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/wadap/20110217/1297900704"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/wadap/20101025/1288017265"/>
<rdf:li rdf:resource="http://d.hatena.ne.jp/wadap/20100828/1282984286"/>
</rdf:Seq>
</items>
</channel>



<item rdf:about="http://d.hatena.ne.jp/wadap/20111011/1318319215">
<title>[php][CakePHP] $form-&gt;dateTime() で表示される西暦を昇順にする方法</title>
<link>http://d.hatena.ne.jp/wadap/20111011/1318319215</link>
<description> formヘルパーで普通に書いてしまうと、西暦は降順で表示されますよね。 &#60;?php echo $form-&#62;dateTime(’date’,’YMD’,null,null,array(’minYear’=&#62;’1971’,’maxYear’=&#62;’2000’)); ?&#62; ただ、生年月日の入力など昇順で表示するようなケースが多いと思います。</description>

<content:encoded><![CDATA[
<div class="section">
<p>formヘルパーで普通に書いてしまうと、西暦は降順で表示されますよね。</p>
<pre class="syntax-highlight">
<span class="synSpecial">&#60;?php</span> 
<span class="synPreProc">echo</span> <span class="synStatement">$</span><span class="synIdentifier">form</span><span class="synType">-&#62;</span>dateTime<span class="synSpecial">(</span>'<span class="synConstant">date</span>','<span class="synConstant">YMD</span>',<span class="synType">null</span>,<span class="synType">null</span>,<span class="synType">array</span><span class="synSpecial">(</span>'<span class="synConstant">minYear</span>'<span class="synStatement">=&#62;</span>'<span class="synConstant">1971</span>','<span class="synConstant">maxYear</span>'<span class="synStatement">=&#62;</span>'<span class="synConstant">2000</span>'<span class="synSpecial">))</span>;
<span class="synSpecial">?&#62;</span>
</pre>

<p>ただ、生年月日の入力など昇順で表示するようなケースが多いと思います。どうやればいいのかなーとソースよんでみたら、どうやらオプションで簡単にできるようでした。</p>
<pre class="syntax-highlight">
<span class="synSpecial">&#60;?php</span>
<span class="synPreProc">echo</span> <span class="synStatement">$</span><span class="synIdentifier">form</span><span class="synType">-&#62;</span>dateTime<span class="synSpecial">(</span>'<span class="synConstant">date</span>','<span class="synConstant">YMD</span>',<span class="synType">null</span>,<span class="synType">null</span>,<span class="synType">array</span><span class="synSpecial">(</span>'<span class="synConstant">minYear</span>'<span class="synStatement">=&#62;</span>'<span class="synConstant">1971</span>','<span class="synConstant">maxYear</span>'<span class="synStatement">=&#62;</span>'<span class="synConstant">2000</span>','<span class="synConstant">orderYear</span>'<span class="synStatement">=&#62;</span>'<span class="synConstant">asc</span>'<span class="synSpecial">))</span>;
<span class="synSpecial">?&#62;</span>
</pre>

<p>と記述するだけで簡単に昇順に変更することができます。</p>
</div>
]]></content:encoded>
<dc:creator>wadap</dc:creator>
<dc:date>2011-10-11T16:46:55+09:00</dc:date>
<dc:subject>php</dc:subject>
<dc:subject>CakePHP</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/wadap/20110807/1312704699">
<title>[Linux]ソースコード検索ツール milkode をつかってみた</title>
<link>http://d.hatena.ne.jp/wadap/20110807/1312704699</link>
<description> 数万のソースコードから目的の一行を一瞬で見つけ出す、Milkode - おんがえしの日記 先日、はてブで話題になっていたこちらをつかってみました。用途は主に自社サービス「nanapi」の開発で使おうと思っています。nanapiを開発してからすでに２年近く経過していますが、２年</description>

<content:encoded><![CDATA[
<div class="section">
<p><a href="http://f.hatena.ne.jp/wadap/20110807165420" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/w/wadap/20110807/20110807165420.png" alt="f:id:wadap:20110807165420p:image" title="f:id:wadap:20110807165420p:image" class="hatena-fotolife"></a></p>
<p><a href="http://d.hatena.ne.jp/tuto0621/20110730/1312040692" target="_blank"> 数万のソースコードから目的の一行を一瞬で見つけ出す、Milkode - おんがえしの日記</a></p>
<p>先日、はてブで話題になっていたこちらをつかってみました。用途は主に自社サービス「<a href="http://nanapi.jp" target="_blank">nanapi</a>」の開発で使おうと思っています。<a href="http://nanapi.jp" target="_blank">nanapi</a>を開発してからすでに２年近く経過していますが、２年も経つとどうしてもあれはどこにいったっけ・・・というようなことが頻繁におきます。<span style="font-weight:bold;" class="deco">grep -r</span>で必死に検索してきましたが、ひと通りファイルをなめるのでかなり遅いです。</p>
<p>そんなときのために、自分用のソースコード検索ツールができたときいて試してみました。</p>
<h4> インストール〜起動まで</h4>
<p><a href="http://milkode.ongaeshi.me/wiki/%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89" target="_blank">ダウンロード - Milkode</a></p>
<p>基本的には上記のままインストールすることができます。<span style="font-weight:bold;" class="deco">CentOS5.5(x86_64)</span>で試しています。</p>
<pre>
 $ sudo gem install 
</pre>

<p>さて起動してみます</p>
<pre>
 $ milk
/usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/lib/groonga.so: libgroonga.so.0: cannot open shared object file: No such file or directory - /usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/lib/groonga.so (LoadError)
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:58:in `require&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/lib/groonga.rb:45
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `gem_original_require&#39;
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdstk/cdstk.rb:6
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `gem_original_require&#39;
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdstk/cli_cdstksub.rb:3
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `gem_original_require&#39;
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdstk/cli_cdstk.rb:3
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `gem_original_require&#39;
        from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/bin/milk:7
        from /usr/local/bin/milk:19:in `load&#39;
        from /usr/local/bin/milk:19
</pre>

<p>どうやらライブラリにパスが通ってないようで。とりあえず環境変数で逃げます。</p>
<pre>
 $ export LD_LIBRARY_PATH=/usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/vendor/local/lib/
 $ milk
milk COMMAND &#91;ARGS]

The most commonly used milk are:
  init        Init db.
  add         Add packages.
  update      Update packages.
  web         Run web-app.
  remove      Remove packages.
  list        List packages.
  pwd         Disp current db.
  cleanup     Cleanup garbage records.
  rebuild     Rebuild db.
  dump        Dump records.
</pre>

<p>と、これで動作するようになりました。次はソースコードの登録です。</p>
<pre>
 $ milk init --default
 $ milk add ~/src
</pre>

<p>これで、検索するソースコードが登録できました。あとはWebサーバを起動すればOKっぽいです。</p>
<pre>
 $ milk web 
sh: xprop: command not found
/usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:41:in `shell_commands&#39;: undefined method `shellsplit&#39; for nil:NilClass (NoMethodError)
        from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:104:in `wet_run&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:103:in `fork&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:103:in `wet_run&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:61:in `run&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/application.rb:58:in `run&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/applications/browser.rb:76:in `open&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy.rb:30:in `open&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:49:in `start&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/rack-1.2.2/lib/rack/handler/thin.rb:13:in `run&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:46:in `start&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/rack-1.2.2/lib/rack/server.rb:100:in `start&#39;
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:99:in `execute_with_options&#39;
&#62;&#62; Thin web server (v1.2.11 codename Bat-Shit Crazy)
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdstk/cli_cdstk.rb:73:in `execute&#39;
&#62;&#62; Maximum connections set to 1024
&#62;&#62; Listening on 127.0.0.1:9292, CTRL+C to stop
        from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/bin/milk:10
        from /usr/local/bin/milk:19:in `load&#39;
        from /usr/local/bin/milk:19
</pre>

<p>とりえず起動しますが、Listenしているアドレスが、<span style="font-weight:bold;" class="deco">127.0.0.1</span>になっています。ローカルで起動していればよいですが、リモートで起動しているのでこれだと外部からHTTPで見ることができません。</p>
<p>また、ブラウザも自動起動するような設定になっているので起動オプションで設定します。</p>
<pre>
 $ milk web --help
milk web
        --db DB_DIR                  Database dir (default : current_dir)
    -o, --host HOST                  listen on HOST (default: 127.0.0.1)
    -p, --port PORT                  use PORT (default: 9292)
    -s, --server SERVER              serve using SERVER (default : thin)
    -n, --no-browser                 No launch browser.
    -h, -?, --help                   Show this message
 $ milk web --host 0.0.0.0 -n
</pre>

<p>これで、<a href="http://hostname:9292/" target="_blank">http://hostname:9292/</a> へアクセスすればOKです。ただし、認証がかけられないのでiptablesなどでアクセスできるIPアドレスを縛ったほうがいいかもしれません。</p>
<p>さて、ちょっと使ってみましたがこれがまた便利です。過去に自分がかいたクラスなんかはよく忘れるのですがそういったものの検索にもってこいですね。ソースコードはうちはgitで管理をしているので、何らかのタイミングでDatabaseをupdateするような仕組みをつくるといいかなーなんて考えています。</p>
<p># git pushしたら、milkodeのDBをupdateするような仕組みにしたらちょっと便利そうですね。</p>
<h4> nanapiを一緒に作ってくれるメンバーを募集しています！</h4>
<p><a href="http://rocketstart.co.jp/recruit/engineer.html" target="_blank">Webアプリケーションエンジニア募集 | 株式会社ロケットスタート </a></p>
<p><a href="http://rocketstart.co.jp/recruit/designer.html" target="_blank">Webデザイナー / UI / ユーザーエクスペリエンス募集 | 株式会社ロケットスタート</a></p>
</div>
]]></content:encoded>
<dc:creator>wadap</dc:creator>
<dc:date>2011-08-07T17:11:39+09:00</dc:date>
<dc:subject>Linux</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/wadap/20110217/1297900704">
<title> パソナテック様主催のDevcon2011 vol2に登壇します</title>
<link>http://d.hatena.ne.jp/wadap/20110217/1297900704</link>
<description> なかなかBlogが更新できていませんが・・・こんなイベントに登壇します。 Devcon 2011 Vol.2 2011年のWebサービスと技術を大展望｜パソナテック（PASONA TECH） 40分の講演＋パネルディスカッションです。nanapiのシステムについて、結構突っ込んだお話をしようと思っていま</description>

<content:encoded><![CDATA[
<div class="section">
<p>なかなかBlogが更新できていませんが・・・こんなイベントに登壇します。</p>
<p><a href="http://www.pasonatech.co.jp/devcon_2/" target="_blank">Devcon 2011 Vol.2 2011年のWebサービスと技術を大展望｜パソナテック（PASONA TECH）</a></p>
<p>40分の講演＋パネルディスカッションです。nanapiのシステムについて、結構突っ込んだお話をしようと思っています。まだ若干席が空いているようなので、興味ある方は是非！</p>
</div>
]]></content:encoded>
<dc:creator>wadap</dc:creator>
<dc:date>2011-02-17T08:58:24+09:00</dc:date>
</item>
<item rdf:about="http://d.hatena.ne.jp/wadap/20101025/1288017265">
<title>[Linux] mod_proxy_balancer配下で、cakephpのredirectを使う場合の注意点</title>
<link>http://d.hatena.ne.jp/wadap/20101025/1288017265</link>
<description> おてがるにバランシング mod_proxy_balancerを使うと、普段から使い慣れているapacheでお手軽にロードバランシングを行うことができます。 設定もものすごく簡単ですね。Virtualhostの中に書くこともできるので、NameVirtualを使ったL7バランシングをすることも可能です。 &amp;</description>

<content:encoded><![CDATA[
<div class="section">
<h4> おてがるにバランシング</h4>
<p><span style="font-weight:bold;">mod_proxy_balancer</span>を使うと、普段から使い慣れているapacheでお手軽にロードバランシングを行うことができます。</p>
<p>設定もものすごく簡単ですね。Virtualhostの中に書くこともできるので、NameVirtualを使ったL7バランシングをすることも可能です。</p>
<pre>
&#60;Virtuslhost &#42;:80&#62;
    ServerName example.com
    ProxyPass / balancer://balancer/
    ProxyPassReverse / balancer://balancer/
    &#60;Proxy balancer://balancer&#62;
        BalancerMember http://localhost.localnet:8080
    &#60;/Proxy&#62; 
&#60;/Virtualhsot&#62;
</pre>

<p><a href="http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy_balancer.html" target="_blank">mod_proxy_balancer - Apache HTTP サーバ</a></p>
<p>すごくシンプルにやるとこんな感じになります。</p>
<p>このままでも動くのですが、<span style="font-weight:bold;">cakephp</span>と組み合わせると1点問題が生じました</p>
<h4> redirect後のURLがちょっとおかしい</h4>
<p>cakephpの controller内で利用することができる <span style="font-weight:bold;">$this-&#62;redirect()</span> を使うと1点問題が起きます。</p>
<pre>
 1. http://example.com/foo  (アクセスしたURL、ここから/bar へリダイレクトする）
 2. http://example.com//bar (リダイレクト後のURL）
</pre>

<p>上記のように、リダイレクト後のURLが/(スラッシュ)が二重に重なってしまいます。</p>
<p>まぁ動くのですがすごく気持ち悪いので対応策を考えてみました。</p>
<h4> ProxyPreserveHostディレクティブで解決</h4>
<p>なんか良い方法がないかなーとおもって探していたところ、本家におもいっきり回答が書いてありました。<span style="font-weight:bold;">ProxyPreserveHost</span>というディレクティブです。</p>
<blockquote>
<p>このオプションが有効になっている場合、ProxyPassで指定したホスト名の代わりに、受け付けたリクエストの Host: 行を プロキシ先のホストに送ります。</p>
<p>このオプションは通常は Off に設定してください。 ほとんどの場合、これは大量の名前ベースのバーチャルホスティングを行なっていて、 元々の Host ヘッダをバックエンドサーバが解釈する必要のあるときのような、 特別な設定が必要な場合にのみ有用です。</p>
</blockquote>
<p><a href="http://httpd.apache.org/docs/2.2/ja/mod/mod_proxy.html#proxypreservehost" target="_blank">mod_proxy - Apache HTTP サーバ</a></p>
<p>ああ、これこれまさにこれですよ。というわけでこれを1行だしてあげればOKです。</p>
<p><span style="font-weight:bold;">ProxyPassReverse</span>はいらなくなるので、完成した設定ファイルはこうなります。</p>
<pre>
&#60;Virtuslhost &#42;:80&#62;
    ServerName example.com
    ProxyPreserveHost On
    ProxyPass / balancer://balancer/
    &#60;Proxy balancer://balancer&#62;
        BalancerMember http://localhost.localnet:8080
    &#60;/Proxy&#62; 
&#60;/Virtualhsot&#62;
</pre>

<p>というわけで本日小一時間ほどハマってしまった内容でした。</p>
</div>
]]></content:encoded>
<dc:creator>wadap</dc:creator>
<dc:date>2010-10-25T23:34:25+09:00</dc:date>
<dc:subject>Linux</dc:subject>
</item>
<item rdf:about="http://d.hatena.ne.jp/wadap/20100828/1282984286">
<title>[emacs] -nw環境でspeedbarを使うなら、sr-speedbar.elが便利だよ</title>
<link>http://d.hatena.ne.jp/wadap/20100828/1282984286</link>
<description> エディタの設定はいつも悩みが付きまとうものですよね。私自身もいろいろなエディタを使ってきました。 その中で、最終的に落ち着いたエディタはemacsです。そんな私がemacsを使う際、絶対に手放せないツールのうちのひとつにspeedbarがあります。 speedbarがすごく便利 spe</description>

<content:encoded><![CDATA[
<div class="section">
<p>エディタの設定はいつも悩みが付きまとうものですよね。私自身もいろいろなエディタを使ってきました。</p>
<p>その中で、最終的に落ち着いたエディタは<span style="font-weight:bold;">emacs</span>です。そんな私が<span style="font-weight:bold;">emacs</span>を使う際、絶対に手放せないツールのうちのひとつに<a href="http://cedet.sourceforge.net/speedbar.shtml" target="_blank">speedbar</a>があります。</p>
<h4> speedbarがすごく便利</h4>
<p><a href="http://f.hatena.ne.jp/wadap/20100828170708" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/w/wadap/20100828/20100828170708.jpg" alt="f:id:wadap:20100828170708j:image" title="f:id:wadap:20100828170708j:image" class="hatena-fotolife"></a></p>
<p><span style="font-weight:bold;">speedbar</span>を使うとこのように左側にファイルやディレクトリを操作するメニューをだしてくれます。また、関数リストなどもだしてくれるためファイル内の移動がすごく楽になります。</p>
<h4> -nw 環境でも使いたい</h4>
<p>しかし、そもそも<span style="font-weight:bold;">emacs</span>をつかようになった最終的な理由はサーバサイドで開発をしたいからでした。どこでも同じ環境で開発ができることや、携帯の実機テストが多くなったのが原因です。</p>
<p>しかし、サーバサイドで<span style="font-weight:bold;">speedbar</span>を使うとメニューを使う際画面が切り替わります。これが結構不便でした。</p>
<h4> el-speedbar.elを入れて全部解決！</h4>
<p><a href="http://f.hatena.ne.jp/wadap/20100828170709" class="hatena-fotolife" target="_blank"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/w/wadap/20100828/20100828170709.jpg" alt="f:id:wadap:20100828170709j:image" title="f:id:wadap:20100828170709j:image" class="hatena-fotolife"></a></p>
<p>いろいろと試行錯誤した末、みつけたのが<a href="http://www.emacswiki.org/emacs/sr-speedbar.el" target="_blank">sr-speedbar.el</a>です。ターミナル内でも同じ感覚で<span style="font-weight:bold;">speedbar</span>を利用することができるようになりました。</p>

<ul>
<li><a href="http://www.emacswiki.org/emacs/sr-speedbar.el" target="_blank">EmacsWiki: sr-speedbar.el</a></li>
</ul>
<h4> sr-speedbar.elを使うには</h4>
<p>使うのは簡単です。<span style="font-weight:bold;">sr-speedbar.el</span>を読めば大体書いてあります。パスが通っているディレクトリに<span style="font-weight:bold;">sr-speedbar.el</span>を放り込んでください。あとは<span style="font-weight:bold;">.emacs</span>に1行かくだけです。</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">require</span> <span class="synSpecial">'</span><span class="synIdentifier">sr-speedbar</span><span class="synSpecial">)</span>    
</pre>

<p>デフォルトでメニューは右側に表示されてしまうので、左側に出したい場合は下記の1行を追加すればOK。</p>
<pre class="syntax-highlight">
<span class="synSpecial">(</span><span class="synStatement">setq</span> sr-speedbar-right-side <span class="synStatement">nil</span><span class="synSpecial">)</span> 
</pre>

<p>その他の設定も（メニューの幅など）も、ソース読めばなんとなくわかると思います。便利ですよー。</p>
<h4> 参考</h4>

<ul>
<li><a href="http://www.emacswiki.org/emacs/sr-speedbar.el" target="_blank">EmacsWiki: sr-speedbar.el</a></li>
</ul>
</div>
]]></content:encoded>
<dc:creator>wadap</dc:creator>
<dc:date>2010-08-28T17:31:26+09:00</dc:date>
<dc:subject>emacs</dc:subject>
</item>
</rdf:RDF>

