Software entities (class, modules, functions, etc.) should be open for extension, but closed for modification.
- Bertrand Meyer
Junior programmers create simple solutions to simple problems. Senior programmers create complex solutions to complex problems. Great programmers find simple solutions to complex problems.
- Charles Connell
註1:本部落格的範例程式碼在 2015 年以前的文章中,大多是以全型空白做縮排。如需服用,請自行用文字編輯器的取代功能把全型空白取代成半型空白。
註2:本部落格的內容授權請參閱部落格底部的授權宣告。
2018年11月23日 星期五
2018年11月16日 星期五
Angular Universal 伺服器渲染
目前覺得 [3] 解釋地比較詳細,官方文件 [1] 寫得有點籠統。
如果嘗試從 Java 的角度來理解整個 Angular Universal 相關的東西的話,好像是這麼理解的:
- Angular、Angular Universal 可以看成是 Kotlin 語言;Node.js 可以看成是 Java 語言。
- Angular、Angular Universal 寫出來的檔案好像都是 .ts 檔,也就是 TypeScript。這些檔案必須經過編譯,把他們翻譯成 JavaScript;若以 Java 的領域來理解,就像是 Kotlin 也是個 JVM 語言,但真正要在 JVM 上執行前,需要先透過編譯或者直譯器把 Kotlin 的語法翻譯成 Java 的語法。
- 在查 Angular Universal 時常常會看到 Express 這玩意兒,Express(ExpressJS)對照 Java 的話比較像是 Spring MVC 或者 Jersey 這類 Web 框架。它的程式碼應該是用來告訴 Node.js 要如何解析、處理和回應 HTTP request。
所以整個 Angular Universal 的伺服器渲染,大體上要做的程序會是這樣:
- 以 Node.js 啟動的 Web 伺服器程序負責接收 HTTP Request。
- HTTP Request 會由 Node.js 上執行的 ExpressJS 程式碼來處理。
- ExpressJS 的程式碼去呼叫 Angular Universal 的模組(即 renderModuleFactory()),進行 pre-rendering。
- Angular Universal 回覆渲染後的結果給 ExpressJS,ExpressJS 再回覆給客戶端。
參考資料
2018年11月12日 星期一
2018年11月8日 星期四
org.hibernate.QueryException: could not resolve property: “xxx”
寫 Spring Data JPA 或者 Hibernate 時很重要的一點,就是在定義 Repository 時,對應的欄位要用 Entity 裡的變數名字,而不是實際資料庫裡的資料欄位名字。這也包括了當要使用 Pageable 等物件時,物件裡宣告的欄位也要用 Entity 的變數名字。
參考資料
2018年11月2日 星期五
Billions of Messages a Day - Yelp's Real-time Data Pipeline
- Yelp 即時 Data Pipeline 如何處理每天數十億的訊息量
- 如何將 MySQL Table 內容即時串流到 Kafka
- 串流時如何處理不同資料庫 Scheme
- 利用 PaaSTA 與 Storm 來解決即時串流問題
- 如何使用 Saleforce Connector 整合 Saleforce
- 如何將 Kafka 的資料即時串流到 Redshift
- 將 Yelp 的 Data Pipeline 開源
- 如何提升 Yelp MySQLStreamer 效能 3X 倍
- 如何確保從頭到尾的串流資料無誤 (MySQL -> Redshift)
- 將 Yelp Data Pipeline 結合 ElasticSearch 以利搜尋