- 同期的じゃないもの
- 自分の都合と関係なく起こる何か
- Unixシグナルとか
- dRuby RMI
- まさに非同期
- 自分の都合に関係なく呼び出される
- 呼び出されたことをしらない
- 伝えるチャンスがあるのは呼び出された側
- どうやって伝えるの?
- グローバル変数
- 同期メカニズム
- Queue
- Socket
- TupleSpace
- 非同期によびだされた結果を知るのは面倒
- 同期メカニズムを使えるよ
- 処理を受け付けたら制御が戻る
- やりっぱなしではない
- 結果に興味がある
- チケットを使って依頼の結果を待つ
- どれも同じAPIで待てるように均質にする
- 即時復帰するのはたいてい結果が気になる時
- 本質的には待ち合わせしている
- 結果を待ち合うと固まる
- シングルスレッド派
- マルチスレッドで解く
- dRubyの実装そのもの
非同期におこるいろんなことはだいたいいつも同じように解くんだよ!
===
@saturnflyer
- 読む > 書く
- 最良のドキュメントはソースコード
- プログラムは共有メモリ
- 理解をコードに落とせる
オブジェクトは
- state
- data
- behavior
の表現
- 安定なのと変化するものを分けるのが良いプログラム
- メンタルモデル
- 何であるか
- 何をするか
- extend
- delegation
- delegatorなんだけど、selfが最初のオブジェクトをさしてくれるよ
- なので文脈の違いに悩まされることがない
- http://github.com/saturnflyer/casting
- 疎結合
- 高凝集
- よりよいカプセル化
- システムメンタルモデルを支える
- 詳細メンタルモデルを分ける
===
@ryandotsmith / heroku
- なんで並行性?
- 直列的なコードをとりのぞく動機
- ロックの問題を理解する
- 実際のロックフリーな設計
- パフォーマンスはゼロ和ゲーム
遅いwebsiteを早くしたい
- 繰り返し処理
- やらなくてもいいことをやってる
- 並行性が低い
- アムダールの法則
- 少しの直列的なコードが並行性に大きく影響する
- 直列的なコードをなくせ!
- ロックは並行性をコントロールする
- queue
- Webアプリスタックのあちこちに
- ロックを取り除くにはqueueに注目
- Fuzzy FIFO
例えばランダム順に処理するとか、FIFOの制約を取り除くことでより並行性が増す!
http://github.com/ryandotsmith/queue_classic
- ロックを取り除くことはできるが、その分複雑さは増す
- 単純さ/パフォーマンスのトレードオフ
- ロックはコードを直列にする
- ロックを取り除くことはsemanticsを変える
- エンジニアリングはトレードオフ
- 同時性は並行性ではない
- スケーラブルなロックフリーstackアルゴリズム
- 単純・速い・実用的なノンブロックqueueアルゴリズム
===
@nomadcoder
- 複雑なデータ
- 複雑な処理
- 数百のデータモデル
- 複雑なview
- 一枚岩のclient side
- 独立性の低いserver side
- divide and conquer
- 昔からある発想
- 複雑なアプリに使う
- Railsむけではない
- そこでNetzke
クライアントサイドのGUI webコンポーネント
- Server class(Ruby)
- Client class(Ext JS)
- 一貫性のある、テーマ化可能な外見
- 豊富なコンポーネント
- プログラム可能なview
- 再利用可能性
- 拡張可能性(OOP)
- モジュール化された開発
- tests first
- 組み合わせやすい
- ネストするのも簡単
- 動的ロード
- JSのカプセル化
- 具体例にそって解説
- Netzkeコンポーネント != data grid
- Netzke Coreで再利用可能なGUIコンポーネントを作る
- Netzke、便利だよ!
ブラウザがやってくれるから特にやってないよ。
Server sideのバリデーションが基本。 client sideでもできるよ。
Rails / ExtJSがやってくれるよ。
生成する必要はないよ。継承して拡張できるから!
昔やろうとしたけど、アーキテクチャが違うから…。
===
@kou
- 目的
- アイディア
- アイディアを適用
- その気になってもらう
-
rcairo
-
Rabbit
-
よい
- Rubyっぽいから
- 似ていると一貫性がある
- 一貫していると読みやすい
- 読みやすいとメンテナンスしやすい
Rubyらしい = いいこと
- Fileクラス
似ているものが多い = より良い
- 想像しないで、思い出せ
- 想像するのは難しい。思い出す方が簡単
- 思い出すには
- 当然知らないといけない
- 経験する
- 聞く
- 観察する
- 当然知らないといけない
- Rubyの経験
- 思い出すのは難しい
- 思い出す経験が少ないから
- いいAPIについて考える
- 理解しやすいドキュメントについて考える
- 何と似ているかについて考え
- おなじようにする
- よりよいバグレポートとは?
- よりよいパッチとは?
などについて経験できる
===
github.com/rkh
Sinatra oreilly: AUTHD
- 言語によって概念が違う
- プログラム言語は道具
- オブジェクトはデータ構造ではない!
- Newspeak
- 全部がmethod sends
- global stateがない
- lexical scope
- 継承関係によって実現
- メタプログラミングを可能に
- Lisp, Logix, Io, Prolog
- 何の役に立つの?
- マクロ
- 局所的なevaluation
- 言語拡張
- SQL, Prolog
- VHDL
===
@kuenishi
- fluentdでログを全部集める
- 何かにつっこむ
- そこにクエリする
-
分散key-valueストア
-
重点
- 可用性
- スケーラビリティ
- 簡単な運用
-
いつ使う?
-
Hadoopは大げさ
-
MongoDBじゃ足りない
-
DocumentDB
-
なんでもいける
-
- JSONで入れる
- クエリする時
- 分散JSのデバッグは大変
- ripple
- Riakクライアント
- Mohair
- JSONに対してSQLが書ける
- SQL -> (parselet) -> JS -> Riak mapreduce
- whereはMap時
- group_by, countはreduce
- NoSQLだからって不便なわけじゃない
- Fluentdを使ってRiakに入れちゃおう
- MohairでSQLクエリ
- Pull Request募集中
===
@tagomoris
- ログ取り
- 集めて保存
- 視覚化
- 解析
- 異常時に通知
- システム状態
- アプリケーションのmetrics
ストリーム+バッチのhybrid
手軽に可視化
- Streamクエリ
- Esper
- JRuby
- SQLで書ける!
- fluent-plugin-norikra
===
@tenderlove
- Polymorphism
- Refactoring
- Caching
- 複雑さを隠す
- decouple
- 呼び出し元からロジックを削れる
- 「キャッシュ」
- コードはグラフ
- 構文木
- わかりにくい
- 変えにくい
- メモリの使いすぎ
- 高速
- わかりやすい
- 変えやすい
- メモリ使用が少ない
- 高速
- 例:AR::Relation
- クエリプランがキャッシュされる
- 解析したSQLがキャッシュされる
- キャッシュの改善策
- bind_parameters
- プリペアドステートメントのBindパラメータのみ変更
- リファクタリングで速度を上げる
- ポリモーフィズムでコードを削れる
===
@_zzak
少しの行数の変更が多い
[実際の操作をデモ]
- githubでforkする
- なにか取り組むものを探す
- 例えば、RDocコメントとか
- ドキュメント全般とか
- RDocで生成されたHTMLのシンタックスハイライトを確認したり
- C関数のドキュメントだって
- ブランチを切る
- githubにpushして、Pull Request
===
@akr
###「多様性は善」は言い過ぎ
- 多様性は敵?
- key-valueストア
- 4つのライブラリをサポート
- ndbm
- gdbm
- Berkeley DB
- qdbm
- extconf.rb
- 環境を調査し、Makefileを生成
- 1970 dbm
- 1986 ndbm
- 1990 gdbm
- 1991 Berkeley DB
- 2003 qdbm
見分けるのが大変!
- gdbm(debian)
- Berkeley DB(Redhat)
- Berkeley DB in libc(BSD)
- ?
- Rubyのdbmはいくつかのndbm互換ライブラリをサポートしてるよ
- いろんなバージョンのソースを調べた。ソースコードは重要
- だいたいの環境では動くよ!
- OSが増えている
- Ruby実装も増えてる
- 頑張ってね!