Shibuya.ex #1 の様子
Shibuya.ex #1 - Shibuya.ex | Doorkeeper
参加してきました。スライドの簡単なメモとツイートをピックアップして載せておきます
もうすぐ始まります #shibuyaex @ Increments Inc. https://t.co/6FCnQqIetr
— Hiroshige UMINO ☕ (@yaotti) August 25, 2015
Elixirご紹介(@naoya_ito さん)
WEB+DB PRESS Vol.88 の Elixirの記事は本当に事始めとして良いのでオススメ #shibuyaex
— ハヤブサ@鉄の人(代理) (@hayabusa333) August 25, 2015
Elixirでrubyに似てるのはdefとdoとendくらい #shibuyaex
— κeen (@blackenedgold) August 25, 2015
Rubyみたいに書ける関数型言語、がポイントではなく、Erlang VM上に乗っかってるというのがポイント。#shibuyaex
— yasaichi (@_yasaichi) August 25, 2015
関数呼び出しにパターンマッチが使えるすごい #shibuyaex
— もっぱら (@orih_y) August 25, 2015
Elixirの資料たくさんある http://t.co/7wXGxFdtmt #shibuyaex
— Hiroshige UMINO ☕ (@yaotti) August 25, 2015
ざっくり特徴
なぜElixir?
- ランタイムが強力
- 重要なのはErlang/OTPの上に乗っていること
関数型
- 動的型付けの関数型言語
- なし
- 静的型付け
- 純粋関数型
- 部分適用、カリー化
- オプション型(Maybe)
- ある
- リスト内包表記
- 遅延評価、無限リスト
- なし
参考
- Programming Elixir
- http://elixir-ja.sena-net.works/getting_started/1.html
- http://www.slideshare.net/joe_noh/presentations
- https://github.com/h4cc/awesome-elixir
次の10年の為にElixirをハックする(@mizchi さん)
「Elixirで一発当てたい」 #shibuyaex
— κeen (@blackenedgold) August 25, 2015
「mizchi は仕事で Elixir を使いたいから Qiita 書いて naoya を焚きつけたら Web+DB PRESS に記事が書かれた」完全に術中に嵌った俺です。REST のときも同じく yohei さんの術中に嵌った罠 #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
「react-phoenixを作ろうとした」
「あとは作るだけ」
#shibuyaex
— κeen (@blackenedgold) August 25, 2015
「高速で耐障害性のあるJSON APIが求められている」「いまさら型がない言語を学ぶなんて」せやな、感 #shibuyaex
— yasaichi (@_yasaichi) August 25, 2015
これな。5年前にブクマしてたw #shibuyaex / “node.js vs Erlang (ネタ) - amnesiac weekend programmer” http://t.co/kUBVLOmMEA
— Naoya Ito (@naoya_ito) August 25, 2015
Elixiriはどういう言語か
- 文法は気持ちの問題
- すぐにErlangを学ぶハメになる
Elixirへの不満
- いまさら型がない言語を学ぶこと
Elixirに解決して欲しい問題
- Let it crashしたい
- GCセンシティブ
本音
- つまらない言語で消耗したくない
- Elixirみたいな面白機能積んだ言語流行ってくれ
割り切り
Elixirを本番環境で使ってみた事例紹介(@ohrdev さん)
www.slideshare.net
おーはらさんによる 動画広告ネットワークをElixirで作った話 #shibuyaex
— κeen (@blackenedgold) August 25, 2015
ドリコムさん、DAU 60万のアドのサーバーを Rails から Elixir に変えた、とな #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
APIサーバーにElixirを使って複雑なビジネスロジックはRailsバッチ(Sidekiqでenqueue) #shibuyaex
— κeen (@blackenedgold) August 25, 2015
railsエコシステムをElixirで再実装したものを利用してる #shibuyaex
— κeen (@blackenedgold) August 25, 2015
かなりエッジなものたくさん突っ込んでるイメージで怖い #shibuyaex
— Electron (@r7kamura) August 25, 2015
まさに人柱って感じだ #shibuyaex
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
本番の運用事例本当にありがたい #shibuyaex
— taka (@ma2ge) August 25, 2015
#shibuyaex / “パーフェクト"Elixir情報収集"” http://t.co/KCeQpQ99HA
— Hiroshige UMINO ☕ (@yaotti) August 25, 2015
#shibuyaex / “Sapporo Beam” http://t.co/ZGKh5XAf7o
— Hiroshige UMINO ☕ (@yaotti) August 25, 2015
札幌beamの資料めっちゃ助かった #shibuyaex
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
@ohrdev さん、すばらしい発表だ #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
きてよかった感ハンパない #shibuyaex
— WAKASUGI 5T111111 (@5t111111) August 25, 2015
Twitter 盛り上がってるのに会場お通夜状態。これが IT 勉強会 #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
サービス紹介
- DreeVee
採用の経緯
どう使っているか
- API部分に限定
- バックエンドはRedis、Dynamodb
- デプロイ
- exrm
- maru
- grapeのelixir実装
- その他
- exredis, poolboy, ex_aws, rave_elixir
困ったこと
困らなかったこと
感想
- Erlangを知らないと辛い
- ドキュメント少ない
- コミュニティが少ない
- sapporo.beamおすすめ
- Erlangのコミュニティ、エコシスエテムは偉大
- 時雨堂さんのドキュメントが参考になる
- Elixirならではの機能が便利
- パイプ演算子がないとやっていけない体に
- struct、protocol、遅延処理、etc
- マクロが強力
- debug、Perf関連はErlangのプロダクトが充実
- observer、eper、
- Elixirも徐々に充実
- Erlangをざっと把握しておくと良い
- すごいE本
- 関数型言語についての理解
Cowboyを使ってみる(@hayabusa333 さん)
お、週間 Elixir ライブラリの方だ #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
ガチなのきた #shibuyaex
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
Cowboyとは
- モジュラー形式のHTTPサーバ
- ErlangVMで動くHTTPサーバとしては一強
- Plugを使えばもっと簡単
DBにseedにするライブラリつくった(@Joe-noh さん)
www.slideshare.net
Joe_noh さんに足向けて寝られない #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
おお、Phoenix の seed ・・・ まともなやり方わからなくてベタ書きしてたよ #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
DBにseedを入れるライブラリ tane #shibuyaex
— κeen (@blackenedgold) August 25, 2015
うおー、最高っぽい #shibuyaex / “Joe-noh/tane · GitHub” http://t.co/jJ6BW6pxbG
— Naoya Ito (@naoya_ito) August 25, 2015
exseedがある
要望
- モデル名繰り返したくない
- 1行1属性縛りは避けたい
- 複数Repo使えたい
- Elixirらしく、パイプを使いたい
tane
Rails TutorialをPhoenixで移植してみた(@hagiyat さん)
Ecto、せっかく Repo と Model 分かれてるのに Model を ActiveRecord みたくドメインとサービスとデータアクセスごった煮にしちゃうのはどうかなと思って、なんか設計パターンがまだ見いだせてない #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
Ecto の Model はデータモデルと割り切って、クエリ関数を記述するだけにしてドメインモデリングは別に層を作ったほうが良さそうだなというのが今のところの推測 #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
「Rails Tutorialを移植したと言ったが、アレは嘘だ」 #shibuyaex
— κeen (@blackenedgold) August 25, 2015
viewは俺がサーバサイドレンダリングできる最高なやつ作るんで待ってくれ #shibuyaex
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
Elixir - Phoenix をやるとなると、ライブラリが足りなくて、うががががががってなるので、ライブラリを作るチャンスでもあるっという #shibuyaex
— ハヤブサ@鉄の人(代理) (@hayabusa333) August 25, 2015
パイプ中毒者続出 #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
Phoenix のビュー周りがまだいまいちなの mizchi が react-phoenix 作ったらまるっと解決 #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
Elixirのライバル達を紹介する(@moccos さん)
まあ、MirahはRuby Like JavaだからActorではないか。 #shibuyaex
— κeen (@blackenedgold) August 25, 2015
#shibuyaex AkkaとErlang繋ぐこんなのありましたね http://t.co/d6vbnMyoyp
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
Beam VMはプロセス毎にGC持ってるだけでなくてIncremental GCなのでリアルタイム性は高いですね。 #shibuyaex
— κeen (@blackenedgold) August 25, 2015
ライバルとの差ってプロダクトで使う時にとても重要なので、とてもありがたい発表だな #shibuyaex
— ハヤブサ@鉄の人(代理) (@hayabusa333) August 25, 2015
ponylangちょっとみたけど楽しそうだった #shibuyaex
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
ponylang, ドキュメントがないownershipみたいな機構があって辛いそうです #shibuyaex
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
Fantasyスタックの話(@yodatomato さん)
FFスタック、 Phoenix のロガー作って tail of phoenix ってモジュール作りたいという気持ちがあった。誰かやって欲しい #shibuyaex
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
「30代になると時間がない。死期が近い」#shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
brunch.io、昔使ってたんだけど、メンテナのpaulmillrが興味失ってるんでphoenixでみたときオゲーってなった。正直。 #shibuyaex
— 賢さを上げて法で殴る (@mizchi) August 25, 2015
おわり
つぶやくの忘れるくらいどの発表も良かった #shibuyaex
— もっぱら (@orih_y) August 25, 2015
Elixir の有益な情報いっぱい集まって来て良かった #shibuyaex
— Naoya Ito (@naoya_ito) August 25, 2015
想像したよりガチ勢だった #shibuyaex
— れい (@rei_m) August 25, 2015
Shinjuku.ex #10 行ってきたメモ
新宿で迷子になっていたので、2つめの途中から参加しています。
パーフェクト"Elixir情報収集" @keithseahus さん
www.slideshare.net
exgettextの話 @k1complete さん
ドキュメントの地域化
ElixirユーザのためのOTP入門 @mururururu さん
Elixirアプリケーションの設計
- どう設計するのか、他の言語とは異なる設計になる
- コード読むしかない
- よく出てくるパターンを知る
- 闇雲に読んでもダメ。OTPを勉強するのは大事
OTPとは何か
ビヘイビア
よくあるパターン
- GenServer
- クライアント、サーバ
- Agent
- 状態を持つ
- GenEvent
- イベントハンドリング
- Task
- ただ計算を行うなど
- Supervisior
- プロセスの監視
- Application
- 始点
実際に何が起きているのか、実際にどんな風にできているのか、サンプルアプリ(KVS)を作ってみていくことで学ぶ
OTPをよしなに選択して使えるとElixirがかけると言って良いのでは?
Phoenix
- ライブラリ側でOTP supervisiorツリーを実装
- 添付写真(https://gist.github.com/mururu/17c489dac3d6b2b24528#file-phoenix-png)
- 左はユーザからのコネクション
- 右はデータベース周り、ステートフルとか
使うのに意識することはないが…
まとめ
OTPはパターン
Eilixirを書くということは、スーパーバイザツリーを設計するということ
Ruby on Rails vs Phoenix @ma2ge さん
ここ2、3ヶ月海外でも記事が増えている。流行りだしている
- Elixir/Phoenixはバックエンド、ミドルウェアだけ?
- そろそろRails置き換える力があるのでは
- scaffold
- eex like erb
- ドキュメント充実
- WebSocket
- Performance Railsアプリのパフォーマンスを改善するにはPhoenixと言いたい
Ruby on Rails
プログラマの幸せと生産性
Phoenix
違い
開発における違い
- ファイル構造
- scaffold
- 同じ
- named_routeほぼ同じ
- controller
- Rails
- renderを明示的に指定する必要がない
- Rails
- View/Template
- Phoenix
- templateとViewは独立
- Viewはプレゼンテーションレイヤのみ
- form_forが最近実装された
- ラベル未対応くらい
- templateとViewは独立
- Phoenix
- Model
- Elixir
- スキーマ定義必要
- 依存ライブラリ ecto
- スキーマ定義必要
- Elixir
- Query
- ecto
- Mailer
- gen_smtp必要
- assets
- brunch.io, gulp, etc..
- JSはJSに任せる
- brunch.io, gulp, etc..
- Test
- Ecosystem
- Rails
- gems
- Eilxir
- hex
- 数は少ない
- よく出来ていて作りやすい
- 他の言語のいいところを吸収していて、可能性がある
- hex
- Rails
まとめ
ミドルウェアだけでなくウェブアプリケーションに使ってもいいのでは
ポテンシャルはある
個人的には、@mururururuさんのOTP入門で、実際にOTPが何をどういう風に抽象化しているのかというところをライブコーディングで学べたのが良かったですね。また機会があれば参加したいです。
コンパイラ読んだ
コンパイラ [コンピュータサイエンス教科書シリーズ] (コンピュータサイエンス教科書シリーズ 8)
- 作者: 中井央
- 出版社/メーカー: コロナ社
- 発売日: 2007/07/01
- メディア: 単行本(ソフトカバー)
- クリック: 6回
- この商品を含むブログを見る
コンパイラ―原理・技法・ツール (Information & Computing)
- 作者: A.V.エイホ,R.セシィ,J.D.ウルマン,M.S.ラム,Alfred V. Aho,Jeffery D. Ullman,Ravi Sethi,Monica S. Lam,原田賢一
- 出版社/メーカー: サイエンス社
- 発売日: 2009/06
- メディア: 単行本
- 購入: 1人 クリック: 128回
- この商品を含むブログ (27件) を見る
- 作者: Andrew W. Appel,神林靖,滝本宗宏
- 出版社/メーカー: 翔泳社
- 発売日: 2009/10/30
- メディア: 大型本
- 購入: 6人 クリック: 165回
- この商品を含むブログ (26件) を見る
この辺が定番だと思うのだけれど,まだまだ敷居が高かったのでとりあえずこれを読んでみた. 監修は中田育夫という人です. 中田さんはのRubyの仕様書のISO規格に関わっている方で,日本でコンパイラで有名な方です. 学生時代にMatzさんは,中田さんの研究室に所属していて,恩師でもあるそう. ちなみに中田さんのコンパイラ本はこれ.
- 作者: 中田育男
- 出版社/メーカー: 朝倉書店
- 発売日: 2009/11/01
- メディア: 単行本
- 購入: 2人 クリック: 166回
- この商品を含むブログ (10件) を見る
これも日本人が書いたコンパイラ本としては定番らしい.
話は戻って今回の本ですが,大きく「字句解析」「構文解析」「意味解析」「実行時環境」「仮想計算機とコード生成」の章がある. lexとyaccを実際に使いながら簡単な字句解析や構文解析,意味解析などを学び,ミニ言語をつくったりする. 教科書として書かれているので,大学の講義レベルで,それぞれの章のテーマについて基本的な説明から始まり,演習問題とその解答もあって勉強になる. 以下,簡単な章の内容の紹介です.
字句解析
まず字句解析については,lexを使いながら,簡単な字句解析やC言語のソースにたいして,予約語,識別子の認識やクロスリファレンサをつくることが学べる. オートマトンや状態遷移図についても書かれている.
構文解析
いくつかの上向き構文解析,下向き構文解析などについて書かれている.四則演算やミニ言語の開発が学べる.
意味解析
トークンの並びが文法に合っていても,例えばC言語では,宣言された変数でなければ使用することができないなど,コンパイラはそれを発見しなければならない. このようなチェック処理が意味解析と呼ばれる. 例えば,どのような変数が存在するのかなどの管理を行なう入れ子型の静的スコープを扱った記号表の実装が学べる.
実行時環境
実行時のメモリ管理の仕方について書かれている.特に活性レコードと呼ばれる,関数呼び出しに対するメモリ割り当てられるメモリ領域について説明されている.
仮想計算機とコード生成
PL/0言語を用いて仮想計算機のためのコード生成について学べる.
以上です.次は,
言語実装パターン ―コンパイラ技術によるテキスト処理から言語実装まで
- 作者: Terence Parr,中田育男,伊藤真浩
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/12/24
- メディア: 大型本
- 購入: 5人 クリック: 333回
- この商品を含むブログ (13件) を見る
理論よりも実践的に書かれているらしい,この辺を読もうかなと思っている.