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





2013年6月16日 星期日

Sample RFP

Request for Proposal
Table of Contents

I. Introduction and background
    A. Background on company
    B. Overview of industry/business
II. Overview of need
    A. Description of business need
    B. Expected business benefits
    C. Overview of system requirements
III. Description of technical requirements
    A. Operating environment
    B. Performance requirements
    C. Integration, interfaces, and compatibility
    D. Hardware specifications
    E. Expansion and growth requirements
    F. Maintainability requirements
IV. Description of functional requirements
    A. Specification of primary functions
    B. Specification of information outputs
    C. Specification of the user interface
    D. Identification of optional functions and enhancements
V. Description of general requirements
    A. Maintenance and support
    B. Documentation and training
    C. Future releases
    D. Other contractual requirements
VI. Requested provider and project information
    A. Request for statement of work and project schedule
    B. Request for reference list of provider
    C. Request for project personnel information
VII. Details for submitting the proposal
    A. Time requirements
    B. Format requirements
VIII. Evaluation criteria and process
    A. Expected timetable of evaluation
    B. Method of evaluation of technical , functional, and general requirements

MT4檔案--1

在MT4裡面,只有三個目錄下面(包含子目錄)可以存放EA可以讀寫的檔案,而放在其他地方的檔案,都會無法被讀取或寫入。

1. Terminal_folder\Experts\History\current broker\ ---for history files
2. Terminal_folder\Experts\Files\ --- for common usage
3. Terminal_folder\Tester\Files\ --- for files that are used for testing

例如我MT4裝在C:\Program Files\MetaTrader 4
這目錄下,那這目錄下面會有Experts跟Tester這兩個目錄,從Experts子目錄再找,可以找到History與Files目錄,這兩個目錄就是上面列出的前兩個目錄,至於第三個目錄,則是在Tester下面的Files這個子目錄。

使用FileOpen()這麼function會傳回一個int整數,如果成功開啟檔案,傳回的值會是一個大於0的值,這個值我們一般稱做filehandle,代表一個檔案的代號,之後要操作這個檔案,都可以用這個代號。這個filehandle會直到檔案被關閉了才無效。
若傳回的filehandle的值是-1代表沒有開啟成功。

int FileOpen(string filename,int mode,int delimiter=";")

FileOpen有三個參數,
1. filename, 檔案的名稱
2. mode, 開啟的模式,有FILE_BIN, FILE_CSV,FILE_READ, FILE_WRITE這幾種,可以合併使用。合併使用請用" | "來分隔,例如FILE_BIN|FILE_READ,代表對檔案是以讀取BIN檔的方式做操作
3. delimiter,CSV檔案內的分隔符號,預設是分號";"


檔案如果使用FILE_WRITE開啟,有幾個點要注意,用這個mode時,開啟的檔案裡面原本有資料的話,會被刪除。若用此模式打開檔案失敗,很可能此檔案正在被其他程式所使用。

另外FILE_BIN跟FILE_CSV並無法合併使用,而且在開啟檔案時,一定要指明其中一種來使用。

在MT4中,無法開啟超過32個檔案。




2011年3月2日 星期三

Android-Content Providers

Content Providers可以儲存跟索取資料,而且可以使這些資料被所有的application都可以使用。

Content Providers是能夠share data的唯一方式。

然而你要使用這些Content Providers可能需要經過一定的允許授權。