genesis200902 sugyan

64
なのでをこめて HelloWorldつくってきた 2009年2月25日 すぎゃーん(id:sugyan) [email protected]

Upload: yoshihiro-sugi

Post on 05-Dec-2014

1.818 views

Category:

Technology


0 download

DESCRIPTION

2009年2月25日 Genesis Lightning Talks Vol. 13 発表資料

TRANSCRIPT

Page 1: Genesis200902 sugyan

春なので愛をこめてHelloWorldをつくってきた

2009年2月25日すぎゃーん(id:sugyan)

[email protected]

Page 2: Genesis200902 sugyan

すぎゃーん(id:sugyan)

です

Page 3: Genesis200902 sugyan

3回目のLightningTalks

Page 4: Genesis200902 sugyan

伝説の焼肉ヒッチハイク

Page 5: Genesis200902 sugyan

プログラマ歴もうすぐ半年

Page 6: Genesis200902 sugyan

そろそろ技術ネタを

Page 7: Genesis200902 sugyan

ということで

Page 8: Genesis200902 sugyan

“Hello World!”を作ってみた

Page 9: Genesis200902 sugyan

Hello World!とは

Page 10: Genesis200902 sugyan

標準出力に“Hello World!”と表示するプログラム

Page 11: Genesis200902 sugyan

基礎の基礎

Page 12: Genesis200902 sugyan

精一杯の愛をこめて書いてみた

Page 13: Genesis200902 sugyan

''=~('('. '?'.'{'.( '`'|'%').('['^'-') .('`'|'!').(('`')| ',').'"'.('['^'+').('['^ ')').('`'|')').('`'|'.') .('['^'/').('{'^'[').('\\'). '"'.('`'^'(').('`'|'%').('`' |',').('`'|',').('`'|'/').("\{"^ '[').('['^',').('`'|'/').(('[')^ ')').('`'|',').('`'|'$').'!'.'\\'.'\\'.('`'|'.').'\\'.'"'.'"'."\}". ')');$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\=('`')|'!';$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^"\|";$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|('!');$:=')'^'}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:="\."^ '~';$~='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}' ;$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^'~';$~ ='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:=')'^'}';$~= '*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:='.'^'~';$~ ='@'|'(';$^=')'^'[';$/='`'|'.';$,='('^'}';$\='`'|'!';$:="\)"^ '}';$~='*'|'`';$^='+'^'_';$/='&'|'@';$,='['&'~';$\=(',')^ '|';$:='.'^'~';$~='@'|'(';$^=')'^'[';$/='`'|('.');$,= '('^'}';$\='`'|'!';$:=')'^'}';$~='*'|'`';$^='+' ^'_';$/='&'|'@';$,='['&'~';$\=','^'|';$:= '.'^'~';$~='@'|'(';$^=')'^('[');$/= '`'|'.';$,='('^'}';$\=('`')| '!';$:=')'^'}';$~='*' |'`';$^="\+"^ '_';$/= '&' ;

Page 14: Genesis200902 sugyan

フォントがが小さい?

Page 15: Genesis200902 sugyan

''=~("\(". '?'. '{'. ('`' |'%' ).+( '['^ '-') .''. ('`' |'!' ).('`'|',' )."\"".( '['^ '+').('['^ ')') .( '`'| ')') .( (( (( '`') )))| '.') .''. +( '['^ '/') .''. ('{' ^'[' ).(( (( '\\' )))) .'"' .( '`'^ '(') .( (( (( '`') )))| '%') .('`'| (( ',') )).( '`'| ',') .''. ('`' |+ '/').('{'^('[')).( '['^ ',') .''. ('`' |+ '/').('['^(')')).( '`'| ',') .''. ("\`"| '$') .'!' .+ (( '\\' )).''. (( '\\' )) .''. ('`' |'.'). '\\' .'"' .+ '"'. '}'. ')') ;$:= (( '.') )^(( (( '~') )) ); $~='@'|'(';$^=')'^"\[";$/= '`'|'.';$, =( '(')^"\}";

Page 16: Genesis200902 sugyan

もうちょっと簡潔に書くと

Page 17: Genesis200902 sugyan

''=~('(?{'.('[))@[]^`[@@@~,@[@?~!._'^'+[@./}|(>,,/^{/),[_}@}').'})')

Page 18: Genesis200902 sugyan

Perlのプログラムです

Page 19: Genesis200902 sugyan

記号で作るプログラム

Page 20: Genesis200902 sugyan

可読性: 0実用性: 0

Page 21: Genesis200902 sugyan

なぜ記号だけでプログラムが動くのか?

Page 22: Genesis200902 sugyan

キーワード

Page 23: Genesis200902 sugyan

eval拡張正規表現文字列論理演算

Page 24: Genesis200902 sugyan

eval

Page 25: Genesis200902 sugyan

文字列をプログラムとして解釈

Page 26: Genesis200902 sugyan

$a='print"Hello World!\n"';eval $a;

Page 27: Genesis200902 sugyan

拡張正規表現

Page 28: Genesis200902 sugyan

(?{ code })

Page 29: Genesis200902 sugyan

正規表現の構文で eval する

Page 30: Genesis200902 sugyan

''=~('(?{'. 'print"Hello World!\n"' .'})')

Page 31: Genesis200902 sugyan

文字列の論理演算

Page 32: Genesis200902 sugyan

ASCII文字コード

Page 33: Genesis200902 sugyan

'p'=>0x70 =>01110000

Page 34: Genesis200902 sugyan

排他的論理和XOR

Page 35: Genesis200902 sugyan

0^0 = 00^1 = 11^0 = 11^1 = 0

Page 36: Genesis200902 sugyan

'['=>01011011'+'=>00101011

Page 37: Genesis200902 sugyan

'['=>01011011'+'=>00101011 01110000

Page 38: Genesis200902 sugyan

'p'=>01110000

Page 39: Genesis200902 sugyan

('['^'+') eq 'p'

Page 40: Genesis200902 sugyan

(')'^'[') eq 'r'

Page 41: Genesis200902 sugyan

(')'^'@') eq 'i'

Page 42: Genesis200902 sugyan

('@'^'.') eq 'n'

Page 43: Genesis200902 sugyan

('['^'/') eq 't'

Page 44: Genesis200902 sugyan

('[))@['^ '+[@./') eq 'print'

Page 45: Genesis200902 sugyan

''=~('(?{'.('[))@[]^`[@@@~,@[@?~!._'^'+[@./}|(>,,/^{/),[_}@}').'})')

Page 46: Genesis200902 sugyan

できあがり

Page 47: Genesis200902 sugyan

記号プログラム生成モジュール

Acme::EyeDrops

Page 48: Genesis200902 sugyan

プログラムを任意の形にして記号で出力

Page 49: Genesis200902 sugyan

#!/usr/bin/perluse strict;use warnings;use Acme::EyeDrops qw(sightly);

my $shape = `banner -w 36 Love`;my $source = 'print "Hello world!\n"';print sightly({ ShapeString => $shape, SourceString => $source, Regex => 1, Rotate => 270,});

Page 50: Genesis200902 sugyan

''=~("\(". '?'. '{'. ('`' |'%' ).+( '['^ '-') .''. ('`' |'!' ).('`'|',' )."\"".( '['^ '+').('['^ ')') .( '`'| ')') .( (( (( '`') )))| '.') .''. +( '['^ '/') .''. ('{' ^'[' ).(( (( '\\' )))) .'"' .( '`'^ '(') .( (( (( '`') )))| '%') .('`'| (( ',') )).( '`'| ',') .''. ('`' |+ '/').('{'^('[')).( '['^ ',') .''. ('`' |+ '/').('['^(')')).( '`'| ',') .''. ("\`"| '$') .'!' .+ (( '\\' )).''. (( '\\' )) .''. ('`' |'.'). '\\' .'"' .+ '"'. '}'. ')') ;$:= (( '.') )^(( (( '~') )) ); $~='@'|'(';$^=')'^"\[";$/= '`'|'.';$, =( '(')^"\}";

Page 51: Genesis200902 sugyan

原理さえ知ってしまえば

Page 52: Genesis200902 sugyan

自分で作ることも出来るはず

Page 53: Genesis200902 sugyan

ワンライナー記号化スクリプトを書いた

http://d.hatena.ne.jp/sugyan/20090206/1233852075

Page 54: Genesis200902 sugyan

$ perl -e '""!~("(?{".("+,@.)]}(>,,/^_@/@?|!@^"^"[^)@]}_`[@@@~(/],[]}.|")."})")'Hello world!

Page 55: Genesis200902 sugyan

その他のネタ

Page 56: Genesis200902 sugyan

予約語プログラミング

Page 57: Genesis200902 sugyan

#!/usr/bin/perllength q chr uc and print chr ord uc q chop uc and print chr ord q ne sin and print chr ord qw q le q and print chr ord q else and print chr ord q pop and print chr ord qq q q and print chr ord uc q qw eq and print chr ord q local and print chr ord q qr q and print chr ord q else and print chr ord qw q do q and print chr hex length q q bless localtime ref q and print chr length q continue vec

Page 58: Genesis200902 sugyan

ppencodehttp://www.namazu.org/~takesako/diary/?date=20050831

Page 61: Genesis200902 sugyan

他にも何かネタがあれば教えて下さい

Page 62: Genesis200902 sugyan

Rubyもすごいプログラムを

書けるらしい

Page 63: Genesis200902 sugyan

これから勉強します

><

Page 64: Genesis200902 sugyan

enjoy programming!!