CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: uv audit で脆弱性のある依存パッケージを見つける

Python でソフトウェアを開発するメリットのひとつは、パッケージのエコシステムが発達していることだろう。 自分でゼロから機能を実装する代わりに、PyPI などで公開されている多種多様なパッケージが利用できる。 一方で、ソフトウェアが依存しているパッ…

Python: uv でパッケージのインストールにクールダウン期間を設ける

つい先日、著名な LLM API のプロキシサーバである LiteLLM 1 がサイバー攻撃による侵害を受けた。 結果として、攻撃者が不正なコードを挿入したバージョンのパッケージが PyPI 2 にアップロードされた。 github.com 現在は既に当該のバージョンは PyPI から…

textlint でシンプルなプリセットを自作する

textlint 1 は自然言語向けの Linter のひとつ。 前回は勉強のために textlint のシンプルなルールを自作した。 blog.amedama.jp 今回は、それに引き続いてシンプルなプリセットを自作してみる。 プリセットは、複数のルールを束ねてチェックする内容を表現…

textlint でシンプルなルールを自作する

textlint 1 は自然言語向けの Linter のひとつ。 textlint はデフォルトではチェックするルールが何も組み込まれていない。 そのため必要に応じてルールや、複数のルールを束ねたプリセットを自分でインストールして使用する。 textlint のルールやプリセッ…

Python: Pydantic Settings でプログラムの設定を扱う

Python でプログラムを書いていると、設定に基づいて動作を変更したくなることがある。 そして、動作を変更する設定の値は、たとえば環境変数や設定ファイルから読み込みたくなる。 ただ、そういった処理を自分で書くと手間がかかるし不具合も作り込みやすい…

Python: FastAPI の例外ハンドラを pytest でテストする

Web アプリケーションの例外ハンドリングでは、未処理の例外はキャッチして特定の HTTP レスポンスに変換するのが定石だろう。 このとき、未処理の例外をキャッチして HTTP レスポンスに変換する仕組みは例外ハンドラと呼ばれることが多い。 そして、FastAPI…

Python: FastAPI を使ったプロジェクトで HTTP API にユニットテストを書く

信頼性の高いアプリケーションを作る上で、自動化されたテストの整備は重要なプラクティスのひとつ。 その観点において Python の Web アプリケーションフレームワークの FastAPI 1 はユニットテストが書きやすい。 今回は FastAPI を使うプロジェクトで pyt…

macOS: 無線 LAN 接続用の 2 次元バーコードを作る

スマートフォンなどのカメラで読み取ると無線 LAN に接続できる 2 次元バーコードがある。 これは ZXing ("zebra crossing") という OSS のプロジェクトが提案したのが発祥のようだ。 現在では Android や iOS といったプラットフォームが対応しており、デフ…

Mac で llama.cpp をビルドして GPU の有効・無効によるパフォーマンスの違いを比べてみる

Mac で llama.cpp を使う場合、最も手っ取り早い方法は Homebrew からインストールすることだろう。 コマンドラインから brew install llama.cpp するだけで、GPU での演算が有効なバイナリが得られる。 一方で、GPU を有効にした場合と無効にした場合で、ど…

Raspberry Pi のファイルシステムを RAM ディスクで運用する

一般的に Raspberry Pi は SD カードにファイルシステムを構築して動作させることが多い。 ただ、SD カードには書き込み回数に制限があるため、製品やワークロードによっては寿命に到達するリスクがある。 また、SD カードに固有の問題ではないものの、不意…

Raspberry Pi OS (Trixie) で NIC に固定 IP アドレスを付与する

Raspberry Pi OS (Trixie) で NIC に固定 IP アドレスを付与する方法をメモしておく。 どうやら Bookworm 以降は Network Manager を使ってネットワークを設定するようになったらしい。 www.raspberrypi.com 公式のドキュメントには、固定 IP アドレスを付与…

Python: uv を使って手軽にフリースレッド版の CPython を試す

CPython 3.14 から、フリースレッドモード (Free-threaded mode) が正式にサポートされた 1。 フリースレッドモードでは、従来の CPython に存在した GIL (Global Interpreter Lock) の制約が無くなる。 GIL の制約が無くなると、これまでは基本的にマルチプ…

batt で MacBook のバッテリー充電を制御する

リチウムイオンバッテリーは、充電量が 0% か 100% に近い状態で使い続けると劣化しやすいことが知られている。 また、充放電のサイクルが増えると少しずつではあるが着実に劣化していく。 リチウムイオンバッテリーが劣化すると、製品の設計上の容量よりも…

Android: GitHub にある Obsidian のデータを Termux + GitHub CLI で同期する

最近、情報を記録するのに Obsidian を使い始めた。 ただ、使い始める上で問題が一つあった。 それは、複数のデバイスでデータを同期する方法について。 Obsidian は、基本的にローカルのファイルシステムで Markdown を管理する。 そのため、複数のデバイス…

自分で MCP (Model Context Protocol) を喋ってみる

Model Context Protocol (MCP) は、LLM が外部のシステムから情報を得る、または操作するのに用いられるプロトコルのひとつ。 昨今の扱われ方からすると、今後のデファクトとなりつつあるように感じられる。 今回は、そんな MCP がどういったプロトコルなの…

OpenAI の Web API を使い始める

最近は OpenAI 互換の Web API が、LLM の機能を提供する上でデファクトに近い方法となっているように思う。 そこで、今回は本家の OpenAI の Web API を使い始めるまでの内容を自分用のメモを兼ねて残しておく。 使った環境は次のとおり。 $ sw_vers Produc…

Mac: LM Studio に Hugging Face Hub からダウンロードしたモデルを CLI で読み込む

LM Studio は、ローカル LLM を動かすためのソフトウェアのひとつ。 lmstudio.ai 基本的に LM Studio では、モデルをダウンロードする際には Discover タブから GUI で検索してダウンロードできる。 しかし、Hugging Face Hub 1 などから手動でダウンロード…

Mac: Ollama でローカル LLM を動かす

Ollama 1 はローカル LLM を動かすためのソフトウェアのひとつ。 一般的なラップトップやデスクトップマシンで動かすようなユースケースが主に想定されているように思う。 LLM の機能を不特定多数に提供するというよりは、マシンを操作しているユーザ自身が…

Linux でスワップファイルを使ってスワップ領域のサイズを柔軟に変更する

一昔前だと、スワップ領域といえば専用のパーティションを用意して作るものというイメージがあった。 しかし、どうやら最近はファイルシステム上に作成したファイルを使ったスワップファイルの利用も盛んなようだ。 スワップファイルには、サイズを柔軟に変…

textlint を使って日本語の文章を校正する

textlint 1 は自然言語向けの Linter のひとつ。 対象とする文章を静的解析して、特定のルールに抵触していないか確認できる。 今回は macOS で textlint を使い始めるまでについてメモしておく。 使った環境は次のとおり。 $ sw_vers ProductName: macOS Pr…

Homebrew のパッケージの情報を調べる

今回は Homebrew のパッケージについて諸々を調べる方法について。 毎回調べている気がするのでメモしておく。 使った環境は次のとおり。 $ sw_vers ProductName: macOS ProductVersion: 15.4.1 BuildVersion: 24E263 $ uname -srm Darwin 24.4.0 arm64 $ br…

nftablesは同じフックで優先度が後ろのルールがあるとaccept済みのパケットが再び評価される

nftables の公式 Wiki を眺めていたところ、気になる記述があった。 どうやら、nftables は同じフックポイントで、優先度が異なるチェーンがあるときに注意を要する振る舞いを示すようだ。 nftables の公式 Wiki の記述 1 を以下に引用する。 NOTE: If a pac…

systemd で nftables の設定を永続化する

今回は nftables のスクリプトを systemd から読み込むことで設定を永続化する方法について。 結論から述べると systemctl cat nftables で読み込んでいるファイルの場所を確認したら、そこにルールを書けば良い。 使った環境は次のとおり。 $ lsb_release -…

nftables の処理をトレース機能 (meta nftrace) で追跡する

nftables は、Linux の Netfilter サブシステムをバックエンドに実装されたフレームワークのひとつ。 nftables を使うことで、パケットフィルタリングや NAT、パケット分類などを統一的に管理できる。 nftables は、xtables (iptables, ip6tables など) を置…

Python: パッケージ・プロジェクトマネージャの uv を使ってみる

今回は Rust で書かれた Python のパッケージ・プロジェクトマネージャの uv を使ってみる。 これまで Python では複数のツールを組み合わせて開発のワークフローを構築するのが一般的だった。 そのような構成では、それぞれのツールは目的に特化しているの…

Ubuntu 24.04 LTS に TightVNC を入れて macOS から GUI で操作する

GNU/Linux ディストリビューションのシステムは、大抵の操作を CUI で完結できる。 とはいえ、たまに特定の操作を GUI のフロントエンドでやりたくなることもある。 そんなとき、わざわざ筐体にディスプレイなどをつないで操作するのは手間がかかる。 そもそ…

macOS に LHa for UNIX をソースコードからインストールする

Unix で LZH 形式の圧縮ファイルを展開できるソフトウェアはいくつかある。 たとえば lhasa 1 や unar 2 が挙げられる。 一方で、Unix で LZH 形式の圧縮ファイルを作成できるソフトウェアは限られる。 その限られた選択肢のひとつである LHa for UNIX が先…

ASRock DeskMini X600 で省スペースな Linux マシンを組んでみた

仮想マシンをいくつか作成して、簡単な検証をする時に使う Linux マシンが欲しくなった。 結果として、ASRock DeskMini X600 というベアボーンキットを使って小型のマシンを組んだ。 今回は、その内容についてメモしておく。 ASRock DeskMini X600 もくじ も…

Ubuntu 24.04 LTS のマシンを Wake-on-LAN (WoL) でリモートから起動する

昨今の電気代などを考えると、コンピュータは使うとき以外はシャットダウンしておきたい。 アイドル時の電力が数十ワットでも、長く付けっぱなしだと年間で数千円にはなる。 ただ、出先で使いたくなったときなど物理的に電源を入れることが難しいシチュエー…

Python: multiprocessing モジュールの開始方式 spawn / fork の違いについて

Python の標準ライブラリに含まれる multiprocessing モジュールは、マルチプロセスでの並列処理に用いられる。 Pure Python の処理を並列化しようとしたとき、今のところ最初に検討するのがマルチプロセスになるはず。 というのも、Python のマルチスレッド…