aboutsummaryrefslogtreecommitdiffhomepage
path: root/slide.saty
blob: 867707538c9bce009295a1afb56067a2d0da2a4a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
@require: class-slydifi/theme/akasaka
@require: code-printer/code-design
@require: code-printer/code-printer
@require: figbox/figbox

let-block +code-block s = '<
    +code-printer?:(
      CodePrinter.default
      |> CodePrinter.set-number-fun CodeDesign.number-fun-null
    )(s);
  >

open FigBox
in

document '<
  +make-title(|
    title = {
      |明日のあなたの役に立たない
      |PHPコーディング技法
      |~polyglot~
      |};
    author = {|nsfisis (いまむら)|};
    date = {|第148回PHP勉強会@東京|};
  |);

  +frame{自己紹介}<
    +fig-center(vconcat [
      hconcat [
        textbox{nsfisis (いまむら)};
        gap 20pt;
        include-image 50pt `assets/me.jpeg`;
      ];
      gap 20pt;
      textbox{\@ デジタルサーカス株式会社};
    ]);
  >

  +frame{Polyglotとは}<
    +fig-center(vconcat [
      textbox{単一のソースコードが複数の言語として解釈可能なプログラム};
      gap 20pt;
      textbox{今回はPHP・Ruby・Perlの組み合わせ};
    ]);
  >

  +frame{ソースコード}<
    +code-block(
      `#<?php
$a = 'a'; $/* 0; # */$a
=begin
();
echo "php\n";
function begin() {} $a = <<<nil
=end
puts "#ruby"; '
=cut
print "#perl\n";
'# ';
nil;`
    );
    +p{
      実行結果: \inline-code(`#php`);、\inline-code(`#ruby`);、\inline-code(`#perl`);
    }
  >

  +frame{PHPとして解釈する}<
    +code-block(
      `#<?php`
    );
    +p{
      \inline-code(`#`); とPHPタグ
    }
  >

  +frame{PHPとして解釈する}<
    +code-block(
      `$a = 'a'; $/* 0; # */$a
=begin
();`
    );
    +p{
      \inline-code(`$a`); に \inline-code(`'a'`); を代入
    }
    +p{
      \inline-code(`$$a = begin();`); (variable variable)
    }
  >

  +frame{PHPとして解釈する}<
    +code-block(
      `echo "php\n";`
    );
    +p{
      出力部分。実際の出力には先頭に \inline-code(`#`); が付く
    }
  >

  +frame{PHPとして解釈する}<
    +code-block(
      `function begin() {} $a = <<<nil
=end
puts "#ruby"; '
=cut
print "#perl\n";
'# ';
nil;`
    );
    +p{
      関数 \inline-code(`begin()`); を定義
    }
    +p{
      Here document (delimiter: \inline-code(`nil`);) で残りを飲み込む
    }
  >

  +frame{おわりに}<
    +fig-center(vconcat [
      textbox{これにもう1言語足したものを};
      gap 20pt;
      textbox{PHPerKaigi 2023のPHPerチャレンジに出題します!};
    ]);
  >
>