日々のメモ書き
Debian Developerが綴るメモ
仮想環境(KVM)内でICカードリーダーを使う
KVM上のWindows環境でe-taxをやりたいという話。
普段はLinuxで作業していてe-taxを使うためにWindowsを別で起動するのめんどくさいなあと思っていた。KVM(virt-manager)に入っているWindowsでICカードを読めれば楽だなあと思って試しにやってみたら何も苦労することなくできた。
具体的にはvirt-managerのハードウェア管理でUSBリダイレクトを追加する。種類はSpiceチャンネルのままで良い。このデバイスがあるとLinuxPCに接続されたUSBデバイスをLinux側で使わずにそのまま仮想PC上のOS側に接続させることができる(例えば仮想マウスはX/Linux側が管理している情報をvirt-managerを通して渡していることとの違い)。
このあとICカードリーダー(SonyのRC-S330)をLinuxPCに接続したあとにvirt-managerのメニューから仮想マシン→USBデバイスのリダイレクトを選ぶと一覧の表示されるのでチェックを入れる。こうすると仮想PCのWindows側で認識される。あとの手順は通常の実PCと同じようにやるだけ。ちなみにマウスを間違ってUSBデバイスのリダイレクトでつなぐとめんどくさいことになる…(PC自体から引き抜いて復旧)。
ScalaでDiplomacyの命令解決ライブラリを作成その2
ScalaでDiplomacyの命令解決ライブラリを作成中。撤退フェイズと調整フェイズの実装を行う。Civil Disorderの実装は終わってないが一旦区切りをつける。
DATCの6.J.5-6.J.11を除いてテストのパスを確認した。Civil Disorderの実装は理屈はわかるが無意味にめんどくさいし割とどうでもいいので延期することにした。100%パスですと胸張っていいたいところだがそれは我慢する。
RetreatとAdjustmentはjDipのDATCのテストケースの記述にバグがあって通らないことがいくつか。jDipのテストの実装はどうなっていたんだろう(なんとなく想像できる)。Civil Disorderはテストケースが大丈夫かかなり怪しい気がする。
それはおいといて実装に区切りがついたのでしばらくはコードのリファクタリングを頑張ることにしよう。
ScalaでDiplomacyの命令解決ライブラリを作成
ScalaでDiplomacyの命令解決ライブラリを作成中。現在行軍フェイズの処理まで作成済み。
jDipがあまりにも古い(10年以上まともにメンテされてない)のでどうにもこうにも使いにくいのでなんとかならんのかと考えていたが,結局Scalaで一から書き起こすことにした。現在DIPLOMACY ADJUDICATOR TEST CASES(DATC)のSection.AからSection.G,つまり行軍フェイズ部分のテストは100%パスしている。行軍フェイズに比べれば撤退フェイズ・調整フェイズはかなり楽なので一山越えた。というところでgithubに登録しておいた。
基本的なデータ構造はjDipをかなり参考にした。地図のデータなどはjDipからそのままコピーしてきた。
jDip自体は先に述べたようにかなり古臭くなっている。なんせJava 1.3とか1.4の時代に書かれていてenumもgenericもないという恐しいものになっている。それは仕方がないが制御構造を例外処理で行うのはひどすぎた。最初はjDipをリファクタリングしてけばなんとかなるかと思ったが目が潰れそうなコードが多いのであきらめた。jDipのコード自体は参考にならなかったが,考え方は参考になった。
Scalaによる実際の作成はライブラリに助けられた部分も大きい。特にscala-graphのおかげでめんどくさいグラフ探索をする必要がなくなったことは非常に楽にしてくれた。parser combinatorはテストケースの作成の手助けとなった。
DATCのテストケースはもちろんエッジケースが記述してあるわけだが,まださらに実際には発生しないだろうが変な行軍を考えれば明確に決定できない例も考えられなくもないなという気はする。輸送と支援がサイクルを構成してサポートカットするようなテストケースはてこずった(6.F.23とか6.F.24)。実際のところ実は現在の公式ルールでは解決できないという説明があったりする。このあたりはややこしくていくつかのルールが提案されていたりする。紙に図を書いてデバッガで状態チェックしながらなかなかめんどくさかった。このあたりは結局命令の依存関係グラフを作成してサイクルを検出して…という処理が必要になる。
最初にjDipのコードを読みだしたのが約1年前で,ダラダラやっていたせいもあるがなんとか目処がつくところまで来た。テスト走らせてIDEが警告表示だらけなのを本当に全部潰せるのかよと思いながらやっていてオールグリーンになってほっとした。次はやっつけ仕事になっている部分をきれいに書き直しつつDATCのSection.H(retriating)とSection.I(Building)の部分を作成しよう。
あとScalaで書いた理由はjDipのようなマルチプラットフォームなGUIまで作りたかったのでScalaにはJavaFX(ScalaFX)があるという理由。GUIまでたどりつくのはかなり先だと思われるが。
- https://github.com/takaki/scdip
- http://web.inter.nl.net/users/L.B.Kruijswijk/ DATC
- http://www.floc.net/dpjudge/?page=Algorithm Diplomacyの行軍解決アルゴリズムだけど完全ではないと思う。
LVM+btrfs+RAID1 rootの試み
LVMのLVを使ってbtrfsのRAID1をrootを挑戦した。なんとか問題は解決したがきれいではない。
環境はDebian8(Jessie)で実行。最初にRAID1を設定するところまでは問題なかったのだが再起動するとこける状態になった。btrfs RAID1のroot自体はドキュメントも見つかるのでできないはずではないのに謎なことになった。
ディスクは2台ありsdaとsdbとする。まず作業手順だが普通にインストールする。sdaとsdaにそれぞれ別にLVMのvgを作成する(vg0とvg1とする)。そのあとlvも作成(/dev/vg0/rootと/dev/vg1/root)。
vg0/rootをbtrfsにして通常のインストール。インストール終了したあとにRAID1を作成する。
# btrfs device add /dev/vg1/root /
# btrfs fi balance -mconvert=raid1 -dconver=raid1
そのあと再起動…するとinitramfsの処理中にこける。rootflags=degradedをつけてブートするととりあえずブートするが片肺運用になるのでよろしくない。なぜこういうことになるのか,ということだが結論はinitramfsのLVMが必要最低限のlvしかactivateしないことが原因だった(rootflags=device=/dev/mapper/vg0-root,device=/dev/mapper/vg1-root
とかいろいろやったんだよ)。
なんかローカルで設定持てばいいんだろうということで解決は以下のよう。/usr/share/initramfs-tools/scripts/local-top/lvm2
を /etc/initramfs-tools/scripts/local-top
にコピーする。
下のほうに activate "$ROOT"
とある下に activate "/dev/mapper/vg1-root"
を追加。これで解決したがゴリ押しっぽくていまいち美しくないいのでもっと簡潔な方法がないか考え中。
解決するまで何度も何度もリブートかけて仮想マシンとは言え面倒だった。時々壊れてマウントできなくなるので仮想CDから復旧かけるとか…。
- https://wiki.gentoo.org/wiki/Btrfs/System_Root_Guide 普通のデバイスでやるならこれでOK
Mini Debian Conference Japan 2016 に参加
12/10のMini Debian Conferenceに参加。大統一Debian2013以来のDebianのイベントになる。
Mini Debian Conferenceに参加するために東京へ。今回は会場はサイボウズの会議スペースだった。大学以外にこういう企業に会議スペースを提供してもらってイベントをする事例が増えた気がする。
オープニング。プレゼンでWindowsを使っていたら会場からブーイングが飛ぶ。
最初にAndrew LeeのOpen Build Serviceの話。パッケージの健全性のチェックのためのビルドテスト環境ということで良いのかな。Debianでパッケージのチェックのためにいろいろツールがあるのはわかるんだが何がどうなっているのか把握できてないのでBTSで言われるまで放置という感じになっている。
昼休みにキーサインパーティ。事前登録を忘れていたので野良参加者として参加。DDの参加者が思ったより少なかったな。GPGキーのローマ字表記と免許証の漢字表記のずれの問題とかほんとにどうしようね。あとパスポート以外にローマ字表記の公的身分証は無いものか。
やまねさんのOSSライセンスの話。知識の再確認。
弦本さんのGo言語のパッケージング。Go言語は全然使ってないのでふーんという感じだがパッケージ名称がああなっている理由はわかった。
岡部さんのEmacsのverilog-modeの話。第二のテーマとしてあったXEmacsってまだ続いてんのかな。自分のパッケージは問題が起きたらサポート終了させているが。
台湾の張正一さんのFOSSバーチャルシンガーの徴音梅林。デモ聞いてぶっとんだ。こんな品質高いのか。
g新部さんのGnuPGの話。最近のGnuPG2の動向など。英語と日本語を交互にプレゼンするのは苦労していた。
DebConf 2018台湾の準備状況など。
そのあと同時開催だったLibreOffice kaigiと共同で懇親会。BTSとかレガシーすぎていつまで使うんだとかいう話で盛り上がる。なんでもかんでもバッチ処理なのもどうかとか。あと酔っ払うと英語の理解力がひどく落ちる。
また来年もやる予定なので来年も来よう。
鈴鹿8耐 2016 秋
相変わらずの秋の成績のひどさよ。33Laps。
レース前にトレーニングどころかMTBでもろくに走らないひどい生活を続けてどうなるのかと思ったが例年と変わらなかったな。最初からサイクリングペースで行こうと適当に走っていた。最初からインナー使ってダンシングでシケイン登る気も全然なく適当に走っていたがやはり5時間過ぎたあたりから足が痛くなり全然踏めなくなってきた。どうしようもないらしい。多分最低レベルの状態でここまでは頑張れるとか考えておこう。
dlvr.itに移行
twitterfeedが終了するのでdlvr.itに移行した。
twitterfeedの前にも別のサービスを使っていたが終了して移行したはずなんだよな。どんどん終わっていくなあ。動作テストも兼ねての記事。
名古屋フンタ会 2016.08
8/6にボードゲーム会を中村スポーツセンターで開催。
参加者18人。何かの谷間だったのかディプロマシーは人数が十分集まらずに中止。今回使った定員24人の第三会議室は若干狭かったかと思う。参加者の顔ぶれが普段と全然違ったのも謎だった。持ち込みが多くて荷物は減らせて楽だった。
Polar S710の修理
Polar S710のリストバンドが切れたので修理を頼んだ。
交換を頼んだらS710の部品はもう無いのでS725の部品と交換になった。S725も廃番だと思うが。代用部品を使っても修理がいつまでできるのか。さすがに15年経ってしまうと厳しい。
返送品に修理部品も無いので新製品を割引するので購入検討して下さいという書類が入っていた。新しい製品の機能は魅力的なんだが普段使いの時計として使うのは向いてないのが残念なところ。GPSと地図付きとか欲しいところではあるが。
Chrome拡張からjQueryから脱却した話
自作のChrome拡張を改良するときにjQueryを使わないようにした。随分とコードがきれいになった。
3年ぐらい放置していたChrome拡張があったのだが手を入れようと思った。Reactにするのが目標だったがその過程でjQueryも排除しようとした。そのあたりの感想。
- $(document).readyはdocument.addEventListerなどで書き直せる。しかし最終的にReactにしたらそれすら不要になった。
- cssセレクターはdocument.querySelectorAllで良くなった。
- xpathはjQueryのXPath拡張ライブラリを使っていたがこれもdocument.evaluateで良くなった。Nodeにするのは一旦変換するのがちょっとだけ手間ではある。
- cssの設定もe.style.background = 'red' などで済むようになった。
- jQueryでやっていたイベントハンドリングとか状態管理とか意味不明なコードはReactで全てきれいに書けた。
ということでもうjQueryはいらない。