2012/08/26

Sapporo.js - 2012/08/26 に参加してきたよ!

参加してきたのでメモー

「Javascript: The Good Parts」 の読み合わせ(前半)

  • 前回どこだっけw
    • p.91 array.slice からということでw
  • array.slice(start, end)
    • 配列の一部分のコピーを生成するよ
    • マイナス値を指定した場合は配列の末尾側からの指定
      (実際には"指定した値 + length"を指定したような扱いらしい)
    • array.slice(0) で配列のコピーできるよ!
      • arguments のコピーとかでもよく使われる
        Array.prototype.slice.apply(arguments);
  • array.splice(start, deleteCount, item...)
    • 配列の要素を置き換える
    • 破壊的操作!
    • slice とは引数の指定の仕方が異なるぜー
    • 戻り値に削除された要素が入ってくる
    • 戻り値とか、破壊的操作とかあんまり直感的じゃない感
  • array.sort(comparefn)
    • 配列自身の中身をソートしたものに置き換える
    • 破壊的!
      • 戻り値もソートされてる
      • 対象となった配列もソートされている
      • Object.freeze を使うとソートも禁止できる
        • この場合、sort をかけても順番は変更されない
        • この場合でも slice でコピーされた配列についてはソート可能
// コピー後の配列をソートする
a.slice().sort()
    • 数値の配列は正しく並べ替えることはできない!
      • 要素の並べ替えは文字列とみなしてソートしてしまうのだぜー
      • 自分で比較関数を用意すればおk
a.sort(function (a, b) {
   return a- b;
});
    • 比較関数を引数で渡せるよ
      • 比較結果が同じだった場合に別の方法でさらに比較する、みたいなことも可能

@y_jono さんの発表 - 「Javascript: The Power of Simplicity」


  • 初発表!
    • おお、意外?!
  • テーマ:Javascript の表現力は世界一ィィィー
    • 表現力がある -> 製薬がない
    • Javascript のオブジェクト指向で良いプログラムを書くには?
      • アイデアを考えてきたよ
  • OO ってなんだっけ
    • 認識が違うと話は咬み合わないよねーってことで
    • 継承とか prototype とか mixin とかの話
    • Javascript のできた時の話
      • Javascript のベースになったのは SELF(プロトタイプベースオブジェクト指向), Scheme(関数型), Java
      • "SELF: Power of Simplecity" という論文がある
  • Javascript の長所と短所
    • ここが長所なんちゃう?
      • 強力な表現力
        • Prototype.js とか jQuery とかねー
      • マルチパラダイム(OOP, FP, 手続き)
        • (マルチパラダイムっていうと C++ ェ・・・)
    • ここなんて短所?
      • 保守性の低下(コードが人に依存する)
      • たくさんのバッドパーツ
  • prototype と向き合う
    • SELF について知る
      • Prototype-based OOPL
        • prototype: Smalltalk の class を包含するような概念
          • Smalltalk は動的な言語、環境、システム
      • ルールのシンプルさと操作性
        • Object はスロット(≒プロパティ)の集合
        • Javascript と違うのは関数の実行も意識させない?
          • 手続きが格納されている場合、手続きの結果が自動的に実行されて帰ってくるらしい・・・
          • (ほえー)
      • SELF を触ってみる
        • mac / solaris で動く
        • *.snap をクリックすると仮想マシンが動く、環境含めて SELF
        • GUI 環境
        • スロットを書き換えることでプログラミングをする?
        • 複数の prototype を持つことができる
    • これを知れば prototype 風に Javascript の良い使い方ができるのでは?
  • Javascript と上手に使うには
    • prototype を共有のための仕組みと捉えたらどうですかねぇ
    • (このあたりで力尽きた・・・)

@havanaclub_ さんの発表 - 「WebGL - 基礎と概要」


  • WebGL とは
    • OpenGL ES 2.0 の Javascript porting
    • canvas 内に描画できる
    • GPU 使える
    • 過去にセキュリティ的な問題があった
  • Firefox, Chrome, Safari, Opera はいけるらしい
  • モバイルでも頑張れば使える、近い将来・・・
  • OpenGL ES 2.0 とは
    • OpenGL 2.0 のサブセット
    • 最近のスマホの標準
  • デモ
    • ミクミクダンスとか
    • (よく動くなー、すげー)
  • これが嬉しいぜー
    • デプロイが必要ない
    • クロスプラットフォーム
    • クロスデバイス(予定、何年か後にはいけるでしょうとのこと)
  • Programmable shader
    • 全部の描画を Programmable Shader を使わないといけない
    • パイプラインにデータとシェだプログラムを投げて実行させる
    • (まじかー、頂点シェーダー使ったことないからよくわからんけど大変そう。)
    • GLSL を文字列で投げてやるらしい、ぅおー
      • 結構めんどうらしい、ぅおー
      • (プログラミング側で色々 Open GL の API を叩いていた部分をほとんど GLSL で記述するようなイメージっぽい。ほむほむ。)
  • サンプル
    • しょぼいサンプルのために 187 行(・・・!!)
    • やってられんわー
  • ライブラリあるよ
    • three.js
    • PhiloGL
    • GLGE
    • SceneJS
    • 上3つはさほど変わらない
  • three.js がオススメ
    • 最近本が出た
    • 単純なオブジェクトの生成
    • ボーン、IK(手の先端に関節がついてくる、みたいな機能)の管理
    • モデルデータ、テクスチャ、カメラの管理
    • FOGとか
  • デモ
    • 大分短くなってるわー
    • (3D なのに行列演算が出てきてない!まじかー)
  • 使い道?
    • ゲーム方面
      • Quake 2 は移植できたらしい
    • グラフとかー
    • O'reilly - WebGL
      • 今月出たばっかの本
      • three.js ベース
      • とても良い
    • Professional WebGL Programming: Developing 3D Graphics for the Web
      • 初心者向け?
      • 絵を出してテクスチャ貼るところまで
    • もう一冊本当に初心者向けの本があるらしい
    • OpenGL Insights
    • Programming OpenGL ES 2.0
      • これまえはなさんが持ってたー
      • 日本語版があるよー
    • OpenGL 4.0 Shading Language cookbook
      • GLSLはこれがいいらしい
      • ただし GLSL のバージョンが違うので注意

2012/08/08

getopt は Mac と Ubuntu であんまりこんぱちびりてぃーないぜー。。。

getopt コマンドは Mac と Ubuntu で互換性が低いというのにハマりました。。。

シェルなんかでオプションを処理するのに使用する getopt コマンドというのがあります。
この getopt、Mac 環境のもの(BSD)と Ubuntu 環境のもの(GNU)で提供しているオプションとかが結構違うみたいなのです。
github にあげている dotfiles のセットアップ用シェルがうまく Mac 環境で動いていなくて、原因を調べたらどうやらこれのようでした。。。

経緯は知らないのですが、GNU で拡張された部分が大量だったってことなんでしょうかねぇ。。。

Mac での man ページ。オプションに関する説明が全然ない。。。

Ubuntu 環境での man ページ。ちょっとしか写ってないけど、オプションの説明がちゃんとしている。。。
ちなみに getopts というのもありますが、こっちは bash とかの組み込み関数。用途は似たような感じ。確かロングオプションをサポートするのに getopt を選択したように覚えています。

2012/08/07

Ruby & アジャイル開発セミナーに行ってきたよ!

2012/8/6 の "Ruby & アジャイル開発セミナー"に参加してきました!

内容的には"そうだよなー"っていうこととか"なるほどなー"っていうことが多くて、本当に参加してよかったなぁという内容でした。
特に心に残ったのは次の言葉達です!

新しい言語を学ぶときに大切なのは周りにその言語を好きな人がいるか
"とにかく粘り勝ち"
さっさと失敗してもらう 
"KPT で Problem ばっかり出てつらいときは Keep と Try だけにしてみる"