私の Homebrew カタログ (5)

2021-05-15 (updated: 2022-04-11)  #macOS 

前回の続き.今回も25個分 (l-n) です.

最近まで気付いていなかったのですが,brew list には引数にフォーミュラ名を与えることができるようです1.その場合,例えば次に示すように,当該フォーミュラ (keg) に含まれる主要なファイルが一覧になります.さらに --verbose オプションを付けると,すべてのファイルが表示されます.

$ brew list libtiff
/usr/local/Cellar/libtiff/4.1.0/bin/fax2ps
/usr/local/Cellar/libtiff/4.1.0/bin/fax2tiff
/usr/local/Cellar/libtiff/4.1.0/bin/pal2rgb
/usr/local/Cellar/libtiff/4.1.0/bin/ppm2tiff
/usr/local/Cellar/libtiff/4.1.0/bin/raw2tiff
/usr/local/Cellar/libtiff/4.1.0/bin/tiff2bw
/usr/local/Cellar/libtiff/4.1.0/bin/tiff2pdf
/usr/local/Cellar/libtiff/4.1.0/bin/tiff2ps
/usr/local/Cellar/libtiff/4.1.0/bin/tiff2rgba
/usr/local/Cellar/libtiff/4.1.0/bin/tiffcmp
/usr/local/Cellar/libtiff/4.1.0/bin/tiffcp
/usr/local/Cellar/libtiff/4.1.0/bin/tiffcrop
/usr/local/Cellar/libtiff/4.1.0/bin/tiffdither
/usr/local/Cellar/libtiff/4.1.0/bin/tiffdump
/usr/local/Cellar/libtiff/4.1.0/bin/tiffinfo
/usr/local/Cellar/libtiff/4.1.0/bin/tiffmedian
/usr/local/Cellar/libtiff/4.1.0/bin/tiffset
/usr/local/Cellar/libtiff/4.1.0/bin/tiffsplit
/usr/local/Cellar/libtiff/4.1.0/include/ (5 files)
/usr/local/Cellar/libtiff/4.1.0/lib/libtiff.5.dylib
/usr/local/Cellar/libtiff/4.1.0/lib/libtiffxx.5.dylib
/usr/local/Cellar/libtiff/4.1.0/lib/pkgconfig/libtiff-4.pc
/usr/local/Cellar/libtiff/4.1.0/lib/ (4 other files)
/usr/local/Cellar/libtiff/4.1.0/share/doc/ (148 files)
/usr/local/Cellar/libtiff/4.1.0/share/man/ (63 files)

libtasn1

GNU 傘下で開発されている ASN.1 パーサライブラリです.ASN.1 というのは Abstract Syntax Notation One のことで,複雑なデータ構造を表現したり転送したりする方法を記述するための形式のようです.主な活躍の場は通信プロトコル関連のようで,実際私の環境でこのパーサを利用しているのは gnutls と wireshark でした.

libtiff

画像形式の1つ TIFF を扱うライブラリです.C ライブラリだけでなく tiffinfo などのコマンドラインインターフェースも同梱されています.個人的には TIFF 画像を扱う場面はほとんどないのですが(基本的に LaTeX でもサポートされていませんし……)画像劣化するような圧縮を行うことがない(かつ RAW ではない)形式ということで,特定の業界では需要がある画像形式のようです.

libtool

GNU Libtool とはずいぶん抽象的な名称ですが,通常 Autoconf/Automake と一緒に用いて様々なマルチプラットフォームを目指すプロジェクトでビルド手順を簡潔に記述するために用いるもののようです.具体的には,環境ごとの細かい差異を隠蔽し,共通のインターフェースで共有ライブラリのビルドを行うソフトウェアのようです.

libuninameslist

FontForge のプロダクトで,Unicode コンソーシアムが提供する NamesList.txt なる Unicode 文字それぞれの名称を列挙した巨大なファイルを扱うライブラリです.NamesList.txt は単純なテキストファイルですが2021年5月現在最新の Ver. 13 は5万行 (1.52 MB) と大きなファイルで,このライブラリは予めデータをバイト列にコンパイルしておくことで,これらの情報に他のプログラムから高速かつ簡便にアクセスできるようにしたもののようです.

libunistring

C 言語で Unicode 文字列を扱うための GNU 製ライブラリです.そこそこ高級な機能も備えているようで,upper/lower case や正規化はもちろん,行分割アルゴリズムなども実装しているようです.

libusb

名前の通りですが USB デバイスを扱うためのクロスプラットフォーム C ライブラリだそうです.手許環境では GnuPG だけが依存していました.

libuv

マルチプラットフォームな非同期 I/O ライブラリで,元々は Node.js 向けに開発されていたもののようです.現在では Node.js 以外でも用いられています.

libvidstab

ビデオの手ブレ補正を行う FFmpeg と Transcode 用のプラグインだそうです.1回目のエンコードでブレ情報を作成してから2度目のエンコードで補正を適用するというしくみになっているようで,なんだか LaTeX の相互参照解決のようですね.

libvorbis

非営利団体 Xiph.Org が開発した Vorbis なるオープンな非可逆圧縮音声ファイルを扱うためのライブラリです.MP3 等が特許による制限があったため,Vorbis はその自由な代替として開発されたものだそうです.残念ながら MP3 等と比べると対応している環境は少ないようですが,macOS では同団体が提供する QuickTime Components を用いると QuickTime, iTunes でも扱うことができるようです.

なお MP3 の特許権は2017年4月に消滅し,現在ではパブリックドメインとなっています(参考).

libvpx

Google 社の開発する VP8/VP9 ビデオコーデックライブラリです.VP9 は現在 YouTube で採用されているようです.

libx11

X Window System (X11) というのは Unix 系プラットフォームで一般的なウィンドウシステムです.X.Org Server というのは,その X Window System の公式リファレンス実装に該当するようで,このフォーミュラが提供するのはそのコアライブラリです.他にも5つほど相互に関連するフォーミュラがあります.

  • libxau: A Sample Authorization Protocol for X
  • libxcb: Interface to the X Window System protocol
  • libxdmcp: X Display Manager Control Protocol library
  • libxext: Library for common extensions to the X11 protocol
  • libxrender: Library for the Render Extension to the X11 protocol

X Window System には GUI に関する具体的な仕様は一切含まれていないようで,実際に GUI アプリケーションを構築する場合には X 上で動作する GTK+ や Qt などのツールキットを用いるのが一般的,かつ公式にもそうすることが推奨されています.Cairo や Gnuplot など,GUI をもつ Unix 向けのツールは概ねこのフォーミュラに依存しています.

libxml2

有名なデスクトップ環境 GNOME プロジェクトのために開発された XML パーサとツールキットです.XML パーサのみならず,XPath や HTML4 パーサも搭載しているようです.公式ページには「GNOME プラットフォーム外では安定しない」とありますが,多くの環境で動作するように設計されており,実際には GNOME と関係ないプロジェクトにも採用されています.手許では latexml がこの libxml2 に依存しています.

libyaml

C 言語向けの YAML パーサです.README によると,Google Summer of Code (GSoC) のプロジェクトの1つとして開発されたようです.現在では YAML コミュニティがメンテナンスをしています.元々 Python プロジェクトのために開発されたもののようですが,Ruby や Vim でも利用されているようです.同じく設定記述用途を意図する TOML のパーサ実装は簡単なのですが(かくいう筆者も llmk のために実装したことがあります)YAML は仕様が巨大で独自実装するのは困難なようなので,使い出があるのでしょう.

libzip

Zip アーカイブの読み込み・作成・改変などを行うための C ライブラリです.PHP で利用されています.利用事例が公式サイトで一覧にされており,ちょっと興味深いです:

ライブラリと言いつつ,いくつかコマンドラインツールが同梱されています:

  • zipcmp: 2つの zip アーカイブを比較する
  • zipmerge: zip アーカイブを結合する
  • ziptool: zip アーカイブを改変する

little-cms2

CMS と聞くと Web 制作で用いるコンテンツ管理システム (Contents Management System) を思い浮かべますが,ここでの CMS は色管理システム (Color Management System) を指すようです.この CMS は,この業界ではデファクト・スタンダードらしい ICC プロファイルと呼ばれる仕組みを利用し,デバイス依存の RGB や CMYK を別のデバイス非依存の形に変換したりといったことを行うようです.Little CMS はそのオープンソース実装としては広く用いられており,ImageMagic や GhostScript などのオープンソースプロジェクトに加え,Mac 版の MS Office や FireFox などでも採用されたことがあるようです.

llvm@6

LLVM は比較的新しい C/C++ コンパイラ Clang のバックエンドとして有名なコンパイラ基盤です.Low Level Virtual Machine の略語だと思っていたのですが,公式サイトによれば現在は「何の略語でもない」ということになっているようです.

この llvm@6 フォーミュラで導入されるのはバージョン6系の LLVM です.2020年8月現在最新の LLVM はバージョン10なので,そこそこ古いバージョンのものです.特に実用目的で入れた訳ではないのですが,uint256_t 氏の Rapidus という実験的な Rust 製 JavaScript エンジンで遊んでみたくてインストールした記憶があります.それにしても unit256_t 氏は他にも Web ブラウザ (Naglfar) や JVM 実装 (Ferrugo),さらには LLVM インスパイアなコンパイラ基盤 (Cilk) まで作っていてすごいです.

lua

Lua は Ruby や Python に似た軽量スクリプト言語です.Lua の特徴は本当に「軽量」であることで,さまざまなシステムに組み込んで利用することを前提として設計されています.例えばモダンな TeX 処理系である LuaTeX もその一例で,TeX 処理系に Lua 処理系を組み込んだものになっています.また,スクリプト言語としては動作が高速であることも長所とされています.

個人的な印象としては,Ruby や Python ほどメジャーではないものの,Lua は使いやすい言語です.具象構文や変数スコープ,正規表現代わりのパターンマッチなどにはやや独特のクセがあるような気もしますが,概ね他の一般的なスクリプト言語と同じように活用することができて,すでにそういったものを書いたことがある人にとっては学習コストは高くないでしょう.

TeX の世界では,TeX 処理系で実行する以外のツールを作ろうと思うと,一般的な選択肢は (1) バイナリ形式,(2) Perl,(3) Lua ぐらいしかありません.Java や Python により実装されたものもありますが,こうしたものの実行環境(インタプリタや VM)は TeX Live に付属しないため,TeX の世界で完結させることはできません2.さらに (1) の選択肢はよほど重要なプログラムであるとか,速度が求められるとか,そういったことがないと手間が大きくなってしまうので敷居が高いです3.そういうわけで,実質的にほとんどのツールが気軽に採用できる選択肢は (2) Perl または (3) Lua の2つしかありません.選択肢がこの2つだと,すでに Perl に習熟していて使い熟しているという場合を除いては,基本的には Lua が最もおすすめの言語ということになります.

話が脱線しましたが,Homebrew の Lua フォーミュラは TeX Live の LuaTeX 処理系とは無関係です.直接の処理系としては私は texlua ばかり利用していますが,私の環境では gnuplot・vim・wireshark が組み込み言語としてこのフォーミュラの Lua を利用しているようです.

lynx

Lynx はテキストベースのウェブブラウザです.基本的に画像や動画は一切表示されず,(表組み以外の)テキスト要素のみをブラウジングすることができます.また JavaScript 等も利用できません.今の時代,こうしたテキスト以外の要素なしに閲覧できるウェブサイトはそうそうないので,実用には向かないと思いますが,その性質を逆用してウェブアクセシビリティの確認のために使用されることがあるようです.ちなみに私の個人サイトは Lynx でも完璧に表示することができます.

Lynx スクリーンショット

lz4

LZ4 は圧縮・展開の高速性を重視した非可逆圧縮アルゴリズムです.この lz4 フォーミュラで導入されるのは,LZ4 提案者の Yann Collet 氏によるリファレンス実装です.LZ4 の圧縮率は gzip 等と比べると低いようですが,圧縮率よりも処理速度が求められる場面を中心に広く利用されています.ちなみに TeX Live マネージャ (tlmgr) においても,パッケージのバックアップ用アーカイブの作成に最優先のデフォルト形式として採用されています.

LZ4 の原理自体は gzip などと同様の辞書式圧縮アルゴリズムのようですが,速度重視で一部機能を制限しつつ,泥臭く細かな効率化テクニックを駆使しているようです.

lzo

LZO も高速な非可逆圧縮アルゴリズムで,正確には LZ4 が LZO の派生にあたるようです.LZ4 よりは少し圧縮率が良いと言われています.この圧縮形式も速度重視の場面でよく用いられているみたいです.

なおこのフォーミュラに含まれているのは ANSI C ライブラリのみで,コマンドラインツールは含まれていません.公式ツール名は lzop で,これが必要な場合は別途 lzop フォーミュラをインストールする必要があるようです.

次回もお楽しみに.


  1. 2020年12月にリリースされた Homebrew 2.6.0 以降では,オプションも引数もなしに brew list を実行すると,インストール済みのフォーミュラのみならず Cask 出力されるようになったようです.個人的には Cask は一切使用していないので出力は同じですが,確実にフォーミュラだけのリストを得るためには brew list --formulae とする必要があるようです. ↩︎

  2. つまり,実際に TeX ユーザに使ってもらうには,TeX Live 以外に必要なものを別途インストールしてもらわねばなりません. ↩︎

  3. TeX Live に含まれるバイナリプログラムは,ソースコードの状態で頒布されるのではなく,年に1度ボランティアがさまざまなプラットフォーム向けにビルドして配布する運用が行われているためです. ↩︎