Mirakurun で環境変数を用いて allowIPv4CidrRanges を設定する

注意:設定内容に気を付けること.設定を誤って外部に Mirakurun が公開されてしまうと,各種法律に抵触する可能性がある.外部の第三者が Mirakurun にアクセスできないように,よく設定を確認しなければならない.
なお,本記事を参照したり,記事の内容を実行したりしたことで発生したいかなる損害についても,執筆者はその責任を負わない.設定は自己責任で行うこと.

Mirakurun のオプションである allowIPv4CidrRanges を編集して,接続を許可する IP アドレスの範囲を設定したい. Mirakurun は Docker で動かしているので,docker-compose.yml環境変数を設定することにより,Mirakurun に値を渡す.

設定の説明によると,allowIPv4CidrRangesstring 型の配列で指定することになっている.

github.com

しかし,環境変数で設定したい場合は,以下のように CIDR 形式のアドレス範囲をコンマで区切る記法を用いなければならない(はてなブログの仕様の関係で勝手に改行が入っていることに注意).

version: "3.7"
services:
  mirakurun:
    ...
    environment:
      ALLOW_IPV4_CIDR_RANGES: "10.0.0.0/8,127.0.0.0/8,172.16.0.0/12,192.168.0.0/16"
   ...

以下のような記法はダメで,コンテナの起動の際にエラーが出る.

# 余計な空白を入れてはいけない
ALLOW_IPV4_CIDR_RANGES: "10.0.0.0/8, 127.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16"

# 配列形式ではいけない
ALLOW_IPV4_CIDR_RANGES: "['10.0.0.0/8', '127.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']"
ALLOW_IPV4_CIDR_RANGES: [ "10.0.0.0/8", "127.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16" ]

本記事の執筆にあたっては,以下のあたりのソースコードを参考にした.

github.com

github.com

2022 述懐

もう2022年が終わってしまうので適当に振り返りを書く。

勉学

研究室に配属された。さまざまな人と話をする中で、いろいろな知識を蓄えることができた。 授業も少し取っていたが、卒業に必要な単位はすでに取り切っていることもあり、あまり身が入らなかった。

今は卒研の進捗がやばいので、どうにかして卒業できるように頑張りたい。 また、来年は大学院に行くので、さらに見識を深めていきたい。

労働

諸事情あってお世話になる会社が変わり、業務内容も主にC++を書く作業に変わった。 OSやのレベルのプログラミングに関する知見をいろいろ得ることができ、とても面白く作業している。 給料も少し上がったが出費も増えたので、生活の楽さはあまり変わっていない。

資格

今年も複数の資格を受験した。 IPAの高度試験では、ネットワークスペシャリストやエンベデッドシステムスペシャリストを受験した。 これらについては別記事に記録を書いたので、興味があれば参照していただきたい。

soyoil.hatenablog.jp

soyoil.hatenablog.jp

他に、普通自動二輪運転免許も取得した。これについても以下の別記事に書いた。

soyoil.hatenablog.jp

また、本記事執筆時点ではまだ合否が明らかになっていないが、第二種電気工事士試験も受験した。 先日の実技試験もとりあえず最後まで作品を完成させることができたので、受かっていることを願っている。

最近、気象予報士の資格の取得に興味が出てきた。 今まで受けてきた試験と違ってかなり難しいと思うが、やる気を出してやってみるのも面白いかなあ、などと思っている。

趣味

音楽

最近音楽を聴いたりアニメーション作品を見たりしていて、音楽の気持ちが高まってきた。 しかし、僕はギターができないので、代わりに比較的得意(?)なキーボードをちょっと真面目に練習したいと思っている。

来年も、幅広く音楽を聴いて生活の質を高めていきたい。

コンピュータ

最近ネットワークに興味が出てきており、ルータやスイッチ、サーバなどを購入して楽しんでいる。 楽しいのはいいのだが、オークションサイトを漁っているとすぐにお金がなくなるのが悩みどころである。

一方で、趣味のプログラミングはあんまりできなかった。 来年もやる時間があるかどうか分からんが、多少は手を動かしていきたい。

競馬

昨年から競馬を見るのにハマってしまい、テレビでレースを見たり、たびたび競馬場に足を運んだりしている。 現金で*1少額を賭けることもあり、負けたり勝ったり負けたりしている。

今年は多少知識もついてきて、面白くレースを見れるようになってきた。のめり込まないように気をつけながら楽しんでいきたい。

結び

今はとにかく時間がないが、いずれ余暇の時間も取れると信じ、論文を書き進めている。

今後は就活とかいうのをやらないといけない。私は会話が苦手なので非常に怖いが、どこかに拾ってもらえるように頑張りたい。

*1:私の性格的にインターネット投票を始めてしまうと間違いなく破滅するので、あえて現金縛りにしている

エンベデッドシステムスペシャリスト試験の振り返り

2022年秋季のエンベデッドシステムスペシャリスト試験(略称ES)を受けて、合格することができたので振り返りを述べる。

動機

春季のIPA試験でネットワークスペシャリスト試験に合格した。詳しくは下記の過去記事を参照されたい。

soyoil.hatenablog.jp

この流れに乗って秋季にも何か受けようと思っており、データベーススペシャリストと比較してエンベデッドシステムスペシャリストの方が自分の適正に近そうだったので、 こちらを受けることにした。

受験時点での経験

今まで、組み込みっぽいシステムを触った経験がない。 大学の講義で、コンピュータのアーキテクチャに関する講義は受けたことがある。

また、過去に任天堂ゲームボーイエミュレータを作ろうとしたことがある(開発途中で放置してしまっているが)。 受験してみて分かったことだが、結果としてこの経験が試験に大きく活きることになる。

勉強

試験前日の19時頃に、勉強を開始する。

とりあえず午前試験の対策を始めた。以下のWebサービスを活用し、10回分くらい解くことで、大体8割くらい正解できるようになった。

ids.information.jp

ここで眠くなって寝てしまったので、午後試験は全くノータッチで本番に臨むことになった。

本番

午前Iは免除なので、のんびり起床して会場に向かった。

午前IIは過去問にも出たところが多く、ある程度自信があった。

午後IやIIに関しても、自分の興味分野と被るところが少しあったので、まあまあ解けたように思う。計算問題もあったが気合いで解いた。

結果

可もなく不可もなくという感じだった。運が良かったと言うほかない。

ESの問題の特徴として、CPUやメモリ、バスなどのハードウェアに近い低レベルな部分について多く聞かれる印象がある。 先述したエミュレータの開発では、まさにこの部分の使用を読み解いてソフトウェア的に実装する必要があるから、結果として自然と試験に直結する知識が身についていたと考えている。

結び

中身がほとんどない記事になってしまった。

何らかのハードウェアのシミュレータや、オペレーティングシステムなどを研究したり作ったりしたことがあれば、午前試験を暗記することにより比較的容易に合格できると思う。 次回の試験からESは論文式になるらしいので、そうなる前に取得できて本当によかった。

JavaScript における 1 + '1' と 1 - '1' の違い

JavaScript の型変換において、ちょっと面白いと思うことがあったので記事に残す。

問題

JavaScript (ECMAScript) で、以下を評価する。

const a = 1 + '1';
const b = 1 - '1';

すると、a には string 型の '11' が、b には number 型の 0 が、それぞれ入る(Safari の開発者ツールと Node.js で試したが、結果は同じ)。

a // '11'
b // 0

直感的に、(a, b) は (2, 0) か ('11', '') になるだろうと思っていたので、ちょっと意外な結果となった。

調査

このように評価される理由を探るため、ECMAScript の仕様書を見てみる。

+- の仕様は、'Additive Operators' の節に載っている(以下のリンクを参照)。

https://tc39.es/ecma262/#sec-additive-operators

仕様を辿っていくと、+- のどちらの場合も EvaluateStringOrNumericBinaryExpression という関数が呼ばれ、 さらにその中で ApplyStringOrNumericBinaryOperator という関数が呼ばれることがわかる。

この関数の仕様は、以下のリンクの先に書いてある。

https://tc39.es/ecma262/#sec-applystringornumericbinaryoperator

興味深いのが、+ とそれ以外とで処理が異なる点である。仕様の一部分を以下に引用する。

ApplyStringOrNumericBinaryOperator ( lval, opText, rval )  
(省略)  
1. If opText is +, then
    a. Let lprim be ? ToPrimitive(lval).
    b. Let rprim be ? ToPrimitive(rval).
    c. If lprim is a String or rprim is a String, then  
        i. Let lstr be ? ToString(lprim).  
        ii. Let rstr be ? ToString(rprim).  
        iii. Return the string-concatenation of lstr and rstr.
2. NOTE: At this point, it must be a numeric operation.
3. Let lnum be ? ToNumeric(lval).
4. Let rnum be ? ToNumeric(rval).
(以下省略)

つまり、演算子+ でかつ左か右のどちらかの値が文字列であるときは、文字列結合を行なっている。 1 + '1' の評価では右の値が文字列だったため、'11' が得られたのである。

一方、1 - '1' の評価ではこの特別な処理が行われないため、数値に揃えられて引き算が行われ、0 が得られた。

結び

この設計はちょっと分かりづらいが、自然だと思う。 個人的にも、プラスで文字列結合する発想はあるが、マイナスで文字列の除去をする発想はあまり思い浮かばない。

ボーカル分離ソフト Spleeter を Apple silicon で動かす

Spleeter は曲のパート(ボーカル、ドラムなど)を分離してくれるソフトウェアである。 機械学習を利用しており、精度が高い。

github.com

これを手元の M2 Macbook Air で動かすことができたので備忘録を残す。

主な部分は以下の issue のコメントを参考にしている。

github.com

必要なもの

手順

レポジトリを任意の場所にクローンして、Apple silicon に対応したブランチに切り替える

git clone https://github.com/deezer/spleeter.git
git checkout tf_apple

pyproject.toml[tool.poetry.dependencies] をいじる

  • llvmlite^0.37.0 にする
  • protobuf = ">3.19.0,<3.21.0" を追加する
  • grpcio = "1.49.1" を追加する*1

conda 環境をつくってアクティベート(名前はなんでもいい)

conda create -n spleeter python=3.9 poetry
conda activate spleeter

lock ファイルを更新

poetry update --lock

依存モジュールを入れる (各モジュールのバージョンは記事執筆時点のもので、インストールするタイミングによって変わるかもしれないので、poetry.lock の中身を参照するなどして適切なバージョンに合わせること)

conda install -c conda-forge numpy==1.19.5 numba==0.54.1 grpcio==1.49.1 cffi==1.15.1 typed-ast==1.4.3 h5py==3.1.0 librosa==0.8.0

本体をインストール

poetry install

うまく動いているか確認

spleeter --version
poetry run pytest tests/

テストはいくつか失敗するかもしれないが、動作に支障はない。

実際に使う

spleeter separate -p spleeter:2stems -o [出力先ディレクトリ] [音楽ファイル]

出力先に、ボーカルとそれ以外が分かれた wav ファイルが吐き出される。 2stems のところを 4stems にすればドラムとベースも分けてくれるし、5stems にすればピアノも分かれるようだ。

*1:これを追加しないと 1.50.0 が選択されるが、記事執筆時点で conda-forge に 1.50.0 がなくてインストール時にエラーになるため

普通自動二輪免許の取得

普通自動二輪免許を取得したので記録を書くことにする。

事の発端

私は普段、原付バイクを利用している。

皆さんご存知のように、原付というものには極めて不便なルールがついて回る。

原付の法定速度は時速 30 キロメートルであり、これを超えてしまうと警察官に捕まる。 原付に乗っていると、大通りの一番左をチンタラ走っているすぐ右を、ものすごい速さで大型トラックに抜かれる恐怖体験ができる。

また、3 車線以上の交差点を右折するときは、二段階右折というものをしなければならない。 ただ二段階右折をするだけなら百歩譲って許せるが、つくばの街には左折専用レーンのある交差点が多く、こういうところでは物理的に二段階右折が困難なので、とても苦しい。

以上のようなことがあり、前々から免許を取ってもっと大きいバイクに乗り換えたいと思っていたのだが、私は電話をかけるのが苦手なので、なかなか申し込みができずにいた。

しかし、普段使っていたバイクが先日ついに故障してしまった。

いろいろな部分のメンテナンスを行ったが、症状は改善しなかった。 クソ暑い中で分解や再組み立てを行ったのに一切進展のない現状に嫌気がさしてしまい*1、その場で衝動的に自動車学校へ電話をかけることに成功した。

かくして 3 年ぶり 2 度目の自動車学校通いがスタートした。

教習

私の目的や資産状況からして 125cc のスクーターに乗れれば良いので小型 AT 限定でも良かったのだが、教習料金があまり変わらなかったので普通 MT をとることにした。

教習の最初で難儀したのが、重い車体の取り扱いである。 私の乗っているスクーターの重さが 70kg 弱なのに対して、教習車のスーパーフォアは約 200kg もあるので、当然原付の感覚で取り回すことはできない。 初めのうちは、押して歩いたり乗降車したりするときに転かしてしまったこともしばしばあった。

他に、ギアの操作にも慣れが必要だった。私は普通車の免許を AT 限定で取ってしまったので、人生で一度もマニュアルトランスミッション付きの車を扱ったことがなかった。 ただし、事前にギアの動作原理や操作方法について学習していたため、扱いにはすぐに慣れることができた。

指導員の方々の運転技術は極めて高度で、超小回りターンや超低速走行などのテクニックの数々にはとても驚いた。 初心者かつコミュ障の私に対しても優しく、しかし厳しく指導していただき、大変有意義な時間となった。 バイクでは誤った運転がそのまま死に直結するので、厳しく指導してもらえるのはとてもありがたかった。

さて、教習や卒業試験の中でこなさなければならない「検定課題」というものがいくつかあるので紹介する。

S 字・クランク

普通車の教習でもおなじみのものである。二輪車の場合はコース両側面にパイロンが立ててあり、そこに接触(≒脱輪)すると一発アウトなので気をつけなくてはならない。 ギアを 2 速にして、半クラッチとリヤブレーキで速度を調節するとやりやすかった。

スラローム

パイロンが 5 本立ててあり、その脇を九十九折りのように走り抜ける。ただハンドルを切るのではなく、リズム良く体重移動することが肝要である。 下半身が横に移動しても、上半身はブレずに安定させるという点において、スキーと似ていると感じた。

一本橋

長さ 15m で幅 30cm の一本橋の上を、7 秒以上かけて渡る。橋から落ちたら一発アウトである。 橋に乗るときに不安定になりがちなので、勢いをつけて乗るのが良いと思う。あとは上半身の力を抜いて視点を遠方に保ちつつ速度調整すれば、容易に 7 秒は越えられるだろう。

急制動

時速 40km で走り、指定場所でブレーキをかけて 11m 以内に止まる。 はじめはタイヤがロックしてすっ転ぶことを恐れて指定場所より前にブレーキをかけ始めてしまっていたが、慣れてくると意外と止まれることに気づいてブレーキ開始も粘れるようになった。 いきなりガツンとブレーキをかけるのではなく、徐々にジワっとかけることを意識すればなんとかなる(適当)。

坂道発進

上り坂で止まり、スロットルを開けつつクラッチを徐々に繋いで発進する。 初めは少しスロットルをひねるとエンジンの回転数が急激に上がる様子にビックリしてしまっていたが、重要なのは回転数ではなくクラッチの扱いであると指導を受けてからはすんなりできるようになった。

卒業検定

延べ 17 時間に渡る教習を受けた後、卒業検定に臨んだ。本来は 8 月 13 日に受けるつもりだったが、台風による大雨と強風が予想されたので翌日に延ばしてもらった。

本番は多少緊張したが、特に問題が起きることなく切り抜けることができた。教習中には一本橋から落ちることが何回かあったので不安だったが、なんとか落ちずに済んだ。

合格証書をもらい、茨城町の免許センターに行って発行を受けた。学科試験は免除で朝早く行く必要がなかったので、わかば号ではなく TM ライナーを利用した。

「普自二」が追加された免許証

結び

教習期間は夏本番だったので、とても気温が高くて大変だった。長袖長ズボンにプロテクター着用を義務付けられていたし、バイク自体も熱を発するので灼熱地獄だった。

何はともあれ免許をゲットできたので、今後はより大きいバイクに乗り換えて快適な移動を行いたい。

余談

免許を発行したのが私の誕生日の前日であった。 免許の有効期限は発行日から数えて 3 回目の誕生日の 1 ヶ月後であるから、私の免許証の有効期限は理論上最も短くなってしまったのである。 これに気づいたのは発行申請のときに窓口のおじさんに指摘されてからであり、わざわざ出直すのも面倒だったのでそのまま発行してもらった。

これに関しては、そのうち別の免許を取る予定なので気にしないことにしている。

*1:これはバイクを修理する技能や根性のない私が 100% 悪いのであり、バイクや環境のせいではない

ネットワークスペシャリスト試験の振り返り

2022 年春季のネットワークスペシャリスト試験(いわゆる NW、ネスペ)を受験し、合格することができたので振り返りを述べる。

受験の動機

soyoil.hatenablog.jp

昨年の振り返りの記事(↑)で述べたように、応用情報に受かった次の目標として、比較的自分の興味分野に近いと考えたためである。

情報処理安全確保支援士試験(いわゆる SC、セキスペ)とどっちを受けようか迷ったが、SC は春秋どちらでも受験できる一方で、ネスペは春しか受けられず時間がもったいないので、先にこちらを受けることにした。

受験時点での経験

前述の通り、2021 年秋季に応用情報技術者試験に合格した。

趣味として、自宅でサーバ類を運用している。ヤフオクで中古の NEC IX シリーズのルータを購入して遊んだり、Docker を使っていろいろなサービスを建てて遊んだりしている。 そのため、LAN 内のルーティング、VPNDNSDHCP などの一般的なアプリケーション層プロトコル、コンテナ化技術などについては人並みの知識があると思っている。

また、大学でネットワーク・プロトコルなどについて学ぶ授業を受けたことがある。 そのため、イーサネットIPv4/6、TCP/UDP などのプロトコルがどのような形をしていて、どのように振る舞うかなどの基本的なところについても一応知識があると思っている。

しかし、大規模なネットワークを触ったり、組み込みデバイスを扱ったりしたことはないので、インターネットにおけるルーティングプロトコルや、無線を使うネットワークについての知識は皆無である。

勉強

一般的に勉強というと、以下のようなイメージを抱くであろう。

引用:まちカドまぞく 2 丁目 第 3 話

しかし今回はお金も時間もなかったので、本を購入せずに無料で活用できる教材を使って勉強を行った。 というのも、そろそろ勉強しなきゃと思いつつ何もしない日々が続き、気づいたら試験 10 日前になってしまったので、慌てて勉強を始めたのである。

午前試験対策

午前試験は、「ネットワークスペシャリスト試験過去問道場」をひたすら解くことにより対策を図った。 オンラインで午前試験の過去問を解くことができ、自動で採点もしてくれるので、非常に気軽に演習ができる。

www.nw-siken.com

応用情報のときもそうだったが、基本的に午前試験は過去問ゲーなので、ある問題に対する回答を覚えてしまうまで繰り返し解くと良いと思う。

初見の正解率は 60% ジャストくらいしかなかったが、回を重ねてからは安定して 8 割程度解けるようになった。

午後試験対策

午後試験は論述問題である。大まかに、以下の 2 つを利用して勉強した。

ネスペイージス

ネスペイージスという Web サイトには、ネスペを受けるにあたって必須な知識がまとめられている。

www.infraexpert.com

午前問題を解いているうちに、私の基礎的な知識が全然足りていないことに気づき、ネスペイージスを読み始めた。 ネスペでは幅広い知識が要求されるので、このような体系的に集約された情報はとても有用であった。特に、自分が触ったことのない分野については、イチから読んで勉強した。

過去問

IPA のページに行くと過去に出題された午後問題とその回答が PDF で閲覧できるので、これを解いた。 当然わからない部分もあるので、その場合は前述のネスペイージスで該当する分野の復習を行った。

ただ、あまり時間がなかったので、すべての問題に目を通すことはできなかった。特に午後Ⅱの対策がおろそかになった。

本番

応用情報に受かっているので午前Ⅰは免除である。朝早く起きなくていいので助かる。

午前Ⅱは、やはり過去問ですでに見た問題が多く出たため、難なく解くことができた。

この後昼休みだが、これが極めて短い。昼ご飯を食べるために試験会場の外のラーメン屋に行ったがラーメンが出てくるのがとても遅く、あわや午後の試験に遅刻するところであった。

午後Ⅰと午後Ⅱは自分がある程度知識のある問題が出たのでよかった。午後Ⅰの問 3 では DNS や暗号化通信が、午後Ⅱの問 2 ではコンテナ化の問題がそれぞれ出たので、手応えを感じながら解くことができた。

結果

午後Ⅱがギリギリだったが、なんとか滑り込むことができた。受験料もそれなりに高いので、一発で合格できてよかった。

結び

試験日直前は余裕がなくずっと勉強ばかりしており、他のやるべきことがおろそかになっていた。 これは良くないので、もっと早くから勉強しておくべきだった。

何はともあれネスペに合格できたので、秋は情報処理安全確保支援士試験かエンベデッドシステムスペシャリスト試験を受けてみようと思う。

余談だが、試験当日は皐月賞が開催されていたので、午後Ⅱが終わった後に中継を見た。 ダノンベルーガを本命視していたので予想は外れたが、ジオグリフの強さやドウデュースの末脚に強い感銘を受けた。 イクイノックスも強い馬だと思うので、いつか G1 レースを勝ってくれるよう願っている。

2023年11月30日追記:イクイノックスが引退するとの報に接した。 「いつか G1 レースを勝つ」というレベルをはるかに超越し、稀代の名馬となったのである。 はじめてG1レースを取った2022年の天皇賞は衝撃の差し切り勝ちだった。 2023年の天皇賞ジャパンカップは直接観戦し、その強さを目の当たりにした。 怪我無く無事引退となったことはとてもうれしいし、将来出てくるであろう子供たちの活躍に大いに期待したい。