在考慮了快一個月之後,我還是下訂了 Kindle Oasis 2。
可惜的是想買的保護套都沒有運送台灣。
運費被收了 USD 20.98,關稅被預收了 USD 14.68。
換算下來大約要 NTD 9600,似乎也沒有比網拍便宜到哪。
但是孩子的學習不能等呀XD
2018年12月26日 星期三
ImportError when using pyinstaller to package up wxPython
如果是使用 Python 3.7
Pyinstaller with wxPython 會出現 wx._core import error
試著改用 Python 3.6 即可
底下是我測試能用的版本
Python 3.6.8 32 bit
PyInstaller 3.4
wxPython 4.0.3
Pyinstaller with wxPython 會出現 wx._core import error
試著改用 Python 3.6 即可
底下是我測試能用的版本
Python 3.6.8 32 bit
PyInstaller 3.4
wxPython 4.0.3
2018年12月19日 星期三
MicroPython on UEFI
MicroPython 是一個 Python3 的子集
其目的是用在 microcontrollers 上或是一些受限制的系統
但並不支援所有的語法
MicroPython differences from CPython
tianocore porting MicroPython 目的是用來取代之前 porting 的 Python 2.7
原因是之前 porting 的效能較不好
也不能存取一些 UEFI Services or hardwares
目前專案位於以下路徑
https://github.com/tianocore/edk2-staging/tree/MicroPythonTestFramework/MicroPythonPkg
如果這個東西的成熟度夠高
應該會適合拿來撰寫 UEFI Application
畢竟整套環境是想用來當作 TestFrameWork 用的
其目的是用在 microcontrollers 上或是一些受限制的系統
但並不支援所有的語法
MicroPython differences from CPython
tianocore porting MicroPython 目的是用來取代之前 porting 的 Python 2.7
原因是之前 porting 的效能較不好
也不能存取一些 UEFI Services or hardwares
目前專案位於以下路徑
https://github.com/tianocore/edk2-staging/tree/MicroPythonTestFramework/MicroPythonPkg
如果這個東西的成熟度夠高
應該會適合拿來撰寫 UEFI Application
畢竟整套環境是想用來當作 TestFrameWork 用的
2018年12月14日 星期五
UEFI Application - Stack overflow
最近在幫同事看一個問題
覺得很有趣,故記錄一下解題思路
同事在 build code 時,發現一個 link error
網路查了一下,是因為 VC compiler 檢查到某些 function 有 stack 問題時
便會在 code 中插入 __chkstk 這個 check function
網路看到的解法都是放大 stack size
可以在 INF 檔案編譯選項中加入 /GsXXXXX
但據實測的結果是一點用處都沒有
stack size 還是維持在 32K 左右
後來試著在 INF 檔案編譯選項中加入 /FAcs 選項
此選項會產生 assembly 檔案
副檔名為 .cod
接著在 UDK\Build\程式路徑中
用 grep 搜尋 __chkstk 關鍵字
便可以看到是那個 function 被插入了 __chkstk
底下是我模擬的結果
很明顯的看到 rsp register 被保留了 32776 這麼大的空間(char LocalVar[32768])
當然會造成 stack overflow
覺得很有趣,故記錄一下解題思路
同事在 build code 時,發現一個 link error
正在產生程式碼 已完成程式碼產生 UefiApplicationEntryPoint.lib(ApplicationEntryPoint.obj) : error LNK2001: 無法解析的外部符號 __chkstk
網路查了一下,是因為 VC compiler 檢查到某些 function 有 stack 問題時
便會在 code 中插入 __chkstk 這個 check function
網路看到的解法都是放大 stack size
可以在 INF 檔案編譯選項中加入 /GsXXXXX
但據實測的結果是一點用處都沒有
stack size 還是維持在 32K 左右
後來試著在 INF 檔案編譯選項中加入 /FAcs 選項
此選項會產生 assembly 檔案
副檔名為 .cod
用 grep 搜尋 __chkstk 關鍵字
便可以看到是那個 function 被插入了 __chkstk
底下是我模擬的結果
很明顯的看到 rsp register 被保留了 32776 這麼大的空間(char LocalVar[32768])
當然會造成 stack overflow
2018年12月12日 星期三
Python 正規表示式用法
Python 在使用 re 時
記得 pattern 要包含其他需要的字串(.*)
舉例來說
我想尋找每行有 "ERROR " 字眼的字串
re pattern 要寫成 "ERROR .*"
否則找到的都會只有 "ERROR " 本身
底下是針對規則的進階用法
把想要特別提出來的寫成如下形式
(?P<name>正規表示式)
就可以更方便的找出對應的資料
輸出結果
記得 pattern 要包含其他需要的字串(.*)
舉例來說
我想尋找每行有 "ERROR " 字眼的字串
re pattern 要寫成 "ERROR .*"
否則找到的都會只有 "ERROR " 本身
底下是針對規則的進階用法
把想要特別提出來的寫成如下形式
(?P<name>正規表示式)
就可以更方便的找出對應的資料
import re
ERROR_PATTERN = 'ERROR.*Test: (?P<TEST>[0-9]+).*Address: (?P<ADDR>[0-9A-F]+)'
errMsg = '''
2068-09-12 22:06:48 - [MEM ERROR - Data] Test: 6, CPU: 1, Address: 101B8F330, Expected: FFFF5FFF, Actual: FFFFDFFF
2068-09-12 22:06:48 - [MEM ERROR - Data] Test: 6, CPU: 1, Address: 103B8F310, Expected: FFFF5FFF, Actual: FFFFDFFF
2068-09-12 22:06:50 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 119FEA5F0, Expected: FFFF7FDF, Actual: FFFFFFDF
2068-09-12 22:06:50 - [MEM ERROR - Data] Test: 6, CPU: 3, Address: 11BFEA5D0, Expected: FFFF7FDF, Actual: FFFFFFDF
2068-09-12 22:20:53 - [MEM ERROR - Data] Test: 6, CPU: 2, Address: 10466E930, Expected: FFFF7FEF, Actual: FFFFFFEF
2068-09-12 22:20:53 - [MEM ERROR - Data] Test: 6, CPU: 2, Address: 10666E910, Expected: FFFF7FEF, Actual: FFFFFFEF
2068-09-12 22:20:53 - [MEM ERROR - Data] Test: 6, CPU: 0, Address: 10D6CC9B0, Expected: FFFF7EFF, Actual: FFFFFEFF
2068-09-12 22:20:53 - [MEM ERROR - Data] Test: 6, CPU: 0, Address: 10F6CC990, Expected: FFFF7EFF, Actual: FFFFFEFF
'''
res = re.findall(ERROR_PATTERN, errMsg)
print(res)
輸出結果
[ ('6', '101B8F330'), ('6', '103B8F310'), ('6', '119FEA5F0'), ('6', '11BFEA5D0'), ('6', '10466E930'), ('6', '10666E910'), ('6', '10D6CC9B0'), ('6', '10F6CC990') ]
2018年12月11日 星期二
2018年12月7日 星期五
Single Python executable binary on Windows
I used "PyInstaller" and I used these parameters to build it
"pyinstaller -D -F -w main.py"
My "main.py" is a "wxPython" project and it works well.
Caution: If you use Python 3.7, you will encounter wx._core import error. You can use Python 3.6 to fix this error.
"pyinstaller -D -F -w main.py"
My "main.py" is a "wxPython" project and it works well.
Caution: If you use Python 3.7, you will encounter wx._core import error. You can use Python 3.6 to fix this error.
第一支 UEFI Application - Python code
最近有一個需求
希望使用者設定完參數後
可以連續做一定次數的測試
其目的是希望測試結果的穩定性
平常我們初始化測試都是透過 Web-UI
不過骨子裡其實也是走 HTTP Web API 模式
故在 UEFI 下使用 C 寫並不是太困難
由於還有 download 測試報告
並做一些 disk 資料夾的備份等工作
我最後還是決定使用 Python 來撰寫
不得不說
使用 Python 開發真是飛快
我先在 Windows 下寫好花不到半天
遇到不會的就用關鍵字 google
不過實際跑在 UEFI Shell 上
才發現會遇到一些坑
幸好我的程式每個功能都是 function
只要修改幾個 function 即可
但前提在測試時,不要一次跑完
不然根本不知道程式那邊出錯
目前已知問題有
1. os.rename 會使得原始檔案不見
2. copy_threee 也有同樣的問題
3. 點開頭的檔案在使用 Shell command cp 時會有問題
雖然說來輕鬆
但我可是加了 2 小時班
如果 Python on Windows 我給 90 分
Python on UEFI 我只會給 55 分
希望使用者設定完參數後
可以連續做一定次數的測試
其目的是希望測試結果的穩定性
平常我們初始化測試都是透過 Web-UI
不過骨子裡其實也是走 HTTP Web API 模式
故在 UEFI 下使用 C 寫並不是太困難
由於還有 download 測試報告
並做一些 disk 資料夾的備份等工作
我最後還是決定使用 Python 來撰寫
不得不說
使用 Python 開發真是飛快
我先在 Windows 下寫好花不到半天
遇到不會的就用關鍵字 google
不過實際跑在 UEFI Shell 上
才發現會遇到一些坑
幸好我的程式每個功能都是 function
只要修改幾個 function 即可
但前提在測試時,不要一次跑完
不然根本不知道程式那邊出錯
目前已知問題有
1. os.rename 會使得原始檔案不見
2. copy_threee 也有同樣的問題
3. 點開頭的檔案在使用 Shell command cp 時會有問題
雖然說來輕鬆
但我可是加了 2 小時班
如果 Python on Windows 我給 90 分
Python on UEFI 我只會給 55 分