搜尋

搜尋結果

Steam OS 內建 podman DNS 問題解決方法
科技新知
MacauYeah・2024-12-20

前幾天筆者在介紹SteamDeck 內建的podman時,沒有測試得很清楚。在長期使用下,的確有些問題需要進一步處理,這裏就補充一下解決方法。 我們前一篇介紹的 Steam Deck 內建 podman ,配上再自行安裝 podman-compose 有時會出現warning :`WARN[0002] aardvark-dns binary not found, container dns will not be enabled`。這不單影響到沒有在 service 之間自動産生 DNS 記錄,還會令互聯網功能失效,因為它會是整個 DNS 解釋功能丢失了,只是在 service 中定義 DNS 的地址並不會解決問題。筆者亦測試過,照著原本的 docker 思路,使用最傳統的做法,自己起 network ,自己起 container ,然後再串連在一起,依然會出現問題:`Error: "slirp4netns" is not supported: invalid network mode`。所以根源問題應該不在 podman-compose 上,而是在內建的 podman 依賴上。 緊急的解決方案,我們需要用到 "network_mode: host" 的方式去解決。例如以下例子 "network_mode: host" 的主要作用,就是讓 container 直接在主機的網段上執行。上面的例子中的 postgres 資料庫,它預設使用5432端口,我們並不需要再獨立宣告,即使在 container 內外,都可以直接使用 localhost:5432 溝通。而使用了主機的網段後,DNS 也可以正常運作。但這個做法的缺點就是 container 內的所有 port 都自動佔用了 host 上的使用,有時候那怕我們並不需要,它也會被暴露在外。更可能的是增加了不同 container 之間的 port 衝突。不過筆者要用於開發環境,所以這並不會是很太大的問題。

手機也有不用充值的PVP格鬥遊戲?|Skull Grils Mobile
手機‧電玩
MacauYeah・2022-12-30

筆者在近幾年手遊上,能長期遊玩的只有《荒野亂鬥》(PvP射擊遊戲)。一來因為它可以填補碎片化的時間,另一方面因為良心抽獎機制,長期不課金也能繼續體新英雄。那怕是如此良心的公司,也始終有一個育成角色的元素,你必須為新角色收集能量,從而提升等級,有些技能亦需要衝過抽寶箱開啟。(因為他中獎機率高,資源豐富,所以總有一日你會練滿一個角色。) 今日要介紹的Skull Grils Mobile就不一樣。一開始他走傳統的RPG格鬥模式,要抽角色之餘,還要收集資源打開技能。同一個角色起碼有三種不同的屬性,整個遊戲充滿着滿滿的「農」味(form)。 但出奇的是,他在遊戲更新中,加入了一種公平競技的模式(帳號等級10級就會開放競技模式)。它提供所有角色,即使你從沒有抽過,也可以直接操作,各樣招式都已經解鎖,而且忽略所有屬性限制,並可以與對手進行實時PVP對戰,真佛心的一款遊戲,值得大家下載一試。 [試玩] Skull Grils Mobile 公平競技對戰模式 說實在,手感不能跟主機遊戲的格鬥遊戲直接相比,但大部份該有的元素也存在:打/投/Dash 等博弈抉擇,輕/重/上勾拳等互相克制,都非常適合用手機遊玩。而且手機延遲不高,對戰體驗流暢,真的很適合去格鬥有興趣的玩家。

概有雲供應商的K8S,為何要自己弄Docker Swarm / 本地K8S ?
科技新知
MacauYeah・2024-11-19

其實筆者寫了這麼多篇docker 的文章,可能有朋友會問,為何要自己從零建立Container環境,使用供應商直接提供的K8S服務不是很好嗎? 按照市場發展,各大雲供應商都越來多,競爭越嚟越激烈,作為用戶方,理應可以得到更合理的價格。不過作為使用VPS多年的筆者,真的沒有覺得雲服務的價格可以便宜到一個不用煩惱的水平,大家還是需要很㥀重地考量自己的業務是不是值得雲端化。 正常來講,在有足夠使用量的前提下,雲端化也是合適的,也真的有產到錢。但問題是大部份情況下公司內部自主開發的應用,都沒有去到這個程度。每個應用去租用一個VPS,即使使用最低配置,用起來的時候覺得不夠快,閒起來的時侯也是浪費錢。 這時,使用 Container 技術,就是讓多個不同的應用,共享同一個或多個VPS的好方法。因為 Container 可以簡易地做到應用之間的隔離,即使不同應用之間有依賴衝突,只要 Contianer 層面沒有衝突就可以共存。 Docker swarm 與 K8S 同為 container 技術,文章最前面,就提到了這個問題,為何不選現有的K8S,反而要自己弄Docker Swarm?其實關鍵亦是價錢的問題。使用K8S固然方便,但就每個節點都得使貴一級的雲端供應商服務,當我們的應用總是流量不足,就更易變得食之無味,棄之可惜。老實講,貴一級的雲端服務,有它存在的價值,很多東西可以做自動化擴展,例如概據流量自動擴容。另外,因為底層 Container 技術有供應商支援,也不用再另外購買支援服務。但這些都是業務有一定流量,才能展現出優勢。 反觀Docker Swarm,就是簡單可入手,初時一個VPS也可以。什至乎不上雲,找幾台舊電腦,實機做也可以。當然K8S也可以實機,不過就簡易程度來講,Docker Swarm 無得輸。待業務真正成長到一個有足夠流量的服務時,才進一步遷移到供應商的原生雲。在初期使用自建的Docker Swarm或小型K8S,可以先加入一些資源統計,以確定是否即裝滿負荷。

STOMP首演之夜 為觀眾帶來集敲擊樂、舞蹈及音樂劇於一身的精彩表演
娛樂殿堂
LifeMag Editor・2016-09-27

STOMP能量勁爆的表演者於澳門首演之夜在威尼斯人劇場為觀眾傾力演出,帶來震撼衝擊的兩小時精彩表演。這個表演是透過使用一些隨手可得的日用品,如打火機、垃圾桶蓋、廚房洗手盆等,並以敲打、撞擊等的方式來創造出截然不同的聲響的現場秀。 STOMP是集創新舞蹈、街頭表演的戲劇張力及音樂表演於一身的現場秀,自1992年起在世界各地與全球觀眾見面,並曾在2012年倫敦夏季奧運會閉幕式作演出,令在場觀眾為之雀躍及興奮。 最新的表演除全新的音樂、編曲外,被表演者穿在身上又拿來演奏的「樂器」—大量回收的輪胎內胎,更為這場精心設計的表演錦上添花。演出再融合極富感染力的節拍、搞笑詼諧的趣劇、自創新奇的舞步,連同舞者之間心電感應般的默契,STOMP是可讓大家釋放城市人壓力的終極舞蹈及節奏表演。 STOMP迄今已巡迴演出25年,團隊已先後走遍六大洲共53個國家,為全球逾1,200萬名觀眾帶來超過兩萬場演出。全球亦設有多達五個STOMP公司為世界各地的觀眾帶來表演。 STOMP將於威尼斯人劇場演出至10月9日,門票可透過金光票務售票處訂購,票價由港幣/澳門幣180至780元,更可經網站www.cotaiticketing.com或致電+853 2882 8818 (澳門熱線) / +852 6333 6660 (香港熱線) / 4001 206 618 (中國內地免費熱線)訂購。

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 層面指定。 @Table(schema = "ORIGINAL_SCHEMA") 這看上去,是很有彈性的。但其實也是有些局限。如果你本來的JPA有寫特制的 JPQL 或 Raw Query,又或者你在Java層面加了 @Subselect,由於這些都是程式原作者所 hard code 的,JPA沒法幫你改寫。改來改去,可能還是前述寫Script的方法,一口氣把所有 Table 給鎖起來實際一些。 Reference 更多筆者的程式開發分享,見請 github

測試驅動開發 | 系統邊界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、檢查某些重要業務值會不會是空、確保後續部份可以正常使用,這是因為我們不能被外部系統的失誤而導致自身系統癱瘓。 其實測試驅動,本質上就是強逼大家想多一點,好好定義預期的行為,不論內部條件怎樣變化,都有一自動的檢收標準。

澳門航空全航線優惠!日韓MOP1,676起、台泰越MOP1,156起、中國MOP1,014起!
激安優惠
OHChance 旅遊誌・2019-06-04

澳門航空端午全航線優惠(除了上海),10月至2020年1月中出行適用,日本線價錢算ok,是可以考慮一下。另外越南線、曼谷也是不錯。 《優惠價錢(來回連稅)》 日本線: *東京:MOP1,998*大阪:MOP2,031*福岡:MOP1,676 (12月1至7日、1月6日至15日出發)(10月4日至11日、12月26日至31日出發貴200)(10月12日至11月30日、12月8日至18日出發貴400) 其他亞洲航線: *首爾:MOP1,719*曼谷:MOP1,214*峴港:MOP1,187*河內:MOP1,227*台北:MOP1,256*高雄:MOP1,156 中國航點: *北京:MOP1,934*成都:MOP1,914*天津/太原:MOP1,734*青島:MOP1,634*南京/常州/寧波:MOP1,564*杭州:MOP1,514*鄭州:MOP1,334*重慶/廈門:MOP1,314*合肥/溫州/貴陽:MOP1,214*南寧:MOP1,014  《出發日期及最長停留》.出發日期:10月3日至12月18日      12月26日至2020年1月15日.最長停留:7天  《購票日期及方法》.購票日期:6月11日23:59前.預訂方法:澳門航空官網.預訂網址:https://www.airmacau.com.mo/  【行李資訊】.澳門航空票價包20KG托運行李額。  附註:上述最低價錢為航空公司公告之最優惠價格,或本站能找到的最低價格;每一航班有否優惠票價及所存票量由航空公司決定,優惠票量有限售完即止。  [價錢 Sample – 澳門飛東京來回連稅MOP1,998] ===== 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 https://ohchance.info/ 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 https://ohnote.info/ 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:https://youtube.com/c/OHChanceTravel 睇埋 Facebook 專頁 https://fb.com/ohchance 第一時間獲得最新旅遊資訊!

澳門航空2019優惠!
激安優惠
OHChance 旅遊誌・2019-01-02

澳門航空推出2019年第一次優惠,除北京上海兩個大陸航點外都有優惠。19年4月至9月出行適用(7月中至8月下旬暑假及大假如復活節除外)。日本線方面福岡唔使1800值得看看,東京7月1日起增至1日2班,平飛算係最易搵,台北高雄1100來回也是可以留意。 另外如果開賣搵唔到平飛,不妨隔半日一日再返入去看看,過往是有經驗開賣後一段時間會補入平飛。 《優惠價錢(來回連稅)》 《台日韓》*台北/高雄:MOP1,154(台北限NX602) *東京:MOP2,085*大阪:MOP2,116*福岡:MOP1,765(日本線優惠4月23日至7月19日出發貴200) *首爾:MOP1,825 《東南亞》*曼谷:MOP1,223*河內:MOP1,241*峴港:MOP1,201 《中國大陸》*成都:MOP1,778*天津/太原:MOP1,678*南京/杭州/常州/寧波:MOP1,578*青島:MOP1,478*廈門:MOP1,428*重慶:MOP1,328*貴陽:MOP1,228*鄭州:MOP1,178*南寧:MOP1,128*合肥:MOP1,078  《出發日期及最長停留》.出發日期:4月1日至7月19日(日本線4月23日起)      8月27日至9月26日.最長停留:7天  《購票日期及方法》.購票日期:1月16日23:59前.預訂方法:澳門航空官網.預訂網址:https://www.airmacau.com.mo/  【行李資訊】.澳門航空票價包 20KG 托運行李額。  附註:上述最低價錢為航空公司公告之最優惠價格,或本站能找到的最低價格;每一航班有否優惠票價及所存票量由航空公司決定,優惠票量有限售完即止。  [價錢 Sample – 澳門飛東京來回連稅 MOP2,085] ===== 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 https://ohchance.info/ 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 https://ohnote.info/ 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:https://youtube.com/c/OHChanceTravel 睇埋 Facebook 專頁 https://fb.com/ohchance 第一時間獲得最新旅遊資訊!