Load Complex JSON Schema with Python

最近拿 JSON schema 來驗證自己的 API 回傳內容有沒有錯誤,在過程中遇到一點小障礙─無法讀取複雜的 JSON schema。 假設有支 API /v1/products/{product_id},它的 schema 如下: { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Product resource", "description": "A product resource", "type": "object"…

Mac 下切換多版本的 PHP: php-version

如果你用 PHP 開發程式,一定會遇過有些 legacy 的專案需要 PHP 5.6 甚至 5.3,但新的專案卻希望走在時代的尖端,使用 PHP 7 以上的版本。這邊就來說明一下,要怎麼快速地切換 PHP 環境。 前提 你的 PHP 得是用 Homebrew 裝的,但我相信今時今日應該大家起手式都是 brew install 了吧。 裝兩個版本的 PHP 先裝 php71 $ brew install php71 $ php -v PHP 7.1.12 (cli) (built: Dec 2 2017 12:…

PHP cURL 的兩三事

平時在做 request 都是用別人刻好的 library ,Python 用 requests,而 PHP 就用 Guzzle 之類的。但...畢竟開始工作了,想說幫專案減少一點相依性,原生的功能做得到就盡量少用別人的。 結果就出事了。以後還是直接用 Guzzle 好了 所以寫篇文章來紀錄一下... 一般來說,使用 cURL 會這樣子呼叫 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.example.com"); curl_setopt($ch, CURLOPT_HEADER, false); $response = curl_exec($ch); curl_…

推薦人與 Nested model set

推薦人機制相信大家都不陌生,多多少少都有遇過,有些網站可能在註冊會員時會有一欄可以填寫推薦人,概念大致上如下: User A 首先加入,他覺得這個服務很棒於是推薦給 User B 和 User C, User B 也感受到了服務帶給他的便利,於是推薦給 User D 和 User E,這跟老鼠會有 87% 像。 今天在吃水餃看新聞的時候,推薦人機制從我腦中呼嘯而過,就邊吃水餃邊想,如果是我,我要怎麼設計出一個有推薦人機制的會員系統?一開始想說用個 mapping table 就可以了事,但仔細一想,這樣 query 會寫不完呀! 畢竟是老鼠會推薦人機制,你會想要知道因為 User A 而進來的會員究竟有哪些人,以上面的例子來講就是 User B User C / \ User D…

這陣子

這陣子做了幾件事: 成功嶺秋令營 開始工作 從 Pelican 搬到 Ghost 開始工作後沒多久,就想著應該要繼續寫 Blog ,最主要是能紀錄工作上碰到的問題,其次寫點東西也好。從成功嶺下來只有兩個多禮拜,卻覺得過了好久,跟以前很不一樣了呢。最顯著的差別是宵夜,上班後就幾乎沒在吃宵夜了,總想著要快點睡,不像以前十二點一到就餓慘。 至於為什麼要從 Pelican 搬到 Ghost ?倒也不是 Pelican 不好用,只是覺著要有個編輯器,打起來比較舒服。除了這點,其他的大概沒什麼變,一樣是 host 在 github page 上。 在搬家的過程遇到一點障礙,可能是 Pelican 的用戶太少了,所以沒有現成的 pelican -> ghost migrator,雖然舊的文章也沒幾篇,但我畢竟是個念舊的人,少歸少總得接過來,於是…

Intro to Scrapy, CrawlerSpider

前言 以前自己寫爬蟲,由於 scale 都很小,所以也沒考慮要用 framework,都很單純的使用 requests + BeautifulSoup 來完成。這次突然興起想把唐詩宋詞都爬下來,就拿來練手練手。至於為什麼要爬唐詩宋詞?那又是另一個故事了... 1. 環境配置 為了不讓本身的環境紊亂,我都習慣先開一個 virtualenv ,並把需求寫在 requirements.txt 裡面,一來比較清楚明瞭,二來也可以指定版本號。 mkvirtualenv crawler # 產生環境 workon crawler # 切換到該環境 deactive crawler # 跳出該環境 以上是大致上會用到的指令,至於如何在你的作業系統上安裝 virtualenv這個部分就不贅述了。 再來就是比較主要的部份,安裝這個範例要使用的package。 pip install Scrapy peewee peewee 可以選擇裝或不裝,後面範例是用 sqlite 來操作的。 2.…

Redux 架構下實作 Async Actions

最近專案開發上使用了 reactjs ,並採用redux架構。而依照 javascript 的特性,你沒辦法假設他會將指令執行完才繼續下一道指令,所以要怎麼做到多個 Action 異步處理呢? 舉個例子,當你 update 一份資料以後,希望他能隨後就 fetch 回來,以確保 state 裡面都是最新的資料,直觀的來寫會是這樣,但眼尖的你一定會發現不太對勁。 export const fetchData = createAction('FETCH_DATA', APIUtil.fetchData); export const updateData = createAction('UPDATE_DATA', APIUtil.updateData); this.props.updateData(data); this.props.fetchData(); // not latest result 它不會等 updateData…

Procmail 搭配 Script

我們每天都在收信,那有沒有某些信件是你想挑出來,特別處理的?有的話可以使用 procmail 這個程式來幫你。 首先你家目錄下的 .forward 檔案內容必須是 "|/usr/local/bin/procmail" 確定信件會被 pipe 給 procmail 處理。 那現在重點會擺在 .procmailrc 這個檔案,這裡只會粗淺的講一下實現「用 procmail 將信件傳遞給 script 執行」。 假設我想要將從 ken8203@love.com 寄來的信傳至 mail_processing.py 做處理 :0Wc: * ^From.*ken8203@love.com | /usr/local/bin/python $HOME/mail_processing.…

Scikit-learn Combining Classifiers

跑 Classification 的傳統方式是決定一個 Classifier 後,透過 feature 的新增或是參數的調整,來提高準確率;而另外一個方法就是集百家之優來改善預測的結果-Essemble。 今天要介紹的是用 Voting 的方式來決定預測的結果,當然這只是 Essemble 中的其中一種,還有很多其他的方法。 Scikit-learn 的 Voting 分為 hard 與 soft。 Hard 簡單來講就是多數決,例如: # of classifierprediction1class 12class 23class 14class 3 這樣預測結果就會是 class 1。 Soft 這會依照預測出來每個 class 的機率乘上你給的權重(weight)來做定奪,例如:(w1=w2=w3=1) # of classifierclass…

如何架設 MySQL Cluster

MySQL Cluster提供無共享(shared-nothing)的叢集以及自動分片(auto-sharding)的功能,並且具備 High Availability 以及 Scalability 的特點。 *什麼是 shared-nothing?這是一種架構,在此架構下,每個節點都有自己的 CPU 、記憶體、空間,而跨節點之間的數據往來通常透過網路來完成。 以下使用 VM(Ubuntu) 來操作。要架設功能完整的 MySQL Cluster 至少需要 3 台 VM,一台 Management Node 以及兩台 Data Node 。 Management Node 的存在可以避免 Split-Brain 的情況發生,而兩台 Data Node 是為了 Availability ,MySQL Cluster…