2014年4月28日

[筆記] 20140427 品酒會筆記

自從開始喝葡萄酒後,新竹這邊有酒友大約每個月會扮一次品酒會這樣 (不過其實喝的半隨興半認真XD),喝到現在大約兩年了,其實這對我的幫助也滿大的,因為可以一次喝到比較多種類的酒,在建立資料庫的時候會快很多。這次的主題是柏根地

2014年4月23日

[程式] 程式設計師永遠都會遇到的難題:document

注意:這是一篇抱怨 document 的問題多到讓我抓狂抱怨文

學過程式一段時間而且有看過 coding style 或是 clean code 之類的書籍或文章的應該都知道要有良好的註解或是 document,不然就是 coding 要注意命名、寫法之類的以提升程式可讀性,不過工程師最常做的就是懶得寫註解或文件。這到底有多重要呢?重要到看到兩個都做很差的程式會讓人腦溢血阿!!

2014年3月31日

[EDA] Timing Driven Placement

     Placement 在 EDA 的 back-end flow 中扮演著承先啟後的角色,電路中的所有的邏輯閘、Macro (比方說來自其他人設計好的電路)要在這個階段通通擺放在 "適當" 的位置。何謂適當的位置? 這沒有標準答案,純粹看想要達到怎樣的目的。比方說,如果希望最後總連線長度 (wirelength) 要最短,適當的位置就是擺完後的結果要可以滿足這個條件。然而隨著電路的設計越來越複雜 (根據我所看過的 paper 中,不論是做怎樣的題目,在 abstract 或 introduction 以這句話作為引言的我覺得有八、九成以上...) ,要考慮的問題其實越來越多,也越來越難解決。電路設計過程中最看重的 timing 就是其中之一。

2014年3月9日

[食記] 餐酒會 @ 竹北 Vincent's Foods & Drinks

自從加入葡萄酒社團後,新竹幫這邊大約每個月會有一次聚會,然後偶而會有隨性的餐酒會,今天的餐酒會地點是辦在竹北的歐式餐廳:Vincent's Foods & Drinks,搭配的酒是 Maison Lou Dumont 2009 年的一支廣域勃根地的白酒 + 四支不同村莊的村級酒。

2014年3月5日

[C++] Exception Safety & Guarantees

Exception Handling 是個大學程式設計課通常會教,但不會著墨太深,卻又很重要的東西之一。一般課程關於 exception handling 的部分通常在講解完該語言如何使用 exception 之後就差不多結束了,但是 exception 的重要性卻完全沒有被涵蓋其中,一般作業上也很難出到可以讓同學理解它的重要性何在,何況在僅講究有寫出來就好的作業/project 等情況下,即便是個適合使用 exception 的場合也多半不會使用,是以大多數沒有自行鑽研的人是不太了解的。這篇是來簡單淺談 C++ 的 Exception Handling 中的 exception safety 與 exception guarantees,內容主要參考自 Effective C++More Effective C++ 以及 Exceptional C++。書中會更深入探討這部分,有興趣的人可以自行參閱。


2014年3月4日

[品茶] 茶帷-爾利亞春夏摘大吉嶺品飲心得

在某次茶友來找我泡茶時,因為聊到了素有茶中之香檳的大吉嶺在臺灣手搖飲料店其實相當的普遍,不過若想買到大吉嶺的茶葉其實沒有想像中的容易。大吉嶺因為只有在印度原產地出產的才能叫大吉嶺,換言之它是個只有進口才喝的到的茶。若是想喝到品質較好,也勢必需要找到有信譽的商家購買,在一開始時其實我是完全不知道要去哪邊找大吉嶺的茶葉的。後來網路上搜尋、茶友推薦後得知了三家店:PEKOE綠碧茶帷,這才開始探訪大吉嶺的奧妙。

2014年3月2日

[品茶] 綠碧 - 夏摘與秋摘大吉嶺

 大吉嶺,這個我們常聽到的紅茶名稱其實是印度的一個地名,可以參考 [1] 的地圖。那邊出產的茶因為其特殊的地型與氣候而有著迷人的風采,一開始所生產的茶葉是專門輸出給英國的,後來因為屢次得獎出名後也行銷到全世界了。大吉嶺紅茶的迷人風采來自於獨特的氣候環境,只有那邊所生產的紅茶才有資格叫大吉嶺紅茶,也有茶中之香檳的美稱 (價格也像香檳一樣不斐)。

[生活] 品味生活,從屏除一切靜下心開始

開始品茶品酒已經快 3 年了,最一開始其實只是很簡單的喜歡的一款茶,或是嚐到覺得喜歡的酒,沒有深入的研究,也沒有真正的了解過。真正開始學著去了解一款茶、一支酒是從葡萄酒開始,它帶著我進入了一個我從未接觸過的世界與交際圈,開始學著怎樣去了解所謂的 "飲品" 是什麼樣的概念與藝術。

2014年2月18日

[C++] rvalue reference & implementation class

之前在這篇文章有簡單的聊過 rvalue reference 這東西,當初標準會定義這個簡單來說就是為了效能,特別是 C++ 常常會暗地裡幫你做了一大堆你根本沒想到的事情,因此善用 rvalue reference 可以促使 compiler 提升程式的整體效能 -- 特別是避免無意義的複製這方面。

這篇主要是談 rvalue reference + implementation class 的結合可以產生什麼樣的效果,在 C++,由於 header file 必須定義好 class 的 declaration -- 包含使用者不需要知道的 private members,因此創出了 implementation class 這東西負責撰寫並處理原始 class 要做的事情,而要公開的另一個 class 就只有一個 private member 是 implementation class 產生的 object,而 public member 就是 implementation class 的 public interface。這個小技巧原本就如同前面所說,只是個用來 client 不會看到不用知道的東西,除此之外確實是沒什麼效果,但是 rvalue reference 的出現讓這個效果可以有提升效能的作用。

2014年2月9日

[C++] Type Erasure (型別抹除) - A Technique of Behavior Abstraction

    其實我真正要寫的是這篇XD 只是剛好有例子會用到 Functor,所以就順道寫了那兩篇 functor 的介紹。Type erasure (後面都會簡寫成 TE) 其實不算是 C++ 語言中的特性,應該算是一種技巧,用來避開 C++ 在編譯過程中型別檢查造成的麻煩 (所以才會叫型別抹除)。這項技巧其實在 C 也有,只是 C++ 因為引入了 OO,所以 C 的型別抹除技巧不能完全套用在 C++ 上,就如同 qsort 在 class 上會撞牆是一樣的情況 [2]。另一方面,C++ 因為有了 template 可以使用,所以這項技巧可以有了更好的發揮空間。同時,TE 也扮演了 template 跟 OO 之間的接合劑 (聽起來好像有點奇怪...) [3]。一個最顯而易見的例子就是 std::sort 的第三個參數就是運用了 TE 的技巧,所以他可以吃進任何可以像 function 般操作的東西,而不管你扔進來的東西的型態為何。