概要
- HN投稿後、自作サイトがAI BOTトラフィックで溢れた体験記
- LLMを活用したEmacsウェブブラウザの近代化手法
- 技術進化にも関わらず生活が悪化した理由の考察
- Clojure用クラス・インターフェースシステム「Deft v0.2.0」の紹介
- LLM利用の適切な範囲についての疑問提起
HNに投稿したらAI BOTトラフィックで自分のサイトが溢れた話
- 数年間かけて開発した sprinklz.io というカスタマイズ可能なフィードリーダーの紹介
- Hacker News (HN) に投稿後、数百のアップボート獲得
- 投稿直後からサイトが 極端に遅くなる現象 が発生
- 通常ユーザー数に対して サーバ負荷が異常に高い ことに気づく
- エンドポイントごとのリクエスト数をログに記録した結果、 大半がニュース記事取得を伴わないアクセス
- サイトは SPA (Single Page Application) で設計、JavaScript未実行のリクエストが多発
- NGINXログ を調査し、特定ユーザーからの大量アクセスを発見
- このユーザーはサイトの変更を検知しAIニュースレターを生成するサービス
- 1分間に何度もサイトへアクセス、即時ブロック対応
- 他にも Claude bot、OpenAI bot、Googleのクローラー 等、複数のAI・検索エンジンクローラーを検出
- 一部は 脆弱性スキャナー による不審なパスへのアクセスも記録
- robots.txt でAI系クローラーのアクセス制御と、Google bot等の許可設定
- レートリミット 等の追加対策でサーバ強化
- 最大の学びは 高負荷に耐えられる高速なWebサイト 構築の重要性
- インフラ改善により、今後は全ユーザーで パフォーマンス向上 を実現予定
- sprinklz.io は無料公開中で、任意のトピックフィルタやカスタマイズも可能
LLMsでEmacsウェブブラウザを再び偉大にする
- Emacsに ウェブブラウザ機能 があることを知らない人が多い現状
- Emacs Web Browser(eww)は テキストベース で、HTMLのみのシンプルなサイトに適応
- 現代のウェブ はビジュアルやJavaScriptが多用され、ewwでは対応困難
- 解決策は 現代的なウェブページをシンプルなHTMLに変換 し、ewwで表示すること
- LLM を活用し、ウェブページの内容をテキスト中心に変換するプログラムを自動生成
- 変換プロセス:
- Firefoxでページを開き、JavaScriptを実行
- LLMにページ内容を 簡素化するプログラム生成 を依頼
- 生成されたJavaScriptをFirefoxに注入
- 新しいページソースをewwに転送
- 実際の利用例として、 Clojureのドキュメント 表示のビフォーアフターを紹介
- 初回のみ変換プログラム生成に時間がかかる が、以後は高速動作
- ソースコードは https://github.com/sstraust/simpleweb で公開、無料利用可能
技術が進歩したのに生活が悪化した理由
- 技術進歩で 生産性は向上 したが、 個人の幸福度や集中力は低下
- ニューラルネット などの技術で、注意力や時間が搾取されやすくなった現実
- 2018年頃から、 無意識のネット依存 や時間浪費が顕著に
- コンピュータやウェブサービスが ユーザーの滞在時間を最大化する設計 へシフト
- ソフトウェアエンジニアリングが 趣味・技術志向 から ビジネス・金融志向 に変化した影響
- 対策案:
- 自然の中で過ごす(touch grass) ことでデジタルから距離を取る
- 抗議活動(take to the streets) で社会に働きかける
- 依存的なサービスから離れる 勇気を持つ
- 個人ブログや独立系サイト の利用を推奨
- 編集者注: カスタマイズ可能なニュースリーダー 開発の動機にも言及
Deft v0.2.0
- Deft 0.2.0 リリースに伴い、Clojure向けクラス・インターフェースシステムの特徴を解説
- Clojureは getter/setterの冗長性排除 を目指す設計思想
- Java時代の 冗長な記述 を回避し、 マップライクなデータ操作 を重視
- 既存のdefprotocol/defrecordやMalli schema併用では 使い勝手に難あり
- Deft は、 必須キー付きプロトコル をサポートし、getter/setter等を自動生成
- v0.2.0では 名前空間付きキー の型・プロトコル定義が可能に
- 例:(defp Positioned :required-keys [::pos - ::Point])
- (deft Circle [::location/position radius])
- フィールド存在を前提とした メソッド定義 が容易
- 例:(defp Gremlin :extends [location/Positioned])
- ソースコードは https://github.com/sstraust/deft で公開
LLMsはどこまで使うべきか?
- 「On the Edge」読了後、内容への失望とともに ChatGPTの活用告白 に驚き
- 著者本人が書いたものの、 実質的な創造性や執筆の主体性 への疑問
- LLMsの利用範囲や、 どこまでが“自分の作品”と呼べるか という問題提起