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/07/17

Hokkaido.pm#5の参加レポート一覧(7/22更新)

Hokkaido.pm#5に参加レポートで発見できたものを載せておきます
blogに書くまでが勉強会なので、運営スタッフへの文句でもいいので書いていただけるとありがたいです。

2011/07/18 13:40
@akiymさん、@hirataraさん(LT)追記

2011/07/18 22:02
@lapis_twさん追記

2011/07/19 23:54
@nekokakさん追記

2011/07/21
@koji_magiさん、@keroyonn_さん追記

2011/07/22 0:01
@xtetsujiさん追記

2011/07/16

Hokkaido.pm #5

Hokkaido.pm#5のメモを公開しておきます。

Perl/SDL @charsbarさん

  • SDLの紹介
  • ニコ動に動画もある
  • CPANにあるよ
  • Perl Foundationの肝いりの詳細な資料あり
  • Rubyでは本まででてる!
  • Marc LehmannさんがGames::Sokoban
  • Games::Sokoban::ControllerをCPANにupした
    • ascii artでまずかいた
    • その後SDL化
  • 動くものができるのでLTとかにいいよ!

xtetsujiさん

  • リモートメールの中の人
  • Apache + mod_perl2
  • 古いCGIを改修とかの仕事がまわってくることもあるので対処用としても使える
  • mod_perl1 1996, mod_perl2 2002
  • mod_perl1とmod_perl2で文法違うから気をつけて
  • mod_rewriteのリファクタリングとかをPerlTransHandlerを使う
  • Apache2でSMTPサーバ
    • posftfix pipeとかではメール受信時のforkコストが高い
    • 重たいモジュールもごりごり使える
  • qpsmtpd
    • 良さげ
    • エンジン切替ができる

libperl++ lapis_tw

  • 動きませんでした
  • PODとReadmeの中身が違う
    • ライブラリのバージョンも違う
    • MSVCで使えるって書いてあるけど、やっぱり使えない
  • TODO、XXX、FIXMEだらけ!
  • 次回までに動作させる

@nekokakさん

  • @akiymaさんが推しまくったのでこれた
  • API, gateway開発
  • お母さん役
  • DevOps的な社内取り組み
  • YAPC::Asia 2010 省サーバ運用でベストスピーカー賞次点
  • カンファレンスは情熱をもらうところ
  • 自プロダクトを使いたけど、今のプロジェクトでは使えない
    • 折り合いをつける
    • ドックフード -> eat your own dog food
    • 自分で使うために作る
    • 有りもので満足できないなら作る or すごい人に凄い人に作ってもらう
  • DBIx::Connector
    • 有名で評価も高いけど、DBIx::Handlerを作った
    • Ore Oreを見極める
  • 尊敬するエンジニア
    • 樋口さん
      • MySQLのHandlerSocket
      • 使えそうなケースがあったので相談したけど、「InnoDBでいいんじゃない?」
      • 超かっこいい
    • tokuhirom
      • 凄いとんがってる
      • 豪快エンジニア
      • 仲間を大事にすr
      • エンジニア視点でビジネスのことを考える
      • 監視にも積極的
    • 他にもいっぱい
  • 本当に必要なのかを考える
    • 導入難易度
    • 運用
    • パフォーマンス
  • ビジネス的に是か
  • エンジニアとしての意識
    • 作るだけで終わらない
    • 使うだけで終わらない
      • フィードバックを送る
    • やるなら徹底的に
  • 自分自身
    • 社会人2,3年目までリーマンプログラマ
    • WEB+DBのPerlHacker座談会記事で目覚める
    • Shibuya.pmに出席
  • やってきたこと
    • CPANモジュールを漁る
    • blog書く
    • module書く
    • CPANにup
    • 転職
    • Shibuya.pm LT
    • YAPC::Asia
  • DevOps
    • 開発者と運用者の垣根をなくす
    • 自分たちのサービスに愛を
    • 運用者と開発者のコラボ
  • YAPC::Asia 2011
    • もうすぐスピーカー応募始まるよ
    • いつも同じメンツ?
  • WEB+DBのPerlHackersHubに寄稿

テスト駆動開発 @dont_cocoa

  • 初スピーカー
  • 仕事ではほとんどPHP
  • 今はPerl
  • TDDBC札幌
    • @t-wadaさんが講
    • 講義
    • ペアプロ形式
    • 2二日目はテストの無いレガシーコードを
  • 半年間実践
  • 基本
    • 仕様からテストコードを最初に起こす
    • 最初は失敗させる
    • 実装
    • テスト実行 -> 成功
  • 一気に書きたいのを堪えて、テストが通る最低限のコードだけ書く
  • バグ
    • 再現コードを書いてから、修正
  • やってみて感じたこと
    • 見通しのよいコードを書ようになた
    • 進捗状況がわかりやすくなった
    • テストの粒度が重要
    • 作業量は変わらない

LT

Base64を再実装する @akiymさん

  • Base64では読みあげられない
  • じゃあ日本語だ
  • Acme::Collector64

道具のいらないHello, world koji**さん

  • perldoc

ウイスキーとPerl @hirataraさん

  • uWSGI
  • dotcloud
  • nonblockingモードがある
    • Coro, AnyEventを見る
  • fastroute
  • subscribe