雑記

2000|01|
2003|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|
2007|01|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|09|11|
2009|02|03|05|06|07|08|10|11|12|
2010|01|03|04|05|06|07|08|09|10|
2011|05|06|09|10|
2012|03|07|09|12|
2013|01|02|04|05|07|08|10|11|
2014|04|05|08|10|12|
2015|01|05|
2016|09|

2004-03-06

引越し

これまでの住まいは今日から電話が使えないことをすっかり忘れており、あわてて予定を1日早め、今日から新居に寝泊りすることに。少なくとも月曜まではダイアルアップ生活です。昼の搬送作業では適当に荷物を入れてもらったため布団のスペースを確保するだけでも大変でした。

本日のツッコミ(全3件) [ツッコミを入れる]

- taru_k [引越しお疲れさま。ネットワーク早くなりましたね。快適。]

- hs [それはプラシーボ効果です:-)。 ダイアルアップ生活と言うのは新居に電話以外の回線が開通していないためで、工事は明日..]

- taru_k [なんと…気は心か。]


2005-03-06

F1 オーストラリアGP決勝

今宮外し進行中? 川井ちゃんもちょっと困ってたような気がするのですが、去年もあんな感じだったんでしょうか。あと、ノンCM初体験は準備不足でつらかった。次戦からはちゃんと準備を整えないと。

さてレースですが、スタート前にまたもや新ルール発動。テレビ放映を意識してのルール変更のようですが、ちょっとせわしない。レースで一番印象に残ったのはクルサードの頑張り。最後のほうで抜かれたのは残念でしたが、あれが精一杯でしょうか。失速といえばトヨタ。トゥルーリはいきなり表彰台かと思っていたら、ずるずると後退してしまいました。ピット戦略ミスなのか、マシンの実力なのか。ホンダも期待はずれでしたが、なんかVの字の付くカナディアン・ペースメーカーに押さえ込まれた印象が強かったので、トヨタほどひどくないのかなと思ってます。バトンのベストラップは5番手ですし。とはいえ、Vの字をぶち抜けるほどの差はないというのが今の実力といったところでしょうか。そのホンダは、ペナルティ無しで次戦エンジン交換するために、ラス前の週でわざとピットストップしてチェッカーを受けなかったそうですが、これが通ると今後ポイント圏外のチームはこぞって真似するでしょうね。ライブドアの時間外取引みたいでちょっといや〜ん。フェラーリはシュー兄こそリタイヤでしたが、バリチェロは11番手からしっかりと2位表彰台。解説陣は2005年マシンの早期投入とか言ってましたが、むしろ去年のマシンであのパフォーマンスならまったく問題ない印象。ルノーのフィジケラは順当として、アロンソの13番手から3位表彰台というのは、今の時点でフェラーリとルノーが互角かそれ以上という実力の現れか。Vの字をぶち抜けないホンダとルノーの差はだいぶ開いていそうです。ミナルディは相変わらず。ジョーダンはドライバーの腕によるところが大きいような気がするのですが、どうなんでしょうか。ウィリアムズ・マクラーレンは地味でしたね。ウェバーは頑張ってましたが、他の3人はトラブルの時に映っただけ。緒戦を見ての戦力分析は2強2弱であとは団子?ってあれ、どこかで聞いたような。。。

で、「レース」を期待しての各種レギュレーション変更でしたが、結局順位変動があったのはピットストップがほとんどで、去年とかわり映えのしないレース展開でした。これでホンダの作戦が功を奏したりすると、ポイント的には接近しても、レースとしてはますますつまらない方向に行ってしまいますね。タイヤについては夏になってみないとなんとも。結局のところ、今回のようなレース展開でスピンだけが増えそうな気もしないではないですが。予選については、今回は例外的なケースなので態度保留。

伊右衛門大人買い

黒は1/24の確率らしい。

本日のツッコミ(全5件) [ツッコミを入れる]

Before...

- hs [そっか。スタート前のイエローとバージボード壊れた印象しか残ってませんでした。それ以外映ってなかったし。]

- taru_k [この前,伊右衛門のペットボトルがグニャグニャだってはなしになったけど,自販機用と店頭売り用でボトルが違うみたいね.h..]

- hs [確かに、箱に赤字で「自動販売機では販売できません」って書いてあります。]


2010-03-06

[Rails] select_datetimeにタイムゾーン選択オプションを追加するプラグイン

を作ったので公開しました。Viewに

<p><%= select_datetime Time.now, { :include_timezone => true } %></p>
<p><%= select_datetime Time.now, { :include_seconds => true, :include_timezone => true } %></p>
<p><%= select_timezone %></p>

のように書くと、

といったフォームが表示され、入力された値はconfig/environment.rbで設定されたタイムゾーン等に従って適当に変換されます。

ActiveRecordとの連携はこれでいいのですが、検索とかに使う場合はコントローラ側で値を取りだしたくなります。そのためのメソッドが、get_multiparameter_attributes()とget_multiparameter_time()です。 get_multiparameter_attributes()は、Multiparameter attributeを配列に変換します。

% script/console
Loading development environment (Rails 2.3.5)
>>    params = {
?>        :datetime => {
?>            "label(1i)" => "2010", "label(2i)" => "1", "label(3i)" => "1",
?>            "label(4i)" => "0", "label(5i)" => "0", "label(6i)" => "0",
?>            "label(7i)" => "+0900"
>>        }
>>    }
=> {:datetime=>{"label(3i)"=>"1", "label(4i)"=>"0", "label(5i)"=>"0", "label(6i)"=>"0", "label(7i)"=>"+0900", "label(1i)"=>"2010", "label(2i)"=>"1"}}
>> ActionController::Base.new.get_multiparameter_attributes(params[:datetime], "label")
=> [2010, 1, 1, 0, 0, 0, 900]

また、get_multiparameter_attributes()はdatetimeに限らず任意の Multiparameter attributeを配列に変換できます。変換ルールはActiveRecord::Baseのtype_cast_attribute_valueメソッドに準拠しています。

>>     input1 = {
?>       "test(1i)" => "10", "test(2)" => "string", "test(3f)" => "3.14", "test(4i)" => "3.14",
?>       "test(5i)" => "g", "test(6f)" => "g", "test(7i)" => "1g", "test(8f)" => "3.14g"
>>     }
=> {"test(8f)"=>"3.14g", "test(1i)"=>"10", "test(2)"=>"string", "test(4i)"=>"3.14", "test(7i)"=>"1g", "test(5i)"=>"g", "test(6f)"=>"g", "test(3f)"=>"3.14"}
>> ActionController::Base.new.get_multiparameter_attributes(input1, "test")
=> [10, "string", 3.14, 3, 0, 0.0, 1, 3.14]

get_multiparameter_time()はより直接的に、View内のselect_datetimeなどから得られた入力をRailsのTime型に変換した物を取得します。

% script/console
Loading development environment (Rails 2.3.5)
>>    params = {
?>        :datetime => {
?>            "label(1i)" => "2010", "label(2i)" => "1", "label(3i)" => "1",
?>            "label(4i)" => "0", "label(5i)" => "0", "label(6i)" => "0",
?>            "label(7i)" => "+0900"
>>        }
>>    }
=> {:datetime=>{"label(3i)"=>"1", "label(4i)"=>"0", "label(5i)"=>"0", "label(6i)"=>"0", "label(7i)"=>"+0900", "label(1i)"=>"2010", "label(2i)"=>"1"}}
>> ActionController::Base.new.get_multiparameter_time(params[:datetime], "label")
=> Fri, 01 Jan 2010 00:00:00 JST +09:00

注意点として、これらを使ってデータベース内のタイムスタンプ等を検索する場合、得られたTime型の変数をデータベース内で保存されるタイムゾーンに変換する必要があります。手元のRails 2.3.5+sqlite3という環境ではRailsのconfig.time_zoneの設定によらず、データベースに対してはUTCで保存されていたので、findを掛けるときにutcメソッドで変換する必要がありました。

ts = get_multiparameter_time(params[:search_keys], "timestamp").utc
Log.find(:first, :conditions => ["ip_addr = ? AND recorded_at <= ?", params[:search_keys][:ip], ts, :order => "recorded_at DESC")

UTC以外のタイムゾーンに変更する場合は、in_time_zoneメソッドを使用します。

ts = get_multiparameter_time(params[:search_keys], "timestamp").in_time_zone('Tokyo')

引数に指定可能なタイムゾーン名は"rake time:zones:all"で調べることができます。

おまけ

選択フォームの代わりにテキストフィールドを使う場合、Viewで

<%= text_field "search_keys", "timestamp_text" %>

とやっておいて

ts = DateTime.parse(params[:search_keys][:timestamp_text]).utc