2022/06/20(月)久々にプログラミングフォント調べた

2022/06/20 25:32
最近良いプログラミングフォントが色々でてきているようなのでさらってみた。

2013年後半のプログラミングフォント事情 - 色々日記(ざ・めも)
以来。

今回の結論は、
・Ricty(もしくはRicty Diminished)使って不満がなければRicty
・Rictyのアンチエイリアスに不満がある場合は、PlemolJP
となった。

ただ、PlemolJP作者のフォントとはどれも素晴らしく、
HackGen
PlemolJP
Firge
UDEV Gothic JPDOC
の4つについては合うものを選べば良いと思う。

状況変化した内容をつらつら書いていく。

■Windowsのレンダリング
Win10になったときかWin10内でのupdateかで標準アンチエイリアス~ClearTypeがある程度改善したように感じる。
加えて高解像度モニタの普及とDirectWrite周りを調整できるソフトが増えたことで、以前ほど不満に感じるシーンが減った。

ただ、やはりまだWindowsのレンダリングはいまいちだと思う。

■フォント
ここ3年くらいで、ライセンスがゆるく品質の良いフォントが公開されている。
Google Fontsがハブになっているようだ。

・源ノ角ゴシック(Source Han Sans or Noto Sans)
・IBM Plex Sans JP
・BIZ UDGothic

あたりが品質も高く収録文字も多そう。
特に、モリサワのBIZ UDGothicがOpen Font Licenseで追加されたのは衝撃だった。

源ノ角ゴシックは様々な派生フォント(源真, 源柔, 源暎, Nasu, ...)を生み出しているので、
BIZ UDGothicもそうなっていきそうで楽しみ。

CJKオール対応の更紗なんてのもあるし、なんとなく中国パワーにひきずられてCJK対応が進んだ感じがする。
合成フォントの選択肢がとても増えた。

RictyはRictyでヒンティング追加されたりして少し進化。

少なくともライセンス的にかなり黒かったMeiryoKEを選択しなければいけない状況はないと思う。
世のフォント作者に感謝。

FontLinkもソフト側でできるものも多いし(秀丸ですらできる!)、もうやらなくていいのではないか。

なお、ソフト側でフォント合成する場合もフォントの幅や高さの問題で下端・右端が切れるリスクがあるのは同じ。

■求めるフォント
選択肢が増えたので、贅沢な話だが自分のほしいフォントを整理。

[必須]
・等幅
・英数字は全角の1/2
・文字はしっかり分離していてほしい。特に<=, ==が合体しないでほしい(リガチャは論外)
・破断は最小限(Hackはgの線をかなり省略するがちょっと嫌)
・|は分離してほしくない
・iの下部の右曲がりは嫌(lの下部の右曲がりはOK。どちらでもあり)
・標準アンチエイリアス・アンチエイリアスなしいずれでも視認性が高い
・記号△▲▼■□○◎●・←↓↑→系は全角で描画されてほしい
・文字の下端・右端が欠けてほしくない(合成フォントでは切れがち)
・フォントサイズでの表示乱れは最小限(特にWindowsの場合10.5ptの鬼門がある)

[ベター]
・文字の区別は極力ついてほしい。特に1とlと|は極力。
・英数字・日本語を混ぜ書き前提。バランスに違和感がないと嬉しい
・全角と半角に同じ文字がある場合、できるだけ似たような字体でかつ全角・半角の判別がつくのが理想
・比較・演算記号-=*/<>はできるだけ上下中央に揃っていてほしい
・0はスラッシュのほうが嬉しいが、ドットも許容。Oとは区別がついてほしい。

まずRictyが頭に浮かぶ… いやもうドンピシャRictyなのだが、あやつはアンチエイリアスが今一つだった。
というわけでさらってみる。

■今回試したやつ
個人的趣味に合うかどうか。
めちゃくちゃ私見で判定。
△Firge: 若干-=<>の上下位置が一致しないのが気になる。全体的に文字を破線にしがち(gとか&とか)
✕HackGen: |が分かれるのが気になる。iの下部が右曲がりなのが好みでない。<=>がややくっついて見えるのが嫌。10.5ptアンチエイリアスなしだと(){}が対称に見えない
△PlemolJP: {}がかなり強い曲線で作られてる。ややばとぱ(濁点・半濁点)が見分けづらい。#が線切断表記。0がドット
△UDEV Gothic JPDOC: {}が上下対象でない。ややばとぱ(濁点・半濁点)が見分けづらい。英数字が縦長の印象。半角qで目が滑りやすい。4が少し気持ち悪い
△Ricty Diminished: アンチエイリアスがシビア。=とか横線がボケやすい。M+側も比較的アンチエイリアスに弱い。非アンチエイリアス、10.5ptのときにsなどの上部がInconsolataとかより汚い(上辺にドット?が出る)
✕M+ 1M: *が上付きなのが嫌。半角英数(特に数字)の幅が狭すぎる。9.5ptとかで数字の高さがズレる。
✕Migu 1M: M+と同様
✕Myrica M:  |が分かれるのが気になる。日本語がやや細い。{}が上下対象でない。10.5ptとかで全角jがiに見えたりする。他にも下端が切れる文字がある
✕源暎ゴシック M: *が上付きになるのが嫌。<=>が完全にくっついてしまう。
✕戸越等幅: 「ば」など濁音が見づらい。全体的に潰れてしまう傾向があり、調整ができてない気がする。
✕更紗Gothic: fixedを使用する。ややばとぱ(濁点・半濁点)が見分けづらい。*が上付きになる。■○などが半角。右端が切れる。更紗で使ってるIosevkaはカスタマイズできるらしく、可能性を感じる。
✕Roboto J: ヒンティングありの方を使ったほうが良さそう。(){}の見分けが付きづらい。日本語の上下が目立ってガタつく
✕Ocami: 記号系(→とか)が半角。ばとぱがみわけづらい。
✕Cica: 記号系(→とか)が半角
✕VLゴシック: サイズによって、=の上下の太さが一致しない。
✕utatane: ==がわずかに合体気味。アンチエイリアス下での英数字の視認性が今ひとつ。
✕源暎モノコード: アンチエイリアスなしで、線の太さに安定感がない。フォントサイズ変更していると、()の左右で幅が違っていたり、縦の線だけ太くなっていたり。9ptで==が合体する。
✕Nasu M:非アンチエイリアス10.5ptで ==が合体気味。非アンチエイリアス下での英数字の視認性が今ひとつ
✕源ノ角ゴシック Code JP: 非アンチエイリアスだと:と;、,と.の区別が厳しい。
Firge, HackGen, PlemolJP, UDEV Gothic JPDOCの作者さん同じなのすごいなー

この4つは不具合っぽい挙動をすることが少なく、非アンチエイリアス・アンチエイリアス問わず素直。

字形としては、
UDEV Gothic JPDOC
が一番趣味に合うけど、英数字が縦に長過ぎるのかコードを読むときに目が滑りやすい。

PlemolJPは0がスラッシュでないのだが、どんな用途でも70~80点ある感じ。

アンチエイリアス環境下に限ったら丸になるやつもたくさんありそう。
作る側(特にMacユーザ)からしたらそんなの気にしてるやついねーよって感じだと思う。

改めて思ったのは字形もだけど、フォントつくる人の腕に依るところが大きい。
HackGen作者たわら氏の仕事が素晴らしい気がするし、ソース公開されてるから自力でフォント作る気があるなら4フォントのスクリプト全部読めばある程度合成フォント作るときの課題理解も進みそう(作れるとは言ってない)。

今後もどんどんフォント出てきそうなので期待。

2022/05/14(土)debianをbuster(10.x)→bullseye(11.x)にアップグレード(zabbixネタ多し)

2022/05/14 17:49
自宅のdebianをbuster(10.x)からbullseye(11.x)にアップグレードした。

その際のメモ。
zabbix関連の対応が中心。

基本手順

第4章 Debian 10 (buster) からのアップグレード
基本的には公式手順に従う。
#apt update
#apt upgrade --without-new-pkgs
#apt full-upgrade
#apt autoremove
いつも通りsudoは適宜補完で。

システム再起動

システム再起動をかけておく。
カーネル自作の頃はここで結構トラブル起きていたが、今回は何も無し。

ログ周り諸々チェックして特に問題なさそう。

Rubyライブラリインストール

Rubyのバージョンが2.7に上がったのでgemでサービス運用に必要なライブラリを入れ直しておく。
twitterとhttpclientの2つ。
#gem install twitter httpclient
パッケージで入れてるサービスのPHPやPerlライブラリはdebianのパッケージに任せてて、
Rubyのライブラリは未だにgem管理というのはなんだかへんてこな感じがする……

が、自作サービスなのでAPTで依存性判断させるのめんどくさいし、
bundler管理するまでもないし今のところこの手順忘れなければいいかな。

sources.list更新

# apt-get update
すると、
無視:3 http://security.debian.org stable/updates InRelease
エラー:4 http://security.debian.org stable/updates Release
  404  Not Found [IP: 151.101.230.132 80]
E: リポジトリ http://security.debian.org stable/updates Release には Release ファイルがありません。
N: このようなリポジトリから更新を安全に行うことができないので、デフォルトでは更新が無効になっています。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください。
と出る。
security.debian.orgのパスが変わったっぽいので対応しておく。
これはupgradeと無関係に直しておくべきもの。
# diff sources.list.20220512 sources.list
14,15c14,15
< deb http://security.debian.org/ stable/updates main contrib non-free
< deb-src http://security.debian.org/ stable/updates main contrib non-free
---
> deb http://security.debian.org/ stable-security/updates main contrib non-free
> deb-src http://security.debian.org/ stable-security/updates main contrib non-free
公式だとstable-securityじゃなくbuster-securityを推奨しているようだが、横着したいのでstable-securityで。
apt-get updateしてエラーの解消を確認。

[参考]
security.debian.org 'does not have a Release file' on with Debian Docker images - Server Fault

zabbix4→5関連

毎度zabbix関係に手間がかかる感じ。
色々でていたのでこの際まとめてきれいにする。

databaseアップグレードに失敗する

zabbixにアクセスすると下記表示。
The Zabbix database version does not match current requirements. Your database version: 4030046. Required version: 5000000. Please contact your system administrator.
/var/log/zabbix-server/zabbix_server.log
上では、起動時の
starting automatic database upgrade
の途中(93%くらい)で、
 17096:20220513:102638.403 completed 92% of database upgrade
 17096:20220513:102638.548 completed 93% of database upgrade
 17096:20220513:102638.762 [Z3005] query failed: [1118] Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
[alter table `hosts` add `discover` integer default '0' not null]
 17096:20220513:102638.763 database upgrade failed
 17207:20220513:102809.948 Starting Zabbix Server. Zabbix 5.0.8 (revision d3c78f993a).
とでてくる。

列が追加できないらしい。
mysql上でzabbix DBにつないでhostsテーブルのフォーマットを変えていく。
MariaDB [zabbix]> alter table hosts row_format=dynamic;
media_typeテーブルも同様。直す。
 16412:20220513:101210.637 [Z3005] query failed: [1118] Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs
[alter table `media_type` add `event_menu_name` varchar(255) default '' not null]
MariaDB [zabbix]> alter table media_type row_format=dynamic;
zabbixを再起動すると、database upgradeは成功してzabbixの画面は開くようになった。

なお、
innodb_strict_mode = 0
で対応する説があるが、これはNG(データロスするか、実際にデータいじってるときにエラーが出るか)の認識。

[参考]
CentOS7で動いているZabbix4.0をZabbix5.0にアップグレードしてついでにNginxで動かす - 気まぐれ

エラーを消す

まだ、/var/log/zabbix-server/zabbix_server.logにここらへんの警告が出るので消していく。
 17207:20220513:102810.696 Zabbix supports only "utf8_bin" collation. Database "zabbix" has default collation "utf8_general_ci"
 17207:20220513:102810.723 character set name or collation name that is not supported by Zabbix found in 421 column(s) of database "zabbix"
 17207:20220513:102810.723 only character set "utf8" and collation "utf8_bin" should be used in database
 17207:20220513:102810.759 database is not upgraded to use double precision values
各tableのcollate直す。
正式手順は、
2 Repairing Zabbix database character set and collation
のようだけど、面倒であれば下記流しても良さそうだった。
MariaDB [zabbix]> ALTER TABLE acknowledges CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE actions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE alerts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE application_template CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE applications CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE auditlog CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE auditlog_details CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE autoreg_host CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE conditions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE config CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE config_autoreg_tls CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_group CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tagpair CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_condition_tagvalue CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE corr_operation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE correlation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dashboard_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dbversion CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dchecks CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dhosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE drules CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE dservices CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE escalations CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_recovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_suppress CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE event_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE events CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE expressions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE functions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE globalmacro CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE globalvars CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graph_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graph_theme CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graphs CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE graphs_items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE group_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE group_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_log CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_str CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_text CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE history_uint CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_inventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE host_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hostmacro CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hosts_templates CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE housekeeper CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE hstgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstep CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstep_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httpstepitem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptest CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptest_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE httptestitem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE icon_map CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE icon_mapping CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE ids CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE images CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE interface_snmp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_application_prototype CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_preproc CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE item_rtdata CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE items_applications CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_macro_path CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_condition CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opdiscover CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_operation CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_ophistory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opinventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opperiod CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opseverity CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_opstatus CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optemplate CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE lld_override_optrends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenance_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_hosts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE maintenances_windows CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE mappings CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type_message CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE media_type_param CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE module CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand_grp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opcommand_hst CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opconditions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE operations CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opgroup CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opinventory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage_grp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE opmessage_usr CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE optemplate CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE problem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE problem_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE profiles CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_autoreg_host CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_dhistory CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE proxy_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE regexps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE rights CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screen_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screen_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screens CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE screens_items CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE scripts CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE service_alarms CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services_links CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE services_times CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sessions CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slides CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshow_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshow_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE slideshows CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_element_trigger CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_element_url CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_shape CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_url CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_user CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmap_usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_elements CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_link_triggers CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE sysmaps_links CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE tag_filter CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_acknowledge CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_check_now CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_close_problem CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_data CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_remote_command CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_remote_command_result CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE task_result CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE timeperiods CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trends_uint CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_depends CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_discovery CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE trigger_tag CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE triggers CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE users CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE users_groups CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE usrgrp CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE valuemaps CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE widget CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
MariaDB [zabbix]> ALTER TABLE widget_field CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;
DBのdefault collate直す。
MariaDB [(none)]> ALTER DATABASE zabbix DEFAULT COLLATE utf8_bin;
倍精度周りのdefault値直す。
MariaDB [zabbix]> ALTER TABLE trends
	MODIFY value_min DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
	MODIFY value_avg DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
	MODIFY value_max DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
MariaDB [zabbix]> ALTER TABLE history MODIFY value DOUBLE PRECISION DEFAULT '0.0000' NOT NULL;
SQLはここに掲載されている。
https://git.zabbix.com/projects/ZBX/repos/zabbix/raw/database/mysql/double.sql

大体↓に書いてある! ありがたい。
[参考]
Zabbix5.0にアップデートした後にでるトラブルの対処法

PHP関連オプション

zabbixの画面に下記4つ警告が出ているので直す。
PHPの"post_max_size"オプション	8M	PHPのpostサイズの最小値は16Mです("post_max_size"設定オプション)。
PHPの"max_execution_time"オプション	30	PHPスクリプトの実行時間の最小値は300です ("max_execution_time"設定オプション)。
PHPの"max_input_time"オプション	60	PHPスクリプトの入力パース時間の最小値は300です("max_input_time"設定オプション)。
PHPの"date.timezone"オプション	不明	PHPのタイムゾーンが設定されていません ("date.timezone"設定パラメータ)。

/etc/apache2/sites-enabled/zabbix.conf
の、
<Directory "/usr/share/zabbix">
内に下記追記。
# diff zabbix.conf.20220513 zabbix.conf
11a12,15
>     php_value post_max_size 16M
>     php_value max_execution_time 300
>     php_value max_input_time 300
>     php_value date.timezone Asia/Tokyo
とりあえずこれできれいになった。
アップグレード終わり!

2022/02/12(土)春M(SpringM)で「0による浮動小数点数除算」

2022/02/12 25:22 PC(全般)
春M(SpringM)で特定のファイルに対して以下の操作をした時に、「0による浮動小数点数除算」とダイアログが出ることがある。
[対象操作]
・ファイル削除
・コンテキストメニュー呼び出し

一度ダイアログが出てしまうと、プロセスがファイルハンドルを掴みっぱなしになってしまうようで、
SpringMのプロセスを削除するまでそのファイルは操作ができない。

うかつに操作しに行くと、そのプロセスがハングすることもある。

発生するファイルの条件を調べたところ、字幕付きのmp4ファイルで何らかの理由で字幕streamがデータ無しになっている場合に発生するようだ。

ffprobeで調べるとこんな感じ。
$ ffprobe.exe -select_streams s -show_streams -loglevel error "***.mp4"

[STREAM]
index=2
codec_name=mov_text
codec_long_name=MOV text
profile=unknown
codec_type=subtitle
codec_time_base=0/1
codec_tag_string=tx3g
codec_tag=0x67337874
width=704
height=396
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000000
start_pts=0
start_time=0.000000
duration_ts=0
duration=0.000000
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=1
nb_read_frames=N/A
nb_read_packets=N/A

~ 省略 ~
[/STREAM]
これで、duration_ts=0になっているファイルが発生条件ぽい。
字幕でなくてもvideoやaudioがduration_ts=0の場合もおそらく発生すると思われる(そのようなファイルが手元にないので未検証)。

とりあえず、オリジナルのmp4を破壊してよいのであればdurationが0のストリームを破棄してやれば良いようだ。
上記の場合はvideoとaudio残して、字幕だけ削るので、
$ ffmpeg.exe -i input.mp4 -c:v copy -c:a copy output.mp4
とか。

どのストリームを残すかはソース次第で。

このファイルは問題なく操作できた。

Delphiは外部DLL呼び出しの例外に対してセンシティブだというのは聞いたことがある気がするので、
それが関係しているかもしれない。
OK キャンセル 確認 その他