發表文章

目前顯示的是 10月, 2016的文章

python3 限定使用 keyword 關鍵字的方式作為參數

這篇是從 《Effective Python》: tips 21 學習到的觀念 在我們實作 function 的時候,定義 function specification。為了讓 function 的行為能夠更明確化,我們傾向在傳遞某些參數的時候 "強制" "限定" 使用 keyword方式的寫法來傳遞參數也就是指名 parameter=value 的方式。 這在 Python 裡面稱為 "Keyword-only Arguments" 相較於 Python2, Python3 有特殊的語法來支持這樣的使用方式: 在 parameter list 可以看到 "*" 它是用來標記 positional arguments 的結尾。在這之後的參數都一定要使用 keyword-only 的寫法。 如果這時候,我們使用 3個以上的 positional arguments 的話,會引發 "TypeError" 那 Python2 呢?使用 **kwargs 的方式,並且要手動引發 TypeError 。

python 動態預設參數, 執行期

python 動態預設參數, 執行期 本文的內容是參考 《Effective Python》: tips 20 我們在 python 定義一個 function 時,如果想要給定 default argument 可以這樣寫: def foo (arg= 10 ) : ... processing arg ... 但是如果我們今天要使用的預設參數是在動執行期才能夠決定的,而不是靜態時期該怎麼做呢? 例如:我們想要寫一個 log function, 會印出當時訊息的時間, 跟訊息內容 def log (msg, when=datetime.now () ) : print( "{when}: {msg}" .format(when, msg)) 可是如果我們是用上面的寫法,會發現取到的時間都是一樣的,那是 function 被定義的時間。為了處裡這個問題,我們會先將它設置為 None 再做進一步的處理,然後再利用 docstring 來補充說明 default argument 的用處。 def log (msg, when=None) : """ when 的預設值是 function call 發生的時間,也就是 log message 的時間 """ when = datetime.now() if when is None else when ... print message ... 因為 default argument 只會被 evaluate 計算一次,所以如果我們使用 [], {} 做為我們的 default argument 有時候會出現不可預期的錯誤。 例如: def to_json (data, default={}) : try : return json.loads(data) except ValueError: return default json_data1 = to_json( '123 321' ) json_data1[ 'k1' ]

Script Injection 的解決方案

在 Udacity Intro to Backend 的課程中,有提到一些後端的安全性問題像是: SQL Injection Script Injection 其中,針對 Script Injection 的處理方式是在我們將 user 傳送的資料寫到資料庫之前, 要先做清除的動作,這個術語叫作 Script Sanitize。 在 Intro to Backend 的課程中,就有以 python 舉例一些 script sanitize module 至於 golang 方面呢 ? bluemonday 好像是不錯的選擇: https://github.com/microcosm-cc/bluemonday

怎麼建立一個 Https server?

圖片
如何架設一個 https server 如何架設一個 https server 最近 chatbot 聊天機器人很火紅,在 Facebook, Line, Slack, Telegram 上都能夠架設聊天機器人。我們只需要設定 callback url 就可以了。但是, 我們服務的 callback url 通常必須是 https,所以我想分享一下自己是怎麼架設 https server。 會使用到的伺服器軟體及要準備的東西: nginx domain name 一台擁有 public ip 的機器 流程 將 domain name 綁定到你機器的 ip 上 申請 ssl 憑證 設定 nginx, run service 將 domain name 綁定到 ip 上 首先,你得要先取得一個 domain name, 通常這個 domain name 是跟供應商買來的,常見的供應商有: Godaddy Namecheap p.s domain name 購買的期限是以年為單位。 購買了一個 domain name 之後,藉由購買 domain name 的平台網站去管理 DNS,將 A record 的部分設定為你的機器 IP。大概過 3 - 5 分鐘後,就可以利用 domain name 去存取你的網頁服務。 如果你對 DNS 的設定有興趣可以看 這裡 以 Godaddy 為例: 申請 ssl 憑證 ssl 你可以跟供應商購買,GoDaddy, Namecheap 都有在賣。但是如果你 跟我一樣窮的話 只是單純想要嚐鮮的話,可以試試 Let’s Encrypt 的服務。他可以提供免費的 ssl 憑證,這個憑證有三個月的使用期限,等使用期限快到了再 renewal 就好了。 網路上關於 Let’s Encrypt 的教學都是比較舊版的,現在你只要使用他們提供的 Certbot 服務,按照他們的步驟執行就可以輕鬆取得 ssl 憑證。 首先選擇一下,你的 webserver 和 os 種類 依序執行 $ wget https://dl.eff.org/certbot-auto $ chmod a+x certbot-auto $ ./certbot-auto certonly 這時候會出現藍色的互動式介面

C pointer tutorial

去年, 在系上分享了兩場 Talk 是有關於 C Pointer 的基礎概念 一直沒有將內容整理為 Blog 先前覺得 Blogger 的版型實在不太討喜,好像沒有支援時下最流行的 markdown 語法 所以在 2014 年末到這段期間,我把自己整理出來的文件都放到了 hackpad 上面。 有鑒於 hackpad 之後就要停止營運了,加上 hackpad 的內容不容易被搜尋到。 所以我決定繼續回來寫 blogger 以下兩個連結是我在系上分享的內容: C Pointer Part 1 : http://slides.com/jie-hanchen/pointer-2-3 C Pointer Part 2 : http://slides.com/jie-hanchen/deck-2 如果有錯誤的地方,還請留言指教!