搜尋

搜尋結果

台灣本土人氣有機護膚良心品牌。童顏有機 Inna Organic
美容
蘇蘇・2018-02-07

記得大約在10年前,身邊還沒有太多朋友會使用台灣面膜時,經朋友介紹,蘇蘇已經開始用了,因為當年在港澳售賣的面膜選擇不算太多,大多數是專櫃品牌,零售店的很多也試過了,後來無意中發現原來台灣的面膜很好用,而且價錢比港澳的還便宜,當時還介紹了給很多朋友試用,大家都驚喜原來台灣的面膜品質很好耶,所以除了國際大品牌的,台灣的也是我的最愛。 所以一直以來蘇蘇都喜歡試用台灣出產的面膜,不同品牌都有試,但自從去年經過一位台灣愛美愛童顏的朋友推薦,我愛上了她們。 來自台灣有機護膚品牌《童顏有機 InnaOrganic》面膜,她們使用歐盟認證優質安全的有機乳香複方精油,成份符合美國 *EWG’s Skin Deep 綠色安全評比,是台灣唯一拿到美國EWG成份認證標準的品牌,而且全系列都不含酒精、人工香精,更不會進行動物測試,100%適合素食者,用得放心。 *EWG= Environmental Working Group ,收錄大量化妝,保養,洗沐等品牌產品的成分資料及相關安全資訊,且擁有全世界最大最公正的消費者產品安全導覽網站,一個月超過百萬人瀏覽,對每一種成分都標有危害指數,只要上其網站查詢,在此基礎上即可查詢到某個化妝品的綜合評分。 去旅行當然要帶一點面膜在身邊,特別是如果要乘搭4個小時以上的飛機旅程,在那乾燥的機艙環境下,皮膚的水份很快就會被抽乾,要緊記敷一片補濕面膜,之後在下飛機時妳看來就會是容光煥發的了,相反的就只會讓人覺得妳的皮膚又乾又黃呢。 在酒店房間敷面膜是常識吧,早前蘇蘇去了台北,但手上的面膜已經用完了,幸好其中一站蘇蘇就是住在台灣的家 Home Hotel 大安館 (忠孝復興捷運站走3分鐘),這裡就是《童顏有機 InnaOrganic》其中一個銷售點,就在5樓接待櫃台的對面,太方便了吧。 去到房間已急不及待拿面膜出來先敷一片,讓我可以在晚上容光煥發的跟台灣好友們聚會。 這個面膜敷起來感覺清爽但水份滿滿的,最重要是面膜質地超貼服,遠觀根本看不出有敷面膜。原來單是面膜紙已經十分考究,童顏有機採用的是日本頂級隱形布膜「冰羽靈」,100%棉籽絨製作,具生物可分解性,厚度僅0.1mm,極度輕、薄、透,但不會糾結在一起,她是使用特殊連續長纖維射出成型,在製造過程中不需膠水聚合,因此不易造成肌膚過敏,使用機器折疊,不會發生人工折疊導致布膜受污染發霉的情況,很貼心吧。 面膜選擇共有5款,包括乳香賦活緊致隱形面膜、沒藥水潤淨化隱形面膜、玫瑰天竺葵修護舒敏隱形面膜、橙花光采嫩白隱形面膜以及檸檬茶樹平衡控油隱形面膜。 以現在的天氣以及個人皮膚狀態而言,蘇蘇比較喜歡以下3款。 乳香賦活緊致隱形面膜 要成份為有機乳香複方精油、有機夢蝶草、有機白茶萃取等,能抗老緊緻、撫平細紋及減淡皺紋。敷完後感覺肌膚滋潤、細緻有光澤,還有緊緻的感覺,十分適合因工作繁忙而引起肌膚疲倦的我。 沒藥水潤淨化隱形面膜 主要成份為有機沒藥複方精油、旱地鼠尾草超保濕因子、葵花籽等,有長效保濕、淨化肌膚,修護乾裂缺水肌之效。敷完後感覺肌膚十分水潤,而且亮白度提升了,粗糙感減少了,十分適合好像蘇蘇一樣肌膚經常感到乾燥的人。 其實乳香和沒藥是古時的矜貴藥品,經研究發現亦含天然的抗老化成分,記得在聖經有提及三王朝拜耶穌時就是帶著它們作為送給耶穌誕生的賀禮,現在敷在我的臉上,感覺很奢侈,但價錢又合理。 玫瑰天竺葵修護舒敏隱形面膜 主要成份為有機玫瑰天竺葵複方精油、艾草、玫瑰果、蘆葦花、茯苓萃取等,可以舒緩泛紅敏感肌、提升肌膚防禦力,在夏天時還可作為曬後修護,蘇蘇的皮膚很容易泛紅,我的美容師就十分清楚,現在每次早起發現泛紅時,先敷一片再化妝,問題就解決了。 至於橙花光采嫩白隱形面膜以及檸檬茶樹平衡控油隱形面膜,蘇蘇比較喜歡在夏天用,對我個人而言,會比較適合。 其實這5款面膜的味道都是自然精油香味,沒有刺鼻的香精味,質地又薄又貼,雖然有滿滿的精油,但不容易滑下來,在敷面膜的過程中,真的有放鬆的感覺。蘇蘇近這一年沒空去美容院做Treatment,她家的面膜幫助真的很大,虎紋真的淡了,輪廓真的緊緻了。 每天都用的面膜,當然要嚴選,連台灣本地朋友都推薦這品牌,真的不會錯的了。 試過《童顏有機 InnaOrganic》的面膜後,當然也要試試她家的護膚品,她們的成份也是跟面膜一樣也是符合安全有機標準的。當然如果沒有試用過,不知道是否適合自己的肌膚是有點冒險,發現台灣的護膚品很少有試用裝的,不過可以考慮先試試旅行裝。 乳香保養旅行組 這套旅行裝除了適合試用外,送禮也是個不錯的選擇,一小袋隨身超實用,從清潔到保養,攜帶方便,出差、出遊、準備待產包都適合。 純真輕顏洗卸凝露 15ml 洗卸凝露是採用100%天然來源成份,溫和潔淨不刺激,卸淡妝、防曬、BB霜也沒問題的,不過如果成份有石化系成分的彩妝,如睫毛膏、防水彩妝或防水眼線等,那就需要另覓其他品牌的了。 乳香前導醒肌水 15ml 開啟肌膚吸收保養通道,可穩定膚況、保濕,防止肌膚衰老,有機乳香純露輔以有機絲柏純露,穩重的木質調氣味,絕無人工香精。 乳香活膚修護乳 10ml 內含有機乳香複方精油、有機玫瑰純露、植物菑醇等成份,有預防衰老,滋養乾燥敏感肌膚,改善皺紋,恢復光澤之效。 乳香緊致馥活露 5ml 嚴選獨家輕馥活油、有機堅果油、有機荷荷巴油等成份,有緊致、鎖水,水油平衡之效,質地輕薄透。 乳香逆時童顏霜 5ml 內含有機乳香複方精油、荷荷芭智能乳化蠟、RIBOXYL天然核糖肌活因子等,可撫平皺紋、對抗肌膚老化、提升肌膚彈性,使肌膚由內而外恢復光澤。 另外,蘇蘇十分欣賞她們的企業理念,產品拒絕過度包裝,她們也承諾將收入的1%捐贈關懷兒童教育,拒絕動物測試,是台灣一所良心企業。 如果還未有時間去台灣怎麼辦? 其實去年在社交平台放貼後發現原來身邊有些朋友也是她們的粉絲,除了親身去台灣(她們有不少方便的零售點) 買很多回來外,最方便的就是網購,只要買滿台幣5,000元,全球免運費耶。而且在她們的網站經常會有不少好康優惠,有興趣的大家要去看看啊! 詳情: https://tinyurl.com/y7rhjq8f 其實原來現在除了台灣實體櫃點和網購之外,香港的銅鑼灣、尖沙咀和觀塘等,澳門的高士德和塔石區也已經有專櫃或小店出售她們的產品了。 詳細地址: https://tinyurl.com/y9lgdzy9 **以上產品及產品資料乃品牌提供,文中個人體驗感受只供讀者參考之用。 ~~~~~~~~~~~ 更多各地吃喝玩樂、美容、潮流、旅遊、演藝、文化或購物資訊、心情話語文章等,繼續以一文多發形式發放於中、港、澳三地多個高人氣時尚生活網站的專欄內,詳情請點擊蘇蘇的 新浪微博: 『蘇蘇的部落』http://www.weibo.com/susannakl/profile Facebook: https://www.facebook.com/sososusanna Instagram: http://instagram.com/sososusanna 時尚生活專欄: ELLE HK ELLE CHINA 中國瑞麗時尚網 臺灣痞客邦 澳門人氣資訊網站CTM。Lifemag 搜狐新聞網 (手機Apps) 聯絡及邀約: susannakL88@yahoo.com.hk

Spring Boot 04 - 進入http json api 世代
科技新知
MacauYeah・2024-05-23

本節,我們將會建立一個http服務,提供json api讓程式訪問。 下戴模版 我們跟上節一樣,使用Spring Initializr (Maven) 下載模版,但細節筆者就不再講啦。Dependency主要選擇 Spring Web Spring Boot DevTools 下載後,可以直接運行測試,可以用指令 mvn test 或經IDE運行。Spring會至少測試下能不能成功取用預設的8080端口。 Controller 我們若要實作 http json api,需要在 spring 中加入一個類,附註為 @RestController ,那方便起見,類名我們也命名為 XXXController 吧。作為示範,我們弄一個 HomeController.java ,裏面有最常見的 http GET, POST功能。 // src/main/java/io/github/macauyeah/springboot/tutorial/springbootwebapibasic/controller/HomeController.java import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; // ... other import @RestController @RequestMapping("/api") public class HomeController { @GetMapping("/someRecord/{uuid}") public Map readSomeRecord(@PathVariable String uuid) { return Map.of("ret", "your uuid:" + uuid); } @PostMapping("/someRecord") public Map createSomeRecord(@RequestBody Map requestBody) { HashMap ret = new HashMap(requestBody); ret.put("ret", "got your request"); return ret; } } HomeController裏,完整的URL 其實為: GET http://localhost:8080/api/someRecord/{uuid} POST http://localhost:8080/api/someRecord URL中的api之後的路徑,都是定義在 HomeController 中,而前半的8080及context path,是使用預設值。在正式環境下,可能隨時會被重新定義。但我們做本地測試,只需要驗證預設值就可以了。 我們真的運行起程式mvn clean compile spring-boot:run,再使用最簡測試工具進行測試。Windows的朋友,可以選擇Postman作為測試,它有圖形介面。而linux的朋友,請用curl,預設安裝都會有。下列為方便表示測試參數,筆者選用curl。 測試GET,其中1234會自動對應到spring裏的uuid。 curl http://localhost:8080/api/someRecord/1234 # return {"ret":"your uuid:1234"} 測試 POST,其中的 -d 參數,會對應 spring裏的 @RequestBody, -H 參數則是設定 http header 的意思,我們就使用約定俗成的 json 作為 header 。 curl -X POST http://localhost:8080/api/someRecord -H "Content-Type: application/json" -d '{"requst":"did you get it?"}' # return {"requst":"did you get it?","ret":"got your request"} 上面的兩個操作,都回傳了我們輸入的資訊,這代表了我們成功用spring架起了http json api,而且正常讀入資訊。 Test Case 雖然我們可以正常地架起 api,但每次開發都要 postman / curl這種工具額外試一次,其實也有一些成本。而且 api 數量變大,或經多次修改後,就重複人手執行,就變得相當討厭。 面對這個問題,筆者會建議寫測試用例,即是Test Case,而且用Spring內置的@SpringBootTest來寫。 產生一個空的Test類,vscode中,最簡單可以Source Action => Generate Test,然後加入這次要測試的參數。 // src/test/java/io/github/macauyeah/springboot/tutorial/springbootwebapibasic/controller/HomeControllerTest.java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @SpringBootTest @AutoConfigureMockMvc public class HomeControllerTest { @Autowired private MockMvc mockMvc; @Test void testGetSomeRecord() throws Exception { RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/api/someRecord/1234") .contentType(MediaType.APPLICATION_JSON); this.mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.jsonPath("$.ret").value("your uuid:1234")) .andDo(MockMvcResultHandlers.print()); } @Test void testPostSomeRecord() throws Exception { String request = """ {"requst":"did you get it?"} """; RequestBuilder requestBuilder = MockMvcRequestBuilders.post("/api/someRecord") .contentType(MediaType.APPLICATION_JSON) .content(request); this.mockMvc.perform(requestBuilder) .andExpect(MockMvcResultMatchers.jsonPath("$.requst").value("did you get it?")) .andExpect(MockMvcResultMatchers.jsonPath("$.ret").value("got your request")) .andDo(MockMvcResultHandlers.print()); } } 最後就是執行 mvn test 或經IDE運行,應該都會得到所有測試都通過的結果。 mvn test # other test result ... [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.368 s -- in io.github.macauyeah.springboot.tutorial.springbootwebapibasic.controller.HomeControllerTest # other test result ... 上面的程式碼很多,我們逐一來。 @SpringBootTest 寫在類的外面,代表執行這個測試類時,需要運行起整個Spring程序,當然也包括http的部份。 @AutoConfigureMockMvc 寫在類的外面,代表執行這個測試類時,可以模擬一些發向自己的 http 請求。 @Autowired private MockMvc mockMvc 寫在類的裏面,因為之前有定義了可以模擬 http 的請求,Spring在運行時為大家提供了那個所謂的模擬http client的實例。 MockMvcRequestBuilders,則是建造要測試的URL及Header參數。 MockMvcResultMatchers,則是檢查回傳的結果是否如遇期的一樣。 為何這個http client叫模擬 - Mock ? 因為在測試用例中,可能連Controller 內部依賴組件也需要進一步模擬,這樣才能把測試目標集中在Controller裏,這也是單元測試的原意。只是本次的例子看不出模擬與否的差別。 MockMvcResultMatchers.jsonPath(),這是用來檢測json的結構是否跟預期一樣。有些網路上的其他例子會簡寫成 jsonPath() ,但因為vscode IDE的自動import功能比較差,筆者還是保留傳統的寫法。 如果大家覺得@SpringBootTest很難,想折衷地把其他測試方法,那麼把 postman / curl好好管理起來,每次修改完程式,都完整地執行一次 postman / curl ,也可以達到測試的效果。只不過大家還是要好好學會整合 postman / curl,知道如何檢測json結構,什麼時候有錯,什麼時候叫測試通過,所以也要花一樣功夫來實現。 最後,大家千萬不要因為測試難寫而逃課,因為寫測試絕對地可以減輕日後重執行的工作量。除非你的程式碼即用即棄,否則都建議寫測試。(測試跟寫文檔不一樣,有了測試也不能沒有文檔。好消息的是,文檔現在越來越多自動生成的工具,我們日後再找機會介紹。) Source Code spring boot web api basic