Category: 開発

Rubyでゼロから始めるシンプルなオブジェクトシステムの実装

2024-12-15

この記事では、クラスを使わずにRubyでシンプルなオブジェクトシステムを構築する方法を説明しています。作者は、匿名関数とハッシュテーブルを巧みに使用して、メソッドの探索、プロトタイプ継承、ミックスイン、メタプログラミングといったOOPの主要な概念を実装しています。コンストラクタ関数から始めて、プライベート変数とパブリックインターフェースのシミュレーション方法を示し、クラスのような振る舞いと言継承を効果的に再現しています。分かりやすいコード例を通して、オブジェクトの作成、メソッドの定義、継承とミックスインの実装、そしてRubyの`attr_accessor`に似た基本的なメタプログラミング機能の構築方法を学びます。オブジェクトシステムの基本を理解するための実践的なガイドです。

JP CamaraのRubyConf 2024講演がYouTubeで公開

2024-12-15

JP CamaraのRubyConf 2024におけるRubyの並行処理に関する講演がYouTubeで公開されました。この講演は、過去1年間の彼の研究と執筆をまとめたもので、アニメーション入りのスライドを使用しています。この動画はRubyVideoでも視聴可能です。

開発

TeaVM 0.11.0リリース:新しいWebAssemblyバックエンド

2024-12-15

TeaVM 0.11.0がリリースされました。主な新機能は、新しいWebAssemblyバックエンドです。古いWebAssemblyバックエンドは機能していましたが、パフォーマンスの向上がわずかで、開発者のエクスペリエンスも悪かったため、広く採用されていませんでした。新しいバックエンドはWebAssembly GC提案を活用することで、これらの問題に対処し、ブラウザのJS APIとの相互作用を改善し、バイナリファイルのサイズを削減します。現在、JSバックエンドと比べると機能が若干少ないですが、JSO(Java-to-JSインタラクションAPI)を既にサポートしており、次のリリースで同等の機能を目指しています。このリリースには、BitSet実装のバグ修正と、ファイルの読み取り、タッチイベント、Popover API、Navigator.sendBeaconなどのさまざまなJS APIのサポート追加も含まれています。

開発

果てしない会議に別れを告げる:高速ソフトウェア開発の新アプローチ

2024-12-15

終わりのない会議と長々とした計画にうんざりしていませんか?この記事では、高効率なソフトウェア開発手法を紹介します。それは、コード中心で、迅速な反復です。著者は、完璧なシナモンロールを作る例えを用いて、迅速な試行錯誤、頻繁なテスト、継続的な改善を通じて最適なソリューションに到達する概念を説明しています。この手法は、ドキュメント作成の削減、アイデアをコードで直接表現すること、モックデータとホットリローディングツールを使用して開発を高速化すること、簡潔なコードスタイルと命名規則によってコードの可読性を向上させることを重視しています。著者は、プロジェクトを独立して実行可能なファイルに分割し、再起動時間を最小限に抑え、デフォルトの言語ツールを使用してデバッグすることを提唱しています。この手法は一見「混沌とした実験室」のように見えるかもしれませんが、プロジェクトを効率的に完了し、従来の方法における冗長性と非効率性を回避することができます。

Vim:エディタを超えたプログラミング言語

2024-12-15

Vimは単なるテキストエディタではなく、コンピュータと対話するための言語です。簡潔で効率的なコマンド構造は、覚えやすく、コンピュータにとっても解釈しやすいものです。Vim自体が強力である一方、その本質的な強みは、そのモードがほぼすべての主要なコードエディタに統合されている点にあります。これにより、開発者は好みのエディタインターフェースを選択しながら、Vimの効率的なコマンド言語を維持できます。したがって、Vim言語の最も完全で一貫した実装であるNeoVimの価値は、効率的な編集言語を提供することにあり、エディタ自体だけではありません。

開発 エディタ

プログラミング言語:安全とパワーのバランス

2024-12-15

この記事では、プログラミング言語における安全とパワーのトレードオフについて探求しています。従来の考えでは、C言語のように手動メモリ管理を行う強力な言語は本質的に安全ではないとされてきました。しかし、著者はこの見解は時代遅れだと主張します。現代のプログラミング言語研究は、より高い表現力によって安全とパワーの両立が可能であることを示しています。Lisp、Scheme、Racketにおけるマクロの進化は、より良い設計によって、安全性を維持しながらマクロの機能を向上できることを例示しています。Racketのマクロシステムは、衛生的なコードと強力な操作機能を組み合わせたベストプラクティスとして紹介されています。この記事は、安全で信頼性の高いシステムがより強力で信頼性の高いソフトウェアを構築することを結論づけており、Racketマクロに関する更なる学習のためのリソースを紹介しています。

開発

Pythonの依存関係管理:猛火

2024-12-15

この記事は、Pythonの依存関係管理の複雑さを深く掘り下げ、乾燥した森で焚き火をすることに例えています。著者は、Pythonの依存関係は単純な`pip install`ではなく、プロジェクトパッケージ、システムパッケージ、オペレーティングシステム、ハードウェア、環境自体などを含むと主張しています。優れた依存関係管理は、再現性、つまり異なる環境で常に同じ結果を得るために不可欠です。この記事では、バージョン管理、環境の分離、定義ファイル、ロックファイルなどの重要な概念を詳細に説明しています。その後、pip、venv、virtualenv、pip-tools、Pipenv、Poetry、PDM、pyenv、pipx、uv、Conda、Mamba、conda-lock、Pixiなど、多数のツールを包括的に比較し、それぞれの強み、弱み、ユースケースを分析しています。最後に、著者 は、さまざまなシナリオ(管理者権限、依存関係の種類、オペレーティングシステムなど)に基づいてツールの推奨事項を提供し、Pythonの依存関係管理の将来的なトレンドを展望しています。

LLVM CライブラリがGPUを高速化:GPUでCコードを実行

2024-12-14

LLVMプロジェクトは、C/C++コード内でlibcとlibm関数をGPU上で直接実行できる、画期的なGPU Cライブラリをリリースしました。このライブラリは、OpenMP、CUDA、HIPなどのオフロード言語の補足ライブラリとして、またはC/C++コードをGPUターゲットコードに直接コンパイルする2つの主要なモードをサポートしています。この記事では、コンパイルオプション、リンク、AMDおよびNVIDIA GPUの特定のビルド手順など、両方のモードの使い方を詳しく説明しています。このライブラリにより、開発者はGPUの並列処理能力を活用して、複雑なGPUプログラミングモデルに関する深い知識なしに、パフォーマンスを大幅に向上させることができます。

Buzee:オープンソース全文検索アプリがリリース

2024-12-14

Buzeeは、RustとSvelteを使用して構築されたクロスプラットフォームの全文検索アプリケーションです。ローカルファイル、フォルダ、ブラウザの履歴などを高速で検索でき、OCRを使用してPDFや画像からテキストを抽出することもできます。2年かけて開発されたこのプロジェクトは、パフォーマンス向上のためのTauri、インデックス作成のためのSQLiteとTantivy、そしてクリーンなSvelteフロントエンドを使用した堅牢なアーキテクチャを示しています。機能が豊富ですが、将来の開発のための領域はまだいくつかあり、作者はそれをオープンソースとしてリリースして、他の人が貢献できるようにしています。

開発 全文検索

Tailscaleサブネットルーター:複雑なネットワーク接続を簡単に解決

2024-12-14

Tailscaleは通常、すべてのデバイスにクライアントをインストールする必要がありますが、組み込みデバイスや既存のVPCでは必ずしも実行可能ではありません。そこでサブネットルーターの出番です。これにより、デバイスはTailscaleを実行しているかどうかに関係なく、Tailscaleの強力なNATトラバーサルテクノロジーを使用して通信できます。この記事では、Tailscaleサブネットルーターのしくみ、WindowsとLinuxでのインストールと構成方法について説明します。大規模ネットワークの移行やAWS VPCの接続など、サブネットルーターは迅速かつ簡単な開始方法を提供します。個人利用は無料で、デバイス数制限にもカウントされません。

Ultralyticsへのサプライチェーン攻撃:PyPIセキュリティインシデント分析

2024-12-14

PythonプロジェクトUltralyticsは最近、サプライチェーン攻撃を受けました。攻撃者はプロジェクトのGitHub Actionsワークフローを侵害し、PyPI APIトークンを盗み、バージョン8.3.41、8.3.42、8.3.45、8.3.46が汚染されました。この攻撃はPyPIの脆弱性を悪用したものではなく、GitHub Actionsキャッシュを標的にしました。PyPIは、信頼できる公開とSigstore透明性ログを利用して、悪意のあるソフトウェアを迅速に特定し、削除しました。このインシデントは、APIトークンとGitHub環境設定の欠陥を浮き彫りにしました。この記事では、ソフトウェアフォージとビルド/公開ワークフローのセキュリティ確保の重要性を強調し、開発者向けにセキュリティに関する推奨事項(信頼できるパブリッシャーの使用、依存関係のロック、安全でないパターンの回避、多要素認証の有効化など)を提供しています。

Cortex-Mマイクロコントローラにおける非同期Rust:詳細解説

2024-12-14

この記事では、Cortex-Mマイクロコントローラ上での非同期Rustプログラミングの世界を探ります。Futures、協調的スケジューリング、非同期Rust実行体の仕組みを説明し、リソース管理における効率性を示します。マイクロコントローラでの非同期プログラミングを可能にする革新的なEmbassyフレームワークを紹介しています。Blinkyやボタンプログラムといった実践的な例を通して、組込みシステムにおける非同期Rustの応用を示し、従来のRTOSアプローチとの長所と短所を比較します。結論では、リソース利用率と並行処理の観点から、非同期Rustの大きな利点を強調します。

YC支援スタートアップFernがシニアフロントエンドエンジニアを募集

2024-12-14

Y Combinator支援のスタートアップFernが、年収168,000ドルから192,000ドルと株式報酬のシニアフロントエンドエンジニアを募集しています。勤務地はニューヨーク州ブルックリンのウィリアムズバーグで、対面勤務です。4年以上のフロントエンド開発経験、JavaScript/TypeScript、React、Next.jsのスキルが求められます。業務内容は、開発者体験の向上、フロントエンドインフラストラクチャの管理、ユーザー向け機能の開発、顧客との信頼関係構築などです。FernはAPIの利用を簡素化しており、Cohere、ElevenLabs、Webflow、Merge.devなどが顧客です。

Svader:GPUレンダリング対応Svelteコンポーネントライブラリ

2024-12-14

Svaderは、WebGLとWebGPUフラグメントシェーダーを使用してGPUレンダリングされたSvelteコンポーネントを作成するためのライブラリです。開発者はフラグメントシェーダーでプログラムを記述し、ピクセルの色をカスタマイズし、パラメーターを渡すことでレンダリング効果を制御できます。Svelte 4とSvelte 5をサポートし、解像度、スケール、時間などの組み込みパラメーターを持つWebGLとWebGPUのレンダリングモードを提供します。Svaderは使いやすいコンポーネントでGPUレンダリングを簡素化し、WebGLまたはWebGPUをサポートしていない環境ではフォールバックレンダリングを提供します。

開発

Canvaの印刷注文ルーティングの科学

2024-12-14

Canvaのエンジニアリングチームは、印刷注文のルーティングを最適化するために、グラフ探索のための設定可能なルールシステムを構築しました。グラフの構築、探索、意思決定のプロセスを分離することで、高い可用性と拡張性を確保しています。データ管理にはリレーショナルデータベースを使用し、高速なクエリのために非同期的にキャッシュされたグラフを生成します。ルールエンジンと修正された最小コストフローアルゴリズムにより、ミリ秒単位で最適なルートを見つけ出し、輸送距離と炭素排出量を最小限に抑え、ユーザーエクスペリエンスと運用効率を向上させています。

Go:いつNoと言うべきか

2024-12-14

長年Goを使用してきた開発者が、Javaに戻ります。彼はGoにいくつかの欠点を見出しました。ループの選択肢が限られている、高階関数の不足、煩雑なエラー処理、冗長で保守が困難なコードにつながる過度に制限的なコーディングスタイル、そして未成熟なパッケージエコシステムなどです。インフラストラクチャプロジェクトへのGoの適性を認めつつも、複雑なエンタープライズアプリケーションには使用しないことを推奨しています。

開発 開発

PHPにおける静的型付け論争:動的言語の柔軟性と効率性

2024-12-14

この記事で、トニー・マーストンはPHP 8.1で導入された強制的な静的型チェックの変更を強く批判しています。彼は、この変更がPHPの動的型付けの中核となる設計理念に反しており、PHPの長年の柔軟なデータ型処理手法と矛盾し、開発者に大きな負担を強いると主張しています。この記事は、自動的な型変換や柔軟なデータ処理など、PHPの動的型付けシステムの利点を詳しく解説し、現代のハードウェアにおいて静的型付けのパフォーマンス上の利点は無視できるほど小さく、開発効率を阻害する一方であると指摘しています。マーストンは、PHPの動的型付けシステムはHTMLフロントエンドとSQLバックエンドのデータ処理に適しており、静的型付けを強制することは逆効果であり、PHPコミュニティに悪影響を与えると主張しています。

uv:超高速Pythonパッケージ&プロジェクトマネージャー

2024-12-14

Rustで記述された超高速Pythonパッケージおよびプロジェクトマネージャーであるuvは、pip、pip-tools、pipx、poetry、pyenv、twine、virtualenvなどのツールに取って代わるものです。速度が10~100倍向上し、プロジェクト管理、ツール管理、Pythonバージョン管理、スクリプトサポート、pip互換インターフェースを提供します。グローバルキャッシュやワークスペースサポートなどの機能により、ワークフローが合理化されます。プロジェクトの作成、依存関係の管理、スクリプトの実行、配布物のビルドなど、あらゆるPython開発ニーズに効率的で便利なソリューションを提供します。

新卒からMetaのStaff Engineerまで3年:Evan Kingの成功物語

2024-12-14

Evan Kingは、わずか3年で新卒からMetaのStaff Engineerに昇進した自身のキャリアパスを共有しています。彼の成功の6つの重要な原則は次のとおりです。成長のための時間を確保するために速度と効率を優先する;上級エンジニアのように戦略的に考えるために視点を広げる;不確実性を歓迎し、自由にアイデアを共有する;技術的な複雑さよりも問題解決に焦点を当てる;良好な意志と強い人間関係を築く;そして、前向きな姿勢を維持することです。幸運とタイミングの役割を認めつつ、Evanは、コアコンピテンシーに焦点を当て、効率によって生み出された追加の帯域幅を戦略的に使用することで、時間の経過とともに累積する持続可能な習慣を育むことの重要性を強調しています。

Clojureにおけるエラー処理:魔法の弾丸はなく、選択のみ

2024-12-14

Clojureは、エラー処理のアプローチに多様性があり、単一のベストプラクティスはありません。この記事では、ネイティブ例外のスロー、データを含む例外のための`ex-info`の使用、エラーマップの返却、そして`anomalies`ライブラリや`pact`、`failjure`などのライブラリを利用したより高度なエラー処理フローなど、いくつかの方法を探っています。著者は、選択は特定の状況に依存し、複数の方法を1つのプロジェクトで併用できることを強調しています。開発者は自分のニーズに最適なソリューションを選択できます。Clojureはこの自由を受け入れています。

HTMX v2.0.4 リリースノート:バグ修正と改善

2024-12-14

HTMX v2.0.4 のリリースノートには、多数のバグ修正と改善点が詳細に記載されています。このリリースは、安定性と互換性の向上に重点を置いており、ネストされたシャドウDOMの問題の修正、フォームにおける`hx-boost`動作の改善、Web ComponentsとシャドウDOMのより良いサポート、パフォーマンスと信頼性を向上させるための拡張機能の更新などが含まれています。`htmx.ajax`関数の調整と`hx-trigger`イベント処理の最適化も行われています。

博士課程指導教員がShellスクリプトでライティングの改善を自動化

2024-12-14

博士課程の学生のライティングスキル向上のため、指導教員が受動態の乱用、曖昧な言葉、重複単語を検出する3つのShellスクリプトを作成しました。LaTeXビルドシステムに統合されたこれらのスクリプトは、文法規則の盲目的な遵守ではなく、明確さと正確さを重視した意識的な選択を促します。指導教員は、プログラマーが自動化を利用してライティングの弱点を克服することを推奨し、「Style: The Basics of Clarity and Grace」などのリソースを推奨しています。

macOS 15.2アップデート、システム複製機能を破壊:ユーザーはデータバックアップの悪夢に直面

2024-12-14

macOS 15.2アップデートにおいて、システム複製機能に深刻なバグが発生し、「リソースビジー」エラーによりデータバックアップが失敗するようになりました。特にPrebootまたはRecoveryパーティションのコピー時に発生します。開発者のDave Nanianによると、この問題はApple独自のコードに起因し、簡単な解決策はありません。ユーザーはサードパーティ製のバックアップソリューションに頼り、「バックアップ - 全ファイル」方式でスマートアップデートを使用して、クリーンインストール後のデータ復元を行う必要があります。この問題は、特に年末年始の時期であるため、ユーザーに大きな不満を与えています。

RustによるマルチモーダルルーティングプロジェクトFarebox

2024-12-14

Fareboxは、メモリに制約のあるマシン向けに設計された、Rustで記述された高速なRAPTOR実装です。乗り換えと始点/終点間のルーティングにはValhallaを使用し、複数の機関とタイムゾーンを認識するルーティングをサポートしています。このプロジェクトの目的は、OpenTripPlannerを補完し、既存のインスタンスでカバーされていない領域にサービスを提供することです。メモリマッピングは、単一のインスタンスで地球規模のカバーを実現し、ホスティングコストを削減するために、時刻表に使用されます。将来の計画には、GTFS-RTのサポートと、さまざまな出発時間での同時旅程計算のためのrRAPTORが含まれています。

Luonプログラミング言語:静的型付きLua

2024-12-14

Luonは、Oberon系の言語に似た構文を持ち、Luaの概念を取り入れた新しい静的型付きプログラミング言語で、LuaJIT VMをターゲットとしています。基本的にLuaの静的型付きバージョンであり、外部プロシージャ宣言を通じて既存のLuaおよびCライブラリの再利用を可能にします。LuonはLuaのエラー処理とコード構造の欠点を解決し、手続き型、ジェネリック、オブジェクト指向プログラミングをサポートするコンパイラと統合IDEを提供します。プロジェクトには広範な例とテストケースが含まれており、開発中です。

SCCS:50年後のソースコードホテル

2024-12-13

この記事は、過去50年間にわたるソースコード管理システム(SCCS)の影響を回顧的に検証しています。著者のラリー・マクボイは、SCCS独自のウィーブ形式の詳細を説明しています。この形式は参照によるマージを可能にし、他のシステムに見られるパッチベースのコピーの非効率性を回避します。彼は、SCCSがこのウィーブを利用して、任意のファイルバージョンを一定時間で取得し、バージョン間で作者情報を保持する方法を説明しています。長期的なロックやファイル指向性などの欠点を認めつつも、マクボイは、ウィーブ形式の効率性と作者情報の保持を画期的であると強調し、BitKeeperなどの後続システムの基礎を築いたと述べています。

Railsにおけるヘキサゴナルアーキテクチャ:結合解消への道

2024-12-13

この記事では、Railsアプリケーションにおけるヘキサゴナルアーキテクチャ(Ports and Adaptersパターン)の実装について探求しています。著者は当初、このパターンに苦労していましたが、「アダプター」がGang of Fourのアダプターパターンを直接参照していることに気づいたことで理解が深まりました。この記事では、インバウンドポートとアウトバウンドポートの詳細、およびアダプターがアプリケーションロジックを外部サービス(データベース、ロギング、メールなど)からどのように切り離すかについて説明しています。RailsコントローラーはHTTPアダプターとして機能できますが、著者はActiveRecordの直接使用を避けることを強調しています。代わりに、カスタムリポジトリがデータにアクセスすることで、結合解消と保守性が向上します。この記事は、より堅牢で保守しやすいアプリケーションを構築するために、Rails開発者にヘキサゴナルアーキテクチャの採用を推奨して締めくくられています。

postmarketOSを用いた古いスマートフォンのKubernetesクラスタノードへの転用

2024-12-13

著者は廃棄された古いスマートフォンとpostmarketOSオペレーティングシステムを使用して、機能的なKubernetesクラスタを構築しました。この記事では、古いスマートフォンを選択した理由(かなりの計算能力、内蔵バッテリー)、postmarketOSの利点(Alpine Linuxベース、メインラインLinuxカーネルを使用)、設定中に発生した課題(カーネルモジュール、ネットワーク構成)など、そのプロセスを詳細に説明しています。これらの課題に対する解決策も徹底的に説明されています。著者は、古いスマートフォンをKubernetesノードとして再利用することに成功し、リソースを効率的に利用し、持続可能性を促進しました。

Windowsカーネルの軽減策のバイパス:Violet Phosphorusの詳細な解説

2024-12-13

この記事では、SMEPやVBSなどの最新のWindows 10および11カーネル軽減策をバイパスする方法について詳しく解説しています。著者は、普遍的なVBS/SMEPバイパス技術であるViolet Phosphorusの詳細を説明し、PoCコードとROPチェーンを提供しています。SMEPとVBSの動作原理を説明し、HackSysExtremeVulnerableDriverドライバの脆弱性を悪用して、ROPガジェットとMiGetPteAddress関数を用いてページテーブルエントリを修正し、カーネルコードを実行する方法を示しています。また、Kristal-GのSYSRETシェルコードを使用して、ユーザーモードに戻る方法も示しています。これは、カーネルエクスプロイト開発者やセキュリティ研究者にとって貴重なリソースであり、開発カテゴリに分類されます。

Node.js EPUBライブラリ@smoores/epubリリース

2024-12-13

Node.js用の新しいライブラリ@smoores/epubがリリースされました。これにより、開発者はEPUB 3出版物を検査、修正、作成できます。このライブラリは、タイトルの設定や作成者の情報の取得など、EPUB仕様とのやり取りを簡素化する高レベルAPIを提供します。また、チャプターやメタデータの追加など、EPUB構造を詳細に制御できる低レベルAPIも提供します。fast-xml-parserを基盤とする@smoores/epubは、強力なXML解析と操作機能を提供し、EPUBファイルのXMLコンテンツを効率的に処理できます。

1 2 13 14 15 16 17 19 21