SlideShare a Scribd company logo
1 of 61
Download to read offline
正規表現リテラルは 
本当に必要なのか? 
Makoto Kuwata 
kwa@kuwata-lab.com 
http://www.kuwata-lab.com/ 
copyright© 2014 kuwata-lab.com all rights reserved 
PyConJP 2014 
ver 1.1 (2014-09-17): スライドを追加・加筆
発表の背景 
✓ 2013年末、プログラミング言語における「正規 
表現リテラルの必要性」が支持を集める 
http://togetter.com/li/603521 
http://blog.kazuhooku.com/2013/12/blog-post.html   
✓ Pythonは正規表現リテラルがないけど、別に困 
ってないよ? 
…と説明しても聞いちゃくれないPerler/Rubyist/JavaScripterと、 
正規表現リテラルがなくて困ってるJavaユーザと、どんなときでも 
叩かれるPHPerが入り乱れた、異種言語間お笑いバトル 
copyright© 2014 kuwata-lab.com all rights reserved
え|マジ 
正規表現 
リテラルないの? 
あれなしで許されるキモ|イ 
のはPHPまでだよね! 
キャハハハハハハ 
Pythonの評判
発表の目的 
✓ 正規表現リテラルは、あれば便利だけどなくても 
困らない(ライブラリでカバーできる)ことを説 
明する 
✓ Pythonの正規表現ライブラリが抱える問題点と 
その解決案を紹介する 
copyright© 2014 kuwata-lab.com all rights reserved
発表の対象者 
✓ Pythonのことをよく知らないPerlerやRubyist 
やJavaScripter  
✓ 他言語との違いが気になるPythonista 
✓ 二重バックスラッシュにイライラしてるJavaユー 
ザ 
copyright© 2014 kuwata-lab.com all rights reserved
第1部: 
正規表現リテラルに関する誤解 
copyright© 2014 kuwata-lab.com all rights reserved
第1部:正規表現リテラルに関する誤解 
✓ 誤解:正規表現リテラルがあったほうが書きやすい 
✓ 誤解:正規表現リテラルがあったほうが性能がよい 
✓ 誤解:正規表現のほうが文字列関数より学習コスト 
が低い 
copyright© 2014 kuwata-lab.com all rights reserved
第1部:正規表現リテラルに関する誤解 
✓ 誤解:正規表現リテラルがあったほうが書きやすい 
✓ 誤解:正規表現リテラルがあったほうが性能がよい 
✓ 誤解:正規表現のほうが文字列関数より学習コスト 
が低い 
copyright© 2014 kuwata-lab.com all rights reserved
正規表現リテラルがあると、正規表現は書きやす 
い? 
## 正規表現リテラルあり 
/[a-z]+/.exec(string) # JavaScript 
## 正規表現リテラルなし 
(new RegExp("[a-z]+")).exec(string) # JavaScript 
copyright© 2014 kuwata-lab.com all rights reserved
正規表現リテラルがなくても、正規表現を書きやす 
くできる 
## 正規表現リテラルなし 
function re(pattern) { # JavaScript 
return new RegExp(pattern); 
} 
re("[a-z]+").exec(string) 
関数やライブラリで解決できる 
copyright© 2014 kuwata-lab.com all rights reserved
二重バックスラッシュ問題を発生させないためには 
正規表現リテラルが必要? 
## 正規表現リテラルあり 
/^dd:dd$/ # JavaScript 
## 正規表現リテラルなし 
new RegExp("^dd:dd$") # JavaScript 
copyright© 2014 kuwata-lab.com all rights reserved
raw文字列リテラル (Python) やシングルクォー 
ト(JS, PHP)でも発生しない 
## JavaScript 
new RegExp('^dd:dd:dd$') 
## Python 
re.match(r"^dd:dd:dd$", timestr) 
## PHP 
preg_match('/^dd:dd:dd$/', timestr) 
copyright© 2014 kuwata-lab.com all rights reserved
ただしraw文字列相当のない言語、お前はダメだ 
## Java 
import java.util.regex.Pattern; 
import java.util.regex.Matcher; 
Pattern pat = Pattern.compile("^dd:dd$"); 
Matcher m = pat.matcher(timestr); 
二重バックスラッシュが辛いです ;( 
copyright© 2014 kuwata-lab.com all rights reserved
【問題点】 
Javaで正規表現が書きにくい 
(二重バックスラッシュがつらい) 
【解決策】 
正規表現リテラル 
【解決策】 
raw文字列リテラル 
導入すると、言語仕様が 
肥大化してしまう 
正規表現以外にも利用可能、 
かつ言語仕様が肥大化しない 
copyright© 2014 kuwata-lab.com all rights reserved
とはいえ、raw文字列リテラルを導入するには 
言語仕様の拡張が必要 
## Java 
Pattern pat = Pattern.compile(r"^dddd$"); 
Matcher m = pat.matcher(input); 
raw文字列リテラルがほしいけど、 
言語仕様を拡張しないと無理じゃん ;( 
copyright© 2014 kuwata-lab.com all rights reserved
そもそも、バックスラッシュでないとだめなん? 
## 先行事例: Cのprintf()やJavaのString.format() 
String.format("s=%s, n=%d", s, n); 
メタキャラクタとして「%」を使っている! 
二重バックスラッシュのような問題がない! 
copyright© 2014 kuwata-lab.com all rights reserved
バックスラッシュ以外を使えば、Javaでも正規表 
現が書きやすくなる! (最初は違和感あるけど慣れの問題) 
## http://kwatch.houkagoteatime.net/blog/2013/12/28/java-regex/ 
import static benry.rexp.Rexp.rexp; 
import benry.rexp.Matched; 
String pat = "^(`d`d`d`d)-(`d`d)-(`d`d)$"; 
Matched m = rexp(pat).match(str); 
if (m != null) { 
System.out.println(m.get(1)); 
} 
copyright© 2014 kuwata-lab.com all rights reserved 
「」のかわりに 
「`」を使ってる 
(変更も可能)
【問題点】 
Javaで正規表現が書きにくい 
(二重バックスラッシュがつらい) 
【解決策】 
バックスラッシュを 
やめる 
copyright© 2014 kuwata-lab.com all rights reserved 
【解決策】 
正規表現リテラル 
【解決策】 
raw文字列リテラル 
言語仕様の変更が必要なく、 
ライブラリだけで実現可能
✓ 正規表現リテラルのないJavaでは、 
正規表現が書きにくい 
✓ 正規表現リテラルのあるPerlやRubyでは、 
正規表現が書きやすい 
✓ だから、プログラミング言語に 
正規表現リテラルは必要だ! 
・問題:解決方法 = 1:N 
(*注) 
・one of themでしかない方法を、only oneな方法だと勘違いしてる 
(*注) もちろん、複数の解決方法の間では優劣が存在する。この場合なら、「正規表現リテ 
ラルが必要」と主張するには、それが他の方法より優れていることを説明する必要がある。 
copyright© 2014 kuwata-lab.com all rights reserved 
← わかる 
← わかる 
← その理屈はおかしい
ここまでのまとめ 
✓ 正規表現を書きやすくする言語機能は、ひとつで 
はない 
正規表現リテラル、raw文字列リテラル 
✓ 正規表現リテラルよりraw文字列リテラルのほう 
が望ましい 
正規表現以外にも利用可能だし、言語仕様も肥大化しない 
✓ そもそも、バックスラッシュを使わなければいい 
言語仕様の拡張が必要ないので、今すぐ使える方法 
copyright© 2014 kuwata-lab.com all rights reserved
第1部:正規表現リテラルに関する誤解 
✓ 誤解:正規表現リテラルがあったほうが書きやすい 
✓ 誤解:正規表現リテラルがあったほうが性能がよい 
✓ 誤解:正規表現のほうが文字列関数より学習コスト 
が低い 
copyright© 2014 kuwata-lab.com all rights reserved
正規表現リテラルなら、コンパイルは1度だけ 
## Ruby 
100.times do 
filename =~ /.(png|gif|jpe?g)$/ 
end 
100回コンパイルされたりはしない 
(ただし埋め込み式のある場合は別) 
copyright© 2014 kuwata-lab.com all rights reserved
正規表現リテラルがない場合はどうなる? 
## Python 
for _ in range(100): 
re.search(r'.(png|gif|jpe?g)', filename) 
re.search() の中で毎回コンパイル 
されてそうだから、遅いのでは? 
copyright© 2014 kuwata-lab.com all rights reserved
ライブラリがキャッシュすれば無問題 
## Python 
_cache = {} 
def _compile(patstr): 
## キャッシュがあればそれを返す 
try: 
キャッシュを活用 
return _cache[patstr] 
except KeyError: 
pass 
## なければコンパイルして 
## キャッシュする 
pat = sre_compile(patstr) 
_cache[patstr] = pat 
return pat 
def search(patstr, s): 
pat = _compile(patstr) 
return pat.search(s) 
def sub(patstr, rep, s): 
pat = _compile(patstr) 
return pat.sub(rep, s) 
注:実際の正規表現ライブラリ (re.py) では、正規表現フラグつきでキャッシュしたり、 
キャッシュが大きくなりすぎるとパージするなど、もっと複雑である。 
copyright© 2014 kuwata-lab.com all rights reserved 
他の関数は _compile() 
を呼び出す
どうしても気になる場合は、正規表現オブジェク 
トを変数で保持すればよい 
## Python 
rexp = re.compile(r'.(png|gif|jpe?g)') 
for _ in range(100): 
re.search(rexp, filename) 
キャッシュから取り出す 
オーバーヘッドがなくなる 
(通常は気にするほどではない) 
copyright© 2014 kuwata-lab.com all rights reserved
なおCPythonでは、正規表現ライブラリより 
文字列関数のほうがかなり速い 
copyright© 2014 kuwata-lab.com all rights reserved 
startswith() 
endswith() 
isdigit() 
文字列関数正規表現 
文字列関数の速度を100 
としたときのグラフ 
https://gist.github.com/kwatch/f923fb5a71da3f69eccb 
https://gist.github.com/kwatch/0132268e0c38741fe59a 
https://gist.github.com/kwatch/e1bc95fcc6cb75c60c94
また正規表現に対する高度な最適化は、リテラル 
の有無ではなく、処理系の評価戦略次第 
// Rust (http://doc.rust-lang.org/regex/) 
#![feature(phase)] 
#[phase(plugin)] 
extern crate regex_macros; 
extern crate regex; 
正規表現文字列をコンパイル時に評価 
→ 正規表現リテラルがなくても 
コンパイル時に間違いを検出 
→ 正規表現リテラルがなくても 
バイナリを生成可能 
fn main() { 
let re = regex!(r"^d{4}-d{2}-d{2}$"); 
assert_eq!(re.is_match("2014-01-01"), true); 
} 
copyright© 2014 kuwata-lab.com all rights reserved
ここまでのまとめ 
✓ キャッシュを使えば、正規表現が毎回コンパイル 
されることはない 
正規表現リテラルがなくても充分な性能は出せる 
✓ 正規表現より文字列関数のほうが高速 
少なくともCPythonではそう 
✓ リテラルがなくても正規表現のコンパイル時評価 
は可能 
「リテラルの有無」と「処理系の評価戦略」は、基本的に別個の話 
copyright© 2014 kuwata-lab.com all rights reserved
第1部:正規表現リテラルに関する誤解 
✓ 誤解:正規表現リテラルがあったほうが書きやすい 
✓ 誤解:正規表現リテラルがあったほうが性能がよい 
✓ 誤解:正規表現のほうが文字列関数より学習コスト 
が低い 
copyright© 2014 kuwata-lab.com all rights reserved
✓ そもそも、「正規表現リテラルは必要か?」と 
「正規表現と文字列関数はどちらが学習コストが 
低いか?」は別の話 
仮に「正規表現のほうが文字列関数よりわかりやすい」という結 
論になったとしても、それをもって「正規表現リテラルは必要」 
とはならない 
✓ そのうえで、あえて「どちらが学習コストが低い 
か?」を論じる。 
copyright© 2014 kuwata-lab.com all rights reserved
文字列関数で済む範囲であれば、正規表現より 
文字列関数のほうが読みやすい、わかりやすい 
## 正規表現 
re.match(r"^d+$", input) 
re.match(r"^http://", string) 
re.search(r".(png|gif|jpg)$", filename) 
毎日コード書いてる人なら 
覚えられるだろうけど・・・ 
## 文字列関数 
input.isdigit() 
string.startswith("http://") 
filename.endswith((".png", ".gif", ".jpg")) 
初級者でもわかりやすい! 
copyright© 2014 kuwata-lab.com all rights reserved
また正規表現は落とし穴も多いので、初級者には 
つらいことも 
## Ruby 
string =~ /.html$/ 
厳密には間違い 
(正解は /.htmlz/ ) 
## Ruby 
string.end_with?(".html") 
初級者でも間違えない! 
copyright© 2014 kuwata-lab.com all rights reserved
とはいえ、上達するにつれ、正規表現を避けるこ 
とはできない 
## 正規表現 
pat = r"^(d{4})-(dd)-(dd)[ T](dd):(dd): 
dd)$" 
re.match(pat, input) 
文字列関数でこれを書くのは 
つらい 
copyright© 2014 kuwata-lab.com all rights reserved
学習コストの内訳(ソース:個人的印象) 
文字列関数 
正規表現の学習コストに比べたら、 
文字列関数のそれは大したことない 
(単機能ばかりだから) 
正規表現正規表現 
正規表現だけ正規表現+文字列関数 
copyright© 2014 kuwata-lab.com all rights reserved
コア言語仕様を肥大化させて 
でも文字列関数を減らすこと 
がそんなに重要なの? 
それ正規表現リテラル 
じゃなくて正規表現の 
メリットじゃないの? 
“正規表現リテラルがあれば 
文字列関数を減らせるし、 
処理系も単純にできるよ!” 
誰にとってのメリットなの? 
ときどきしかコードを書かない 
ライトユーザにも嬉しいことなの? 
(科学者、統計学者、CGデザイナ、etc) 
そんな簡単な話ではないはず・・・ 
「/..../」のパースは単純なの? 
文字列関数が減るかわりに 
別の複雑さが増えてない? 
copyright© 2014 kuwata-lab.com all rights reserved
ここまでのまとめ 
✓ 文字列関数だけのほうが学習コストは低い 
学習コスト: 正規表現 >>> 文字列関数 
✓ とはいえ正規表現の勉強はどのみち必要 
学習コスト: 正規表現 < 文字列関数+正規表現 
✓ 正規表現やリテラルの得失は一概には言えない 
だれにとってのメリット?どのくらいのメリット? 
✓ そもそも「正規表現リテラルの得失」と「正規表 
現の得失」は別の話 
ちゃんと分けて議論しましょう 
copyright© 2014 kuwata-lab.com all rights reserved
第2部: 
Python正規表現ライブラリの 
問題点と解決案 
copyright© 2014 kuwata-lab.com all rights reserved
第2部:Python正規表現ライブラリの 
問題点と解決案 
✓ re.match()とre.search()の2つがある 
✓ ライブラリの使い方が2系統ある 
✓ 正規表現がいつもキャッシュされてしまう 
✓ 連続したマッチングとif文との相性が悪い 
copyright© 2014 kuwata-lab.com all rights reserved
第2部:Python正規表現ライブラリの 
問題点と解決案 
✓ re.match()とre.search()の2つがある 
✓ ライブラリの使い方が2系統ある 
✓ 正規表現がいつもキャッシュされてしまう 
✓ 連続したマッチングとif文との相性が悪い 
copyright© 2014 kuwata-lab.com all rights reserved
re.match()は先頭からのマッチングしかできない、 
re.search()なら途中からのマッチングも可 
## これはマッチする 
re.match(r"(d+)", "123abc") 
re.search(r"(d+)", "abc123") 
## これはマッチしない!(先頭にないので) 
re.match(r"(d+)", "abc123") 
re.match(r"pat", str) は re.search(r"^pat", str) で代用できる。 
re.match() は混乱のもとだし、いらないのでは? 
copyright© 2014 kuwata-lab.com all rights reserved
第2部:Python正規表現ライブラリの 
問題点と解決案 
✓ re.match()とre.search()の2つがある 
✓ ライブラリの使い方が2系統ある 
✓ 正規表現がいつもキャッシュされてしまう 
✓ 連続したマッチングとif文との相性が悪い 
copyright© 2014 kuwata-lab.com all rights reserved
追加スライド 
Pythonの正規表現ライブラリは、使い方が2系統 
存在する 
re.compile().xxxx() 系re.xxxx() 系 
大抵の正規表現操作が、モジュールレベルの関数 
と、 コンパイル済み正規表現のメソッドとして提 
供されることに注意して下さい。関数は正規表現 
オブジェクトのコンパイルを必要としない近道です 
が、いくつかのチューニング変数を失います。 
copyright© 2014 kuwata-lab.com all rights reserved 
“ 
” 
引用元: http://docs.python.jp/3.3/library/re.html
しかも、両者は似ているようで微妙に違う ;( 
これは困る 
## re.compile().xxxx() 系 
re.compile(pat, flags).match(string, pos, endpos) 
re.compile(pat, flags).sub(repl, string, count) 
## re.xxxx() 系 
re.match(pat, string, flags) 
re.sub(pat, repl, string, count, flags) 
re.sub() は、 Python2.6では正規表 
現フラグが指定できなかった 
copyright© 2014 kuwata-lab.com all rights reserved 
追加スライド 
開始位置と終了位置が、re.compile().match() 
では指定できるが re.match() ではできない
ところで re.xxxx() のやっていることは、内部で 
re.compile().xxxx() を呼び出しているだけ 
def compile(pattern, flags=0): 
return _compile(pattern, flags) 
def match(pattern, string, flags=0): 
return _compile(pattern, flags) 
.match(string) 
def sub(pattern, repl, string, count=0, flags=0): 
return _compile(pattern, flags) 
.sub(repl, string, count) 
copyright© 2014 kuwata-lab.com all rights reserved
だったら、全部 re.compile().xxxx() を使うように 
すれば、re.xxxx() をなくして一本化できるよね? 
re.compile()へのショートカット 
rx = re._compile 
## マッチング 
m = re.match(r"(d+)", "123abc") # before 
m = rx(r"(d+)").match("123abc") # after 
## 文字列置換 
re.sub(r".gif$", ".png", filename) # before 
rx(r".gif$").sub(".png", filename) # after 
copyright© 2014 kuwata-lab.com all rights reserved
一本化できれば、「似てるけど微妙に違う2系統」 
が共存しなくてすむ 
## re.compile().xxxx() 系 
re.compile(pat, flags).match(string, pos, endpos) 
re.compile(pat, flags).sub(repl, string, count) 
等価 (当然) 
## rx().xxxx() 系 
rx = re._compile 
rx(pat, flags).match(string, pos, endpos) 
rx(pat, flags).sub(repl, string, count) 
copyright© 2014 kuwata-lab.com all rights reserved 
追加スライド
また1つの関数に5~6個も引数があるくらいなら、 
2~3個の関数2つに分けたほうがわかりやすい 
引数が5個! 
## before 
re.sub(pattern, repl, string, count=0, flags=0) 
## after 
rx(pattern, flags=0).sub(repl, string, count=0) 
引数2個と引数3個 
copyright© 2014 kuwata-lab.com all rights reserved
第2部:Python正規表現ライブラリの 
問題点と解決案 
✓ re.match()とre.search()の2つがある 
✓ ライブラリの使い方が2系統ある 
✓ 正規表現がいつもキャッシュされてしまう 
✓ 連続したマッチングとif文との相性が悪い 
copyright© 2014 kuwata-lab.com all rights reserved
re.compile() は正規表現を必ずキャッシュする、 
けどキャッシュする必要がないときもある 
class HTMLHelper(object): 
_ESCAPE = re.compile(r"[&<>"']") 
クラス変数に保持しているので、ライブ 
ラリ側でキャッシュする必要はない 
(けど強制的にキャッシュされるので、 
キャッシュが必要以上に肥大化する) 
copyright© 2014 kuwata-lab.com all rights reserved
特に、たくさんの正規表現がデータとして与えられ 
ると、キャッシュが無駄に肥大化してしまう 
urlpatterns = patterns('', 
url(r'^posts/$', "..."), 
url(r'^posts/new$', "..."), 
url(r'^posts/(?P<id>d+)$', "..."), 
url(r'^posts/(?P<id>d+)/comments$', "..."), 
url(r'^posts/(?P<id>d+)/edit$', "..."), 
... 
copyright© 2014 kuwata-lab.com all rights reserved 
) 
コンパイルするとすべて強制的にキャッシュされる 
→ キャッシュする必要のないデータによって 
  キャッシュが肥大化する
Pythonの正規表現ライブラリは、キャッシュが肥 
えすぎるとすべてパージしてしまう! 
_cache = {} 
_MAXCACHE = 512 
キャッシュが肥大化する 
→ キャッシュがパージされる 
→ 性能低下 ;( 
def _compile(pattern, flags): 
...(snip)... 
p = sre_compile.compile(pattern, flags) 
if not bypass_cache: 
if len(_cache) >= _MAXCACHE: 
_cache.clear() 
_cache[type(pattern), pattern, flags] = p 
return p 
copyright© 2014 kuwata-lab.com all rights reserved
キャッシュせずにコンパイルする機能が、公式に用 
意されるとうれしい 
class HTMLHelper(object): 
_ESCAPE = re.sre_compile.compile(r"[&<>"']") 
これならキャッシュしないので、 
キャッシュの無駄な肥大化を防げる 
(しかしunofficialなので使用には注意すること) 
copyright© 2014 kuwata-lab.com all rights reserved
第2部:Python正規表現ライブラリの 
問題点と解決案 
✓ re.match()とre.search()の2つがある 
✓ ライブラリの使い方が2系統ある 
✓ 正規表現がいつもキャッシュされてしまう 
✓ 連続したマッチングとif文との相性が悪い 
copyright© 2014 kuwata-lab.com all rights reserved
複数の正規表現にマッチさせるとき、こう書きたい 
## ほんとはこう書きたい 
if m = re.match(pat1, text): 
x, y = m.groups() 
elif m = re.match(pat2, text): 
y, z = m.groups() 
elif m = re.match(pat3, text): 
z, x = m.groups() 
文法エラー: 
Pythonでは代入文は式ではないので、 
if文の条件式には書けない 
copyright© 2014 kuwata-lab.com all rights reserved
でもPythonではこう書くしかない 
m = re.match(pat1, text) 
if m: 
x, y = m.groups() 
copyright© 2014 kuwata-lab.com all rights reserved 
else: 
m = re.match(pat2, text) 
if m: 
y, z = m.groups() 
else: 
m = re.match(pat3, text) 
if m: 
z, x = m.groups() 
if文のネストが深くなる
関数+return や、while文+break という手も 
あるが、あまり嬉しくはない 
while 1: 
m = re.match(pat1, text) 
if m: 
x, y = m.groups() 
break 
m = re.match(pat2, text) 
if m: 
y, z = m.groups() 
break 
m = re.match(pat3, text) 
if m: 
z, x = m.groups() 
break 
copyright© 2014 kuwata-lab.com all rights reserved 
break 
if文のネストは減ったけど、 
トリッキーで間違えやすい
そこで、こういう機能はどうでしょう? 
マッチングの対象文字列とマッチング結果を 
保持するようなオブジェクトを用意すれば、 
m = re.matching(text) 
if m.match(pat1): 
x, y = m.groups() 
elif m.match(pat2): 
y, z = m.groups() 
elif m.match(pat3): 
z, x = m.groups() 
連続したマッチングが 
素直に書けるはず 
copyright© 2014 kuwata-lab.com all rights reserved
copyright© 2014 kuwata-lab.com all rights reserved 
実装はこちら 
class matching(object): 
def __init__(self, string): 
self.string = string 
self.matched = None 
http://bit.ly/matching_py 
def match(self, pattern, flags=0): 
self.matched = re.compile(pattern, flags) 
.match(self.string) 
return self.matched 
def groups(self, *args): 
return self.matched.groups(*args)
Questions? 
copyright© 2014 kuwata-lab.com all rights reserved
おまけ: benry.rexp 
https://pypi.python.org/pypi/benry 
from benry.rexp import rx 
## re.compile() へのショートカット 
m = rx(r'pat', rx.I).match(string, start, end) 
## キャッシュせずにコンパイル 
rexp = rx.compile(r'pat', rx.I) 
## 連続したマッチング 
m = rx.matching(string) 
if m.match(r'^(dddd)-(dd)-(dd)$'): 
Y, M, D = m.groups() 
else m.match(r'(dd)/(dd)/(dddd)$'): 
M, D, Y = m.groups() 
copyright© 2014 kuwata-lab.com all rights reserved
copyright© 2014 kuwata-lab.com all rights reserved 
おしまい

More Related Content

What's hot

このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 sasezaki
 
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...Deep Learning JP
 
研究法(Claimとは)
研究法(Claimとは)研究法(Claimとは)
研究法(Claimとは)Jun Rekimoto
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)Satoshi Hara
 
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクスHiroyuki Ito
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Modelscvpaper. challenge
 
[DL輪読会]Graph R-CNN for Scene Graph Generation
[DL輪読会]Graph R-CNN for Scene Graph Generation[DL輪読会]Graph R-CNN for Scene Graph Generation
[DL輪読会]Graph R-CNN for Scene Graph GenerationDeep Learning JP
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」Ken'ichi Matsui
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系CoqについてYoshihiro Mizoguchi
 
強化学習アルゴリズムPPOの解説と実験
強化学習アルゴリズムPPOの解説と実験強化学習アルゴリズムPPOの解説と実験
強化学習アルゴリズムPPOの解説と実験克海 納谷
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかShunsukeNakamura17
 
研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有Naoaki Okazaki
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜Jun Okumura
 
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...Deep Learning JP
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門demuyan
 
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用Yasunori Ozaki
 

What's hot (20)

このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019 このPHP QAツールがすごい!2019
このPHP QAツールがすごい!2019
 
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
研究法(Claimとは)
研究法(Claimとは)研究法(Claimとは)
研究法(Claimとは)
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
 
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス
世界と事例から学ぶ、プロダクトオーナーの「素養」としてのアジャイルメトリクス
 
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
 
[DL輪読会]Graph R-CNN for Scene Graph Generation
[DL輪読会]Graph R-CNN for Scene Graph Generation[DL輪読会]Graph R-CNN for Scene Graph Generation
[DL輪読会]Graph R-CNN for Scene Graph Generation
 
Nreal Lightハンズオン
Nreal LightハンズオンNreal Lightハンズオン
Nreal Lightハンズオン
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系Coqについて
 
強化学習アルゴリズムPPOの解説と実験
強化学習アルゴリズムPPOの解説と実験強化学習アルゴリズムPPOの解説と実験
強化学習アルゴリズムPPOの解説と実験
 
研究効率化Tips Ver.2
研究効率化Tips Ver.2研究効率化Tips Ver.2
研究効率化Tips Ver.2
 
Rustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったかRustに触れて私のPythonはどう変わったか
Rustに触れて私のPythonはどう変わったか
 
研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有研究室における研究・実装ノウハウの共有
研究室における研究・実装ノウハウの共有
 
DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜DQNからRainbowまで 〜深層強化学習の最新動向〜
DQNからRainbowまで 〜深層強化学習の最新動向〜
 
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
 
POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用POMDP下での強化学習の基礎と応用
POMDP下での強化学習の基礎と応用
 

Viewers also liked

Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方kwatch
 
Emacsいじめの現場
Emacsいじめの現場Emacsいじめの現場
Emacsいじめの現場Eric Sartre
 
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)Google Developer Relations Team
 
TEAMPLUGの使い方(How to use TEAMPLUG)
TEAMPLUGの使い方(How to use TEAMPLUG)TEAMPLUGの使い方(How to use TEAMPLUG)
TEAMPLUGの使い方(How to use TEAMPLUG)Yuuichi Oikawa
 
∞-gram を使った短文言語判定
∞-gram を使った短文言語判定∞-gram を使った短文言語判定
∞-gram を使った短文言語判定Shuyo Nakatani
 
多値で簡単パーサーコンビネーター
多値で簡単パーサーコンビネーター多値で簡単パーサーコンビネーター
多値で簡単パーサーコンビネーターKeiichiro Shikano
 
これから始めるssl対策
これから始めるssl対策これから始めるssl対策
これから始めるssl対策Shohei Kobayashi
 
6 月 18 日 Next - あっという間の、Google Cloud Platform 開発ガイド
6 月 18 日 Next -  あっという間の、Google Cloud Platform 開発ガイド6 月 18 日 Next -  あっという間の、Google Cloud Platform 開発ガイド
6 月 18 日 Next - あっという間の、Google Cloud Platform 開発ガイドGoogle Cloud Platform - Japan
 
Java9 and Project Jigsaw
Java9 and Project JigsawJava9 and Project Jigsaw
Java9 and Project Jigsawtakezoe
 
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングクラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングTerui Masashi
 
Arukasの運用事例と、末永くインフラ運用していくためのTips(SRE Tech Talks #2)
Arukasの運用事例と、末永くインフラ運用していくためのTips(SRE Tech Talks #2)Arukasの運用事例と、末永くインフラ運用していくためのTips(SRE Tech Talks #2)
Arukasの運用事例と、末永くインフラ運用していくためのTips(SRE Tech Talks #2)さくらインターネット株式会社
 
ITサービスマネジメントとSRE
ITサービスマネジメントとSREITサービスマネジメントとSRE
ITサービスマネジメントとSRE真吾 吉田
 
TDDのこれまで、そしてこれから
TDDのこれまで、そしてこれからTDDのこれまで、そしてこれから
TDDのこれまで、そしてこれからHiroyuki Ohnaka
 
Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要HonMarkHunt
 
サイボウズの開発を支えるKAIZEN文化
サイボウズの開発を支えるKAIZEN文化サイボウズの開発を支えるKAIZEN文化
サイボウズの開発を支えるKAIZEN文化Teppei Sato
 

Viewers also liked (20)

Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
 
Emacsいじめの現場
Emacsいじめの現場Emacsいじめの現場
Emacsいじめの現場
 
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
Google Developer Day 2010 Japan: Google エンジニアの日常 (山内 知昭)
 
TEAMPLUGの使い方(How to use TEAMPLUG)
TEAMPLUGの使い方(How to use TEAMPLUG)TEAMPLUGの使い方(How to use TEAMPLUG)
TEAMPLUGの使い方(How to use TEAMPLUG)
 
SpeechPlatform with Kinect
SpeechPlatform with KinectSpeechPlatform with Kinect
SpeechPlatform with Kinect
 
∞-gram を使った短文言語判定
∞-gram を使った短文言語判定∞-gram を使った短文言語判定
∞-gram を使った短文言語判定
 
160901 osce2016sre
160901 osce2016sre160901 osce2016sre
160901 osce2016sre
 
多値で簡単パーサーコンビネーター
多値で簡単パーサーコンビネーター多値で簡単パーサーコンビネーター
多値で簡単パーサーコンビネーター
 
160724 jtf2016sre
160724 jtf2016sre160724 jtf2016sre
160724 jtf2016sre
 
これから始めるssl対策
これから始めるssl対策これから始めるssl対策
これから始めるssl対策
 
JobSchedulerアップデート2016
JobSchedulerアップデート2016JobSchedulerアップデート2016
JobSchedulerアップデート2016
 
6 月 18 日 Next - あっという間の、Google Cloud Platform 開発ガイド
6 月 18 日 Next -  あっという間の、Google Cloud Platform 開発ガイド6 月 18 日 Next -  あっという間の、Google Cloud Platform 開発ガイド
6 月 18 日 Next - あっという間の、Google Cloud Platform 開発ガイド
 
Java9 and Project Jigsaw
Java9 and Project JigsawJava9 and Project Jigsaw
Java9 and Project Jigsaw
 
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニングクラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
 
Tidyverseとは
TidyverseとはTidyverseとは
Tidyverseとは
 
Arukasの運用事例と、末永くインフラ運用していくためのTips(SRE Tech Talks #2)
Arukasの運用事例と、末永くインフラ運用していくためのTips(SRE Tech Talks #2)Arukasの運用事例と、末永くインフラ運用していくためのTips(SRE Tech Talks #2)
Arukasの運用事例と、末永くインフラ運用していくためのTips(SRE Tech Talks #2)
 
ITサービスマネジメントとSRE
ITサービスマネジメントとSREITサービスマネジメントとSRE
ITサービスマネジメントとSRE
 
TDDのこれまで、そしてこれから
TDDのこれまで、そしてこれからTDDのこれまで、そしてこれから
TDDのこれまで、そしてこれから
 
Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要
 
サイボウズの開発を支えるKAIZEN文化
サイボウズの開発を支えるKAIZEN文化サイボウズの開発を支えるKAIZEN文化
サイボウズの開発を支えるKAIZEN文化
 

Similar to 正規表現リテラルは本当に必要なのか?

flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門sairoutine
 
Jjug ナイト・セミナー くわっちょ 20140822
Jjug ナイト・セミナー くわっちょ 20140822Jjug ナイト・セミナー くわっちょ 20140822
Jjug ナイト・セミナー くわっちょ 20140822くわっ ちょ
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documentsbleis tift
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するkwatch
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語RShuyo Nakatani
 
Rのコードをキレイに見せたい
Rのコードをキレイに見せたいRのコードをキレイに見せたい
Rのコードをキレイに見せたいmangantempy
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情Junichi Ishida
 
プログラミング言語の比較表
プログラミング言語の比較表プログラミング言語の比較表
プログラミング言語の比較表Kazunori Sakamoto
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„和弘 井之上
 
サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27Kensuke Mitsuzawa
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)parrotstudio
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJavableis tift
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To ClojureKent Ohashi
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 

Similar to 正規表現リテラルは本当に必要なのか? (20)

flow による型のある世界入門
flow による型のある世界入門flow による型のある世界入門
flow による型のある世界入門
 
Jjug ナイト・セミナー くわっちょ 20140822
Jjug ナイト・セミナー くわっちょ 20140822Jjug ナイト・セミナー くわっちょ 20140822
Jjug ナイト・セミナー くわっちょ 20140822
 
No more Legacy documents
No more Legacy documentsNo more Legacy documents
No more Legacy documents
 
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
普通のプログラミング言語R
普通のプログラミング言語R普通のプログラミング言語R
普通のプログラミング言語R
 
Rのコードをキレイに見せたい
Rのコードをキレイに見せたいRのコードをキレイに見せたい
Rのコードをキレイに見せたい
 
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
YAPC::Asia 2014 - 半端なPHPDisでPHPerに陰で笑われないためのPerl Monger向け最新PHP事情
 
Webページで学ぶJavaScript2013 第2回
Webページで学ぶJavaScript2013 第2回Webページで学ぶJavaScript2013 第2回
Webページで学ぶJavaScript2013 第2回
 
プログラミング言語の比較表
プログラミング言語の比較表プログラミング言語の比較表
プログラミング言語の比較表
 
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
【C++BUILDER STARTER チュートリアルシリーズ】シーズン2 C++Builderの部 第2回 ‟変数と型„
 
サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27サポーターズ勉強会スライド 2018/2/27
サポーターズ勉強会スライド 2018/2/27
 
Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
 
.NET系開発者から見たJava
.NET系開発者から見たJava.NET系開発者から見たJava
.NET系開発者から見たJava
 
転職とLaravel
転職とLaravel転職とLaravel
転職とLaravel
 
FabricとRailsと私
FabricとRailsと私FabricとRailsと私
FabricとRailsと私
 
From Java To Clojure
From Java To ClojureFrom Java To Clojure
From Java To Clojure
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 

More from kwatch

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Pythonkwatch
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアルkwatch
 
なんでもID
なんでもIDなんでもID
なんでもIDkwatch
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方kwatch
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐkwatch
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)kwatch
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!kwatch
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?kwatch
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Pythonkwatch
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策kwatch
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurialkwatch
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -kwatch
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみたkwatch
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"kwatch
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラムkwatch
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンkwatch
 
Underlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R MapperUnderlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R Mapperkwatch
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -kwatch
 
Benchmarker - A Good Friend for Performance
Benchmarker - A Good Friend for PerformanceBenchmarker - A Good Friend for Performance
Benchmarker - A Good Friend for Performancekwatch
 

More from kwatch (20)

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
 
なんでもID
なんでもIDなんでもID
なんでもID
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurial
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラム
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジン
 
Underlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R MapperUnderlaying Technology of Modern O/R Mapper
Underlaying Technology of Modern O/R Mapper
 
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
How to Make Ruby CGI Script Faster - CGIを高速化する小手先テクニック -
 
Benchmarker - A Good Friend for Performance
Benchmarker - A Good Friend for PerformanceBenchmarker - A Good Friend for Performance
Benchmarker - A Good Friend for Performance
 

Recently uploaded

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 

Recently uploaded (9)

論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 

正規表現リテラルは本当に必要なのか?