搜尋

搜尋結果

一齣好戲。舞台劇《南海十三郎》。教我認識江譽鏐傳奇一生
文化創意
蘇蘇・2016-07-09

蘇蘇皓愛舞台劇,不過就很少看粵劇,所以對這方面認知很淺,只知道他們的戲服非常細緻和漂亮。粵劇有很多名著,要數著名的粵劇作家,唐滌生一定榜上有名,少不了的當然還有他的恩師,人稱南海十三郎的江譽鏐。 一齣由香港著名導演高志森監製的;香港著名劇作家杜國威撰寫的;澳門著名導演黃樹輝執導的;金馬影帝謝君豪主演的;香港著名粵劇演員新劍郎、香港著名舞台劇演員潘燦良和焦媛、與一眾香港資深舞台劇演員聯合演出的、首演至今已經二十多年公演超過150場的經典舞台劇《南海十三郎》,早前曾於北京、上海、新加坡和深圳載譽巡迴演出。 近年以專欄作家身份重新走入劇場的蘇蘇,完全沒有朋友相信我之前一次也沒看過《南海十三郎》,皆因最近兩次在香港新光劇院和西九大戲棚的公演,蘇蘇剛巧都出外公幹去了,不過我看過也是由謝君豪主演的電影版,印象十分深刻,所以這次的巡迴演出,蘇蘇一定要抽時間去見識一趟,最後謝謝香港春天實驗劇團高志森導演邀請,讓蘇蘇有機會在深圳龍崗文化中心大劇院欣賞這齣神劇。 同行的還有澳門及廣州的傳媒好友 期間跟高志森導演、謝君豪和焦媛做了一個簡短的訪問。 舞台劇《南海十三郎》主演的除了有演技實力派謝君豪、‪潘燦良、‪新劍郎和焦媛外,還有一眾香港實力派演員擔綱演出,還記得開場時觀眾反應還未熱身,但當謝君豪一出場觀眾情緒立即180度轉變,十分高漲,歡呼聲掌聲如雷,反差極大,真是台上瘋狂、台下痴狂。 所謂一劇之本,杜國威老師這部劇本真是拍案叫絕,情節緊湊,一環緊扣一環,不其然讓我們觀眾一直緊緊的追看下去而不自知,這個3個多小時的演出,真的好像沒有過了那麼久。上半部基本採用了輕鬆搞笑的手法來表達江的上半生,讓觀眾不時忍俊不禁,這些笑點,真是讓這劇生色不少。下半部劇情更豐富,對於這一位奇才的起跌人生,看完之後心感唏噓,心酸沉重,再一次提醒了蘇蘇的人生意義。 讓我說詳細一點吧 注意 含少量劇透 根據粵劇著名作家江譽鏐生平改編的舞台劇《南海十三郎》,是以描寫他那戲劇般的起跌傳奇人生。 究竟如何起跌 看完之後你會更強烈的覺得,人生如戲 故事從他出生名門世家江太史俯中開始。 那江太史是誰 他就是影響粵菜近半個世紀,名菜 lt;太史蛇羹gt; 的始作俑者江孔殷。 十三郎就是他的十三公子,他天資聰敏、文才出眾、皓愛粵劇,被著名粵劇老倌薜覺先新劍郎飾發掘踏足粵劇界,成為二、三十年代粵劇界炙手可熱的編劇及作曲家。 他雖然心高氣傲,但他重視親情、友情和愛情,一生中只愛上一個不愛他的女子。 他識英雄,亦重英雄,與唐滌生潘燦良飾亦師亦友互相扶持的關係最讓蘇蘇為之感動。他為考驗唐滌生,要他喝下自己吐了痰沫的茶,唐滌生遲疑半秒拿起就要喝之際,被十三朗阻止了,要他另外去倒杯新茶來,二人君子莫逆之交,就憑這一杯茶。 梅仙焦媛飾是當年著名的交際花,十三郎不忍看見自己的世姪女墮入風塵,所以拉她一把,之後成為著名的電影明星。 但到了晚年,他的境況堪虞,潦倒落泊,狀似瘋癲,最後更露宿及暴斃於街頭,堪稱一代奇才的江譽鏐,就此撒手人寰。 劇中有兩幕讓蘇蘇印象深刻的,就是傳聞他能同一時間編寫三個不同類型的劇本,他又唱又做加編口白,有三個抄寫員在旁輪流筆錄。但他們抄的速度遠遠不及十三郎想戲的速度,最終被他以「二十七流」罵跑。。。二十七流,蘇蘇想了一會才明白XDXD 一代奇材的離世,伴隨著他的就是畫作lt;雪山白鳳凰gt;,寓意創作者縱使身處在艱難的時代中,也要對創作保有豐富shy;的想像力與創造力,並且堅持而不忘初心。 看完之後,腦內一直盤旋以他的五齣粵劇作品串成的四句詩: 「心聲淚影女兒香,燕歸何處覓殘塘。紅綃夜盜寒江雪,痴人正是十三郎。」 謝君豪的演技已經是不容置疑了,他一舉手一投足演活了這位一代奇才、粵劇名編劇江譽鏐傳奇的一生,他賦予了這角色獨特的魅力。 現實中的謝君豪風趣幽默,親切有風度,當穿上長衫的他,帶著江譽鏐的標誌眼鏡,無疑這位有著傳奇故事的南海十三郎這角色他演得已經融為一體了,現今可以捨他其誰呢? 問豪哥在北京和上海演出時,觀眾有沒有因為語言界限而令到反應沒有那麼熱烈呢 他表示,其實舞台表演藝術是不會受語言限制的,一齣舞台劇只要能讓觀眾歡樂,啟發思考,就可以打破地域和語言界限,讓觀眾投入,原來外省的觀眾覺得廣東話很悅耳,很有韻味,讓他對廣東話有另一番體會。 他還表示可以遇上一個這麼好的劇本和這一班合作伙伴是他的幸運。 確實舞台劇是一個團隊工作,一個成功的舞台劇當然不能依靠一位演員,導演、其他演員和幕後工作人員也是非常重要,真是一個也不能少,特別有一些演員同劇擔任多個角色,每一個都非常稱職,作為普通觀眾可能未能發現有演員一人分飾多角,只是因為蘇蘇跟他們認識才能發現固中奧妙。 人生就如夢一場,深圳站雖然已經落幕了,不過錯過了的朋友不用失望,因為廣州巡迴演出將要來臨了。 2016年8月57日,舞台劇《南海十三郎》將登陸廣州演藝中心大劇院連演三場。   演出時間: 2016年8月5日(週五)19:30 2016年8月6日(週六)19:30 2016年8月7日(周日)14:30 演出地點:廣東演藝中心大劇院(廣州大道中1229號) 演出票價人民幣:$180$280$380$480$680

澳門永利酒店 Mizumi 泓日本料理 ~ 探澳門頂級日式美饌
澳城餐飲
蘇蘇・2016-03-01

早前人在台灣時,澳門永利酒店lt;泓gt;日本料理舉行了一個傳媒盛宴,餐廳邀請了三位來自日本的米芝蓮大師指導餐廳大廚及各廚師更有水準的食物製作技巧,分別是壽司大師嶋宮勤(米芝蓮二星)、天婦羅大師元吉和仁(米芝蓮一星)以及鐵板燒大師吉田純一(米芝蓮一星)。雖然當天蘇蘇未能出席,無緣跟三位大師見面,不過貼心的酒店公關跟蘇蘇另約日子,讓蘇蘇也有機會一嚐三位大師留下來的手藝。 華麗及精緻優雅的門面和裝潢。 公關說門口一座由美國雕塑家赫拉多bull;哈塞 Gerardo Hacer 設計的黃色鋼材雕塑 Dogami。赫拉多以日本傳統摺紙工藝為創作靈感,用一塊完整的鋼鐵摺疊成動物摺紙造型,其作品深受藝術界的認可與喜愛。蘇蘇在十分接近的距離細心的欣賞,手工真的十分細緻,漂亮極了。 lt;泓gt;不只在食物上盡顯百年傳承精髓,更在設計上融入日本傳統工藝元素。重新裝潢的lt;泓gt;以日本標誌性色彩紅白兩色為主調,並用上古代日本女士的和服腰帶作為餐廳的重要設計元素。餐廳亦選用了印有和服腰帶圖案的地毯及一系列嵌有金銀絲線的古董和服腰帶作為掛飾,每走一步都感覺到高貴典雅的氣質,當然那高貴典雅的氣質是指餐廳,示是我自己XD 而最傳統的和食文化,廚師除了於壽司吧台、天婦羅吧台及鐵板燒吧台為客人提供親切且互動的用餐體驗外,所謂不時不食,餐廳還會採用當天最新鮮時令食材製作精選菜式。主廚對食材的來源、新鮮以及運輸時間均需要掌握精準,餐廳其中新鮮的食材包括來自北海道的海膽,青森縣的金鎗魚以及沖繩的石垣牛。 蘇蘇先來到壽司吧,看見餐廳資深壽司主廚 Hideki Fujikawa 藤川英樹先生,他跟同事正在研究什麼呢 蘇蘇十分好奇,便走過去看看,原來他們在檢查當天最新鮮的食材,研究一下預備什麼料理給當天已訂位的客人品嚐,單是看見新鮮的各款刺身材料,蘇蘇已經暗地裡在流口水了。 體貼的服務員引領蘇蘇來到壽司吧已經預備好的座位上。 大廚還親自來為蘇蘇製作刺身及壽司,他還親手為我即場調製新鮮的日本芥辣,實在太棒了,新鮮的日本芥辣真的比用芥辣粉調製出來的有太大差別了。 先來餐前小吃,自家製日本豆腐。 日本的豆腐一直很受食客喜愛,皆因豆香濃郁,口感軟滑外,吃過之後還有一股豆香在口中盪漾。 大廚問蘇蘇有沒有什麼特別想吃,我說就由他來推薦,其實這個選擇是最聰明的,因為廚師才會知道當天最時令最新鮮是那些食材,在高級的日本料理餐廳,大廚一定會選最新鮮的給客人的。 你們看到這裡可能會有個問題,就是我們如何溝通 大廚懂廣東話或普通話嗎 非也,只是餐廳有翻譯而已。 大廚無論對食材或做法均極為講究,他前後共預備了多款刺身如拖羅、北寄貝等,吃刺身和壽司要有時限的,當食物送上了在你面前的碟子上時,你要盡快將它們送進口中,這樣才有最好的口感。 吃過刺身後,送來了日本漬蘿蔔讓蘇蘇清新一下口腔,為之後吃壽司前作個準備。 忍不住拍下大廚用心的樣子。 lt;泓gt;的壽司飯由日本觀音溫泉水處理,採用有機 TSUYAHIME 米烹煮成醋飯,再以「三手握」手法握製,以免手心溫度影響飯的溫度。先送來的是金鎗魚腩壽司,大廚把金鎗魚細緻地切成薄,仔細切除其筋,再疊回在一起再放在壽司飯上,這樣吃起來口感更細膩更甘香,入口即化。日本海膽是蘇蘇的至愛,這裡的海膽壽司更是別出心裁,嚴選北海道最合時令的馬糞海膽,海膽及飯以 31 的創新比例搭配,濃郁的鮮味在口腔中縈繞不散,很好吃啊 牡丹蝦去除蝦頭及外殼之後,將蝦籽放在牡丹蝦身上再配壽司飯,蝦肉十分鮮甜。再將蝦頭酥炸,香脆可口。 毛蟹鉗包住飯,再加上鮮味的蟹黃,超好吃啊 嚐過壽司吧後,我們要轉枱了,因為下一部份我們去吃天婦羅 吃天婦羅可選擇搭配日本青檸、沖繩雪鹽、自家製綠茶鹽,或以燒蝦頭熬制的蘿蔔茸醬汁,均能讓天婦羅的清爽口感發揮得淋灕盡致。 很想說一下,中間有小匙的紅白小杯子就是雪鹽,大廚說口感比一般用的喜瑪拉雅山岩鹽更細膩,而且雪鹽的鹹度比岩鹽更適合東方人口味。 資深天婦羅大廚 Kazuya Shimomura 下村和也。 海鮮天婦羅 當中有帶子、蝦、露荀、新鮮百合及鮑魚。鮑魚是這次的天婦羅主菜,選用從日本直入最時令的新鮮蝦夷鮑,以精準的火候將鮑魚炸至剛熟,配上以甘甜的鮑魚肝調成的醬汁,保留了鮑魚的原汁鮮味,一直備受食客追捧的。 紫蘇海膽天婦羅 仍然有海膽,夫復何求呢 選用愛知縣的紫蘇葉,創新地以單面炸法處理,再鋪上北海道馬糞海膽,鬆化薄脆的天婦羅與柔滑鮮甜的海膽配合得天衣無缝,口感獨特非常,又是蘇蘇最愛吃的海膽啊 超開心呢 O 吃過天婦羅之後,公關再請蘇蘇轉移玉步,我們再去吃鐵板燒 首先是隆重介紹。日本八重山和牛醬汁 這是餐廳獨門秘方的鐵板醬,材料有大蒜、醋,以及多種香料,需要醃製3個月左右,沾了這個醬,口感沒有那麼膩。 海膽炒蛋 可伴著多士來吃,蛋味濃郁,海膽味鮮,兩者味道非常配合。 我們還要吃什麼 當然也是他們的招牌 日本八重山和牛鐵板燒啦 資深鐵板大廚黃師傅 來自於沖繩八重山天然牧場飼養至 29 個月的石垣和牛,其肉質鮮嫩,脂肪分佈均勻,且入口帶 有水果清香。大廚先以低溫慢煮方式令其脂肪融化,再在鐵板上快速燒香,入口瞬間和牛的脂香在口中融化,配以沖繩海鹽及現磨芥末,最能提升和牛的鮮味,真是回味無窮。 很想說除了和牛有水準外,配搭的清酒蒸煮日本溫室蕃茄也是一絕,以清酒用68度蒸煮一個半小時,口感細膩又香甜,超好吃呢 蕨餅配黃豆粉及沖繩黑糖雪糕伴日本靜岡蜜瓜 自家製黑糖蕨餅口感煙靭軟滑,並灑上黃豆粉平衡味道,配搭鮮製沖繩黑糖雪 糕,為日式盛宴畫上完美句號。另外還可一嚐由日本唯一溫室栽培的靜岡縣蜜瓜,糖度達 1620度以上,味道清甜無比,想念。 最後還有餐廳送來感謝客人的甜點。 Mizumi 泓地址︰澳門宋玉生廣場皇朝外港填海區仙德麗街永利澳門酒店地面層電話︰853 89863668營業時間︰星期一至日17301130;星期二休息

你的父母在變老 - 在時間流逝前,與父母一起做的十件事
文化創意
陳康妮・2026-04-15

你的父母在變老 在時間流逝前,與父母一起做的十件事 1. 錄下他們講故事的聲音 有一天,他們的聲音可能會永遠消失。這些故事記錄了他們的生活,也讓你留住那些難以忘懷的回憶。 2. 和他們一起散步 散步讓人自然地談話,隨著他們的節奏,觀察他們的動作和呼吸,是無聲的愛。這段回憶可以反覆溫習。 3. 一起吃飯,不看手機 食物是連結的橋樑。邀請他們教你一道菜,讓他們不受打擾地分享人生故事,這會創造溫暖的氛圍。 4. 了解家族歷史 問祖父母的生活、工作與愛情,記下那些艱難的歲月。他們的故事成為你根基的一部分,提供力量和穩定感。 5. 在平常時刻拍照 不必等待節日,日常生活中的瞬間更顯珍貴。自然的微笑和普通的景象營造出後來最值得珍藏的回憶。 6. 幫助他們做實際的事 無論是解決賬單問題還是手機設置,這些小幫助減少他們的壓力。用心對待每一件小事,就是愛的具體表現。 7. 給他們一個特別的日子 計劃一次他們喜愛的簡單郊遊,讓他們感受到被照顧的幸福,這會帶來美好的時光與心靈的平靜。 8. 問一直回避的問題 探索他們的遺憾和想法,這些對話可能艱難,但能夠避免未來的遺憾,建立更深的理解。 9. 具體表達對他們的欣賞 不要含糊,明確指出他們的犧牲與貢獻,這不僅能治癒他們心中的懷疑,也能提升你們之間的情感。 10. 每週保持聯絡 每週一次的電話勝過每年一次的深談,定期的問候增強彼此的親近感,即使是簡單的分享,也能保持愛的存在。 這些點滴珍貴的時光,讓你能在父母變老的過程中,珍惜每一刻,共同編織美好回憶。

第三十五屆澳門藝術節。澳門炫目劇團舞台劇<今夜無人能睡>
文化創意
蘇蘇・2025-05-17

本應是最溫暖的避風港,卻成為了最沉重的牢籠;本應是相依相扶的家人,卻造成了最致命的傷害。在病態的關係中,有沒有哪種愛能帶來救贖? 澳門舞台劇《今夜無人能睡》以病態陰鬱的黑色幽默,直擊社會貧困家庭的困境,揭開長期照顧者與被照顧者無處傾訴的悲歌。 照片來源 澳門藝術節FB 演出陣容包括香港舞台劇獎最佳女主角楊螢映和最佳男配角蔡澤民,以及多位澳門演員,以寫實細膩的演繹探究人性的脆弱,是否能釜底抽薪尋找救贖的可能。 觀眾入座時,姐姐及婆婆已在演區內活動。姐姐因為交通意外,雙腿失去了活動能力,她戴着耳機看書,沉醉在自我世界中;失智婆婆則用助行器在台上走來走去,一會兒去洗手間,一會兒去倒水,一會兒在床上輾轉反側,妹妹在自己的房間沉迷著自己的事情,這就是她們的生活日常,活在同一空間但又沉溺在各自的世界中,互不干涉卻又相互依賴。觀眾一邊入場就座,一邊步進她們的日常之中。 剛開始時,觀眾會對她們正在做甚麼大感興趣,但當時間久了,就會慢慢的自僱看著自己的電話。這有如當下社會令人唏噓的困境,除非身在其中,又或者被報上新聞或社交平台,才會引起人們的關注。這不正是我們面對各類社會問題的狀態嗎? 照片來源 澳門藝術節FB 總體而言,導演沒有以悲天憫人的形式呈現三婆孫的不幸,反而以略帶自嘲的荒誕引發思考。最後姐姐道出被照顧者與照顧者的永恆矛盾:既唏噓又依賴。 《今夜無人能睡》作為這屆藝術節的澳門代表,不僅是澳門藝術成就的展示,更是澳門文化主體性的宣言,透過戲劇讓世界看見這座小城的創造力與文化的深度,促進戲劇生態的可持續成長。

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

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

第九維度的玄學根據
宗教玄學
熊神進・2025-03-10

近期,一位學生邀請我參加一個冥想群組,討論一個引人注目的話題:ldquo;地球將在2025年4月15日1212分開始進入第九維度,持續879秒。rdquo;這一主題的發起者據說是一位冥想老師,我本人與這位老師並不相識。 以下是我與學生討論的內容摘錄: ldquo;ldquo;The Earth will begin to enter the ninth dimension on April 15 at 1212, lasting for 879 seconds. This phenomenon is due to gamma rays emitted from the galactic center resonating with Earth's magnetic field, creating a dimensional gateway at 9898Hz. During this period, you will experience the following phenomena First, there will be a global aurora displaying an unprecedented purplegold hue. Second, approximately 33% of people will feel intense vibrations in their pineal glands, while another 44% will briefly enter a deep meditative state. Quantum ripples will emerge on the Earth's surface, reactivating some ancient energy fields. Notably, at energy hotspots such as Machu Picchu and the Great Pyramid, brief holographic projections will appear, showcasing the original forms of these structures. This 879second dimensional transition will not cause destruction to the material world; rather, it will represent a collective upgrade of global consciousness. 。rdquo; 學生詢問我對ldquo;地球進入第九維度rdquo;這一說法的看法,是否符合玄學原則。值得一提的是,我自少便修習七脈輪,17年前已自成一派,對於其他學說並不混淆。今天所表述的純屬個人觀點,並不代表任何流派。 首先,讓我們討論所謂的ldquo;4月15日1212開始,地球進入第九維度,持續879秒rdquo;。在我的修行體系中,並不存在具體的ldquo;維度轉換rdquo;概念,更何況是如此精確的時間標記。這可以被視為一種ldquo;靈性預測rdquo;。在我的冥想中,地球的運動與天文事件存在一定的可預測規律,但維度的變化在物理學中並沒有實質依據,尤其是在弦理論中,額外維度屬於微觀範疇,無法被宏觀的地球所經歷。 關於銀河中心發出的gamma rays與地球磁場共振形成9898Hz維道通道的說法,若我的學生曾經學習過宇宙磁場的相關知識,以下內容可能會有所幫助: Gamma rays的能量通常極高,頻率遠超過9898Hz,通常在GeV或TeV級別。 Gamma rays作為高能光子,並不帶電,其對地球磁場的影響微乎其微。磁場主要影響帶電粒子,如太陽風中的質子和電子,而gamma rays幾乎不受磁場影響。 他提到的現象中,包括全球範圍的紫金色極光,這種極光是由太陽風粒子與地球磁場相互作用產生的,通常顯示的顏色有紅色、綠色和紫色,而紫金色卻不常見。 此外,他提到約33%的人會感受到松果體的震動,44%的人會進入深層冥想狀態。對此,我持有異議。松果體在生物學上主要調節褪黑激素,影響睡眠週期,至今尚無數據支持其在維度變化中產生物理震動的說法。而冥想本質上是一種主觀體驗,受到心理暗示或群體效應的影響。所謂的33%和44%也缺乏數據支持。 在與學生的討論中,我提出以下幾點: 物理學中的ldquo;維度rdquo;和ldquo;量子rdquo;等概念有嚴格的定義,這些定義與靈性冥想無關。 玄學理論應建立在一定的知識基礎上,無法隨意下結論,否則難以站穩腳跟。 對於冥想的解釋往往較為平淡,而ldquo;奇蹟rdquo;論則常依賴誇張的表述來吸引注意力。 我在講課中常常說,冥想必須天人合一,天就是宇宙觀,如果導師其本質已走火入魔,他她教導出來的學生,難免是神神化化。雖然ldquo;第九維度rdquo;話題激發了許多討論,但我們應以批判和理性的態度來看待這些聲稱。

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 httpsbuiltin.comarticlescodefirstvsdatabasefirstapproach

為程所困-是什麼讓你不想寫自動化測試?
科技新知
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 @OneToManymappedBy=quot;parentquot; 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 @OneToManymappedBy=quot;parentquot; 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.copychild, childDTO; BeanUtils.copyparent, parentDTO; childDTO.setParentparentDTO 因為child、childDTO中的parent欄位型別不同,BeanUtils.copy會自動忽略,其他欄位就會自動複制。 註 其實古早的網頁系統設計,DTO的概念一直存取。只是現在RESTFul API的流行,很多框架已經提向便捷的Json轉換。若然平時只需Json單向存取,筆者還是省略DTO的建立。

永利皇宮「Illuminarium 幻影空間」獨家呈獻《交響綺旅》
生活在我城
Cheers!・2024-04-18

今天小編為大家介紹一個文青打卡好去處!永利皇宮的「Illuminarium 幻影空間」最近推出了一場名為《交響綺旅》的獨家體驗,這個非凡的作品是由國際知名的Radical Media 製作公司傾心打造,融合了現代數字藝術手法和世界經典交響樂。於 2024 年 4 月 9 日(上週二)全新登場。 《交響綺旅》:沉浸式音樂體驗 《交響綺旅》引領觀眾將進入一個前所未有的沉浸式感官盛宴,透過現代數字藝術手法和精心設計的光影效果,探索由國際知名指揮家Geoffrey Pope 和洛杉磯愛樂樂團演奏的11首曠世古典音樂作品。每首曲目都將呈現獨一無二的光影樂舞,讓觀眾感受音樂的深刻共鳴和讚嘆。 技術創新:視覺與音效完美結合 《交響綺旅》採用先進的視覺技術,結合電影感鏡頭、激光成像和2D3D動畫效果,為每首曲目打造獨特的視覺世界。全球領先音響系統HOLOPLOT打造震撼音頻,加強觀眾的感官刺激,讓大家更真實地「感受」音樂。 入場資訊:時間安排 「Illuminarium 幻影空間」每週二至週日下午100至晚上900開放。《遨遊寰宇》、《荒野奇遇》和《交響綺旅》三大主題各有不同入場時間和票價,觀眾可享優惠票價和套票。 門票價錢: 《交響綺旅》入場門票:澳門幣228元 《遨遊寰宇》和《荒野奇遇》入場門票:澳門幣288元 優惠票價(澳門學生證持有者、65歲或以上長者、4至12歲兒童和「永利禮享」會員):澳門幣228元。 3歲及以下兒童免費入場 PS:所有門票可於永利官方售票網站www.ticketing.wynnresortsmacau.com或售票處購買。

金沙旅享與米芝蓮入選餐廳“妙·泰”合作 首度呈獻“四手聯乘”泰式美食體驗!
生活在我城
Lifemagfoodie・2024-04-17

上周,金沙旅享獻上了一場極具特色的泰式美食盛宴!澳門倫敦人reg;米芝蓮入選餐廳妙middot;泰與曼谷高級餐廳Khaan的主廚攜手,於4月11至13日為一眾食客呈現「金宴bull;一席一傳奇」系列中的泰式美食奇蹟。大廚Nongnuch lsquo;Nuchrsquo; Saeeiw與Sujira lsquo;Aomrsquo; Pongmorn帶來了九道菜的創意盛宴。 ldquo;四手聯乘rdquo;泰式美食體驗 日期:2024年4月11日至13日地點:澳門倫敦人1樓妙middot;泰Nuch主廚和Aom主廚首次聯手,碰撞出奇妙的靈感火花,為這場舌尖盛宴增色不少。兩位才華橫溢的廚壇新星同樣曾任職曼谷米芝蓮星級餐廳,亦有相似的烹飪理念,鍾情以傳統泰式菜餚進行創意演繹,帶領食客展開精心打造、令人回味無窮的正宗泰式風味之旅。在今次獨家四手盛宴上,充滿活力的主廚雙人組合輪流奉上自己的招牌菜,盡顯精湛廚藝與靈感巧思!精選菜式:檳榔葉龍蝦 龍蝦肉色澤鮮亮,被翠綠檳榔葉包裹,一口下去,龍蝦的鮮甜與檳榔葉清香交織,彷彿置身熱帶海島,享受大自然馨香,味道不算濃烈,但絕對是味蕾和嗅覺的雙重享受!香蕉葉包裹的稻蟹糯米卷 稻蟹和糯米,好有創意!打開香蕉葉,淡雅的香氣撲鼻而來,讓人立刻食指大動。稻蟹的鮮甜與糯米的綿密完美結合,整個味道層次豐富。香脆日本甘鯛魚柳配幼嫩山竹果魚柳超級新鮮,令人垂涎,口感鮮嫩多汁,搭配上山竹果的酸甜,十分美味!星級總廚介紹:ldquo;妙middot;泰rdquo;高級總廚Nongnuch 'Nuch' Saeeiw,20年烹飪經驗,曾任多家米芝蓮星級餐廳,專注泰國傳統美食,用上等食材和獨特手法,呈現現代泰式風味!創造出來的每一啖美食,都是對泰式烹飪藝術的深刻呈現。 泰國新星主廚Sujira lsquo;Aomrsquo; Pongmorn,擅長將家族烹飪熱情和對傳統泰式食譜的熟練掌握融入菜餚中,是泰國第一位米芝蓮指南年輕主廚。 地點:倫敦人1樓妙middot;泰價錢︰每位澳門幣1,288(招牌嚐味菜單)➡️「金沙會紅寶I會員」尊享9折優惠電話預訂︰853 8118 8822

小兒與成人季節性咳嗽活動完滿成功!義工嘉許禮向無私奉獻的澳門斷捨離市民義工隊致敬
文化創意
陳康妮・2024-02-01

小兒與成人季節性咳嗽活動完滿成功!義工嘉許禮向無私奉獻的澳門斷捨離市民義工隊致敬 澳門,2024年1月24日-今晚,小兒與成人季節性咳嗽活動在澳門圓滿結束,並向澳門斷捨離市民義工隊表示特別的感謝和嘉許。這次活動的成功,要歸功於許國馳醫生的專業分享和澳門斷捨離市民義工隊過去兩年來的無私付出。 在活動中,許國馳醫生向與會者分享了關於小兒與成人季節性咳嗽的專業知識和實用建議。他的分享讓與會者更深入地了解了這種常見疾病的症狀、預防措施和治療方法。許國馳醫生的專業知識使得活動充滿了價值和意義。 同時,我們要向澳門斷捨離市民義工隊表示衷心的感謝。過去兩年來,這個義工隊無私地付出了自己的時間和精力,每週三花上一小時陪伴我們度過了二年的春夏秋冬。他們見證了共享二手物品給澳門市民的美好時光。他們的付出和努力使得活動得以順利進行,並且取得了非常可喜的成果。 這次活動中,我們不僅分享了專業知識,還展示了義工精神的力量。澳門斷捨離市民義工隊的成員們展現出了無私奉獻的態度和堅持不懈的精神。他們的付出讓我們深深感受到一份愛從天而來,比山高比海深。 最後,我們要再次向許國馳醫生和澳門斷捨離市民義工隊表示衷心的感謝。他們的參與和支持使得這次活動取得了巨大的成功。我們相信,這樣的活動將為澳門市民帶來更多的福祉和幸福。 關於小兒與成人季節性咳嗽活動: 小兒與成人季節性咳嗽活動是一個旨在提高公眾對於季節性咳嗽的認識和理解的活動。我們通過專業醫生的分享和義工的參與,致力於為澳門市民提供健康的生活方式和醫療資訊。

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

基礎 刪除所有結果,全部重新編譯 mvn clean compile 跑起用Spring boot寫的main class,運行Spring boot context。 mvn springbootrun # or mvn clean compile springbootrun 執行測試用例,預設只會測試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 springbootrun PmvnProfile 使用pl限定mvn指令只對某個子組件生效,但有時候子組件之間也有引用關係,所以需要再額外加上am參數alsomake mvn clean compile springbootrun 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,種到本機電腦中的.m2repository # copy from httpsmaven.apache.orgguidesminiguide3rdpartyjarslocal.html mvn installinstallfile Dfile= DgroupId= DartifactId= Dversio