雑記

ある地域の時刻を取得するというのは結構厄介な問題だなぁという話

ある地域の時刻を取得するというのは結構厄介な問題だなぁと思う事案に出会ったのでメモを書いておきます。

お題)
昨日の日付を求めるプログラムを作成せよ。

前の日というのは今日が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引くのが早いようで

 

Posted by issei

Category : 雑記

艦これ 弥生ゲット

艦これ 如月

今更感がありますが、資源ずっと貯めてたから北方海域や西方にあまりまともに出撃してなかったので。

これで編成クエを進めることができる。久しぶりのニューフェイス(除くまるゆ)

Posted by issei

Category : 雑記

Railsで直接Controllerを叩いてrenderの結果を得る方法

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が邪魔になることってあるんですよね。知ってて損は無いと思いますよ。

Posted by issei

Category : 雑記

社内からGoogle Playに接続すると香港と認識されてしまう件

Nexus516GBGooglePlay20140212130122png-7o0ck941uzzu.png最近IPアドレスで国や地域を識別するサイトが多いわけですが、弊社のIPはGoogle的には香港と判断されていることが判明。これHK$で買うことが出来て出荷も日本にしてくれるのかしら?と思ってボタンを押して先に進んでみたところ、配送先がHongKong Island、Kowloon, New territoriesしかなかった。ダメじゃん

で、パケットのログみるとIPv6でつながってるんだよなー。IPv6で飛ばないようにいじれば直るのかもしれないけど、IPv6って国や地域単位ででっかいスコープで割り振ってるんじゃなかったけ?これはクレームを付けたいところなんですが、どこからつければいいのかすら分からない。困ったもんだ。

 

Posted by issei

Category : 雑記

citibankからワンタイムパスワードのトークンが届いた

citibank OTP大雪の中citibankからワンタイムパスワードのトークンが来ました。ボタンは沢山あるけれど、結局必要なのは右下の電源ボタンだけみたいですね。これ押したらワンタイムパスワードが表示されると。他は冗長。その点JNBはパスワードが表示されるだけのシンプルなものでよかったなぁ。

セキュリティとか言い始めるとこういうシステムが有効なんだろうけど持ち運ぶものが増えて利便性は下がりますよね。もっともcitibank自体アカウントを作ったのはいいけれど、ネットのインターフェイスが使いにくく結局殆ど使ってないので(当初予定していた外貨預金や投信も結局使ってないし)、このトークンも箱入り娘としてどこかに保管される運命になりそう。そういう意味では邪魔にならない代物ですが。

Posted by issei

Category : 雑記

両国郵便局

両国郵便局両国郵便局は墨田区(両国駅のあるところ)に無いことに気がつきました。

区境マニアとして気がつくのが遅すぎた感。

京橋郵便局が京橋に無いくらいアツイですね。これは。

ちなみに両国郵便局は隅田川の右岸、両国橋の近くに存在します。ここは中央区。なお両国という住所は存在しないので、両国橋のたもとという点では間違ってないですね。駅的には両国より浅草橋のほうが遥かに近いです。

Posted by issei

Category : 雑記

FreeBSD 10.0-RELEASEアプグレードのまとめ

OSのアプデート

# freebsd upgrade -r 10.0-RELEASE

あとはメッセージにしたがう。

ports

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は完全削除でいいような気もするが・・

Posted by issei

Category : 雑記

最近の艦これ

DMMcom20140128192653png-78t29o9fh429.png

ボーキサイトがなかなか10万の大台に乗りません・・・・(遊び方がちがうw

Posted by issei

Category : 雑記

青森空港へ

crystal2png-57pmllh6vraj.png

JAL1201便にて。朝早いから眠いわー。どうでもいいけれど、今日から久しぶりのCRYSTAL。ちょっとだけ多くマイルが溜まるかな?

Posted by issei

Category : 雑記

ブログサイトをリニューアル

何度かバージョンアップを繰り返しているこの日記サイトですが、この度Rails4.Xで書き換えました。ついでにデザインも一新。といっても bootstrapベースなんでどこかで見たようなサイトのデザインになってるのが残念ですが、まぁそのあたりは気にしない。

編集画面もちょっと格好良くなってるんですよ。(見れないけど・・・)

というのも、今更ながらオープンソースで公開しちゃおうか?という策がありまして、いろいろ書き直して、見た目も綺麗にしようかなと。

まだまだバグがありそうだけど、思い切ってえいやっと切り替えてみました。これから運用しつつ細かいバグを取ってく予定

Posted by issei

Category : 雑記