Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Strange Code: Esoteric Languages エソラングが変えた私の人生

takesako
February 11, 2024

Strange Code: Esoteric Languages エソラングが変えた私の人生

YAYAPC::Hiroshima (YAPC::Hiroshima 2024 アフターイベント)
https://connpass.com/event/300500/

takesako

February 11, 2024
Tweet

More Decks by takesako

Other Decks in Programming

Transcript

  1. エソラングが変えた私の人生
    YAPC::Hiroshima 2024 アフターイベント LT
    竹迫 良範
    @takesako

    View full-size slide

  2. 広島の会社から来ました(22年前に新卒入社)
    ◼広島 → Shibuya.pm → サイボウズ・ラボ → 現職
    2
    広島県在籍ながらShibuya.pm
    の常連でもある竹迫良範氏
    出典:Perlの強者が目黒に集結、Shibuya Perl Mongers 1周年記念
    テクニカルトーク(ITmedia News 2003/10/21)
    https://www.itmedia.co.jp/news/0310/21/nj00_spm.html
    出典:http://shibuya.pm.org/blosxom/techtalks/techtalks_200310.html

    View full-size slide

  3. LTのコツ
    結論を先に言う
    3

    View full-size slide

  4. 日本語訳ストレンジコードが出版されます(みんな見てね
    4
    1章 歴代のプログラミング言語たち
    2章 プログラミング言語の本質
    3章 チューリングマシンとチューリング完全
    4章 Forth
    5章 SNOBOL
    6章 CLIPS
    7章 ABC
    8章 FRACTRAN
    9章 Piet
    10章 Brainfuck
    11章 Befunge
    12章 Filska
    14章 Firefly
    16章 Further
    ALGOL, APL, BASIC, PL/I, Logo, Simula,
    Pascal, Prolog, Smalltalk, Standard ML
    書名:ストレンジコード
    著者:Ronald T. Kneusel
    翻訳:水野 貴明
    監訳:竹迫 良範
    定価:4,730円(税込)
    発売:2024年2月16日
    厚さ:604ページ
    出典:https://www.amazon.co.jp/dp/4798069744/

    View full-size slide

  5. クイズ
    ◼これは何のプログラミング言語でしょうか?
    5
    正解:APL
    (フィボナッチ数列を計算する)
    出典:https://twitter.com/code_report/status/1265099069204189185

    View full-size slide

  6. 伝説のIBM5100:スイッチでAPLとBASICを切り替え動作
    6
    出典:https://www.reddit.com/r/steinsgate/comments/a8vifb/so_i_finally_got_myself_an_ibm_5100/

    View full-size slide

  7. APL=A Programming Language 今だと行列計算言語
    7

    View full-size slide

  8. PL/I = プログラミング言語大統一理論を実装
    8

    View full-size slide

  9. ストレンジコードの帯「変態言語の世界へようこそ!」
    9

    View full-size slide

  10. とほほ 変態言語の Hello, world! 入門
    ◼BrainF*ck
    ◼Piet
    10
    >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+
    ++++++..+++.[-]>++++++++[<++++>-]<.>++++++++++
    +[<+++++>-]<.>++++++++[<+++>-]<.+++.------.---
    -----.[-]>++++++++[<++++>-]<+.[-]++++++++++.

    View full-size slide

  11. Piet:2次元画像プログラミング言語を丁寧に解説
    11

    View full-size slide

  12. BrainF*ck:原著に敬意を表して”伏字なし”で出版
    12

    View full-size slide

  13. プログラミング言語の祖先からコンピュータサイエンスの基礎を
    13
    出典:ストレンジコード(秀和システム)2024/2/16

    View full-size slide

  14. この本の”索引”がすごい
    14
    出典:ストレンジコード(秀和システム)2024/2/16

    View full-size slide

  15. 日本語訳ストレンジコードが出版されます(みんな見てね
    15
    1章 歴代のプログラミング言語たち
    2章 プログラミング言語の本質
    3章 チューリングマシンとチューリング完全
    4章 Forth
    5章 SNOBOL
    6章 CLIPS
    7章 ABC
    8章 FRACTRAN
    9章 Piet
    10章 Brainfuck
    11章 Befunge
    12章 Filska
    14章 Firefly
    16章 Further
    ALGOL, APL, BASIC, PL/I, Logo, Simula,
    Pascal, Prolog, Smalltalk, Standard ML
    書名:ストレンジコード
    著者:Ronald T. Kneusel
    翻訳:水野 貴明
    監訳:竹迫 良範
    定価:4,730円(税込)
    発売:2024年2月16日
    厚さ:604ページ
    出典:https://www.amazon.co.jp/dp/4798069744/
    再掲

    View full-size slide

  16. 私の人生を変えた Perl の hello world プログラム
    16
    package Earth;sub Greet{
    %_=('Y','~');$_='$;=!(Middle
    Earth.age~~~.age)?!(defined$ti~~~~~~~~~~~mez~~~On
    e[2])?!(push@time~~~~~~~~~~~~~~~~Zone,loc
    ~altime())?rotation?~~~~~~~~~~~~~q~~?The Worl
    ~~d?:q:[¥w]::q=[¥~~~~~~~~~~~~~~~~~d~a-f]=:q?..~~
    ~~~?:q:.:;"42b3d3~~~~~~~~~~~~~~~~~~~~~728656c6c6f6
    ~~~~~0277f627c64672~~~~~~~~~~~~~~~~~~~~~b3072796e647
    ~~~~~~~42b3b3rg7d"=Ym~~~~~~~~~~~~~~~~~~~¥$;~~*¥;p~~~~u
    ~~~~~~~~~sh@_,$&;bless~~~~~~~~~~~~~~~~~~~~~~~~~$c~~~~~~~
    ~~~~~~~~~o~ntine~~~~~nt~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~~~~~~~~~~~s=¥~~~~~~~$~~~~~~~~~~~~~~~~~~~~~~~pangaea~~~~
    ~~~~~~~~~~~~~~~;{l~~~~~~~~~~~~~~~~~~~~~~~~~~~~ocal@_;local$;
    ~~~~~~~~~~~~~~~~~="o~~~~~~~~~~~~~~~~~~~~~~~~~cean";$^A=(defi
    ~~~~~~~~~~~~~~~~~~~n~~~~~~~~~~~~~~~~~~~~~~~~~ed$continents)?
    ~~~~~~~~~~~~~~~~~~~(vec(~~~~~~~~~~~~~~~~~~~~~~$;, YYsplit(¥'
    ~~~~~~~~~~~~~~~~~¥',${¥$;}~~~~~~~~~~~~~~~~~~~~~~)%3,YYsplit(
    ~~~~~~~~~~~~~~~~q??,$;)**2-~~~~~~~~~~~~~~~~~~~~~~(($;=Ytr/oa
    ~~~~~~~~~~~~~~~~eiu//)**2))=~~~~~~~~~~~~~~~~~~~~~~=28160)?q:
    ~~~~~~~~~~~~~~~~~.::q?!?:¥'?~~~~~~~~~~~~~~~~~~~~~~¥';}$^A=Ys
    ~~~~~~~~~~~~~~~~:¥Q.¥E:pack(~~~~~~~~~~~~~~~~~~~~~~¥'h*¥',j
    ~~~~~~~~~~~~~~~~~oin(q(),~~~~~~~~~~~~~~~~~~~~~~~grep{$_=
    ~~~~~~~~~~~~~~~~~~Ym,$,,}~~~~~~~~~~~~~~~~~~~~~~~split("
    ~~~~~~~~~~~~~~~~~",@_~~~~~~~~~~~~~~~~~~~~~~~~~~[0]))
    ~~~~~~~~~~~~~~~~):e~~~~~~~~~~~~~~~~~~~~~~~~~~~gexe
    ~~~~~~~~~~~~~~~;$d~~~~~~~~~~~~~~~~~~~~~~~~~~~="s
    ~~~~~~~~~~~~~~ort~~~~~~~~~~~~~~~~~~~~~~~~~~<=
    ~~~~~~~~~~~~>,~~~~~~~~~~~~~~~~~~~~~~~~~~YY
    ~~~~~~~~~~~@_~~~~~~~~~~~~~~~~~~~~~~~~
    ~~~~~~~~~"~~~~~~~~~~~~~~~~~~~';;
    s,(~|¥r|¥n|¥s),,g;s.Y.¥x7e.g;
    eval};Greet;'the world';
    実行結果:
    hello world
    出典:https://www.perlmonks.org/index.pl?node_id=329174

    View full-size slide

  17. Perl開発者”Larry Wall”より広島の皆様へご挨拶
    17
    use re 'eval';
    ''=~('('.'?'.'{'
    .('['^'+').('['^"¥)").(
    '`'|')').('`'|'.').('['^"¥/").
    "¥"". '#'.
    ('[' ^((
    '"') )).
    ('`' | '!'
    ).+( ( '['
    )^(( (( ( '"'
    )))) ) ) .+(
    '`' |+ (( '!'
    ))) .( ( '['
    )^+ '+') . (((
    '`' ))|+ ( '#'
    )). ('{' ^ '['
    ).( '`'|')'). ( '['
    ^(( (( ( ((
    '(' )) ) ))
    ))) . ( ((
    '{' ) )^'['
    ).( ( ((
    '{' ) ))^'"').('`'|'%').('['^'/').('{'^'[').
    ((( '`'))^'!').( '`'|'.' ) . (('`')| (
    '/' ) ) .+( '[' ^+ ( ( (( '/' ))) )
    ).( ( ( '`'))|'(').( ( ( '`'))|'%').( (
    '[' ) ^ ( ( (
    (( ')' ) ) ) )) )
    .( ( '{')^ ( ( (( (
    (( ( ( ( ( ( (
    (( ( '[' ))))))))))))))) ) ).('{'^'"').
    +( ( ( ( (
    ( ( ( ( (
    ( ( ( '`' ) )
    ) ))) )) )
    ) ) )^'!').('{'^'+').('`' ^
    ( ( '#'))).('!'^'+').'"'.'}' .
    ( ( ')')));$:='.'^'~';$~="¥@"| (
    ( ( '(')) );$^=')'^"¥["; ($/) =
    ( ( '`') ) | '.' ;
    $, =(( '('))^'}';#;#;#; #;#
    ; #
    ; #
    ; #
    ; # ;
    # ; #
    ; # ;
    # ; #
    ; # ; #
    ; # ; #
    ; #;# ;# ;
    # ;#;#;#;#;#; #
    実行結果:
    #yayapc is Yet Another YAPC
    出典:Acme::EyeDrops でコード生成

    View full-size slide

  18. Just Another Perl Hacker(JAPH)を読む
    18
    税別¥1,500- 水野 貴明 (著)
    @a=split(/(¥d)/,
    "4Hacker,2another3Perl1Just");
    shift(@a);%a=@a;
    print "@a{1..4}";
    Randal Schwartz 1 Feb 1990 22:28:58 GMT
    ● 記録されている最初のJAPH
    出典:Shibuya Perl Mongersテクニカルトーク#5 (2004年12月16日)
    http://shibuya.pm.org/blosxom/techtalks/200412.html

    View full-size slide

  19. Perlマジカルインクリメント
    ◼以下を実行すると何が表示される?
    19
    my$a='AY';for(1..440444){$a++};print$a;
    実行結果:
    YAPC

    View full-size slide

  20. LLDN2005 夜の部 LTダメ自慢で「ppencode」を発表
    ◼ppencode とは?
    ◼入力文字列を出力する(予約語のみで構成された)
    Perlプログラムを出力するPerlプログラム
    ◼コマンド使用法
    20
    $ echo -n "LLDN" | ppencode
    #!/usr/bin/perl
    sin cos and s qq qx xor s x x print uc chr lc
    ord qq sleep times x xor int log cos xor eval
    and eval and print uc chr ord scalar reverse
    qq exit binmode xor qq write qw xor print uc
    chr ord scalar reverse qw tell my print
    2005/08/27 Lightweight Language Day and Night

    View full-size slide

  21. Perlの予約語
    21
    lt gt le ge eq ne cmp not and or xor if else elsif while for foreach continue goto last local
    map my next redo require return use tr y s m q qq qr qw qx x
    abs accept alarm atan2 bind binmode bless caller chdir chmod chomp chop chown chr chroot
    close closedir connect cos crypt dbmclose dbmopen defined delete die do dump each eof eval
    exec exists exit exp fcntl fileno flock fork formline getc getlogin getpeername getpgrp
    getppid getpriority getpwnam getgrnam gethostbyname getnetbyname getprotobyname
    getpwuid getgrgid getservbyname gethostbyaddr getnetbyaddr getprotobynumber
    getservbyport getpwent getgrent gethostent getnetent getprotoent getservent setpwent
    setgrent sethostent setnetent setprotoent setservent endpwent endgrent endhostent
    endnetent endprotoent endservent getsockname getsockopt glob gmtime grep hex import
    index int ioctl join keys kill lc lcfirst length link listen localtime log lstat mkdir msgctl msgget
    msgrcv msgsnd no oct open opendir ord pack pipe pop pos print printf push quotemeta rand
    read readdir readlink recv ref rename reset reverse rewinddir rindex rmdir scalar seek seekdir
    select semctl semget semop send setpgrp setpriority setsockopt shift shmctl shmget shmread
    shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study
    substr symlink syscall sysread system syswrite tell telldir tie time times truncate uc ucfirst
    umask undef unlink unpack untie unshift utime values vec wait waitpid wantarray warn write
    ■ 標準関数 (183)
    ■ 演算子/制御子 (38)

    View full-size slide

  22. 予約語プログラミングのテクニック解説
    ◼セミコロン ; の代わりに xor を使う
    ◼q/??/ → q x??x → q else → ’ls’
    ◼qq/??/ → qq x??x → qq else → ”ls”
    ◼qw(?? ??) → qw x?? ??x → qw sin cos
    ◼print chr ord ”abc” → 先頭文字 a を出力
    ◼reverse → 文字列を反転 → 末尾文字を出力
    ◼uc, uppercase → tr/a-z/A-Z/
    ◼length → 文字列の長さ → 任意のASCIIコード
    22

    View full-size slide

  23. 15年後に ppencode2 が登場(任意コード実行可能に)
    ◼id:shinichiro_hさんが偉業を達成
    23
    出典:https://shinh.hatenablog.com/entry/2015/05/09/032904

    View full-size slide

  24. YAPC参加の注意点
    絶対に守るべき大切なこと
    24

    View full-size slide

  25. 注意:絶対にキーボードのキーを落とさないこと
    25
    出典:https://twitter.com/yapcjapan/status/1755923521228976429

    View full-size slide

  26. Perlモンガーの死活問題
    ◼「$」と「;」キーをなくすと失職危機
    26
    ppencode なら生涯プログラマー

    View full-size slide

  27. Perl Survey 2007 を読み解く
    ◼Perlプログラマの年収と相関の強い要素は何?
    母集団数
    4575人
    出身国別
    us 1666
    uk 588
    de 282
    au 230
    ca 146
    ru 134
    in 124
    fr 113
    br 104
    nl 94
    出典:Mint‘s log: Perlサーベイを読み解く http://googlewhacks.blogspot.com/2008/02/perl.html

    View full-size slide

  28. Perl Survey 2007 から分かること
    ◼年収の高い人は、、、
    ◼ Perlの開発に参加しており(1位、2位)
    ◼地元以外のPerlモンガーズに参加していて(4位、5位)
    ◼カンファレンスで発表している(6位)
    ◼年功序列か?
    ◼ 年齢の相関係数0.35→それほど高くない
    ◼年収と年齢は強い相関関係にない
    ◼言い換えると・・・
    出典:Mint‘s log: Perlサーベイを読み解く http://googlewhacks.blogspot.com/2008/02/perl.html
    Perlプログラマの年収は年功序列ではない

    View full-size slide

  29. さいごに
    皆さんもYAPCで発表してみましょう
    LTの5分で私の人生は変わりました
    by @takesako
    29

    View full-size slide