搜尋

搜尋結果

陳康妮論推動澳門閱讀重要性
文化創意
陳康妮・2024-10-16

2024年9月7日 星報 陳康妮論推動澳門閱讀重要性 在當今這個資訊爆炸的時代,閱讀的重要性愈發凸顯。隨著科技的迅猛發展,人們的生活節奏日益加快,許多人忙於工作和生活,往往忽視了閱讀的樂趣和價值。陳康妮,澳門著名的教育家,深知閱讀對於提升個人素養、開闊視野及增強思維能力的巨大潛力。她堅信,閱讀不僅能夠幫助人們獲得知識,還能豐富心靈,促進情感的交流與理解。因此,她發起了「愛middot;生命」讀書會,旨在喚起全澳市民對閱讀的熱愛,鼓勵大家通過書籍來探索世界、理解自我。陳女士在多次活動中提到:「閱讀是一種心靈的旅行,它讓我們得以在不同的時空中,與思想的巨人對話,並從中汲取智慧的養分。」這種認識不僅反映了她對閱讀的熱情,也顯示了她對於社會文化發展的深思熟慮。 「愛middot;生命」讀書會的成立,正是基於這樣的理念。該讀書會選擇了每月一次的聚會形式,讓參與者能夠在輕鬆的氛圍中自由分享自己的閱讀感受和心得體會。這不僅增強了參與者之間的互動,更促進了思想的交流和碰撞。在每次的讀書會上,參與者可以選擇自己感興趣的書籍,這種多元化的選擇使得每位參與者都能找到適合自己的閱讀材料,無論是經典文學還是現代科學,心理學還是哲學,皆可成為討論的主題。這樣的設計不僅滿足了不同年齡層和背景的參與者的需求,也讓每次的會議都充滿了新鮮感和活力。通過這種形式,陳康妮成功地將閱讀變成了一種社交活動,讓更多的人在交流中獲得啟發,從而激發了他們的閱讀熱情。 社區的支持與參與;「愛middot;生命」讀書會的成功,離不開社區的廣泛支持。自讀書會成立以來,澳門的多個社區組織和教育機構紛紛加入其中,為讀書會提供了場地、資源和人力支持。許多學校和圖書館也積極參與,不僅為讀書會提供場地,還協助推廣相關活動。這種全社會的共同參與,讓「愛middot;生命」讀書會不僅成為一個單純的閱讀活動,更成為了社區文化生活的重要組成部分。陳康妮在一次社區會議上表示:「這是一個全社會共同參與的項目,我們希望通過這種方式,讓閱讀成為每個人生活的一部分。」她的話語不僅表達了對社區支持的感激,更體現了她希望將閱讀文化深入人心的願景。 未來的展望與可持續發展;展望未來,陳康妮對「愛middot;生命」讀書會充滿期待。她透露,讀書會將會推出更多的活動,包括邀請知名作家和學者進行講座,舉辦讀書馬拉松等。這些新活動將不僅限於傳統的讀書分享,還將探索更多元的形式,讓參與者能夠在不同的情境中體驗閱讀的樂趣。陳女士希望通過這些活動,進一步提升市民的閱讀興趣,營造一個濃厚的閱讀氛圍,讓閱讀真正成為每個人生活的一部分。她強調:「我們希望每一個人都能在書籍中找到屬於自己的故事,獲得智慧和力量,從而更好地面對生活中的挑戰。」此外,陳康妮也計劃在未來加強與其他城市和國家的讀書會的交流與合作,分享成功的經驗和模式,讓「愛middot;生命」讀書會成為一個具有國際視野的閱讀平台。她希望通過這些國際交流,讓澳門的閱讀文化得以更廣泛的傳播,並吸引來自不同背景的人士共同參與,形成多元化的閱讀社群。隨著讀書會的持續發展,陳女士相信,這個讀書會將不斷壯大,成為澳門文化生活中不可或缺的一部分,為更多人帶來閱讀的樂趣和心靈的滋養。

[天川饕客] 匯聚中西美食的休閒餐廳 — 喜公館
澳城餐飲
君尋・2022-04-22

這次要介紹的是位於倫敦人喜來登酒店 大堂的餐廳喜公館 The Conservatory,筆者曾兩次與友人到此進食午膳。從外觀上看,可以發現喜公館的裝修風格並不劃一,原來是因為一間餐廳被劃分為三大區域,提供不同主題的餐點和用餐環境,分別是「叄」、「餐」和甜品店 「The Sweet Shop」。(坐在任一區域都可享受全種類的食物。) 這三個區域分別代表不同含意。「叄」是提供西式食物,以及多樣化的飲品的區域,由咖啡銘茶,到啤酒、葡萄酒都一應俱全。整個區域充滿英國殖民地時期的色彩,由木櫃、餐檯和椅子都用心營造出懷舊的英倫風休閒氣氛。「餐」的意思係代表提供早午晚三餐,有廣東粥麵和餃子,亦唔少得澳門本地的特式食物。「TheSweetShop」的設計是模仿英國街頭上的傳統糖果店,提供各款特式糖果甜點,門外亦放置扭蛋機和雪糕車,可謂是喜公館的打卡點之一。另外「茶屋」是專門提供茶飲的地方,不但於下午茶時段提供各式各樣的茶飲,客人也可以點選飲料並外帶離開。 至於筆者在這裡享用過的食物包括有: 餐前麵包 可分成四塊,而且有稍為加熱。外型看上去有點像布里歐麵包,但吃下去發現應該不是。 蒜香雜錦海鮮 配 葡式蝦醬湯底 amp; 菠菜刀切麵 自選配搭的一款食物。這次選的湯底很濃很入味,而菠菜刀切麵有不錯的掛湯力,兩者合一意外地配搭。海鮮則相當豐富足料,對得住價錢有餘。 「餐」滋味三式 以縮細版的澳門特式雲吞蝦子麵、紅燒牛筋腩麵和四川擔擔麵,三款麵食組成。不但賣相特別,而且一次過可以享用三款口味不同的食物,各有千秋,絕對滿足味蕾的不同需求。唯獨份量未必滿足男性的需求。 豬肉蘑菇水餃 水餃皮表現不錯,豬肉亦有應有的鮮味。但有個小問題是很快會冷掉,上碟後要趕快吃完。 琵琶蝦意式燴飯 用料都算充足,意式燴飯味道濃郁有奶香,而且不會過膩,易入口。但整體份量極小,即俗語所講的「CP值低」。 MANCINI 短管意粉、炒炖豬頭肉 意粉上還有一隻半熟的蛋黃,推薦攪拌後再進食意粉。豬肉砌成粒狀,但口感上有點像中式爉味,而且非常煙韌,與爽口的意粉有點矛盾。 抹茶紅豆包 麵包鬆軟而入口,抹茶味不算強烈,紅豆甘甜不膩,兩者一起吃感覺更佳。價錢平易近人,即俗語所說的「CP值高」。 法式可麗露 不太合格的甜點。表面相當硬,內裡過甜,而且是冷冰冰的。 個人認為「喜公館」有如豪華升級版的Lobby Lounge ,任何時間來到都可以享用到不同時段的食物,要早餐、午餐、下午茶到晚餐都一應俱全。而且種類亦涵蓋中西方的食物,並保有少量本地菜式,絕對到自己習慣吃的食物。但另一方面,價格亦是高級餐廳的級數,食物的味道確是水準之上,但在份量方面就未必能填滿大部分人的胃容量。 總括來說,要說特式和風味,餐廳的定位明顯不是針對本地客人。要講味道的,同等價錢亦有不少選擇。如果餐牌上沒太過吸引的食物,個人認為並不需要特地來到「喜公館」用餐,然而這只是作為午膳的情況。因餐廳亦有推出特式下午茶,晚飯時段也有海鮮拼盤提供,可能又會是另一種體驗也說不定。 餐廳:喜公館 地址︰澳門路氹倫敦人喜來登酒店大堂 電話︰853 8113 1200 營業時間︰全天候 網站:httpswww.theconservatorymacao.com 關於 天川饕客 本欄目將不定期分享筆者在澳門遇到的美食,不論是賭場酒店還是民間小店,只要是值得推薦的都有機會介紹給各位。 (備註:筆者僅從自費用餐者的角度作出評價,上述內容只代表本人極為主觀的立場) 更多關於澳門餐廳的心得: httpsppt.ccfNAd9x

Spring Boot 05 - 為 http json api 加入登入要求
科技新知
MacauYeah・2024-07-02

本節,我們將為之前的http服務,加入認證機制,只有在資料庫現存的用戶可以登入及訪問我們的json api。 下戴模版 慣例,我們用Spring Initializr Maven 下載模版,Dependency主要選擇 Spring Web Spring Boot DevTools Spring Security Controller 跟上節一樣,我們起一個Controller,為簡化測試,我們只做http GET api。 由於本blog對於Source Code的顯示不太友好,有需要看source code的,請到Github查看 srcmainjavaiogithubmacauyeahspringboottutorialspringbootwebapidatacontrollerHomeController.java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMappingquot;apiquot; public class HomeController @GetMappingquot;someRecorduuidquot; public Map readSomeRecord@PathVariable String uuid return Map.ofquot;retquot;, quot;your uuidquot; uuid; 準備我們的test case,但這次我們預期它應該要出現登入失敗的結果。 srctestjavaiogithubmacauyeahspringboottutorialspringbootwebapidatacontrollerHomeControllerTest.java @SpringBootTest @AutoConfigureMockMvc public class HomeControllerTest @Autowired private MockMvc mockMvc; @Test void testNoLogin throws Exception RequestBuilder requestBuilder = MockMvcRequestBuilders.getquot;apisomeRecord1234quot; .contentTypeMediaType.APPLICATION_JSON; this.mockMvc.performrequestBuilder .andExpectMockMvcResultMatchers.status.is4xxClientError .andExpectMockMvcResultMatchers.jsonPathquot;$.retquot;.doesNotExist .andDoMockMvcResultHandlers.print; 在我們執行上述的測試,test case 成功過了。我們的基本設定跟上一節其實沒有多大改動,為何現在http api會回傳狀態 401? 那是因為我們在依賴中加了,Spring Security,它配合了Spring Web,就會自動為所有api加入權限檢測。我們的測試中,沒有任何用戶登入,當然會出現 http 401。為了讓我們可以好好管理誰可以使用api,我們就來設定一定Security。 我們加一個WebSecurityConfig.java,暫時指定所有的訪問路徑都必需有USER權限,並且用 http basic的方式登入。 srcmainjavaiogithubmacauyeahspringboottutorialspringbootwebapidataconfigWebSecurityConfig.java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class WebSecurityConfig @Bean SecurityFilterChain securityFilterChainHttpSecurity http throws Exception http.authorizeHttpRequestsauthorizeHttpRequests gt; authorizeHttpRequests.requestMatchersquot;quot;.hasRolequot;USERquot;; 所有的訪問路徑都必需有USER權限 ; http.httpBasicCustomizer.withDefaults; 使用http basic作為登入認證的方式 return http.build; 上述例子,只是擋了沒有權限的人,我們還需要讓有登入身份的用戶可以成得取限User權限。 我們繼續修改,WebSecurityConfig,加入只在記憶體有效的InMemoryUser import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.provisioning.InMemoryUserDetailsManager; public class WebSecurityConfig .. @Bean public PasswordEncoder passwordEncoder return new BCryptPasswordEncoder; 我們的密碼不應該明文儲,比較保險,我們使用BCrypt演算法,為密碼做單向加密。 @Bean public UserDetailsService userDetailsService UserDetails user = User.withUsernamequot;adminquot; .passwordpasswordEncoder.encodequot;passquot; .rolesquot;USERquot;.build; 我們在記憶中體,加入一個測試用的User,它的名字為admin,密碼為pass,權限為User return new InMemoryUserDetailsManageruser; 然後加入新的測試,直接模擬Role。結果是通過的。 srctestjavaiogithubmacauyeahspringboottutorialspringbootwebapidatacontrollerHomeControllerTest.java @Test void testLoginWithRoles throws Exception RequestBuilder requestBuilder = MockMvcRequestBuilders.getquot;apisomeRecord1234quot; .contentTypeMediaType.APPLICATION_JSON.with SecurityMockMvcRequestPostProcessors.userquot;someonequot; .rolesquot;USERquot;, quot;ADMINquot;; 沒有使用密碼,只使用Role this.mockMvc.performrequestBuilder .andExpectMockMvcResultMatchers.status.is2xxSuccessful .andExpectMockMvcResultMatchers.jsonPathquot;$.retquot;.valuequot;your uuid1234quot; .andDoMockMvcResultHandlers.print; 再來一個測試,改用密碼登入,分別輸入錯的和正確的密碼。 @Test void testLoginWithWrongPasswordAndNoRole throws Exception RequestBuilder requestBuilder = MockMvcRequestBuilders.getquot;apisomeRecord1234quot; .headerquot;Authorizationquot;, quot;Basic randompassquot; 輸入錯的密碼,應該回傳http 401 Unauthorized .contentTypeMediaType.APPLICATION_JSON; this.mockMvc.performrequestBuilder .andExpectMockMvcResultMatchers.status.is4xxClientError .andDoMockMvcResultHandlers.print; @Test void testLoginWithPassword throws Exception RequestBuilder requestBuilder = MockMvcRequestBuilders.getquot;apisomeRecord1234quot; .headerquot;Authorizationquot;, quot;Basic YWRtaW46cGFzcw==quot; http basic 就是把 adminpass 轉成base64 .contentTypeMediaType.APPLICATION_JSON; this.mockMvc.performrequestBuilder .andExpectMockMvcResultMatchers.status.is2xxSuccessful .andExpectMockMvcResultMatchers.jsonPathquot;$.retquot;.valuequot;your uuid1234quot; .andDoMockMvcResultHandlers.print; 最後,當然是正確的密碼才能通過。若果大家還是半信半疑,我們可以跑起真的正服務(IDE RUN或mvn springbootrun),然後用curl去試。 curl httplocalhost8080apisomeRecord1234 failed with 401 curl u quot;adminpassquot; httplocalhost8080apisomeRecord1234 successed 使用SQL Database讀取用戶登入資訊 一般而言,我們不可能把所有用戶登資訊打在InMemoryUser中,通常背後有一個資料庫儲存所有的用戶資訊,我們在登入時,讀取它來做對比檢證。 為此,我們在maven中,加入 Spring Data JPA h2 database (或任何你的資料庫,如mysql 、 sql server) 最後一步,我們把InMemoryUser去掉,改為從資料庫讀取。因為原始碼太多,就不全部貼上。最主要的是WebSecurityConfig.java要關掉之前的UserDetailsService,改為提供一個UserServiceImpl類,它會實現UserDetailsService的功能。 @Configuration @EnableWebSecurity public class WebSecurityConfig 把原來的Bean先變成註解,其他不變 @Bean public UserDetailsService userDetailsService UserDetails user = User.withUsernamequot;adminquot; .passwordpasswordEncoder.encodequot;passquot; .rolesquot;USERquot;.build; return new InMemoryUserDetailsManageruser; springboottutorialspringbootwebapidatasrcmainjavaiogithubmacauyeahspringboottutorialspringbootwebapidataconfigUserServiceImpl.java other import import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; @Service public class UserServiceImpl implements UserDetailsService @Autowired PasswordEncoder passwordEncoder; @Autowired UserRepo userRepo; @Override public UserDetails loadUserByUsernameString username throws UsernameNotFoundException 因為我們資料庫沒有資料,為了方便測試密碼的加密,我們在java code上直接插入一筆資料。 UserEntity defaultUser = new UserEntity; defaultUser.setUsernamequot;adminquot;; defaultUser.setPasswordpasswordEncoder.encodequot;passquot;; defaultUser.setRolequot;USERquot;; defaultUser.setUuidUUID.randomUUID.toString; userRepo.savedefaultUser; 上述為測試用插入資料,不應該出現在正式使用環境中。 UserEntity user = userRepo.findOneByUsernameusername .orElseThrow gt; new UsernameNotFoundExceptionusername quot; not foundquot;; 找找資料庫有沒有正在登入的該名使用者username List authorities = List.ofnew SimpleGrantedAuthorityquot;ROLE_quot; user.getRole; LOG.debugquot;got user uuid, username, role from databasequot;, user.getUuid, username, user.getRole; 如果前面的 findOneByUsername 有結果回傳,我們就給它一個ROLE_XXX的權限。 return new Userusername, user.getPassword, authorities; 這裏從沒有檢查過密碼是否有匹配,全部交給Spring Security去做 springboottutorialspringbootwebapidatasrcmainjavaiogithubmacauyeahspringboottutorialspringbootwebapidataentityUserEntity.java springboottutorialspringbootwebapidatasrcmainjavaiogithubmacauyeahspringboottutorialspringbootwebapidatarepoUserRepo.java 上述段落中,筆者省略了UserEntity和UserRepo,它們只是一般的springdatajpa概念,有需要可以經文末的連結查看完全原始碼。最需要注意的,是UserEntity的password欄位,在資料庫中是以加密的方式儲存。我們在配匹登入者與資料庫記錄時,也沒有自行檢驗密碼的需要。我們只是在加密過的密碼回傳給Spring Security,Spring框架會自行把登入者輸入的密碼與加密了的密碼作比較。

「山里」推出冰見會席料理
澳城餐飲
文創遊樂場 // 米米 Esther Lim・2019-12-03

冰見(Himi)是一個漁鎮,位於富山縣富山灣的一個小鎮也是品嘗最新鮮魚片的最佳去處。大倉酒店28樓「山里」餐廳提供富山縣的美食 ldquo;照燒天然鰤魚配海老芋頭rdquo;,讓用餐者享受其獨特的粉紅享受其非凡的口味。 1會席師走包括:蠔真丈蘿蔔清湯,季節二種刺身,照燒天然鰤魚配海老芋頭,白味噌煮天王寺蕪青 真鱈魚,櫻花蝦飯 紅味噌湯 醬菜,季節水果。 2會席晩冬包括:煮 小松菜獨活蟹,蠔真丈清湯,季節三種刺身,八寸鮟鱇魚肝酸汁、 山藥壽司、 椰菜芽蛋黃醋及墨魚舞茸菇),燒物 照燒天然鰤魚配海老芋頭,白味噌煮天王寺蕪青真鱈魚,輕燒三文魚配蘋果醋,櫻花蝦飯,紅味噌湯醬菜,季節水果。 3會席師走包括:煮 小松菜獨活蟹,蠔真丈清湯,季節三種刺身,八寸鮟鱇魚肝酸汁、 山藥壽司、 椰菜芽蛋黃醋及墨魚舞茸菇),燒物 照燒天然鰤魚配海老芋頭,白味噌煮天王寺蕪青真鱈魚,肉料理有 煮鴨肉配芥末醬,櫻花蝦飯, 紅味噌湯醬菜,季節水果,抹茶配甜品。 會席師走每位澳門幣 580 會席晩冬每位澳門幣 1,280 會席師走每位澳門幣 1,680 所有價格需附加 10%服務費 供應日期:2019年12月5日至31日 預約及查詢 853 8883 5127 營業時間 1200150017302200