搜尋

搜尋結果

澳門人儲飛里數 – BNU AM 一張淪為時代的遺物的信用卡
生活在我城
MO560・2019-05-17

澳門里數信用卡 ndash; BNU Asia Miles 一張淪為時代的遺物的信用卡 MO560 教識你生活中各種儲里數方法 1. 簡介 今年 ndash; 2019年,是BNU的Asia Miles卡的四歲生日了,回想當初真是轟動一時,因為它是全澳門首張亞洲萬里通聯名信用卡!經過四年時間,BNU的Asia Miles卡仍然沒有一點點進步,只增加了paywave功能。。。唯一可以令人驕傲的大概是它仍是全澳門唯一一張亞洲萬里通聯名信用卡?﹝ICBC的星座卡不是真正聯名﹞ 四年過去了,連Visa Signature、World Mastercard、UnionPay Diamond在澳門都開始變得氾濫了,但BNU並沒有推出Asia Miles卡的Visa Signature版本,仍然只有Visa白金卡和金卡;里數兌換比率也沒有改變,仍然是白金卡$10=1里數,金卡$12=1里數。 Q 既然如此,小編仍要介紹嗎?A 要啊,因為爛船都有三斤釘啦。 其實BNU的AM卡是小編第一張儲里數的信用卡,卡面設計很美,情有獨鍾啊。小編都十分期待BNU會出AM卡的Visa Signature版本,或者多出點優惠,不過都只能期待啦望穿秋水中 緊貼最新最潮澳門信用卡、飛行里數、旅遊資訊,記得讚好MO560的Facebook! 如想查看更多詳情,請到MO560的Facebook或Website查看。 2. 詳細介紹 2.1 所有消費$10=1里數 白金卡所有消費$10=1里數金卡所有消費$12=1里數 如果你要長期使用的話,唯一用途應該就是填補在澳門消費時CTM卡和AE卡的空位,不過大部分空位小編都會用大豐大灣區的閃付或ICBC星座卡去填補。 緊貼最新最潮澳門信用卡、飛行里數、旅遊資訊,記得讚好MO560的Facebook! 如想查看更多詳情,請到MO560的Facebook或Website查看。 2.2 迎新送5000里數 新客白金卡簽MOP$5000送5000里數新客金卡簽MOP$6000送5000里數 連同基本消費的里數,換算後就是:白金卡簽MOP$5000總共有5500里數金卡簽MOP$6000總共有5500里數 小編覺得玩迎新的5000里就是這張卡的最大用途啦!玩完迎新之後的BNU AM卡基本上就完成使命了,就讓它在家中休息十個月,靜靜地等待下一次Cut卡時機的來臨吧。 緊貼最新最潮澳門信用卡、飛行里數、旅遊資訊,記得讚好MO560的Facebook! 如想查看更多詳情,請到MO560的Facebook或Website查看。 2.3 免費三次Priority Pass 白金卡持卡人新開卡送三次Priority Pass,之後每年按上年度每消費滿4萬送一次。 免費三次Priority Pass其實都不錯的,不過也稱不上十分有用,因為現在越來越多卡送機場Lounge了。 緊貼最新最潮澳門信用卡、飛行里數、旅遊資訊,記得讚好MO560的Facebook! 如想查看更多詳情,請到MO560的Facebook或Website查看。 3. 玩迎新5000里 首先,大家必需知道,BNU並沒有明確規定多久不持卡就有迎新的5000里。即使小編致電卡中心的客服,也只是得到同樣的回覆,只能提供你的身份證去查詢系統中顯示有沒有迎新。 不過,民間流傳BNU AM卡的冷河期為一年,換言之,玩迎新的方法為:2017年2月開卡2018年1月Cut卡2019年2月開卡2020年1月Cut卡 重覆一次,BNU並沒有明確規定多久不持卡就有迎新的5000里。小編身邊亦有很多成功的例子,要不要玩迎新大家自行判斷囉。 更多詳情關於BNU Asia Miles卡,可查看 ndash; VISA亞洲萬里通 緊貼最新最潮澳門信用卡、飛行里數、旅遊資訊,記得讚好MO560的Facebook! 如想查看更多詳情,請到MO560的Facebook或Website查看。 喜歡小編的文章嗎?比個Like支持我啦 Facebook MO560Instagram mo560_travelWebsite httpsmotravel.info 想追蹤最新最潮澳門信用卡、飛行里數、旅遊資訊?將MO560設定為 「搶先看See First」!

《浪漫鋼琴新作——譜、音、詩、圖、文的賞心悅目》新書出版發
文化創意
文創遊樂場 // 米米 Esther Lim・2023-02-27

由張樂田、梁健行任出品人、姚紅衛、洪少强任主編、黃義滿擔任發行統籌的《浪漫鋼琴新作mdash;mdash;譜、音、詩、圖、文的賞心悅目》一書,完成編撰順利付梓,交由《集樂澳門》協會正式出版。該書收錄以主題創作十八首內涵豐富、樂趣典雅的鋼琴小品,由本澳的音樂藝術本科生,在《鍵盤和聲與鋼琴曲編配》課程修業上,基於和聲、曲式、織體寫作、音樂風格等元素,在導師戴定澄教授指導下創作成型。 新作呈現的鋼琴小品,均為首次公開發表,書內每首作品印錄樂曲原譜、作者簡介外,均配置若干幅樂意相應情景圖片,以及專創同一音樂主題相符詩歌,輔以簡要的文字欣賞説明,同時還附上二維碼,可以用手機掃描後欣賞作品的美妙音響和視頻,可謂是集ldquo;譜、音、詩、圖、文rdquo;滙萃的多維呈現,確屬美輪美奐,賞心悅目,是本澳難得的藝術創意成果。 為推動澳門音樂創作,和尊重音像著作版權, 《浪漫鋼琴新作》發行同時,為書內十八首樂曲,和澳門四家酒店、食府、分別為澳門皇冠假日酒店、竹灣酒店、翠園酒家、Fado葡國餐廳簽定協議,特約音像使用授權,讓該四家酒店、食肆,公開播放之外,同時提供企業作澳門文創宣傳產品開發之用。該書在澳正式發行,在各大書局將先後上架公開發售,亦派送相關音樂教育社團機構及圖書館,以作觀摩交流,並向國内外讀者公開發行。 作品欣賞: httpdaidingcheng.netpiano01.html

Ubuntu 的簡易日常更新
科技新知
MacauYeah・2025-12-17

早陣子跟新認識的朋友聊天,聽到他們因為要轉伺服器平台,煩惱如何做作業系統層面的定期更新。筆者亦都分享一下自己是如何做 Ubuntu OS 層面的定期維護。 沒錢,就用最原始的方式解決 因為Ubuntu也算是常見的linux品牌,所以基本有有商用軟件可以偵測OS的狀態,並針對它推送更新。不過如果你像筆者一樣,是個貧窮的革命家,那就只有土炮一點自己做鏡像點及做測試。 建立一個 ubuntu 的 deb 包 mirror。手動單次地用步 mirror,確保自己其他 server 同一個時間段都只會取得同一個更新。 停了 ubuntu 的 kernal 自動更新。不然的話,mirror 有更新,ubuntu 亦會偷偷地自動安裝了新的kernal,只是等待你的重啟。 使用一個測試機,先經 mirror 更新到最新的狀態。運行一段日子後,其他機再陸續更新。如果你投産環境有多於一種配置,就考慮要多個不同的測試機。更新指令直接做成 script,方便在其他機器中重複。 輪流 ssh 登入各台機,執行相同的更新指令。更新指令經 git 同步到其他機器。為確保不受 ssh 斷線的風除,必要時還需加入 tmux 。 多機器的煩惱 上述的做法雖然可行,不過當你有十台以上的機器,重複做 ssh, tmux, git checkout, script 互動,也是很累人。考慮一次性地全自動化執行,還是有必要的。筆者對上述的第四步驟,作出一些取捨,以確保更新速度足夠快,可以順暢地執行。 什麼是必需要更新的? 筆者觀察到,在 container 技術出現後,其實很多時安裝應用都不會直接在 OS 層安裝 deb rpm 包,都是直接經 docker image 去做。所以OS層面,或者很多服務都不會被啟動。筆者亦發現,至少在ubuntu下,只更新kernel,對比無腦全更新所有 deb 包,會快很多很多。 如果可以,我們只更新kernel,再加對應的 container runtime,是不是更新對令相對地穩定,而且可以經外部統一管理。也就是不用在每一台機中進行 tmux git checkout ,全數在外部推送 ssh 指令? 筆者就用 multipass VM ssh key,表達一下執行概念。 ssh i varsnapmultipasscommondatamultipassdsshkeysid_rsa ubuntu@10.115.189.200 aptget autoremove y ssh i varsnapmultipasscommondatamultipassdsshkeysid_rsa ubuntu@10.115.189.200 aptget update ssh i varsnapmultipasscommondatamultipassdsshkeysid_rsa ubuntu@10.115.189.200 aptget install y linuxgeneric linuxheadersgeneric linuximagegeneric ssh i varsnapmultipasscommondatamultipassdsshkeysid_rsa ubuntu@10.115.189.200 reboot 上述最大的假設,是第一、三步,更新 kernel 時不會因為網絡問題導致 ssh 斷線,因為它們都是系統級別的改寫,中斷後並不能確保可以重來。第二步就很安全,隨時重來也沒有問題。 這樣,我們就可以在任一台管理機,經過一個 shell script for loop,更新所有其他機器。 如果我們對於網絡還是有些疑慮,我們也可以試用一次性排程式的方式去做。 ssh i varsnapmultipasscommondatamultipassdsshkeysid_rsa ubuntu@10.115.189.200 echo 'yourscriptlocation' at 0800 PM 17.12.2025 這樣的好處是,我們可以連 tmux 的開啟也省略,git checkout 也可以經固定的 script 執行(只是很煩鎖)。但這也會有壞處,就是看不到執行的情況,只能事後檢查系統狀態,是否已更新過。 當然前述 ssh key 的方法也可以加入 git checkout 更加深化不同的更新 script,但這又會增大斷線可能。ssh key 還是以快速完成指令更實際。 註:因為網安原因,筆者把上述 script 中的 S U D O 關鍵字去掉,這樣 blog 才能發出。

排程執任務 | Linux Schedule Job
科技新知
MacauYeah・2023-09-07

在Linux底下,crontab是一個最簡單建立Schedule Job的方法。大家用crontab e 就可以進入設定。 # crontab e 1 optrun.sh 其中每個星號,順序代表的是分、時、日、月、星期。上面的例子就是不論何月何日何時,只要每一分鐘就執行一次optrun.sh Singleton Job 問題是,實際情況下,你想執行程式的時間都不一定會少於1分鐘。所以你總是有機會上一個job未跑完,下一個job就開始了。為了保障自已,需要一些參考機制,去決定是否讓job開始跑。 有些情況,可能你會想用job server去做監管,但若只為單線執行的工作,起一個job server還是會增加管理上的複雜性。 最簡單的做法,就是根據不同的程式語言,使用file lock(鎖上)的機制,先上鎖,再做事。但要注意考慮有沒有出現異常情況,令你自己反鎖自己。即是你的process死了,但不懂自己解鎖,這樣以後你也不能再執行了。 在Linux Bash Shell下,就有一個很簡單的做法,就是使用flock指令。用它的最大好處,就是從OS層面下,去鎖上。只要process結束了,不論正常還是不正常結束,都會自動解鎖。 以下例子就是在執行optrun.sh前,先要取得tmprun.lockfile的鎖。如果沒法取鎖,就自動放棄執行後面的指令。 flock n tmprun.lockfile optrun.sh # crontab e 1 flock n tmprun.lockfile optrun.sh Timeout 引入singleton的概念後,其實會引發另一個問題。因為異常的情況,還有機會是不生不死,process hang。所以我們還需要設定一個最大的執行時間,讓你的process在異常的情況下,被強行清走。 例如,ping指令在linux預設是永遠不會自動停止的,可以模擬process hang的情況。如果我們想定時從外部收走ping process,就可以使用timeout指令。以下指令就是2分鐘後殺指ping process。 # in file optrun.sh timeout 2m ping localhost # to check process id, you could use # gt; ps aux grep ping # you will see two different id for ping and timeout 配合errorcode使用,你可能還會在想在timeout時送出一個email通知自已。 # in file optrun.sh timeout 2m ping localhost exitCode=$ if $exitCode eq 124 ; then echo quot;timeoutquot; # enter email alert with timeout elif $exitCode gt 0 ; then echo quot;exit with errorquot; # enter email alert with timeout else echo quot;exit normalquot; fi 配合docker使用,你可能需要考慮signal怎樣傳遞。 在筆者測試的環境中,似乎SIGTERM會被擋,也有可能是SIGTERM太強,它只把前景的docker container run收走,但其內的ping process還在docker daemon中行走。所以最後改用SIGINT,讓docker container run可以好好地把SIGINT傳入其內。 # It seems that docker captured the SIGTERM. Send SIGINT instead # in file optrun.sh timeout signal=SIGINT 10s docker container run rm pingtest c 20 exitCode=$ if $exitCode eq 124 ; then echo quot;timeoutquot; # enter email alert with timeout elif $exitCode gt 0 ; then echo quot;exit with errorquot; # enter email alert with timeout else echo quot;exit normalquot; fi Full demo, github repo cronjobWithDocker

攜手共創保險新氣象 ——專訪宏星共赢集團(SV WIN WIN)四位分經理
人物專訪
鳳凰天空・2016-08-24

Text:Shirley Shi Editor:Joanna Lee Photo:鄧鋒 梁偉德(Kent Leong ) ldquo;自己先要改變 才能影響別人rdquo; 二零一三年年尾入職宏星的Kent只花了兩年時間就晉升到宏利保險分行的經理,是得益於對工作勤力不倦和嚴謹負責,亦是因其對客戶的認真和耐心。曾榮獲二零一六MRA Member 3 Star的Kent表示加入保險行業是偶然,在網上投簡歷的間隙中看到宏星的招聘信息,看到有發展和培訓機制,Kent就心動了。加入到宏星之後,Kent就再沒想過離開:ldquo;宏星裏的人才很多,當你在一個好的團隊裏,你會學到很多東西,不僅限於專業知識,更多的是態度和步伐,每個人都充滿正能量,每個人都在付出和互相學習,你在不知不覺也會變得和他們一樣rdquo;。提到宏星現階段平臺的優勢,Kent表示宏星有系統的內部培訓課程,並與國際商業管理研究所( IBMI )達成合作協議,開通了英國企業家協會( SBP )文憑課程,銜接獲取英國大學學位,宏星的員工可以在短時間內用較少的費用得到文憑證書,能更有效率的增值自我,提高自身的理財實力。而另一方面宏星在基金方面的重視程度相當高,相比其他的很多保險公司已經放棄基金平臺的情況,宏星的保險內容會更精細。 黃任鴻(Daniel Wong) ldquo;別讓平凡淹沒 做人生的主角rdquo; 澳門大學英文傳意系學士出身的Daniel為何會選擇保險行業一展身手?Daniel笑談到他對保險業態度的轉變:ldquo;在做保險之前,我做過好幾份工作,在煙草公司做過市場、在酒店做過活動統籌,當時我和大多數人一樣,對保險行業有偏見,認為做保險不實際不靠譜,好幾次拒絕加入這個行業。但是在當時我就業的職位上,我漸漸找不到滿足感,只有執行力而沒有話語權的我無法得到施展自身的機會,正在我迷茫的時候聽到了亦師亦友的前輩的一番話,他讓我意識到在宏星我擁有能為自己發聲的機會,能給自己的做人生導航,亦讓我改變了對保險行業的偏見,保險不是無回報的純消費支出,保險產品能利人利己,能幫助身邊的朋友親人獲得更好的保障rdquo;。聊到宏星共赢集团平臺帶給客戶的優勢,Daniel表示不單單局限於保單的內容:ldquo;宏星對員工的培訓和理念每一個方面都是從客戶的角度出發,比如我們有一個推廣的贈品是一款可以測量運動量及睡眠質量的Misfit智能手環,幫助客戶更健康是我們送這款手環的出發點,只要運動量達標的客戶,購買的保單會有折扣。更多時候我們不是在和客戶談錢,而是切身實地的從客戶的利益出發。rdquo; 王影斯(Farica Wong) ldquo;真誠 讓自己更大膽rdquo; 作為家族傳承規劃師、財富傳承規劃師,Farica自二零一一年入職宏星以來,從理財策劃主任做到分行經理,囊括IDA、COT、CMF等無數國際獎項,用真誠的態度和專業知識幫助客戶達成所願。ldquo;其實我是一個不喜歡說話的人,大學專業不是金融的我不擅長理財、也沒有理財的意識,身邊的人都沒想過我會去做財務策劃這個行業。 後來因緣巧合的對這行有了接觸,發現從安全和保障上來說,保險還是滿重要的,於是毅然堅定投入到了這個行業,在加入宏利人壽的宏星集團後,我性格上有很多的轉變,變得更大膽、更自信,人也更開朗,我想這得益於我真正幫助到客戶之後所獲得的成就感和滿足感rdquo;。談到在眾多保險公司中選擇加入宏利的原因,Farica解釋全取決於宏利的穏健名聲:ldquo;我是一個滿簡單的人,當時也沒有做太多的瞭解和選擇,只是身邊的人談到保險行業都會提及宏利,而其中無一是負面的評價,我就在想這樣一個有口碑的零差評公司一定會有所發展。rdquo; 陳文聰(Terry Chan) ldquo;腳踏實地 每個人心中都有一個巨人rdquo; 作為資歷最深的一位分行經理,Terry在加入宏星之後業績一直亮眼,二零一五年更亦是季度最高增員經理的第一名。自二零零四年就入行保險業的他一路見證了澳門保險業的起伏和發展,談到保險行業的改變,Terry也很有感慨ldquo;十年前自己在保險行業剛剛起步,當時澳門的經濟也未有如今繁榮,本地人沒有太多購買保險的主動需求,而現在大家對保險的接受程度都比較高,很多人改變觀念,認為保險是必需品rdquo;。鼓勵年輕人追夢的Terry強調腳踏實地的重要性,不管從事怎樣的職業、造就怎樣的夢想,都不應只將夢想掛在嘴邊,而不付諸實際,對他而言成功是可以被複製和傳承的,但也取決於平臺的好壞,在他眼中,宏星是一個很好的平臺,能將優秀的人凝聚在一起,將最正面的理念傳遞出去:ldquo;這裡的每一個人都有拼勁,在彼此的鼓勵和影響中,他們就像是各自的巨人,幫助對方不斷成長rdquo;

大豐CTM Visa Signature信用卡隆重面世
生活在我城
LifeMag Editor・2016-07-11

大豐銀行、澳門電訊及中銀信用卡國際有限公司今天7月7日宣佈,攜手推出全澳首張聯營Visa Signature信用卡 大豐CTM Visa Signature信用卡,特別為追求優質生活品味和尊貴服務體驗的澳門電訊客戶而設。成功申請之客戶,除可尊享多項澳門電訊的電訊服務禮遇及優惠外,更可享有靈活的理財服務、多元化的購物樂趣、全天候的禮賓服務,充分突顯客戶尊貴超卓的地位。 「大豐CTM Visa Signature信用卡」發行儀式今天假大豐銀行總行大廈21樓舉行。澳門金融管理局主席丁連星、大豐銀行董事長何厚鏜、大豐銀行行長周鵬、澳門電訊行政總裁潘福禧、中銀信用卡國際有限公司副總經理馮燕芬共同主持了儀式。 大豐銀行副行長沈堅衛在儀式上致辭時表示:作為本地歷史最悠久的銀行之一,大豐銀行始終本著立足澳門,服務社區,輻射大中華的經營方針,積極為工商業,為市民提供全面、貼心的金融服務。他表示,此次與CTM合作,是在優化傳統服務的基礎上,繼續為澳門市民提供與時並進的服務,令不同的客戶層都稱心滿意,且希望客戶無論在本地或出外,更能體驗貼心服務,盡情享受消費的樂趣。 澳門電訊商務副總裁湛寶儀在致辭中指出,為了令客戶享受更多創新優越的服務體驗,澳門電訊積極與不同機構展開深入合作,利用各自的資源和服務優勢,為客戶打造全方位的卓越優質服務。她表示,旅遊出行已成為市民生活的一部分,因此大豐CTM Visa Signature信用卡特別為澳門電訊客戶提供無限次免費享用全球機場貴賓候機室服務的豪華款待,而無需任何簽賬額的要求。澳門電訊更特別呈獻「跨域數據組合」日費計劃予成功申請大豐CTM Visa Signature信用卡的客戶,希望可以讓客戶輕鬆出行,隨時隨地透過快速數據網絡與親友分享旅途的點滴。湛寶儀表示,大豐CTM Visa Signature信用卡的面世,正是三方緊密合作的豐碩成果,標誌著三方合作層面的進一步深化和延續,從而為彼此的客戶帶來更大裨益。 大豐CTM Visa Signature信用卡客戶除可享有永久免年費、積分獎賞、飛行裡數奬賞等非凡禮遇,還可尊享一系列靈活的理財服務及澳門電訊尊尚優惠,包括大豐銀行股票買賣0.168%的傭金優惠,於澳門電訊門市購買指定產品可享低至7折優惠等;此外,從即日起至2017年12月31日止,客戶於本地餐飲、酒店及海外簽賬,可享有高達6倍的積分獎賞,無限次免費享用全球Priority Pass及多間環亞機場貴賓候機室服務,於世界各地體驗尊貴豪華的出行款待。 為了配合大豐CTM Visa Signature信用卡的推出,凡成功申請的客戶,即可獲贈船票現金券及澳門電訊跨域數據組合之迎新禮品,總值$790,讓客戶於旅途中亦能暢享澳門電訊的服務。 有關大豐CTM Visa Signature信用卡的申請詳情及最新推廣優惠,請登入 www.ctm.net 或 www.taifungbank.com 查閱。信用卡客戶服務熱線:89889966。

你開始寫 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開發中加入你自己的測試!

發佈Docker Swarm App的選擇 - CI/CD系統的參與
科技新知
MacauYeah・2023-08-25

一段時間前,筆者就討論了一些Docker打包的程式的文章,也討論了一些Docker Cluster環境下的選擇。現在也是時候,可以分享一些對於發佈環境的可選空間。 CICD系統 CICD 全稱是continuous integration CI 和 continuous delivery CD,字面上代表的持續地集成和發佈,實體上就是某台伺服器自動發佈APP。因為使用到Docker Cluster,不論前述什麼選擇 前文連結 請點這裏,都會有多個node節點的出現。要發佈App,總不能一個個node逐個登入設定。所以我們需要一些CICD工具,把這個過程都自動化。 在筆者的認知上,CICD系統,由兩個部份組成,一個是取得Source Code程式原始碼的過程,一個是編譯或發佈Source Code的過程。Gitlab,Github,BitBucket等大型的代碼庫供應商,它們天生為了保存Source Code而提供服務的。不少CICD系統都可以跟它們整合,它們提供了存取Source Code的部份,剩下你只要能提供編譯或發佈的伺服器就好。 如果作為小型開發團隊,很少會有意願去自己花錢養一個編譯或發佈的伺服器。極端地,如果我就是一人團隊,我用自己電腦編譯和發佈就好,伺服器能做的,我自己也能做。好消息的是,Github提供了一個叫Github Action的CICD系統,即使你沒有自己的編譯專用的伺服器,Github Action也可以用Docker Image,提供一個臨時的編譯程序,用完就刪掉。詳細功能還請各位先查看官方教學,筆者也暫時只能零星使用經驗,無法給出有意思的架構。 如果對智慧財產權有高度重視,Source Code不能存放在公開的伺服器,那麼Gitlab Enterprise Edtion則是一個好選擇。運用Gitlab ee,你可以用自己的機器,造一個純本地的庫存伺服器。更強的是,它內建也有CICD系統,只要你有間置的伺服器,就可以作為編譯使用。筆者也是從這個方向著手,架設了自己的Gitlab RunnerGitlab CICD系統。在這裏,就分享一下與Docker Swarm整理的概念。 對於前述兩種選擇,GitLab Runner都可以做得到 底層程式打包成Image並運行在Swarm mode上,每次發佈的是App Binary執行檔或核心檔案。 把App直接打包成Image,並運行在Swarm mode上,每次發佈的是App Image。 CICD 打包底層程式成為Image 在這個選擇下,其實就跟傳統自動化發佈的做法類似,只是發佈時,要多個node報行更新指令。如果你使用的底層程式原本就有支援多版本並行,這樣更新時就不用太操心rollback回滾等操作。若系統不支援多版本並行,為求簡化,若遇到要rollback的情況,重跑過去舊的CICD操作也是一個做法。當然,我們也可以經過一些備份的操作,來保存被代替的程式,若在發佈過程中出問題,也可以手動重來,不過整件事就越來越複雜。 筆者發佈的基本思路是 使用docker image,編譯和打包App Binary。 使docker image做編譯的好處是,你可以比較放心地假設每次編譯時,你的編譯環境都是乾淨的。 傳送上述的結果至生產環境可以取用的地方。 跳入生產環境執行更新指令 這裏有些隱藏的管理成本,如果你生產環境中有多個node,最後那幾行指令就要多抄幾次。 CICD 打包App成為Image 在這個選擇下,對比傳統自動化發佈的做法,現在要多做一步,就是要包裝自己的Image。不過好處是docker swarm有提供監測工具,在發佈過程每個分身會逐個更新,前一個分身更新成功後才會到下一個分身更新。而且 rollback等的操作,你可以靠docker做到。即是要手動rollback,也可以透過更正docker tags來達到,所以整體上來說沒有比傳統的麻煩。 筆者發佈的基本思路是 編譯App Binary。 打包成docker image。 經docker上傳image。 跳入生產環境執行更新指令。 對比傳統自動化發佈的做法,最後的更新指令,只要執行一次就可以。當然,原本在Docker Swarm中要管理的事還是要好好管理。 CICD 備註事項 雖然CICD可以幫忙簡化更新的過程,但實際操作會比上述的例子複雜一些。因為通常對非技術型的外界用戶來說,一個Web App會包含很多不同的功能。上述的例仔,在實際情況下可能需要拆解成很多微服務來進行。所以對管理上還是有相當的挑戰。

澳門教育家陳康妮:研究強調讓澳門孩子帶頭的重要性
文化創意
陳康妮・2021-04-01

【作者簡介】 陳康妮 Miss Connie 澳門科技大學講師 澳州墨爾本大學主修高等教育管理學 澳門高等教育管理學專家(Digital Educator) 澳門培訓師 (Digital Trainer) 澳門教育專欄作家 (Digital Writer 全球職涯發展師 從事高等教育管理培訓工作十七年 「即使在孩子們忙於工作的時候,父母也有能力找到參與其中的方法。」 「但是,過多的直接參與會損害孩子控制自己的注意力,行為和情緒的能力。」 今天的父母經常尋找可教的時刻 機會比比皆是。例如,與孩子一起讀書時,可能意味著與他討論故事情節。如果不允許她玩電子遊戲,那就說明原因。 這樣做有充分的理由:研究表明,有教養的父母可以幫助孩子建立認知和情感技能。 外國一項新研究表明,過多的父母指導有時會適得其反。在這項研究中,研究人員觀察了幼兒園年齡的孩子們積極玩耍,清理玩具,學習新遊戲和討論問題時父母的行為。父母的孩子們經常出面提供指示,更正或建議或提出問題,儘管他們的任務適當,但他們在其他時間卻難以控制自己的行為和情緒。這些孩子在衡量延遲滿足感和其他執行功能,與衝動控制相關的技能以及在相互關注的需求之間轉換的能力方面的表現也較差。這種現象發生在整個社會經濟範圍內。父母已經習慣於找到辦法讓自己參與進來,即使孩子們正在執行任務並積極地玩耍或做他們被要求做的事情,但是直接參與過多會損害孩子控制自己的注意力,行為和情感的能力。當父母讓孩子帶頭進行互動時,孩子會練習自我調節技能並建立獨立性。外國有研究引入了比傳統方法更為詳盡的父母參與度測量方法,為父母在小學階段的關鍵過渡期間如何幫助和阻礙孩子的成長提供了新的亮點。 與此同時,今天的父母越來越被「直升機」和「掃雪機」的照顧者所嘲弄,他們花在孩子身上的時間比他們的父母多得多 甚至在COVID19大流行之前,許多父母就變成了主要的玩伴和家庭學生。 深入探討親子互動 奧布拉多維奇說,與孩子互動時找到適當的平衡在幼兒園尤為重要,外國有研究調查了看護環境如何隨著時間的流逝對孩子的健康,學習和幸福做出貢獻。上小學是一個特別具有挑戰性的時期,希望孩子們在父母的直接幫助下控制他們的注意力,情緒和行為。 當父母必須學會退縮時,這是一個非常重要的轉變,外國有研究匯集了100個年齡在4至6歲之間的兒童。孩子們花了兩個半小時的時間來完成一系列任務,這些任務已經被兒童發展專家幾十年來用來衡量自我調節以及被認為「很酷」(情緒無關緊要)或「熱」(情緒高漲時)。孩子們還與父母一起參加需要不同程度的成人互動的有組織的活動。 在一種新穎的方法中,學者們分別對每個父母和孩子進行了觀察。使用視頻記錄,互動被一秒一秒地分解,並被獨立評估。這使奧布拉多維奇和她的團隊發現了父母與子女交往方式的細微變化。例如,在25分鐘的活動中,一位母親可能跟隨兒子的步伐13秒鐘,然後退出5秒鐘,然後再引導他35秒鐘。 通常,當研究人員研究育兒的給定方面時,他們會為整個互動分配一個單獨的評分。但是,研究人員對親子關係的總體印象可能會使這種方法產生偏差。 大多數看護者似乎都支持和關懷。平均而言,您不會看到很多父母對他們的孩子大吼大叫,或者打擾他們玩手機或檢查手機。「但是這些平均值之間存在很大的差異,我們的目標是發現通常表現良好的父母之間存在更細微的差異。父母交往事項的這些瞬間變化。這些都是微妙的事情,但孩子們得到的資訊可能並不那麼微妙。」 允許休息 為了進行分析,外國研究人員創建了一種衡量他們所謂的「父母過度參與」的方法。他們記錄了孩子獨立工作或領導活動的時刻,並計算了父母以有幫助的方式(不是苛刻或有操縱性)進行幹預的時間與父母跟隨孩子的領導時間之間的比率。 研究人員發現,當孩子專注於一項任務時,父母的高度參與與孩子在自我調節和其他行為方面的困難之間存在相關性。這對於兒童的「熱」執行功能最為明顯。 當孩子被動參與時,研究人員沒有發現父母過度參與和孩子的自我調節之間有任何聯繫。這表明當孩子沒有積極地執行任務時,父母介入不會有任何傷害。 這項研究的目的不是要批評父母。當我們談論父母過度參與時,我們並不是說這是不好的或明顯的侵入性參與。「提出想法或給孩子小竅門沒有錯。但是對於父母來說,重要的是要意識到可教的時刻在他們的位置上。例如,已經證明幫助學齡前兒童完成拼圖可以支持認知發展和建立獨立性。當孩子不注意,不遵守規則或半心半意地從事一項活動時,指導很重要。 但是,有時候,孩子們只需要一個人呆著或任其掌管即可。奧布拉多維奇指出,這一資訊在大流行期間可能特別相關,當父母可能想知道孩子需要多少直接參與時,尤其是在每個人都在平衡新義務的情況下。 與自己進行誠實的交談,特別是如果您的孩子表現良好的話。」 「現在壓力很大,請嘗試尋找機會讓他們帶頭。」

澳門IT界領航人 -----專訪黃偉明先生
人物專訪
鳳凰天空・2016-05-05

Text Lorraine Photo 鄧鋒 步入天網諮詢科技有限公司,光纖明亮、裝修風格現代化的辦公室,在電腦前專注辦公的員工,接待處展示櫃裡不勝枚舉的獎盃,無不透露這家公司的成熟與專業。 天網主席兼行政總裁黃偉明先生,身著深藍色西裝外套,款款走來。向我們述說科技公司創立這二十年的風雨歷程與澳門回歸祖國後科技業的發展。 1996年,整個澳門只有一家電腦公司在向公眾售賣坐臺式電腦,其款式功能也只能運行簡單的程式應用,做一些表格文書處理。而當時的香港、新加坡已經出現了多家SI,既系統集成商,這是澳門完全沒有的。黃先生認為這樣一種將網路系統集成化,不同電腦可以連貫在一起的技術模式在澳門大有發展前景,於是便與三、四個合夥人一同創立了天王諮詢科技有限公司。公司成立之初的澳門社會環境並沒有充足的IT技術資源,許多專業執照的考核需遠赴新加坡、北京甚至是美國,而黃先生認為系統集成商作為一家博採眾長于各廠商的公司,並沒有硬體資產,唯一的核心競爭力是人才。如果能得到優秀的人才,那公司則必然成功。於是黃先生與合夥人不惜花重金,培訓出了澳門首批四位思科認證互聯網專家。當時的黃偉明先生也希望這樣的投資能引起更多澳門市民對IT行業的興趣,加入IT市場。 回顧天網創立的這十九年裡,九七年的金融危機,零三年的非典,零八年的金融海嘯,都並未讓公司業務出現虧損,相反天網十幾年內的業務增長一直呈現著每年百分之十以上的趨勢。黃先生認為他們之所以能一直保持良好的業績,是在於每當公司面臨大環境下的經濟危機時,他們會首先將公司資源投放在內部人才培訓、內部系統及硬體設備等提升上,在經濟差時打好基礎,等澳門經濟回升時天網便牢牢抓住了失不可得的發展機會。 回顧澳門回歸這十六年來,黃先生感慨道,澳門回歸後賭權的開放對於中小企業來說是一個非常好的開始。它不僅帶動了澳門經濟,也讓外來企業有機會引入資金、駐進澳門,尤其是IT企業為澳門帶來了新的科技。回歸之前,澳門的科技水準與香港、新加坡等先進城市的差距至少有五到十年。現在外地IT公司不斷湧入,運營資金、經濟效益增加,IT行業的投資方案也增多,如今澳門與外界的科技距離縮短了,甚至超越了許多國家。談及天網科技公司對澳門社會的回饋,黃先生提到,因為賭權開放令很多企業願意投資澳門,隨之科技領域拓寬,他們希望借此機會將更多的科技引進給澳門政府與社會,讓澳門與外界的科技差距進一步縮小,甚至超越一些周邊區域。另外黃先生也希望在當下繼續著重于對科技人才的培養,他說因為在九七年、零三年科技行業遭遇過泡沫破裂,導致零七至零九年入讀IT的學生少之又少。直到現在,很多澳門市民還存在著讀IT專業無用的誤解。然而事實上當下的澳門社會每年都需要二至三千的技術人才彌補IT行業的空缺。黃先生笑著說,他並不介意別人笑話他的公司是少林寺,培訓完的新人總是跳槽到政府、賭場,好像總是在幫別人培訓人才。他認為公司對新人不斷的培養,才能使澳門IT界有機會將水準慢慢提高。 同時,黃先生也希望讓公司的力量多參與進社會公益事業以回饋社會,為市民做出一點貢獻,例如資助教學與慈善機構,甚至計畫未來能設立獎學金,鼓勵年輕人投身于IT行業。 展望未來的五年,黃偉明先生謙虛的說天網諮詢科技公司作為一家系統集成商,就像是一個大象,走得比較慢。對於公司發展是否能長久他們想得不多,接近二十年的經驗讓他們更注重於程式與結果,而不急於求成。另外,今年黃先生正著力打造新的公司形象,希望使天王變得更加具有專業性與活力。同時,因為澳門城市面積與人口都相對較少,非常適於建設智慧型城市,黃先生表示因為現在澳門身份證的電子資料等還有很多空間可以開發與運用,澳門政府在電子政務領域有很大的發展空間,所以他也非常希望在這一方面貢獻一份力量。

為程所困-是什麼讓你不想寫自動化測試?
科技新知
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的回傳,有些情況下,這樣會更真實,但大家就必需好好定義測試場的行為。因為測試場可能與團隊的其他成員所共用,有機會其他人可能想要更多互動的測試方式,而非固定的結果。但並上非固定結果的測試場,自動化要測試的可控度就減少。