Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification. Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems. 註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
- Bertrand Meyer
- Charles Connell
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
2018年1月12日 星期五
2018年1月11日 星期四
(暫存) AWS Step Function
名詞
- terminal state:代表會讓流程結束的 State。具體有三種表現方式:
- State 具有 “End”: true 這個屬性。
- State 的種類是 “Type”: “Succeed” 或者 “Type”: “Fail”
訊息傳遞
在 Step Function 的每個 State 之間,預設狀況是呼叫一個 Task 時,Task 的回覆會成為 State 的 Output
然後原因是因為預設的 OutputPath 是 ‘$’。這裡 OutputPath 代表的是 Task 回覆的東西,要覆蓋到哪裡去。
如果 OutputPath 設為 null,表示回覆的內容不覆蓋,此時 State 的 Output 就會是 State 的 Input。
但如果 OutputPath 設定為像是 ‘$.result’ 的話,那麼 State 的 Output 就會是原本的 Input 再加上 result 這個 key。
參考資料
2018年1月10日 星期三
Python 的時間處理
字串轉時間
假設字串是「Wed, 10 Jan 2018 08:09:13 +0000」,可以使用這樣的 Pattern 來解析:
from datetime import datetime time_text = 'Wed, 10 Jan 2018 08:09:13 +0000' datetime.strptime(time_text, '%a, %d %b %Y %H:%M:%S %z')
其中 Pattern 的寫法可以參考官方的文件 [1]。
取得帶有時區資訊的現在時間
需要特別這麼做的原因,是因為如果是直接使用 datetime.now() 的話,得到的時間是沒有時區的這在需要做時間比較時有可能會有問題,尤其在要比較的時間本身就有時區資訊的話,Python 會回傳錯誤訊息。
from datetime import datetime, timezone datetime.now(timezone.utc)
計算時間
取得三小時前的時間from datetime import datetime, timedelta, timezone datetime.now(timezone.utc) - timedelta(hours=3)
參考資料
2018年1月9日 星期二
AWS DynamoDB SDK v2 基礎使用(三):寫入資料
DynamoDB 不得不說,其實表達的格式相當囉唆~
所以想要存取 DynamoDB,無論如何程式碼都會寫得有點冗長。
而其中因為 Java 又是格式嚴謹的語言,於是又比別的語言再更囉唆一些……。
2018年1月8日 星期一
2018年1月3日 星期三
2017年12月28日 星期四
在 AWS Lambda 的 Python 程式匯入額外的套件
AWS Lambda 的執行環境有預設匯入的套件
如果使用了其他的套件,Python 程式就會拋出找不到套件的錯誤。
從 AWS 的官方文件 [1] 中,可以看出關於這個問題的解決方法
就是事先把套件裝進程式裡,當成是程式自身的一部分,一起打包送進 AWS Lambda。
具體來說,也就是假設我的 Python 程式的資料夾是放在 D:\python\my_project
則可以使用以下的指令,把套件指定安裝到專案資料夾中。
pip install requests -t D:\python\my_project
而做完後,就會看到專案資料夾跑出一大堆資料夾和檔案
之後要上傳到 AWS Lambda 時,把整個資料夾(也就是 D:\python\mu_project\* )壓縮成 zip
一起上傳到 AWS Lambda 即可。
參考資料
2017年12月21日 星期四
2017年12月19日 星期二
SLF4J 與其他 logging framework 實作綁定與橋接的關聯
使用 SLF4J 的時候,同時使用很多開源函式庫,會很容易導致各種 log 跑不出來或者 dependency 衝突的問題
本質上是因為不同開源函式庫,各自使用了不同的 logging framework
因而導致了 log 被輸出到沒有被設定的實作,或者相同的實作被重複綁定等等。