書き置き。

ほぼ勉強の記録みたいなもんです。

Marionette.js を使ってみる準備

先日見つけたブログ記事を見ながら、Marionette.js を使ってみる準備をした

Marionette.js(Backbone.js)のチュートリアル with yeoman その1(準備からサーバー側実装まで)

nodebrew をインストール

$ curl -L git.io/nodebrew | perl - setup
$ nodebrew install v0.10.24
$ nodebrew use v0.10.24

http://nodejs.org/ によると、今現在のcurrent versionが v0.10.24 だったのでこれにした。

よく使いそうな gruntyomen おじさんをインストール

$ npm install -g grunt yo

ここからようやく Marionette

yomen の generator をインストールする

$ yo
[?] What would you like to do?  
> Install a generator
[?] Search NPM for generators: 
> Marionette
[?] Here's what I found. Install one? 
> generator-marionette
[?] What would you like to do? 
> Run the Marionette generator (0.1.5)
     _-----_
    |       |
    |--(o)--|   .--------------------------.
   `---------´  |    Welcome to Yeoman,    |
    ( _´U`_ )   |   ladies and gentlemen!  |
    /___A___\   '__________________________'
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

こんなおじさんが出てくる。

ログがだーーーーっと流れていく中に、Error. って見えた。

mocha-amd が必要なようだ。先に yo コマンドで generator-mocha-amd をインストールしておく

さらに、mongodbとphantomもインストール

$ brew install mongodb
$ brew install phantomjs

Macに直接mongodb入れるのはちょっと、、、と思いつつも、そんなところでハマリポイントになるのも辛いので、つべこべ言わずに入れておいた。不要になったら消す。

もう一度やり直したら、エラーも出なく最後までインストールを終えた。

  3 tests complete (222 ms)

pre-build test passed successfully, skipping build...

お、テストも通ってる。

Spika-Server の処理を追ってみる その後

etc/app.php でurlに対するコントローラーを登録
src/Spika/UserController.php の各メソッドでその下の階層のpathに対する挙動が設定されている
他のコントローラーではメソッド分けせずに、connect() にベタ書きしているものもあり、このあたりは統一されていないようだ。

src/Spika/Db/CouchDb.phpCouchDBへのアクセスはまとめられている。

CouchDB に対してHTTPでアクセスしているところまでは理解したが、
例えばメールアドレスからユーザーを探す箇所が、どうしてこういうパスになるのか、理解できなかった。CouchDBを使うときの決まり文句なのか、Spikaの独自ルールなのか?

$this->couchDBURL . "/_design/app/_view/find_user_by_email?key=" . $emailQuery

デバッグ用にDebugController を新設して、自分でCouchDBとのデータやりとりも見よう見まねで書いてみた。

$controllers->get('/user', function (Request $request) use ($app, $self) {

        $output = "デバッグ画面";
        $output .= "<pre>";

        $email = "<メールアドレス>";

        $Result = $app['spikadb']->findUserByEmail($email);
        $output .= print_r($Result, true);

        $output .= "</pre>";
        return $output;
});

最後、return した文字列が画面に表示される。デバッグ目的だったのであればこれで十分。
ちゃんとHTMLで画面を作りたい場合は、twigを使うこともできる。

Futon というツールを使うとブラウザで中のツールが見られるのだけど、これも使うのが今回が初めて。

http://localhost:5984/_utils/

SpikaServerからアクセスすると自分のユーザー情報は取得できたものの、Futon 画面上からそのデータにたどり着くことができなかった。 CouchDBのデータ構造上こうなるんだろうな、と予想ついたけど、PhpMyAdminのように簡単にはいかなかった。 ここはまだまだ勉強不足。

Spika作者のブログを見ると、DB接続部分は大幅な改修が行われているようだ。MySQLで使えるようになるようなので今後に期待したい。

SPIKA近況 - ヨーロッパで働く社長のブログ

本業が忙しいようで、Spika-Server は最後の更新が22日前、MySQL(PDOになるのかな?)関係のコミットはまだ上がっていないようだ。

MySQLが使えるようになったら、本気出す!

Spika-Server のユーザー認証処理を追ってみる

https://github.com/cloverstudio/Spika-Server

AndroidiOSも、エミュレータ上ではアプリが起動するところまで出来たので、ログインしようとするも認証が失敗してしまう。
仕方ないので、サーバー側のソースコードを読んでみる。

CouchDB を使うのは今回が初めて。 標準(?)のGUIツールはここにある。
※Vagrantfile にポート転送の設定が書いてあるので localhost で指定する

http://localhost:5984/_utils/

関係ファイル

  • init.php
  • src/Spika/Controller/ 以下のコントローラーファイル郡
    • 各url に対する挙動が設定されている
    • InstallerController.php
      • wwwroot/install にアクセスした時の処理、初期ユーザーを1人作成される
    • UserController.php ユーザー関連のコントローラーで、ログイン認証もここ
      • wwwroot/install にアクセスした時の処理
  • src/Spika/Db/CouchDb.php
    • コントローラーから呼んでいる CouchDBの処理が書かてれいる
  • logs/debug.log
    • ログファイル

処理

PHP の Silex というフレームワークが使われている。
symfony2 のコンポーネントが多数使われている。

UserController::setupAuthMethod() 認証処理のendpoint

$authResult = $app['spikadb']->doSpikaAuth($email,$password);
// -> CouchDb::doSpikaAuth($email,$password) が呼ばれる

オープンソースのメッセンジャープロジェクト Spika

MITライセンス

公式サイト

http://spikaapp.com/ja/

ソースコード

作者のブログ

ニュース系

はてなブログ(比較表) http://d.hatena.ne.jp/guide/plus

Marionette.js

経緯

もともと、Backbone.js をやった時に記述量が多くてつらい思いをしていたのと、Backbone.js の上に被せるライブラリがいくつかあるという話を見かけたことがあって、導入を検討してみたいと思っていた。

このブログ記事を読んで、Marionette.js の存在を知り、調べてみた。

https://twitter.com/tek_koc/status/420346715640569858

ググって見つけたのがこのブログ

このスライドを読んで、わかったような気になったところ。
Backbone.js を使っててどうやったら良いのかモヤモヤしていたところが、Marionette.js で少し解決できそうな気がした。
簡単なもの作ってみよう。

Macのドキュメント検索アプリ、Dash.app が便利

Dash.app

Dash.app は Mac で動く Developer 向けドキュメントを素早く検索するためのアプリ。
Docset を Download しておけばオフラインでも開けるので、インターネット環境が無いときや公式マニュアルサイトが障害時にも使うことができます。
対応言語/ライブラリの数もかなり多くて、メジャーなものはわりと揃っているように見えます。
頻繁にアップデートされていて今後も増えていくでしょう。
Dockset のバージョンアップもかなり対応早く、起動すると自動で Download 済みの Dockset が Update されるので、そこでライブラリ等のバージョンアップを知ることも多いです。

独自 Docset を追加する方法も公開されていて、非公開ライブラリを自分で追加することもできるようです。

価格

なんとこの便利なアプリ、アプリ自体は無料です。
但しデフォルトでは検索結果が表示されるまでに数秒待たされます。

アプリ内課金をすると、検索結果が一瞬で表示されるようになって仕事が捗るようになります。

※ だいぶ前に買った時の情報なので最新情報ではない可能性があります。

プラグイン

IntelliJ シリーズのアプリ(WebStorm や PhpStorm 等)で関数を選択して、[command + shift + d] で Dash.app で該当のページを開いてくれるプラグイン。 入れてみたらすごい便利す。

他にも Sublime Text、EmacsVim、TextMata、eclipse、AndroidStudio、などなど多くのアプリで連携できるみたいです。

道民のソウルフード 鮭のちゃんちゃん焼き

この記事は 道民部 Advent Calendar 2013 15日目 の記事です。

昨日は @irasally さんの [道民部][Advent Calendar] スーパーマーケットで北海道を知る(札幌 冬編) という記事でした。
北海道(札幌)のスーパーではどれも当たり前の光景ですね。素材ばかりなのに、見るだけでお腹が空いてきちゃいます。

水産コーナーには秋になると生の筋子と鮭がたくさん並びます。
どの家庭でもいくらの醤油漬けをつけます、という記事を書こうと思ったらすでに時期が終わっていたので、生鮭を使ったちゃんちゃん焼き のレシピをご紹介します。

数ある道民食のなかでも、野菜をたっぷり食べられてご飯のおかずになるので、イチオシです。 我が家では休日の夕食のほか、お弁当のメインおかずとしても活躍している一品です。

Untitled

用意するもの

生鮭も店頭に並ぶのは一年のうち秋の数週間と限られた期間です。
よく行くスーパーでは、半身で780円〜、 更に半分だと 600円程度〜 といった価格帯で売られています。

Untitled

北海道でとれた鮭でご紹介したかったのですが、時期を逃してしまったので、ノルウェー産の生アトランティックサーモン の切り身を買ってきてみました。 生鮭が手に入らなければ塩分少なめな鮭を用意すれば良いと思います。

Untitled

野菜はキャベツが定番で、今回は、キャベツ・ピーマン・しめじ を用意しました。
玉ねぎ、人参、なす、アスパラ、長ネギ など野菜炒めの要領で冷蔵庫にあるものなんでも入れてOKです。
さらに我が家では豚肉リクエストが強く、すこし豪華版となっています。

作り方

  1. 材料はすべて一口大に切っておく(鮭が切り身ではなく大きい場合はそのまま投入する場合もあります)
  2. バターを溶かして、鮭を皮のほうから両面の表面を焼きます
  3. 鮭の上に野菜・肉を乗せ、蓋をして蒸し焼きにする
  4. 合間に味噌だれをつくる
    • 味噌+みりん+砂糖
    • 甘さはお好みで、みりんで味噌をのばしてとろっとするくらいの感じ
  5. 野菜に日が通ったら4の味噌だれを入れて全体になじませる

たった5ステップで、おいしいちゃんちゃん焼きの完成です。

ポイント

野菜・肉を投入したあと、弱火にしてじっくり火を通してください。
火が強すぎると鮭が真っ黒焦げになってしまいます。 小さいお子様がいるご家庭、お弁当に入れる場合は 具材を少し小さめにすると良いです。

野菜の量にもよりますが、フライパンで作るなら深さのあるものが良いです。
ホットプレートで作って、大勢でわいわい食べるのもオススメです。
野外でジンギスカンをするときに、横にもう一台、ちゃんちゃん焼き というのも北海道らしい光景で良いですね。

ちゃんちゃん包み焼き

ちゃんちゃん包み焼き

Amazonで 「ちゃんちゃん包み焼き」 というものが売られていました。
一人分を作るならこうして包み焼きにするのも良さそうです。

つぎは?

さて、明日は @AT さんです。お楽しみに!

道内物鮭のちゃんちゃん焼きセット

道内物鮭のちゃんちゃん焼きセット