プログラミング
現ハード:富士通LH55/C2、2TのUSB外付けHDD、USB外付けDVD書き込みも可。CPUはCeleron 3865U 2コア Kaby Lake-U (第7世代Intel Coreプロセッサ)、HD610内蔵GPUが一応あるが、GPUありとは認定されない悲しきGPUであり (Windowsではそうだったが、LinuxのOpenGLベースならGPUとして認識されるかもしれない (BlenderのLinux版の前提条件を見たら、要4コア以外の最低条件はすべて満たしていた); しかし、FirefoxでGPUモードにすると不安定になる (YouTubeで一旦再生が止まると回復しなくなる。GPU無しに設定しておけばそんな場合でもしばらくすれば回復する) のでGPU無しモードで使ってはいるのだけれども)、Windows11非対応。メモリ4GB。
現回線:BIGLOBE光 (フレッツ、実質上下230Mbps程度)。
完習済みプログラミング言語:旧C (ANSIより前、アドレス定数値を利用した「黒魔法」が駆使できた頃の仕様)、Java1.2前後 (含全クラスライブラリ)、ECMAScript初版
ソースが読める程度には会得済みのプログラミング言語:Z80A用マクロアセンブラ、(MSX)BASIC、ObjectPascal (最初に完読したクラスライブラリ体系がTurboPascal用Turbo Visionなので、Apple Pascal系の簡潔さを極めた頃の、で、現在の複雑化したものは知らない)、Python (2.1あたり)
Debian 13 trixieベースのLMDE7にした (安定状態へ持っていくまでが (私が昔sarge前後を使っていた頃に比べればはるかに簡易になったとは言え、それでもなお) 結構大変なので、Linux初心者は極めて安定かつ堅牢なMint22 (この本はCinnamonの他、WINEにもいくらかは詳しい) 自体の方でおとなしくUNIX・Linuxを勉強研究するのが吉ではあろう)。Debian Xfceに比べ完全フリーには限定されずまたMintスタッフの努力によってずっと扱いやすくなっており、またMintに比べればUbuntuの拘束下には無く、かつこれら3つの中ではデフォルトのパッケージ数が最も多い (Snapが使えないように初期設定されているMint22と異なり、こちらは普通に使える)。
GnomeとKDEにおける最低限の一貫性 (Gnome/Gtkは迷走気味であり、KDE/Qtの方が一貫性は高い; 前者は既に枯れて安定したC言語ベースで後者は未だ発展途上なC++言語ベースではあれども) のためにfreedesktop.orgが組織され、xfceはその規格を非常に尊重しているので、xfce専門本が無くてもそちらを参照すればおおよそ事足りる (もっとも、Qtベースへの移行を受けて、現在はLXQtを研究中であり、いずれはそちらがメインとなろうが、LXQtは足りない部分をKDEで補う形なので、KDEの研究はしておいた方が良さそうだ)。とりあえず簡単に言えば、外部から導入したアプリは、メニューエディター (menulibre) で適切な.desktopファイルを作ってやれば、パッケージ版と同様にメニュー等で取り扱えるようになる。Linuxの諸文書 (po、texi、man等) のフォーマットの概要は「Inside Linux」にそれなりに記述されている (makeやconfigureについてもそれなりに記述されている)。xfceのセッション機能は、位置等は保存できてもアプリを自動的には起動しないので、セッションと起動の自動起動アプリに手作業で登録しておく必要がある (mintupdate (トレイの盾アイコン) 側で再起動すると起動中のアプリがすべて自動起動に登録されてしまうが、「/home/ユーザー名/.cache/sessions/xfce4-session-システム名:0」テキストファイルからそれら追加分の行群を削除すれば回復できる)。ウインドウボタンの並び順を事前に定める方法は不明なので、DnDでいつでも手動で並び順を入れ替えられるようにするのが妥協点だろうか。
Thunarの「コピー」はコピー先に応じて本体かパス名かが変わる; 端末やテキストエディタへ貼り付けるとパス名コピーの意味になり、他のフォルダへ貼り付けると本体コピーの意味になる。
外付HDDは、MyHDDの名前で/etc/fstabでuid=1000,gid=1000を指定して巨大な自分のhomeディレクトリ拡張として使えるようにした。その上で、~/.wineをそこの専用ディレクトリWineDriveへのリンクとして設定した。この他、BlenderやOpenUtau等、サイズの大きいあるいはファイル数の多い外来的なものはそちらへ展開することにして、自分のhomeディレクトリ自体はバックアップしやすいようにスリムさを維持したい (システムのバックアッパーTimeshiftはext4を要請するので、本来NTFSである外付HDDから200GBをext4な別パーティションに切り離して領域を割り当てた (Dropboxの配置先もext4を要請するので、そのパーティションにしている)。トータル2TBの超巨大ドライブなので、それでも全然余裕ではある。まあそんなわけで、自分のhomeディレクトリ自体のバックアップにはNTFSにも対応する別のバックアッパーFreeFileSyncを使うことにした (使い方初級、上級、秘伝))。
日本語入力は、Schemeベースのuimのanthyにした (辞書登録できないときはここを参照; 権限は.anthyフォルダごと644で); キー設定は、EGBridgeを参照しつつもより単純化した、Filesに置いたMyAnthyEGBkeys.txtの通りに替える。
テキストエディタには、Lua5.4でのスクリプティングに対応しているtextadeptのQt版を使うことにした (init.luaを例の場所に置いておく)。また、XMLベースのアウトラインプロセッサFeatherNotesを自分用メモシステムとして併用する (システムトレイに格納できるので、ログイン時に自動起動するようにした)。これまでテキストエディタのセッション機能で扱っていた最重要諸情報テキストファイル群は、それの単一ファイルのノード群へと作り替えた。
IDEは、一貫して完全な後方互換性を誇るVim9.1を用いる (この日本語ヘルプの最下に一括ダウンロードがあり、それを~/.vimフォルダに展開すればGVimから直接参照可能)。私自身の手元用には、6.4のヘルプファイルをそのまま書籍化したようなもの ((旧) Vim Scriptの完全な情報を含む) とviデスクトップリファレンス (Solaris2.6用viの他、Vim5.1、nvi1.79、elvis2.0、vile8.0の簡易リファレンスも含む) と壁貼り用チートシートを揃える (A3サイズでPDF化したものを例の場所に置いておく)。プラグインのインストーラはJetpack (日本語での解説) を使うとして、Scheme IDE用途にはsexpとslimvがあれば充分なようだ。C++、Python、LuaはQtCreatorのfakevimモードで対応できるだろう (その他のvim化情報)。textadeptもバージョン間の互換性が高くないので、とりあえずはIDE専科としても、使い慣れれば一般的なテキストエディタもゆくゆくはVimに収まることになりそうではある。Vimのexモードを駆使して、sedみたいなことをさせたければこの本は欠かせない (エンコーディングまわりに不安が残るsed本体よりもこちらの方がむしろ良いとすら言える; これより後の版は、本のサイズが一回りデカくなってVimなどの情報が追加されたほかは、exモードまわりの部分はこの最初の版と基本同じである)。
いわゆるプラットフォームには、Qtを使うことにした。4を基本とし、4ベースのソースは5ではincludeを少し調整するだけでよく、そうしてQt5対応としたソースはQt6でもそのまま流用できるようだ (大きな違いはQmakeからCmakeへ切り替わったことぐらいで、ゆえにこの本はCmakeの参考本にもなる; なお、QmakeもCmakeも、その名から連想されるような「Makeの代替」では無く、configureの方を代替して適切なMakefileを生成するものである)。
Qtのベース言語であるC++は、まずC++03の入門書で概要を把握し、C++03のリファレンス (Qt4はこれで良い)、C++14と17に関する追加情報 (Qt5の後半からC++14ベース、Qt6はC++17ベースになる)、と順を追って会得していこうと思う。
翻訳ソフトとして、Lokalizeを導入。様々な文書をpo化できるpo4aも研究しておく所存; .moと.poとの相互変換法 (これらのコマンド群はDebianではgettextパッケージに入っている)。QtのLinguistも研究しておきたい。また、会計ソフトとしてKMyMoneyを導入 (MSMoneyに似せてあるので、その書籍を参考書とできようが、英米の会計ソフトは簿記方式なので簿記の仕方を会得しておくとなお良いだろう。簿記の英語については、ここが良いだろうか)。
マイ本格言語は、SchemeのR6RS (和訳、R5RSとの違い) とする。R6RSが、ミニマムながらCommon Lispに匹敵する (かつ諸方言の寄せ集めでは無くゼロから一貫性をもって規定された) 言語仕様であることに思い至ったからである。ただし現状ではR5RS (R4RSとの違い、R4RSな本は解説書とSICP (無料オンライン版) を持っている; R4RSの簡易なチートシートを作ったので例の場所に置いておく) の系もuimを含めまだまだ広く使われているので、その系も研究しておく (解説書籍、SRFI和訳)。R6RS処理系はChez Scheme (Debian13は10.0.0、対話環境あり)、R5RS処理系は、CへのトランスパイラであるGambit Scheme (Debian13は4.9.3、文字はUNICODE対応、対話環境あり、最新版ではJavaScriptも出力でき、また将来的にはPythonも出力できるようにするらしい) をもっぱら用いる。また、R5RSのサブセットではあるがuimのエンジンでもあるsigscheme (Debian13は0.9.1) も使うかもしれない (かなり遅いので常用はしないが、Cプログラムへの組込用に最適化されてもいるので、その用途で利用するかもしれない)。
Schemeは順次過程を記す言語であり、この意味では機械論・因果論的であって、これを「神の視点」とするならば、パターンマッチ言語であるそのマクロは目的論的な「キリストの視点」である。継続を抽象化されたCPU割り込みと解するならそれは現在的・一時的逸脱であって「聖霊の視点」なのだから、三位一体のプログラミング言語化に等しい。これが意味するところは、そのマクロはパターンマッチ言語でなければならず、それを維持したままライブラリシステムを設計するなら、結局R6RSのそれしかない、ということであろう。本来の名前空間とは別にマクロの名前空間を用意するCommon Lispでは、前者をこの世、後者をあの世として神と人とは互いに異世界人に留まるが (カトリック的世界観)、Schemeの衛生的マクロは「神の暗号」空間をこの世の名前空間に確保するのだから、この世を実存的なキリスト浄土すなわち神人交合世界とする (プロテスタント的世界観)。この伝で言えば、オブジェクト指向は生命体内的 (暗示的) 階級世界観、それを離れて名前空間を純粋に階層化したPythonは擬似的 (明示的) 階級世界観と見なせよう。ErlangやClojureのような「変数を不変にして使い捨てる」系は、個々の存在を単なる一過的な道具と見なす消費主義世界観と見なせようか。
PythonにはClojureのPython版であるPy (Debian13は1.0.0)、Luaには同じくClojureのLua版であるFennel (Debian13は1.5.3) で対応する。それぞれのソースを入手して、最終的にはClojureを経由せずにR6RSから直接トランスパイルできるようにしたい。
マシン語やさまざまなVMの代わりに、より普遍的にCPUとメモリをモデル化しているeForth (処理系群はGitHubから適当に見繕えば良かろう) を研究しようと思う (FIG-ForthやANSIForthが商品版をも含めた覇権争いの果てに無様に巨大化してしまった反省から、eForth (例示実装は8086アセンブラによる。FORTHはI/Oまわりが存外厄介なのだが、そちらをモダンに回避しているkoniloというFORTH系言語も研究し甲斐がありそうではあるが、私自身はとりあえずはeForthを極めることに専念したい)。
オフィススイートは、LibreOfficeを使うことにした; その本自体はOpenOffice3.3用だが、マクロBASICの型や制御構造も載っている。より安い3.0用ガイド本でも同様と思われ、どのみち古い文書なのでこれから入手したい人はそっちの方が良いだろう (自分の3.3用は送料込みで718円とはるかに安いときに買った)。データベースは、より簡易には (表計算レベルの外観で済むものなら)、DB Browser for SQLite (Debian13にはsqlitebrowserパッケージとして入っている) をとりあえずは使うことになろう (SQLite入門、DB Browserの使い方)。
DebianのデフォルトブラウザはFirefoxなので、そのまま使う (Chromeのデベロッパーツールも参考)。userChrome.cssを例の場所に置いておく。
メーラーもDebianデフォルトのThunderbirdを使用 (GMailについては、Google自体にログインする形で対応できる)。トレイアイコン化はBirdTrayを利用 (IMAPメールボックスの更新も確認してくれる)。
RSSリーダー (私自身は専門的書籍も持っているほどのRSS推進派だ; 近似した技術ということでXMPPも研究してはいるが) はRSS Guardを使用。
ヴァージョン管理にはGitとGitHubを使うことにした。
軽量マークアップ言語は、一番シンプルで汎用性も高いMarkdownがもっぱらになろう (日本語基本文書 (オリジナル版の範囲のみ解説; GFMも解説しているものはしかし残念ながら版が大き過ぎて本棚に置きづらいし、やはり解釈に一番悩むのはオリジナル版の範囲なので、それで充分ではある)。reStructuredTextやAsciidocほどではないが、よりシンプルでも簡易な本のソース程度には対応できるtxt2tagsを、我が本用マークアップ言語としたく思う。
MyWikiは現状のまま@WikiをMarkdownモードで用い、Obsidianをバックアップ兼エディタとして使おうと思う。MyBlogも現状のままはてなブログをMarkdownモードで使い続ける。ミニブログはXに代わってMastodonを使い、タイムラインが流れやすいすなわちどさくさ紛れの投稿がしやすいmstdn.jpに寄生する。
画像処理は、Blender2.71; 大元のlinux用を持って来れば、解凍するだけで起動できる (うちのマシンスペック的に、このあたりのバージョンが使用可能な上限だと思われるので、Debian13のリポジトリにあるそれよりはるかに新しいものはCPUコア数の制約からおそらくに使えないだろうと思う。2.71はPython 3.4を内蔵しているので、そのための文法書が今となっては必須だろう; 標準ライブラリは使っておらず、代わりにPython3.4用APIを自前で用意しているので、文法本だけあればよい)。2D用はKritaで済ませたい。動画編集はShotcut、3DアニメはBlender2.7でいずれは済ませるようにするつもり (MMDおよびPMXは、それらを使って作ったものの商用利用が一切禁じられているので、いつか商用利用せんとする際に心許ない)。
マインクラフトのようなボクセル系が、GPUへの負荷も少なくWEB版も作りやすいなど良さげなので、3D系はその研究をメインにしようと思う (Linuxでは、WINEを要するMagicaVoxelよりネイティブ版があるvengiの方が良いが (オリジナルのdebセットは、0.0.25以降はbinutilsのバージョンが違うと怒られてインストールできない; 大人しく0.0.24のdebセットにとどめておこう)、YouTubeでのアニメ動画を探すとMagicaVoxel系が圧倒的に多いので、そちらを使い慣れてからvengiへと移行するのが良いのかもしれない。ただし、アニメ機能等はvengiの方が簡単そうではある)。LinuxではLuantiがLuaJitで記述できるボクセルエンジンであり、そのマインクラフトクローン実装が名高いが、MMORPGとしてVelorenも注目に値しよう。また、ボクセルでは無いが簡易なゲームシステムとして、Lua (に加え現在ではSchemeやFennelにも対応) でゲームを記述できるTIC-80も研究する。
Kindle Readerは、WEB版のみを使用することにした。アカウントからコンテンツライブラリを開き、表示をコレクションにすれば、新しいコレクションもWEB版から作成できる。
WINEの文字化け問題は、Windowsのフォントを持って来ずとも簡易に解決できる (ただのcjkfontsやfakejapaneseの場合、takaoフォントが日本語化される)。
WINEはもはやMMDとPMX用にしか使わないので、より問題が少ない64ビットモードオンリーで使うことにした。最初にコマンドラインで、
WINEARCH=win64 WINEPREFIX=~/.wine winecfg
とすれば64ビット版用システムしか作らないので、そこを使う限り64ビット専用になる。
PMXエディタが起動時に「DirectX初期化失敗」エラーを出したが、コマンドラインから起動させてログを取るとd3dcompilerエラーなようで、winetricksでその系を全部入れたら解消された。PMXエディタの内部リスト表示が文字化けしてしまう問題は、64ビット版を使っただけで解消された; ただし、dotnet48より古いバージョンをインストールすると同様に文字化けしてしまうようだ。これの解決は現状、.wineの中身を消して上のコマンドラインで再度WINE用Cドライブを作り直すしかないようなので、注意されたい。
MMDは、壮大なスカイドームはロードしただけで落ちるので (怪獣対若大将P様作は基本的にどれも落ちる)、できる限りシンプルなスカイドームを選ぶようにする (画面サイズも、これまで通りの640x360にした)。MMEはオンでAutoLuminous4とExtendShadowは常に使用、AVI化は非圧縮で (AVI出力には最後まで苦労したが、ここのWorkaroundsに従ったところ、ようやくに解決できた。GUI版では全部は入らなかったのが、CLIでの「winetricks directshow」でしっかり全部入った感じ)。タイトル等はShotCutで入れ、MP4化もそれのYouTube設定で済ませる (対応するGPUの有無をチェックしてくれるメニューがあって、使えるのがあったのでShotCutではGPUを積極的に使う)。
シミュレーション的なゲームは、案外 (ここの作るものはほとんどが同一の世界観に依拠しており、その世界観は二次創作自由だそうだ) NScripter で作れるようだ (書籍版のNScripterバージョンは2.82とかなり古めだが、ONScripterなら古いバージョンにも対応しているかもしれない)。
AIは、お試し的にOllamaのqwen3:0.6bで適当に遊んでみることにした (スマホローカル用の極小モデルなので、メモリ4GBでGPU無しに等しいうちの2コアノートパソコンでも高速に日本語で(も)返してくれる)。クラウド版はより高機能ではあっても設置側の都合で新しいものに随時差し替えられてしまい、従って使用期限が自ずと生じるが、ローカルAIならずっと同じモデルを使い続けられる、という半永久的な一貫性が私の性に合っているので、クラウド版を使うことは、これまではもちろんこの先も無いだろう。