2018/10/27

[vscode]構造体メンバの候補一覧keyはselectNext/PrevSuggestion

Visual Studio CodeをVirtualBoxで立ち上げたUbuntu18.04上で使っている。
Linuxで慣れたエディタがないので助かるのだが、キーバインドが分からずに困っている。
WindowsではAutoHotKeyを動かしたままなので、どうも思った操作ができないようなのだ。


最近困っていたのが、構造体メンバの候補リストが表示されているときに矢印キーの上下で候補が選択できないこと。
デフォルトではできたのかもしれないが、いろいろ変更していたせいか、上下の矢印キーを押すとエディタ画面の方のカーソルが移動してしまうのだ。


あれこれ試した結果、該当する名前は「selectNextSuggestion」「selectPrevSuggestion」だった。
デフォルト値を見ておこう。

image

ああ、デフォルトでは普通のキーに割り当てられているのか。。。
しかし、こんなキーを変更した覚えがないのだが、どの名前がどの機能か分からないときに当てずっぽうで変更していたのかもしれん。


あらゆるキーをカスタマイズできそうな気配はするのだが、名前が分からんとカスタマイズのしようがないな。
調べ方を覚えたいものだ。

2018/10/15

[c/c++]sizeof忘れでコンパイルエラーにならなかった(当たり前だけど)

なぜか、malloc()だか、そのfree()だかわからないけど、エラーが出ていた。
サイズが足りないのにアクセスしたような感じのエラーだ。


確保するサイズは、sizeof()で求めていた。
TLVじゃないけど、Length + Valueをいくつかつなげたようなサイズを確保したかったのだ。

Lengthは1byte分で、uint8_t型。
その箇所は、uint64_t型をValueに取りたかったので、こんな感じで書いていた(つもりだった)。


int length = sizeof(uint8_t) + sizeof(uint64_t);


しかし、私は最初の方にsizeofを書き忘れていたのだった。。。

int length = (uint8_t) + sizeof(uint64_t);


驚いたことに、これがコンパイルエラーにはならないのだ。
-Wや-Wallつけてるのに、warningも出ない。

01: #include <stdio.h>
02: #include <stdint.h>
03: 
04: int main(void)
05: {
06:     int length = (uint8_t) + sizeof(uint64_t);
07:     printf("len=%d\n", length);
08: }


なんとなく想像がつくだろうが、この結果は「8」だ。
"+sizeof(uint64_t)"をuint8_tでキャストしたことになったのだろう。


なかなか気付きませんでしたなぁ。。。

2018/10/06

[win10][wsl]defender firewallを設定する

Windows10 1809がリリースされたので、アップデートした。

https://docs.microsoft.com/en-us/windows/whats-new/whats-new-windows-10-version-1809#windows-defender-firewall-now-supports-windows-subsystem-for-linux-wsl-processes

どうやら、Windows Defender FirewallにWSLのプログラムを設定できるらしい。
私はセキュリティに強くないので、Windows Firewall Controlを使って「許可していないアプリは禁止」にしているのだが、WSLの場合はpicoとかいうプロセスがアクセスして、これがどうやっても許可させることができなかったのだ。


やり方は、こちら。
python2.7のIN方向を許可するサンプルが載っていた。

https://docs.microsoft.com/en-us/windows/wsl/release-notes#build-17627-skip-ahead

netsh.exe advfirewall firewall add rule name=wsl_python dir=in action=allow program="C:\users\<username>\appdata\local\packages\canonicalgrouplimited.ubuntuonwindows_79rhkp1fndgsc\localstate\rootfs\usr\bin\python2.7" enable=yes

単純に、Windowsから見たファイルパスを登録するだけのようだ。
残念ながらWindows Firewall Controlは*.exeのようなものしか登録できないようだ。
「セキュリティが強化されたWindows Defender ファイアウォール」(長いよ...)だと追加できるようだが、local/packages以下がダイアログから見えなかったので、Explorerでたどったパスをコピペで登録させた。


まず/usr/bin/wgetを登録。
うん、いける。

では、普段よく使う/usr/bin/aptを登録・・・したのだが、これが通信できない。
拒否しているタイミングを見計らってps auxしてみたところ、/usr/lib/apt/httpというプロセスが立ち上がっていた。
そいつを許可してやるとaptが通るようになった。
やれやれ。


しかし、これは使うのが面倒だ。
当面はWSL使うときだけFirewallを許可する方が楽そうだ。

と、ふとWindows Firewall Controlの遮断ログを見ると、先ほどの/usr/lib/apt/httpが出ているじゃないか!
そうか、picoが前面に出ていたものが、各ファイルになったのだな。
そして、Windows Firewall Controlは自分でルールを追加する場合には*.exeみたいなファイルしか設定できないものの、ログから許可設定するのはOKだった。
これなら便利ですな。