搜尋

搜尋結果

為程所困-是什麼讓你不想寫自動化測試?
科技新知
MacauYeah・2025-01-08

測試場 VS 自動化測試 筆者一直地更新自己過去所編寫的程式,很恐怖的是,那時的自己很少思考過怎樣寫測試Test Case。致使每次做更新時,都膽戰心驚,要手動建立測試場,人肉去測試每個可能有受影響的地方。在那些年的時候,有能力自己搭建測試場,已經是萬幸。但當面對一些要長期維護的程式,測試場的人肉測試並不是一個有效的方法,一來費時間,二來人腦記憶並不可靠。單靠自己去想想那些地方受影響,再測試,某程度是在挑戰人腦的記憶上限。如果是團隊合作,就更麻煩,你以為修改不會影響到其他人,結果卻是翻天覆地。 所以為求長治久安,編寫自動化測試,是有必要的。這些自動化測試,都算是回歸測試,每次程式有任何地方改動,都確保所有自動化測試被通過。理想始終是理想,但實際操作又會遇到怎麼的問題? 以筆者剛更新的程式為例,難以測試主要是當初沒有想過要測試這件事,所以程式結構通常是【連續順序】地執行。想分段測試?除非先重構。 Function中太多自己創建的Object 回顧自己的程式,初期編寫時,總會我手寫我心,每想要創建任何資源,在java中就會使用 new 字眼,或是自行呼叫某些 builder 類來取得資源,這是其中一個令自己無法寫測試的原因。 我們要想想,這些資源,是不是自己Function中所關心的核心。如果這個資源是被直接回傳的,我們要保留,如果它是HttpClient,只是要來獲取其他資源的媒介,我們或許可以利用依賴注入來取得它,即是把 HttpClient 改為經呼叫方傳入。注入的好處時,我們可以在Test中,修改那些資源的行為和結果。更進一步的是,把那些資源改為 interface 的方式存取,那麼在 Test 中就能更任意地控制該資源的行為。 首次重構某些資源成為依賴注入,大部份都會影響呼叫方,很多地方都要重寫。不論使用constructor injection, setter injection, annotation injection 等,上傳呼叫方,或多或少都會要加減改變參數。極致地,我們把構建都交給Program 框架去做,例如Spring Boot中,各種資源,都交給框架去自動配致。當然,這種做法的學習成本高,除錯成本也高。 【注入】其實是想在控作那些資源,在測試中運行得到固定的行為。使用前述的HttpClient例子,當我們業務邏輯是先訪問外部Web API,再根據結果做處理,那麼我們測試時,就會想模擬Web Api的結果。如果要做到自動化測試,最強硬的手段,就修改自己的HttpClient,模疑給出固定結果。 想要做到這種,在傳統的Java中,我們需要透過進一步抽離Interface去做。但這樣做很累,所以筆者通常會用如Mockito的程式庫,去修改HttpClient的行為。有興趣直接看程式碼的讀者,可以去看 github 。 當然,上述的 HttpClient 例子,使用測試場也有可做測試,自己再去模擬那些Web Api的回傳,有些情況下,這樣會更真實,但大家就必需好好定義測試場的行為。因為測試場可能與團隊的其他成員所共用,有機會其他人可能想要更多互動的測試方式,而非固定的結果。但並上非固定結果的測試場,自動化要測試的可控度就減少。

Docker 來源掃瞄 - Docker Image Scan
科技新知
MacauYeah・2024-12-19

當網安要求越來越高時,我們也要留心 docker image 的來源是不是有漏洞問題。 docker hub 本身就已經有一些安全掃瞄報告,以 nginx 的 1.27.3 版本為例, docker hub nginx 1.27.3 , docker hub 已經列出相當多的CVE漏洞。 不過對於不公開的 docker image ,安全描瞄可是要收費的。作為小團隊,可能想先尋求一些簡單的免費方案。如果你想同樣的需求,可能Trivy會幫到你。 Trivy Trivy 是一個用於描瞄軟件版本依賴或設定檔是否引用到一些有漏洞問題的軟件,它也能檢測 docker image 是否有漏洞或錯誤設定的問題。而且更好的是, Trivy 本身亦有 Docker Image 版本,我們就不用煩惱怎樣弄一個 Trivy 的執行環境,只要可以運行 docker ,有網路就可以了。但使用 Docker Image 版的 Trivy 有一個額外要求,就是它要有主機上的 docker.sock 權限。 描瞄的指令如下,其中 docker.sock 就是為了讓 containers 內部的程式可以存取主機的 docker daemon , .cache 則是為了方便暫在下載資源。 上面故意用 nginx 的兩個同版本號不同平台的 docker image,其實就是為了引出一些潛在問題。nginx 預設是使用的debain OS的,在筆者寫文章的當下,已經更新到最近的 image ,但始終有一大部份可能的漏洞。反觀 alpine OS 版本,就找不到這麼多問題。 這是因為 alpine 預設安裝的依賴較少,所以找到的漏洞也少。正所謂,做多錯多,唔做唔錯(大誤)。這其實有好有不好,因為在發生問題時,在 alpine 下可能連基本的除錯工具都沒有。除非大家有完整測試,或者對 alpine 有相當的認識,你才會選擇一個非官方預設的版本。但就以事論事,引用較少的依賴,長久之下的確是不會有那麼多隱患。大家如果有條件,也可以試試 alpine 或其他版本。 前一節我們可以看到,Trivy需要經過 socket 的方式才能存取主機上的 container daemon 操作權。但 podman 作為一個不主張 daemon daemon less,亦主張不需要 root rootless,那麼它該怎樣執行? 其實podman也有user層面上的 socket,而且 trivy 也有對應的方式去轉用第三方 socket 有點像使用遠端主機 socket,但官方並未宣佈正式支援遠端的方式。 具體使用方式,筆者亦已在 steam deck 上測試,使用方式如下。不過因為 steam deck 預設沒有 root,筆者就省略 cache 指令,免得之後要有權限問題要手動清理。 Ref Podman socket activation Trivy Support for rootless podman

澳門斷捨離學會:推動聯合國可持續發展SDGs之暑期活動
文化創意
陳康妮・2024-08-09

澳門斷捨離學會: 推動聯合國可持續發展SDGs之暑期活動 活動概述 澳門斷捨離學會由2020年1月1日至今,每週三晚上78時在友誼大馬路的友誼大廈寫字樓2樓舉辦斷捨離活動。今年2024年7月8月 斷捨離暑期活動停不了,旨在持續鼓勵澳門市民清理家中不再需要的物品,並將它們回收或分享給有需要的人。通過這種方式,我們不僅減少了浪費,還促進了社區的可持續發展。 收取物品 澳門斷捨離學會接受以下物品的捐贈: 衣服 食物(沒過期) 嬰兒及幼童用品 長者日用品 寵物食品及用品 手袋飾物 護膚化妝 手提電腦及配件 電子產品(小型) 家庭小電器 電玩遊戲 電訊產品(小型) 玩具及遊戲(小型) 影音產品(小型) 結婚用品 防疫用品 不收取物品 澳門斷捨離學會不接受以下物品的捐贈: 大型傢俬及電器,輪椅,單車 二手床上用品 二手貼身用品和睡衣 毛公仔 舊鞋 雜誌、色情、暴力、或宗教內容的書籍和物品 藥品及醫療用品 食品類 已破損物品 澳門斷捨離學會推動聯合國可持續發展第4年 澳門斷捨離學會的暑假活動鼓勵市民參與共享經濟,通過捐贈和回收物品,為社區和環境做出積極的貢獻。讓我們一起支持這個美好的倡議,共同創建更可持續的未來!

Spring Data 關聯型態 01
科技新知
MacauYeah・2024-07-16

筆者身邊的朋友,首次接觸 ORM 的關聯型態時都會覺得很難,筆者自己也是。但在好好地理順它的設計時,就會覺得其實很簡單。 因為篇輻很長,我們先以Code First的角度,先體驗一下ORM程式讀取的便捷性,以及解決一個常見的序列化問題。 雙向存取 例如一個Parent,有好幾個Child @Entity public class Parent ... Parent Primay Key @OneToManymappedBy=quot;parentquot; List children = new ArrayList; TODO add remove @Entity public class Child ... Child Primay Key @ManyToOne Parent parent; 上述的寫法很簡潔,ORM會為你自動加入join column,處理關聯的載入。在讀取Parent時,它的所有Children就可以直接在Java層面讀取,在讀取Child時,它的Parent也隨時取得。也就是,開發人員只要經SQL準備其中一方的資料,另一方並不需要手動準備,它就可以自動按需載入。 RESTFul API 坑雙向存取 Spring Data在Java層面的雙向存取,已經做到很方便。但經常坑到我們的是Spring Data與RESTFul API的混合應用。當我們嘗試經API回傳我們的Parent Json時,API會很聰明地把關聯的Children也變成Json回傳。但他也會把child中的parent不斷重複變成json,變成無限輪迴。 坊間有兩種不同的解決方案,可以防止無限輪迴。 讓Json可以認得已經序列化的元素。@JsonIdentityInfo 讓Json只可以單向序列化serialization。@JsonManagedReference, @JsonBackReference, @JsonIgnore 筆者兩個方向都試過,但首個方法並不通用,至少它不能算是一般常見的無腦Json結構。它需要伺服器、客戶端都懂這如何經IdentityInfo認得重複出現的元素。 而單向序列化,是筆者現時的通用解。在設計RESTFul READ API時,筆者就會決定到底是Parent自動回傳Child,還是Child自動回傳Parent。決策的考慮因素,主要在於是否可以簡化Client的API調用次數。通常從Parent出發,自動回傳Child,可以節省API調用。但如果是選項性的結果List of Value,就倒過來。有時候,遇著API需要雙向設計,就只好自己設計DTO資料傳輸對象 Data transfer object, DTO。 例如Parent API,就原封不動回傳原本的元素 @Entity public class Parent ... Parent Primay Key @OneToManymappedBy=quot;parentquot; List children = new ArrayList; @Entity public class Child ... Child Primay Key @ManyToOne @JsonIgnore Parent parent; Child API,就反過來引用。 public class ParentDTO ... Parent Other fields except children public class ChildDTO ParentDTO parent; ... Child Other fields 這種DTO,看起來很麻煩。但其實Spring有提供一個簡便的複制DTO功能,它可以把自動複制兩個class中有同一名稱、同一型別的欄位到另一個class上,不需要逐個欄位明文寫出來。 BeanUtils.copychild, childDTO; BeanUtils.copyparent, parentDTO; childDTO.setParentparentDTO 因為child、childDTO中的parent欄位型別不同,BeanUtils.copy會自動忽略,其他欄位就會自動複制。 註 其實古早的網頁系統設計,DTO的概念一直存取。只是現在RESTFul API的流行,很多框架已經提向便捷的Json轉換。若然平時只需Json單向存取,筆者還是省略DTO的建立。

Spring Boot - Maven Cheat sheet
科技新知
MacauYeah・2024-01-12

基礎 刪除所有結果,全部重新編譯 mvn clean compile 跑起用Spring boot寫的main class,運行Spring boot context。 mvn springbootrun # or mvn clean compile springbootrun 執行測試用例,預設只會測試test資料夾下以某些命名規則的class例如class名以Tests或Test結尾的class,其他命名規則筆者未有能力一一驗證 mvn test # or mvn clean compile test 多Profile、多組件、多測試 使用P指定編譯時的選用pom.xml中的project.profiles.profile參數。也可以用此來傳遞到spring profile,使得編譯後的spring war預設選擇特定profile。 mvn clean compile PmvnProfile # or mvn clean compile springbootrun PmvnProfile 使用pl限定mvn指令只對某個子組件生效,但有時候子組件之間也有引用關係,所以需要再額外加上am參數alsomake mvn clean compile springbootrun pl SUBMODULE_NAME am 使用Dtest=限定只執行某個class的測試用例,或單個測試函數。可以無視class名的命名規則 mvn test Dtest=TEST_CLASS_NAME # or mvn test Dtest=TEST_CLASS_NAME#TES_METHOD_NAME 若屬於多組件情況下,其他子模組找不到同樣名稱的測試,會測試失敗。需要再加上Dsurefire.failIfNoSpecifiedTests=false mvn test pl SUBMODULE_NAME am Dtest=TEST_CLASS_NAME Dsurefire.failIfNoSpecifiedTests=false # or mvn test pl SUBMODULE_NAME am Dtest=TEST_CLASS_NAME#TES_METHOD_NAME Dsurefire.failIfNoSpecifiedTests=false 打包 在本機電腦中,把java變成jar或者war。通常用於自行發佈的環境中。 mvn package 有時特定Profile沒法成功執行測試用例,或者你認為有些測試問題不影響使用,需要跳過package中的test。 mvn package Dmaven.test.skip=true # won't compile test folder mvn package DskipTests=true # compile, but won't run 例外情況 強行把一個第三方jar,種到本機電腦中的.m2repository # copy from httpsmaven.apache.orgguidesminiguide3rdpartyjarslocal.html mvn installinstallfile Dfile= DgroupId= DartifactId= Dversio

Miffy米菲控必去-澳門上葡京MIFFY創意展
生活在我城
MacauYeah・2023-10-17

唔知點解上葡京會唸到搵米菲做主題,哩隻來自荷蘭的公仔一直低調地遊走唔到國家但係澳門真係比較少出現,但相信米菲控一定知道佢係荷蘭同日本有幾受歡迎話說上葡京今次舉辦的MIFFY創意展由9月25日至11月12日係酒店舉行,場內唔同地方有超過100隻Miffy,還有 #Miffy主題下午茶、文創禮品、親子工作坊等,集打卡、美食、購物等等。 身為米菲控的筆者當然要帶埋佢個嫰B去探望吓咁可愛的米菲 周六1200首先去到酒店大堂酒廊嘆翻個 ldquo;Miffy 主題下午茶rdquo;費用MOP26815%,供應時間1100至1800再加點一個大蝦意粉先 落單後,係附近影吓靚相,之後好快等到飲品 圖1. Miffy Latte OMG好靚好靚好靚呀飲落還可以但沒有很驚豔。 圖2. Miffy Orange Ballon 香橙啡一望有點疑惑,但飲落特別可以哦很香橙味的咖啡。 圖3. 大蝦意粉 一大碟,小小辣,味道OK 圖4. Miffy吐司配雪糕 終於等到最期待的吐司,看着很美嘛,食落hellip;..外皮不脆,內里算軟,但除了上層有雪糕味,包有包味外,應該算是有點失望hellip;hellip; 圖5. Miffy朱古力焦糖撻 很美表面是甜甜的焦糖,下層是濃濃的朱古力,很甜甜的一道甜品 圖6. Miffy甘筍蛋糕 嗯以經有點飽,但咁可愛一定要試,係清香的甘筍味,蛋糕很軟。 食到一半,可愛的主角米菲登場,係場內大方同大家影相呀 嫰B更然立即衝埋去影相同摸摸啦 總結兩大一小食哩個餐一個意粉有點多,建議單點自己想食的都很足夠不一定要點餐,但米菲控叫一個主題餐是常識吧哈 食完仲可周圍行吓,場內仲有好多不同大小設計的米菲公仔同精品,歡迎大家一齊黎同米菲見個面哦 資料補充 上葡京官網 httpswww.grandlisboapalace.comtcrestaurantsnbarsglplobbylounge 餐廳不可預訂, 餐廳登入澳娛會員有95折(可以提前登記) httpssupremecard.sjmresorts.comtcmymembership

Docker Swarm mode 指令教學 | docker service
科技新知
MacauYeah・2023-08-22

之前一直都討論Image 的打包形式,現在聊聊部署上線時的一些指令。 Docker Service swarm mode 主要通過quot;docker servicequot; 指令去產生一堆可以在不同節點上運行的container。為了更加形象地講,我把container稱為Image的分身。 docker service create跟docker container run的感覺很像,兩者都可以指定image # swarm mode $ docker swarm init $ docker service create name nginx_s nginx # container mode $ docker container run d name nginx_c nginx 兩者的差別在於docker service 可以指定多少個分身,可以隨時加減數目,而且如果你有多過一台機器,分身就會在不同的機器上遊走。而docker container就是只對本機有操作,也不會散播到其他機器。 # swarm mode $ docker service create replicas=2 name nginx_s nginx $ docker service ls ID NAME MODE REPLICAS IMAGE PORTS uro4rwy6nelh nginx_s replicated 22 nginxlatest $ docker service update replicas=5 nginx_s $ docker service ls ID NAME MODE REPLICAS IMAGE PORTS uro4rwy6nelh nginx_s replicated 55 nginxlatest # container mode $ docker container run d name nginx_c1 nginx $ docker container run d name nginx_c2 nginx $ docker container run d name nginx_c3 nginx $ docker container run d name nginx_c4 nginx $ docker container run d name nginx_c5 nginx $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c45771f06612 nginx quot;dockerentrypoint.hellip;quot; 7 seconds ago Up 6 seconds 80tcp nginx_c5 a587a718da3a nginx quot;dockerentrypoint.hellip;quot; 9 seconds ago Up 9 seconds 80tcp nginx_c4 079f206f8645 nginx quot;dockerentrypoint.hellip;quot; 9 seconds ago Up 9 seconds 80tcp nginx_c3 e10dc525fd22 nginx quot;dockerentrypoint.hellip;quot; 10 seconds ago Up 9 seconds 80tcp nginx_c2 dcaa2b4bb3de nginx quot;dockerentrypoint.hellip;quot; 10 seconds ago Up 9 seconds 80tcp nginx_c1 在建立網段時也差不多,service需要的是overlay network,而container用一般network就可以。 # swarm mode $ docker network create driver overlay nginx_s_gateway $ docker service update networkadd name=nginx_s_gateway,alias=gateway nginx_s $ docker service ps nginx_s ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS fxqtheyvr914 nginx_s.1 nginxlatest dockertest Running Running 33 seconds ago u0pvj1leoizw _ nginx_s.1 nginxlatest dockertest Shutdown Shutdown 33 seconds ago q7arumjlxduv nginx_s.2 nginxlatest dockertest Running Running 36 seconds ago kurlwqfmopbg _ nginx_s.2 nginxlatest dockertest Shutdown Shutdown 37 seconds ago zd0zlkhxafv0 nginx_s.3 nginxlatest dockertest Running Running 40 seconds ago 3kapr00fs6pt _ nginx_s.3 nginxlatest dockertest Shutdown Shutdown 40 seconds ago 5o4afd3whygo nginx_s.4 nginxlatest dockertest Running Running 35 seconds ago oxocropolbo8 _ nginx_s.4 nginxlatest dockertest Shutdown Shutdown 35 seconds ago x5y94jf3ok51 nginx_s.5 nginxlatest dockertest Running Running 38 seconds ago cgld3au0w1i9 _ nginx_s.5 nginxlatest dockertest Shutdown Shutdown 39 seconds ago # container mode $ docker network create nginx_c_gateway $ docker network connect alias gateway nginx_c_gateway nginx_c1 $ docker network connect alias gateway nginx_c_gateway nginx_c2 $ docker network connect alias gateway nginx_c_gateway nginx_c3 $ docker network connect alias gateway nginx_c_gateway nginx_c4 $ docker network connect alias gateway nginx_c_gateway nginx_c5 不過比較大的差異是service會停了原有的分身,重開新的分身去加入網段。所以上面的docker service ps nginx_s執行結果,就有一半是停掉的。 類似地,docker service也不能單獨地停掉分身,頂多只能調整replicas=NUMBER,來控制分身數量。而單機則可以經過docker container stop來暫停分身。

自己架設Docker的共享儲存空間
科技新知
MacauYeah・2023-07-21

Docker很好用,在單機環境下真的很好用。Docker原本的設計,是為了快速迭代而設計成Image的。在一般設定下,每次新建或重建container,都會根據Image重設一下各方面的環境,包括儲存空間。重設CPU,Memory,大家都很易理解,但重設儲存空間,真的不是每一個使用情況都可以這樣。 又或者說,未必所有使用情況都會有一個第三方的儲存空間可以用。所以良心的Docker在單機環境下也有提供bind mount或是docker named volume,作為可以長期保存,不受container生死的影響,以達到長期存在Data的存在。 單機儲存空間 單機情況下很簡單,就用一個docker compose做例子 其中html就是一個bind mount,而nginxlogs就是一個docker named volume,兩者都可以長期保存data,除非各位自己手動刪除,否則不會因為container的興亡而不見了。 但有兩個很重要的分別 bind mount,直接跟host os連接,實際上是每次folder有更新,docker都要同步host和container之間的資料。 bind mount在linux下很暢順,因為大部份docker imagecontainer原本就是linux engine,所以folder mount真的可以互通。 bind mount在windows mac下,就會不斷抄資料。面對大量檔案,例如node_module,就會有速度上的問題 docker named volume,就是docker 分離一些獨立空間,然後再綁到container上 相對bind mount,即使在windows mac下,都沒有那個速度上的問題。筆者猜測,即使是獨立空間,其實本身都已經限定在linux enginx下,所以沒有需要抄資料。 但在windows mac下,因應docker 底層建立Linux VM的技術不同,你可能沒法在windows mac預設環境下直接讀取docker named volume。 若要讀取docker named volume,最好的做法,還是連上docker container,然後用docker cp 來抄回資料。一但抄資料,其實都會有速度上問題,不過docker cp是手動決定何時做的,不做docker cp,其實container也是可以用。 Cluster儲存空間 雖然良心的bind mount和named volume解決了單機上的儲存問題,但到了cluster環境,就沒有可以跨機同步儲存空間的做法,要做就自己建立。 筆者也稍為研究了一下同步的問題,不過對技術真的很有要求。所以退而求其次,筆者還是選擇簡單的第三方儲存空間。就是做一個可以分享存取的NAS。 建立nfs linux下要安裝nfs其實很簡單,不過要注意資料夾和防火牆權限,以下安裝教學以ubunut 22.04為例,記得把下面的YOUR_DOCKER_NODE_ADDRESS_RANGE轉為你的真實IP段落 修改docker compose 最後,你在原來的dockercompose的docker volume上加driver_opts就大功告成。 記得把下面的YOUR_NFS_IP轉為你的真實IP

使用 Multipass 建立Docker Cluster
科技新知
MacauYeah・2023-06-02

以下流程,假設各位已經 在Ubuntu Server中開設了virtual bridge 供Multipass設定Static IP,並且network interface定為 localbr 使用Packer template制成docker.img , 並存放於當前資料夾內 使用docker.img 起三個node,並使用network interface localbr,各有一個指定的mac address multipass launch file$PWDdocker.img name node21 network name=localbr,mode=manual,mac=quot;5254004bab21quot; multipass launch file$PWDdocker.img name node22 network name=localbr,mode=manual,mac=quot;5254004bab22quot; multipass launch file$PWDdocker.img name node23 network name=localbr,mode=manual,mac=quot;5254004bab23quot; 對運行中的三個node,為它們設定static ip multipass exec n node21 sudo bash c 'cat etcnetplan10custom.yaml network version 2 ethernets extra0 dhcp4 no match macaddress quot;5254004bab21quot; addresses 10.13.31.2124 EOF' multipass exec n node22 sudo bash c 'cat etcnetplan10custom.yaml network version 2 ethernets extra0 dhcp4 no match macaddress quot;5254004bab22quot; addresses 10.13.31.2224 EOF' multipass exec n node23 sudo bash c 'cat etcnetplan10custom.yaml network version 2 ethernets extra0 dhcp4 no match macaddress quot;5254004bab23quot; addresses 10.13.31.2324 EOF' multipass exec n node21 sudo netplan apply multipass exec n node22 sudo netplan apply multipass exec n node23 sudo netplan apply 使用node21作為Leader Manager,與其他兩個node一起組成Cluster multipass exec n node21 sudo docker swarm init advertiseaddr 10.13.31.21 multipass exec n node21 sudo docker swarm jointoken manager managerToken=$multipass exec n node21 sudo docker swarm jointoken manager q multipass exec n node22 sudo docker swarm join token $managerToken 10.13.31.212377 multipass exec n node23 sudo docker swarm join token $managerToken 10.13.31.212377 Cluster就建立完成。 若想刪掉重來 multipass delete node21 multipass delete node22 multipass delete node23 multipass purge 備註 在直正使用時,大部份時間還需要做port forwarding。multipass沒有自己的port forward,可以用ssh tunnel來模擬。 例如把Ubuntu Server的8080指向node21的8080,可以這樣 sudo ssh i varsnapmultipasscommondatamultipassdsshkeysid_rsa L 0.0.0.0808010.13.31.218080 ubuntu@10.13.31.21 完整的script可以參考initDockerCluster.sh。 沒有Bare Metal Ubuntu或者沒有static ip也可以參考initDockerClusterWithoutStaticIp.sh。只是因為network brandwidth問題,我就不會在每次更新時都測試。

澳門家傭-不經中介空運工人姐姐|申請流程及面試問題分享️
生活在我城
MacauYeah・2023-03-05

經歷二年多的疫情後,終於開關了,也終於不用再受本地工人姐姐的氣。筆者鼓起勇氣,去申請空運外藉家傭, 祈求抽一支好籤,在此亦分享一下當中的文件申請和面試過程。 文件: 於一戶通向勞工局申請「批文」:全程線上攪,也不要線下取件。勞工局服務承諾為十五天,快的情況下一週也有結果。(具體所要求文件,可以登入「一戶通」rarr;「家務工作外地僱員申請」一邊填一邊看) 外藉家傭的出國工作護照:這個不同國家有不同政策,這個交給工人姐姐自己弄。一般有勞工局批文,工人姐姐就可以在她自己國家做申請。 於一戶通向出入境申請「以工作為目的之入境憑證」:有了工人姐姐的護照,可以正式申請她入境憑證,通常一個工作日就有結果。(具體所要求文件,可以在原本的「家務工作外地僱員申請」,繼續流程。但筆者當時就運氣有點差,一戶通無法成功把資料從勞工局轉到出入境,需要向出入境打電話求助。) 將1、3交給工人姐姐,她就可以買機票。記得叫她把1、3印出來。上機落機都要用到。 等運到 文件流程也只是公式事項,能不能在空運前,了解對方才是真的難題。以下是筆者問過的面試問題,大家也可以參考參考,希望各位都能抽到支上籤。 面試問題: 因為聽見菲律賓籍的工友們都問題多多,所以筆者面試的大多數是緬甸籍。而緬甸最麻煩就是語言不通,中文不行,英文也不行。所以筆者都集中用英文問問題,大家亦要留意,面試時工人身邊有沒有中介在提水。而且問的問題要從工作細節問起,這樣可以看到出對方的語言和實際經驗。 我會先自我介紹自己同家庭成員、居住環境,再講講自己每日的工作要求,然後再問: Whatrsquo;s your working experience How many family members Can you tell me more about your previous work details Are you willing to stay with baby in the same room 再細微的要求也會問,可看得出對方的配合度) Why do you want to work in Macau 看看對方有多重視,以減少突然辭職的機會) Do you know cooking What can you cook 可以追問,給你肉和菜,你會怎樣煮?如果對方答不懂,可以看對方會不會主動跟你學。筆者最後面試的那一位,答我說不熟,但會學。最後來到筆者家,基本懂的都懂,不懂的還會看YouTube自學) Are you willing to work overtime You usually off on Sunday, but sometime we need you to off on Saturday and work in Sunday, ok Whats you preference for taking care baby, elderly, cooking, cleaning(人無完美,問對方比較願意做哪類工作?合你用才用,亦方便安排工作) You smoke gambling Any special habit之前有遇過賭徒) What is your religion 如果有宗教信仰,感覺比較安定) Do you have anything not eat Do you like to play with baby Do you like animals 要湊寵物的必問) Could you tell me more about your advantage and disadvantages(我基本會問,可以大概看到對方誠懇度,曾收到的答案:「我比較粗心、我英文不太好、我說話很大聲但很有禮、我不能multi taskhellip;」) Anything question to us (由對方問的問題看得出她要求多不多,以及她最着重什麼)。 溫馨提示,筆者最後請的那位工人姐姐第一日返工就遲到,但由她的工作態度同效率我原諒她。姐姐來澳工作求財,最重要相互尊重體諒,了解對方多一點,增加湊合度,對方有歸屬感也會做得好一點,祝各位好運。

[翻書倒櫃] 再不只是一名物理學者 — 讀神探伽利略新作《透明的螺旋》
娛樂殿堂
君尋・2022-11-16

對《透明的螺旋》一書的評價,將取決於讀者是如何看待湯川學這名角色。被稱為神探伽利略的湯川學在東野圭吾早期的短篇作品中,就只是一名熟悉理工科領域,同時又帶點怪癖的安樂椅偵探。在短篇中單是要帶出劇情張力和解開引人入勝的謎團,就已花費了不少篇幅,因此對於人物性格的描述也只能是點到即止。而為如解謎工具一樣的湯川學賦予更多的人味,是始於作品被影視化之後。 改編的影視作品得到巨大的成功,影響甚至回饋至伽利略系列其後的小說之中。與此同時,東野圭吾為湯川學創作的長篇小說,為系列推到史無前列的高峰,不朽的名作《嫌疑犯X的獻身》正是於此時期誕生。在這些長篇故事中,既保留系列一直以來的複雜詭計,另一方面湯川學不再只對客觀的事實和真相感興趣,故事亦開始著重人文關懷,當中所探討的社會派議題同樣為讀者們津津樂道。然而《透明的螺旋》卻將過往系列作中理所當然般具備的要素拋儲腦後。 《透明的螺旋》的故事沒有考驗讀者的詭計、沒有不可思議的奇異現象、沒有千絲萬縷般的複雜人際關係。而湯川學也不再只是解開謎團的工具,他與一般人一樣遇到生命中不可避免的難題,與父母的道別。他不能再持續埋首於感興趣的物理實驗上,而是要照顧年長的父母,尤其是患上失智症的母親。母愛、血緣、單身女性的處境,都是這次故事中提到的議題,但事件由一位多年來不太強調感性的物理學者的口中揭發,未必不適合但張力明顯不足。同時,以意外的羈絆為名目,於案件中牽強扯上湯川學的家庭關係,作為另一條互相呼應的支線,在寫作技巧上或許有其必要,但對於多年來以上帝視角觀察湯川學的生涯的讀者來說,這種鋪陳不足的「補設定」手法,實在過於突兀。即使上一作《沉默的遊行》沒有令人嘖嘖稱奇的詭計也好,至少也有足夠帶來反思的社會派議題作為主軸貫穿作品。《透明的螺旋》既沒有系列過往般精妙的詭計,議題的薄弱也無法觸動人心。 此外,東野圭吾亦不乏以愛為題的作品,更令《透明的螺旋》的主題顯得格外失色。東野圭吾筆下另一人氣系列角色加賀恭一郎,就是以描述親情的愛而廣為人知。加賀恭一郎早已是一名有血有肉的偵探,而他與家人的關係,經過數本小說的獨立地描寫以及暗作鋪陳,於最後一作中完美落幕。加賀系列對親情的描述和探討,並非單一本小說就可輕易超越,更何況本作只是舊酒新瓶。《透明的螺旋》可能是伽利略系列中相對失色的作品,不過洗練直白的文字,清晰的敘事邏輯和難度適中的佈局,都為讀者在閱讀過程中提供不少樂趣。如果你期待的是一貫加利略系列的內容和水準,想必會大失所望。如果你是湯川學這位物理學家的支持者,又渴望看到他進一步的成長,相信會樂見他再次展現人性的一面。 關於今回 翻書倒櫃 的推介書本: 書名: 透明的螺旋 作者: 東野圭吾 出版社: 皇冠 出版日期:20220726

[議劇論映] 無法兼顧搞笑與推理 — 《涅墨西斯》
娛樂殿堂
君尋・2021-07-23

《涅墨西斯(Nemesis)》 觀後推薦度:★★☆☆☆ 簡介: 喜歡推理和和偵探題材的筆者在開播前期待的劇集之一,卻是本季中第二失望。設定上不算特別,偵探社涅墨西斯的廢柴偵探風間(櫻井翔)接下種種奇案,但每次都要由新人助手安娜(広瀬鈴)出手相助才能查出真相解決事件。首兩集案件的謎底都非常好猜,而且案件沒特別之處,加上解謎過程略為沉悶,就算是推理迷也接受不了這種水平的案件。最大敗筆是想要搞笑卻一點都不好笑,卻佔了劇情的不少時間。不過《涅墨西斯》 每集都會慢慢透露主線故事的情節,亦即是安娜的父親的行蹤、她的身世,以及偵探社的秘密。此外,劇集雲集不少知名演員,主線的櫻井翔和広瀬鈴之外,每集客串的角角都有意外驚喜,如橋本環奈和真木陽子等。 觀後心得: 大部份推理、偵探劇集都偏愛採用一集至兩集完結的單元劇形式說故事,上半部份的《涅墨西斯》 亦是如此,但故事橋段無聊、演出沈悶,被批評浪費了一眾知名演員,相信不少人看了兩、三集就會忍不住棄劇。可是故事中後段卻漸漸變得有趣,主線一直穿插於每集的單元故事中,幾乎每集的案件都與主線有某種關連,客串的角色亦非一集完結,而是成為主角們的幫手。劇集由倒數第四集開始進入完結篇,一步一步揭開女主角的身世、偵探社的真相,以及意料之外的黑幕登場,與前半部的沈悶截然不同。結局時,廢柴偵探不再依靠天才助手的幫忙,反而是憑自己多年苦練的技能和在案件中建立的人脈,解決眼前的危機,既熱血又感動,也是偵探劇中較少看到的橋段。但無可否認,劇集的節奏和演出強差人意,只是主線故事較有驚喜,在眾多優良劇集的春季檔之中,絕非必看之選。 簡評:推理迷不要看,看到前幾集絕對會被氣死。喜歡幾位主角和橋本環奈的話可以一看。 關於議劇論映 本欄目將會分享日本及歐美的影集和電影。除最新上映及流行的作品外,亦會推薦值得回味的滄海遺珠。 更多本欄目相關的內容可按:httpsppt.ccf6n5yx

[議劇論映] 食之無味棄之可惜的《離婚活動》
娛樂殿堂
君尋・2021-07-19

《離婚活動》 推薦度:★★★☆☆ 簡介: 相必單是出演男女主角的人選已是不少人收看本劇的原因,由永山瑛太和北川景子扮演一對閃電結婚後,又立刻離婚的夫婦。因吊橋效應讓女主角錯誤認為隸屬航空自衛隊的男主角是真命天子,但結婚後首日才發現兩者的價值觀南轅北轍。從小就被極為傳統的亞洲家庭價值觀影響、以及後天在自衛隊中形成陽剛性格的男主角,認為男人在家中是主導、家事必要由女方處理、男性一定要保護女性。因此當在時尚公司中獨立工作、受上司肯定又有自己想法的女主角發現到他們之間的差異後,相方便很快達成要離婚的共識。但同一時間男家父母,卻不謀而合提出離婚,原因竟然是忍夠另一半的生活習慣! 觀後心得: 開局非常吸引,可惜虎頭蛇尾,看到中後段近乎食之無味棄之可惜。北川景子和瑛太的主線到中段為止都不錯,兩者在堅持自己價值觀的同時,嘗試尋找能夠磨合和接受的中間位置,雖然仍然愛著對方,但認為分開對兩者更加有好處。可是,後段硬要互相撒謊已經有新戀人,而且配角們的支線內容比主線還要多,感覺只是為了拖長到十集內容。而起初劇中每對夫婦都要離婚,各自有各自的原因,像是吞聲下氣苦忍無理取鬥的丈夫多年,又或是忍受丈夫在外沾花野草。可是到結尾,卻每一對夫婦都原諒對方,雖然沒有再婚但卻繼續一同生活,試圖說服觀眾「這就是各式各樣的夫婦生活形態」。可是當初花了不少時間去描述男女主角母親不可不離婚的理由,以及她們有多堅持和有多深的覺悟。這種轉折只會讓人覺得過於強硬。還有女主角姐姐,硬是要提她也離婚了,結尾又突然說要回去與丈夫居住。總之,若不是兩位演員,不會看到結尾的一部作品。 簡評:題材看似有趣,演出上亦曾有不少趣味性,但中段開始了無新意,要戀愛的甜沒有,要戀愛的苦亦沒有。純粹因為北川景子和永山瑛太追看的話是OK 的。 關於議劇論映 本欄目將會分享日本及歐美的影集和電影。除最新上映及流行的作品外,亦會推薦值得回味的滄海遺珠。 更多本欄目相關的內容可按:httpsppt.ccf6n5yx

[翻書倒櫃] 一張紙的整理術
文化創意
君尋・2020-10-16

在資訊爆炸的年代,職場上過多的無用資訊不但影響我們的決定、在會議上分散與會者的注意力,更重要的是在浪費寶貴的時間和影響工作上溝通的效率。因此在分秒必爭的職場中學會整理和歸納出最核心和有價值的訊息是非常重要的。日本的汽車生產商Toyota中,只要是業務上的文件,全都是彙整在一張A3或A4的紙上,更是多年來這家大企業根深蒂固的整體文化。他們的厲害之處在於,使用這種思考周詳後製作出的一張紙文件作為資訊傳遞及溝通,可以化繁為簡、又能明確清晰傳達精準的訊息。雖然已不是只用紙張工作的年代,但處理資訊的「整理術」,也適用於現今的以電腦工作為主的打工仔身上。 作者是在Toyota工作時學會這種彙整資訊、整理思緒、清整溝通的技巧。用一張紙整理資訊,目的是讓腦中想法「可視化」。寫出來才可看出自己對相關資訊瞭解和不瞭解多少。Toyota的「一張紙文化」的特徵之一的「一覽性」,可清楚易懂傳達重要的關鍵訊息。比起很多頁的文件,整理成一張紙更有一覽性,能清楚傳達內容。無需逐字細看才懂,可以一目瞭然。而其中一個目的,是要讓上司透過整理得非常完善的一張紙文件,在短時間內下決定。從而減少過多的查詢和追問,增加工作上的效率。此外,運用整理術也可讓會議更有效率。方法是利用在會議前準備好附有「空白框格」的Agenda,好讓與會者能填寫相關議題的結論和方向。同時因利用與會者想要填滿空白框格的心理作用,最後討論方向亦會跟著紙上的內容走,並討論相關的內容,不會失焦和浪費與會者的時間。最終更可成為製作會議記錄的有效參考。 具體該如何使用這種一張紙整理術,作者整理為四個步驟。首先,將思考用的基礎資訊「整理」到文件內。接下來將自己獨有的「思緒」「歸納」到文件內。其後再把文件的內容要「傳達、溝通」的對象搞清楚,即釐清誰是讀這份文件的人。最終再將上述的內容化繁為簡,成為一看就明的資料,但要謹記要把主題貫穿於整份文件的各項內容中。若遇到資訊過於複雜而不懂如何整理的話,可以嘗試想「若簡單用一句話來說即是?」的方式記錄下來。以上只是概述作者介紹的流程,書本當中還會詳細介紹如何用excel實踐作者的理論,以及落實到工作上的不同情況,如製作演講稿、提案文件以及上述提到的整理會議記錄等,非常適合每天面對繁雜資訊的職場人士。 關於今回翻書倒櫃的推介書本: 書名: 在TOYOTA學到的 只要「紙1張」的整理技術 作者: 淺田卓 出版社: 天下雜誌 出版日期:20160330