Category: 開発

LLMをローカルで実行する:開発者向けガイド

2024-12-29

開発者が、個人用コンピューターでLLM(大規模言語モデル)を実行した経験を共有しています。高性能マシン(i9 CPU、4090 GPU、RAM 96GB)と、Ollama、Open WebUIなどのオープンソースツールを使用して、コード補完やノート検索などのタスクのために複数のLLMを正常に実行しました。この記事では、使用したハードウェア、ソフトウェア、モデル、更新方法について詳しく説明し、LLMをローカルで実行することによるデータセキュリティと低遅延の利点を強調しています。

BSD kqueue:技術的負債の山

2024-12-29

この記事では、ネットワークプログラミングにおけるBSD kqueueとLinux epollの違いについて掘り下げています。kqueueはイベントフィルタを使用し、強力な機能を提供しますが、合成性に欠けており、技術的負債が蓄積されます。一方、epollはカーネルハンドルを直接操作し、より高い合成性を持ち、ソケット、ファイルシステムパス、タイマーなど、様々なカーネルリソースの柔軟な監視を可能にします。著者は、epollのデザインは、新しい機能ごとにkqueueに新しいイベントフィルタタイプを追加し続けるという問題を回避するため、優れていると主張しています。

Racket拡張機能:ソースコードへの画像埋め込み

2024-12-29

このRacketライブラリは、画像をソースコードファイルに直接埋め込むことを可能にし、外部ファイルへの参照を不要にします。µ reader拡張機能とuuencodeを使用して、画像データをテキスト表現に変換します。これにより、従来の画像埋め込み方法で作成されるバイナリファイル形式(WXMEなど)の問題が解決され、gitなどのツールとの互換性が向上します。このライブラリは、画像を埋め込み可能なテキスト形式に変換し、必要に応じてデコードして表示するためのパックおよびアンパック関数を提供します。エラー処理とテキストフォーマットは改善の余地がありますが、スタンドアロンのRacketプロジェクトを作成するための便利な方法を提供します。

ドメイン駆動設計を使わない理由

2024-12-29

40年にわたるエンタープライズアプリケーション開発の経験を持つベテランソフトウェア開発者、トニー・マーストン氏が、ドメイン駆動設計(DDD)を使わない理由を説明しています。マーストン氏は、DDDがオブジェクト指向設計理論を過度に重視し、大規模システムにおけるデータベース設計とコードの再利用性を犠牲にしていると主張しています。彼は、各データベーステーブルに別々のクラスを作成し、継承とテンプレートメソッドパターンを活用してコードの再利用を行う階層型アーキテクチャを好みます。マーストン氏は、このアプローチが現実世界のプロジェクトに最適であり、開発効率を向上させると考えています。

Djangoの開発効率・セキュリティ・生産性を向上させる10個の必須ツール

2024-12-29

この記事では、次のDjangoプロジェクトで使用するべき10個の必須ツールについて解説します。依存関係管理、パフォーマンスプロファイリングなど、開発効率、セキュリティ、パフォーマンスを向上させるためのツールを取り上げます。Poetryによる依存関係管理からSilkによるパフォーマンスプロファイリングまで、Django Extensions、Django REST Framework、djangorestframework-camel-case、Django Storages、django-simple-history、django-otp、Celery、Gunicorn with Uvicorn Workersといった各ツールについて、Pipenv、FastAPI、django-reversionなどの代替案との比較を含めて説明します。これらのツールは、より高速で安全で効率的なDjangoアプリケーションの構築に役立ちます。

開発 ツール

SQLite3:データベースの無名ヒーロー

2024-12-29

SQLite3は、軽量で強力な組み込みデータベースであり、数十億件のデプロイメントで静かにデータを処理します。より複雑で騒々しい対応物とは異なり、SQLite3は単一ファイルとして動作し、サーバーの設定は必要ありません。完全なSQL機能を備え、直接ファイルI/Oよりも高速で、最大281テラバイトのデータベースを管理します。スマートフォンからウェブサイトまで、その安定性、使いやすさ、堅牢な機能により、多くのプロジェクト、特に中程度のデータニーズやよりシンプルなデータベース管理要件を持つプロジェクトに最適な選択肢となります。

GitHubオープンソースプロジェクトlibsearch:JavaScript用インデックスフリー全文検索

2024-12-29

libsearchは、GitHub上のオープンソースJavaScript全文検索ライブラリです。事前に構築されたインデックスを必要とせずに、高速なテキスト検索を可能にします。最新のJavaScriptエンジンの高度に最適化された正規表現エンジンを活用し、クエリ文字列を正規表現フィルタに変換して検索を行い、近似TF-IDFアルゴリズムを使用してランキング付けを行います。このライブラリは、複雑なインデックスを必要としないシンプルなアプリケーションに適しており、特に迅速なプロトタイピングや小規模なWebアプリケーションに役立ちます。

プログラマーの復讐:z/OSでHelloWorldを実行する苦難の旅

2024-12-29

かつて大学院でオペレーティングシステムとの対話に無関心だったプログラマーが、ブログ記事のためにIBMのz/OSシステムと格闘することになったという話。z/OSは現代のソフトウェア開発環境とは大きく異なり、テキストベースのインターフェース、JCLスクリプト、IBM独自の命名規則など、多くの困難が待ち受けていました。この記事では、ファイル(データセット)の作成、ISPFエディターの使用、データセットの割り当て、コンパイル、リンク、ロード、そしてSPOOLを使用した出力処理といった苦労が詳細に記述されています。実用的なヒントや教訓も共有されており、レガシーシステムでの作業の難しさを物語っています。

WebGL流体シミュレーションアプリが登場:リアルな流体効果を体験!

2024-12-29

「Try Fluid Simulation」アプリが登場!WebGLを利用して、ブラウザ上で驚くほどリアルな流体シミュレーションを実現しました。液体の動き、波の揺らぎなどを、シンプルな操作で体験できます。数回クリックするだけで様々な形状やテクスチャの流体を作成し、物理エンジンの威力を目の当たりにできます。WebGLを学習中の開発者や、コンピュータグラフィックスと流体シミュレーションに興味のある方におすすめです。この魅惑的な流体の世界を体験してみませんか!

resizer2:Win+マウスでKDE/i3のようにWindowsのウィンドウを管理

2024-12-29

resizer2は、KDEやi3のウィンドウマネージャーのように、Winキーとマウスを使ってウィンドウのサイズ変更と移動を可能にするWindowsウィンドウマネージャーです。ウィンドウの移動、サイズ変更、透明度の調整、最小化、最大化などの機能を提供し、複数のモニターにも対応しています。システムウィンドウを移動するには管理者権限が必要で、一部のフルスクリーンアプリケーションとの互換性の問題など、既知の問題点もありますが、resizer2はWindowsユーザーにより効率的で便利なウィンドウ管理体験を提供します。

OpenBSDで個人メールサーバーをセットアップする

2024-12-29

このブログ投稿は、OpenBSDで個人メールサーバーをセットアップするためのステップバイステップガイドを提供します。著者は、Opensmtpd、Dovecot、DKIMProxy、Spamdを使用してプロセスを詳細に説明し、Dovecotのオープンファイルの制限などの一般的な問題に対する解決策を提供します。このガイドは、サーバーの選択、システム構成、セキュリティ対策、およびコンポーネントの詳細な設定を網羅しており、Linuxの経験があるユーザーにとって貴重なリソースとなります。

Convoy社、UUIDv4からULIDへ移行:ビッグデータ時代における効率性とスケーラビリティ

2024-12-28

MongoDBからPostgresへのデータベース移行において、Convoy社は一意識別子としてUUIDv4からULIDへの切り替えを決定しました。本記事ではUUIDv4とULIDを比較し、ULIDの長所である辞書順ソート可能性、URLフレンドリー性、データベースインデックス効率の向上を強調しています。ただし、生成と挿入速度はやや遅くなります。Convoy社がULIDを選択した主な理由は、大規模データセットにおけるページネーションのパフォーマンス問題を解決するためです。ULIDの生成速度はわずかに遅いものの、特に大規模データ処理におけるパフォーマンス向上は、その価値があると判断されています。また、ULIDによる時間情報の漏洩リスクやユーザーデータへの影響についても議論し、将来的なUUIDv7への移行の可能性にも触れています。

開発

Fish Shell 4.0:C++からRustへの大規模な書き換え

2024-12-28

Fish shellチームは、ほぼ2年かけてFish shellをC++からRustに書き換えるという大規模な作業を完了しました。C++のツール、コンパイラ/プラットフォームの差異、人間工学、スレッドセーフティにおける制限を理由に、チームはパフォーマンス、セキュリティ、開発者エクスペリエンスを向上させるためにRustを選択しました。「テセウスの船」アプローチを用いて、コンポーネントを段階的に置き換え、プロセス全体を通して安定性を維持しました。autocxxとの互換性問題など、いくつかの課題がありましたが、パフォーマンスの向上、新機能、より簡単にインストールできる静的リンク版を提供するFish 4.0ベータ版を成功裏にリリースしました。

開発

Libero:プログラミングの可能性を解き放つ!

2024-12-28

iMatixが開発した無料のソフトウェアツール、Liberoは、より良いプログラムを作成したいプログラマーを支援します。プログラムのデザインには視覚的な状態図を使用し、C、Java、PHPなど複数の言語をサポートし、迅速なプロトタイピングのためのプログラムフレームワークを生成します。GNU General Public Licenseに基づき、Liberoのソースコードはオープンソースで、自由に使用、改良できます。サポートやアップデートには商用ライセンスも用意されていますが、Liberoの中核は無料で提供されます。

MicrosoftのPhi-3-Mini:軽量LLMによる開発効率向上

2024-12-28

Microsoftは、リソースの少ないデバイスでもGPT-3.5と同等の性能を発揮する軽量言語モデルPhi-3-Miniを発表しました。この記事では、推論とコーディングの強力な機能、OllamaやPiecesなどのツールとのシームレスな統合など、その強みを解説しています。OllamaでPhi-3-Miniをローカル実行し、Piecesでコードスニペットを管理することで、コード生成やリファクタリングが効率化され、開発者の生産性が向上します。長いテキストのコンテキストオーバーフローは課題として残りますが、Phi-3-Miniの軽量性と強力な機能は、AI開発において貴重なツールとなります。

開発

エンジニアのForth体験記:魅了から離脱まで

2024-12-28

この記事は、エンジニアがForthプログラミング言語を学んで使用した経験について記しています。当初、Forthの簡潔さと拡張性に魅了された著者は、pForthのソースコードを深く掘り下げ、コンパイル時の自己修正機能に驚嘆しました。しかし、現実世界のプロジェクトでは、Forthは数値計算には適しているものの、テキスト処理などのタスクには苦労することが分かりました。カスタムハードウェアの組込みシステムを設計する際に、著者はForthを利用してシステムのCPU命令セットを設計しましたが、最終的にはC言語の方が効率的であると判断し、Forthの使用を諦めました。著者は、Forthは極めて効率性を求めるミニマリストなエンジニアにとって理想的である一方で、自分自身はより実用的なアプローチを好み、より広く使用されているプログラミング言語を選択すると結論づけています。

開発

Uniconプログラミング言語:Iconの拡張と改良

2024-12-28

Uniconは、Iconプログラミング言語を拡張および改良した強力なプログラミング言語です。簡潔なコード、強力な文字列処理機能、目標指向の評価など、Iconの多くの長所を受け継ぎながら、オブジェクト指向プログラミング、POSIXレイヤー、ネットワーク機能などの最新の機能を追加しています。Uniconは、命令型、手続き型、並列型、オブジェクト指向型など、複数のプログラミングパラダイムをサポートしており、豊富な組み込み関数と強力なグラフィックスライブラリを備えています。このドキュメントでは、Uniconの構文、セマンティクス、機能、インストール方法を詳しく説明し、多数のコード例を示します。

開発

20分で250件の応募書類を自動送信するシステムを開発したエンジニア

2024-12-28

反復的な求職活動にうんざりしたエンジニアが、わずか20分で250件の求人応募書類を自動送信するシステムを開発しました。このシステムは、Pythonスクリプトと大規模言語モデル(LLM)を使用して、求人情報をスクレイピングし、データ解析を行い、パーソナライズされたカバーレターを作成します。スパムフィルターを回避するためのメール送信と追跡機能も備えています。この記事は第一部であり、第二部ではシステムの改良と改善について説明します。

開発 求職活動

EmacsConf 2024:円滑で効率的なオンラインカンファレンス

2024-12-28

EmacsConf 2024は無事に終了しました!Sacha Chuaによるこの記事では、カンファレンスの準備、実行、そして得られた教訓を振り返っています。提案募集から最終発表まで、オーガナイザーはOrgモード、emacsconf-mail.el、Ansibleなどの自動化ツールを巧みに活用して効率性を高め、BigBlueButtonやWhisperXなどの技術を用いてスムーズな体験を実現しました。BBBサーバーの設定や音声の同期など、技術的な課題もありましたが、効果的に解決されました。Sachaは時間管理、ボランティアの調整、そして今後の改善策に関する洞察を共有し、オープンソースコミュニティへの献身を際立たせています。

NeovimでJavaを書きたいですか?

2024-12-28

この記事では、Neovimエディタで効率的にJava開発を行う方法を詳しく説明します。著者は、職場でNeovimを使ってJava開発を行った際の好ましい経験を共有し、LSPサーバーとしてJDTLS、Neovimプラグインとしてnvim-javaまたはnvim-jdtlsを推奨しています。この記事では、JDTLSの設定方法を詳しく説明し、デバッグとテストの設定を含め、codelensやデバッガー機能などを備えた個人の設定例を示しています。Neovimの熱心なユーザーでない場合でも、貴重なJava開発技術を学ぶことができます。

開発 Java開発

Sonair、Rustで3D超音波センサー開発を加速

2024-12-28

Sonair社は、画期的な3D超音波センサーの開発を劇的に加速するために、Rustプログラミング言語を活用しました。この記事では、速度、安全性、堅牢なエコシステムなど、Rustを選択した理由を詳しく説明しています。チームは当初Rustの経験がありませんでしたが、驚くほど簡単に習得でき、強力な型システムと借用チェッカーにより、より安全で信頼性の高いコードを作成することができました。Sonair社は、本番環境でRustを使用し、アルゴリズムのプロトタイピングにはPythonを使用することで、効率的なワークフローを実現しています。最終的に、Sonair社は、安全認証済みのRust実装を展開する最初の企業の1つになることを目指しており、組み込みシステムにおける機能安全の新しい基準を確立しようとしています。

Scrapscript:Msgpackでシリアライズされたコンパクトなプログラミング言語

2024-12-28

Scrapscriptは、プログラムをMsgpack形式の「フラットスクラップ」にコンパイルする新しいプログラミング言語であり、効率的なネットワーク転送とストレージを実現します。逆ポーランド記法とカスタム演算子を使用することで、Scrapscriptはさまざまなデータ型と演算をサポートし、複数の言語との相互運用が可能です。コンパクトな性質により、帯域幅の制約のある環境に最適であり、コードハッシュと最適化において潜在的な利点があります。

Netflix、脚本家に登場人物に自分の行動を説明させるよう指示

2024-12-28

Netflixは、脚本家に登場人物に自分の行動や計画を明確に説明させるよう指示しています。これは、視聴者がたとえながらく見ていても、重要なプロットを見逃さないようにするためです。このアプローチは、一部の脚本家が従来のストーリーテリングの原則に反すると考えているため論争を巻き起こしていますが、Netflixが視聴者の注意力の低下を懸念していることを浮き彫りにしています。これは、以前、作品の先頭5分間に劇的なシーンを入れるよう求めたことと一貫しており、プラットフォームが視聴者の維持に重点を置いていることをさらに強調しています。

libobscura:Linuxにおけるカメラプログラミングの課題への取り組み

2024-12-28

Linuxでカメラを使用するのは容易ではありません。そのため、libobscuraプロジェクトが作成されました。このプロジェクトはVideo4Linuxインターフェースを簡素化し、ユーザーフレンドリーなポイントアンドシュートAPIを提供することを目指しています。Librem 5のカメラスタック開発経験とlibcameraの複雑さへの対処から生まれたこの講演では、最新のカメラ制御の複雑な詳細について説明します。ピクセルフォーマットや深度からメディアエンティティ、感度、ノイズリダクションなど、多くの課題があります。Prototype Fundの資金提供を受けて、libobscuraはこれらの複雑さを乗り越え、最終的にLinuxユーザーにとってよりアクセスしやすいカメラAPIを作成することを目指しています。

開発 カメラ

LLM:コンピューティングにおける最大の過ちか?

2024-12-28

著者は、大規模言語モデル(LLM)を批判し、それがコンピューティングの未来ではなく、むしろ後退であると主張しています。数十年間、企業は利益をソフトウェアの品質やユーザーエクスペリエンスよりも優先してきたため、ソフトウェアは遅く、肥大化し、バグが多くなりました。LLMはこの傾向を永続させ、遅く、高価で、非決定論的です。著者は、莫大な投資のためにこの技術が廃れることがなく、結果として少数の巨大企業がコンピューティングの世界を支配し、イノベーションを窒息させ、将来の世代が高品質なソフトウェアを経験できなくなることを懸念しています。

開発 技術倫理

フリーソフトウェアはフリーツールを必要とする:フリーソフトウェア開発における倫理的ジレンマ

2024-12-28

この記事は、フリーソフトウェア開発者が非フリーの開発ツールを使用することによって直面する倫理的なジレンマを探求しています。著者は、効率性を追求するために、多くの開発者がBitKeeper、SourceForge、GitHubなどのプロプライエタリツールやネットワークサービスを選択し、開発者とユーザーの両方の自由を犠牲にしていることを主張しています。著者は、LinuxカーネルがBitKeeperに移行し、その後Gitを開発せざるを得なくなったという例を用いて、プロプライエタリツールへの依存のリスクを説明しています。著者は、非フリーツールの使用は、フリーソフトウェア運動の信頼性を損なうだけでなく、ソフトウェアの自由度も制限し、最終的に真にフリーではないソフトウェアにつながると強調しています。著者は、開発者にフリーでオープンソースの開発ツールを優先し、フリーソフトウェアの価値観を維持し、効率性のために自由を犠牲にすることを避けるよう訴えています。

開発

Adaの従属型:思いがけない偶然の一致

2024-12-28

この記事では、Adaプログラミング言語におけるあまり知られていない従属型機能を探ります。著者は、Adaの設計目標である不必要な動的メモリ割り当ての回避が、従属型の独自の実装につながったと主張しています。それは、コンパイル時のサイズが不明なデータを返すために、2番目の非コールスタックを使用することで、動的割り当ての必要性を巧みに回避するというものです。これは、従属型の形式的な定義と予想外の一致を示し、Adaの設計における予期せぬ幸運な偶然の一致を示しています。この記事では、Adaの型システムにおける派生型、サブタイプ、識別子付きレコード、型述語などの概念をさらに説明し、これらの機能が従属型の実装をどのように可能にするかを示しています。最後に、著者はAdaの設計哲学と型理論に関する学術研究の間の興味深い相互作用について議論し、Adaの型システムの多くの機能は型理論研究から直接生まれたのではなく、特定のニーズを満たすために自然に進化したものだと示唆しています。

開発 従属型

過剰な抽象化への警告:ソフトウェア開発における隠れたコスト

2024-12-28

ソフトウェア開発における抽象化レイヤーの過剰使用は、パフォーマンスの低下とコードの複雑化につながる可能性があります。この記事では、優れた抽象化はTCPプロトコルのように、基礎となる複雑性を隠蔽する必要があると主張しています。しかし、多くのいわゆる抽象化は、真の価値を提供することなく、単に間接層を追加するだけであり、認知負荷、デバッグの難しさ、パフォーマンスのオーバーヘッドを増大させます。著者は、開発者に抽象化を慎重に使用し、コードのシンプルさとパフォーマンスを優先し、抽象化のための抽象化を避けるようアドバイスしています。

開発

Mixin:強力なJavaバイトコードウィービングフレームワーク

2024-12-28

Mixinは、ASMを使用するJavaのtrait/mixinおよびバイトコードウィービングフレームワークであり、プラグ可能なサービスを介してランタイムクラスローディングプロセスにフックします。MojangのLegacyLauncherシステム(より拡張性の高いModLauncherに置き換えられました)をサポートし、Java 8以降と互換性があります。Mixinは、難読化タスクを処理するためのアノテーションプロセッサや、EclipseおよびIntelliJ IDEAとの統合など、包括的なドキュメント、Mavenリポジトリ、ツールを提供します。バージョン履歴には、機能の追加とバグ修正の詳細が記載されており、開発者が適切なバージョンを選択するのに役立ちます。

ターミナルエミュレータGhosttyが1.0に到達:挑戦と成功の旅

2024-12-28

ミッチェル・ハシモトのターミナルエミュレータGhostty 1.0のリリースまでの道のりは、2年間におよぶ様々な挑戦と成功の物語です。当初はZig言語とグラフィックプログラミングの探求から始まった個人プロジェクトでしたが、予想外の人気を集めました。家庭とプロジェクトの両立のため、ハシモトはクローズドベータテストを実施し、貴重なコミュニティからのフィードバックを得る一方、参加できなかったユーザーからの不満も招きました。Ghostty 1.0は、独自の技術スタック(Zigコアとプラットフォーム固有のGUI)と優れたパフォーマンスで際立ちます。将来は、コアライブラリlibghosttyをオープンソース化し、Ghosttyの影響力をさらに拡大していく予定です。

1 2 3 4 6 8 9 10 17 18