Sendagaya.js(仮)アウトラインメモ
Sendagaya.js(仮)
Sendagaya.js(仮) に参加してきたのでメモ
超大量絵馬とはなんだったのか – @geta6
- glide
- 超大量絵馬企画の経緯
http://10000000.pixiv.net/ の企画。
リアルタイムでお絵かきしたい要件
node.js x socket.io
- express
- backbone.marionette
- almond – require.js
- coffeescriptで書いた
- 1278コミット
構成
- ストロークをサーバに送る
- Redis -> node-canvas -> 画像化
- 他の閲覧者に画像として表示
設計-ビューアー
- ビューアーは1枚のcanvas
- 位置に合わせて表示するものを取得してCanvasに描画しなおす
url.createObject
で blobimageを生成して使った
設計 – 座標系
- 五角形の絵馬、四角形のサムネイル、閲覧用のキャンバスのそれぞれ違う形式
- 座標の変換の実装が必要
- サーバ/クライアントがJavaScriptなので座標計算のロジックをそのま共有できた。
実行
- JavaScript書いてたの3人、最初はrequire.js入れてなかった
- require.js, i18n, almond, grunt productionの設定
担当と役割
- 機能毎にそれぞれのメンバーが独立開発
- Model、ItemViewなど使用するコンポーネントをセットしたモジュールで実装単位を分けた
- StateModelの変化をControllerが監視して、他のモジュールに通知
- marionettoに乗れという方針でやった。
Socket.io
- Socket.io の問題が色々
- タイムアウトを自分で実装して、残留コネクションを殺したりしてた。
- 絵馬ごとにroomを作って、イベントの配信先を絞った
- 絵馬が更新されたかどうかをroomごとに分ける
- 引いた画面では更新回数を減らして、通知の大量発生を抑える
Task
- Gruntを採用
- gulpを採用しなかった
- 周りがstreamベース慣れてた
- documentが少ない気がする
運用
- CPU負荷が高くなって張り付き
pm2
を使ってたが、コマンドを受け付けなくなる kill -> restart…- 結局自分で書いた。
その他
EventEmitter2
EventEmitterに食わべて負荷が軽減した。- 名前空間が使えるのが便利
- node-canvas
- imagemagick-native
- redis
- ドキュメントよりテストコードを読みましょう
LT
@harukasan 『node-canvas』
- 絵馬の座標系の相互変換を計算を担当
Node-Canvas
- クライアントからストローク情報を送る
- サーバ側でストロークをレンダリング
クライアント側で生成
- サーバ側で生成しなくてよい
- 描画の差が起きない
- トラフィックが大きくなってしまう
- クライアントの負荷がでかい
✔サーバ側で生成
- サーバ側で生成する差がでるかもしれない
- クライアントの負荷は少ない
- トラフィックが少なくて済む
- POSTは小さくて済む
node-canvas
- context は 2dだけ
- メソッドはブラウザのものと同じ
『atom.ioのpackageの作り方』 – @yosuke_furukawa
- Atom
- generator-packageでひな形が作れる
- Chromiumなのでバッグも楽
『d3.js crossfilter.js dc.js』 – @edvakf
D3.js
- DOMとデータを繋ぐライブラリ
- 大量の多次元データを扱うライブラリ
- 多次元データのフィルタリング
D3.js+Crossfilter => dc.js すごい
『ClojureScript』 @halcat0x15a
- ClojureをJavaScriptにコンパイルするaltjs
- 名前空間、Collection,record,protocol(interface),macro, java interop
- Google Closure
- Leiningenを使ってClojureのライブラリの依存関係を使う
- スライドもClojureScript+markdownで書かれてる
『いかにして我々はフロントエンドに秩序をもたらそうとしてきたか』 – @mizchi
- prototype.js
$("query")
だけが欲しかった
- jQuery
- スクレイパー
- メンテしにくい
- 小さいうちはよかった
- Backbone
- 1コのDOMと1コのViewと対応させようという発想
- Knockout.js
- データバインド
- Angular.js
- DOMにロジックを入れて、DIでかいけつ
- DOMと密結合にしたほうがやりやすい現実
気付き
- テンプレートの再利用は難しい現実
Angular.js
- 学習コストが高い
- DSLが複雑
Backbone.Modelの限界
- ネストしたものに対応できない
Vue.js
- 余計な学習コストがない
- データバインディング、リアクティブ
『Scala.js』 – @tototoshi
- Scala.js
- Scalaの言語機能が全て使える
- JavaScriptは
global
を経由していく - sbtでコンパイル
- どんどんサイズが小さくなって、コンパイル時間も短くなってる
- jQueryの静的型つけ
『初心者向け、カウントアッププログラムで基礎勉強』- @AsbyuKobayashi
- Pure JavaScript
- 焼き鳥検索
- 普段使わないとDOM APIの名前とか忘れる
『googkitを始めよう』 – @orga_chem
- jQueryは再利用できない
- Closure Libraryセットアップがだるい
- 一度使うとすごくいい
googkit 簡単なコマンドでClosure Libraryが使える
googkit init
googkit setup
だけでセットアップが出来る。
メモ: Markdown Life
懇談会はJavaScript AST、CSS JIT、JITコンパイラ、LLVM、header、Cマクロの話等をしていました。
CSSJITの図解です pic.twitter.com/AqkePrQpsJ
— azu (@azu_re) March 19, 2014
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。