Category: 開発

パニックなしRust:Rustは低レベルシステムプログラミングにおいてCに取って代わる事ができるか?

2025-02-03

この記事は、低レベルシステムプログラミングにおいてRustがCに取って代わる可能性、特にupbというProtocol Buffersライブラリに焦点を当てて探求しています。著者は当初、RustがCのパフォーマンスとコードサイズに匹敵できるかどうかを疑問視していましたが、「パニックなしRust」と呼ばれる手法を発見しました。これは`panic!()`の使用を避けることを意味します。この記事では、「パニックなしRust」の原則、利点、課題について詳しく説明し、コードサイズ、回復不能な終了、ランタイムオーバーヘッドなどの問題を取り上げています。libcライブラリ、最適化オプション、`std::hint::assert_unchecked`などのテクニックを使用してパニックなしRustコードを記述する方法を示し、デバッグモードでのオーバーフローチェックの保持を強調することで、追加の一貫性チェックを行います。この手法は綿密な作業を必要とし、標準ライブラリのほとんどを避ける必要があるかもしれませんが、Rustの安全性保証を維持しながら、Cライブラリと同じパフォーマンスとコードサイズを提供することを約束します。

開発

Mailspring:高速で軽量なオープンソースメールクライアント

2025-02-03
Mailspring:高速で軽量なオープンソースメールクライアント

Mailspringは、元の作者の1人によってメンテナンスされているNylas Mailの新しいバージョンです。より高速で軽量になり、本日リリースされました!Nylas MailのJavaScript同期コードを、Mailcore2ベースの新しいC++同期エンジンに置き換え、RAMとCPUの使用率は約半分になりました。アイドル状態でのCPUウェイクアップはほぼゼロなので、バッテリー駆動時間が大幅に向上します。また、完全に改良されたコンポーザーとその他の素晴らしい新機能も備えています。MailspringのUIはオープンソース(GPLv3)で、TypeScript、Electron、Reactを使用して記述されており、拡張しやすいプラグインアーキテクチャ上に構築されています。Mailspringの同期エンジンはElectronアプリケーションによって生成され、ローカルのコンピューター上で実行されます。これもオープンソース(GPLv3)で、C++とCで記述されています。ただし、開発環境の設定時には、プラットフォーム向けに提供されている最新の同期エンジンバージョンが使用されるため、ソースコードを取得したり、コンパイル時の依存関係をインストールする必要はありません。

Windows 11 Insider BuildにPaintのCopilotボタン追加

2025-02-03
Windows 11 Insider BuildにPaintのCopilotボタン追加

新しいWindows 11 Insider Build(26120.3073)では、Microsoft PaintにCopilotボタンが追加され、Cocreator、Image Creator、Generative Erase、Remove Backgroundなどの生成AI機能へのアクセスが簡素化されました。これらの機能は既に存在していましたが、ボタンによってワークフローが改善されます。このアップデートには、クラウド上の写真検索(Copilot+ PCのみ)、タスクバー、システムトレイ、ファイルエクスプローラーのバグ修正なども含まれています。これはInsider向けのプレビューであり、安定版Windows 11への提供時期は発表されていません。

開発

私の苗字は「Null」で、インターネットを壊している

2025-02-03
私の苗字は「Null」で、インターネットを壊している

著者の苗字は「Null」で、多くのプログラミング言語では予約語です。この一見無害な詳細が、ウェブサイトのフォーム送信の失敗からメールアドレスの拒否まで、重大な問題を引き起こします。「Null」を受け入れるシステムでも、予期せぬエラーが発生します。ピリオドを追加したり、エイリアスを使用するなど、回避策は一時的な修正です。このユーモラスな物語は、一般的なソフトウェア開発の問題と、大企業がそれらを効果的に解決できないことを浮き彫りにしています。著者がBank of Americaのメールシステムと苦労している様子は、その好例です。

開発

SCQA:魅力的なストーリーを構成するためのフレームワーク

2025-02-03
SCQA:魅力的なストーリーを構成するためのフレームワーク

SCQAは、状況(Situation)、複雑さ(Complication)、質問(Question)、回答(Answer)を用いて情報を構成し、明確で魅力的な物語を作るためのフレームワークです。この記事では、理学療法におけるゲーミフィケーションを例に、SCQAが単調なプロセスを魅力的なストーリーに変換し、患者のエンゲージメントを向上させる方法を示しています。ビジネス、政策、科学など様々な分野や、メール、プレゼンテーション、書籍、ブログなどのメディアに適用でき、SCQAはコミュニケーションと明確性を向上させます。

ヒルベルトの第10問題の拡張:より広い環に対する決定不能性が証明される

2025-02-03
ヒルベルトの第10問題の拡張:より広い環に対する決定不能性が証明される

数学者たちは、ヒルベルトの第10問題の大きな拡張を解き、ディオファントス方程式が解を持つかどうかを決定することが、広範な数の環に対して決定不能であることを証明しました。1970年のユーリ・マチャセビッチによる整数解に関する証明に基づいて、この研究は楕円曲線と二次ねじれを用いて、非整数解を持つ以前のアプローチの限界を克服しています。このブレークスルーは、計算可能性の限界に関する理解を深めるだけでなく、数学研究のための新たなツールも提供します。

コード検索のベンチマーク:課題とVoyage AIのアプローチ

2025-02-03
コード検索のベンチマーク:課題とVoyage AIのアプローチ

現代のコーディングアシスタントはコード検索に大きく依存していますが、既存の評価方法は不十分です。Voyage AIの研究は、現在のデータセットにおける問題点を浮き彫りにしています。ノイズの多いラベル、深層アルゴリズム的推論の評価不足、データ汚染などにより、モデル評価が信頼できない結果になります。これに対処するため、Voyage AIは高品質なコード検索データセットを作成するための2つの方法を提案しています。質問応答データセットの再利用と、GitHubのリポジトリと課題/チケットの活用です。Voyage AIは、複数のプログラミング言語、様々なQAデータセット、ドメイン固有のベンチマークを網羅した独自の内部ベンチマークスイートも構築し、複数のコード埋め込みモデルを評価しました。その結果、Voyage-code-3モデルが最高の性能を示しました。

シニア開発者の知恵:書き直しを避け、効率的にコーディングする

2025-02-03

シニア開発者が自身のソフトウェア開発哲学を共有し、ゼロからのコードの書き直しにおける落とし穴を強調しています。書き直しが魅力的に見えるときには、すでに避けられたはずのミス、例えば技術的負債の蓄積やコードの複雑さの増加などが発生していることを指摘しています。アドバイスとしては、拡張フェーズ(新機能)と統合フェーズを交互に行い、磨き上げとテストに十分な時間を割り当て、ベストプラクティスを自動化することなどが挙げられています。エッジケースや異常なデータの考慮、そしてその正しさが明らかなテストしやすいコードの記述も重要視されています。

開発

Rustの`time`クレート、書き直されたアルゴリズムにより57.5%高速化

2025-02-03

5年にわたるRustの`time`クレートのメンテナンスの後、著者は大きなパフォーマンス最適化を行いました。ユークリッドアフィン関数と巧妙な整数演算を利用して`Date::to_calendar_date`アルゴリズムを再設計することにより、浮動小数点演算と分岐を回避し、パフォーマンスを57.5%向上させました。新しいアルゴリズムは、日付と月の両方をまとめて計算する場合だけでなく、個別に計算する場合にも大幅に高速です。これは簡単な作業ではありませんでしたが、著者はパフォーマンスの向上は努力に見合う価値があると信じています。

開発

httptap:Linux での HTTP/HTTPS リクエスト監視ツール

2025-02-03
httptap:Linux での HTTP/HTTPS リクエスト監視ツール

httptap は、root 権限なしで、あらゆるプログラムが実行する HTTP および HTTPS リクエストを監視する Linux 用コマンドラインツールです。独立したネットワークネームスペースでターゲットプログラムを実行し、ネットワークトラフィックをインターセプトすることで実現しています。Go 言語で記述されており、依存関係がなく、すぐに実行できます。URL、HTTP ステータスコード、リクエストボディ、レスポンスボディなど、リクエストの詳細情報を表示し、データを HAR ファイルにエクスポートする機能もサポートしています。httptap は DoH(DNS over HTTPS)にも対応し、HTTP リダイレクトを処理します。

開発

Linuxのdm-writecacheでHDDの書き込み性能を向上させる

2025-02-03
Linuxのdm-writecacheでHDDの書き込み性能を向上させる

この記事では、Linuxのdm-writecacheカーネルモジュールについて詳しく解説します。このモジュールは、NVMe SSDを遅いHDDのライトバックキャッシュとして利用することで、ランダム書き込みのパフォーマンスを劇的に向上させます。著者は、dm-writecacheの有無によるランダム書き込み速度の違いを、実験を通して数十倍の速度向上を実証しています。bcacheやReadyBoostなどの他のキャッシング方法やツールについても触れ、LVM2を使用する場合と使用しない場合のdm-writecacheの設定方法を詳細に説明しています。LVM2がない場合でも、dmsetupを使用して手動で設定できます。最後に、dm-writecacheによる著しいパフォーマンス向上をまとめ、残りのNVMe容量を他の遅いドライブのキャッシュとして利用することを提案しています。

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

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

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

開発

Appleのtypedstream形式のリバースエンジニアリング:imessage-exporterの中身

2025-02-03

この記事では、imessage-exporterプロジェクトによって行われた、Apple独自のバイナリシリアル化プロトコルであるtypedstreamのリバースエンジニアリングのプロセスについて詳しく説明しています。iMessageデータの保存に使用されるtypedstreamは、ドキュメント化されておらず、Appleの公開APIの一部ではありません。iMessageデータベース内のBLOBデータを分析することにより、著者らはtypedstream形式内のパターンを特定しました。たとえば、0x84はデータブロックの開始を示し、それに続くバイトは長さを示し、0x86はブロックの終了を示します。これらのパターンを使用して、著者らはtypedstreamデータを逆シリアル化し、iMessageデータへのクロスプラットフォームアクセスを実現しました。

PythonのJITデコレータ:3つの実装戦略

2025-02-03

この記事では、Pythonで人気のJITデコレータパターン、特にJAXとTritonライブラリでの使用について詳しく説明します。著者は簡略化された例を用いて、ASTベース、バイトコードベース、トレースベースの3つのJITデコレータをゼロから実装します。ASTベースのアプローチは抽象構文木を直接操作し、バイトコードベースのアプローチはPythonのバイトコードインタプリタを活用し、トレースベースのアプローチは実行時の関数の実行をトレースすることで式IRを構築します。この記事では、各アプローチの長所と短所を詳しく説明し、JAXとNumbaを例に、現実世界のアプリケーションにおける戦略を説明します。

開発

C言語によるWebAssembly仮想マシンの構築:6ヶ月間のサイドプロジェクト回顧

2025-02-03

6ヶ月間、著者は余暇時間を使い、Semblanceという名前のC言語によるWebAssembly仮想マシンを構築しました。このプロジェクトは、短命なサイドプロジェクトのサイクルから脱却し、WebAssemblyコア仕様の深い理解を可能にしました。この記事では、モジュールのデコード、インポートの解決、モジュールのインスタンス化、命令の実行などを網羅したアーキテクチャの詳細を説明しています。著者は課題と学びを共有し、最終的に「Hello, World!」プログラムを正常に実行しました。このプロジェクトは、著者のスキル向上だけでなく、将来の産業レベルのランタイムへの貢献のための強力な基盤も築きました。

開発

Rubyのスレッド競合:乱闘ではない

2025-02-03

長い間、Rubyにおける「スレッド競合」を誤解していました。それは混沌とした争いではなく、Rubyのスレッドはグローバル仮想マシンロック(GVL)を取得するためにきちんとキューイングします。各スレッドはGVLを取得し、コードを実行し、その後解放するか、一定時間(スレッドのクォンタム、デフォルト100ms)後にプリエンプションされます。これは、スレッドがI/Oを実行するか、クォンタムより長く実行された場合に発生します。これを理解することは、マルチスレッドアプリケーションの最適化、特にCPUバウンドスレッドがI/Oバウンドスレッドをブロックしてテールレイテンシが増加するのを防ぐために不可欠です。CPUバウンドスレッドの優先順位を下げるか、スレッドクォンタムを減らすことで対応できますが、最小スライスは10msです。

開発

YouTubeチャンネル削除:インディーデベロッパーがアルゴリズムの誤作動で被害

2025-02-03
YouTubeチャンネル削除:インディーデベロッパーがアルゴリズムの誤作動で被害

インディーデベロッパーSinevibesのYouTubeチャンネルが「スパムと欺瞞的なポリシー違反」を理由に削除され、物議を醸している。Sinevibesは、独自の製品デモしか投稿しておらず、削除に困惑しているという。この事件は、アルゴリズムの誤判定がコンテンツクリエイターに与える影響を浮き彫りにし、プラットフォームのモデレーションに関する議論を巻き起こしている。

開発

Google、Dartマクロプロジェクトを中止:焦点を絞ることが重要

2025-02-03
Google、Dartマクロプロジェクトを中止:焦点を絞ることが重要

GoogleのDartチームは、FlutterとDartの開発における繰り返しコードの記述を簡素化することを目的としたマクロプロジェクトの中止を発表しました。パフォーマンス目標を達成できず、長年のプロトタイピングによるリターンも不十分だったため、Googleはマクロをより小さな機能に分割します。FlutterとDartチームの元リーダーである著者は、この決定をSteve Jobsの「ノーと言うことで、イエスと言うためのスペースを作る」という哲学と結びつけ、焦点を絞ることの重要性を強調しています。そして、Dartチームの将来に楽観的な見方を示しています。

開発

Ubuntu開発チーム、リアルタイムコミュニケーションにMatrixへ移行

2025-02-03
Ubuntu開発チーム、リアルタイムコミュニケーションにMatrixへ移行

Ubuntu開発チームは、2025年3月からリアルタイムコミュニケーションの主要プラットフォームをIRCからMatrixに移行すると発表しました。この変更は、コミュニケーションの効率化、断片化の防止、そして新規開発者の獲得を目指しています。IRCは依然として人気がありますが、その機能の制限から、ディスカッション履歴、検索、オフラインメッセージングなどの機能を備えたMatrixのようなより豊富なプラットフォームを好む新しい貢献者にとって魅力が薄れています。多くのUbuntuチームやオープンソースプロジェクトが既にMatrixを使用しており、自然な選択となっています。これは開発者の内部コミュニケーションのみに影響し、エンドユーザーには影響ありません。

開発

軽量な永続実行:オープンソースライブラリDBOS Transact

2025-02-03
軽量な永続実行:オープンソースライブラリDBOS Transact

従来の永続実行は、AWS Step Functionsなどの外部オーケストレーターに依存しており、開発と展開が複雑になります。DBOS Transactは、外部オーケストレーターを必要とせずに、永続実行をプログラム自体に統合する軽量なオープンソースライブラリです。Postgresデータベースにプログラムの実行状態を永続化することで永続実行を実現し、プログラムがクラッシュまたは再起動した場合でも、中断した箇所から自動的に復旧できます。DBOS Transactは、永続スリープ、永続メッセージング、永続キューなどの追加機能も提供し、信頼性の高い状態を持つプログラムの開発をさらに簡素化します。

開発

最新のDocker Composeデプロイメントにおけるシークレットの保護

2025-02-03
最新のDocker Composeデプロイメントにおけるシークレットの保護

このガイドでは、Docker Composeでのシークレット管理のベストプラクティスを探求し、基本的なアプローチからより安全な構成へと段階的に進めます。環境変数や.envファイルを使用することのリスクを強調し、シークレットがどのように公開される可能性があるかを示します。3つの方法、ファイルとしてマウントされた環境変数の使用、ホストからマウントされたファイルベースのシークレット、そして粒度の細かいアクセス制御を備えたDocker Composeのシークレット機能の活用について詳しく説明します。安全なファイル管理の重要性、シークレットのハードコーディングの回避、Phaseなどのツールを使用してプロセスを簡素化することの重要性を強調し、最終的にはセキュリティを強化し、インシデントを防止することを目的としています。

シェーダーを使ったレトロな3Dウェブサイト効果の作成:ディザリング、量子化、ピクセル化

2025-02-03
シェーダーを使ったレトロな3Dウェブサイト効果の作成:ディザリング、量子化、ピクセル化

著者は数ヶ月かけて個人ウェブサイトを構築し、シェーダーとWebGLのスキルを披露するために3D作品を取り入れました。この記事では、3Dシーンの視覚効果を高める上でポストプロセッシングが果たす重要な役割、特にレトロな効果の作成に焦点を当てて深く掘り下げています。様々なディザリング技術(ホワイトノイズ、オーダード、ブルノイズ)を網羅し、シェーダーを使った実装方法を説明しています。さらに、カスタムパレットを可能にするカラー量子化技術についても詳細に説明しています。記事は、ピクセル化とCRTモニターのエミュレーションを組み合わせた、見事なレトロな3Dウェブサイト効果で締めくくられています。

NSDI '24: Autothrottle:SLOをターゲットとしたマイクロサービスのリソース管理のための実際的な二段階アプローチ

2025-02-03

USENIXはオープンアクセスにコミットしており、イベントの研究成果を無料で公開しています。論文、会議録、およびその後のビデオ/オーディオ/スライドは、イベント後にすべての人に公開されます。これには、Wangらが発表したNSDI '24の論文「Autothrottle:SLOをターゲットとしたマイクロサービスのリソース管理のための実際的な二段階アプローチ」が含まれ、SLOをターゲットとしたマイクロサービスのリソース管理のための実際的なアプローチが提示されています。論文、ビデオ、スライドは現在公開されています。

開発

グローバル変数:思っているほど悪くない

2025-02-03

この記事では、シンプルなカウンタの例を用いて、グローバル変数を避けることが予期せぬバグにつながる可能性を示しています。著者は、問題はグローバル変数自体ではなく、データアクセスにおける隠れた性質「遠隔作用」にあると主張しています。様々な変数の種類が分析され、記事では、関数へのカプセル化や追加操作のみを許可する型を使用するなど、特定の状況でグローバル変数を適切に使用する手法を探っています。これにより「遠隔作用」による問題を回避できます。

HYTRADBOI:非同期型データベース&プログラミング言語カンファレンス

2025-02-02

HYTRADBOIは、データベースとプログラミング言語の交差点を探求するユニークなオンラインカンファレンスです。すべての講演は事前に収録され、字幕付きで、持続的なチャットルームを通じて非同期的に配信されます。これにより、参加者はどこからでも、いつでも参加でき、活発な議論を促進します。参加者は、非同期形式、講演の深さ、そして未来志向の内容を高く評価しており、強く推奨されるイベントとなっています。

Garminデータパーサー:GarminDbでフィットネスデータを活用しよう

2025-02-02
Garminデータパーサー:GarminDbでフィットネスデータを活用しよう

GarminDbは、Garmin Connectのヘルスデータを解析し、軽量なSQLiteデータベースに保存するように設計された、強力なPythonスクリプトのスイートです。毎日のモニタリングデータ(心拍数、アクティビティ、上昇/下降、ストレス、強度分)、睡眠、体重、安静時心拍数の情報を自動的にダウンロードしてインポートします。さらに、データを日次、週次、月次、年次のレポートに要約し、コマンドラインまたはJupyter Notebookを使用してグラフを作成できます。プラグインシステムにより、データタイプの拡張が容易になります。つまり、GarminDbはGarminデータ管理のための包括的で使いやすいツールであり、ヘルスデータの分析をより効率的で便利にします。

アジャイルプロジェクトにおける効果的なステークホルダーエンゲージメント

2025-02-02

この記事は、アジャイルプロジェクトマネジメントにおけるステークホルダーエンゲージメントの重要な役割を探ります。変化する要件や地理的に分散したチームなど、迅速で反復的な環境における継続的な参加維持の課題を強調しています。ステークホルダーマッピング、デジタルコラボレーションプラットフォーム(Jira、Trello)、優先順位付けフレームワーク(MoSCoW、Kano)などのツールが、効果的なコミュニケーションと連携を促進する上でいかに重要であるかを強調しています。ステークホルダーとアジャイルチーム間のギャップを埋める上でのプロジェクトマネージャーとビジネスアナリストの重要な役割についても議論し、成功したエンゲージメントがどのようにプロジェクト成果の向上とアジャイル手法の価値強化につながるかを示しています。Kaiser Permanente、Revolut、Atlassianの実例が、これらの戦略の実用的な応用を示しています。

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

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

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

開発

mutool:PDF操作のためのスイスアーミーナイフ

2025-02-02

MuPDFライブラリ上に構築されたmutoolは、PDFファイルを操作するための幅広いサブコマンドを提供する強力なコマンドラインツールです。ページをPNGに変換したり、テキストを抽出したり、複数のPDFをマージしたり、埋め込まれた画像やフォントを抽出したりなど、様々なタスクに対応します。シンプルな変換から複雑なPDF操作まで、汎用性の高いツールです。

開発 PDF操作

Pythonプロトコル:静的ダックタイピングと継承の進化

2025-02-02
Pythonプロトコル:静的ダックタイピングと継承の進化

Pythonの継承メカニズムは常に興味深いものでした。伝統的にPythonはJavaと同様の型ベースの継承を使用していました。しかし、ダックタイピング(マジックメソッドによる実装)の柔軟性は限られています。PEP 544はプロトコルを導入し、構造的サブタイピング、つまり静的ダックタイピングの定義を可能にしました。Protocolクラスを継承することで、開発者はメソッドのセットを宣言でき、これらのメソッドを実装するクラスはすべてそのプロトコルのインスタンスとみなされます。これにより、従来のダックタイピングのスケーラビリティの問題が解決され、よりクリーンで保守しやすいコードになります。

1 2 170 171 172 174 176 177 178 214 215