にせねこメモ

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

このブログについて

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

リンク等

note https://note.com/nixeneko 残らなくてもいい記事
Pixiv https://pixiv.me/nixeneko
Pleroma @nixeneko@nixeneko.info MastodonやMisskeyとかやってる人はフォローしてください
Bluesky @atproto.nixeneko.info 時々見る
X (Twitter) @nixeneko 最近あんまり使ってない
GitHub https://github.com/nixeneko プログラムとか
github.io https://nixeneko.github.io/ ポータルサイト的な
Bookmeter https://bookmeter.com/users/9166 読書記録。たまに感想

同人誌(無料公開)

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

ウクライナ語書籍通販

少女終末旅行ウクライナ語版

『少女終末旅行』のウクライナ語版が出てるのを知って、ほしいなーと思っていた。

入手を検討するとなると、ウクライナ国外でウクライナ語書籍を扱っている店は少なく、かつ本のラインナップも限られるため、ウクライナから輸入することになる。

ウクライナからの本の輸入

参考となったのが次のサイトである。

基本的にはウクライナ難民に本を送ることを想定している内容だが、この「3. Where you can buy Ukrainian books for distribution abroad」以下に、国外に発送することのできる(と思われる)ネット本屋のリストが載っている。


さて、ネットショップでも日本まで送ってくれるかはまちまちだ。

国内発送のみの場合

ネットショップが国内発送のみにしか対応していない場合、輸入代行を利用する必要があるが、ウクライナに対応している代行業者があるかはわからなかった。探せばあるかもしれない。個人でやってる場合もあるし。

出版社直営のネットショップがこれっぽかった。とにかく、代行を頼む必要があるため、国際発送してくれるところがあればそちらを利用したい。

国際発送に対応している場合

国際発送に対応してるネットショップもある。国際発送できる代表的な運送会社としてウクルポシュタとノヴァポシュタがあるようだ。

ウクルポシュタ Укрпошта / Ukrposhta

ウクライナ郵便。日本への発送可能。
国際発送でこの選択肢があれば、直接日本まで送ってもらうことが可能のようである。

ノヴァポシュタ Нова пошта / Nova Poshta

ヨーロッパやアメリカに支店があり、支店がある国への発送が可能。
しかし日本へは直接送ることができない。

このため、ノヴァポシュタでしか国際発送しないサイトであれば、小包転送サービスなどでイギリスなどの倉庫の住所を取得し、その住所に発送し、その後、転送サービスに倉庫から日本まで転送してもらう、という手段は可能だと思われる。

Nashformat

さて、上掲の記事で挙げられていたネットショップを見て行ったところ、NF (Наш Формат / Nashformat; https://nashformat.ua/)はノヴァポシュタの他、ウクルポシュタの国外発送に対応してるっぽかった。そのためここを利用することにした。

サイトはウクライナ語のみなので、頑張って理解する必要があるが、今は翻訳アプリやチャットAIがまあまあ精度の良い翻訳で助けてくれるので、まあ何とかなるとは思う。
そうはいっても、問題があると困るので、簡単なウクライナ語が構成できる程度の語学力は持ってた方が良い。

会員登録

基本的には画面に従っていけばいいので細かくは書かないが、サイトメニューのВхід (ログイン)を押すとログイン画面が出てくるので、Реєстраціяの方を押し、必要事項を入力して、Зареєструватисяボタンを押す。

会員登録の画面
  • 「Прізвище Им'я」となっているが、「姓 名」の順で入力しようが「名 姓」の順で入力しようがどっちでもいいと思われる。ウクライナでは公的文書では姓→名の順で書くらしい。ローマ字で入力する。これが届け先の宛名になる。
  • 電話番号は日本は+81-から始めて、自分の電話番号の先頭の0を除いたものを入力すれば問題ないと思う。一般的な海外通販と同様。

住所の表記

一般的に各国の住所表記は異なっているので、「発送地のシステムで正しく印字でき」「日本で配達員が読んで理解できる」形式であれば後は何でもいい。
これらの要請からラテン文字(というかASCIIに含まれる文字)で表記することになる。
ウクライナの住所は日本の住所と異なるが、必要な情報が入っていれば問題なく届くはず。極端には郵便番号と町域以下が書かれていれば配達可能だろう。

届け先住所入力欄

NFの住所入力欄を見ると、上から

  • Країна 国
  • Оберіть місто 都市
  • Вулиця 通り
  • Будинок 建物の番号
  • Квартира / офіс 部屋番号
  • Індекс поштового відділення 郵便番号

と並んでいる。

というわけで、国は「Японія」を選択、後はローマ字表記で適当に「Tokyo」「Chiyoda-ku」「Chiyoda 1-1」とか順に書いとけばいいと思われる。あと郵便番号。
後は日本の配送会社の人が上手くやってくれるでしょう。

決済

最近は大体のサイトでクレジットカードが使えると思うので、VISAのカードあれば使えるはず。PayPalとかで対応してくれる場合もあるかもしれない。


最初、楽天カードで決済しようと思ったら、決済は通ったように見えるが、カード会社によって決済がブロックされたようだった*1

うまく決済ができてませんよ~って連絡が来たので、再度リンクを送ってもらって別のカードで決済することにした。


というわけで、Wiseを契約した。バーチャルカードなら、個人証明を済ませて入金したら数時間で利用できるようになるっぽい。

決済すると、アプリかWebサイトを開いて承認するように出るので、アプリを開いて承認し(承認のボタンを探すのにやや手間取った)、すると決済が完了した。

やっぱり国内カードで海外決済は(アマゾンとか大手を除いて)やめた方がいい気がする。

届いた

支払から20日程度で発送、発送から10日ほどで到着。合計1カ月かかった。

全6巻の表紙

わーい。
ソフトカバーであり、表紙はマットな印刷で、日本版の書籍を彷彿とさせる。版型はA5と日本版よりも一回りでかい。

段ボールで包まれた後、フィルムラップでグルグルに巻かれた状態で届いた(個人情報が記載されてるため外観画像無し)。

段ボールを開封したところ

感想

思ったより簡単だった。

サイトが英語に対応している会社でも海外発送がノヴァポシュタにしか対応してなくて日本から直接買えないということがあり、なかなか難しいですねとなった。

*1:最近楽天カード本当に厳しくなりましたね。セキュリティ厳しくするのはいいんだけどこちらの意図した決済まで握りつぶすのやめてほしい。いやまあ楽天カードを海外決済に使おうとする方が悪いかもしれないが…。

逆再生回文

www.youtube.com
この動画で、「逆再生しても“全く同じ”に聞こえる言葉」として、「オオエンマハンミョウ」が挙げられていた。

この動画の中ではこれは「IPA回文」になってるのでは、という話が出ていたが、IPA回文であれば逆再生して同じように聞こえるとも限らないため、ここでは逆再生回文と呼ぶことにする。


面白いので、試しにいくつか作ってみた。

作例

いい塩、おいしい

▶順再生
◀逆再生

王様、犬に甘そう

▶順再生
◀逆再生

ウニ売るウニ、犬売る犬。

▶順再生
◀逆再生

別バージョンとして、「ウニ売る犬、犬売るウニ。犬売るウニ、ウニ売る犬。」も可。

家は、アウェイ

▶順再生
◀逆再生

兄嫁、エモいな

▶順再生
◀逆再生

作り方

言葉の逆再生をしてみるとわかるのだが、破裂音的な性質を持つ音の逆再生は、発音に違和感がある。これはシンバルの逆再生がリバースシンバルの音でしかなく、シンバルの音の印象と異なるというのとパラレルであると思う。つまり、破裂音の逆再生は破裂音の逆再生であって破裂音ではない。

逆に、母音や、摩擦音・鼻音などは、逆再生耐性が高いと思われる。

という訳で、破裂音や破擦音を含まない語について、逆再生を調べてみることで、逆再生回文の候補が見つけられると思う。

その他気づいた点

  • 無声破裂音と比べて、有声破裂音の逆再生の方が違和感が少ない。これはVOT (Voice Onset Time)が小さいことによるのかもしれない。
  • 「さしすせそ」の「し」や「はひふへほ」の「ひ」など、同じ行でも母音環境によって子音が異なるものについては注意を要する。
  • 「アイ」の逆再生が「イヤ」、反対に「イヤ」の逆再生が「アイ」と聞こえる。同様に「アオ」と「オワ」が逆再生になる。これに関しては、そもそも「イア」「オア」を「イヤ」「オワ」と区別して発音することができない可能性がある。

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搭載RTCモジュールを利用して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モジュールのINTとArduino 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週間前からだろう。ありがたい。