搜尋

搜尋結果

Coding | Test Case 值得寫嗎?
科技新知
MacauYeah・2023-11-02

很多做軟件開發的朋友,其實都會聽過Test-driven的開發模式。就像Scrum一樣,名氣很高,但試過的人很少。為何會這樣呢?筆者認為,並非開發者懶,而是編寫Test Case的難度真的高。對比開發程式本身的成本,寫Test Case的時間/學習成本一樣高。 造成這些高成本的原因很多。一來是因為開發者並不像過往一樣,慢慢從零寫程式,一般都應用Framework去預構建一些東西,例如打包Database connection pool,Dependency injection。Framework是好用的,但就令你要模擬Mock up特定資源,變得越來越複雜。所以一般中、小型開發,都鮮有人懂得做Test Case(除了大神獨立開發者外)。筆者對於Spring boot等Framework,都摸索了很久,才能模擬一些特定資源。但Framework一更新,就很多部份都要重寫。所以筆者沒有很強調要做Test Case,因為成本認真大。 最近,在摸清一些test case 基本concept後,筆者又重新開始嘗試編寫test case。以下假設用的是object oriented programming 在開發自己的class,為每個public function,都寫test case。很多IDE, 都有提供相關自動生成test case function signature的功能(就是為你的目標function,起一個只有外框的test function。)vscode雖然不是原生支援java,但只安裝基本的java test package,就可以達到同樣效果。 在不依靠framework的情況下,自己class要『引用』的其他class object,不要經過自己使用new來生成object。全部經set function來傳入你要引用的class object。除非你的class是作為Factory Pattern(工商模式)生產某些object,不然你就不會再有new字眼。 在為自己class編寫test case時,就會可以模擬被『引用』Object的行為。這個object在傳統上可以使用oop中的interface類型來達到模擬又不會影響到原結構的做法。實在不想做interface,java還可以用mackito 這個libraray來硬改Object的行為。 同理,自己class要『引用』一些外部資源,那些設定資源的config,都應該要set function傳入。這樣你在test case中才能起一個臨時的模擬外部資源。 在不使用framework的情況,要全數去自行模擬,當然很痛苦,但至少你可以做一些很簡單的測試。 在使用framework的情況下,還有些教學都是教你mockito繼續模疑。但這會是很痛苦的,因為這樣叫做unit test,單元測試,你要模擬所有東西。在折衷的情況下,應該底層元件做unit test,但上層的元件就做integration test,整合測試。 在做integration test時,就差不多等同使用framework行起部份或必要的資源。而那些必要資源,可能指是的database service, network service。我們可以在test case中設立不同的config,從而把framework指向一些備用資源。 Database好貴,腦細不會付錢set up多一套,自己電腦不夠強,也不能跑起多個開發用Database。好在還有h2 database可以幫你,它是memory可以操作的。只要你的framework支緩就好。在初次使用Framework時,你總會覺得為何Database層要設得這些抽像,其實為的就是讓你可以隨時換Database。不論做測試還是做移植,都會少很多問題。 模擬Network service還是沒有銀彈,要麼就mockito硬改行為,要麼就是提供一套測試用service。筆者曾經為模擬別人的Network Http API,也花了相當時間自己建立dummy server,提供模擬效果。無論dummy的效果有多假,有多局限,例如if id == 1,always return true,也是有一定價值。當你做source code refactoring (重構),又或是做framework升級時,還是讓你可以安心一點。

低頭族、OL必試! 穴位按摩紓痛消水腫
有機健康
Cheers!・2017-01-17

不論是機不離手、雙眼黐實手機的低頭族,還是長期坐在公司、對住電腦的OL,或多或少都會被各種頸梗膊痛、腰背僵硬等問題困擾,長時間坐著更容易水腫。想徹底解決當然要從日常生活習慣著手,不過想立即得到紓緩的話,則不妨透過以下穴位按摩,暫時鬆一鬆。 肩頸痛低頭族必按 肩井穴 主治:頭痛、頸痛、肩背痛、肩周炎及落枕等 肩井穴位於頸項兩側至肩膊外側的中間點,左右各一。按揉肩井穴有調理氣血,舒經通絡及消除麻痹的功效,從而幫助因長期低頭用手機引致緊繃的肩頸肌肉得以放鬆,紓緩頸梗膊痛。不過,孕婦、血壓高或患心腦血管疾病人士就不宜久按或大力按壓肩井穴。 按摩方法:用右手的食指、中指及無名指,以適當力度按揉左肩的肩井穴5分鐘,直至穴位出現酸脹感,再同樣以右手按揉左側肩井穴5分鐘。 肩貞穴 主治:肩臂疼痛、肩周炎等 長期維持同一動作低頭玩手機,容易令肩膊氣血積滯,造成痛症,嚴重的更可能引致肩周炎。肩貞穴在肩關節後下方、腋下對上約一隻手指位之處,按壓有通氣血、紓緩肩臂疼痛、手臂麻痹難以舉起等問題。 按摩方法:右手穿過左邊腋下,用中指以適當力度左右按壓肩貞穴約1至3分鐘,再以同樣方法按壓另一邊穴位。 辦公室長坐OL必按 腰陽關穴 主治:腰部疼痛、坐骨神經痛等 OL經常久坐,加上辦公室的冷氣偏低,容易引致腰背肌肉僵硬,腰酸背痛。腰陽關穴在後腰第四腰椎棘突下,按摩這個穴位有助改善疼痛症狀。可以的話,用熱毛巾或熱水袋熱敷腰陽關穴約20分鐘,紓痛效果會更佳。 按摩方法:左手或右手握拳,以拳頭凸起關節部分按揉腰陽關穴約100下。 承扶穴 主治:腰腿痛、水腫、痔瘡、便秘 承扶穴位處兩邊臀部下臀溝的中心點,按摩這個穴位,有助疏通臀部經絡,紓緩久坐引起的腰腿痛及下肢毛病,還可以改善便秘、痔瘡等問題。不過要數OL最關心的,就是按摩承扶穴有消除下肢水腫及提臀的功效。 按摩方法:用食指、中指及無名指按揉承扶穴,左右各約1至3分鐘。 搵按摩椅幫手 覺得認穴位好煩又怕按錯?唔想自己動手按摩,當然可以請專業按摩師代勞,又或再簡單一點,搵按摩椅或按摩器幫手,連預約按摩師和搭車來回的時間都慳番。CTM的全新積分獎賞最近就有多款按摩產品可供換購,包括OTO「挨挨鬆2」、「錐錐爽」及保暖頸椎按摩師等。其中「挨挨鬆2」按摩椅外形夠潮又小巧,專為肩、背、腰、臀以至大腿提供不同按摩效果,有助紓緩疲勞及酸痛,而家用1,000分再加$5,380就可以換購,相等於原價$13,500約4折,加上中銀/大豐/華僑永亨信用卡用戶享有12個月免息分期優惠,月供只係$449,實在係抵上加抵。 「挨挨鬆2」設有溫熱按摩模式,可以加速血液循環,增強按摩效果。 「錐錐爽」可用作特定穴位按摩,按壓腹部穴位有助分解多餘脂肪組織,適合OL用來修身,現以350分加$650(原價$1,488)即可換購。 「保暖頸椎按摩師」除了按頸,仲可以按摩大腿、小腿、上臂、腹部及背部,同埋當做保暖頸巾,一物多用,現以350分加$198(原價$530)即可換購。

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 06 - Spring Boot Web 調試工具
科技新知
MacauYeah・2024-08-02

之前兩節,都一直在講怎樣寫code,也介紹了Test Case的好。若為初次接觸,Spring有很多設定需要摸索,若開始時就設定錯誤,對不少人來講都會有很大打擊。在這裏,筆者就介紹一些vscode和spring的工具,可以讓IDE多幫忙一下,減少走歪路的機會。 vscode插件 以下兩個插件,都在於提示用戶設定。 Spring Boot Dashboard (vscjava.vscode-spring-boot-dashboard) 可以那它來運作spring boot app,省去找尋main 位置的麻煩 綜覽整個程式中的所有Bean (Bean是一個很重要的元素,日後會再提及) 若程式為Spring boot web,可以顯示所 http endpoint。 Spring Boot Tools (vmware.vscode-spring-boot) 檢查設定檔的設定值有沒有寫錯 (application*.properties, application*.yml) 綜覽檔案中的有以@為首的與spring相關的元素(檔案很大時就會有用) 可以在IDE運行spring時,查看@元素的bean資訊 (not works ?, 加了actuator也是沒有看見) Spring Initializr(vscjava.vscode-spring-initializr) 經網絡初始化spring 專案的依賴引用設定 Maven for Java (vscjava.vscode-maven) 若大家在使用Spring Initializr時,選取了maven作管理工具,那麼這插件就可以在後續幫忙更新引用。 若專案的Spring 及㡳層引用有變,vscode也需要它來引用更新。 這是java 開發工具包(vscjava)的其中一員,它的其他插件也可以順帶安裝。 調試工具 - open api / swagger-ui 如果我們在開發Web http API ,其實都是為了該某個客戶端使用。但如果該客端明白我們的API該怎樣使用,大家總不會逐個連結,自行編寫使用手冊及範例吧。所以就有了open api 和 swagger-ui 的旦生 。 open api,就是一個公認的使用手冊標準,我們只要在spring-web中加入 springdoc-openapi-starter-webmvc-ui 的程式庫,就可以自動為我們的controller 生成 open api 的說明檔。 更強大的是,這個程式庫可以利用剛生成的open api,配上 swagger-ui ,自動測生一個可供測試的頁面。這個頁面可以供碼農們直接操作,也會產生對應的 curl 指令,讓碼農們可以在任何的主機上重複。這樣,那麼是沒有太多解釋的說明文檔也可以使用。 做法很簡單,在pom.xml中加入依賴。 org.springdoc springdoc-openapi-starter-webmvc-ui 2.5.0 (由於安全性問題,上述程式碼未能完整顯示,請參見文末完成Source Code) 然後我們就可以加入Controller,運行 spring 後,我們可以在 http://localhost:8080/swagger-ui/index.html 找到 swagger 的頁面,然後就可以在 ui 上測試API了。 躲在Proxy背後的 swagger 如果你跟筆者一樣,使用 code-server 或 github codespaces ,你就不能很隨意地連接到 8080 端口。你只能經過Http Proxy去訪問。這樣 open api的原有的設定就不合用了。 這時我們需要自行修改 open api 的 bean,加入我們真正的根路徑。然後筆者使用 code-server,而IDE只會在port 9000上執行,它對外的前置路徑會是 http://localhost:9000/proxy/8080/。 @Bean public OpenAPI springShopOpenAPI() { Server server = new Server(); server.setUrl("http://localhost:9000/proxy/8080/"); return new OpenAPI().servers(List.of(server)); } (由於安全性問題,上述程式碼未能完整顯示,請參見文末完成Source Code) 然後訪問 http://localhost:9000/proxy/8080/swagger-ui/index.html,還會發現 "Failed to load remote configuration." 。但你可以在 "explore" 搜尋欄位內貼上 http://localhost:9000/proxy/8080/v3/api-docs,再一次搜尋檔案,就回復正常了。 註:如果你熟習Nginx這類Reverse Proxy ,你的環境有條件直接修改 Request Header,加入X-Forwarded-*,就不用煩惱寫Bean了,也不用手動在explore裏重新修正api-docs的位置。詳見 https://springdoc.org/index.html#how-can-i-deploy-springdoc-openapi-starter-webmvc-ui-behind-a-reverse-proxy Controller的繼承 Spring Controller的 @ 標記 (Annotation) ,其實支援繼承的。經Spring 生成的 api docs,也有如何效果。例如以下程式碼 public class ParentController { @GetMapping("/postfix") public String postfix(){ return "this is postfix"; } } @RestController @RequestMapping("/api") public class ChildController extends ParentController { @GetMapping("/direct") public String directCall() { return "direct result"; } } (由於安全性問題,上述程式碼未能完整顯示,請參見文末完成Source Code) 在ChildController的實例中,它會有兩個API,分別是 /api/direct /api/prefix 它支援Java Function Overwrite(覆寫),但不能改 @ 標記,以下就是一個錯的例子 @RestController @RequestMapping("/api") public class ChildController extends ParentController { @GetMapping("/Overwrite") // 把這個 @ 行刪了才能正常執行 public String postfix(){ return "this is Overwrite"; } }(由於安全性問題,上述程式碼未能完整顯示,請參見文末完成Source Code) Source Code spring boot web api doc

【匈牙利。布達佩斯】※景點※ Mátyás Templom 加冕教堂 (馬加什教堂 / 馬提亞斯教堂)
走遍世界
80後愛旅行✈️・2021-08-26

今天一下飛機後就坐車去加冕教堂(馬加什教堂)和漁夫堡, 第一次踏足布達佩斯, 在車上一直拍著沿途風光 這是鏈橋, 是一座橫跨多瑙河連接布達和佩斯的古橋。 終於要到達整個行程的第一個景點 - 加冕教堂 (馬加什教堂) 和 漁夫堡(漁人堡) 馬加什教堂又名加冕教堂是因為歷代的匈牙利國王都在這裡進行加冕, 所以又稱為加冕教堂。 加冕教堂 (馬加什教堂 / 馬提亞斯教堂)位於布達城堡區的心臟, 就緊緊的相鄰著漁夫堡(漁人堡), 這兩個景點一般都會一起遊覽的~ 下車後直直的走過一條街道, 就會看到加冕教堂 (馬加什教堂 / 馬提亞斯教堂) 第一天來到布達佩斯天氣真的很好!! 街道的兩旁都有很多賣特色紀念品的店~ 要看到加冕教堂(馬加什教堂 / 馬提亞斯教堂)了~ 高高的塔尖讓整間教堂看起來更加宏偉! 在加冕教堂 (馬加什教堂 / 馬提亞斯教堂)旁邊的是聖三一廣場, 廣場中間的柱子是聖父聖子聖神三為一體的聖三一。 柱子上凡雕刻非常精緻。 加冕教堂 (馬加什教堂 / 馬提亞斯教堂)的塔尖非常高, 好不容易才拍到整間教堂呢 走到加冕教堂 (馬加什教堂 / 馬提亞斯教堂)前地, 有一個教堂範圍的模型。 加冕教堂 (馬加什教堂 / 馬提亞斯教堂)是採用歌德式建築, 外牆所有的雕刻都非常精美! 根本就是一件藝術品!! 走到加冕教堂 (馬加什教堂 / 馬提亞斯教堂)旁邊, 歌德式的建築物就連門框上的雕刻都弄得這麼美 教堂的側面建築 在教堂的旁邊、漁夫堡前面有一個騎著馬的雕像, 他就是匈牙利的立國君主史蒂芬國王。 在聖史蒂芬像後面的就是漁夫堡(漁人堡), 這兩個景點真的緊緊相連的。 Mátyás Templom 加冕教堂 (馬加什教堂 / 馬提亞斯教堂) Mátyás Templom 加冕教堂 (馬加什教堂 / 馬提亞斯教堂): Budapest, Szentháromság tér 2, 1014 匈牙利 http://www.matyas-templom.hu/ 檢視較大的地圖

澳門JW萬豪酒店呈獻如意佳餚 歡慶首個農曆新年
澳城餐飲
LifeMag Editor・2016-01-21

澳門JW萬豪酒店在農曆新年期間將於「萬豪中菜廳」呈獻一系列特色賀年美饌和發財點心,更特別設計了喜慶賀年套餐及精緻年糕禮盒,於2016年1月15日至2月22日以精雕細琢的新春佳餚與賓客一同喜迎猴年。 傳統粵菜食府「萬豪中菜廳」將提供20多款賀年菜式,恭賀賓客來年大吉大利、家肥屋潤,另推出兩款喜慶賀年套餐,適合一眾溫馨家庭聚會。餐廳亦會推出八道菜餚的「福星臨門」套餐,分別選派五位資深大廚的其中一位於農曆年三十晚(2016年2月7日)親自上門為事先預約的賓客準備團年飯,讓賓客安坐家中與親戚好友大飽口福,共度佳節。 喜慶賀年套餐 「萬豪中菜廳」特設兩款如意農曆新年套餐,供6位(澳門幣2,888元*)或十位賓客(澳門幣5,688元*)享用。誠意推薦古法蒸花尾龍躉,寓意「年年有餘」,餐廳大廚特別選用肉質嫩滑、味道鮮美的珍貴花尾龍躉,更添滋味。龍躉魚皮飽含豐富膠質及維他命,絕對是迎接新年的健康佳餚首選。10人套餐更可品嚐到經典賀年菜式 鴻運乳豬全體 ,寓意「紅袍添喜慶」。兩款喜慶賀年套餐於2016年1月30日至2月22日期間供應。 「福星臨門」套餐 「萬豪中菜廳」農曆年三十晚將從5位資深大廚中選派一位,親自上門炮製供6人享用的「福星臨門」套餐,適合希望安坐家中與親友溫馨共聚的賓客。此八道菜餚套餐定價為澳門幣8,888元*,寓意「發發發發」。精選菜式包括滋補之選的蟲草花炖烏雞,以及選用清甜鮮蝦和蛋白質豐富的澳洲六頭鮑魚等上乘海鮮的富貴鮑魚盤菜,款待賓客大方得體。 特色賀年美饌 「萬豪中菜廳」準備了多款滋味賀年小菜,以難忘的餐飲美饌體驗為賓客喜迎新春。大受歡迎的賀年星馬菜式撈起三文魚生(澳門幣488元*)更是不容錯過。撈起碟上整齊排列着切條後的新鮮三文魚生,另一個碟上則放上紅蘿蔔及白蘿蔔等蔬菜絲。享用菜式時,賓客可一同用筷子將兩個碟上的食材撈起拌勻,同時互贈恭賀說話,寓意「撈得風生水起」。加上配有多汁鮑魚的鮑魚撈起魚生亦只須澳門幣688元*,祝願賓客「包您撈得風生水起」!其他特選小菜包括髮菜蠔豉瑤柱甫、花菇鮑片扣鵝掌、脆皮柚子雞等,保證滋味無窮。 精美發財點心 賓客更可細嚐一系列意頭十足的巧手點心,當中牡丹酥外型活像一朵金黃牡丹花,象徵「富貴榮華」,內裡包著甜而不膩的蓮蓉餡。餐廳的精緻年糕禮盒細心配搭麥芽糖醇低糖及杏汁兩款甜蜜口味,是饋贈親朋好友的送禮佳選。禮盒於2016年1月15日正式公開預訂,定價為澳門幣398元。 富貴鮑魚盤菜 萬豪中菜廳亦提供新春必嚐的經典賀年盤菜,選用清甜鮮蝦和蛋白質豐富的澳洲六頭鮑魚等上乘海鮮的富貴鮑魚盤菜可於2016年1月15日至2月22日期間堂食或設有外帶服務,定價為澳門幣2,288元*。 如欲預訂或查詢,請致電+853 8886 6222或電郵至mhrs.mfmjw.man.ho@marriotthotels.com。* 需額外收取10%服務費

韓國嘻哈男團「防彈少年團」巡演回歸澳門!
音樂聯合國
LifeMag Editor・2017-09-05

《2017 BTS LIVE TRILOGY EPISODE III THE WINGS TOUR IN MACAO》 11月4日 (星期六) , 澳門威尼斯人®金光綜藝館 9月5日門票火熱開搶 韓國大勢嘻哈男團「防彈少年團」 (BTS) 繼拿下「2017 BILLBOARD MUSIC AWARDS TOP SOCIAL ARTIST」後,再度被美國《時代周刊》封為「全球25位最具影響力網路人物」之一!擁有超高人氣的 BTS 再次把世界巡迴演唱會帶來澳門! LIVE NATION呈獻 《2017 BTS LIVE TRILOGY EPISODE III THE WINGS TOUR IN MACAO》將於2017年11月4日 (星期六) 於澳門威尼斯人金光綜藝館舉行,定必再次成為城中熱話!門票由港幣/澳門幣680起,將於9月5日(星期二)上午10時起透過金光票務售票處、快達票及澳門廣星傳訊公開發售。 關於藝人:防彈少年團 韓國嘻哈男團「防彈少年團」BTS 為韓國男子音樂團體,由JIN、SUGA、J-HOPE、RAP MONSTER、JIMIN、V 及 JUNG KOOK七名成員組成,隸屬BIG HIT娛樂經紀公司旗下,為BIG HIT娛樂第一個獨立製作培養的團體。 BTS在2016年發行的第二張正規專輯《WINGS》是韓國2016年度銷售量最高的專輯,也締造了97國 iTunes音源冠軍的紀錄、並拿下美國BILLBOARD專輯榜200強第26名,是目前韓國藝人在BILLBOARD專輯榜上的最高名次。 另外根據韓國GAON 銷售排行榜公布2017年上半年銷售排名,BTS防彈少年團也以 2 月發行的專輯《WINGS 外傳: YOU NEVER WALK ALONE 》毫不令人意外地登上了冠軍寶座,這張專輯至今累積銷量為 72 萬 9295 張,並在美國BILLBOARD專輯榜拿下61名,這讓BTS成為首位連續4張作品皆在全美BILLBOARD二百強專輯榜中佔有一席之地的韓國藝人。 最近《時代周刊》所公布的25名「最具影響力網路人物」中,防彈少年團打敗Justin Bieber、Donald Trump、Rihanna、Katy Perry等人並列榜上,同時也是韓國唯一上榜代表。 BTS自2017年2月以韓國首爾為起點展開的「2017 BTS LIVE TRILOGY EPISODE III THE WINGS TOUR」世界巡迴演唱會,截至7月初已在香港、日本、泰國、智利、巴西、美國、澳洲、菲律賓、印度尼西亞等城市舉行共32場公演的世界巡迴演唱會,預計這次世界巡迴動員約40萬人次參加。 《2017 BTS LIVE TRILOGY EPISODE III THE WINGS TOUR》澳門站 日期 2017年11月4日(星期六) 時間 晚上8時 地點 澳門威尼斯人 金光綜藝館 門票 企位 VIP套票 (包括企位門票一張、soundcheck入場資格、優先進場): 港幣/澳門幣2380 A 區: 港幣/澳門幣1880 坐位 B 區: 港幣/澳門幣1680 C 區: 港幣/澳門幣1280 D區: 港幣/澳門幣980 E區: 港幣/澳門幣680 公開發售 2017年9月5日(星期二)上午10時 網上訂購 www.cotaiticketing.com 、www.hkticketing.com 及macauticket.com 主辦 Live Nation 查詢 (852) 2989 9239