アプリ用アイコンの作成

元画像の作成

  • Inkscape等でデザインする。
  • サイズはAndroid/iOSなら1024×1024。Windowsなら256×256以上 (1024×1024で作成してもよい)。
  • PNGファイル(32bit透過)にエクスポート。

Android/iOSアプリの場合

  • 下記オンラインツールで、必要なサイズの一括リサイズができる。
  • 画像ファイルをアプリのプロジェクトに設定する。

araishi.com

Windowsアプリの場合

  • 下記フリーソフトで、必要なサイズの一括リサイズとICOファイル化ができる。
  • ICOファイルをアプリのプロジェクトに設定する。

www.vector.co.jp

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にしたい。(待ちを発生させないように)
  • アナログスティックの動作について要調査