2016年1月2日土曜日

Railsでdecorate_columnsエラー

Rails(というかActiveRecord)では「type」というカラム名は予約語らしいです。

実際にtypeをカラム名に使ってみると、こんなエラーが出ます。

ActiveRecord::SubclassNotFound - The single-table inheritance mechanism failed to locate the subclass: 'hogehoge'. This error is raised because the column 'type' is reserved for storing the class in case of inheritance. Please rename this column if you didn't intend it to be used for storing the inheritance class or overwrite SolutionDimInfo.inheritance_column to use another column for that information.:
このエラー文なら「あ、予約語使っちゃてる」とわかると思います。

問題なのは、typeに存在するクラスを代入してしまっている時です。

seed-fuのデータが以下のように設定されているとします。
Hoge.seed do |hoge|
 hoge.type = "Float"
end
これを読みこんで、コントローラorモデルで使っているページにアクセスします。

すると、先ほどとは違ったエラーが出るのです!
NoMethodError - undefined method `decorate_columns' for Float:Class:
decorate_columnsでググっても原因がわからず、新年早々アホなエラーに時間をかけてしまいました。

2015年8月27日木曜日

PocketがFirefoxに組み込まれた結果,Pocketが使えなくなる矛盾


今更ですが,FirefoxにPocketが組み込まれた結果,かえってPocketが使いにくくなっています.
  • Debianでは,Firefoxの更新から少し遅れたバージョン
  • 古いバージョンなので,Pocketが組み込まれていない
  • でも,Firefoxのアドオンサイトでは,Pocketのアドオンが削除されている
  • Pocketアドオンが使えない! 
Bookmarkletを使ってしのいでいます…

2015年8月15日土曜日

FactoryGirlの初期化タイミング

Railsのプログラミングをしていて,詰まったことひとつ.

Fixtureの代わりにFactoryGirlを使っているのですが,データが設定されるタイミングで引っかかりました.

class Hoge < ActiveRecord::Base
  after_initialize do |sol|
    puts sol.to_s
    sol.hoge
  end

みたいなクラスのファクトリーを作り,テストを実行すると,各要素がセットされていない状態で出力されます.
なので,after_initialize中で要素を操作したりすると,上手く行かない事があるとようです.

自分もそれでしばらく悩んでいました.

2015年2月24日火曜日

ルワンダの善人(後)

ムバイェ大尉(BBC World Serviceから)



ムバイェ・ディアニュ大尉(Capt Mbaye Diagne)を知っていますか?たぶん知らないと思います.
ルワンダの善人(前) でルワンダの話をしたのは, BBCのニュースA good main in Rwandaを読み,ほとんど知られていない英雄を知ってもらいたいと思ったためです.
ケーブルやスカパーでも放送されてたようです(自分は見てない).


ムバイェ大尉はセネガル軍の士官で,国際連合ルワンダ支援団(UNAMIR)の派遣員として任務についていました.
UNAMIRは政府と,反政府軍(RPF) の間で結ばれた休戦協定を監視,治安の維持をするために派遣された平和維持軍です.
しかし,任務の割に不十分な装備,人員,政治的な束縛の結果,後の虐殺を防ぐことが出来ませんでした.

1994年4月のハビャリマナ大統領の暗殺が起こり,軍部とフツ過激派,フツ系の与党,大統領夫人のグループ,民兵集団などが権力を握る,混沌とした状況,そして虐殺が始まります.

多数派フツ族の穏健派であったウィリンジイマナ(Uwilingiyimana)首相も白昼堂々,暗殺されてしまいます.
UNAMIRは首相の家族を発見するのですが,家族を保護する”マンデート”※1の有無と,安全面の心配から,保護すべきか議論されました.

残していけば殺されるであろう家族を前にして,何を呑気なと思うかもしれませんが,首相の暗殺時にUNAMIRのベルギー兵士も悲惨な拷問の末※2に殺されており,他にも保護すべき人々がいる緊迫した状況だったことも考慮する必要があります.

ムバイェ大尉はこの時,非武装だったにもかかわらず,自分の車に家族を乗せ,避難所――ホテル・ルワンダの舞台,オテル・デ・ミル・コリン――まで無事に保護しました.
 

この他にも,100日間の虐殺の間に,ムバイェ大尉が救った命は400から1000人以上とも言われています.
ホテル・ルワンダのルセサバギナ氏と同じくらい沢山の人を助けたことになるのですが,大きな違いが一つ.
ルセサバギナ氏は生き残りましたが,ムバイェ大尉は任務の途中で砲撃により殉職してしまいました.
隣人同士が殺し合い,国際社会は知らんふりを決め込む,善や正義の存在を疑わざるを得ない状況下においても,ムバイェ大尉のような人物がいたことは,仄かな希望と言えるでしょう.



※1: 国連活動において,許されたor与えられた権限
※2: 性器を切断され,口に押し込められたとか

2015年2月16日月曜日

ルワンダの善人(前)




去年(2014年)はルワンダ虐殺から20年の年でした.
ホテル・ルワンダなどの映画や,なぜ、世界はルワンダを救えなかったのかなどの書籍になってます.

3か月の間に80~100万の人が殺され,200万の難民が生じた,悲惨とかの言葉では十分に表現出来ない出来事です.
命はそろばん勘定ではありませんが,比較のために大きな戦争,災害の死者数を示します.
  • 東日本大震災での死者・行方不明者,1万5千~2万人
  • 太平洋戦争での日本の戦没者,200~300万人
  • WW2通してのアメリカの戦没者,40万
ルワンダの人口が800万,日本は8000万であったこと,太平洋戦争の期間を考えると,虐殺の規模がわかります.

人数だけでも問題ですが,
  • 組織だった冷酷な集団ではなく,隣人同士が殺しあった内戦であること
  • 国際社会が虐殺を知りつつ,実質的に無視したこと
  • 展開していたPKOが不十分な権限,人員,装備しか与えられていなかった
など,多くの問題を我々に考えさせる出来事です.

特に最後の問題は,自衛隊の海外協力に関連した重要な問題です.
同じ日本人の自衛官と, 1万キロ離れた国に住む数十万の黒人の命を,天秤にかける必要があるからです.
人種や国籍で差別すべきではないとは思いますが,自分や友人,家族が死ぬのは嫌です.
答えはわからない,存在しないでしょうが,ジレンマが存在することさえ認めないのは卑怯なことです.

少し前のBBCの"A good man in Rwanda"が気になったので,後ほど紹介します.

2014年12月22日月曜日

善きサマリア人?

自殺したいと思ったことはありますか?
自殺しそうな親しい人はいますか?
だとしたらSamaritans Radarは有効なアプリかもしれません.

Samaritans RadarはTwitterを利用した自殺防止アプリです.
下図のような流れで,インストールしたユーザー(A)がフォローしている人(B)が,自殺しそうなキーワードのツィートを行うと,ユーザーに連絡が行くようになっています.

自殺を防ぐかもしれないサービスなので良さそうに見えるのですが,海外(イギリス?)だと物議を呼んでいるみたいで,BBCイギリス版WiredGigaOMなどの有名ドコロで記事になっています.日本だとあまり話題になっていない(ググっても1000件程度?)ようですが,AFP通信 には日本語の記事があります.



問題になっている原因は,ユーザーBの同意とプライバシーに関する認識の違いです.

普通のカウンセリングだとBの同意がありますが,Samaritans Radarだと勝手に自分のツィートが横流しされ,Bの精神状態に関する分析が勝手に行われるわけです.
当然,気持ち悪いとか信頼されていないとか思っちゃう人もいるわけです.

また,この問題の背景としてソーシャルメディアでの公共性,個人性などの認識の違いもあると考えられます.
いわゆるバカッター,そこからの個人特定などもそうなのですが,
自身がTwiitterやFacebookなどで情報を公開していたとして,それを勝手につなぎ合わせる事が許されるのか?
難しい問題だと思います.



なお,日本語には対応してないので,心配な人がいるならいのちの電話などに相談してみてください.


2014年12月1日月曜日

Rubyには,文字列を中身そのまま文字列に変換するメソッドがある

 言葉だと分かりにくいので動作例
irb(main):019:0> s = "abc"
=> "abc"
irb(main):020:0> s.to_s
=> "abc"
なんでこんなメソッドがあるか,リファレンスによると「統一的に処理する」ためだそうです.
実際,自分がこのメソッドに気づいたのもFloatとかIntegerとかの中にStringも入っているデータを文字列に変換しようとした途中でした.