plgarc/wip/llama.cppでpkgsrcのBLASサポートを探る

この記事は、NetBSD Advent Calendar 2024の13日目の記事です。

llama.cppを使ってみる

以前に、NetBSD/amd64でllama.cppを使ってみるという記事でllama.cppを使ってみていました。 あれから、llama.cppはバージョンアップを繰り返し、様々なLLMも公開されました。 それほど頻繁ではないものの、私もllama.cppを使ってみています。 今回はb4333にアップデートするに当たって気付いたpkgsrcでのBLASサポートについて書きたいと思います。

シングルスレッドでしか動いていない

簡単ではない、例えば数百字以上の出力を求めるプロンプトを与えると、何も返事か返って来ない事象が発生していました。 また、以前も書いたようにプロンプトのテンプレートの問題なのかと思っていたのですが、とても長く待つと、ちゃんと返事が返って来ました。 そこで、処理中にtop(1)コマンドで状況を確認すると、1CPUしか使っていませんでした。 実行しているラップトップには8コア16スレッドを内蔵したCPUが搭載されています。 ログを見てみると、8スレッド以上は使ってくれそうです。 そこで、どのようになっているのか調べてみることにしました。

BLASバックエンドのソースコードを確認する

BLASサポートは、b4333だと、ggml/src/ggml-blasというディレクトリー内に格納されているようです。 このディレクトリー内のファイルを読んでも、マルチコア/マルチスレッドサポートの記述はなさそうです。 となると、BLASライブラリーがマルチコア/マルチスレッドサポートをしていると考えるのが適切そうです。

pkgsrcでのBLASサポート

pkgsrcには、いくつもBLASに相当するライブラリーのパッケージがあります。以下に挙げてみます。

  • math/blas
  • math/blas64
  • math/openblas
  • math/openblas64
  • math/openblas_openmp
  • math/openblas64_openmp
  • math/openblas_pthread
  • math/openblas64_pthread

これらは直接利用するのではなく、mk/blas.buildlink3.mkを経由して使うことで、 切り替えてビルド時に利用することができます。 mk/blas.buildlink3.mkで設定できるのは、まずは3つのBLAS_ACCEPTEDです。

  • netlib
  • openblas
  • openblas_pthread
  • openblas_openmp
  • accelerate.framework

ここで、accelerate.frameworkはNetBSDでは利用できないmacOSの機能ですので、除外して考えると、さきほどのパッケージとの関係は以下のようです。

  • netlib → math/blas、math/blas64
  • openblas → math/openblas、math/openblas64
  • openblas_pthread → math/openblas_pthread、math/openblas64_pthread
  • openblas_openmp → math/openblas_openmp、math/openblas64_openmp

でもこれだけでは、例えばmath/blasとmath/blas64を区別できません。これを区別するのがBLAS_INDEX64です。 これをyesに設定することで64付きのパッケージを選択できます。

pkgsrc/wip/llama.cppをマルチスレッド対応にする

と言うことで、llama.cppで使えるCPUで演算するBLASライブラリーを調べてみると、BLAS_ACCEPTEDで言うと、netlibとopenblas64ということがわかりました。 netlibはこれまで使って来て、マルチコアを活用できないものでした。活用できそうなmath/openblas64_pthread、math/openblas64_openmpを使えるようにしてみます。 pkgsrc/wip/llama.cppl/Makefileに以下のように追記してみます

BLAS_INDEX64=           yes
BLAS_ACCEPTED=          openblas_pthread openblas_openmp

ビルドして動作確認をしてみる

結果から言うと、openblas64_openmpは私の環境では正常にllama.cppを動かしてはくれませんでした。 全てのコアを使い切ってはくれますが、openblas_pthreadのように速やかに演算をしてはくれませんでした。 openblas_pthread、openblas_openmpそれぞれを使ったllama.cppをビルドするには、以下のようにします。

# make PKGSRC_BLAS_TYPES=openblas_openmp install
または
# make PKGSRC_BLAS_TYPES=openblas_pthread install

動作確認には、以前はllama-cliを使っていましたが、llama-serverとウェブブラウザーを使うのが良さそうです。 ChatGPT的なウェブページが提供されます。 IPv6で自ホスト以外からもアクセスできるようにする例です。 http://localhost:8080/をwww/firefox等で開くと利用できます。

$ llama-server --host :: --port 8080 -m ./models/gemma-2-2b-jpn-it-Q4_K_M.gguf

Firefoxで、espeak-ngによるtext-to-speechをする

この記事は、NetBSD Advent Calendar 2024の6日目の記事です。

Firefox for NetBSDでのtext-to-speech

昨年の今ごろに、festivalによるtext-to-speechをFirefox for NetBSDで試していました。 試してみると、pkgsrc/audio/festivalではなく、pkgsrc/audio/espeak-ngでも発声させることができました。

Firefoxをインストールする

pkgsrc/www/firefoxは、speechdオプションを有効にしてビルドしインストールする必要があります。 既定値ではspeechdオプションは有効ではないので、以下のように実行すれば良いでしょう。

# cd /usr/pkgsrc/www/firefox
# make PKG_OPTIONS.firefox=speechd install

必要なパッケージをインストールする

必要なのは、pkgsrc/audio/espeak-ngだけであるようです。 以下のように実行してインストールします。

# cd /usr/pkgsrc/audio/espeak-ng
# make install

speech-dispatcherを設定する

festivalの場合に設定した箇所に、espeak-ngを設定して行きます。 以下のパッチのように/usr/pkg/etc/speech-dispatcher/speechd.confを修正します。

--- /usr/pkg/etc/speech-dispatcher/speechd.conf.orig    2024-12-10 11:52:48.513672931 +0000
+++ /usr/pkg/etc/speech-dispatcher/speechd.conf
@@ -114,6 +114,7 @@ DefaultVolume 100
 # configuration.

 # DefaultLanguage "en-US"
+DefaultLanguage "en-US"


 # ----- MESSAGE DISPATCHING CONTROL -----
@@ -256,7 +257,7 @@ SymbolsPreprocFile "orca-chars.dic"
 #    or ~/.config/speech-dispatcher) or absolute

 #AddModule "espeak"                   "sd_espeak"    "espeak.conf"
-#AddModule "espeak-ng"                "sd_espeak-ng" "espeak-ng.conf"
+AddModule "espeak-ng"                "sd_espeak-ng" "espeak-ng.conf"
 #AddModule "festival"                 "sd_festival"  "festival.conf"
 #AddModule "flite"                    "sd_flite"     "flite.conf"
 #AddModule "ivona"                    "sd_ivona"     "ivona.conf"
@@ -290,11 +291,13 @@ SymbolsPreprocFile "orca-chars.dic"
 # must use one of the names of the modules loaded with AddModule.

 # DefaultModule espeak-ng
+DefaultModule espeak-ng

 # The LanguageDefaultModule selects which output modules are preferred
 # for specified languages.

 #LanguageDefaultModule "en"  "espeak"
+LanguageDefaultModule "en"  "espeak-ng"
 #LanguageDefaultModule "cs"  "festival"
 #LanguageDefaultModule "es"  "festival"
 
 

発声させてみる

Firefoxを一度終わらせ、再度起動します。 その上で、適当な英語で書かれたウェブページを開き、reader modeにします。 すると、ヘッドホンマークのtext-to-speechメニューが表示されます。 ここで、音声を選んで、▶アイコンで発声させられます。

ただ、festivalに増してあまり音質は良くないような気がします。 別途サーバーを起動しておかなくて良いのは利点かもしれません。

cdce(4)なUSB-Ethernetアダプターを使っている時に、ブリッジネットワークが使えなかった話

この記事は、NetBSD Advent Calendar 2024の3日目の記事です。

qemuで使うブリッジネットワークを用意したい

qemuで仮想マシンを使ってみるときには、qemuのユーザーネットワークが手軽ですが、ホスト側からアクセスしようとすると、自由度が低く面倒です。 そうなると、tap(4)とbridge(4)を使って、ホストと同じネットワークに接続したくなります。 私が通常使っているラップトップPCには、内蔵のEthernetデバイスはありません。 そして、過去にcdce(4)でしか認識されず、ure(4)としては認識されないUSB-Ethernetアダプターを使っていたのもあって、 以下のように/boot.cfgに設定しています。 これにより、滑てのure(4)なデバイスがcdce(4)なデバイスとして認識されます。

# cat /boot.cfg
(snip)
userconf=disable ure*
(snip)

ところが、cdce(4)として認識されているUSB-Ethernetデバイスをブリッジネットワークに参加させようとすると、 どうやっても通信ができないようでした。 もしかしたら、私のラップトップPCのxhciのせいかもしれませんが…。

ブリッジネットワークを設定する

The NetBSD guideのConfiguring bridged networking on a NetBSD host に記載のように、以下のようにすれば、ブリッジネットワークを設定できるはずです。 私は、以下のようにcdce(4)で設定してみました。

# ifconfig tap0 create
# ifconfig tap0 descr "NetBSD VM" up
# ifconfig bridge0 create
# ifconfig bridge0 descr "LAN VM bridge" up
# brconfig bridge0 add tap0 add cdce0

これで、qemuの仮想マシンを起動させても、そこで動かしているNetBSDから外のホストと同じネットワークにはアクセスできませんでした。 その時、以下のようにカーネルをエラーを出していました。

cdce0: watchdog timeout
cdce0: usb error on tx: IOERROR
cdce0: watchdog timeout
cdce0: usb error on tx: IOERROR
cdce0: watchdog timeout
cdce0: usb error on tx: IOERROR

とりあえずure(4)として使えばブリッジネットワークは構築できますが、同じ状態の人がいたら、参考になればと思います。

NetBSDからCanon LBP3100に印刷する

この記事は、NetBSD Advent Calendar 2024の2日目の記事です。

Canon LBP3100というプリンターについて

Canon LBP3100というプリンターは。Canonの安価なwinprinterです。 私は2015年3月に5,580円で購入しました。 トナーカートリッジはしばらく前になくなってしまいましたが、2,280円でサードパーティーのリサイクルトナーカートリッジを買ったので、まだしばらく使えればと思っています。

LBP3100はwinprinterだと書きましたが、実際にはCAPT (Canon Advanced Printing Technology)というページ記述言語を受け付けてくれます。 ただ、単純にCAPTフォーマットのデータをLBP3100に送ったら印刷されるという訳ではないようです。

CUPSで印刷する準備をする

CUPSは、今はPrinter ApplicationというIPSを受け付けて独自のプリンターへ出力する仕組みを推進しているようですが、今回はこれまで通りのフィルターコマンドを 使ってみます。 今回は、CAPTをリバースエンジニアリングして作られたcaptdriver 0.1.4.2-GxBというのを 使ってみることにします。

captdriverをビルドする

まず以下のようにして、https://github.com/mounaiban/captdriver/tree/0.1.4.2-GxB からソースコードをcloneします。

$ git clone git@github.com:mounaiban/captdriver.git
$ cd captdriver
$ git checkout 0.1.4.2-GxB

その上で、以下のように実行すれば、ビルドできます。

$ autoreconf -fi
$ ./configure
$ make

こうすると、src/rastertocaptというバイナリーファイルができます。

フィルタープログラムをインストールする

CUPSで印刷するには、フィルタープログラムとppdファイルが必要です。以下のようにインストールすれば良いでしょう。

# cp src/rastertocapt /usr/pkg/libexec/cups/filter
# mkdir /usr/pkg/share/cups/model

ppdファイルは0.4.2-GxBブランチには存在しないので、以下のようにブランチを切り替えてppdファイルを入手します。

$ git checkout master
# cp ppd/CanonLBP-2900-3000.ppd ppd/CanonLBP-3010-3018-3050.ppd /usr/pkg/share/cups/model

LBP3100で使うのはCanonLBP-3010-3018-3050.ppdの方です。

印刷する準備をする

次に、必要なパッケージをインストールしておきます。 以下のようにすれば良いでしょう。

# cd /usr/pkgsrc/print/cups-filters
# make install

cups-filtersは必須です。これがないと、captdriverはエラーになり利用することができません。

他にもCUPSを利用して印刷するプログラムが必要です。今回はpkgsrc/www/firefox-133.0を使うことにします。 (firefox-133.0はまだpkgsrc treeにcommitされていません。)

CUPS daemonを起動させ、プリンターを追加する

LBP3100はUSB接続しかないプリンターです。 Canon LBP3100をつなぐと、ulpt(4)として認識されます。 ですが、ugen(4)として認識されないとうまくプリンターとして認識されないようです。 /boot.cfgに以下のように追記して、再起動後にultp(4)を無効化するように設定します。

$ cat /boot.cfg
userconf=disable ulpt*

続いて、cupsdをNetBSD起動時に起動させるようにします。

$ cat /etc/rc.conf
(snip)
cupsd=YES
(snip>

ここまで設定できたら、NetBSDを再起動させます。

プリンターを追加する

ウェブブラウザーでhttp://localhost:631/を開きます。Administrationを選択します。ログインが求められたらNetBSDへのログイン情報を入力します。

LBP3100とNetBSDマシンをUSB A to Bケーブルで接続し、LBP3100の電源を入れた上で、 Add Printerボタンを押します。

Local PrinterのCanon LBP3100/LBP3108/LBP3150 (Canon LBP3100/LBP3108/LBP3150)を選択します。

私はプリンター名は単に「LBP3100」と変更しました。

インストールしてあるPPDファイルを選択するため、MakeではCanon Incを選択します。

PPDは「Canon Inc LBP3010/LBP3018/LBP3050 r2c, 0.1.4 (en, en)」を選択します。

無事、LBP3100をプリンターとして追加することができました。

印刷してみる

例えばFirefoxだと、下図のように印刷することができます。画質も悪くなさそうです。

Windows 11 Pro 24H2からSambaのguest ok = yesな共有フォルダーへアクセスする

Microsoft Windows 11 Proを動かしているマシンで、sambaでguest ok = yesにしている共有フォルダーにアクセスしていた。 Windows 11を24H2にアップデートしたところ、その共有フォルダーを開こうとすると、ログインを求められ、何を入力しても開くことができなくなってしまった。 regedit.exeで、以下を開き、

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters

AllowInsecureGuestAuthというというDWARD値を作り1を設定することで、これまで通りにアクセスできるようになった。

「濫用等のおそれのある医薬品」の問題になる成分について調べてみた

厚生労働省の「濫用等のおそれのある医薬品について」の資料にあるような内容が、ドラッグストアにいくとそれとなく書かれているので気になっていた。 有機化学は専門ではなかったので、資料を見ただけでどういう問題が背景にあって利用もさせたいし規制したいという状況になっているのか全く分からなかった。 そこで、どういうものか調べてみたので、書いておきたい。

「濫用等のおそれのある医薬品」というのは、令和5年厚生労働省告示第5号に定められている6つの物質を言うようだ。

  1. エフェドリン
  2. コデイン
  3. ジヒドロコデイン
  4. ブロモバレリル尿素
  5. プソイドエフェドリン
  6. メチルエフェドリン

これを似たものでまとめると、3種類に分けられるようだ。

  1. エフェドリン、プソイドエフェドリン、メチルエフェドリン
  2. コデイン、ジヒドロコデイン
  3. ブロモバレリル尿素

エフェドリン、プソイドエフェドリン、メチルエフェドリン

これらはそれ自身も覚醒剤としての作用があるようだ。更に、より強力な覚醒剤であるメタンフェタミンを簡単に製造できる原料となるようだ。

コデイン、ジヒドロコデイン

これらはそれ自身で麻薬であるようだ。だが、比較的依存性は少ないらしい。

ブロモバレリル尿素

これは催眠鎮静剤という区分で書かれている資料があった。脳の興奮を抑え、痛みを感じにくくするらしい。 依存性が高いらしい。

WindowsからNetBSDへ、scpでファイルを転送する

WindowsからNetBSDへログインする際に、PuTTYを利用しているが、PuTTYのpscp.exeでWindowsからja_JP.UTF-8なNetBSDの環境へファイルを転送すると、 UTF-8なファイル名にはならず文字化けしてしまう。 Git for Windowsに付属のscpでファイル転送すると、文字化けせずに済んだ。

WindowsとNetBSD間で、USBスティックを使って、UTF-8なファイル名のファイルをやりとりする

USBスティックをFAT32でフォーマットしてあると、NetBSDをja_JP.UTF-8ロケールで利用していて、マルチバイト文字をファイル名にすると、Windowsで見る際には文字化けしてしまう。 UDFだと、WindowsでもNetBSDでも書き込みができて、UTF-8なファイル名でも使うことができた。

ssh-pageant.exeをGit Bash terminalで使う

通常、WindowsからNetBSDにネットワーク経由でログインする場合には、PuTTYを利用している。 ログインに利用する秘密鍵は、pageant.exeで管理している。 Git for WindowsのGit Bashターミナルでも、このpageant.exeで管理している秘密鍵を利用したいと思っていた。 調べてみると、Git for Windowsには、ssh-pageant.exeというpageant.exeをバックエンドにしたssh-agent的なものが用意されていた。 以下のように~/.bash_login~/.bash_logoutに設定しておけば、Git Bashターミナルを開いたときに 自動的に起動し、Git Bashターミナルを閉じた時に自動的に終了させることができる。

cat ~/.bash_login
eval `ssh-pageant.exe -s`
cat ~/.bash_logout
eval `ssh-pageant.exe -s -k`

かつてのAmazon English的なことが、YouTubeのCC機能でできるようになっていた

以前、Amazon EnglishというAndroid appを英語のリスニング能力を身に付けたくて使っていたのだが、ベータ版を脱することなくサービスは終了してしまった。 最近、YouTubeのclosed caption (CC)機能は、少なくとも英語では全く問題がなくなっているように見える。 なので、YouTubeでCCを有効にすれば、ほぼ同じようなことができる。

povo 2.0の最低利用料

iPhoneの内1台でpovo 2.0をeSIMで使用しているのだが、どういう条件であれば継続して利用できるか良く分からなかった。 だが、ちゃんと公式のサポートページを見れば明確に書いてあった。

トッピングの購入を一定期間実施しなかった場合、どうなりますか?によると、 以下の2つのいずれかにも該当しなければ、180日間を越えて継続利用できる。

  1. 180日間トッピングの購入がない。
  2. 180日間での従量通話料とSMS送信料の合計が600円以上。

まあ、180日間で600円以上は通話しているとは思うのだが、【半額セール】データ追加1GB(7日間) 税込195円/回 を念のため購入しておいた。 これが現時点では一番安価なトッピングであるようだ。 全くデータ通信は利用していないのだが。

"LGPL and Java"を読んだ

JavaというかJVMを使わないといけないような気がしていて、Javaの場合にLGPLがどう働くのかが気になっていた。 LGPL and Javaを読んでみた。 今まで気にしたことはなかったが、www.gnu.orgの文書は、基本的にはCreative Commons Attribution-NoDerivatives 4.0 International (CC BY-ND)でライセンスされているようだ。 と言うことで、読むためにほぼ全訳したメモはあるのだが、それを公開することはできなさそうだ。

ただ、私の知りたいことをまとめると、以下の2点になりそうで、それを書いておくのは問題ないだろう。

  • LGPLは、オブジェクト指向言語の継承を、Cの関数呼び出しと同様に扱う。
  • LGPLでライセンスされたJavaライブラリーをJARファイルとして扱う時は、ダイナミックリンクと同様に考えて良い。

個人番号カード(マイナンバーカード)を健康保険証として利用する場合の暗証番号は、利用者証明用電子証明書用の暗証番号だった

そろそろ健康保険証としてマイナンバーカードを使い始めてみようとしたのだが、ディジタル庁の説明を見ても 「4桁の暗証番号入力」としか書かれていないので、署名用電子証明書用、利用者証明用電子証明書用、券面事項入力補助用、住民基本台帳用と4種類ある暗証番号やパスワードのいずれを入力 するのかが全く書かれていないようだ。まあ、「4桁の」ということで、署名用電子証明書用のパスワードではないのは分かる。おそらく利用者証明用電子証明書用だろうとは漠然と思っていた。 実際に使ってみると、確かに利用者証明用電子証明書用の暗証番号を入力すれば利用できた。

厚生労働省の「よくある質問~マイナ保険証について~ 令和6年7月版」には直接的ではないが、ちゃんと書かれていた。

もし、暗証番号を忘れたり、ロックされている場合は、住民票のある市区町村窓口等に行って利用者証明用電子証明書パスワード(4桁の暗証番号)の再設定が必要になります。

3つ設定値があれば3つ別々に設定するに決まっているので、ちゃんとどの暗証番号か明示して説明して欲しい。 端末の画面でも単に「暗証番号」としか表示されていなかった。

Data General softwareのhobbyist license

Data generalの製造していたNovaやEclipseEclipse MVAViiONで動くソフトウェアが、"License Agreement for Hobbyist and Non-Commercial Use of DG Software"というライセンスで公開されている。 このライセンスでカバーされている訳ではないようだが、NovaやEclipseのソフトウェアハードウェアAViiONなどのドキュメンテーションも公開されている。

この"License Agreement for Hobbyist and Non-Commercial Use of DG Software"を読むと、このソフトウェアを、個人的なオープンソースなエミュレーターを作成するのに使うようなことも許されるようだ。

Amazon Kindle Fireタブレットで、放送大学の学生向けのインターネット配信を視聴する

放送大学では学生向けには、テレビで放送されている講義のビデオと、ラジオで放送されている講義のオーディオがウェブ上で配信されている。 これはどうやら、Widevine CDMを使っているようだ。 そして、ウェブブラウザーのuser agent stringを見て視聴できるかチェックしている。

私は手元にAmazon Fire Tabletを持っているので、これで視聴したいのだが、標準で搭載されているAmazon Silkウェブブラウザーでは視聴することができない。 また、https://ftp.mozilla.org/pub/fenix/releases/からFirefox for Androidの.apkファイルをダウンロードしてインストールすることもできるが、このFirefox for Androidもサポートされておらず、視聴することができない。

しかし、最近のFirefox for Androidではextensionを使うことができる。extensionには、user agentの切り替えをするものも存在している。 User-Agent Switcher by Erin SchlarbはFirefox for Androidで利用でき、 これで「Android Phone / Chrome 126」にすると、無事に視聴することができた。

Windows 10 Proで、ChromiumベースなMicrosoft Edgeを削除する

ドメインに参加している場合には、ChromiumベースなMicrosoft Edgeのバージョンアップを止めることはできるのだが、そうでないと止めることはできないようである。 と言うことで、クリーンインストールしていると、ドメイン参加前に勝手に最新版(今日であれば126)に更新されてしまうことがある。 Microsoft Edgeを削除する簡単な方法がないし、古いバージョンに戻せる簡単な方法もなく困っていた。

https://github.com/ShadowWhisperer/Remove-MS-EdgeにあるRemove-Edge_GUI.exeを使ったところ、確実に削除することができた。 ドメインに参加した上で、Remove-Edge_GUI.exeで削除し、求めるバージョンのインストーラーでインストールすれば良い。

NetBSD/amd64でllama.cppを使ってみる

はじめに

生成AIが私の知りたいことに答えてくれたことはないのだが、手元の端末のみで動くのであれば、遊ぶのには良いかもしれない。 pkgsrcには含まれていないが、pkgsrc-wipには、llama.cppが含まれている。 llama.cppのうち、C++で書かれた部分は正常にビルドでき、動くようである。 モデルのフォーマットを変換するためのPythonスクリプトは、 いろいろと現在のpkgsrcに含まれていないパッケージが必要であり動かない。 ただ、現在のllama.cppで扱うことのできるGGUF形式のモデルファイルをそのままダウンロードすることができるので、 使ってみるには、Pythonスクリプトは不要である。

どのモデルが動かせるか?

ChatGPTのようなチャットのできるモデルを使ってみたいと考えている。 動かそうとしているPCは、CPUとしてAMD Ryzen 7 5800Uを搭載した RAM 16GBのHP Envy 13である。

用意されているLLaMA 2のモデルでは、70B Q8_0のモデル(llama-2-70b-chat.Q8_0.gguf)が最大であるようだった。 これは、 https://huggingface.co/TheBloke/Llama-2-70B-Chat-GGUF によると、76GB程度のRAMが必要ということなので、到底利用することはできない。

13B Q8_0のモデル(llama-2-13b-chat.Q8_0.gguf)は、 https://huggingface.co/TheBloke/Llama-2-13B-chat-GGUF によると、16GB程度のRAMが必要とのことで、 試してみたが、スラッシングを起こして、動作が非常に緩慢であり実用できなかった。

と言うことで、 https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF にあるRAMを 7GB弱利用する7B Q4_K_Mのモデル(llama-2-7b-chat.Q4_K_M.gguf)を試してみると 実用的な速度で動作させることができた。 このモデルは「medium, balanced quality - recommended」とされている。

モデルを動かす準備をする

llama.cppをビルドするには、以下のようにすれば良い。

# cd /usr/pkgsrc/wip/llama.cpp
# make install

これで、/usr/pkg/bin/llama-cliというコマンドがインストールされる。

また、自分のホームディレクトリーに、llama.cpp用の作業用ディレクトリーを用意し、 その中に必要なものを置くようにする。

$ mkdir -p ~/llama.cpp/models
$ cd ~/llama.cpp/models
$ ftp https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/resolve/main/llama-2-7b-chat.Q4_K_M.gguf

対話形式で利用したいが、最初に前提条件を毎回手入力するのは面倒である。 以下のような決まり文句を~/llama.cpp/prompt.txtとして用意する。

$ cat ~/llama.cpp/prompt.txt
You (Alice) are a helpful assistant. Please answer a human (User)'s questions.
User: Hello.
Alice:

この決まり文句を最初は以下のように書いていたのだが、なぜか全く反応が返って来なかった。

You (Alice) are a helpful assistant. Please answer a human (User)'s questions.
User: Hello. I am glad to see you.
Alice:

モデルを動かす

llama.cppの配布物に含まれているexamples/chat.shを参考に、 以下のように起動させた。

$ cd ~/llama.cpp
$ llama-cli -m ./models/llama-2-7b-chat.Q4_K_M.gguf -c 512 -b 1024 -n 256 --repeat_penalty 1.0 -t 8 --color -i -r "User:" --in-prefix " " -f prompt.txt
Log start
main: build = 0 (unknown)
main: built with gcc (nb2 20240221) 12.3.0 for x86_64--netbsd
main: seed  = 1718791141
llama_model_loader: loaded meta data with 19 key-value pairs and 291 tensors from ./models/llama-2-7b-chat.Q4_K_M.gguf (version GGUF V2)
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv   0:                       general.architecture str              = llama
llama_model_loader: - kv   1:                               general.name str              = LLaMA v2
llama_model_loader: - kv   2:                       llama.context_length u32              = 4096
llama_model_loader: - kv   3:                     llama.embedding_length u32              = 4096
llama_model_loader: - kv   4:                          llama.block_count u32              = 32
llama_model_loader: - kv   5:                  llama.feed_forward_length u32              = 11008
llama_model_loader: - kv   6:                 llama.rope.dimension_count u32              = 128
llama_model_loader: - kv   7:                 llama.attention.head_count u32              = 32
llama_model_loader: - kv   8:              llama.attention.head_count_kv u32              = 32
llama_model_loader: - kv   9:     llama.attention.layer_norm_rms_epsilon f32              = 0.000001
llama_model_loader: - kv  10:                          general.file_type u32              = 15
llama_model_loader: - kv  11:                       tokenizer.ggml.model str              = llama
llama_model_loader: - kv  12:                      tokenizer.ggml.tokens arr[str,32000]   = ["<unk>", "<s>", "</s>", "<0x00>", "<...
llama_model_loader: - kv  13:                      tokenizer.ggml.scores arr[f32,32000]   = [0.000000, 0.000000, 0.000000, 0.0000...
llama_model_loader: - kv  14:                  tokenizer.ggml.token_type arr[i32,32000]   = [2, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, ...
llama_model_loader: - kv  15:                tokenizer.ggml.bos_token_id u32              = 1
llama_model_loader: - kv  16:                tokenizer.ggml.eos_token_id u32              = 2
llama_model_loader: - kv  17:            tokenizer.ggml.unknown_token_id u32              = 0
llama_model_loader: - kv  18:               general.quantization_version u32              = 2
llama_model_loader: - type  f32:   65 tensors
llama_model_loader: - type q4_K:  193 tensors
llama_model_loader: - type q6_K:   33 tensors
llm_load_vocab: special tokens cache size = 259
llm_load_vocab: token to piece cache size = 0.1684 MB
llm_load_print_meta: format           = GGUF V2
llm_load_print_meta: arch             = llama
llm_load_print_meta: vocab type       = SPM
llm_load_print_meta: n_vocab          = 32000
llm_load_print_meta: n_merges         = 0
llm_load_print_meta: n_ctx_train      = 4096
llm_load_print_meta: n_embd           = 4096
llm_load_print_meta: n_head           = 32
llm_load_print_meta: n_head_kv        = 32
llm_load_print_meta: n_layer          = 32
llm_load_print_meta: n_rot            = 128
llm_load_print_meta: n_embd_head_k    = 128
llm_load_print_meta: n_embd_head_v    = 128
llm_load_print_meta: n_gqa            = 1
llm_load_print_meta: n_embd_k_gqa     = 4096
llm_load_print_meta: n_embd_v_gqa     = 4096
llm_load_print_meta: f_norm_eps       = 0.0e+00
llm_load_print_meta: f_norm_rms_eps   = 1.0e-06
llm_load_print_meta: f_clamp_kqv      = 0.0e+00
llm_load_print_meta: f_max_alibi_bias = 0.0e+00
llm_load_print_meta: f_logit_scale    = 0.0e+00
llm_load_print_meta: n_ff             = 11008
llm_load_print_meta: n_expert         = 0
llm_load_print_meta: n_expert_used    = 0
llm_load_print_meta: causal attn      = 1
llm_load_print_meta: pooling type     = 0
llm_load_print_meta: rope type        = 0
llm_load_print_meta: rope scaling     = linear
llm_load_print_meta: freq_base_train  = 10000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_ctx_orig_yarn  = 4096
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: ssm_d_conv       = 0
llm_load_print_meta: ssm_d_inner      = 0
llm_load_print_meta: ssm_d_state      = 0
llm_load_print_meta: ssm_dt_rank      = 0
llm_load_print_meta: model type       = 7B
llm_load_print_meta: model ftype      = Q4_K - Medium
llm_load_print_meta: model params     = 6.74 B
llm_load_print_meta: model size       = 3.80 GiB (4.84 BPW)
llm_load_print_meta: general.name     = LLaMA v2
llm_load_print_meta: BOS token        = 1 '<s>'
llm_load_print_meta: EOS token        = 2 '</s>'
llm_load_print_meta: UNK token        = 0 '<unk>'
llm_load_print_meta: LF token         = 13 '<0x0A>'
llm_load_tensors: ggml ctx size =    0.15 MiB
llm_load_tensors:        CPU buffer size =  3891.24 MiB
..................................................................................................
llama_new_context_with_model: n_ctx      = 512
llama_new_context_with_model: n_batch    = 512
llama_new_context_with_model: n_ubatch   = 512
llama_new_context_with_model: flash_attn = 0
llama_new_context_with_model: freq_base  = 10000.0
llama_new_context_with_model: freq_scale = 1
llama_kv_cache_init:        CPU KV buffer size =   256.00 MiB
llama_new_context_with_model: KV self size  =  256.00 MiB, K (f16):  128.00 MiB, V (f16):  128.00 MiB
llama_new_context_with_model:        CPU  output buffer size =     0.12 MiB
llama_new_context_with_model:        CPU compute buffer size =    70.50 MiB
llama_new_context_with_model: graph nodes  = 1030
llama_new_context_with_model: graph splits = 514

system_info: n_threads = 8 / 16 | AVX = 1 | AVX_VNNI = 0 | AVX2 = 1 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | AVX512_BF16 = 0 | FMA = 1 | NEON = 0 | SVE = 0 | ARM_FMA = 0 | F16C = 1 | FP16_VA = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 1 | SSSE3 = 1 | VSX = 0 | MATMUL_INT8 = 0 | LLAMAFILE = 1 |
main: interactive mode on.
Reverse prompt: 'User:'
Input prefix: ' '
sampling:
        repeat_last_n = 64, repeat_penalty = 1.000, frequency_penalty = 0.000, presence_penalty = 0.000
        top_k = 40, tfs_z = 1.000, top_p = 0.950, min_p = 0.050, typical_p = 1.000, temp = 0.800
        mirostat = 0, mirostat_lr = 0.100, mirostat_ent = 5.000
sampling order:
CFG -> Penalties -> top_k -> tfs_z -> typical_p -> top_p -> min_p -> temperature
generate: n_ctx = 512, n_batch = 1024, n_predict = 256, n_keep = 1


== Running in interactive mode. ==
 - Press Ctrl+C to interject at any time.
 - Press Return to return control to the AI.
 - To return control without starting a new line, end your input with '/'.
 - If you want to submit another line, end your input with '\'.

 You (Alice) are a helpful assistant. Please answer a human (User)'s questions.
User: Hello.
Alice: Hello! How can I assist you today? Is there anything you need help with?

ここで「 Hello! How can I assist you today? Is there anything you need help with?」の部分が、モデルの生成した部分である。 また、本来はここで"User: "と表示されるのを期待しているのだが、なかなか表示されない。 表示されることもある。 良く理由は分かっていない。 ただ、"User: "が表示されなくても、利用はできる。

指示をしてみると、それっぽい返答をしてくれる。

 Tell me the largest city in Asia.
Alice: The largest city in Asia is Tokyo, Japan. It has a population of over
38 million people and is known for its vibrant culture, cutting-edge technology,
and historic landmarks such as the Tokyo Tower and the Meiji Shrine. Would you
like to know anything else?

「Tell me the largest city in Asia.」の部分が私がキーボードから入力した部分である。

かりんとうの製造特許を探す

ALIC (独立行政法人 農畜産業振興機構)のウェブサイトには、いろいろおもしろい記事が掲載されているのだが、 そもそも、私はそれが検索で引っ掛かるような検索キーワードで検索することもないので、 自分で能動的に読みに行かないと、読む機会がなくなってしまう。

砂糖のついての記事を読んでいると、かりんとうについての記事が2つあった。 かりんとうと砂糖日本の味「かりんとう」である。 いずれにも、過去にかりんとうの製造方法についての特許があったことが記載されている。

かりんとうと砂糖には、以下のように記載されている。

昭和41年  農林省指令41A第2581号を以って公認組合として認可され、全国油菓工業組合として新発足する。
 某企業が、かりん糖の特許を出願したのを機に組合にその「かりん糖の製造特許権」が譲渡され、この権利を公平適切に運用することで各企業が組合に加入した。

日本の味「かりんとう」には、以下のように記載されている。

 当組合の組合員しか知らない、かりんとうのビックリする話があります。

 江戸の昔からある「かりんとう」に「製造特許」が存在していたということです。いきさつはいろいろあったと思いますが、戦後景気が回復し、いろいろなお菓子が作られるようになりました。当時下請けをしていたあるかりんとう業者が、親会社からの厳しい要求の対応として「穀物を練り発酵させて棒状に切り、油で揚げた物に砂糖をかけた菓子」の製造特許を申請したところ、昭和41年にその特許が認められたのです。「これは大変」と各メーカーが騒いだのですが、結局その特許権を組合に譲渡することで落ち着き、昭和55年に特許権が消滅するまで当組合が保持し、かりんとうメーカーは特許使用料を当組合に支払っていました。

これらを解釈すると、昭和41年(1966年)に特許が成立し、昭和55年(1980年)まで特許は有効であったということであろう。 日本の特許は出願から20年間保護されるのだったと思うので、出願は昭和35年(1960年)にされているはずである。 あるいは、20年間を満了せずに、年金を払わずに消滅したのかもしれない。

特許情報プラットフォームで全文検索してみたが、どうやら1970年くらいに出願された以降のものしか 全文検索はできないように見える。 また、出願日1960年に絞り込み、FIをA23に絞り込んで見て行っても、それらしい特許を見付けることはできなかった。

そこで、最近のかりんとうの製造方法についての特許から引用されているのではないかと考え探すと、おそらくこれではないかというものを見付けることができた。

それは、特許3873479「かりんとうの製造方法」において、 引用調査データとして引用されている「特公昭40-002849 (かりんとうの製造方法)」である。これは、特許0470216なはずなのだが、この特許の内容は特許情報プラットフォームには登録されていないようである。

しかし、この特許は昭和38年2月11日に出願されており、昭和41年に特許が成立していてもおかしくはないが、昭和55年に期間満了となったとは思えない。 経過情報も参照できないので、いつ特許0470216が成立したのか、失効したかも分からない。 出願人は荒井公平という人だが、どの企業がこの特許の背景にいるのかも分からなかった。この名前の方は、和菓子では有名な方のようだが、同一人物かも分からない。

ハトリ・マーシャル株式会社を探る (その後)

前回は、ハトリ・マーシャルが短資会社になったところまでを書いた。 今回は、その後の話題に触れたい。

短資会社となった後に、ハトリ・マーシャルが大きく活躍したような記事はあまり見付けることができなかった。 そもそも短資会社や外為ブローカーについての情報が少ないだけで、本当は違うのかもしれないが…。

以下では。トピックスとして何点か挙げておきたい。

ユーロ円・ドル円先物からの撤退

Japan Times 1992年10月15日 9面には、「Firms to pull out of futures market」という記事でユーロ円・ドル円先物からの撤退をするという記事が出ている。

ソフトウエア開発

求人情報にも、ソフトウエア開発の要員が挙げられていた。英文の求人広告にもData Processingのできる人を求めるという記載があった。 財界人 8(8)(312) 1995年7月刊 57ページには、コスマックというソフトウエア開発会社と共同で、「アプレシア」という金利スワップ・オプション取引支援ソフトウエアを PC用に開発したことが報じられている。 以前のものは、大型ワークステーションを使っていたと書かれており、求人広告にあったDEC VAXを指しているのかもしれない。

レポ取引への参入と停滞、再開

日経公社債情報1997年6月9日 5ページには、「債券レポ仲介業者 新規参入、手数料引き下げで攻撃」とう言う記事の中で、

これまでレポ仲介へ参入はしたものの開店休業状態だった外為ブローカーのハトリ・マーシャルも取引を本格化する構えだ。

と記載されている。

減資

1999年(平成11年)3月11日の官報には、資本金を3億円から1億6千5百万円に減資する公告が出ている。

さらにこの先に日短エクスコと合併し、ハトリ・マーシャルは消えてしまう。

ハトリ・マーシャル株式会社を探る(短資会社へ)

前回は、短資会社の変遷を書くだけになってしまったが、 今回は元々の目的であったハトリ・マーシャル株式会社について、触れたい。

羽鳥商会からハトリ・マーシャルへ

日本語版Wikipediaの短資会社の項には、以下のように書かれている、

1993年8月、外為ブローカーのハトリ・マーシャル(羽鳥商会と英MWマーシャル社の合弁会社。東京銀行が大株主)が、「7社目の短資会社」として、無担保コール(先日付取引)の仲介業務に参入し、短資協会にも準会員として加入した。約30年ぶりの新規参入だったが、同社は1999年3月、日短エクスコ(現在の日短キャピタルグループ)に買収された。

ハトリ・マーシャルと日短エクスコの合併の公告は、平成11年8月26日の官報に掲載されている。その中で、合併の日は、平成11年9月27日とされている。合併公告以前に合併しているとは考えにくいので、少なくとも日本語版Wikipediaの短資会社の項の日短エクスコとの合併の時期は間違いであると考えて良さそうである。

今度は、ハトリ・マーシャルがどうできたかを調べたい。 「相互銀行」1986年 36(5) 9ページには、福原 基夫 氏(トウキョウフォレックス株式会社 監査役)による「東京外為市場の現状と展望」という記事に、 ブローカーの国際化の略歴として、ハトリ・マーシャルの略歴が掲載されている。

②ハトリ・マーシャル(株)
昭和30年4月、羽鳥・中野商会として営業開始(32年8月、羽鳥商会と改称)。60年2月、M・W・マーシャル(本社ロンドン、56年6月南商店[30年4月営業開始]を買収して東京支店開設。60年2月廃業)と資本・業務提携の上、称号変更。

これを西暦に換算して並べると、以下のようになる。

1955年(昭和30年)4月
羽鳥・中野商会として営業開始。
1957年(昭和32年)8月
羽鳥商会と改称。
1985年(昭和60年)2月
M. W. Marshall社と資本・業務提携して、ハトリ・マーシャルと改称。

これの掲載された相互銀行誌は1986年のものなので、1993年の無担保コール翌日物の仲介業務への算入と日本語版Wikipediaに書かれている内容はまだ起きていない。 つまり外為ブローカーであった段階と考えられる。

ここでは、ハトリ・マーシャルは羽鳥商会が改称されたものとされていて、日本語版Wikipediaにあるような羽鳥商会とM. W. マーシャルの合弁会社として設立されたものではないように書かれている。 しかし、1985年(昭和60年)2月にハトリ・マーシャルができたというのは間違っていないかもしれない。昭和60年4月8日の官報で、羽鳥商会とM. W. マーシャル・アンド・カンパニーの代わりに、 ハトリ・マーシャルが貸金業法上の短資会社に指定されている。

ハトリ・マーシャルが「称号変更」したというのは、「外為相場とディーリング (総合金融取引シリーズ2) 山本 圭民 著 (東京銀行) 経済法令研究会 刊の61ページ目にも記載されている。 ただ、ここにも、東京銀行が出資しているという記述はないようである。

ハトリ・マーシャルが羽鳥商会が社名を変更した会社でなかった場合には、どうにも調べようがないような気がする。 羽鳥商会が解散したという公告は、官報には掲載されていないようである。また、現時点の国税庁法人番号掲載サイトにも 羽鳥商会という企業は掲載されていない。 もちろん、いずれも社名を羽鳥商会から変更しているとすれば、追うことはできない情報ではある。

ハトリ・マーシャル

私がアクセスできるデータベースで、最初にハトリ・マーシャルが現れたのは、Japan Times 1987年6月23日 14面の求人広告記事であった。 「HATORI-MARSHALL COMPNANY LIMITED」としての英文の求人広告である。 また、1988年8月1日の14面にも、「HAROTI-MARSHALL CO., LTD.」名義の英文の求人広告が掲載されている。

日本語の求人広告も、この後に2つ掲載されている。 1つは1989年7月10日の13面に掲載されてり、もう1つは、1991年7月22日の13面に掲載されている。 ここには会社概要として、共通して以下のように記載されている。

会社概要
日英合弁の国際金融業(株主:東京銀行・マーシャル社ロンドン)。東京と海外市場を結んで、内外一流銀行の外国為替(ドル・マルクなど)、外貨資金(ユーロダラーなど)取引の仲介(ブローキング)。

これにより、大株主かどうかははっきりしないが、東京銀行が株主であったことが分かる。 また、羽鳥商会がもし社名を変更してハトリ・マーシャルになっていなかったとしても、特筆すべき株主として存在はしていなかったのも分かる。 社名にハトリとありながら、特筆すべき株主でないということはあり得なさそうである。 これも、羽鳥商会がハトリ・マーシャルになったということの傍証になっているように思われる。

1989年7月10日の求人広告を掲載しておく。

短資会社へ

短資会社としてのハトリ・マーシャルは、官報にあるように羽鳥商会として昭和58年の時点で既に指定を受けていた。 つまり、貸金業法上の短資会社には、その指定制度の最初から羽鳥商会は存在していたということである。 証券取引法施行令での短資会社の指定は、昭和57年の時点でも短資会社6社のみである。

官報を検索してみても、羽鳥商会(株式会社羽鳥商会 東京都千代田区大手町二丁目六番二号)が登場するのは、1976年(昭和51年)2月12日、9月24日に小切手に関する公示催告が最初である。 1982年(昭和57年)7月3日には、定款変更をして株式の譲渡を制限できるようにした旨の公告が出ている。 しかし、いずれも、羽鳥商会の当時の事業を知る手掛りにはならなさそうである。

短資会社の主要な業務であるコール市場への参入は、Japan Times 1989年(平成元年)8月14日の9面に記事が「Hatori-Marshall ready to enter call-loadn field」として掲載されている。 短資協会が1962年に設立されて以来の新しい参入者であり、無担保コールローンから参入すると書かれている。

短資協会のウェブサイトの沿革には、ハトリ・マーシャルは1993年(平成5年)8月16日から1999年(平成11年)3月31日の間に 準会員であったと記載されているが、コール市場へ参入すると同時に短資協会へ加入した訳ではなかったというだけのことであろう。

長くなってしまったので、ハトリ・マーシャルになってからのその後は次回書きたい。

ハトリ・マーシャル株式会社を探る (短資会社の変遷)

短資会社の歴史に興味を持っているのだが、短資会社は上場していないし、業界団体である短資協会のウェブサイトは、robots.txtに

  User-agent: *
  Disallow:

と書かれているせいで、Google検索では短資協会は直接は現れない。Bingはそんなものは無視して検索対象にしているようだ。

短資会社の歴史については、日本語版Wikipediaの短資会社外為ブローカーの記事がやたらと詳しい。 それなりに参考文献も付けられているようであるから、それなりに信頼できそうな記事だが、肝心な短資会社や外為ブローカーの会社のプロファイルは良く分からない。 その中でも、ハトリ・マーシャル株式会社について、少し調べてみた。

短資会社は、現在では、貸金業法施行令(昭和五十八年政令第百八十一号)第一条の二(貸金業の範囲からの除外)第三号「主としてコール資金の貸付け又はその貸借の媒介を業として行う者で金融庁長官の指定するもの」および 金融商品取引法施行令(昭和四十年政令第三百二十一号)第一条の九(金融機関の範囲)第五号「主としてコール資金の貸付け又はその貸借の媒介を業として行う者のうち金融庁長官の指定するもの」で指定されている会社を指すようである。 金融商品取引法施行令で指定する会社は、金融庁告示第五十二号で公開されている。 つまり、上田八木短資株式会社、東京短資株式会社、セントラル短資株式会社の3社である。 貸金業法施行令の方は、官報から拾ってみる。

昭和58年10月31日の時点では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本割引短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • 株式会社羽鳥商会
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • エム・ダブリュー・マーシャル アンド カンパニー リミテッド
  • 日短エーピー株式会社

昭和60年4月8日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本割引短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社

昭和60年9月30日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本割引短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション

昭和60年10月31日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本割引短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社

昭和63年6月20日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社

昭和63年10月28日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社
  • 八木ユーロ株式会社

平成5年5月24日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エーピー株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社
  • 八木ユーロ株式会社
  • 山根プレボン株式会社

平成8年5月2日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • ハトリ・マーシャル株式会社
  • 株式会社コバヤシ
  • トウキョウ フォレックス株式会社
  • 日短エクスコ株式会社
  • 株式会社メイタン・トラディション
  • 上田ハーロー株式会社
  • 八木ユーロ株式会社
  • 山根プレボン株式会社

平成12年3月31日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • 山根短資株式会社
  • 日本短資株式会社
  • 八木短資株式会社
  • 名古屋短資株式会社
  • 株式会社メイタン・トラディション
  • 山根プレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短八木ユーロ株式会社

平成13年4月2日の改正では、

  • 上田短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 八木短資株式会社
  • 株式会社メイタン・トラディション
  • 山根プレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短八木ユーロ株式会社

平成13年7月2日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社メイタン・トラディション
  • 山根プレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短八木ユーロ株式会社

平成14年1月15日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社メイタン・トラディション
  • 山根プレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短マネーマーケッツ株式会社

平成21年2月4日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社メイタン・トラディション
  • 山根タレットプレボン株式会社
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短マネーマーケッツ株式会社

平成26年7月8日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社メイタン・トラディション
  • トウキョウフォレックス上田ハーロー株式会社
  • 日短マネーマーケッツ株式会社

令和元年10月1日の改正では、

  • 上田八木短資株式会社
  • 東京短資株式会社
  • セントラル短資株式会社
  • 株式会社トラディション日本
  • 上田東短フォレックス株式会社
  • 日短マネーマーケッツ株式会社

のように変遷しているようだ。 肝心のハトリ・マーシャル株式会社については、後日続きを書きたい。

第二地銀協ワイドサービス

ウェブ上には何でも情報があるのかなと思うこともあるのだが、私の知りたい情報はないことが多い。 Googleで結果が出ず、Bingは全く違うものを提示し、ChatGPTもGoogle Geminiも全く合っていることを言わないことが多い。 WWWが普及する前の情報というのは、こうも失なわれてしまうものなのだろう。

子供のころ、相互銀行であった第二地方銀行協会加盟行のATM(CD; キャッシュディスペンサーだったかもしれない)に行くと、「第二地銀協ワイドサービス」という表示がされていた。 おそらく、1995年から1998年くらいのことである。 だが今Googleで第二地銀協ワイドサービスと検索すると、 たった1件しか結果がない。しかも、2chのログであるようである。 第二地方銀行協会のウェブサイトを見ると、第二地銀協キャッシュサービス(SCS)とは書かれているが、 第二地銀協ワイドサービスとは書かれていない。

今は、第二地方銀行協会の機関誌である「リージョナルバンキング」誌は廃刊になってしまっているようである。 だが、リージョナルバンキング誌は、創刊から2000年までは国立国会図書館の個人向けデジタル化資料送信サービスで閲覧することができる。 閲覧できるリージョナルバンキング誌を見ても、SCSは「第二地銀協CD全国ネットサービス」(リージョナルバンキング 1989年 39(5) 72ページ)あるいは「第二地銀協キャッシュサービス」(リージョナルバンキング 1999年 49(3) 76ページ) という記述はあっても、「第二地銀協ワイドサービス」と言う単語を見付けることはできなかった。

別の方向で第二地銀協ワイドサービスについての広告を探してみると、「大蔵省職員録 平成7年版」の113ページ目に広告が掲載されていた。これも、国立国会図書館の個人向けデジタル化資料送信サービスで閲覧することができる。 確かに存在していたのを確認できた。 こんなロゴだったかは全く覚えていないが…。

pkgsrc/mail/dkimproxyを使ってみたが、受信時の動作は、現在の用途には合わないようだった

とある過去に利用者のいたドメインを所有しているのだが、相当に雑な運用だったようで、いまだにSPAM以外の電子メールが来るし、 そのドメインの存在しないアカウントを装った電子メールが多く送信されているようだった。 しばらく、キャッチオール設定をして受信してみて気付いたのである。

と言うことで、少なくともSPF、DKIM、DMARCを設定して、SPFで-all、DMARCでpct=100;p=reject;にすれば、ちゃんと運用しているメールサーバーでは このドメインを装った電子メールは受信しないでくれるはずである。

最初、あまり利用されている実績がないようだったので、折角だから使おうと言うことで、pkgsrc/mail/dkimproxyを利用してみた。 私はpkgsrc/mail/postfixを利用しているので、今回問題を解消できなかった受信時の検証については、基本的には、 公式ドキュメントであるSetting up the inbound proxy with Postfix のように設定し、私のように1台のサーバーで複数のドメインの電子メールを扱っている場合には、 DKIM/Domainkeys signing via DKIMproxyにあるように sender_mapを利用すれば良い。設定は分かりやすい。

しかし、dkimproxyの方法である、電子メールの受信前にdkimproxyの稼働するlocalhost:10025へ送って、Postfixのlocalhost:10026に送り返してもらうという運用は、 pkgsrc/mail/opendmarcでは、localhostから来た電子メールであると認識されてしまうのを止めることはできないようだった。

SPFの検証はpkgsrc/mail/py-policyd-spfで、DKIMの署名と検証はpkgsrc/mail/opendkimで、DMARCの検証はpkgsrc/mail/opendmarcで、という運用に落ち付いた。

Amazon Kindle FireシリーズのタブレットでSynology DS Videoを使えるようにする

Synology製のNASを利用していて、これにはビデオストリーミングサービスの機能が存在している。 iOS/iPadOS、Android、PCのウェブブラウザーから利用できるので、便利に利用することができる。

Androidについて言うと、Google Play Storeで配布されているアプリは、ビデオストリーミング配信を 受信するために必要なコーデックが内蔵されているようである。 しかし、Amazon Kindle Fireシリーズ用には、Amazon AppstoreにはDS Videoアプリはないので、 Amazon Silkウェブブラウザーから利用するしかないのかと思っていた。 Amazon Silkウェブブラウザーからは、それなりに問題なく利用できる。 しかし。ネイティブアプリの方が使いやすいというのは間違いないように思う。

Synology社のウェブサイトを調べてみると、 台湾向けの中国語のページで、DS Videoのapkファイルが 配布されているのが分かった。 過去にリリースされたバージョンもほぼアーカイブされているので、Android 5ベースの古いKindle Fireでも問題なくインストールできた。

しかし、このSynology社のウェブサイトからダウンロードできるapkファイルには含まれていないようである。 何か、ビデオストリームを再生できるメディアプレーヤーが必要であった。

最初、Amazon AppstoreにはVLC Media Playerがあるので、これをインストールして利用してみたが、元のビデオファイルと再生時のアスペクト比が合わなかった。 無料で配布されているMX Playerというのを利用してみると、これはアスペクト比を保って表示させることができた。

国立公文書館所蔵の特定歴史公文書等の利用制限はないようだ

国立公文書館のよくある質問と答えによると、国立公文書館が所蔵する特定歴史公文書等を複写した資料については、 利用制限はないようだ。以下に引用しておく。

16.
Q: 国立公文書館所蔵の特定歴史公文書等の画像等を出版等に利用したいのですが、どのような手続きが必要ですか?

A:二次利用にあたり、申請等の必要はありません。 出版等に利用する画像等を、利用請求により写しの交付等を受ける、
閲覧室でご自分で撮影するなどして、既にお持ちの場合、当館に対する申請等の手続きは不要です。
また、デジタルアーカイブで提供している画像等(紙媒体やマイクロフィルムからデジタル化した資料画像、
映画フィルムの映像・音声データ、電子公文書など)についても、ダウンロードいただくなどして、自由にご利用いただけます。
ただし、出版等に利用する写真等の素材(フィルム、画像データ等)、デジタルアーカイブで提供している画像等を利用して行う
一切の行為に関する責、 その他問題については、利用者においてその責任を負うものとし、当館は何ら責任を負いません。
また、利用者と第三者との間に問題が生じた場合も、利用者がその責任を負うこととなります。

NetBSD上のFirefox 124.0.1で、ClearKey EMEの動作確認をする

pkgsrc/www/firefoxをbuildした後に確認している事項として、ClearKey EMEを利用できるか試している。 以下の2つで、映像と音声が再生できれば問題ないはずと思っている。

正常に映像と音声が再生できた後に、Firefoxのabout:config画面から、media.eme.video.blankmedia.eme.audio.blanktrueに設定して、映像は緑一色に、音はポーという音に変化していれば、EMEが有効になっていることも確認できる。

NetBSD上のFirefox 124.0.1でのtext-to-speech

以前、NetBSD上のFirefox 120でtext-to-speechを試した時には、 Festival serverを手作業で事前に起動させておかないといけなったように思うのだが、Firefox 124.0.1で試してみると、Festival serverを事前に起動させておく必要はなくなっていた。

Mail.ruの電子メールアカウントを取得してみた

Yandexで電子メールアカウントを取得するのには手間取った。 その過程でYandexについて調べてみると、いくつかの事業をMail.ruを運営するVKという企業に売却していたらしい。 折角なので、Mail.ruにもアカウントを作っておくことにした。

Mail.ruのウェブサイトを見る

Mail.ruを開いても、特に英語のページが用意されているという訳ではないようだった。 偶然、私はロシア語を学んでいたことがあったので、少なくともキリル文字を読むことくらいはできる。 基礎的な単語か、英語と発音が似ている単語であれば、なんとなく意味は分かる。 どこかに英語版のページがあったのかもしれないが…。

ドメインを選ぶ

Mail.ruに来たので、@mail.ruの電子メールアドレスが欲しいような気がしたが、全く良い文字列は空いていないようだった。 internet.ruというドメインを勧められたので、これで電子メールアドレスを作成した。 Mail.ruもアカウント作成時にSMSでコードを受け取る必要があったが、今回は問題なく日本の携帯電話番号で受信することができた。

アカウント作成後に制限が掛かっているということもなかったので、普通に利用開始できた。

Yandexの電子メールアカウントを取得してみた

今はロシアをベースとした企業に対しては、少なくとも西側諸国としては良い扱いをしていないのだと思うが、新しいことを試すというのであれば、今がチャンスかもしれない。 別にYandexの電子メールアカウントを作るのは、全く支障がないはずというように思っていたが、思ったよりも手間取ったので書いておく。

SMSが自分の日本の携帯電話番号に届かない

Yandexは、アカウント作成のために、携帯電話でSMSを受け取る必要がある、 日本の携帯電話番号でも受け付けてくれることになっているのだが、実際には全くSMSが届かなかった。 フォームに事情を説明する英文を入力して問い合わせたところ、すぐに、制限を解除したのでもう一度試して欲しいという返信があり、 再度試すと無事にSMSが届くようになった。

電子メールアカウントが一時的に無効化される

アカウントが作れて、Yandex.Mailのウェブサービスで電子メールを送信しようとしたのだが、 spam送信者の疑いがあるとのとこで、1通目から送信することができなかった。 受信も、アカウントが一時的に無効化されているというエラーをSMTPサーバーが返して来るとのことで、できない。 送信時のメッセージには24時間待つようにと書いてあるので、24時間待ったが全く変化はなかった。

これも再度フォームからサポートに英文で問い合わせると、サポートの人が不在ということで、チャットボットが返事をくれた。携帯電話番号を変更すると、電子メールの送信時にCAPTCHAが 表示されるようになるので、それをパスできれば送受信が可能になるとのことだった。 幸運にも2つの携帯電話番号を持っていたので、もう1つの携帯電話番号に変更したところ、電子メール送信時にCAPTCHAが表示され、それをパスしたところ 送受信ができるようになった。

携帯電話番号が2つなかったら、どうにもならないと言うとなのだろうか。 チャットボットに全ての問題は解決したと返事を書いたが、伝わらないようだった。 より簡潔で直接的な返信をすべきだった。

Amazon Kindle Fire HD 8第10世代で、Microsoft 365とOneNoteアプリでエラーになっていた

Amazon Kindle Fire HD 8第10世代で、Microsoft 365とMicrosoft OneNoteをインストールしているのだが、 Microsoft 365のIDだか署名だかが変更になったとのことで、Microsoft 365を再インストールする必要があった。 そこでMicrosoft 365をアンインストールすると、再インストールしようとするとエラーになってしまった。 Microsoft OneNoteをアンインストールするとMicrosoft 365はインストールできるようになったのだが、 今度はOneNoteがエラーでインストールできない。 また、Microsoft 365で言語パックがインストールできないという問題が再度発生していた。

そこで、Kindle Fire HD 8第10世代をファクトリーリセットして再度Microsoft 365をインストールした。 そうすると、言語パックがインストールできないという問題も発生しなかった。 そして、続いてOneNoteをインストールしてみると、問題なくインストールできた。 OneNoteの言語パックがインストールできないという問題も発生しなかった。

安いメカニカルキーボードを購入した

もとからあまり調子の良くなかった青軸のFILCO Majestouch Convertible 2が故障してしまい、代わりのメカニカルキーボードを探していたのだが、 どうせ試すのであれば安いものを試してみようということで、安いものを探して購入してみた。 良いと予め分かっているキーボード1台の値段で、数台以上を購入できるはずである。 私は英語US 104配列のキーボードを常用しているので、選択肢は広い。

最初に購入したのは、Amazon.co.jpで売っていたMerdia メカニカル式ゲーミングキーボード 全104キーボード US配列 USB有線キーボード LEDバックライト付き (青軸-ブラック)である。 これは、私が購入した時には、3,690円であった。 それなりに重量感があり安定して利用できるが、中国独自のものなのかキートップの文字が大変読みにくい。 ただし、簡単に派手なバックライトを消すことができるのは良かった。 一度消しておけば、接続し直しても設定は保存されている。 キータッチも青軸風のクリック感のあるタッチだった。 キー入力時の音も青軸風の派手な音がする。

次に購入したのは、TemuMechanical Gaming Keyboard, RGB Backlit 104 Keys Full-Size Keyboard With Multimedia Knob, Double Shot Keycaps, Full Anti-Ghosting, Blue Switch Wired For Computer Keyboard For Windows PC Mac Xbox Gamerである。 これは、私が購入した時には、2,459円であった。今見ると、2,671円になっていた。 製造者は、Taiahiro Brandという企業のようだ。 基本的にプラスチックだけでできているようで、重量感はない。 キートップの文字はMerdia製のキーボードのように中国風ではなく日本で一般的な感じで読み難い訳ではないのだが、 表示が薄くて読み難い。 派手なバックライトはほとんど全てオフにできるのだが、右上にある専用メディアキーだけは、ゆっくりと点滅するのを止めることができなかった。 それ以外は、一度消しておけば、接続し直しても設定は保存されている。 キータッチも青軸風のクリック感のあるタッチだった。 キー入力時の音も青軸風の派手な音がする。

Merdia製のキーボードは別の用件に使うことにしてしまったので、私としてはTaiahiro製のキーボードを使うことにした。 あまりにキートップが見えにくいので、壊れたFILCO Majestouch Converticle 2のキートップと交換することにした。 ほぼ全てのキートップは問題なく交換することができたのだが、スペースバーだけは、微妙に左右のAltキーと干渉して交換することができなかった。 なので、スペースバーのキートップだけは、Taiahiro製のキーボードに附属のものを利用している。

MPEG 2.5

MPEG 2.5と言う表記を見掛けたのだが、どういうものか理解できなかった。 /usr/pkgsrc/audioを以下のように検索すると、 /usr/pkgsrc/audio/libmad/DESCRに、MPEG-2 extension to Lower Sampling Frequencies, as well as the so-called MPEG 2.5 formatという記述があった。 Googleで検索してみると、MPEG-2 Low Sampling Frequenciesという方が結果は多いようだったが、これがMPEG 2.5なのだろう。

フレッツ光のPR-500MIで、フレッツ網のIPv6のDNSサーバーを使わないようにするのに、失敗した。

フレッツ光のPR-500MIで、フレッツ網のIPv6のDNSサーバーを使わないようにするという記事を書いたが、 比較的長期で接続しておくと、やはりフレッツ網のIPv6のDNSサーバーを使うようになってしまって、この方法は解決策ではなかった。

仕方がないので、ローカルネットワークのDNSサーバーのIPv6アドレスをHGWに設定して、FQDNでアクセスすることにした。

Sennheiser PC 8 USBのイヤークッションを交換した

ゼンハイザー PCヘッドセット PC 8 USBを使っていたのだが、早々にイヤークッションが劣化してしまった。 同じような薄いスポンジ製のイヤークッションに交換しても、すぐに劣化してしまうと思ったので、もう少し丈夫そうなイヤークッションを探してみた。 PC 8 USBのイヤークッションは直径50mmのものであれば良さそうだったので、イヤーパッド 50mm 直径 【2個入り】 ヘッドホン 交換用 イヤークッション 黒い PCduoduo (50mm)というのを購入してみた。

無事に全く問題なく付けることができた。大きさも過不足なくちょうど良さそうである。

Huawei App Galleryのdeveloperアカウントについて調べてみた

Huawe App Galleryにappをsubmitするには、個人としての登録としては HarmonyOS Developer - For Individual Developersによると、 パスポートと銀行のキャッシュカードや通帳のコピーなどの書類をアップロードして審査を受ける必要があるようだ。 だが、銀行関係の書類は英語で書かれている必要があるそうなので、残高証明書か何かを発行してもらう必要がありそうだ。

中国本土の電子メールサービスで電子メールアドレスを取得しようとした

中国本土のサービスで電子メールアドレスを取得しようと思ったのだが、 電子メールアドレスを取得するのは、なかなか難しかった。 結局は、aliyun.comの電子メールアドレスしか取得できるものはなかった。

中国本土でメジャーと思われる電子メールサービスを調べる

中国本土の事情に全く詳しくないのだが、ウェブで検索してみると、以下のようなサービスがあるようだ。

  • qq.com
  • 163.com、126.com、yeah.net
  • sohu.com
  • sina.com、sina.cn
  • aliyun.com

qq.com

qq.comは、TencentのQQというサービスの提供する電子メールアドレスで使われているドメインのようだ。 Tencentのサービスである香港を含むSMSを受信できる中国国内の電話番号か中国国内版のWeChat appを 持っていないと、結局はアカウントは作れなかった。

163.com、126.com、yeah.net

中国国内のSMSを受信できる電話番号を持っていないと、結局はアカウントは作れなかった。

sohu.com

中国国内のSMSを受信できる電話番号を持っていないと、結局はアカウントは作れなかった。

sina.com、sina.cn

中国国内のSMSを受信できる電話番号を持っていないと、結局はアカウントは作れなかった。

aliyun.com

日本のSMSを受信できる電話番号でもアカウントを作ることができた。 ただ、これが当初目的としていた中国本土の電子メールサービスであるかと言うと、違うような気がする。

電子メールは、47.246.174.177で受信されるようだが、これはおそらく中国本土には所在していなさそうだ。 MXレコードの内容がCNAMEなので、それのために電子メールが送れないということはあるかもしれないが、 それは中国本土であることの制限とは違うだろう。

HP Pavilion Aero 13-be2010AUのBIOSの更新

HP Pavilion Aero 13-be2010AUというlaptop PCをNetBSD/amd64-currentで利用していたのだが、 HP Envy 13-ay1052AU x360のBIOSをWindowsを起動させずに更新すると同様に操作すれば、Windows 11を起動させることなくBIOSを更新できた。

ただ、HP Pavilion Aero 13-be2010AUは、少なくともNetBSD/amd64 10.99.10ではNVMe SSDが定期的に一時停止してしまうし、 排熱の設計も良くない。HP Envy 13-ay1052AUの使用に戻すことにした。

Firefox 122.0 for Windowsで、Socks v5プロキシーサーバーとしてIPv6アドレスを設定する

OpenSSHでsocksなプロキシーサーバーを実現するとして、 SocksサーバーとしてOpenSSHのport forwardingを使うことにしたのだが、IPv6なIPアドレスを指定する場合には、[]で 囲ってしまうと正常に利用できなかった。

フレッツ光のPR-500MIで、フレッツ網のIPv6のDNSサーバーを使わないようにする

自宅でフレッツ光でIPoEによるIPv6を利用している。 自宅のネットワークは、ISC DHCPd (pkgsrc/net/isc-dhcpd)とBIND (pkgsrc/net/bind918)によるダイナミックDNSを利用している。 ダイナミックDNSでは、IPv4の正引きと逆引きのみ提供している。

しかし、Microsoft Windows 10をこのネットワークに接続しておくと、いつの間にかIPv6なDNSサーバーが設定され、 Windows 10はIPv6なDNSサーバーを優先して利用するので、自宅ネットワーク内のホストをDNSで引けなくなってしまう。

ホームゲートウェイ (HGW)であるPR-500MIに割り当てたIPv6アドレスがDNSサーバーとして設定されるので、 PR-500MIにある全てのDNSサーバーへの問い合わせをBINDのIPv6にフォワードする機能を使えば良いのかと思ったが、 IPv6なDNSサーバーのIPv6アドレスの他に、フレッツ網のDNSサフィックスも設定されてしまうので、 自宅ネットワークの各マシンのホスト名での正引きが面倒になってしまう。

いろいろ試してみると、「詳細設定」→「DNS」設定の画面にある、「DNS Proxy設定」の「IPv6 IPoE通信優先機能」を「優先しない」に設定 すれば、IPv6なDNSサーバーもDNSサフィックスも設定されないようになった。 自宅ネットワークのDHCPv4で配信しているDNSサーバーはIPv6なIPアドレスも返して来るので、これでIPv6な通信ができなくなることはない。

サンワサプライUSB-3TCH19RBKN

NetBSD/amd64-currentをHP Pavilion Aero 13-be2000というラップトップで動かしているのだが、このPCのxhciはうまくNetBSD-currentにサポートされていないようで、axen(4)なデバイスはうまく使えないことが多い。

と言うことで、ure(4)またはcdce(4)で使えるUSB-Ethernetアダプターを探していたのだが、サンワサプライUSB-3TCH19RBKNがUSB Type-C接続のUSB Type-Aのハブ機能を内蔵したure(4)として認識されるデバイスだった。

既に次の世代の製品が売られているようだが、それは調べられていない。

uhub10 at uhub5 port 1: VIA Labs, Inc. (0x2109) USB3.0 Hub (0x0817), class 9/0, rev 3.20/90.a4, addr 2
uhub10: 4 ports with 4 removable, self powered
ure0 at uhub10 port 4
ure0: Realtek (0x0bda) USB 10/100/1000 LAN (0x8153), rev 3.00/30.00, addr 3
ure0: RTL8153 ver 5c30
rgephy0 at ure0 phy 0: RTL8251 1000BASE-T media interface, rev. 0
rgephy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT-FDX, auto
ure0: Ethernet address xx:xx:xx:xx:xx:xx

plgarc/wip/llama.cppでpkgsrcのBLASサポートを探る

この記事は、 NetBSD Advent Calendar 2024 の13日目の記事です。 llama.cppを使ってみる 以前に、 NetBSD/amd64でllama.cppを使ってみる という記事で llama.cpp を使ってみていました。 あれか...