LuaのためのミニマルなSum型とSwitch: lua-match
lua-matchは、Sum型とSwitch機能を提供するミニマルなLuaライブラリです。様々なデータ型と条件分岐をクリーンかつ効率的に処理するために、タグ付け関数を活用しています。シンプルなタグ付け関数とswitchテーブルを使用することで、Sum型のような動作とパターンマッチングを容易に実装でき、Luaコードを大幅に簡素化できます。このライブラリはオープンソースで、MITライセンスを使用しています。
lua-matchは、Sum型とSwitch機能を提供するミニマルなLuaライブラリです。様々なデータ型と条件分岐をクリーンかつ効率的に処理するために、タグ付け関数を活用しています。シンプルなタグ付け関数とswitchテーブルを使用することで、Sum型のような動作とパターンマッチングを容易に実装でき、Luaコードを大幅に簡素化できます。このライブラリはオープンソースで、MITライセンスを使用しています。
開発者が新興プログラミング言語Zigを用いて、Game Boy Advance向けゲーム「2048」を作成しました。この記事では、Zigが持つ組込みプログラミングにおける利点、特に簡素化されたクロスコンパイルプロセス、効率的なメモリ管理(packed structを含む)、強力なコンパイル時コード生成機能について説明しています。著者 はC++とZigの開発経験を比較し、ZigがGame Boy Advance特有のメモリレイアウトとハードウェアレジスタの処理において、より簡単で効率的であることを指摘しています。ZigにはインラインアセンブリやThumb命令のサポートが限定的であるなど、いくつかの欠点もありますが、多くの利点からレトロゲーム機向けゲーム開発に最適な選択肢となっています。
この記事では、Linuxがデスクトップで広く採用されていない根本的な理由を深く掘り下げています。著者は、いくつかの主要な問題点を指摘しています。ディストリビューション間のソフトウェア互換性の低さ、頻繁なアップデートによるバグや回帰、資金不足によるソフトウェア品質の低下、ハードウェアドライバのサポート不足、そしてLinuxコミュニティ内でのコミュニケーション上の課題などです。Linuxはサーバー環境では優れていますが、デスクトップ環境での存在感は、これらの持続的な障害によって妨げられており、Windowsなどの確立されたオペレーティングシステムと効果的に競争することが困難になっています。
Daring Fireballのジョン・グルーバーが、Typogramが作成した楽しいコーディングフォント選択「トーナメント」を紹介しています。ユーザーは32種類の無料の等幅フォントから好きなものを選びます。Consolasなどの一般的な選択肢がないことや、含まれる一部のフォントがあまり魅力的でないことはありますが、価値のある試みです。最初の公開以降の改善点としては、CSSではなくJavaScriptコードの例が使用され、より多くのフォントが選択できるようになりました。グルーバーは、バイアスを減らすためにフォント名を無効にすることを推奨しています。彼の常勝者?AdobeのSource Code Proで、IBM Plex Monoがそれに続きます。
Richard Schneemanは、RubyConf 2024でクラウドネイティブビルドパック(CNB)ハッカソンを開催し、Rubyのデプロイツールについて学習し、貢献することを支援します。イベントでは、既存のビルドパックの修正から新規ビルドパックの作成まで、さまざまな難易度のタスクを用意し、様々なスキルレベルに対応しています。現地に参加できない場合でも、提供されたリソースを使用して参加できます。
速度と簡潔さゆえに魅力的ですが、著者はデータベースモックを用いたテストは、結局のところ解決する問題よりも多くの問題を引き起こすと主張しています。ユーザー作成の例は、モックと実データベースに対するテストの違いを浮き彫りにしています。実データベーステストは、一意制約違反、デフォルト値の処理、パフォーマンスボトルネックなど、潜在的な問題を早期に明らかにし、デバッグ時間を節約し、本番環境のリスクを軽減します。アプリケーションとスキーマが進化するにつれて、実データベーステストは、新しい検証、データ型の変更、タイムスタンプの精度変更をより適切に処理し、コードが実際のデータベースと整合することを保証します。著者は、データアクセス層については実データベーステストを優先し、サービス層ではビジネスロジックとデータの相互作用を明らかにするために使用することを提案しています。一方、コントローラー層はサービス呼び出しを効果的にモックできます。実データベーステストとモックのバランスが、堅牢なアプリケーション構築の鍵となります。
Homaは、データセンターアプリケーション向けに設計された新しいネットワーク転送プロトコルであり、多数の小さなメッセージの送信オーバーヘッドを削減することを目的としています。従来のTCP/UDPとは異なり、接続確立が不要で、独自の要求応答メカニズムと優先順位付きキューを使用して、レイテンシを最小限に抑えます。現在、HomaはLinuxカーネルへの統合を目指していますが、将来はネットワーク機器内のハードウェアアクセラレーションに大きく依存する可能性があります。
コードを扱う大規模言語モデル(LLM)を搭載したAIによるプログラミングアシスタントが普及し、開発者の生産性が大幅に向上しています。しかし、既存のコード生成ベンチマークは主に汎用的なシナリオに焦点を当てており、特定のアプリケーションドメインにおけるLLMのパフォーマンスはほとんど知られていません。本論文では、12の人気のあるソフトウェア開発ドメインと15のプログラミング言語を網羅する2400個のプログラミングタスクを含む新しいベンチマーク、MultiCodeBenchを紹介します。11個の代表的な主流LLMを用いた実験により、様々なドメインにおけるLLMのコード生成能力が明らかになり、開発者にとってLLMを選択する際の実際的な洞察と、モデル開発者がドメイン固有のコード生成能力を向上させるための指針が得られます。
Fabrice Bellard氏によって開発されたts_zipは、大規模言語モデルRWKV 169M v4を利用し、従来の圧縮ツールをはるかに凌駕する高いテキスト圧縮率を実現するツールです。GPUと4GBのRAMを必要とし、従来の圧縮ツールよりも速度は遅いものの(RTX 4090で最大1MB/s)、英語やその他の言語のテキスト、さらにはソースコードにおいても優れた圧縮性能を示します。圧縮率はビット毎バイト(bpb)で測定され、enwik8やenwik9などのデータセットにおいてxzよりも優れた結果を示しています。決定論的なモデル評価により、異なるハードウェアやソフトウェア構成においても一貫した解凍が保証されます。
研究者らは、ユニットテストの自動生成における大規模言語モデル(LLM)の可能性について包括的な評価を行いました。17個のJavaプロジェクトにおいて、5つのオープンソースLLMと、クローズドソースのGPT-4、従来型のツールであるEvosuiteを比較し、様々なプロンプト戦略の影響を調査しました。その結果、オープンソースLLMはデータプライバシーにおいて優位性があり、特定のタスクでは優れた性能を示す一方で、LLMベースのユニットテスト生成における限界も明らかになりました。この研究は、この分野におけるLLMの将来的な応用を導くための貴重な知見を提供します。
この抜粋はDiaspora*内部チームの連絡事項からのものです。ウェブサイトを正しく機能させるにはJavaScriptを有効にする必要があると述べており、コンテンツの報告方法、報告基準についても説明しています。Diaspora*プロジェクトの議論やサポートへのリンク、コードバージョン、Pod統計、利用規約、連絡先情報、タッチ最適化モードへの切り替えオプションなどのウェブサイト情報も表示されています。
世界で最も広く展開されているデータベースであるSQLiteは、3人体制のチームによって保守されており、外部からの貢献を拒否しながらも、その比類のない性能と安定性で世界を征服しています。サーバーのダウンタイム問題を解決するためにアメリカの軍艦で誕生したSQLiteは、今では数兆ものデータベースの基盤となっています。SQLiteはオープンソースではなく、オープンソースライセンスよりも制限の少ないパブリックドメインソフトウェアです。極端な状況、例えばオペレーティングシステムのクラッシュなどをシミュレートする厳格なテストプロセスにより、非常に高い信頼性が確保されています。しかし、有料サポートや会員制度を通じて収益を上げるという独自のビジネスモデルも注目に値します。SQLiteの伝説は、その技術力だけでなく、その裏にある粘り強さと革新性にもあります。
ts_smsは、大規模言語モデルを用いたショートメッセージ圧縮ツールです。損失のない圧縮技術を使用し、統計的冗長性を特定して除去することでビット数を削減し、情報損失はありません。brotliなどのツールと比較して、ts_smsは小さなメッセージの圧縮において利点があります。Linux版とWindows版が利用可能です。そのコアテクノロジーはts_zipと似ており、算術符号化と互換性のある特定のパディングシステムを使用することで、メッセージ長の明示的な符号化を不要にしています。
このブログ記事は、アウトオブオーダーマイクロアーキテクチャにおける実行ユニットのパイプライン化について考察しています。著者は当初、実行ユニットはμopの処理が完了するまで占有されたままであると考えていましたが、Firestormマイクロアーキテクチャ(A14およびM1)を例に、2つの整数実行ユニットが複数の乗算を同時に処理でき、それぞれ3サイクルかかることを示しています。依存命令シーケンスと独立命令シーケンスの実行時間を比較することで、多くの実行ユニット/μopの組み合わせが高度にパイプライン化されていることが明らかになり、ユニットが他のμopを処理している間にもμopを発行できることが示されています。これにより、独立命令シーケンスの実行時間が予測値の6サイクルから4サイクルに短縮されます。最後に、著者は、命令レイテンシと帯域幅の表が逆数スループットを指定する理由を説明しています。それはサイクル/命令に相当するためです。
Panel Graphic Walkerは、Jupyter NotebookやPanelアプリケーション内でインタラクティブなデータ探索を行うためのPythonライブラリです。Graphic Walkerの機能をHoloViz Panelに統合し、Tableauに似たインターフェースを提供します。最小限のコードで動的な可視化とテーブルを迅速に作成できます。様々なデータバックエンドとレンダラーに対応し、サーバーサイド計算を利用して大規模なデータセットを処理できます。プロジェクトはまだ初期段階にあるため、特定のバージョンを固定することをお勧めします。
このブログ投稿では、ガベージコレクション付きバイトコードインタープリターを実装することで、RustとZigを比較しています。著者は、Rustのunsafeコードが非常に困難であることを発見し、複雑なエイリアシングルールと未定義の動作を主要な障害として挙げています。対照的に、Zigはメモリunsafeな操作に対して、メモリリーク検出機能や、使い勝手の良いポインター操作などを備えた、より開発者フレンドリーなエクスペリエンスを提供しました。最終的に、Zigの実装はRustの実装よりも安全で高速であり、開発も容易でした。
今後のcurl 8.12.0リリースでは、エキサイティングな新機能が導入されます。部分ファイルの読み込みに対応します。ユーザーは新しい変数システムを利用して、ファイルから特定のバイト範囲を抽出し、curlコマンドラインで使用できるようになります。これにより、curlによるファイルの処理方法に大きな柔軟性が加わり、ファイルの先頭部分をユーザー名として抽出したり、中央部分をPOST本文として使用したりといったタスクが可能になります。curlの機能が大幅に拡張され、より堅牢なコマンドラインツールがユーザーに提供されます。
lexiforest/curl-impersonateはcurl-impersonateのアクティブなフォークであり、ブラウザの擬態機能を強化し、より多くのバージョンとビルドターゲットをサポートしています。このプロジェクトはcurlを修正して、TLSおよびHTTPハンドシェイク中に主要なブラウザ(Chrome、Edge、Safari、Firefox)の動作を模倣し、フィンガープリンティングに基づくWebサイトの制限を回避します。更新には、ECH、ZSTD圧縮、X25519Kyber768曲線、およびより多くのブラウザバージョンのサポートが含まれており、改良されたコマンドラインツールとライブラリ関数が提供されます。
86Boxは、1981年からPCIバス時代までのIBM PC互換システム向けに設計された、古いオペレーティングシステムとソフトウェアを実行できる強力なx86エミュレーターです。ユーザーフレンドリーなインターフェースと高いカスタマイズ性を備え、MS-DOS、古いバージョンのWindows、OS/2、その他のビンテージシステムやアプリケーションを実行できます。幅広い周辺機器(ビデオカード、サウンドカード、ネットワークアダプターなど)をサポートしており、複数の仮想マシンを簡単に処理できる複数のマネージャーアプリケーションも提供されています。懐かしさを感じるか、レトロコンピューティングに興味があるかに関わらず、86Boxは過去への魅力的な一瞥を提供します。
MiceWineは、AndroidスマートフォンでWindowsアプリケーションとゲームを実行することを目指したプロジェクトです。Android向けにコンパイルされたカスタマイズされたWineビルドとBox64を使用して、最適なパフォーマンスを実現しています。現在、積極的に開発中で、Termux-X11ベースのXサーバーを使用しています。Android 10以降をサポートしています。Adreno 7xxおよび6xx GPUはTurnip/Zinkでサポートされ、その他のGPUはネイティブ/Zink(実験的)で部分的にサポートされています。非Adreno GPUでのネイティブVulkanは実験的で、テストが必要です。
多くの電子工学入門テキストは、水力学的アナロジーを用いて回路を説明し、電流を水流、電池をポンプに例えています。しかし、著者は、このアナロジーには特にJFETやMOSFETなどの半導体部品の説明において深刻な欠陥があると主張しています。このアナロジーでは特性曲線を正確に表現できず、学習を妨げています。著者は、この不正確なアナロジーを放棄し、より基本的な原理から電子工学を学ぶことを提唱しています。
2024年、Pythonは主要プログラミング言語としての地位を確固たるものにしました。Python 3.13では、実験的な「no-GIL」ビルドとJITコンパイラにより、パフォーマンスが大幅に向上しました。時代遅れのモジュールの削除により言語が簡素化され、AI、機械学習、データサイエンスにおける重要な役割が、人気を新たな高みに押し上げました。GitHubでの使用率はJavaScriptを上回り、Tiobeインデックスでも18%という驚異的な数値を達成し、主要3言語の1つとしての地位を固めました。
この記事は、Haskellでラムダ抽象をオーバーロードして、埋め込みドメイン特化言語(EDSL)を構築するための新しい方法を紹介します。`Port`型と`encode`/`decode`関数を巧みに使用することで、著者はHaskell関数をカスタムカテゴリ内の射にエレガントに変換します。これにより、簡潔で直感的な構文が実現し、Arrow抽象とproc表記の複雑さを回避できます。このアプローチは、最小限のHaskellコードで実現でき、メタプログラミングやコンパイラプラグインは必要ありません。フローダイアグラムDSLの例が、この方法の適用と、重複の防止や副作用の処理に関する議論とともに示されています。
国際難読化Cコードコンテスト(IOCCC)が第28回大会を開催し、40周年を迎えました。このイベントは、C言語における創造性と風変わりなコーディングスキルを称えます。Mastodonウェブアプリケーションを使用するには、JavaScriptを有効にする必要があります。または、Mastodonのネイティブアプリを使用することを検討してください。
この記事では、Guile Schemeのオブジェクト指向プログラミングシステムであるGOOPSと、Common LispのオブジェクトシステムであるCLOSの違いを考察し、GOOPSの欠点を指摘しています。GOOPSは、いくつかの重要な点でCLOSのエレガンスと堅牢性に欠けています。具体的には、セッターの特殊化が継承と合成されない、before/after/aroundメソッド修飾子が存在しない、メソッド結合アルゴリズムが制御できない、メソッド引数の特殊化が制限されている、キーワード引数がサポートされていない、ドキュメント文字列がない、などです。著者らは、CLOSの動作を模倣したり、メソッド修飾子を追加したり、メソッド引数の特殊化メカニズムを強化するなど、いくつかの改善策を提案しています。これにより、コードのエレガンスが向上し、バグを減らすことができると考えています。
このプロジェクトは、NandToTetrisコースに従って、C言語でゼロから完全なコンピュータエミュレータを構築することを目指しています。単一のNANDゲートから始まり、マルチプレクサやデマルチプレクサなどのより複雑なチップを段階的に構築し、最終的にはテトリスを実行できるシステムになります。CPUレベルから始める他のエミュレータプロジェクトとは異なり、このプロジェクトはハードウェアスタック全体を注意深く構築します。プロジェクトは初期段階にあり、作者はハードウェアコンポーネントを完成させた後にアセンブラを実装する予定です。
Little Snitchは、macOS用のネットワークモニターとパーソナルアプリケーションファイアウォールです。どのアプリがインターネットに接続するかを制御できます。接続試行ごとに警告が表示され、アクセスを許可または拒否することで、データの安全性を確保します。サイレントモード、視覚的なトラフィックチャート、柔軟なルール管理、組み込みDNS暗号化、マルウェア対策のための暗号化プロセス識別などの機能を備えています。Macのネットワークアクティビティを簡単に監視および管理し、プライバシーを保護します。
大規模なコードベースで全てのテストを実行するのは非効率的です。この記事では、フォルダベース、依存関係ベース、ヒューリスティックベースの3つの選択的テストアプローチを探ります。フォルダベースはシンプルですがエラーを見逃す可能性があります。依存関係ベースは包括的ですが、過剰なテストを行う可能性があります。ヒューリスティックベースはカスタムルールでテスト選択を最適化し、速度と網羅性のバランスを取ります。Millビルドツールは、依存関係ベースの選択的テストをネイティブにサポートしており、CIの効率を大幅に向上させます。しかし、ヒューリスティックな方法と組み合わせることで、速度とテストカバレッジのバランスをさらに最適化できます。
この記事では、「ゾンボコム問題」について論じています。これは、多くのローコード/ノーコードプラットフォーム、スーパーアプリなどが、特定のユーザーニーズを満たすことができず失敗する現象です。著者は、成功の鍵は、特定のユーザーの特定の問題を解決し、製品と市場の特定の適合点を見つけることにあると主張します。アマゾンの成功例はこれを示しています。アマゾンはオンライン書店から始まり、徐々に他の分野に拡大していきました。同様に、Excelも、当初中小企業のオーナーや会計士をターゲットにしたことで成功を収めました。著者は、プラットフォームは製品から生まれるべきであり、その逆ではないと強調しています。まず優れたスタンドアロン製品を作成し、それからプラットフォーム化を考えるべきです。最終的に著者は、成功の秘訣は、システム思考とプロダクト思考を組み合わせることにあると結論付けています。システムレベルの機会を理解しながら、最初のベストカスタマーを見つけることで、「単一目的製品」から「プラットフォーム」への転換を実現するのです。
Stripeは10月にひっそりとV2 APIをリリースしました。フォームエンコードされたリクエストボディからJSONへの変更、HATEOASスタイルのページングの導入が特徴です。V2は速度の向上と`include`パラメータによるサブオブジェクトの読み込み制御を目指しています。真の冪等性も試みられており、失敗したリクエストの処理が改善されています。しかし、REST動詞の使い方やリソースのモデリングにはまだ改善の余地があります。著者は、優れた開発エクスペリエンス(DX)は、完璧なREST APIよりも高品質なSDKに依存するようになったと主張しています。