Suche senden
Hochladen
MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
•
2 gefällt mir
•
1,465 views
Katsuhiro Endo
Folgen
MTDDC Hokkaido(2010/12/18)でライトニングトークした時のスライドです。
Weniger lesen
Mehr lesen
Weiterbildung und Persönlichkeitsentwicklung
Technologie
Design
Melden
Teilen
Melden
Teilen
1 von 39
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
C++の黒魔術
C++の黒魔術
Daichi OBINATA
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
yoshihikoozaki5
Should we write such like plugin or not?
Should we write such like plugin or not?
SATOSHI TAGOMORI
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
真一 北原
Empfohlen
C++の黒魔術
C++の黒魔術
Daichi OBINATA
闇魔術を触ってみた
闇魔術を触ってみた
Satoshi Sato
君はまだ,本当のプリプロセスを知らない
君はまだ,本当のプリプロセスを知らない
digitalghost
Define and expansion of cpp macro
Define and expansion of cpp macro
digitalghost
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
Shigenori Sagawa
Template Meta Programming入門から応用まで
Template Meta Programming入門から応用まで
yoshihikoozaki5
Should we write such like plugin or not?
Should we write such like plugin or not?
SATOSHI TAGOMORI
C++勉強会in広島プレゼン資料
C++勉強会in広島プレゼン資料
真一 北原
マスター・オブ・Reflectパッケージ
マスター・オブ・Reflectパッケージ
Takuya Ueda
インタフェースの実装パターン
インタフェースの実装パターン
Takuya Ueda
MarkdownをBacklogのwikiに変換するPWA
MarkdownをBacklogのwikiに変換するPWA
Yuhei FUJITA
今日からはじめるHTML5 ver.2012
今日からはじめるHTML5 ver.2012
Yasuhito Yabe
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Tomonobu_Hirano
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Takuya Ueda
ユニットテスト 1日目
ユニットテスト 1日目
Yoshiki Shibukawa
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
yushin_hirano
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなこと
Toshihiko Ando
エキスパートGo
エキスパートGo
Takuya Ueda
ふるたに流プログラミング学習法
ふるたに流プログラミング学習法
Kazuma Furutani
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
Esehara Shigeo
Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語
Takuya Ueda
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
Learn you a Brainfuck for great good!
Learn you a Brainfuck for great good!
Antoine Leblanc
Functional Pearl + Brainfuck
Functional Pearl + Brainfuck
Eita Sugimoto
brainfuckであそぼう #lldiver LT資料
brainfuckであそぼう #lldiver LT資料
Michihito Shigemura
Brainfuck interpreter 分析新竹碼農0307
Brainfuck interpreter 分析新竹碼農0307
Xatierlike Lee
Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語
toyoshi
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
kirin_nico
Weitere ähnliche Inhalte
Was ist angesagt?
マスター・オブ・Reflectパッケージ
マスター・オブ・Reflectパッケージ
Takuya Ueda
インタフェースの実装パターン
インタフェースの実装パターン
Takuya Ueda
MarkdownをBacklogのwikiに変換するPWA
MarkdownをBacklogのwikiに変換するPWA
Yuhei FUJITA
今日からはじめるHTML5 ver.2012
今日からはじめるHTML5 ver.2012
Yasuhito Yabe
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
Shigenori Sagawa
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Tomonobu_Hirano
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Takuya Ueda
ユニットテスト 1日目
ユニットテスト 1日目
Yoshiki Shibukawa
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
yushin_hirano
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなこと
Toshihiko Ando
エキスパートGo
エキスパートGo
Takuya Ueda
ふるたに流プログラミング学習法
ふるたに流プログラミング学習法
Kazuma Furutani
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
Esehara Shigeo
Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語
Takuya Ueda
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Haruki Eguchi
Was ist angesagt?
(16)
マスター・オブ・Reflectパッケージ
マスター・オブ・Reflectパッケージ
インタフェースの実装パターン
インタフェースの実装パターン
MarkdownをBacklogのwikiに変換するPWA
MarkdownをBacklogのwikiに変換するPWA
今日からはじめるHTML5 ver.2012
今日からはじめるHTML5 ver.2012
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
メタプログラミングって何だろう
メタプログラミングって何だろう
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
Goroutineとchannelから始めるgo言語@初心者向けgolang勉強会2
ユニットテスト 1日目
ユニットテスト 1日目
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
C++でぼくが忘れがちなこと
C++でぼくが忘れがちなこと
エキスパートGo
エキスパートGo
ふるたに流プログラミング学習法
ふるたに流プログラミング学習法
Goで言語処理系(の途中まで)を作ろう
Goで言語処理系(の途中まで)を作ろう
Goroutineと channelから はじめるgo言語
Goroutineと channelから はじめるgo言語
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
Andere mochten auch
Learn you a Brainfuck for great good!
Learn you a Brainfuck for great good!
Antoine Leblanc
Functional Pearl + Brainfuck
Functional Pearl + Brainfuck
Eita Sugimoto
brainfuckであそぼう #lldiver LT資料
brainfuckであそぼう #lldiver LT資料
Michihito Shigemura
Brainfuck interpreter 分析新竹碼農0307
Brainfuck interpreter 分析新竹碼農0307
Xatierlike Lee
Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語
toyoshi
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
kirin_nico
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
BFmeta
BFmeta
京大 マイコンクラブ
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
京大 マイコンクラブ
ライフゲームでプログラミング
ライフゲームでプログラミング
Shinya Miyazaki
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
Andere mochten auch
(11)
Learn you a Brainfuck for great good!
Learn you a Brainfuck for great good!
Functional Pearl + Brainfuck
Functional Pearl + Brainfuck
brainfuckであそぼう #lldiver LT資料
brainfuckであそぼう #lldiver LT資料
Brainfuck interpreter 分析新竹碼農0307
Brainfuck interpreter 分析新竹碼農0307
Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
BFmeta
BFmeta
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
ライフゲームでプログラミング
ライフゲームでプログラミング
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
Ähnlich wie MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
20190920 hannaripython20
20190920 hannaripython20
Otazo Man
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
Ken SASAKI
TDD を自分の道具にしよう
TDD を自分の道具にしよう
Yuji Okazawa
Rpn and forth 超入門
Rpn and forth 超入門
Yoshitaka Seo
connpass特徴と開発の流れ
connpass特徴と開発の流れ
Ikeda Yosuke
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
TATSUYA HAYAMIZU
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
Masahito Zembutsu
20120706-readablecode
20120706-readablecode
Masanori Kado
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
Hideyuki Tanaka
MTプラグイン入門以前
MTプラグイン入門以前
Hiroshi Yamato
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
Hibiki Yamashiro
TripleO Deep Dive
TripleO Deep Dive
Takashi Kajinami
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
cvpaper. challenge
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
Masanori Masui
死闘!Og mailinglist
死闘!Og mailinglist
Kuniyoshi Tone
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
simotin13 Miyazaki
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターン
Hayashi Yuichi
GrowthForecastことはじめ
GrowthForecastことはじめ
Makoto Taniwaki
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
Kiyoshi Ogawa
Ähnlich wie MTDDC Hokkaido : テンプレートタグでBrainf*ckを作ってみた
(20)
20190920 hannaripython20
20190920 hannaripython20
Janog31 bof-pattern-sasaki-01
Janog31 bof-pattern-sasaki-01
TDD を自分の道具にしよう
TDD を自分の道具にしよう
Rpn and forth 超入門
Rpn and forth 超入門
connpass特徴と開発の流れ
connpass特徴と開発の流れ
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
2014年を振り返る 今年の技術トレンドとDockerについて
2014年を振り返る 今年の技術トレンドとDockerについて
20120706-readablecode
20120706-readablecode
C++コミュニティーの中心でC++をDISる
C++コミュニティーの中心でC++をDISる
MTプラグイン入門以前
MTプラグイン入門以前
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
TripleO Deep Dive
TripleO Deep Dive
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
【メタサーベイ】基盤モデル / Foundation Models
【メタサーベイ】基盤モデル / Foundation Models
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
死闘!Og mailinglist
死闘!Og mailinglist
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
ng-mtg#6 AngularJS ディレクティブ・パターン
ng-mtg#6 AngularJS ディレクティブ・パターン
GrowthForecastことはじめ
GrowthForecastことはじめ
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
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で、軽くぐ ぐってみたけど、全然ヒットしない。 ● ってことは、これは...
6.
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.
ご清聴ありがとうございました。
Jetzt herunterladen