Presentation is loading. Please wait.

Presentation is loading. Please wait.

第2話. 第2話 LLカンファレンス の歴史を 振り返る LL Saturday(2003年)

Similar presentations


Presentation on theme: "第2話. 第2話 LLカンファレンス の歴史を 振り返る LL Saturday(2003年)"— Presentation transcript:

1

2 第2話

3 LLカンファレンス の歴史を 振り返る

4 LL Saturday(2003年)

5 LL Weekend (2004年)

6 LLDN (2005年)

7 LL Ring(2006年)

8 example 2019/08/31

9 (今年)

10 LL Tiger(2010年) ニッショーホール → デスマ・プロジェクトの火消し役?

11 次のLLカンファレンスはどこでやる? Where is the Next LL Conference?

12 ナイアガラの滝なんてどうでしょうか? “waterfall”  滝

13 Come on in, the water's fine.
Waterfalls: Not just for tourists. ウォーターフォールは: 観光客だけのものじゃなくって for most programmers! (except hackers) 職業プログラマにも必要ですから! 落ちるな危険

14 ウォーターフォール 開発 滝底に落ちない ように気をつける…

15 デスマーチになるかも

16

17 Escape a water grave デスマーチから抜け出そう!

18 use Ruby; #!/usr/bin/python # # encoding: ruby

19 Talks#1: Ruby On Snails 新フレームワークで開発を遅くしよう
Slow down development with this new framework by Dave Thomas and Mike Clark

20 Waterfall 2006 Conference Location Date Niagara Falls, NY
ナイアガラの滝(ニューヨーク州)にて Date April 1st, 2006 開催日は4月1日 実は既に開催 されていた!?

21 ☻ ☻ ☹ Talks#2: Pair Managing Is not Pair Programming ペアプロじゃなくって、ペア管理
1人のプログラマにマネージャが2人 Two Managers per Programmer by Jim Highsmith

22 #3: Unfactoring from Patterns
読みにくいコードで職を守る Job Security through Unreadability by Joshua Kerievsky 西尾泰和

23 Unreadability? Perl5? 読みにくい、と言えば…?

24 orz

25 Unreadable Perl5→ 読みにくいプログラムを量産し続けるPerl5

26 Perl5 の変数(sigils rules)
scalar array hash $s @a %h $$s $a[0] $h{'?'} $s->foo ☹ ☹

27 ------- ------ -------
Perl6 の変数(Sigils rule) scalar array hash $s @a %h $$s @a[0] %h<?> $s.foo @a.foo %h.foo

28 Readable Perl6! 読みやすいプログラムを書けるPerl6になる!

29 待望の Perl6 – Rakudo Star リリース!

30

31 O’REILLY

32 NOT’REALLY

33

34 キメラ動物みたい?

35 (例)

36 Human.Dog Yappo++

37 GIF89a Polyglot HTML/CSS & JavaScript & Perl in ‘GIF’

38 JavaScript in GIF GIF89a(q/*....../);sub GIF89a{print "Hello Perl!"}
__END__#*/=1);function GIF89a(){alert("Hello JavaScrpt!")} /*<body style=visibility:hidden> <div style=position:relative;visibility:visible> <h1>Hello HTML!</h1><!-- --><img src=?> <script src=# language=JavaScript></script></div> */// ;

39 HTML/CSS in GIF GIF89a(q/*....../);sub GIF89a{print "Hello Perl!"}
__END__#*/=1);function GIF89a(){alert("Hello JavaScrpt!")} /*<body style=visibility:hidden> <div style=position:relative;visibility:visible> <h1>Hello HTML!</h1><!-- --><img src=?> <script src=# language=JavaScript></script></div> */// ;

40 Perl in GIF GIF89a(q/*....../);sub GIF89a{print "Hello Perl!"}
__END__#*/=1);function GIF89a(){alert("Hello JavaScrpt!")} /*<body style=visibility:hidden> <div style=position:relative;visibility:visible> <h1>Hello HTML!</h1><!-- --><img src=?> <script src=# language=JavaScript></script></div> */// ;

41 ハチロクとバトル

42 BATTLE 2 : Downhill ハチロク 86 VS. 詳細不明 Unspecified

43 BATTLE 2 : Downhill Polyglot by TAKESAKO

44 記号オンリーな Polyglot プログラミング
\\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+"!\\\"\\"+$.$$$+$._$$+$.__+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.$$$_+$._$+$.$$$$+"(\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+$.$$_$+$._$+"\\"+$.__$+$.$$_+$.$$$+")\\"+$.$$$+$.$_$+"\\"+$.$$$+$.$_$+"\\\""+$._$+$.$_$$+"\\"+$.__$+$.$_$+$._$_+$.$$$_+$.$$__+$.__+"\\\"\\"+$.$$$+$.$$$+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"($)\\"+$.$$$+$._$_+"\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+$.__+"($)\"")())(); (1) MS-DOS 8086 (2) Javascript (3) Perl (4) Ruby

45 Polyglot Programming

46 print 0 ? "Ruby" : "Perl" ; Ruby / Perl  2 [poly] $ perl 1.p Perl
$ vi 1.p print 0 ? "Ruby" : "Perl" ; $ perl 1.p Perl $ ruby 1.p Ruby

47 Perl / Ruby / Python  3 [poly]
$ vi 3.p q='''=; print"Perl"#';print"Ruby"#''';print"Python"; $ perl 3.p Perl $ ruby 3.p Ruby $ python 3.p Python

48 JavaScript的特徵 /* … */

49 Perl的特徵 # …

50 Ruby %#string# Perl q#string#

51 .com - 16bit MS-DOS 8086 self-replace x86 binary

52 ;"#{",$/*";}";'86';%#;'Perl'#;'Ruby'#*/='JS';
各プログラミング言語の分岐テクニック ;"#{",$/*";}";'86';%#;'Perl'#;'Ruby'#*/='JS'; 86 ' と */ が存在してはいけない。 Perl # と */ と改行が存在してはいけない。 Ruby JS 変数 $ を定義した後は ご自由に♪

53 ハチロク

54 ;"#{",$/*";}";'86'; をディスアセンブル 3B22 ;" cmp sp,[bp+si]
237B22 #{" and di,[bp+di+0x22] 2C24 ,$ sub al,0x24 2F / das 2A22 *" sub ah,[bp+si] 3B7D22 ;}" cmp di,[di+0x22] 3B27 ;' cmp sp,[bx] ここに のコードを書く(16bit 8086) ' daa

55 Perl

56 Perl のパーサー ($/ と $# は特殊変数)
;"#{",$/*";}";'86';%#;'Perl'#;'Ruby'#*/='JS'; 86 ' と */ が存在してはいけない。 Perl # と */ と改行が存在してはいけない。 Ruby JS 変数 $ を定義した後は ご自由に♪

57 参考文献:Acme::EyeDrops Perlの正規表現 正規表現の中でevalが実行できる! $a =~ /(…)/
$a =~ '(?{print"hello\n";})' $a =~ ( '(?{print"hello\n";})' ) $a =~ ( '(?{' . 'print"hello\n";' . '})' ) '…'=~ ( '(?{' . ‘abc' ^ 'def' . '})' ) '…' !~ ( '(?{' . 'abc' ^ 'def' . '})' )

58 ‘000’ xor ‘001’ xor ‘011’ => ‘010’ xor 演算子(^) で任意の文字コードを作る

59 Ruby

60 ;"#{",$/*";}";'86';%#;'Perl'#;'Ruby'#*/='JS';
' と */ が存在してはいけない。 Perl # と */ と改行が存在してはいけない。 Ruby JS 変数 $ を定義した後は ご自由に♪

61 Ruby的特徵 "#{",$/*"}";%#=();'Perl'#; _=[*'`'..%.~.]*%;;;$_=%+%++
%.}.])*%(=~_~='_');$><<($_%(/~='_';/=~_)+$_%(/~='_'\./ _)+$_%(/='_'`/=~_)+$_%(/~='_';/=~_)+$_%(/,=~_~='_'\-/=~ _)+$_%(/~='_':/=~_)+$_%(/_'\]/=~_)+$_%(/~='_':/=~_)+$_% (/='_'_/=~_)+$_%(/~='_':/=~_)+$_%(/~_~='_'>/=~_)+$_%(/~= +$_%(/=~_~='_'#/=~_)+%)))*(/_/=~_)#*/;alert('JavaScript')

62 記号だけで任意の Ruby 文字列を作る方法
ASCII code ruby> p //=~'' ruby> p /_/=~'>_' 1 ruby> p /_/=~'>>>>>>>>>_' 9 ruby1.8> p ''<<(123) "{"

63 Ruby 1.8  1.9 非互換(incompatible)
ruby1.9> p ?a "a" ruby1.8> p ?a 97 ruby1.9> p ?? "?" ruby1.8> p ?? 63

64 if RUBY_VERSION を記号だけで書ける!?
?? => "?" ?? % ?? => "?" % "?" => "?" Ruby1.8 ?? => 63 ?? % ?? => 63 % 63 => 0 sprintf("?","?") 63÷63=1余り0 print"Ruby",??%??==???1.9:1.8

65 JavaScript

66 JS のパーサー /* コメント で無視される */
;"#{",$/*";}";'86';%#;'Perl'#;'Ruby'#*/='JS'; 86 ' と */ が存在してはいけない。 Perl # と */ と改行が存在してはいけない。 Ruby JS 変数 $ を定義した後は ご自由に♪

67 jjencode と同じ テクニック

68

69 つづく…


Download ppt "第2話. 第2話 LLカンファレンス の歴史を 振り返る LL Saturday(2003年)"

Similar presentations


Ads by Google