搜尋

搜尋結果

水瓶座(參考上升星座輔乙太陽星座)
玄學星相
熊神進・2017-07-30

守護星天王星在3號開始逆行,身邊的事的發展速度都似乎放慢了步伐,雖然腳步慢了,但起伏刺激是一點都沒有減少。 7號的月蝕在你的命宮進行,對你的形象及身體造成影響,你的思想有所改變,你用新的角度去觀看這個世界,你的心態好像成熟了,又好像憂傷了。你心態也影響你選擇用怎樣的外型衣飾來表達你是一個怎樣的人。由於月亮代表你的健康,因此,月蝕令你的健康變得脆弱或敏感,如果你平時不太注意飲食,熊老師建議你爭取在這段時間進行一次排毒飲食或運動,有利改善你的體質。 由於火星亦受月蝕影響,因此學生將改變原有的學習計劃、選科選校目標等等,也有機會轉校;水瓶座的兄弟姊妹也正面臨不同的生活衝擊或轉變;水瓶座在工作方面也會面對調職、變換崗位、工作內容、薪酬轉變等等;駕駛人士需安全駕駛,注意路面安全,遵守交通規則,不宜藥駕醉駕。 21號的日蝕尤其對在2月中出生的水瓶座人最有明顯的影響。日蝕在你的第7第8宮附近出現,因此,你的愛戀及婚姻關係將受到波及,彼此關係受到考驗,容易對對方失去信心,建議你對對方保持耐性,因為對方也在月蝕及日蝕的影響下而面對種種個人挑戰,壓力之下,大家都無暇顧及對方的感受及需要,也正正在這樣的敏感時期,更應該多警惕自己的言行,以免惡語傷人。 推薦幸運法器:旺財開光吊墜

皇都酒店梓園推出「六月黃炒年糕」
澳城餐飲
LifeMag Editor・2016-07-12

要品嘗豐腴甘香的六月黃,識食的您一定不能錯過皇都酒店梓園上海菜館的上海經典佳餚「六月黃炒年糕」,並推出「時令六月黃套餐」由2016年7月9日起限定供應。 上海人最為深知吃蟹之道,以上海傳統年糕襯托這暑熱裡的「第一鮮」 六月黃。六月黃即是大閘蟹進入成熟期前最後一次蛻殼,即將成熟的童子蟹。大閘蟹中六月黃最為美味,別看「六月黃」此時身材小小,其蟹膏比成年大閘蟹更飽滿,顏色更金黃,肉質更鮮嫩。 梓園上海老師傅爲了讓各饕客一嚐當造的六月黃,特別精挑細選新鮮生猛、色澤金黃、份量十足的童子蟹,搭配正宗上海年糕,加上特製醬汁炒至口感煙韌,令每一口都充滿甘香濃鬱的蟹膏滋味,愛蟹之人必定回味無窮。 梓園將呈獻「時令六月黃套餐」(每位澳門幣198元,四位起)。套餐包括嫩滑無窮的蛋白燉蝦仁、酒香十足的花雕醉雞和酒釀桂花丸子、茶香淡雅的茶葉燻蛋,亦有清爽健康的南瓜炒百合和乾燒四季豆等多道精緻菜式任君選擇,再搭配醬汁入味的六月黃炒年糕,讓美味在舌尖徘徊,久留不去,讓您的炎夏有一個美味新開始。 以上價錢另收10%服務費,供應期有限,請把握品嚐時機。查詢及訂座,請致電(853)2855 2222,內線189。 更多資訊、優惠及推廣活動,請密切留意澳門皇都酒店Facebook專頁。httpswww.facebook.comhotelroyalmo

群星雲集 全球華語榜中榜將於澳門舉行
音樂聯合國
LifeMag Editor・2015-04-14

第19屆ldquo;康佳全球華語榜中榜暨亞洲影響力大典rdquo;頒獎典禮將於4月16日在澳門威尼斯人金光綜藝館盛大舉行。出席頒獎盛典的明星陣容可謂星光熠熠,包括有張敬軒、鐘欣潼、蘇打綠、任賢齊等歌壇中堅力量,《中國好聲音》人氣學員余楓、張碧晨、李琦、周深amp;李維、張瑋以及《中國好歌曲》人氣學員、劉歡愛徒塗議嘉等樂壇新鮮血液也將一一亮相;值得一提的是,通過《武媚娘傳奇》收穫大把人氣的李治廷、與劉詩詩大婚後首度回歸歌壇的ldquo;四爺rdquo;吳奇隆也將出席頒獎盛典;更有一向對音樂情有獨鍾、心系華語音樂發展的成龍大哥,將帶著最新力作《天將雄師》的主題曲《大漠英雄》助陣本屆盛典,並參與獎項角逐。 本屆ldquo;華語榜中榜rdquo;各大重要獎項的爭奪依然十分激烈。港台地區ldquo;最佳女歌手rdquo;提名依次為蔡依林、蕭亞軒、莫文蔚、鄭秀文;而ldquo;港台最受歡迎女歌手rdquo;將由S.H.E兩位成員Hebe(田馥甄)、Ella(陳嘉樺)聯手PK楊千嬅和蕭亞軒;百變人氣小魔女吳莫愁則與丁噹、周筆暢、張靚穎一同入圍ldquo;內地最受歡迎女歌手rdquo;;而ldquo;內地最佳女歌手rdquo;的競爭則更顯焦灼:薩頂頂一人ldquo;單挑rdquo;李宇春、周筆暢、張靚穎05屆ldquo;超女rdquo;三強。 男歌手方面,爭奪更加白熱化。剛升級為人父的王力宏、ldquo;准爸爸rdquo;周杰倫將與ldquo;老對手rdquo;陳奕迅、張信哲共同角逐ldquo;港台部分最佳男歌手rdquo;;而ldquo;港台最受觀迎男歌手rdquo;,將出現新生代小天王蕭敬騰一人ldquo;單挑rdquo;三位樂壇前輩陳奕迅、品冠、杜德偉的局面;相比之下,ldquo;內地之最rdquo;的入圍提名則更伯仲相當:汪峰、孫楠、楊坤、許巍四位老牌實力唱將就ldquo;誰是最佳男歌手rdquo;展開激烈爭奪;ldquo;最受歡迎男歌手rdquo;提名分別為鄭鈞、張杰、李健、胡彥斌,新晉男神遭遇可畏後生,究竟誰是內地人氣王?讓我們拭目以待。

雲系統的持續更新,大家的選擇是什麼?
科技新知
MacauYeah・2026-01-30

在開始之前,筆者先解釋一下自己對Linux發佈策略的理解。筆者之前以為自己都尚算了解,但到了兩難問題時,才開始反思。所以都不禁懷疑自己的基本觀念有沒有問題,如果大家覺得筆者多少有些理解上的錯誤,請留言糾正。 普通軟件的發佈 主要分為穩定(Stable GA, 測試(Edge Alpha Beta),特定版本。穩定、測試版本也可能有多個不同的分支,但它們主要是指不同環境下的選擇。通常安裝時,都會安裝最後的穩定、測試,除非最後版本有明顯Bug,我們需要回覆到再去的一個穩定版本。 當我們每次都更新到最後的穩定版本,我們稱之為rolling release. 以docker 官方建議的方式,我們在ubuntu底下,可以看到它的有很多結果回傳。 apt list allversions dockerce Listing... Done dockercenoble,now 529.1.41ubuntu.24.04noble amd64 installed dockercenoble 529.1.31ubuntu.24.04noble amd64 dockercenoble 529.1.21ubuntu.24.04noble amd64 dockercenoble 529.1.11ubuntu.24.04noble amd64 dockercenoble 529.1.01ubuntu.24.04noble amd64 dockercenoble 529.0.41ubuntu.24.04noble amd64 dockercenoble 529.0.31ubuntu.24.04noble amd64 dockercenoble 529.0.21ubuntu.24.04noble amd64 dockercenoble 529.0.11ubuntu.24.04noble amd64 dockercenoble 529.0.01ubuntu.24.04noble amd64 dockercenoble 528.5.21ubuntu.24.04noble amd64 dockercenoble 528.5.11ubuntu.24.04noble amd64 dockercenoble 528.5.01ubuntu.24.04noble amd64 dockercenoble 528.4.01ubuntu.24.04noble amd64 ... 我們可以選擇過去某個版本,但通常無腦update,就會去到最後一個版本。 Ubuntu的發佈策略 我們換個package看看,如果只看重要軟件的話,例如kernel,我們沒有什麼可以選擇 apt list allversions linuximagegeneric Listing... Done linuximagegenericnobleupdates,noblesecurity,now 6.8.090.91 amd64 installed linuximagegenericnoble 6.8.031.31 amd64 apt list allversions linuximagevirtual Listing... Done linuximagevirtualnobleupdates,noblesecurity,now 6.8.090.91 amd64 installed,automatic linuximagevirtualnoble 6.8.031.31 amd64 除了可選擇數量外,另一個最大的不同是,kernel的自身版本其實固定在 6.8.0,就算更新,都是同一個版本的ubuntu補丁版,並不是官方kernel的bug fix版。筆者認為,這應該就是所謂的point release的策略。 (如果大家安裝物理機的話,kernel可能會是6.14,筆者大部份都是VM,還是比較舊的版本。筆者保證,6.8.090.91與 6.8.031.31之間,曾經是有多個不同版本的。但現在沒法下載回來,除非之前大家有安裝過。) 但相同情況,我們找另一個package看看,由 ubuntu 自己打包的docker 版本,雖然可以選擇的數量是有限的,但它們的版本是不斷更新的,而且不是hotfix版,還有大版本更新。 apt list allversions docker.io Listing... Done docker.ionobleupdates,now 28.2.20ubuntu124.04.1 amd64 installed docker.ionoblesecurity 27.5.10ubuntu324.04.2 amd64 docker.ionoble 24.0.70ubuntu4 amd64 雖然版本是跟著官方docker最新版本,但也有持續跳級更新。如果真的要分類,筆者應該會把它歸類為 rolling release。 Rolling release vs Point release 花了一些時間看例子之後,終於開始討論我們自己的更新策略了。rolling release,最主要的原因是,舊版本無人再免費維護了,有什麼bug,都在最新版本中修復,但也因此有機會出現不相容的情況。point release,最主要的原因是為了維持極強的穩定和兼容版本,這亦代表,除官方專家出手,否則很難有舊版本的bug fix。 那麼我們有什麼選擇? 有point release,當然跟point release,因為程式不可能天天做調整。除非大家想要新功能再升級版本。 沒有point release,就手動自己選擇hotfix版或小版本升級。在升級大版本前,一定要做整合測試。若追求極致的穩定,升級大版本時就不要原機升級,要另起爐灶,似兩個相對獨立的環境並行過渡。如果有container版本,就用container隔離,一般java等都可以這樣建獨立環境。 沒有point release,也沒有可隔離的並行環境:其實 docker 接近這類。對它應的OS層的存取,雖然可以用VM隔離,但通常都不實際。因為重新安裝OS, 設定外部環境,成本很高。docker 在中 lab 並行升級是可以,但投産環境並行真的不實際。沒有辦法之下,筆者還是原機升級。頂多是lab中實現更多的整合測試。

你開始寫 Spring Boot 測試案例了嗎?
科技新知
MacauYeah・2025-11-29

雖然筆者過往做 spring boot framework 教學中,都有滲入一些測試用例。筆者也曾經困惑了很長一段時間,所以就獨立開一個主題,聊一下筆者在實務上對spring boot test 的理解。 測試案例究竟測試什麼? 測試用例 test case 是確保你的程式碼正確性與穩定性的重要步驟,但在 framework 下,並不是所有功能都很容易寫成測試。所以在討論 framework 測試之前,釐清測試的本質。 function input business logic function output 這意味著我們輸入某些資料(input),然後經過業務邏輯(business logic)的處理,最後產生結果輸出(output)。 我們的測試目標,其實就是確保業務邏輯正確。而我們的手段就是經檢查概定的輸入資料,核對輸出結果。 那麼只要我們可以生成輸入資料,就一定可以檢查輸出結果了吧?其實不是的,因為實務上的輸入和輸出沒有這麼簡單。筆者常接觸到的輸入輸出如下 輸入 function 輸入參數 系統狀態資料,例如:資料庫狀態、外部API結果。 輸出 function 輸出參數 寫入系統(影響到)的資料,例如:資料庫狀態、使用外部API時的輸入參數。 總之就是考慮了狀態機 state machine 的問題,每個狀態外部輸入都是一個測試用例,然後核對狀態機去了下一個什麼狀態。 言下之意,我們就是暴力地生成輸入參數和模擬狀態資料,道理上就是可以進行測試。 Spring boot web framework 中,我們又會測試什麼? function input business logic function output在Spring boot web就變成如下 controller request business logic controller response在 Spring Boot test 中,我們可以用模擬的 MVC MockMvc 測試來驗證 controller 的行為。不過,其實進入 controller 前經過很多系統轉換,而這些道理上跟Framework的技術大相關,與業務邏輯小相關。所以為免折磨自己,可以將業務邏輯單獨封裝成服務(service)。之後直接測試服務 ,易寫也易讀。 controller request service input business logic service output controller response道理上 controller 能做的業務邏輯,服務 service 都可以無腦重現。這樣還可以重用服務,減少測試的數量。 如何實現輸入? 直接 new Object。大部份的情況下,因為業務是自己編寫的,應該都可以直接 new 出來。 經 json 檔讀入。如果輸入的參數量太多,逐個經 java new 是很耗時的,我們可以經 json 反序列化變成 Object。但這亦只限於自己可以操作改寫的類。 Mockito 模擬那些無法簡易經 new 或 json 反序列化的 Object。例如:spring security authentication object 我們在使用時,其實只看到 interface。我們難似自己實現一個可以反序列化的類,那麼我們可以使用 Mockito 來模擬這些資料。一些外部API的結果,我們也可以用使 Mockito 來模擬。 什麼情況下不進行測試? 有些情況下,我們可能選擇不對某些功能進行測試,原因可能包括對功能的了解不足或是單純的懶惰。以下是一些例子: 僅進行配置的Function:如果你的 Function 只是在 Framework 中填寫配置,而且你並不太了解它的運作原理,可能就不需要進行測試了。例如,Spring boot web 中,需要大家配置一個SecurityFilterChain Object,它要求大家將 HttpSecurity 轉換為 SecurityFilterChain 。因為輸入的 HttpSecurity 是系統固定的參數,我們亦沒有檢查它的狀態。這種情況下,它的輸入及輸出,其實我們都沒有真正理解。我們硬測試的話,測試功能可能只流於表面。若我們真的要做測試,也是經過MockMvc進行端到端測試(endtoend testing),測試它在事後的影響範圍。 單純的框架功能:例如資料庫的儲存庫介面(repository interface),雖然是在框架下生成的,對於自己手動調整的部份功能,筆者通常亦不會進行單獨測試,通常都會搭配業務邏輯一起進行。它可以使用 Mockito 進行模擬測試,或用測試環境的真實資料庫進行測試。 面對的挑戰 總括來講,筆者盡可能地把測試用例限定在業務邏輯中,就可以大大地降低寫測試的技術難度。但筆者還是有些問題並未完美解決。 測試用例的數量可能很多,因此共用與維護變得相當困難。逐個用例獨立編寫輸入也是很累的。對於 Mockito 的使用,筆者還是可免則免。因為要逐個功能模擬,編寫量就指數提高,這亦難似配合外部變化。一般來說,能優先使用測試環境或者 Docker 來模擬環境的,就盡量用。 離線開發、離線測試。系統依懶的外部功能越多,想做單機開發的難度就越高。即使前述有 Docker 測試,對於持續整合(CI)來講也是有一定難度。那麼這時,Mockito 就是一個可取的選擇。但這又回到編寫量及難以偵測外部變化問題。 希望這篇文章能幫助你更好地理解測試案例的編寫方向,並在Spring boot web開發中加入你自己的測試!

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

年多前,筆者購入steamdeck, 經過一輪軟件定制,把它變成一個可以作為IT從業員開發機的方案,也介紹了一些coding anywhere的想法 httpslifemag.cyberctm.comzh_TWblogmacauyeah14175Coding Anywhere 工作方案 httpslifemag.cyberctm.comzh_TWblogmacauyeah14352Steam OS 3.5更新,內建 podman, distrobox httpslifemag.cyberctm.comzh_TWblogmacauyeah14149開發者在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 中的非管理員用户 Docker non-root user
科技新知
MacauYeah・2025-03-14

Container USER為何重要 在制作Docker Image的過程中,有時會接觸到 USER 這個設定。這事關到最後的 Docker Container內部運行的那個 user 到底會有什麼權限。大家也要知道,Docker Container 其實也只是一個 Linux 上的程序,也就是如果Container內權限過大,也有機會從 Container 內部存取到 Host上的資料。 一般情況下,Docker Image 預設的 USER 就是 root,最基礎的base image都是一樣。而我們想換,其實也相當簡單,就像Linux上起User一樣,只要經指令RUN adduser xxx 或RUN useradd xxx 也可以在 Docker Image 中創建帳號和 home 資料夾,之後就隨時經USER xxx來切換 實際上是不是這麼簡單 如果你將要Container中執行的程序,是一個binary,平常你在Linux中也是以 nonroot 方式執行,那麼是的,就是那麼簡單。例如你執行系統中的java, node, python,原本在Linux中就已經是誰都可以,那麼你的docker container 也應該沒有難度。 但如果原本的安裝包,預設是由system service來啟動,我們就要花點力氣,看看那個service是怎樣呼叫binary的,然後就一步一步模擬它的做法。例如筆者有打包的codeserver,預設是system service啟動,但它也有提共binary的執行方法,安定好home資料夾後,我們也可以手動啟動。 泛生之檔案權限問題 上述binary的情境之所以簡單,是因為大部份情況下,我們都只對於container 內部運行考慮即可,因為預設投產情況下的運作模式,都是隨時起、隨時刪、隨時砍掉重練,只要container內部運作可以自給自足,就可以了。Docker Swarm的運作也是如此,所以它不預期有的持久化資料權限的問題。 而持久化資料權限的問題,其實早在單個Linux伺服器就已經存在。同一個伺服器中,不同process就有不同的UID,當他們需要共同讀寫某些檔案,就會設定多人權限。同理,當多個Container要共同檔案,也是同樣問題。在討論共享檔案之前,我們先看看預設 Docker Storage Mount 會給我們什麼權限。 如果是bind mount,bind mount的權限預設會是Host內的檔案或者資料夾的權限。 如果Host是root,container內是nonroot,container有機會無法讀寫bind mount內的檔案。 留意權限設置就可以解決問題 如果Host是nonroot,但container 內是root,從container內生成的檔案,Host的nonroot user就無法使用。 Host是nonroot的話就一定無解,Host至少有sudo權限,臨時變成管理員,去修正問題。 如果host和container也是nonroot,但UID不夾,其實也不能交換使用。 跟上述一樣,最後要靠sudo來解決問題。 如果host和container也是root,就沒有權限問題,但就有安全性的風險。 如果是volume mount,就還是看看 mount path 是docker image layer中現有的 path還是新起的path 大部份手動建立的named volume都是root 經docker compose起的named volume滿足以下條件的話,將會是nonroot。 docker image 中的已有該path存在。 named volume未存在,docker compose會把對應path的內容在初次建立時抄到named volume 中。 例如ubuntu24.04中的homeubuntu,存在於docker image中,它的擁有者就是UID 1000,我們經docker compose HOME_VOLUMEhomeubuntu,在HOME_VOLUME建立時,就會是UID 1000。但如果是 NOT_EXISTShomeubuntusomethingNotExists,那麼NOT_EXISTS建立時,也會是root 上述討論的Storage mount是集中在單機情況下,使用HOST OS的本地儲存。若現在的場境是多機共享的share storage,就會更麻煩,還要看看那個share storage本身的屬性。例如常見的Linux NFS,其實有指定的權限,跟NFS的Login權限有關,如果你的process本身對檔案權限很敏感,就請先不要挑戰NFS例如postgresql。 Rootless mode Rootless 模式 Rootless 模式指的是在Host中,執行Container的使用者,不需要是管理員,筆者就常用於開發環境中。投產環境中反而沒有聽過這樣的討論,因為投產環境很少可以讓非管理員去執行這麼重要的環境管理。 雖然只是開發環境,但這像前述的bind mount討論中,如果Host是nonroot,但container 內是root,又或是兩者nonroot,但UID不夾,也會出現權限問題。無腦的將host user加入docker group,只可以讓非管理員可以運行docker,但解決不了權限問題。 真正有條件解決的,可能就會向linux subgroup的方式發展。暫時筆者用得比較順的rootless mode,可以無腦用的,不是docker,是podman。有興趣的朋友可以經podman官網看看教學,它給筆者的感覺就像是自動轉換UID。 podman rootless mode 想看更多 筆者已經將過去的文章重新整理成gitbook,有興趣睇更多的讀者,可以來筆者的gitbook再翻一翻 httpsmacauyeah.github.ioAProgrammerPrepares

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

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

[翻書倒櫃] 微小習慣改變人生 - 《原子習慣》
文化創意
君尋・2020-11-20

一個微小的改變可以扭轉人生嗎?《原子習慣》一書的作者相信,透過改變微小的習慣帶來的小進步,持續堅持下終有一天能帶來巨大的成就。作者認為建立習慣的最終目的,是讓我們能在每天選擇做正確的事。雖然可能只是每天取得原子般大小的進步,但日積月累和複利效應的影響下,一年後、五年後或者十年後的改變就變得非常明顯。關於「養成習慣」的議題,多年來已有不少書本探討,《原子習慣》的不同之處在於,作者認為該改變的不只是外在行為。驅使我們開始某個習慣的源動力確實是情緒,提供動力給我們踏出第一步。但熱情過後,習慣就只是某種行為的重複,很容易變得無聊。因此要開始和持續一個新習慣,該思考的不是要「達成怎樣的目標」,而是我們「想成為怎樣的人」,要改變的是對自己的身份認同。 書中提出四大原則,讓我們能有效率持續新習慣並減少已存在的壞習慣。第一個原則是「讓提示顯而易見」,每個習慣都是被提示所觸發的,因此增加身處的環境中的提示,讓這些觸發習慣的提示顯而易見。久而久之環景便會連結你的習慣,並成為你的提示。至於自制力是否觸發習慣的關鍵,作者認為能以自制力控制自己的行為只是短期策略,長期而言不讓自己身處充滿誘惑的環境比較重要。例如想要養成讀書的習慣,比起充滿誘惑的家裡,到圖書館閱讀的效果必定更高。緊接下來的原則是要「讓習慣有吸引力」,加強由「提示、渴望、回應、獎賞」構成的「習慣迴路」中,我們對獎賞的預期的正面感受,而非實際的獎賞,更能有效吸引我們實行該習慣。同理,當強調避免不良習慣的益處,便可使壞習慣的吸引力減弱。第三個原則是要「讓行動輕而易舉」,本章中提出我們需要不斷重複習慣,讓行為漸漸變得自動化。比起執行習慣時間的「長短」,執行習慣的「次數」之多寡更為重要。就像筆者本人今年開始了到健身房健身的習慣,雖然只是每天上班前運動三十分鐘,但不經不覺已持續半年有多,確實養成「運動的習慣」。若每天要求自己運動一小時,單是想像已經接受不了,更何況要持續半年。最後一項是要「讓獎賞令人滿足」。須謹記大腦會被立即的獎賞所吸引,並使人願意重複帶來此獎勵的行為,反之亦然。其中一種使人感到滿足的獎賞就是進步的感覺,可藉由記錄「進步的證據」。如本人每天記錄有沒有運動以及到健身房的總次數,讓我自身的進步可以被看見,大大增加「運動的習慣」的滿足感。 雖然作者傳授如何養成良好習慣的要點,但同時亦認為我們應慎選「習慣」。每個人天生的條件不一樣,在有利條件下透過上述的方案當然能有效達到目標,但同時亦無法完全扭轉在不利條件下的劣勢。選到正確的習慣我們很易便會進步,選到錯誤、不合適的只會讓我們充滿掙扎。此外,養成好習慣的同時,必須要認清一點,習慣會養我們不經思考行事,即代表我們不再注意到此習慣當中存在的問題。因此,盡管養成了良好的習慣,亦要謹記反省與復查的重要性,兩者並兼才可達致通往巨大成就的成功之路。 關於今回 翻書倒櫃 的推介書本: 書名: 《原子習慣》 作者: James Clear 出版社: 方智 出版日期:20190601 更多關於專欄 翻書倒櫃的閱讀心得:httpsppt.ccfBQDFx

2016 USJ大阪環球影城Halloween《環球驚喜萬聖節》活動簡報!!
專題報導
旅途上的仨倆事 // 東尼 & 蛀牙妹・2016-10-01

每逢USJ搞限定活動都吸引大量遊客到訪,今年仲係環球影城15週年,所以Halloween活動都特別隆重其事,咁岩首日我地又身處大阪,當然要去做白老鼠啦 雖然一大早就到,但全日既重點絕到係夜晚6點先開始既「驚魂夜」活動啊! 話說右手邊既「恐怖實驗病院」恐怖指數係10粒★架!但因為遊戲內容需要quot;接觸昆蟲quot;蛀牙妹就不敢入內啦xd 留待玩左既網友同返我地講好唔好玩啦~HAHA 今年最新加入既日式恐怖遊戲「崇」,一大堆日本人偶帶你遊走結界。。 聲明先,佢地唔係工作人員,而係分別既兩批客人黎架~當日好多遊客都好似佢地咁黎扮鬼扮馬入場~超有玩味! 好好奇到底佢地玩鬼屋係咩畫面? 6點前值「驚魂夜」準備開始,街頭既氣氛明顯變得凝重,大概好多人都係抱住又驚又想睇既心態?嘻嘻 樂園安排得好有心思,預先set好係街上既S.W.A.T.裝甲車會突然傳出爆炸聲引開大家注意力,成班喪屍就會襯機衝出黎嚇大家一個操手不及~~~嚇死人咩XD Biohazard經典場面... 頗為迫真! 每個場景都會吸引大批遊客圍觀。 無面男亂入啊~~~無面男見到大家圍住自己影相,開心到係衫袖quot;變quot;出金粒啊XD 話就話以恐怖為主題,其實現場係「恐怖X熱鬧」先岩! 日本人好明白一期一會,活在當下既道理,一玩呢活動隨時玩得認真過工作人員添。 「驚魂夜」場內地圖~同行有老人家唔敢睇既人可以到安全區暫避,十分貼心。 最後附上用手機粗剪既現場影片比大家參考~:) 購票資訊:《環球驚喜萬聖節》官方網頁 更多東尼amp;蛀牙妹走過歐亞24國既背包故事請多多指教: FACEBOOK粉絲專頁 httpswww.facebook.comTripswhatifeel IG帳號 httpswww.instagram.comdavidtonio

最佳觀賞點睇「澳門國際煙花比賽匯演」攻略+ 《我最喜愛的煙花隊伍》投票
生活在我城
Cheers!・2023-09-08

闊別三年,澳門國際煙花比賽匯演終於回歸啦!嚟緊將於 9月11、16、 23日及10月1、7 日,5 個晚上,一共 10 場煙花表演,按比賽順序來自世界各地的煙花公司包括澳洲、瑞士、奧地利、俄羅斯、菲律賓、日本、中國、葡萄牙、英國和德國。 10月7日晚最後兩場煙花表演完畢後,將會舉行頒獎典禮公佈比賽的得獎結果。 而觀賞煙花匯演後為喜歡的隊伍投票,投中冠軍之煙花隊伍,更可自動進入「終極抽奬活動」,贏得豐富獎品包括 iPhone 14 Plus、$100無門檻現金券、手調飲品等,切勿錯過!下文會有更詳細的參加方法與教學,記得看到最後! 往年照片 來源:Gov.mo 精選打卡位多角度賞煙花魅力 為了令大家可以於不同角度欣賞煙花,特別為大家整理 5 個最佳觀賞點包括: 南灣 雅文湖畔 氹仔海洋大馬路 澳門科學館海堤 沙枱斯大馬路 (澳門文華東方酒店) 孫逸仙大馬路觀音蓮花苑至觀音像海濱休憩區 而澳門電台中文頻道FM100.7將於每個演出晚上9時及9時40分播放襯托煙花表演的背景音樂,為大家帶來多種視聽體驗,而澳廣視的澳視澳門及澳門綜藝頻道等亦會作現場直播。 詳情 澳門國際煙花比賽匯演時間表 嘉年華添熱鬧氣氛 另外,一定唔可以錯過澳門旅遊局與澳門街坊會聯合總會舉辦的「火樹銀花嘉年華」 ,活動集美食、表演及遊戲於一身,由下午5 時至 11 時於澳門旅遊塔旁舉行,非常有氣氛! 今年社團亦會首次於南灣・雅文湖畔及氹仔海濱休憩區舉行ldquo;花火大會rdquo;市集活動,大家可以在每個比賽晚上選擇在不同地點一邊看煙花,一邊品嚐美食、玩遊戲、看表演。 《我最喜愛的煙花隊伍》投票活動 欣賞煙花之餘參加《我最喜愛的煙花隊伍》投票活動,每輪煙花匯演後為喜歡的隊伍投票,每輪投票後皆可獲抽獎機會贏取豐富獎品,而若投票者投中冠軍之煙花隊伍,更可自動進入「終極抽奬活動」。投票次數越多,中獎機會越大,獎品豐富,包括 iPhone 14 Plus、$100無門檻現金券、$50無門檻現金券、手調飲品、甜品、商戶優惠等,萬勿錯過! 投票活動日期:2023年9月9日 至 2023年10月7日 遊戲傳送門 當比賽日兩場煙花匯演結束後,線上投票網頁上的投票功能將會開啟,大家可選出當日兩場煙花匯演喜歡之一個隊伍,點選「確認投票」後即代表完成一輪投票。投票後即可參與線上抽獎。合共五輪投票,每輪限投票一次。同時,每輪投票皆設有煙花匯演重溫連結,大家可重溫後再投選自己最喜愛的比賽隊伍,增加進入終極抽獎活動的機會。大家亦可於排行榜查看每個煙花公司的投票走勢,但留意投中冠軍團隊則以官方比賽結果為準,投中冠軍團隊則自動進入終極抽獎活動! 終極抽獎活動大獎 iPhone 14 Plus $100 $50 無⾨門檻現⾦金金券 美好年代 巷仔冰室 Bricolage拿住雪糕 大苑⼦ 御前上茶 糖貴妃 另外,還有多個商家優惠,參加投票即有機會抽中,如果想贏獎品就記得每星期鎖定每場煙花比賽匯演投票啦! 遊戲傳送門 第 31 屆澳門國際煙花比賽匯演 日期:9月11、16、 23日及10月1、7 日 地點:南灣 雅文湖畔、氹仔海洋大馬路、澳門科學館海堤、沙枱斯大馬路 (澳門文華東方酒店)、孫逸仙大馬路觀音蓮花苑至觀音像海濱休憩區 詳情