Sapporo.js - 2013.07.27に参加しました / Angular.js/Knockout.js についての感想など

Sapporo.js - 2013.07.27 に参加してきました。

今回は、 @tmaeda さんが Angular.js@iakio さんが Knockout.js について発表をしてくださいました。

簡単にですが、お二方の発表についてのぼくの感想をまとめておきます。(主に自分のメモ用)

AngularJSのご紹介

  • "Angular.js はフレームワークではない! HTML の再実装だッ!(バーン"

    • なるほど!という印象。今までは、HTML に独自拡張の属性をつけるのがあまり好きになれなかったんですが、こういう方針なら頷けます。
  • JSON の serialize/deserialize やコミットのタイミングなど、外部 API とのやり取りは特にサポートしていないのでプログラマが自分でなんとかする必要があるとのこと。

    • (Ember Data は自前でなんとかしようとしているんですが、今一歩力及ばずな印象。そもそもこのあたりはフレームワークで解決できない、ドメインに特化した領域ななんですねぇ...)
  • 変数名で DI を実現しているとことで、minify とは相性が悪そう -> 書き方で回避できるよ!

    • ちょっとしんどいですよねぇ... minifier のオプション(あるのかな..?)とかで設定できるとよいんでしょうか?

Getting start with knockout.js

  • 生の JavaScript の延長線上に存在している気がして、メソッド名を見るだけでもなんとかくどうなるかわかりやすい

  • "Knockout.jsはフレームワークではなくライブラ リだ(ズギャーン"

    • なるほど、こういう Knockout.js はこういう位置づけなんですね
  • ko.computed は依存性をプログラマが明示する必要がない、っていうのはかなりすばらしいと思いました。 -> "定義時に一回実行してみる"

    • こういう割り切りは大好きです。(Ember.js だと、自分で明示する必要があるので若干面倒です。そこまで人間が管理するの?っていうのはちょっとストレスフル。)
  • あまり大それたことをやっているライブラリではないので、Backbone.js を触ったことがあるひとならすぐに馴染めるのかな、という感じでした。ぼくは Knockout.js は触ったことがないですが。

その他

ちなみに、この MV* の空気を読まずぼくは Ruby の Middleman について発表してきました。

発表資料はこちら:

当日いただいた感想:

今回、ぼくからの発表お願いを快く引き受けてくださったお二人には感謝の気持ちでいっぱいです。

今後共よろしくお願いいたします。

Sapporo.coffee#1を開催しました

Sapporo.js-2011.05.08の裏企画としてSapporo.coffee#1を開催しました。


今話題の、CoffeeScriptの勉強会です。

勉強会と言ってもあまり固い感じではなく、コーヒーを飲みながらCoffeeScriptについて語らう感じで行いました。


きっかけは @mrkn のこのツイート。

今日の内容としては、CoffeeScriptが何かっていうところから始まって、インストール方法の解説、基本的な書き方やJavaScriptとの比較、CoffeeScript自体の簡略記法を紹介をしました。


本家サイトに載っているoverviewをざっくりと見ていったのですが、だいぶ楽にJavaScriptが書けて幸せです。


CoffeeScriptはJavaScriptの邪悪なパーツを上手く隠蔽してくれていて、しかも簡単に書けるのでほんとにすばらしいです。
Rails3.1からはデフォルトでCoffeeScriptが導入されるという話もあるので、今後はもっと使われていくんじゃないかなと思います。


今回は多くの方にご参加いただき、ありがとうございました!

今後は、Sapporo.jsとは独立して開催していく予定なので、ご都合つく方はぜひぜひお越し下さい!

Sapporo.js-2011.03.05を開催しました

Sapporo.js-2011.03.05 : ATND


この本もついに5章に入りました。

今回は蝶々本に載ってないところでも議論が盛り上がったので、話題に出たコードを貼り付けてみようと思います。


まずは4.15 メモ化から

用意されていたmemoizer関数に、キャッシュの破棄機能をつけてみよう、という話。

var memoizer = function(memo, fundamental) {
    var shell = function(n) {
        var result = memo[n];
        if (typeof result !== 'number') {
            result = fundamental(shell, n);
            memo[n] = result;
        }
        return result;
    }
    // リセットメソッド
    shell.reset = function(ini) {
        memo = ini;
    }
    return shell;
}

var fibonacci = memoizer([0, 1], function(fib, n) {
    return fib(n - 1) + fib(n - 2);
});
// 引数で与えたオブジェクトでリセット
fibonacci.reset([0, 1]);


また、本当に記憶したキャッシュを利用しているのかの確認のために、カウンターを設定してみます。

// 一回の関数呼び出しで計算が実行された回数
var t = 0;
// 実行された総回数
var total = 0; 

var fibonacci = memoizer([0, 1], function(fib, n) {
    t += 1;
    return fib(n - 1) + fib(n - 2);
});

// 降順で表示させているので、初回以降はすべて計算が行われていないことを確認する
for (var i = 10; i >= 0; i -= 1 ) {
    t = 0;
    // リセット機能の確認用
    // fibonacci.reset([0, 1]);
    document.writeln('// ' + i + ': ' + fibonacci(i));
    total += t;
    document.writeln(t);
}

document.writeln(total);


次は5章、継承なのですが、プロトタイプについてのおさらいです。
@bad_at_math さん、thxです!

// 一般的なプロトタイプ継承の例
var Child = function() {};
Child.prototype; // [Object object]
Child.prototype.hoge = "xxx";
var child = new Child();
child.hoge; // "hoge"

// オブジェクトからプロトタイプを設定する例(Mozillaのみ)
var c = {}, p = {};
p.__proto__ = {hoge: "ooo"};
c.__proto__ = p.__proto__
c.hoge; // "ooo"

また、間違えやすいのですが、以下の例はプロトタイプを設定できていない例です。
(ただ、"prototype"というプロパティが設定されるだけです。)

var c = {}, p = {foo: "bar"};
c.prototype = p;
c.hoge; // undefined


また、当日は、 @bad_at_math さんがLTをしてくださいました。

話の内容もすばらしかったのですが、何よりそれを即興でお話してくださったのがすごかったです。


また、当日の様子を @aloelight さんがまとめてくださっています。


次回開催は未定ですが、ご興味ある方はぜひいらしてください:-)
次回はp.56から始める予定です。


JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

Sapporo.js-2011.01.16を開催しました

Sapporo.jsでは、JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス を読み進めています。


今回は"4.11 コールバック"から進めていきました。
本ではさらっと書いてますけど、この辺りは内容が濃いです。


説明だけじゃなくて、もっとコードで動作を確認しながら進めていけばよかったなぁと反省してます><


また、今回は2人の方が発表してくださいました。

@havanaclub_ さん

@dont_cocoaさん

次回は3月開催予定です。
"4.15 メモ化"から進めていきます。


お時間ある方はお越しくださいませ!


JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス

Sapporo.js-2010.11.27の発表資料

開催からだいぶ時間が経ってしまいましたが、Sapporo.js-2010.11.27での発表資料を載せておきます。


デモアプリのコードはこんな感じです。


次回は2011/01/16(日)開催です。
よろしければお越しくださいませ!


Sapporo.js-2011.01.16

大事なのは続けること、そしてそこから何を学ぶか

Sapporo.js-2010.08.07 が無事終了しました。
お越しくださったみなさま、本当にありがとうございました!


本日のLT資料を貼り付けておきました。
あまり中身はないので申し訳ないのですが(笑)

さて、今回はじめての開催ということでいろいろ手探りだったのですが、「よく訓練された方々」のおかげでなんとか乗り切ることができました。
ありがとうございます!!


次回以降の勉強会をもっともっといいものにしていくために、頑張っていこうと思います。



成功するにしても失敗するにしても、そこから得られるものをしっかりと探していきたいなぁ。