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年10月28日 星期日
2018年10月17日 星期三
(暫存) 追蹤智能合約
之前看到人家說 web3.py 有 bug,好像追蹤不到,不過現在看 issue 似乎是在新版解決了的樣子,之後要找個時間來實驗一下。
不過如果連接的是 infura 的話,因為 infura 不支援 filter event,所以好像無法靠 Contract Events 追蹤。
參考資料
2018年9月21日 星期五
2018年9月19日 星期三
在 AWS Lambda 執行 web3.py
這篇要紀錄想要在 AWS Lambda 上執行 web3.py 之前需要先做的準備。因為 web3.py 用了一些 C/C++ 編譯的函式庫,因此必須要事先準備好能夠在 AWS Lambda 上執行的編譯後結果。主要步驟也可以參考 [2-3]。
2018年9月6日 星期四
使用 Python 存取 Ethereum:透過 web3.py
想要透過 Python 存取 Ethereum,從 Ethereum 官方的 Github 中可以看到有兩種套件可以達成:web3.py [1] 和 pyethereum [2]。就我目前的理解來說,兩者的差別在於 web3.py 主要是作為外部存取 Ethereum 的客戶端,也就是說 web3.py 函式庫本身不會成為區塊鏈節點,也不會進行區塊鏈同步,而是連接一個區塊鏈上的節點,把區塊鏈當成像是外部資料庫一樣取用而已;而 pyethereum 則比較像是 geth 那樣,是用來把自己做成一個區塊鏈節點,會正常進行區塊同步,也可以作為礦工開始挖礦。
在本篇當中,因為是想要一個輕量級的客戶端來與區塊鏈互動,並不想要準備龐大的儲存空間來存放區塊鏈的資料,因此會以 web3.py 為主。
2018年6月11日 星期一
2018年1月12日 星期五
2018年1月11日 星期四
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月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年11月12日 星期日
從 Jupyter 讀取 Windows 磁碟中的鐵達尼號資料
在書上的範例中,提到用鐵達尼號的資料做分析
不過書上範例所指的資料位址已經無法存取了。
稍微搜尋了一下,發現 Kaggle 也有提供這個資料 [1],而且是免費的。
從 [1] 下載資料下來之後,假設是放在 D:\test\data\titanic 這個資料夾裡,訓練用的資料命名為 train.csv
import pandas training_data_path = "D:\\test\\data\\titanic\\train.csv" # Read training data. training_data = pandas.read_csv(training_data_path) print(training_data)
路徑要記得跳脫,才能正確找到檔案。
參考資料
2017年11月7日 星期二
透過 Anaconda 安裝 Tensorflow 與 Keras
- 下載並安裝 Anaconda
- 執行以下的指令建立 Python 虛擬環境
conda create --name tensorflow python=3.5 anaconda
- 啟用虛擬環境
activate tensorflow
- 安裝 Tensorflow
pip install tensorflow
- 此時想再使用 pip 會出錯 [1],要先以下述指令強制重新安裝 html5lib
conda install --force html5lib
- 安裝 keras
pip install keras
參考資料
2017年7月25日 星期二
2017年7月23日 星期日
使用 Django 建立網站(二):建立第一個自定義的頁面
在前一篇當中,我們已經產生了一個叫做 myweb 的專案,接著要建立一個應用程式(App)。
這部份基本上也可以參考 Django 官方的教學文件 [1]。
2017年7月16日 星期日
在 Eclipse 使用 Python 虛擬環境開發 Python
最近再度開始學習 Python,然後看到不少 Python 套件的官方文件提到虛擬環境
因此來紀錄一下,以 Java 開發者的角度來看 Python 虛擬環境相關的基本知識。
2017年7月15日 星期六
在 Ubuntu 14.04 安裝 venv
在 Ubuntu 14.04 上,想要用下述指令建立虛擬環境時,出現沒有安裝 venv 的錯誤訊息
root@default:/# python3 -m venv myvenv The virtual environment was not created successfully because ensurepip is not available. On Debian/Ubuntu systems, you need to install the python3-venv package using the following command. apt-get install python3-venv You may need to use sudo with that command. After installing the python3-venv package, recreate your virtual environment.
但依照訊息的描述去安裝 python3-venv 時,又出現找不到這個 package 的錯誤。
參考 [1] 的作法,實際上好像應該安裝的套件是 python3.4-venv
apt-get install python3.4-venv
參考資料
2017年7月5日 星期三
2015年8月31日 星期一
使用 Python 整合 VMware vSphere
另外有一些簡易的使用範例 [2],可以大略參考要如何開始使用 Python 連接 vSphere/vCenter。
這篇是用來記錄初步介接 vSphere/vCenter 的經驗。