Category: 開発

arXivLabs:arXiv機能のコミュニティコラボレーション

2025-05-28
arXivLabs:arXiv機能のコミュニティコラボレーション

arXivLabsは、開発者や研究者がarXivウェブサイト上で直接、新しいarXiv機能を開発・共有できるプラットフォームです。参加者である個人や組織は、arXivのオープン性、コミュニティ、卓越性、ユーザーデータプライバシーという価値観を共有しています。arXivはこれらの価値観にコミットしており、それらを共有するパートナーとのみ協力します。arXivコミュニティを向上させるアイデアをお持ちですか?arXivLabsをご覧ください!

開発

NESエミュレータ上でSuper Mario Bros.にマルチスレッドを実装:驚くほど簡単な方法

2025-05-28
NESエミュレータ上でSuper Mario Bros.にマルチスレッドを実装:驚くほど簡単な方法

著者は、NESエミュレータ(FCEUX)上でLuaプラグインを使ってSuper Mario Bros.にマルチスレッドを実装しました。エミュレータの核心コードを変更することなく、エミュレータのセーブ状態機能を利用することで、ゲームの異なる状態を個別のスレッドとして扱いました。ミューテックスや条件変数などの同期プリミティブはゲーム内の特定のエリアを使って実装され、ユーザーはマルチスレッドの概念と直接対話できます。例えば、複数のマリオが同時にプレイできますが、パイプには一度に一人しか入れません。このプロジェクトは、創造性だけでなく、マルチスレッドの分かりやすく魅力的な説明を提供し、コンピュータサイエンスの基本概念の理解の重要性を強調しています。

決定不能性:プログラマーのパンドラの箱

2025-05-28
決定不能性:プログラマーのパンドラの箱

この記事では、計算機科学における「決定不能性」の概念を分かりやすく説明しています。簡単な言葉と具体的な例(例えば、ある数が2つの素数の和であるかどうかを判定するなど)を用いて、決定問題とチューリングマシンの役割を解説しています。重要なのは、決定不能性とは、プログラムが停止するかどうかを判断できないという意味ではなく、すべてのプログラムの停止性を判断できる万能なアルゴリズムが存在しないという意味であるということです。そのため、多くの問題(プログラムの性質の検証など)は、膨大な労力が必要となり、解決できない可能性もあります。これは、形式的検証やプログラム解析といった分野の必要性を示唆しています。

開発

LLMの暗号:AIコーディングアシスタントの潜在能力を解き放つ秘訣

2025-05-28

大規模言語モデル(LLM)を搭載したコーディングアシスタントの有効性は、質問の仕方に大きく依存します。この記事では、経験豊富なエンジニアが、特定の「暗号」(専門用語や表現)を使用してAIを高品質なコード生成に導く一方、初心者にはこの専門用語が不足しているため、非効率的あるいは誤ったコードが生成されることが多いと主張しています。著者は自身の経験を例に、スキルレベルに合わせて質問戦略を調整する方法を説明し、AIコーディングアシスタントの効率を向上させるためのヒントを提供しています。そして、AI時代において、AI生成コードを識別し、制御する能力が非常に重要であることを強調しています。

開発

Guile Hoot 0.2.0リリース:SchemeでインタラクティブなWebページを構築

2025-05-28

SchemeをWebAssembly GCにコンパイルするコンパイラ、Guile Hoot 0.2.0がリリースされました。このリリースでは、外部関数インタフェース(FFI)が導入され、開発者はWebアプリケーションのコードの大部分をSchemeで直接記述できるようになり、JavaScriptへの依存を最小限に抑えることができます。この記事では、シンプルな「Hello, world!」からインタラクティブなカウンター、そしてToDoリストアプリケーションへと段階的に進めながら、SchemeとFFIを使用してインタラクティブなWebページを構築する方法を示しています。Schemeの強力な記号操作能力とSXMLを活用し、Reactのような差分更新アルゴリズムを持つ効率的な仮想DOMを構築します。

開発

Git WorktreesとTmuxを使ったLLMコードジェネレーションの並列化

2025-05-28
Git WorktreesとTmuxを使ったLLMコードジェネレーションの並列化

Nicholas Khami氏は、Git worktreesとtmuxを使って複数のLLMコードジェネレーター(Claude Code、Codexなど)を並列実行した経験を共有しています。個々のLLMの出力がばらつきがあっても、複数のLLMを同時に実行することで、使えるコードが得られる確率が劇的に向上することが分かりました。しかし、複数のワークツリーとtmuxセッションを手動で管理するのは面倒です。そこで、Khami氏と共同設立者は、このワークフローを効率化するCLIツール`uzi`を開発しています。`uzi`は、エージェントの起動、プロンプトの送信、コマンドの実行、プレビュー、コミット、PRの作成などのタスクを自動化し、よりスムーズな開発体験を提供します。これは開発者の生産性を大幅に向上させる可能性があり、並列処理の考え方は、法律文書のレビューやマーケティングデータ分析など、コーディング以外の分野にも適用できます。将来的には、同様の並列実行機能を備えたソフトウェアが増えていくと思われます。

開発

Compiler Explorer:永遠に続くURLの約束

2025-05-28

Compiler ExplorerのURLは、コンパイラの状態を直接URLにエンコードすることから、goo.glの短縮URLを使用すること、そして最終的には独自のストレージソリューションへと進化しました。goo.glが2025年8月に終了するため、著者はgoo.glベースの古いリンクを救済しており、これまでに12,000以上のリンクを復元しました。この記事は、「永遠に続くURL」への著者のコミットメントと、サードパーティサービスへの依存について考察しています。

開発 リンク

arXivLabs:コミュニティとのコラボレーションによる実験プロジェクト

2025-05-28
arXivLabs:コミュニティとのコラボレーションによる実験プロジェクト

arXivLabsは、コミュニティと協力して、新しいarXiv機能をウェブサイト上で直接開発・共有するためのフレームワークです。arXivLabsと連携する個人や組織は、オープン性、コミュニティ、卓越性、ユーザーデータのプライバシーという私たちの価値観を受け入れています。arXivはこれらの価値観にコミットしており、それらを共有するパートナーのみと協力します。arXivコミュニティを強化するアイデアをお持ちですか?arXivLabsをご覧ください。

開発

ハリケーンの最中にWaffle Houseのウェブサイトをリバースエンジニアリングした

2025-05-28
ハリケーンの最中にWaffle Houseのウェブサイトをリバースエンジニアリングした

2024年9月下旬のハリケーン・ヘレネの最中、大学が休校となり、人々が自宅をバリケードしている間、私はWaffle Houseのウェブサイトをリバースエンジニアリングしました。彼らのNext.jsサイトに隠されたJSONデータを使用して、ハリケーンの影響を評価するのに役立つ、Waffle Houseの閉店状況を追跡するライブマップを作成しました。このサイトは予想外に人気となり、Waffle House自身やFrank Luntzでさえ注目を集めました。最終的に、商標の問題でサイトを削除せざるを得ませんでしたが、この経験は楽しく、予想外の冒険となりました。

開発

Tesseral:B2B SaaS向けオープンソース認証インフラストラクチャ

2025-05-28
Tesseral:B2B SaaS向けオープンソース認証インフラストラクチャ

Tesseralは、ビジネスソフトウェア(B2B SaaS)向けのオープンソース認証インフラストラクチャです。マルチテナントで、APIファーストのクラウドサービスであり、あらゆるテクノロジースタックと互換性があります。開発者は、console.tesseral.comで管理サービスを使用するか、セルフホスティングできます。ユーザー管理に必要なものがすべて含まれています。カスタマイズ可能なログインページ、B2Bマルチテナント、ユーザーになりすまし、セルフサービス設定、さまざまなログイン方法(マジックリンク、ソーシャルログイン、SAML、SCIM)、ロールベースのアクセス制御(RBAC)、多要素認証(MFA)、パスキー/WebAuthn、認証アプリ(TOTP)、APIキー管理、ユーザー招待、Webhookなどです。React、Flaskなど、さまざまなSDKが提供されており、フロントエンドとバックエンドの統合が簡素化されます。

開発

Wetlands:Conda環境管理のための軽量Pythonライブラリ

2025-05-28

Wetlandsは、Conda環境の管理を簡素化するために設計された軽量なPythonライブラリです。オンデマンドでConda環境を作成し、依存関係をインストールし、任意のコードを実行することで、依存関係の競合を防ぎます。プラグインシステムの構築や外部モジュールの統合に最適で、Wetlandsはpixiまたはmicromambaを使用して、Conda環境の高速で効率的な処理を実現します。シンプルなAPIにより、開発者は環境の作成、起動、モジュールのインポート、関数の実行、環境のクリーンな終了を行うことができ、Pythonプロジェクトでの依存関係管理がより簡単で効率的になります。

開発

Project ZeroによるWindowsレジストリへの深層探求:2年間、53件のCVE

2025-05-28
Project ZeroによるWindowsレジストリへの深層探求:2年間、53件のCVE

Google Project ZeroのMateusz Jurczykは、2年間かけてWindowsレジストリを徹底的に調査し、その過程で53件のCVEを発見しました。彼の研究は、レジストリがローカル特権昇格攻撃の標的となる複雑さを浮き彫りにし、C言語で記述された大規模なレガシーコードベースから生じるセキュリティ問題を詳細に説明しています。この研究は、メモリ破損、情報漏洩、論理エラーなど、さまざまな脆弱性の種類を網羅しており、ハニカムのロード、アプリハニカム、直接的なシステムコールなど、さまざまな攻撃エントリポイントを分析しています。また、レジストリの自己修復メカニズムがセキュリティ監査にどのように影響するか、厳格なフォーマット要件と慣例の間のあいまいな境界線の課題についても強調しています。最後に、この投稿は、エクスプロイトのプリミティブを要約し、レジストリファジングの戦略と困難について議論しています。

LLM:ソフトウェアエンジニアリングにおける無能の加速化

2025-05-28
LLM:ソフトウェアエンジニアリングにおける無能の加速化

このエッセイは、ソフトウェアエンジニアリングにおいて大規模言語モデル(LLM)への過度な依存が、無能を加速させる可能性があると主張しています。経験豊富なソフトウェアエンジニアは、LLMがコード生成の速度を提供する一方で、重大なリスクをもたらすことを詳細に説明しています。それは、不正確な出力、コンテキストの理解不能、技術的負債の増加、批判的思考力と創造性の抑制などです。Peter NaurとFred Brooksの洞察に基づいて、著者は、プログラミングはプログラム理論の構築とプログラムエントロピーの管理であり、これは現在のLLMの能力を超えた課題であると強調しています。このエッセイは、LLMが便利なツールである一方で、人間の創意工夫と深い思考に取って代わることはできず、過度な依存はコスト増加とプロジェクトの失敗につながる可能性があると結論づけています。

開発

マイクロソフト、Windows Updateをサードパーティアプリに開放

2025-05-28
マイクロソフト、Windows Updateをサードパーティアプリに開放

マイクロソフトは、Windows Updateをサードパーティアプリケーションに拡張しています。開発者は、Windows Updateオーケストレーションプラットフォームのプライベートプレビューに登録できるようになり、今後、あらゆるアプリやドライバーのアップデートをサポートできるようになります。当初はビジネスアプリに重点を置いていますが、すべてのアプリや管理ツールに開放されます。これにより、開発者はユーザーアクティビティ、バッテリーの状態、持続可能なエネルギータイミングに基づいたスケジュールされたアップデートを活用し、ネイティブのWindows Update通知に直接接続し、Windows Updateのアプリアップデート履歴にアップデートをリストすることができます。マイクロソフトは、MSIX/APPXパッケージアプリ、さらには一部のカスタムWin32アプリもサポートします。

CheerpJ 4.1リリース:Java 17の早期サポートとブラウザベースJavaの強化

2025-05-28
CheerpJ 4.1リリース:Java 17の早期サポートとブラウザベースJavaの強化

Leaning Technologiesは、CheerpJ 4.1のリリースを発表しました。このバージョンでは、Java 17のプレビュー版サポートとJava 11の安定性の向上が実現され、パフォーマンスの最適化、ネットワークスタックの改善、モバイルでの使いやすさの向上も含まれています。CheerpJは、WebAssemblyベースのJVMであり、変更されていないJavaバイトコードをブラウザで直接実行できます。大規模なSwing/AWTアプリケーションとJavaライブラリの統合(Library Mode)をサポートしています。CheerpJ 4.1では、JNI WebAssemblyモジュールのサポートも導入され、Minecraftなどのネイティブコードに依存するJavaアプリケーションの実行が可能になります。将来のCheerpJ 5.0では、安定したJava 17サポートとNPMサポートが提供される予定です。

開発

LLM:より簡単なコーディングの予期せぬコスト

2025-05-28

大規模言語モデル(LLM)はコードの書き方を革命的に変え、ワールドワイドウェブの影響すら凌駕しました。しかし、コードを理解する方が書くより難しいという基本的な事実は変わっていません。つまり、コードの1行1行が技術的負債となるのです。LLMの導入により、チームに古いテストスイートや技術的な決定を放棄させることがさらに困難になります。LLMは容易に新しい機能を作成しますが、これにより、膨張し、メンテナンスが困難なコードベースにつながり、DRY原則に反します。歴史的に生産性の高いエンジニアリングチームは、ツールチェーンに関する深い専門知識に依存していますが、LLMはコード作成のコストを大幅に削減し、ソフトウェア環境における生態系の多様性の爆発的な増加をもたらします。LLMは最終的にコードの可読性と推論能力を向上させる可能性がありますが、現在の課題は依然として大きいです。

開発

JavaScriptの日付パースの混沌とした歴史

2025-05-28

この記事では、JavaScriptの日付パースにおける奇妙な点を明らかにしています。'2025/05/28'と'2025-05-28'はJavaScriptでは異なる日付を表します。これは、ブラウザによる日付文字列のパースにおける長年の矛盾に起因します。この記事では、2009年のES5標準のリリース以降、Chrome、Firefox、Safariにおける日付文字列のパースの進化をたどり、ISO 8601標準に対するそれらの異なる実装と解釈を強調しています。最終的に、'2025-05-28'のような日付形式はUTCとして解釈され、他の形式はローカルタイムとして解釈されるため、混乱が生じます。この記事は、この問題を解決するために、タイムゾーン情報を必須とする、今後のJavaScript Temporal APIを紹介して締めくくっています。

LIEFがDWARF生成を追加:リバースエンジニアリングツールの連携強化

2025-05-28
LIEFがDWARF生成を追加:リバースエンジニアリングツールの連携強化

LIEFは、DWARFファイルを作成するための包括的なAPIと、リバースエンジニアリング解析結果をエクスポートするためのGhidraおよびBinaryNinjaプラグインを提供するようになりました。これにより、関数名や構造体などの重要な情報を、異なるリバースエンジニアリングツール間で共有できます。LLVMのDWARFバックエンドを活用したこのAPI(Python、Rust、C++で利用可能)は、スタック変数のオフセットなどの詳細な処理も簡素化します。これにより、複雑なリバースエンジニアリングプロジェクトにおける共同作業と理解が向上します。

開発

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

2025-05-28

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

開発

プログラマーの秘密兵器:手書きノートがコードエディタを凌駕する

2025-05-28
プログラマーの秘密兵器:手書きノートがコードエディタを凌駕する

ソフトウェア開発者が、思考と問題解決にノートを使う独自の知見を共有しています。コンピューターで直接コードを書く前に、ノートに考えや図を書き出すことで、より明確に考え、解決策を見つけやすくなると主張しています。この方法は、曖昧なアイデアを具体的な計画に変え、コードのバグや設計上の欠陥を発見し、将来の参照のために貴重な思考プロセスの記録を残すのに役立ちます。彼にとって、ノートはコードエディタよりも重要なツールです。

開発

Alpenglowコンセンサスプロトコルのリファレンス実装

2025-05-28
Alpenglowコンセンサスプロトコルのリファレンス実装

Anza Technologyは、Alpenglowコンセンサスプロトコルのリファレンス実装をリリースしました。これには、UDPを介して通信する6ノードで実行可能なローカルクラスタの例が含まれています。シミュレーションバイナリは、Alpenglowの回復力と帯域幅要件のさまざまなテストを提供します。一部のシミュレーションには、パブリックPingデータセットが必要です。マイクロベンチマークとテストスイートも含まれています。セキュリティ上の問題については、quentin (at) anza (dot) xyzに直接お問い合わせください。

開発

モノレポ:開発者生産性への茨の道

2025-05-28

この記事では、モノレポの構築と維持における課題と機会を探ります。著者は、大規模テクノロジー企業の成功事例を盲目的に追従することの危険性を警告し、モノレポが万能薬ではないことを強調しています。成功の鍵は、コードの一貫性、組織的結束、ツール共有効率の向上など、明確に定義された目標にあります。この記事では、モノレポ環境におけるソースコード管理(Gitの制限と代替案)、ビルドシステム(単一言語戦略の優先)、テスト戦略(O(change)ではなくO(repo))、CI/CDワークフローの最適化手法を詳細に説明しています。著者は、生成されたコードとサービスデプロイの非同期性を慎重に扱う必要性を強調し、アトミックコミットの幻想によるインシデントを回避します。最終的に、著者は、課題は多いものの、ツールとプロセスの継続的な改善にコミットすれば、モノレポのメリットは得られると結論づけています。

開発

pg_test_fsync:データベースのためのディスク書き込みパフォーマンスベンチマーク

2025-05-28

この記事では、ディスクまたはクラウドストレージの書き込みパフォーマンスを迅速にベンチマークするためのツールである`pg_test_fsync`を紹介します。これは、データベースのWALログやその他の低レイテンシ書き込みワークロードに特に役立ちます。著者は、コンシューマ向けのSamsung 990 Pro SSDとエンタープライズ向けのMicron 7400 SSDをテストし、コントローラーのDRAMキャッシュと電源損失保護機能により、エンタープライズSSDの方が同期書き込み速度が大幅に速いことを明らかにしました。`fdatasync`は`fsync`や`O_SYNC`よりも高速ですが、`fdatasync`でも単一の8KB書き込みに1.6ミリ秒かかります。この記事では、複数回の小規模な書き込みはパフォーマンスを低下させるため、書き込みのバッチ処理を行うことを推奨しています。

開発

UEFIアプリが私のPoE給電x86システムを救う

2025-05-28
UEFIアプリが私のPoE給電x86システムを救う

2015年、著者はPoE給電の組込みx86コンピュータを開発中に課題に直面しました。システムの起動には23Wが必要でしたが、標準PoEは15.4Wしか供給できませんでした。BIOSの変更に失敗した後、著者は巧みにUEFIアプリケーションを利用し、OS起動前にLLDPパケットを送信することで、より高いPoE+電力を交渉することに成功しました。C言語で記述されたこのUEFIアプリケーション「PoePwrNegotiator」は現在オープンソース化されており、同様のプロジェクトに取り組む開発者にとって貴重な経験を提供します。

開発

画像圧縮:ウェブサイトを高速化

2025-05-28

最適化されていないヒーロー画像は、ウェブサイト全体の予算よりも重くなる可能性があります!この記事では、ウェブサイトの速度とSEOを向上させるための画像圧縮技術を短時間で習得する方法を説明します。損失なし圧縮と損失あり圧縮の違い、重要な指標(品質、解像度、ファイルサイズ)、一般的なフォーマット(JPEG、PNG、WebP、AVIF)、そしてSlimImgツールを使った圧縮手順を解説します。eコマースの事例研究では、商品写真の圧縮により、平均ページサイズが68%削減され、コンバージョン率が38%向上したことが示されています。

開発

Diffie-Hellmanに楕円曲線を使う理由

2025-05-27
Diffie-Hellmanに楕円曲線を使う理由

この記事は、Diffie-Hellman鍵交換で楕円曲線が使われる理由を深く掘り下げています。群論から始まり、モンスター群のような他の群がなぜ不適切なのかを説明します。群対象と圏論を探求することで、楕円曲線が恣意的な選択ではなく、ほぼ唯一の実行可能な選択肢であることが明らかになります。有限体Diffie-Hellmanも楕円曲線暗号の特殊なケースであることが示されます。

開発

LLM 0.26: 大規模言語モデルがターミナルツールに対応

2025-05-27
LLM 0.26: 大規模言語モデルがターミナルツールに対応

LLM 0.26がリリースされ、プロジェクト開始以来最大の機能であるツールサポートが追加されました。LLMのCLIとPythonライブラリを使用することで、OpenAI、Anthropic、Gemini、ローカルのOllamaモデルといったLLMに、Python関数として表現できるあらゆるツールへのアクセスを許可できるようになりました。この記事では、ツールプラグインのインストールと使用方法、コマンドラインまたはPython APIを使用したツールの実行方法を詳細に説明し、OpenAI、Anthropic、Gemini、そして小型のQwen-3モデルを使用した例を示しています。組み込みツールに加えて、simpleeval(数学用)、quickjs(JavaScript用)、sqlite(データベースクエリ用)などのカスタムプラグインも紹介されています。このツールサポートは、数学計算などにおけるLLMの弱点を克服し、機能を大幅に拡張することで、強力なAIアプリケーションの可能性を広げます。

APTソルバーの改良:手動インストールパッケージの削除をエレガントに処理する

2025-05-27

この記事では、APTパッケージマネージャソルバーの改良について説明しています。当初、手動でインストールされたパッケージは固定された事実として扱われ、自動的にインストールされたパッケージはオプションのユニット節でした。しかし、手動でインストールされたパッケージの削除を許可すると、ソルバーが壊れてしまい、不要にパッケージを削除する可能性がありました。著者は、最初にすべてのオプションの節を仮定し、その後、解決プロセス中にこれらの仮定を段階的に取り消すことで、この問題を解決しました。このアプローチは、グローバルに最適ではないものの、依存関係の解決において実践的に効果的であり、グローバル検索の指数関数的な複雑さを回避します。

開発

WebGLシェーダーでGPU上でGPT-2を実行:ハッカーの冒険

2025-05-27

Hacker Newsで話題になったこの記事では、著者によるWebGLとシェーダーを使用してGPU上でGPT-2を実装した経験が詳細に説明されています。この記事では、汎用GPUプログラミングの起源と進化を探り、従来のグラフィックスAPI(OpenGLなど)とコンピュートAPI(CUDA、OpenCLなど)の違いを比較しています。著者は、テクスチャとフレームバッファを巧みにデータバスとして利用し、フラグメントシェーダーをコンピュートカーネルとして使用して、行列乗算やGELU活性化関数などのニューラルネットワーク演算を実行しています。共有メモリ、テクスチャサイズ、精度などの制限を認めつつも、この記事はGPUプログラミングの力と可能性を示し、汎用計算へのグラフィックス処理技術の革新的な活用方法を実証しています。コードはGithubで公開されています。

開発

C言語による効率的な右端切り捨て素数カウンター

2025-05-27
C言語による効率的な右端切り捨て素数カウンター

このC言語プログラムは、指定された桁数の右端切り捨て素数の数を効率的に計算します。高速な素数判定のためにカスタムハッシュテーブルを使用し、最適化された素数生成にはprimesieveライブラリを使用しています。右端切り捨て素数は、最右端の桁を連続して削除しても素数であり続けます。このプログラムは1桁から19桁までの入力を処理し、各桁数の右端切り捨て素数の数と合計実行時間を報告します。例えば、8桁の数の場合、そのような素数を5つ、合計で83個(8桁まで)見つけます。

開発
1 2 74 75 76 78 80 81 82 214 215