nRF51822搭載 Bluefruit LE Sniffer
スイッチサイエンスで販売されているこれ。
nRF51822搭載 Bluefruit LE Sniffer - スイッチサイエンス
これを Debian で使うに際してのインストールメモ。Debian 9.9x64 で動かしました。
ダウンロードとインストール
ここから nRF Sniffer - Downloads - nordicsemi.com
「nRFSniffer v2 - Multi-platform」をダウンロードしてunzip して
/usr/lib/x86_64-linux-gnu/wireshark/extcap/
にコピー。
$ unzip nrfsniffer200beta312oct20181c2a221.zip $ sudo cp -r \ extcap/nrf_sniffer.py extcap/SnifferAPI/ \ /usr/lib/x86_64-linux-gnu/wireshark/extcap/ $ sudo chown +x /usr/lib/x86_64-linux-gnu/wireshark/extcap/nrf_sniffer.py $ sudo /usr/lib/x86_64-linux-gnu/wireshark/extcap/nrf_sniffer.py No arguments given! //=> OK
自宅向けdnsmasq
dnsmasqを自宅向けに使うメモ。
Uninstall
NetworkManagerとかAvahiとかは全部消す。
Debianの非デスクトップインストールあたりから始めよう。
/etc/network/interfaces
static-IPに設定。
auto lo iface lo inet loopback auto enp2s0 iface enp2s0 inet static address 192.168.0.8 netmask 255.255.0.0 network 192.168.0.0 gateway 192.168.0.1 dns-search homenetwork.local
/etc/resolv.conf
自分→外 で設定。
dnsmasq がリレーの為に resolv.conf を参照するが、自分のIPの nameserver はスキップする。
domain homenetwork.local search homenetwork.local. nameserver 192.168.0.8 nameserver 8.8.8.8 search homenetwork.local
/etc/dnsmqsq.conf
listen-address=192.168.0.8 # listen address for DNS interface=enp2s0 # listen interface for DHCP no-hosts # skip /etc/hosts #no-resolv # skip resolv.conf ... skipすると 8.8.8.8 へリレーしなくなる dhcp-leasefile=/var/lib/misc/dnsmasq.leases ipset=/yahoo.com/google.com/vpn,search domain=homenetwork.local expand-hosts dhcp-range=192.168.0.100,192.168.0.199,255.255.0.0,12h dhcp-option=option:netmask,255.255.0.0 dhcp-option=option:router,192.168.0.1 dhcp-option=option:dns-server,192.168.0.8 dhcp-option=option:domain-search,homenetwork.local # 固定IP address=/dnsmasq.homenetwork.local/192.168.0.8 # DHCPによる固定IPの貸し出し, ホスト名を指定 dhcp-host=xx:xx:x:x:x:x,www,192.168.0.9,12h # DHCPによる動的IPの貸し出し, ホスト名を指定 dhcp-host=xx:xx:x:x:x:x,www,,12h
その他は dnsmasq インストール直後の /etc/dnsmasq.conf を参照しよう。
RenderTextureをOpenCvSharp,Matに取り込む
一旦 Texture2D を経由させる必要があるようです。
かつ、その経由のさせ方がトリッキーです。
private RenderTexture _renderTexture = new RenderTexture(256, 256, 0, RenderTextureFormat.ARGB32); void Update() { Texture2D tex = new Texture2D(_renderTexture.width, _renderTexture.height, TextureFormat.RGB24, false, false); // 現在のフレームバッファを取り込みたい RenderTexture に切り替えて RenderTexture.active = _renderTexture; // 取り込んで tex.ReadPixels(new UnityEngine.Rect(0, 0, tex.width, tex.height), 0, 0); tex.Apply(); // 戻す RenderTexture.active = null; // Matに取り込む Mat srcMat = new Mat(tex.height, tex.width, MatType.CV_8UC3, tex.GetRawTextureData()); }
VMWareWorkstationを使ってwindows から docker を使う
普段 VMWareWorkstation を使っていて VirtualBox や Hyper-V を使いたくない人向けです。
- Windows Professioanl であれば Hyper-V が使えるのでそっちの方が良いでしょう。
- VirtualBoxを使っている人は Docker Toolbox を使いましょう。
参照元:
- https://superuser.com/questions/1195676/is-it-possible-to-have-docker-running-inside-of-vmware
- https://chocolatey.org/install
1. Chocolatey を入れる
管理者権限の cmd.exe から
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
2. docker, docker-machine, docker-machine-vmwareworkstation を入れる
続けて管理者権限の cmd.exe から
choco install -y docker choco install -y docker-machine choco install -y docker-machine-vmwareworkstation
3. VMWareWorkstationにdocker-vmを作る
cmd.exe から
docker machine --native-ssh create -d vmwareworkstation default
4. dockerコマンドをdocker-vmへ向ける設定
普段使いが cmd.exe であれば cmd.exe から
docker-machine env
で表示される最後の行を実行するようにします。
@FOR /f "tokens=*" %i IN ('"C:\ProgramData\chocolatey\lib\docker-machine\bin\docker-machine.exe" env') DO @%i
eval $(docker-machine env)
を実行するか ~/.profile にでも書いておきましょう。
5. VMの設定を変更する
VMは %USERPROFILE%.docker\machine\machines\default に作られます。
VMWareWorkstationのGUIには登録されないので必要なら default.vmx ファイルをドロップして追加します。
デフォルトでは
- メモリ: 1GB
- CPU: 1コア
で構成されているので、適宜変更します。
6. VMの共有フォルダ設定を変更する
デフォルトでは C:/Users が Users (VMからは /mnt/hgfs/Users) として設定されています。
今回の方法でインストールした場合、Windowsのフォルダをhgfs経由で参照するパス変換がされていないので、VM自体を調整します。
調整しなくても以下のように指定することはできます。
$ docker run -it --rm -v //mnt/hgfs/Users://mnt:ro busybox ls //mnt <C:/Users/ の内容が ls される>
6.1. VMの共有フォルダ設定を追加する
ドライブCを c (小文字)で追加します。
ドライブDを Volumeオプションに指定する場合は、ドライブDを d (小文字)で追加します。
6.2 VMにシンボリックリンクを作る
default VMを開くと /mnt/hgfs に Users/, c/ (, d/) がある筈です。
/mnt/hgfs/c がドライブC, /mnt/hgfs/d がドライブD です。
これらをルートから参照できるようにシンボリックリンクを張ります。
$ cd / $ ln -s /mnt/hgfs/c / $ ln -s /mnt/hgfs/d /
6.3 Volumeオプションで指定してみる
これで /c/Users/ の形(MinGW-bashのパス指定と同じ)で指定できるようになります。
MinGW-bash からであれば以下のように記述できます。
$ docker run -it --rm -v //c/Users/suzumura://mnt:ro busybox ls //mnt <C:/Users/suzumura/ の内容が ls される> $ docker run -it --rm -v //d://mnt:ro busybox ls //mnt <D:/ の内容が ls される>
全てのパス指定を // で始めているのは、MinGW-bash のパス文字列変換を避ける記述です。
Enjoy !
dynamic link libraryを実行ファイルのそばに配置する
Windowsの場合EXEと同じ場所にDLLを置けば、PATHが通って無くてもそのDLLが動的リンクされます。
Macの場合はどうするかのメモ。
DYLD_LIBRARY_PATH や DYLD_FALLBACK_LIBRARY_PATH を指定する余地があるなら不要な話です。
例えばopenCVのdylibをリンクしようとしている場合、otoolでみると以下の様になります。
$ otool -L sample sample: lib/libopencv_core.3.0.dylib (compatibility version 3.0.0, current version 3.0.0) lib/libopencv_imgcodecs.3.0.dylib (compatibility version 3.0.0, current version 3.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
これを
$ install_name_tool \ -change lib/libopencv_core.3.0.dylib @executable_path/libopencv_core.3.0.dylib \ -change lib/libopencv_imgcodecs.3.0.dylib @executable_path/libopencv_imgcodecs.3.0.dylib \ sample $ otool -L sample sample: @executable_path/libopencv_core.3.0.dylib (compatibility version 3.0.0, current version 3.0.0) @executable_path/libopencv_imgcodecs.3.0.dylib (compatibility version 3.0.0, current version 3.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
とすることで「sample と同じ場所にある libopencv_*.dylib」になります。
・・・しかし上の場合は libopencv_imgcodecs.3.0.dylib が libopencv_core.3.0.dylib に依存しています。
$ otool -L libopencv_imgproc.3.0.dylib libopencv_imgproc.dylib: lib/libopencv_imgproc.3.0.dylib (compatibility version 3.0.0, current version 3.0.0) lib/libopencv_core.3.0.dylib (compatibility version 3.0.0, current version 3.0.0) #<=コレ /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
そこでこれらも再帰的に @executable_path に置き換えます。
$ install_name_tool \ -change lib/libopencv_imgproc.3.0.dylib @executable_path/libopencv_imgproc.3.0.dylib \ libopencv_imgproc.3.0.dylib $ otool -L libopencv_imgproc.3.0.dylib libopencv_imgproc.3.0.dylib: lib/libopencv_imgproc.3.0.dylib (compatibility version 3.0.0, current version 3.0.0) @executable_path/libopencv_core.3.0.dylib (compatibility version 3.0.0, current version 3.0.0) /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
再帰的に処理する部分が厄介なので「カレントディレクトリに集めておいてまとめて更新」するスクリプトを書きました。
https://gist.github.com/suzumura-ss/01d6e0f42234d3110ea1
Ubuntu12でObj-Cを叩いてみる
多少癖があったのでメモ。
このあたりを参考に...
コンパイル
以下のコードで実験。
#import <Cocoa/Cocoa.h> @interface MyClass : NSObject - (void) getMessage; @end @implementation MyClass - (void) getMessage { @try { NSLog(@"Hello"); @throw [[NSException alloc] initWithName:@"myException" reason:@"myReason" userInfo:nil]; } @catch (NSException* e) { NSLog(@"%@", e); } } @end int main(int argc, char* argv[]) { id obj = [MyClass alloc]; [obj getMessage]; return 0; }
$ gcc test.m -o test -lobjc -lgnustep-base \ -I/usr/include/GNUstep/ \ -fconstant-string-class=NSConstantString \ -D_NATIVE_OBJC_EXCEPTIONS -fobjc-exceptions
- -lgnustep-base : NSObject系列を使うために。
- -fconstant-string-class=NSConstantString : @"string"と書くために。
- -D_NATIVE_OBJC_EXCEPTIONS -fobjc-exceptions : @try/@catchを使うために。
sakuraVPSにrubyを入れたらnet/httpsが使えなかった件
もちろん
$ sudo yum install openssl-devel
済みです。
が、/usr/lib64/pkgconfig/ に問題があって
$ pkg-config --libs libssl -Wl,-z,relro -L/usr/lib6464 -lssl -lcrypto -ldl -lz
lib6464 って何よ…(´・ω・`)
libssl.pc, libcrypto.pc, openssl.pc が
libdir=${exec_prefix}/lib6464
になってました。