搜尋

搜尋結果

港珠澳大橋 梅窩一日攻略
走遍世界
行走世界記錄・2019-02-14

大嶼山旅行,港珠澳大橋通車之前,又車又船的行程真夠嚇人,自去年十月通車後,既便利又快捷。上次去完昂坪及水鄉大澳後,番尋味,這次去梅窩。大澳與梅窩,一個迷人,一個幽雅,這兩地方非常適合1日遊。 梅窩玩甚麼?講真梅窩景點不多,但玩一日也夠了。 這次行了遊了拍了,銀礦灣泳灘、銀礦瀑布、銀礦洞、洪聖古廟、文武廟、貓貓竭腳亭、香港奧運徑、梅窩碼頭。 相集請點擊 港珠澳大橋怎麼坐車往港,攻略見昂坪大澳一日遊。到達香港口岸,喜見翠華餐廳已開門營業!當然先吃個翠華早餐再開始行程,起行前資料搜集,以為口岸坐A35 或 N35 巴士直達梅窩,免卻東涌轉車的輾轉及時間,可惜一問,A35及N35,車次非常少,行車時間大多數在清晨或深夜。 所以還是選擇坐B6巴士往東涌換乘3M 到梅窩。3M ndash; 梅窩碼頭 行車約45分鐘,車資平日$10.5,假日$16.20。合理下車點在梅窩街市,先參觀洪聖古廟,再行沙灘,然後午餐。餐後再遊另一邊,上山尋找瀑布與礦洞,沿途會見到好多特色貓貓歇腳亭,香港奧運徑走了入口那至銀礦洞再上一點點非常短的小段,原路返回,在銀礦灣渡假酒店望著沙灘吹著海風品味一客三層架下午茶,結束非常非常悠閒的梅窩一日遊,下午約5時回澳。如果仲想盡興一點,提議回東涌血拼,逛東薈城outlet。 梅窩餐飲 選擇多,不怕沒得吃。梅窩碼頭附近有熟食市場,好食的集中在梅窩碼頭路和大嶼山鄉事會路,午餐揀了大嶼山鄉事會路的津津食店吃越式美食,人氣爆棚,食客需搭檯,舒適感欠奉,但味道好極了,價錢也不貴,撈檬$44,湯檬$55 $60,說得上平靚正了。 銀礦灣渡假酒店下午茶 銀礦灣渡假酒店面向銀礦灣泳灘,景觀一覽無遺,用餐環境非常非常正,一客英式三層架下午茶, HKD188再加10%服務費,味道嘛,不過不失吧,鹹點比甜點出色,茶水一杯止不添加! 梅窩交通 35A 及N35行車路線 往香港口岸 於機場客運大樓後、經機場路、機場南交匯處、航太城交匯處及赤鱲角路往港珠澳大橋香港口岸。 往梅窩 於港珠澳大橋香港口岸後經赤鱲角路、機場隧道及暢達路後返回原有路線。 香港口岸開出 615 a.m. A35, 640 a.m. A35, 830 a.m. A35, 615 p.m. A35, 1130 p.m. A35, 130 a.m. N35, 430 a.m. N35 梅窩開出 530 a.m. A35, 725 a.m. A35, 500 p.m. A35, 1000 p.m. A35, 015 a.m. A35, 315 a.m. N35, 420 a.m. N35 全程車費 平日A35 $16.8 N35 $28.5 星期日及假日A35 $27 N35 $39.5 M3 巴士站在Citygate Outlets背後,回程在梅窩碼頭對面。行車約45分鐘,車資平日$10.5,假日$16.20。 發車時間相片來源官網 繼續閱讀 在此 港珠澳大橋系列 港珠澳大橋昂坪大佛大澳一日遊攻略 澳門經港珠澳大橋到香港機埸快到冇朋友

滙豐保險攜手樂高®認證大師洪子健打造「Bricktopia 樂奇想世界」
專題報導
小燕品味・2025-08-14

沉浸式咖啡藝術展空降澳門,用創意點亮生活靈感 滙豐保險近期推出一場別具匠心的創意展覽 mdash;mdash;「Bricktopia 樂玩奇想世界」。這場獨具特色的活動落戶於滙豐保險策劃中心,特別邀請到樂高認證大師(LEGO Certified Professional)洪子健(Andy Hung)傾力打造港澳地區首個以咖啡館為主題的積木藝術空間 mdash;mdash;「奇趣咖啡館」。 樂高認證大師(LEGO Certified Professional)洪子健(Andy Hung) 在這座充滿巧思的積木咖啡館中,集中展示了 150 件由洪子健親手創作的原創積木作品,涵蓋了造型各異的咖啡機、精致逼真的杯具、誘人味蕾的糕點,乃至充滿設計感的座椅等,每一件作品都將積木的靈活與藝術的美感完美融合,呈現出令人驚嘆的獨特藝術魅力。 展覽現場不僅有積木藝術的驚艷呈現,更匯聚了多元文化元素:澳門本地藝術家黃子灃(Vitorino Vong)的粉筆畫藝術作品現場亮相,用色彩與線條勾勒出在地文化風情。 另外, 本地知名咖啡品牌 Terra 特別調製了限定款飲品,讓濃郁香醇的咖啡香氣瀰漫整個空間。 多種元素的有機碰撞,共同織就了一個集積木拼砌技術、咖啡文化與本地藝術於一體的沉浸式互動空間。訪客們可以一邊細細品味香醇咖啡的獨特韻味,一邊沉浸在充滿創意與靈感的藝術氛圍中,開啟一場別具一格的奇幻感官旅程。 五大亮點打卡區域 開啟無限創意旅程 1. 滙豐保險積木咖啡館(HSBC Life Brew House) 以積木打造的藝術咖啡吧檯,以及各種咖啡沖調裝置、餅乾及點心,均以積木11 還原,是絕對不能錯過的打卡點。 2. 磚點烘焙坊(Bakery Wonders) 積木版葡式蛋撻、香脆的牛角包以及各式蛋糕,造型逼真,趣味十足,讓人忍不住拿着打卡, 實在太可愛了! 3. 限定咖啡體驗區(Coffee Freedom booth) 每日限量供應特調飲品,活動限定「自由咖啡 Coffee Libre」與「童樂積木杯 LEGO Soda」更是不容錯過。 4. 奇積玩樂空間(LEGOreg; Play Zone) 專為親子打造的創作空間,讓大小朋友都能釋放創意、共建專屬於自己的作品。 5. 澳門城市畫布(City Canvas) 本地藝術家黃子灃以粉筆畫的形式呈現澳門文化色彩,畫作描繪澳門特色建築及小食,為展覽增添濃厚情感的當地藝術語言。 專屬活動與獨家禮遇 每日限量免費咖啡 週一至週六下午130至300,滙豐保險聯手Terra每日獻上限量特調咖啡,讓您在午後時光細味香醇,感受創意生活的靈感時刻。 個人化樂高禮品 完成財富分析,即有機會獲得專屬設計的樂高積木禮物,可自由為人仔搭配髮型、服飾與配件,打造獨一無二的紀念品。 「Bricktopia 樂玩奇想世界」 活動日期:2025 年 8 月 12 日至 10 月 31 日 地點:滙豐保險策劃中心(澳門宋玉生廣場 393 號皇朝廣場地下 AC 座) 開放時間:週一至週六 上午 900 至下午 600 網址:httpswww.hsbc.com.mozhmoinsurance 附註:所有活動優惠受條款及細則約束,詳情請參閱官方公告。咖啡派發時間有可能更改,最新消息請留意官方網站。 #Bricktopia #樂玩奇想世界 #HSBCLife「Bricktopia 樂玩奇想世界」

Steam OS 3.7 桌面模式下的中文輸入法 fcitx5+RIME
科技新知
MacauYeah・2026-02-21

上一篇我們提到,SteamOS的原生鍵盤不知為何失效,我們在桌面模式上的另一個選擇就是flatpak中的 Fcitx5。 因為Fcitx5是基於flapak安裝的,預設只在flapak下通用,後半部份,亦會介紹如何打破這個限制。 安裝Fcitx5 及倉頡五 我們可以在 Discovery App,輸入關鍵字 Fcitx5, 找到相關的套件。為更精準地安裝指定套件,可以直接在terminal 使用以下指令。 首次啟動時,需在start menu中,搜尋fcitx5,它就會長註在右下角的系統列中,選該iconrarr;右鍵rarr;input method settings,把「RIME」加入到fcitx5中,就可以使用了。 在此時,你可以打開Firefox,經controlspace的方式轉換輸入法試試。但之後你會發現,原生的Kate文字軟件,都無辦法輸入中文。因為只有Dsicovery flatpak 的 app 才能正常使用fcitx5。 大範圍套用Fcitx5 如果你找網上或AI的資訊,大部都會提示你修改系統設定檔,把fcitx5加到其中,但筆者就不成功。好在有Bilibili強者的筆記httpswww.bilibili.comopus1139601518269300768httpswww.bilibili.comopus1139601518269300768,原來SteamOS自帶的是ibus,但ibus又不讓設定(因為要換rootfs)。我們通過flatpak中安裝fcitx5,其實是可以通過ibus存到系統的。步驟如下: 如果你還未為當前的deck user配上密碼,你可以在terminal中使用 有密碼後,就可以使用 把所有module加為ibus 你沒有看錯,真的是那樣。基在上所有原生的桌面app及terminal,也可以切為到中文輸入法了。還有一個特例就是經 distrobox 生成的環境,依然無法存入ibus。 Reference httpswww.bilibili.comopus1139601518269300768

Spring Boot Web App 更新期間的維護模式:從唯讀到全鎖的解決方案
科技新知
MacauYeah・2025-08-25

在營運 Web App 的時候,雖然我們有 Docker K8s 可以滾動更新,但難保用戶在更新的過程中,有一半訪問去到了舊版,另一半去了新版。如果可以,Web App 本身自帶維護模式,可以自我判斷什麼時候應該忽略新的訪問,當然最好。但要做到這一點,前期需要很多規劃。狠心一點,可以直接關掉對外的服務,讓用戶無法訪問。 但在另一些情況下,例如升級搬遷的情況,下線時間比較長,完全關掉服務並不是一個很好的方向,我們至少還可以提供唯讀的選擇。而且這個可以從資料庫出發,讓 Web App 少處理一點邏輯。 如果 Web App 背後的資料庫是 MSSQL 或 MySQL,唯讀這件事應該是簡單的,只要你把 service account 的權限改變就好。但如果你用Oracle,就要想想辦法。 筆者想到的方法,暫時有兩個。第一個就需要大家寫寫 Script ,一口氣把所有 Table 給鎖起來。例如 第二個,就是生成一個新的唯讀 User schema,給他所有Select的權限。然後更新 Web App 使用那個唯讀 User schema存取資料。 兩個方法有什麼差異呢? 前者就全部鎖起來,沒有任何一個資料庫用戶可以改寫資料。如果你的業務沒有差異性,全部一起封起來就完事。但如果你只想 Web App 轉成唯讀,但其他背景程式還可以執行更新。那你就只能用後者了。但後著也不是百分百的完全無痛,至少你 Web App 要支援登入與操作的 Schema分離。 例如用Spring boot JPA的話,可以在 application.properties 可以讓登入及操作的Schema不一樣。 spring.datasource.username=READ_ONLY_USER spring.jpa.properties.hibernate.default_schema=ORIGINAL_SCHEMA 又或者在 java 層面指定。 @Tableschema = quot;ORIGINAL_SCHEMAquot; 這看上去,是很有彈性的。但其實也是有些局限。如果你本來的JPA有寫特制的 JPQL 或 Raw Query,又或者你在Java層面加了 @Subselect,由於這些都是程式原作者所 hard code 的,JPA沒法幫你改寫。改來改去,可能還是前述寫Script的方法,一口氣把所有 Table 給鎖起來實際一些。 Reference 更多筆者的程式開發分享,見請 github

Galera 4 (Mariadb cluster) 的冷開機
科技新知
MacauYeah・2025-08-20

前次我們介紹了 Galera 4 在Ubuntu 24的架設方式,這次我們來補充一個最常見的問題Cold Start 冷開機 cold start 平常, Cluster 中只有其中一個 node 需要更新重啟,基本上所有節點回覆正常後,都可以互相通訊。而有些情況,例如斷電問題,需要所有節點全數關機,那麼 Galera cluster 就需要一定的方式重啟系統。那是一些狀態的保護機制,因為在全關機後再同步,系統不知道哪台機才有最新的狀態,它也不敢貿然同步因為正常使用下, Galera cluster 只有兩台機也會開步。所以需要人手介入,指定以某台機作為 cluster 的起始點。 舉個最簡單的例子,前述三台機 pocdbnode3 , pocdbnode2 , pocdbnode1 順序關閉,那麼 pocdbnode1 應該就會有最新的資訊。 在ubuntu中,可以查看 varlibmysqlgrastate.dat 中的 safe_to_bootstrap是否為1。如果是1,代表當初它有最後的 transaction ,以它為起始點重新起 cluster。 $ cat varlibmysqlgrastate.dat # GALERA saved state version 2.1 uuid 0c38b6dd7bdb11f0a4dd1f4be36a6ea9 seqno 1 safe_to_bootstrap 1 我們使用galera_recovery, galera_new_cluster, 就可以把該機器重新救起mariadb process。 $ galera_recovery WSREP Recovered position 0c38b6dd7bdb11f0a4dd1f4be36a6ea911 wsrep_start_position=0c38b6dd7bdb11f0a4dd1f4be36a6ea911 $ galera_new_cluster 然後其餘兩個 node 可以直接重啟 mariadb 服務 # node 2 $ systemctl start mariadb # node 3 $ systemctl start mariadb Reference Getting Started with MariaDB Galera Cluster 官方文件 How to Set up MariaDB Galera Clusters on Ubuntu 22.04 How to Bootstrap MySQL or MariaDB Galera Cluster ndash; Updated 還有比較複雜的救機狀況,例如safe_to_bootstrap全為0,即是可能是全部node都沒有好好地關掉,就掛了。大家有需要可以看看這個link的解決

github flow - github 開發流程
科技新知
MacauYeah・2024-06-20

那些年那個很穩定卻又不受歡迎的 git flow 開發流程 多年前,朋友就向筆者介紹git的團隊整操作流程。筆者深思過後,的確實用,那些年的gitflow,很美滿,由開發、測試,到發佈、修補漏動(backport),都有清楚明確的指引。 原作者連結:gitflow 大家如果沒有更複雜的需求,真的可以照搬,筆者也很推這一個模型。 但在長期推廣下,筆者發現大部份人其實都不熟git的基本操作,什至連git graph也不看,現在看git flow,就更不可能接受。那怕是有常用git的個人團隊,也是不怎使用分支模型。 前一兩年,筆者也不懂,筆者也努力地簡化git flow。例如把master和develop合而為一,但最後也是少有人可以接受,很多人還是卡在分支那邊,對checkout、merge還是很陌生。在跟更多不同人的協作過後,筆者總於意會到一件事。其實大部份人,只想知道最後、最新的狀態,只會更新 master main ,也因為個人開發,所以連衝突也不會有,更不需要使用merge。那怕是少型團隊,頂多也是維護main的衝突,間中用用merge,而checkout還是用不著。 其實這個情況,並不限於小型團隊。因為 web app 和 DevOps 的流行,所以越來越少機會要維護多個舊的穩定版本。大家都專心於最後一個開發及發佈版本就完事,用戶的某個版本有問題?更新到最新版本吧。(註:越底層的應用開發模式,因為相容性問題,不可能只保留一個穩定版本。) 那麼我們就大力簡化吧 github flow 開發流程 既然大部份情況,大家都只在乎 main master 預設分支,那我們也沒有必要跟著複雜的 git flow 走。但在 DevOps 的角度下,為保證 main master 穩定性,大家還是至少要遵守branching 、pull merge request 、code review 、auto test 原則 。 github就最簡單的branching 、pull request 、code review 提出了它們的 github flow。 簡而言之,就是每個人在開發時,都先從 main 起一個新分支,不斷更新。待合適的時候,就透過 pull requst,向原項目負責人提出申請,只要項目負責人點頭,就可以把改動傳入 main 中。又因為Github 原本的定位在於個人與個人之間的協作,初時已經需要通過fork建立獨立的倉庫,那怕你不愛分支也必需分支。所以 pull request,code review 的作用更明顯,後逐的協作更理所當然。 但若果回到公司團隊協,Github flow 就應該像筆者之前提出協作方案,各自起分支,最後由某個人守門,把所有結果放到 main 中。(前文連結)

開發者在Steamdeck上的另一個選擇: Gnome box
科技新知
MacauYeah・2024-05-28

前些日子,因為升級podman的關係,筆者對Steamdeck的限制就更為了解。因為Steamdeck是一個修改過的Arch linux,不單止代表是某些區塊是唯讀不可寫。更深一層的問題是,有些依賴包,不能簡單地通過安裝或自行編輯來解決。 例如早前podman 5.0.x需要的pasta依賴,雖然Arch linux官方有這個lib的發佈,但Steamdeck沒有選用,那些我們自己下載原始碼,你地會發現steamdeck的gcc或cc編譯指令還法完全執行,一來是編譯器指令沒有預設對,另一方面則是缺少了更多的c lib .h 依賴包。最後筆者只好選擇下載pasta官方預編譯的二進位程式。能用,但就總是多少有點不安心。因為pasta的預編譯只是針對x86_64的CPU,並沒有考慮link lib的問題,不過這次運氣還算可以,沒有無盡依賴的問題。 回來講Steamdeck的情況,之前筆者介紹brew,其實是macOS帶過來的,雖然他們對其他linux的支援很不錯,但多少都基於某些低層的依賴包可以隨時更新。而Steamdeck這個限制版,就沒有保證linux 依賴包的預安裝。那怕是Ubuntu也是一樣,只是我們可以通過進一步的指令案裝就可以了。所以在Steamdeck上,長遠還是要找一些官方維護的軟件比較安全。 Steamdeck上預設的是依賴安裝是【Flatpak】,雖然它不像yum, apt, dnf這些仔細可以安裝原始碼依賴,但它們可以安裝App,例如Firefox、Chrome、輸入法等。遺憾的是,Flatpak上沒有podman, docker,對於開發者來說就很不方便。 但最後,筆者終於在【Flatpak】上發現一套【BOX】VM解決方案。它的功能不算強大,但至少可以經ISO安裝自己想要的OS,也有快照功能只限關機狀態下。BOX官方亦表明,這套VM不是針對自動化或企業管理所做的,只有一些基本操作。 官方連結 httpsapps.gnome.orgBoxes 官方原始碼 httpsgitlab.gnome.orgGNOMEgnomeboxes Flathub載點 httpsflathub.orgappsorg.gnome.Boxes 對於筆者來說,能裝到VM,代表就有更多的操作空間。如果大家不介意多了一些虛擬層,會太影響效能,其實很多操作可以在VM內使用。例如不需要再用podman,可以直接在VM中使用docker、安裝k8s等。對於效能問題,我們必需要在Steamdeck操作時,至少我們可以在VM中先安裝Arch linux,找回必要的依賴包,編譯我們想要的link lib,再抄回Steamdeck下執行。過程的確比較轉折,但若然Steamdeck這台機器只適合打機的話,就真的很可惜。

測試驅動開發 | 系統邊界Mock
科技新知
MacauYeah・2024-04-23

好一段日子之前,筆者就介紹了一些寫Test Case的大方向 。對於大部份情況來說,有分隔的開發環境,有整個配套,測試起來是順暢的,想做單元測試可以,做整合測試也可以。但如果沒有,我們其實也要想辦法寫Mock。 Mock這個概念,對於寫前端程式的朋友應該比較熟悉,因為前端開發者總不能等後端準備好之後,才開始慢慢設計。前端很早期就要模擬一些情況,做介面設計,做各種思考。而且這個Mock不是指在運行單元測試時,才使用的臨時修改隨機數據。而是針對開發時,自行模擬的後端或外部環境。不過因為前端介面涉及很多主觀設計,很多元素冇辦法做固定的自動測試,所以前端的測試通常要人幫測試。 而後端開發,邊界Mock這一概念也很有用。在外部環境不足的情況下,為自己系統的邊界部份自建一個Stub Dummy 等的模疑數據,是很有幫助的。不論我們對外部環境的掌控度有多少,我們走測試驅動開發(Test Driven Development),好好地定義這個外部環境的期待行為是很重要的。 例如,你有個功能,需要存入數據,但資料庫未準備好,也沒有所謂的In Memory資料庫可以用。這時,自己架空寫一個什麼都不做或回傳固定結果的函數作為中轉接口,然後在你的Test Case可以規劃你的想要結果。 也許你會說,這個函數就是存下資料,我不會需要它的回傳結果,但我們其實還是可以在Test case 中定義一些錯誤檢測,確保這個函數沒有Throw Exception 。再進一步想,我們主程式是否真的不負任何儲存失敗的責任?要定義其他回傳變數,方便寫Log讓追蹤?或者我們至少要知道成功後的Primary Key ?若然業務上真的不在乎儲存結果的有效性,我們不存入數據也是可以的? 所以歸根究底,我們還是在乎儲存的成功與否。還是有必要去驗證驗寫入是否成功。 上述例子,因為資料庫不存在,開發途中可能Test Case 有好長一段時間也通過不了,但至少當資料庫完備後,可以直接驗證,不用人手手工測試。 舉另外一個例子,我們要從某個地方,例如API或資料庫,讀取數據。我們也可以先寫中轉接口,並為它寫Test Case定義應有的行為。雖然明明就只是讀取,我們沒法控制太多。但在接口做好異常狀態處理,是很重要的。例如Handle exception、檢查某些重要業務值會不會是空、確保後續部份可以正常使用,這是因為我們不能被外部系統的失誤而導致自身系統癱瘓。 其實測試驅動,本質上就是強逼大家想多一點,好好定義預期的行為,不論內部條件怎樣變化,都有一自動的檢收標準。

Git Worktree
科技新知
MacauYeah・2024-04-09

看了Git 大神的影片 part two,才知道原來切換git分支還是有不同的做法。傳統中,我們使用git checkout BRANCH_NAME_1 來切換到我們想要的分支。通常這樣做,代表我們放棄原來的工作環境,換到另一個工作環境中。 這樣做很好,對不對? 是的。但有些時候,我們只是被逼離開原本的工作環境,跳到一個過去的分支節點去查一些東西,或者修正一些東西。更什的是我們原本的工作環境都還是混亂狀態下,我們不想做commit(提交),我們只好用git stash,暫時將工作環境存起,然後再git checkout BRANCH_NAME_1。在你想做的事做完後,再git checkout OLD_BRANCH。 看起來其實也沒有很麻煩,是不是? 但其實當你的專案有一定大小,你在不同版本跳來跳去,你的IDE就會不斷地重新編譯。更不幸的是,當你的不同版本中有模組數量的差異,弱一點的IDE,什至會攪死它的cache,之後就會發生鬼打牆。為解決IDE引發的問題,筆者有時會直接cp r YOUR_PROJECT TEMP_PROJECT,在一個新資料夾下另起爐灶。那就是有兩個不同的資料夾裝載著你的專案。 這樣應該沒有問題了吧,是不是?這次是真的可以了,扣除了筆者個人健忘的問題,就沒什麼問題了。 不知大家有沒有經驗,連續commit了幾次,但最後一次commit卻忘了push(與伺服器同步),然後就跳到其他地方繼續工作。如果我們在同一個git repository下,我們commit了但忘了push,即使我們git checkout去了其他分支,用git GUI畫出commit graph時,也至少可以提醒筆者有一個未與伺服器同步的分支。但如果當初我們用的是cp,那就沒戲唱了,什至乎當初複制了去哪裏都忘了。(當你老闆同時要你跟多個專案,健忘真的很容易發生。) 這問題有解嗎?有的,git在2.5版本以後,就提供了一個git worktree的指令。它有點像cp 指令,更重要的是,它打通了兩個資料夾下的隱藏資料庫.git,當大家在那兩個資料夾底下,都可以看到另一方的存在。大家可以用git branch a或git log oneline graph來看看。 詳細的指令介紹:git worktree git 大神的影片 Part 2

Spring官方教學 | Spring Certified Professional 2023
科技新知
MacauYeah・2023-11-07

筆者作為一個網頁程式開發者,使用Spring Boot開發已經有六年。從當初Spring Boot 1.x開始,查看官方Tutorial七零八落,慢慢摸索,到大改版升級2.x,都碰過不少釘。最近Spring Boot亦要升級到3.x,正式進入Java 17時代。筆者亦不斷Update自己,保持程式於一個可支援的狀態。 相對以前,現在入門Spring Boot已經比1.x年代輕鬆很多。主要前些年某些網頁開發的概念,例如REST API,已經深入行業,大家不再糾結要走傳統MVC還是RESTFul API,也使得Spring Boot這樣的Framework,可以有一個受眾比較廣的統一入門教學。 筆者最近也正式參與Spring Academy的官方教學,好好地厘清一些概念。 官方連結 httpsspring.academypathsspringcertifiedprofessional2023 在讀過官方的幾個章節後,真的覺得很適合有興趣的人去看一看。主要是因為 官方以一個經典例子作為切為點,教學REST API,In Memroy Database。它還介紹了一些簡易的HTTP Code Standard、Test Case。真的比其他民間教學更有系統性。 提供一個可以在網頁上就實驗到的Lab實習環境。那是極為重要的一件事,因為九成人,在setup java 及library dependency maven, gradle時,都碰釘到直接放棄。有時是因為公司工作環境比較有要求,並不允許你使用一鍵安裝的java套件及它的library dependency;有時則因為網路安全,java把你公司的firewall當作a man in the middle MITM attack擋了,也有時是因為你公司的firewall把java擋了。Spring Academy在一個遠端的https網頁提供實驗環境,真的比本機開發要易入門很多。 Spring Academy可要多謝vscode、codeserver,及其他VM、Container技術。 在真實環境中,筆者也有自己的codeserver,打包java os cert等等,盡量減少firewall問題。 因為官方教學持續以Spring boot的最新版本作為教材,它更新的速度總比民間要快。只是官方的教學不會全面覆蓋到所有Spring project。如果大家作為Web入門的話,還是有推薦的。 在Spring boot 3.x當中,因為要求Java 版本至少為17以上,那些教材也有使用一些Java 17的新語法Syntax,實在也令人驚喜。 基本上Java 17現在可以簡化getter setter switch statement,這些在開發Web的環境下都是很重複的事。在Java 11或以前,只能經過IDE去生成getter setter等,但似始都有會一大堆Code佔據你的頁面。 官方教學及Lab環境暫時免費,除非大家很在意的修業證書,不然都可以自由免費看。 官方教學真的值得一看,雖然距離真正開發還差很遠,筆者日後若有條件,會針對官方沒有提及的內容作補充,分享一些在技術面上所需求的最少可運行配置。

[教學] 平民雲端服務不是夢 | 5分鐘教你如何快速起VM
科技新知
MacauYeah・2023-05-11

前言 原本筆者只是想做docker cluster,但因為在實機中建VM極其麻煩,所以就研究了好一陣子如何快速起VM。 HyperV有預設的Ubuntu template,但只有ubuntu desktop版,沒有server版。而且desktop gui顯得浪費資源,要clone VM也很廢時,放棄。 Windows Subsystem Linux起VM很方便,但同一個Linux version只有一個instance,沒法起cluster,放棄。 Virtual box沒有Ubuntu template,若要clone的話就變得跟HyperV差不多,放棄。 經過一輪資料搜集,發現了一個Ubuntu multipass engine,聲稱可以跨平台快速起VM。裏面有一些很吸引的功能,可以自己建立images、使用固定IP。 那怕即使是沒有snapshot,在自定義images的配合下預裝docker,要隨時加減cluster node都是一件容易的事。 重大決策點 醜話說在前頭。經過一輪測試,multipass最大的問題,就是custom image、fix IP都只能在bare metal ubuntu 中才能使用。如果你沒有一台閒置實體機安裝Ubuntu,還是要再多考慮一下。 重點 詳細的流程,筆者記錄了在Packer template 和Multipass Static IP中,在這裏就只說一些重點。 packer是使用cloudinit和qemu的技術,行起template中指定的cloud image 在筆者的例子中就是ubuntu22.04servercloudimgamd64.img 大家可以定義image行起後進行一些操作,而那些操作都是經過qemu vnc、ssh進去操作的。 操作完後就會直接儲存當時的image。所以在操作結束之前,盡可能地刪cache或刪去不要的user group settings。 最後生成的image,還是一個cloud image。若要再運行它,必需要使用支援cloudinit的VM來讀取。 cloudinit是用來指定初次運行時要設定的事,例如hdd size, user account password, ssh key import等。 使用工具cloudlocalds可以生成一個seed.img,這樣qemu也可以cloudinit。 HyperV應該也可以經過類似方式,進行cloudinit,但筆者未有去實測。如有更簡便的方法請告知。 multipass預設就已經有cloudinit,在bare metal ubuntu就可以直接執行。 multipass也可以設定不同的cloudinit參數。 成品 最後筆者就選擇了用packer用來預裝docker,經mulitpass無腦起VM,再使用shell script對多個node設定docker,達到即時起docker node的功能。這樣就減省了VM的安裝時間,也省去了docker的安裝問題。 說到底,如果只想測試docker cluster,其實windows, macOS中的multipass也可以實現相同的功能。因為安裝docker那些都可以經過shell script自動化,只是每次重複操作,都變得相當慢。另外,因為multipass在windows, macOS不支援fix ip,對於指定docker cluster interface又會再多一重功夫。

【旅行舊事記】越南峴港奧黛服裝體驗,閨蜜去旅行!
走遍世界
Wish? Do!・2020-05-14

說到傳統服裝,第一時間會想到日本的和服和韓國的韓服,在以前去旅行的時候都有嘗試過這些傳統服裝。我個人覺得在旅行途中一試當地傳統服裝,不失為一個有趣的體驗,畢竟這是一種傳統文化的延續,而且在離開這個地方也不太有可能再穿這種衣服。 去年到越南峴港旅行時,發現不少越南本地女性都會穿着「奧黛」這個越南傳統服裝,它的上身有點像中國的旗袍,但會穿着一條寛鬆的褲子,相對旗袍來說對身材要求沒有這麼高。好奇之下一找,發現當地亦有奧黛體驗店,而且價格不貴,大約15美金左右,便把這件事納入了峴港的To Do List中。 安排好行程後,因為網上這方便資料並不多,一開始本來是想去Lalin這間奧黛體驗店,但當日跟着Google Map卻像鬼打牆一樣走來走去都找不到,最後打電話給店家才知道原來搬到會安了!以為今次旅程無緣之時,卻在路途中誤打誤撞找到了MADAME DUONG的奧黛體驗店鋪,真的可以說是柳暗花明又一村! MADAME DUONG店內的奧黛租借是越南幣150,000,大約澳門幣50元左右,超級便宜!租借的奧黛選擇不多,大約有二十件可以選擇,雖然有分小中大碼,但是越南女生的尺碼好像相對比較小一些。就算選擇不多,但是和女生朋友一起旅行,又選又試也花了一個多小時才選到心中所愛。 選完上身的奧黛款式後,下身的褲子大約只有三四個顏色可以選,雖然顏色不一定和衣服相襯,但是旅行主要都是體驗一下,我們覺得這方便沒有很大Concern。店員是一位非常温柔友善的女士,除了給我們一些建議外,試完衣服她特地還幫我們綁了麻花辮。 臨出發現我們在店內拍了一張照片留念,藍色的牆身非常小清新,加上我們不同顏色的奧黛,沒相到顏色碰撞出奇的和諧。 穿着奧黛去當地旅行真的別有風味,如果有機會去越南峴港遊玩,不妨可以把奧黛體驗納入旅行中,是非常不錯的體驗! 越南峴港奧黛體驗 MADAME DUONG 地址:36 Nguyen Thai Hoc

食記:東京廚房
澳城餐飲
MacauYeah・2019-03-01

某日朋友推薦一家在北區的日式食店,原本筆者還半信半疑,認為是無良商人呃飲呃食(澳門好多日式食店都偏貴,但唔好食),但適逄筆者最近自學蛋包飯系列,咁岩,該食店亦以蛋包飯為招牌菜,所以抱著不期不待、沒有傷害的心態去了試食一次。 位置:台山新城市第二街地舖,從牌坊方向走過去就對了 。 因為不在大街,不熟北區的朋友可能要搵搵路入 店面很細,頂多也只能坐6人。 點菜之後,有部份菜色師傅會在你鄰桌下廚。特別是蛋包飯,基本上一定是現場煮給你看。 筆者點的是鰻魚蛋包飯,賣相不錯。(表情不錯,讚) 開始試食。。。 真他媽的夠味道!!!!!!!!!!! (筆者忘了拍蛋包飯的內部,日後有機會食再補拍。) 鰻魚的醬油、滑蛋的味道都很好阿,就算筆者食慣重口味菜色,都非常之感受到它們的味道,有味道而不過火。 朋友還點了個咖哩漢堡扒。賣相相對一般,但味道一樣有誠意。 大部份主食價錢在4060之間,不算特別便宜,但計CP值的話,算是物有所值。 飲品不是重點,純為拍照留念,不作介紹 筆者真的推薦愛食有「味道」的朋友過去食。特別是在他紅起來之前去食。因為每道菜出菜時間都相對慢,在店家為了量而捨棄質之前,趕快去試。