ほぼ雑記的メモ
ある地域の時刻を取得するというのは結構厄介な問題だなぁと思う事案に出会ったのでメモを書いておきます。
前の日というのは今日が1日だと面倒なんですよね。30だったり31だったり29だったり28だったりするんで。そこでついつい以下のようなコードを書いてしまったりすると。
now = Time.new.local now = now - 3600 * 24 #24hour puts now.strftime("%Y-%m-%d"))
だけどこれは問題があるんですよね。具体的にはロンドンで(タイムゾーンは英国夏時間)、今が 2012-10-28 23:30:00 ならば誤動作をします。ちょっと書き直して次のように実行してみれば分かると思うのですが
ENV['TZ'] = 'Europe/London' now = Time.local(2012,10,28,23,30,0) puts now.strftime("%Y-%m-%d") yesterday = now - 3600 * 24 #24hour puts yesterday.strftime("%Y-%m-%d")
なんと24時間前も10月28日です。
結論から先に言うとサマータイムを勘案してないからです。日本みたいに常にUTCから9時間進んでいる国にいると実感がないけれど、イギリスでは2012年は10/28の深夜1時に夏時間から冬時間い切り替わっています。よって10/28だけは1日が25時間あるわけです。よって、24時間引いても同じ日になってしまう時間があるわけです。
これは面倒でもうるう年を考慮して1引くのが早いようで
今更感がありますが、資源ずっと貯めてたから北方海域や西方にあまりまともに出撃してなかったので。
これで編成クエを進めることができる。久しぶりのニューフェイス(除くまるゆ)
Controller中で他のcontrollerと actionを叩いてその結果を得ることが出来たら便利だと思いませんか?例えば HogeControllerと MogeCotrollerがあって、Hoge#fooが呼ばれたときに Moge#barが呼ばれたときと同じ結果を出したいとか。 これは Moge.new.barとかやってもうまくいきませんが、次のようにすると出来ます。
MyApp::Application.routes.call('REQUEST_METHOD' => 'GET', 'rack.input' => '', 'SCRIPT_NAME' => '', 'PATH_INFO' => path)[2].body
これでpathで示される場所に存在するcontrollerとアクションが起動し、その結果が文字列で帰ってきます。多分Rails3.1以上はこれでいいはず。ただし、これだとsessionやらcookieが渡されないので、それをも利用したい場合は次のように書けばよいでしょう。
options = request.env.dup options = options.select {|k| k == "HTTP_COOKIE" or k == "rack.session" } options = options.dup.merge('REQUEST_METHOD' => 'GET', 'rack.input' => '', 'SCRIPT_NAME' => '', 'PATH_INFO' => path) MyApp::Application.routes.call(options)[2].body
これでrotes.rbを書き換えずに、特定のpathと controller#actionが紐づいているように見えます。
「そんなやり方は邪道」とか「これはMVCモデルじゃねぇよ」とかいう声が聞こえてきそうですが、現実的にはMVCと綺麗に分離できることなんて稀だし、現実的には色々な要求があちこちからあるのでMVCが邪魔になることってあるんですよね。知ってて損は無いと思いますよ。
最近IPアドレスで国や地域を識別するサイトが多いわけですが、弊社のIPはGoogle的には香港と判断されていることが判明。これHK$で買うことが出来て出荷も日本にしてくれるのかしら?と思ってボタンを押して先に進んでみたところ、配送先がHongKong Island、Kowloon, New territoriesしかなかった。ダメじゃん
で、パケットのログみるとIPv6でつながってるんだよなー。IPv6で飛ばないようにいじれば直るのかもしれないけど、IPv6って国や地域単位ででっかいスコープで割り振ってるんじゃなかったけ?これはクレームを付けたいところなんですが、どこからつければいいのかすら分からない。困ったもんだ。
大雪の中citibankからワンタイムパスワードのトークンが来ました。ボタンは沢山あるけれど、結局必要なのは右下の電源ボタンだけみたいですね。これ押したらワンタイムパスワードが表示されると。他は冗長。その点JNBはパスワードが表示されるだけのシンプルなものでよかったなぁ。
セキュリティとか言い始めるとこういうシステムが有効なんだろうけど持ち運ぶものが増えて利便性は下がりますよね。もっともcitibank自体アカウントを作ったのはいいけれど、ネットのインターフェイスが使いにくく結局殆ど使ってないので(当初予定していた外貨預金や投信も結局使ってないし)、このトークンも箱入り娘としてどこかに保管される運命になりそう。そういう意味では邪魔にならない代物ですが。
両国郵便局は墨田区(両国駅のあるところ)に無いことに気がつきました。
区境マニアとして気がつくのが遅すぎた感。
京橋郵便局が京橋に無いくらいアツイですね。これは。
ちなみに両国郵便局は隅田川の右岸、両国橋の近くに存在します。ここは中央区。なお両国という住所は存在しないので、両国橋のたもとという点では間違ってないですね。駅的には両国より浅草橋のほうが遥かに近いです。
# freebsd upgrade -r 10.0-RELEASE
あとはメッセージにしたがう。
iconvとgettextまわり。/usr/ports/UPDATEING参照。
AFFECTS: 10-CURRENT users with any port depending on converters/libiconv AUTHOR: madpilot@FreeBSD.org 10-CURRENT after r254273 (committed on August 13, 2013) has an implementation of iconv enabled by default in libc. Due to this change some major overhauling of the ports tree has been necessary to move the ports to using that implementation. People using pkgng binary packages should have little problems, "pkg upgrade" will update all software to not depend on libiconv anymore, once updated packages are available. Please make sure to perform a "pkg autoremove" after that and check that libiconv is correctly removed by it. If you are using ports the update requires some manual intervention. The following procedure should be followed: # pkg query %ro libiconv >ports_to_update # pkg delete -f libiconv # cat ports_to_update | xargs portmaster or: # pkg query %ro libiconv >ports_to_update # pkg delete -f libiconv # cat ports_to_update | xargs portupgrade -f
10-CURRENTではiconvがlibcでサポートされているので、iconvを利用しているports/packageのリビルドが必要。converter/iconvが残っているとportsのリビルドに失敗する
その後gettextも以下の手順で更新する必要がある。先にgettextを削除しておかないと、
20130316: AFFECTS: users of converters/libiconv and devel/gettext AUTHOR: bapt@FreeBSD.org libiconv now handles the lib/charset.alias file instead of devel/gettext. If you are using pkgng 'and' upgrading from source with portupgrade or portmaster, first delete gettext, upgrade libiconv, then reinstall gettext. This will break sudo, so you *must* do this in a root shell (sudo -i) if you use sudo. # pkg delete -f devel/gettext # portmaster converters/libiconv devel/gettext or # pkg delete -f devel/gettext # portupgrade converters/libiconv devel/gettext
しかしこれをやってしまうと今度はglib20がビルドできなくなってしまう。理由は前述。今のところ libiconvが無いとビルドできないのがgimpくらいであるので、gimp使わないならlibiconvは完全削除でいいような気もするが・・
ボーキサイトがなかなか10万の大台に乗りません・・・・(遊び方がちがうw
JAL1201便にて。朝早いから眠いわー。どうでもいいけれど、今日から久しぶりのCRYSTAL。ちょっとだけ多くマイルが溜まるかな?
何度かバージョンアップを繰り返しているこの日記サイトですが、この度Rails4.Xで書き換えました。ついでにデザインも一新。といっても bootstrapベースなんでどこかで見たようなサイトのデザインになってるのが残念ですが、まぁそのあたりは気にしない。
編集画面もちょっと格好良くなってるんですよ。(見れないけど・・・)
というのも、今更ながらオープンソースで公開しちゃおうか?という策がありまして、いろいろ書き直して、見た目も綺麗にしようかなと。
まだまだバグがありそうだけど、思い切ってえいやっと切り替えてみました。これから運用しつつ細かいバグを取ってく予定