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

Slides:



Advertisements
Similar presentations
R Basics 2013/12/09 Yamada. 今日の方針 Today’s plan テキスト・文字列を扱うにあたっての用 語の理解をすることの方が、 R での操作を 見るより有意義と思われるので、そちら を優先 Learning terms on text/strings is more.
Advertisements

プログラミング言語論 第3回 BNF 記法について(演習付き) 篠埜 功. 構文の記述 プログラミング言語の構文はどのように定式化できるか? 例1 : for ループの中に for ループが書ける。 for (i=0; i
第3話 最速ハチロク伝説 コンピュータの進化とプログラミング言語コンピュータの進化とプログラミング言語 近年 CPU が高速化 マルチコア化 それを生かすプログラミング言語処理系 IE9 では GPU も利用 Lightweight Language の登場 スクリプト言語でも高速に動作 Perl,
© 2005 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます prototype.js と Perl で Ajax 株式会社はてな 伊藤 直也
P HI T S スクリプト言語を用いた PHITS の連続 実行 Multi-Purpose Particle and Heavy Ion Transport code System title 年 2 月改訂.
プログラミング言語論 第10回(演習) 情報工学科 木村昌臣   篠埜 功.
なぜ今Pythonか? Pythonをお薦めする18の理由
30分でわかるcallccの使い方 yhara (原 悠) 京大マイコンクラブ.
プログラミング言語としてのR 情報知能学科 白井 英俊.
Java I 第2回 (4/18)
1.1 C/C++言語 Hello.ccを作りコンパイルしてa.outを作り出し実行する
稲葉 一浩 (k.inaba) Python と プログラミングコンテスト 稲葉 一浩 (k.inaba)
スレッドの同期と、スレッドの使用例 スレッドの同期 Lockオブジェクト: lockオブジェクトの生成
Android Development 白熱道場
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
Lightweight Language Weekend ls-lRシェル
基礎プログラミングおよび演習 第9回
XSSで使えるかもしれないJavaScriptテクニック
ISD実習E 2009年6月1日 read関数 read-macro back-quote 文字列のread 課題
Ruby勉強会(第1回) 2006/06/29 竹内豪.
第1回 JavaScriptゼミ ・ scriptエレメント ・ 記述における諸注意 ・ 古いブラウザへの対応方法
条件式 (Conditional Expressions)
プログラミング 田浦健次朗.
Narcissus 自分自身を愛した美少年JavaScript
基礎プログラミング演習 第7回 繰り返し.
PHPの基礎と開発手法 Based on PHP5
スクリプト言語を用いたPHITSの連続実行
Web 2.0 時代の Ajax Binary Hacks
PROGRAMMING IN HASKELL
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
ガジェット・マスターへの まわり道!? ~Ajaxを理解しよう~
プログラミング言語論 第3回 BNF記法について(演習付き)
プログラミング応用 printfと変数.
電気・機械・情報概論 VBAプログラミング 第2回 2018年7月2日
独習XML 第2章 XML文書の構成要素 2.1 XMLの文字と文字列 2.2 コメント
50年前のプログラミング言語 50年後のプログラミング言語
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
インラインスクリプトに対するデータフロー 解析を用いた XHTML 文書の構文検証
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
疑問詞 1年生で学習した疑問詞.
Satoru Ishikawa Satoru Satake Denis Vazhenin
柔軟に変更可能な字句解析機構を持つ コードクローン検出ツールの開発
プログラミング基礎B 文字列の扱い.
PHP 概要 担当 岡村耕二 月曜日 2限 平成22年度 情報科学III (理系コア科目・2年生)
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
0からわかるF# Part1 中 博俊 F# September 2008 CTP Base.
コーパス言語学 ~バッチ処理~ 2013.10. 28.
アルゴリズムとデータ構造 第3章 ヒープ 5月31日分
JavaScriptを含んだHTML文書に対する データフロー解析を用いた構文検証手法の提案
統計ソフトウエアRの基礎.
基礎プログラミング演習 第3回.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
C#プログラミング実習 第3回.
図書系職員のための アプリケーション開発講習会
Webページに動きを持たせるJavascript言語について 例題のプログラムを通して体験的に理解することとします。
情報処理Ⅱ 2005年10月28日(金).
発表者: 稲葉 一浩 複雑ネットワーク・地図グラフ セミナー 2017/1/19
情報実習I (第1回) 木曜4・5限 担当:北川 晃.
コンパイラ 2012年10月11日
プログラミング 4 文字列.
BW: 英語で書いて下さい 1)小さくする 2)うるさく話す 3)大きく書く 4)上手になる (なる=become)
PROGRAMMING IN HASKELL
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
例題のプログラムを通して JavaScriptの仕組みを理解することとします。
Object Oriented Programming in Perl
君ならどうする – ls-lRシェル Python編
JavaScript    プログラミング入門 2-3 式と演算子 2006/10/12 神津 健太.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
第1章 文字の表示と計算 printfと演算子をやります 第1章 文字の表示と計算.
Presentation transcript:

第2話

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

LL Saturday(2003年)

LL Weekend (2004年)

LLDN (2005年)

LL Ring(2006年)

example 2019/08/31

(今年)

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

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

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

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

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

デスマーチになるかも

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

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

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

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

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

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

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

orz

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

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

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

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

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

O’REILLY

NOT’REALLY

キメラ動物みたい?

(例)

Human.Dog Yappo++

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

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> */// ;

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> */// ;

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> */// ;

ハチロクとバトル

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

BATTLE 2 : Downhill Polyglot by TAKESAKO

記号オンリーな Polyglot プログラミング ;"#{",$/*";}";'[!&,,#>,,`^`[%!@%@!-~`-~/(&,,-!!-!!-!+(&-,+>,,`[-!|-!}/////////$$$[,-(@),~,&(@-$@,+,)(@,(@$,!,",/(@!(@"(@#$@,{,^(@%(@&$@,!,.(@*(@."=:$_]!$-~!`{~!';%#;$^_='_^)./}`;@,@<},^^,]`@_{',$^_^='/,@@[_(^,@/-]|;,@|<.}@',$^_=~('(?{$^_=~'.('_^""'^'+,|/'."-".('$%'^';{'.'(-:^;'.('[)]@'^'>_<,').'$^_})')))#;_=[*'`'..%.~.]*%;;;$_=%+%++(??%?===???_[(_=~/\{/).-@+(_=~/~/)]:%%%<<(?!*(?+-?()));_=([*%/!/..%!/!]+[*%]:]..%)@)]+[*%.[...%.`.]+[*%.{...%.}.])*%(=~_~='_');$><<$_%(/\)=~_~='_'\*=/=~_)+$_%(/~_~='_'\-/=~_)+$_%(/\-=~_~='_'\./=~_)+$_%(/\-=~_~='_'\./=~_)+$_%(/_~='_'\./=~_)+$_%(/'&/=~_)+$_%(/='_'%/=~_)+$_%(/=~_~='_'\+/=~_)+$_%(/\.=~_~='_'\//=~_)+$_%(/',/=~_)+$_%(/~='_'\//=~_)+$_%(/'_'%/=~_)+$_%(/=~_~='_'#/=~_)+%))#*/=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+"$\\"+$.$$$+$.$_$+"\\\"\\"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+(![]+"")[$._$_]+$._$+", \\"+$.__$+$.__$+$._$_+"\\"+$.__$+$._$_+$._$$+"!\\\"\\"+$.$$$+$._$$+$.__+"\\"+$.__$+$.$$$+$.__$+"\\"+$.__$+$.$$_+$.___+$.$$$_+$._$+$.$$$$+"(\\"+$.__$+$.$$_+$.$$$+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+$.$$_$+$._$+"\\"+$.__$+$.$$_+$.$$$+")\\"+$.$$$+$.$_$+"\\"+$.$$$+$.$_$+"\\\""+$._$+$.$_$$+"\\"+$.__$+$.$_$+$._$_+$.$$$_+$.$$__+$.__+"\\\"\\"+$.$$$+$.$$$+$.$_$_+(![]+"")[$._$_]+$.$$$_+"\\"+$.__$+$.$$_+$._$_+$.__+"($)\\"+$.$$$+$._$_+"\\"+$.__$+$.$$_+$.___+"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.__$+"\\"+$.__$+$.$_$+$.$$_+$.__+"($)\"")())(); (1) MS-DOS 8086 (2) Javascript (3) Perl (4) Ruby

Polyglot Programming

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

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

JavaScript的特徵 /* … */

Perl的特徵 # …

Ruby %#string# Perl q#string#

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

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

ハチロク

;"#{",$/*";}";'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] ここに 86 のコードを書く(16bit 8086) 27 ' daa

Perl

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

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

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

Ruby

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

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

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

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

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

JavaScript

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

jjencode と同じ テクニック

 つづく…