感謝天橋下的說書人先踩了雷「Pickles 與 Jenkins 的結合」。
Jenkins 的 HTML Publisher Plugin 可以方便我們瀏覽 HTML 格式的 Report,不過自從 Jenkins 1.641 開始遵循 Content Security Policy 後,HTML Report 如果有內含 CSS、JavaScript,它可能就不 work 了。
感謝天橋下的說書人先踩了雷「Pickles 與 Jenkins 的結合」。
Jenkins 的 HTML Publisher Plugin 可以方便我們瀏覽 HTML 格式的 Report,不過自從 Jenkins 1.641 開始遵循 Content Security Policy 後,HTML Report 如果有內含 CSS、JavaScript,它可能就不 work 了。
一開始是在 CKEdtior 中要新增超連結時發現的,當 CKEditor 是放在 Bootstrap 的 Modal 中時,只要是按 CKEditor 上的功能按鈕跳出來的視窗,都無法輸入文字。
看到這訊息我研究之後覺得興奮,在 Selenium.WebDriver 3.0.0 以前,Selenium.WebDriver 內建的 FirefoxWebDriver 是由 Selenium Projects 單獨開發跟維護,從 3.0.0 開始 Selenium Projects 跟 MDN 合作做了一個東西叫 geckodriver,它是下一代的 Selenium FirefoxDriver,歡呼!
先要感謝 Microsoft MVP Program,在 MVP 的聚會當中邀請到在 EQ 這方面的 Coach - Jesse S. Hsu,在 Talk 的尾聲 Jesse 提到了一個檢視個人短板的方式,所謂的短板就是人或事物的弱點(缺點),回家查了一下 Jesse 提到的方式很像 The Development Pipeline。
在設計中加入 AOP 著實會讓程式碼清晰度大增,讓程式的職責更清楚,Autofac 中的擴充套件 Autofac.Extras.DynamicProxy 可以輕鬆地讓我們實現 AOP 的功能,在註冊完後可以呼叫 EnableInterfaceInterceptors()
或 EnableClassInterceptors()
的其中一個方法來啟用 Interceptors,而這兩個擴充方法的區別又在哪?
時常回到原點思考,可以幫助我們確認做這件事情的價值,物件導向設計原則及模式在網路上有很多文章在介紹它,一篇比一篇寫得還詳細,但是搜尋「為什麼要遵循物件導向設計原則及模式」,文章的數量就不多了,原因我想大概就是有些事情必須要切身體會,才會有所體悟。
今天以前,我一直以為「在 C# 程式裡面只要是 String 型態,其內容都會在 String Pool 有一份,而且相同的 String 實體物件在記憶體中只會有一份。」,這個觀念在今天得到了修正:「只有在編譯時期的 Literal String,預設才會放進 String Pool,執行時期動態組成的 String 物件則不會。」,再次命中了「程式是照我們寫的跑,不是照我們想的跑。」
面對被存放在 SQL Server 中的 Legacy Stored Procedures 這群洪水猛獸,遇到它們比遇到 Legacy C# Code 還讓人感覺無力,一方面是之前寫的人對 SQL 語句有自己的幻想,另一方面是要公司買維護工具給大家用比登天還難,今天在 Tune 一段 SQL 查詢語句時,讓我想起以前共事的 DBA 有表演過叫 SQL Server 分析查詢語句,然後提出改善建議的工具,就是它 - Database Engine Tuning Advisor。
天有不測風雲,人有旦夕禍福;服務在走,HA 要有,先前有介紹過使用 Redis-Sentinel 打造 Redis 的 HA,當時只完成了伺服器端的設定,這次要介紹如何在應用程式這一端也完成自動 failover,以維持服務的 HA。
為了讓搜尋引擎多認識我們的網站、提昇搜尋結果的排名,大都會做 SEO(Search Engine Optimization),其中有一條規則是要讓網址保持一致性,避免相同的網頁內容使用不同的網址,導致網頁的瀏覽量被分散,因而讓搜尋引擎認為我們的網頁內容沒什麼人要瀏覽,使得該網頁的權重下降而影響排名,如果是全新的網站,我們大可配合 SEO 來調整設計,可是如果是已經被蹂躪過的已存在網站,又剛好是 Host 在 IIS 上,該怎麼辦?