aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/posts
diff options
context:
space:
mode:
Diffstat (limited to 'public/posts')
-rw-r--r--public/posts/2021-03-30/phperkaigi-2021/index.html76
-rw-r--r--public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html24
-rw-r--r--public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html12
-rw-r--r--public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html112
-rw-r--r--public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html46
-rw-r--r--public/posts/2022-04-09/phperkaigi-2022-tokens/index.html80
-rw-r--r--public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html12
-rw-r--r--public/posts/2022-05-01/phperkaigi-2022/index.html24
-rw-r--r--public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html24
-rw-r--r--public/posts/2022-08-31/support-for-communty-is-employee-benefits/index.html4
-rw-r--r--public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html64
11 files changed, 239 insertions, 239 deletions
diff --git a/public/posts/2021-03-30/phperkaigi-2021/index.html b/public/posts/2021-03-30/phperkaigi-2021/index.html
index 2e7df8c..172f83a 100644
--- a/public/posts/2021-03-30/phperkaigi-2021/index.html
+++ b/public/posts/2021-03-30/phperkaigi-2021/index.html
@@ -59,8 +59,8 @@
</li>
</ol>
</section>
- <section id="section--_phperkaigi_2021_参加レポ">
- <h2><a href="#section--_phperkaigi_2021_参加レポ">PHPerKaigi 2021 参加レポ</a></h2>
+ <section id="section--report">
+ <h2><a href="#section--report">PHPerKaigi 2021 参加レポ</a></h2>
<p>
2021-03-26 から 2021-03-28 にかけて開催された、 <a href="https://phperkaigi.jp/2021/">PHPerKaigi 2021</a> に一般参加者として参加した。 弊社 <a href="https://www.dgcircus.com/">デジタルサーカス株式会社</a> (今年1月から勤務) はダイヤモンドスポンサーとなっており、スポンサー枠のチケットを使わせていただいた。
</p>
@@ -73,8 +73,8 @@
発表はトラック A、B に分かれていたのだが、今回はすべて A トラックを視聴している (切り替えるのが面倒だっただけ)。
</p>
- <section id="section--_凡例">
- <h3><a href="#section--_凡例">凡例</a></h3>
+ <section id="section--report-legend">
+ <h3><a href="#section--report-legend">凡例</a></h3>
<blockquote>
<p>
発表・スライドのメモ (引用ではない)
@@ -86,10 +86,10 @@
</p>
</section>
- <section id="section--_day_0_前夜祭_20210327">
- <h3><a href="#section--_day_0_前夜祭_20210327">Day 0 前夜祭 (2021/03/27)</a></h3>
- <section id="section--_1730_a">
- <h4><a href="#section--_1730_a">17:30 [A]</a></h4>
+ <section id="section--report--day-0">
+ <h3><a href="#section--report--day-0">Day 0 前夜祭 (2021/03/27)</a></h3>
+ <section id="section--report--day-0--1730-a">
+ <h4><a href="#section--report--day-0--1730-a">17:30 [A]</a></h4>
<p>
PHP で AWS Lambda
</p>
@@ -155,8 +155,8 @@
</p>
</section>
- <section id="section--_1810_a">
- <h4><a href="#section--_1810_a">18:10 [A]</a></h4>
+ <section id="section--report--day-0--1810-a">
+ <h4><a href="#section--report--day-0--1810-a">18:10 [A]</a></h4>
<p>
大規模サイトの SEO
</p>
@@ -222,8 +222,8 @@
</p>
</section>
- <section id="section--_1850_a">
- <h4><a href="#section--_1850_a">18:50 [A]</a></h4>
+ <section id="section--report--day-0--1850-a">
+ <h4><a href="#section--report--day-0--1850-a">18:50 [A]</a></h4>
<blockquote>
<p>
知覚可能 操作可能 理解可能 堅牢 ちゃんとしたHTMLを書く (閉じタグ・入れ子構造など)
@@ -314,8 +314,8 @@
</p>
</section>
- <section id="section--_1930_a">
- <h4><a href="#section--_1930_a">19:30 [A]</a></h4>
+ <section id="section--report--day-0--1930-a">
+ <h4><a href="#section--report--day-0--1930-a">19:30 [A]</a></h4>
<p>
PHP で FUSE
</p>
@@ -406,10 +406,10 @@
</section>
</section>
- <section id="section--_day_1_20210327">
- <h3><a href="#section--_day_1_20210327">Day 1 (2021/03/27)</a></h3>
- <section id="section--_1050_a">
- <h4><a href="#section--_1050_a">10:50 [A]</a></h4>
+ <section id="section--report--day-1">
+ <h3><a href="#section--report--day-1">Day 1 (2021/03/27)</a></h3>
+ <section id="section--report--day-1--1050-a">
+ <h4><a href="#section--report--day-1--1050-a">10:50 [A]</a></h4>
<p>
ATDD
</p>
@@ -556,8 +556,8 @@
</p>
</section>
- <section id="section--_1150_a">
- <h4><a href="#section--_1150_a">11:50 [A]</a></h4>
+ <section id="section--report--day-1--1150-a">
+ <h4><a href="#section--report--day-1--1150-a">11:50 [A]</a></h4>
<p>
型解析を用いたリファクタリング
</p>
@@ -611,15 +611,15 @@
</p>
</section>
- <section id="section--_1230_a">
- <h4><a href="#section--_1230_a">12:30 [A]</a></h4>
+ <section id="section--report--day-1--1230-a">
+ <h4><a href="#section--report--day-1--1230-a">12:30 [A]</a></h4>
<p>
昼食をとっていた。事前に何か食料を買っておくべきだった。
</p>
</section>
- <section id="section--_1310_a">
- <h4><a href="#section--_1310_a">13:10 [A]</a></h4>
+ <section id="section--report--day-1--1310-a">
+ <h4><a href="#section--report--day-1--1310-a">13:10 [A]</a></h4>
<p>
Documentation as Code
</p>
@@ -691,8 +691,8 @@
</p>
</section>
- <section id="section--_1410_a">
- <h4><a href="#section--_1410_a">14:10 [A]</a></h4>
+ <section id="section--report--day-1--1410-a">
+ <h4><a href="#section--report--day-1--1410-a">14:10 [A]</a></h4>
<p>
cookie による session 管理
</p>
@@ -702,8 +702,8 @@
</p>
</section>
- <section id="section--_1450_a">
- <h4><a href="#section--_1450_a">14:50 [A]</a></h4>
+ <section id="section--report--day-1--1450-a">
+ <h4><a href="#section--report--day-1--1450-a">14:50 [A]</a></h4>
<p>
PHP のエラーと例外
</p>
@@ -842,8 +842,8 @@
</p>
</section>
- <section id="section--_1530_a">
- <h4><a href="#section--_1530_a">15:30 [A]</a></h4>
+ <section id="section--report--day-1--1530-a">
+ <h4><a href="#section--report--day-1--1530-a">15:30 [A]</a></h4>
<p>
Laravel のメール認証
</p>
@@ -853,8 +853,8 @@
</p>
</section>
- <section id="section--_1610_a">
- <h4><a href="#section--_1610_a">16:10 [A]</a></h4>
+ <section id="section--report--day-1--1610-a">
+ <h4><a href="#section--report--day-1--1610-a">16:10 [A]</a></h4>
<p>
gRPC
</p>
@@ -918,8 +918,8 @@
</p>
</section>
- <section id="section--_1650_a">
- <h4><a href="#section--_1650_a">16:50 [A]</a></h4>
+ <section id="section--report--day-1--1650-a">
+ <h4><a href="#section--report--day-1--1650-a">16:50 [A]</a></h4>
<p>
アーキテクチャテスト
</p>
@@ -978,8 +978,8 @@
</section>
</section>
- <section id="section--_day_2_20210328">
- <h3><a href="#section--_day_2_20210328">Day 2 (2021/03/28)</a></h3>
+ <section id="section--report--day-2">
+ <h3><a href="#section--report--day-2">Day 2 (2021/03/28)</a></h3>
<p>
冒頭に書いた通り、2日目から体調が悪くまともに聴けていない。途中までは頭痛を我慢しつつ見ていたのだが、まともに入ってこなかった。
</p>
@@ -989,8 +989,8 @@
</p>
</section>
- <section id="section--_全体の感想">
- <h3><a href="#section--_全体の感想">全体の感想</a></h3>
+ <section id="section--report--comments">
+ <h3><a href="#section--report--comments">全体の感想</a></h3>
<p>
Day 2 にほとんど参加できなかったのは残念だが、イベント自体は大変楽しく、また興味深いものであった。自分がまったく知らない領域の話を聞けるのはこうしたイベントならではだと感じる。オンライン開催ゆえ現地に行く必要がなく、気軽に参加できたのも (特に初参加者として) 嬉しいポイントだった。
</p>
diff --git a/public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html b/public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html
index 097d417..ba31a99 100644
--- a/public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html
+++ b/public/posts/2021-10-02/ruby-then-keyword-and-case-in/index.html
@@ -65,15 +65,15 @@
</hr>
</p>
- <section id="section--_tl_dr">
- <h2><a href="#section--_tl_dr">TL; DR</a></h2>
+ <section id="section--tl-dr">
+ <h2><a href="#section--tl-dr">TL; DR</a></h2>
<p>
<code>case</code> - <code>in</code> によるパターンマッチング構文でも、<code>case</code> - <code>when</code> と同じように <code>then</code> が使える (場合によっては使う必要がある)。
</p>
</section>
- <section id="section--_then_とは">
- <h2><a href="#section--_then_とは"><code>then</code> とは</a></h2>
+ <section id="section--what-is-then-keyword">
+ <h2><a href="#section--what-is-then-keyword"><code>then</code> とは</a></h2>
<p>
使われることは稀だが、Ruby では <code>then</code> がキーワードになっている。次のように使う:
</p>
@@ -110,8 +110,8 @@
<span class="hljs-keyword">end</span></code></pre>
</section>
- <section id="section--_なぜ普段は書かなくてもよいのか">
- <h2><a href="#section--_なぜ普段は書かなくてもよいのか">なぜ普段は書かなくてもよいのか</a></h2>
+ <section id="section--why-then-is-usually-unnecessary">
+ <h2><a href="#section--why-then-is-usually-unnecessary">なぜ普段は書かなくてもよいのか</a></h2>
<p>
普通 Ruby のコードで <code>then</code> を書くことはない。なぜか。次のコードを実行してみるとわかる。
</p>
@@ -144,8 +144,8 @@ puts <span class="hljs-string">&#x27;Hello, World!&#x27;</span> <span class="hlj
</p>
</section>
- <section id="section--_なぜ_then_や_や改行が必要か">
- <h2><a href="#section--_なぜ_then_や_や改行が必要か">なぜ <code>then</code> や <code>;</code> や改行が必要か</a></h2>
+ <section id="section--why-then-or-linebreak-is-needed">
+ <h2><a href="#section--why-then-or-linebreak-is-needed">なぜ <code>then</code> や <code>;</code> や改行が必要か</a></h2>
<p>
なぜ <code>then</code> や <code>;</code> や改行 (以下 「<code>then</code> 等」) が必要なのだろうか。次の例を見てほしい:
</p>
@@ -175,8 +175,8 @@ b
</p>
</section>
- <section id="section--_case_in_における_then">
- <h2><a href="#section--_case_in_における_then"><code>case</code> - <code>in</code> における <code>then</code></a></h2>
+ <section id="section--then-in-case-in">
+ <h2><a href="#section--then-in-case-in"><code>case</code> - <code>in</code> における <code>then</code></a></h2>
<p>
ようやく本題にたどり着いた。来る Ruby 3.0 では <code>case</code> と <code>in</code> キーワードを使ったパターンマッチングの構文が入る予定である。この構文でもパターン部との区切りとして <code>then</code> 等が必要になる。 (現在の) Ruby には formal な形式での文法仕様は存在しないので、yacc の定義ファイルを参照した (yacc の説明は省略)。
</p>
@@ -259,8 +259,8 @@ p_cases
<span class="hljs-keyword">end</span></code></pre>
</section>
- <section id="section--_まとめ">
- <h2><a href="#section--_まとめ">まとめ</a></h2>
+ <section id="section--outro">
+ <h2><a href="#section--outro">まとめ</a></h2>
<ul>
<li>
<code>if</code> や <code>case</code> の条件の後ろには <code>then</code>、<code>;</code>、改行のいずれかが必要
diff --git a/public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html b/public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html
index 9e77a85..8c6e269 100644
--- a/public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html
+++ b/public/posts/2021-10-02/rust-where-are-primitive-types-from/index.html
@@ -62,8 +62,8 @@
</hr>
</p>
- <section id="section--_前置き">
- <h2><a href="#section--_前置き">前置き</a></h2>
+ <section id="section--intro">
+ <h2><a href="#section--intro">前置き</a></h2>
<p>
Rust において、プリミティブ型の名前は予約語でない。したがって、次のコードは合法である。
</p>
@@ -100,8 +100,8 @@
</blockquote>
</section>
- <section id="section--_調査">
- <h2><a href="#section--_調査">調査</a></h2>
+ <section id="section--code-reading">
+ <h2><a href="#section--code-reading">調査</a></h2>
<p>
調査に使用したソース (調査時点での最新 master)
</p>
@@ -242,8 +242,8 @@ rustc_resolve/src/lib.rs: table.insert(sym::i128, Int(IntTy::I128));
</p>
</section>
- <section id="section--_まとめ">
- <h2><a href="#section--_まとめ">まとめ</a></h2>
+ <section id="section--outro">
+ <h2><a href="#section--outro">まとめ</a></h2>
<p>
Rust のプリミティブ型は予約語ではない。名前解決の最終段階で特別扱いされ、他に同名の型が見つかっていなければ対応するプリミティブ型に解決される。
</p>
diff --git a/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html b/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html
index 44ee689..b9455f7 100644
--- a/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html
+++ b/public/posts/2021-10-02/vim-difference-between-autocmd-bufwrite-and-bufwritepre/index.html
@@ -62,15 +62,15 @@
</hr>
</p>
- <section id="section--_tl_dr">
- <h2><a href="#section--_tl_dr">TL; DR</a></h2>
+ <section id="section--tl-dr">
+ <h2><a href="#section--tl-dr">TL; DR</a></h2>
<p>
違いはない。ただのエイリアス。
</p>
</section>
- <section id="section--_調査記録">
- <h2><a href="#section--_調査記録">調査記録</a></h2>
+ <section id="section--code-reading">
+ <h2><a href="#section--code-reading">調査記録</a></h2>
<p>
Vim の autocmd events には似通った名前のものがいくつかある。大抵は <code>:help</code> に説明があるが、この記事のタイトルにある2つを含めた以下のイベントには、その違いについて説明がない。
</p>
@@ -109,8 +109,8 @@
</p>
</blockquote>
- <section id="section--_vim_のソースコード">
- <h3><a href="#section--_vim_のソースコード">vim のソースコード</a></h3>
+ <section id="section--code-reading--vim">
+ <h3><a href="#section--code-reading--vim">vim のソースコード</a></h3>
<p>
以下は、autocmd events の名前と内部で使われている整数値とのマッピングを定義している箇所である。見ての通り、上でエイリアスではないかと述べた3組には、それぞれ同じ内部値が使われている。
</p>
@@ -139,8 +139,8 @@
{<span class="hljs-string">&quot;BufWritePre&quot;</span>, EVENT_BUFWRITEPRE},</code></pre>
</section>
- <section id="section--_neovim_のソースコード">
- <h3><a href="#section--_neovim_のソースコード">neovim のソースコード</a></h3>
+ <section id="section--code-reading--neovim">
+ <h3><a href="#section--code-reading--neovim">neovim のソースコード</a></h3>
<p>
neovim の場合でも同様のマッピングが定義されているが、こちらの場合は Lua で書かれている。以下にある通り、はっきり <code>aliases</code> と書かれている。
</p>
@@ -160,59 +160,59 @@ FileEncoding = <span class="hljs-string">&#x27;EncodingChanged&#x27;</span>,
ところで、上では取り上げなかった <code>FileEncoding</code> だが、これは <code>:help FileEncoding</code> にしっかりと書いてある。
</p>
- <pre class="highlight monospaced"><code> *FileEncoding*
- FileEncoding Obsolete. It still works and is equivalent
+ <pre class="highlight monospaced"><code> *FileEncoding*
+FileEncoding Obsolete. It still works and is equivalent
to |EncodingChanged|.</code></pre>
</section>
+ </section>
+
+ <section id="section--outro">
+ <h2><a href="#section--outro">まとめ</a></h2>
+ <p>
+ 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。
+ </p>
- <section id="section--_まとめ">
- <h3><a href="#section--_まとめ">まとめ</a></h3>
- <p>
- 記事タイトルについて言えば、どちらも変わらないので好きな方を使えばよい。あえて言えば、次のようになるだろう。
- </p>
+ <ul>
+ <li>
+ <code>BufAdd</code>/<code>BufCreate</code>
+ <ul>
+ <li>
+ → <code>BufCreate</code> は歴史的な理由により (&quot;for historic reasons&quot;) 存在しているため、新しい方 (<code>BufAdd</code>) を使う
+ </li>
+ </ul>
+ </li>
- <ul>
- <li>
- <code>BufAdd</code>/<code>BufCreate</code>
- <ul>
- <li>
- → <code>BufCreate</code> は歴史的な理由により (&quot;for historic reasons&quot;) 存在しているため、新しい方 (<code>BufAdd</code>) を使う
- </li>
- </ul>
- </li>
-
- <li>
- <code>BufRead</code>/<code>BufReadPost</code>
- <ul>
- <li>
- → <code>BufReadPre</code> との対称性のため、あるいは <code>BufWritePost</code> との対称性のため <code>BufReadPost</code> を使う
- </li>
- </ul>
- </li>
-
- <li>
- <code>BufWrite</code>/<code>BufWritePre</code>
- <ul>
- <li>
- → <code>BufWritePost</code> との対称性のため、あるいは <code>BufReadPre</code> との対称性のため <code>BufWritePre</code> を使う
- </li>
- </ul>
- </li>
-
- <li>
- <code>FileEncoding</code>/<code>EncodingChanged</code>
- <ul>
- <li>
- → <code>FileEncoding</code> は <code>`Obsolete&apos;&apos; と明言されているので、`EncodingChanged</code> を使う
- </li>
- </ul>
- </li>
- </ul>
+ <li>
+ <code>BufRead</code>/<code>BufReadPost</code>
+ <ul>
+ <li>
+ → <code>BufReadPre</code> との対称性のため、あるいは <code>BufWritePost</code> との対称性のため <code>BufReadPost</code> を使う
+ </li>
+ </ul>
+ </li>
- <p>
- ところでこの調査で知ったのだが、<code>BufRead</code> と <code>BufWrite</code> は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら <code>Pre</code>/<code>Post</code> 付きのものを使った方が分かりやすいだろう。
- </p>
- </section>
+ <li>
+ <code>BufWrite</code>/<code>BufWritePre</code>
+ <ul>
+ <li>
+ → <code>BufWritePost</code> との対称性のため、あるいは <code>BufReadPre</code> との対称性のため <code>BufWritePre</code> を使う
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ <code>FileEncoding</code>/<code>EncodingChanged</code>
+ <ul>
+ <li>
+ → <code>FileEncoding</code> は <code>`Obsolete&apos;&apos; と明言されているので、`EncodingChanged</code> を使う
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <p>
+ ところでこの調査で知ったのだが、<code>BufRead</code> と <code>BufWrite</code> は上にある通り発火するタイミングが「後」と「前」で対称性がない。可能なら <code>Pre</code>/<code>Post</code> 付きのものを使った方が分かりやすいだろう。
+ </p>
</section>
</div>
</article>
diff --git a/public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html b/public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html
index 6b9e423..320e80e 100644
--- a/public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html
+++ b/public/posts/2021-10-02/vim-swap-order-of-selected-lines/index.html
@@ -62,8 +62,17 @@
</hr>
</p>
- <section id="section--_バージョン情報">
- <h2><a href="#section--_バージョン情報">バージョン情報</a></h2>
+ <section id="section--tl-dr">
+ <h2><a href="#section--tl-dr">TL; DR</a></h2>
+ <pre class="highlight" language="vim" linenumbering="unnumbered"><code class="highlight"><span class="hljs-comment">&quot; License: Public Domain</span>
+
+command! -bar -<span class="hljs-built_in">range</span>=%
+ \ Reverse
+ \ keeppatterns <span class="hljs-symbol">&lt;line1&gt;</span>,<span class="hljs-symbol">&lt;line2&gt;</span>g/^/<span class="hljs-keyword">m</span><span class="hljs-symbol">&lt;line1&gt;</span>-<span class="hljs-number">1</span></code></pre>
+ </section>
+
+ <section id="section--version">
+ <h2><a href="#section--version">バージョン情報</a></h2>
<p>
<code>:version</code> の一部
</p>
@@ -75,10 +84,10 @@
</blockquote>
</section>
- <section id="section--_よく紹介されている手法">
- <h2><a href="#section--_よく紹介されている手法">よく紹介されている手法</a></h2>
- <section id="section--_tac_tail">
- <h3><a href="#section--_tac_tail"><code>tac</code> / <code>tail</code></a></h3>
+ <section id="section--existing-solution">
+ <h2><a href="#section--existing-solution">よく紹介されている手法</a></h2>
+ <section id="section--existing-solution--external-commands">
+ <h3><a href="#section--existing-solution--external-commands"><code>tac</code> / <code>tail</code></a></h3>
<p>
<code>tac</code> や <code>tail -r</code> などの外部コマンドを <code>!</code> を使って呼び出し、置き換える。
</p>
@@ -94,8 +103,8 @@
</p>
</section>
- <section id="section--_gm0">
- <h3><a href="#section--_gm0"><code>:g/^/m0</code></a></h3>
+ <section id="section--existing-solution--global-command">
+ <h3><a href="#section--existing-solution--global-command"><code>:g/^/m0</code></a></h3>
<p>
こちらは外部コマンドに頼らず、Vim の機能のみを使う。<code>g</code> は <code>:global</code> コマンドの、<code>m</code> は <code>:move</code> コマンドの略
</p>
@@ -138,8 +147,8 @@
</section>
</section>
- <section id="section--_gm0_の問題点">
- <h2><a href="#section--_gm0_の問題点"><code>:g/^/m0</code> の問題点</a></h2>
+ <section id="section--problem-of-global-command">
+ <h2><a href="#section--problem-of-global-command"><code>:g/^/m0</code> の問題点</a></h2>
<p>
<code>:global</code> コマンドは各行に対してマッチングを行う際、現在の検索パターンを上書きしてしまう。<code>^</code> は行の先頭にマッチするため、結果として全ての行がハイライトされてしまう。<code>&apos;hlsearch&apos;</code> オプションを無効にしている場合その限りではないが、その場合でも直前の検索パターンが失われてしまうと <code>n</code> コマンドなどの際に不便である。
</p>
@@ -151,8 +160,8 @@
</blockquote>
</section>
- <section id="section--_解決策">
- <h2><a href="#section--_解決策">解決策</a></h2>
+ <section id="section--solution">
+ <h2><a href="#section--solution">解決策</a></h2>
<blockquote>
<p>
[2020/9/28追記] より簡潔な方法を見つけたので次節に追記した
@@ -212,8 +221,8 @@ command! -bar -<span class="hljs-built_in">range</span>=%
</p>
</section>
- <section id="section--_解決策_改訂版">
- <h2><a href="#section--_解決策_改訂版">解決策 (改訂版)</a></h2>
+ <section id="section--solution-revised">
+ <h2><a href="#section--solution-revised">解決策 (改訂版)</a></h2>
<blockquote>
<p>
[2020/9/28追記] より簡潔な方法を見つけたため追記する
@@ -234,15 +243,6 @@ command! -bar -<span class="hljs-built_in">range</span>=%
</p>
</blockquote>
</section>
-
- <section id="section--_コピペ用再掲">
- <h2><a href="#section--_コピペ用再掲">コピペ用再掲</a></h2>
- <pre class="highlight" language="vim" linenumbering="unnumbered"><code class="highlight"><span class="hljs-comment">&quot; License: Public Domain</span>
-
-command! -bar -<span class="hljs-built_in">range</span>=%
- \ Reverse
- \ keeppatterns <span class="hljs-symbol">&lt;line1&gt;</span>,<span class="hljs-symbol">&lt;line2&gt;</span>g/^/<span class="hljs-keyword">m</span><span class="hljs-symbol">&lt;line1&gt;</span>-<span class="hljs-number">1</span></code></pre>
- </section>
</div>
</article>
</main>
diff --git a/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html b/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html
index d834bb8..518e744 100644
--- a/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html
+++ b/public/posts/2022-04-09/phperkaigi-2022-tokens/index.html
@@ -73,8 +73,8 @@
</p>
</section>
- <section id="section--_第1問_brainf_ck_php">
- <h2><a href="#section--_第1問_brainf_ck_php">第1問 brainf_ck.php</a></h2>
+ <section id="section--q1-brainfuck">
+ <h2><a href="#section--q1-brainfuck">第1問 brainf_ck.php</a></h2>
<p>
ソースコードはこちら。実行には PHP 8.1 以上が必要なので注意。
</p>
@@ -153,17 +153,17 @@ $🐘([
この問題は、単に適切なバージョンの PHP で動かせばトークンが得られる。
</p>
- <section id="section--_解説">
- <h3><a href="#section--_解説">解説</a></h3>
- <section id="section--_絵文字">
- <h4><a href="#section--_絵文字">絵文字</a></h4>
+ <section id="section--q1-brainfuck--commentary">
+ <h3><a href="#section--q1-brainfuck--commentary">解説</a></h3>
+ <section id="section--q1-brainfuck--commentary--emoji">
+ <h4><a href="#section--q1-brainfuck--commentary--emoji">絵文字</a></h4>
<p>
まず目につくのは大量の絵文字だろう。 PHP は識別子に使用できる文字の範囲が広く、絵文字も使うことができる。
</p>
</section>
- <section id="section--_プログラム全体">
- <h4><a href="#section--_プログラム全体">プログラム全体</a></h4>
+ <section id="section--q1-brainfuck--commentary--brainfuck">
+ <h4><a href="#section--q1-brainfuck--commentary--brainfuck">プログラム全体</a></h4>
<p>
Brainf*ck のインタプリタとプログラムになっている。 Brainf*ck とは、難解プログラミング言語のひとつであり、ここで説明するよりも Wikipedia の該当ページを読んだ方がよい。
</p>
@@ -246,22 +246,22 @@ $🐘([
</p>
</section>
- <section id="section--_絵文字の選択">
- <h4><a href="#section--_絵文字の選択">絵文字の選択</a></h4>
+ <section id="section--q1-brainfuck--commentary--emoji-selection">
+ <h4><a href="#section--q1-brainfuck--commentary--emoji-selection">絵文字の選択</a></h4>
<p>
おおよそ意味に合致するよう選んでいるが、<code>$🤡</code> と <code>$🎪</code> は弊社デジタルサーカスにちなんでいる。 また、<code>$🐘</code> は PHP のマスコットの象に由来する。
</p>
</section>
- <section id="section--_strict_types">
- <h4><a href="#section--_strict_types">strict_types</a></h4>
+ <section id="section--q1-brainfuck--commentary--strict-types">
+ <h4><a href="#section--q1-brainfuck--commentary--strict-types">strict_types</a></h4>
<p>
<code>declare</code> 文の <code>strict_types</code> に指定できるのは、<code>0</code> か <code>1</code> の数値リテラルだが、 <code>0x0</code> や <code>0b1</code> のような値も受け付ける。 今回は、PHP 8.1 から追加された、<code>0O</code> または <code>0o</code> から始まる八進数リテラルを使った。
</p>
</section>
- <section id="section--_url">
- <h4><a href="#section--_url">URL</a></h4>
+ <section id="section--q1-brainfuck--commentary--url">
+ <h4><a href="#section--q1-brainfuck--commentary--url">URL</a></h4>
<p>
ソースコードのライセンスを示したこの部分だが、
</p>
@@ -273,8 +273,8 @@ $🐘([
</p>
</section>
- <section id="section--_リテラルなしで数値を生成する">
- <h4><a href="#section--_リテラルなしで数値を生成する">リテラルなしで数値を生成する</a></h4>
+ <section id="section--q1-brainfuck--commentary--numbers">
+ <h4><a href="#section--q1-brainfuck--commentary--numbers">リテラルなしで数値を生成する</a></h4>
<p>
ソースコード中に、ほとんど数値リテラルが書かれていないことにお気づきだろうか。 PHP では、型変換を利用することで任意の整数を作り出すことができる。
</p>
@@ -294,15 +294,15 @@ $🐘([
</p>
</section>
- <section id="section--_if_文なしで条件分岐">
- <h4><a href="#section--_if_文なしで条件分岐"><code>if</code> 文なしで条件分岐</a></h4>
+ <section id="section--q1-brainfuck--commentary--conditionals">
+ <h4><a href="#section--q1-brainfuck--commentary--conditionals"><code>if</code> 文なしで条件分岐</a></h4>
<p>
三項演算子ないし <code>match</code> 式を使うことで、<code>if</code> を一切書かずに条件分岐ができる。 また、<code>&amp;&amp;</code> / <code>||</code> も使えることがある。 遅延評価が不要なケースでは、<code>[$t, $f][$cond]</code> のような形で分岐することもできる。
</p>
</section>
- <section id="section--_whilefor_文なしでループ">
- <h4><a href="#section--_whilefor_文なしでループ"><code>while</code>、<code>for</code> 文なしでループ</a></h4>
+ <section id="section--q1-brainfuck--commentary--loops">
+ <h4><a href="#section--q1-brainfuck--commentary--loops"><code>while</code>、<code>for</code> 文なしでループ</a></h4>
<p>
不動点コンビネータを使って無名再帰する (詳しい説明は省略する。これらの単語で検索してほしい)。 ここでは、一般に Z コンビネータとして知られるものを使った (<code>$z</code>)。
</p>
@@ -318,8 +318,8 @@ $🐘([
</section>
</section>
- <section id="section--_第2問_riddle_php">
- <h2><a href="#section--_第2問_riddle_php">第2問 riddle.php</a></h2>
+ <section id="section--q2-riddle">
+ <h2><a href="#section--q2-riddle">第2問 riddle.php</a></h2>
<p>
ソースコードはこちら。実行には PHP 8.0 以上が必要なので注意。
</p>
@@ -367,8 +367,8 @@ $🐘([
ここでは、私の想定解を解説する。
</p>
- <section id="section--_読解">
- <h3><a href="#section--_読解">読解</a></h3>
+ <section id="section--q2-riddle--code-reading">
+ <h3><a href="#section--q2-riddle--code-reading">読解</a></h3>
<p>
まずはソースコードを読んでいく。
</p>
@@ -406,8 +406,8 @@ $🐘([
</p>
</section>
- <section id="section--_ヒント">
- <h3><a href="#section--_ヒント">ヒント</a></h3>
+ <section id="section--q2-riddle--hint">
+ <h3><a href="#section--q2-riddle--hint">ヒント</a></h3>
<p>
次に、ソースコードに書いてあるヒントを読んでいく。
</p>
@@ -435,8 +435,8 @@ $🐘([
</p>
</section>
- <section id="section--_解く">
- <h3><a href="#section--_解く">解く</a></h3>
+ <section id="section--q2-riddle--solve">
+ <h3><a href="#section--q2-riddle--solve">解く</a></h3>
<p>
ここまでわかれば、あと一歩で解ける。すなわち、<code>0x14B499C</code> が <code>#</code> に変換されるような <code>N</code> を見つければよい。
</p>
@@ -495,8 +495,8 @@ $🐘([
</section>
</section>
- <section id="section--_第3問_toquine_php">
- <h2><a href="#section--_第3問_toquine_php">第3問 toquine.php</a></h2>
+ <section id="section--q3-toquine">
+ <h2><a href="#section--q3-toquine">第3問 toquine.php</a></h2>
<p>
ソースコードはこちら。
</p>
@@ -541,10 +541,10 @@ Q;
実際にはもう少しパイプで繋げなければならない。
</p>
- <section id="section--_解説_2">
- <h3><a href="#section--_解説_2">解説</a></h3>
- <section id="section--_プログラム全体_2">
- <h4><a href="#section--_プログラム全体_2">プログラム全体</a></h4>
+ <section id="section--q3-toquine--commentary">
+ <h3><a href="#section--q3-toquine--commentary">解説</a></h3>
+ <section id="section--q3-toquine--commentary--quine">
+ <h4><a href="#section--q3-toquine--commentary--quine">プログラム全体</a></h4>
<p>
コメントにもあるとおり、これは quine (風) のプログラムになっている。 Quine とは、自分のソースコードをそっくりそのまま出力するようなプログラムのことである。
</p>
@@ -554,22 +554,22 @@ Q;
</p>
</section>
- <section id="section--_トークン">
- <h4><a href="#section--_トークン">トークン</a></h4>
+ <section id="section--q3-toquine--commentary--tokens">
+ <h4><a href="#section--q3-toquine--commentary--tokens">トークン</a></h4>
<p>
<code>$xs</code> がトークンに対応している。変換のロジックは <code>riddle.php</code> とほぼ同じなので省略する。
</p>
</section>
- <section id="section--_状態保持">
- <h4><a href="#section--_状態保持">状態保持</a></h4>
+ <section id="section--q3-toquine--commentary--states">
+ <h4><a href="#section--q3-toquine--commentary--states">状態保持</a></h4>
<p>
トークンの何文字目まで出力したかを、ソースコードを変えずに (quine なので) 覚えておく必要がある。 このプログラムでは、トークンが出力されるとソースコードがだんだんと長くなっていくのを利用して、<code><em>LINE</em></code> から情報を取得している。
</p>
</section>
- <section id="section--_rot_13">
- <h4><a href="#section--_rot_13">ROT 13</a></h4>
+ <section id="section--q3-toquine--commentary--rot-13">
+ <h4><a href="#section--q3-toquine--commentary--rot-13">ROT 13</a></h4>
<p>
Quine は、素朴に書くとプログラムの一部が 2回記述されてしまう。 これがあまり美しくないので、<code>toquine.php</code> では、ROT 13 変換を使って難読化した。
</p>
diff --git a/public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html b/public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html
index cd997f7..4475dc5 100644
--- a/public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html
+++ b/public/posts/2022-04-24/term-banner-write-tool-showing-banner-in-terminal/index.html
@@ -71,8 +71,8 @@
</p>
</section>
- <section id="section--_motivation">
- <h2><a href="#section--_motivation">Motivation</a></h2>
+ <section id="section--motivation">
+ <h2><a href="#section--motivation">Motivation</a></h2>
<p>
以前、https://github.com/nsfisis/big-clock-mode[big-clock-mode] という似たようなプログラムを書いた。 これは tmux の <code>:clock-mode</code> コマンドに着想を得たもので、<code>:clock-mode</code> よりも大きく現在時刻を表示する。
</p>
@@ -94,8 +94,8 @@
</p>
</section>
- <section id="section--_プログラム">
- <h2><a href="#section--_プログラム">プログラム</a></h2>
+ <section id="section--program">
+ <h2><a href="#section--program">プログラム</a></h2>
<p>
全体の流れは次のようになっている。
</p>
@@ -123,8 +123,8 @@
</p>
</section>
- <section id="section--_フォント">
- <h2><a href="#section--_フォント">フォント</a></h2>
+ <section id="section--font">
+ <h2><a href="#section--font">フォント</a></h2>
<p>
フリーの 8x8 ビットマップフォントである、https://littlelimit.net/misaki.htm[美咲フォント 2021-05-05a 版] を使わせていただいた。
</p>
diff --git a/public/posts/2022-05-01/phperkaigi-2022/index.html b/public/posts/2022-05-01/phperkaigi-2022/index.html
index f4c89fa..df97547 100644
--- a/public/posts/2022-05-01/phperkaigi-2022/index.html
+++ b/public/posts/2022-05-01/phperkaigi-2022/index.html
@@ -70,10 +70,10 @@
</p>
</section>
- <section id="section--_感想">
- <h2><a href="#section--_感想">感想</a></h2>
- <section id="section--_厳選おすすめトーク">
- <h3><a href="#section--_厳選おすすめトーク">厳選おすすめトーク</a></h3>
+ <section id="section--comments">
+ <h2><a href="#section--comments">感想</a></h2>
+ <section id="section--comments--great-sessions">
+ <h3><a href="#section--comments--great-sessions">厳選おすすめトーク</a></h3>
<p>
多くの素晴らしいトークの中から、特におすすめのものを 5つ選んだ。是非聞いてほしい。引用部分は、リンク先プロポーザルから引用している。
</p>
@@ -175,15 +175,15 @@
</blockquote>
</section>
- <section id="section--_トークン問題の作成">
- <h3><a href="#section--_トークン問題の作成">トークン問題の作成</a></h3>
+ <section id="section--comments--token-quizzes">
+ <h3><a href="#section--comments--token-quizzes">トークン問題の作成</a></h3>
<p>
今回は、PHPer チャレンジ用に弊社のトークン問題を 3題作成した。こちらについては<a href="/posts/2022-04-09/phperkaigi-2022-tokens">別途記事にしている</a>ので、そちらを参照されたい。
</p>
</section>
- <section id="section--_phper_チャレンジ">
- <h3><a href="#section--_phper_チャレンジ">PHPer チャレンジ</a></h3>
+ <section id="section--comments--phper-challenge">
+ <h3><a href="#section--comments--phper-challenge">PHPer チャレンジ</a></h3>
<p>
<a href="https://fortee.jp/phperkaigi-2022/challenge">1位</a>になった。
<br>
@@ -191,8 +191,8 @@
</p>
</section>
- <section id="section--_カンファレンス全体への感想">
- <h3><a href="#section--_カンファレンス全体への感想">カンファレンス全体への感想</a></h3>
+ <section id="section--comments--conference">
+ <h3><a href="#section--comments--conference">カンファレンス全体への感想</a></h3>
<p>
<a href="/posts/2021-03-30/phperkaigi-2021">去年の参加レポ</a> では、こんなことを書いた。
</p>
@@ -221,8 +221,8 @@
</section>
</section>
- <section id="section--_そして来年へ">
- <h2><a href="#section--_そして来年へ">そして来年へ……?</a></h2>
+ <section id="section--next-year">
+ <h2><a href="#section--next-year">そして来年へ……?</a></h2>
<p>
PHPerKaigi 2023 があるかどうか存じ上げないが、あるとすれば、次の 4つを目標としたい。
</p>
diff --git a/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html b/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html
index 0fb3911..6aa732d 100644
--- a/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html
+++ b/public/posts/2022-08-27/php-conference-okinawa-code-golf/index.html
@@ -76,8 +76,8 @@
</p>
</section>
- <section id="section--_解">
- <h2><a href="#section--_解">解</a></h2>
+ <section id="section--solution">
+ <h2><a href="#section--solution">解</a></h2>
<p>
細かいレギュレーションは不明だったので、勝手に定めた。
</p>
@@ -133,24 +133,24 @@
<span class="hljs-meta">?&gt;</span>]</code></pre>
</section>
- <section id="section--_使用したテクニック">
- <h2><a href="#section--_使用したテクニック">使用したテクニック</a></h2>
- <section id="section--_指数表記">
- <h3><a href="#section--_指数表記">指数表記</a></h3>
+ <section id="section--techniques">
+ <h2><a href="#section--techniques">使用したテクニック</a></h2>
+ <section id="section--techniques--exponential-notation">
+ <h3><a href="#section--techniques--exponential-notation">指数表記</a></h3>
<p>
割と多くの言語のゴルフで使えるテクニック。<code>e</code> を用いた指数表記で、大きな数を短く表す。このコードでは <code>10000</code>、<code>5000</code>、<code>2000</code>、<code>1000</code> を指数表記している。
</p>
</section>
- <section id="section--_foreach_や_for_の中身を1つの文に">
- <h3><a href="#section--_foreach_や_for_の中身を1つの文に">foreach や for の中身を1つの文に</a></h3>
+ <section id="section--techniques--shorten-loop">
+ <h3><a href="#section--techniques--shorten-loop">foreach や for の中身を1つの文に</a></h3>
<p>
<code>foreach</code>、<code>for</code>、<code>if</code> などの後ろには、通常 <code>{</code> を続けて複数の文を連ねるが、中身の文を1つにしてしまえば、<code>{</code> と <code>}</code> を省略できる。C言語などでも使える。
</p>
</section>
- <section id="section--_r_に初期値を入れない">
- <h3><a href="#section--_r_に初期値を入れない">$r に初期値を入れない</a></h3>
+ <section id="section--techniques--omit-initialization">
+ <h3><a href="#section--techniques--omit-initialization">$r に初期値を入れない</a></h3>
<p>
PHP では、<code>$r[] = &amp;#8230;&amp;#8203;</code> のような配列の末尾に追加する式を実行したとき、<code>$r</code> が未定義だった場合は <code>$r</code> を勝手に定義して空の配列で初期化してくれる。これを利用すると、<code>$r = [];</code> のような初期化が不要になる。
</p>
@@ -164,8 +164,8 @@
</p>
</section>
- <section id="section--_php_タグの外に文字列を置く">
- <h3><a href="#section--_php_タグの外に文字列を置く">PHP タグの外に文字列を置く</a></h3>
+ <section id="section--techniques--put-text-outside-php-tag">
+ <h3><a href="#section--techniques--put-text-outside-php-tag">PHP タグの外に文字列を置く</a></h3>
<p>
PHP では、<code>&lt;?php</code> <code>?&gt;</code> で囲われた部分の外側にある文字列は、そのまま出力される。今回のケースでは、先頭と末尾に必ず <code>[</code> と <code>]</code> を出力するので、そのまま書いてやればよい。
</p>
diff --git a/public/posts/2022-08-31/support-for-communty-is-employee-benefits/index.html b/public/posts/2022-08-31/support-for-communty-is-employee-benefits/index.html
index 30c0019..fec8f70 100644
--- a/public/posts/2022-08-31/support-for-communty-is-employee-benefits/index.html
+++ b/public/posts/2022-08-31/support-for-communty-is-employee-benefits/index.html
@@ -66,8 +66,8 @@
</p>
</section>
- <section id="section--_なぜ">
- <h2><a href="#section--_なぜ">なぜ?</a></h2>
+ <section id="section--why">
+ <h2><a href="#section--why">なぜ?</a></h2>
<p>
組織としての寄付理由は前掲した記事に譲るとして、ここでは、私が社内でこの件を推進した理由について書くことにします。
</p>
diff --git a/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html b/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html
index 23028a3..c0ae51e 100644
--- a/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html
+++ b/public/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line/index.html
@@ -56,15 +56,15 @@
</li>
</ol>
</section>
- <section id="section--_記事の構成について">
- <h2><a href="#section--_記事の構成について">記事の構成について</a></h2>
+ <section id="section--intro">
+ <h2><a href="#section--intro">記事の構成について</a></h2>
<p>
この記事は、普通の fizzbuzz を徐々に変形して最終形にしていく、という構成で書かれている。最終形を見てどのような仕組みで動いているのか解読してから解説を読みたい、というかたがいれば、 <a href="https://gist.github.com/nsfisis/04c227d5a419867472a0b23a83ad2919#file-fizzbuzz-php-2-letters-per-line-and-supports-php-8-x-without-warnings">このページ</a> にソースコードがあるので、そちらを先に見てほしい。
</p>
</section>
- <section id="section--_レギュレーション">
- <h2><a href="#section--_レギュレーション">レギュレーション</a></h2>
+ <section id="section--regulations">
+ <h2><a href="#section--regulations">レギュレーション</a></h2>
<p>
PHP で、次のような制約の下に fizzbuzz を書いた。
</p>
@@ -110,8 +110,8 @@
</p>
</section>
- <section id="section--_主な障害">
- <h2><a href="#section--_主な障害">主な障害</a></h2>
+ <section id="section--problems">
+ <h2><a href="#section--problems">主な障害</a></h2>
<p>
1行あたりの文字数など、適当に改行を挟めばいいだけではないのか?
</p>
@@ -232,7 +232,7 @@ c\
<blockquote>
<ul>
<li>
- 標準的なインストール構成の PHP で実現できること (デフォルトで有効になっていない拡張等を使わないこと)
+ 標準的なインストール構成の PHP で実現できること (デフォルトで有効になっていない拡張等を使わないこと)
</li>
</ul>
</blockquote>
@@ -259,10 +259,10 @@ a&#x27;</span>
</p>
</section>
- <section id="section--_解説">
- <h2><a href="#section--_解説">解説</a></h2>
- <section id="section--_普通の_fizzbuzz">
- <h3><a href="#section--_普通の_fizzbuzz">普通の (?) fizzbuzz</a></h3>
+ <section id="section--commentary">
+ <h2><a href="#section--commentary">解説</a></h2>
+ <section id="section--commentary--normal-fizzbuzz">
+ <h3><a href="#section--commentary--normal-fizzbuzz">普通の (?) fizzbuzz</a></h3>
<p>
まずは普通に書くとしよう。
</p>
@@ -278,8 +278,8 @@ a&#x27;</span>
</p>
</section>
- <section id="section--_for_の排除">
- <h3><a href="#section--_for_の排除"><code>for</code> の排除</a></h3>
+ <section id="section--commentary--remove-keywords">
+ <h3><a href="#section--commentary--remove-keywords"><code>for</code> の排除</a></h3>
<p>
<code>for</code> は、3文字もある長いキーワードである。こんなものは使えない。<code>array_</code> 系の関数を使って、適当に置き換えるとしよう。
</p>
@@ -288,9 +288,9 @@ a&#x27;</span>
<span class="hljs-variable">$s</span> = <span class="hljs-title function_ invoke__">range</span>(<span class="hljs-number">1</span>, <span class="hljs-number">100</span>);
<span class="hljs-title function_ invoke__">array_walk</span>(
- <span class="hljs-variable">$s</span>,
- fn(<span class="hljs-variable">$i</span>) =&gt;
- <span class="hljs-title function_ invoke__">printf</span>(((<span class="hljs-variable">$i</span> % <span class="hljs-number">3</span> ? <span class="hljs-string">&#x27;&#x27;</span> : <span class="hljs-string">&#x27;Fizz&#x27;</span>) . (<span class="hljs-variable">$i</span> % <span class="hljs-number">5</span> ? <span class="hljs-string">&#x27;&#x27;</span> : <span class="hljs-string">&#x27;Buzz&#x27;</span>) ?: <span class="hljs-variable">$i</span>) . <span class="hljs-string">&quot;\n&quot;</span>),
+<span class="hljs-variable">$s</span>,
+fn(<span class="hljs-variable">$i</span>) =&gt;
+<span class="hljs-title function_ invoke__">printf</span>(((<span class="hljs-variable">$i</span> % <span class="hljs-number">3</span> ? <span class="hljs-string">&#x27;&#x27;</span> : <span class="hljs-string">&#x27;Fizz&#x27;</span>) . (<span class="hljs-variable">$i</span> % <span class="hljs-number">5</span> ? <span class="hljs-string">&#x27;&#x27;</span> : <span class="hljs-string">&#x27;Buzz&#x27;</span>) ?: <span class="hljs-variable">$i</span>) . <span class="hljs-string">&quot;\n&quot;</span>),
);</code></pre>
<p>
@@ -298,8 +298,8 @@ a&#x27;</span>
</p>
</section>
- <section id="section--_関数呼び出しの短縮">
- <h3><a href="#section--_関数呼び出しの短縮">関数呼び出しの短縮</a></h3>
+ <section id="section--commentary--shorten-function-invocation">
+ <h3><a href="#section--commentary--shorten-function-invocation">関数呼び出しの短縮</a></h3>
<p>
<code>range</code>、<code>array_walk</code>、<code>printf</code> は長すぎるのでどうにかせねばならない。ここで、PHP の可変関数を使う。可変関数とは、関数名が文字列として入った変数を経由して、関数を呼び出す機能である。
</p>
@@ -312,9 +312,9 @@ a&#x27;</span>
<span class="hljs-variable">$s</span> = <span class="hljs-variable">$r</span>(<span class="hljs-number">1</span>, <span class="hljs-number">100</span>);
<span class="hljs-variable">$w</span>(
- <span class="hljs-variable">$s</span>,
- <span class="hljs-function"><span class="hljs-keyword">fn</span>(<span class="hljs-params"><span class="hljs-variable">$i</span></span>) =&gt;</span>
- <span class="hljs-variable">$p</span>(((<span class="hljs-variable">$i</span> % <span class="hljs-number">3</span> ? <span class="hljs-string">&#x27;&#x27;</span> : <span class="hljs-string">&#x27;Fizz&#x27;</span>) . (<span class="hljs-variable">$i</span> % <span class="hljs-number">5</span> ? <span class="hljs-string">&#x27;&#x27;</span> : <span class="hljs-string">&#x27;Buzz&#x27;</span>) ?: <span class="hljs-variable">$i</span>) . <span class="hljs-string">&quot;\n&quot;</span>),
+<span class="hljs-variable">$s</span>,
+<span class="hljs-function"><span class="hljs-keyword">fn</span>(<span class="hljs-params"><span class="hljs-variable">$i</span></span>) =&gt;</span>
+<span class="hljs-variable">$p</span>(((<span class="hljs-variable">$i</span> % <span class="hljs-number">3</span> ? <span class="hljs-string">&#x27;&#x27;</span> : <span class="hljs-string">&#x27;Fizz&#x27;</span>) . (<span class="hljs-variable">$i</span> % <span class="hljs-number">5</span> ? <span class="hljs-string">&#x27;&#x27;</span> : <span class="hljs-string">&#x27;Buzz&#x27;</span>) ?: <span class="hljs-variable">$i</span>) . <span class="hljs-string">&quot;\n&quot;</span>),
);</code></pre>
<p>
@@ -322,8 +322,8 @@ a&#x27;</span>
</p>
</section>
- <section id="section--_余談_php_8_x_で動作しなくてもいいなら">
- <h3><a href="#section--_余談_php_8_x_で動作しなくてもいいなら">余談: PHP 8.x で動作しなくてもいいなら</a></h3>
+ <section id="section--commentary--incompatible-solution">
+ <h3><a href="#section--commentary--incompatible-solution">余談: PHP 8.x で動作しなくてもいいなら</a></h3>
<p>
今回使ったテクニックを説明する前に、余談として、文字列リテラルの短縮法として今回採用しなかったものを紹介する。
</p>
@@ -366,8 +366,8 @@ F.
</p>
</section>
- <section id="section--_文字列リテラルの短縮">
- <h3><a href="#section--_文字列リテラルの短縮">文字列リテラルの短縮</a></h3>
+ <section id="section--commentary--shorten-string-literals">
+ <h3><a href="#section--commentary--shorten-string-literals">文字列リテラルの短縮</a></h3>
<p>
実際に使った手法の説明に移る。
</p>
@@ -382,7 +382,7 @@ F.
<span class="hljs-comment">// $a ^ $b は次のコードと同じ</span>
<span class="hljs-variable">$result</span> = <span class="hljs-string">&#x27;&#x27;</span>;
<span class="hljs-keyword">for</span> (<span class="hljs-variable">$i</span> = <span class="hljs-number">0</span>; <span class="hljs-variable">$i</span> &lt; <span class="hljs-title function_ invoke__">min</span>(<span class="hljs-title function_ invoke__">strlen</span>(<span class="hljs-variable">$a</span>), <span class="hljs-title function_ invoke__">strlen</span>(<span class="hljs-variable">$b</span>)); <span class="hljs-variable">$i</span>++) {
- <span class="hljs-variable">$result</span> .= <span class="hljs-variable">$a</span>[<span class="hljs-variable">$i</span>] ^ <span class="hljs-variable">$b</span>[<span class="hljs-variable">$i</span>];
+<span class="hljs-variable">$result</span> .= <span class="hljs-variable">$a</span>[<span class="hljs-variable">$i</span>] ^ <span class="hljs-variable">$b</span>[<span class="hljs-variable">$i</span>];
}
<span class="hljs-keyword">echo</span> <span class="hljs-variable">$result</span>;
@@ -447,8 +447,8 @@ o&#x27;</span>
</section>
</section>
- <section id="section--_完成系">
- <h2><a href="#section--_完成系">完成系</a></h2>
+ <section id="section--stretched-fizzbuzz">
+ <h2><a href="#section--stretched-fizzbuzz">完成系</a></h2>
<p>
完成したものがこちら。
</p>
@@ -604,8 +604,8 @@ _!
);</code></pre>
</section>
- <section id="section--_感想など">
- <h2><a href="#section--_感想など">感想など</a></h2>
+ <section id="section--outro">
+ <h2><a href="#section--outro">感想など</a></h2>
<p>
PHP は、スクリプト言語の中だとシンタックスシュガーが少ない (体感)。この挑戦は不可能に思われたが、PHP マニュアルとにらめっこしていたらなんとかなった。
</p>
@@ -615,8 +615,8 @@ _!
</p>
</section>
- <section id="section--_余談2_別解">
- <h2><a href="#section--_余談2_別解">余談2: 別解</a></h2>
+ <section id="section--alternative-solution">
+ <h2><a href="#section--alternative-solution">余談2: 別解</a></h2>
<p>
PHP では、バッククォートを使ってシェルを呼び出せる。これは <code>shell_exec</code> 関数と等価である。さて、PHP ではバックスラッシュによる行継続が使えないと書いたが、シェルでは使える (当然だが、呼び出されるシェルに依存する。Bash なら大丈夫だろう。知らんけど)。
</p>