2023/01/27 までに読んだ記事

9 min read

今回は10個の記事について感想や周辺話題を書いていきます。

PHPer人生、一度はフレームワークを作っておこう!

要約

自作フレームワークをPHPで楽しみのために作り、捨てるのは最高だ。

  • 2016年のスライド。Symfony, Laravelなどの有名フレームワークがあるが、自分で作るのも楽しみの一つとしていいじゃないかと言う主張。
  • フレームワークは良い設計から乖離しづらくなるメリットがある。→逆に、良い設計を強制するフレームワークは良い、とも言えそう。
  • 有言時間に終わらせることにする、機能を削ぎ落としてルーターとテンプレートエンジンだけでもフレームワーク自作が名乗れる、潔く作ったら捨てる、といった作るためのハードル下げと背中押しが凄まじくて好き。

感想

  • Harukiさん(@jdkfx)経由でPHPerの自作フレームワーク文化を知ってこの記事に辿り着きました。 Harukiさんの記事: イチからphpフレームワークを作ってみる
  • PHPは標準ライブラリ?になんでもあるから、Webに関してはフレームワークっぽいものが作りやすいという背景はありそう。

自作キーボードでマウスを操作する取り組みについて - Qiita

要約

マウスはキーボードの上下左右キーなどで代替できる。しかし結論としてはポインティングデバイス搭載のキーボードが良いのではないか。

  • ポインティングデバイス: マウスやトラックボールなどマウスカーソルを動かすデバイスのこと
  • この記事ではマウスが持つ動きを列挙し、それをキーボードで代用しようという試みをしている。
  • レイヤーとキー消費、マウスカーソル動かすたびにキーが鳴ってうるさい、ファームウェア可読性、の3つの問題が挙げられていた。

感想・周辺話題

  • 問題はそこではなく、マウスがキーを押している間しか動かないから等速にしか動かせずイライラするところな気がする。挙げられている問題はどれも問題ではないか解決可能に見える。
  • 周辺話題として、kaoriyaさんが最近開発されているポインティングデバイス気になる。 Twitterへのリンク
  • おそらくファームウェアはこれ koron/yuiopPD

image

  • Keyballのようなポインティングデバイス一体型と比較して、分離することは以下の特徴があると思った。
    • 👍 キーボードを自分で選べる。ポインティングデバイスを統一できる。
    • 😭 ポインティングデバイスを固定する必要性、無線化や電源の問題がありそう
  • でもこういう「自分だけの工作」ってロマンだなあ。と思ったのでみるみる電子工作への気合いが高まり、はんだごてを買いました。まずは積んでいるRustyKeysをやっていこうと思います。ゆくゆくはポインティングデバイス自作…!

やはり俺の情報教科書はまちがっている。 - Qiita

  • ちょっと口調がトゲトゲしている感じもするけど、内容は真面目でよくある間違いを正しく直す意味でも良さそう。
  • 例えば暗号化は復号できることが暗に求められるため、ハッシュ関数に通すことは暗号化とは言わない、とかは確かにそうだなと感じた。
  • 周辺話題として、情報の教科書を題材にした面白い記事(動画)は、 Youtube - 【新高校教科】『情報Ⅰ』が本格的過ぎる!【プログラマ vs 『情報Ⅰ』】 がある。
  • この動画は5年目のソフトウェアエンジニアが3人で教科書を読んでいくというもので、楽しく見ながら基礎知識の復習もできて楽しい。

Bitwarden design flaw: Server side iterations

  • PBKDF2-HMAC-SHA256で200,001回マスターパスワードをストレッチングしているが、Encryption KeyというVault用暗号化鍵を経由すれば100,000回のストレッチングで済むので、攻撃者がデータを盗み出している前提の元ではマスターパスワードのストレッチングは意味がないという指摘。
  • これはRedditで燃えたりPortSwiggerが記事にしていて、Bitwardenチームも対応に追われている様子。OWASP基準に追従して過去の古い基準も二重ハッシュすると言っている 参考: fosstodonでのBitwardenの返答

Diversifying our Content Delivery Networks | Inside Rust Blog

  • Rustのパッケージ、crateのCDNをインフラチームが新しくしていくというアナウンス。特にエンドユーザはすることはないが、おかしなことが起きていたらinfraチームに問い合わせを。
  • AWS CloudfrontとFastlyがバックエンドらしく、この辺はRust専属チームがAWSにできたことも関係していそうだなと感じた。

New GitHub CLI extension tools | The GitHub Blog

要約

GitHub CLIがupdateされ、特にextension周りのサポートが拡充された。

  • gh-extension-precompile でGo, Rust, C++で書いたGitHub CLI extensionのreleaseが楽になるらしい。これはマルチアーキ向けにコンパイルするらしく、CI/CD例として参考になりそうなので読んでおきたい。

周辺話題

  • GitHub extensionに与える権限ってどうなっているんだろう?他の人の作ったextensionをGitHub CLIで使ってauth token抜かれましたとかなったら困る。
  • 関係ないけど私はUbuntuサーバをMacから使っているのでブラウザを開こうとすると困る。(GitHub CLI経由でブラウザ開くことがあるが、困る) そういう時はsshで接続している先からリバースで手元の操作を行える KOBA789/ssh-rev-exec がいいのではないかな?と思った。

「SPAのタブ永遠に開きっぱなし問題」を更新ボタンを設置せず解決した

  • 技術部分はよく理解できていないがUIへの思想が垣間見えて面白かった。
  • 「つよいUIはボタンを捨てる」という思想のもとで、scrapboxの"Check for update"みたいなSPAでリロードするupdateボタンを仕組みによって消した話。
  • 「つよいUIはボタンを捨てる」はおそらく「機能が欲しくなるとボタンを増やしてしまいがちだが、よく考えれば本当はそんなにボタンはいらない。考え抜かれたつよいUIにはボタンはたくさんついてない」という意味合い。
  • scrapboxは a タグの画面遷移をトリガーとして更新が走るようになっていて、しかもその更新は気づかない程度のものらしい。すごい。
  • ボタンを消すためにアルゴリズムや工夫を頑張る、安易にボタンを増やさないという思想が面白かった。

Go 1.20リリース連載が始まります&メモリアリーナの紹介&落ち穂拾い | フューチャー技術ブログ

メモリアリーナを用いて、GoのGCのSweep探索対象外の領域を手動確保すると、おそらく木構造のような細かなメモリを大量に確保するケースでは高速化が見込めるのではないか。

  • Go 1.20は2023/02にリリース予定とのこと。
  • GoのGCは1.5からconcurrent mark & sweep algorithmを採用していたはず
    • これは、並列でアプリケーションとGCが動くようなアルゴリズム
  • メモリアリーナはメモリ管理を自分でいじるのであまり使うものではない。
  • あと小ネタ部分で crypto/ecdh が入るの面白そう。

(pdf) M1で論文を書く研究室の運営

自立した大学院生を育てることに焦点を当てて、バイオ系の研究室で工夫していることを紹介している。

  • ゼミは毎週1回2時間。全員が発表をする。半分は最新論文解説で要約する力を磨き、もう半分は実験結果を目的や背景込みで図表も完成させた状態で発表し、再現性のあるデータを積み重ねる。
  • 朝輪という、毎朝9時から30分間論文を読む時間がある。30秒で著者の言いたいことを説明するなど、30分の中で論文を読み始めるところから皆で読んでいる同じ論文を協力して読解していくところまでやる。
  • 日常的に訓練していれば、当たり前に論文を読むようになり、議論を通してリテラシーが身につき、論文もゼミの積み重ねで書けるという工夫。

Feature: WebGPU

Chrome 113が4/26にStableになる。そこでWebGPUという、WebGL, WebGL2の後継に当たるGPUを扱うためのAPIが入る。

  • WebGPUは6年間開発が続けられてきた。現在、すでにOrigin Trialに入っているので試すことができるみたい。
  • 歴史的には、WebGL -> WebGL2の変化は3Dテクスチャなどの3D系の高級関数が入ったことなのに対し、WebGL2 -> WebGPUの変化はコンピュートシェーダというより汎用的でCPUに近い使い方ができるようになったというところ。
  • 例えば実用だと、Tensorflow.jsのバックエンドにWebGPUが存在し、WebGPUバックエンドが一番早くなるようにTensorflow.jsの人たちは頑張っているっぽい
  • 疑問
    • 実用はどういうものがあるだろう?機械学習(MediaPipe系の画像タスク)とかUnity周りで高速化されると嬉しい、とか?
    • セキュリティ的な話。例えば、GPUは個体差を生かして個人識別できるのでプライバシーを破れる話があったはず
    • OpenCL周りを見ていると最適化って結構大変そうなイメージなので、WebGPUを活かした高速計算は一部の人たちしかうまく扱えないのでは?