GnukのEmulation mode

2021/3/10 FSIJセミナーで解説されたのでメモ これでできること: 実物のGnukを使わない動作テスト 鍵生成などは失敗すると最悪なにもできなくなるので練習ができる 事前に必要なもの scdaemon usbip python3-cffi, python3-pytest ソースコードの準備とビルド手順、起動まで 別のターミナルを開き、vhci, usbipを用いてUSBデバイスとして扱えるようにする テストの動作 gpgでカードとして扱う PINはadmin: 12345678, 通常 123456 初期化 (factory-reset) 新規鍵生成 (generate) 内容は ~/.gnuk-flash-image に保存される 作成した鍵で暗号化 (gpg -e) 追記(2020-03-12) Facebookでg新部さんよりいくつかご指摘いただきました encryptでは秘密鍵を使わない(のでここはテストになっていない) Debian 10 (Buster)のGnuPG 2.2.12では復号化に失敗する。2.2.27では問題ないとのこと Gnuk 1.2.17時点で鍵生成にバグがある。今は修正がpushされている

“Adversarial Policies: Attacking Deep Reinforcement Learning”をざっと読んだ

機械学習で画像分類器をだますAdversarial Exampleは広く知られていますが、強化学習でも同じ問題があるそうです。observation対して摂動を与えることで意図しない挙動をさせることができるそうです。 observationは第三者が直接介在できるものではないのですが、環境を共有するゼロサムゲームにおいて、自身の挙動を介して相手のobservationに狙った摂動を与える、blackbox, model-freeな手法が提案されている( https://adversarialpolicies.github.io/ )とのことでちょっと論文を読んでみました。 さすがに状況は限定されているようで、環境が高次元であること、デプロイされたエージェントの重みが固定されているという状況で、無制限に相手のポリシーがサンプリングできることが条件のようです。 見た感じ、人間同士のゲームプレイにおけるフェイントに似ているなあという印象を受けました。生成されたadversarial policyに対してfine-tuningはできるものの、それに対してさらなるadvaersarial policyを生成することができるそうで、それを交互に繰り返すことでロバストなポリシーにできるとのことです。 adversarial policyの学習は相手agentのself-playによる学習にかかる時間の3%程度でできてしまうとのことで、adversarial exampleの世界でも攻撃者有利なのは相変わらずのようです。

Published
Categorized as その他

IIJmioファミリーシェアプランに追加する形でDoCoMo SIMから転入

個人的にIIJmioタイプDファミリーシェアプランを一人で使っていたのですが、音声用に長年DoCoMoの契約を続けていました。ちょうど更新月に入ったのでこの機会にMNP転出することにしました。ファミリーシェアプランが追加のSIMを頼めるようになっていたので、MNPの転出先としてそちらを選んでみました。この時どのメニューから選択すると正しく申し込めるのかが分かりづらかったので記録しておきます。  会員専用ページ(https://www.iijmio.jp/member/)の「SIMカード追加」(https://www.iijmio.jp/service/setup/hdd/addsim/confirm.do)を選択 遷移したページでサービスコードがファミリーシェアプランになっていることを確認 SIMカードの追加を選択 機能から「音声通話機能つき」を選択 「MNP転入」という項目が選べるようになるので選択 MNP転入に必要な情報を入力 会員トップページの「ご購入お申し込み」から選択してしまうと新規プラン追加になってしまうので、気をつける必要がありました。 今後MNPする機会はそうそう無いとは思いますが、忘れないよう記録しておきます。 そもそもDoCoMo FOMA以前はNTTパーソナルのPHSをずっと使っていたのですが、2004年あたりで「端末料金3万円OFF」と引き換えに乗り換えを行いました。当時5万円程度したモトローラM1000を2万円程度で購入できたのですが、電話番号を変える作業は結構大変でした。今思えば、もっと粘ればPHSからのMNPができたのでそのほうが楽だったかもしれません。

Published
Categorized as その他

秋葉原でREVIVE USBを組み立てた

以前からやってみたいことの一つとして、PCから操作可能なUSB HIDデバイスを使って何かしらの操作をする、ということがありました。 実現する手段はいくつか考えられます。一つはBadUSBと呼ばれるデバイスの応用です。これは一般的に販売されているUSBデバイスの一部に一般ユーザーが書き換え可能なファームウェアが搭載されていて、任意のUSBデバイスとして動作させることができるものです。キーロガーなど悪用される可能性があるということで広く問題になりました。この方法で利用可能なデバイスが現在でも手に入るかどうかわからなかったので、この方法はあきらめました。 電子工作界隈では、V-USBというマイコンで動作するUSBターゲット用のオープンソースなファームウェアがあります。オリジナルのV-USBはAVR用となっていますが、Arduinoで動くArduino USBというものもあります。 今回はHIDデバイスという明確にターゲットが決まっていたので、REVIVE USBというキットを使いました。Amazonや秋葉原の三月兎などで購入できます。私ははキットの方を三月兎で購入しました。ほかに配線済みの完成品も販売されているのですが、千円ぐらい値段が違います。 自力で組み立てる必要があるわけですが、自宅は狭いうえに整理がなされていなくてあまりはんだ付けなどの作業には向いていない環境です。たまたま秋葉原のガード下を見ていたところ、Assemblageという電子工作スペースがあることに気付いたので、そちらを利用してみました。休日は1時間200円ほどで利用できます。 はんだ付け作業は10年ぶりぐらいでしたが、45分ほどかけてなんとか完成しました。 できあがったデバイスをLinuxマシンに差すと、USB ID 22ea:0006とでます。linux-usb/usb.idsには該当するデータがないようです。ともあれ無事認識したので、これで何かしら作ってみたいと思います。

Published
Categorized as その他

gensimでLDA(Latent Dirichlet Allocation)

トピックモデルを試そうとgensimのLdaModelを使ってみたのですが、参考にした記事「LSIやLDAを手軽に試せるGensimを使った自然言語処理入門」は対象とするgensimのバージョンが古いようだったので、現状にあうようアレンジして試してみました。この記事で使ったgensimのバージョンは0.11.1です。 過去のgensimと今のものとでは、メソッド名等の命名規則が変わっています。旧来はcamel caseでしたが、今は小文字とアンダースコアの組み合わせになっています。たとえばnumTopicsという名前付き引数はnum_topicsに変わっています。 それ以外にも多少の違いはあるのですが、yuku_tさんのgistのコードを今のバージョンのgensimで動くように修正したのが以下になります。 WikiCorpusクラスにはsaveAsTextと等価なメソッドが今は存在しないので、個別にDictionaryとCorpusをファイルに出力しています。 生成されたモデルをもとにLSI, LDAモデルを作成する流れは、メソッド名等を(たとえばPrintTopic→print_topic)書き換える点以外は元記事とほぼ変わりません。 また、LDAモデルの生成をマルチコアで実施するgensim.corpura.LdaMulticoreというクラスも用意されています。worker=2等とワーカースレッド数を指定できる点以外はLdaModelクラスと同じです。しかし、あまりよくスケールするわけではないようで、CPU論理コア数8の環境でworker=7としてみても対して速度が上がることはないようです(参考:Multicore LDA in Python: from over-night to over-lunch)。一応workerプロセスは指定しただけ起動はするのですけど。加えてマルチコアで処理した場合、出力されるログが少なくなって進捗状況がわかりづらくなるようです。 ところで以前書いたword2vecの記事でgensimのword2vecでのマルチスレッド動作について書いていなかったので、同様にworkerスレッド数を指定できることを追記しておきました。 また、Google C言語実装のword2vecのマルチスレッド処理について一つだけ気になるところがありました。それは、単純にファイルをバイト単位でスレッド数に分割し、処理している点です。単語の区切りを一切考慮しないので、その箇所がたまたま単語の途中であってもお構いなしに処理を進めてしまいます。 もっとも、出現頻度の少ない単語は捨てられるので、実用上問題になることはほとんどないはずではあります。運悪くUTF-8の途中で切られてしまい、なおかつ語彙として記録されてしまうと、gensimで読み込もうとするときにInvalidUnicodeErrorが発生してしまうので、その点だけは気を付ける必要があります。

Published
Categorized as その他

日本語も扱える文章チェッカーLanguageTool(実用レベルとはいっていない)

以前から注目しているソフトウェアとして、LanguageToolがあります。Javaで書かれた文法チェッカーで、コマンドラインやFirefoxアドオン、Libre/OpenOfficeのプラグインとして動作します。 以前簡単な紹介をおこなったり、使い方をDoc-ja Wikiに書いたりしてみました。このころはversion 2.6でしたが、現在の最新版は2.9です。 残念ながら、日本語の対応状況については今も芳しくありません。日本語のルールの数はslideshareの資料では23種類でしたが、version 2.9の段階では43種類と増えてはいるものの、まだまだ不足している状態です。 単語ベースでのルールも少ないのですが、コードベースで対応すべきケースについては現状皆無です(https://github.com/languagetool-org/languagetool/blob/master/languagetool-language-modules/ja/src/main/java/org/languagetool/language/Japanese.java)。 先日、こちらにコードを追加しないと対応できなさそうな実例が出てきたので、それを考えてみようと思います。 以前grammer.xmlのプルリクエストを送った時は、パッケージ全体をビルドする必要がなかったので、ビルド環境がそろっていなかったことに気付いていませんでした。 ビルドにはmavenが必要なので、Debian wheezy上でapt-get install mavenを行ってbuild.shをたたいてみたのですが… JVMが古すぎると怒られてしまいました。ということでsid環境で試したところ、無事ビルドできました。続きは明日の東京エリアDebian勉強会でもやってみようと思います。

Published
Categorized as その他

KAKASIの写経とバグ修正

ここのところKAKASIのコードをいじっています。昔から再実装したいと考えていたのですが、コードを十分理解していない部分もあったので、目視でソースを見ながらエディタで書き写す「写経」的なことをやってみました。 写経の過程でいくつかの潜在的なバグが発見でき、本体にコミットすることもできました。内容は以下です。 ee2.c:E2alphabetのn[1].c1をゼロクリア g2.c:g2jにおける出力先の変数の間違い それ以外にもいくつかコミットがありますが、直接的なバグではないもの(即値の代入、不適切なマクロ定数の利用、実害のないロジックミス)ばかりです。 それ以外にも問題はありましたが、それらは修正に関して検討が必要なものだったので、Tracにチケットを作る程度にとどめています。 写経したKAKASIのコードも一応gitにおいてあります。ただし動作検証は行っていません。あくまで実験として行ったものです。環境変数で辞書のディレクトリを指定すればおそらく動作はするはずです。 作業に関して、ソースの可読性を高めるため以下のことを念頭に行いました。 K&Rスタイルの廃止 単純なマクロ定義だった定数をいくつかenum化 配列定数として埋め込んでいたいくつかのテーブルを外部ファイル化 文字エンコーディング定数でマジックナンバーだったものをマクロ化(dict.cのみ) CMakeの採用 特に文字エンコーディングがらみはかなりわかりやすくなったのではないかと思います。旧来のコードの一部を引用してみます。 ESC $ BというのはISO-2022-JPでG0をJIS X 0208に指定するためのエスケープシーケンスですが、これをマクロで以下のように書き換えました。 コメントがなくても意味が理解しやすくなったと思っています。まだ道半ばではありますが、ゆくゆくはfrom scratchなコードを起こしたいと思っています。

Published
Categorized as その他

安価なBluetoothヘッドフォン

ずいぶん前にAmazonで購入したBluetoothヘッドホンを長らく使っていました。MM-BTSH24と同等品だったと思うのですが、当時2500円ぐらいで購入した記憶があります。 メーカー純正品は結構高価なのですが、同等品が当時と同じぐらいの値段で売られているようです。 長く使っていたせいか、耳あて部分の片方が若干痛んできています。先週末にあきばお~でBSHSBE19(白)が税別1999円で販売されていたので、この機会に買ってみました。Amazonでも3000円程度で購入できるようです。 違いはいろいろありますが、どちらにも一長一短があります。BSHSBE19は新しい製品なので、以下のポイントが個人的に良いと思っています。 Bluetooth 4.0対応 マルチポイント(2デバイス対応) ノイズキャンセリング搭載 microUSBによる給電 一方MM-BTSH24の方がよかったなあ、と思う点は以下です。 クリップ型 個人的に耳は小さい方なので、カナル型よりもクリップ型である点は好みでした。必然的にノイズキャンセリング機能は載せられなくなってしまいますが、自分の用途だと主にジムで運動しながらというシチュエーションが多いので、むしろ環境音も聞こえた方が都合が良いです。 操作ボタンが多い 物理的サイズが大きい分、搭載されている操作ボタンが電源・再生ボタン、ボリュームボタンx2、選曲ボタンx2と多くあります。一方BSHSBE19は電源(スライドスイッチ)、マルチファンクションボタン、ボリュームボタンx2となっています。ボリュームボタンを長押しすると選曲ができるのですが、選曲を含めたあらゆる機能に音声ガイドがついているため、何か操作するたびに喋るのがちょっと煩わしいところです。 MM-BTSH24も使えなくなったわけではないので、当面は両方を使い分けることになりそうです。

Published
Categorized as その他

Internet ArchiveとDMCA改定

主にWebのアーカイブ(wayback machine)で有名なInternet Archiveが、MS-DOS用のゲームをブラウザ上でプレイできるよう公開した、というニュースがありました。 ねとらぼの記事(MS-DOSのゲーム約2400本がブラウザでプレイ可能に 海外サイト「InternetArchive」が公開)ではフェアユースの扱いという解説がありましたが、事態はもう少し複雑のようです。 インターネットアーカイブがMS-DOSゲーム2,400作品をブラウザ/Steamで提供 http://t.co/iGookjbMjS NamcoもWofensteinもアダルトもあって見切れん。デジタルミレニアム著作権法で公共図書館が例外になってよかった — Shinji R. Yamane (@shinjiyamane) 2015, 1月 6 Internet Archive、DMCAの改正を歓迎という記事で、Internet Archiveの行っていたソフトウェア、ビデオゲームのアーカイブが合法になったことについて触れています。 本家の声明Internet Archive Helps Secure Exemption To The Digital Millennium Copyright Act によると、「図書館のような公的機関に限って、もはや動作させることが困難な古い記録メディアや再生機器が必要な場合には、コピープロテクトなどを解除してアーカイブすることがゆるされる」という改正がなされたように読めます。Internet Archiveはアメリカの非営利公益法人であり、この対象となります。形体としては「インターネット図書館」と呼べるものです。 提供手段はWebブラウザ上での再生で、JSMESSというJavaScript実装のエミュレーターを利用しています。つまり誰でもゲームがプレイできる状態にあるわけですが、この点について法的にどうなのかという疑問を後藤さんがされていました。 @knok 収集することとそれを不特定多数に配布することとは直接は関係のない話のはずなので… — 後藤 浩昭 / GORRY (@gorry5) 2015, 1月 7 単純にコピーを配布する、という話であれば確かに問題があると思います。とはいえ、DMCAは先頭のDがデジタルであり、YouTubeのようなWeb上での配付に当たらない公開についての取り決めであったとなんとなく記憶していたので、改めて原文を確認してみました。 @gorry5 DMCAは電子データに関する取り決めなので、”webcasting”について明確に言及しているようです。videogameをブラウザで提供するのがwebcastingの範囲と判断されるのであれば合法となりそうです http://t.co/mDT5yiY8GS — NOKUBI Takatsugu野首貴嗣 (@knok) 2015, 1月 7 原文(pdf)には”webcasting”という表現がありました。Wikipediaの解説によると”Webcasting is… Continue reading Internet ArchiveとDMCA改定

Published
Categorized as その他

最近壊したもの

昨年は本厄年で、今年は後厄を迎えているのですが、ここ2か月ぐらいでかなりの勢いでモノを壊してしまったので、記録として残しておきます。 Bluetoothキーボード 以前購入した「ELECOM Bluetoothフルキーボード ゲーム用82キー 9台切替 ブラック TK-GMFBP043BK」です。ちょっと引っかけてしまい、キートップが一つとれてしまいました。このキーボードはパンタグラフタイプです。 対処 エレコムのサポートに問い合わせたところ、サポート期間半年以内であれば対応とのことで、新品を送ってきてくれました。故障したものと購入を証明できるものを送り返してくれとのこと。神様のような対応です。 Playstation VITA(初代3Gモデル) ジップロックに包んで水場で使っていたのですが、口をしっかりと締めていなかったため、するりとジップロックから本体がこぼれおち、がっつり水没させてしまいました。 1週間ほど陰干ししていたのですが、結局復帰することはありませんでした。 対処 水没に関しては通常修理対応しないということなので、中古で新しいモデルのWiFi版を購入しました。目下の課題は、壊れた本体とPS3との紐づけを外すことです。一応、サポートセンター経由でできるようです(未実施)。 Nintendo 3DS LL ジムで運動しているときに、うっかり落としてしまいました。LEDがついている右側のヒンジ部分を強打してしまい、破損してしまいました。上部液晶は通電はしているものの、映像は移りません。 対処 取り急ぎ、中古の本体を購入しました。現在修理依頼をしているところです。直ったら、最悪一人すれ違い用にしようと思っています。 Nexus 5 路上にて、胸ポケットにいれるつもりが位置を外してしまい、そのままアスファルトの地面に落下し、表面ガラスが大きく破損しました。液晶表示およびタッチ部分に問題はありませんでしたが、通知部にひびが集中して見づらい状況でした。 対処 LGモバイルサポートセンターに修理として出しました。修理中はしまっていたGalaxy Nexusを引っ張り出して我慢しましたが、今となってはほぼ使い物にならないレベルでした(メモリ、CPU不足)。 修理費用は2万9千円程度になりました。白ロムのNexus5 32GBが4万円程度で流通しているようですが、修理してもらうことにしました。1週間程度で修理は完了し、現在はソフトケースを取り付けて利用しています。 LCD-10000VH2 外でもECS Livaの開発に使えるようなディスプレイが欲しい、ということでUSB給電で動作する小型のLCDパネル「センチュリー 10.1インチHDMIマルチモニター PLUS ONE HDMI LCD-10000VH2」を購入しました。 いい加減に保管していたら、ディスプレイ部に荷重がかかりすぎてしまい液晶が割れてしまいました。 対処 修理に出すことを検討していますが、まだアクションは起こしていません。正直いろんなものが集中して壊れすぎてこちらの精神まで壊れそうです。 まとめ あらためてまとめてみると不幸続きにもほどがあることを実感できます。適切な取り扱いや、自衛対策をより進めてゆきます。

Published
Categorized as その他