Python Join with Lambda – 更客製化的 Join

寫程式的人對 split()、join() 兩個東西肯定不陌生,在 Python 裡面我們可以透過 String.join(list) 把 List 合併成字串,例如 “,”.join([“A”, “B”, “C”]) 會回傳 “A,B,C” 字串,或是反過來透過 “A,B,C”.split(“,”) 來拆成 List,但你一定有過這樣的需求卻無法解決吧:

  • 把字串合併但首字大寫
  • List 裡面存的是數字,但 join 需要是字串才可以處理

這些問題可以透過 List Comprehension 解決,例如型態處理的部份可以像這樣撰寫語法:

nums = [1,2,3,4,5]
nums_str = [str(num) for num in nums]
print(",".join(nums_str))

但除了 List Comprehension 以外還有其他解法嗎? 你肯定也想過像 sort 那樣傳送 lambda function 給 join 吧!

閱讀全文 Python Join with Lambda – 更客製化的 Join

Laravel Artisan Migrate “Table Already Exists” or “Foreign Key” Error

在部署半年前用 Laravel 5.2 開發的專案時遇到不少問題,其中一個就是執行 php artisan migrate 之後卻遇到 Table Already Exists 的錯誤,但在這之前我從未建立過該 Table,後來深入研究發現該 Table 確實存在但 project_migrations Table 裡面卻沒有建立紀錄,於是我將 Table 手動刪除後在直接執行一次 php artisan migrate,果然,這次出現了真正的錯誤訊息:「General error: 1005 Can’t create table ‘dbname.#sql-fbc1_15e6’ (errno: 121) (SQL: alter table `karl_project` add constraint `project_user_id_foreign` foreign key (`user_id`) references `karl_user`
(`id`))」

閱讀全文 Laravel Artisan Migrate “Table Already Exists” or “Foreign Key” Error

Get File MD5, SHA1 Checksum on Mac OS

之前在 Windows 習慣做任何事情都要另外安裝程式,檢視圖片要另外裝、瀏覽 PDF 要另外裝,計算檔案 MD5、SHA1 也要另外裝程式,但實際上在 Mac OS X 不用這麼麻煩! 如果你要計算檔案的 MD5 或 SHA1 Checksum,其實就有內建的小工具可以使用囉!

閱讀全文 Get File MD5, SHA1 Checksum on Mac OS

使用 JavaScript 操作剪貼簿複製文字

在過去想要用 JavaScript 操作剪貼簿進行複製、貼上的動作十分麻煩,之前在開發 NTUST.ME 臺科短網址時,為了方便大家複製縮短後的網址,特別研究了 JavaScript 對剪貼簿操作的 API,發現在較新版的瀏覽器,其實有一個 execCommand 可以進行許多方便的文字操作,例如複製、全選等等,以下就讓我來介紹一下吧!

閱讀全文 使用 JavaScript 操作剪貼簿複製文字

Python 漢語拼音處理(姓名中翻英、地址中翻英)

今天幫同事處理大量的姓名、地址中翻英需求,研究了 Python 在漢語拼音方面的作法,畢竟你總不能一筆一筆複製到郵局或是網站上吧(笑),結果出乎意料的簡單,地址翻譯的部分透過各家的 Geocoder API 即可處理,漢語拼音則是有第三方的 Library 可以使用,而且翻譯效果還不錯,不能說盡善盡美,但搭配工人智慧足以彌補那小小的缺陷,畢竟如果要解決最後的小缺陷,可能要投入大量的資源、技術,導入機器學習的方法來處理(其實之後會有興趣做看看,畢竟在華文圈裡面好用的工具真的太少了)。

閱讀全文 Python 漢語拼音處理(姓名中翻英、地址中翻英)

How to make elasticsearch.py Fast (Bulk Operate)

用 Python 操作 Elasticsearch 時不免俗的肯定會安裝官方推出的 elasticsearch.py,最近在用 Python 接收 Email Log 並寫入 Elasticsearch 時有蠻多心得可以分享的,大家都知道 AWS lambda 是用執行時間算錢的,所以在撰寫 AWS Lambda 時我可說是分秒必爭,看到執行超過 0.5 秒就各種吐血,所以從最開始的 .index 一筆一筆插入資料到 Elasticsearch,到後來用 streaming_bulk 處理,最後受不了用 parallel_bulk 混合 streaming_bulk 操作,以下就來聊聊這幾種方式的差異以及地雷吧!

閱讀全文 How to make elasticsearch.py Fast (Bulk Operate)

Python Convert String to Boolean

今天在撰寫 AWS Lambda 時因為從環境變數讀取設定的關係,需要把字串轉成布林來做判斷,一般的想法不外乎 Python 會幫你轉換,或是用 bool(“True”) 轉換就可以,首先其實 Python 是不會幫你轉換的,這點很重要! Python 在形態方面其實是不會做自動轉換的,他只會很阿莎力的報錯,不過大家肯定想說用 bool() 轉換就沒問題了吧!? 事實上,這個地雷害我今天搞了半小時才解決…

閱讀全文 Python Convert String to Boolean

How to use Python GroupBy Data (List+Dict)

用 Python 處理資料時,對資料的某個 Key 進行 GroupBy 是很常見的需求,例如分析 Email Log 時,想知道某個標題的發送統計數,或是列出每個標題的 Email Provider 前五名之類,就會需要對標題進行 GroupBy 的動作,在資料庫裡這是十分簡單的事情,但如果你不想丟資料庫的話呢?

除了 Pandas 這套超強的資料處理函式庫可以幫你之外,其實 Python 本身也有 GroupBy 可以使用哦!

閱讀全文 How to use Python GroupBy Data (List+Dict)

Tips for Upload Large File to Google Cloud Storage

因為我有定期備份資料的習慣,會把 Google、Facebook、Evernote、相簿等等資料都定期備份到 Google Cloud Storage 上面,每次用瀏覽器上傳都會很煩惱上傳速度慢的問題,而且如果網路斷線還要重新傳送那 10 GB 的大檔案,後來研究了官方文件,找到一些關於上傳大檔案到 Google Cloud Storage 時很好用的小技巧分享給大家。

包含:

  • 如何讓 GCP Storage 幫你驗證檔案的 MD5 Checksum
  • 如何啟動續傳功能,斷線沒關係可以繼續傳送
  • 如何透過平行化傳輸把上傳速率榨到極限

閱讀全文 Tips for Upload Large File to Google Cloud Storage

Enable Cross-Origin Resource Sharing (CORS) for Phaser.js

當你用 Phaser JS 載入不同網域的資源、素材時,就會遇到瀏覽器同源政策的阻擋,並冒出一堆錯誤訊息,例如:

XMLHttpRequest cannot load http://s.ntustcoding.club/scroll-game-workshop/map.json. No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://s.codepen.io’ is therefore not allowed access.

實際上,Phaser 本身是有支援 跨來源資源共享 CORS 的,只要透過一行簡單的語法就可以解決囉,當然前提是你所使用的網路空間也有支援 CORS 才行。 閱讀全文 Enable Cross-Origin Resource Sharing (CORS) for Phaser.js