2020年3月25日 星期三

Azure Front Door 擋路了

加了 Azure front door 的副作用 - API request failed

前因


我們開發了一個網站,僅建置一台服務器(台灣習慣叫做伺服器)放在 Azure HK。但是我們的客戶是遍佈全球的,所以根據地延遲時間,US、DE的使用者就會抱怨我們的產品很慢。

為了解決這個問題,我們的營運長找到了一個相對省錢又快速有效的解決方案 - Azure Front door

Azure Front door 運作原理就不談了,先講講我們家的系統。

系統架構

前端用 Angular 開發,運行在 Nginx server 上;後端有兩台,一台 Business server 用 Spring framework ,還有一台 Chat server 用 vert.x。

尚未使用 Front door

當 Client 使用系統的時候,HTTP Request 會發送到 Nginx ,再根據 API path ,轉發給 Chat server 或 Business server。

後果

有句話說,「上帝為你關了一扇門,必為你開啟另一扇窗」,這句話我還不能理解。但是當我們發現套用 Front door 之後,很多扇窗也被關了起來,哦~我懂了,原來每個人可以獲得的開口數量是有限的 XD

掛上 Front door 發現的問題如下

不支援 WebSocket 

我們 Chat Server 在即時通訊的部分,採用 WebSocket 連線,但是 Front Door 不支援。

解決方法



我們發現有些 API request 不會發到 back-end server。
**  這些 API request 來自 vert.x,我們沒設定 cache-control
**  Front door 沒設定 cache-control,預設為 1~3 天隨機設定
=> 將這些 API 設定 cache-control: no-cache, no-store, must-revalidate, max-age=0

* 我們發現某次 deployment 之後,部分頁面就是無法進入,無論是不是用無痕模式。但是不要透過 Front door 的直接連線就能進入
** 前端用 Angular。預設 index.html 沒有設定cache
=> 在 Nginx 設定 index.html no-cache, clear front-door cache

2015年6月1日 星期一

Notepad ++ 取代用法記錄

Notepad++ with regular expression

Notepad ++ 取代用法記錄

Tag: notepad++, 減少換行

緣起

有一個字幕檔因為多換了一行,導致VLC跟MXPlayer都無法顯示字幕。

檔案內容片段

3
00:00:51,500 --> 00:00:53,020

你好,我這個字幕會在時間軸之後多換一行。

預期字幕檔的格式

3
00:00:51,500 --> 00:00:53,020
你好,我是字幕。

錯誤解法

搜尋:\r\n\r\n
取代:\r\n

解決方案

搜尋:,(\d\d\d)\r\n\r\n
取代:,$1\r\n

原理說明

  • \d 在正規表示式裡面代表搜尋一個數字
  • $1 表示變數
  • (\d\d\d) 對應 $1 表示把搜尋到的三個數字存入變數$1

2015年1月28日 星期三

Damnoen Saduak Floating Market 肥羊回憶錄

Day4_Damneon_Saduak

Damnoen Saduak Floating Market 肥羊回憶錄

出遊日期:2015/01/22

大綱

故事開始

BTS N3 搭乘 Mini Van

曼谷這幾天的旅遊中,水上市場算是非常遠離市區的一站。因為安排在平日,所以只能去觀光客較多的 Damneon Saduak。Damneon Saduak 只有營業到中午,12點以後人潮漸漸散去,大多店家也都休息了,所以多數去過的前輩們(利用google爬到的部落格文章)都建議七點出發,或許可以趕上八九點市集最熱鬧的時候。我們從飯店出發到 BTS N3 站(Vitory Monument),下車走到 Suzuki 巷子內搭 Mini Van,當時大概是8:30 A.M.。
售票處
售票處

每個售票窗口都是寫泰文的,就在我開始打算找路人來詢問的時候,看到13號口下方有貼有前往Damnoen Saduak字樣。

售票窗口
售票員英文不靈光,但是關鍵字Damnoen Saduak聽得懂;前往丹能沙朵一個人90泰銖,我二話不說掏錢就買票。他請我在旁邊等,說"I will call you." 據說 Mini Van 是招滿人才會開車的,想說要慢慢等了。俗話說:「來的早不如來的巧」,所以我們等大約十分鐘不到,就被招呼可以上車了。結果上車的時候,"I will call you"的售票員就變成司機了(圖片裡面招手那個)。
後記:後來我問其他遊客,從 Victory Monument 天橋下上車,一個人才80泰銖。
售票窗口
車子有四排座位,前面三排都可以坐三個人,最後一排可以多坐四個人(有一個危險的位子,像公車上面最後一排中間的位子),加上司機旁邊的副駕駛座就有14個人可以坐,我們這車坐得滿滿的。因為我們晚上車,我坐在那個危險的位子,所以不斷觀察環境來保持清醒。其中坐在我右手邊的是兩個話很少的韓國人。前面一排是兩個用英文對話的東方人,女生會講泰文,但是男生只能用英文跟女生交談。其他還有一些泰國人跟西洋人。 車內一瞥

應該是經過了Maeklong

車子一路向前,大概一個小時的車程,車子先抵達美功鐵道市場附近(看起來應該是),有一些人在這邊下車。 美功鐵道市場車上一瞥
美功鐵道市場車上二瞥

司機號稱這裡是丹能沙朵

車子繼續向前,我換了一下座位(因為有人下車了),順便看看 google map,發現還有十幾公里的路程;恰巧旁邊的韓國人也在看 google map。快到 Damnoen Saduak Floating Market 的時候,我發現司機有先開過頭,讓先前那對用英文對話的東方人在這邊下車,然後才回頭前往丹能沙朵。只是到下車地點的時候,我發現跟 google map 標示的不一樣,我問司機 "Damnoen Saduak?" ,他還跟我點點頭。而車上的兩個韓國人卻沒有下車,我想他們可能是去其他地方。但是環顧四週,怎麼跟其他前輩們照片裡的丹能沙朵完全不一樣咧?除了照片裡面明顯的紅色屋頂搭出的棚子,就是3~4名穿著紅色衣服的小姐在招攬生意。
下車地點明顯的紅色屋頂與懸掛的照片
招攬生意的紅衣小姐
棚子的後面就是河流,怎麼都不像是水上市場阿。雖然有看到幾艘動力船,但是完全不見手搖船的蹤影,這裡真的是丹能沙朵嗎?此時,紅衣小姐很熱心地來招攬生意:動力船一小時的導覽,一個人1000泰銖。你沒看錯,是算人頭的喔,跟前輩們說的一艘動力船500泰銖完全不一樣。補充一下,他們用英文說"One hour tour, 1000 baht per person. " 我們在原地猶豫很久,因為價錢太誇張了。
再仔細看一下照片,屋頂上寫得很清楚,外國人的價錢特別貴(泰文寫什麼我看不懂)。而且他錢幣的單字還拼錯了,害我一直想,到底要洗澡幹嘛XD 外國人活該比較貴

想法一:離開此地,直接去 Maeklong Railway Market。 (最後放棄)

因為不想被當肥羊宰,所以我跟紅衣小姐(不是照片上那個)說,我們想知道怎麼去美功鐵道市場。他很熱心地告訴我,可以去棚子入口右手邊的Cafe'店買 Mini Van 的票過去。店內的老闆是西洋人,英文流利,他告訴我,到美功鐵道市場的 Mini Van,一個人 100 泰銖。這也是貴到不合理阿,我們從 Victory Monument 過來,一個人也才90泰銖,結果去美功就要100泰銖。所以我順便問了一下回 Victory Monument的票價 ─ 150泰銖。
這個老闆很直接,他說如果叫車子來,你們可以在裡面吹冷氣等,而且 Mini Van 也是直達,有冷氣。當然,也可以到外面搭公車,一個人40泰銖,但是要走很遠,而且公車要等多久不知道 (公車沒冷氣)。
我只能說,這裡根本就是來坑殺觀光客的。

詢問搭船回來的遊客

我們遇到兩組搭得上話的觀光客。
第一組義大利人(6人一同出遊)
他們已經搭完船回來了。他們說,這趟真的是貴爆了,一個人1000泰銖就是水上市場繞了一圈,他說看到其他當地人划手搖船的,價錢便宜非常多,300泰銖而已。而且他們朋友買了一頂草帽,他覺得太貴了(多少錢我忘了),叫我買東西的時候一定要殺價。我說:「我已經下定決心,什麼都不買」他們立刻豎起大拇指比讚。
他們是搭計程車來回的,因為6個人,分兩台車共2000泰銖,單程!我建議他們可以搭 Mini Van ,在旁邊的 Cafe'店內買票,一個人才150,可是他們說已經跟計程車約好了,而且司機正在等他們。然後我們就揮別了。
第二組中國人(3人一同出遊)
他們表示:「一定要殺價。殺價後,一個人300元。」但是我算一算,他們三人搭一條船900元,還是很貴。然後他們就直接走到外面馬路要去招公車來搭乘了。

其他觀察

  1. 這裡上廁所不用收錢。
  2. Mini Van 司機到此地後,紅衣小姐都有塞錢給他們。

想法二:殺價、搭動力船到水上市場,直接在水上市場下船。 (最後採用此法,降低損失)

因為在這邊搭船,一艘要2000。如果轉戰其他地方,Mini Van 的費用也很高。
在看到我跟中國人交談之後,紅衣小姐看到我主動去問他搭船的價錢,他就願意讓我們一個人用300泰銖的價錢搭船,但是不願意讓我殺價到兩個人500泰銖。我說不買東西,而且要在水上市場下船,她表示OK。

往「丹能沙朵」前進

下面是我們搭乘的動力船(船號45),以及負責划船的老先生;老先生的英文不太好。 我們搭乘的動力船
划船老人
再前往真正水上市場的河道兩邊,就已經陸續有店家、船家在販售物品了。 還沒到水上市場就看到店家
還沒到水上市場就看到船家
這艘船行進的方式很簡單,就是我們上船的地方直直去,然後在下圖的盡頭左轉就會看到丹能沙朵的歡迎標示了。
後記:我在PTT的Thailand板有看到其他鄉民也是在錯誤的地點下車,他們後來是直接 走出大馬路左轉 ,再走十分鐘就到真正丹能沙朵了。我從河道這邊的行徑路線,剛好算是再次驗證那樣的走法可行(雖然人家已經這樣成功走到水上市場了)。 河道盡頭轉彎處
轉彎即見丹能沙朵
真正丹能沙朵的上船處,就有手搖船可以選擇,不會只有動力船。話說,我們在岸邊還看到了那對當時沒下車的韓國人,照片用了馬賽克保護(...其實是我沒對好焦XD)。 真丹能沙朵
韓國人
熱鬧的丹能沙朵

危機還沒解除 - 回去上船處,還會被剝皮一次

為了不要再回去那個坑觀光客的上船處,我必須要在旅程結束前,找到一個水上市場可以下船的地方。
所以遇到華人或是會講英文的人,我都想辦法跟他們打聽消息。下面照片正中間看起來很鬱卒的老先生來自UK,當我問他花多少錢、怎麼來的,他就笑了。因為整個旅程都是由坐在她後面的太太簽約搞定的,而且是整個套裝行程,所以他也不知道多少。本來還想問他玩得開不開心,但是我們是反方向的船,所以談沒多久就得道別了。 遇到UK老先生與其夫人
駕駛動力船的老先生給我們訊息如下:
  1. 遊覽只有單程,不能回頭,要買任何東西都要立刻決定。
  2. 水上市場分成三個區域,1 market、2 market、3 market。(後來我詢問當地的店家,才知道並不是所有人都這樣分三個區域。)
為了避免 3 market 沒有下船的地方,我一直很想在 2 market 下船,所以我嘗試跟駛船老先生說:「我們要上岸買東西。」但是他表示 1 market 以及 2 market 沒有地方靠岸。一直到了3 market他才把我們放到這間店。上岸的時候,有個小弟幫忙讓船靠岸,還要我們記得自己的船號是45。 3market岸上商店上岸處
本來心想,我可以跟老先生說掰掰了,結果發現商店四周沒有明顯的路通往 1 market,只有一條水泥道路不知道通往哪裡。還好,在店裡面沒有人強迫我們買東西,所以我們就趕快招呼駛船的老先生來載我們了。
其實,每個觀光客要離開的時候,好像要跟下圖中的大姊說,大姊會幫你廣播船號。然後就在"Bon voyage"這邊等上船就好了。 3market岸上商店負責廣播叫船的大姊 3market商店上船處
上船之後,我跟老先生表示想要回去 1 market,並願意支付20泰銖給他。他搖搖頭說不要,我就自動提高價錢到50泰銖,他猶豫一下,跟我開價100泰銖,這個價錢就換我不要了。我猶豫很久,就在船往回程的方向前進途中,我看到一個看似可以上岸的地方,表示我們想在這邊上岸,並且跟他說掰掰。他打了電話,並且看了一下時間,並再三跟我確認要從此掰掰,然後我們就分道揚鑣了。 最後上岸的地方
上岸以後,我們首先看到的是廁所,然後觀察一下人潮的走動,最後終於走回 1 market 看到的那座天橋。

最後任務:前往Maeklong Market

本來想坐下來先吃碗米粉湯的(岸上的米粉湯總不會是用河上船家煮的吧),結果我發現他們也是從船上端來的就作罷了。
路就在嘴上。我們有問到一些台灣人,想跟他們一同驅車去Maeklong,但是他們大多是買套裝行程過來的,所以來回都有Mini Van接送。後來問了一個會講中文的先生(看似導遊,頂著一個鍋蓋頭),他建議我們到大馬路問問。
我們在大馬路上看到真正丹能沙朵的藍色標示。並往雙條車(Song Thaew)的方向前進,結果雙條車的司機望了我一眼,就把車子停下來了。
我問副駕駛座的大姊:「Maeklong, How much?」
大姊回我:「10 baht per one. To bus station.」 丹能沙朵在馬路上的標示
從雙條車上看出去的風景
後來雙條車載我們去325號道路(套用台灣的標誌,就是縣道325)的某處下車,並且告訴我們,馬路對面就是公車站,在那邊搭車就可以了。恰巧就停了一台467公車,車掌小姐說,到Maeklong,一個人20泰銖。終於,得救了。

本次經驗總結

  1. 在Suzuki巷子內搭 Mini Van 要90泰銖,但是去前輩們說的天橋下搭車,只要80泰銖。
  2. 下車地方如果沒有看到藍色的 Damnoen Saduak 拱門,可以選擇不要下車。不小心下了車,可以回頭出大馬路左轉,走路十分鐘。
  3. 如果要在坑爹的偽‧丹能沙朵上船,推銷小姐最低可以接受的票價是 300 baht per person for 1hr tour, 750 baht per person for 2hr tour(2hr tour包含樹中廟以及泰拳公園。)
  4. 司機號稱的「丹能沙朵」搭 Mini Van 往 Maeklong ,每人要100泰銖;往 Victory Monument,每人要150泰銖。
  5. 丹能沙朵的路上攔台雙條車問問(跟他說你要去Maeklong或Bangkok),應該都會載往公車站,每人10泰銖。
  6. 丹能沙朵附近(這邊所謂的附近,可能有好幾公里遠)的公車前往Maeklong,每人20泰銖。
  7. 如果要回到曼谷市區(Bangkok),也可以跟雙條車的司機說你要去Bangkok,他們自然會載你去正確的搭車地點。(跟我們一同搭雙條車的重慶姑娘就表示要回去曼谷,副駕駛的大姊也是跟他們說會到Bus Station。)

2014年7月2日 星期三

在Jenkins 上安裝 Jacoco plugin (eclEmma)

nn

在Jenkins 上安裝 Jacoco plugin

  1. 選擇 Manage Jenkins Manage Jenkins

  2. 選擇 Manage Plugins Manage Plugins

  3. 選擇 Available 並在 filter 裡面輸入 jacoco input jacoco in filter

  4. 勾選,並且點 Download now and install after restart Download jacoco

  5. 等待...(畫面左上角有ENABLE AUTO REFRESH,有勾選它就會自動重整,直到它處理完畢就會還你一個裝好 jacoco 的 Jenkins) Wait for installation

Jenkins無腦安裝

nn

Jenkins 無腦安裝

參考來源 https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
以上指令照順序打就好
  • 以後就可以用 /etc/init.d/jenkins 來啟動或是關閉服務
  • 然後會開啟一個 user 叫做 jenkins
  • log檔案在 /var/log/jenkins/jenkins.log
  • /etc/default/jenkins可以看到系統設定的參數
  • 預設使用 8080 port
  • 很妙,網頁會依照作業系統語系不同而自動轉換
    jenkins自動根據系統語系轉換

2014年2月26日 星期三

裝 Nexus7 的驅動程式在 Windows 7 x64 上

裝 Nexus7 的驅動程式在 Windows 7 x64 上


Nexus 7 的驅動程式在windows 7 x64安裝不太直覺,所以寫點東西筆記一下。

Driver 載點

  • 華碩官方網站下載頁面
  • 華碩官方網站的直接下載載點(不知道連結可以撐多久)
  • 下載下來的檔案是zip檔,裡面沒有自動安裝的程式。

連接電腦

當然,先讓 Nexus 7 與電腦連接(廢話),然後你會發現右下角 USB 的圖示說安裝失敗。然後到裝置管理員裡面找事主,你會看到 Nexus 7
被打了驚嘆號。
所以在 Nexus 7 上面按右鍵,選擇「更新驅動程式」以後。然後按照以下畫面:
  1. 選擇「瀏覽電腦上的驅動程式軟體(R)」
    步驟一
  2. 選擇「讓我從電腦上的裝置驅動程式清單中挑選(L)」
    步驟二
  3. 選擇「ADB Interface」
    步驟三
  4. 選擇「從磁片安裝」
    步驟四
    到這個步驟才選擇你從官網下載下來並且解壓縮過的檔案,然後才會成功安裝。
打完收工。

2013年6月16日 星期日

Start JSP, Day 1

從0開始學習JSP,雖然我會寫java。

  • 開發環境:Eclipse 4.2 + run jetty run (不用安裝jetty)
    • run jetty run可以在eclipse market place上面搜尋的到。
  • 新增專案: 
    • 新增一個動態網頁專案(不然你用JSP幹嘛?)
    • 圖一、選Dynamic project
      圖二、直接選finish
    • 直接到瀏覽器輸入http://localhost:8080
      看到HTTP ERROR: 404(圖三)是好消息,代表你的Server啟動了
      如果是(圖四),就是你的Jetty根本沒啟動
    • 圖三、從瀏覽器檢視伺服器執行結果
      圖四、Jetty沒啟動時,連線localhost:8080的畫面
  • 每次更新的時候直接看瀏覽器就可以得知新的結果(僅限HTML更新?) Java檔案更新不知道是否需要重新開啟server。