Windowsのファイルアクセス監視ツール

例えば、あるプロセスのファイル入出力をモニターしたいとかに使えるツール。

SoftPerfect File Access Monitor

forest.watch.impress.co.jp

使い方

  • 起動するとログイン画面になるが、ローカルのPCを監視するならホスト名はデフォルトの「localhost」、パスワードは空のままでOK。
  • 左ペインで選択したフォルダやファイルへのアクセスログが右ペインに表示される。
  • Chronological Viewではシステム全体へのアクセスログが時系列で表示される。
  • いずれも、操作、ユーザー、プロセス、時刻によって絞り込み可能。

C#のイベント処理

C#のイベント処理の書き方、なんか珍妙ですぐ忘れるのでメモ。

イベントの型の定義

// イベント引数の型
public class HogeEventArgs : EventArgs
{
    public string HogeData;
}
// イベントの型
public delegate void HogeEvent(object sender, HogeEventArgs e);

イベントを出す側

public class HogeSender
{
    // イベントの定義
    public event HogeEvent onHoge;
    
    private piyo()
    {
        // イベント引数の作成
        HogeEventArgs args = new HogeEventArgs ();
        args.HogeData= "ああああ";
        // イベント発行
        onHoge(this, args);
    }

イベントを受ける側

public class HogeReceiver
{
    private HogeSender hogeSender;

    public HogeReceiver()
    {
        hogeSender = new HogeSender();

        // イベントハンドラの設定
        hogeSender.onHoge += onHoge;
    } 

    // イベントハンドラの実装
    private void onHoge (object sender, HogeEventArgs e)
    {
        // ここにイベント発生時の処理
    }
}

ESP8266のMQTTライブラリ

今さらだけど、ESP8266で使うMQTTライブラリ乱立してて困る。

【注意】以下の記述は憶測や噂話や筆者の主観を含みます。

adafruit/Adafruit_MQTT_Library

  • Adafruit(エイダフルーツ)のやつ。
  • わりとよく使われてるのを見かける。
  • Arduinoにはありがちだが、同期待ちなAPIなのがモニョっとする。

knolleary/pubsubclient

  • これもわりとよく使われてる。
  • GitHubでのfork数とかはこっちの方がずっと多い。
  • Arduinoにはありがちだが、同期待ちなAPIなのがモニョっとする。

tuanpmt/esp_mqtt

  • あんまし使ってる人を見かけない。
  • Arduino用ライブラリではない。

marvinroger/async-mqtt-client

  • あんまし使ってる人を見かけない。
  • ぱっと見、シュッとしてる印象は受ける。(しらんけど)
  • 通信が非同期処理なところが好ましい。

とりあえず

とりあえず使ってみるなら knolleary/pubsubclient がいいかなと思ってる。

西のローマ、東のギリシャ

地中海の西部でローマとカルタゴポエニ戦争を戦っていたころ、東部にはアレクサンドロス大王の後継者たちが建てたギリシャ系王朝(アンティゴノス朝セレウコス朝プトレマイオス朝)が割拠していた。いわゆるヘレニズム三国だけど、どういうわけかヘレニズム三国がローマ史とのからみで語られることは少ない。

地中海世界の西の覇を争うローマ(青)とカルタゴ(茶色)、東に割拠するアンティゴノス朝(紫)、セレウコス朝(黄色)、プトレマイオス朝(緑)
図: Wikipedia アンティゴノス朝 より

f:id:licheng:20190101151452p:plain:w500

もっとも、共和政ローマプトレマイオス朝の最後のからみだけは超有名。主役はローマのカエサルアントニウスオクタウィアヌス(アウグストゥス)と、プトレマイオス朝最後の女王クレオパトラ地中海世界を東西に二分して争い、最後はオクタウィアヌスが勝利して地中海世界をまるっと支配するローマ帝国が成立した。

地中海世界の西に拠ったオクタウィアヌス(緑)と東に拠ったアントニウスクレオパトラ同盟(紫)
図: Wikipedia 西ローマ帝国 より

f:id:licheng:20190101151511p:plain:w500

そう考えるとローマ帝国の全盛期ってローマ的西方世界とギリシャ的東方世界が一時的に統一されてたにすぎないのかもしれない。ローマ帝国が全盛期を過ぎるとまた東西に分裂してしまったわけで。

西ローマ帝国(赤)はローマ的西方世界を、東ローマ帝国(紫)はギリシャ的東方世界を治めた。
図: Wikipedia 西ローマ帝国 より

f:id:licheng:20190101151532p:plain:w500

言語学ネタ (印欧語族の古代語)

性・数・格の一致

インド・ヨーロッパ語族に広くみられる「性・数・格の一致」というのは、乱暴に言うと「韻を踏む」ことだと思ってる。例えば、古代ギリシャ語の例。

f:id:licheng:20190101140012p:plain:w600

サンスクリット語と漢文

サンスクリット語の複雑怪奇な動詞の変化と比べると、漢文のなんとシンプルなことか!

f:id:licheng:20190101140039p:plain:w600

ラテン語と英語

ラテン語って二千年も前の古代語なのに、ところどころ英語から意味が類推できる。日本人にとっての漢文のようなものかもしれない。しらんけど。

f:id:licheng:20190101140147p:plain:w600

定冠詞+分詞

定冠詞+分詞で「~する人」を表す用例は英語でもありますね。英語だと過去分詞が多いかな。古代ギリシャ語の分詞は種類と変化多すぎて覚えるのたいへん。

f:id:licheng:20190101140203p:plain:w600

PS2コントローラをArduino系ボードで使う

やりたいこと

ワイヤレスのプレステ2コントローラおよびその互換品 (以下、PS2コントローラ) をArduinoマイコンボードにつないで使いたい。たとえばロボットを操縦するコントローラとして。

インターフェース

PS2コントローラはSPIインターフェースで通信できるらしい。GPIOでパタパタして通信してる例も見られる。

とりあえず

上記のArduino-PS2X (PS2Xlib)を、GR-CITRUSで使ってみた。GR-CITRUSはRXマイコンベースのArduinoマイコンボードで、Arduino IDEからフォークした独自のIDE for GRが使用できる。しかし、PS2Xlibのサンプルスケッチをビルドしてみたところ、エラーが発生。アーキテクチャ依存部分のエラーだったので、修正版を本家からフォークした。
github.com
デジットで売ってた「無線コントローラキット」(どう見てもPS2コントローラで、受信器からジャンパ線が引き出されている)をGR-CITRUSに接続して動作を確認。アナログスティックの入力が上手くとれないが、いちおう動いた。
f:id:licheng:20190101165823j:plain:w500

ホビーロボット界隈でよく使われるPS2コントローラ互換品としては、ヴイストンのVS-C3がある。受信器が小型なのでロボットに組み込むには有利。

課題

  • SPIインターフェースを使用したライブラリを自作したい
  • なるべく非同期なAPIにしたい。(待ちを発生させないように)
  • アナログスティックの動作について要調査

IoTマニ車

大晦日ハッカソン2018の成果です。

今日はこのマニ車のIoT対応をやります。マニ車を回した回数をWiFiでインターネット上のサーバーに送り、パソコンやスマホ等のブラウザに通知して表示させたいと思います。
f:id:licheng:20181231173648j:plain:w500

WiFiマイコンはおなじみのESP8266。ロータリーエンコーダ的なものは機構を作るのがめんどうなので、マニ車の回転の検出はジャイロセンサを使います。手持ちのジャイロセンサは、MPU-6050の上位互換のMPU-9250とLSM6DS3。どっちも定番のICですが、今回はMPU-9250を使用します。
f:id:licheng:20181231173705j:plain:w500

どっかでもらったデジットハッカソンの成果発表のときにいただいたダイセンの基板詰め合わせの中にちょうどいいサイズの基板があったのでこれに部品を載せて配線します。
f:id:licheng:20181231173727j:plain:w500

太い熱収縮チューブで基板ごとパックしたかったのですが、手持ちがないので代わりにマスキングテープでミイラパッケージ。
f:id:licheng:20181231173943j:plain:w500

お経のかわりに回路を納めたら回転しにくくなりました。鎖についた分銅に比べて中心部の質量が大きくなったせいと思われます。バッテリーを小さいものにかえて分銅側に固定することで改善しました。
f:id:licheng:20181231173957j:plain:w500

紙のお経を納めるスペースがなくなったので、ESP8266のROMに般若心経を納めました。volatile付けてもコードから参照しなかったら消されてしまったので、起動時にfor文で読むようにしました。
f:id:licheng:20181231174110p:plain:w500

IoTのバックエンドには以前使ったことのあるMilkcocoaを使いました。でももうちゃんと保守されてない感じですね。Milkcocoaは実体としてはMQTTブローカーサービスのようなので、次はHerokuあたりで自前でやってみたいと思います。MQTTブローカーはMosquittoとかいうのを使えばいいのかな? (しらんけど)

じっさいに動かした動画。マニ車を回した回数が、パソコン、スマホタブレットのブラウザにリアルタイムに表示されます。ちょっと回転の検出が甘いですが。


IoTマニ車