2011-10-11
$form->dateTime() で表示される西暦を昇順にする方法
formヘルパーで普通に書いてしまうと、西暦は降順で表示されますよね。
<?php echo $form->dateTime('date','YMD',null,null,array('minYear'=>'1971','maxYear'=>'2000')); ?>
ただ、生年月日の入力など昇順で表示するようなケースが多いと思います。どうやればいいのかなーとソースよんでみたら、どうやらオプションで簡単にできるようでした。
<?php echo $form->dateTime('date','YMD',null,null,array('minYear'=>'1971','maxYear'=>'2000','orderYear'=>'asc')); ?>
と記述するだけで簡単に昇順に変更することができます。
2011-08-07
ソースコード検索ツール milkode をつかってみた
数万のソースコードから目的の一行を一瞬で見つけ出す、Milkode - おんがえしの日記
先日、はてブで話題になっていたこちらをつかってみました。用途は主に自社サービス「nanapi」の開発で使おうと思っています。nanapiを開発してからすでに2年近く経過していますが、2年も経つとどうしてもあれはどこにいったっけ・・・というようなことが頻繁におきます。grep -rで必死に検索してきましたが、ひと通りファイルをなめるのでかなり遅いです。
そんなときのために、自分用のソースコード検索ツールができたときいて試してみました。
インストール〜起動まで
基本的には上記のままインストールすることができます。CentOS5.5(x86_64)で試しています。
$ sudo gem install
さて起動してみます
$ 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'
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'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require'
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'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require'
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'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require'
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'
from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:54:in `require'
from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/bin/milk:7
from /usr/local/bin/milk:19:in `load'
from /usr/local/bin/milk:19
どうやらライブラリにパスが通ってないようで。とりあえず環境変数で逃げます。
$ export LD_LIBRARY_PATH=/usr/local/lib/ruby/gems/1.8/gems/rroonga-1.2.4/vendor/local/lib/ $ milk milk COMMAND [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.
と、これで動作するようになりました。次はソースコードの登録です。
$ milk init --default $ milk add ~/src
これで、検索するソースコードが登録できました。あとはWebサーバを起動すればOKっぽいです。
$ 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': undefined method `shellsplit' 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'
from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:103:in `fork'
from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:103:in `wet_run'
from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/detect/runner.rb:61:in `run'
from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/application.rb:58:in `run'
from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy/applications/browser.rb:76:in `open'
from /usr/local/lib/ruby/gems/1.8/gems/launchy-2.0.5/lib/launchy.rb:30:in `open'
from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:49:in `start'
from /usr/local/lib/ruby/gems/1.8/gems/rack-1.2.2/lib/rack/handler/thin.rb:13:in `run'
from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:46:in `start'
from /usr/local/lib/ruby/gems/1.8/gems/rack-1.2.2/lib/rack/server.rb:100:in `start'
from /usr/local/lib/ruby/gems/1.8/gems/milkode-0.1.9/lib/milkode/cdweb/cli_cdweb.rb:99:in `execute_with_options'
>> 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'
>> Maximum connections set to 1024
>> 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'
from /usr/local/bin/milk:19
とりえず起動しますが、Listenしているアドレスが、127.0.0.1になっています。ローカルで起動していればよいですが、リモートで起動しているのでこれだと外部からHTTPで見ることができません。
また、ブラウザも自動起動するような設定になっているので起動オプションで設定します。
$ 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
これで、http://hostname:9292/ へアクセスすればOKです。ただし、認証がかけられないのでiptablesなどでアクセスできるIPアドレスを縛ったほうがいいかもしれません。
さて、ちょっと使ってみましたがこれがまた便利です。過去に自分がかいたクラスなんかはよく忘れるのですがそういったものの検索にもってこいですね。ソースコードはうちはgitで管理をしているので、何らかのタイミングでDatabaseをupdateするような仕組みをつくるといいかなーなんて考えています。
# git pushしたら、milkodeのDBをupdateするような仕組みにしたらちょっと便利そうですね。
nanapiを一緒に作ってくれるメンバーを募集しています!
2011-02-17
パソナテック様主催のDevcon2011 vol2に登壇します
なかなかBlogが更新できていませんが・・・こんなイベントに登壇します。
Devcon 2011 Vol.2 2011年のWebサービスと技術を大展望|パソナテック(PASONA TECH)
40分の講演+パネルディスカッションです。nanapiのシステムについて、結構突っ込んだお話をしようと思っています。まだ若干席が空いているようなので、興味ある方は是非!
2010-10-25
mod_proxy_balancer配下で、cakephpのredirectを使う場合の注意点
おてがるにバランシング
mod_proxy_balancerを使うと、普段から使い慣れているapacheでお手軽にロードバランシングを行うことができます。
設定もものすごく簡単ですね。Virtualhostの中に書くこともできるので、NameVirtualを使ったL7バランシングをすることも可能です。
<Virtuslhost *:80>
ServerName example.com
ProxyPass / balancer://balancer/
ProxyPassReverse / balancer://balancer/
<Proxy balancer://balancer>
BalancerMember http://localhost.localnet:8080
</Proxy>
</Virtualhsot>
mod_proxy_balancer - Apache HTTP サーバ
すごくシンプルにやるとこんな感じになります。
このままでも動くのですが、cakephpと組み合わせると1点問題が生じました
redirect後のURLがちょっとおかしい
cakephpの controller内で利用することができる $this->redirect() を使うと1点問題が起きます。
1. http://example.com/foo (アクセスしたURL、ここから/bar へリダイレクトする) 2. http://example.com//bar (リダイレクト後のURL)
上記のように、リダイレクト後のURLが/(スラッシュ)が二重に重なってしまいます。
まぁ動くのですがすごく気持ち悪いので対応策を考えてみました。
ProxyPreserveHostディレクティブで解決
なんか良い方法がないかなーとおもって探していたところ、本家におもいっきり回答が書いてありました。ProxyPreserveHostというディレクティブです。
このオプションが有効になっている場合、ProxyPassで指定したホスト名の代わりに、受け付けたリクエストの Host: 行を プロキシ先のホストに送ります。
このオプションは通常は Off に設定してください。 ほとんどの場合、これは大量の名前ベースのバーチャルホスティングを行なっていて、 元々の Host ヘッダをバックエンドサーバが解釈する必要のあるときのような、 特別な設定が必要な場合にのみ有用です。
ああ、これこれまさにこれですよ。というわけでこれを1行だしてあげればOKです。
ProxyPassReverseはいらなくなるので、完成した設定ファイルはこうなります。
<Virtuslhost *:80>
ServerName example.com
ProxyPreserveHost On
ProxyPass / balancer://balancer/
<Proxy balancer://balancer>
BalancerMember http://localhost.localnet:8080
</Proxy>
</Virtualhsot>
というわけで本日小一時間ほどハマってしまった内容でした。
2010-08-28
-nw環境でspeedbarを使うなら、sr-speedbar.elが便利だよ
エディタの設定はいつも悩みが付きまとうものですよね。私自身もいろいろなエディタを使ってきました。
その中で、最終的に落ち着いたエディタはemacsです。そんな私がemacsを使う際、絶対に手放せないツールのうちのひとつにspeedbarがあります。
speedbarがすごく便利
speedbarを使うとこのように左側にファイルやディレクトリを操作するメニューをだしてくれます。また、関数リストなどもだしてくれるためファイル内の移動がすごく楽になります。
-nw 環境でも使いたい
しかし、そもそもemacsをつかようになった最終的な理由はサーバサイドで開発をしたいからでした。どこでも同じ環境で開発ができることや、携帯の実機テストが多くなったのが原因です。
しかし、サーバサイドでspeedbarを使うとメニューを使う際画面が切り替わります。これが結構不便でした。
el-speedbar.elを入れて全部解決!
いろいろと試行錯誤した末、みつけたのがsr-speedbar.elです。ターミナル内でも同じ感覚でspeedbarを利用することができるようになりました。
sr-speedbar.elを使うには
使うのは簡単です。sr-speedbar.elを読めば大体書いてあります。パスが通っているディレクトリにsr-speedbar.elを放り込んでください。あとは.emacsに1行かくだけです。
(require 'sr-speedbar)
デフォルトでメニューは右側に表示されてしまうので、左側に出したい場合は下記の1行を追加すればOK。
(setq sr-speedbar-right-side nil)
その他の設定も(メニューの幅など)も、ソース読めばなんとなくわかると思います。便利ですよー。




