SlideShare a Scribd company logo
Erlang




id:inajob
@ina_ani
  10/23
Erlang
●   PTT
          ■ 話者:檜山正幸(檜山正幸事務所)
           ■ 話者:檜山正幸(檜山正幸事務所)
          ■ 題名: Erlang を用いたウェブ交換機(仮)
           ■ 題名: Erlang を用いたウェブ交換機(仮)
          ■ 概要:
           ■ 概要:
          Erlang の簡単な紹介と Erlang を用いたウェブ上でのメッセージ交換
           Erlang の簡単な紹介と Erlang を用いたウェブ上でのメッセージ交換
          システムについて述べる。 Erlang は 1980 年代末にエリクソンで開発
           システムについて述べる。 Erlang は 1980 年代末にエリクソンで開発
          された関数型プログラミング言語である。 Erlang は軽量な並行プロ
           された関数型プログラミング言語である。 Erlang は軽量な並行プロ
          セスの概念を備え、並行処理を簡潔に記述するとともに、マルチコ
           セスの概念を備え、並行処理を簡潔に記述するとともに、マルチコ
          ア PC あるいは複数 PC 上での並列・分散処理を容易に可能にする点を
           ア PC あるいは複数 PC 上での並列・分散処理を容易に可能にする点を
          特徴とする。この Erlang を用い、ウェブブラウザ間で双方向リアル
           特徴とする。この Erlang を用い、ウェブブラウザ間で双方向リアル
          タイム通信を行うシステムを開発している。複数ブラウザの間にジ
           タイム通信を行うシステムを開発している。複数ブラウザの間にジ
          ャンクチャと呼ばれる中継サーバーを介した通信路を張り、任意の
           ャンクチャと呼ばれる中継サーバーを介した通信路を張り、任意の
          ブラウザ間で通信したり、同報通信を行ったりすることができる。
           ブラウザ間で通信したり、同報通信を行ったりすることができる。
          ジャンクチャは Erlang により実装されており、サーバー・ブラウザ
           ジャンクチャは Erlang により実装されており、サーバー・ブラウザ
          間の Comet 技術を利用した非同期通信と、 Erlang のプロセス間通信
           間の Comet 技術を利用した非同期通信と、 Erlang のプロセス間通信
          を透過的に扱うように設計した。
           を透過的に扱うように設計した。

          これはやらねば
入門 Erlang
● 文法は Prolog っぽい
 – , で式を区切る                      hello_world() ->
                                     A = 10 * 2 + 1 + (1 + 2) * 100,
 – ; で条件を区切る                         io:fwrite(integer_to_list(A)),
 – . でおしまい                           io:fwrite("Hello, World!n").

● 単一代入


 – 変数がちょっと特殊
      1>   A = 10.
      10
      2>   B = 20.
      20
      3>   A + B.
      30
      4>   A = 20.
      **   exception error: no match of right hand side value 20
      5>   A = 5 + 5.
      10
データ構造
●   変数  大文字から始める (A,B,Size,Count)
●   アトム 小文字からはじまる (read,write,text)
●   タプル {a,b,c}
●   リスト [1,2,3]
●   文字列もリスト      {person,
                       {name, joe},
                       {height, 1.82},
                       {footsize, 42}}
パターン照合
X = 10.
X = 5 + 5.
{name,Name}   = {name,ina}.
{_,_,_,Age}   = {ina,uec,ipl,23}.
[Head|Tail]   = [1,2,3,4].
 => Head =    1, Tail = [2,3,4]
関数を書いてみよう
fac(1) ->
    1;
fac(N) ->
    N * fac(N – 1).

引数照合もパターンマッチ
上から順に調べる
関数を書いてみよう 2
タプルの正しい使い方
                           ここもパターン照合
convert({X,cm}) ->
    {X/2.54,inch};
convert({X,inch}) ->
    {X*2.54,cm}.
                       タグとしてアトムを利用

なかなか素敵

>convert({20,cm}).
{7.874015748031496,inch}
並列処理
● Erlang の得意分野
 – 複数の処理が並んで実行される
● 単一代入なので変数の変更の同期などは不要


 – (そもそも変更できない)
● 複数の処理がメッセージを投げあって協調動作
並列処理
spawn で別スレッドを生成
PID が帰ってくる
PID ! メッセージ
          で特定のスレッドにメッセージを送る
Pid = spawn(hoge),
Pid ! {mes ,”Hello”}.

receive で受け取る
receive
  {mes , Msg} ->        Sample
                         Sample
      io:fwrite(mes).
end.
並列処理と GUI
●    GS(tk) や wxErlang などの GUI ライブラリ
    – Receive を用いてイベントの処理を行う

    – 書きやすいのか?




                                   Sample
                                    Sample
GUI と Erlang
● 気兼ねなく spawn できる
● タプルの型のチェックは実行時


● オブジェクト指向ではない


 – コントロールと処理が分離されている
    ●   Button = wxButton:new(),
        wxButton:setLabel(Button,”label”).
    ライブラリの設計に問題?
    ●


● 不意に落ちる


 – セグメンテーションフォールト
話してないこと
●   普通に spawn や receive を使って処理を書い
    ておけば、複数コアのマシンで平行に処理でき
    るだけでなく 複数マシンで処理を分担させる
    ことも可能
●   サーバを止めずに処理を差し替える
●   エラーハンドリング(死体回収)
●   分散 DB
●   便利なデバッガ
Let's Erlang
●   サーバ書くのとかに向いてるの?

More Related Content

What's hot

Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
Mitsuru Kariya
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02mega80b
 
Functional Way
Functional WayFunctional Way
Functional Way
Kent Ohashi
 
Testman
TestmanTestman
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
Kent Ohashi
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
Tetsuya Morimoto
 
Vim の話
Vim の話Vim の話
Vim の話
cohama
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Ransui Iso
 
Linq To Fun
Linq To FunLinq To Fun
Linq To Fun
deflis
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Levelingkumatch kumatch
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺちdo_aki
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみるftnk
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
Hideyuki Tanaka
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7Tetsuya Morimoto
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3xibbar
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
 
Python02
Python02Python02
Python02
XMLProJ2014
 

What's hot (20)

Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16Effective Modern C++ 勉強会#3 Item16
Effective Modern C++ 勉強会#3 Item16
 
Unix
UnixUnix
Unix
 
MlnagoyaRx02
MlnagoyaRx02MlnagoyaRx02
MlnagoyaRx02
 
Functional Way
Functional WayFunctional Way
Functional Way
 
Testman
TestmanTestman
Testman
 
おいしいLisp
おいしいLispおいしいLisp
おいしいLisp
 
エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半エキ Py 読書会02 2章後半
エキ Py 読書会02 2章後半
 
Vim の話
Vim の話Vim の話
Vim の話
 
Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1Lisp tutorial for Pythonista : Day 1
Lisp tutorial for Pythonista : Day 1
 
Linq To Fun
Linq To FunLinq To Fun
Linq To Fun
 
Node.js Error & Debug Leveling
Node.js Error & Debug LevelingNode.js Error & Debug Leveling
Node.js Error & Debug Leveling
 
詳説ぺちぺち
詳説ぺちぺち詳説ぺちぺち
詳説ぺちぺち
 
Python で munin plugin を書いてみる
Python で munin plugin を書いてみるPython で munin plugin を書いてみる
Python で munin plugin を書いてみる
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
Boost Tour 1.50.0
Boost Tour 1.50.0Boost Tour 1.50.0
Boost Tour 1.50.0
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
 
Ruby&Active Support for expert 3
Ruby&Active Support for expert 3Ruby&Active Support for expert 3
Ruby&Active Support for expert 3
 
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
 
Aizu lt tokyo_luxion
Aizu lt tokyo_luxionAizu lt tokyo_luxion
Aizu lt tokyo_luxion
 
Python02
Python02Python02
Python02
 

Viewers also liked

プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛
titoi2
 
Synthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシンSynthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシン
ryos36
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Takefumi MIYOSHI
 
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Synthesijer fpgax 20150201
Synthesijer fpgax 20150201
Takefumi MIYOSHI
 
FPGA+Synthesijerでヴォコーダを作ってみた
FPGA+Synthesijerでヴォコーダを作ってみたFPGA+Synthesijerでヴォコーダを作ってみた
FPGA+Synthesijerでヴォコーダを作ってみた
Ryota Suzuki
 
FPGAX6_hayashi
FPGAX6_hayashiFPGAX6_hayashi
FPGAX6_hayashi
愛美 林
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
Kentaro Ebisawa
 

Viewers also liked (7)

プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛プロペラブForth発表osc愛媛
プロペラブForth発表osc愛媛
 
Synthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシンSynthesijer で作るFORTH仮想マシン
Synthesijer で作るFORTH仮想マシン
 
Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512Synthesijer and Synthesijer.Scala in HLS-friends 201512
Synthesijer and Synthesijer.Scala in HLS-friends 201512
 
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Synthesijer fpgax 20150201
Synthesijer fpgax 20150201
 
FPGA+Synthesijerでヴォコーダを作ってみた
FPGA+Synthesijerでヴォコーダを作ってみたFPGA+Synthesijerでヴォコーダを作ってみた
FPGA+Synthesijerでヴォコーダを作ってみた
 
FPGAX6_hayashi
FPGAX6_hayashiFPGAX6_hayashi
FPGAX6_hayashi
 
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
FPGAで作るOpenFlow Switch (FPGAエクストリーム・コンピューティング 第6回) FPGAX#6
 

Similar to Erlangやってみた

Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
Ransui Iso
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
啓 小笠原
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
Masahiro Hayashi
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
Hidenori Takeshita
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編
Masatoshi Itoh
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
Shohei Arai
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
Nobuhisa Koizumi
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているpocketberserker
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
Shinichi Kozake
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
Genya Murakami
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
koturn 0;
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)Masahiro Hayashi
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 

Similar to Erlangやってみた (20)

Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
Swiftおさらい
SwiftおさらいSwiftおさらい
Swiftおさらい
 
Erlangご紹介 websocket編
Erlangご紹介 websocket編Erlangご紹介 websocket編
Erlangご紹介 websocket編
 
JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門JavaScript経験者のためのGo言語入門
JavaScript経験者のためのGo言語入門
 
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
F#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみているF#+Erlangで簡単なシューティングゲームを作ってみている
F#+Erlangで簡単なシューティングゲームを作ってみている
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)初心者講習会資料(Osaka.r#6)
初心者講習会資料(Osaka.r#6)
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 

More from ina job

KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介
ina job
 
僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します
ina job
 
シェル入門
シェル入門シェル入門
シェル入門
ina job
 
Voice remix!
Voice remix!Voice remix!
Voice remix!
ina job
 
Mustache入門
Mustache入門Mustache入門
Mustache入門
ina job
 
MTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたMTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきた
ina job
 
SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理
ina job
 
OooBasic
OooBasicOooBasic
OooBasic
ina job
 
ICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったかICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったか
ina job
 
context free art
context free artcontext free art
context free art
ina job
 
WxHaskell
WxHaskellWxHaskell
WxHaskell
ina job
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術
ina job
 

More from ina job (12)

KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介KubeWeekly読書メモの紹介
KubeWeekly読書メモの紹介
 
僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します僕の 技術の無駄遣いを 紹介します
僕の 技術の無駄遣いを 紹介します
 
シェル入門
シェル入門シェル入門
シェル入門
 
Voice remix!
Voice remix!Voice remix!
Voice remix!
 
Mustache入門
Mustache入門Mustache入門
Mustache入門
 
MTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきたMTM07で電子楽器を展示してきた
MTM07で電子楽器を展示してきた
 
SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理SVNのすすめ&Redmineでプロジェクト管理
SVNのすすめ&Redmineでプロジェクト管理
 
OooBasic
OooBasicOooBasic
OooBasic
 
ICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったかICFP2009-いかにして我々は戦ったか
ICFP2009-いかにして我々は戦ったか
 
context free art
context free artcontext free art
context free art
 
WxHaskell
WxHaskellWxHaskell
WxHaskell
 
webを飾る技術
webを飾る技術webを飾る技術
webを飾る技術
 

Recently uploaded

遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 

Recently uploaded (9)

遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 

Erlangやってみた

  • 2. Erlang ● PTT ■ 話者:檜山正幸(檜山正幸事務所) ■ 話者:檜山正幸(檜山正幸事務所) ■ 題名: Erlang を用いたウェブ交換機(仮) ■ 題名: Erlang を用いたウェブ交換機(仮) ■ 概要: ■ 概要: Erlang の簡単な紹介と Erlang を用いたウェブ上でのメッセージ交換 Erlang の簡単な紹介と Erlang を用いたウェブ上でのメッセージ交換 システムについて述べる。 Erlang は 1980 年代末にエリクソンで開発 システムについて述べる。 Erlang は 1980 年代末にエリクソンで開発 された関数型プログラミング言語である。 Erlang は軽量な並行プロ された関数型プログラミング言語である。 Erlang は軽量な並行プロ セスの概念を備え、並行処理を簡潔に記述するとともに、マルチコ セスの概念を備え、並行処理を簡潔に記述するとともに、マルチコ ア PC あるいは複数 PC 上での並列・分散処理を容易に可能にする点を ア PC あるいは複数 PC 上での並列・分散処理を容易に可能にする点を 特徴とする。この Erlang を用い、ウェブブラウザ間で双方向リアル 特徴とする。この Erlang を用い、ウェブブラウザ間で双方向リアル タイム通信を行うシステムを開発している。複数ブラウザの間にジ タイム通信を行うシステムを開発している。複数ブラウザの間にジ ャンクチャと呼ばれる中継サーバーを介した通信路を張り、任意の ャンクチャと呼ばれる中継サーバーを介した通信路を張り、任意の ブラウザ間で通信したり、同報通信を行ったりすることができる。 ブラウザ間で通信したり、同報通信を行ったりすることができる。 ジャンクチャは Erlang により実装されており、サーバー・ブラウザ ジャンクチャは Erlang により実装されており、サーバー・ブラウザ 間の Comet 技術を利用した非同期通信と、 Erlang のプロセス間通信 間の Comet 技術を利用した非同期通信と、 Erlang のプロセス間通信 を透過的に扱うように設計した。 を透過的に扱うように設計した。 これはやらねば
  • 3. 入門 Erlang ● 文法は Prolog っぽい – , で式を区切る hello_world() -> A = 10 * 2 + 1 + (1 + 2) * 100, – ; で条件を区切る io:fwrite(integer_to_list(A)), – . でおしまい io:fwrite("Hello, World!n"). ● 単一代入 – 変数がちょっと特殊 1> A = 10. 10 2> B = 20. 20 3> A + B. 30 4> A = 20. ** exception error: no match of right hand side value 20 5> A = 5 + 5. 10
  • 4. データ構造 ● 変数 大文字から始める (A,B,Size,Count) ● アトム 小文字からはじまる (read,write,text) ● タプル {a,b,c} ● リスト [1,2,3] ● 文字列もリスト {person, {name, joe}, {height, 1.82}, {footsize, 42}}
  • 5. パターン照合 X = 10. X = 5 + 5. {name,Name} = {name,ina}. {_,_,_,Age} = {ina,uec,ipl,23}. [Head|Tail] = [1,2,3,4]. => Head = 1, Tail = [2,3,4]
  • 6. 関数を書いてみよう fac(1) -> 1; fac(N) -> N * fac(N – 1). 引数照合もパターンマッチ 上から順に調べる
  • 7. 関数を書いてみよう 2 タプルの正しい使い方 ここもパターン照合 convert({X,cm}) -> {X/2.54,inch}; convert({X,inch}) -> {X*2.54,cm}. タグとしてアトムを利用 なかなか素敵 >convert({20,cm}). {7.874015748031496,inch}
  • 8. 並列処理 ● Erlang の得意分野 – 複数の処理が並んで実行される ● 単一代入なので変数の変更の同期などは不要 – (そもそも変更できない) ● 複数の処理がメッセージを投げあって協調動作
  • 9. 並列処理 spawn で別スレッドを生成 PID が帰ってくる PID ! メッセージ で特定のスレッドにメッセージを送る Pid = spawn(hoge), Pid ! {mes ,”Hello”}. receive で受け取る receive {mes , Msg} -> Sample Sample io:fwrite(mes). end.
  • 10. 並列処理と GUI ● GS(tk) や wxErlang などの GUI ライブラリ – Receive を用いてイベントの処理を行う – 書きやすいのか? Sample Sample
  • 11. GUI と Erlang ● 気兼ねなく spawn できる ● タプルの型のチェックは実行時 ● オブジェクト指向ではない – コントロールと処理が分離されている ● Button = wxButton:new(), wxButton:setLabel(Button,”label”). ライブラリの設計に問題? ● ● 不意に落ちる – セグメンテーションフォールト
  • 12. 話してないこと ● 普通に spawn や receive を使って処理を書い ておけば、複数コアのマシンで平行に処理でき るだけでなく 複数マシンで処理を分担させる ことも可能 ● サーバを止めずに処理を差し替える ● エラーハンドリング(死体回収) ● 分散 DB ● 便利なデバッガ
  • 13. Let's Erlang ● サーバ書くのとかに向いてるの?