Submit Search
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
2 likes
1,467 views
Katsuhiro Endo
MTDDC Hokkaido(2010/12/18)でライトニングトークした時のスライドです。
Self Improvement
Technology
Design
Read more
1 of 39
Download now
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
More Related Content
PDF
C++の黒魔術
Daichi OBINATA
PDF
闇魔術を触ってみた
Satoshi Sato
PDF
君はまだ,本当のプリプロセスを知らない
digitalghost
PDF
Define and expansion of cpp macro
digitalghost
PDF
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
PDF
Template Meta Programming入門から応用まで
yoshihikoozaki5
PDF
Should we write such like plugin or not?
SATOSHI TAGOMORI
PDF
C++勉強会in広島プレゼン資料
真一 北原
C++の黒魔術
Daichi OBINATA
闇魔術を触ってみた
Satoshi Sato
君はまだ,本当のプリプロセスを知らない
digitalghost
Define and expansion of cpp macro
digitalghost
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Template Meta Programming入門から応用まで
yoshihikoozaki5
Should we write such like plugin or not?
SATOSHI TAGOMORI
C++勉強会in広島プレゼン資料
真一 北原
What's hot
(14)
PDF
マスター・オブ・Reflectパッケージ
Takuya Ueda
PDF
インタフェースの実装パターン
Takuya Ueda
PDF
MarkdownをBacklogのwikiに変換するPWA
Yuhei FUJITA
PDF
今日からはじめるHTML5 ver.2012
Yasuhito Yabe
PDF
良い?悪い?コードコメントの書き方
Shigenori Sagawa
PPT
メタプログラミングって何だろう
Kota Mizushima
PDF
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Takuya Ueda
PPT
ユニットテスト 1日目
Yoshiki Shibukawa
PPT
C++でぼくが忘れがちなこと
Toshihiko Ando
PDF
エキスパートGo
Takuya Ueda
PPTX
ふるたに流プログラミング学習法
Kazuma Furutani
PDF
Goで言語処理系(の途中まで)を作ろう
Esehara Shigeo
PDF
Goroutineと channelから はじめるgo言語
Takuya Ueda
PDF
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
マスター・オブ・Reflectパッケージ
Takuya Ueda
インタフェースの実装パターン
Takuya Ueda
MarkdownをBacklogのwikiに変換するPWA
Yuhei FUJITA
今日からはじめるHTML5 ver.2012
Yasuhito Yabe
良い?悪い?コードコメントの書き方
Shigenori Sagawa
メタプログラミングって何だろう
Kota Mizushima
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Takuya Ueda
ユニットテスト 1日目
Yoshiki Shibukawa
C++でぼくが忘れがちなこと
Toshihiko Ando
エキスパートGo
Takuya Ueda
ふるたに流プログラミング学習法
Kazuma Furutani
Goで言語処理系(の途中まで)を作ろう
Esehara Shigeo
Goroutineと channelから はじめるgo言語
Takuya Ueda
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
Ad
Viewers also liked
(11)
PDF
Learn you a Brainfuck for great good!
Antoine Leblanc
KEY
Functional Pearl + Brainfuck
Eita Sugimoto
PDF
brainfuckであそぼう #lldiver LT資料
Michihito Shigemura
PDF
Brainfuck interpreter 分析新竹碼農0307
Xatierlike Lee
PDF
Rubyで作る奇妙なプログラミング言語
toyoshi
PDF
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
kirin_nico
PDF
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
PDF
BFmeta
京大 マイコンクラブ
PDF
実用Brainf*ckプログラミング
京大 マイコンクラブ
ODP
ライフゲームでプログラミング
Shinya Miyazaki
PDF
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
Learn you a Brainfuck for great good!
Antoine Leblanc
Functional Pearl + Brainfuck
Eita Sugimoto
brainfuckであそぼう #lldiver LT資料
Michihito Shigemura
Brainfuck interpreter 分析新竹碼農0307
Xatierlike Lee
Rubyで作る奇妙なプログラミング言語
toyoshi
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
kirin_nico
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
BFmeta
京大 マイコンクラブ
実用Brainf*ckプログラミング
京大 マイコンクラブ
ライフゲームでプログラミング
Shinya Miyazaki
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
Ad
Similar to MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
(20)
PDF
20190920 hannaripython20
Otazo Man
PDF
Janog31 bof-pattern-sasaki-01
Ken SASAKI
PDF
TDD を自分の道具にしよう
yujiorama
PDF
Rpn and forth 超入門
Yoshitaka Seo
PDF
connpass特徴と開発の流れ
Ikeda Yosuke
PDF
わんくま同盟大阪勉強会#61
TATSUYA HAYAMIZU
PDF
2014年を振り返る 今年の技術トレンドとDockerについて
Masahito Zembutsu
PDF
20120706-readablecode
Masanori Kado
PDF
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
PDF
MTプラグイン入門以前
Hiroshi Yamato
ODP
Dtrace in netbsd
Fumiyuki Yoshida
PDF
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
PDF
TripleO Deep Dive
Takashi Kajinami
PPT
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
PDF
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
PPTX
(ゲームじゃない方の)switchで遊びたい話
Masanori Masui
PDF
死闘!Og mailinglist
Kuniyoshi Tone
PDF
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
PDF
ng-mtg#6 AngularJS ディレクティブ・パターン
Hayashi Yuichi
KEY
GrowthForecastことはじめ
Makoto Taniwaki
20190920 hannaripython20
Otazo Man
Janog31 bof-pattern-sasaki-01
Ken SASAKI
TDD を自分の道具にしよう
yujiorama
Rpn and forth 超入門
Yoshitaka Seo
connpass特徴と開発の流れ
Ikeda Yosuke
わんくま同盟大阪勉強会#61
TATSUYA HAYAMIZU
2014年を振り返る 今年の技術トレンドとDockerについて
Masahito Zembutsu
20120706-readablecode
Masanori Kado
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
MTプラグイン入門以前
Hiroshi Yamato
Dtrace in netbsd
Fumiyuki Yoshida
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
TripleO Deep Dive
Takashi Kajinami
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
(ゲームじゃない方の)switchで遊びたい話
Masanori Masui
死闘!Og mailinglist
Kuniyoshi Tone
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
ng-mtg#6 AngularJS ディレクティブ・パターン
Hayashi Yuichi
GrowthForecastことはじめ
Makoto Taniwaki
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
1.
テンプレートタグでBrainf*ckを
作ってみた MTDDC Hokkaido 2010/12/18 えんどうかつひろ
2.
自己紹介 ●
えんどうかつひろ ● @ka2hiro ● フリーランスのプログラマ ● MT歴 ● 4年ほど(2006年頃から) ● プラグイン書いたり、MTベースのWeb App書いた り ● 好きなテンプレートタグ ● mt:setVarTemplate と mt:date
3.
今日お話すること ●
Brainf*ckを書いていて、はまったこと
4.
きっかけ? ●
単なる思いつき ● テンプレートタグって、プログラミング言語だ よね。 ● 変数あるし ● 四則演算できるし ● 条件分岐できるし ● ループもできるし ● 配列もハッシュもあるし
5.
それに... ●
MT、テンプレートタグ、Brainfuckで、軽くぐ ぐってみたけど、全然ヒットしない。 ● ってことは、これは...
7.
ということで Brainf*ckのインタープリタを
書いてみた。
8.
ところでBrainf*ckって何?
9.
“Brainfuck(ブレインファック)は 難解プログラミング言語のひとつ。
なお名称に卑語が含まれるた め、Brainf*ckなどと表記されるこ とがある。” wikipediaより
10.
使える命令はこの↓8文字 ><+-.,[]
だけ。
11.
例
12.
+++++++++[>++++++++>++++ +++++++>+++++<<<-]>.>++.
+++++++..++ +.>-.------------.<+++++ +++.--------.++ +.------.--------.>+.
13.
これを実行すると
14.
Hello World!
15.
と表示するプログラミング言語。
16.
で、書いてみたら、書けた。 でも、けっこうはまった。
17.
ここからが今日の本題。
18.
はまったその1 文字列中の任意の場所から1文字
だけ読み込む。
19.
<mt:setvarblock name=”hoge”> The quick
brown fox jumps over the lazy... </mt:setvarblock> ”Q”を表示するのに、 <mt:var name=”hoge” substr=”4,1” setvar=”c”/> と書けると思っていたら、 substrモディファイア なんてなかった。
20.
仕方がないので、困った時の
「正規表現」 にお願いしてみた。
21.
正規表現
/(?:.{<mt:var name="pos" />})(.)(?:.*)/ ● posは、取得したい文字の位置(最初の文字は0番目) ● 1つ目のかっこは読み飛ばす部分 ● 2つ目のかっこが取得したい文字 ● 3つ目のかっこは残りの文字(必要ないかも) ● posが3の場合、/(?:.{3})(.)(?:.*)/ となる ● $1で1文字取得できる
22.
まとめるとこうなる。 <mt:setvartemplate name="getchar"> <mt:setvarblock name="pattern"> /(?:.{<mt:var
name="pos" />})(.)(?:.*)/ </mt:setvarblock> <mt:var name="code" regex_replace="$pattern","1" setvar="c"/> </mt:setvartemplate>
23.
これで1文字ずつ 読み込めるようになった。
24.
はまったその2 無限ループを作れない。
25.
<mt:loop>は、配列の要素をたど
ることしかできないし、 <mt:for>はto=”N”で指定した回 数しかループできないし、 どうしよう...
26.
ちょっとかっこ悪いけど、 <mt:for var=”i” from=”0”
to=”1000”> 大きめの数値を終了条件にして、 ごまかした。
27.
はまったその3 ループから脱出できない!
28.
<mt:for var=”i” from=”0”
to=”1000”> <mt:if name=”i” eq=”5”> <mt:setvar name=”i” value=”1000” /> ループ変数に終了条件を満たす値を 設定しても脱出できない! </mt:if> </mt:for>
29.
どうやらループ内では、 ループ変数の参照はできるが、 変更は反映されないようだ。
30.
仕方がないので、 <mt:for var=”i” from=”0”
to=”1000”> <mt:if name=”done” ne=”1”> 必要な処理を実施し、 終了条件を満たしたらdoneに1をセット </mt:if> </mt:for> とした。でもこれだと...
31.
10回目で終了条件を満たすと、
残り990回は、 無駄に空回り。┐(´-`)┌
32.
はまったその4 完成したテンプレートを
編集画面に貼付け、 プレビューしても真っ白け。
33.
テンプレートのコンパイル結果を
dumpして見ると、 <mt:elseif name=”c” eq=”>”> どうもこのあたりから変。 意図しない所でタグが閉じたり、 開いたり...
34.
あっ、 > と <
は使えないのか。
35.
ということで、8つの命令のうち、
>を#に <を*に に置換えた。
36.
もっと早く気付けよ>自分
37.
まとめ ●
いろいろあったけど、なんとかなったし、けっ こう楽しめた。 ● みなさんもぜひ挑戦してみてください。 ● 今回書いたテンプレートは、githubにありま す。 ● http://github.com/ka2hiro/brainfuck ● 次回はマンデルブロー集合の予定です(笑)
38.
おまけ ●
無限ループ/ループ脱出不可が悔しかったの で、WhileTagというプラグインを書いてみた。 ● http://github.com/ka2hiro/WhileTag ● <mt:if>と同じ構文のブロックタグ ● <mt:while name=”done” ne=”1”> </mt:while> ● ループ内からループ変数を操作可能
39.
ご清聴ありがとうございました。
Download