搜尋

搜尋結果

今日空氣質量指數何其差,還可以外出嗎?
生活在我城
Trisha・2017-09-18

今日空氣何其差gt;.lt; 哇今早起床煙霞好像是好大的樣子,呼吸也辛苦極了,人也感覺很累,這樣的天氣外出活動會有影響嗎 筆者是一個有探求精神的女子,見到今日這樣子的天氣,也是去搜集資料,要知道出現煙霞大的時候會對人體有何影響呢 今早登入澳門氣象局的網站,就發現今日的空氣質量是非常不良。 空氣質量指數 預測 20170918 之空氣質量指數 監測站 澳門空氣質量指數 空氣質量 路邊 150180 不良 高密度住宅區 165195 不良 一般性 180210 不良非常不良 面對不同級別的空氣質量指數,我們可以採取下列措施 健康忠告 我應該採取甚麼預防措施 我們建議你在不同空氣污染水平時採取適當的預防措施 健康風險級別 空氣質素健康指數 易受空氣污染影響的人士 戶外工作僱員 一般市民 心臟病或呼吸系統疾病患者# 兒童及長者 1 3 可如常活動。 可如常活動。 可如常活動。 可如常活動。 4 6 一般可如常活動,但個別出現症狀的人士應考慮減少戶外體力消耗。 可如常活動。 可如常活動。 可如常活動。 7 心臟病或呼吸系統疾病患者應減少戶外體力消耗,以及減少在戶外逗留的時間,特別在交通繁忙地方。這類人士在參與體育活動前應諮詢醫生意見,在體能活動期間應多作歇息。 兒童及長者應減少戶外體力消耗,以及減少在戶外逗留的時間,特別在交通繁忙地方 可如常活動。 可如常活動。 810 心臟病或呼吸系統疾病患者應盡量減少戶外體力消耗,以及盡量減少在戶外逗留的時間,特別在交通繁忙地方。 兒童及長者應盡量減少戶外體力消耗,以及盡量減少在戶外逗留的時間,特別在交通繁忙地方。 從事重體力勞動的戶外工作僱員的僱主應評估戶外工作的風險,並採取適當的預防措施保障僱員的健康,例如減少戶外體力消耗,以及減少在戶外逗留的時間,特別在交通繁忙地方。 一般市民應減少戶外體力消耗,以及減少在戶外逗留的時間,特別在交通繁忙地方。 10 心臟病或呼吸系統疾病患者應避免戶外體力消耗,以及避免在戶外逗留,特別在交通繁忙地方。 兒童及長者應避免戶外體力消耗,以及避免在戶外逗留,特別在交通繁忙地方。 所有戶外工作僱員的僱主應評估戶外工作的風險,並採取適當的預防措施保障僱員的健康,例如減少戶外體力消耗,以及減少在戶外逗留的時間,特別在交通繁忙地方。 一般市民應盡量減少戶外體力消耗,以及盡量減少在戶外逗留的時間,特別在交通繁忙地方。 除留意以上的一般健康忠告外,你亦可按本身健康狀況調整體力活動。由於空氣污染對不同人士的影響不一,如你有疑問或感到不適,應徵詢醫生的意見。如你有吸煙習慣,應立即戒煙! 忠告不適用於易受空氣污染影響的人士。 # 例如冠狀心臟病及其他心血管疾病、哮喘及慢性阻礙氣管疾病,包括慢性支氣管炎和肺氣腫。 參考資料 1.澳門物理暨氣象局httpwww.smg.gov.mosmgc_index.htm 2.空氣素量指數,健康忠告 httpwww.aqhi.gov.hktchealthadvicesubhealthadvice.html

排程執行任務 | 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

ANA 香港出發古屋HKD2,290!東京HKD2,940!
激安優惠
OHChance 旅遊誌・2018-10-26

ANA 全日空推出東京及名古屋航線優惠,名古屋雖然話用有d 舊ge 737飛,但2300直飛兼包46KG行李真係去outlet 掃貨首選。 呢次覆蓋日期都幾長,但所有d 大假如聖誕、新年、復活節等都無平飛。 《優惠價錢(來回連稅)》*香港⇄東 京:HKD2,940*香港⇄名古屋:HKD2,290    《出發日期及最長停留》.出發日期:11月1日至5月31日(東京)      1月1日至5月31日(名古屋).最長停留:14天   《購票日期及方法》.購票日期:10月29日1659前預訂.購票方法:至全日空航空官網.預訂網址:httpswww.ana.co.jpzhhk  【輔助訊息】.ANA 票價已包46KG託運行李及餐點。  附註:上述最低價錢為航空公司公告之最優惠價格,或本站能找到的最低價格;每一航班有否優惠票價及所存票量由航空公司決定,優惠票量有限售完即止。  價錢 Sample ndash; 香港飛名古屋來回連稅HKD2,290 ===== 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 httpsohchance.info 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 httpsohnote.info 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:httpsyoutube.comcOHChanceTravel 睇埋 Facebook 專頁 httpsfb.comohchance 第一時間獲得最新旅遊資訊!

食記】Athletic Juice & Espresso Bar:啟動每天好神!
全球飲食
原來世界這樣大・2018-08-09

別人説一日之計在於晨,早點起床確實有很多好處,除了感覺時間可以更好使用之外..人想覺得特別的精神!而想活力充沛地迎接每天最不可缺少就是一份豐富的早餐。 不過可是家裡健康的食物實在不多,最多的是公仔麵,加上為人比較懶惰,還是比上班時間早點出發去吃個豐富的早餐罷了!於是,我就做了些資料搜集,四出找尋早餐的地方。 於是,我就做了些資料搜集,四出找尋早餐的地方。我找到距離公司不遠星街內的Athletic Juice amp; Espresso Bar主打健康果汁,決定比平時早半小時出門,吃個豐富的早餐來迎接這個忙碌的星期。 可是,去到店員就跟我説牛油果未到,所以Avolatte和其他牛油果的飲品或食品都暫時不能供應,對於我這個牛油果狂迷實在是傷透了心,取而代之是Ham amp; Cheese sandwich 和鮮榨果汁。 Ham amp; Cheese 有三層,比我想像中的多,簡簡單單的在烘過的麵包上加上火腿和芝士,再配著鮮榨果汁。在Athletic Juice有各種配搭的果汁,即點即榨。在10款果汁確實是眼花瞭亂,隨便點了個J06的Rachquet Hitter ndash; 包括有芒果、熱情果、菠蘿和檸檬。因此顏色偏黃一點,在芒果的甜味之中帶著菠蘿和熱情果的鮮味,相當新鮮。 有這半小時享受這份早餐,叉足電後上班去! Athletic Juice amp; Espresso Bar灣仔星街2E號地下

Swarm mode 上線 4 | IP 設定
科技新知
MacauYeah・2024-07-23

單機模式 IP設定 平常我們自己做測試,網絡功能通常用預設的就好。但當我們的Docker Container需要存取在區域網內的其他資源,避晚IP網段相衝是必需要的事。 大部份情況下,單機Docker使用的預設IP段會是 172.17.0.016 172.18.0.016 ... 若然現在區域網中,有一段172.18.0.024,大家不想Docker踩到其中,可以修改設定檔,加入預設的defaultaddresspools,以後它就只會從指定的區段使用。 # vim etcdockerdaemon.json quot;defaultaddresspoolsquot; quot;basequot; quot;172.17.0.016quot;, quot;sizequot; 24 , quot;basequot; quot;172.19.0.016quot;, quot;sizequot; 24 , quot;basequot; quot;172.20.0.016quot;, quot;sizequot; 24 其中base,是docker可以操作的總區域,size指的是Docker要自行分段的話,每段的大小是多少,上述的例子,就代表未來可能有以下Docker 網段。 172.17.0.024 172.17.1.024 ... 172.17.255.024 172.19.0.024 172.19.1.024 ... 172.19.255.024 172.20.0.024 172.20.1.024 ... 172.20.255.024 修改完設定後,重啟Docker就會生效。當然,重啟前,先刪除所有不在預設範圍的所有Container。 Swarm模式 IP設定 Swarm模式,與單機差不多,它需要在初始化Swarm就要定義,而且它不能與單機的網段有重疊。單機會預設使用Private IPv4 Class B,Swarm則是預設使用Private IPv4 Class A段,所以我們若就更改,就使用10.x.x.x吧。 docker swarm init defaultaddrpool 10.1.0.016 defaultaddrpoolmasklength 24 經上述例子初始化的 ingress 網段,將會是 10.1.0.024,隨後每個stack 則會是 10.1.1.024 10.1.2.024 10.1.3.024 重置Swarm 跟單機的情況類似,如果已建立Swarm後才修改網段,還是要整個刪掉重來。 每個節點都要執行以下指令。 docker swarm leave force 實測swarm leave這個指令也會把所有運行中的stack刪掉。 各節點重新建立swarm # in node 1, init new swarm with new ip docker swarm init defaultaddrpool 10.1.0.016 defaultaddrpoolmasklength 24 # in node 1, get new manager token docker swarm jointoken manager # in node 2 and node 3, join node 1 with new token docker swarm join token XXXXX YOUR_NEW_NODE1_IP2377 雙管齊下 如果大家同想要修定單機及Swarm的網段,還要留意有一個特別的網段docker_gwbridge。它雖然是Swarm的附帶產物,但它則是受單機的網段控制。也就是,如果大家有需要同時修改單機及Swarm的網段,則需要手動刪除Swarm及docker_gwbridge 在每個節點先刪掉舊有的Swarm及docker_gwbridge,並關掉docker docker swarm leave force docker network rm docker_gwbridge 在每個節點為docker_gwbridge修改設定,然後重起docker # vim etcdockerdaemon.json quot;defaultaddresspoolsquot; quot;basequot; quot;172.17.0.016quot;, quot;sizequot; 24 然後像前述一樣,重起Swarm。

世界最長地下藝術長廊 盡在斯德哥爾摩地鐵線
走遍世界
行走世界記錄・2018-07-01

斯德哥爾摩藝術之旅 地鐵是便捷的交通工具,往來地鐵站的都市人通常都步履匆匆。有想過放慢腳步,細心欣賞地鐵站建築的美嗎 世界最長地下藝術長廊 斯德哥爾摩是北歐國家瑞典的首都,擁有紅、綠、藍三條地鐵線,沿線110個車站當中,超過90個車站有著各式各樣的藝術裝飾品,從50年代開始共有150位藝術家陸續為地鐵創作出各種藝術裝飾品,恬靜的藍與白,熾熱的紅與綠交織出一個又一個富藝術氣息的地鐵車站。 國王花園地鐵站 斯德哥爾摩是由島嶼組成的城市,地鐵建造需要穿透堅硬的岩石地層,因此車站仍然可看到這些來自冰河時期的岩石,被塗上七彩繽紛的色彩,讓整個運輸系統增添不少藝術氣息。給大家介紹藍線的國王花園車站 Kungstrauml;dgaring;rden。 宮殿遺址 國王花園地鐵站所在位置是被火燒燬的斯德哥爾摩Makalouml;s宮殿的遺址,宮殿遺下的雕塑和浮雕等珍貴物品以藝術形式擺放,潤飾整個地鐵站。 穿過藝術走廊、經過雕塑到達乘車月台,牆壁上沒有一貫的廣告看板,有的只是簡約的藝術裝飾品,令繁囂的都市稍稍停下休息一會。 踏入列車的一刻,想像著車廂的模樣,事實是跟普通的地鐵車廂沒兩樣呢 如果計劃到訪斯德哥爾摩,不仿大膽來個藝術之旅,在斯德哥爾摩110個車站中找尋你最喜愛的藝術裝飾品。 更多精彩文章在 行走世界記錄

為何 VueJS 除錯如此麻煩?
科技新知
MacauYeah・2025-11-04

前一次,筆者分享了VS code debugging frontend的好功能,也確實了coding anywhere並不是一個普通的notepad language server就可以解決的事。我們還要考慮如何debugging 除錯)的問題。 雖然筆者知道 vscode 可以解決問題,但為何 最原始的 nodejs debugger 不能解決問題。如果node debugger 不能解決問題,那麼 vscode 又做了什麼,它可以解決問題?經過一輪的實驗,筆者懷心疑,也許,強大的並不是 vscode 本身,而瀏覽器才真正的做到 debugger 的功能。而 vscode 只是以更方便的方式,重現那些結果。 為何 backend 的 debugger 不發揮作用? 筆者舉例,現時有一個 vue 3 專案,使用官方建議的方式生成 $ npm create vue@latest 這個專案,在開發模式下,會以 vite 架起一個端口為 5173 的伺服器,讓開發人員可以經過瀏覽器看到vue內容。筆者一直都認為,只要在 vite 的指令中插入 inspect 參數,一切就可以成功,就像 nodejs 一樣,只要在開始時加入參數就可以。結果當然是不行的。 經過對比 VueDevTools 的參考功能,筆者發現了一個出發點的問題。vite 其實是一個伺服器級的程式,也許它只是負責把所以 vue js 動態轉成常見 js,就像 webpack 一樣。我們想要設的中斷點,都不在它的程式上,所以 debug 參數也沒有用。實質,我們要加的中斷點,其實要在客戶端上,也就是瀏覽器上。那因此,VueDevTools 也不包括那些功能。它只是好好地記錄了每個 vue component 或 js 是如何被改寫的過程(就像被 webpack改寫的過程)。 官方又是用什麼來除錯的? 既然我們知道了問題所在,就要看看傳統的 javascript 又是如何除錯的。實際上,因為瀏覽器的配合,設立中斷點的功能,原來早就實現了。 httpsdeveloper.mozilla.orgenUSdocsWebJavaScriptReferenceStatementsdebugger 只要我們在任何 javascript 地方,插入 ldquo;debugger;rdquo; 這個神奇的字,瀏覽器就會在inspect模式下,自動產生中斷點。之後,你可以控制瀏覽器進行watch step into step over 功能。絕對比console.log更有意義。 在發現了這個方法之後,回去找vue3的官方文件,驚訝地發現,它就是提議用這種方式進行除錯。 httpsvuejs.orgguideextrasreactivityindepth.html#reactivitydebugging 未解之謎 雖然我們找到了設定中斷點的方式,但對於vscode是如何做到客戶端、伺服器端通用這件事,筆者還是沒有了解到。就以現在的知訊來看,很大機會就是vscode操控了瀏覽器的除錯模式,把所有資訊都回傳了vscode本身。這也是解譯了為何vscode在起動debugger時,必需要由vscode自己叫起瀏覽器。而codeserver這類雲IDE無法叫起本地瀏覽器,就造成它無法運用除錯功能的原因。 有與趣為codeserver一起搵解決方案的朋友,可以到筆者的 httpsgithub.commacauyeahAProgrammerPrepares ,以文字教學的方提交你的解決方案。 祝願大家可以早日實現coding 自由。

Docker Tag 命
科技新知
MacauYeah・2024-10-24

一般來講,同一個docker image會提供多個不同的版本,每個版本會附予不同的tag,以作標識。但以docker image的維護者來講,它的tag通常代表的是自己程式的版本號。不過這個版本號卻存在很多變數,就讓筆者好好地逐一說明。 程式的版本號 在沒有Docker的年代,其實所有軟件在發佈時,都會標示版本號,方便使用方明確追蹤問題,自行選擇升級、降級以解決相容性問題。大家要重現問題,也能清清楚地重現。所以docker image的tag,在某程度,都是代表發佈自己的程式版本號。但以前的年代,軟件底層的依賴,例如OS層面的共享程式庫,則不在發佈的管控中,所以過去的程式,在跨電腦安裝時,都會出現缺少某些共享庫的問題。而使用了Docker後,image以內的共享庫的都會在打包的那一刻固定和發佈,就不會有漏的問題。 庫更新,怎麼辦 上面說到image可以打包共享庫,但問題是共享庫也會有安全性更新問題,那麼對docker image的維護者來講,它自己的tag又該如何命名? 因為庫的量可大可少,所以一般來說,都不可能完全把各個庫的版本號寫在自己的tag上。退而求其次,就是用quot;版本號日期quot;,庫的細版本號,就存在原始碼當中。Ubuntu 就是這樣的例子。 不過quot;版本號日期quot;的命名方式真的方便嗎?每次下遊用戶想更新去最近版本,都要自己找一次最近的日期。這樣對很多用戶來講都不夠方便。所以docker又提供了一個重tag的功能。例如ubuntunoble,在早些時候指著noble20240904.1,然後過幾天,又指向更新的noble20241009。更常見的是latest,每次image都預設會存在,docker也希望大家會定期更新這個tag,讓大家可以更易地找到最新版本。 註 這跟git tag有所不同,git tag並不預期會變的。當協作者收到tag後,那怕上遊刻意更新tag指針,協作者沒有刪除原tag之前,都不會知道tag更新去了哪裏。 我們該如何選 在發佈方和引用方來講,引用時可以明確使用唯一的quot;版本號日期quot;,對穩定性來講是有意義的。不過多多少少,會產生額外的時間成本。發佈方來說,就是多用了一些儲存空間,方便引用方可以隨時找到舊庫版本。而引用方,就要手動修改引用號,作為驗收依據,自動更新的難度比較大。 但對於自動更新要求比較大的情況下,可能就是使用latest或者會隨時更新的share tag共用tag比較實際。但我們也依然要定一些方式去版本更新記錄,例如:同時使用 beta latest archive 每日自動更新beta,只有所有測試都通過時,才把archive指向現在的latest,再把latest指向現在的beta。這樣做的好處是,核心的docker stack檔案改變的機會較少,也可以免除docker swarm做太細緻的權限管理。