2018年2月2日

[隨筆] 第一場博士論文口試 (校內口試)

歷經各種狀況後,原定計畫是去年 9 月就能口試,結果各種投稿不順利就一路的延到現在終於可以口試了,算一算差了大約快半年 Orz 在這期間還發現系上對於博士口試還非常囉嗦,各種資格審查 & 行政文件要跑...雖然正式的口試還沒開始,不過就先記錄一下今天的前哨戰:校內口試吧

2018年1月6日

[筆記] 頂級勃根地紅酒的敲門磚

如果要問我這次的品飲的心得,我認為可以用下面的問句做個總結:
當你拿到了前往山頂的敲門磚,你也從眾多文章中得知了山頂有著曼妙絕倫的風景,只是通往山頂的路途漫漫,考驗極多,代價高昂,要看到預期中的風景還得要運氣好,那麼...你是否還願意攻頂?

2017年10月15日

[筆記] Social Psychology: Heuristic (思考經驗法則)

思考經驗法則簡單來說就是根據 "經驗" 來做判斷,即便這個經驗所推論出的結論是錯的,但經驗法則的特點在於這會是第一時間最容易浮現腦海中並影響我們判斷的準則

2017年10月9日

[C++] covariance / contravariance

covariance / contravariance 是跟繼承有密切關聯的產物,而且與語言規範有關。然而這邊雖然要講這兩項性質,實際上 C++ 的語言規範上是 invariance,因此若要達到類似效果,在 C++ 必須要在類別設計時就加以考量。

 covariance / contravariance 簡單來說,就是在特性情況下,子型別與父型別之間能否接受互相轉換。這個特定情況舉例來說,就是放在 container 內的狀況。

2017年9月30日

[食譜] 簡易版番茄香菇菜飯

新分類,用來記錄曾經煮過的菜的方法
---------------------------------------------------
嘛,簡易版的原因在於是直接用電鍋的懶人煮法,所以有很多可加強的地方 XD
因為不想一次煮太少很難備料,所以都是抓 2 ~ 3 人份

2017年9月18日

[C++] A Polygon to Rectangle Conversion Tool

偶然間需要用到把直角多邊形 (rectilinear polygon) 切割成數個互相不重疊的矩形 (沒有其他最佳化要求),因為大多數找到的方法有最佳化的需求 (像是用最少的矩形或是舉行要盡可能大之類的),所以實作起來都還挺煩的,不過今天偶然間找到一篇方法超簡單的論文,雖然有點久了,不過已經滿合乎我需求了,就把它實作出來了

我已經放上 github 了,連帶相關的論文跟方法簡介
https://github.com/shininglion/rectirization

2017年8月27日

[EDA] Negotiation-Based Maze Routing 的部分困擾

Negotiation-based maze routing 可以說是現在 router 的基礎架構了,這個主要因素來自於當有許多 Net 要共同競爭相同的路徑以便縮短線長時,這個機制會讓競爭激烈的地區有相對大的成本,讓有其他選擇的 Net 可以轉而選擇相對較差但仍能完成繞線的路徑。當然,這種機制聽起來很單純美好,實作起來時總是會有其他許許多多衍伸的問題

2017年7月26日

[EDA] Transmission Gate (傳輸閘) - Logic Switch using CMOS design

目前數位 IC 設計上所用到的電晶體分成兩種型態 P-type MOSFET (P-MOS) & N-type MOSFET (N-MOS),兩者在數位 IC 設計上的功用都是當做開關 (switch),用以控制電流是否能通過。另外由於 MOSFET 本身的特性:電壓要低於一定閥值 (threshold voltage) 才能導通,同時這個閥值不是固定的,會受到源極 (source) 訊號以及汲極 (drain) 訊號的電壓影響 (好像是叫 body effect,先進製程應該會有更多會影響 threshold voltage 的問題),因此 P-MOS 跟 N-MOS 在啟動開關跟傳輸電流上各有差異:

2017年7月23日

[C++] boost::geometry::overlaps 的檢查與預期不符

目前的程式因為需要大量的多邊形操作,所以現在是直接用 boost::geometry 來做相關的運算,其中很常用的是要檢查 2 個多邊形是否重疊到,在 boost::geometry 中有提供 2 種操作:intersects & overlaps,兩者差異如下:
  • intersects:2 個多邊形只要有 "一個點" 重疊到就算有相交
  • overlaps:2 個多邊形必須要有重疊到 "一塊面" 才算
所以如果今天要檢查 2 個多邊形是否只有重疊到 "一條邊" 就必須自己想辦法兜出來,但這不是這次的重點,這次的重點在 overlaps 有另一個隱藏的細節:
其中一個多邊形不能完全包含住另一個多邊形
這種情形下,overlaps 的回傳值是 false,然後我 TMD 踩到這狀況結果問題找超久阿阿阿阿
舉個例子,下面這隻程式的 p1 被包在 p2 裡,但是這情況 overlaps 的回傳值是 false (也就是沒有重疊):

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
typedef boost::geometry::model::point<int, 2, boost::geometry::cs::cartesian> point_t;
typedef boost::geometry::model::box<point_t> box_t;
// point should be in clockwise order
typedef boost::geometry::model::polygon<point_t> polygon_t;

int main()
{
    const polygon_t p1 {{{0, 0}, {0, 2}, {2, 2}, {2, 0}, {0, 0}}};
    const polygon_t p2 {{{0, 0}, {0, 3}, {3, 3}, {3, 0}, {0, 0}}};
    printf("is overlap? %d\n", boost::geometry::overlaps(p2, p1));
    return 0;
}

boost geometry 的實作從 document 來看應該是有遵照一定的規範在處理,不過我到現在還沒仔細看過,搞不好那規範裡面有一些跟一般預期不同的結果...Orz