2020/5/16

NB 修好了..Dell Inspiron N4010

因為買了新NB,所以就壞掉的舊NB 修好了!!!
老闆說主機板的 ATI Chip 壞了,果然,當初就是用它來玩Over watch,測試FPS 可以到多高....才壞的。更換主機版 2500
驗收的時候開機超...慢,3min...老闆說是HD壞了,建議換 SSD 120G,還幫我恢復windows,800。
因為很久沒當工具人了。就照老闆的意思吧...

結果開機變超快,10 sec,好像也很省電。
好像又可以當工作機了..

紀錄一下後來安裝的東西...(之後會繼續更新)
  • 新酷音..PIME 版
  • Github Desktop : 改 git for windows
  • VSCode
...其實比較想裝的是 linux...
github desktop 的話,缺 command line tool,所有 git 動作都要從 她的 desktop app 開始。


* 這一篇要感謝再也無法跟她說謝謝的一姊Zoey,非常感謝。

Flutter with VSCode : Installation

因為舊NB修好了,所以來試試 VSCode 做 Flutter 開發。
看看會不會像Android Studio 一樣慢...

VSCode 安裝 Flutter Extension,然後啟動Flutter Extension的doctor command,他說要找Flutter SDK。
所以去下載Flutter SDK zip。看安裝說明,這個 SDK 安裝其實就市一個 folder。
所以也可以用 git clone。不必用 zip 解壓縮。
安裝到 C:\flutter,然後update PATH:加上 C:\flutter\bin
開啟新cmd. 執行 flutter doctor

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel stable, v1.17.1, on Microsoft Windows [Version 6.1.7601],
    locale zh-TW)
[X] Android toolchain - develop for Android devices
    X Unable to locate Android SDK.
      Install Android Studio from:
      https://developer.android.com/studio/index.html
      On first launch it will assist you in installing the Android SDK
      components.
      (or visit
      https://flutter.dev/docs/get-started/install/windows#android-setup for
      detailed instructions).
      If the Android SDK has been installed to a custom location, set
      ANDROID_SDK_ROOT to that location.
      You may also want to add it to your PATH environment variable.
[!] Android Studio (not installed)
[√] VS Code, 64-bit edition (version 1.45.1)
[!] Connected device
    ! No devices available
! Doctor found issues in 3 categories.
應該是 OK。

回到 VSCode...
View -- Command Palette -- Flutte : Run Flutter Doctor
可以在 Output Window 看到上面一樣的內容,代表安裝 OK。



follow 接下來的Test Drive,New Project : myapp。
自動產生一個 code skeleton。
要 RUN 的話,要啟動 Emulator,在裝 flutter extension時,已經順便裝了 Android iOS emulator extension 了。
在 Windows 上,只support Android Emulator。
要在 Mac 上run VSCode,才能 support iOS Emulator。

但是.. 要 launch Android Emultor,好像還是需要Android SDK。
而且不能只download command line tool,要啟動 emulator 得話,一定要 Android Studio。
 -- 如果是連接真的 Android Phone,是否還是需要 Android Studio 呢?還是 Command Tool (adb) 就可以?
測試看看...download, unzip,裡面沒有 adb ....
adb, fastboot 是在 platform tool,SDK Platform Tool
download, unzip,add PATH 之後,adb command OK。
但是 插入 android phone缺 driver..
到 Get Google USB Driver Download,unzip..
裝置管理員,更新驅動,point to unzip folder.. OK
<br>
adb device 找到 手機 (pixel2)後,重新啟動 VSCode,下方的 NO Device 改成 Pixel2 了...
結果還是不行,要我 run flutter doctor
其實上面 run doctor 時,就有說一定要 android sdk 了...
所以,還是逃不掉安裝 Android Studio 的命運。


更新:
這一篇,flutter beta 支援 web app 了,所以可以不用emulator 或是真的 device。
所以可能真的不用 android sdk 了...

2020/5/15

docker gitlab - log

用 docker 快速啟動一個 gitlab image...

安裝docker..
  • apt install docker.io -- 結果是 19.03.6
  • 把 user 加到 docker 群組,解決permission denied 問題

開始create gitlab image..
docker pull gitlab/gitlab-ce
docekr run --detach --publish 8787:80 --name gitlab gitlab/gitlab-ce
因為是 detach,所以 run as daemon..
用 docker ps 來看..,只
$ docker ps
CONTAINER ID  IMAGE             COMMAND             CREATED        STATUS                            PORTS                                   NAMES
4d9e7128295e  gitlab/gitlab-ce  "/assets/wrapper"   8 seconds ago  Up 3 seconds (health: starting)   22/tcp, 443/tcp, 0.0.0.0:8787->80/tcp   gitlab
這時候,開啟 ip:8787 是不通的..

後來用
docker attach gitlab
進去後,會看到他在 run starting sequence 的 output,代表還沒啟動完畢...
大約等 4 min 之後,好像完成了. 其實在 1 min 的時候,http 頁面出現 502..
-- attach 一個啟動時是 daemonize 的 container,好像退不出來... 所以用 docker logs -f gitlab
之後用 any-host-ip:8787 舊可以access 到 gitlab login 畫面了。

第一個是 password 畫面,要你輸入 root 的 password,有最短限制,(所以用 full-name without '-')
之後的登入話面舊可以用 root 登入。

用 docker stop 停止後,再用 docker start 啟動的話,只要約 1min 舊可以正常 access..


以上是參考簡易教學 — 利用 Docker 架設 Gitlab 做的,文章沒有安裝 docker package 的部份,原來是安裝docker.io (ubuntu default package),後來因為不了解開機需要、時間,以為是 docker package 的問題。所以加入 download.docker.com repo,改裝 docker-ce 做的。

接下參考三秒教你用 Docker 安裝 GitLab,把 config. log. data 從 container image 中分離出來。


更新。
新的版本,第一次啟動已經不是 root password 了。
所以參考這一篇,在 container 中run bash,開啟 sql 設定 rooot password:
$ docker exec -it gitlab bash
root@1b10f96444f4:/# gitlab console -e production
Unknown command. Run `gitlab help` for a list of available commands.
root@1b10f96444f4:/# gitlab-rails console -e production
--------------------------------------------------------------------------------
 Ruby:         ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]
 GitLab:       14.8.2 (c7be43f6dd3) FOSS
 GitLab Shell: 13.23.2
 PostgreSQL:   12.7
------------------------------------------------------------[ booted in 20.47s ]
Loading production environment (Rails 6.1.4.6)
irb(main):001:0> user = User.where(id: 1).first
=> #<User id:1 @root>
irb(main):002:0> user.password = 'charles'
=> "charles"
irb(main):003:0> user.password_confirmation = 'charles'
=> "charles"
irb(main):004:0> user.save
=> false
irb(main):005:0> user.password = 'charles123'
=> "charles123"
irb(main):006:0> user.password_confirmation = 'charles123'
=> "charles123"
irb(main):007:0> user.save
=> true
irb(main):008:0> exit
root@1b10f96444f4:/#exit
exit


其實用 deb 安裝完 gitlab-ce 後..
efault admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.
所以,應該去這裡(/etc/gitlab/initial_root_password) 看...


官方的應該是 .. gitlab docker,有啟動,hostname, password 的設置。
sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ee:latest
要先export GITLAB_HOME

另外,lfs 要enable 要修改 gitlab.rb。

tio - 另一個 serial port (tty) 連線軟

用 apt 就可以安裝,跟 picocom 類似。
Usage: tio [] 

Options:
  -b, --baudrate         Baud rate (default: 115200)
  -d, --databits 5|6|7|8      Data bits (default: 8)
  -f, --flow hard|soft|none   Flow control (default: none)
  -s, --stopbits 1|2          Stop bits (default: 1)
  -p, --parity odd|even|none  Parity (default: none)
  -o, --output-delay      Output delay (default: 0)
  -n, --no-autoconnect        Disable automatic connect
  -l, --log         Log to file
  -m, --map            Map special characters
  -v, --version               Display version
  -h, --help                  Display help

See the man page for list of supported mapping flags.

In session, press ctrl-t q to quit.

連線中,用 hotkey...
[tio 10:33:36] Key commands:
[tio 10:33:36]  ctrl-t ?   List available key commands
[tio 10:33:36]  ctrl-t b   Send break
[tio 10:33:36]  ctrl-t c   Show configuration
[tio 10:33:36]  ctrl-t h   Toggle hexadecimal mode
[tio 10:33:36]  ctrl-t l   Clear screen
[tio 10:33:36]  ctrl-t q   Quit
[tio 10:33:36]  ctrl-t s   Show statistics
[tio 10:33:36]  ctrl-t t   Send ctrl-t key code

2020/5/13

mmwave studio , lua script

mmWave Studio 提供 Lua shell, 可以 load and run lua script。
參考 studio 的 demo script,和 openradar 的 script,合併成一個可以用 studio 的 postprocess 的 capture script.

ar1.XX 的function 沒有文件,只有在 lua shell 用 help 命令查看一下,要列出所有function 也不行 (我不知道方法)

初始化
ar1.FullReset()
ar1.SOPControl(2)
ar1.Connect(15,921600,1000)
ar1.DownloadBSSFw("C:\\ti\\mmwave_studio_02_00_00_02\\mmWaveStudio\\Scripts\\..\\..\\rf_eval_firmware\\radarss\\xwr16xx_radarss.bin")
ar1.DownloadMSSFw("C:\\ti\\mmwave_studio_02_00_00_02\\mmWaveStudio\\Scripts\\..\\..\\rf_eval_firmware\\masterss\\xwr16xx_masterss.bin")
ar1.PowerOn(1,1000,0,0)
ar1.RfEnable()
設定Chirp, Frame and Capture Parameters
先看一下說明...
Int32 ar1.ChanNAdcConfig(UInt16 Tx0En, UInt16 Tx1En, UInt16 Tx2En, UInt16 Rx0En, UInt16 Rx1En, UInt16 Rx2En, UInt32 Rx3En, Int32 BitsVal, UInt32 FmtVal, UInt32 IQSwap) 
    -  Static device config API which defines configure both the Transmiter and Reciever channels of Radar device and also ADC data format output
_I_ UInt16 Tx0En  - Tx0 channel
_I_ UInt16 Tx1En  - Tx1 channel
_I_ UInt16 Tx2En  - Tx2 channel
_I_ UInt16 Rx0En  - Rx0 channel
_I_ UInt16 Rx1En  - Rx1 channnel
_I_ UInt16 Rx2En  - Rx2 channel
_I_ UInt32 Rx3En  - Rx3 channel[b15:0] + (CascadePinOutCfg[b31:16] b16:ClkOutMasterDis, b17:SynOutMasterDis, b18:ClkOutSlaveEna, b19:SynOutSlaveEna, b20:IntLOMasterEna, b21:OSCClkOutMasterDis)
_I_ Int32 BitsVal  - Number of ADC bits
_I_ UInt32 FmtVal  - ADC output format[b15:0] + FullScaleReductionFactor[b31:16]
_I_ UInt32 IQSwap  - ADC Mode[b15:0] + CascadeMode[b31:16](Single Chip: 0x0000, MultiChip Master:0x0001, MultiChip Slave:0x0002)



Int32 ar1.LPModConfig(Int32 AnaChan, Int32 LpAdcMod)
    - LP Mod Config API which defines both Configure the ADC Mode and analog filter channel format
_I_ Int32 AnaChan  - Analog filter Chananel
_I_ Int32 LpAdcMod  - ADC Mode

command ...
ar1.ChanNAdcConfig(1, 1, 0, 1, 1, 1, 1, 2, 1, 0)
ar1.LPModConfig(0, 1)
ar1.RfInit()

2020/5/5

mmwave sdk 3.4, build demo project

好像沒有用 3.4 的 project (能 import) 的,所以只好用 command line build..
結果出現 Error:
[R4 Device/Type: iwr68xx/xwr68xx] Building file: ./mss/mss_main.c
"./mss/mss_main.c", line 1853: error: identifier "SOC_XWR16XX_MSS_ADCBUF_BASE_ADDRESS" is undefined
SOC_XWR16XX_MSS_ADCBUF_BASE_ADDRESS 定義在 /common/sys_common_xwr16xx_mss.h
included in ./common/sys_common_xwr16xx.h:
#if (defined(SOC_XWR16XX))

#ifdef SUBSYS_MSS
#include 
#endif

所以要找 SOC_XWR16XX 有沒有 define:
mmwave_sdk.mak:# PLATFORM_DEFINE       : SOC_XWR14XX, SOC_XWR16XX, SOC_XWR18XX, SOC_XWR68XX
mmwave_sdk_xwr16xx.mak:PLATFORM_DEFINE         = SOC_XWR16XX
mmwave_sdk.make:
ifeq ($(MMWAVE_SDK_DEVICE), awr14xx)
include $(MMWAVE_SDK_INSTALL_PATH)/ti/common/mmwave_sdk_xwr14xx.mak
else ifeq ($(MMWAVE_SDK_DEVICE), awr16xx)
include $(MMWAVE_SDK_INSTALL_PATH)/ti/common/mmwave_sdk_xwr16xx.mak
..
所以要找 MMWAVE_SDK_DEVICE..



最後用 diff 的方式,找到.. setenv.bat
@REM Select your device. Options (case sensitive) are: awr14xx, iwr14xx, awr16xx, iwr16xx, awr18xx, iwr18xx, awr68xx, iwr68xx
set MMWAVE_SDK_DEVICE=iwr68xx
要改 awr16xx

這樣就成功了...
call C:/ti/mmwave_sdk_03_04_00_03/packages\scripts\ImageCreator\append_bin_crc\gen_bincrc32.exe xwr16xx_mmw_demo.bin

2020/5/4

yield in python

Python 的另一個 function return(?) 指令 : yield

和 return 不一樣的是..
return 後,function 就退出了。
yield 的話,function 暫停 (或是說suspend了),把 yield 值交給 caller。
然後用 next( ) 時,這格 function 會從 上次 暫停 (也就是 yield) 的地方繼續下去...

>>>def new_range(n):
...   print('start')
...   i = 0
...   while i < n:
...      print('a')
...      yield i
...      i += 1
...
...c = new_range(10)
...print(next(c))
start
a
0
...print(next(c))
a
1
可以對照一下function 內的 print('start') 和 print('a') 出現的位置。

實際上,yield 可以用來產生一個 range list 的 iterator,直接拿來用,而不用真的把整個 list 先做出來

用 yield 的 function 還有一些其他功能,可以參考這一篇。