ラベル JavaScript の投稿を表示しています。 すべての投稿を表示
ラベル JavaScript の投稿を表示しています。 すべての投稿を表示

2012/05/05

[JavaScript] Sapporo.js-20120505に行って来ました #sapporojs

Sapporo.js-20120505

今回は「8章 メソッド」のArray#reverseからスタート

解説したメソッド

  • array.reverse()
  • array.shift()

一般発表

ぬるjs @PUPRLさん

  • ぬRubyからきました
  • node-five
    • nodeでQtでcanvasでデスクトップアプリ
    • 関係ないけどmake.js
      • この作者が使ってるjs製のMakefile

NotHub API の紹介 @tricknotesさん

  • githubの更新を表示するChrome Extension
  • 用意しているI/F
    • Socket.IO
    • WebSocket
  • 見えないときは心の目で確認する

Web Audio APIとNode.jsで楽々ウェブ楽器の作り方~Beatonica @aike1000さん

  • Beatonica
    • twitterのソーシャルグラフを利用
    • 人にランダムに音を割り当ててる
  • Web Audio API
    • 音の加工が簡単

2012/03/31

Sapporo.js-20120331

Sapporo.js-20120331

テストフレームワークの紹介

QUnit

  • jQueryから分離
  • XUnit系

jasmine

  • BDD for JavaScript
  • RSpecっぽい

whiskey

  • 最近よさげ?
  • Nodeで使いやすいように作ってある
  • ドキュメントが少ない

mocha

  • @tricknoesさんがお気に入り
  • フレキシブル
  • 実行結果の出力形式が豊富
    • JSONとかTAPとか

mochaの準備

  • npm install -g mocha
  • npm install expect.js
  • current dirにtest/を作ってテスト用ファイルを作る

    describe('Example', function() {
        it('should passed test', function() {})
    }
    
  • mochaを実行すると、test/以下のファイルを実行してくれる

追記: mochaのinstall時に-gをつけないと、mochaコマンドを直接叩けない

mochaのその他メモ

  • -Rで出力を切り替えられる。指定できるフォーマットは--reportersで確認
  • -wでtest以下のディレクトリの変更をwatch
  • -Gを付けるとGrowlに通知

JavaScript: The Good Partsの読み合わせ

遅延再定義 @oosugi20さん

    var func = function() {
        var count = 0;
        var hoge = $('#hoge');
        $hoge.text('1回目のクリック');
 
        // 2回目以降は↓の関数のみ実行される
        func = function () {
            count += 1;
            hoge.text('2回目以降のクリック(' + count + ')');
        };
    }
 
    $(function(){
        $('#btn').on('click', function() { func(); });
    });
  • countによって処理をわけているけど、毎回countを比較しないので効率がよい
  • jQueryオブジェクトを入れる変数にはプレフィックスとして$をつけてる

2011/07/31

Sapporo.js 2011-07-31 参加レポート #sapporojs

今日はSapporo.js 2011-07-31に参加してきましたので、そのレポートを。
次回も可能であれば参加したいです。

5.4 関数型

写経

    var mammal = function(spec) {
        var that = {};

        that.get_name = function () {
            return spec.name;
        };

        that.says = function() {
            return spec.saying || '';
        };

        return that;
    };

内部にプライベートなthatを用意してカプセル化を実現

    var dog = mammal({name:"Dog", saying: "Bow"});

    document.writeln(dog.get_name()); // Dog
    dog.name = "Cat";
    document.writeln(dog.get_name()); // Dog

引数が分かりづらいのでこうして見る

  • 型チェックの追加
  • specに必要なkeyを明示的にする

改善後

    var mammal = function(spec) {
        var that = {};

        if ( typeof spec === 'object' && spec ) {
        } else {
            throw "spec should be an object';
        }
        var name   = spec.name   || 'mammal';
        var saying = spec.saying || '';

        that.get_name = function() {
            return name;
        };

        that.says = function() {
            return saying;
        };

        return that;
    };

改善前のはspecを先に定義しておけば、nameを書き換えられる

    var dogSpec = { name: "Dog", saying: "Bow" };
    var mydog = mammal(dogSpec);
    console.log(mydog.get_name()); // Dog
    dogSpec.name = "Cat";
    console.log(mydog.get_name()); // Cat

改善後のように変数、関数を別定義にしておけばちゃんとカプセル化される


Q. 最初に出てきた引数myは必要なのか?

    var mammal = funciton (spec, my) {
        // 省略
    };

A. 本に使用例も出てきてないし、誰もいい使い方が思いつかないから必要なさそう


親の関数をoverrideする前に変数に入れておけばOK

    var coolcat = function(spec){
        var that = cat(spec),
            super_get_name = that.superior('get_name');

        that.get_name = function(n) {
            return 'like ' + super_get_name() + ' baby';
        };

        return that;
    };

    var myCoolCat = coolcat({name: "Bix"});
    console.log(myCoolCat.get_name());

P.63までやった。次回は 5.5 オブジェクトのパーツ(P.64) から


LT

jQueryを読んでみよう @tricknotes さん

まずはgitからソースコードを持ってくる

git clone https://github.com/jquery/jquery.git

buildするにはREADMEを嫁

  • node.js 0.2
  • git 1.7
  • GNU make 3.8

今のHEADは1.6.3pre

いきなりsourceを読んで前回敗北したのでtestを見ていく

  • QUnitで書かれてる
  • test/index.htmlをブラウザで開くと実行していく様子が見れる
  • test/unit/*.jsがテストコード
  • test codeから読むと何がしたいコードなのかわかるので、そこを頼りに読み解く

jQueryのcodeの中にはThe Good Partsがいっぱいある

    var jQuery = (function(){})(); // 無駄なglobal varをつくらない

Sapporo.js-webの裏事情 @tricknotes さん

Sapporo.js-web

  • nodeで動いてる
  • JoyentCloud

    • 通常はxxxxx.no.deというドメインになる
    • グローバルIPも貰える
    • sshも使える
    • git pushでdeploy
    • 1ヶ月くらい申請でかかる!
    • gcc v3.4.6, makeとかは入ってた
    • solarisの模様

ベースはLooseleaf.JSで作成

githubでサイト自体も公開

@onjiro_mohyahya さんがテーマのベースを作るので、その後pull-requestをお待ちしてます

2011/03/05

Sapporo.js-2011.03.05の感想と本読み、LTのメモ

感想

  • 読み合わせのある勉強会は初めてだった
    • 読んで、その部分のコードを試してみんなで疑問を試したりして進んでいった
    • Perlでやるとしたら、どの本がいいのかな
    • さらっとやるのかと思ったら、意外と深いところまで突っ込んでた
  • 札幌市民ホールの会議室は綺麗でススキノにも近い
    • でも18, 24人のサイズの後は74人とかになる

以下、作業中のメモ

本読み

  • fibonacciのメモ化
  • Object.createのprototype, constructorの挙動

    Object.create = function(o) {
        // 無名関数でもいいけど、名前を付けると
        // stacktraceで出ることもある
        var F = function Child() {};
        F.prototype = o;
        return new F();
    }
    
  • 関数と変数で同じ名前を使用したら、関数定義が先に解析されるので変数が上書きする

    // OK
    Object.create function(o) {
        alert(F);
        F.prototype = o;
        function F() {};
        return new F();
    }
     
     
    // NG
    Object.create function(o) {
        alert(F);
        F.prototype = o;
        var F = function F() {};
        return new F();
    }
    
  • __proto__を使うとnewを使わないでもいける。但しもじらだけっぽい

    var c = {}, p = {};
    p.__proto__ = { hoge: 'xxx' };
    c.__proto__ = p.__proto__;
    alert(c.hoge || 'ooo'); // mozilla => xxx, IE => ooo
    

LT @bad_at_mathさん

JavaScriptの成り立ち

  • Nescapeが1995
  • Scheme, Selfからの影響
  • ECMA(ヨーロッパ)で標準化
    • ECMA 262
    • ISOとかも
  • ECMA 262 - 3rd (1999年頃)
  • ECMA 262 - 4rd (2005年頃)
    • Class, Interface
    • MS/AdobeとYahoo/Mozillaが対立
    • ぐだぐだ
  • ECMA 262 - 5th (2009年頃)
  • ECMAの特徴
    • 小さい
  • ブラウザのJavaScript
    • CORE(ECMA)
      • SpiderMonkey
      • Rhino
      • V8
      • Carakan
      • Chakra
      • Appleのなんか
      • 第2次ブラウザ戦争
    • DOM
    • E4X
    • イベント系

Node.js

  • 以前からいろいろあったけど、使われてない
  • Multi Thread
    • IOが実行時間の中で支配的
    • context switchも数が多いとすごい
    • メモリいっぱい
  • Single Thread + Non Blocking IOか
    • 省メモリ
    • Node.jsはこっち