書き置き。

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

Marionette.jsのチュートリアル の続き

昨日Marionette.js(Backbone.js)のチュートリアル) 続き

grunt-cli をインストールするのを忘れていてインストールしたら
障害に当たってしまってハマった

その後は、上記サイトの通りに進めた。

ハマりそうになったポイント

  • マシンを一旦落としてしまったのでmongoDBが起動してなかった
  • sass と compassがインストールされていなかったのでインストール
    • bundlerがインストールされてない or 古かった? でcompassが起動できなかった(rubyよくわかってない)

REST クライアントは 以前インストールした Postman というchrome extention があったのでこれを使った。

Postman - REST Client

また明日、続きの その2を頑張ろう

grunt-cli をインストール

昨日、grunt はインストールしたけど必要なのは grunt-cli の方だった、と気づいてインストールコマンド ッターン!!

$ npm install -g grunt-cli

サクッとインストールされるはず、、だった。
registry.npmjs.org が 503 backend read error を返してくるもんだから、インストールできない。

npm http 503 https://registry.npmjs.org/*
npm ERR! registry error parsing json

ターミナルにはこんなログがズラリと並ぶ

Twitterで検索してみると、1時間位前から registry.npmjs.org が不調のようだ。なんてこったい。

しばらく待って http://registry.npmjs.org/ にブラウザからアクセスすると、json レスポンスが返ってきたので、改めてインストール。 ようやくインストールできた。

書いてみたけど、終わってみたらそれだけだった。

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