時報を見てからふとPCの時計を見ると、1分も進んでいた。
ルータ(FreeBSD)で動かしているntpdに合わせてるんだけども、ルータにsshしてdateしてみるとこっちも1分進んでいる。あれぇ?
とりあえずntpの状況を確認しようとntpq -p。
ntpq: write to localhost failed: Network is unreachable
はいー?

More »

「Rubyによるデザインパターン」読了。
GoFを読んだこともないへたれプログラマですいません。
だいたいあの長ったらしい邦題(「オブジェクト指向における再利用のためのデザインパターン」だっけ?)はなんなの。冷凍食品とか台所用品じゃあるまいし。「おばあちゃんがじっくりコトコト煮込んだ炎上プロジェクト」みたいな。
閑話休題、この本は大変分かりやすいばかりか、ところどころにウィットに富んだジョークが散りばめられていて楽しく読めました。例えば、Compositeパターンの説明で、ケーキの製造工程を小麦粉一粒ずつまで分解するというくだりには吹き出してしまった(電車の中で)。技術書にそんなもんいらん、という気難しい人には逆につらいかも。
Rubyの基礎も一応説明してるけど、どっちかと言うと「Rubyを知ってる人にデザパタを解説する」本ですね、どう見ても。そうでないのは巻末のDSLとかCoCくらいか。

最近、目を離すとWindowsのFirefoxがクラッシュしていることがよくあるので、改善を図ってFirefox 3.6.4 Lorentzをインストールしてみた。
Mac版の方も3.6.4でプロセス分離が実装されたのかな?
Macの方はクラッシュはしないけど、CPU使用率が跳ね上がったままになることが多いのでこっちも切り替えてみる。
今のところ、アドオンまわりで特に互換性問題は起きてない様子。

More »

20. 4月 2010 · Write a comment · Categories: Git

gitのブランチでちょっとハマった。
% git checkout -b ng
でブランチを切ってコミットして
% git push origin ng
でリモートに投げる。ここまでは良かった。
んで他のマシンに移って
% git pull origin ng
したらmasterにmergeされてしまった!がーん。

他のリポジトリにブランチとして取り込むには、いったん
% git checkout -b ng
してからpullすれば上手くいくんだけど、いちいちローカルでも同じ操作するって変じゃないか?
なんか勘違いしてそうだなぁ。ううむ。
ちなみにmergeする前に戻すには、git logでハッシュタグを調べてから
% git reset –hard [ハッシュタグ]
でおk。
% git checkout HEAD^
でもいいか。(戻すバージョンの数だけ^をつける)

rebaseとかgitらしい機能は全然使いこなせてないです。

とりあえず4月分の技術ネタ一式をmixiからコピペしました。

3月以前のもぼちぼちコピペしていこうと思うけど、あんま過去まで遡ると恥ずかしいコードを公開してしまうので価値のあまりない古い情報まで載せてしまうので適当なところでやめます。

ちなみにタイトルはイタリア語です。意味はググれ。

外部ブログを使おうと思って色々見て回ったけど、自分で色々試したいので自前のサーバでWordPressを運用することにした。
と言うわけでプラグインを入れまくる。

まず、ソースを書いたりしたかったのでsyntax highlighter
http://wppluginsj.sourceforge.jp/syntax-highlighter/
入れてから気づいたけどLISPに対応してない。がーん。いや.emacsくらいしか書きませんけど。

誰も気づいてくれないと寂しくて死んじゃうのでGoogle XML Sitemap
http://www.arnebrachhold.de/redir/sitemap-home/

素敵な本を紹介したいので(棒読み)Amazon Widget Shortcodes
http://case.oncle-tom.net/code/wordpress/

実は使い方がよく分かってないので試しに貼ってみよう。

お、でけた。

最後にtwitterの公式ウィジェットをsidemenuに埋め込んで終わり。
→ウィジェットから「テキスト」で貼り付けるように変更。

Hyper Estraierとpaginateの組み合わせ。
ちなみに未だにwill_paginateを使ってます。ぬるくてすいません。
単に検索結果をpaginateしたいだけなら

Item.paginate(params[:query], :page => params[:page], :per_page => 10, :total_entries => Item.count_fulltext(params[:query]), :finder => 'fulltext_search')

でいいんだけど、その他の条件を加えるととたんに面倒になる。
ログインしている時以外は、公開ビット(Item.pub)の立ってるエントリだけをヒットするようにしたかったんだが、こんなになってしまった。

ids = Item.matched_ids(params[:query])
unless logged_in?
Item.paginate(:page => params[:page], :per_page => 10, :conditions => ["#{Item.table_name}.id IN (?) AND #{Item.table_name}.pub = ?", ids,  true])
end

(else以下は略)

ダサい。猛烈にダサい。困った。
pub:boolが邪魔な気もするけど、他に代案もないし。うーん。

railsで全文検索するのに、LIKEを使うだけのぬるーい実装をしてたんだけど(SQLをごりごり書こうとしたらこんがらがったのでやめた)、もうちょっとスマートにやる方法を考えてみる。
色々調べたところ、Hyper Estraierとsearch_doプラグインを使うのが一般的らしい(と言っても情報は少なめ)。

というわけで既存のプロジェクトで実験してみた。
基本的には
http://d.hatena.ne.jp/shunsuk/20090406/1239020647
の通りで動いたけど、ノードについてはデフォルトのままmodel名を後にくっつける(xxxx_itemみたいな)形式にした。複数のmodelを検索する場合はその方が良いと思う。
キーワード一つだけの検索はすぐできたんだけど、ANDやOR検索がうまく行かない。search_doのドキュメントは放置状態で何もない。しょうがないのでプラグインのソースを読む。やっぱり分からない。(ダメじゃん)
答えはHyper EstraierのAPIドキュメントにあった。AND/OR/ANDNOTではなく、&/|/!を使えば良かった。
ちなみにmodelを更新すると自動的にreindexされるので、sweeperに仕込んだりする必要はなかった。
他のクエリやwill_paginateと連動させる予定だけど、そのへんは次回。

Snow LeopardでNTFSを読み書き可能マウントする方法。

デフォルトだとread onlyなんだけど、内部的にはrw可能になっている。
UIDをfstabに書いてやるというのが一般的なやり方だけど、これだとディスクが増えるごとに書き加えないといけない。
そこで、/sbin/mount_ntfsをmount_ntfs.binにリネームして、mount_ntfsという名前のシェルスクリプトを書いてしまう。内容は以下の通り。


#!/bin/sh
/sbin/mount_ntfs.bin -o rw "$@"

これで問題なく読み書きできる。

セキュリティアップデートでmount_ntfsが書き換わって動作しなくなってたのでメモ。

mod_proxyでmongrelに飛ばしてる環境下で、301でリダイレクトしたいんだけどhttpd.confに書いても成功しない。

(当然だけど、ディレクティブを無視してmongrelに丸投げされてしまう)
rails内で301にするには


redirect_to(url_for(:controller => "items", :action => "index"), :status => 301)

とすればいいらしい。(:statusを付けないと302になるので注意)
要するに古いURLを辿ってくる人が多いから誘導したいだけなんだけどね…もっとkoolな解決策はないものか。