Category: 開発

線形代数がインタラクティブなダイアグラムエディタを強化

2024-12-17

イワン・シュービンは、インタラクティブなダイアグラムエディタSchemioの開発において、線形代数の行列演算を巧みに用いて、数々の困難な問題を解決しました。当初、Schemioは単純な図形の作成と操作のみをサポートしていました。しかし、階層構造が導入されると、座標変換が複雑になりました。作者は最初は再帰的なアプローチを試みましたが、スケーリングとピボットポイントの問題に直面しました。最終的に、シュービンは行列を用いて変換(平行移動、回転、スケーリング)を表し、行列の乗算で座標変換を行い、行列の逆行列を巧みに用いて世界座標からローカル座標への変換問題を解決しました。さらに、行列演算によって、階層内でのオブジェクトの移動時の位置と回転の正確な調整を行い、予期せぬジャンプを回避しました。Schemioのソースコードはオープンソースで、GitHubで公開されています。

Tig:Gitのためのテキストモードインターフェース

2024-12-17

TigはncursesベースのGit用テキストモードインターフェースで、主にGitリポジトリブラウザとして機能します。チャンクレベルでのコミットへの変更のステージングを支援し、様々なGitコマンドからの出力のページャーとしても機能します。インストール手順、新機能とバグ修正の詳細なリリースノート、ホームページ、マニュアル、Stack OverflowのQ&Aセクションなどのリソースが容易に入手できます。バグレポートと機能リクエストは、イシュートラッカーまたはメールで提出できます。

プログラマーが創造的なプログラミングゲームを開発:Droste's Lair

2024-12-17

二人のプログラマーが2週間かけて、創造的なプログラミングゲーム環境「Droste's Lair」を開発しました。このゲームでは、直感的なドラッグアンドドロップ操作で数学構造を構築・計算し、「amb」メカニズムを用いて分岐実行と再帰呼び出しを行います。剣と魔法をテーマにしたこのゲームでは、リスト要素の反転、すべての絵札の組み合わせ生成、ドミノでチェッカーボードを覆う方法の数え上げなどの課題に挑みます。「Droste's Lair」はプログラミングとゲームの要素を巧みに融合し、プログラミングと数学の概念を学ぶための斬新で魅力的な方法を提供します。

Valhalla:Javaの大規模リファクタリングが完了間近

2024-12-17

10年間にわたる取り組みを経て、Javaの大規模リファクタリングであるProject Valhallaが完了間近となっています。クラスとプリミティブのギャップを埋めることを目指し、Valhallaはクラスのコーディングの利便性とプリミティブのパフォーマンスを兼ね備えた値クラスを導入し、フラットでコンパクトなメモリレイアウトを実現します。Devoxx 2024で、Java言語アーキテクトのBrian Goetzは包括的なアップデートを提供し、値クラス、null制約付き型、強化された確定代入分析、厳密な初期化などの主要機能を強調しました。

開発 値クラス

Swiftの新フレームワークForked:共有データ管理を簡素化

2024-12-17

開発者のDrew McCormackは、単一デバイスと複数デバイスの両方における共有データ管理を簡素化する新しいSwiftフレームワークForkedを発表しました。Gitのmergeメカニズムから着想を得て、Forkedは単一ファイル内でのブランチとマージをサポートし、最終的な整合性を達成します。完全な変更履歴は不要で、3方向マージに必要なだけのバージョンを保持します。Forkedはクラスではなく構造体を使用し、Codableをサポートし、iCloudなどのクラウドサービスとシームレスに統合します。さらに、並行アクセスによる競合状態にも対処し、カスタムマージロジックまたは組み込みCRDTアルゴリズムをサポートします。CloudKit同期はわずか数行のコードで実現できます。

CHICKEN Schemeの新コンパイラ:CRUNCH - 静的型付きSchemeコンパイラ

2024-12-17

この記事では、Schemeプログラミング言語の静的型付き部分集合のための新しいコンパイラであるCRUNCHを紹介します。CHICKEN Schemeシステム上に構築されており、Schemeコードを移植可能なC99コードにコンパイルします。CRUNCHは、高性能で軽量なSchemeコンパイラを提供することを目指しており、パフォーマンスと移植性に関して既存のSchemeシステムの欠点を解消します。ゲーム開発、仮想マシンの作成、組み込みシステムプログラミングに特に適しています。CRUNCHはサポートされるScheme機能に制限がありますが、型推論とさまざまな最適化によって効率的なコード生成を実現し、CHICKEN Schemeエコシステムとシームレスに統合されます。

開発

マイクロソフト、Multilspy をオープンソース化:言語サーバークライアント開発の簡素化

2024-12-17

マイクロソフトは、言語サーバーを基盤としたアプリケーション開発を簡素化するPythonライブラリ、Multilspy をオープンソース化しました。Java、Rust、C#、Pythonをサポートし、サーバーバイナリのダウンロード、設定/削除を自動化し、シンプルなAPIを提供します。コード補完、シンボル定義、参照などの静的解析結果を取得するために言語サーバーと連携し、Monitor-Guided DecodingなどのAI支援コード生成技術に不可欠です。

SQL Serverデータベースにおける継承表現のベストプラクティス

2024-12-17

この記事では、SQL Serverデータベースにおける継承関係の表現に関するベストプラクティスを探ります。3つの一般的なアプローチ、すなわち、単一テーブル継承、具象テーブル継承、クラステーブル継承が提示され、それぞれの長所と短所が詳細に説明されています。単一テーブル継承はシンプルですが、スケーラビリティとデータ整合性の問題があります。具象テーブル継承はこれらの問題を解決しますが、クエリ効率が低下します。クラステーブル継承はシンプルさと効率のバランスが取れており、多くのシナリオで最適な選択肢となります。サブタイプ固有のフィールドにJSONを使用する代替アプローチや、正規化されたデータベース設計についても議論されています。

この奇妙なトリックでQEMUを10倍高速化

2024-12-17

NixOSのテストをデバッグ中に、Linus Heckemannは、QEMU仮想マシンで非常に遅いデータコピー時間(2時間以上)を発見しました。`perf`を使用したパフォーマンス分析により、QEMUの9pサーバーがファイルの検索に非効率的なリンクリスト(O(n)の複雑さ)を使用していることが明らかになりました。glibが提供するハッシュテーブル(O(1)の複雑さ)に切り替えることで、テスト時間を7分に短縮し、QEMUプロジェクトへの最適化を成功裏に貢献しました。

ニンテンドーDSでAdvent of Code:組込みシステムにおけるRustプログラミングの挑戦

2024-12-16

著者はニンテンドーDS上でRust言語を用いてAdvent of Code 2024に挑戦しました。この記事では、クロスコンパイル環境の構築、ランタイムレスな組込みシステム上で動作するRustコードの記述、メモリ管理、割り込み、画面出力といった数々の課題への取り組みを詳細に記述しています。著者はこれらの課題を克服し、DSの画面にAdvent of Codeの解答を表示することに成功しました。この記事は、著者の高いプログラミングスキルと組込みシステムに関する深い理解を示しており、リソースの限られた環境下でのプログラミングの技術と楽しさを伝えています。

教育用プログラミング言語設計の原則:なぜコンセンサスが得られないのか?

2024-12-16

本稿では、数十年にわたる教育用プログラミング言語設計の原則の進化を探ります。Wirthらの研究が簡潔さやモジュール性といった原則を強調したにもかかわらず、初心者向けの適切な言語に関して、教育者間では依然として意見の相違があります。本稿では、現在の技術環境におけるこれらの原則の解釈の変化、そして世界中で広く使用されている共通の教育用プログラミング言語が出現しない理由を分析します。著者らは、教育用言語と産業用言語の相対的なメリットについて議論し、各世代の学習者には独自の言語が必要であると主張しています。

OpenAIの大規模クラスタ障害:新たなテレメトリサービスが原因の予期せぬ事態

2024-12-16

OpenAIは12月11日、大規模なサービス停止に見舞われました。原因は、新たに導入されたテレメトリサービスです。このサービスは信頼性の向上を目指していましたが、Kubernetes APIサーバーに予想外の大きな負荷をかけ、サーバーが飽和状態に陥り、多くの大型クラスタでKubernetesコントロールプレーンが停止しました。結果として、DNSベースのサービスディスカバリメカニズムが機能しなくなりました。この事故は、複雑なシステムにおける予期せぬ相互作用と、フルロード時のみ発生する障害モードのテストの難しさを浮き彫りにしています。OpenAIは、クラスタサイズの縮小、Kubernetes管理APIへのネットワークアクセスの遮断、Kubernetes APIサーバーのスケールアップなどの対策でサービスを復旧しました。

Go Protobufの新しい不透明APIがパフォーマンスと安全性を向上

2024-12-16

Goチームは、既存のOpen Struct APIと共存するGo Protobufの新しい不透明APIをリリースしました。この新しいAPIは、生成されたコードと基盤となるメモリ表現を分離することで、パフォーマンスの向上、メモリ割り当ての削減、遅延デコードなどの最適化を実現します。構造体のフィールドを非表示にし、アクセサメソッドのみを通じてアクセスすることで、ポインタ関連のバグや意図しない共有を防止します。移行には、ハイブリッドAPIの有効化、`open2opaque`ツールの使用、そして不透明APIへの切り替えが含まれます。既存のOpen Struct APIは引き続きサポートされます。

(go.dev)
開発

GRUB2の非互換な変更がBIOSセットアップのブートループを引き起こす

2024-12-16

著者のDebianとKali Linuxシステムは、GRUB2のアップデートによって`fwsetup --is-supported`コマンドが追加された後、ブートループが発生しました。古いバージョンのGRUBはこのパラメータを認識しませんでした。問題は、システムのバックアップ復元後に残った古い`efifwsetup.mod`モジュールに起因し、新しいGRUB設定と古いモジュールとの間に競合が発生しました。`grub-efi-amd64-bin`パッケージをインストールすることで問題が解決しました。これは、ソフトウェアアップデートにおける下位互換性の重要性、およびGRUB2のような複雑なソフトウェアにおいて部分的な変更を行う際の潜在的な副作用を考慮する必要性を強調しています。

Rubyカンファレンスのまとめ:世界的な概要

2024-12-16

Ruby Video Talksは、世界中のRuby開発者カンファレンスの情報を集約するウェブサイトです。RubyConf 2024(70件の講演)やRails World 2024(46件の講演)などの主要イベントから、小規模な地域イベントまで、包括的なカレンダーを提供しています。Matzなどの主要スピーカーも紹介しており、日付、場所、トピックで検索できる機能があり、関連イベントを見つけやすくなっています。2025年のBalkan RubyやFriendly.rbなどの今後のカンファレンスも掲載されており、Rubyコミュニティにとってさらに多くの機会が約束されています。

GuileによるEmacs大胆な書き換えプロジェクト

2024-12-16

拡張性で知られるEmacsエディタは、そのコア言語であるEmacs Lisp(Elisp)のパフォーマンスと表現力に限界があります。これを解決するために、Guile-EmacsプロジェクトはEmacsのElispをGuile Lispに置き換えることを目指しています。長年の開発と休止期を経て、Robin TempletonとLarry Valkama両開発者によってGuile-Emacsが復活しました。このプロジェクトは、Elispとの互換性を維持しながら、Guileのコンパイラとパフォーマンスの利点を活用して、Emacsの速度と拡張性を向上させることを目指しています。最終目標は、EmacsのCコードのかなりの部分をLispで書き直すことで、カスタマイズ性を大幅に向上させることです。技術的および政治的な課題はありますが、このプロジェクトはEmacsの将来にとってエキサイティングな可能性を示しています。

開発

RustによるSQLite書き換え:Limboプロジェクトが待ち時間100倍削減を実現

2024-12-16

ヘルシンキ大学とケンブリッジ大学の研究者らが、SQLiteをRustで書き換え、非同期I/Oとio_uringを活用したLimboプロジェクトを開発しました。このプロジェクトは、特にマルチテナントサーバーレス環境において、テールレイテンシを最大100倍削減することに成功しました。同期バイトコード命令を非同期命令に置き換えることで、ブロックを回避し、並行処理を向上させています。Limboの改善は、特に高パーセンタイルのレイテンシに顕著に見られ、高い信頼性が求められるアプリケーションに最適です。

(avi.im)
開発 非同期I/O

Converge、シニアフルスタックエンジニア募集:100万ドル以上のARRを持つマーケティング測定プラットフォーム構築

2024-12-16

Y Combinator支援のConverge社は、ARRが100万ドルを超えるB2Cマーケティング測定プラットフォームを構築するシニアフルスタックエンジニアを募集しています。4名体制のチームは、180社以上の顧客を抱え、年間数十億ドルの売上高と月間数十億件のイベントを処理しています。顧客データ収集、ID解決、マーケティングアトリビューションなど、統合マーケティング測定スタックの構築に携わり、直接顧客と連携し、大きな裁量と影響力を持ちます。行動力、継続的な学習、前向きな姿勢、簡潔さを重視しています。Reactとバックエンド開発の熟練、本番ソフトウェアのデプロイとスケーリングに関する知識が必要です。

Xiaomi Home Assistant統合コンポーネントが正式リリース

2024-12-16

Xiaomiは、Xiaomi IoTスマートデバイスをHome Assistantに統合できるようにするXiaomi Home Assistant統合コンポーネントを正式にリリースしました。このコンポーネントは、Gitクローン、HACS、手動インストールなど、さまざまなインストール方法をサポートしています。ユーザーはXiaomiアカウントでログインする必要があります。複数のアカウントと地域の選択がサポートされています。このコンポーネントは、ほとんどのXiaomiスマートホームデバイスをサポートしますが、現在Bluetooth、赤外線、仮想デバイスは除外されています。制御方法は、クラウド制御とローカル制御(Xiaomiセントラルゲートウェイまたは内蔵ゲートウェイ機能を備えたデバイスが必要です)を含みます。MIoT-Spec-V2をHome Assistantエンティティにマッピングします。このコンポーネントは、複数の言語とデバッグモードもサポートしており、ユーザーのプライバシーとセキュリティを優先しますが、構成ファイルの注意深い保管が必要です。

プログラマーの100万ドルのミス:劇的な展開を伴うバグ

2024-12-16

3G通信スタートアップ企業で働くプログラマー、トレイは、小額のテスト取引を目的とした自動化された支払いテストプログラムを作成しました。しかし、コード内の3つのバグにより、プログラムは5分ごとに彼のテストアカウントに100ドルをクレジットしました。アクティビティチェックの欠如により、ゲートウェイの1つが故障したときにプログラムは数時間実行され続け、多額の金額が蓄積されました。翌朝、トレイはセキュリティチームから質問を受けましたが、彼の部長が状況を説明したため難を逃れましたが、テストアカウントの残高はゼロにリセットされました。

Modelica協会:複雑なシステムを効率的にモデル化

2024-12-16

Modelica協会は、Modelica言語とその関連ツールを推進しています。Modelicaは、複雑なサイバーフィジカルシステムをモデル化およびシミュレートするためのオブジェクト指向言語であり、特に、数学方程式によって制御される再利用可能なコンポーネントの非因果的モデリングに長けています。協会は、ユーザーがシステムを効率的にモデル化できるように、言語仕様、ツール、ライブラリ、およびコミュニティサポートを提供しています。

ミニマルNAS:Alpine initramfsシステム frood

2024-12-16

著者は、完全なAlpine Linuxシステムを含む単一の巨大なinitramfsイメージとして構築されたNASシステム、froodを紹介します。この設計により、起動時間が短縮され、ストレージデバイスの摩耗が軽減されます。設定は簡単で、ファイルはイメージに直接配置され、複雑なDSLや設定ツールは不要です。システムの状態はGitで追跡され、各起動は事実上新しい開始となり、設定の混乱を防ぎます。この記事では、alpine-make-rootfsスクリプトの使用、必須パッケージのインストール、起動スクリプトの作成など、システムの構築プロセスを詳細に説明しています。QEMUでのテストとシステムイメージの更新手順についても説明されています。要するに、froodは軽量で、保守および展開が容易なNASシステムであり、そのシンプルな設計思想は模倣に値します。

開発

HTTP/3の現状:普及に向けた課題と展望

2024-12-16

HTTP/3の仕様は完成していますが、正式な公開はまだ先です。サーバー側のサポートは予想以上に高く、特に上位サイトで顕著です。Cloudflareなどの大手企業はHTTP/3を有効化しており、ブラウザも広くサポートしています。しかし、curlなどのクライアントソフトウェアのHTTP/3サポートはまだ不完全で、主にQUIC対応のTLSライブラリの開発遅延が原因です。OpenSSLのQUICサポートは延期されており、BoringSSLやquictlsなどの代替案にもそれぞれ制限があります。HTTP/3は速度向上を約束していますが、実際の効果はネットワーク環境に依存します。今後のHTTP/3の広範な採用は、仕様の公開と成熟したTLSライブラリに依存します。

開発

RustのVec::drain:Dropを利用した安全性の確保

2024-12-16

この記事では、RustのVec::drainメソッドとそのDrop実装について詳しく解説し、所有権がどのように微妙なバグ(メモリ関連のバグなど)を防ぐかを示します。Vec::drainは、元のベクターへの可変参照を保持し、元のストレージのみを読み書きすることでパフォーマンスを最適化します。重要なのは、Drain構造体のDrop実装で、DropGuardを使用して、イテレーターが途中で破棄された場合でも、残りの要素を安全に元のベクターに戻すことで、メモリの安全性を保証する点です。この記事では、DrainとDropGuardの実装の詳細を徹底的に説明し、ゼロサイズの型やポインターのprovenanceなどの特殊なケースについても扱います。

開発

GNU Makeの新しい--shuffleモード:並列ビルドにおける隠れたバグを発見

2024-12-16

11年間、GNU Makeの並列ビルドでは再現困難なバグが問題となっていました。これを受けて、Makefileのターゲットの実行順序をランダムにシャッフルする新しい`--shuffle`モードが開発されました。これにより、gcc、vim、ghcなど30個以上のパッケージに隠れていたバグが効果的に発見されました。このモードはGNU Make 4.4の一部となり、`make --shuffle`または環境変数`GNUMAKEFLAGS=--shuffle`で利用できます。この強力な機能は、開発者が並列ビルドの問題を特定し解決するのに役立ち、ソフトウェア開発ツールの継続的な改善を強調しています。

Googleの新ローバランスPReQuaL:CPU負荷分散を超えて

2024-12-16

Google ResearchはNSDI 2024で、新しい負荷分散システムPReQuaL(Probing to Reduce Queuing and Latency)を発表しました。従来のCPU負荷分散とは異なり、PReQuaLはサーバーのレイテンシとアクティブなリクエストを積極的にプローブしてサーバーを選択することで、YouTubeなどのシステムにおけるテールレイテンシ、エラー率、リソース消費を大幅に削減します。YouTubeで1年以上運用されており、システム利用率の大幅な向上に貢献しています。この革新的なアプローチは従来の常識に挑戦し、高性能分散システムのための新しいパラダイムを提供します。

開発 負荷分散

ソフトウェアエンジニアのCADと3Dプリンティングの旅:過剰設計されたウェブカメラライザー

2024-12-16

ベテランソフトウェアエンジニアは、仮想世界のプログラミングに飽き足らず、現実世界で何かを作りたいと願いました。彼はBambu Lab X1C 3Dプリンターを入手し、すぐに3Dプリントを習得しました。その後、Fusion 360 CADソフトウェアの学習を始め、その制約の概念がiOSのUI制約と似ていること、パラメトリックCAD設計が関数型プログラミングと共通点が多いことに気づきました。彼の最初のプロジェクトは、ウェブカメラが画面を塞いでしまう問題を解決するための、過剰設計されたウェブカメラライザーです。このプロジェクトを通じて、彼は3DプリントとCAD設計の楽しさを味わうだけでなく、設計段階で製造、材料などの詳細を考慮する必要性を深く理解しました。

Adélie Linux 1.0-BETA6リリース:強化された互換性と充実した機能

2024-12-16

Adélie Linuxは、1.0-BETA6をリリースしました。32ビットと64ビットのARM、POWER、x86アーキテクチャをサポートし、スマートフォン、ゲーム機、スーパーコンピューターなどを網羅しています。このリリースには35以上の新しいパッケージ、GCC 13、LLVM 18、Rust 1.80、Linuxカーネル6.6 LTSのアップデート、GRUBとWaylandのサポート強化などが含まれています。多くのバグが修正され、ユーザーエクスペリエンスが向上しました。既知の問題点もいくつか残っていますが、Adélieチームは積極的に解決に取り組んでおり、バグレポートとフィードバックを歓迎しています。

Cyphernetes:クラウドネイティブKubernetesクラスタ管理の自動化

2024-12-16

Cyphernetesは、クラウドネイティブKubernetesクラスタの管理を自動化するプロジェクトです。デプロイ、アップグレード、管理プロセスを簡素化することで、運用上の複雑さを大幅に軽減します。トラフィックの急増に対応するためにクラスタを容易に拡張し、障害を自動的に修復し、サービスの安定性を確保することを想像してみてください。すべて手動操作なしで実現できます。Cyphernetesは熟練したKubernetesクラスタ管理者として機能し、アプリケーションを24時間365日保護することで、イノベーションに集中できるようにします。

開発 自動運用

Dilloブラウザ:25年の歴史、そして復活劇

2024-12-16

1999年に誕生したDilloウェブブラウザは、25年の歳月を経て、幾多の困難を乗り越えてきました。開発は幾度となく停滞しましたが、生き残ってきました。当初はJorge Arellano Cid氏が主導し、GTKとFLTKという主要な段階を経て、中心的な開発者も変わり、プロジェクトは浮き沈みを繰り返しました。2024年、Rodrigo Arias Mallo氏がプロジェクトを引き継ぎ、コミュニティの支援を受けてバージョン3.1.1をリリースし、このベテランブラウザを再び脚光を浴びる存在にしました。Dilloの物語は、オープンソースの精神を体現する、技術遺産と革新の伝説的な物語です。

1 2 10 11 12 13 15 17 18