搜尋

搜尋結果

Macau Best】飲啖茶,食個包!澳門飲茶食點心人氣推介
澳城餐飲
Lifemagfoodie・2020-05-28

不少澳門人都喜歡一早起身,到至愛的澳門茶樓飲茶食點心。一邊看報紙,一邊飲茶食點心,有時和街坊街里暢談大小事,就這樣度過悠閒的早上。一間受歡迎的澳門茶樓,除了水滾茶靚之外,巧手精製的「一盅兩件」點心更加是不可或缺。今日小編為大家介紹5間澳門特色茶樓,一齊去「飲啖茶,食個包」! 金悅軒海鮮薈(氹仔大中華店) 「金悅軒餐飲集團」在澳門有多間酒家和火鍋店,而其中一間最受澳門茶客極力推薦的,就是位於氹仔大中華廣場(即氹仔CTM對面)的「金悅軒海鮮薈」。不但交通十分便利,乘搭巴士就可以直到氹仔大中華廣場樓下,而且無論環境、服務和點心都是無懈可擊,有不少澳門茶客都會慕名而來。 圖片來源:「金悅軒餐飲集團」官方網頁 除了水滾茶靚之外,「金悅軒海鮮薈」的茶巿點心亦十分精巧,特別是「金悅蝦餃皇」、「瑤柱花菇燒賣皇」和「燻三文魚鮮蝦春卷」最具名氣。平民的價錢就可以食到5大隻蝦餃、口感十足的燒賣及在澳門不太常見的「燻三文魚鮮蝦春卷」。心大心細不知道選甚麼點心好?點這幾款點心就對了。 圖片來源:「金悅軒餐飲集團」Facebook 專頁 地址:澳門氹仔孫逸仙博士大馬路 520 號大中華廣場 1 樓 電話:2881 3191 營業時間:星期一至日,上午 10 時至下午 3 時,下午 5 時至晚上 11 時 更多巧手點心款式可到 金悅軒餐飲集團 瀏覽。 蝶苑 同樣是位於氹仔,坐落於氹仔新世界花園地下的「蝶苑」,環境寬大舒適不在話下,各款中式點心、家常小菜、明爐燒味等美食都一應俱全,難怪會吸引一大班茶客每天都到來捧場。 「燒賣」大家食得多,但有麻辣味道的「麻辣燒賣」卻在澳門不太常見。喜歡食辣的朋友,不妨去挑戰「蝶苑」的「麻辣燒賣」,保證一試難忘。 除了「麻辣燒賣」相當了得之外,「蝶苑」的「流沙奶皇包」也是不少打卡迷的心中至愛。味道超正之餘,可愛豬仔的賣相更加迷倒了不少茶客。 以上圖片來源:「蝶苑 Jardim das Borboletas」Facebook 專頁 地址:澳門氹仔埃武拉街 421 號新世界花園地下 電話:2883 0390 營業時間:星期一至日,上午 10 時 30 分至下午 3 時 30 分,下午 6 時至晚上 11 時 更多點心款式可到 蝶苑 了解。 譽瓏軒粵菜廳 獲得米芝蓮星級榮譽的「譽瓏軒」坐落於澳門新濠天地。不但擁有富麗堂皇的環境,還有採用了新鮮的名貴食材,經星級名廚巧手製作出來的高貴點心,完全體驗到名廚的功力。無論是環境或點心,「譽瓏軒」都盡顯貴族氣派。 「譽瓏軒」其中一款由名廚歐陽師傅推介的「翡翠玉龍餃」,外表「餃」如其名,猶如翠綠的翡翠,與別不同,味道更加是不同凡響。除此之外,布拉腸粉更可以自行挑選配搭,味道千變萬化。 以上圖片來源:「Jade Dragon Cantonese Restaurant 譽瓏軒粵菜廳」Facebook 專頁 地址:澳門路氹連貫公路新濠大道新濠天地 2 樓 電話:8868 2822 營業時間:星期一至日,上午 11 時至下午 3 時,下午 6 時至晚上 11 時 點心菜單可到 譽瓏軒粵菜廳 了解更多。 名門尊薈 想在室外「飲啖茶,食個包」的話,不妨考慮到位於氹仔的澳門賽馬會內的「名門尊薈」。除了有免費泊車之外,無論室外或室內,環境都十分舒適優雅,在室外飲茶更可以飽覽澳門路氹城和橫琴的美景。邊看風景,邊吃點心,實屬人生一大樂事。 「名門尊薈」的點心價錢很親民,而且大大件,再加上吸睛的獨創點心款式,特別是澳門少見的「避風塘蝦餃」、「蔬菜汁和牛包」和「黑芝麻芒果薄罉」,成功吸引一大班澳門茶客登門造訪飲茶食點心。 圖片來源:「名門集團」Facebook 專頁 地址:澳門氹仔柯維納總督大馬路澳門賽馬會賽事大樓 1 樓 電話:2878 8227 營業時間:星期一至日,上午 10 時至晚上 11 時 龍華茶樓 由1962年開業至今的「龍華茶樓」,坐落於澳門紅街巿附近,鵝黃色外牆上的「龍華茶樓」依然保留由右至左的寫法。環境懷舊之餘,點心更加是無可挑剔。 作為澳門首屈一指的「龍華茶樓」,不僅保留了澳門傳統裝修風格,而且款款點心都是大廚沿用傳統的做法。不但款式多,而且味道一流,尤其是「山竹牛肉」、「馬拉糕」和「燒賣」,再加上水滾茶靚,深得澳門一眾茶客的青睞。 圖片來源:「龍華茶樓」Facebook 專頁 地址:澳門筷子基提督巿北街 3 號 電話:2857 4456 營業時間:星期一至日,上午 7 時至下午 2 時 除了去澳門茶樓品嚐「一盅兩件」,飲杯由滾水和靚茶葉浸泡出來的茶之外,澳門還有其他特色的地道美食,例如:葡撻、豆腐花、豬扒包、雞蛋仔等等。想知還有那些不可錯過的澳門地道美食,以及可以到那裏找到的話,不妨瀏覽以下精選文章。 延伸閱讀:【Macau Best】品嘗地道美食,澳門人氣必食之選! 澳門有不少高CP值的下午茶餐廳。想和閨蜜一齊享受下午茶的話,不妨參考以下的閨蜜下午茶推介啦! 延伸閱讀:閨蜜好去處,澳門精選下午茶推介 作者:IronMan

新濠影滙與新濠天地 迎接歡樂復活節
旅遊情報
LifeMag Editor・2016-03-21

以電影為主題的綜合度假村新濠影滙將於復活節隆重呈獻不一樣的精彩假期,期間推出琳瑯滿目、適合一家大小的歡樂節目,搖身成為大小朋友同樂的繽紛世界,為一連四天的假期增添上難忘色彩。復活節假期完美的一天,先從首個華納滿Fun童樂園豐盛自助早餐啟動,與您的小孩體驗一個上午趣味無窮的主題樂園親子樂。 與家人一起歡度輕鬆愉快時光,除了各式各樣的節目外,新濠影滙亦為您搜羅餐飲盛宴及優惠,當中包括「星滙餐廳」自助餐令人心花怒放的復活節菜式及繽紛應節甜品;「意‧味」餐廳精心準備的意式風情豐盛復活節套餐以及限時發售的Pierre Hermé Paris x Nicolas Buffe名師朱古力禮盒。新濠影滙的多間餐廳及零售商店均有發售巨型朱古力復活兔、棒棒糖等應節甜點,讓假期充滿樂趣之餘又增添令人垂涎的美味。 想令這個繽紛節日更加歡樂完美,可到僅5分鐘車程之隔的新濠天地觀賞首個亞洲大型水上匯演「水舞間」,與家人齊齊感受這個驚世巨獻的無比震撼,同時享受一連串精彩的「水舞間」驚喜優惠。對於一眾時尚及愛美人仕,為自己犒賞一個恬靜身心的水療亦不失為復活節假期的好節目,新濠天地限定的盛放水療之旅能讓您春日魅力綻放。 華納滿Fun童樂園豐盛自助早餐 由復活節開始每逢週六及週日,以家庭套票在「華納滿Fun童樂園」內之「樹屋餐廳」與您的小孩一起體驗夢幻自助早餐,家傳戶曉的華納兄弟及DC漫畫中的角色人物湯姆貓、傑瑞鼠、翠兒及賓尼兔等將與您們一起品嚐賣相可愛別緻的中西自助美食、共同暢玩多款互動及動感遊戲、欣賞精彩的舞蹈表演,更可跟最愛的角色近距離接觸及合照,讓小朋友在訓練有素的專業駐場員的細中照料下,於舒適安全的環境下歡度時光,一家投入經典角色的夢幻之旅。 家庭套票 (逢星期六及日) 兩位成人 + 一位小童 澳門幣800元 或 兩位成人 + 兩位小童 澳門幣1,000元 自助早餐 (上午9時至11時) 華納滿Fun童樂園3小時玩樂時間(上午9時至中午12時) 5小時免費泊車 小童需為16歲或以下,且須由成人陪同及登記方可進入。基於安全理由,8歲以下小童需全程由隨行成人陪同方可享用場內設施。滿8歲小童可獨自遊玩,但隨行成人需於出口處等待。有關條款及細則適用。 查詢:(853) 8868 6767或reservation@sc-macau.com 「星滙餐廳」風味自助餐 新濠影滙「星滙餐廳」自助餐除了為您帶來上等海鮮及環球美食,更於本月呈獻品質優良的乳飼羊,其肉質細嫩,風味十足。除了巴西燒烤,還有切肉檯源源送上烤雞及羊肉。每逢星期日更特別加推烤全羊,皮脆肉滑,原汁原味奉上,加上復活節菜式及朱古力復活蛋等繽紛應節甜品,必定令大小朋友心花怒放。提前預訂更可享8折優惠。 星期一至六 自助午餐 成人:澳門幣268元、6-12歲:澳門幣134元 自助晚餐 成人:澳門幣498元、6-12歲:澳門幣249元 星期日 自助早午餐及晚餐 成人:澳門幣628元、6-12歲:澳門幣314元 3月27日復活節精選 成人:澳門幣688元、6-12歲:澳門幣314元 5歲或以下免費。以上價格以澳門幣計算並需加收10%服務費。有關條款及細則適用。 「星滙餐廳」- 新濠影滙酒店明星滙二樓2113號 訂座及查詢: (853) 8865 6668 「意‧味」復活節午膳套餐 3月27日到新濠影滙的「意‧味」品嚐意籍主廚Paride Noviello精心準備的豐盛復活節套餐,傳統的烹調手法加入創新的元素,帶來充滿春日氣息的應節菜式,包括帶子配黑松露藏紅花汁、八爪魚墨汁寬麵、烤羊扒等。 每位澳門幣388 元 *價格以澳門幣計算並需加收10%服務費 「意‧味」─ 新濠影滙購物大道一樓1079號 訂座及查詢:(853) 8865 6662 Pierre Hermé Paris x Nicolas Buffe 獨家朱古力禮盒 Pierre Hermé一向愛與其他大師合作,為大家帶來創意新品,擦出火花。由兩大藝術家攜手呈獻的藝術結晶品,這次他讓藝術家Nicolas Buffe發揮無限創意,透過繪圖編織出一個浪漫的愛情故事,帶您進入Hélios和Roxane的夢幻世界。設計意念融合神話色彩、現代漫畫、文藝復興以至巴洛克藝術風格。名師所設計的禮盒,藏著Pierre Hermé Paris的原創朱古力,純正原產地的巴西黑朱古力、香草玫瑰荔枝覆盆子朱古力、蜜糖咖啡朱古力及朱古力黑醋栗。位於新濠影滙的Pierre Hermé Paris澳門店將限時發售一系列Pierre Hermé Paris x Nicolas Buffe的獨家禮盒朱古力,為復活節帶來更多歡樂。 Pierre Hermé x Nicolas Buffe, Roxane 精選巧克力禮物盒 (210克) 澳門幣660元Pierre Hermé x Nicolas Buffe, Hélios 精選巧克力禮物盒 (210克) 澳門幣660元Pierre Hermé x Nicolas Buffe, Athanor 3精選巧克力禮物盒 (350克) 澳門幣850元 Pierre Hermé Paris - 新濠影滙購物大道一樓 查詢電話: (853) 8865 3450 新濠天地「水舞間」驚喜優惠 由即日起至2016年 6月30日購買「水舞間」門票觀賞此項大型水上匯演即賞您驚喜優惠,賞您新濠影滙「星滙餐廳」自助餐*! A 區 星滙餐廳免費自助午餐*及「影滙之星」門票 B 區 星滙餐廳免費自助午餐* C區 澳門幣150餐飲禮券^ *需購買A或B區門票;如「星滙餐廳」自助午餐滿座,客人將獲澳門幣250餐飲禮券,於新濠影滙之指定餐廳使用。^適用於新濠影滙之指定餐廳使用。 推廣日期: 即日起至2016年 6月30日(無表演日及指定日子除外) 皇冠度假酒店「漾日」春日盛放之旅 於2016年再度榮獲《福布斯旅遊指南》五星榮譽的皇冠度假酒店「漾日」水療中心,在暖和的春日特別打造「漾日」春之彩及春之美兩款水療之旅,以專研的護理為一眾愛美人士注入生氣,煥發光彩。春之彩的兩小時療程提供全身去除角質保養,完成深層清潔後,以充滿海洋活性成分的體膜或蘊含多種天然礦物質成分的海藻裹敷身體,有助於排除身體的毒素,煥發肌膚光彩。療程後一小時「漾日」的理療師接著會為您量身打造一個香薰按摩護理,助您全身放鬆,達到紓解壓力的功效。「漾日」同時著重您的健康,專業團隊特別為春之彩水療之旅設計了一健康美饌餐單,讓您完成一系列護理療程後享用健康美食,清新滋味絕對適合關注健康的您。 春之彩 (120分鐘) 澳門幣1,880元 全身去除角質 海藻或泥膜身體裹敷 全身香薰按摩 兩道健康美饌 另一項春日限定的「漾日」春之美水療之旅將帶您進入一趟90分鐘的忘憂寫意護理體驗,療程包括背部重點按摩,將根據您的需要在療理師的幫助下放鬆背部緊張的肌肉,讓背部的痠痛得到舒緩的感覺,特別適合一眾上班族。緊接著以「漾日」皇牌產品怡世寶護理系列進行面部護理,採用天然成分的頂級產品以呵護您幼嫩的面部肌膚。 春之美 (90分鐘) 澳門幣1,380元 背部重點按摩(30分鐘) 療理師作詳盡諮詢並以Skinvision™技術深入分析肌膚問題 怡世寶面部護理(60分鐘)︰亮彩活顏/ 水潤透亮 / 深層潔淨 *需加收10%服務費及5%政府稅,推廣期至2016年4月30日 「漾日」水療中心 - 皇冠度假酒店三樓 預約或查詢:電話 (853) 8868 6883 或電郵 crownspa@cod-macau.com Hard Rock酒店「騰」水療感官二重奏 「騰」水療感官二重奏讓您在這個春夏喚醒感官,為肌膚注入搖滾生命力。一次過享磨砂加自選按摩或足底按摩加面迎護理,體驗春日浪花護理,享受燕麥磨砂護理加自選按摩;另外亦可選擇盛放護理,護理療程包括足底反射按摩及保濕面部護理,以茶樹及薰衣草精油進行足部抗菌及放鬆護理,有助血液循環及減輕腿部不適。而採用檀香、薰衣草等配方精油的面部護理,能鎮靜和幫助舒緩敏感肌膚,同時幫助滋潤肌膚。 浪花護理 燕麥磨砂 (30分鐘) 及自選按摩 (60或90分鐘) 30分鐘 + 60分鐘 澳門幣780元 (原價澳門幣1,200元) 30分鐘 + 90分鐘 澳門幣980元 (原價澳門幣1,500元) 盛放護理 足底反射按摩 (30分鐘) 及保濕面部護理 (60分鐘) 澳門幣780元 (原價澳門幣1,200元) *需加收10%服務費及5%政府稅,推廣期至2016年4月30日 「騰」水療 - 澳門Hard Rock 酒店三樓 預約及查詢: (853) 8868 3318或 rockspa@cod-macau.com

Will the China-US Tariff Trade War End in 2026?
宗教玄學
熊神進・2025-11-15

Trump announced that a 100% tariff will be imposed on Chinese goods exported to the United States starting from November 1st, and export controls will be implemented on "all critical software". Trump's new trade action is a response to China's significant expansion of export controls on rare earth elements.According to a Reuters report on October 17th, when US President Donald Trump was interviewed by FBN and asked whether such high tariffs are sustainable and what impact they might have on the economy, he responded, "This is unsustainable."The United States will impose an additional 100% tariff on Chinese products. Spokespersons of the chambers of commerce in Hong Kong and Macau believe that the goods for the US Thanksgiving have already been delivered. Moreover, most mainland Chinese, Hong Kong, and Macau merchants have relocated their factories in the United States to Southeast Asia, India, and other regions. Therefore, it is believed that the impact of this measure will not be significant. We attempt to use China's traditional "Bazi (Eight Characters) Theory" (八字理論)to predict whether the China-US tariff trade war will end in 2026.The United States was founded on July 4th, 1776, and the People's Republic of China was founded at 15:00 on October 1st, 1949.From the perspective of Bazi numerology, analyzing whether the China-US tariff trade war will end or ease in 2026 requires combining the five-element characteristics (五行特徵)of the Bazi of the two countries and the interaction of their annual fortunes.The Bazi of the United States is: Bing Shen(丙申), Jia Wu(甲午), Geng Yin(庚寅), Xin Si(辛巳). Geng Jin(庚金) is born in the Wu month(五月) (the fifth lunar month), where the fire element is strong, so Geng Jin (庚金)is restrained. However, the Shen Jin(申金) in the Year Pillar(年柱) and the Si Huo(巳火) in the Hour Pillar(時柱) contain the root of Geng Jin(庚金), and with the support of Xin Jin辛金, its own strength should not be underestimated. In its Bazi, the fire and wood elements are relatively strong, and the metal element also has a certain degree of strength, resulting in a slight imbalance of the five elements.The Bazi of China is: Ji Chou(己丑), Gui You(癸酉), Jia Zi(甲子), Xin Wei(辛未). Jia Mu (甲木)is born in the You month(酉月) (the eighth lunar month), where the metal element is strong and the wood element is weak. However, the Ji Chou(己丑) in the e Year Pillar(年柱) and the Xin Wei (辛未) in the Hour Pillar(時柱) contain earth, which generates metal. Additionally, the Gui You (癸酉) in the Month Pillar(月柱) forms a cycle where metal generates water and water generates wood, creating a certain circulation of the five elements. Although Jia Mu(甲木) is in a weak position, it has the support of Yin Xing (印星) and Bi Jie (比肩星), so its foundation is relatively stable.The year 2026 is the Bing Wu year(丙午年), which belongs to the fire element in the five elements. From the perspective of the US Bazi, Bing Huo (丙火)represents Qi Sha (七殺), and Wu (戊)represents Zheng Guan (正官). The simultaneous appearance of Qi Sha(七殺) and Zheng Guan(正官) symbolizes pressure, conflict, and change. In this year, the United States may face greater pressure and challenges in its foreign policies, and there may be volatility and adjustments in its trade policies. For China's Bazi, Bing Huo(丙火) represents Zheng Guan(正官) , and Wu Huo(午火) represents Shi Shen (食神). Shang Guan (正官)and Shi Shen (食神) symbolize innovation, change, and external communication. In this year, China may introduce new measures and ideas in its trade policies to respond to external pressure. From the perspective of the mutual generation and restriction of the five elements, the fire element of the Bing Wu year 2026 forms a stronger mutual generation relationship with the fire and wood elements in the US Bazi. The excessive fire energy may make the United States more aggressive in its trade policies, but at the same time, it may also trigger a series of problems due to excessive impulsiveness, forcing it to make adjustments. For China's Bazi, although fire represents Shang Guan and Shi Shen, it also has a certain mutual generation relationship with its own five elements. In this year, China may take more proactive measures to respond to the trade war and ease pressure through its own wisdom and strategies. Overall, the China-US tariff trade war may experience a relatively intense phase in 2026. However, precisely because both sides are facing different pressures and challenges, it may prompt them to re-examine their trade policies, thereby creating opportunities for a certain degree of easing. Nevertheless, Bazi numerology analysis is only a traditional cultural perspective and is for reference only. The actual trend of the trade war still needs to be comprehensively judged by combining more realistic factors such as politics and economy.

如果把一款課金手遊當成單機speedrun遊戲玩會怎樣?
手機‧電玩
MacauYeah・2025-04-24

很久沒有介紹遊戲了,適逢最近有新的高達手遊推出,筆者親試下,遊戲整體還算不錯。所以打算就來個企畫,試試看用不同的方式去攻略這款遊戲。 以前的手遊玩不下去主要有幾點: 【農】味高,重要資源取得有限,有些需要週期性登入才能取得。登入取得資源,但過程又無聊;不登入又會浪費,多少有點壓力。 課金抽角色+練滿的金錢及時間成本極高,所以錯誤投資角色的成本就更高 所以最近筆者都鮮少有開始新手遊。這次的G世代,也是一款課金手遊,但為免陷入上述的困局當中,筆者就打算以研究Speedrun的角度去切入遊戲。即是不追求完美或者穩定通關的做法,只要本篇的能過關,越快過關越好。除此之外,Speedrun項目一般都會因為有公平性考量,在手遊上會禁止任何課金、什至是抽卡的做法,排除因為錢作怪,而非玩家的技巧。所以筆者也會跟隨這一方面的考量,除首抽可以選取特定的EX高達外,之後一律不會抽卡,即使有免費的抽卡卷或課金額,都不會抽卡。Speedrun也可以設定不同的比賽目標,例如限定從零到第一章結尾,並不一定要直到終章。目標一般會設定為可以重複為主。 這樣的做法可以讓自己免受前述情緒困境之中。 不需要為每日任務、完美過關的免費石而登入。想玩、有空玩時,再玩。 不需要為稀有角色的進一步團積它們的資源,因為它們的資源一般更難最得、更耗時間。 集中於本篇可以取得的機體,以不同的方式實驗不同的戰術效果,取代【農】的策略。 以推進本篇的主線為目標,而非收集角色為目標,也不是以平衝育成角色為目標。即使刪號重來也不心痛。 上圖為遊戲的第一、二、三章節 筆者經過零碎時間,剛通過了元祖本篇的章節,感受還不錯。筆者在開局,主要目標是選擇有【額外行動】、【支援攻擊】的機體為主,其次才考慮【支援反擊】、【支援防禦】的使用。當然這個遊戲推出時間還短,不同的機體取得時間上也有差異,筆者的策略絕對不是普偏的最優解。 上圖為開始攻略第二章所有在主線中取得的機體 如果各位讀者,覺得這個策略可以幫到你保持遊玩的好心情,就一齊來留言分享你的Speedrun策略吧。如果各位讀者想睇到更多關於這遊戲的策略更新,歡迎留言1212,讓筆者知道大家的期待。

Spring Data Jpa 自動化的選擇 - Code First
科技新知
MacauYeah・2025-01-22

Code First vs Database First 在早期SQL資料庫盛行的年代,在設計要使用資料庫儲存資料時,很經常遇到一個策略選擇的問題*Code First* vs *Database First* 這兩個策略的差異可能越來越講不清,筆者也找了一些現時網路上的講法。 Code First: 先從寫程式的角度出發,設計數據模型,再使用工具把你程式碼中的數據模型類(Class),生成一個對應用SQL資料庫的表(Table),自動編做好對應的數據結構(Schema)。這樣你在設計時,以程式設計為主導,方便熟悉程式的人使用。這常見於第一手開發設計,因為資料都是第一次收集和儲存,考慮收集程式的運作最為實際。 Database First: 先從SQL資料庫的儲存、取用資料的方式出發,先用SQL成生Table及Schema,再轉變成為程式碼中的數據模型。這樣的資料庫在日後作分析用途時,比較簡單易懂,方便使用熟悉SQL的人去使用。這也常見於二次開發程式,因為這樣可以確保不會錯誤地破壞原有資料庫。 那麼筆者為何講這兩個差異越來越講不清?那是因為現在的資料庫不能單純地只考慮初次或二次開發問題,而是需要考慮多個系統協調運行的問題。 多系統共享協定 - Database First 因為隨著資料系統發展,有些資料會作為數據源出現或用作共享媒界,如果一定要對設計策略作分類,在多系統協調運作下,這些應該叫使Database First。不論它們是SQL還是NoSQL資料庫,我們的程式碼都要為這個預先定義好的數據結構作出妥協。不論使用工具,還是人為分析,都要把共享的數據結構轉換成自己程式中的數據模型。 即使不是多系統協調運作,有時候因為要移植系統,但同時又要令兩個系統版本相容。新系統也是被逼使用Database First的方式設計。 自動化考量 - Code First 前述我們講到,很多時候我們也是從Database First的方式思考。不過筆者就這個Database First,也弄到滿身傷痕。 首先,拋開工具轉換的誤差,我們人為的把共享數據轉化為數據模型,共享數據有時會有一些先天的缺陷,例如: 資料沒有設計Primay Key (主鍵,唯一鍵)、日期時間的定義不明確等。面對一些意義不明的數據來源,要整合確實很要命。而且二次開發中,不可能100%重用原有的資料庫結構,很多時都會加入新的欄位或更多表格去計數。一旦加入新欄位,在團隊多人開發中,那麼使用唯一的共享開發環境,就變很易有程式碼上的衝突。 若需要多人開發,各人有一個Code First的開發用資料庫,是很必要的。這也可以在系統正式升級前,對比開發中資料庫及舊資料庫的結構,觀看它們之間的差異,評估升級的風險。 也許Code First並不是重點,重點是可以隨時建立一個測試用的資料庫,這才方便合作開發。自動化的地方,不單只限於數據結構,範例資料也該是如此。如果有維繫一個初始範例資料,可以在有需要時自動生成,對於多變的環境一定有很幫助。 現時,筆者基本上都會人為檢視資料庫,人工對照編寫程式中的資料結構(即是人工的Database First),並確保那時程式再次經自動化生成的測試用資料庫,並沒有失真(即是Code First)。至於範例資料,初期筆者也只使用SQL生成,但後期因為資料結構開始複雜,筆者也暫暫使用程式碼生成,雖然工作量會多了,但對於資料庫升級、品牌更換,這是很有效的手段,程式碼升級測試也更順暢,絕比SQL生成更易維護。 Ref - Code First vs Database First https://builtin.com/articles/code-first-vs-database-first-approach

為程所困-是什麼讓你不想寫自動化測試?
科技新知
MacauYeah・2025-01-08

測試場 VS 自動化測試 筆者一直地更新自己過去所編寫的程式,很恐怖的是,那時的自己很少思考過怎樣寫測試Test Case。致使每次做更新時,都膽戰心驚,要手動建立測試場,人肉去測試每個可能有受影響的地方。在那些年的時候,有能力自己搭建測試場,已經是萬幸。但當面對一些要長期維護的程式,測試場的人肉測試並不是一個有效的方法,一來費時間,二來人腦記憶並不可靠。單靠自己去想想那些地方受影響,再測試,某程度是在挑戰人腦的記憶上限。如果是團隊合作,就更麻煩,你以為修改不會影響到其他人,結果卻是翻天覆地。 所以為求長治久安,編寫自動化測試,是有必要的。這些自動化測試,都算是回歸測試,每次程式有任何地方改動,都確保所有自動化測試被通過。理想始終是理想,但實際操作又會遇到怎麼的問題? 以筆者剛更新的程式為例,難以測試主要是當初沒有想過要測試這件事,所以程式結構通常是【連續順序】地執行。想分段測試?除非先重構。 Function中太多自己創建的Object 回顧自己的程式,初期編寫時,總會我手寫我心,每想要創建任何資源,在java中就會使用 new 字眼,或是自行呼叫某些 builder 類來取得資源,這是其中一個令自己無法寫測試的原因。 我們要想想,這些資源,是不是自己Function中所關心的核心。如果這個資源是被直接回傳的,我們要保留,如果它是HttpClient,只是要來獲取其他資源的媒介,我們或許可以利用依賴注入來取得它,即是把 HttpClient 改為經呼叫方傳入。注入的好處時,我們可以在Test中,修改那些資源的行為和結果。更進一步的是,把那些資源改為 interface 的方式存取,那麼在 Test 中就能更任意地控制該資源的行為。 首次重構某些資源成為依賴注入,大部份都會影響呼叫方,很多地方都要重寫。不論使用constructor injection, setter injection, annotation injection 等,上傳呼叫方,或多或少都會要加減改變參數。極致地,我們把構建都交給Program 框架去做,例如Spring Boot中,各種資源,都交給框架去自動配致。當然,這種做法的學習成本高,除錯成本也高。 【注入】其實是想在控作那些資源,在測試中運行得到固定的行為。使用前述的HttpClient例子,當我們業務邏輯是先訪問外部Web API,再根據結果做處理,那麼我們測試時,就會想模擬Web Api的結果。如果要做到自動化測試,最強硬的手段,就修改自己的HttpClient,模疑給出固定結果。 想要做到這種,在傳統的Java中,我們需要透過進一步抽離Interface去做。但這樣做很累,所以筆者通常會用如Mockito的程式庫,去修改HttpClient的行為。有興趣直接看程式碼的讀者,可以去看 github 。 當然,上述的 HttpClient 例子,使用測試場也有可做測試,自己再去模擬那些Web Api的回傳,有些情況下,這樣會更真實,但大家就必需好好定義測試場的行為。因為測試場可能與團隊的其他成員所共用,有機會其他人可能想要更多互動的測試方式,而非固定的結果。但並上非固定結果的測試場,自動化要測試的可控度就減少。

Docker 來源掃瞄 - Docker Image Scan
科技新知
MacauYeah・2024-12-19

當網安要求越來越高時,我們也要留心 docker image 的來源是不是有漏洞問題。 docker hub 本身就已經有一些安全掃瞄報告,以 nginx 的 1.27.3 版本為例, docker hub nginx 1.27.3 , docker hub 已經列出相當多的CVE漏洞。 不過對於不公開的 docker image ,安全描瞄可是要收費的。作為小團隊,可能想先尋求一些簡單的免費方案。如果你想同樣的需求,可能Trivy會幫到你。 Trivy Trivy 是一個用於描瞄軟件版本依賴或設定檔是否引用到一些有漏洞問題的軟件,它也能檢測 docker image 是否有漏洞或錯誤設定的問題。而且更好的是, Trivy 本身亦有 Docker Image 版本,我們就不用煩惱怎樣弄一個 Trivy 的執行環境,只要可以運行 docker ,有網路就可以了。但使用 Docker Image 版的 Trivy 有一個額外要求,就是它要有主機上的 docker.sock 權限。 描瞄的指令如下,其中 docker.sock 就是為了讓 containers 內部的程式可以存取主機的 docker daemon , .cache 則是為了方便暫在下載資源。 上面故意用 nginx 的兩個同版本號不同平台的 docker image,其實就是為了引出一些潛在問題。nginx 預設是使用的debain OS的,在筆者寫文章的當下,已經更新到最近的 image ,但始終有一大部份可能的漏洞。反觀 alpine OS 版本,就找不到這麼多問題。 這是因為 alpine 預設安裝的依賴較少,所以找到的漏洞也少。正所謂,做多錯多,唔做唔錯(大誤)。這其實有好有不好,因為在發生問題時,在 alpine 下可能連基本的除錯工具都沒有。除非大家有完整測試,或者對 alpine 有相當的認識,你才會選擇一個非官方預設的版本。但就以事論事,引用較少的依賴,長久之下的確是不會有那麼多隱患。大家如果有條件,也可以試試 alpine 或其他版本。 前一節我們可以看到,Trivy需要經過 socket 的方式才能存取主機上的 container daemon 操作權。但 podman 作為一個不主張 daemon (daemon less),亦主張不需要 root (rootless),那麼它該怎樣執行? 其實podman也有user層面上的 socket,而且 trivy 也有對應的方式去轉用第三方 socket (有點像使用遠端主機 socket,但官方並未宣佈正式支援遠端的方式。) 具體使用方式,筆者亦已在 steam deck 上測試,使用方式如下。不過因為 steam deck 預設沒有 root,筆者就省略 cache 指令,免得之後要有權限問題要手動清理。 Ref Podman socket activation Trivy: Support for rootless podman

Spring Data 關聯型態 01
科技新知
MacauYeah・2024-07-16

筆者身邊的朋友,首次接觸 ORM 的關聯型態時都會覺得很難,筆者自己也是。但在好好地理順它的設計時,就會覺得其實很簡單。 因為篇輻很長,我們先以Code First的角度,先體驗一下ORM程式讀取的便捷性,以及解決一個常見的序列化問題。 雙向存取 例如一個Parent,有好幾個Child @Entity public class Parent { // ... Parent Primay Key @OneToMany(mappedBy="parent") List children = new ArrayList(); // TODO add remove } @Entity public class Child { // ... Child Primay Key @ManyToOne Parent parent; } 上述的寫法很簡潔,ORM會為你自動加入join column,處理關聯的載入。在讀取Parent時,它的所有Children就可以直接在Java層面讀取,在讀取Child時,它的Parent也隨時取得。也就是,開發人員只要經SQL準備其中一方的資料,另一方並不需要手動準備,它就可以自動按需載入。 RESTFul API 坑-雙向存取 Spring Data在Java層面的雙向存取,已經做到很方便。但經常坑到我們的是Spring Data與RESTFul API的混合應用。當我們嘗試經API回傳我們的Parent Json時,API會很聰明地把關聯的Children也變成Json回傳。但他也會把child中的parent不斷重複變成json,變成無限輪迴。 坊間有兩種不同的解決方案,可以防止無限輪迴。 讓Json可以認得已經序列化的元素。@JsonIdentityInfo 讓Json只可以單向序列化(serialization)。@JsonManagedReference, @JsonBackReference, @JsonIgnore 筆者兩個方向都試過,但首個方法並不通用,至少它不能算是一般常見的無腦Json結構。它需要伺服器、客戶端都懂這如何經IdentityInfo認得重複出現的元素。 而單向序列化,是筆者現時的通用解。在設計RESTFul READ API時,筆者就會決定到底是Parent自動回傳Child,還是Child自動回傳Parent。決策的考慮因素,主要在於是否可以簡化Client的API調用次數。通常從Parent出發,自動回傳Child,可以節省API調用。但如果是選項性的結果(List of Value),就倒過來。有時候,遇著API需要雙向設計,就只好自己設計DTO資料傳輸對象 (Data transfer object, DTO)。 例如Parent API,就原封不動回傳原本的元素 @Entity public class Parent{ // ... Parent Primay Key @OneToMany(mappedBy="parent") List children = new ArrayList(); } @Entity public class Child { // ... Child Primay Key @ManyToOne @JsonIgnore Parent parent; } Child API,就反過來引用。 public class ParentDTO { // ... Parent Other fields except children } public class ChildDTO { ParentDTO parent; // ... Child Other fields } 這種DTO,看起來很麻煩。但其實Spring有提供一個簡便的複制DTO功能,它可以把自動複制兩個class中有同一名稱、同一型別的欄位到另一個class上,不需要逐個欄位明文寫出來。 BeanUtils.copy(child, childDTO); BeanUtils.copy(parent, parentDTO); childDTO.setParent(parentDTO) // 因為child、childDTO中的parent欄位型別不同,BeanUtils.copy會自動忽略,其他欄位就會自動複制。 註: 其實古早的網頁系統設計,DTO的概念一直存取。只是現在RESTFul API的流行,很多框架已經提向便捷的Json轉換。若然平時只需Json單向存取,筆者還是省略DTO的建立。

星穹鐡道:抽角色、組隊簡介
手機‧電玩
MacauYeah・2024-03-13

因為抽卡機率問題,坊間很多建議都基於課金的前題,不是所以有人都可以重複。但這亦不是筆者體驗這遊戲的主要方向,所以筆者集中分享一些主線必定會取得的角色,或盡量以4星的方式組隊。但在說明組隊之前,先講一講基本系統。讓大家知道那些地方有課金機率成份。 基本出戰 本遊戲是團隊戰,最多同時4名角色上場,同一角色不會出現兩次。影響出戰強度的,除了角色本身屬性、技能,還有裝備要求。同一角色可以裝備一款【光錐】,六款【遺器】,達到不同的Buff。 每個角色獨有自己的【命途】技能養成,光錐及遺器則可以交換使用。 在攻略副本時,可以借好友的角色,但依然會限制同一角色不能重疊。而好友的光錐及遺器不能交換。 卡池 在遊戲中有角色【躍遷】,就是抽角色的地方。除主角外,其餘角色都可以經【躍遷】以機率的方式抽取。若抽到重複角色,會轉化為【星魂】,用作提升角色的特殊技能。主角的星魂以遊戲進度獎勵發佈,其他角色暫時都以抽取為主要來源。特殊角色,如【黑塔】有特別支線任務可以取得。 光錐同時在【躍遷】中取得。 遺器則是副本敵人隨機掉落,沒法經抽選擇。而角色命途技能、光錐、遺器養成部份,所需資源都可在遊戲主線或副本取得。所以有限抽取的,就是角色和光錐。 希有度 角色稀有度最低為4星,最高為5星,道具則為有3-5星。 卡池沒有4星角色保底,只有4星結果保底,每十連抽可以得到4星角色或道具。 組隊目標 - 4星非洲隊 主線故事中,一定可以獲得 主角(物理,攻)或(第一章最後獲得,火,盾) 三月七(冰,盾) 艾絲妲(火,輔助Buff) 丹恆(風,單體攻擊) 娜塔莎(第一章中後期獲得,物理,奶) 黑塔(支線模擬宇宙獲得,冰,群體攻擊) 艾絲妲原本筆者也以為是抽角隨機獲得的,但以BiliBili Wiki引證,其實是抽角教學中必定獲得的角色,所以道理上各位也一定會有。但有些版本有活動送角色,但似乎地區不一樣有不一致情況,故筆者沒有列出。 三月七 雖然在取得奶之前,主角(物理)、三月七、丹恒、艾絲妲,就是沒有選擇之下的選擇。但其實三月七的盾有隱藏技能,會增加受擊機率,這是變相指定角色吸仇恨換賺能量的做法。她也是在缺奶時最重要假回血手段,所以是一個有長期培養的角色,用來湊雙冰、雙盾或一奶一盾也不錯。 艾絲妲 筆者一直忽略了的一位重要角色,因為她施放攻擊就有機會蓄能,蓄能全體加攻。終結技有全體加速效能,普偏的裝備方向是為她加速加能量,讓她可以再為其他人加速加攻。也因為第一章後,與主角可以組成雙火隊,主角可以全隊加盾,艾絲妲加速,打火弱點敵人的話,一定不虧。 娜塔莎 奶,就不用說明了。另外,她也作雙物理的組成。也是筆者作為平常無腦開荒的組成,主角(火,盾) 加 三月七 加 娜塔莎 加 弱點輸出。效率可能不高,但勝在無腦。 無腦隊最大的問題是弱點擊破率很低,因為盾和奶都需要經常回復,少了輸出的機會成本。

Spring Boot - Maven Cheat sheet
科技新知
MacauYeah・2024-01-12

基礎 刪除所有結果,全部重新編譯 mvn clean compile 跑起用Spring boot寫的main class,運行Spring boot context。 mvn spring-boot:run # or mvn clean compile spring-boot:run 執行測試用例,預設只會測試test資料夾下以某些命名規則的class(例如class名以Tests或Test結尾的class,其他命名規則筆者未有能力一一驗證) mvn test # or mvn clean compile test 多Profile、多組件、多測試 使用-P指定編譯時的選用pom.xml中的project.profiles.profile參數。也可以用此來傳遞到spring profile,使得編譯後的spring war預設選擇特定profile。 mvn clean compile -PmvnProfile # or mvn clean compile spring-boot:run -PmvnProfile 使用-pl限定mvn指令只對某個子組件生效,但有時候子組件之間也有引用關係,所以需要再額外加上-am參數(--also-make) mvn clean compile spring-boot:run -pl SUBMODULE_NAME -am 使用-Dtest=限定只執行某個class的測試用例,或單個測試函數。(可以無視class名的命名規則) mvn test -Dtest=TEST_CLASS_NAME # or mvn test -Dtest=TEST_CLASS_NAME#TES_METHOD_NAME 若屬於多組件情況下,其他子模組找不到同樣名稱的測試,會測試失敗。需要再加上-Dsurefire.failIfNoSpecifiedTests=false mvn test -pl SUBMODULE_NAME -am -Dtest=TEST_CLASS_NAME -Dsurefire.failIfNoSpecifiedTests=false # or mvn test -pl SUBMODULE_NAME -am -Dtest=TEST_CLASS_NAME#TES_METHOD_NAME -Dsurefire.failIfNoSpecifiedTests=false 打包 在本機電腦中,把java變成jar或者war。通常用於自行發佈的環境中。 mvn package 有時特定Profile沒法成功執行測試用例,或者你認為有些測試問題不影響使用,需要跳過package中的test。 mvn package -Dmaven.test.skip=true # won't compile test folder mvn package -DskipTests=true # compile, but won't run 例外情況 強行把一個第三方jar,種到本機電腦中的.m2/repository # copy from https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html mvn install:install-file -Dfile= -DgroupId= -DartifactId= -Dversio