搜尋

搜尋結果

Spring Boot 04 - 入http json api 世代
科技新知
MacauYeah・2024-05-23

本節,我們將會建立一個http服務,提供json api讓程式訪問。 下戴模版 我們跟上節一樣,使用Spring Initializr (Maven) 下載模版,但細節筆者就不再講啦。Dependency主要選擇 Spring Web Spring Boot DevTools 下載後,可以直接運行測試,可以用指令 mvn test 或經IDE運行。Spring會至少測試下能不能成功取用預設的8080端口。 Controller 我們若要實作 http json api,需要在 spring 中加入一個類,附註為 @RestController ,那方便起見,類名我們也命名為 XXXController 吧。作為示範,我們弄一個 HomeController.java ,裏面有最常見的 http GET, POST功能。 // src/main/java/io/github/macauyeah/springboot/tutorial/springbootwebapibasic/controller/HomeController.java import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; // ... other import @RestController @RequestMapping("/api") public class HomeController { @GetMapping("/someRecord/{uuid}") public Map readSomeRecord(@PathVariable String uuid) { return Map.of("ret", "your uuid:" + uuid); } @PostMapping("/someRecord") public Map createSomeRecord(@RequestBody Map requestBody) { HashMap ret = new HashMap(requestBody); ret.put("ret", "got your request"); return ret; } } HomeController裏,完整的URL 其實為: GET http://localhost:8080/api/someRecord/{uuid} POST http://localhost:8080/api/someRecord URL中的api之後的路徑,都是定義在 HomeController 中,而前半的8080及context path,是使用預設值。在正式環境下,可能隨時會被重新定義。但我們做本地測試,只需要驗證預設值就可以了。 我們真的運行起程式mvn clean compile spring-boot:run,再使用最簡測試工具進行測試。Windows的朋友,可以選擇Postman作為測試,它有圖形介面。而linux的朋友,請用curl,預設安裝都會有。下列為方便表示測試參數,筆者選用curl。 測試GET,其中1234會自動對應到spring裏的uuid。 curl http://localhost:8080/api/someRecord/1234 # return {"ret":"your uuid:1234"} 測試 POST,其中的 -d 參數,會對應 spring裏的 @RequestBody, -H 參數則是設定 http header 的意思,我們就使用約定俗成的 json 作為 header 。 curl -X POST http://localhost:8080/api/someRecord -H "Content-Type: application/json" -d '{"requst":"did you get it?"}' # return {"requst":"did you get it?","ret":"got your request"} 上面的兩個操作,都回傳了我們輸入的資訊,這代表了我們成功用spring架起了http json api,而且正常讀入資訊。 Test Case 雖然我們可以正常地架起 api,但每次開發都要 postman / curl這種工具額外試一次,其實也有一些成本。而且 api 數量變大,或經多次修改後,就重複人手執行,就變得相當討厭。 面對這個問題,筆者會建議寫測試用例,即是Test Case,而且用Spring內置的@SpringBootTest來寫。 產生一個空的Test類,vscode中,最簡單可以Source Action => Generate Test,然後加入這次要測試的參數。 // src/test/java/io/github/macauyeah/springboot/tutorial/springbootwebapibasic/controller/HomeControllerTest.java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @SpringBootTest @AutoConfigureMockMvc public class HomeControllerTest { @Autowired private MockMvc mockMvc; @Test void testGetSomeRecord() throws Exception { RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/api/someRecord/1234") .contentType(MediaType.APPLICATION_JSON); this.mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.jsonPath("$.ret").value("your uuid:1234")) .andDo(MockMvcResultHandlers.print()); } @Test void testPostSomeRecord() throws Exception { String request = """ {"requst":"did you get it?"} """; RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/api/someRecord") .contentType(MediaType.APPLICATION_JSON) .content(request); this.mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.jsonPath("$.requst").value("did you get it?")) .andExpect(MockMvcResultMatchers.jsonPath("$.ret").value("got your request")) .andDo(MockMvcResultHandlers.print()); } } 最後就是執行 mvn test 或經IDE運行,應該都會得到所有測試都通過的結果。 mvn test # other test result ... [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.368 s -- in io.github.macauyeah.springboot.tutorial.springbootwebapibasic.controller.HomeControllerTest # other test result ... 上面的程式碼很多,我們逐一來。 @SpringBootTest 寫在類的外面,代表執行這個測試類時,需要運行起整個Spring程序,當然也包括http的部份。 @AutoConfigureMockMvc 寫在類的外面,代表執行這個測試類時,可以模擬一些發向自己的 http 請求。 @Autowired private MockMvc mockMvc 寫在類的裏面,因為之前有定義了可以模擬 http 的請求,Spring在運行時為大家提供了那個所謂的模擬http client的實例。 MockMvcRequestBuilders,則是建造要測試的URL及Header參數。 MockMvcResultMatchers,則是檢查回傳的結果是否如遇期的一樣。 為何這個http client叫模擬 - Mock ? 因為在測試用例中,可能連Controller 內部依賴組件也需要進一步模擬,這樣才能把測試目標集中在Controller裏,這也是單元測試的原意。只是本次的例子看不出模擬與否的差別。 MockMvcResultMatchers.jsonPath(),這是用來檢測json的結構是否跟預期一樣。有些網路上的其他例子會簡寫成 jsonPath() ,但因為vscode IDE的自動import功能比較差,筆者還是保留傳統的寫法。 如果大家覺得@SpringBootTest很難,想折衷地把其他測試方法,那麼把 postman / curl好好管理起來,每次修改完程式,都完整地執行一次 postman / curl ,也可以達到測試的效果。只不過大家還是要好好學會整合 postman / curl,知道如何檢測json結構,什麼時候有錯,什麼時候叫測試通過,所以也要花一樣功夫來實現。 最後,大家千萬不要因為測試難寫而逃課,因為寫測試絕對地可以減輕日後重執行的工作量。除非你的程式碼即用即棄,否則都建議寫測試。(測試跟寫文檔不一樣,有了測試也不能沒有文檔。好消息的是,文檔現在越來越多自動生成的工具,我們日後再找機會介紹。) Source Code spring boot web api basic

【日本。和歌山自駕】├住宿┤ 漁火之宿觀潮 漁火の宿 シーサイド観潮 x 雜賀崎海鮮料理 ~ 無敵海景溫泉會館 紀州溫泉
走遍世界
80後愛旅行✈️・2019-09-22

從奈良開車到和歌山, 沿途的高速公路上竟然遇到整個行程最荗密的紅葉 就連進入到和歌山市內, 紅葉都沒有減少 路過「和歌山城」 來到「漁火之宿 觀潮」 「漁火之宿 觀潮」是座落於風景絕佳的雜賀崎, 全館客房皆靠海, 可從房間內欣賞一天當中逐漸變化的雜賀崎景觀, 包括夕陽、滿天星空和清晨漁船出海的情景等。 「漁火之宿 觀潮」與和歌山另一間有名的溫泉旅館「萬波 MANPA RESORT」是姊妹館。 // 旅館的大堂 因為旅館是依山而建, 所以大堂是位於6樓, 客房及其他設施都在6樓以下(5F~1F)。 在這裡的一整天我都還沒習慣電梯是要按下, 我們是要不斷的往下走, 越靠海邊~ 整棟「漁火之宿 觀潮」的地圖 (官網圖片) 日本很多溫泉旅館都已經有免費的花式浴衣借用, 供遊客拍照。 可是「漁火之宿 觀潮」的花式浴衣是要付錢租的, 所以我們就沒額外租, 打算穿房間內那一套就好。 大人用一套 1200円 / 小陔用 800円 Check in後就從大堂走到電梯 大堂電梯前有放著一些日用品, 同樣跟日本多數酒店一樣, 可以自由領取一些棉花棒、梳子、髮圈等等用品。 放著一些獎項 記得要往下走, 大堂是6F, 我們是住在3F 「漁火之宿 觀潮」雖然只有一棟, 但佔地很大。 還好是到處指標非常清晰, 去哪裡都很好找~ 來到3樓後沿著指示走, 旁邊有一個泳池 現在只有幾度, 露天泳池應該是不會有人游的, 但還是注滿水, 保持了美觀! 另一邊是擺放著一個小滑梯, 晚上出來看著有點恐怖 到了客房的區域 我們訂的房型是「露天風呂付離れ客室さいかの鄉 - 喜多」 是房內附有衛浴和露天風呂的 「漁火之宿 觀潮」有些房型是沒有附設衛浴設備, 需要使用公共設施, 訂房時請注意! 開門進來後是傳統日式旅館格局, 一條長廊 先脫鞋和放好行李 右邊進來是客廳和睡房 閱 讀 全 文

2026看Steam Machine | Steam OS 是不是一個出路?
科技新知
MacauYeah・2026-02-20

在這幾年,筆者都一直分享一些coding anywhere的主題。原本的出發點,其實是因為雲資源及container的出現,是不是讓個人電腦的採購可以越來越不受限?是不是相對選擇會更多,亦應該可以更便宜的選擇? 適逢SteamDeck Linux興起,使用Steam OS道理上會比windows更適配雲資源的開發,而且SteamDeck 可以同步作為手提遊戲機,買台低配的SteamDeck回來,可謂一石多鳥。筆者用著用著,也來了兩年多。現在再來聊它,主要因為Valve未來又有新的硬件Steam Machine推出。這台新硬件,道理上也是跟Steam OS,官方亦宣傳它可以作為PC用。但就這一賣點,筆者很想分享一下它的Steam Deck的使用心得,供各位參考Steam Machine的軟功能是否適合。 https://store.steampowered.com/sale/steammachine 首先,作為遊戲方面,Steam Deck是手提遊戲,硬件比較弱,不能與同世代的PS5或Xbox Series X或PC去對比。我們不應該拿畫面和效能跟其他平台比。但它的OS 層功能,就很直接看得出它有沒有價值。 遊戲模式-Gaming mode 有即時待機功能,但不是所有遊戲都百分百適配。Steam OS的待機,來回玩,再待機,玩過兩三天,總會crash一次。相對之下,Switch就做得很好,就算玩一週也沒問題。Steam OS 也不能說很差,因為PS5等沒有真試過來回待機玩個一週。這裏要表達的,就是遊戲未必為Steam OS而做優化,開發商的目標還是傳統的PC遊戲模式,傳統PC Notebook也有待命,但又有多少遊戲會認真對待?所以Steam OS可以待個兩天,就已經很好 手柄連接算是順利,一般大版的手柄,都可以簡單連接。但它也有做得不好的地方。每次待機換地點,基本上都涉及切換手柄問題。即使內置就有只一個實體手柄,系統並不會自動為你更換第一順位。例如,我原本使用PS5 無線手柄,在家遊玩,這時PS5手柄是第一順位,實體手柄是第二順位。很多遊戲只認第一順位是很正常的。不過在我待機,切換環境,原本的PS5手柄已不存在,但SteamOS並不會把實體手柄順移到第一順位,必需要手動調節。好在,也不需要退遊戲就可以切換。這個對比PC來講,SteamOS已經是做出了改進,但對於Switch和PS4/5,這些根本就是待機一啟動時就要為用戶的問題。可能這是因為SteamOS要考慮Desktop Mode的原因吧,不過筆者就沒有試過在Desktop Mode開遊戲,因為突然要待機外出會更麻煩。 桌面模式-Desktop Mode 這個模式,筆者就專注在取待PC的日常操作上 中日韓輸入法問題,這是大大地阻礙大家入這坑的很重要原因。如果大家都是純英文人,就不需要顧慮這一塊。但筆者就不是一個英文很強的人,多多少少需要直接打中文去找問題。原本SteamOS在Gaming Mode下可以通過 Steam Key + X,叫出虛擬鍵盤,安裝中文倉頡是很易的事。原本這一功能,在Desktop Mode也是可以的。但在寫稿的今天,Gaming Mode / Desktop Mode的中文虛擬鍵盤都一起報廢了,原因未明。筆者只好走回最早期為大家介絡的 flatpak fcitx5+RIME大法。fcitx5可以用,但限制也多。之後筆者再寫一期教學,解決它的限制問題。 辦公室套件。最基本就LibreOffice, OnlyOffice,大家可以在Desktop Mode中的Discovery裏找到。大家想知自己常用的套件是否有對應的版本,可以在https://flathub.org/en 裏找找看。有的話基本可以放心一半,至少經Discovery下載的app,都可以經fcitx5+RIME輸入中文。但這並不代表你可以真的當自己在辦公室工作,那些printer / scanner ,筆者實在沒有太多想法。道理上今年今日普通列印功能,應該通過指定driver就可以做到,但無耐真的不太簡單。日後筆者了解好制式問題後,再來填這個坑。 瀏覽器-就用Firefox吧。 其他瀏覽器有是有的,但最好只用Firefox。Discovery是有筆者最常用的google chrome瀏覽器,但在網安原因下,筆者不敢推薦。Flathub上 Firefox是官方認證的程式,但Google Chrome和Chromium也是沒有認證。如果想使用管方認證的Google Chrome,頂多只能在Distrobox下自行安裝。同樣,如果你是IT人也是英文人,Distrobox再安裝chrome,應該很簡單。但如果你像筆者一樣,還是依賴中文輸入法,你就會很失望,Distrobox經X-server出來的程式,沒法使用前文所講的fcitx5。所以簡單一點的選擇,就是直接使用Firefox。 寫Code,那就得在Distrobox上弄了 Flathub上是有非管方的VSCode,但同樣問題,這個版本你敢用嗎?同樣地,在Distrobox 下安裝 VSCode,是取得官方版本的好方式。只要大家不強求在vscode中輸入中文就可以了(貼上中文是可以的)。使用Dsitrobox做開發類的IT工作,在Contianer範圍內,都算可行的,在Container內安裝java,總比在SteamOS上簡易。但如果你需做一些低層的開發,還是在VM下操作吧。 總結: 如果你很想一石多鳥,你能接受新事物,Steam OS可以一試。 如果你有一些深度的操作或要求,即是是遊戲層面還是工作層面,現時Steam OS都不是一個很好的選擇,除非你的Steam OS不更新,把它硬改回ArchLinux,但這就失去了Gaming Mode的意義。

【只限 3 日】夢幻婚宴,新濠一站式幫你搞掂!
愛情婚嫁
Cheers!・2025-08-01

一生人一次的婚禮,值得成為記憶中永恆的溫暖光芒,而非一場匆忙的奔波!從夢幻場地到完美婚紗,從黃金檔期到賓客體驗…..備婚的甜蜜煩惱,讓我們為您分擔!為無數愛侶打造完美婚宴的「璀璨夢想婚慶展」8 月 8 至 10 日強勢回歸!新濠影滙及新濠鋒兩大場地,一站式團隊涵蓋中西宴席、婚紗禮服、化妝、派對攝錄、會場佈置、花藝、甜點、回禮、賓客互動體驗等服務,將複雜流程簡單化,砍掉一半煩惱,輕鬆實現夢幻婚禮。現場預定優惠更高達85折!限時3日,準新人不容錯過! 新濠影滙婚宴場地 無柱式宴會廳可容納80圍中式婚宴的1800平方米空間,採用無柱式設計,確保每位賓客視線無阻,全程見證您的重要時刻。同時也可以分隔成三個宴會廳,場地大小由準新人自由選擇。現場設有寬敞迎賓區,可自由規劃特色主題,為賓客留下深刻記憶。 特色打卡拍照點以澳門地標「8字形摩天輪」為婚照背景,與至親摯友拍攝獨家花絮,讓「影滙之星」見證愛情軌跡! 更可走進摩天輪艙內取景,日落金暉與璀璨夜景交替之際,定格極致浪漫時刻,銘刻永恆紀念。 法式戶外庭園新濠影滙的法式庭園,專為戶外證婚儀式及花園酒會設計。園內設有寬闊綠茵草坪與輕歐式造景,營造浪漫氛圍。場地可靈活佈置,專業團隊確保儀式與酒會流程順暢銜接。 新濠影滙限時婚宴優惠: 會場即場預訂,即可尊享以下 6 大禮遇: 預定中式婚宴酒席享高達85折優惠 免費升級房間至巨星滙行政套房及房内享用早餐2份(餐飲消費需滿澳門幣 300,000) 額外3小時豪華轎車接送禮遇(餐飲消費需滿澳門幣 300,000) 免費6位試菜(餐飲消費需滿澳門幣 250,000) 席間無限暢飲精選紅酒 星級糖果區 新濠鋒婚宴場地 全層海景宴會廳想在澳門辦一場海景婚宴?新濠鋒海景宴會廳絕對是您的心水之選!位於17樓的宴會廳,以全層落地玻璃設計,讓您與賓客飽覽180度澳門半島無敵海景。寬敞的空間可容納多達150位賓客,設宴12圍豪華酒席。當夕陽西下,金黃餘暉映照海面,浪漫婚宴也在此温馨展開。親朋好友齊聚一堂,見證新人攜手步向幸福的重要時刻,開展人生的新篇章!新濠鋒限時婚宴優惠: 會場即場預訂,即可尊享以下 6 大禮遇: 9折預定中西式婚宴酒席 婚宴當晚享用澳門海景客房一晚連翌日雙人早餐(餐飲消費滿澳門幣80,000) 免費6位試菜(餐飲消費滿澳門幣150,000) 席間無限暢飲精選紅酒 席間無限暢飲汽水和啤酒 星級糖果區 *僅適用於2025年8月8至10日,有關條款及細則適用。*優惠條款細則以官網為準 「璀璨夢想婚慶展」優惠限定 3 日 日期:2025 年 8 月 8 - 10 日時間:13 : 00 - 20 : 00地點:新濠影滙3樓大宴會廳活動詳情新濠影滙:https://s.ctm.net/k5kUI 新濠鋒:https://s.ctm.net/WT9i0立即預約登記:https://s.ctm.net/mXjT4諮詢專線:(853) 8865 6864電郵:salesenquiry@melco-resorts.com

Coding Anywhere: 依賴服務的選擇
科技新知
MacauYeah・2025-04-22

年多前,筆者購入steamdeck, 經過一輪軟件定制,把它變成一個可以作為IT從業員開發機的方案,也介紹了一些coding anywhere的想法 https://lifemag.cyberctm.com/zh_TW/blog/macauyeah/14175/Coding Anywhere 工作方案 https://lifemag.cyberctm.com/zh_TW/blog/macauyeah/14352/Steam OS 3.5更新,內建 podman, distrobox https://lifemag.cyberctm.com/zh_TW/blog/macauyeah/14149/開發者在Steamdeck上的另一個選擇: Gnome box 在試驗了一年多後,筆者對於依賴服務的模疑,又有另一層感受。什麼是依賴服務?就像你寫的程式庫,可能需要資料庫儲存、可能需要問AI等等。所以在開發時,都要確保這些服務的存在。一般,要麼就是在本機上自行安裝,要麼就是經過互聯網使用雲服務(public cloud或者你團隊提供的private cloud),也就是本地模擬還是互聯網模擬。 本地模擬的得失 本地模擬,主要是考慮金錢上的優勢與資源的獨立性。 金錢成本 - 互聯網資源大部份都不會是免費的,如果本機的硬件足夠,可以在本地完全模疑,有一定上的優勢。但如果該服務在本地安裝,都要計授權,可能不沒有太大差異,例如那些report engine, report designer,即使本地開發都要逐台開發機計算。但其他大部份,如資源庫的實現,都有本地開發免費授權。所以本地安裝道理上有一定的成本優勢。 資源獨立性 - 當一個團隊共用一些互聯網服務時,可能會互相干援。即使團隊在開發時,可以經profile使用不同的資源,但發生誤用的情況還是很常見。(除非大家已經有一套很健全的開發用profile,只在本機生效,亦只在必要時才會被提升到程式碼的版本控制當中,不會誤會地覆蓋他人,也不會忘了提交。但這是很有挑戰的一件事)。反觀本地模擬,因為那些服務並不會在團隊中分享,就保證不會被誤用。 學習成本高 - 本地模擬,就有一個莫大的痛點,就是學習成本高。我們可以找到很多本也安裝資料庫的教學,本地LLM AI的架設也不少。但我們並不是很輕易地就可以無師自通,有時為了初次安裝,所花的時間成本也大得令人卻步。 coding anywhere轉移成本高 - 因為全部本地模疑,代表我們必需要有一台足夠強大的主機。但如果我們的移動接入點,綁定了在某台特定的強大主機,我們活動空間也相對減少。 互聯網模擬的得失 直接使用互聯網的服務,主要體現於用錢解決問題的優勢 即開即用 - 能用現成的就用現成的。例如你目標是使用mysql cloud database,就直接伸請使用。如果你還要在本地安裝或使用Cloud VM安裝,就還要自行安裝管理介面等工具。因為成本問題,實在要自行安裝,使用cloud vm也有一定的方便性。使用cloud vm 有一定的快取,可以減少安裝所需要的時間。當我們養成自動化的習慣,clould VM 也可以隨時刪掉,有需要才重起。 解決單機無法模擬的情況 - 某性依賴,並不能簡單地經過本地單一部主機去做到。例如我們要模擬一些叢集功能。我們可能要在主機或網絡設備作出一定的調整,才可能提供bridge network。這一點在辦公室網絡下限制更多,不是隨便就可以建一個可以互通,又可以訪問互聯網的環境。另一些如block storage等資源,還會對硬件有一定的要求,也不是軟件模擬就可以做到。我們若不經過互聯網取得,至少也要在團隊下的private cloud上去建立。(不過如果是從零自建private cloud環境,初次投入的成本可能直接使用public cloud 低。 ) coding anywhere轉移成進一步下降 - 作為移動接入點,就剩下那些不可互聯網化的部份,例如domain name,有時還是localhost比較方便,又例如有一些硬件相關開發,硬件部份必需經過本地接入。 就以筆者的個人經驗來講,除非public cloud的價錢實在不可接受又或是自動化幾乎不可能,否則使用public cloud會有時間成本上的絕對優勢。如果要走本機模擬方向,必需要對Container、VM、網絡等有深刻的了解,才會成事。

發佈Docker Swarm App的選擇 - CI/CD系統的參與
科技新知
MacauYeah・2023-08-25

一段時間前,筆者就討論了一些Docker打包的程式的文章,也討論了一些Docker Cluster環境下的選擇。現在也是時候,可以分享一些對於發佈環境的可選空間。 CI/CD系統 CI/CD 全稱是continuous integration (CI) 和 continuous delivery (CD),字面上代表的持續地集成和發佈,實體上就是某台伺服器自動發佈APP。因為使用到Docker Cluster,不論前述什麼選擇 (前文連結 請點這裏),都會有多個node(節點)的出現。要發佈App,總不能一個個node逐個登入設定。所以我們需要一些CI/CD工具,把這個過程都自動化。 在筆者的認知上,CI/CD系統,由兩個部份組成,一個是取得Source Code(程式原始碼)的過程,一個是編譯或發佈Source Code的過程。Gitlab,Github,BitBucket等大型的代碼庫供應商,它們天生為了保存Source Code而提供服務的。不少CI/CD系統都可以跟它們整合,它們提供了存取Source Code的部份,剩下你只要能提供編譯或發佈的伺服器就好。 如果作為小型開發團隊,很少會有意願去自己花錢養一個編譯或發佈的伺服器。(極端地,如果我就是一人團隊,我用自己電腦編譯和發佈就好,伺服器能做的,我自己也能做。)好消息的是,Github提供了一個叫Github Action的CI/CD系統,即使你沒有自己的編譯專用的伺服器,Github Action也可以用Docker Image,提供一個臨時的編譯程序,用完就刪掉。詳細功能還請各位先查看官方教學,筆者也暫時只能零星使用經驗,無法給出有意思的架構。 如果對智慧財產權有高度重視,Source Code不能存放在公開的伺服器,那麼Gitlab Enterprise Edtion則是一個好選擇。運用Gitlab ee,你可以用自己的機器,造一個純本地的庫存伺服器。更強的是,它內建也有CI/CD系統,只要你有間置的伺服器,就可以作為編譯使用。筆者也是從這個方向著手,架設了自己的Gitlab Runner(Gitlab CI/CD系統)。在這裏,就分享一下與Docker Swarm整理的概念。 對於前述兩種選擇,GitLab Runner都可以做得到 底層程式打包成Image並運行在Swarm mode上,每次發佈的是App Binary(執行檔或核心檔案)。 把App直接打包成Image,並運行在Swarm mode上,每次發佈的是App Image。 CI/CD - 打包底層程式成為Image 在這個選擇下,其實就跟傳統自動化發佈的做法類似,只是發佈時,要多個node報行更新指令。如果你使用的底層程式原本就有支援多版本並行,這樣更新時就不用太操心rollback(回滾?)等操作。若系統不支援多版本並行,為求簡化,若遇到要rollback的情況,重跑過去舊的CI/CD操作也是一個做法。當然,我們也可以經過一些備份的操作,來保存被代替的程式,若在發佈過程中出問題,也可以手動重來,不過整件事就越來越複雜。 筆者發佈的基本思路是 使用docker image,編譯和打包App Binary。 使docker image做編譯的好處是,你可以比較放心地假設每次編譯時,你的編譯環境都是乾淨的。 傳送上述的結果至生產環境可以取用的地方。 跳入生產環境執行更新指令 這裏有些隱藏的管理成本,如果你生產環境中有多個node,最後那幾行指令就要多抄幾次。 CI/CD - 打包App成為Image 在這個選擇下,對比傳統自動化發佈的做法,現在要多做一步,就是要包裝自己的Image。不過好處是docker swarm有提供監測工具,在發佈過程每個分身會逐個更新,前一個分身更新成功後才會到下一個分身更新。而且 rollback等的操作,你可以靠docker做到。即是要手動rollback,也可以透過更正docker tags來達到,所以整體上來說沒有比傳統的麻煩。 筆者發佈的基本思路是 編譯App Binary。 打包成docker image。 經docker上傳image。 跳入生產環境執行更新指令。 對比傳統自動化發佈的做法,最後的更新指令,只要執行一次就可以。當然,原本在Docker Swarm中要管理的事還是要好好管理。 CI/CD - 備註事項 雖然CI/CD可以幫忙簡化更新的過程,但實際操作會比上述的例子複雜一些。因為通常對非技術型的外界用戶來說,一個Web App會包含很多不同的功能。上述的例仔,在實際情況下可能需要拆解成很多微服務來進行。所以對管理上還是有相當的挑戰。

中銀 海外消費最高$500回贈 網上都得!
激安優惠
MO560・2023-06-28

中銀澳門 – Visa卡海外消費最高$500回贈 網上消費都計! MO560 幫你精選銀行優惠 -------------------- 由即日至8月31日,憑中銀Visa信用卡進行海外消費滿5筆,包括線上消費及線下消費,消費滿$10000即享$300現金回贈,滿$20000即享$500現金回贈!今次活動只限中銀Visa卡,不包括澳門及中國內地的消費,澳門元及人民幣不計算在內。回贈於消費滿額後翌月入賬至消費當月使用次數最多的中銀Visa信用卡內。 每人每月可獲回贈1次,即係6月至8月每個月各賺一次都可以!不過要留意每個月係獨立計算,而且每月最少簽5筆,不可以2個月合併計算。而今次活動網上消費都計,即係訂酒店或者旅行產品都得!例如Agoda, Hotels.com, Trip.com, Expedia, Klook。網上簽不夠門檻亦可以帶去旅行再簽夠數。 緊貼最新最潮澳門信用卡、飛行里數、旅遊資訊,記得讚好MO560的Facebook! 如想查看更多詳情,請到MO560的網站查看。 優惠詳情優惠內容:Visa海外消費最高$500回贈優惠日期:即日起至8月31日消費門檻:消費$10000享$300回贈回贈上限:消費$20000享$500回贈登記網址:無需登記注意事項:需要消費滿5筆、每個月獨立計算、不包括澳門及中國內地的消費 -------------------- 喜歡小編的文章嗎?比個Like支持我啦 :) Facebook: MO560Instagram: mo560_travelWebsite: https://motravel.info 想追蹤澳門信用卡、飛行里數、旅遊資訊?記得將MO560嘅追蹤設定調整為「最愛」!打開埋「帖子通知」就保證唔會錯過!

澳門教育家陳康妮 : 如何實踐斷捨離,推動大灣區可持續發展目標?
文化創意
陳康妮・2023-04-28

澳門斷捨離學會的理念 澳門聯合國可持續發展:推動斷捨離 斷捨離是一種日本的整理收納理念,意思是斷絕不需要的東西,捨棄多餘的廢物,脫離對物品的執著。這種理念不僅適用於生活空間,也適用於可持續發展領域。在澳門這個經濟發達、資源有限、人口密集的社會中,如何實踐斷捨離,推動聯合國可持續發展目標呢? 首先,斷捨離可以幫助澳門減少廢棄物和污染物的產生和排放。在日常生活中,要選擇環保和節能的產品和服務,減少不必要的消費和浪費,重視回收和再利用的原則,減少對自然資源的開採和消耗。例如,要使用可重複使用的水壺、餐具、袋子等,減少使用一次性的塑膠製品;要選擇公共交通或者步行、騎自行車等低碳出行方式,減少使用私家車或者摩托車;要關注食物安全和營養均衡,減少食物浪費和過度飲食;要參與各種環保活動和倡議,提高環保意識和責任感。這些做法都有助於實現聯合國可持續發展目標中的第十二項「負責任消費與生產」和第十三項「氣候行動」。 其次,斷捨離可以幫助澳門促進社會公平和包容。在社會參與中,要關心和支持弱勢群體和邊緣化群體,減少不平等和歧視,重視多元文化和社會凝聚力。例如,要尊重和保護不同種族、性別、年齡、宗教、文化等背景的人權和尊嚴;要提供和享受平等的教育、就業、健康、社會保障等公共服務;要參與和支持各種志願服務、慈善捐贈、社區建設等公益活動;要關注和參與各種國際事務和全球治理,增強國際合作和對話。這些做法都有助於實現聯合國可持續發展目標中的第一項「消除貧困」、第五項「性別平等」、第十項「減少不平等」和第十六項「和平、正義與強有力的制度」。 最後,斷捨離可以幫助澳門提升個人和社會的幸福感和生活質量。在心理層面,要擺脫對物質和金錢的過度追求和依賴,減少負面情緒和壓力,重視內在價值和自我實現。例如,要培養和保持良好的生活習慣和健康狀態,適當運動和休息,避免過勞和失眠;要發展和享受個人的興趣和愛好,學習新知識和技能,提高自信和創造力;要建立和維護積極的人際關係,與家人、朋友、同事等保持良好的溝通和互動,分享快樂和困難;要尋找和實現個人的使命和目標,對自己的生活感到滿意和有意義。這些做法都有助於實現聯合國可持續發展目標中的第三項「健康與福祉」和第四項「優質教育」。 斷捨離是一種可以應用於可持續發展領域的理念,它可以幫助澳門在環境、社會和心理三個層面實現更好的發展。作為一個具有特殊歷史、文化、政治地位的城市,澳門有責任也有能力在推動聯合國可持續發展目標方面發揮積極作用,為自己、為粵港澳大灣區、為全球貢獻智慧和力量。 陳康妮 Miss Connie澳洲墨爾本大學主修教育管理學英國倫敦大學主修心理學都柏林大學 (愛爾蘭國立大學)主修工商管理學大學講師美國國際青年培訓師(26年港澳企業培訓經驗)美國全球職涯發展師澳門創新創業專家澳門職涯發展師澳門資深教育學者澳門作家出版書籍:澳門教育創新澳門斷捨離學會主席(澳門會友26000人)

難以名狀的快樂 ── 兒童桌遊導師課程
創意生活
繪本與棋@黃庭熾・2022-11-30

  由澳門青年桌遊教育學會主辦的「兒童桌遊導師課程(入門)」,於十月三十日及十一月二十七日上午假指南針創作劇團藝術中心舉行。以「奔跑吧動物」和「萌寵捉迷藏」為主題的兩節課程,分別介紹了《Rallye-Trucks》、《Ugah Ugah!》、《Pony Pokal》、《念念不忘》、《紙箱貓》、《Space Planets》、《松鼠也瘋狂》等兒童桌遊,課程亦通過介紹皮亞傑、維高斯基兩位教育學者對認知發展觀點上的異同,幫助學員更好地瞭解兒童在遊玩桌遊過程中會得到的益處及鍛鍊,參加者邊玩、邊討論、邊反思,透過桌遊創設的情境,運用正向心理學中「好事存摺」技巧,寫下了當天的第一筆快樂體驗。 延伸閱讀:生活裡不一樣的體驗 ── 兒童桌遊共學工作坊   「最深刻的是《紙箱貓》。我在這遊戲的角色是『吉娃娃』 ── 狗身份的得分是要令紙箱數量多,和幫助其他玩家數量變多,我也會高分。所以我在遊戲過程中暗地裡幫助其他玩家,除了可以提高分數,還感到一種難以名狀的快樂。」學員Ling 寫她求勝過程中意外收獲到的樂趣。   Helen 分享了她在遊戲中發現到解難方法時的喜悅:「玩最後一個遊戲《松鼠也瘋狂》的時候,我發現可以用三原色的原理去記牌兩面的顏色,我當下很開心,複雜遊戲簡單化了。」   「遊戲有不同的難度,特別是記憶部分 ── 《松鼠也瘋狂》最難,因為要記很多;《紙箱貓》比較有趣,也有一定思考策略。整體來說,今天的遊戲都是很不錯的體驗。」Irene 則梳理了遊戲的難易度,為活動總結。   澳門青年桌遊教育學會自成立以來,以Facebook 專頁作為社團網頁及發佈消息的主要窗口,着力於收集、整理、分享、引介本澳及華語地區桌遊應用於教育、助人、文化創意等領域的相關資訊與專題,供本澳教育界、社福界及親職人士知曉桌遊體驗的多元功能,從而借鏡並更多元化地應用於各自的工作領域,及發展更善意的人際與親子關係。近年,學會多次舉辦主題桌遊體驗活動,向青年及澳門大眾介紹國內外知名與時尚之桌遊,讓感興趣人士與參加者能從活動及相關報導中,掌握桌遊創意的潮流與瞭解桌遊能涵蓋廣泛主題的文化功能。同時,亦與本地學生群體舉辦交流活動,並且以桌遊為引組織讀書活動,發揮桌遊以體驗為核心的樂學功能。 延伸閱讀:走進「博物之門」 ── 桌上遊戲讀書會 延伸閱讀:在別致的澳門共讀點裡悦讀 ── 桌上遊戲讀書會

時尚活力童裝 Balabala 登陸澳門,精選貨品搶先睇!
生活在我城
Lifemagshopper・2021-12-31

小朋友正值可愛活潑的年紀,舒適又時尚的服裝令他們活動自如,同時突顯個人風格,享受快樂自由的童年。 全球超過 5,000 間實體店的知名的童裝品牌 balabala 進駐澳門,分別在氹仔星皓廣場及寰宇天下開設分店,家長們又有新地方幫小朋友買新衫啦! balabala 提供高品質的時尚童裝、童鞋、飾物配件,函蓋 0-14 歲的年齡層,陪伴小朋友成長。服飾風格變化多樣,無論是運動風、休閒風、公主風、優雅小淑女風通通都有,穿上 balabala ,你的小朋友也可以秒變時裝界新星! 以下為大家介紹精選貨品、限時瘋狂優惠及 福利贈送,切密錯過! 【CTM 優惠】 2022 年 1 月 1 至 2 日期間CTM「自己人」去 balabala 購物,憑「尊壹會」及「Buddy Club 」電子會員卡可享每滿 $400 立減 $200 ,每滿$600 立減$300 !瘋狂優惠相當於半價,絕對是買小朋友買新衫的好時機! 【CyberCTM x balabala 福利贈送】 2021 年 12 月 27 至 2022 年 1 月 2 日 期間,去 CyberCTM Facebook 玩遊戲,即有機會贏得 $500 balabala 現金劵! Giveaway 傳送門 新店以繽紛的黃色作主調,非常青春有活力。 初生嬰兒服(0-3歲) 設計非常繽紛,多以醒目的圖案為主要元素,非常有活力! 幼童服(1-14歲) 充滿色彩的羽絨服,使用親膚又細膩的布料,保暖又時尚! 文青及淑女從小培養,這一系列太有氣質了,多層配搭更有質感! balabala 還會不時與不同品牌 Crossover 合作,這是 2021 的芝麻街系列。 它們與 Disney 也有合作,這款 Elsa 的公主服真的可愛爆表啦! 另外,它們亦有推出不少適合運動的服裝,而這一系列青少年也適合,穿上型格十足的裝扮出門動一動吧! balabala 的款式真的太多元化了,家長們記得把握機會使用優惠券購物啦~ balabala balabala 寰宇天下旗艦店 澳門東方明珠街37-101號,寰宇天下地下 S-AB R/C-E 座 電話:28508107 營業時間:星期一至日 10:30-20:30 iSPORT 星皓廣場分店 澳門氹仔廣東大馬路星皓廣場地下G12-14、G16舖. 電話:28559388 營業時間:星期一至日 10:30-20:30

【馬交慳多拿Baby】任上3個月健身堂?送澳門本地自家製XO醬! - 09.04.2021
生活在我城
Cheers!・2021-04-09

歡迎收看《馬交慳多拿Baby》,最近澳門好幫手 2.0 繼續推出超值優惠,今次還有 giveaway 回饋大家,立刻來看看吧~ 1. CyberCTM 送你 澳門本地自家製「聶人王」 XO 醬 Made in Macau 的 XO 醬「聶人王」,有三款不同辣度選擇,不加鹽糖味精,絕對真材實料!現在去 CyberCTM 玩 giveaway ,即有機會贏走一樽! Giveaway傳送門:https://bit.ly/3mre2KR​ 2. Mofy Zero Waste Store 滿額優惠 Mofy Zero Waste Store 主打環保有機食品,價錢親民,現在單筆消費滿 $100 即送一樽有機黃杭菊或白杭菊,養顏又抗氧化! 領取優惠:https://bit.ly/3lYzE15 3. 韓國隱形眼鏡品牌 Lenstown優惠 美妝博主 Pony 熱推的韓國品牌 Lenstown 進駐新濠影滙~上「澳門好幫手 2.0」領取優惠券,買日拋彩色隱形眼鏡即減 $20! 領取優惠:https://bit.ly/3fcQxDT 4. 耀躍教育中心健身優惠 夏天是時候要 keep fit 了~耀躍教育中心推出 $1500 任上 3 個月團體健身課套餐,包括 5 堂私教,非常划算!想有完美體態,立刻去報名吧! 領取優惠:https://bit.ly/3m61vfL 5. 澳門中國國際旅行社旅行優惠 澳門中國國際旅行社推出超值旅遊套票優惠,特別是中山山旮旯房車營露基地,只需 $558 就可以住網紅星空球房!家庭旅行又有好去處啦~ 領取優惠:https://bit.ly/2PGBqZ7 即上澳門好幫手 2.0 就可以拿走以上優惠!快點下載它們的 App 吧! https://www.macaugoodhands.com/tabs/home

航空公司如何各出奇謀增加收入?
專題報導
OHChance 旅遊誌・2020-09-30

肺炎疫情下,航空業是最受影響的行業,即使近月來全球的航班數量已在穩定的增長,但仍遠低於往年的數量,更別說載客率是低得可憐。 在客運復甦之路仍遙遠時,各家航空公司到底怎樣增加收入呢? 1. 最主要的方式:客運改貨運 這次疫情下劇減航空客運的需求,但抗疫所需就令貨運需求急升。不少航空公司看到這個機會,所以不少航空公司不載客、用機腹載貨;甚至是利用客艙也載貨。這個方法到今天全球還是不少航空公司在使用。 2. 偽旅行:坐飛機兜個風 不少地方的航空公司都在近兩三個月陸續推出「無目的地航班」,即是客機會起飛、在天空繞一圈再回來。行程通常是1.5至3小時。雖然不是真正的航班,但一樣有登機證、機上一樣有飛機餐提供,甚至還會贈送很多紀念品。台灣、澳洲的「無目的地航班」都是一開賣就極速售清,反應非常熱烈。 香港快運也將於11月推出這樣的偽旅行。 3. 轉行飲食:飛機餐地上吃 國泰航空、泰國航空、新加坡航空都推出或計劃推出關於飛機餐的項目。 國泰航空:飛機餐送到家 國泰航空於7月推出了飛機餐外賣服務,只需40元就可以享用過往坐飛機才能吃到的餐點。不過該服務只限量推出2個星期、也只限於外送東涌及機場區域。 泰國航空:以機艙為概念開的飛機餐餐廳 泰航將總部咖啡廳已改裝成以飛機客艙為主題的餐廳,連座椅都是用上客機上的經濟艙座位。這家餐廳每逢周三至周五、上午7時至下午2時營業,每天能賣出約2000份飛機餐,熱盤及主菜在上午9時開始供應。 新加坡航空:將A380客機直接變成餐廳 在現今的疫情下,高運量的客機,特別像A380這種超大型客機是全無用武之地。新加坡航空的A380客機大多移了去澳洲的愛麗絲泉 (Alice Spring),但還有停在新加坡的。新加坡航空正準備在10月下旬把其中一台A380「變」為餐廳:內裝不會有任何改變,客人是坐在現有的飛機坐位上用餐。屆時新航將邀請名廚製作料理,客人亦可以選擇喜歡的艙等(但不同的座位價格應是不一樣)。 4. 另類體驗 另外還有一些公司像台灣虎航、亞洲航空台灣分公司等,推出一些體驗行程。例如虎航的體驗行程會進到機場櫃台裡面,然後在指引下操作電腦,印出自己的登機證、也可以體驗安全示範展示以及送餐服務等。 在疫情短時間還未有辦法全面解決的情況下,航空公司可能在未來有更多更有創意的點子會推出。 === 睇完覺得OK ge,不妨like 埋我地 Facebook, IG, 同埋 sub 我地 Youtube 啦: https://fb.com/ohchance @ohchance_travel https://youtube.com/c/OHChanceTravel

【澳門閨蜜下午茶】視覺與味覺的雙重享受,貴氣千層蛋糕Lady M!
生活在我城
Lifemagfoodie・2020-04-16

Lady M New York,應該大家都很熟悉了,但是考慮到價位、現場排隊等因素,並不是所有人都會去嘗試。這次就來探店Lady M,談談體驗吧。目前澳門Lady M的門店有兩間,一間在威尼斯人,屬於開放式的,另一間在金沙城,是一間完整的下午茶咖啡店。這次探店的當然是金沙城店,因為金沙城的店面環境和裝修更有味道呢。 週六下午4點左右到店,門口有零散的幾桌在排隊,我們等了差不多15分鐘就落座啦。店裡基本是滿員,但是因為亮白色的裝修,顯得空間很大,所以並不會擁擠。我們運氣不好,坐不到靠窗邊的餐位,只能坐中間的,不過餐位都都算寬敞舒適了。 打開餐牌,餐單還是很純粹的,除了當季退出的合作限定款之外,他家基本都是經典的固定款式,其中千層蛋糕和棋盤蛋糕應該算是他家的熱門了。蛋糕的均價在88MOP一塊,等於是一整個蛋糕的八分之一。我們倆個人去,所以點了“伯爵茶千層蛋糕”、“開心果千層蛋糕”。兩款口味的蛋糕味道確實不錯的,但是分量太小了,正常食量的倆個女生吃基本是不夠的,所以88MOP的價位其實是挺貴的。 飲料的部分它家的選項也不算多,但是看圖片就滿滿的少女心。因為圖片的吸引,我們分別點了“法國玫瑰鮮奶車”、“凍法國玫瑰鮮奶茶”,雖然看起來我們很沒梗,但是飲料沒有讓我們失望,68MOP一杯的奶茶,不論是顏值還是口味都讓人驚喜,上面鋪滿小小的花瓣,簡直融化我們了。其他飲料的部分最低價位在42MOP,也不算便宜了。 它家服務的部分當然是沒的說了,進門就有帥哥美女笑臉相迎,及時送上水和餐具,加上純白色的用餐環境,真的讓客人覺得自己是王子公主呢。 小結:在Lady M的體驗沒有讓我們失望,只是荷包失守了,兩塊蛋糕+兩杯飲品,結帳基本350MOP,其實這樣的價位,已經可以在很多酒店吃到不錯的下午茶Set了。但是偶爾去嘗試一下,也未免是一種不錯的下午茶體驗。 餐廳名稱:Lady M New York 餐廳地點:路氹金光大道連貫公路澳門金沙城中心金沙廣場2樓2203B號 營業時間:週一至週四、周日10:00-22:00,週五、週六10:00-23:00 電話:2855 1680 作者:一葦 更多文章最介: 【澳門閨蜜下午茶】充滿情調,南灣湖邊的小資下午茶! 【澳門閨蜜下午茶】CP值超高!正宗法式滋味Passion,享受甜蜜下午茶!

【#澳門新派素食】米芝蓮素菜!皇雀印度餐廳
澳城餐飲
Cheers!・2019-12-18

素食餐廳愈開愈多,中、西、日、韓等多國素菜應有盡有。最近小編更首次嚐試米芝蓮一星食府「皇雀印度餐廳」──精緻擺盤加上豐富香氣,甫上枱已教人口水直流! 威尼斯人的「皇雀印度餐廳」連續7年獲《米芝蓮指南香港澳門 2020》評為一星級食府。 「皇雀印度餐廳」是印度本土以外評價最高的印度餐廳之一,餐廳由來自印度喀拉拉邦的高級主廚Justin Paul主理,遵循印度的料理配方與步驟,選用的食材香料以至廚具用品均直接從印度進口,保證味道正宗。 Justin Paul自2013年餐廳開業時已任職主廚。 餐廳更因應素食潮流,在menu中加入“有營養新煮意”素食精選! 特製法國蜜瓜脯伴凍牛油果粒 法國蜜瓜脯入口酸酸甜甜,作為starter最好不過。 南印度小米餅配煙番茄醬、椰子醬及薄荷香菜醬 南印度小米餅內藏黑扁豆和米飯,口感非常豐富。主廚配搭了3款蘸醬,惹味香口,必試! 香草咖喱豆蓉湯 豆蓉湯非常濃稠,入口時辣勁瞬間湧出,過癮! 菠特貝勒菇燴什菜配有機黍米 主廚表示,這個素菜是非常有代表性的菜色,叫 Khumb Bajre Ka Soweta,Khumb 指的是一種印度蘑菇,而Bajre 即小米。 蜂巢紅棗開心果卷配藏紅花血橙雪糕 紅棗開心果卷煙韌甜蜜,吃罷配上一口冰凍酸甜的藏紅花血橙雪糕,完美! 皇雀印度餐廳 地點:澳門威尼斯人地面大堂 時間:11:00 – 15:00(午餐)/ 18:00 – 23:00(晚餐) 查詢:8118 9696