[Python] list 用 `.extend()` 與 `+=` 的差別

譬如有兩個 list ab,使用 a.extend(b)a += b 有什麼相同或不同?有沒有什麼 general 的 best practice for using one rather than the other?

其實在這個情境下,這兩個用法幾乎一樣。它們都會直接 in-place 的修改 a,把 b 裡面的元素加到 a 的後面

  • += 會呼叫 list 的 .__iadd__() 來做 in-place 的修改
    • 所以在這個情境下,b 可以是任何 iterable,譬如 [] += {} 會得到 []
    • 假如用 += 的是 immutable 的 type,Python 發現沒有 .__iadd__(),接著就會呼叫它的 .__add__(),此情況下 a += b 等同於 a = a + b

以下列出少數有差別的地方:

使用 Dokku 將 Web App 部署在 DigitalOcean

因為 Heroku 現在要收費了,原本放在上面用免費方案的 project 就需要找新的方法。於是找到了 Dokku,他的 GitHub page 介紹如下:

Docker powered mini-Heroku. The smallest PaaS implementation you’ve ever seen.

的確是很傳神,因為使用方法跟 Heroku 很像,基本上可以從 Heroku 無痛遷移,差別在你需要用自己的 VM & domain,配合 dokku 就可以在上面用 docker 管理你的 application,就像他的 about 寫的:

在 Mac 加入 ssh key 的步驟

  1. ssh-keygen -t ed25519 -C "{你的 email}"

    • 預設路徑假如已有相同檔案,記得指定新的完整路徑
    • 如檔名不用預設的,下面 id_ed25519 自行替換成自己的檔名
  2. vi ~/.ssh/config

    • 舉例:加上如下

      1
      2
      3
      4
      Host GitHub
      HostName github.com
      IdentityFile ~/.ssh/id_ed25519
      IdentitiesOnly yes
  3. ssh-add -K ~/.ssh/id_ed25519

    • register your private key with ssh-agent
  4. pbcopy < ~/.ssh/id_ed25519.pub

  5. 貼到所使用的服務網站的相對應設定頁面

簡單統整 JWT 相對於傳統 Session 驗證的好處

  • Server 不用存 Session
  • 只有在 Client 拿新 JWT 時才需要跟 DB 溝通
    • Clent 拿的時機:JWT 到期或第一次拿
    • 為何不需跟 DB 溝通?
      • 因為 JWT 裡已有所需資訊
      • 但假如業務需求需要另外取敏感資訊的話還是需要碰 DB
  • 參考

PostgreSQL/MySQL local docker 開發的初始 setup

container run 起來之後:
PostgreSQL:

  1. docker exec -it {db-container-name} psql -U postgres
    • 以預設 user postgres 連進 DB
  2. create user {username} with password '{password}';
  3. create database {database_name} with owner {username};

用 pipenv 管理 requirements 搭配 docker-compose local 開發

  • Local 開發是跑在 Docker 的虛擬環境裡,所以 Pipenv 產生的虛擬環境只是用來裝套件產生 Pipfile.lock 而已
  • 用 pipenv 就不用自己寫 requirements.txt,不但可以自動安裝最新版的套件,而且可以很輕鬆的固定住對應 sub-packages 的版本
  • 想一次更新所有套件也很容易
  • 步驟:(以裝一個 package 為例)

Android 連續掃描多個 QR code 的實作

使用 GitHub 上 LivotovLabs/zxscanlibv0.9.0 版,目前上面有更新的版本,不過我那時候用的時候最新的就到這版

假如直接使用這個 library ,手機在掃到 QR code 的時候會震動,然後離開掃描的相機畫面回到前一個畫面,另外,它開相機的時候會把畫面變成橫的(landscape)。所以要達到我的要求的話就需要改一下裡面的 code,這邊分享一下把這個 library 應用到可以連續掃描多個 QR code 的經驗 (使用eclipse),可以搭配該 project 的 GitHub 頁面說明一起看

Use Retrofit with Dagger - simple example

RetrofitDagger 都是 Square 出的 library,網路上已經有很多相關介紹了,因為 Retrofit 的 REST API Interface 的實作建議採用 Singleton 的方式,所以搭配 Dagger 來管理是個蠻好的 paradigm

今天在這邊分享一個簡單的整合 example,希望可以讓第一次用且想要整合這兩個 libraries 的人快速上手,更 detail 的說明可以參考上面兩個連結~

Spring MVC 之 DispatcherServlet - url pattern設置問題 (/ vs. /*)

最近把我的 project 轉為 spring mvc 的架構,想說可以順便用 spring 的 RESTful。Controller 的 method 大概如下:

1
2
3
4
5
6
@RequestMapping(value = "/show_my_page", method = RequestMethod.GET)  
public String showMyPage(Model model) {
// do something

return "myPage";
}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×