發表文章

目前顯示的是 十月, 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 可以這樣寫:
deffoo(arg=10): ... processing arg ... 但是如果我們今天要使用的預設參數是在動執行期才能夠決定的,而不是靜態時期該怎麼做呢? 例如:我們想要寫一個 log function, 會印出當時訊息的時間, 跟訊息內容
deflog(msg, when=datetime.now()): print("{when}: {msg}".format(when, msg)) 可是如果我們是用上面的寫法,會發現取到的時間都是一樣的,那是 function 被定義的時間。為了處裡這個問題,我們會先將它設置為 None 再做進一步的處理,然後再利用 docstring 來補充說明 default argument 的用處。
deflog(msg, when=None):""" when 的預設值是 function call 發生的時間,也就是 log message 的時間 """ when = datetime.now() if when isNoneelse when ... print message ... 因為 default argument 只會被 evaluate 計算一次,所以如果我們使用 [], {} 做為我們的 default argument 有時候會出現不可預期的錯誤。 例如:
defto_json(data, default={}):try: return json.loads(data) except ValueError: return default json_data1 = to_json('123 321') json_data1['k1'] = 1 json_data2 = to_json('321 123') json_data2['k2&#…

Script Injection 的解決方案

在 Udacity Intro to Backend 的課程中,有提到一些後端的安全性問題像是: SQL InjectionScript 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。會使用到的伺服器軟體及要準備的東西:nginxdomain name一台擁有 public ip 的機器流程將 domain name 綁定到你機器的 ip 上申請 ssl 憑證設定 nginx, run service將 domain name 綁定到 ip 上首先,你得要先取得一個 domain name, 通常這個 domain name 是跟供應商買來的,常見的供應商有:GodaddyNamecheapp.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 這時候會出現藍色的互動式介面,不要慌張,輸入你要填入的東西即可 :) 將所有東西輸入完畢之後,你就已經取得屬於該 domain name 的…

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



如果有錯誤的地方,還請留言指教!