2022/6/10

bookmarks: UVC Gadget

就是linux 把自己當作是 webcam,所以自己的 usb 要 run device mode,而且上 UVC Gadget.
ref:

2022/6/6

memo - gdb, argument and source location

大概就是...
gdb --args executablename arg1 arg2 arg3
進入 gdb 後,用指令 directory 指定source code 所在位置 (absolute path)
gdb> directory /data/

2022/6/1

Read mender-store with python code

讀取 mender-store 的內容...
(lmdb) charles-chang@e431focal:~$ python
Python 3.10.4 (main, Mar 31 2022, 08:41:55) [GCC 7.5.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import lmdb
>>> env = lmdb.open('./mender-store',subdir=False)
>>> txn = env.begin()
>>> myList = [ key for key, _ in txn.cursor()]
>>> print(myList)
[b'artifact-name', b'artifact-provides', b'authtoken']
>>> 
>>>print(txn.cursor().get(b'artifact-name'))
b'1.0.1.30rc1-deltafrom-1.0.0.28patch3'
>>> print(txn.cursor().get(b'artifact-providese'))
None
>>> print(txn.cursor().get(b'artifact-provides'))
b'{"rootfs-image.checksum":"457d85413d8dbdb2c278b4740493efb3712290f36668a919dd4297ae60ca6157","rootfs-image.version":"1.0.1.30rc1"}'

另外,lmdb 的 put/get :
>>> import lmdb
>>> env = lmdb.open('./testlmdb')
>>> txn = env.begin(write=True)
>>> txn.put(key=b'1',value=b'abc')
True
>>> txn.put(key=b'aaa',value=b'{a=1},{b=2}')
True
>>> txn.commit()

>>> txn = env.begin()
>>> for key,value in txn.cursor():
...     print(key,value)
... 
b'1' b'abc'
b'aaa' b'{a=1},{b=2}'


所以寫一個小程式,可以簡單create 這個 key-value 的 lmdb data file: 是用lmdb 的 code。

這樣,只要:
./mydb ./mender-store artifact-provides "{\"rootfs-image.checksum\":\"457d85413d8dbdb2c278b4740493efb3712290f36668a919dd4297ae60ca6157\",\"rootfs-image.version\":\"1.0.1.30rc1\"}"
就可以新增 value
然後 mylist 就是跟 python 一樣的function,列出 db 中所有 key-value record.

2022/5/27

bookmark: finding best learning rate

很有趣,用同一個起始狀太,變更 learning rate,算出 loss 變更的量。
這樣就能找出最佳的 learning rate。

2022/5/26

tensorboard in colab

在 colab 中使用 tensorboard,就是用 colab 的 shell command 啟動tensorboard ..
%load_ext tensorboard
...
...
%tensorboard --logdir {logdir} --reload_interval 1
之後,tensorboard render web page 就會 show 在colab 中,這一行code 的 output 區域中。
之後,任何得的 logdir 更新,都是在這個output section 中的 tensorboard web page 中,手動按下 "refresh" 來更新。

可以 run 這一個 keras example 看看。

2022/5/17

docker network

docker container 的 network 是可以選擇的。
可以選擇哪些 container 在同一個 LAN 中。

先列出 所有 network (LAN)
$docker network ls

NETWORK ID     NAME                             DRIVER    SCOPE
3b445b1ff6ca   bridge                           bridge    local
1cb8711ba147   compose_default                  bridge    local
bc0cb939c115   dm1cloud_dockercompose_default   bridge    local
3bab1858d569   dockers_default                  bridge    local
用 inspect 看 container,會顯示他在那一個 network..

然後啟動新 container 時,就可以用 --network dm1cloud_dockercompose_default 指定在某個 network 中。
同一個 network 中的 container,可以用 container name 取代IP。例如
docker run -network dm1cloud_dockercompose_default ping mongo-server mongo
其中 mongo-server 就是在 dm1cloud_dockercompose 中的一個 container。

2022/5/11

mongodb install

安裝依照官網: 一般的動作:
  1. 加 pgp key
  2. 加sources.list
  3. apt update
  4. apt install
裝完 default config 會在: /etc/mongod.conf
config 裡面的 ..
  • storage: /var/lib/mongodb
  • log: /var/log/mongod/mongod.log
  • net: 127.0.0.1:27017
apt 會安裝到 systemd : mongod.service


結果 在 pi3 上,用 debian 64bit 的 apt 安裝,service run fail。

單純 run docker mongo:
$ docker run -it -p 27017:27017 -v ~/mongoinstall_arm64:/mongoinstall mongo

WARNING: MongoDB 5.0+ requires ARMv8.2-A or higher, and your current system does not appear to implement any of the common features for that!
  see https://jira.mongodb.org/browse/SERVER-55178
  see also https://en.wikichip.org/wiki/arm/armv8#ARMv8_Extensions_and_Processor_Features
  see also https://github.com/docker-library/mongo/issues/485#issuecomment-970864306

需要參考mongodb under raspbian64,用另一版的 mnogodb
依照這個網頁說明,放到 mongoinstall_arm64

需要 curl, libssl-dev

所以也 用 4.4.14 看看
$ docker run -it -p 27017:27017 -v ~/mongoinstall_arm64:/mongoinstall mongo:4.4.14
Unable to find image 'mongo:4.4.14' locally
4.4.14: Pulling from library/mongo
d4ba87bb7858: Already exists 
2905e503bba5: Already exists 
7f2fbfedcbbd: Already exists 
fed819c90351: Already exists 
8c9476a7638d: Already exists 
443796fcd1a6: Pull complete 
cf4ff181511c: Pull complete 
0d3b82484af2: Pull complete 
546d4133b910: Pull complete 
7ccc69fa7857: Pull complete 
Digest: sha256:a7c77e3310e2c21cb043d2db4c46968a05d43c77644207d7d8b072d6049bb119
Status: Downloaded newer image for mongo:4.4.14

WARNING: MongoDB 5.0+ requires ARMv8.2-A or higher, and your current system does not appear to implement any of the common features for that!
  see https://jira.mongodb.org/browse/SERVER-55178
  see also https://en.wikichip.org/wiki/arm/armv8#ARMv8_Extensions_and_Processor_Features
  see also https://github.com/docker-library/mongo/issues/485#issuecomment-970864306

{"t":{"$date":"2022-05-16T07:55:40.604+00:00"},"s":"I",  "c":"CONTROL",  "id":23285,   
"ctx":"main","msg":"Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'"}
{"t":{"$date":"2022-05-16T07:55:40.613+00:00"},"s":"W",  "c":"ASIO",     "id":22601,   
"ctx":"main","msg":"No TransportLayer configured during NetworkInterface startup"}
{"t":{"$date":"2022-05-16T07:55:40.615+00:00"},"s":"I",  "c":"NETWORK",  "id":4648601, 
"ctx":"main","msg":"Implicit TCP FastOpen unavailable. If TCP FastOpen is required, set tcpFastOpenServer, tcpFastOpenClient, and tcpFastOpenQueueSize."}
{"t":{"$date":"2022-05-16T07:55:40.618+00:00"},"s":"I",  "c":"STORAGE",  "id":4615611, 
"ctx":"initandlisten","msg":"MongoDB starting","attr":{"pid":1,"port":27017,"dbPath":"/data/db","architecture":"64-bit","host":"b2c120e0f9a6"}}
{"t":{"$date":"2022-05-16T07:55:40.624+00:00"},"s":"I",  "c":"CONTROL",  "id":23403,   
"ctx":"initandlisten","msg":"Build Info","attr":{"buildInfo":}
..
可以 run 起來。
所以用 docker host 端的 mongo client 來測試...

安裝完,除了用 systemctl status 看service 狀態,也可以用 mongodb client console 來測試。
ref: 新的 client 是 monogosh。
連線語法是:
mongosh mongodb://root:rootpasss@mogoserver:27017

有關 docker
docker imnage : mongo 的版本是 5.0.3 ,和一般(ubuntu 20.04) distribution 的版本 3.0 不一樣。
舊版本的 client 無法和版本連線。
所以也要用 docker 來連..
docker run -it mongo --interface mogocontainer-network mongosh mongodb://root:rootpassword@mogocontainername:27017
要跟 mogocontainer 同一個 network,才能直接用 container name 來連接。