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日(火) キラ☆キラ オープニング☆トーク


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



2010年12月31日金曜日

『IT業界の人とかが麻婆豆腐の作り方を学ぶ会』のふりかえり

今更ながら
のふりかえり。
次回も同様のイベントがあると思うので、今回の経験を活かすためにも年内にやっちまいます。

KPT

  1. Keep:  
    1. 名古屋東生涯学習センター 料理室 が素晴らしい。
      1. 料金:午後5時から午後9時までの使用料が3000円。10人で割れば300円。安い!
      2. 設備:冷蔵庫・ガスコンロ・調理器具一式(包丁・まな板・鍋・ボウル・ざる・菜ばしなどなど)・食器類一式が揃っています。
        持ち込みが必要なのは、台拭きや食器拭き、食器用洗剤ぐらい。
        前にはホワイトボードもあるので、色々書き出したり出来ますぞ。
      3. 立地:バロー車道店が歩いて5分ほどなので買出しに便利。あと近くの加納商店で安くお米も買えます!
      4. 注意点としては、料理室内はスリッパに履き替える、ゴミは持ち帰り、(揚げ物等で使う大量の)油はそのまま流しには捨ててはダメ、というぐらい。
    2. チームを分ける。
      1. 「辛いもの好き度」で複数チームに分けました。棲み分け出来て良かったと思います。
    3. 前半後半に分ける。
      1. 全チームが同時に麻婆豆腐を作り始めるとカオスになると思ったので、前半チームと後半チームに分けました。
        前半後半に分けても、結構ばたばたしていましたが、分けずにいるよりは随分とマシだったかと。
    4. 使い切れないものは買わずに持ち込む。
      1. 醤油・洗剤・台拭き等は六郎さんに持ってきて頂きました。持ち込まれる方には参加費値下げor余った食材の進呈でリターン。
  2. Problem
    1. チーム内での計画作りをきっちり行うべき。
      1. チーム分けは行ったものの、チーム内での人数の把握(→割り振られる食材の量=リソースに影響)、担当作業の割り振りがきっちりされていなかったので、料理を始めた途端ばたばたしていた印象。
    2. 食材が余った。
      1. 食材は前の講師テーブルに置いておき、チームの人が好きな量を持って行くという形式でした。遠慮するチームが多かったのか、食材が結構余ってしまいました。(豆腐2丁とネギ1本、その他色々)
    3. ふりかえりをきっちりやれば良かったなぁ。
      1. 今このふりかえりを書きながら、終わった後のふりかえりを皆できっちりとやればもっと様々な視点が得られた&創発できたかと。
    4. 立ちっぱなしで疲れた。
      1. 4時間たちっぱなしでへろへろになりました。
  3. Try
    1. チーム内での計画作りの時間を設ける。
      1. 料理着手前に、計画づくりの時間を設ける。
        「美味しい麻婆豆腐を楽しく作るためにはどうすれば良いか?」というお題を提供すると良いかも。
        余裕をもって料理に取り組むことにつながれば、と思います。
    2. 食材は余らせない。
      1. チーム内の人数が決まったら、主催側から食材を配給するやり方もあり。
    3. 休憩時間or場所を設ける。
      1. 料理室には椅子があるので、休憩時間や休憩スペースを作れば良かったなぁ。
    4. ふりかえりはきっちりとやる。
      1. 片付けが終わった後に、ふりかえりをやる。
        名古屋アジャイル形式で、付箋に書き出してやれば、もっとカイゼンのアイデアが出たり、気づきが得られたと思います。次回はきっちりとやりたいです。
        ちなみにふりかえりが疎かになった個人的な理由は、疲れていて早く切り上げたかったからでした・・・。次回は料理中も休憩して体力を温存しつつ、ふりかえりの時も椅子に座って落ち着いて取り組む、ということをやりたいです。

その他

この会以降、自分で料理する時の麻婆豆腐登場回数が格段にあがりました。麻婆豆腐美味しいです! TwitterのTLを見ていても、参加者の方が麻婆豆腐を作られる頻度が上がったような・・・?


次回の料理イベント

さて、料理イベントの次回の開催時期やテーマは未定ですが、
今のところ餃子が有力です。
・怪しい具を入れる「闇餃子」
・1つだけデスソースを入れる「ロシアン餃子」
という色々な楽しみ方ができますね。


2010年12月13日月曜日

SBTでLiftを扱う。(Scala 2.8.0、Lift2.2)

正直下記リンク参照です。

http://www.assembla.com/wiki/show/liftweb/USING_sbt


There is an example Lift SBT prototype for the current release that you can clone from GitHub instead of following the steps below.
There is also a SBT prototype for version 2.2 which uses Scala 2.8.0

あと、Scala 2.8で2.2-SNAPSHOTを取ってくる時は下記に注意です。
For Scala 2.8 projects use 2.2-SNAPSHOT, change lift-archetype-basic to lift-archetype-basic_2.8.0, and follow the 2.2 jar naming convention described below


修正したもの。

mvn archetype:generate -U \
   -DarchetypeGroupId=net.liftweb \
   -DarchetypeArtifactId=lift-archetype-basic_2.8.0 \
   -DarchetypeVersion=2.2-SNAPSHOT \
   -DarchetypeRepository=http://scala-tools.org/repo-snapshots \
   -DremoteRepositories=http://scala-tools.org/repo-snapshots \
   -DgroupId=your.group.id -DartifactId=projectName

2010年12月11日土曜日

"Introduction to Category Theory in Scala"をなんとなく訳す。

Heiko Seebergerさんの"Introduction to Category Theory in Scala"をなんとなく訳す。
細かい部分は訳していなかったりする。
http://hseeberger.wordpress.com/2010/11/25/introduction-to-category-theory-in-scala/


圏論入門 in Scala

もしあなたがJava開発者で私のようにScalaのファンであるならば、
あなたは遅かれ早かれmonadやfunctor、その他の圏論の領域に由来するミステリーに
遭遇するだろう。
あなたがこれらに熟知しているのであれば時間を無駄にせずに進んで欲しい。
しかしそうでないならば、抽象的な数学とコンピュータサイエンスの橋渡しとなる
秘密の領域を知る私の努力を反映したちょっとした観光にご招待したい。

このブログポストは入門として書いている。私の健康(書いている間、私の頭が爆発するんじゃないかと思った)、私の将来の時間の余裕(理解するのにとても時間がかかるので)、そしてあなたのフィードバックによっては、この続きを書こうと思う。だが今はとにかく始めよう。


圏とは何か?

    圏論について話す時に、まずこれが最初の質問になるだろう。私の意見では圏の概念はプログラミングにはそこまで有用ではない。ここでは包括的な回答を載せる:


    圏は、オブジェクトと、オブジェクトとオブジェクトの間のマップ(別名:モーフィズム、もしくはアロー)で形成される。マップはマップはassociative fashionで合成されることがあり、それぞれのオブジェクトにはアイデンティティマップを持つ。


    オブジェクトは何であっても良いが、今回は単純なケースを見ていこう:圏は有限の集合とする。下記の図は、2つの有限の集合と、ソース(別名:ドメイン)からターゲット(別名:コドメイン)へのマップを表している。


    ※訳注:図は省略。

    ・carnivore:肉食動物

    ・herbivore:草食動物



    やや形式的に表現すると、ドメインAとコドメインBについてのマップをこのように表現する。


    f:A→B


    では合成とは何だろう?次の図を見て欲しい。ここでは、別の有限な集合と別のマップを追加している。食性があなたの知っているものと異なっていることは気にしないで欲しい。
新しい集合をCと呼び、新しいマップをg:B→Cと呼ぼう。明らかに、AからCへたどり着くには、まずfを経由し次にgを進めば良い。従って、私たちはfとgを合成して新しいマップ:

    g ο f: A → C

を得た。

さて合成を知ったところで、associativityとidentityについて話をしよう。別のマップh:C → Dを加えよう。
associativityの法則は、下記が真であることを要求する。

    (h ο g) ο f = h ο (g ο f)

associativityは数字の加算か乗算を考えると分かり易いだろう。
identityの法則に進もう。
これは、圏におけるそれぞれのオブジェクトXについて、下記を満たすidentityマップ1X: X → X が存在することを要求している。

        * f ο 1A = f
        * 1B ο f = f

次の図は、私たちの例で用いる有限の集合におけるアイデンティティマップを表している。明らかにアイデンティティマップにとっては、ドメインとコドメインは同じオブジェクトである。
これが圏である。オブジェクト、マップ、合成、associativityとidentity。圏論について深く学びたいのであれば、Wikipedia か “Conceptual Mathematics” by Lawvere and Schanuel をお勧めする。それではScalaの観点から圏を見ていこう。


続きはいつか書く。