にせねこメモ

はてなダイアリーがUTF-8じゃないので移ってきました。

このブログについて

文字・フォント・プログラム・技術・趣味などについて、Twitterでは書きづらい長い内容などをまとめるためのブログです。基本的には自分用のメモとして書いている部分が多いです。

リンク等

note https://note.com/nixeneko 残らなくてもいい記事
Pixiv Fanbox https://nixeneko.fanbox.cc/ 活動まとめと有料の週報(大したこと書いてないが…)
Pixiv https://pixiv.me/nixeneko
Pleroma @nixeneko@nixeneko.info Mastodonとかやってる人はフォローしてください
Bluesky @atproto.nixeneko.info 時々見る
Twitter @nixeneko 最近あんまり使ってない
GitHub https://github.com/nixeneko プログラムとか
Bookmeter https://bookmeter.com/users/9166 読書記録。たまに感想
Amazon欲しい物リスト amazon.jp/registry/wishlist/1C43ZFBA4IL6Z

同人誌(無料公開)

https://nixeneko.hatenablog.com/entry/c88_russian_alphabethttps://nixeneko.hatenablog.com/entry/c90_greek_latin_cyrillichttps://nixeneko.hatenablog.com/entry/20170811_dentyuhttps://nixeneko.hatenablog.com/entry/c100_mongol_bichig_unicode

Sigfox回線が値上げしてた

Sigfoxの回線契約がSigfox Buyから購入できるのだが、気づいたら値段が上がっていた。


日本でのサービスは京セラコミュニケーションシステム(KCCS)が行っているのだが、次のニュースが出されていた。
www.kccs.co.jp
これによると、2025年10月15日から値上げが行われたらしい。


さて、今購入してみると、140回/日、アトラスなしで1回線購入したところ、1,950円+税で計2,145円だった。

2年ちょっと前に購入した時は1,110円+税で計1,221円だった。
100円/月程度から180円/月程度に上がった。倍まではいかないものの、だんだん低価格のメリットがなくなっていってる感じがする。それでもまだ手ごろではあるが。

RV-1805搭載RCTモジュールを利用して10分インターバルの割り込み信号を作る

モチベーション

Arduinoで10分ごとのインターバルで処理を実行したいが、処理中以外はディープスリープして電力消費を節約しようとした。
Arduinoのディープスリープからの復帰を内部ウォッチドッグタイマー(WDT)を利用して行っていたが、たまに無限再起動に陥り処理ができなくなることがあった(WDTの暴走と思われる)。
外部RTCモジュールを利用するれば回避できるかもしれないので、ディープスリープからの復帰用に定期的な(10分ごとの)割り込み信号を発生させたい。

RTCモジュール

RTCモジュールとして、RV-1805を組み込んだものを買っていた。数年放置してるうちにディスコンになってたけど…

Qwiic - RV-1805搭載 リアルタイムクロックモジュール--販売終了www.switch-science.com

で、定期的に信号を出すのがalarm(時刻で設定)の他にcountdown timer(時間で設定)があるらしい。今回は時刻は関係ないのでcountdown timerの方を使う。

接続

Qwiic対応のやつ持ってないので普通に接続。

  • RTCモジュールの3.3VとGNDをArduino Pro Mini (3.3V)のVCCとGNDに接続。
  • I2C通信用にRTCモジュールとArduino Pro MiniのSDA同士、SCL同士を結線。
  • 割り込み信号用にRTCモジュールのINTArduino Pro Miniの3番ピンを結線。

今回はI2Cで接続するのこれだけなので、RTCモジュールのI2Cプルアップ抵抗はそのまま使う設定。プルアップ抵抗使わない場合はモジュールのI2Cと書かれたジャンパーの部分のハンダを外せばいいらしい(Hookup Guide参照)。

コード

ライブラリとして次のものを用いる。

なお、次のコードは上記ライブラリのExample 1の改変である。ライブラリ自体はインストールせず、.inoファイルと同一フォルダーに突っ込んで使っている。

#include "SparkFun_RV1805.h"

const byte interruptPin = 3;

RV1805 rtc;


void setup() {
  Wire.begin();

  Serial.begin(9600);
  Serial.println("Alarm from RTC Example");

  if (rtc.begin() == false) {
    Serial.println("Something went wrong, check wiring");
  }

  //アラーム無効化
  rtc.setAlarmMode(0); // Alarm disabled
  rtc.disableInterrupt(INTERRUPT_AIE); //Disable the Alarm Interrupt
  //カウントダウンタイマーと割り込み有効化
  rtc.setCountdownTimer(10, COUNTDOWN_MINUTES, true, true); //10分毎、繰り返しあり、パルス
  rtc.enableInterrupt(INTERRUPT_TIE); //Enable the Timer Interrupt

  //RTCモジュールの出力を外部割り込み信号とする
  attachInterrupt(digitalPinToInterrupt(interruptPin), callback_func, FALLING );
}

void loop() {
  if (rtc.updateTime() == false) //Updates the time variables from RTC
  {
    Serial.print("RTC failed to update");
  }

  String currentDate = rtc.stringDate(); //Get the current date in dd/mm/yyyy format
  String currentTime = rtc.stringTime(); //Get the time

  Serial.print(currentDate);
  Serial.print(" ");
  Serial.println(currentTime);

  delay(60000);
}

void callback_func(){
  Serial.println("Interrupted");
}

これで、10分ごとに1回割り込みが発生するようにできた。

ライブラリについて

SparkFun_RV1805.cppsetCountdownTimer(uint8_t duration, uint8_t unit, bool repeat, bool pulse)だが、内部で

	// Set timer value
	writeRegister(RV1805_CTDWN_TMR, (duration - 1));
	writeRegister(RV1805_TMR_INITIAL, (duration - 1));

というコードがある。RV1805_CTDWN_TMRレジスタ(0x19)は1回目のカウントダウンタイマーの値で、RV1805_TMR_INITIALレジスタ(0x1A)はrepeatを有効にした時に再度セットされる値である。ここで、Application Manualには、(Timer Initial Value + 1)/(Countdown Timer Frequency)が周期になると書かれている。

これでsetCountdownTimer(2, COUNTDOWN_MINUTES, true, true)として実行してみると、初期化から1分後に最初の割り込みが発生、その後は2分毎のインターバルで割り込みが発生している。

これを見るに、RV1805_CTDWN_TMRレジスタ(0x19)に関しては、1を減算する必要はないのではないか。つまり次のコードのようにする。

	// Set timer value
	writeRegister(RV1805_CTDWN_TMR, duration);
	writeRegister(RV1805_TMR_INITIAL, (duration - 1));

duration = 1のときはうまく動作しないが、1分単位なら60秒としてsetCountdownTimer(60, COUNTDOWN_SECONDS, true, true)とすればよい。

nanacoカード退会

使わないので、nanacoの物理カードを処分することにした。

個人情報を登録してないのであれば単に破棄するだけでも実害はなさそうだが、個人情報登録してるのであれば退会の手続きを取ったほうが安全な気がする。

残高確認

個人情報等を登録すれば、ネットで確認できる。さもなくば店頭かセブン銀行ATMで。

残高を使い切る

ポイントがつくが、これは諦めることにする。
ポイントが残るのが気になるのであれば、残高とポイントが合わせて199以下になるようにする→ポイントを電子マネーに交換してチャージ→残額を使い切る、という段階を踏めばゼロにできるはず。

nanacoカードの退会

「お客様情報の登録」が済んでいる場合はWebで手続きすることができる。ただし平日昼間にしかできない。
そうでない場合は電話で手続きする。

Web手続きも実際にはオペレータとのチャットになるが、必要な情報を入力し、確認に答えるだけなので人間と話す必要もなかった。

後はカードを破棄する。

Pythonでロケールを指定してソートする

課題

ソートの順番は言語ごとに異なる。
そのため、様々な言語を扱う際は、言語(=ロケール)を指定してソートをしたい*1

解決手法

PyICUを利用する。これはICU C++ライブラリのPythonラッパーである。

利点

実績のあるUnicodeライブラリであるICUを利用するので、比較的良い結果が得られる。

欠点

インストールが大変で、動作も重い。頻繁に実行する用途には向かないかもしれない。

使い方

インストール方法は次を参照。

コード例

import icu

collator = icu.Collator.createInstance(icu.Locale("si_LK"))
result = sorted(["ලංකාව", "භාෂාව", "ලංකා තේ"], key=collator.getSortKey)
print(result)

結果

['භාෂාව', 'ලංකා තේ', 'ලංකාව']

*1:日本語を読みでソートする場合などは、ロケールを指定しただけでは不可能だが、言語やユースケースによってはロケールを指定したソートで事足りる。

thai-language.comが繋がらなくなっていた

オンライン辞書などのタイ語学習サービスを提供していたthai-language.comが繋がらなくなっているいた。

HTTPS対応してなくてHTTPで接続する必要があったが、少し前までは見えていた。

Internet Archiveを見ると、最後に9月27日にアクセスした記録があるので、繋がらなくなったのはそれより後のはずだ。


現在は名前解決ができず、IPが引けない状態になってるっぽい。Whoisを見てみると、ネームサーバとしてns1.blobule.comns2.blobule.comが指定されているが、これらに繋がらなくなっている。ネームサーバ自体のIPも引けない。

ネットワークやサーバをホストしてるところがダウンしてるのかもしれない。特にこちらでできることもない気がする。

データが無事で運営者が気づいて対応してることを祈っている。

(2025-12-22更新)復活していた!3週間前には確か繋がらなかったのでおそらく1~2週間前からだろう。ありがたい。

漫画解説同人誌をかいた反省点

いくつかコミケとかで文字関係の解説漫画をかいて出したりしたのだが、今後のために反省点を書いていく。

なお、この反省点を生かしたからといっていいものができるとは限らない。

ある程度のまとまりで話を区切るべき

40ページ近くだらだら書いてたやつがすごく読みづらいと思った。

集中して読めるのは12~16ページくらいだと思う。ページ数が多すぎるなら話数を分けるべきだ。ある程度の内容のまとまりで区切りをつける必要がある。

文字をコンピュータ上で入れると文章が長くなりがち

フキダシなどの文字をコンピュータ上で入れると、文章が長くなる。文章が長いと漫画である必要がない。

手書き文字だと、字がそこまで小さくならないので、文字をそこまで詰め込めない。

大事なのは長い文章をだらだらと書かないことであって、それができていればコンピュータ上でフォントで文字を入れて問題ない。

どうしても解説したければ、解説コラムみたいな文章記事を別枠で設けることもできる。

正確さ・網羅性にこだわり過ぎない方がよい

すべてを書こうとすると分かりづらくなる。
漫画解説を読む人間がそこまで精緻なことを知りたがってるとは思えないので、エッセンスを伝えるのを重視したらいいのかなと思う。

図が多い方が良い

せっかくシームレスに図を入れられるので、理解を助ける図は多い方がよい。関連する絵などもあると画面に情報が増えていいと思う。

文字で解説するより、図示で解説できればそれがよいと思う。

出典をどうするべきか

論文のように、主張の根拠となることについては出典を示したい気持ちがあるが、コマとかにいちいち書くと鬱陶しいかもしれない。注とかにまとめるのはありかもしれない?

参考文献の一覧は載せるべきだと思うが、出典を書くのはどこまで細かくやるのがいいのかわからない。

ノド側は見づらいので余白を気を付ける

ノド側つまり本を綴じてある部分の近くは、本が開きづらい場合に見づらくなる。
これは中綴じと無線綴じで異なり、中綴じの場合は気にしないでよいが、無線綴じの場合は気を付ける必要がある。

私はB5用の原稿用紙に書いてA5サイズに縮小して使っていたので、本来のA5漫画の本文枠より広めに使っていたっぽい。
で、そうすると無線綴じにした場合にノド側が開きづらいので見づらくなる。3mmほど外側(小口側)に移動させてやると特に気にならない程度にはなったが、5mm程動かしてもよさそうだった。

中心に配置するのであれば空白を広くとる、さもなくば小口側にずらす、などの対策が必要。

Unicodeモンゴル文字の最近の動向(2025年4月)

以前このブログでUnicodeモンゴル文字の問題点についてまとめたが、それに関しての更新となる文書が出たのでそれについて書く。

L2/25-140

2025-04-23に、Unicode技術委員会文書レジストリ(UTC Document Registry)に、Unicodeモンゴル文字に関しての経過報告が登録された。

この文書を読んだ。

発表用スライドのようなので真意が分かりづらいところはあるが、次のような変更点や進捗報告が書かれている。

MVS

モンゴル文字の接尾辞を接続するために、Unicode 15.1以前ではNNBSP (U+202F Narrow No-Break Space)が使われていたが、2024年9月にリリースされたUnicode 16.0からは代わりにMVS (U+180E Mongolian Vowel Separator)が利用されるようになった。
MVSは母音a/eを分離して書く時に使われてきていたものだ。

Prior to Unicode Version 16.0, U+202F NARROW NO-BREAK SPACE (NNBSP) was used to represent this small whitespace; (…). However, its role has been taken over by U+180E MONGOLIAN VOWEL SEPARATOR (MVS), which not only prevents word breaking and line breaking, but also triggers special shaping for the following separated suffix.

https://unicode.org/versions/Unicode16.0.0/core-spec/chapter-13/#G45731

これにより、NNBSPがモンゴル文字専用でなかったことにより引き起こされていた問題が解決し得る。

例えば、属格を示す接尾辞の-yinは単語本体から空白で区切って語中形で書き始めるのだが()、NNBSPの存在により、単語本体と接尾辞が分離されてしまって、語頭形から始まる形で表示されることがあった()。
特に、モンゴル文字以外の文字に接尾辞が接続することもあるので(次図)、そのような場合に正しい形で表示することは困難だった。

A-yinの正しい形と誤った形

この問題が、MVSというモンゴル文字専用の符号を使うことによって改善できる見込みである。

UTN #57進捗報告

さて当該文書のメインとなるUTN #57の進捗状況について。

ここでいうUTN (Unicode Technical Note) #57は、モンゴル文字の符号化とシェイピングルール(ある符号に対してどの様な形状を出力するかを決定する仕組み)の曖昧性のない定義を目指しているものである。


中国が2023年に国家標準の推奨規格としてGB/T 25914-2023を発表し、現代モンゴル語表記のためのモンゴル文字(Hudum; ホダム)の明確なシェイピングルールを規定したとのこと。
この規格により、モンゴル文字をどう表示すべきかがはっきり規定されたため、モンゴル文字フォントが基準に適合しているか判断できるようになったそうだ。

この規格を元にフォント実装用のデータを生成する仕組みが制作されており、それを利用することでモンゴル文字フォントがルールに適合していることを保証し、相互運用性が担保されるようになることが期待される。

文献一覧