Category: 開発

トークナイゼーション問題がNP完全であることが証明され、データ圧縮の課題が倍増

2024-12-22

arXivに掲載された論文では、トークナイゼーションの2つのバリアントのNP完全性が証明されました。トークナイゼーションとは、データセットを最大δ個のシンボルに圧縮する問題であり、その2つのバリアントとは、直接語彙を見つける(直接トークナイゼーション)か、一連の結合操作を選択する(ボトムアップトークナイゼーション)かのいずれかです。この発見は、データ圧縮と自然言語処理に大きな影響を与え、大規模データセットのトークナイゼーション問題を効率的に解決することの途方もない困難さを浮き彫りにしています。

AI時代のプロダクトマネージャー:新しいツール、変わらない本質

2024-12-22

「AIプロダクトマネージャー」という流行語にもかかわらず、AIはプロダクトマネジメントの本質、つまりユーザーニーズの理解、ソリューションの創造、タスクの明確化を変えていません。AIは、大規模言語モデル(LLM)のような強力な新しいツールを提供しますが、プロダクトマネージャーはこれらのツールを活用する立場であり、自ら構築する立場ではありません。この記事では、LLMの基本的な概念(トークン、コンテキストウィンドウ、プロンプトなど)を説明し、プロダクトマネージャーに効果的なプロンプト作成を学び、技術チームと緊密に協力し、製品にとってAIがもたらす実際的な価値に焦点を当てるよう勧めています。つまり、AIはツールであり、代替物ではありません。プロダクトマネージャーはAIを受け入れ、スキルを向上させることで、この時代を生き抜く必要があります。

Meta、Haskellを用いた大規模スパム対策

2024-12-22

スパムやマルウェア対策において重要な役割を果たすMetaのSigmaシステムは、2年間の全面的な見直しを経て刷新されました。このシステムは、大規模な本番システムとしては珍しい選択であるHaskellで書き直され、毎秒100万件を超えるリクエストに対応できるようになりました。Haskellへの移行により、純粋関数型と強い型付けの特性が活かされ、Haxlフレームワークによってデータフェッチの自動バッチ処理と並列処理が可能になりました。以前のFXLベースのシステムと比較して、スループットが20~30%向上しました。このプロジェクトでは、GHCコンパイラへの大きな貢献もあり、いくつかのバグが修正されました。

GitHubオープンソースプロジェクト:epub-ttsで電子書籍を音声に変換

2024-12-22

GitHub上のepub-ttsというオープンソースプロジェクトは、EPUB電子書籍を音声ファイルに変換します。Go言語で記述されており、ffmpegとMacOSの`say`コマンドを利用して、EPUBをセクション(章)に分割し、各セクションを音声ファイルに変換します。現在アルファ版ですが、目が疲れていても頭が冴えている場合の簡単な代替手段となります。将来の計画には、コードの最適化、バッチ変換、音声ファイルサイズの縮小、より多くの言語のサポートなどが含まれます。

twtxt:分散型ミニマリストマイクロブログサービス

2024-12-22

twtxtは、ハッカー向けに設計された、分散型でミニマリストなマイクロブログサービスです。ドキュメントには、インストール、クイックスタート、使用方法、設定、APIの詳細などが含まれています。ユーザーは、ソースをフォローしたりアンフォローしたり、ステータス更新を投稿したり、タイムラインや特定のソースのフィードを表示したり、コマンドラインインターフェース(CLI)を介してtwtxtと対話したりできます。ソースコードはGitHubでホストされており、貢献は大歓迎です。

ブルームフィルター:SQLiteを10倍高速化した秘密

2024-12-22

研究者たちは、ブルームフィルターを巧みに使用することで、SQLiteの分析クエリを10倍高速化しました。SQLiteのネストされたループ結合が非効率で、Bツリープローブに多くの時間が費やされていることを発見しました。結合操作の前にブルームフィルターを使用して、一致しない可能性のある行をすばやくフィルタリングし、潜在的な一致についてのみBツリープローブを実行することで、プローブ回数を大幅に削減しました。ブルームフィルターはメモリオーバーヘッドが最小限で、SQLiteの既存のクエリエンジンへの統合も容易であり、パフォーマンスの大幅な向上をもたらしました。この改善は、SQLite v3.38.0に統合されています。

(avi.im)

Jujutsu:革新的なバージョン管理システム

2024-12-22

JujutsuはGitをベースにした新しいバージョン管理システムで、独自の概念モデルとコマンドセットにより、ローカルファイルとのやり取りを簡素化します。Gitとは異なり、Jujutsuでは作業コピーの状態を常にコミットとして扱い、ディスク上の編集は現在のコミットに即座に反映されます。これにより、古いコミットの修正、差分の表示、進行中の作業の管理など、多くの操作が効率化されます。ワークフローは直感的で、Gitの経験がなくても簡単に使用でき、Gitエコシステムとシームレスに統合します。VSCodeとの完全な統合など、まだ欠けている機能もありますが、Jujutsuは革新的な設計とユーザーフレンドリーなエクスペリエンスにより、大きな可能性を示しています。

開発

CodeMic:AI搭載コード生成ツール

2024-12-22

CodeMicは、自然言語記述に基づいてコードを生成するAI搭載ツールです。高品質のコードを迅速に生成し、開発効率を大幅に向上させます。経験豊富なプログラマーも初心者も簡単に使用でき、より創造的な作業に集中できます。CodeMicは複数のプログラミング言語に対応しており、継続的に学習・改善することで、開発者へ強力なコードアシスタンスを提供します。

Fish Shell 4.0b1ベータ版リリース:コアコードがRustで書き直され、大幅な改善が盛り込まれています

2024-12-22

Fish Shell 4.0b1ベータ版がリリースされました!最大のハイライトは、コアコードがC++からRustに移植されたことで、パフォーマンスの大幅な向上と機能強化が実現しました。その他にも、ターミナルサポートの改善、強化されたバインディング機能、スクリプト機能の向上、インタラクティブエクスペリエンスの向上など、多くの改善が含まれています。後方互換性にない変更点としては、バインディングの新しいキー表記法とqmark-noglob機能のデフォルト有効化などが挙げられます。全体として、これはユーザーにより強力で効率的なシェルエクスペリエンスを提供する重要なリリースです。

開発

Notion:オールインワンのワークスペース

2024-12-22

Notionは、ノート、タスク管理、Wiki、データベースを単一のプラットフォームに統合したオールインワンのワークスペースです。ユーザーは、すべて情報を一箇所で整理・管理でき、生産性を向上させることができます。個人的なノート、チームコラボレーション、ナレッジベース構築など、様々なニーズに対応しており、高度なカスタマイズ機能により、効率的な個人にとって強力なツールとなっています。

cURLとlibcurlがHyperサポートを終了

2024-12-22

4年間の試行の後、cURLプロジェクトはRustで記述されたHyperライブラリをHTTPバックエンドとして使用することを断念すると発表しました。Hyperはメモリ安全性に優れ、Let's Encryptの支援を受けていましたが、ユーザーからの需要と開発者の参加が不足していたため、最終的にプロジェクトは終了しました。cURLチームは、Hyperコードの維持コストが高いため、既存のコードの最適化と保守に注力すると述べています。実験は失敗に終わったものの、cURLは貴重な経験を得て、HTTP処理能力を向上させました。

開発

しつこいフィードリーダーがウェブサイトをダウンさせる

2024-12-22

ブロガーがウェブサイトにアクセスできない問題が発生し、調査の結果、キャリアやホスティングではなく、問題のあるフィードリーダーソフトウェアが原因であることが判明しました。これらのリーダーはベストプラクティスを無視し、無条件の要求を送信し、429エラー(要求が多すぎる)を無視するため、最終的にサーバーが防御的にシャットダウンしました。ブロガーはブログ投稿でユーザーにフィードリーダーをチェックするよう促し、「フィードリーダースコア」というツールを提供して、リーダーの動作を分析し、問題を解決しました。

タオの新しい論文:GUEとその小行列の固有値分布の探求

2024-12-22

著名な数学者テレンス・タオの最新のarXivプレプリントでは、ガウスユニタリアンサンブル(GUE)とその小行列の固有値分布を固定インデックスで深く掘り下げています。行列式過程と洗練された解析的手法を用いて、固有値ギャップに関するいくつかの推定値を確立し、これまで未解決だった問題に取り組み、GUE境界条件を持つ「ハニカム」の極限挙動に関する将来の研究への道を開いています。この研究は、ランダム行列モデルとその関連分野の理解に大きく貢献します。

イーサリアムオンチェーンアップグレードシグナリングEIP:コミュニティコンセンサスがアップグレードを推進

2024-12-22

この提案は、イーサリアムクライアントが新しくマイニングされたブロックのextraDataフィールドに「投票」インジケーターを埋め込むことで、プロトコルアップグレードへの準備状況を知らせるオンチェーンメカニズムを導入します。将来のフォークアクティベーションブロックは、指定されたウィンドウ内で十分なブロックがアップグレードを「支持」した場合にのみ発生します。これにより、アップグレードの決定がイーサリアム財団からネットワーク参加者に移行し、分散化が向上し、中央集権化のリスクが軽減されます。

IoTプロジェクトにおけるWi-Fiバッテリー消費の最小化

2024-12-22

PetDriftsの初期開発段階では、ESP32 C3を使ったIoTデバイスのバッテリー寿命が課題となり、わずか1日しか持ちませんでした。原因は、15分ごとのHTTP POSTリクエストによる高電力消費であることが判明しました。これを解決するため、チームは2つの解決策を検討しました。ネットワークオーバーヘッドを削減するためにTCPからUDPへの切り替え、そして持続的な接続と低電力消費のためにMQTTの採用です。改善は見られましたが、バッテリー寿命は不十分でした。最終的に、より長いバッテリー寿命を実現するために、BluetoothベースのMCUを採用しました。

SQLiteバックエンドのキーバリューストア:JSライクなオブジェクト操作と自動JSONシリアライゼーション

2024-12-22

GitHubのプロジェクトで、SQLite上に構築されたキーバリューストアが紹介されています。これは、自動JSONシリアライゼーションによる、JavaScriptライクなオブジェクト操作を可能にします。`createDatabaseClient`関数は、独立したリーダー(`rdr`)とライター(`wtr`)コンポーネントを持つ並列クライアントを作成します。ライターは部分的なJSON更新にプロキシを使用し、リーダーはプレーンなJavaScriptオブジェクトを返します。包括的なテストでは、基本的なCRUD操作、ネストされた更新、削除、配列操作などがカバーされています。

Nix Home Manager: dotfiles管理ガイド

2024-12-22

この記事では、Nix Home Managerによるdotfiles管理の利点とテクニックについて詳しく解説します。著者はまず、NixとHome Managerの急峻な学習曲線を認め、段階的な学習アプローチを推奨しています。記事では、ソフトウェアのインストール、宣言的なプログラムとサービスの設定、dotfiles管理など、Home Managerの様々なユースケースについて説明します。特に`mkOutOfStoreSymlink`関数に焦点を当て、システム全体を再構築せずにdotfilesを変更できることを示します。可変と不変の設定間の切り替えを容易にするカスタムモジュールの例も提供されています。最後に、著者はHome Managerを他のdotfiles管理ツールと比較し、再現性の利点を強調しています。

開発

GCCビルド失敗:sbuildのリファクタリングが引き起こしたデバッグミステリー

2024-12-22

Debian GCCの公式ビルドが、sbuildのリファクタリング後、不可解に失敗し始めました。調査チームは6段階の調査を行い、最終的にsbuildの新しい初期化システムとD言語のユニットテストとの間の競合を発見しました。テストが誤って自身のプロセスグループを終了させたことで、ビルドが中断されました。根本原因は、D言語のユニットテストで-2を特別なPID値として使用したことでした。これにより、SIGTERMシグナルが間違ったプロセスグループに送信されました。古い初期化システムに戻すか、テストコードを変更することで、問題は解決しました。

開発

OS XとiOSにおけるNeXTの不朽の遺産

2024-12-22

この記事では、NeXT社とそのオペレーティングシステムNeXTSTEPが、AppleのOS XとiOSに与えた大きな影響を探ります。NeXTSTEPのUNIX基盤は、保護されたメモリ、プリエンプティブマルチタスク、デーモンなどの重要な機能をもたらし、安定性と効率性を向上させました。また、Objective-Cプログラミング言語とCocoaフレームワークも導入し、ソフトウェア開発を簡素化し、Interface Builderなどの強力なツールを生み出しました。さらに、NeXTSTEPのDisplay PostScript技術は、OS XのQuartzグラフィックシステムの基礎を築きました。これらの技術は現在もAppleデバイスの中核を成しており、NeXT社の現代コンピューティングへの大きな貢献を強調しています。

開発

遅いデプロイは会議を生む:逆因果関係の議論

2024-12-22

プログラマーは、多くの会議が生産性を阻害するとよく不満を言います。ケント・ベックは、この考え方に異議を唱え、会議は遅いデプロイの結果であり、原因ではないと示唆しています。Facebookの経験は、デプロイ頻度の増加が重要であることを示しています。デプロイ速度がコード変更に遅れをとると、組織はリスクを軽減するために会議やレビューを追加し、最終的に効率が低下します。会議を減らすのではなく、サイクルを短縮したり、コードの品質を向上させたりすることで、デプロイ能力の向上に焦点を当てましょう。このエッセイは、遅いデプロイと組織的なオーバーヘッド増加の反直感的な関係を探求する、新しい視点を与えます。

F#のエラー処理の改善:FaultReportの導入

2024-12-22

この記事では、F#のResult型におけるエラー処理の欠点について批判的に論じており、エラー型の不整合や、文字列をエラー型として使用することによる問題点を強調しています。著者 はFaultReportという代替案を提案しており、IFaultインターフェースを使用してエラー型を標準化し、Report<'Pass', 'Fail>型を使用して操作の結果を表しています。ここで'FailはIFaultインターフェースを実装する必要があります。これにより、エラー処理の一貫性と型安全性 が確保され、文字列ベースのエラーによる不便さが解消されます。FaultReportはさらに、Report.generalizeによるアップキャストとFailAsアクティブパターンによるダウンキャストを提供し、さまざまなエラー型の処理を容易にしています。FSharp.CoreのResultを置き換えることは大きな仕事ですが、著者はFaultReportの設計がF#のエラー処理に貴重な改善をもたらすと主張しています。

開発

GitHubアシスタント:自然言語でGitHubリポジトリを探索

2024-12-22

GitHubアシスタントは、自然言語の質問を使用してGitHubリポジトリを探索できる概念実証プロジェクトです。Reltaとassistant-uiを使用して構築されており、ユーザーは簡単な日本語で質問をし、関連するリポジトリ情報を受け取ることができます。Reltaサブモジュールは現在クローズドソースですが、リクエストに応じて利用可能です。Python 3.9+、npm、Git、OpenAI APIキーとデータベース接続URIの設定が必要です。

Rosetta 2開発者がLean FROに参加、コードジェネレーターの強化へ

2024-12-22

AWSの上級主席応用科学者兼Lean FRO(非営利団体)の主任アーキテクトであるLeonardo de Mouraは、Rosetta 2の開発者であり、Appleで15年以上にわたり低レベルシステムソフトウェアを専門とする優れたソフトウェア開発者であるCameron ZwarichがLean FROチームに加わったことを発表しました。ZwarichはLeanのコードジェネレーターの改善に注力し、Leanエコシステムに大きな影響を与えることが期待されます。

ワークフロー改革:公開CHANGELOGの力

2024-12-22

AWSエンジニアのDaniel Doubrovkine氏は、自身の仕事の公開CHANGELOGを維持することについての経験を共有しています。毎週のタスクを公に文書化することで、透明性と協調性を促進します。この実践は、大きなメリットをもたらしました:より生産性の高い1対1ミーティング、新しいエンジニアの円滑なオンボーディング、過去の仕事の容易なアクセス、自己省察の向上、同僚間の信頼の向上などです。彼は他の人にもこのアプローチを採用するよう促し、簡単な記録方法と、年間目次を生成するためのRubyスクリプトを共有しています。

BlenderにおけるUSDインポートの奇妙な遅延事例

2024-12-22

開発者がBlenderでUSDシーンをインポートする際に、予想外に遅いインポート時間の問題に遭遇しました。プロファイリングの結果、ボトルネックはBlenderの内部IDソート関数`id_sort_by_name`にあることが判明しました。この関数はO(N)の複雑度を持つと期待されていましたが、USDファイルの命名スキームのためにO(N²)に劣化していました。命名規則を変更し、ソートアルゴリズムを最適化することで、開発者は小さなファイルのインポート時間を4分40秒から8秒に短縮しました。しかし、根本的な問題はBlenderがソートされたIDを必要とすることにあり、連結リストをトライ木やハッシュテーブルに置き換えることが提案されています。この最適化は、パフォーマンスチューニングにおける共通の課題、つまり予期せぬ複雑性の特定と解決を浮き彫りにしています。

開発

cqd:オブジェクト属性をカラフルに表示するPythonユーティリティ

2024-12-22

cqdは、オブジェクト属性をカラフルに表示する軽量なPythonユーティリティです。開発やデバッグ中にオブジェクトの検査を簡素化します。属性は色分けされています:dunderメソッド(青)、保護された属性(黄)、公開属性/メソッド(緑)。たとえば、Hugging Faceのトークナイザーの属性を簡単に表示するのに役立ちます。インストールは`pip install cqd`で簡単に行えます。使用するには、`cqd`関数をインポートして`cqd(your_object)`を呼び出します。

Java JEP 483: 事前クラスローディングとリンクによる起動時間の大幅短縮

2024-12-22

JEP 483は、HotSpot JVMの起動時にアプリケーションクラスを事前にロードおよびリンクすることにより、Javaアプリケーションの起動時間を大幅に短縮します。これは、アプリケーションの単一実行を監視し、すべてのクラスのロード済みおよびリンク済みフォームをキャッシュに格納して、後続の実行で再利用することによって実現されます。この機能はコードの変更を必要とせず、Spring PetClinicなど、大規模なサーバーアプリケーションで大幅な速度向上をもたらします(起動時間が42%短縮)。現在は2段階のプロセスですが、将来のバージョンではキャッシュ作成が1段階に簡素化され、より柔軟なトレーニング実行設定が可能になります。

開発

Metaにおける大規模なJavaからKotlinへの移行:数百万行のコードを克服

2024-12-22

Metaは、巨大なAndroidコードベースをJavaからKotlinに移行するために、長年にわたる取り組みを行ってきました。この記事では、MetaがKotlinatorという自動化ツールを構築して、ビルド速度の遅さや不十分なリンターなどの課題を克服し、コードの半分以上を正常に変換した方法を詳しく説明しています。Kotlinatorは、プリプロセッシング、ヘッドレスJ2K変換、ポストプロセッシング、エラー修正など、複数のフェーズで構成されています。MetaはJetBrainsとも協力してJ2Kを改善し、コミュニティの協調を促進するためにプロセスの部分をオープンソース化しました。この記事では、null安全性の処理と、変換中に発生したさまざまなコードの問題と解決策について重点的に説明しています。

壁越しの会話がプログラマーとしての私の人生を変えた

2024-12-21

1983年、大手防衛関連企業で働いていたプログラマーは、化学の博士号取得を目指していました。ある日、隣室の「マイクロコンピューターグループ」(技術好きの管理者がいた部署)のマネージャーと壁越しに話をしたことがきっかけで、Apple IIに関する会議に招待されました。そこで、会社社長が自宅でメールを読めるように、1週間で6502アセンブリ言語でVT-100ターミナルエミュレーターを作成するという、緊急の任務を負うことになります。この経験は、彼のキャリアの方向転換、マイクロコンピューターグループへの参加、同社唯一のPCプログラマーとしての地位獲得、そして自身の会社設立へと繋がりました。何年も後になって、彼は偶然の出会い、そして人間関係がいかに人生を大きく変えたかを振り返っています。

ソフトウェアデザインの哲学:複雑さを制御する

2024-12-21

この記事は、『ソフトウェアデザインの哲学』からの3つの主要な概念を要約しています。複雑さに対するゼロトレランス、より小さなコンポーネントが常に優れたモジュール性につながるとの誤解、そして例外処理に固有の複雑さです。著者は、複雑さは単一のエラーによって引き起こされるのではなく、時間の経過とともに蓄積されると主張しています。注文処理システムとユーザー登録の例は、重複コードを回避し、コンポーネントのサイズとモジュール性の適切なバランスを見つける方法を示しています。さらに、この記事では、例外処理の複雑さを軽減するための3つのテクニック、つまりエラーの排除、例外のマスキング、例外の集約について詳しく説明しており、ファイル処理を例として挙げています。この本は最終的に、ソフトウェアデザインにおける複雑さの継続的な簡素化の重要性を強調しています。

1 2 8 9 10 12 14 15 16 19 20