搜尋

搜尋結果

澳門友誼大橋“捉超速”,2個超速偵測系統預測你的動向!
其他
澳門生活圈・2019-06-21

在日常生活當中 我們在駕駛車輛的時候 偶爾會為了趕時間而不時 超出了規定該路段限定的時速 一腳油門的事情 在駕駛車輛當中 我們並沒有覺得車輛已經超速 但看了看速表時,的確超出了 新偵測設備早已更新 2018年2月22號,設置於友誼大橋的超速偵測系統,已完成改動及更換新偵測設備,新系統的偵測點設置於橋梁及連接橋梁之公共道路已投入使用。 據統計,該系統自投入運作後的首2周,共錄得超速個案超過1,000宗,占同期本澳總超速個案70%。 治安警察局將根據有關資料經分析後向違例者予以處罰。 綜合偵測系統將啟用 交通事務局表示,為加強保障道路使用者的安全,由7月1號起,友誼大橋2個超速偵測系統及7個路口綜合偵測系統將同步啟用。 同一路段設2個相鄰監控點 本月起,交通事務局與治安警察局已試行友誼大橋近友誼大馬路引橋入口與友誼大橋近氹仔端出口路段(澳門往氹仔方向)的區間測速監控,以采集數據及讓駕駛者提前適應有關裝置; 隨著試行情況理想,該區間測速監控連同位於友誼大橋近水塘路段(氹仔往澳門方向)新增的定點測速系統,將於7月1日(周一)起投入運作; 屆時友誼大橋及連接橋梁的道路合共設有19套超速偵測監控設備。 局方稱,定點測速是指車輛經過某一個地點的某一個瞬間的車速,可反映車輛當下的速度; 區間測速則是指在同一路段上,設置2個相鄰監控點,基於車輛通過前以便計算車輛在該路段上的平均行駛速度,並依據該後2個點之行路段上限速標准,判定車輛有否超速。 超速amp;事故 治安警察局交通廳警司梁華治表示,今年1至5月警方檢控超速6,517宗,交通事故5,000多宗,橋梁發生交通意外有227宗。 另外,為進一步監察車輛沖紅燈及超速駕駛等違法行為,交通事務局早前已於14個交通交界點安裝路口綜合偵測系統,繼首階段7個路口綜合偵測系統已於4月投入運作,餘下7個系統亦將於7月1號周一啟用。 道路限速規定 交通事務局呼籲駕駛者留意有關安排,治安警察局將於有關系統正式啟用後才透過系統執法。 據《嘉樂庇大橋、友誼大橋及引橋規章》及《道路交通規章》相關規定: 友誼大橋的最高限速為80公裏小時, 引橋為40公裏小時; 而沒特別標示限速的道路, 各類車輛最高限速則為︰ 重型摩托車及輕型汽車60公裏小時、 重型汽車50公裏小時、 輕型摩托車40公裏小時。 違規處罰 按照現行相關法例,駕駛者違反速度限制可被科處罰金600元至40,000元,並可被科處停牌; 違反交通訊號燈之停車義務可被科處罰金1,000元至10,000元,並可被科處停牌。 交通事務局與治安警察局會密切留意該系統的運作情況,同時提醒駕駛者應遵守行車速度限制及交通燈訊號,以免受罰及發生意外。 相關偵測系統也即將啟用啦 駕駛者亦須遵守交通法規 避免受到相關法例的懲罰 在友誼大橋中 亦曾出現多宗 交通意外傷亡事例 所以,駕駛者需安全駕駛 車行萬裏路 走好每一步 十次肇事九次快 快車樂一時,禍起痛一生 飛速行車樂一時 一朝落馬毀終生 珍惜生命 遵章出行 遵守交通法規, 從小做起,從我做起 素材來源:交通事務局、網絡 圖片來源:力報、交通事務局、表情包 如有侵權,請聯系我們刪除 版權屬於原作者 編輯撰寫:小嚕

Docker 中的非管理員用户 Docker non-root user
科技新知
MacauYeah・2025-03-14

Container USER為何重要 在制作Docker Image的過程中,有時會接觸到 USER 這個設定。這事關到最後的 Docker Container內部運行的那個 user 到底會有什麼權限。大家也要知道,Docker Container 其實也只是一個 Linux 上的程序,也就是如果Container內權限過大,也有機會從 Container 內部存取到 Host上的資料。 一般情況下,Docker Image 預設的 USER 就是 root,最基礎的base image都是一樣。而我們想換,其實也相當簡單,就像Linux上起User一樣,只要經指令RUN adduser xxx 或RUN useradd xxx 也可以在 Docker Image 中創建帳號和 home 資料夾,之後就隨時經USER xxx來切換 實際上是不是這麼簡單 如果你將要Container中執行的程序,是一個binary,平常你在Linux中也是以 nonroot 方式執行,那麼是的,就是那麼簡單。例如你執行系統中的java, node, python,原本在Linux中就已經是誰都可以,那麼你的docker container 也應該沒有難度。 但如果原本的安裝包,預設是由system service來啟動,我們就要花點力氣,看看那個service是怎樣呼叫binary的,然後就一步一步模擬它的做法。例如筆者有打包的codeserver,預設是system service啟動,但它也有提共binary的執行方法,安定好home資料夾後,我們也可以手動啟動。 泛生之檔案權限問題 上述binary的情境之所以簡單,是因為大部份情況下,我們都只對於container 內部運行考慮即可,因為預設投產情況下的運作模式,都是隨時起、隨時刪、隨時砍掉重練,只要container內部運作可以自給自足,就可以了。Docker Swarm的運作也是如此,所以它不預期有的持久化資料權限的問題。 而持久化資料權限的問題,其實早在單個Linux伺服器就已經存在。同一個伺服器中,不同process就有不同的UID,當他們需要共同讀寫某些檔案,就會設定多人權限。同理,當多個Container要共同檔案,也是同樣問題。在討論共享檔案之前,我們先看看預設 Docker Storage Mount 會給我們什麼權限。 如果是bind mount,bind mount的權限預設會是Host內的檔案或者資料夾的權限。 如果Host是root,container內是nonroot,container有機會無法讀寫bind mount內的檔案。 留意權限設置就可以解決問題 如果Host是nonroot,但container 內是root,從container內生成的檔案,Host的nonroot user就無法使用。 Host是nonroot的話就一定無解,Host至少有sudo權限,臨時變成管理員,去修正問題。 如果host和container也是nonroot,但UID不夾,其實也不能交換使用。 跟上述一樣,最後要靠sudo來解決問題。 如果host和container也是root,就沒有權限問題,但就有安全性的風險。 如果是volume mount,就還是看看 mount path 是docker image layer中現有的 path還是新起的path 大部份手動建立的named volume都是root 經docker compose起的named volume滿足以下條件的話,將會是nonroot。 docker image 中的已有該path存在。 named volume未存在,docker compose會把對應path的內容在初次建立時抄到named volume 中。 例如ubuntu24.04中的homeubuntu,存在於docker image中,它的擁有者就是UID 1000,我們經docker compose HOME_VOLUMEhomeubuntu,在HOME_VOLUME建立時,就會是UID 1000。但如果是 NOT_EXISTShomeubuntusomethingNotExists,那麼NOT_EXISTS建立時,也會是root 上述討論的Storage mount是集中在單機情況下,使用HOST OS的本地儲存。若現在的場境是多機共享的share storage,就會更麻煩,還要看看那個share storage本身的屬性。例如常見的Linux NFS,其實有指定的權限,跟NFS的Login權限有關,如果你的process本身對檔案權限很敏感,就請先不要挑戰NFS例如postgresql。 Rootless mode Rootless 模式 Rootless 模式指的是在Host中,執行Container的使用者,不需要是管理員,筆者就常用於開發環境中。投產環境中反而沒有聽過這樣的討論,因為投產環境很少可以讓非管理員去執行這麼重要的環境管理。 雖然只是開發環境,但這像前述的bind mount討論中,如果Host是nonroot,但container 內是root,又或是兩者nonroot,但UID不夾,也會出現權限問題。無腦的將host user加入docker group,只可以讓非管理員可以運行docker,但解決不了權限問題。 真正有條件解決的,可能就會向linux subgroup的方式發展。暫時筆者用得比較順的rootless mode,可以無腦用的,不是docker,是podman。有興趣的朋友可以經podman官網看看教學,它給筆者的感覺就像是自動轉換UID。 podman rootless mode 想看更多 筆者已經將過去的文章重新整理成gitbook,有興趣睇更多的讀者,可以來筆者的gitbook再翻一翻 httpsmacauyeah.github.ioAProgrammerPrepares

你開始寫 Spring Boot 測試案例了嗎?
科技新知
MacauYeah・2025-11-29

雖然筆者過往做 spring boot framework 教學中,都有滲入一些測試用例。筆者也曾經困惑了很長一段時間,所以就獨立開一個主題,聊一下筆者在實務上對spring boot test 的理解。 測試案例究竟測試什麼? 測試用例 test case 是確保你的程式碼正確性與穩定性的重要步驟,但在 framework 下,並不是所有功能都很容易寫成測試。所以在討論 framework 測試之前,釐清測試的本質。 function input business logic function output 這意味著我們輸入某些資料(input),然後經過業務邏輯(business logic)的處理,最後產生結果輸出(output)。 我們的測試目標,其實就是確保業務邏輯正確。而我們的手段就是經檢查概定的輸入資料,核對輸出結果。 那麼只要我們可以生成輸入資料,就一定可以檢查輸出結果了吧?其實不是的,因為實務上的輸入和輸出沒有這麼簡單。筆者常接觸到的輸入輸出如下 輸入 function 輸入參數 系統狀態資料,例如:資料庫狀態、外部API結果。 輸出 function 輸出參數 寫入系統(影響到)的資料,例如:資料庫狀態、使用外部API時的輸入參數。 總之就是考慮了狀態機 state machine 的問題,每個狀態外部輸入都是一個測試用例,然後核對狀態機去了下一個什麼狀態。 言下之意,我們就是暴力地生成輸入參數和模擬狀態資料,道理上就是可以進行測試。 Spring boot web framework 中,我們又會測試什麼? function input business logic function output在Spring boot web就變成如下 controller request business logic controller response在 Spring Boot test 中,我們可以用模擬的 MVC MockMvc 測試來驗證 controller 的行為。不過,其實進入 controller 前經過很多系統轉換,而這些道理上跟Framework的技術大相關,與業務邏輯小相關。所以為免折磨自己,可以將業務邏輯單獨封裝成服務(service)。之後直接測試服務 ,易寫也易讀。 controller request service input business logic service output controller response道理上 controller 能做的業務邏輯,服務 service 都可以無腦重現。這樣還可以重用服務,減少測試的數量。 如何實現輸入? 直接 new Object。大部份的情況下,因為業務是自己編寫的,應該都可以直接 new 出來。 經 json 檔讀入。如果輸入的參數量太多,逐個經 java new 是很耗時的,我們可以經 json 反序列化變成 Object。但這亦只限於自己可以操作改寫的類。 Mockito 模擬那些無法簡易經 new 或 json 反序列化的 Object。例如:spring security authentication object 我們在使用時,其實只看到 interface。我們難似自己實現一個可以反序列化的類,那麼我們可以使用 Mockito 來模擬這些資料。一些外部API的結果,我們也可以用使 Mockito 來模擬。 什麼情況下不進行測試? 有些情況下,我們可能選擇不對某些功能進行測試,原因可能包括對功能的了解不足或是單純的懶惰。以下是一些例子: 僅進行配置的Function:如果你的 Function 只是在 Framework 中填寫配置,而且你並不太了解它的運作原理,可能就不需要進行測試了。例如,Spring boot web 中,需要大家配置一個SecurityFilterChain Object,它要求大家將 HttpSecurity 轉換為 SecurityFilterChain 。因為輸入的 HttpSecurity 是系統固定的參數,我們亦沒有檢查它的狀態。這種情況下,它的輸入及輸出,其實我們都沒有真正理解。我們硬測試的話,測試功能可能只流於表面。若我們真的要做測試,也是經過MockMvc進行端到端測試(endtoend testing),測試它在事後的影響範圍。 單純的框架功能:例如資料庫的儲存庫介面(repository interface),雖然是在框架下生成的,對於自己手動調整的部份功能,筆者通常亦不會進行單獨測試,通常都會搭配業務邏輯一起進行。它可以使用 Mockito 進行模擬測試,或用測試環境的真實資料庫進行測試。 面對的挑戰 總括來講,筆者盡可能地把測試用例限定在業務邏輯中,就可以大大地降低寫測試的技術難度。但筆者還是有些問題並未完美解決。 測試用例的數量可能很多,因此共用與維護變得相當困難。逐個用例獨立編寫輸入也是很累的。對於 Mockito 的使用,筆者還是可免則免。因為要逐個功能模擬,編寫量就指數提高,這亦難似配合外部變化。一般來說,能優先使用測試環境或者 Docker 來模擬環境的,就盡量用。 離線開發、離線測試。系統依懶的外部功能越多,想做單機開發的難度就越高。即使前述有 Docker 測試,對於持續整合(CI)來講也是有一定難度。那麼這時,Mockito 就是一個可取的選擇。但這又回到編寫量及難以偵測外部變化問題。 希望這篇文章能幫助你更好地理解測試案例的編寫方向,並在Spring boot web開發中加入你自己的測試!

[以啡會友] 隱藏於鬧市中的咖啡店 — Moss Coffee House
澳城餐飲
君尋・2021-02-23

隱藏在鬧市中的咖啡店Moss Coffee House,試業不久便因其日系簡約裝修風引起不少關注。店舖位置對於不熟悉三盞燈區的居民來說非常「隔涉」,首先在生果街中央找到一條小巷,盡頭是一間小型超市,而在巷中原來還有一條小巷,巷的盡頭就是Moss Coffee House。 店舖仍處於試業階段,加上很不巧筆者到訪時門外停泊了幾部電單車,因此筆者拍攝的店舖正面相片只能以不堪來形容。而門外左側大玻璃的位置,據店長說將來會種植更多綠色植物,讓店舖內的視野更舒適。店舖內空間感十足,不但因為佔地面積廣,高樓底和近乎落地玻璃的設計更加強這種感覺。一般開在市區的咖啡店,筆者的印象都是狹小和緊密,而Moss Coffee House則顛覆筆者對「市區的咖啡店」的想像。 飲品選擇方面,都是以咖啡為主,非咖啡類的只有兩款熱茶。不過據店長所說,Moss Coffee House主打的是手沖咖啡,而menu上手沖一欄之下還有三種口味可以選擇,原因是讓初次接觸手沖咖啡的朋友能選擇他們喜好的口味。而已經習慣喝手沖的朋友,就可以直接選咖啡豆。店長補充道,店舖暫時有提供幾款咖啡豆,包括非洲的埃塞俄比亞、肯亞,以及中美洲的危地馬拉等。將來仍會繼會引入更多咖啡豆品種以滿足不同需求的客人。 筆者對手沖咖啡的認識亦不深,所以點了一杯Iced Latte,在此讓我這位門外漢簡單分享幾句。店長有特地問我是否要加糖,但筆者一向不喜歡太甜的飲品,所以我是拒絕了他的建議,但當咖啡入口後,依然有一種天然的果甜味,以及突出的烘焙味。相信下次筆者再光顧時,會試一下他們的手沖咖啡系列。 店舖亦設有少許食物給客人享用。現階段只有少量甜品,但店長計劃將來引入一些日式的輕食,例如泡飯等,讓客人在Moss Coffee House品嚐咖啡的同時,亦可以滿足食慾。正式營業和增加更多食物選擇後,應是高士德、新橋區的朋友,在假日與三五知已促膝長談的好地方。 關於 以啡會友 雖然不懂喝咖啡但卻喜歡到咖啡店,本欄目將分享筆者喜歡的澳門咖啡店。 (備註:筆者僅從自費用餐者的角度作出評價,上述內容只代表本人極為主觀的立場)

「澳門銀河」攜手Jaguar 揭幕全新系列F-Pace
汽車
LifeMag Editor・2016-08-04

「澳門銀河trade;」衣香鬢影,眾多賓客齊聚城中五星級旗艦娛樂場地【紅伶】門前,等待英倫名車品牌Jaguar首款跨類型SUV跑車正式亮相。活力四射的舞者跟隨強勁音樂節奏揭開Jaguar FPace的神秘面紗,隨后宏益汽車有限公司執行董事鄭穎堯先生將新車鑰匙交到澳門第一位Jaguar FPace的車主手中,並與銀河娛樂集團首席營運總監祁嘉杰先生、銀河娛樂集團款客事務高級副總裁林展安先生及英倫汽車有限公司分銷及市場部總經理胡啟泰先生一同舉杯慶祝Jaguar FPace正式登陸濠江。 沿襲品牌經典跑車系列FType的設計理念,Jaguar FPace用上全新家族識別進氣格柵 ,與最新設計元素 「Coupelike」側窗線條, 完美塑造張力十足的跑車輪廓。加上全球首創智能Activity Key,將現代精英人士推崇的運動生活方式具象化。以防水防震手帶代替電子車鑰匙,這款市場首創的可攜帶設備減省了鑰匙對運動的影響,對於熱愛運動尤其是喜歡攀岩潛水等極限運動的人士來講可算是一大創舉。 「澳門銀河」作為亞洲區內首屈一指的綜合渡假城,一直是城中備受矚目的時尚活動熱門地標。渡假城致力為賓客提供多元化世界級的娛樂時尚精彩體驗,多次攜手國際知名品牌舉辦澳門獨家的品牌活動,留下眾多難忘而璀璨的閃亮瞬間。

純素育兒也健康
生活在我城
文創遊樂場 // 米米 Esther Lim・2020-06-04

90後媽媽Sally Lee吃素已經5年了,從孕期開始就更嚴格地進行純素飲食,連肉湯也不喝了。一開始素食的時候也會擔心營養搭配問題,像很多人一樣對素食的理解可能就是豆腐和青菜,不知道能吃什麼;甚至為了保證每天的蛋白質營養來源,強迫自己每天早上都飲一大碗雜豆豆漿補充蛋白質,材料亂加一通,覺得越多越好,所以味道不好也照喝,因為不希望出現lsquo;營養不良rsquo;的情況出現,那時候簡單總結了ldquo;穀類+豆類=完全蛋白質rdquo;。 直到Sally開始做研究生畢業論文,做了一個關於食物的論文題目「飲水思源」,我開始一口氣看了素食者必看影片清單上面的影片,包括「地球公民」、「奶牛的陰謀」、「Food, Inc.」等紀錄片之後,才震驚地發現原來素食原來於環保有關,而且畜牧業原來是地球溫室效應最大的元兇,其溫室氣體的排放量居然比全世界所有交通工具加起來的排放更多!而純素飲食,原來除了健康,還是最低碳環保的一種飲食習慣,因為我們直接攝取了植物,減少了一大串飼養動物帶來的二級食物消耗,還能節約地球上大部分的水資源,例如生產一個牛肉漢堡的用水量,已經多到令人難以想象,足足是一個人兩個月左右淋浴洗澡水的用量! 近年來,全球氣溫暖化帶來的反常天氣實在是有目共睹。她記得懷孕第一胎時候有幾個月時間都是類似霧霾的天氣,不適宜出門。陸續出現各種極端氣候,像澳門這種南方天氣也出現了落雪,珠海也落冰雹,最令澳門人印象深刻的「颱風天鴿」, 還記得那天颱風,她像往年平安無恙地度過了的無數場颱風一樣,邊和中學同學們在微信群討論颱風最新消息。突然,抱著仔仔在房間觀看窗外情況的丈夫感到窗戶震動便馬上抱bb出房,她還不以為然覺得丈夫緊張得多餘,轉頭又繼續背著窗戶玩微信。 誰知道她丈夫警告她才不到十秒鐘,突然房間的窗戶玻璃碎落了她一身,窗戶居然破了才趕緊逃命; 滿身的玻璃碎沒有重大傷口已經是萬幸。 Sally深知全球暖化的元兇是人類的飲食結構,而改變飲食結構就能輕易改變世界,更堅定了飲食理念。她開始努力學習素食營養搭配,認識更多的食材,還開始會告訴家人和朋友素食與環保之間的聯繫。很多科學家已經在研究怎麼把人類送上火星,就是因為預測到地球很快便會被人類破壞到不再適合居住和生存。但如果改變一下飲食結構,就能大大減緩或改善全球暖化的一系列天災人禍,為什麼要捨近求遠呢? 其實純素素食也很簡單,還得多吃豆類,堅果類,菌菇海帶類,還有超級食物例如藜麥和鷹嘴豆等,發酵食物例如天貝、納豆、腐乳、營養酵母等補充維生素b12 (因現代農藥化肥的生產破壞了土壤的b12, 動物飼料裡也必須添加b12確保營養),或多吃有機食品,素食就能輕易滿足人體的營養需要,何樂而不為? 圖文來源Sally Lee

全城足球狂熱,2018世界盃足球賽,賽程一覧表
節慶盛事
Cheers!・2018-06-02

全球矚目的2018世界盃將會在6月14日2300於俄羅斯展開序幕,各國將會上演連場激戰,你又怎麼可以錯過呢?快來關注世界盃賽程一覧吧! A組:俄羅斯,沙烏地阿拉伯,埃及,烏拉圭 日期 時間 賽事 6月14日四 2300 俄羅斯 沙烏地 6月15日五 2000 埃及 烏拉圭 6月20日三 200 俄羅斯 埃及 6月20日三 2300 烏拉圭 沙烏地 6月25日一 2200 沙烏地 埃及 6月25日一 2300 烏拉圭 俄羅斯 B組:葡萄牙,西班牙,摩洛哥,伊朗 日期 時間 賽事 6月15日五 2300 摩洛哥 伊朗 6月16日六 200 葡萄牙 西班牙 6月20日三 2000 葡萄牙 摩洛哥 6月21日四 200 伊朗 西班牙 6月26日二 200 西班牙 摩洛哥 6月26日二 200 伊朗 葡萄牙 C組:法國,澳大利亞,祕魯,丹麥 日期 時間 賽事 6月16日六 1800 法國 澳洲 6月17日日 0000 祕魯 丹麥 6月21日四 2000 丹麥 澳洲 6月21日四 2300 法國 祕魯 6月26日二 2200 丹麥 法國 6月26日二 2200 澳洲 祕魯 D組:阿根廷,冰島,克羅埃西亞,奈及利亞 日期 時間 賽事 6月16日六 2100 阿根廷 冰島 6月17日日 300 克羅埃西亞 奈及利亞 6月22日五 200 阿根廷 克羅埃西亞 6月22日五 2300 奈及利亞 冰島 6月27日三 200 奈及利亞 阿根廷 6月27日三 200 冰島 克羅埃西亞 E組:巴西,瑞士,哥斯大黎加,塞爾維亞 日期 時間 賽事 6月17日日 2000 哥斯大黎加 塞爾維亞 6月18日一 200 ​ 巴西 瑞士 6月22日五 2000 ​ 巴西 哥斯大黎加 6月23日六 200 塞爾維亞 瑞士 6月28日四 200 塞爾維亞 ​ 巴西 6月28日四 200 瑞士 哥斯大黎加 F組德國,墨西哥,瑞典,南韓 日期 時間 賽事 6月17日日 2300 德國 墨西哥 6月18日一 2000 瑞典 南韓 6月23日六 2300 德國 瑞典 6月24日日 0200 南韓 墨西哥 6月27日三 2200 南韓 德國 6月28日四 2200 墨西哥 瑞典 G組:比利時,巴拿馬,突尼西亞,英格蘭 日期 時間 賽事 6月18日一 2300 比利時 巴拿馬 6月19日二 200 突尼西亞 英格蘭 6月23日六 2000 比利時 突尼西亞 6月24日日 2000 英格蘭 巴拿馬 6月28日五 200 英格蘭 比利時 6月28日五 200 巴拿馬 突尼西亞 H組波蘭,塞內加爾,哥倫比亞,日本 日期 時間 賽事 6月19日二 2000 哥倫比亞 日本 6月19日二 2300 波蘭 塞內加爾 6月25日一 2300 日本 塞內加爾 6月25日一 200 波蘭 哥倫比亞 6月28日五 2200 日本 波蘭 6月28日五 2300 塞內加爾 哥倫比亞