DBT_DEVICEREMOVECOMPLETE

バイスの削除が完了した時、DBT_DEVICEREMOVECOMPLETEが発生する。

DBT_DEVICEREMOVECOMPLETE event (Dbt.h) - Win32 apps | Microsoft Docs

DBT_DEVICEREMOVECOMPLETE.cppで、

とする。
USBデバイスを接続すると、

"DBT_DEVICEARRIVAL"が発生するが、
"DBT_DEVICEARRIVAL"が発生するが、

"DBT_DEVICEARRIVAL"が発生するが、
USBデバイスを抜くと、

"DBT_DEVICEREMOVECOMPLETE"が発生する。
"DBT_DEVICEREMOVECOMPLETE"が発生する。

"DBT_DEVICEREMOVECOMPLETE"が発生する。
タスクトレイからUSBデバイスの取り出しでも発生する。
で、その後に手動でUSBデバイスを抜いた時は"DBT_DEVNODES_CHANGED"だけ発生する。
だから、論理的な取り外しは"DBT_DEVICEREMOVECOMPLETE"であり、物理的な取り外しはまた違うんだなあ。
この辺の詳細はどうすれば取れるんだろ。取れるんかな。

Sample/winapi/DBT_DEVICEREMOVECOMPLETE/DBT_DEVICEREMOVECOMPLETE/src/DBT_DEVICEREMOVECOMPLETE at master · bg1bgst333/Sample · GitHub

DBT_DEVICEARRIVAL

バイスが接続され使用可能になった時、DBT_DEVICEARRIVALが発生する。

DBT_DEVICEARRIVAL event (Dbt.h) - Win32 apps | Microsoft Docs

DBT_DEVICEARRIVAL.cppで、

とする。
USBデバイスを接続すると、

これが紛れている
これが紛れている

これが紛れている。
抜いた時は、

これはいない
これはいない

これはいない。

Sample/winapi/DBT_DEVICEARRIVAL/DBT_DEVICEARRIVAL/src/DBT_DEVICEARRIVAL at master · bg1bgst333/Sample · GitHub

DBT_DEVNODES_CHANGED

WM_DEVICECHANGEで、さらにwParamがDBT_DEVNODES_CHANGEDの時は、デバイスノードが変更になった時。

DBT_DEVNODES_CHANGED event (Dbt.h) - Win32 apps | Microsoft Docs

DBT_DEVNODES_CHANGED.cppで、

wParamがDBT_DEVNODES_CHANGEDなら、MessageBoxで"DBT_DEVNODES_CHANGED"、そうでないなら、MessageBoxで"Other"と表示。
USBデバイスを挿した時、

いくつか出てくる
いくつか出てくる

いくつか出てくる。
待ってるとさらに出てきたりする。
USBデバイスを抜いた時も、

いくつか出てくる
いくつか出てくる

いくつか出てくる。
この時は1つだが、このあとMessageBoxを閉じたらさらに出てきた。

Sample/winapi/DBT_DEVNODES_CHANGED/DBT_DEVNODES_CHANGED/src/DBT_DEVNODES_CHANGED at master · bg1bgst333/Sample · GitHub

http.createServer

http.createServerで、サーバソケットを作成する。

HTTP | Node.js v16.13.2 Documentation

リクエストやレスポンスを操作するrequestListenerを渡す以外に、optionsも渡せるみたいだが、これは難しそうなので、戻り値の中身を見てみる。

console.logでserverをそのまま出力。

こんな感じでいっぱい出力される
こんな感じでいっぱい出力される

サーバ起動して、アクセスするとこんな感じでいっぱい出力された。

$ vi http.js
$ node http.js
Server {
  maxHeaderSize: undefined,
  insecureHTTPParser: undefined,
  _events: [Object: null prototype] {
    request: [Function (anonymous)],
    connection: [Function: connectionListener]
  },
  _eventsCount: 2,
  _maxListeners: undefined,
  _connections: 0,
  _handle: null,
  _usingWorkers: false,
  _workers: [],
  _unref: false,
  allowHalfOpen: true,
  pauseOnConnect: false,
  httpAllowHalfOpen: false,
  timeout: 0,
  keepAliveTimeout: 5000,
  maxHeadersCount: null,
  maxRequestsPerSocket: 0,
  headersTimeout: 60000,
  requestTimeout: 0,
  [Symbol(IncomingMessage)]: [Function: IncomingMessage],
  [Symbol(ServerResponse)]: [Function: ServerResponse],
  [Symbol(kCapture)]: false,
  [Symbol(async_id_symbol)]: -1
}
Local Server Listen

Serverクラスのオブジェクトということがわかる。

Sample/nodejs/http/createServer/src/http at master · bg1bgst333/Sample · GitHub

RelativeLayout

Xamarin.Androidなら、RelativeLayoutをそのまま使える。

RelativeLayout Class (Android.Widget) | Microsoft Docs

AndroidJava版のRelativeLayoutのSampleプログラムを、Xamarinでも作ってみる。
activity_main.axmlで、

strings.xmlで、

とすると、

Debugビルドならエミュレータ、Releaseビルドなら実機で動く。
Debugビルドならエミュレータ、Releaseビルドなら実機で動く。

Debugビルドならエミュレータ、Releaseビルドなら実機で動く。

Sample/xamarin/RelativeLayout/RL at master · bg1bgst333/Sample · GitHub

var

mutable(変更可能)な変数はvarで宣言する。

Kotlin プログラミング言語を学ぶ  |  Android デベロッパー  |  Android Developers
とほほのKotlin入門 - とほほのWWW入門

aは型を指定して、後で値を代入。
bは型の指定に加えて、値を指定して初期化。
cは型は指定しないが、値を指定して初期化。
そしてどれもその後に別の値を代入。

どれも値を変更できている
どれも値を変更できている

どれも値を変更できている。
(それにしてもargsの警告、前回は出なかったのになあ・・・。)

Sample/kotlin/var/var/src/var at master · bg1bgst333/Sample · GitHub

println

Rustは、改行付き標準出力をprintlnで行うのだが、このprintlnは関数ではなくてマクロ。
(呼び出す時に後ろに'!'を付けるのはマクロの特徴)

println in std - Rust
[Rust] 文字列のフォーマット指定(println! / format!) - Qiita

"{}"がプレースホルダーなのはC#っぽい・・・。
n番目とか、ラベルを付けて、置き換えるとか出来る。

$ vi println.rs
$ cat println.rs
fn main(){
    println!("ABC {}", "DEF");
    println!("x = {0}, y = {1}, z = {2}", 10, 20, 30);
    println!("f = {first}, s = {second}", first = "aaa", second = "bbb");
}
$ rustc println.rs
$ ls
println  println.rs
$ ./println
ABC DEF
x = 10, y = 20, z = 30
f = aaa, s = bbb
$

こうなる。

Sample/rust/println/println/src/println at master · bg1bgst333/Sample · GitHub