第2回 ドメイン駆動設計読書会@名古屋 のモデル
http://atnd.org/events/29529
2012年6月7日木曜日
2012年4月25日水曜日
jberkel / android-plugin とEclipse
ScalaでAndroidコードを書きたいなぁ、ということで調べていたら下記のsbtのプラグインがヒットしました。
sbteclipse を android-plugin に適用して eclipse で編集する
ちょっと違うのは、私が使ったandroid-pluginが0.6.1だからか、sbteclipse-pluginが2.0.0だからなのか、
Eclipseにインポートした後にしたことは、Build PathのSourceタブにおいて、
逆にしなかったこととしては、
ひとまず、Eclipse上でエラーが表示されることはなくなりました。
Scala書くときにはEclipseのScala IDEがなかなか使えるし、
Androidのリソースを編集するのにも向いていていいよねー、てことでEclipse用に環境を構築しました。
結果的には、ほとんど下記の方の記事と一緒の設定になりました。sbteclipse を android-plugin に適用して eclipse で編集する
ちょっと違うのは、私が使ったandroid-pluginが0.6.1だからか、sbteclipse-pluginが2.0.0だからなのか、
Eclipseにインポートした後にしたことは、Build PathのSourceタブにおいて、
- src/main/res をビルドパスに追加
逆にしなかったこととしては、
- src/main/resources、src/test/resources の削除は不要。
- Librariesタブで、target[scalaバージョン]/classes の追加は不要。
ひとまず、Eclipse上でエラーが表示されることはなくなりました。
2012年4月15日日曜日
Play Framework 2.0を学ぶ:その2 テンプレートのi18nではまった
Play Framework 2.0(Scala)のテンプレートの国際化ではまったのでメモ。
やりたいこと
テンプレートの文言を外部リソースに切り出したい。
で、言語に対応した文言を表示したい。とりあえず今回は日本語で。
やったこと
Messages and internationalization を参考に、こんな感じで設定。
「メッセージです!」と表示されずに、「key」と表示されてしまいました。
messages.enファイル内でメッセージを定義しても「key」と表示されてしまう始末。
HTTPヘッダーのAccept-Languageにもja、enが含まれているのになー。
解決方法
"play framework i18n template"で検索したところ、下記を発見。
i18n error: controller and templates uses different implicit Langs
これによると、
対応策としては、テンプレートの引数にimplicit parameterとしてLangを付与すれば良い、ということで、viewは下記の通りになります。
(1行目が追加した箇所)
こうすると、Messagesの引数に暗黙的にlangの値が渡され、今回の日本語環境の場合はmessages.jaに定義された値を表示します。
やりたいこと
テンプレートの文言を外部リソースに切り出したい。
で、言語に対応した文言を表示したい。とりあえず今回は日本語で。
やったこと
Messages and internationalization を参考に、こんな感じで設定。
- application.confにて、日本語を使えるように設定。
- conf配下にmessges.jaファイルを作成。
key=メッセージです!
という形式で登録。
- テンプレートを修正し、messagesファイルを参照するよう修正。
という形式で登録。@Mesasges("key")
application.langs="en,ja"ダブルクオートで囲む必要があるそうな。
「メッセージです!」と表示されずに、「key」と表示されてしまいました。
messages.enファイル内でメッセージを定義しても「key」と表示されてしまう始末。
HTTPヘッダーのAccept-Languageにもja、enが含まれているのになー。
解決方法
"play framework i18n template"で検索したところ、下記を発見。
i18n error: controller and templates uses different implicit Langs
これによると、
- Messagesは、implicit paramterとしてLang型の引数(lang)を取る。そのlangは、明示的に指定されない場合、JVMのデフォルトロケールを使う。
- コントローラ内でMessagesが呼び出される際にimplicit requestが定義してあれば、そのrequestのHTTPヘッダーからAccept-Languageを取得してMessgesの引数langに暗黙的に値を設定してくれる。
- が、テンプレート内ではスコープ内にlangを見つけられないからJVMデフォルトのロケールが使われるよ。
対応策としては、テンプレートの引数にimplicit parameterとしてLangを付与すれば良い、ということで、viewは下記の通りになります。
(1行目が追加した箇所)
@(implicit lang: Lang)@Mesasges("key")
こうすると、Messagesの引数に暗黙的にlangの値が渡され、今回の日本語環境の場合はmessages.jaに定義された値を表示します。
2012年2月7日火曜日
Play Framework 2.0を学ぶ:その1 template engine
このあたりを見ながら個人的に重要そうな部分を抜粋。
https://github.com/playframework/Play20/wiki/ScalaTemplates
Play Scalaテンプレート
Play Scalaテンプレートは標準のScalaのfunction(以降、関数)にコンパイルされます。
下記のようなconvention(規約)に基づきます。
というテンプレートファイルを作ると
上記ファイルの内容が以下のようだとすると
これはどのScalaコードからでも、下記のように呼び出せます。
なお、テンプレートファイルの1行目に記載してあるものは、Scala関数の引数とのこと。テンプレートを呼び出す際にも、関数を呼び出すのと同じように、引数に値を渡すんですねー。
"@"キャラクタ
テンプレート上の@は、Scalaコードの始まりと見なされます。
明示的に終了を記述する必要はありません。
ただし、マルチトークン(?)なScalaコードを記述したい場合は、
@(Scalaコード1 + Scalaコード2)のようにかっこでくくる必要があります。
また、{}を使って、複数のステートメントを書くこともできます。
@は特別なキャラクタなので、エスケープする場合は、
@@
と@を重ねる形でエスケープします。
テンプレートパラメータ
テンプレートは単純な関数であるため、パラメータが必要です。
パラメータは、テンプレートファイルの1行目に記述される必要があります。
デフォルト値も使えます。
パラメータグループも使えます。
インプリシットパラメータも使えます。
※その他は今のところ使わなさそうなので省略
https://github.com/playframework/Play20/wiki/ScalaTemplates
Play Scalaテンプレート
Play Scalaテンプレートは標準のScalaのfunction(以降、関数)にコンパイルされます。
下記のようなconvention(規約)に基づきます。
views/Application/index.scala.html
というテンプレートファイルを作ると
views.html.Application.index<という関数を生成します。
上記ファイルの内容が以下のようだとすると
@(customer: Customer, orders: Seq[Order])Welcome @customer.name!
- @orders.map { order =>
- @order.title }
これはどのScalaコードからでも、下記のように呼び出せます。
val html = views.html.Application.index(customer, orders)
なお、テンプレートファイルの1行目に記載してあるものは、Scala関数の引数とのこと。テンプレートを呼び出す際にも、関数を呼び出すのと同じように、引数に値を渡すんですねー。
"@"キャラクタ
テンプレート上の@は、Scalaコードの始まりと見なされます。
明示的に終了を記述する必要はありません。
ただし、マルチトークン(?)なScalaコードを記述したい場合は、
@(Scalaコード1 + Scalaコード2)のようにかっこでくくる必要があります。
また、{}を使って、複数のステートメントを書くこともできます。
@は特別なキャラクタなので、エスケープする場合は、
@@
と@を重ねる形でエスケープします。
テンプレートパラメータ
テンプレートは単純な関数であるため、パラメータが必要です。
パラメータは、テンプレートファイルの1行目に記述される必要があります。
デフォルト値も使えます。
パラメータグループも使えます。
インプリシットパラメータも使えます。
※その他は今のところ使わなさそうなので省略
2012年1月30日月曜日
Githubにpushしようとした時に「Permission denied (publickey).」
久しぶりにgithubを使う度に悩むのでメモ。
というかリンク。
もうリンク先に素晴らしい解決方法が書いてあるのでそれに従いました。
http://sho.tdiary.net/20091024.html
というかリンク。
もうリンク先に素晴らしい解決方法が書いてあるのでそれに従いました。
http://sho.tdiary.net/20091024.html
2011年11月26日土曜日
映画『マネー・ボール』の感想
映画『マネー・ボール』の感想です。
■映画情報
all cinemaより
■感想まとめ
ビジネスパーソン、特に組織の旧習に苦しめられている方の背中を押してくれる映画。
かなり好き。
自分が解釈したキーフレーズは以下。
■好きな点
■ 最後に
私にとってはかなり心に残る映画でした。
周りが「恐竜」 ばかりの人は、是非見てください。
ビジネス書やら自己啓発本を10冊読むよりこの1本!
■映画情報
all cinemaより
低迷していたオークランド・アスレチックスを革新的球団運営で常勝チームへと作りかえた実在のゼネラルマネージャー、ビリー・ビーンの成功物語を、「イン グロリアス・バスターズ」「ツリー・オブ・ライフ」のブラッド・ピットの主演で映画化した感動ドラマ。共演はジョナ・ヒル、フィリップ・シーモア・ホフマ ン、ロビン・ライト。監督は「カポーティ」のベネット・ミラー。
高校時代は花形選手だったものの、プロでは大成することなく引退したビリー・ ビーン。その後、若くして弱小球団アスレチックスのゼネラルマネージャーに就任するが、長らく低迷を続けるアスレチックスは財政的にも厳しく、選手の補強 すらままならない状態だった。そんな体たらくに喘ぐ2002年、名門イェール大の経済学部を卒業し、インディアンズのスタッフとして独自に選手のデータ分 析を行っていた青年ピーター・ブランドと出会う。自らのチーム強化ヴィジョンに不可欠と見込んですぐさまピーターを引き抜き、彼のデータを重視した斬新な 選手評価を基に、安い選手を買って勝てるチームをつくる独自の経営戦略を打ち立てていくビリー。しかし、その常識破りの方針と、彼の短気で独善的な性格が 周囲の反発を招き、チームは結果を出せない状態が続く。それでも、ビリーは確固とした信念で戦略を貫き通すと、次第にチームは勝ち星を重ね、ある奇跡を呼 び起こす…。
■感想まとめ
ビジネスパーソン、特に組織の旧習に苦しめられている方の背中を押してくれる映画。
かなり好き。
自分が解釈したキーフレーズは以下。
- 信念を貫け。
- 適材を集めて適所に配置すべし。
■好きな点
- 新しい価値観を提示し、業界・組織の「ルール」を変えるために、信念を貫く主人公の姿。
- 対立するものや方針に従わない者は、それこそ気持ち良いくらいにクビ切りしていく。
- このあたりは先日亡くなったスティーブ・ジョブズが、非常に独裁的ということで社員からは相当恐れられていた(らしい)、というエピソードを連想。非情な執念がないと、事は成せないのだ。
- 重要な試合で勝利して、暗い部屋で一人でガッツポーズしている姿とか、泣けるよね…。
- 主人公がインディアンズに選手のトレードの打ち合わせに行って、選手ではなく、スタッフの優秀な人材(=ピーター)を見抜き、引きぬくところ。
- その打ち合わせの場では、ピーターは完全にモブキャラとしか認識していなかったので、その後の展開には驚いた。この人材を見抜くエピソードは、歴史物で軍師と出会い、採用する時のような熱い展開。
- スカウト会議で「何が問題だ?」と複数のスカウトに聞くシーン。
- 何が問題かわかっていない「恐竜」(変化に対応できずに滅びていくものの象徴として、映画内で後で出てくる)との対比が明確に描かれる。
- 他球団とのトレードでの電話でのやり取り。
- 恐ろしい短期間で誰と誰をいくらでトレードするか、ということを決めていく スピード感と「私情の挟まなさ」があまりにすごすぎて笑ってしまった。選手は駒なんだよねぇ。
- 選手と親しくなるとクビを切りづらくなるから、という理由で選手と同行しないという「非情であり続けるために、情を持たないようにする」というスタンスに固い意志を感じる。(まぁ後から方針変更はあるのですけれど)
- 主人公がピーターと 共に小さな部屋でモニターとPCを見ながらああだこうだと議論する場面。
- 「傍目から見ると小さい空間なんだけど、そこから何か大きなことが始まろうとしている!」感 がすごく好き。
- 主人公の娘が可愛いし歌もうまくて印象に残る。特に歌は何度も脳内再生してしまった。
- 最後の方、レッドソックスのオーナー(?)に色々語らせすぎか。でも語らせないと、その後のレッドソックスの勝利の意味づけができないし、仕方ないかなぁ。
- 主人公と選手の交流が「そこまで」描かれなかったのは残念。だけど主題はそこではなく、「いかに適材を配置するか」というところだと思うので、そこはまぁいいか。
- 上と同じく、選手から見た視点、選手間の繋がりを「そこまで」描いていないのも残念。まぁここも主題じゃないからいいかな。
■ 最後に
私にとってはかなり心に残る映画でした。
周りが「恐竜」 ばかりの人は、是非見てください。
ビジネス書やら自己啓発本を10冊読むよりこの1本!
2011年11月20日日曜日
Scala(sbt)でjoda-time 2.0を使う設定。
背景
Scala(ビルドツールはxsbt)でjoda-time 1.6を使っていて、
@xuwei_kさんのまさしくこの状況にハマりました。
joda timeのDateTimeのコンストラクタがScalaと相性悪い・・・と思ったら単なる勘違いだった件
jodatimeのコンストラクタをScalaから呼べないとおもったら、単に自分の勘違いだった件
scalatimeというjoda timeをScalaでラップしたようなライブラリがあるのですが、
それはおいておいて、とりあえずjoda time 2.0使おうと思ってちょっとはまったのでメモ的に記します。
設定
~/build.sbtに下記の設定をします。
*1は普通にjoda-time 2.0を取得する設定ですが、
*2を加えています。
*1だけですと、
のようなエラーが出ます。
この原因は、
https://groups.google.com/d/topic/scala-user/aM4LNwNksXQ/discussion
によると、
ということで、sbtでは*2を明示的に加えてあげる必要があります。
Scala(ビルドツールはxsbt)でjoda-time 1.6を使っていて、
@xuwei_kさんのまさしくこの状況にハマりました。
joda timeのDateTimeのコンストラクタがScalaと相性悪い・・・と思ったら単なる勘違いだった件
jodatimeのコンストラクタをScalaから呼べないとおもったら、単に自分の勘違いだった件
scalatimeというjoda timeをScalaでラップしたようなライブラリがあるのですが、
それはおいておいて、とりあえずjoda time 2.0使おうと思ってちょっとはまったのでメモ的に記します。
設定
~/build.sbtに下記の設定をします。
libraryDependencies ++= Seq( "joda-time" % "joda-time" % "2.0", //*1 "org.joda" % "joda-convert" % "1.1" //*2 )
*1は普通にjoda-time 2.0を取得する設定ですが、
*2を加えています。
*1だけですと、
error: error while loading DateTime, Missing dependency 'class org.joda.convert.FromString', required by /Users/xxxxx/.m2/repository/joda-time/joda- time/2.0/joda-time-2.0.jar( org/joda/time/DateTime.class)
のようなエラーが出ます。
この原因は、
https://groups.google.com/d/topic/scala-user/aM4LNwNksXQ/discussion
によると、
「joda-convertはmavenのpom上ではOptionalであり、Javaでは取得できなくても動くけど、とのこと(意訳)。
Scalaだとすべてのclassが参照するclassはcompile時にclasspath上に存在しないといけないのでエラーになるよ」
ということで、sbtでは*2を明示的に加えてあげる必要があります。
登録:
投稿 (Atom)
