CoffeeScriptのnew @(objects)

spineのソースコードでわからないとこがあって、なんで@をnewしてんの?っていう。

class Test
  constructor: (@name)->

  @test:(name) ->
    new @ name

test1 = new Test 'xxx'
test2 = Test.test('yyy')

console.log test1
console.log test2

new @ nameはTestクラスのコンストラクタ関数を指しているという理解をした。

組織、イノベーション、そして人間のマネジメント

邦題がなにかに引っ張られているのはおいておいて、マネジメントを過去の成功者から学ぶという内容の本です。

ProductName 有名人の成功のカギはドラッカーの「マネジメント」にあった
フランク・アーノルト
阪急コミュニケーションズ / 1890円 ( 2011-05-27 )


組織のマネジメント

  • 基本的には顧客が買うのは製品ではなく、製品やサービスから得られるメリット
  • すぐれた意思決定が可能かどうかは本質的には、健全な議論文化があるかどうかそれしだい

イノベーションのマネジメント

  • イノベーションには明確で厳格な基準がある。それは、市場と顧客にとってメリットがあり、市場と顧客が満足できること

人間のマネジメント

  • 達成目標は組織内の人間に、エキスパートとして貢献するのに必要な情報を与えてくれる
  • 仕事に対する要求をどんどん下げていくと、その後に要求を上げるのはほとんど不可能に近くなる
  • たいていのひとは、時間とお金を交換しているが、逆にお金を時間と交換しよう

今いるセクションは、もうちょっと人間のマネジメントをちゃんとやってほしいなぁと思いつつも、組織内個人を強く打ち出すという訓練になるからまぁいいのかなと前向きに捉えることにしている。

Backbone-HangmanをSpine+Flaskで書きなおしてみた

Spineはサンプルとかドキュメントがまだまだ少ないので苦労することが多い。sofにも質問が70位しか投稿されてないしね。

Backbone-HangmanっていうSinatra+Backbone.jsで書かれたよさげなサンプルがあったので、これをSpine+Flaskで書きなおしてみた。Flaskのほうはさくっと終わったんだけど、Spineで書きなおすのに1週間以上かかってしまった。

spine hangman

今思うと、Spineがわかっていないというよりは、イベントドリブンなコードの読み方がちゃんとわかっていなかったんだろうと。モジュールごとに読んでも混乱するだけで、イベントごとにちょっとづつ組み立てていかなきゃあかんわなと。そういえば、backbone.jsのチュートリアルもそんな感じだったし。

spine.appはディレクトリが存在するとappオプションで作成できないので適当なディレクトリでスケルトンを作成して中身をmvした。それからFlaskのstaticにbuildされるようにslug.jsonにpublicを追加

  "public": "./static",
  "dependencies": [
    "es5-shimify", 
    "json2ify", 
    ...

今回理解したこと

  • 独自イベントのトリガーとバインド
  • elの使い方
  • ecoのロジック
  • spine.appとFlaskの連携のさせ方(ディレクトリ構成)
  • jQueryとcssを使ったウェブアプリの作り方の理解が甘いこと

放置したものはテストのやり方。モデルはまぁ分かるんだけどコントローラーのテストは一度やっておく必要がある。console.logのデバッグは疲れる。

Python Testing: Beginner

pythonでのテストの本

doctestの使い方に始まり、doctestでのモックの使い方(mockerライブラリ)を学んだらdoctestでは不十分なユニットテストをUnittestライブラリを使ってテストする。

続いてNoseでdoctestとunittestを統合することを学びつつ、TDDの話しへ。

ほんでもって、twillを使ったwebアプリのテストのやり方をざっと紹介して、integration test, system testっていう流れ。

ProductName Python Testing: Beginner's Guide
Daniel Arbuckle
Packt Publishing / 3220円 ( 2010-01-31 )


エキスパートPythonプログラミングのテストの章の内容の充実度が物足りなく感じたら読めばいいレベルの本だと思う。知りたかったモックの使い方とtwillの使い方が丁寧に書いてあったので個人的には費用対効果が高くて満足の一冊だった。

ProductName エキスパートPythonプログラミング
Tarek Ziade
アスキー・メディアワークス / 3780円 ( 2010-05-28 )


ポケットモンスターホワイト2を予約した

予約したけど娘にDSを奪われているので、サポートという遊び方になりそう。

トレーナーのトレーナーつまりメタトレーナーというわけですな。

ProductName ポケットモンスターホワイト2

任天堂 / 4079円 ( 2012-06-23 )


勝手にポケモンが育成されるのでそれはそれで楽になるかもしれないが、ブラックの時は育てたいお気に入りのポケモンが一致しなかったので、そこに関してはちょっと不安。

臥龍梅が続いたの巻

無濾過生原酒の吟醸はすぐ酔いがまわるなぁとつくづく。 純米も切れ味するどくシャープ目な味わいなのでくいくいと。

1334571130

イチゴ狩りからミトシーのコンボを決めた

ひと月くらい前の話だと思うが。

1333974325

1333974327

1333974329

内浦漁港の朝一で干物なんかを買って、隣のミトシーへ。

1333974332

1333974334

1333974337

ペンギンはなかなか可愛かった。

1333974339

ProductName るるぶ静岡伊豆浜名湖富士山麓11 (国内シリーズ)

ジェイティビィパブリッシング / 840円 ( 2010-10-08 )


SpineのtodoサンプルをSpine.appで書いてみた

SpineのtodoサンプルをSpine.appを使って書いてみた。これはBrunch(Backbone.js)みたいに、モデル、ビュー、コントローラーをバラバラに開発してbuildすると一つのjsファイル(cssも)にアセンブルしてくれるツールですね。テンプレートはecoを使っています。

index.coffeeの役割がわかりづらかったので理解するのにちょっと時間がかかった。

hem model task

とかやるといっしょにテストのひな形が作られるのとlocalhost:9294/testにアクセスすればjasmineのテストが走るようになっているので使いやすそう。

そして以下の素晴らしい三部作を読んでSinon.jsの便利さに目覚めたので積極的に使っていこうと感じた。

Spine.Model.AjaxつまりRESTのAPIはFlaskを使おうと思っているんだが、Flask-Restlessを利用するのが手っ取り早くていいかなぁと。

javascriptでundefinedから真偽値を作り出す

spine.todosのtodoがデフォルト値を入れてないのに真偽値を返すので、なんでだ?と。

適当なオブジェクトを作って確かめてみると確かに真偽値が返ってくる。

> t = {name:'kzfm'}
{ name: 'kzfm' }
> !t.done
true
> !!t.done
false

結局undefinedかと。

> !undefined
true
> !!undefined
false

JGPのappendixにundefinedはfalsyだって書いてあった。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


でもちょっとわかりづらいなぁ。

CoffeeLintでflymakeするように設定した

最近順調にバージョンが上がっているCoffeeLintを使ってみた。CoffeeLintのサイトから辿れるcoffeelintnodeはサバクラの構成っぽくてちょっと使いづらそうだったので、flymakeの設定を書いてみた。

flymake-cursorにも対応させてあるので下のスクリーンショットのミニバッファーにエラー内容が表示されてる。

flymake_coffee

自分でelispを書く場合、この本はとても良かった。この本を片手に他の人の書いたelispを読むのも楽しい。

ProductName Emacs Lispテクニックバイブル
るびきち
技術評論社 / 3129円 ( 2011-11-26 )


それからcoffeelintのパスがnvmのちょっとアレなパスで直書きしたくなかったのと、coffeelintが結構死ぬので、flymakeが巻き添えを食わないようにする設定のやり方を参考にさせてもらった。

昨日書いたpythonのflymake部分を切り離してinit-flymake.elに統合したので、coffeescriptだけ設定したい場合は下のelispからpythonの設定を削除すれば動くと思います。

(defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
  (setq flymake-check-was-interrupted t))
(ad-activate 'flymake-post-syntax-check)

(add-hook 'find-file-hook 'flymake-find-file-hook)

(when (load "flymake" t)
;; flymake+pyflakes+pep8
; http://d.hatena.ne.jp/cou929_la/20110525/1306321857
  (defun flymake-pyflakes-init ()
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
           (local-file (file-relative-name
                        temp-file
                        (file-name-directory buffer-file-name))))
      (list "pycheckers" (list local-file))))
  (add-to-list 'flymake-allowed-file-name-masks
               '("\\.py\\'" flymake-pyflakes-init))
;; flymake+coffeelint
; http://blog.kzfmix.com/entry/1334315825 
  (defun flymake-coffeelint-init ()
    (let* ((temp-file (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
           (local-file (file-relative-name
                        temp-file
                        (file-name-directory buffer-file-name))))
      (list "coffeelint" (list "--csv" local-file))))
  (add-to-list 'flymake-err-line-patterns
                 '(".+,\\(.+\\),\\(.+\\),\\(.+\\)"
                   nil 1 nil 3)) 
  (add-to-list 'flymake-allowed-file-name-masks
               '("\\.coffee\\'" flymake-coffeelint-init)))

(load-library "flymake-cursor")

magitの使い方も覚えたので、Flask+Spineのコーディングが快適にできそう。