blob: 352a401b2c5f19e96248cff70f362302879f5fb3 (
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
@require: class-slydifi/theme/akasaka
@require: code-printer/code-design
@require: code-printer/code-printer
@require: code-printer/code-syntax
@require: code-printer/code-theme
@require: figbox/figbox
let-block +code-block-php source =
'<
+code-printer?:(
CodePrinter.make-config CodeSyntax.php CodeTheme.iceberg-light
|> CodePrinter.set-number-fun CodeDesign.number-fun-null
)(source);
>
open FigBox
in
document '<
+set-config(|
SlydifiThemeAkasaka.default-config with
color-emph = Color.black;
|);
+make-title(|
title = {
|テキストファイルの末尾には
|改行コードを入れよう
|};
author = {|nsfisis (いまむら)|};
date = {|第153回PHP勉強会@東京|};
|);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+frame{自己紹介}<
+fig-center(vconcat [
gap 75pt;
hconcat [
textbox{nsfisis (いまむら)};
gap 20pt;
include-image 50pt `assets/me.jpeg`;
];
gap 20pt;
textbox{\@ デジタルサーカス株式会社};
]);
>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+frame{なぜ末尾に改行を入れるべきか: その1}<
+fig-center(vconcat [
gap 75pt;
textbox?:(set-font-size 24pt){A: そういう定義だから};
]);
>
+frame{なぜ末尾に改行を入れるべきか: その1}<
+fig-center(gap 25pt);
+p{
POSIX による\emph{「テキストファイル」の定義}:
}
+p{
A file that contains characters organized into zero or more lines. ...
}
+p{
\emph{0個以上の「行」で構成されたファイル}
}
>
+frame{なぜ末尾に改行を入れるべきか: その1}<
+fig-center(gap 25pt);
+p{
POSIX による\emph{「テキストファイル」の定義}:
}
+p{
A file that contains characters organized into zero or more lines. ...
}
+p{
\emph{0個以上の「行」で構成されたファイル}
}
+fig-center(gap 25pt);
+p{
POSIX による\emph{「行」の定義}:
}
+p{
A sequence of zero or more non-\<newline\> characters plus a terminating \<newline\> character.
}
+p{
\emph{改行でない文字が0個以上並んだもの + 改行文字}
}
>
+frame{なぜ末尾に改行を入れるべきか: その1}<
+fig-center(vconcat [
gap 75pt;
textbox{POSIX の定義では};
gap 10pt;
textbox?:(set-font-size 24pt){末尾に改行のないファイルは};
gap 10pt;
textbox?:(set-font-size 24pt){テキストファイルに非ず};
]);
>
+frame{なぜ末尾に改行を入れるべきか: その1}<
+fig-center(gap 25pt);
+p{
POSIX の定義に従わないと何が困るのか?
}
+fig-center(gap 25pt);
+p{
一部のコマンドの一部の実装が期待どおりに動作しない
}
+p{
例: \code(`wc`);
}
+p{
例: \code(`echo hoge >> ~/.bashrc`);
}
>
+frame{なぜ末尾に改行を入れるべきか: その2}<
+fig-center(vconcat [
gap 75pt;
textbox?:(set-font-size 24pt){A: バージョン管理システムと};
gap 10pt;
textbox?:(set-font-size 24pt){相性が悪いから};
]);
>
+frame{なぜ末尾に改行を入れるべきか: その2}<
+fig-center(gap 25pt);
+p{a[改行]}
+p{b[改行]}
+p{c}
>
+frame{なぜ末尾に改行を入れるべきか: その2}<
+fig-center(gap 25pt);
+p{a[改行]}
+p{b[改行]}
+p{c}
+fig-center(gap 25pt);
+p{
新しく「d」を追加すると、
}
+p{a[改行]}
+p{b[改行]}
+p{c[改行]}
+p{d}
+fig-center(gap 25pt);
+p{
変更に無関係な「c」にまで差分が生じる
}
>
+frame{なぜ末尾に改行を入れるべきか: その1}<
+fig-center(vconcat [
gap 75pt;
textbox?:(set-font-size 24pt){レビューの負担を軽くするため、};
gap 10pt;
textbox?:(set-font-size 24pt){無意味な差分は無くすべき};
]);
>
+frame{まとめ}<
+fig-center(vconcat [
gap 75pt;
textbox?:(set-font-size 24pt){テキストファイルの末尾には改行コードを入れよう};
gap 30pt;
textbox?:(set-font-size 24pt){定義上の理由、実用上の理由から};
]);
>
>
|