潮流特區

焦點文章

CyberCom3合1充電數據線 — 一條線搞掂晒,充電超方便!
科技新知
Lifemagtechie・2025-06-12

而家大家手上嘅電子產品多到數唔清,手機、平板、藍牙耳機、遊戲機……每部機都有自己嘅充電線,仲有啲好舊款用USB,iPhone用Lightning,最新又係Type-C,搞到充電時成日手忙腳亂,尤其去旅行,帶幾多條線都唔夠! 呢條 CyberCom3合1充電數據線,就係為咗解決呢個煩惱而生。佢集合多種接口於一身,無論你係用緊iPhone定Android,甚至其他電子裝置,都可以用一條線搞掂晒,方便又慳位,真係你嘅生活充電好幫手! 一條線,多種接口,無懼設備多 CyberCom3合1充電數據線支援 Micro USB、USB A、Type C 同 Lightning 四大接口,無論你係iPhone、Samsung定係其他品牌,甚至係藍牙耳機、遊戲機,都可以用呢條線充電同傳輸數據。旅行唔使再帶一大堆線,行李又有位可以擺多啲戰利品啦! 快充快傳,效率up up! • 支援QC快充技術,最高60W輸出,手機、平板、智能手錶都可以超快充滿,唔使等成日。 • 傳輸速度高達480Mbps,無論係工作文件定係娛樂影片,一link就傳,節省你寶貴時間。
 耐用又防纏繞,攜帶超方便 • 採用彈性TPE物料,線身唔易打結,收納方便,唔怕亂晒。 • 線材耐用又有彈性,日常用或者出街旅行都好啱用。
 產品小百科 • 1米長度,無論係屋企、公司定旅行都啱用。 • 建議零售價 $99,依家優惠價$79就可以帶走。
 由此開始,充電更快更簡單! 設計貼心,性能強勁,係你工作同生活嘅好拍擋。無論係手機、平板、遊戲機定藍牙耳機,呢條線都幫你搞掂晒充電同數據傳輸,令你嘅數碼生活更輕鬆自在。了解CyberCom3合1充電數據線嘅詳情同優惠,幫你打造更智能、更方便嘅充電新體驗!購買網站: www.cyberportcom.com查詢電郵: info@cyberportcom.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.

為什麼師傅開光要收取費用
宗教玄學
熊神進・2025-11-11

開光收費是一項能量交換近期有讀者提出疑問:為何港澳台地區的風水師為神像、法器開光需收取費用,而內地部分師傅卻提供免費服務?這個問題涉及宗教經濟學、儀式能量學以及傳統文化傳承等多個維度,值得我們深入探討。一、開光儀式的神聖性與准入機制在正統道教儀軌中,並非所有物品都具備開光資格。根據《道藏·開光科儀》記載,開光物品需經過”三壇驗證“程序:1. 需供奉於祖師壇前接受靈力檢測2. 需通過五行相生相克原理驗證3. 需符合使用者八字命理需求這種嚴格的篩選機制體現了法國人類學家Marcel Mauss在《禮物》中提出的”神聖性閾限“理論——只有通過特定儀軌考驗的物品才能獲得宗教意義上的”身份轉換“。二、開光儀式的專業成本構成現代宗教社會學將儀式成本分為顯性成本與隱性成本兩類:顯性成本包括:1. 耗材費用:黃皮葉、金剛砂等淨化材料。2. 法器專用性成本:每件法器需獨立使用朱砂筆。3. 能量維持成本:如”2025年化太歲能量塔“需300日壇場供奉。隱性成本包括:1. 儀式能量損耗:風水師需消耗自身靈力。2. 時間機會成本:複雜儀軌需要時間(含誦經、畫符、步罡踏鬥等)。三、免費開光的三種社會交換模式美國社會學家Peter Blau的社會交換理論可以解釋免費開光現象:1. 批量生產的規模效應:集體開光降低單位成本。2. 贊助轉移支付:明星商人的功德捐贈形成二次分配。3. 符號資本積累:師傅通過慈善行為獲取社會聲譽。四、宗教服務的經濟倫理辨析馬克斯·韋伯在《儒教與道教》中指出,宗教服務收費本質是 Charismatic authority 的合理化表現。需明確:• 收費不等於商業化:如中醫”懸壺濟世“傳統,收費維持傳承。• 免費不等於不專業:可能是”法佈施“的修行方式(佛教六度之一)。五、消費者的認知1. 消費者應建立正確的宗教消費觀:理解law of conservation of energy 在儀式中的體現。2. 建立雙向感恩機制:如果信眾得到免費開光的物品,信眾可通過做煙供佈施行為方式回饋給師傅。正如道教學者Kristofer Schipper所言:”儀式是看得見的神聖經濟學。“理解開光收費的本質,有助於我們更理性地接受物質與精神層面平衡的交換關係,學習感恩。

熊神進11月10日至11月16 一周運程
玄學星相
熊神進・2025-11-09

鼠 在11月10日至11月16日這一周,屬鼠的朋友可能會面臨情感方面的挑戰。由于忙于事業,可能忽略了伴侶的感受與情緒,導致關係緊張。根據《周易》的智慧,和諧關係需要雙方的關注與理解。建議在忙碌工作之餘,多花時間陪伴伴侶,維護良好的感情發展。同時,男性朋友需謹防爛桃花,以免造成財務損失。健康方面,注意多喝水,保持良好的作息,避免疲勞過度影響身體狀態。 牛 本周屬牛的朋友在財務方面應保持謹慎,新的投資機會幷不適合介入,原有的投資可能也會傳來不好的消息。建議儘量放手,避免不必要的損失。在購物時要控制消費,特別是大件物品的購買,務必瞭解産品的實用性和品牌信譽,以免受騙。健康狀况良好,但仍需警惕酒色之事,以免影響身體。感情運勢較好,雙方相處融洽,但切忌因感情而耽誤工作。 虎 本周屬虎的朋友在財運方面受到太歲相害的影響,可能會面臨破財的風險。在投資、簽約及合作時,務必小心謹慎。根據《擇日通書》的建議,本周應以靜思求穩爲主,避免急于求成。事業上,困阻逐漸解除,人際關係也會有所好轉,業務將正常運轉。保持良好的財務管理習慣,將幫助你在未來的財務狀况上更爲穩健。 兔 本周屬兔的朋友與另一半的感情甜蜜,細微的問候能讓彼此感動。金錢方面沒有太多煩惱,有足够的閑錢可以偶爾孝敬家人。在待人處事上,建議多一些包容與理解,這對雙方都有好處。未婚人士則可能迎來良緣,是成就一段長久關係的好時機。熊老師建議你在社交中保持真誠,善待他人,自然會吸引到更多的好運。 龍 屬龍的朋友在本周工作運勢不錯,積極性高,能够高效完成任務。財運相對平穩,收入穩定,但需注意理財方式的安全性,避免因急功近利而造成資金損失。與愛人之間容易發生衝突,建議多體諒對方,避免感情裂縫。根據五行理論,龍屬土,適合增加木元素(如植物)來提升運勢和情感。熊老師建議你在工作中保持良好的溝通,及時解决矛盾。 蛇 屬蛇的朋友在本周要特別小心事業規劃,避免理想與現實之間的巨大落差。《管子》提到,審慎决策是成功的基礎。在投資方面,不宜做過大的動作,以守爲上策。身體健康方面,需多注意保養,避免因過度勞累而導致健康問題。周一可能會因衝動而造成破財,建議保持清醒的頭腦,防止虛榮心影響理智。保持良好的學習狀態,有助于掌握新知識。 馬 屬馬的朋友在本周健康運勢需加强,防止舊疾復發,外傷的風險也需多加注意。《黃帝內經》提醒我們,健康是最重要的財富。在感情方面,易生爭執與誤會,建議多加理解與包容,維護良好的關係。理財方面,需謹慎處理投資,以防追高殺低。已婚者需警惕外部朋友的影響,避免因此引發家庭矛盾。保持良好的溝通,有助于維持家庭和睦。 羊 本周屬羊的朋友在事業上面臨困阻,可能感到筋疲力盡。儘管如此,保持冷靜、沉著應對是解决問題的關鍵。《易經》指出,謹慎行事可避免不必要的麻煩。感情方面有新的進展,建議多花時間去培養感情,增進瞭解。在財務上,保持理性消費,避免衝動導致的經濟壓力。總之,保持積極的態度,有助于你在這一周克服困難。 猴 屬猴的朋友本周財運穩定,合理規劃開支與收入是關鍵。《論語》强調,節約與理智是財富管理的基礎。此時不妨嘗試新的投資渠道,但切勿盲目跟風。健康方面,注意保持身體的活力,適當鍛煉以增强抵抗力。建議佩戴「黑岩刀」以化解未來的小人干擾,提升運勢。保持良好的心態與積極的行動,將爲你帶來更多的機會與好運。 鶏 本周屬鶏的朋友需特別注意健康,避免過度疲勞。適量運動與充足的休息是保持健康的關鍵。《黃帝內經》提到,身體健康是萬事之本。在工作上,可能會遇到一些重要的發展機會,雖然面臨挑戰,但只要冷靜分析幷做出正確的决策,就能順利度過難關。保持積極樂觀的態度,將有助于你在職場上更好地應對各種挑戰。 狗 屬狗的朋友本周工作運勢佳,但可能會遇到瓶頸與壓力。正視問題,保持正常的居家生活將有助于你建立自信幷保持健康。在投資方面,股市適合低接,積極經營業務將有助于提升財務狀况。與伴侶之間的溝通也是至關重要的,保持樂觀態度,展現陽光的一面,將有助于加深彼此的理解與感情。總之,積極應對機遇,將助你在事業和生活中獲得更大的成功。 猪 屬猪的朋友在事業運方面表現尚可,尤其是初入職場的年輕朋友,能够得到前輩和貴人的提携。保持虛心學習的態度,必將獲得對方的賞識,助力未來發展。儘管當前可能面臨一些難題,如複雜的人際關係和流言蜚語,建議儘量不去理會這些負面因素,專注于做好自己的事情,穩步前行。熊老師建議你保持積極的心態,適時放鬆自己,以更好地應對即將到來的挑戰。

八字地支雙合可以解空亡嗎?
宗教玄學
熊神進・2025-11-06

關于八字空亡地支雙合能否解空的問題,傳統命理和新派命理確實存在兩種不同觀點,其機理差异源于對“空亡本質”與“合局作用”的不同理解。筆者今天從經典依據、理論機理及實例分析三方面展開說明: 一、空亡的基本定義與傳統認知 空亡是八字中基于“六甲旬”劃分的特殊地支狀態。十天干配十二地支,每旬(十支)必有兩地支“無天干可配”,稱爲“空亡”。例如甲子旬中,戌和亥爲“空亡”(因地支戌亥無對應的天干組合)。傳統認爲,空亡地支代表“虛浮、不實、力量薄弱”,其對應的六親、事項易有“落空、阻礙、非真實”之象(如財星空亡主錢財難聚,官星空亡主事業不穩)。 二、兩種觀點的核心機理 觀點一:空亡地支雙合可解空 此說的理論依據在于“合局具有凝聚、填實之力”,認爲雙合(尤其是地支六合或三合)可通過能量聚合,彌補空亡地支的“虛浮”,使其力量增强,從而“填實”空亡。 《三命通會·卷五·論空亡》明確提到:“空亡之理,多是五行不足……若遇合沖,反成有用。” 這裏“合”即指地支相合,認爲合局能補充空亡地支的力量,使其從“虛”轉“實”。 清代命理家任鐵樵在《滴天髓闡微》中亦:“空亡用合,猶貧人得助,可解困厄。” 强調合局對空亡的補救作用。 機理解析: 地支相合(如寅亥合、卯戌合、巳申合等六合,或申子辰、亥卯未等三合)本質是五行之氣的交融與凝聚。空亡地支本因“無氣”而虛弱,若與其他地支相合,可通過合化(如亥卯未合木局)或合絆(如寅亥合木)的方式,將其他地支的能量導入空亡支,使其獲得生氣,從而“填實”空亡。例如: 如果命局中戌亥空(甲子旬),若見卯戌合,卯木之生氣可引動戌土,使其從“空”轉“實”,假如空亡戌土,所代表的六親(如父親、兄弟宮)或事項(如田宅、財庫)不再輕易落空。 觀點二:空亡地支雙合反不利 此說認爲空亡的本質是“氣數不足、根基不穩”,雙合雖表面“引動”空亡支,實則是“虛中套虛”,反而加劇其不實性,導致所對應事項更易“落空”或“反復”。 理論依據: 部分盲派或新派强調“空亡爲先天不足”,合局雖動,但空亡支本身無根,合化後的五行更弱(如木合土,土本空,木旺反耗土氣)。此外,《淵海子平》雖未直接否定“合解空”,但提到“空者,虛也,合而動之,虛處更虛”,暗示合局可能激活空亡的負面效應。 機理解析: 空亡支因“旬中無氣”,本無實際力量。若强行合局,看似“引動”,實則是將其他地支的能量消耗在空亡支上(如木合空土,木氣被土空耗散),導致合局反成“破局”。 例如:某人的年柱戌亥空(甲子旬),若見寅亥合,亥水本空,寅木合亥水需消耗自身力量,反致寅木受損,而亥水仍爲空,無法真正“填實”,甚至可能因合局引動空亡,導致相關事項(如婚姻、合作)表面有進展,實則無果。 三、實例對比與結論 例1:合解空的有效案例 幹造:甲子 丙寅 己醜 庚午(甲子旬,戌亥空)1984年2月25日 日主己土生于寅月,木旺克土,需火土幫扶。月幹丙火透出,坐寅木得長生;時支午火爲印星,但年支子水、日支醜土爲濕土,火氣稍弱。 關鍵看空亡:戌亥空,原局無戌亥,但月支寅與年支子無合,日支醜與月支寅無合。若大運見卯(卯戌合),卯木與年空戌(雖不在原局,但大運引入)相合,戌土被卯木引動,土氣增强,補日主己土的力量,此時戌土雖爲原局空亡(甲子旬),但因大運卯合,戌土“填實”,代表事業宮(戌爲火庫,丙火印星之根)得以穩固,財運提升。此例符合“合解空”的邏輯。 例2:合解空的負面案例 坤造:丁卯 壬寅 辛亥 戊子(甲子旬,戌亥空) 1987年2月10日子時 丁卯年屬甲子旬,所以空亡是戌亥。原局中,日支是亥水,屬空亡地支。 接下來,我們分析空亡地支亥水與其他地支的關係。月支是寅木,寅亥合,所以仍然是寅亥合的情况。 日主辛金生于寅月,失令,地支有亥水(傷官)、子水(食神),天干有丁火(七殺)、壬水(傷官)、戊土(正印)。需要判斷日主强弱。辛金在寅月弱,地支亥子水泄身,天干壬水傷官泄身,戊土正印生身,但戊土坐子水,被子水耗,生身力量有限。整體日主偏弱,喜土金,忌木火水。 空亡的亥水是傷官,原本空亡可能導致才華難以發揮。現在寅亥合,寅木與亥水相合,寅木是劫財,原本寅木是否能幫身?寅木是木,克土(印星),同時寅木與亥水合,可能轉化爲木,但木是忌神。需要分析合局對日主的影響。 從經典文獻看,《三命通會》《滴天髓》等主流典籍支持“合能解空”,認爲合局可補益空亡支的力量。但實際應用中,需結合以下條件判斷: 合局類型:六合(如卯戌合)力量集中,更易解空;三合(如亥卯未合木)需全域配合,否則可能分散力量。 合化結果:若合化爲實有五行(如亥卯未合木成功,木旺生火),則解空有效;若合而不化(如寅亥合木但木弱),則可能無效甚至不利。 空亡所臨十神:若空亡爲忌神(如忌神財星空亡),合解空反需謹慎(可能引動忌神);若爲空亡喜神(如喜神官星空亡),合解空則有利。 以上的觀點只是筆者個人看法,“合解空”是傳統主流觀點,但需結合具體命局的五行强弱、十神喜忌綜合判斷,不可一概而論。

為何 VueJS 除錯如此麻煩?
科技新知
MacauYeah・2025-11-04

前一次,筆者分享了VS code debugging frontend的好功能,也確實了coding anywhere並不是一個普通的notepad + language server就可以解決的事。我們還要考慮如何debugging (除錯)的問題。 雖然筆者知道 vscode 可以解決問題,但為何 最原始的 nodejs debugger 不能解決問題。如果node debugger 不能解決問題,那麼 vscode 又做了什麼,它可以解決問題?經過一輪的實驗,筆者懷心疑,也許,強大的並不是 vscode 本身,而瀏覽器才真正的做到 debugger 的功能。而 vscode 只是以更方便的方式,重現那些結果。 為何 backend 的 debugger 不發揮作用? 筆者舉例,現時有一個 vue 3 專案,使用官方建議的方式生成 $ npm create vue@latest 這個專案,在開發模式下,會以 vite 架起一個端口為 5173 的伺服器,讓開發人員可以經過瀏覽器看到vue內容。筆者一直都認為,只要在 vite 的指令中插入 inspect 參數,一切就可以成功,就像 nodejs 一樣,只要在開始時加入參數就可以。結果當然是不行的。 經過對比 VueDevTools 的參考功能,筆者發現了一個出發點的問題。vite 其實是一個伺服器級的程式,也許它只是負責把所以 vue + js 動態轉成常見 js,就像 webpack 一樣。我們想要設的中斷點,都不在它的程式上,所以 debug 參數也沒有用。實質,我們要加的中斷點,其實要在客戶端上,也就是瀏覽器上。那因此,VueDevTools 也不包括那些功能。它只是好好地記錄了每個 vue component 或 js 是如何被改寫的過程(就像被 webpack改寫的過程)。 官方又是用什麼來除錯的? 既然我們知道了問題所在,就要看看傳統的 javascript 又是如何除錯的。實際上,因為瀏覽器的配合,設立中斷點的功能,原來早就實現了。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/debugger 只要我們在任何 javascript 地方,插入 “debugger;” 這個神奇的字,瀏覽器就會在inspect模式下,自動產生中斷點。之後,你可以控制瀏覽器進行watch / step into / step over 功能。絕對比console.log更有意義。 在發現了這個方法之後,回去找vue3的官方文件,驚訝地發現,它就是提議用這種方式進行除錯。 https://vuejs.org/guide/extras/reactivity-in-depth.html#reactivity-debugging 未解之謎 雖然我們找到了設定中斷點的方式,但對於vscode是如何做到客戶端、伺服器端通用這件事,筆者還是沒有了解到。就以現在的知訊來看,很大機會就是vscode操控了瀏覽器的除錯模式,把所有資訊都回傳了vscode本身。這也是解譯了為何vscode在起動debugger時,必需要由vscode自己叫起瀏覽器。而codeserver這類雲IDE無法叫起本地瀏覽器,就造成它無法運用除錯功能的原因。 有與趣為codeserver一起搵解決方案的朋友,可以到筆者的 https://github.com/macauyeah/AProgrammerPrepares ,以文字教學的方提交你的解決方案。 祝願大家可以早日實現coding 自由。

Spring boot web api 異常處理
科技新知
MacauYeah・2025-10-28

我們在編寫程式時,經常會遇到一些極端的情況,不會經過 function 的方式回傳結果。例如一個 function 原本是提供讀檔功能,但用戶傳入的並不是一個有效的檔案路徑,又或是誰路徑權限不足,無法讀取。這些不正常的結果,並不是原本 function 所協定的回傳值。那麼,我們會拋出異常 Exception ,中斷所有被呼叫中的 function ,讓上層用戶去考慮怎樣處理這個問題。 在 Web API 中,這些 Exception 就更常見。要求用戶傳入的參數,用戶就是有時候少了幾個。覆寫資料的時候,原本的資料已被刪除。但我們現在是經過 Web Api,不能像過去一直向上拋出異常就能通知用戶。我們需要的,是把異常轉成對應的 Http Status Code,讓用戶端可以快速識別異常的類型。 java 異常對應 Http Response Code 其實在 spring boot web 中,要做轉譯,是很簡單的。在定義 java Exception的時候,若有@ResponseStatus,spring boot web 就會自動回應對應的 http error code。 @ResponseStatus(HttpStatus.FORBIDDEN) public class CustomAuthenticationException extends RuntimeException { public CustomAuthenticationException() { } public CustomAuthenticationException(String message) { super(message); } } 以後,任何一個地方拋出 CustomAuthenticationException (假設上層沒有人攔截)都會把該 Controller 的結果改為 http 403。Spring boot 也很聰明的,把異常中的 message 隱藏 ,免得有網安的問題。 若我們定義 Exception 時,沒有@ResponseStatus,Controller 就會變成 http 500,例如我在 controller 中拋個常見的 IOException,這次的結果就會變成 http 500。 @GetMapping("/api/ioError") public String forceIOException() throws IOException { throw new IOException("force io error"); } 如果某些時候,我們想使用 java Exception 中的 message 欄位作為報錯信息,讓 http 客戶端,可以通過固定的 message 檔位找到問題訊息,我們可以在application.properties中,加入server.error.include-message=always。(有些特殊情況,在開發模式時 mvn spring-boot:run ,已經可以見到有 Exception message,但在投産後java -jar又看不到。主要因為開發模式中, pom 有 optional spring-boot-devtools,會自動加入了server.error.include-message=always,但 mvn package 後就沒有,因為 runtime 沒有 spring-boot-devtools 的覆蓋。) 額外處理 異常處理除了想控制 http status code 外,有時還需要做一些額外處理,例如發出通知郵件等。若想做額外處理,需要另做一個 @RestControllerAdvice 的類,在接到指定的 exception 時,可以轉換不同的 http code ,而且還可以執行額外 java code ,改變 http ResponseBody 。 @RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(value = RuntimeException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public Map handleRuntimeException(Exception ex) { return Map.of("ret", false, "anyfields", ex.getMessage()); } } 但要注意,一旦使用@RestControllerAdvice 後,就要考慮有沒有改變了某些預設的行為。例如上述的@ExceptionHandler(value = RuntimeException.class),代表所有RuntimException.class的子類,都會歸由該 function 所處理。當然,你也可以多加幾個 function 來處理不同的子類。 Reference spring-boot-web-api-validate

Visual Studio Code 才是 coding anywhere的基礎?
科技新知
MacauYeah・2025-10-25

筆者過去就有發表過使用 VM / docker + code server 作為 coding anywhere的基礎, 現時也有一直使用。code server 有效,但對於Web App 開發,仍有所不足。 那個藏在瀏覽器的IDE - Code Server 使用 code server 的好處,就是筆者只需要一個有瀏覽器的客戶端,就可以連線到雲上的VM中使用 code server 。不論多重的功夫,交給外部的雲去做,自己的客戶端就可以盡可能輕便。不想自己攪一套code server開發環境?github codespaces in browser 也是一個很類似的替代器。它也是隨時經雲建立一台專用的 VM,之後就可以經瀏覽器進行開發。 一切看來都很好,所有東西都可以在 VM / docker 中進行。如果你的 VM / docker,可以有齊所有除錯工具,應該就真萬能了。現實就是不太美好,因為雲上的 VM ,docker 中的容器,主要都是沒圖形介面的。如果你想要利用的除錯工具,例如 chrome,你就未必可以順利在 headless VM / docker conatiner 中安裝了。很多除錯工具,要麼就需要圖形介面,要麼就要有條件連到本地硬碟,所以筆者就 code server 本身,真的沒有太多解法。 Web App 開發,回到原始的基本步 - Visual Studio Code 回到原始的基本步,本地Visual Studio Code + VM / docker ,就好好地可以利用本地的 chrome 等進行 NodeJs 的除錯。它就跟本地Visual Studio Code + 本地開發類似,本地能用的 chrome,可以經過 vscode 連到 VM / docker 內,只要Remote Development 插件就可以了。筆者測試過,真的很簡單,vscode連線後,會在你的VM / docker 內,安裝一個很細的 client。然後其他事就像本地開發一樣了。Remote Development 除了用自己的VM外,官方還稱它可以連上github codespaces。筆者就未有詳細測試,有興趣的朋友可以建立一個codespaces看看。 雖然 Visual Studio Code 並沒有保證完整地解決所有問題,但至少它提供了一個橋樑可以作為接口開發。coding anywhere 還是有條件實現,只是我們的客戶端並不如一開始的單純,只少要有一個完整的桌面電腦環境OS ,可以做到 port forward,做一些簡單的對接。只是單純的移動端 Web 界面,就未能夠做到那些複雜的跨機轉譯。

比 Java Mail 更簡單的 Spring boot email
科技新知
MacauYeah・2025-10-24

使用 Spring boot 對接 SMTP gateway 發 email ,相對是容易的。 基本上,它就是會使用自建的 org.springframework.mail.javamail.* , 對接 javax.mail.* / jakarta.mail.* 以前的所有設定值 ,都可以經 spring.mail.properties.* 傳入 例如 spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.ssl.enable=true spring.mail.properties.mail.smtp.socketFactory.port=465 就等於過去 java.util.Properties props = new java.util.Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.ssl.enable", "true"); props.put("mail.smtp.socketFactory.port", "465"); 一個最簡單可以連去 google smtp 的簡易 code 如下 ### application.properties spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username= spring.mail.password= spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true // SpringBootEmailApplicationTests.java @SpringBootTest class SpringBootEmailApplicationTests { @Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String fromAddress; private static final Logger LOG = LoggerFactory.getLogger(SpringBootEmailApplicationTests.class); @Test void contextLoads() { try { SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setFrom(fromAddress); mailMessage.setTo("XXXXXXXX"); mailMessage.setText("this is backend email trigger for spring boot"); mailMessage.setSubject("spring boot test mail"); javaMailSender.send(mailMessage); } catch (Exception e) { LOG.error("Error while Sending Mail"); throw new RuntimeException(e); } } } github 原始碼 https://github.com/macauyeah/spring-boot-demo/tree/main/spring-boot-tutorial/spring-boot-email

Spring Web 異步 Api
科技新知
MacauYeah・2025-10-18

在設計網頁應用時,總會有某些功能,是特別消耗時間的,例如我們的應用要提供報表,或長時間搜索。如果,我們的 Web Api 的連結,要強制客戶端等待結果,那麼中途斷線需要重做的機會就變得很高,客戶端的體驗一定不太好。 面對這些情況,我們最好就把原本一個 API 功能分為三個 API 去做。 工作生成 API 查詢狀態 API 查詢結果 API 如果大家有信心,可以把2和3混合在一起,對於客戶端,也是一件好事。不過,2,3 因為回傳的結構可能不一樣,分開處理,程式碼會更易讀。 以下,筆者就以一個模擬報表生成的應用,去解釋如何設計可以即時回傳的 API。 source code: spring-boot-web-api-async ReportController.java 詳細解析 假設我們有一個 ReportController,它負責處理與報告生成相關的 HTTP 請求,它提供三個核心 API 端點。 啟動報告生成端點 @PostMapping("/reportJob/create") public ResponseEntity createJob() { String uuid = String.format("%d_%s", (new Date()).getTime(), UUID.randomUUID().toString()); CompletableFuture.runAsync(() -> { try { orderStatus.put(uuid, PROCESSING); Thread.sleep(10000); // 10-second simulated delay reportService.genAndSaveReport(uuid); orderStatus.put(uuid, COMPLETED); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); return ResponseEntity .accepted() .header(HttpHeaders.LOCATION, "/reportJob/status/" + uuid) .body(Map.of("uuid", uuid, "status api", "/api/reportJob/status/" + uuid, "download api", "/api/reportJob/download/" + uuid)); } 運作原理: 立即生成唯一的 uuid 來標識這次任務 在 CompletableFuture.runAsync 運行長時間的操作。 API 本身即時回傳了 HTTP 202 (Accepted) 狀態,告訴客戶端請求已被接受但尚未完成 在回傳的結果中,還有提示可以查詢狀態和查詢結果的API。 這種設計避免了 HTTP Gateway Timeout,因為回應是即時的 。 檢查進度端點 @GetMapping("/reportJob/status/{uuid}") public ResponseEntity getStatus(@PathVariable("uuid") String uuid) { String status = orderStatus.get(uuid); if (status == null) return ResponseEntity.notFound().build(); if (COMPLETED.equals(status)) { // return ResponseEntity.status(HttpStatus.SEE_OTHER) return ResponseEntity.ok() .header(HttpHeaders.LOCATION, "/api/reportJob/download/" + uuid) .body(Map.of("status", COMPLETED)); } return ResponseEntity.status(HttpStatus.ACCEPTED) .body(Map.of("status", PROCESSING)); } } 單純以 map orderStatus.get(uuid) 查看狀態結果。這個map 必需是多線程下使用還是安全的 (ConcurrentHashMap)。 下載結果端點 @GetMapping("reportJob/download/{uuid}") public ResponseEntity download(@PathVariable("uuid") String uuid) { String status = orderStatus.get(uuid); if (status == null || !COMPLETED.equals(status)) { return ResponseEntity.notFound().build(); } else { // 下載檔案 } } } 如果大家並不計較是否需要重做失敗的請求,這個例子已經可以簡單地達到即時異步回傳的效果。如果大家還需求考慮請求是否有效完成,就需要用到 message queue 或其他 job server ,這就不是同一個網頁應用的操作範圍。 Reference source code: spring-boot-web-api-async Building a Long-Running Async REST API in Spring Boot (with 202 + 303 Status Codes)

高達模型,不噴塗還有什麼選擇?
手機‧電玩
MacauYeah・2025-10-09

之前筆者就高達模型中,籠統地比較不同的1/144比例產品。現在筆者也正式入手更多不同的系列,看看有沒有哪些適合不同需求的玩家。 SD系列:Mobile Join Gundam 明盒盒蛋,拼裝模型,但不需要剪鉗也可以隨手取件。要補色、滲線或進行一步加工制作。優點是可動性高,官方有提供補色貼紙,但距離足夠分色,還是有一段距離。 筆者並不在意它的分色不完美,以這個不足百元的商品來講,可動性足夠讓筆者快樂一個下午。 SD系列:FW Gundam Converge 明盒盒蛋,有少量件需要拼裝,大部份都已經有預塗裝。因為制作比較精緻,人氣商品比MJG會再貴一點。但可動度就很低,幾乎只有手臂、手碗、頭的平轉,腿腰不可動。筆者購入這個系列的原因,主要是當時已經無力再自行塗裝,把它當完成品直接買回來當擺設,也是一番享受。 兩者二選一的話,筆者更偏好MJG,因為有可動性,強行把玩也勉強可玩,一起擺場景也更耐玩。而FW的話,它的優勢反而是選擇多,方便整個系列收藏。因為有塗裝,而且有少部份可動,想拍照也不是不可以,耐玩度不高就是了。 FW就筆者跟朋友交流,在另一個系列MSE的出現下,FW似乎不太受樂。不過筆者未入手過MSE,難以作比較。但外觀上,似是MJG的另一個版本,但沒有骨架。