2011年11月26日土曜日

映画『マネー・ボール』の感想

映画『マネー・ボール』の感想です。

■映画情報

all cinemaより
低迷していたオークランド・アスレチックスを革新的球団運営で常勝チームへと作りかえた実在のゼネラルマネージャー、ビリー・ビーンの成功物語を、「イン グロリアス・バスターズ」「ツリー・オブ・ライフ」のブラッド・ピットの主演で映画化した感動ドラマ。共演はジョナ・ヒル、フィリップ・シーモア・ホフマ ン、ロビン・ライト。監督は「カポーティ」のベネット・ミラー。
高校時代は花形選手だったものの、プロでは大成することなく引退したビリー・ ビーン。その後、若くして弱小球団アスレチックスのゼネラルマネージャーに就任するが、長らく低迷を続けるアスレチックスは財政的にも厳しく、選手の補強 すらままならない状態だった。そんな体たらくに喘ぐ2002年、名門イェール大の経済学部を卒業し、インディアンズのスタッフとして独自に選手のデータ分 析を行っていた青年ピーター・ブランドと出会う。自らのチーム強化ヴィジョンに不可欠と見込んですぐさまピーターを引き抜き、彼のデータを重視した斬新な 選手評価を基に、安い選手を買って勝てるチームをつくる独自の経営戦略を打ち立てていくビリー。しかし、その常識破りの方針と、彼の短気で独善的な性格が 周囲の反発を招き、チームは結果を出せない状態が続く。それでも、ビリーは確固とした信念で戦略を貫き通すと、次第にチームは勝ち星を重ね、ある奇跡を呼 び起こす…。

■感想まとめ
ビジネスパーソン、特に組織の旧習に苦しめられている方の背中を押してくれる映画。
かなり好き。

自分が解釈したキーフレーズは以下。
  • 信念を貫け。
  • 適材を集めて適所に配置すべし。

■好きな点
  1. 新しい価値観を提示し、業界・組織の「ルール」を変えるために、信念を貫く主人公の姿。
    1. 対立するものや方針に従わない者は、それこそ気持ち良いくらいにクビ切りしていく。 
      1. このあたりは先日亡くなったスティーブ・ジョブズが、非常に独裁的ということで社員からは相当恐れられていた(らしい)、というエピソードを連想。非情な執念がないと、事は成せないのだ。
    2. 重要な試合で勝利して、暗い部屋で一人でガッツポーズしている姿とか、泣けるよね…。
  2. 主人公がインディアンズに選手のトレードの打ち合わせに行って、選手ではなく、スタッフの優秀な人材(=ピーター)を見抜き、引きぬくところ。
    1. その打ち合わせの場では、ピーターは完全にモブキャラとしか認識していなかったので、その後の展開には驚いた。この人材を見抜くエピソードは、歴史物で軍師と出会い、採用する時のような熱い展開。
  3. スカウト会議で「何が問題だ?」と複数のスカウトに聞くシーン。
    1. 何が問題かわかっていない「恐竜」(変化に対応できずに滅びていくものの象徴として、映画内で後で出てくる)との対比が明確に描かれる。
  4.  他球団とのトレードでの電話でのやり取り。
    1. 恐ろしい短期間で誰と誰をいくらでトレードするか、ということを決めていく スピード感と「私情の挟まなさ」があまりにすごすぎて笑ってしまった。選手は駒なんだよねぇ。
  5. 選手と親しくなるとクビを切りづらくなるから、という理由で選手と同行しないという「非情であり続けるために、情を持たないようにする」というスタンスに固い意志を感じる。(まぁ後から方針変更はあるのですけれど)
  6. 主人公がピーターと 共に小さな部屋でモニターとPCを見ながらああだこうだと議論する場面。
    1. 「傍目から見ると小さい空間なんだけど、そこから何か大きなことが始まろうとしている!」感 がすごく好き。
  7. 主人公の娘が可愛いし歌もうまくて印象に残る。特に歌は何度も脳内再生してしまった。
■これはちょっとなー、という点。
  1. 最後の方、レッドソックスのオーナー(?)に色々語らせすぎか。でも語らせないと、その後のレッドソックスの勝利の意味づけができないし、仕方ないかなぁ。
  2. 主人公と選手の交流が「そこまで」描かれなかったのは残念。だけど主題はそこではなく、「いかに適材を配置するか」というところだと思うので、そこはまぁいいか。
  3.  上と同じく、選手から見た視点、選手間の繋がりを「そこまで」描いていないのも残念。まぁここも主題じゃないからいいかな。

■ 最後に
私にとってはかなり心に残る映画でした。
周りが「恐竜」 ばかりの人は、是非見てください。
ビジネス書やら自己啓発本を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に下記の設定をします。


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を明示的に加えてあげる必要があります。

xsbtでScalaのcompileのオプションを設定する方法。

Liftで書いていて、xsbtの

compile
 時に

there were 1 deprecation warnings; re-run with -deprecation for details
と出てきていたものの、どうやって設定するのやら悩んでいましたが、
下記の設定でOKでした。

set scalacOptions += "-deprecation"

2011年10月19日水曜日

xsbt + xsbt-web-plugin + scala 2.9.1のサンプル。

  • sbt 0.11(xsbt)
  • xsbt-web-plugin
  • scala 2.9.1

の組み合わせのサンプルを発見。
バージョン指定の方法で毎度悩むので、2011年10月19日現在の最新(と思われる)この組み合わせを使ってliftをやろうかと。

https://github.com/schmmd/helloworld-scala-servlet

(via https://github.com/siasia/xsbt-web-plugin/wiki/

2011年7月28日木曜日

sbteclipseを使ってxsbt(sbt 0.10系)からeclipse用の設定ファイルを作成する方法

Scalaの作者であるMartin Oderskyさんがinetrviewにて
I personally switched to the Eclipse plugin after 20 years of emacs. Certainly before then, I tried the plugin; but for the complex projects I do, it didn't live up to what I needed. Now, I would now never go back to emacs.
『eclipseのScalaプラグインの出来が素晴らしくて、20年使ってきたけどemacsにはもう戻れません!』
という発言をされていたのでeclipseのScalaプラグイン『Scala IDE for Eclipse』が気になってきまして。

でもscalaにはsbtという素敵なビルドツールがあるし、
  • eclipseはエディタとして使う
  • sbtはビルド用に使う
ということができないかなーと思って、sbtとeclipseの連携方法を調査したのでメモ。

参考リンク。

→sbtecipseを使って、sbtから.projectファイルや.classpathファイルを生成するとのこと。

http://stackoverflow.com/questions/6566470/how-to-add-sbteclipse-plugin-to-sbt-0-10-x
→バージョンの指定方法を参考にしました。


やり方。

  1. build.sbtファイルをproject/plugins配下に作成(デフォルトで存在?)。
    ※sbtを実行したルートディレクトリに作成しても良い模様。
  2.  下記内容を記載。
  3. resolvers += {
      val typesafeRepoUrl = new java.net.URL("http://repo.typesafe.com/typesafe/releases")
      val pattern = Patterns(false, "[organisation]/[module]/[sbtversion]/[revision]/[type]s/[module](-[classifier])-[revision].[ext]")
      Resolver.url("Typesafe Repository", typesafeRepoUrl)(pattern)
    }
    
    libraryDependencies <<= (libraryDependencies, sbtVersion) { (deps, version) => 
      deps :+ ("com.typesafe.sbteclipse" %% "sbteclipse" % "1.2" extra("sbtversion" -> version))
    }
    
  4. ※2011/11/05更新
    resolvers += Classpaths.typesafeResolver
    
    addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse" % "1.4.0")
    
  5.  sbtを起動。 sbteclipseのダウンロードが行われる。 
  6. eclipse create-srcを実行すると、.projectファイルと.classpathファイルが作成される。
  7. eclipseにて、.projectファイルが存在するパスを指定し、プロジェクト毎import。
という感じです。

    2011年7月25日月曜日

    LiftとMongoDBとRogueを使ってみる。(その2:Rogue設定編)

    以前の続きです。


    Rogueを使ってみます。


    Rogueについてはこちらを参照。

    Rogue: A Type-Safe Scala DSL for querying MongoDB

    Foursquareが公開しているMongoDBクエリ用のライブラリ。型安全なScala-DSLだそうで。

    型安全なクエリを実行できるのは素晴らしいですね。
    正直あまりよくわかっていないのですが、ひとまず開発環境の足がかりを作ります。

    ※赤字は追記・変更点。


    まずは2011年7月段階で最新安定版のLift 2.3をダウンロード。

    ダウンロードしたファイルを解答し、「lift_basic」フォルダをどこかに展開。

    project/build/LiftProject.scalaを下記の通り変更。


    import sbt._
    
    class LiftProject(info: ProjectInfo) extends DefaultWebProject(info) {
    
     val liftVersion = "2.3"
    
     // uncomment the following if you want to use the snapshot repo
     val scalatoolsSnapshot = ScalaToolsSnapshots
    
     // If you're using JRebel for Lift development, uncomment
     // this line
     // override def scanDirectories = Nil
    
     override def libraryDependencies = Set(
       "net.liftweb" %% "lift-webkit" % liftVersion % "compile",
       "net.liftweb" %% "lift-mapper" % liftVersion % "compile",
       "org.mortbay.jetty" % "jetty" % "6.1.22" % "test",
       "junit" % "junit" % "4.5" % "test",
       "ch.qos.logback" % "logback-classic" % "0.9.26",
       "org.scala-tools.testing" %% "specs" % "1.6.6" % "test",
       "com.h2database" % "h2" % "1.2.138",
       "com.foursquare" %% "rogue" % "1.0.14-SNAPSHOT" withSources()
      ) ++ super.libraryDependencies
    
    }
    



    sbtを起動し、updateして必要なライブラリをすべてダウンロードできているようであればOKです。

    "com.foursquare" %% "rogue" % "1.0.14-SNAPSHOT" withSources()
    
    の"1.0.14-SNAPSHOT"については、下記のリポジトリを参考にその時々のバージョンを指定して下さい。
    http://scala-tools.org/repo-snapshots/com/foursquare/


    続いてMongoDBへの接続設定。
    正直なところ下記を参照して適当に設定しています。
    http://www.assembla.com/spaces/liftweb/wiki/Mongo_Configuration


    src/main/scala/code/model/MongoConfig.scalaを下記内容で作成。



    package code.model
    import net.liftweb._
    import mongodb._
    import util.Props
    import com.mongodb.{Mongo, ServerAddress}
    
    object MongoConfig {
      def init: Unit = {
        val srvr = new ServerAddress("127.0.0.1", 27017)
    
        MongoDB.defineDb(DefaultMongoIdentifier, new Mongo(srvr), "foo")
      }
    }
    



    別マシンでmongodを実行している場合や、DB名を指定する場合にどういうことをすれば良いのかは不明ですが、まぁ気にしないことにします。 




    そしてsrc/main/scala/bootstrap/liftweb/Boot.scalaにて、上で定義した設定処理を実行するように下記を追記。


    class Boot {
      def boot {
        if (!DB.jndiJdbcConnAvailable_?) {
         //MongoDb boot
         MongoConfig.init
    (後略)
    





    ひとまず設定はこんなところです。




    ********

    TODO
    1. Lift+RogueでCRUDしてみる。
    ********
    サンプルはgithubにて公開。
    https://github.com/RKTM/Lift-MongoDb-Rogue-Sample

    2011年6月19日日曜日

    Windowsの環境変数をsetxで永続的に設定


    Windowsの環境変数を永続的(マシン再起動後にも設定が有効となるように)、かつ、スクリプトで自動で設定できないかなぁと調べてみました。

    Windows Support Toolsに含まれるsetxコマンドを使えば良いとのこと。詳細は以下リンクをご参照。

    setxで環境変数の値を設定する(基本編) 


    で困ったのが、複数の環境変数をsetxで設定した後に、それらをユーザー変数のPATHにどんどん追加しようとした時。何故か最後のsetxのみ有効になってしまうという。

    ということで下記のような書き方で対応。
    一時的な変数USER_PATHにどんどん追加していって、最後にsetxコマンドで環境変数に設定するというやり方です。
    set USER_PATH=%USER_PATH%;"%SCALA_HOME%\bin"
    set USER_PATH=%USER_PATH%;%SBT_HOME%
    setx PATH %USER_PATH%
    ちなみに"%SCALA_HOME%\bin"のところがダブルクオーテーションで囲われているのは、パスに半角スペースが含まれており、それをエスケープするためです。


    参考リンク

    2011年5月12日木曜日

    LiftとMongoDBとRogueを使ってみる。(その1:MongoDB編)

    LiftとMongoDBとRogueを使ってみます。

    MongoDBのダウンロードやらQuick Startなどは
    公式サイトから。


    マシン環境はWindows XP SP3 32bit。
    てことでWindows用の環境構築はこちらを参照。
    http://www.mongodb.org/display/DOCS/Quickstart+Windows


    DLしたファイルを解凍した先を環境変数PATHに設定しておきます。



    ひとまず意識するexeは2つ。
    • mongod.exe - データベースサーバー
    • mongo.exe - 管理用シェル

    チュートリアルの指示通りにデータを保持するフォルダも作っておきます。(今回はe:\data\db)

    PATHを通してあるので、とりあえずコマンドプロンプトで下記のように打ってデータベースサーバーを起動。

    mongod --dbpath e:\data\db
    --dbpathオプションでデータを保持するフォルダを指定しています。


    別のコマンドプロンプトにて、
    mongo
    と打つとシェルが立ち上がります。

    デフォルトではmongo.exeはlocalhost上のmongodサーバーに接続し、testデータベースを使用します。

    データ登録するにはこんな感じ。(mongoを実行しているコマンドプロンプトで実行します)

    db.foo.insert({name:"aaa"})
    これでfooというコレクションにnameがaaaという値が登録されます。
    コレクションはRDBで言うところのテーブルです。create tableしなくても勝手に作ってくれます。
    明示的に作る方法もあるようです。

    上記で登録した値を全件検索するには

    db.foo.find()

    で良いです。


    ********
    TODO

    1. Rogueの設定をする。
    2. RogueでCRUDしてみる。
    3. Lift+RogueでCRUDしてみる。

    2011年4月23日土曜日

    LiftでCamelCaseのsnippetがClass Not Foundとなる件。

    Lift 2.3で発生した問題。

    AccountSnippet.scalaにて下記のように記載。

    class AccountSnippet{
    //色々
    }


    VIEWに以下のように書いて実行。

    <lift:AccountSnippet.post form="POST">
        <ul class="status">
          <li> <accnt:name/> </li>
          <li> <accnt:submit/> </li>
        </ul>
      </lift:AccountSnippet.post> 

    するとブラウザには以下のようなエラーメッセージが。

    Error processing snippet: accountsnippet.post
    Reason: Class Not Found
    XML causing this error:

    <lift:accountsnippet.post form="POST">
        <ul class="status">
          <li> <accnt:name> </accnt:name></li>
          <li> <accnt:submit> </accnt:submit></li>
        </ul>
      </lift:accountsnippet.post>

    わけがわからないなーとぐぐってみると、
    どうやらHTML5のparserはすべてのXML系のタグをすべて小文字に変換するため、
    AccountSnippetとはマッチせず、Class Not Foundになるそうな。

    てことで

    class Accountsnippet{
    //色々
    }

    と変更したらうまく動きましたとさ。なんとも切ない話・・・。

    以下参考リンク。

    SnippetFailure message 
    ※最後のDavid Pollakの発言参照。


    ※2011/07/05追記:
    Html5とXHTMLの差違についてのDPPからの説明。
    Html5 and XHTML are different

    2011年3月31日木曜日

    映画『オーケストラ!』の感想

    2011年最初の映画は『オーケストラ!』(※リンク先音楽注意!)でした。


    【あらすじ】(allcinemaより)

    名門オーケストラの元天才指揮者が、ひょんなことから昔の仲間を中心にオーケストラを再結成し、かつての栄光を取り戻そうと奮闘する姿をユーモラスに描 いた感動音楽ドラマ。主演はロシアを拠点に活躍するアレクセイ・グシュコフ。共演に「イングロリアス・バスターズ」のメラニー・ロラン。監督は「約束の旅 路」のラデュ・ミヘイレアニュ。
    ロシアのボリショイ交響楽団で劇場清掃員として働く中年男アンドレイ。彼は30年前、この楽団で天才指揮者と持 てはやされ活躍していた。しかし、共産主義の当時、国がユダヤ人排斥の政策を強行、ユダヤ系の演奏家たちも例外なく排斥されることにアンドレイらは反旗を 翻したことから、解雇の憂き目に遭う。以来、再起の機会を窺いながら、冴えない現状に甘んじていた。そんなある日、パリの劇場から届いた出演依頼のファッ クスを目にしたアンドレイは、とんでもない考えを思いつく。それは、彼と同様に落ちぶれてしまったかつての仲間を集めて偽のオーケストラを結成し、ボリ ショイ代表として夢のパリ公演を実現させようという突拍子もない計画だった。こうして、タクシー運転手、蚤の市業者、ポルノ映画の効果音担当など、様々な 職業で生計を立てていた仲間が集まり、いざパリへと乗り込む一行だが…。

    【感想】

    1. 良かったところ。
      1. 30年前に指揮棒を折られた男が、「自信」やら「究極のハーモニー」やら「仲間」やらの失った物を取り戻すべく偽のオーケストラを結成するという大博打を打つも、問題が起こる度「やっぱり自分には無理だ・・・」と諦めかけたりして、でもその度奥さんや親友の励ましを受けて立ち上がるという、ある種ベタな話なんですけど、見事な演技と演出と脚本で、ラストシーンにはとてつもない感動が得られるという。
        1. 負け犬が這い上がる映画としても胸を打ちます。
      2. 偽のオーケストラを結成してドタバタしていたけど最後には公演を成功させましたー、というだけでは感動はしない訳で。
        物語上重要な鍵を握る役としてのメラニー・ロラン演じるアンヌ=マリー。ラストの演奏シーンで、アンドレイ達との縁を理解してからの
        表情の美しさと
        瞳にうっすらと浮かぶ涙と
        今にも嗚咽が漏れだしそうな首筋の動きに
        もう泣けて泣けて仕方なかったです。(予告映像の1:40あたり)
        1. このあたり、過去と現在をうまく混ぜあわせて観客を飽きさせない演出は素晴らしいです。アンドレイのモノローグはあるものの、アンヌ=マリーに対して言葉で説明するということはなくって。言葉は交わさずとも伝わるという事自体が、アンドレイ達とアンヌ=マリーの強い繋がりを示していて。
    2. これはちょっと・・・というところ。
      1. ドタバタコメディ部分(特に一行がパリに行ってから)は、何度も繰り返されるので最後の方は「お前らもっとパリ公演に真剣に取り組めよ!アンドレイが不憫だよ!」と思って今ひとつ乗れなかったり。
        後から思うと、彼らもアンドレイと同じく、30年振りの公演ということで不安や恐怖に打ち勝てずに逃げてしまっていたんだなぁと。そこに届く1通のメールで皆の心が1つに!という展開は熱いと言えば熱いですね。
      2. ラストのシーケンスにて、偽オーケストラの未来が描かれるのですが、そこは「観客の想像にお任せします」というスタンスに留めておけば良かったのになぁ。自分としては「現在」と「過去」をもっと見ていたかったので、「未来」を描かれて鼻白んでしまいました。

    ドタバタ部分はあっても最後の演奏シーンで「ブラボー!」と叫びたくなる素晴らしい映画なのでオススメです!


    【関連リンク】

    TBSラジオ『小島慶子キラキラ』での『オーケストラ!』の紹介。
    ※ネタバレ満載なので注意!
    2011年01月04日(火) 神足裕司 ペラ☆ペラ
    2011年02月15日(火) キラ☆キラ オープニング☆トーク


    ラストの演奏シーンの完全ネタバレ動画。
    もう見た人の追体験用に。