見過ごされているクライアントサイドのウェブ体験:誰も遅い読み込み時間について気にしない理由

2025-08-23

この記事では、しばしば見過ごされているクライアントサイドのウェブ体験における問題について論じています。サーバーサイドの問題は頻繁に議論の的になりますが、著者は、遅い読み込み時間、使いにくいUI、その他のクライアントサイドの不満が継続的に無視されている点を指摘しています。Githubの最近のアップデートを例に挙げ、多くのユーザーがパフォーマンスの遅さを報告しているにもかかわらず、ウェブサイト運営者はサーバーサイドの問題を優先させています。著者は、ウェブサイトが大きな権力を持っており、ユーザーはボイコットしか手段がないが、それはほとんど効果がないと主張しています。ウェブサイトはしばしばユーザー離れの効果的な測定を欠いており、クライアントサイドの体験への無関心に繋がっています。最後に、著者は、ユーザーに悪影響を与える可能性のある編集上の決定をしたことを認めていますが、それは必要な妥協だと考えています。

続きを読む

Linux で OpenBSD の pflog 機能を再現する:nftables と ulogd2

2025-08-16

この記事では、Linux システムで nftables と ulogd2 を使用して、OpenBSD と FreeBSD の便利な pflog 機能を再現する方法を説明します。nftables のルールに「log group」ステートメントを追加し、ログ情報を異なる netlink ソケットに転送することで、tcpdump でリアルタイム監視を行い、ulogd2 でディスクにログを記録できます。この記事では、ulogd2 の設定、pcap ファイルへのログ記録、ulogd2 の制限事項と代替手段について詳しく説明します。

続きを読む
開発

従来のUnixログインサーバの意外な持続性

2025-08-03

著者は、最新のグリーンフィールド開発としてコンピューティング環境を仮想的に再構築する際に、従来のUnixログインサーバが驚くほど継続して使用されていることを考察しています。コンテナ化が普及しているにもかかわらず、CPUとRAMの制限のある汎用サーバと、無制限のリソースアクセスを提供するコンピューティングサーバの2種類が維持されています。使用率は低下していますが、これらのサーバは、特に内部マシンへのSSH接続や、VSCodeなどの開発環境のバックエンドを実行する場合に、驚くほど関連性を保っています。また、cronジョブでのログインサーバの使用と、ユーザーがファイルサーバにコードを保存する理由(SLURMクラスタとコンピューティングサーバの使用と密接に関連している)についても言及しています。堅牢なサポートモデルがないため、正確な使用状況を追跡することが困難です。

続きを読む
開発 Unixサーバ

再帰下降パーサ:シンプルさが複雑さを凌駕する?

2025-07-28

筆者は、コンピュータ言語の構文解析手法、特に再帰下降パーサとLRパーサジェネレータを比較検討しています。LRパーサジェネレータはより複雑な文法を処理できますが、筆者は、再帰下降パーサの方が使いやすく、外部ツールに依存せず、目的の言語で直接記述できるため、学習コストとデバッグの負担が軽減される点を重視しています。小規模な言語のパーサを必要とする開発者にとって、再帰下降パーサのシンプルさと使いやすさが、複雑な文法処理における限界を上回る利点となります。

続きを読む

Bashスクリプトのデバッグ:`set -e`エラーのエレガントな処理

2025-07-27

この記事では、Bashスクリプトで`set -e`によって発生するエラーをエレガントに処理するための便利なテクニックを紹介します。`trap 'echo "Exit status $? at line $LINENO from: $BASH_COMMAND"' ERR`を使用することで、スクリプトでエラーが発生した際に、エラー行番号、失敗したコマンド、終了ステータスなどの情報を表示でき、デバッグが容易になります。これは、Bash特有の`$LINENO`、`$BASH_COMMAND`環境変数と`ERR`トラップ条件を利用しています。shなどの他のシェルでは動作が異なる可能性があり、この機能を完全にサポートしない場合があります。

続きを読む

Linuxのerrno(3)における奇妙な制限

2025-07-04

Linuxのerrno(3)のマニュアルページは、奇妙な制限を明らかにしています。関数の呼び出しが成功した場合でもerrnoが変更される可能性があり、システムコールやライブラリ関数がerrnoをゼロに設定することはありません。これは、Unixの伝統的な設計によるものです。システムコールは通常、失敗した場合にのみerrnoを返し、成功した場合はerrnoを変更しません。Cライブラリ関数は複数のシステムコールを行う可能性があり、その一部が失敗してもライブラリ関数自体の成功には影響しないため、errnoは失敗時の値のままになる可能性があります。ANSI CとPOSIXはこの動作を継承しており、関数が失敗し、そのドキュメントがerrnoの設定を指定した場合にのみ、errnoが意味を持つように要求しています。

続きを読む
開発

Xターミナルの意外な台頭:Xの初期設計には含まれていなかった

2025-06-23

Xは当初、Xターミナルで使用するために設計されていませんでした。初期のXは本格的なワークステーション上で動作していました。ディスクレスなワークステーションでさえ、重いタスクにはサーバーに依存していましたが、完全なローカルUnix環境を持っていました。Xターミナルが登場するのはずっと後のことで、XがクロスベンダーのUnixウィンドウシステムとして成功した後です。Xターミナルを最初に製造した企業の1つであるNCDは1987年に設立されましたが、製品の出荷は1989年までおそらくありませんでした。これは、XDM(Xディスプレイマネージャー)の遅い登場からも裏付けられます。XDMは1988年10月にX11R3と共にリリースされました。技術的にはXDMなしでXターミナルを使用することは可能でしたが、XDMの存在はプロセスを大幅に簡素化しました。これは、Xターミナルの採用がX自体の成熟に遅れを取っていたことを示しています。

続きを読む

オープンソースメンテナの反乱:libxml2の単独メンテナがセキュリティ問題を優先しなくなる

2025-06-19

libxml2の唯一のメンテナが、セキュリティ問題をバグと同様に扱うと発表し、オープンソースコミュニティで議論を巻き起こしている。著者は、これが、オープンソースソフトウェアの企業利用に対するメンテナたちの不満の高まりを反映していると主張する。個人による協調的なオープンソース(例:Debian、BSD)と、企業による営利目的のオープンソース利用との区別がなされている。著者は、将来、オープンソースコミュニティがこの区別をますます重視し、企業とのやり取りが変化すると予測している。

続きを読む
開発

WireGuard:1Gbpsネットワーク帯域幅飽和達成

2025-06-17

著者はこれまで、暗号化はギガビットイーサネット上でもネットワーク飽和に達するには遅すぎると思っていました。しかし、最近のテストでは、容易に入手できるサーバー(Xeon E-2226G)で動作するWireGuardが、特別なチューニングなしで1Gbpsネットワークを容易に飽和させ、CPU使用率も低いことがわかりました。これは、暗号化速度に関する著者の仮定に挑戦するものであり、多くの方法が理論的には1Gbpsリンクを飽和させる可能性があることを示唆しており、既存のVPNサーバーのパフォーマンス調整が必要であることを浮き彫りにしています。

続きを読む

Argparseの相互に排他的なグループのネスト制限:フラストレーションな謎

2025-06-14

Pythonのargparseモジュールは、コマンドライン引数の処理において、相互に排他的なグループを含む便利な機能を提供しますが、ネストに関してはフラストレーションな制限があります。複数のタイムアウト設定を持つプログラムを考えてみましょう。ユーザーは個々のタイムアウトを調整するか、完全に無効にすることができます。argparseは、個々のタイムアウトオプションのグループ内に「タイムアウトなし」オプションをネストすることをサポートしていません。これは設定を面倒にします。通常のグループの中に相互に排他的なグループをネストすることはできますが、その逆はサポートされておらず、公式ドキュメントでもこの制限が明示的に述べられています。そのため、開発者は特定のスイッチが使用されたかどうかを手動で確認する必要があり、複雑さが増します。

続きを読む
開発

Unixのinode 0:忘れられた隅

2025-06-02

この記事では、初期のUnixシステムにおけるinode番号の制限と、inode 0の特殊なケースについて探求しています。著者は、POSIX標準がinode 0の使用を明示的に禁止していないものの、実際には多くのシステムやプログラムがゼロ以外のinode番号に依存している可能性があることを発見しました。inode 0を使用すると、予期しない動作が発生する可能性があり、一部のプログラムでは「ファイルが存在しません」というシグナルとして解釈される可能性があります。ユーザー空間ファイルシステムを使用してinode 0を試すことは可能ですが、互換性の問題や予測できない結果があるため、推奨されません。

続きを読む
開発

LLM対策におけるJavaScriptによるプルーフオブワークの軍拡競争

2025-05-28

ウェブサイトは、攻撃的なLLMやウェブスクレイパーに対抗するために、Xe IasoのAnubisのようなJavaScriptベースのプルーフオブワークシステムをますます使用しています。しかし、LLMは侵害されたマシンを利用して、これらの課題を解決するために膨大なCPU時間を確保できる可能性があります。問題は、LLMが敵対的な環境で動作し、真のプルーフオブワークと悪意のあるJavaScriptを区別することが困難であることです。これにより、LLMはCPUマイニングやその他の攻撃を受ける可能性があります。プルーフオブワークシステムを識別しようとすることは、悪意のあるアクターが模倣するインセンティブを持っているため、LLMにとって負け戦です。これは、ウェブサイトとLLMの間で、それぞれがリソースの使用を最適化し、同時に自身の利益を守ることを試みる軍拡競争を生み出します。

続きを読む
開発

Unixにおけるファイル名長さ制限の変遷

2025-05-25

初期のUnixバージョンでは、ファイル名の長さ制限が驚くほど短かった。最初はわずか8バイトで、後に14バイトに増加した。これは、Unixのシンプルなディレクトリ構造設計と関係している。この記事は、Unix V4以前のバージョンのディレクトリ構造を詳しく調べ、ファイル名長さ制限の進化の理由と、16バイトのディレクトリエントリが512バイトのディスクブロックにより適している理由を説明している。また、初期のUnixにおけるinode数の制限にも触れ、古いシステムのいくつかのハードコードされた制限を反映している。

続きを読む
開発

UnixツールによるIPv6アドレスのソートの危険性

2025-05-19

この記事は、sortなどの標準的なUnixコマンドラインツールを使用してIPv6アドレスをソートすることの課題について詳しく説明しています。複雑さは、IPv6の16進表現、先頭のゼロの欠如、および「::」という省略記法に由来します。著者は、直接的な解決策には、IPv6アドレスを完全な拡張形式に変換するか、PerlやPythonなどのプログラミング言語を使用して効率的なソートを行う必要があると主張しています。これは、既存のUnixユーティリティがIPv6アドレスのフォーマットのニュアンスを直接処理するのに適していないためです。

続きを読む

シングルプロセスアーキテクチャ:現代的なWeb開発のためのエレガントなソリューション

2025-04-21

ブログのソフトウェアを更新する際に、著者は、現代的なWebの複雑さを処理するために、CGIベースのアプローチよりもシングルプロセスアーキテクチャの方がシンプルであることを発見しました。シングルプロセスは共有状態への容易なアクセスを可能にし、悪意のあるトラフィックの検出、リクエストレートの制限、キャッシングの実装などのタスクを簡素化します。メモリとCPUの使用量は懸念事項ですが、実装の容易さから、特に予期せぬものに対して、さまざまな種類の悪用に対処する際に、シングルプロセスアーキテクチャが有利になります。著者は、Webの悪用が増加するにつれて、シングルプロセスアーキテクチャがますます重要になると考えています。

続きを読む

ZFS圧縮のパラドックス:論理ブロック vs. 物理ブロック

2025-04-17

圧縮を有効にしたZFSファイルシステム上で、`dd`コマンドを使って作成した256KBのゼロファイルが、奇妙な挙動を示します。`ls -l`では256KBと表示されるのに対し、`ls -s`と`ls -slh`でははるかに小さいサイズ、ほぼゼロと表示されます。これは、ZFSの高効率な圧縮によって物理ブロック数が最小限に抑えられているためです。この記事では、ファイルサイズの測定方法として、論理サイズ(バイト数)、物理ブロック数、論理ブロック数の3つの方法を検討し、POSIXの`st_blocks`フィールドがどのサイズを報告すべきかを明確に指定していないため、ファイルシステム間でファイルを移動すると`st_blocks`の値が変化し、場合によってはファイルサイズが膨張して新しいファイルシステムに収まらなくなる可能性があることを指摘しています。

続きを読む
開発

個人的なUnixパッケージ管理アプローチ

2025-04-13

著者は、Unixシステムにおける個人のソフトウェアパッケージ管理のための巧妙な方法を共有しています。異なるアーキテクチャのソフトウェアを`~/lib/`ディレクトリツリーに格納し、各プログラムは個別のバージョン付きサブディレクトリ(例:`emacs-30.1`)にインストールされます。`~/bin/bin.`ディレクトリには、これらのプログラムへのシンボリックリンクまたはラッパースクリプトが配置され、異なるバージョン間の切り替えが容易になります。pipxやCargoなどのツールについては、デフォルトのインストール場所を維持しますが、パス競合を避けるために`~/bin/bin.`にリンクを作成します。この設定は完璧ではありませんが、システムのパッケージマネージャーでは入手できないか、古すぎるソフトウェアを管理するのに非常に役立ちます。

続きを読む

Ubuntu 24.04におけるSSHパスワード無効化のバグ

2025-04-06

Ubuntu 24.04サーバーで、インターネットからのSSHパスワードアクセスを無効化し、ローカルLANからのアクセスを許可する設定は、sshd_configを使うと簡単そうに見えます。しかし、/etc/ssh/sshd_config.d/にカスタム設定ファイルを追加しても、SSHデーモンの再起動後、設定が無効になる問題が発生しました。原因は、sshd_configの「先着順」の構成ルールと、システムによって自動生成された50-cloud-init.confファイル内のPasswordAuthentication yesの設定です。このファイルが先に読み込まれるため、カスタム設定が上書きされてしまうのです。カスタム設定ファイルを10-no-passwords.confと名前を変更して先に読み込ませることで、問題は解決しました。

続きを読む

光ファイバーの過剰プロビジョニング:備えあれば憂いなし

2025-03-25

部屋や建物間の光ファイバーケーブルの計画では、当初必要な量よりも多くのファイバーを敷設することをお勧めします。将来的な拡張、帯域幅のアップグレード、新しいプロトコルには、追加の容量が必要です。さらに、光ファイバーの故障は発生します—時には不可解に—そして、予備ペアがあれば迅速な復旧が可能です。シングルモードファイバーとマルチモードファイバーは用途が異なりますが、十分な冗長性を持つことが、ダウンタイムとコストを最小限に抑えるために不可欠です。

続きを読む

Lokiの構造化メタデータ:運用上の悪夢

2025-03-19

Grafana Lokiは「ログのためのPrometheus」と呼ばれることがありますが、当初はPrometheusに似たデータモデルを採用していました。しかし、これはシステムログ(syslogまたはsystemd journal)に対して壊滅的な結果をもたらしました。Prometheusとは異なり、Lokiは各ラベル値のセットを別々に保存し、ログストレージを圧縮しません。そのため、カーディナリティの爆発が発生します。これを解決するために、Lokiは「構造化メタデータ」を導入しましたが、バージョン3.0.0時点ではまだ未完成の状態です。構造化メタデータラベルは通常のLokiラベルとは扱われず、異なるクエリ構文が必要です。既存ラベルからの移行は複雑で、予期せぬ高カーディナリティラベルの作成リスクがあります。アップグレードには注意が必要で、既存データの移行は非常にコストがかかります。新しいプロジェクトで使用する場合、その制約を十分に考慮する必要があります。

続きを読む

JSON:Unixシステムにおける機械可読出力のための実際的な選択肢

2025-02-24

Postfixメールキューからメールを削除した経験に基づき、著者は機械可読出力形式としてJSONを使用することを提唱しています。JSONは完璧ではありませんが、Unixシステムにおいて、明確性、幅広い互換性、豊富なツールサポート、他の形式への容易な変換など、多くの実用的な利点があります。著者は、新しいプログラムではJSONのみを機械可読出力形式として使用するのが最も簡単なアプローチであり、カスタム形式設計の複雑さを回避し、Unixプログラム間の相互運用性を促進すると示唆しています。

続きを読む

隠された巨大キャッシュ:ディスク容量が消える理由

2025-02-08

多くのUnixプログラムは、隠しディレクトリである`.cache`や`.local`にデータをキャッシュしており、ユーザーはこれらの巨大なキャッシュファイルを見つけ、削除することが困難です。これらは多くのディスク容量を消費します。著者は、共有ファイルサーバー環境において、大学院生がこれらの隠しキャッシュに困惑し、数百GBものディスク容量が気づかずに消費されているのを目の当たりにしました。この記事では、開発者に対してキャッシュを可視的なディレクトリに保存するよう呼びかけ、ディスク容量使用ツールはこれらの隠しディレクトリのコンテンツを明示的に表示すべきだと提案しています。

続きを読む

VPNアクセスを悪用した高度なフィッシング攻撃

2025-01-29

トロント大学のコンピュータサイエンス学部は、高度に洗練されたフィッシング攻撃を受けました。攻撃者は学部のメールアドレスを偽装し、ユーザーのパスワードを不正に取得することに成功しました。驚くべきことに、攻撃者は盗まれたクレデンシャルを使って短時間で学部のVPNに登録し、内部専用のSMTPゲートウェイを使用してスパムメールを送信しました。これは、攻撃者が事前に標的のVPNとメール環境を十分に調査していたことを示しており、ますます高度化する攻撃技術と、堅牢なサイバーセキュリティ対策の必要性を浮き彫りにしています。

続きを読む
テクノロジー VPNの悪用

インターネット接続SSHのパスワード認証無効化:セキュリティ向上かやりすぎか?

2025-01-18

この記事では、インターネットに接続されたSSHのパスワード認証を無効化することのメリットとデメリットを検討しています。強力なパスワードはブルートフォース攻撃に対する保護を提供しますが、パスワード認証を無効化することで、盗まれた資格情報、SSHサーバーの脆弱性、デフォルトアカウントを狙った攻撃などに対する追加のセキュリティレイヤーが得られると著者は主張しています。しかし、これにより、キーペアなしでログインできないなど、不便が生じる可能性もあります。著者は、個々の状況に基づいてトレードオフを慎重に検討することを提案しています。

続きを読む

/etc/glob:初期Unixシェルにおけるグロービングの知られざる歴史

2025-01-13

この記事は、初期のUnixシステムにおける`/etc/glob`の履歴と機能を探ります。V7 Bourne Shell以前、Unixシェルのワイルドカード展開(globbing)はシェル自身ではなく、外部プログラム`/etc/glob`に委任されていました。`/etc/glob`はコマンドと引数を受け取り、ワイルドカードを展開してコマンドを実行しました。この記事では、エスケープ文字の処理や、外部プログラムを使用する理由(初期システムのリソース制約が考えられる)を含め、様々なUnixバージョンにおける`/etc/glob`の動作の詳細を説明しています。

続きを読む

WireGuardの設定:簡単なものから複雑なものまで

2025-01-05

この記事では、完全に分離された内部IPアドレス空間を持つ最も簡単なものから、WireGuardトンネルの内外からアクセスできるエンドポイントを持つ最も複雑な「VPN」設定まで、様々なWireGuard設定の複雑さを探ります。著者は、ルーティングの競合や再帰的なルーティングなど、各設定の難易度と潜在的な問題点を詳しく説明しています。この記事は、事前に計画することの重要性を強調し、WireGuard環境を設計する際には、複雑なルーティングを避けるために、よりシンプルな設定を選択することを提案しています。

続きを読む

Linux OpenZFSにおけるzpool import/exportの潜在的な問題

2024-12-26

Linux OpenZFS (2.3.0時点)において、ZFSプールのインポートとエクスポートに関する潜在的な問題が存在します。ZFSプール内に'sharenfs'プロパティが設定されたファイルシステムがない場合でも、`zpool import`と`zpool export`は`exportfs -ra`を実行します。これにより、手動で追加または変更されたNFSエクスポートが削除される可能性があり、カスタムNFSエクスポート設定を使用する高可用性システムなどの環境に影響を与えます。この問題は、OpenZFSがNFSエクスポートの変更が必要かどうかに関係なく、`exportfs -ra`を盲目的に実行することによって発生します。

続きを読む
開発

サーバーの再起動失敗:冷却再起動でカーネルクラッシュを解決

2024-12-25

著者は、単純な再起動では解決できないカーネルクラッシュが発生した2台の同一モデルのサーバーに遭遇しました。クラッシュ時、サーバーはシステムファームウェア段階で一連のマシンチェック例外エラーを出力し、CPUハードウェアの問題を示唆していました。電源をオフにして数分間放置した後、再起動することで問題が解決しました。これは、短い停電でも一部のx86システムコンポーネントが完全にリセットされないことを示しており、完全な復旧には冷却時間が必要であることを示しています。

続きを読む

10年以上前のファイルサーバーの第二の人生:費用対効果の高いストレージソリューション

2024-12-17

ある企業が、10年以上前のファイルサーバーを本番環境で稼働させています。時代遅れで、BMCがKVM-over-IPにJavaを必要とするものの、16ベイのディスクと10Gイーサネットポートにより、再利用に最適です。持ち込みディスク方式の低コストストレージサーバーとして使用され、古さとRAMの制限にもかかわらず、大容量で低性能なストレージのニーズを満たしています。これは、要件が一致する場合、古いハードウェアの再利用の価値を示しています。

続きを読む

定期的な再起動:予防的なアプローチ

2024-12-13

大学の研究チームは、システム管理において難しい問題に直面しました。サーバーが長時間稼働し、再起動が必要でしたが、頻繁な再起動はユーザーエクスペリエンスを損なうためです。通常は再起動を避けていましたが、長時間の稼働により大規模な再起動を行う羽目になりました。同様の問題を避けるため、年間の再起動スケジュールを策定しました。少なくとも年に3回、大学の授業スケジュールに合わせて再起動することで、予防保全とユーザーエクスペリエンスのバランスを取っています。

続きを読む