From 572cd70d9fc7baf4d86a633a3ab74c6d058a4de8 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 19 Mar 2023 04:02:56 +0900 Subject: fix(content): fix XML notations --- content/posts/2022-05-01/phperkaigi-2022.xml | 60 ++-- .../php-conference-okinawa-code-golf.xml | 52 ++-- .../support-for-communty-is-employee-benefits.xml | 102 +++---- .../write-fizzbuzz-in-php-2-letters-per-line.xml | 127 ++++---- .../phperkaigi-2023-unused-token-quiz-1.xml | 331 ++++++++++----------- .../2022-10-28/setup-server-for-this-site.xml | 28 +- 6 files changed, 329 insertions(+), 371 deletions(-) (limited to 'content/posts') diff --git a/content/posts/2022-05-01/phperkaigi-2022.xml b/content/posts/2022-05-01/phperkaigi-2022.xml index 621fcde..a3f11ef 100644 --- a/content/posts/2022-05-01/phperkaigi-2022.xml +++ b/content/posts/2022-05-01/phperkaigi-2022.xml @@ -20,11 +20,10 @@
はじめに - 2022-04-09 から 2022-04-11 - にかけて開催された、https://phperkaigi.jp/2022/[PHPerKaigi 2022] - に、一般参加者として参加した。 - 弊社https://www.dgcircus.com/[デジタルサーカス株式会社] - はダイヤモンドスポンサーとなっており、スポンサー枠のチケットを使わせていただいた。 + 2022-04-09 から 2022-04-11 にかけて開催された、PHPerKaigi 2022 に、 + 一般参加者として参加した。 + 弊社デジタルサーカス株式会社はダイヤモンドスポンサーとなっており、 + スポンサー枠のチケットを使わせていただいた。 昨年のレポートはこちら。 @@ -35,21 +34,18 @@
厳選おすすめトーク - 多くの素晴らしいトークの中から、特におすすめのものを - 5つ選んだ。是非聞いてほしい。引用部分は、リンク先プロポーザルから引用している。 + 多くの素晴らしいトークの中から、特におすすめのものを 5つ選んだ。 + 是非聞いてほしい。引用部分は、リンク先プロポーザルから引用している。 - 予防に勝る防御なし - - 堅牢なコードを導く様々な設計のヒント + 予防に勝る防御なし - 堅牢なコードを導く様々な設計のヒント
- PHP - はバージョンを追う毎に型宣言、例外、表明、列挙型などの機能が大幅に強化され、堅牢なコードを書くための機能が充実してきました。それらの機能はどう使うと効果的なのでしょうか。 + PHP はバージョンを追う毎に型宣言、例外、表明、列挙型などの機能が大幅に強化され、堅牢なコードを書くための機能が充実してきました。それらの機能はどう使うと効果的なのでしょうか。 - 本講演では PHP 8.1 - をベースにして、誤りを想定してチェックするのではなく、そもそも誤りにくい設計とはどのようなものか、つまり「予防」の観点を軸足に、堅牢なコードを導くための様々な設計のヒントをご紹介します。 + 本講演では PHP 8.1 をベースにして、誤りを想定してチェックするのではなく、そもそも誤りにくい設計とはどのようなものか、つまり「予防」の観点を軸足に、堅牢なコードを導くための様々な設計のヒントをご紹介します。
@@ -57,8 +53,7 @@
- PHPを使ってるとよく遭遇する Fatal error / Parse error / Warning / Notice - 理解していますか?
+ PHPを使ってるとよく遭遇する Fatal error / Parse error / Warning / Notice 理解していますか?
これらのエラー文を理解することで、すぐにエラーの原因に気付き適切に対象できる様になります!
またそれらを理解した上でのエラーハンドリングを学びましょう。
@@ -114,54 +109,48 @@
トークン問題の作成 - 今回は、PHPer チャレンジ用に弊社のトークン問題を - 3題作成した。こちらについては別途記事にしているので、そちらを参照されたい。 + 今回は、PHPer チャレンジ用に弊社のトークン問題を 3題作成した。 + こちらについては別途記事にしているので、そちらを参照されたい。
PHPer チャレンジ 1位になった。
- また、賞品として Echo Show 15 - をいただいた。 + また、賞品として Echo Show 15 をいただいた。
カンファレンス全体への感想 - 去年の参加レポ - では、こんなことを書いた。 + 去年の参加レポ では、こんなことを書いた。
- 1つ個人的な反省点としては、(中略) Discord - しかりアンカンファレンスしかり「このイベントのこの瞬間にしかないコンテンツ」に触れずに、後から見返せる発表やスライドに注力してしまった、ということだ。発表の詳細な見直しはあとからできるのだから、今しかできないことを考えるべきだった。
+ 1つ個人的な反省点としては、(中略) Discord しかりアンカンファレンスしかり「このイベントのこの瞬間にしかないコンテンツ」に触れずに、 + 後から見返せる発表やスライドに注力してしまった、ということだ。 + 発表の詳細な見直しはあとからできるのだから、今しかできないことを考えるべきだった。
まあ初カンファレンスだし、とお茶を濁しておこう。
- この反省を踏まえ、今年は積極的にほかの場 (公式の Discord - サーバや、アンカンファレンス) にも参加した。
- これにより、参加体験の質がはるかに向上した。特に Discord - に関しては、登壇者ご本人による補足や、質問への回答などがおこなわれる - (ことが多い) - ため、特別な理由のない限り、発言はしないまでも参加はしておいたほうが良いと思われる。 + この反省を踏まえ、今年は積極的にほかの場 (公式の Discord サーバや、アンカンファレンス) にも参加した。
+ これにより、参加体験の質がはるかに向上した。特に Discord に関しては、登壇者ご本人による補足や、 + 質問への回答などがおこなわれる (ことが多い) ため、特別な理由のない限り、発言はしないまでも参加はしておいたほうが良いと思われる。
- なお、アンカンファレンスについては、1日目の終わりにhttps://fortee.jp/phperkaigi-2022/unconference/view/d332797a-8921-4706-a7e2-ee72640c9b5e[トークン問題の解説放送]もおこなった。 + なお、アンカンファレンスについては、1日目の終わりにトークン問題の解説放送もおこなった。 また、今年はオフラインとオンラインのハイブリッド開催であったが、去年の全オンラインと比べて、オンライン参加の体験が落ちていなかったのは、特筆すべきであろう。 - 今年は - 3回目のワクチン接種が間に合わなかったこともあり現地参加は見送ったのだが、来年は是非オフラインで参加したい。 + 今年は 3回目のワクチン接種が間に合わなかったこともあり現地参加は見送ったのだが、来年は是非オフラインで参加したい。
そして来年へ……? - PHPerKaigi 2023 があるかどうか存じ上げないが、あるとすれば、次の - 4つを目標としたい。 + PHPerKaigi 2023 があるかどうか存じ上げないが、あるとすれば、次の 4つを目標としたい。 プロポーザルを出す @@ -173,8 +162,7 @@
- 最後になりましたが、PHPerKaigi - のスタッフ、スポンサー、スピーカーのみなさん、素敵な時間をありがとうございました。 + 最後になりましたが、PHPerKaigi のスタッフ、スポンサー、スピーカーのみなさん、素敵な時間をありがとうございました。 ではまた来年。 diff --git a/content/posts/2022-08-27/php-conference-okinawa-code-golf.xml b/content/posts/2022-08-27/php-conference-okinawa-code-golf.xml index 581dcb4..a8bf577 100644 --- a/content/posts/2022-08-27/php-conference-okinawa-code-golf.xml +++ b/content/posts/2022-08-27/php-conference-okinawa-code-golf.xml @@ -20,18 +20,15 @@
はじめに - 本日 PHP カンファレンス沖縄 2022 - が開催された (らしい)。 + 本日 PHP カンファレンス沖縄 2022 が開催された (らしい)。 - カンファレンスには参加できなかったものの、懇親会の LT - で出題されたコードゴルフの問題が Twitter に流れてきたので、解いてみた。 - - - ツイート: https://twitter.com/m3m0r7/status/1563397620231712772
- スライド: - https://speakerdeck.com/memory1994/php-conference-okinawa-2022-extra?slide=3 + カンファレンスには参加できなかったものの、懇親会の LT で出題されたコードゴルフの問題が Twitter に流れてきたので、解いてみた。
+ + ツイート: https://twitter.com/m3m0r7/status/1563397620231712772 + スライド: https://speakerdeck.com/memory1994/php-conference-okinawa-2022-extra?slide=3 +
@@ -79,52 +76,47 @@
指数表記 - 割と多くの言語のゴルフで使えるテクニック。e - を用いた指数表記で、大きな数を短く表す。このコードでは - 10000500020001000 を指数表記している。 + 割と多くの言語のゴルフで使えるテクニック。 + e を用いた指数表記で、大きな数を短く表す。 + このコードでは 10000500020001000 を指数表記している。
foreach や for の中身を1つの文に - foreachforif などの後ろには、通常 { - を続けて複数の文を連ねるが、中身の文を1つにしてしまえば、{} - を省略できる。C言語などでも使える。 + foreachforif などの後ろには、 + 通常 { を続けて複数の文を連ねるが、中身の文を1つにしてしまえば、{} を省略できる。 + C言語などでも使える。
$r に初期値を入れない - PHP では、$r[] = …​ - のような配列の末尾に追加する式を実行したとき、$r が未定義だった場合は - $r - を勝手に定義して空の配列で初期化してくれる。これを利用すると、$r = []; - のような初期化が不要になる。 + PHP では、$r[] = ...... のような配列の末尾に追加する式を実行したとき、 + $r が未定義だった場合は $r を勝手に定義して空の配列で初期化してくれる。 + これを利用すると、$r = []; のような初期化が不要になる。 - ただし、プログラムに 0 が渡されるとループを一度も回らないので、$r - が未定義になってしまい、implode() - に渡すところでエラーになる。それを防ぐために $r ?? [] を使っている。 + ただし、プログラムに 0 が渡されるとループを一度も回らないので、$r が未定義になってしまい、 + implode() に渡すところでエラーになる。 + それを防ぐために $r ?? [] を使っている。 - もし 0 が渡されたケースを無視するなら、これが不要になるので 4 - バイト縮む。 + もし 0 が渡されたケースを無視するなら、これが不要になるので 4 バイト縮む。
PHP タグの外に文字列を置く - PHP では、<?php ?> - で囲われた部分の外側にある文字列は、そのまま出力される。今回のケースでは、先頭と末尾に必ず - [] を出力するので、そのまま書いてやればよい。 + PHP では、<?php ?> で囲われた部分の外側にある文字列は、そのまま出力される。 + 今回のケースでは、先頭と末尾に必ず [] を出力するので、そのまま書いてやればよい。
おわりに - 最後になりましたが、https://twitter.com/m3m0r7[めもりー] - さん、楽しい問題をありがとうございました。 + 最後になりましたが、めもりーさん、楽しい問題をありがとうございました。
diff --git a/content/posts/2022-08-31/support-for-communty-is-employee-benefits.xml b/content/posts/2022-08-31/support-for-communty-is-employee-benefits.xml index 02fbe93..19f30fc 100644 --- a/content/posts/2022-08-31/support-for-communty-is-employee-benefits.xml +++ b/content/posts/2022-08-31/support-for-communty-is-employee-benefits.xml @@ -3,7 +3,8 @@ 弊社の PHP Foundation への寄付に寄せて - 先日、私の勤めるデジタルサーカス株式会社が、PHP Foundation へ寄付をおこないました。本件を社内でしつこく推進した1人として、推進の理由等を書き残しておきます。 + 先日、私の勤めるデジタルサーカス株式会社が、PHP Foundation へ寄付をおこないました。 + 本件を社内でしつこく推進した1人として、推進の理由等を書き残しておきます。 @@ -15,58 +16,57 @@
はじめに - 注: - これは私個人の意見であり、所属する組織を代表するものではありません。 - - - 先日、私の勤める デジタルサーカス株式会社 が - PHP Foundation へ $2,000 - の寄付をおこないました。 - - - 記事: https://www.dgcircus.com/news/581 - - - 本件を社内でしつこく推進した1人として、推進の理由等を書き残しておきます。 - -
-
- なぜ? - - 組織としての寄付理由は前掲した記事に譲るとして、ここでは、私が社内でこの件を推進した理由について書くことにします。 - - - 当時の考えを端的にまとめた社内チャットの投稿があったので、それを引用します: - -
+ 注: これは私個人の意見であり、所属する組織を代表するものではありません。 + + + 先日、私の勤める デジタルサーカス株式会社 が + PHP Foundation へ $2,000 の寄付をおこないました。 + + + 記事: https://www.dgcircus.com/news/581 + + + 本件を社内でしつこく推進した1人として、推進の理由等を書き残しておきます。 + +
+
+ なぜ? + + 組織としての寄付理由は前掲した記事に譲るとして、ここでは、私が社内でこの件を推進した理由について書くことにします。 + + + 当時の考えを端的にまとめた社内チャットの投稿があったので、それを引用します: + +
+ + 結局これを通したい (私の中での) 最大の理由が、「自分の勤める会社が、これをやる会社であってほしい」というのがあり、 + ↑にしても、感情ベースの理由しか出せていないというのが説得力に欠けている理由なのだと思いますが、 + 寄付の報告が流れてきたり、OSS のフリーライドの話が流れてきたりするたびに、自尊心が毀損される、というか + (これは大袈裟すぎる表現で、実際にはそこまで明確に傷ついているわけではありませんが)。 + + + 追記: 「肩身が狭くなる」というのがより適切でした。 + +
+ + ※文中の「↑にしても」は、ここに載せていない別の投稿を指しています。 + + + OSS を金銭的に支援したり、技術カンファレンスへ協賛したり + (あるいは CTO がカンファレンスを年2で主催したり: + iOSDC PHPerKaigi) + といった行為は、コミュニティへの貢献であると同時に、社員に対する精神的福利厚生でもあると言えるでしょう (知らんけど)。 + これらは、技術や技術者を大切にする組織である、ということの、対外的にも対内的にも強力なメッセージなのです。 + - 結局これを通したい (私の中での) - 最大の理由が、「自分の勤める会社が、これをやる会社であってほしい」というのがあり、↑にしても、感情ベースの理由しか出せていないというのが説得力に欠けている理由なのだと思いますが、寄付の報告が流れてきたり、OSS - のフリーライドの話が流れてきたりするたびに、自尊心が毀損される、というか - (これは大袈裟すぎる表現で、実際にはそこまで明確に傷ついているわけではありませんが)。 + 以上が、私が社内で寄付の件を進めた (かなり私的な) 理由です。 +
+
+ おわりに - 追記: 「肩身が狭くなる」というのがより適切でした。 + 最終的に社としての寄付まで漕ぎ着けられたのは、もちろん私の力ではなく役員の方々の決定によるものです。 + この場を借りて感謝申し上げます。 - - - ※文中の「↑にしても」は、ここに載せていない別の投稿を指しています。 - - - OSS を金銭的に支援したり、技術カンファレンスへ協賛したり (あるいは - CTO がカンファレンスを年2で主催したり: - iOSDC PHPerKaigi) - といった行為は、コミュニティへの貢献であると同時に、社員に対する精神的福利厚生でもあると言えるでしょう - (知らんけど)。これらは、技術や技術者を大切にする組織である、ということの、対外的にも対内的にも強力なメッセージなのです。 - - - 以上が、私が社内で寄付の件を進めた (かなり私的な) 理由です。 - -
-
- おわりに - - 最終的に社としての寄付まで漕ぎ着けられたのは、もちろん私の力ではなく役員の方々の決定によるものです。この場を借りて感謝申し上げます。 - -
+
diff --git a/content/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line.xml b/content/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line.xml index d828554..59ca8be 100644 --- a/content/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line.xml +++ b/content/posts/2022-09-29/write-fizzbuzz-in-php-2-letters-per-line.xml @@ -22,8 +22,8 @@
記事の構成について - この記事は、普通の fizzbuzz - を徐々に変形して最終形にしていく、という構成で書かれている。最終形を見てどのような仕組みで動いているのか解読してから解説を読みたい、というかたがいれば、 + この記事は、普通の fizzbuzz を徐々に変形して最終形にしていく、という構成で書かれている。 + 最終形を見てどのような仕組みで動いているのか解読してから解説を読みたい、というかたがいれば、 このページ にソースコードがあるので、そちらを先に見てほしい。 @@ -38,8 +38,7 @@ 1行あたりの文字数は2文字までに収めること (ただし <?php タグは除く) - 厳密な定義: <?php タグ以降のソースコードが、2 byte ごとに - ラインフィード (LF) で区切られること + 厳密な定義: <?php タグ以降のソースコードが、2 byte ごとにラインフィード (LF) で区切られること @@ -55,11 +54,10 @@ 標準的なインストール構成の PHP で実現できること (デフォルトで有効になっていない拡張等を使わないこと) - 備考: PHP には short_open_tag - というオプションがあり、これを有効にするとファイル冒頭の <?php - の代わりに <? - を使うことができ、文字どおり1行2文字で書ける。ただ、このオプションはデフォルト - off になっている環境が多いようなので、今回は使わないことにした。 + 備考: PHP には short_open_tag というオプションがあり、 + これを有効にするとファイル冒頭の <?php の代わりに <? + を使うことができ、文字どおり1行2文字で書ける。 + ただ、このオプションはデフォルト off になっている環境が多いようなので、今回は使わないことにした。
@@ -152,15 +150,14 @@ バックスラッシュを使った行継続がトークンを区切らない、というのがポイントだ。 - さて、PHP - ではそもそもバックスラッシュを行継続に使うことができない。これにより、「3文字以上からなるトークンが一切使えない」という制約が課される。例えば、echo - で出力することや、for でループすること、new - でインスタンスを生成することができない。特に、出力は fizzbuzz - をどんなアルゴリズムで実装しようとおこなわなければならないので、できないのは致命的である。 + さて、PHP ではそもそもバックスラッシュを行継続に使うことができない。 + これにより、「3文字以上からなるトークンが一切使えない」という制約が課される。 + 例えば、echo で出力することや、for でループすること、 + new でインスタンスを生成することができない。 + 特に、出力は fizzbuzz をどんなアルゴリズムで実装しようとおこなわなければならないので、できないのは致命的である。 - 当然、名前が3文字以上ある関数も使えない。なお、標準 PHP - の範囲内において、名前が 2文字以下の関数は以下のとおりである: + 当然、名前が3文字以上ある関数も使えない。なお、標準 PHP の範囲内において、名前が 2文字以下の関数は以下のとおりである: @@ -177,8 +174,7 @@ (環境によって多少は変わるかも) - 2文字の関数を定義しまくった拡張モジュールを用意しておいて dl() - で読み込む行為は、レギュレーションで定めた + 2文字の関数を定義しまくった拡張モジュールを用意しておいて dl() で読み込む行為は、レギュレーションで定めた
@@ -186,13 +182,11 @@
- に反する - (というより、「それだとおもしろくもなんともないので、このルールを足した」というのが正しい)。 + に反する (というより、「それだとおもしろくもなんともないので、このルールを足した」というのが正しい)。 - また、2文字だと文字列がまともに書けないのも辛い。'' だけで - 2文字使うので、「1文字の文字列リテラル」というものを書くことができない。PHP - では文字列リテラル中に生の改行が書けるので + また、2文字だと文字列がまともに書けないのも辛い。'' だけで2文字使うので、 + 「1文字の文字列リテラル」というものを書くことができない。PHP では文字列リテラル中に生の改行が書けるので - 素直に書いた fizzbuzz - とは言い難いが、このくらいは普通だということにしておかないと、この先がやっていられないので許してほしい。 + 素直に書いた fizzbuzz とは言い難いが、このくらいは普通だということにしておかないと、この先がやっていられないので許してほしい。
<literal>for</literal> の排除 - for - は、3文字もある長いキーワードである。こんなものは使えない。array_ - 系の関数を使って、適当に置き換えるとしよう。 + for は、3文字もある長いキーワードである。 + こんなものは使えない。array_ 系の関数を使って、適当に置き換えるとしよう。 - array_walkrangeprintf といった for - よりも長いトークンが現れてしまったが、これは次節で直すことにする。なお、echo - は文 (statement) であり式 (expression) ではないので、式である printf - に置き換えた。 + array_walkrangeprintf といった + for よりも長いトークンが現れてしまったが、これは次節で直すことにする。 + なお、echo は文 (statement) であり式 (expression) ではないので、式である printf に置き換えた。
関数呼び出しの短縮 - rangearray_walkprintf - は長すぎるのでどうにかせねばならない。ここで、PHP - の可変関数を使う。可変関数とは、関数名が文字列として入った変数を経由して、関数を呼び出す機能である。 + rangearray_walkprintf は長すぎるのでどうにかせねばならない。 + ここで、PHP の可変関数を使う。可変関数とは、関数名が文字列として入った変数を経由して、関数を呼び出す機能である。 - これで関数を呼び出している所は短くなった。では、$r$w や - $p、また 'Fizz''Buzz' はどうやって - 1行2文字に収めるのか。次のテクニックへ移ろう。 + これで関数を呼び出している所は短くなった。 + では、$r$w$p、 + また 'Fizz''Buzz' はどうやって 1 行 2 文字に収めるのか。 + 次のテクニックへ移ろう。
@@ -296,9 +287,8 @@ - というルールがない場合、「未定義の定数が評価された場合、その定数の名前が値になる」という - PHP 7.x までの仕様が利用できる。例えば、 Fizz - という文字列が欲しければ、次のようにする。 + というルールがない場合、「未定義の定数が評価された場合、その定数の名前が値になる」という PHP 7.x までの仕様が利用できる。 + 例えば、 Fizz という文字列が欲しければ、次のようにする。 - こうして簡単に文字列を作れる。なお、この仕様は 7.x - 時点でも警告を受けるので、@ 演算子を使って抑制してやるとよい。 + こうして簡単に文字列を作れる。 + なお、この仕様は 7.x 時点でも警告を受けるので、@ 演算子を使って抑制してやるとよい。 - むしろ、このことがわかっていたからこそ PHP 8.x - での動作を要件に課したところがある。 + むしろ、このことがわかっていたからこそ PHP 8.x での動作を要件に課したところがある。
@@ -338,9 +327,9 @@ 実際に使った手法の説明に移る。 - ずばり、文字列同士のビット演算を使う。PHP では、文字列同士でビット演算 - (&|^) - をした場合、文字列の各バイトごとに指定したビット演算がなされ、それを結合したものが演算結果となる。 + ずばり、文字列同士のビット演算を使う。 + PHP では、文字列同士でビット演算 (&|^) をした場合、 + 文字列の各バイトごとに指定したビット演算がなされ、それを結合したものが演算結果となる。 - 実行すると、range が表示される。さて、PHP - では文字列リテラル中に生の改行を直接書いてもよいのだった - (「主な障害」の節を参照のこと)。書きかえてみよう。 + 実行すると、range が表示される。 + さて、PHP では文字列リテラル中に生の改行を直接書いてもよいのだった (「主な障害」の節を参照のこと)。 + 書きかえてみよう。 - 1行あたり2文字で、range - という文字列を生成することに成功した。他の必要な文字列にも、同様の処理をほどこす。 + 1行あたり2文字で、range という文字列を生成することに成功した。 + 他の必要な文字列にも、同様の処理をほどこす。 - 備考: Buzz 中にある小文字の u は、このロジックだと non-printable - な文字になってしまう。ここまでのテクニックを駆使すれば回避するのはそう難しくないので、考えてみてほしい。 + 備考: Buzz 中にある小文字の u は、このロジックだと non-printable な文字になってしまう。 + ここまでのテクニックを駆使すれば回避するのはそう難しくないので、考えてみてほしい。
@@ -586,9 +575,8 @@
感想など - PHP は、スクリプト言語の中だとシンタックスシュガーが少ない - (体感)。この挑戦は不可能に思われたが、PHP - マニュアルとにらめっこしていたらなんとかなった。 + PHP は、スクリプト言語の中だとシンタックスシュガーが少ない (体感)。 + この挑戦は不可能に思われたが、PHP マニュアルとにらめっこしていたらなんとかなった。 みんなもプログラムを細長くしよう。 @@ -597,11 +585,10 @@
余談2: 別解 - PHP では、バッククォートを使ってシェルを呼び出せる。これは shell_exec - 関数と等価である。さて、PHP - ではバックスラッシュによる行継続が使えないと書いたが、シェルでは使える - (当然だが、呼び出されるシェルに依存する。Bash - なら大丈夫だろう。知らんけど)。 + PHP では、バッククォートを使ってシェルを呼び出せる。 + これは shell_exec 関数と等価である。 + さて、PHP ではバックスラッシュによる行継続が使えないと書いたが、シェルでは使える + (当然だが、呼び出されるシェルに依存する。Bash なら大丈夫だろう。知らんけど)。 - なお、ここでは簡単のため出力に printf をそのまま使っているが、実際には - printf という文字列を合成して可変関数で呼び出す。 + なお、ここでは簡単のため出力に printf をそのまま使っているが、 + 実際には printf という文字列を合成して可変関数で呼び出す。 ただし、これでは @@ -681,8 +668,8 @@ ]]> - は変数で、中にはスペースとエスケープが入っている - (chr(32) . chr(92))。シェルに渡されている文字列は次のようになる。 + は変数で、中にはスペースとエスケープが入っている (chr(32) . chr(92))。 + シェルに渡されている文字列は次のようになる。 - これは、前掲したコマンドと同じだ。かくして、スペースを陽に書かずにシェルをおおよそ自由に扱えるようになった。Fizzbuzz - のワンライナーくらいすぐ書けるだろうから、あとはなんとかなるだろう - (試してないけど)。 + これは、前掲したコマンドと同じだ。 + かくして、スペースを陽に書かずにシェルをおおよそ自由に扱えるようになった。 + Fizzbuzz のワンライナーくらいすぐ書けるだろうから、あとはなんとかなるだろう (試してないけど)。 ということでこれは別解ということにしておく。 diff --git a/content/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1.xml b/content/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1.xml index f53d339..7bfbbd7 100644 --- a/content/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1.xml +++ b/content/posts/2022-10-23/phperkaigi-2023-unused-token-quiz-1.xml @@ -19,177 +19,170 @@
はじめに - 2023 年 3 月 23 日から 25 日にかけて開催予定 (記事執筆時点) - の、 PHPerKaigi 2023 - において、昨年と同様に、弊社 デジタルサーカス株式会社 - から、トークン問題を出題予定である。 - - - 昨年のトークン問題の記事はこちら: - PHPerKaigi 2022 - トークン問題の解説 - - - すでに 2023 - 年用の問題は作成済みであるが、その制作過程の中でいくつかボツ問ができた。せっかくなので、PHPerKaigi - 開催を待つ間に紹介しようと思う。 - - - 10 月から 2 月まで、毎月 1 記事ずつ公開していく予定 (忘れていなければ)。 - -
-
- 問題 - - 注意: これはボツ問なので、得られたトークンを PHPerKaigi - で入力してもポイントにはならない。 - - - PHPerKaigi 2023 において、 + 昨年と同様に、弊社 デジタルサーカス株式会社 から、 + トークン問題を出題予定である。 + + + 昨年のトークン問題の記事はこちら: PHPerKaigi 2022 トークン問題の解説 + + + すでに 2023 年用の問題は作成済みであるが、その制作過程の中でいくつかボツ問ができた。 + せっかくなので、PHPerKaigi 開催を待つ間に紹介しようと思う。 + + + 10 月から 2 月まで、毎月 1 記事ずつ公開していく予定 (忘れていなければ)。 + +
+
+ 問題 + + 注意: これはボツ問なので、得られたトークンを PHPerKaigi で入力してもポイントにはならない。 + + + - -
-
- トークン入手方法 - - ソースを見るとわかるとおり、$argv[1] を参照している。それを - なる変数に代入しているので、円周率を渡してみる。 - - - - - - 失敗してしまった。精度を上げてみる。 - - - - - - だめだった。これを成功するまで繰り返す。 - - - 最初にトークンが得られるのは、小数点以下 16 - 桁目まで入力したときで、こうなる。 - - - - - - めでたくトークン「#YO」が手に入った。 - -
-
- 解説 - - 短いので頭から追っていく。 - - - - - - 入力のバリデーション部分。数値のみ受け付ける。 - - - - - - を 2 文字ごとに区切り (str_split)、数値を ASCII - コードと見做して文字に変換 (chr) して結合 (implode) している。 - - - 例えば、'656667' だったとすると、656667 に対応した - 'A''B''C' へと変換され、'ABC' になる。 - - - ABC - ]]> - - - - - - 正規表現でマッチングしている。\x23# - と同じであることに留意すると、この正規表現は「# から始まる 2 - 以上の長さ (含 #) - の文字列で、最初に現れるスペースまで」にマッチする。つまりこれは、PHPerKaigi - におけるトークンである。 - - - なお、# を直接書いていないのは、/#.+?) / と書くと、#.+?) - という意図せぬトークンが登録されてしまうからである。 - - - - - - 最後にトークンのハッシュ値を見て、想定解かどうかを確認する。 - -
-
- おわりに - - 円周率を何桁も計算して ASCII - コード経由で文字列化すれば、トークンっぽいものがどこかで出てくるのではないか、と考えて生まれた作品。 - - - 最初は真面目に円周率の計算プログラムを組んでいたのだが、いざ動かしてみるとやけに浅いところにあったので驚いた - (ちなみに、それでも M_PIpi() - では精度が足りない)。見つけたときは狂喜したものの、冷静になってみると大して面白くなかったのでボツになった。むしろ、100 - 万桁目くらいに埋まっていてくれたほうがよかったかもしれない。 - -
+ if (md5($t) === '056e831a4146bf123e8ea16613303d2e') { + echo "Token: {$t}\n"; + } else { + echo "Failed.\n"; + } + ]]> + +
+
+ トークン入手方法 + + ソースを見るとわかるとおり、$argv[1] を参照している。 + それを なる変数に代入しているので、円周率を渡してみる。 + + + + + + 失敗してしまった。精度を上げてみる。 + + + + + + だめだった。これを成功するまで繰り返す。 + + + 最初にトークンが得られるのは、小数点以下 16 桁目まで入力したときで、こうなる。 + + + + + + めでたくトークン「#YO」が手に入った。 + +
+
+ 解説 + + 短いので頭から追っていく。 + + + + + + 入力のバリデーション部分。数値のみ受け付ける。 + + + + + + を 2 文字ごとに区切り (str_split)、 + 数値を ASCII コードと見做して文字に変換 (chr) して結合 (implode) している。 + + + 例えば、'656667' だったとすると、 + 656667 に対応した + 'A''B''C' へと変換され、'ABC' になる。 + + + ABC + ]]> + + + + + + 正規表現でマッチングしている。\x23# と同じであることに留意すると、 + この正規表現は「# から始まる 2 以上の長さ (含 #) の文字列で、 + 最初に現れるスペースまで」にマッチする。つまりこれは、PHPerKaigi におけるトークンである。 + + + なお、# を直接書いていないのは、/#.+?) / と書くと、 + #.+?) という意図せぬトークンが登録されてしまうからである。 + + + + + + 最後にトークンのハッシュ値を見て、想定解かどうかを確認する。 + +
+
+ おわりに + + 円周率を何桁も計算して ASCII コード経由で文字列化すれば、トークンっぽいものがどこかで出てくるのではないか、と考えて生まれた作品。 + + + 最初は真面目に円周率の計算プログラムを組んでいたのだが、いざ動かしてみるとやけに浅いところにあったので驚いた + (ちなみに、それでも M_PIpi() では精度が足りない)。 + 見つけたときは狂喜したものの、冷静になってみると大して面白くなかったのでボツになった。 + むしろ、100 万桁目くらいに埋まっていてくれたほうがよかったかもしれない。 + +
diff --git a/content/posts/2022-10-28/setup-server-for-this-site.xml b/content/posts/2022-10-28/setup-server-for-this-site.xml index b388b36..e4df1b6 100644 --- a/content/posts/2022-10-28/setup-server-for-this-site.xml +++ b/content/posts/2022-10-28/setup-server-for-this-site.xml @@ -54,8 +54,8 @@ ]]> - teika.key はローカルからサーバへの接続用、github2teika.key - は、GitHub Actions からサーバへのデプロイ用。 + teika.key はローカルからサーバへの接続用、github2teika.key は、 + GitHub Actions からサーバへのデプロイ用。
@@ -85,8 +85,8 @@
ユーザを作成する - 管理者ユーザで作業すると危ないので、メインで使うユーザを作成する。sudo - グループに追加して sudo できるようにし、su で切り替え。 + 管理者ユーザで作業すると危ないので、メインで使うユーザを作成する。 + sudo グループに追加して sudo できるようにし、su で切り替え。 SSH で接続確認 - 今の SSH - セッションは閉じずに、ターミナルを別途開いて疎通確認する。セッションを閉じてしまうと、SSH - の設定に不備があった場合に締め出しをくらう。 + 今の SSH セッションは閉じずに、ターミナルを別途開いて疎通確認する。 + セッションを閉じてしまうと、SSH の設定に不備があった場合に締め出しをくらう。 GitHub 用の SSH 鍵 - GitHub に置いてある private リポジトリをサーバから clone したいので、SSH - 鍵を生成して置いておく。 + GitHub に置いてある private リポジトリをサーバから clone したいので、SSH 鍵を生成して置いておく。 - GitHub の設定画面 - から、この公開鍵を追加する。 + GitHub の設定画面 から、この公開鍵を追加する。 DNS に IP アドレスを登録する - このサーバは固定の IP アドレスがあるので、A - レコードに直接入れるだけで済んだ。 + このサーバは固定の IP アドレスがあるので、A レコードに直接入れるだけで済んだ。
@@ -301,8 +297,10 @@
感想 - (業務でなく) - 個人だと数年ぶりのサーバセットアップで、これだけでも割と時間を食ってしまった。とはいえ式年遷宮は楽しいので、これからも定期的にやっていきたい。コンテナデプロイにしたい気持ちもあるのだが、色々実験したい関係上、本物のサーバも欲しくはある。次の式年遷宮では、手順の一部だけでも自動化したいところ。 + (業務でなく) 個人だと数年ぶりのサーバセットアップで、これだけでも割と時間を食ってしまった。 + とはいえ式年遷宮は楽しいので、これからも定期的にやっていきたい。 + コンテナデプロイにしたい気持ちもあるのだが、色々実験したい関係上、本物のサーバも欲しくはある。 + 次の式年遷宮では、手順の一部だけでも自動化したいところ。
-- cgit v1.2.3-70-g09d2