元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

RubyKaigi 2014 個人的メモ(2日目)

[JA] Coming soon...

http://rubykaigi.org/2014/presentation/S-YukihiroMatzMatsumoto

内容未定のまま更新忘れか?と思ってたら本当にComming soon...だった。

Ruby 3.0

思いつき発言の約7割はその後現実になっている。

主軸?

  • Concurency
  • JIT
  • Static Typing

Static Typing

  • 最近の言語はスクリプトっぽい使われ方をするものでもみんなもっててくやしい。
  • でも静的型付けって
    • ダックタイピングと相性悪い
    • 宣言と実装をそれぞれ書くとかDRYじゃない

Soft Typing

DackTyping的に型推論

ベストエフォード「お行儀の良いコードを書けばいけるのでは」

ただし

  • 変数による動的なrequire
  • define_method
  • method_missing

を利用した場合型推論は不可能になる・・・おそらく何らかの制限がかかる

言語機能のSubset化

従っていれば高速になるけど、外れてもいままでのRubyとして動くしくみ ・・・ fail over

詳しくは日経Linuxに原稿書いたから立ち読みでもしてね!

日経Linux(リナックス) 2014年 10月号 [雑誌]

日経 Linux (リナックス) 2014年 11月号 [雑誌]

[JA] Open the door of embedded systems to IoT! mruby on LEGO Mindstorms EV3 ®

http://rubykaigi.org/2014/presentation/S-TakehikoYOSHIDA

RubyでMindstormsをPCから動かすのではなく、Mindstormsにmrubyを組み込んで動かしてみた話。

スライド等

Open the door of embedded systems to IoT!

Mindstorms EV3

Linuxの上で、MindstormsのVMが動作し、その上でユーザが作成したプログラムが動くという仕組み。

ev3dev

カスタムファームウェアが公式に公開されていて、実はこれで普通にRuby(mrubyではない)が動く。

http://www.ev3dev.org/

SDカードブートもできるので、標準ファームウェアを壊さず遊べるのがよい(面白そう

あえてmruby

「mrubyなんてリアルタイム制約があるから使えない」って本当?

Mindstorms RCX (1st gen)

  • センサーデバイス、回路上の不足をソフトウェアで補う設計
    • ナノ秒単位のリアルタイム制約
    • mrubyでは間に合わない

EV3

  • センサーデバイスにマイコンを内蔵して中央では指示を送るだけ
    • mrubyでもいける

まとめ

mrubyが使えないケース

  • Reaching a hardware limit under software control.
  • Be willing to work in the background of mechanics and electronics, and struggle with C/C++, assembly language.

mrubyが使えるケース

  • High-functional / Multi-functional electric devices
  • Newly-developed Cloud servicesCreating new value with mashup technology

最近のデバイスの高機能化もあって、「mruby=使えない」とは言えなさそう。

[JA] Scalable deployments - How we deploy Rails app to 100+ hosts in a minute

http://rubykaigi.org/2014/presentation/S-ShotaFukumori

Capistranoでデプロイしてたら、SSHコネクションが増えすぎて死んだので、ゴシッププロトコルを利用したデプロイツールを自作して、デプロイ時間を超短縮した話。

スライド

https://speakerdeck.com/sorah/scalable-deployments-how-we-deploy-rails-app-to-150-plus-hosts-in-a-minute

mamiya

https://github.com/sorah/mamiya

ライブデモでトラブったもののその場で対応する様子に、頭の回転はやいなぁと思いました。(小並感

[JA] Resource Control Architecture scripting with mruby for a Web Server Separating Computer Resources Virtually at Each HTTP Request

http://rubykaigi.org/2014/presentation/S-MATSUMOTORyosuke

Webサーバのリソースコントロールにmrubyを使えるようにした話。

http://mod.mruby.org/

http://ngx.mruby.org/

スライド

https://speakerdeck.com/matsumoto_r/rubykaigi-2014-mod-mruby-ngx-mruby

動機

従来のリソースコントロール

  • 閾値を超えると拒否
    • 印象が悪い。
    • 品質を保つためなのに品質低下

ほしい

  1. プログラマブルな制御ルール
  2. リクエスト単位でリソース割り当て

mod_mruby / ngx_mruby をつくった

1. プログラマブルな制御ルール

  • Apacheの処理をフックして制御
    • 必要なパフォーマンスに応じて2モード用意した
      1. リクエスト毎にmrubyコードを読み込んで処理(インタプリタは共有)
      2. バイトコードをキャッシュ

リクエスト毎に読む場合、サーバの再起動なしに制御ルールを変更することもできる。

2. リクエスト単位でリソース割り当て

mod_mrubyからcgroupsを制御することで、たとえば「cgi10.cgiはCPU10%まで動かす」といった設定を、RubyDSLという記述しやすい方法で可能にした。

リソース制御導入によるオーバーヘッドは数%以内

実際に使われてる

登壇者のまともとさんの就職が決まりました。

RubyKaigi2014でmod_mrubyngx_mrubyとその応用について発表して、就職も決まりました - 人間とウェブの未来

[JA] ServerEngine: a framework for multiprocess servers in Ruby

http://rubykaigi.org/2014/presentation/S-MasahiroNakagawa

長く走るrubyプログラムのためのライブラリ、ServerEngine gemの話。

https://rubygems.org/gems/serverengine

スライド

サーバを作るときの難しいことの面倒をみてくれる

fluentdなどで得た知見(?だったかな)

  • シグナル処理
  • 分散スケジューリング

構成

オプションで有効にしたり、サブクラスを作ったりして使う。

  • Supervisor
    • デフォルトでは無効。他のスーパーバイザを使わずに単体でデーモン化するとき使う。
  • Server
    • 実行前後フックとかを組み込めるほか、スレッド/プロセスの指定など。
  • Worker
    • 実処理はここ

監視モデル

Supervisor -- (監視) --> Server -- (監視) --> Worker

のようにそれぞれ死活監視は勝手にやってくれて安心。

便利な機能

Signal Handler

Live restart

unicorn的なアレができる。

sigdump gem

ServerEngineでも使用している便利なgem。

https://rubygems.org/gems/sigdump

[JA] Kids, Ruby, Fun!: Introduction of the Smalruby and the Ruby Programming Shounendan

http://rubykaigi.org/2014/presentation/S-KoujiTakao-NobuyukiHonda

Rubyプログラミング少年団

Smalruby

Google Blocklyを利用したビジュアルプログラミングでRubyを使おう、全国にスポ少的な団体、大会を作りたいという、大変野心的なプロジェクト。

  • ブロックをつなげてRubyコードを生成できる
    • Rubyコードからのブロックへの逆変換もがんばって実装
  • 生成したコードをローカル上のバックエンド(Rails)に送って、ビルド&実行
    • Windowsのネイティブアプリを生成
    • DXRuby
  • Arduino対応で、デバイスを制御するプログラムも作れる(!)
  • Windows / OSX対応

Windows

  • 学校で使われているのはWindows
  • 学校のPCにRubyが入っている 未来
  • ただしWindowsRubyのバイナリ生成遅い・・・
    • Macなら一瞬
    • それでもこだわりたい

3日目につづく。