SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
第2回 - メタプロだ -
GMO Pepabo, Inc.
Joe Honzawa
2015/5/20 Elixir勉強会
Elixirだ
前回やったこと
> Elixirのインストール
> 型
> 制御構文case, if, cond
> パターンマッチ
> モジュール、関数、ディレクティブ
> MixとHex
> Mixプロジェクトの作成とテスト
今回の内容
> メタプログラミング
> ElixirのAST
> マクロ
> はじめてのマクロ
> assert
> コード生成
分かりづらい内容なので、
同じことを繰り返し言ったりします
ElixirのAST
ASTとは
> Abstract Syntax Tree
> 抽象構文木
> コードの内部表現
> コードの意味を表す木構造
ElixirのAST
> Elixirのデータ型で表現される
> サイズ3のタプル
> {関数名, メタデータ, 引数たち}
> の入れ子
> Elixirの関数で扱える ← これ重要
ElixirのASTの例
is_atom(:ok)
↓
{
:is_atom,
[context: Elixir, import: Kernel],
[:ok]
}
例外
> (quote do: me) == me
> atoms
> numbers
> lists
> strings
> tuples with two elements
quoteなしでASTとして使えるという意味でもある
ASTを観察しよう
$ iex
iex(1)> quote do
...(1)> String.length(“hey”)
...(1)> end
iex(2)> {name, _, args} = v(1)
iex(3)> Code.eval_quoted v(1)
quoteとunquote
> quote
> 与えられたコードをASTに変換
> unquote
> 与えられたASTをコードに埋め込む
unquoteしよう
iex(1)> ast = quote do: String
iex(2)> quote do
...(2)> (unquote ast).length “hey”
...(2)> end
iex(3)> {name, _, args} = v(2)
iex(4)> Code.eval_quoted v(2)
おさらい
> quote
> 与えられたコードをASTに変換
> unquote
> 与えられたASTをコードに埋め込む
マクロ
マクロ
> ASTを受けてASTを返す
> defmacroで定義する
> もちろんモジュールの内側で
> defmacropならプライベート
例
defmacro ukenagasu(ast) do
ast
end
ukenagasu IO.puts(“hey”)
> 入力をそのまま返すマクロ
> astはIO.puts(“hey”)のAST
ifマクロ
if now == :morning do
“good morning”
else
“hi”
end
ifマクロ
if(now == :morning do
“good morning”
else
“hi”
end)
ifマクロ
if(now == :morning,
do: “good morning”,
else: “hi”
)
ifマクロ
if(now == :morning,
[do: “good morning”,
else: “hi”]
)
ifの定義
defmacro if(condition, clauses) do
do_cl = K.get(clauses, :do)
else_cl = K.get(clauses, :else)
quote do
case unquote(condition) do
x when x in [false, nil] ->
unquote(else_cl)
_ ->
unquote(do_cl)
end
end
end ※ 一部略。KはKeywordのalias
defmacro if(condition, clauses) do
do_cl = K.get(clauses, :do)
else_cl = K.get(clauses, :else)
quote do
case unquote(condition) do
x when x in [false, nil] ->
unquote(else_cl)
_ ->
unquote(do_cl)
end
end
end
ifの定義
※ 一部略。KはKeywordのalias
clausesはASTでは?
defmacro if(condition, clauses) do
do_cl = K.get(clauses, :do)
else_cl = K.get(clauses, :else)
quote do
case unquote(condition) do
x when x in [false, nil] ->
unquote(else_cl)
_ ->
unquote(do_cl)
end
end
end
ifの定義
※ 一部略。KはKeywordのalias
リストと2要素タプルは
ASTになっても形を保つので
Keywordモジュールでイジれる
ifの定義
defmacro if(condition, clauses) do
do_cl = K.get(clauses, :do)
else_cl = K.get(clauses, :else)
quote do
case unquote(condition) do
x when x in [false, nil] ->
unquote(else_cl)
_ ->
unquote(do_cl)
end
end
end ※ 一部略。KはKeywordのalias
ifマクロ展開後
if(now == :morning,
do: “good morning”,
else: “hi”)
↓
case now == :morning do
x when x in [false, nil] ->
“hi”
_ ->
“good morning”
end
アレもコレもマクロ
> is_nil
> def
> defmodule
> |>
> .. (Rangeのあれ)
> 他にもいっぱい
パイプ ¦>
[1, 2, 3] |> Enum.map(fun)
↓
Enum.map([1, 2, 3], fun)
第1引数として差し込む
はじめてのマクロ
簡単なやつね
$ mix new makuro
$ cd ./makuro
つくっちゃってー
> 与えられたコードを2回実行するマクロ
> ヒント
defmacro twice(do: content) do
quote do
unquote(content)
unquote(content)
end
end
テストするよ
defmodule MakuroTest do
use ExUnit.Case
import ExUnit.CaptureIO
require Makuro
test “twice” do
output = capture_io fn ->
Makuro.twice do: IO.puts “age”
end
assert output == “agenagen”
end
end
require?
> Elixirのコンパイル
> コードをASTにパース
> 展開フェイズ
> マクロの展開を繰り返す
> バイトコードへ変換
require?
> マクロを展開する
> マクロを呼び、ASTを得ること
> マクロは展開フェイズで呼ばれる
> コンパイルされてないと呼べない
> 先にコンパイルしておいて欲しいモ
ジュールを示すためにrequire
useもマクロ
use Makuro, options
 ↓
require Makuro
Makuro.__using__(options)
例えばこれが1行で
defmodule Makuro do
defmacro __using__(_) do
quote do
import Makuro
import Makuro.Yabai
import Makuro.Kakkoii
import Makuro.TotemoYoi
end
end
end
use Makuro
assert
前回のラスト
ワンダーだった点
> ==で比較したことがバレていた
> まさか、quote??????
assert(a == b)
→ assert( true )ではない?
試してみよう
iex(1)> quote do: 1 == 2
iex(2)> {ope, _, [lhs, rhs]} = v(1)
iex(3)> quote do
...(3)> String.length(“hi”) == 2
...(3)> end
iex(4)> {ope, _, [lhs, rhs]} = v(3)
 比較演算子、右辺、左辺が取得できた
オレオレassert
defmacro tadashii(expr) do
{ope, _, [lhs, rhs]} = expr
quote do
left = Macro.to_string(unquote lhs)
right = Macro.to_string(unquote rhs)
IO.puts “ひだり: “ <> left
IO.puts “みぎ:  “ <> right
if unquote(expr) do
IO.puts “こいつら #{unquote ope}”
else
IO.puts “こいつら #{unquote ope} じゃない”
end
end
end
オレオレassert
iex(1)> require Makuro
iex(2)> Makuro.tadashii 1 == 1
ひだり: 1
みぎ: 1
こいつら ==
iex(3)> Makuro.tadashii 1 == 2
ひだり: 1
みぎ: 2
こいつら == じゃない
マクロは強い
> 標準ライブラリにもマクロがいっぱい
> 発想次第でいろいろ出来る
> DSLの構築とか
マクロは難しい
> 悪魔的AST変形
> 狙い通りに展開されているのか
> どうする
> 関数でできることは関数でやる
> テストする
ちょっとオマケ
展開後のコードを見る
test/test_helper.exs
ExUnit.start
defmodule TestHelper do
defmacro puts_expanded(macro) do
macro
|> Macro.expand(__CALLER__)
|> Macro.to_string
|> IO.puts
end
end
test/makuro_test.exs
defmodule MakuroTest do
import TestHelper
test “see expanded” do
(String.length(“hey”) == 3)
|> Makuro.tadashii
|> puts_expanded
end
end
コード生成
変なことしてみる
defmodule Makuro do
IO.puts “just inside defmodule”
end
$ mix compile
どういうこと?
> コンパイル時にElixirコードが実行された
> def等がマクロということを考えれば当然
> IOモジュールはコンパイル済みだった
> brew installしたとき
> なのでMakuroコンパイル時にputsできた
> 他にもEnumとか使えるのでは?
似た関数をループで定義
defmodule Makuro do
[
{“mon”, “月”}, {“tue”, “火”}, …
]
|> Enum.map fn {en, ja} ->
def in_japanese(unquote en) do
unquote ja
end
end
end
もっと
> ファイルの内容に基づいて関数を定義
> StringモジュールとUnicode
> https://hex.pm/packages/colorful
やってみよ
> 名簿ファイルを読んで、Person構造体
を返す関数群を定義しよう
> Person.alex/0
> %Person{name: "alex", age: 20}
alex 20
jack 18
mary 22
priv/people.txt
ヒント
> File.read/1
> String.split/2
> String.to_integer/1
> fn_name = String.to_atom(name)
> def unquote(fn_name)() do
> (File.stream!)
今回やったこと
> メタプログラミング
> ElixirのAST
> マクロ
> ExUnitのassert
> コード生成

Contenu connexe

Tendances

姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bashJun Nogata
 
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Satoshi Kume
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能hitode909
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
Goの文法の実例と解説
Goの文法の実例と解説Goの文法の実例と解説
Goの文法の実例と解説Ryuji Iwata
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみたina job
 
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜勝成 鈴江
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜Kenta USAMI
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門Hiroaki Murayama
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPIDaisuke Igarashi
 
Stroustrup11章雑感
Stroustrup11章雑感Stroustrup11章雑感
Stroustrup11章雑感31 00
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話infinite_loop
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかKousuke Ebihara
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...Kazuya Wada
 

Tendances (19)

姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
姫路IT系勉強会 Vol.11 第0回L-1グランプリ bash
 
Mac_Terminal_ver1.0
Mac_Terminal_ver1.0Mac_Terminal_ver1.0
Mac_Terminal_ver1.0
 
F#のすすめ
F#のすすめF#のすすめ
F#のすすめ
 
Perlで伝統芸能
Perlで伝統芸能Perlで伝統芸能
Perlで伝統芸能
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Goの文法の実例と解説
Goの文法の実例と解説Goの文法の実例と解説
Goの文法の実例と解説
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Erlangやってみた
ErlangやってみたErlangやってみた
Erlangやってみた
 
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
C++でのゲームプログラミングをしたときのお話 札幌C++勉強会 #4 〜スタートゲームプログラミング〜
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
Rubyにおける構文追加の試み 〜ボクとRubyと俺々文法〜
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
Stroustrup11章雑感
Stroustrup11章雑感Stroustrup11章雑感
Stroustrup11章雑感
 
traitを使って楽したい話
traitを使って楽したい話traitを使って楽したい話
traitを使って楽したい話
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
RのffでGLMしてみたけど...
RのffでGLMしてみたけど...RのffでGLMしてみたけど...
RのffでGLMしてみたけど...
 

Similaire à Elixirだ 第2回

Erlangのマルチプロセスを触ってみた
Erlangのマルチプロセスを触ってみたErlangのマルチプロセスを触ってみた
Erlangのマルチプロセスを触ってみたYoichi Toyota
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説do_aki
 
Everyday Life with clojure.spec
Everyday Life with clojure.specEveryday Life with clojure.spec
Everyday Life with clojure.specKent Ohashi
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナドKousuke Ruichi
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介fukuoka.ex
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるKoichi Sakata
 
Metaprogramming in JuliaLang
Metaprogramming in JuliaLangMetaprogramming in JuliaLang
Metaprogramming in JuliaLangYuichi Motoyama
 
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)taskie
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~Fujio Kojima
 
初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)karky7
 
ReactでuseEffect()を減らしたい話
ReactでuseEffect()を減らしたい話ReactでuseEffect()を減らしたい話
ReactでuseEffect()を減らしたい話iPride Co., Ltd.
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方Satoshi Nagayasu
 
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 ltushiboy
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1NISHIMOTO Keisuke
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーmganeko
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7Tetsuya Morimoto
 
for JSDeferred Code Reading
for JSDeferred Code Readingfor JSDeferred Code Reading
for JSDeferred Code ReadingKenichirou Oyama
 

Similaire à Elixirだ 第2回 (19)

Erlangのマルチプロセスを触ってみた
Erlangのマルチプロセスを触ってみたErlangのマルチプロセスを触ってみた
Erlangのマルチプロセスを触ってみた
 
PHP AST 徹底解説
PHP AST 徹底解説PHP AST 徹底解説
PHP AST 徹底解説
 
Everyday Life with clojure.spec
Everyday Life with clojure.specEveryday Life with clojure.spec
Everyday Life with clojure.spec
 
並行プログラミングと継続モナド
並行プログラミングと継続モナド並行プログラミングと継続モナド
並行プログラミングと継続モナド
 
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
 
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみるJJUG CCC 2017 Fall オレオレJVM言語を作ってみる
JJUG CCC 2017 Fall オレオレJVM言語を作ってみる
 
Metaprogramming in JuliaLang
Metaprogramming in JuliaLangMetaprogramming in JuliaLang
Metaprogramming in JuliaLang
 
ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)ECMAScript 6 Features(PDF 版)
ECMAScript 6 Features(PDF 版)
 
Python02
Python02Python02
Python02
 
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
 
RNASkim
RNASkimRNASkim
RNASkim
 
初めてのHaskell (表)
初めてのHaskell (表)初めてのHaskell (表)
初めてのHaskell (表)
 
ReactでuseEffect()を減らしたい話
ReactでuseEffect()を減らしたい話ReactでuseEffect()を減らしたい話
ReactでuseEffect()を減らしたい話
 
PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方PostgreSQL - C言語によるユーザ定義関数の作り方
PostgreSQL - C言語によるユーザ定義関数の作り方
 
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 lt
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1
 
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラーNode.jsでつくるNode.js ミニインタープリター&コンパイラー
Node.jsでつくるNode.js ミニインタープリター&コンパイラー
 
エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7エキ Py 読書会02 2010/9/7
エキ Py 読書会02 2010/9/7
 
for JSDeferred Code Reading
for JSDeferred Code Readingfor JSDeferred Code Reading
for JSDeferred Code Reading
 

Plus de Joe_noh

パフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったことパフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったことJoe_noh
 
Vue.jsのユニットテスト
Vue.jsのユニットテストVue.jsのユニットテスト
Vue.jsのユニットテストJoe_noh
 
Vuexと入力フォーム
Vuexと入力フォームVuexと入力フォーム
Vuexと入力フォームJoe_noh
 
カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後Joe_noh
 
サイクルOJTイントロダクション
サイクルOJTイントロダクションサイクルOJTイントロダクション
サイクルOJTイントロダクションJoe_noh
 
お産ウィークイントロダクション
お産ウィークイントロダクションお産ウィークイントロダクション
お産ウィークイントロダクションJoe_noh
 
モバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクションモバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクションJoe_noh
 
Webオペレーション研修イントロダクション
Webオペレーション研修イントロダクションWebオペレーション研修イントロダクション
Webオペレーション研修イントロダクションJoe_noh
 
Web開発研修イントロダクション
Web開発研修イントロダクションWeb開発研修イントロダクション
Web開発研修イントロダクションJoe_noh
 
リーンキャンバス
リーンキャンバスリーンキャンバス
リーンキャンバスJoe_noh
 
もっとgit
もっとgitもっとgit
もっとgitJoe_noh
 
できないことはPortで外注
できないことはPortで外注できないことはPortで外注
できないことはPortで外注Joe_noh
 
DBにseedするライブラリつくった
DBにseedするライブラリつくったDBにseedするライブラリつくった
DBにseedするライブラリつくったJoe_noh
 
やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-Joe_noh
 
Elixirだ 第6回
Elixirだ 第6回Elixirだ 第6回
Elixirだ 第6回Joe_noh
 
Elixirだ 第5回
Elixirだ 第5回Elixirだ 第5回
Elixirだ 第5回Joe_noh
 
Elixirだ 第4回
Elixirだ 第4回Elixirだ 第4回
Elixirだ 第4回Joe_noh
 
Elixirだ 第3回
Elixirだ 第3回Elixirだ 第3回
Elixirだ 第3回Joe_noh
 
Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)Joe_noh
 
いつかどこかで使えそうな英語
いつかどこかで使えそうな英語いつかどこかで使えそうな英語
いつかどこかで使えそうな英語Joe_noh
 

Plus de Joe_noh (20)

パフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったことパフォーマンス改善のためにやったこと・やらなかったこと
パフォーマンス改善のためにやったこと・やらなかったこと
 
Vue.jsのユニットテスト
Vue.jsのユニットテストVue.jsのユニットテスト
Vue.jsのユニットテスト
 
Vuexと入力フォーム
Vuexと入力フォームVuexと入力フォーム
Vuexと入力フォーム
 
カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後カラーミーAPIドキュメントの今後
カラーミーAPIドキュメントの今後
 
サイクルOJTイントロダクション
サイクルOJTイントロダクションサイクルOJTイントロダクション
サイクルOJTイントロダクション
 
お産ウィークイントロダクション
お産ウィークイントロダクションお産ウィークイントロダクション
お産ウィークイントロダクション
 
モバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクションモバイルアプリ研修イントロダクション
モバイルアプリ研修イントロダクション
 
Webオペレーション研修イントロダクション
Webオペレーション研修イントロダクションWebオペレーション研修イントロダクション
Webオペレーション研修イントロダクション
 
Web開発研修イントロダクション
Web開発研修イントロダクションWeb開発研修イントロダクション
Web開発研修イントロダクション
 
リーンキャンバス
リーンキャンバスリーンキャンバス
リーンキャンバス
 
もっとgit
もっとgitもっとgit
もっとgit
 
できないことはPortで外注
できないことはPortで外注できないことはPortで外注
できないことはPortで外注
 
DBにseedするライブラリつくった
DBにseedするライブラリつくったDBにseedするライブラリつくった
DBにseedするライブラリつくった
 
やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-
 
Elixirだ 第6回
Elixirだ 第6回Elixirだ 第6回
Elixirだ 第6回
 
Elixirだ 第5回
Elixirだ 第5回Elixirだ 第5回
Elixirだ 第5回
 
Elixirだ 第4回
Elixirだ 第4回Elixirだ 第4回
Elixirだ 第4回
 
Elixirだ 第3回
Elixirだ 第3回Elixirだ 第3回
Elixirだ 第3回
 
Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)Declaimerっていうやつつくった(つくってる)
Declaimerっていうやつつくった(つくってる)
 
いつかどこかで使えそうな英語
いつかどこかで使えそうな英語いつかどこかで使えそうな英語
いつかどこかで使えそうな英語
 

Dernier

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 

Dernier (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 

Elixirだ 第2回