2021年9月4日 星期六

Chromedp筆記(二)

 如果要把一開始執行程式時,瀏覽器就是最大化(非全螢幕)

可以使用如下的語法,基本上就是在option內加上 start-maximized的設定


opts := 
append(chromedp.DefaultExecAllocatorOptions[:],chromedp.Flag("start-maximized"true))



Chromedp筆記(一)

 要在執行程式時,讓chromedp能夠顯示瀏覽器,並且看到瀏覽器一步一步執行你程式內的動作

在程式一開始,先用下面的語法

opts := append(chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless"false))
allocator_ := chromedp.NewExecAllocator(context.Background(), opts...)
ctx_ := chromedp.NewContext(allocator, chromedp.WithLogf(log.Printf))

這樣就可以讓瀏覽器顯示出來

如果還是看不到,或許可以檢查一下,你的程式內是不是在呼叫NewExecAllocator之後有順便使用了

defer cancel()

這個語法,如果有,先暫時註解掉,因為一旦程式執行完畢後呼叫cancel,就會把瀏覽器關閉

所以,如果你的程式執行的很快,很有可能你是看不到瀏覽器的。

開發測試階段,為了看到瀏覽器執行的情況,可以先把defer cancel拿掉,等到上了production之後,再把defer cancel()加回去


2021年8月3日 星期二

安裝ubuntu ssh

 在Ubuntu 20.04上,可以使用 

sudo systemctl status ssh 來確認ssh是不是有正常執行成功

如果沒有這個服務,那很可能是你的系統上還沒有安裝ssh這個軟體或服務,

這時候可以用

sudo apt-get update

sudo apt-get install openssh-server

來安裝ssh服務。

如果有使用ufw防火牆,記得把port 22打開

sudo ufw allow 22


2021年7月27日 星期二

Ubuntu 20.04 的Apache2增加Listen的Port number

 在Ubuntu 20.04的作業系統中,如果要讓Apache2可以Listen多個Port,必須要去 /etc/apache2/  目錄底下,找到ports.conf檔案,並且在該檔案裏面加上 你要Listen的Port

例如原本的conf內容如下


Listen 80

<IfModule ssl_module>

        Listen 443

</IfModule>

<IfModule mod_gnutls.c>

        Listen 443

</IfModule>


你現在要多一個站台,就需要多Listen一個不同的Port,假設是8080

那你就可以像下面這樣修改

Listen 80
Listen 8080

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

修改好之後,存檔後,記得重新啟動apache2的service

sudo systemctl restart apache2.service

2021年4月12日 星期一

用teamviewer連線到沒有螢幕的linux ubuntu主機

在某個Case中,需要把一台 linux 的電腦放在外部的網路做一些測試,因此在那台linux電腦上安裝了teamviewer,但是當我把linux 的螢幕拔掉之後,teamviewer連線到該linux後,就看不到畫面了,因此上網找了一些解決方法,下面這方法應該是可行的。 


安裝 dummy driver

sudo apt-get install xserver-xorg-video-dummy

然後在 /etc/X11/

資料夾內 建立一個 xorg.conf 檔案

檔案內容如下

Section "Device"

    Identifier  "Configured Video Device"

    Driver      "dummy"

EndSection

Section "Monitor"

    Identifier  "Configured Monitor"

    HorizSync 31.5-48.5

    VertRefresh 50-70

EndSection

Section "Screen"

    Identifier  "Default Screen"

    Monitor     "Configured Monitor"

    Device      "Configured Video Device"

    DefaultDepth 24

    SubSection "Display"

    Depth 24

    Modes "1280x800"

    EndSubSection

EndSection


重開機後,再用teamviewer連線,就可以看到畫面了

2021年3月26日 星期五

Disable Ubuntu 20.04 桌面版本的Update popup 畫面

 利用下面的指令找出可能是popup畫面的process

ps -aux | grep update

通常可以看到有

下面這組 process

/usr/bin/python3 /usr/bin/update-manager --no-update --no-focus-on-map

這一組就是那個彈跳出來的畫面,把這個process的pid記下來

接著用 

kill <pid>  

把那個process砍掉,就可以關閉那個popup的畫面了。

如果要讓那個畫面永遠都不要跑出來,可以試試看下面這個網址裡面提到的方式。

https://linuxconfig.org/disable-automatic-updates-on-ubuntu-20-04-focal-fossa-linux




2020年10月31日 星期六

CRC 生成多項式 計算方法與專有名詞紀錄(一)

 

最近的工作需要計算CRC的檢查碼,所以在google上找了一些資料,找資料的過程中,把找到的資料記錄下來,免得以後要再次計算時,又要重新找資料。

CRC 是Cyclic redundancy check的縮寫,所以在google的時候,可以用完整的名詞去找可以找到比較正確的資料。

在找資料的時候,會看到一些專有名詞,某些網站有解釋,但有些網站沒有去解釋這些名詞,所以這邊簡單紀錄一下我找到的東西。這裡不做學術上的探討,只是記錄我怎麼看懂這些東西的方式。

生成多項式: 

用來對資料做檢查的pattern,例如 CRC-8/MAXIM的生成多項式是X^8+X^5+X^4+1 ,用位元表示就是100110001,如果把最後的那個bit拿掉,就是10011000,可以看到X^8代表最左邊的位元是1,X^5代表第五個位元是1(由右往左算,base為1開始算),X^4代表第四個位元是1,那生成多項式X^8+X^5+X^4+1,最後的那個+1就是在原本8個bit最左邊加上一個bit的1。所以如果有一個生成多項式是X^16+X^12+X^5+1,他的2位元pattern就是10001000000100001,全部就有16+1個bit

Poly: 

生成多項式的簡易寫法,假設生成多項式是 X^8+X^5+X^4+1,他的2位元pattern就是100110001,16進位的寫法為131,又因為通常最左邊的那個位元都是1,所以為了表示方便,當我們把最左邊的那個bit為1的部分拿掉以後,就是00110001,而00110001就是16進位的31,3這個值就是Poly表示法,所以X^16+X^12+X^5+1的2位元表示法為10001000000100001,16進位表示法為11021,把最左邊的那個bit拿掉,就會是0001000000100001,16進位為1021,1021就是X^16+X^12+X^5+1這個生成多項式的poly表示法。

Width: 

指的就是檢查碼的長度,像是CRC-8/MAXIM這個模式,就是8個bit的寬度。CRC-16/CCITT就是16個bit。只是我們實際使用的時候會在最右邊加上一個bit為1的位元。

refin:

refin就是指我們要被檢查的資料要怎麼排列來開始做運算,例如我們要驗算一組資料,以16進位HEX表示為 0x01 0xA0,2進位表示為00000001 10100000,如果refin=true,代表我們需要把每一個位元組(byte)內的bit順序做反轉,但是位元組(byte)順序不做反轉,如果0x01 0x0A在refin=true的時候,計算時就要反轉成 100000000 00000101  這樣的順序下去做計算。如果refin=false時,代表不用做任何反轉,直接計算。

refout:

若為true,計算結果必須反轉才是答案,若為false就直接是答案。例如: 在refout為true的情況下,我們取得一個計算結果是11011011001000,那答案就是 00010011 011011,那因為這是用CRC16/CCITT模式運算的結果,所以應該會有2個byte的結果,但因為結果只有14bit,所以最後捕兩個0給他就是完整答案了,完整答案就是00010011 01101100,16進位表示法就是0x13 0x6C這兩個Byte。



參考資料:

https://www.lammertbies.nl/comm/info/crc-calculation

https://www.scadacore.com/tools/programming-calculators/online-checksum-calculator/

https://reveng.sourceforge.io/crc-catalogue/all.htm

http://www.ip33.com/crc.html

https://blog.csdn.net/pl0020/article/details/82760761