Category: 開発

pahole:C/C++データ構造体のメモリレイアウトを検査するための強力なツール

2025-04-19

この記事では、パディングやアライメントの詳細を含む、C/C++データ構造体のメモリレイアウトを分析するための強力なツールであるpaholeを紹介します。コンパイラによって生成されたDWARFデバッグ情報を読み取ることで、paholeはデータ構造体がメモリにどのように配置されるかを視覚的に表示し、メモリのアライメント要件を満たすためにコンパイラによって挿入された「穴」を指摘します。これは、コードのキャッシュ利用率の最適化と、キャッシュラインの偽共有の削減に不可欠です。この記事では、paholeのインストール方法と、構造体のサイズを分析したり、メンバの順序を調整してメモリレイアウトを最適化したり、異なるキャッシュラインサイズでのメモリレイアウトの違いを調べたりするためのコマンドラインオプションの使い方も示します。

JavaScriptビューをハードウェイで構築する

2025-04-19
JavaScriptビューをハードウェイで構築する

この記事では、React、Vue、lit-htmlなどのフレームワークの複雑さを回避しながら、保守性、パフォーマンス、楽しさを重視した、プレーンなJavaScriptでビューを構築するためのパターンを紹介します。このアプローチは、高パフォーマンスを実現するために直接的な命令型コードを使用し、依存関係がゼロで、優れた移植性と保守性を持ち、すべてのブラウザをサポートしています。この記事では、テンプレート、クローン関数、初期化関数、DOM変数、DOMビュー、状態変数、DOM更新関数、状態更新関数など、ビューコンポーネントの構造を詳細に説明し、コードの可読性と保守性を確保するための命名規則とベストプラクティスを示します。

開発 ビュー

EdgeBit:効率的な依存関係自動修正のためのワンショットAIエージェント

2025-04-18

EdgeBitは、アプリケーションエンジニアリングチームがセキュリティの脆弱性を発見し修正するのを支援するセキュリティプラットフォームです。依存関係自動修正機能には、アプリへの影響を特定するための非常に正確な到達可能性エンジンが含まれています。ほとんどの更新は影響を与えないため、EdgeBitを使用するエンジニアは、影響のあるアップグレードに努力を集中できます。これは、依存関係の管理ではなく、「任務」に費やす時間を増やすことを意味します。この記事では、依存関係自動修正で実施したように、1)集中型ツールを使用し、2)エラーをスマートに処理し、3)AIエージェントの永続性を活用して、大量の効率性向上を実現する方法について説明します。データで裏付けられています。

開発

PDCurses:クロスプラットフォーム対応パブリックドメインCursesライブラリ

2025-04-18
PDCurses:クロスプラットフォーム対応パブリックドメインCursesライブラリ

PDCursesは、DOS、OS/2、Windowsコンソール、X11、SDLなどをサポートするパブリックドメインのCursesライブラリです。X/OpenおよびSystem V R4 Cursesのほとんどの機能を実装しており、X11およびSDLポートを使用することで、テキストモードのCursesプログラムをGUIアプリケーションに再コンパイルできます。主にソースコードとして配布されますが、プリコンパイル済みのライブラリも利用できる場合があります。最新バージョンはhttps://pdcurses.org/にあります。

Bram Moolenaarを偲んで:ViとVimの歴史

2025-04-18
Bram Moolenaarを偲んで:ViとVimの歴史

Vimの開発者Bram Moolenaar氏の逝去は、UNIXテキストエディタの豊かな歴史を振り返るきっかけとなりました。この記事では、edからVimまでの進化をたどり、Ken Thompsonのed、George Coulourisのem、Bill Joyのvi、そしてStevieやElvisといった多くのviクローンエディタの物語を紹介します。それらの開発はUNIXの進化やコンピューティングそのものと密接に関連しており、オープンソースソフトウェアの永続的な精神を示しています。Vimは、当初StevieのAmiga移植版として始まり、今日でも広く使われている強力なエディタへと成長しました。

Pythonが正式に検証された暗号化ライブラリHACL*を統合

2025-04-18

2年半の作業を経て、Pythonは正式に検証された暗号化ライブラリHACL*をそのハッシュとHMACの実装に統合することに成功しました。このアップグレードは、CVEの脆弱性があった以前のSHA3の実装を置き換え、Blake2、SHA3、HMACなど様々なアルゴリズムを網羅し、Pythonのセキュリティを大幅に向上させます。このプロジェクトは、ストリーミングAPIの実装とビルドシステムの課題を克服し、メモリ割り当てエラーの処理も実装しました。これは、大規模な現実世界のプロジェクトにおける形式的検証の可能性を示しています。

開発

グッド・カルマ・キット:未使用のコンピューティングパワーを善のために寄付

2025-04-18

Good Karma Kitは、サーバーの余剰CPU、ディスク、帯域幅を活用して、10以上の公益プロジェクトにコンピューティングパワーを提供するDocker Composeプロジェクトです。Torやi2pといったネットワークプロジェクト、BOINCやFolding@homeといった分散コンピューティングプロジェクト、ArchiveBoxやKiwixといったインターネットアーカイブプロジェクト、IPFSやStorjといった分散ストレージプロジェクトが含まれています。ユーザーは参加するプロジェクトを選択し、リソースの割り当てを調整できます。このプロジェクトは、アイドルリソースを有益な活動に役立てることを目的としており、参加者を奨励するためにリーダーボードを提供しています。プロジェクトの中には非営利のものもあれば、暗号通貨による報酬を提供するものもあります。

開発

EvansのDDDカーゴシッピング例をUMLダイアグラムで解剖

2025-04-18
EvansのDDDカーゴシッピング例をUMLダイアグラムで解剖

このプロジェクトは、Eric Evansの書籍からのDDDカーゴシッピングの例をUMLダイアグラムを使用して視覚化します。GitHubのdddsample-coreプロジェクトから生成されたこれらのダイアグラムは、クラス図、シーケンス図、オブジェクト図、コミュニケーション図を含み、システムのアーキテクチャと動作を明らかにし、コンポーネント間の相互作用とドメインモデルの構造を示しています。Astah Professionalを使用して作成された有向グラフは、要素間の関係をさらに明確にします。このリソースは、実践的で視覚的なDDD原則の理解を提供します。

Loglan'82:オブジェクト指向と分散プログラミングのためのプログラミング言語

2025-04-18

Loglan'82は、オブジェクト指向と分散プログラミングのために設計されたプログラミング言語であり、他の言語を凌駕する機能を備えています。独自の安全で効率的なオブジェクト管理システム、モジュール式クラス、コルーチン、スレッドのサポート、仮想マシンネットワークでの分散計算能力などが特徴です。Loglan'82は、「alien call」と呼ばれる独自のオブジェクトベースの通信と同期プロトコルを提供し、オブジェクト管理、コルーチンのセマンティクス、分散コンピューティングにおける複雑な問題を解決します。野心的なプログラマー、教育者、研究者にとって適しています。

開発

ZigによるGPUプログラミング:モダンなアプローチ

2025-04-18

従来、GPUプログラミングといえば、C++コンパイラ、肥大化したSDK、ベンダー固有のツールチェーンとの格闘を意味していました。しかし、状況が変わってきています。今では、RustやZigのようなモダンな言語で、抽象化レイヤーの少ないGPUコードを書くことができます。この記事では、ZigのGPUバックエンドの現状と、Vulkan、OpenCL、ネイティブISAにおけるパフォーマンスについて探ります。ZigはSPIR-V、PTX、AMDGCNをサポートしており、実行時にロード可能なネイティブバイナリを生成できるため、CUDA、HIP、HLSLの必要がなくなります。VulkanとOpenCLは主要なSPIR-V環境ですが、両者の違いがZigのSPIR-Vバックエンドの動作テストの合格率に影響を与えています。今後の計画には、SPIR-Vバックエンドの成熟化、CUDA/HIPランタイムバインディングの提供、標準ライブラリへのGPUアルゴリズムの追加などが含まれます。

開発

arXivLabs:コミュニティコラボレーターとの実験プロジェクト

2025-04-18
arXivLabs:コミュニティコラボレーターとの実験プロジェクト

arXivLabsは、コラボレーターがarXivの新しい機能をウェブサイト上で直接開発・共有できるフレームワークです。arXivLabsに関わる個人や組織は、オープンさ、コミュニティ、卓越性、ユーザーデータのプライバシーという価値観を共有しています。arXivはこれらの価値観を重視しており、これらの価値観を共有するパートナーのみと協力しています。arXivコミュニティをさらに充実させるアイデアをお持ちですか?arXivLabsについて詳しく学んでください。

開発

画期的な拘束システム:ダイナミックメディアの課題を克服

2025-04-18
画期的な拘束システム:ダイナミックメディアの課題を克服

フェーズ2において、チームは「浮遊感」、「爆発」、「低パフォーマンス」といった拘束システムにおける課題を克服することに成功しました。用いられた技術には、既知の値の伝播、ソルバーの変数次元を減らすための線形関係の活用、独立して解けるクラスタへの拘束のクラスタリングなどが含まれます。これにより、システムの安定性とパフォーマンスが大幅に向上しました。チームは様々なソルバーを試行し、値の表現方法を変更(例えば、極座標の使用)することでシステムをさらに最適化しました。これらの改良により、物理的に正確な機械構造の構築と真の双方向計算が可能になり、ダイナミックメディア構築の堅固な基盤が築かれました。

Attune:安全で高速なLinuxパッケージホスティング

2025-04-18
Attune:安全で高速なLinuxパッケージホスティング

Attuneは、Linuxパッケージを安全に公開およびホストするためのツールであり、自己ホスト型とクラウド管理型の両方のデプロイメントオプションを提供します。CLIはローカルでリポジトリインデックスの署名を実行し、キーのセキュリティを確保します。インクリメンタルなインデックスの再構築により、非常に高速です。現在、APT(DebianおよびUbuntu)リポジトリをサポートしており、さらに多くのものが追加される予定です。DockerとGnuPGを使用して、約5分でAPTリポジトリをセットアップできます。

Objective-C:物議を醸す言語の意外な遺産

2025-04-18
Objective-C:物議を醸す言語の意外な遺産

ライプニッツの「普遍的特徴」の夢は、プログラミング言語の中に生き続けています。この記事では、作者がObjective-Cという冗長で物議を醸す言語との経験を語っています。この言語は、思いがけずAppleのエコシステムの基礎となりました。批判にもかかわらず、Objective-C独自の構文と初期iOS開発における役割は、持続的な影響を与えました。作者は自身の経験と、しばしば見過ごされてきたこの言語の驚くべき力を共有しています。

開発

PyCA Cryptographyの新しいASN.1 API:速度とセキュリティ

2025-04-18

PyCA Cryptographyチームは、純粋なRustパーサーを使用した新しいASN.1 APIを開発しています。これにより、パフォーマンスが大幅に向上し、他のASN.1パーサーとの違いによるセキュリティリスクが軽減されます。新しいAPIは、可読性と保守性を向上させる宣言的なdataclassスタイルのインターフェースも備えています。これは、パフォーマンスとセキュリティに関して既存のPython ASN.1ライブラリの欠点を解消し、Sigstoreなどの新しいエコシステムをより適切にサポートすることを目的としています。

開発

より高速なC、C++、アセンブリコードの書き方:パフォーマンスのための実際的なガイド

2025-04-18
より高速なC、C++、アセンブリコードの書き方:パフォーマンスのための実際的なガイド

このリポジトリは、効率的なCとC++コードの書き方の実際的な例を提供し、マイクロカーネルから並列アルゴリズムまでを網羅しています。C++20の機能とコンパイラの最適化を利用してパフォーマンスを向上させる方法(例:三角関数の計算速度を40倍高速化)を示し、JSONの効率的な処理、STL連想コンテナの使用、適切な並列プログラミングモデルの選択など、パフォーマンスのボトルネックを回避するためのベストプラクティスを探求します。アセンブリ、CUDA、FPGAを使用したハードウェアアクセラレーションに関するコード例も含まれており、開発者がより高速で安全なコードを作成することを目指しています。

開発

AI搭載コードエディタのボットがポリシーをでっち上げ、利用者の解約につながる

2025-04-18
AI搭載コードエディタのボットがポリシーをでっち上げ、利用者の解約につながる

AI搭載コードエディタのCursorが、AIチャットボットが会社のポリシーをでっち上げたことで最近批判にさらされた。ある開発者がデバイスを切り替えるとCursorのセッションがすぐにログアウトされることに気づいた。サポートに連絡すると、「Sam」という名前のAIエージェントが、これが新しいセキュリティ機能だと主張した。しかし、そのようなポリシーは存在せず、AIが情報をでっち上げたため、利用者の苦情と解約につながった。これは、人間の監視なしにAIシステムを顧客対応の役割に展開することのリスクを浮き彫りにしている。顧客の不満、信頼の損失、そして経済的損失につながる可能性がある。

開発

arXivLabs:コミュニティとの協力による実験プロジェクト

2025-04-18
arXivLabs:コミュニティとの協力による実験プロジェクト

arXivLabsは、共同作業者がarXivの新しい機能を直接ウェブサイト上で開発・共有できるフレームワークです。arXivLabsに関わる個人や組織は、オープンさ、コミュニティ、卓越性、ユーザーデータのプライバシーという私たちの価値観を受け入れています。arXivはこれらの価値観に尽力しており、それらを遵守するパートナーのみと連携します。arXivコミュニティに価値のあるプロジェクトのアイデアをお持ちですか?arXivLabsについて詳しく学びましょう。

開発

Defold エンジンアップデートラッシュ:新バージョンとクラウドビルドの改善

2025-04-18
Defold エンジンアップデートラッシュ:新バージョンとクラウドビルドの改善

Defold ゲームエンジンは、2024年末から2025年初頭にかけて、1.9.6、1.9.7、1.9.8 バージョンなど、多くのアップデートが行われました。2024年にリリースされた素晴らしいゲームを紹介するショーリールも公開されました。新しいバージョンに加え、インタラクティブなUI要素を作成するためのエディタースクリプティングAPI の技術プレビューが導入され、クラウドビルドサーバーが大幅に改善され、開発とメンテナンスが容易になりました。これらの改善により、Defold の使いやすさと効率性が向上し、開発者により強力なゲーム開発ツールが提供されます。

開発

Jai:経験豊富な開発者向けのモダンなプログラミング言語

2025-04-18

数多くのプログラミング言語を経験してきたベテランプログラマーが、経験豊富な開発者向けに設計された高性能言語Jaiについて自身の経験を共有します。著者はJaiの長所として、シンプルな構文、超高速なコンパイル速度、強力なメタプログラミング機能、クロスプラットフォーム互換性を挙げています。また、本番環境でのJaiの使用や、それがクローズドベータ版である理由についても説明しています。全体として、著者はJaiを、開発者の効率性を向上させ、高品質で効率的なソフトウェアの作成を可能にする現代的な言語として高く評価しています。

開発

なぜセルフホスト型Sentryを諦めたのか:16GB RAMと複雑なインストールが決め手

2025-04-18
なぜセルフホスト型Sentryを諦めたのか:16GB RAMと複雑なインストールが決め手

著者は、セルフホスト型Sentryを諦めた経験について語っています。当初、仕事の都合でSentryを成功裏にセルフホストしていました。しかし数年後、同僚のためにセルフホスト型Sentryを構築しようとしたところ、Sentryのドキュメントにはセルフホスティングのリスクに関する警告が多数記載されており、さらに16GB以上のRAMとマルチコアCPUが必要であることが分かりました。これはコストがかかり、維持管理が非常に困難であることが判明し、インストールプロセスには数百行ものスクリプトが含まれていました。インターネット上のユーザーフィードバックも、セルフホスト型Sentryのメンテナンスの困難さを裏付けていました。最終的に、著者はセルフホスト型Sentryを諦め、より軽量な代替策の開発を決意しました。

開発

6万行のLuaコード開発後の感想:ゲーム開発者の省察

2025-04-18
6万行のLuaコード開発後の感想:ゲーム開発者の省察

Luden.ioのOlegは、LuaベースのゲームCraftomation 101(Defoldエンジンで構築された約6万行のコード)のリードプログラマーであるIvan Trusovにインタビューし、その経験について話を聞きました。Ivanは、インクリメント演算子やクラスの欠如、配列のインデックスが1から始まることなど、Luaの長所と短所について議論しました。それにもかかわらず、彼はLuaのシンプルさと柔軟性、特に強力な「テーブル」を高く評価していますが、動的型付けのために大規模プロジェクトではランタイムエラーが発生する可能性があることに気づきました。彼はLuaをPythonとC++と比較し、静的解析ツールの潜在的な使用とLuaの潜在的なアップグレード(Luauなど)について議論しました。最終的に、彼はDefold内でのLuaのパフォーマンスは良好だと感じていますが、次のプロジェクトでは、コンパイル時にエラーを検出するために、より厳密に型付けされた言語を検討するかもしれません。

開発

PostgreSQLの共有バッファ:メモリを増やせば増やすほど良いのか?

2025-04-18
PostgreSQLの共有バッファ:メモリを増やせば増やすほど良いのか?

数百ギガバイトのRAMを搭載したマシンは、今では珍しくありません。PostgreSQLの共有バッファはパフォーマンスを大幅に向上させることができますが、その動作は直感的なものではありません。この記事では、クロックスイープアルゴリズムやリングバッファ戦略など、PostgreSQLのバッファ置換戦略を詳しく解説しています。共有バッファを大きくすればするほど良いというわけではなく、ある閾値(例えば64GB)を超えると、アルゴリズムが置換可能なブロックを探すのに時間がかかり、パフォーマンスが低下する可能性があります。データサイズとシステムメモリに基づいて共有バッファのサイズを適切に設定し、ボトルネックを引き起こす可能性のある過剰な設定を避けることが推奨されます。

開発

AIが私たちを接着剤に変える:ソフトウェアエンジニアの不安

2025-04-17

AI、特に大規模言語モデルの急速な発展は、ソフトウェアエンジニアの日常業務を劇的に変えています。著者はソフトウェアエンジニアであり、AIが複雑なバグを迅速に解決し、コードをリファクタリングできることに気づきました。これは効率性を向上させますが、複雑な問題解決やシステムアーキテクチャの深い理解から得られる喜びを奪います。著者は、AIが「深い線形思考」のほとんどのタスクで優位に立つようになり、人間はAIと現実世界を繋ぐ「接着剤」としての役割を果たし、クラウドサービスの設定やハードウェアの配線といった雑務を処理することになると予測しています。著者は将来への不安を表明し、多くの仕事が消滅し、たとえ新しい仕事が生まれても、おそらくは反復的で満足度の低い「接着剤」のような仕事になることを懸念しています。

Mux:開発者向けビデオインフラ

2025-04-17
Mux:開発者向けビデオインフラ

Muxは、開発者向けのビデオインフラを構築しており、ビデオエンコーディング、ストリーミング(Mux Video)、モニタリング(Mux Data)といった難しい問題に取り組むことで、ビデオの民主化を目指しています。CoatueやAccelなどのトップ投資家から支援を受け、Google、YouTube、Twitchなどの経験を持つチームを擁するMuxは、スタートアップからRedditやVimeoといった大企業まで、幅広い顧客層にサービスを提供しています。また、ビデオエンジニアのための主要カンファレンスであるDemuxedも主催しています。

GPG暗号化ファイルを使用した環境変数の安全な管理

2025-04-17
GPG暗号化ファイルを使用した環境変数の安全な管理

このシェルツールは、GPGで暗号化されたファイルを使用して環境変数を安全に管理する方法を提供します。これは、機密情報を含む環境変数を、暗号化されていないシェルファイルに保存する必要があるコマンドラインツールの一般的な問題に対処します。このツールを使用すると、ユーザーは暗号化されたファイルから秘密を読み取り、異なるアカウント間を簡単に切り替えることができます。ネストされたログインをサポートし、`SECRET_LOGIN`環境変数を更新し、シェルプロンプトを変更して現在のログインを表示します。利用可能なファイル名のオートコンプリートも含まれています。

Val: 任意精度計算機言語

2025-04-17
Val: 任意精度計算機言語

Valは、chumskyとariadneを基盤としたシンプルな任意精度計算機言語です。Linux、MacOS、BSDs、Windowsで動作します。Cargoを使ったインストールが容易で、プリビルドバイナリも利用できます。Valは、構文ハイライト、永続的な履歴、Emacsスタイルの編集機能を備えたコマンドラインインターフェースとREPLを提供します。この言語は、関数、ループ、条件文、算術、論理、比較、コレクション操作を網羅した豊富な組み込み関数をサポートしています。データ型には、数値、ブール値、文字列、リストが含まれます。

開発 計算機

距離関数でiCalendarの繰り返しイベントを飼いならす

2025-04-17
距離関数でiCalendarの繰り返しイベントを飼いならす

著者は、iCalendarファイルを処理するためのライブラリを実装する際に、繰り返しイベントの処理という課題に遭遇しました。iCalendarは、繰り返しイベントを定義するために複雑なルールを使用しており、従来の実装では、通常、異なる頻度やパラメータに対して多くの特定のロジックを書く必要があります。著者は別の方法を採用し、繰り返しルールをSQLクエリと見なし、コンピュータグラフィックスにおける符号付き距離関数(SDF)のアイデアを借用して、距離関数を使用してイベントの発生を表しました。この方法は、複雑なルールを単純な距離関数に分解し、繰り返し計算によってイベントの発生時刻を求めることで、多くの条件判断を回避し、よりクリーンで保守しやすいコードを実現します。初期の実装はそれほど効率的ではありませんでしたが、著者はそれを最適化して、複雑な繰り返しルールをミリ秒単位で処理できるようにしました。

(pwy.io)

TypeScript: オブジェクトパラメータ vs. 個別パラメータ

2025-04-17

TypeScriptで関数を書く際に、引数は個別に渡すか、オブジェクトにまとめて渡すかの2つの方法があります。この記事では、オブジェクトパラメータの方が優れていると主張しています。個々のパラメータを使用すると、パラメータの数が増えるにつれて曖昧になり、保守性が悪くなります。一方、オブジェクトパラメータ(例: `{firstName: "John", lastName: "Doe", age: 28, isActive: true}`)は、明確で、自己文書化されており、TypeScriptの自動補完機能と型安全性を最大限に活用できます。

SQLite仮想テーブルにおける書き込みとトランザクションサポート

2025-04-17

この記事では、SQLite仮想テーブルにおける書き込みとトランザクションサポートの実装の詳細を掘り下げています。xUpdate、xBegin、xSync、xCommit、xRollbackなどのフックを実装することで、仮想テーブルは書き込み操作をサポートし、トランザクションの整合性を保証できます。この記事では、SQLiteのロールバックジャーナルとスーパージャーナルのメカニズムが、単一データベースと複数データベースの両方のシナリオでアトミックコミットをどのように調整するか、そして仮想テーブルがどのようにこの2フェーズコミットプロトコルに参加するかを説明しています。著者は、永続性はxSyncで処理する必要があり、xCommitとxRollbackはイデmpotentなクリーンアップ操作のみを実行し、失敗する可能性のある操作を避けるべきだと強調しています。

1 2 109 110 111 113 115 116 117 214 215