2014-03-01 [長年日記]
_ 花贈り男子の日
一緒に仕事しているジュン君が「3/14 花贈り男子の日」という記念日を制定しました。ホワイトデーの日に、男性からお花を贈ってみませんかというメッセージです。私もちょっとだけ応援しました。3/14にこの記念日がニュースになるといいなと思います。 http://www.kinenbi.gr.jp/
2014-03-02 [長年日記]
_ tDiary 4.0.3 + Ruby 2.1.1
tDiary 4.0.2 + Ruby 2.1.0 から tDiary 4.0.3 + Ruby 2.1.1 にバージョンアップした。tdiaryコミッタのみなさん、Rubyコミッタのみなさんいつもありがとうございます!
ついでにsakura VPS の環境をいろいろ整理。unicorn を graceful restart に対応させたり。
2014-03-03 [長年日記]
_ RubyConf台湾2014 へ行きたいML
情報交換用に作りました。 加入の方は rubyconftaiwan2014contingent at qwik.jp をTO:に、 igaiga じーめーる をCC:にしてメールしてください。
2014-03-05 [長年日記]
_ versioncake gem
APIを提供するアプリをRailsで作るので、APIバージョン管理に versioncake gem を使ってみることにした。(@hsbt さんに教えてもらった。thanks!)バージョンごとに json view ファイルを分割できるので便利。gemを使うほどかなー、とも思ったけど、どのくらい便利か試しに使ってみる。Rails4.1RC1で動作確認済。
早わかり
-
こんなURLでアクセスできるようになる(他にもパラメータでバージョン指定したりもできる)
-
view 以下にこのようにファイルを置いていく。アクセスされたAPIバージョンview がない場合、自動で最近のものを使う。(=viewが変更なければ変更不要)
- app/views/api/dummy/index.json.v1.jbuilder
- app/views/api/dummy/index.json.v2.jbuilder
-
controller は /api 以下に入れて、Api モジュールの中に入れるようにした
- 例: app/controllers/api/dummy_controller.rb , class Api::DummyController < ApplicationController
-
controller でアクセスされたバージョンを知るには derived_version を使う
Rails.logger.info "upper version v3!" if derived_version >= 3
- routes
# for versioncake gem
namespace :api do
scope 'v:api_version' do # Example: /v1/
get '/dummy/dummy' => 'dummy#index'
end
end
controller の中でAPIものはまとめてApiモジュールの中に入れるためにnamespace :api にしている。
- config/application.rb
module Appname
class Application < Rails::Application
# versioncake gem setting
config.versioncake.extraction_strategy = :path_parameter # /api/v1/ のようにバージョン情報をパスに入れる設定
config.versioncake.supported_version_numbers = (1...4) # 古いAPIバージョンを制限する場合などに使う
2014-03-06 [長年日記]
_ omniauth-identity
OmniAuth、twitter認証やfacebook認証が簡単に作れて便利ですね。omniauth-identity gem を使うと自前のパスワード認証も簡単につくれます。AsciiCast に解説もあっていたれりつくせり。
メールとパスワードの入力Webページは omniauth-identity が自動でつくってくれて便利ですが、APIからユーザーを作りたい場合にコントローラでどうすればいいのか調べたのでメモ。難しいことは何もなく、Identityモデルでpassword に代入する際にpassword_digestを計算して入れてるだけだった。
なので、
i = Identity.new(name: "igaiga", email:"igaiga@example.com", password: "igaigapass")
これでpassword_digest が代入されてる。あとは i.save! すればOK。
実際にやってるのは omniauth-identity gemの以下。
OmniAuth::Identity::SecurePassword::InstanceMethodsOnActivation#password=
def password=(unencrypted_password)
@password = unencrypted_password
if unencrypted_password && !unencrypted_password.empty?
self.password_digest = BCrypt::Password.create(unencrypted_password)
end
end
ところで、saltはないんですね。最近の認証システムにはsaltないなー、と思って調べてみた。
ここに詳しく書いてある。簡単に言うとこんな感じ。
- BCrypt::Password.create(unencrypted_password) をつかっている。
- これはsaltを保存しなくてよい仕組み。(中で自動生成)
- そもそもsalt は何のためにあるかと言うと、攻撃者が総当たりで攻撃したときに時間がかかるようにするため。
- 暗号化された文字列が流出したときの話
- paswordとsaltを1つずつずらして暗号化して・・・を繰り返させる
- そこで、攻撃者が計算するときに(saltがあったときよりも)十分に遅ければ、別途saltを保存しなくても良いはず
- 普通のhash(MD5とか)は遅くは設計されてない。速く計算されてしまう。
- bcrypt は暗号化計算が十分に遅い。秒間450個のパスワードしか生成できない。(MD5だと約140,000個)
なるほど。どれどれ。
require 'bcrypt'
start = Time.new
100.times { |i| BCrypt::Password.create(i) }
finish = Time.now
p "#{finish - start} sec"
実行させたら100個暗号化するのに 6.247545 sec だった。確かにかなり遅くできてる。
3/7 追記: Omniauth-identity、ascii cast に従ってname, emai, password_digestを作ったけど、表示しなければname要らないか。
2014-03-09 [長年日記]
_ パンデミック大会
前回までのとみーるさんに替わり、今回はゆどうふさんが主催のパンデミック(ボードゲーム)大会が開催されました。私は長らく一緒にパンデミックやっている、とみーるさんとちぇりさんとチームを組んで参加しました。場所はIT健保の市ヶ谷健保会館。(同じ場所で懇親会もできて、安いし、ITS素晴らしいですね。)
今回は弊社のサービス tmix を使ってチームパーカーを作成!3人で構想を練って、ちぇりさんがイラスト、とみーるさんがデザイン、私が注文というナイス(?)役割分担で進められた。今回のパーカー、春の新作にしたので、大会の日程にあわせて中のみなさんに実装や追加作業をお願いしたりしました。w その甲斐あってかっこいいチームパーカーができたし、なによりtmixでみんなでデザインするって楽しい作業なんだなーという自社サービスの良さを知る機会にもなりました。(ステマ)
さて、結果はというと、初球は最速でクリアしたものの、中級で手こずりギリギリクリア。これは今年の最優秀プレイなのでは、と思うほどの手応えはあった。しかし上級をクリアできず、優勝も入賞もできないという悔しい結果になりました。これもひとえに、スタッフのナース隊のみなさんが各テーブルへゲーム準備をしに来てくれるという状況の中、うちのチームだけゆどうふさんがセットアップに来たせいでナースさんがこなかったのが敗因に違いありません。(八つ当たり)めちゃめちゃ悔しかったです。(負けたことがです。)帰り道を3人でとぼとぼと帰りました・・・。
しかし負けたことで学ぶことが多々ありました。特に「根絶のメリットと判断」がまったくできていなかったことに気づき。上級だと同じ都市ばかり繰り返しでるので、カードの出具合によっては根絶の効果は絶大。5年以上もパンデミックをやっていてこんな基本的なことに気づいてなかったことにびっくりしつつ、まだまだ成長できるってことは嬉しいことでもあるなと思いました。本当に悔しかったですが。
次回の大会へ向けて、もっと練習と、各プレイのふりかえりをやらないといかんということに、ほろ苦く気づいた1日でした。大会参加も5回目ですが、優勝は遠いです・・・。
2014-03-14 [長年日記]
_ Rails4.1 + rspec3 + guard
設定したのでメモ。
Gemfile
group :development, :test do
gem 'guard-rspec'
- $ bundle
- $ bundle exec guard init
Guardfile
- guard :rspec do
+ guard :rspec, cmd: 'bin/rspec -f doc' do
- $ bundle exec guard
これでファイルに変更があるたびにrspecを実行できて捗る。 なんかDeprecation Warnings が出てるので後で調べる。
The Guard::RSpec::Formatter formatter uses the deprecated formatter interface.
2014-03-19 [長年日記]
_ キャラメルボックス「ひとみ」
キャラメルボックスの舞台を初めてみた。演題は「ひとみ」。事故で体の自由を失った女性が最新技術の補助具で再び動けるようになって、そこからのお話。
観るまで知らなかったけど、spiral life が曲をつけてた。20年前のよく聴いてたころを思い出して、そこに映像がついていく楽しい時間だった。(ついサントラを買ってしまった)
お芝居を見た後のなんとも言えずいいものだの気分を味わって、また観に行きたいと思ったのでした。
今回は初めて割で1000円、2階席だけど最前列に座れた。(2階への長い階段の途中にたのしみが仕掛けてあったりもした) 次はもっといい席で観ようと思う。今年は芝居をたくさんみようと決めたので、他の劇団のお芝居も探して観てみよう。
2014-03-28 [長年日記]
_ じぐそうさんがバイトに来た
高専カンファレンスのマスコット的存在である じぐそうさん( @neo6120 ) が弊社spice life にバイトにきてくれた。1ヶ月という短い期間だったけど、面倒な作業を根気強くやってくれたり、最後は自分の得意分野を活かして弊社の技術力を上げてくれた。
じぐそうさんとは高専カンファレンス004福井(2009年2月28日)でたしか隣に座って、当時高専2年生だった若者が一生懸命ust配信をしてくれたのを見たのが出会いだ。その後、彼がパーソナリティをやっている地域ラジオにみんなで出たり、彼が教官室で必死に単位をせびる姿を目の当たりにしたのをよく覚えている。
当時16歳の高専生だった彼は5年が経って大学を卒業して一緒に仕事をすることになった。これは私にとってとても嬉しいことだった。その5年の間に私がやった高専カンファレンス(014かな)に遠くから来てくれて、私のプレゼンがとても良かったと言ってくれたり、5周年パーティでその話を一緒にしたり、そのたびに成長を感じていていた彼と一緒に仕事をして、もちろんインターンではなく戦力として雇い、こちらの想定以上の成果をあげてくれたのは、おじさん冥利につきるというものだ。
びっくりしたのは、社会人にもまだなっていない若者が普通にエンジニアの戦力としてチームに加わったことだ。若者の力には恐れ入る。同じくバイトのいまやさんとのjsディスカッションはなかなかに激しくて聞いていて痛快だった。持ち前の明るさでムードメーカーにもなってくれた。(チャットでのコミュニケーションは雰囲気作りが重要なんだと再確認)
4月からの社会人生活、がんばってください。また一緒に仕事をする日を楽しみに。で、いつからなんだろう。(これはバイト中に何回も言ってちょっと引かれていたことだが、改めて書いておく。)
まとめ:若者を育てて搾取する壮大な計画の第一歩をまんまと踏み出せたお話をいい話風に仕立てて書いた
じぐそうさんも日記を書いていたが、これを読んで書こうと思ったわけではなく、単に先をこされただけだ。
http://blog.jgs.me/post/81024026591/finished-spice-life-albeit
追記:弊社spice life では学生バイトさんも正社員も募集しています!!
2014-03-29 [長年日記]
_ TokyuRubyKaigi07
さぁ!肉の日に開催されました。今回はLT王と飯王の投票が大接戦で、LT王は上位3人が1票差、飯王は上位2人が2票差と激戦でした。LT王は @tdakak さんの子育てプログラマー実践の話で会場に一体感をもたらす強烈な共感を得ました。自由な働き方は弊社も導入中なので参考になりました。同率2位はRubyウルトラクイズで謎の覆面さんによる出題はなかなかのマニアックさでした。(EngineYardさんお世話になっております!)同じく2位は大場(カリスマ)様で、Githubによって育まれたチームの話。今回はカリスマ狙ってないと言いながらもあわや、というポジションにつけるのがすごかったです。
一方のLT王はここまで全勝だった絶対飯王の @2celeb さんがついに陥落し、@kwappa さんがTokyu史上初の飯王下克上に成功。会場前から会場で肉を切り、きれいに飾り付けをこなし、5品を越える品目を提供し、しかも甘いものまで・・・と気合い十分。「飯王は遅れてくるからそれまでに票を集めて、飯王が来たころにみんながべろべろに酔ってたら俺の勝ちだ」と戦術的にも戦略的にも勝利を勝ち取りました。一方の2celebさんは本当に悔しそうで、この姿勢がここまでの飯王連覇を支えていたのかと納得。今回の「ニシンの山椒煮」はTokyu史上最高の美味だったかもしれません。
スタッフは今回は配置換えを試み、委員長は櫻井さん。そのほかのメンバーも別の役職について、ただでさえ省エネ開催のTokyuがさらなる持続可能力を得て鉄板となりました。交替は少し大変なところもありましたが、これでさらなる継続開催の基盤ができたと言えます。
スタッフTシャツ と三冠王Tシャツは前回にひきつづき @yucao24hours さんがデザインしてくださいました。Tシャツスポンサーは今回も弊社サービスtmix でした。飯王とLT王の写真です。
ほかにも、たまださんがRubyistになってて驚いたり、阿部さんが転職発言で驚いたり、万葉のまつもとさんの発表がおもしろかったり、とても書き切れませんがすごく楽しかったです。ボヤージュさん、いつも会場提供ありがとうございます!それと @arimo さん料理写真撮ってくれてありがとう!たすかりました!
togetter http://togetter.com/li/648499
_ あると [おー、見てきたんですね、キャラメルのヒトミ。この作品の他にも、spiral life や scudelia elec..]
_ いが [なるほどDVDで観るって手もあるんですねー! そしてサポーターズ私もはいろうかぐらっとしてます。w 東京だと当日空席..]