淺談 D-ATC

A simple introduction to Digital Automatic Train Control system.

2008 高鐵營

2008 台灣高鐵營紀錄

速度碼? 速度?

速度碼? 速度?

2014聖誕美西遊

LA 迪士尼 環球影城 華納影城 SF 金門大橋 SEA 波音工廠 休閒

2011聖誕北京微軟面試之旅

一次有趣的面試經驗兼北京自由行

Saturday, February 11, 2017

20170211 機場捷運試乘

因為朋友在桃園機場捷運工作的關係,很幸運拿到親友團的試乘(大感謝),搶先一下在全民公測之前先搭過一次(OB人太多感覺好可怕) 以下就是照片記錄了。(其實是很混的不想寫遊記...)

[補充] 有人討論到預辦登機要提前的問題
看了紀念品裡面的說明,預辦登機要提早三小時,我覺得對在台北應該壓力會小許多。至少可以報到完在市區晃晃,不用帶著大包小包,而且可以估好只要跑安檢的時間再去機場就好了(乘車時間36分鐘,安檢人不多(又快速通關)的話到空橋應該也不會太久)。不然以前去機場可是要提早兩小時到的阿~~


來到集合地點機捷台北車站1號出口


預辦登機是機場捷運的特點阿


因為有點吵雜  只知道這是個隨風調整的裝置!?


正式公測應該就可以從台北車站台鐵高鐵那邊走地下直接過來了


月台有分直達和普通車


航班資訊與路網圖  直達車只停紫色圈圈的站  終點站是第二航廈


機捷台北站的位置 (印象中上面應該要蓋台北雙星之類的)






往下一層這裡有給開車來的臨停區  自動報到櫃台可以拿登機證  以及行李托運
都在同一層是一個機場大廳延伸的概念






直達車座位有適合家庭面對面的  也有放行李的地方  座椅有折疊餐桌還有閱讀燈跟和掛衣服用的隱藏掛勾




一航廈的互動裝置藝術




天花板是許多城市/首都和他們的經緯度 
(因為發現有芝加哥只好不能說全部都是首都了)



個人覺得這個 PAO 蠻好看的




回程搭每站停的普通車  車上螢幕還會預估每站到達的時間
基本上跟一般捷運蠻像的相親座就是了



紀念品是紙模型  還有鄭文燦的10元紅包



2/16 就開放全民試乘囉


Monday, August 29, 2016

一個簡單的賽局小測驗

前陣子在分享了一個小測驗給周圍的朋友測,題目如下:

請輸入一個 1~100 的整數,我會將所有參加這個測驗的人輸入的數字加總平均。如果你輸入的數字最接近平均值的 2/3 ,恭喜你贏得這次的小測驗。

舉例來說,如果五個玩家分別填入:10、20、30、40、50,那麼平均是 30 ,乘上 2/3 以後是 20 ,所以猜 20 的人獲勝。

雖然說是小測驗,但實際上是個有趣的賽局。而這個賽局得到的 Payoff 是取決於所有參予的玩家。先來想想理性玩家會怎麼想,一個理性玩家不論什麼時候都會選擇對自己最有利的策略,不會突然想要來亂,或者是各種奇怪的理由,改變他選擇最優勢的策略。

讓我們假設一個極端的例子:

1. 其他玩家每個人都猜 100。那麼平均也是 100,而平均的 2/3 則是 67。所以,理解這個遊戲的 "理性玩家",不應該會選擇超過 67 的數字。

2. 假設大家都這麼想都會猜 67 以下的數字,平均至多降為 67 了,乘上 2/3 就變成 45 了,我應該多想一步可能猜看看 45 。

另一個例子:

1. 假設每個玩家猜測數字是常態分布,平均應該接近 50,那麼我就猜個 33。

2. 應該也有人這樣想,所以我多想一步,猜個 22。

從上述兩個例子可以得知,不論起始的假設是什麼,最後理性玩家猜測的數字應該收斂到 1。這樣平均的 2/3 仍是 1。大家都是贏家。而 1 這個數字是這個賽局的納許均衡。

但現實生活中,不會這麼順遂總是充滿著理性玩家,所以有些人可能會覺得不需要多猜測這麼多步,在某個數字就先停下來。而經過上述的說明以後,應該可以理解有些數字不應該出現在想贏的玩家的猜測內 (至於是什麼數字就自行思考了)。


先來看結果的統計圖:




這次參加的人數總共 43 人,基本統計數據如下:

最大值:100
最小值:1
中位數:50.5
眾 數:50
平均數:45.97674419
答 案:30.65116279
贏 家:32



贏家是 32 ,很可惜有兩位猜 33 原本應該是最接近的 (要吶喊二獎嗎!?),直到有一天有人猜 32 XD

分析這次測驗的結果,也可以看到有些特別的數字被選出來,猜測應該是規則不清楚,或者真的純粹來亂的 ( 例如: 87 不能再高了 XD  不是來亂的記得跟我說 )。當然不清楚,或者隨意填寫本來就應該是猜測數字時的考慮因素。這樣的賽局就像是股票,沒有內線,很難知道何時賣會賣在高點,買會買在低點,自己的獲利建立在別人的選擇上。

雖然人數只有 43 人,不過可以看到圖表上面有幾個高點,簡單娛樂分析一下。

1. 猜 1 和 2 的 4 位,不得不說想得非常透徹,馬上直逼納許均衡點。

2. 猜 38 和 56,我其實不確定 56 是不是一個只是想選 56 的數字,然後猜 38 是因為猜到一錠有人猜 56 XD。

3. 猜 47 和 66,也許和我上述的例子一樣是從 100 開始思考的,有一部分多想一步再自己加上一點修正值。

4. 猜 33 和 50,常態分佈的起頭,和有一些人多暗算一步。


雖然人數有點少,但是能夠在圖表上面能夠看到能解釋這種多想幾層的數據,其實蠻有意思的。真是有點好奇做第二次會發生什麼事情。

Thursday, February 18, 2016

2016 Lunar New Year NYC DC MIA



簡單記錄一下行程

Day 0 BR32 TPE 02/04 1930 => JFK 02/04 2100

Day 1 NYC Tour
  • Grand Central Station*
  • Times Square*
  • Charging Bull*
  • Saint Trinity Church*
  • Wall Street, New York Stock Exchange
  • Federal Hall*
  • Federal Reserve Bank of New York
  • New York Water Taxi Tour (East River, Hudson River, Statue of Liberty)
  • Metropolitan Museum of Art
  • Rockefeller Center
  • Empire State
  • Majestic Theater (Musical: The Phantom of the Opera)
  • 午餐神秘秤重的自助餐、晚餐韓式料理
Day 2 NYC
  • Rockefeller Center* (登頂)
  • Apple 旗艦店
  • Washington Square Park, NYC campus
  • SOHO
  • Central Park
  • Pennsylvania Station  to DC
  • 午餐吃黎巴嫩菜、晚餐吃墨西哥菜(意外被盆栽打到頭就免費了)
Day 3 DC
  • Capitol*,  Supreme Court of the US, Library of Congress
  • Capitol Hill, Embassy Row, Naval Observatory
  • Washington National Cathedral, Georgetown University, Pentagon
  • Jefferson Memorial*
  • Steven F. Udvar-Hazy Center
  • 午餐Ray's Hell Burger、晚餐Ben's Chili Bowl
Day 4 DC
  • The White House
  • Washington Monument
  • Lincoln Memorial*
  • Air and Space Museum*
  • National Museum of Natural History*
  • National Museum of American History*
  • Ronald Reagan Airport to Miami
  • 午餐博物館麥當勞(能做到全世界一樣難吃真是不簡單)、晚餐頭等艙飛機餐+邁阿密
Day 5 Miami Tour
  • Double Deck Bus city tour
  • Bay Boat Tour
  • Everglades Alligator Tour
  • South Beach Walk
  • 午餐Largo Bar and Grill、晚餐Fogo de Chão Brazilian Steakhouse
Day 6 基本上都在收東西在家裡聊天

下午從 MIA 飛 JFK 再轉搭 BR31 回 TPE (02/12 0500)

NYC旅館: Holiday Inn Express  (36th Street)
DC旅館: Intercontinental The Willard Washington DC
* = 有特別逛  其他大多是外觀經過 (?

回到台灣快一周  分享一下美東心得:

1. 絕對不要穿新鞋子出門  不要問  很可怕
2. 該誇讚麥當跑的品保品管很好嗎
    能把漢堡做得全世界口味一樣難吃...
3. 紐約: 都是中國人
    華府: a) 都是中國人和加拿大雁 
             b) 我們用監視器和狙擊鏡保護人民自由
    邁阿密: a) 好多南美正妹  說的都是西/葡語 
                 b) 一堆感覺來洗錢南美銀行
                 c) 你以為沒有中國人嘛  還是很多
4. 充分理解紐約人為什麼常開紐澤西的玩笑
5. 美國人雖然很GY  但是人民感覺非常愛國  不是鍵盤那種
6. 登機安檢已經進化成不是金屬探測門  而是圓柱體的全身掃描 
    掃不出來的地方出來會有人摸摸喔A_A  (我每次腳踝都被摸)

另外 ESTA 效期內記得入境走 Reentry 用 Kiosk 刷護照拍照印單子然後入境檢查  在 JFK 這整件事情做完大約十分鐘左右 (隔壁排隊超長)
拿行李過海關不知道為啥也異常順  也只花十幾分鐘...  下機後半個多小時就到機場大門  不知道是特例還是通例

機上的海關申報單也不需要填了  上面的問題按 Kiosk 都有  阿不過如果帶了10000USD以上入境  或者帶了一堆奇怪的農產品就我也不知道  顆顆

捨棄掉費城和波士頓不去是正確選擇  DC那邊的博物館就可以逛很久了  航太迷 & 紙牌屋粉去 DC 應該很開心

這次最有趣的一點是吃一間墨西哥料理  吃到一半對面座位旁邊的盆栽的樹(大概比球棒粗一點)  感覺是盆栽太小整棵樹連根拔起往我倒過來  下意識手擋了一下還是有點被尻到頭  不過也沒瘀青  結果賺到一頓免費晚餐  可惜的是因為當時胃口不好只點了三份開胃菜  真是扼腕... (這重點完全錯了吧...)









Wednesday, July 22, 2015

2014 聖誕美西遊 LAX SFO SEA




這個遊記離太遠就不細打了,這次去美西我的主題很簡單:牛排、星巴克創始店、迪士尼、六人行 !!

第 0 天  TPE(RCTP) → LAX(KLAX)


第 1 天  LA亂晃 Hollywood, Warner Bros, Santa Monica

Bill 推薦的牛 + 星光大道 + Santa Monica


WB 專區


第 2 天 迪士尼樂園


第 3 天 環球影城 LAX → SFO


第 4 天 SFO 睡到中午的自由行


第 5 天 SFO 金門大橋 SFO→SEA


第 6-8 天 SEA 聖誕節烤肉 波音工廠 Outlet 戰利品 SEA→TPE

Tuesday, July 21, 2015

2011 北京微軟面試之旅

說起來這也是篇故事回味


電話面試篇


2011.12.09 一個周五的早上11點,接到 HR 的電話希望約當天下午兩點線上語音面談,當時是應徵北京微軟搜尋技術中心的 Software Development Engineer  (就是Bing嗎~~)


時間來到兩點十分...

面: 可不可以說說您做過些什麼東西
(扯扯甲尚的case  扯扯計網的IM軟體  居然沒想到有Motion Planner)

扯到以前多媒體弄過搜尋引擎的時候,面試官就開始問有關搜尋的東西,像是爬下來的資料,如果還沒有任何使用者做過查詢,要怎麼決定優先順序之類的,講到某個程度瞎掰不下去就只好說研究領域不在這,順便提了一下在做什麼。


之後問了三個關於演算法的問題,由於個人腦細胞有限,最簡單的問題實在只記得大概了。這三個問題要順便說明複雜度。

1.  您知道數組吧~~  (是 array 嗎~~)  對  是 array ~~
給定一個二維數組  只會有 1 or 0  上下左右算是連通

ex:
        00101
        10100
        11111
        01000
        10101



這個裡面總共有 5 塊連通的 1s (右上、最底下的三個、和那一片),這問題您有沒有辦法解  (開始拿 motion planner 解釋寫過類似甚至更難的東西)

不過面試官的電腦沒有 Java ,早知道早點把 Qt 那個 UI 介面做完了......
所以後來面試官請我晚上八點前寄 C++ 程式碼 + 執行檔 + 一組你設計的測資 給他

2. 給一個一維數組,會有正數負數或零,請問怎麼找出一個連續子陣列其和最大。這題夠簡單吧...不過只記得大方向的亂喇賽了,反正就是要那個 O(n) 的演算法嗎~~

3. 您知道串列吧 (是linked list嗎??) 欸~~對!! 是 linked list 串列很基本是吧 (不妙...) 假設有個串列很長 他的尾端可能不小心又指回來自己某個節點造成 cycle ,那要怎麼偵測出一個串列有沒有迴圈

3-1. 因為list很長 記錄下每個節點的記憶體位置是不可行的
3-2. 不能改變串列節點的資料結構

龜兔賽跑來囉~~

剩下就是問對微軟有沒有什麼問題想了解的


北京海淀區篇

收到面試通知後(微軟出的機票跟住宿),2011/12/21 一個人隻身前往北京,第一次有一種,阿原來這就是自己獨立出來行走的感覺阿。晚上到了北京,姑丈載我到微軟安排的飯店,準備隔天的面試。

面試當天一連串四小時的真是可怕,從下午一點到晚上快七點,中間有一段時間等最後一關的 "部門頭頭",所以先讓我休息了一個多小時。

四個人裡面  推測前面三個應該都是工程師類型的人,目測年齡  應該是 4 > 3 > 1 > 2。
以下問題,如果直覺想到暴力法能解決的,都不是想要的答案 XD

附註:還要大概說一下自己的算法複雜度是多少

第一位:
自介閒聊等

1) 給一個 Unsorted int array 和 S 請找出所有的 pair (i, j) such that
    S = array[i] + array[j];   PS: (i, j) 和 (j, i) 視為相同
Hint: You can sorted if you like.

2) 一個平面上的正方形和圓形  要如何判斷是否重疊呢?  (寫過Planner沒道理不會阿)
那兩個正方形呢?!  (更簡單了)

第二位:
自介閒聊等

1) Thread 和 Process 有何不同 ?   盡量舉例  (這是OS吧)
   Thread / Process 有無自己的 Stack/Heap 呢 ?
   (其實沒把握的時候可以自己推  但是要有邏輯的推導)

2) C++和Java的差別  用C++遇過什麼瓶頸  virtual function知道怎麼實做的嗎?
    vTable 是class存在一份  還是每個實體都有一份

3) 給一個 3L 和 5L 的水桶 (無刻度  形狀不規則) 還有一個無限供水的水龍頭,
  如何裝出 4L 的水? (2L 2L倒入別的容器不算  要一次出現 4L)

擴展: 給 ML 和 NL 的水桶  如何到出 KL 的水? 具體的步驟
假設給定的 (M, N, K) 在有限的步數內保證有解


4) Java的GC機制如何,或者是說在 C++ 要如何實現 Garbage Collection的機制呢?
可以具體編程嗎?

5) 動態配置時  若是常常的 new / delete 會消耗蠻多的資源,因此我們會設計一個 ObjectPool 預先配置好空間,當有需要空間時  使用 getObj 跟這個 pool 申請,使用完畢用 returnObj 返回使用的空間。具體實現,這兩個函數的內容,且須支援 multi thread。

寫完後  getObj 裡面有沒有能加速的地方


第三位:
自介閒聊等

1) 一個環狀公路上  有N個加油站  這些加油站都有儲油 oil[N],這些加油站是隨機分布在這個環狀公路上,也就是非等距分布。假設有一台車走一單位的路需要耗一單位的油,且公路長為 D 且 Sigma(oil[i]) - D = 0 ( for i=0~N ) ,意即加油站的總油量足夠走完整圈路。
現在有一輛汽車油箱是空的,能找出從某個加油站出發,可以繞一圈回到原地,輸出該加油站的編號。


第四位: (部門頭頭)
自介閒聊等
原本以為他會問一些比較非程式的問題......結果.......


1)
我有一個 byte array 假設是 { 3, 2, 6, 6, 6, 6, 5 },裡面保證不會有 20 這個元素,可以試著壓縮這個 array 嗎? 壓縮的結果必須也是 byte array。你的算法 worst case 可以舉例嗎? 能更好嗎?

若是 20 亦會出現在此 array 中呢? 這樣算法結果勢必會差些  但有方法嗎?

PS: 此為串流所以不知道整個資料多大

頭頭: 恩  我只有一個問題要問你  今天就到這吧~~

Seminar時說的沒錯: 面試到後來已經不知道再說什麼鬼話了


整體說來面試過程不太像上對下的感覺,比較像是在實驗室討論,可以闡述想法和面試的人互動,他們會跟著你的思路去走。闡述久了,他們多少也會給些提示,有些東西要立馬想出來也是有難度,科科。

然後白板跟紙上 coding 一定要會 XD


後記


因為機票回去的時間是自己選的,微軟也好心地把旅館訂到面試的隔天,不會馬上趕你走。之後兩天就和姑丈在北京市內玩一玩,也順便去爬了長城,吃了烤鴨等。在聖誕夜那晚又回來了台北,結束這短短幾天的北京之旅。

Tuesday, July 7, 2015

Build Qt 5 in N Hours



前置準備

  • git
  • ActivePerl 5.16
  • Python 2.7
  • Ruby 1.9
  • OpenSSL
  • Bison
  • Flex
  • iconv
  • gperf

※確定以上執行檔的位置皆在 PATH 變數下
※只有粗體字的要自己安裝,後面四個公用程式在 Qt5 clone 下來的資料夾 gnuwin32\bin 內有,直接將這個資料夾新增到 PATH 即可

  • ICU    qtwebkit 處理 unicode 官方只提供 2010 的 prebuilt 其他版本要自己先下載原始碼用對應版本的 VS 編譯 (記得檢查專案設定是否 BUILD TARGET版本正確)
  • 環境變數新增:
    • INCLUDE:  Path/To/ICU/Include;Path/To/OpenSSL/Include
    • LIB: Path/To/ICU/Lib;Path/To/OpenSSL/Lib;Path/To/OpenSSL/Lib/VC
    • PATH: Path/To/ICU/Bin;上述公用程式的執行位置

      LIB請確定是正確的 VS 版本的 LIB 和正確的平台(32/64)

※底下指令部分皆為 CMD 的指令


下載原始碼

開啟 Visual Studio Native命令提示字元 (開2013 x64 就會 BUILD 出對應版本)

git clone  git://gitorious.org/qt/qt5.git
perl init-repository

會下載一陣子



編譯

  • Windows

configure -debug-and-release -c++11 -nomake tests -opensource -confirm-license -openssl -platform win32-msvc2010 -opengl desktop
nmake
nmake install

也可以用 jom 平行編譯
  • Mac

configure -c++11 -nomake tests -opensource -confirm-license -openssl -platform macx-clang-32
make
make install

之後 qtbase 資料夾內就是 build 好的 SDK

  • configure參數說明:
    • -platform 後面為 mkspec 資料夾內支援的平台 使用 VS2013 則將2010改為2013
    • -opengl desktop 使用 OPENGL 做 Qt GUI 的繪製,不加上則會使用libANGLE 在 WINDOWS上會用 DIRECTX 繪製
    • 可以加上 -nomake examples -nomake demos 節省一點時間

清除

git submodule foreach --recursive "git clean -dfx"

部署

  • 基本的
  • Qt5Widgets.dll       Qt 核心模組  
  • Qt5Core.dll            Qt 核心模組
  • Qt5Gui.dll              Qt Gui模組
  • platforms/qwindow.dll   (一定要放在platforms內  Qt5將平台拆開 )
  • icudtXX.dll
  • icuinXX.dll
  • icuucXX.dll            這三個是 ICU 的 DLL   XX為版本

  • 使用 LIBANGLE 需要的 DLL ( DIRECTX )
  • libEGL.dll                              LIBANGLE 的 DLL (必備)
  • libGLESv2.dll                        LIBANGLE 的 DLL (必備)
  • D3DCompiler_XX.dll             如果安裝 DX RUNTIME 應該系統會有

  • MSVC 相關的 DLL    XXX為版本
    (用 VISUAL STUDIO 編譯的 可以直接裝 C++ RUNTIME 就不需要特別包這個 )
  • msvcpXXX.dll
  • msvcrXXX.dll

以下部分要針對專案是否用到 Qt 官方外掛 $(QTSDK)/plugins 資料夾內相關內容須複製到 AP 同一層,不枚舉了。

  • 有使用 Jpg Gif ...等 imageformats 底下支援的格式
    imageformats/*.dll   ( Qt圖片的 Plugin )
  • SQL Drivers
    sqldrivers/*.dll

Wednesday, December 31, 2014

Test Syntax Highlight

...Your html-escaped code goes here...
int main()
{
    printf( "Hello World\n" );
    return 0;
}