搜尋

搜尋結果

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 才能發出。

docker swarm 回到最基礎的群集組建
科技新知
MacauYeah・2025-11-21

雖然筆者都知道,全世界在講 k8s ,全世界都叫筆者放棄 docker swarm,但無獨有偶,docker swarm 還是有使用的價值。 你只有單個服務在運行,只想要做冗餘或分流。快速地用 docker swarm 做最小可行性産品,推出市場。 傳統的HA功能做到了,但你沒有中央匯整日誌的功能。而你也不想把事情攪得太複雜,使用docker swarm 可以讓你在任何一個管理節點上查看不同 container 的日誌。 你的客戶只提供VM,他可能有自己的k8s平台,但不讓你使用。自建一套docker swarm ,先入場,事後擴展再要求客戶提供k8s,對於客戶來講,先證明系統是有價值的,在金錢成本上或能力上,一定是件比較可以接受的事。 筆者之前介紹過一系列的 docker swarm 教學,但生成群集的部份一直沒有做介紹。因為實在太簡單,所以一直都沒有收納在教學內容當中。但現在考慮其完整性,以及為了讓大家感受一下它有多簡單,所以重新寫了組建群集的步驟。 組成群集 以前各家不同的軟件,想要起一個群集,要左攪右攪,又要重啟。而docker swarm真的很簡單,只要各機中有 docker ,再在各機中順序打指令就好。 node 1 使用docker swarm init docker swarm jointoken manager # node 1 gt; docker swarm init gt; docker swarm jointoken manager To add a manager to this swarm, run the following command docker swarm join token SWMTKN1xxxxxxxxxxxxxxxxxxxxxxx xxx.xxx.xxx.xxx2377 其餘的管理員節點就根據上述的提示,使用 docker swarm join token SWMTKN1xxxxxxxxxxxxxxxxxxxxxxx xxx.xxx.xxx.xxx2377 就好。只要總數的管理員節點有奇數個就可以了(包括當初的node 1)。即是1、3、5等都可以。這是因為在容錯的情況下,必需由管理節點作出多數決,才能容易地知道判斷是哪些節點出現問題。 如果不為容錯,只想增加可工作的機器,那麼我們只需要增加工作節點。我們可以在任何管理員節點生成docker swarm jointoken worker gt; docker swarm jointoken worker To add a worker to this swarm, run the following command docker swarm join token SWMTKN1yyyyyyyyyyyyyyyyyyyyyyy yyy.yyy.yyy.yyy2377 若想要檢查各個節點的工作狀態,在管理員節點上執行 docker node ls 看到了。 docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION xxxxxxxxxxxxxxxxxxxxxxxxx node1hostname Ready Active Leader 28.5.1 yyyyyyyyyyyyyyyyyyyyyyyyy node2hostname Ready Active Reachable 28.5.1 全部教學請見 httpsmacauyeah.github.ioAProgrammerPreparesVMDockerNotesSwarmModeCommandCN.html

免費自用的私人AI助理 | Ollama - 本地大型語言模型
科技新知
MacauYeah・2025-01-06

不知道在澳門的朋友,有多少可以正常接觸openai?因為地方政策問題,像openai這種國外的大型語言模型下稱LLM,澳門區都沒法接觸到。但隨著時間過去,即使我們不能直接接觸到算力很強的收費AI,我們只要有電腦,也可以佈署一些開源版本的LLM。只要我們可以安裝到ollama這套本地運算軟件就好 ollama是一個giuthub上的開源工具,讓用戶能夠在自己的電腦上運行各種大型語言模型(LLM)。基本上只要電腦是普通的桌上型windows, linux, mac,都可以運行它。下以面就介紹一下筆者的安裝經驗。 windows windows ollama windows 本地安裝ollama,真的很簡單,就是直接去官網下載就好 httpsollama.comdownloadwindows 安裝完成後,在windows cmd再加一個基本的模型就可以了 ollama pull llama3.2 之後就可以開始跟llama問問題 ollama run llama3.2 windows openwebui 如果大家不習慣windows cmd的醜醜介面,想經過瀏覽器存取,我們可以再加裝openwebui。但這個必需要經第三方python或docker安裝。openwebui github指引 httpsgithub.comopenwebuiopenwebui 經python pip install openwebui openwebui serve 經docker docker run d p 80808080 addhost=host.docker.internalhostgateway v openwebuiappbackenddata name openwebui restart always ghcr.ioopenwebuiopenwebuimain 最後,打開browser,訪問 httplocalhost8080,openwebui就會要求大家先設立管理員帳號。 就那麼簡單,大家就有一個真正的私人AI助理。 steamdeck steamdeck 因為很多linux功能都有被限制,所以筆者就直接使用 podman 安裝 git clone httpsgithub.commacauyeahollamasteamdeckpodman.git cd ollamasteamdeckpodman podman compose f podmancompose.yaml up d podman exec it ollama ollama pull llama3.2 同樣地,打開browser,訪問 httplocalhost8080就可以了,因為這個版本已有預設的管理員帳號,立即打開就可以使用了。 Ollama的開源模型 上文中一直提及 llama3.2 其實是 Meta 公司的開源模型,因為它的參數相對少,算力要求較低,可以在沒有GPU的環境下執行。若然大家算力足夠,可以使用其他模型,詳見 httpsollama.comlibrary 。見到合心水的模型,大家可以經 pull 指令下載。例如小紅書的網紅們很多都推薦qwen2,我們可以 ollama pull qwen2 備註 openwebui 及 ollama 並不直接支援自己建立自己的資料庫。我們需要其他工具去補完,但筆者觀看各種教學,自己建資料庫的效果都不太好,所以暫時不做任何教學。 只要我們一直經ollama pull,就可以更新語言模型。但如果大家追求即時的網絡最新資料,大家可以看看LLM RAG的相關文章。但筆者亦未有成功的案例,有更新會另作教學。 opewebui並不是PDF閱讀器,但它可以預覽PDF中的文本,我們需要手動複制PDF中的文件後,才能經ollama分析文件內容。 若想切換模型,在指令介面中,我們多開一個分頁就可以了。若經openwebui,則可以在每句對話之前,經左上方選擇不同模型。

Tmux - 繼 Screen以後的Linux多工神器
科技新知
MacauYeah・2024-10-08

因為各硬件軟件的發難,筆者又不得不回到那個只有純純linux tty console的世界。很多時候,那怕使用tty,我們在Desktop mode,也有現代terminal 可以用,需要多分頁,滑鼠選取文字、複制、貼上,都可以輕易做到。 但在mobile tablet device 上,手指操作真的很不方便。又或者你像筆者一樣,即使有電腦,但要操作一些Linux VM,它們連ssh都沒有,只能直接登入它們的tty,那麼懂得使用Tmux進行分頁及複制、貼上,就變得很重要。 Tmux 是什麼 Tmux 就是可以在Linux Terminal 同一個窗口中,實現多工處理的小程式。就像我們利用多分頁一樣,不同分頁做不同的事。不過最大的差異就是,生成分頁,排列分頁,我們都要使用鍵盤來完成。有時筆者也會用它來作為背景程式,以免不小心關了Terminal就會把所有運行中的指令都停掉。 我們就馬上來看實際例子吧 前置事項 安裝Tmux及運行Tmux Debain amp; Ubuntu 安裝 sudo aptget update amp;amp; sudo aptget install tmux 運行:tmux 進入tmux後,你就會至少有一個分頁,而且不會因為Terminal關閘而中斷 用法一 建立兩個分頁,並切換 增加分頁 先按 ldquo;Ctrl brdquo; 前置鍵,再按rdquo;crdquo; create 切換分頁 在多於一個分頁的情況下,先按 ldquo;Ctrl brdquo; 前置鍵,再按rdquo;nrdquo; next 用法二 同一個分頁中,建立左右並排的窗口 增加水平窗口 先按 ldquo;Ctrl brdquo; 前置鍵,再按 ldquo; 雙引號 切換窗口 在多於一個窗口的情況下,先按 ldquo;Ctrl brdquo; 前置鍵,再按方向鍵左或右 用法三 回到前一個tmux session中 因為不小必關閉了terminal,又或是remote ssh中,ssh斷線後,需要回到之前的工作狀態 未進入tmux 的狀態下:tmux attach 要留意tmux 可以有很多個session,要去到指定的session,就要為session命名。但這個不是筆者常用的情境,原本多個分頁已經很夠用,還要多個session,會很混亂。但不排除它在某些情況下有特別用途,有興趣的朋友可以自行挖挖看。 進階 回頭看過去的terminal screen output 在現代的Terminal中,原本按滑鼠滑輪向上滾,就可以看到過去的資訊,但tmux下反而不行,所以我們需要進入特殊模式 進入Copy Mode 先按 ldquo;Ctrl brdquo; 前置鍵,再按 開括號中括號 向上翻頁 上方向鍵或PageUp 離開Copy Mode Copy Mode中任何時候按rdquo;qrdquo; 進階 複制貼上 進入Copy Mode 先按 ldquo;Ctrl brdquo; 前置鍵,再按 開括號中括號 選擇範圍 移到需要複制的文字起點,ldquo;Ctrl Spacerdquo; ,然後再移動到結束點,再按rdquo;Ctrl wrdquo; 複制 貼上 離開Copy Mode後,再按rdquo;Ctrl brdquo; ,然後 關括號中括號 進行貼上 進階 複制貼上2 某些情況下,我們不允許使用ldquo;Ctrl Spacerdquo; 或 rdquo;Ctrl wrdquo;,因為它們可能跟系統的組合鍵有衝突,所以需要改為單鍵。 讓tmux使用類似vim的操作模式 echo ldquo;setwindowoption g modekeys virdquo; gt;gt; .tmux.conf 關掉所有使用中的tmux,重開tmux 進入Copy Mode 先按 ldquo;Ctrl brdquo; 前置鍵,再按 開括號中括號 選擇範圍 移到需要複制的文字起點,按單鍵ldquo;Spacerdquo; ,然後再移動到結束點,再按rdquo;Enterrdquo; 複制 貼上 離開Copy Mode後,再按rdquo;Ctrl brdquo; ,然後 關括號中括號 進行貼上 筆者常用的功能就這些,有興趣的朋友可以再深挖一下。 Reference httpstmuxcheatsheet.com

為何Python這麼熱門?
科技新知
MacauYeah・2024-08-27

在資料處理、資料科學領域,什麼是最近的AI模型,Python都是做這些事的熱門選擇。對於以前從未用過Python來處理業務的筆者來講,實在不懂為何Python會那麼大熱。不過最近,筆者實戰過後,真心覺得它是提高生產力的重要工具,而且並不限於資料科學上面,一些簡單的腳本操作也是很有優勢的。 筆者前述有討論過 型別對程式語言的重要性,到現時這一刻,筆者都會覺得【型別】是有助於長期的程式開發。而Python這個語言,大部份人都會介紹它是動態語言,可以使用弱型別,然後,就沒有其他講法了。動態弱型別,筆者一直都不認為它的根本上的原因。就像Javascript一樣,它亦發展出類靜態強型別的Typescript版本,而且它亦不因此而被人棄用。所以Python的強大,動態語言並不一最重要的原因,它也可以模疑寫出有規有距的type hinting。 或者用另一個方向問,大家覺得 Excel SpreadSheet 好用嗎?它們可以很簡易地做出資料計算、篩選。而且可以一邊做,一邊調整公式。例如要大家做一個陣列的總和,大家會想打開一個Javascript,初始化陣列的每個數字,然後寫個For迴圈去計算總和嗎?還是打開 Excel SpreadSheet,打下一欄或一列的數字,然後叫出Sum函數?筆者一定會選擇後者,不單止因為寫函數比較方便,那怕之後要調整數字,也比較方便。 大家有感受到差異嗎?筆者想表達的是,在操作 Excel SpreadSheet 我們並不是整個程式重新執行一次,我們是修改完一部份,那上看到結果。但傳統的語言,例如C、Java、那怕是Javascript,我們都難以局部地更新或執行特定某一個區塊。那怕是現在我們有hot reload,但其實我們編寫的思維,都是讓我們完整執行起一個頁面,再人手輸入,看結果。如果我們只想運行某個單一Function函數,我們只能寫test case測試,但寫test case又是一個很大的入門門檻。 但大家如果看看Python,在古早的年代,Python已經有Python shell,那就像是Linux Shell或Window CMD一樣,可以一邊寫腳本,一邊看結果。寫了10行的程式,發現在第10行引用第5行的部份有問題,修正並執行第5行後,就可以回來馬上重跑第10行的語句,就馬上有結果了。第6至9行,因為沒有關聯性,就不需要逐一重新執行,那是多麼的方便阿。道理上,我們若沒有完整執行整個程式,可能還是有一些盲點,開發重要的,需要長期維護的程式,還是要像傳統一樣,有test case,有程式進入點,整個運行。但對於臨時性的操作,看看效果,我們實在無必要寫一個原整程式。 舉個例子,假如我們臨時有需要,要取得某個政府網站的即時數據,例如澳門的停車場資訊,空位的上下限是多少,我們絕對可以用python寫幾行就取得結果,然後順便做個資料運算。我們沒有必要很嚴僅地為考慮不同數據的出現情況,我們什至可以hard code 硬編碼地計算某個Array的元素。直到突然有一天,這個操作變得恆常化,我們還是有條件把之前的python程式碼,改寫成一個規規矩矩的完整腳本,包括異常處理,函數複用。其實Javascript在改用 NodeJs 作為引擎後,我們還是可以經過 Node.js REPL,來做互動操作,只是Python Shell出現得更早,也是官方支援的功能。 Python這個臨時操作的便利,對於資訊爆炸的年代來講,實在很幫得上忙。再加上現在除了Python Shell以前,還有Jupter Notebook,讓大家可以在Web頁面上,執行像Python Shell的互動操作,對於修過特定區域的程式碼,就更加方便。這些便利,都是不是因為動態語言來創造的優勢,而是實實在在的Coding Anywhere。

型別對程式語言的重要性
科技新知
MacauYeah・2024-07-08

JavaScript等程式語言的流行,好大一個原因是因為它很簡潔。而筆者認為,動態語言的特性,即是可以省略型別,是讓它簡潔的一個很大原因。動態、靜態與強型別、弱型別並一定對等,詳見Ref 動態語言的特性,就是同一個變數,在不同時候可能代表不同的數據類型,有時候是String,有時候是Integer。所以編寫時,乾脆就不寫數據類型,因為寫了也可能是白寫。 因此初學者並不需要處理大多導入import問題,也不用考慮很多compile error問題,至少程式可以運行一半,到了最後出錯的地方才停下,也就是不會因為型別問題而整個程式開不了。 不過筆者在接觸了JavaScript後,始終沒有大量使用。一來因為筆者慣用的Java,有著更大的基礎套件,改用JavaScript未必有優勢。而且動態語言還有一個長久的管理問題,我們該如何知道更新的影響有多大? 測試用例不是萬能藥 有一部份的人認為,動態語言管理難,是因為大家不愛寫測試用例。的確,若然大家寫的測試覆蓋率足夠多,一定可以預先發現問題。但筆者在Java上實踐了寫測試的習慣一段時間,依賴測試報錯,其實也是後知後覺。 IDE的界入 筆者認為,若想好好地管理程式碼,光寫測試是不夠的,我們還需要好好地讓IDE了解我們的程式碼,認它可以很有效地重構我們的程式碼。更強的IDE,還有機會可以提醒我們有一些設計上問題。 老實講,寫Java多的朋友,都可能都知道Intellij Ultimate的名字。筆者試用後,的確很有幫助。相較之下,vscode對於Java的支援,並不十分智能。但這裏筆者還覺得vscode對於java的編寫、重構、測試,在免費的情況下,都已經足夠是足夠佛心。對於網頁應用來講,vscode差的是對javascript的支援。 vscode對javascript的支援有限,其實不能怪它不夠努力。你想多一個免費的IDE怎樣去了解你的javascript程式? 我們連型別都沒有寫出來,它能怎樣推敲? 實時去模擬各種輸入?CPU又會不會耗乾?那麼寫到一半的程式碼又怎樣輸入? 直到最近筆者採用TypeScript之後,筆者看到曙光了 TypeScript 一個變相的JavaScript的靜態型別 原本的JavaScript其實也有型別的,只是不強制。若想IDE支援,需要以特定型式寫註解。但這樣寫註解,工作量並不比引用靜態型别來得輕鬆。所以最後,筆者還是覺得直接套用TypeScript,讓自己在每一次引用參數,都要好好地先了解函數的輸入輸出型別寫法。 說實在,從JavaScript到TypeScript並不輕鬆。一些原本很無腦的Axios, Promise, Vue語句,TypeScript寫起上來,都變得很複雜。但這個套用,對於IDE來講,真的很大幫忙。它就像突然讀懂了我們的程式一樣,可以跳入跳出,可以知道在多少處被引用。重構也變得更有信心,而不是等待事後測試報錯。 有一點要補充,TypeScript並不像Java那般需要完全預先宣告型別。例如函數的回傳結果,TypeScript就不會強制要求寫出型別,因為它可以有限度地猜得出來。當然,如果大家願意宣告,就更好。 總結 總括來講,型別就像厠所的衛生情況一樣。初期當然什麼都不處理也可以,但越用越久也沒有人理會,大家也不想用下去。若然大家都願意努力維持它的品質,大家會更有意願重複使用。 參考資訊 「靜態型別 vs. 動態型別」與「強型別 vs. 弱型別」 httpsblog.tarswork.compostprogramminglanguagetypesystem Typed JavaScript httpsdepthfirst.comarticles20211103typedjavascript

數字教育引領塑造未來
文化創意
陳康妮・2024-03-06

2024年3月6日 澳門日報 數字教育引領塑造未來 澳門作為一個國際化的城市,一直以來致力於提供高質量的教育,為學生們塑造未來。在這個快速發展的時代,數字教育成為了教育領域的一個重要焦點。數字技術的快速發展和應用,為教育帶來了全新的機遇和挑戰。澳門正積極引領教育,將數字教育納入教育體系,以培養學生的數字素養和創新能力,為他們的未來鋪平道路。 教導數字世界中思考 數字教育不僅僅是指教授學生如何使用電腦和互聯網,更重要的是教導他們在數字世界中如何思考、解決問題和創造。這需要學生具備數字素養,即理解和應用數字技術的能力。澳門教育體系已經意識到這一點,並將數字素養納入學校課程中。學生們在早期階段就接觸到基礎的數字技能,學習如何使用計算機、互聯網和其他數字工具進行資訊搜索和處理。隨着他們的成長,還學習如何利用數字技術進行創新和解決現實世界的問題。 數字教育的核心是培養學生的創新思維和問題解決能力。這需要學生學會提出問題、分析問題、找到解決方案,並將其應用到實際情境中。在澳門的教育體系中,學生們通過各種數字工具和平台,如編程、虛擬現實和人工智能,來培養這些能力。他們被鼓勵參與到跨學科的項目中,與其他學科的知識相結合,共同解決複雜的問題。這樣的教育模式不僅能夠激發學生的創造力和想像力,還能夠培養他們的合作和溝通能力。 教師提能力應對變革 澳門教育體系還重視教師的專業發展,以確保他們能夠教授和指導學生進行數字教育。教師們參加各種培訓課程和研討會,學習如何運用數字技術來教授不同的學科。他們也被鼓勵參與到數字教育的研究和創新中,將最新的數字技術應用到教學實踐中。這樣的支持和培訓使教師們能夠成為數字教育的引領者,激發學生的學習興趣和動力。 澳門的數字教育還注重與其他國家和地區的合作交流。通過與國際教育機構和學校的聯繫,澳門的教育體系能夠分享最新的教學方法和經驗,並將其應用到實際中。這種國際合作不僅能夠豐富學生的學習經驗,還能夠促進教育領域的創新和發展。 數字教育的引入和推廣,為澳門的教育體系帶來了巨大的機遇和挑戰。通過培養學生的數字素養和創新能力,澳門的學生將能夠更好地適應未來的數字化社會和職場。同時,教師們也需要不斷提升自己的專業知識和技能,以應對教育領域的變革和挑戰。 澳門引領教育,塑造未來。數字教育的推廣和應用,將為澳門的學生帶來更廣闊的發展空間,並為他們的未來鋪平道路。我們相信,通過持續的努力和創新,澳門的教育體系將繼續在數字化時代中引領教育,為學生們打造更美好的未來。 澳門教育工作者 陳康妮

git 分支整合問題
科技新知
MacauYeah・2024-02-20

不知道大家的開發團隊、專案規模有多大,但只要系統或程式已發佈,同時又要做維護更新,git 庫都至少會有兩條分枝: 新功能 main feature 最新的穩定發佈版本 Release v1.x.x 最好的情況下,在開發完新功能之前,穩定版本都沒有需要緊急修正的地方,開發者可以專心開發新功能(main feature。然而這個情況並不能經常維持。 情況1有Bug要馬上修正 最常見到的情況,就是穩定發佈版本有瑕疵,可以經過小修小改來止血,由v1.x.x rArr; v1.x.y,這些可能對用戶來說,是沒有太大感覺的改動。不過對於開發流程,就免不了由v1.x.y整合(merge)回main時,出現修改衝突的問題。 建議 若屬於日後不再需要的改動,不需於整合到main中, 當然什麼都不用做。但若屬於必要的更新,就需要早早整合到main中。整合雖然痛苦,但延後整合沒有好處。以筆者的經驗,每次整合時有衝突,而越早整合越有條件知道該取用自動混合的那個版本。以整合工具的語言來說,就是更容易的作出use mine use theirs edit。 情況2 不同功能之間有衝突 上述情況1,已經算是可控的。主要因為穩定發佈版本都只會接受小修小改,大改都會直接在main中開當為新功能開發。當你有多個很重要的功能在不同時期被提出,而有些功能你沒有信心在下個發佈中提出,你就會選擇以獨立分支來實現不同的功能,最後選擇信心度高、權重也比較高的功能來發佈。這樣的好處是你可以有限時間先完成最必要的功能,但問題是多個功能分支之間,更容易地有衝突,後期也需要很廢心力地整合。 建議 少做資料夾層面的改動,因為git rename的功能並不是萬能的,會令很多git自動選擇版變得不可讀。筆者的經驗,就是錯把後端和前端的資料夾混在一起,令後端的一些重命名影響到前端。前端也因為有重寫的需要,對資料夾結構大改。最後結果就是很多看不懂的git自動選擇版。有一些有選對,但有一些就選錯。 可以做一些事前處理,來減經痛苦。在筆者的資料夾問題情境,在把後端將要整合的多個commit中,挑選最早前沒有命名問題的commit先整合一次。然後前端先手動模擬後端的人工命名,自行commit一次,最後再把後端剩餘的commit再做整合。這個做法不是完全解決問題,但至少可以讓use mine use theirs edit更新易理解。 而另一個建議是,縮短發佈週期,逼使其他開發中的功能越早做整合,也逼使每個功能不要做太大規模的改動。如果真的做大規模改動,就要有心理準備要多次重要的整合。 情況3 多個穩定發佈版本需要同時維護 若然大家面對的工作規模真的很大,同時有多個版運行版本,就如gitlab,每一個月都有一個新功能版本16.0.x, 16.1.x, 16.2.x,hellip; 16.9.x,但它不會強逼大家更新,對於過去一段時間的功能版本,也會推出安全性更新前述的x會不斷修正問題。 這是一個很負責任的發佈模式,不過對於開發者來講就一定很地獄。因為16.0.x的安全更新並不能無痛地整合到16.9.x中,可能每個版本重新人工修改還要來得穩健。 建議 各個分支人工修改可能更適合。最後就是取決於商業政策的考量,到底公司願意為已發佈的功能版本提供多久的支援。就以gitlab為例,其實它也只承諾維持兩三個月前的功能版本。是否會backport到多個月之前的版本,就看問題的嚴重性和backport難易度。 也分享一些筆者朋友的經驗,他們開發的是軟件跟硬件整理的軟件庫。但因為硬件有限制,例如庫的大小、算力的差異,所以最後分支多到爆炸。這也是軟硬整合的痛,問題暫時無解。除非老闆肯放棄市場。

全球教育創新|陳康妮:啟發讀者對未來教育的思考和探索
文化創意
陳康妮・2023-10-24

全球教育創新是指在教育領域中,採用新的理念、方法或技術,以提升教育質量、效率或公平性的行為。全球教育創新的新聞不斷涌現,展現了各國教育工作者和學者的創意和實踐。以下是一些近期的全球教育創新新聞的摘要: 全球最大教育獎項「一丹獎」2023年得獎名單揭曉。一丹獎是由香港的一丹獎基金會設立的全球性教育獎項,旨在表揚對教育研究和發展有卓越貢獻的人士。2023年度的「一丹教育研究獎」得主是美國亞利桑那州立大學的Michelene Chi教授,她提出了「ICAP認知科學理論」,將學習方式分為互動、構建、主動和被動四個類別,幫助教師設計更有效的課程和教學活動。「一丹教育發展獎」得主是University of the People創辦人Shai Reshef,他創立了全球首間非牟利、免學費、受美國政府認可的網上大學,主要為弱勢群體提供計算機科學和工商管理等專業的優質高等教育。 全球教育創新大賞 台灣四件傑出案例獲獎2。全球教育創新大賞是由溫世仁文教基金會與芬蘭教育創新組織合辦的徵選活動,旨在表揚華文地區的教育創新者。在近百件參賽作品中,評選出蘊含生涯價值力的七件傑出案例,其中四件來自台灣。這些案例包括:「VRAR科技應用於地理教學」、「以遊戲化設計提升學生英語能力」、「以社群媒體推廣閱讀素養」、「以實境模擬培養學生跨領域能力」等。 翻轉教育:OECD 2022最新報告:形塑未來教育的全球趨勢3。OECD是一個國際性的政府組織,致力於促進各國間的合作與發展。OECD在2022年發布了《2022年形塑教育的趨勢》(Trends Shaping Education 2022)報告,檢視了全球主要的經濟、政治、社會與科技趨勢,對於從早期學齡到終身學習等教育層面的影響。報告指出,未來教育需要關注以下幾個方面:第一是多元化和包容性,即如何讓不同背景、能力和需求的學習者都能獲得公平和優質的教育機會。第二是數位化和創新,即如何利用數位技術和資源,提升教育的效率和效果,並培養學習者的創造力和批判思考。第三是永續發展和全球公民,即如何讓學習者關心全球性的議題,如氣候變遷、貧窮、人權等,並培養他們的社會責任感和行動力。 以上是一些全球教育創新新聞的摘要,希望能讓讀者了解不同國家和地區在教育領域中的創新理念和實踐,並啟發讀者對未來教育的思考和探索。 陳康妮Miss Chan Connie澳洲墨爾本大學教育管理學碩士愛爾蘭都柏林大學工商管理學士澳門教育家澳門教育專欄作家澳門教育學作家:澳門教育創新澳門國際培訓師(創新創業全球職涯發展師)澳門兒童文學作家澳門斷捨離學會主席

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

澳門教育創新:兒童積木區或建構區的規劃設計
文化創意
陳康妮・2023-02-20

幼稚園積木區或建築區的規劃設計是一個非常重要的問題,需要考慮到許多因素。以下是一些基本的規劃設讈要點: 1. 安全:幼稚園積木區或建築區的安全是首要考慮的因素,需要考慮到每一個環節的安全。 2. 可持續性:幼稚園積木區或建築區的可持續性是需要考慮的因素,需要考慮到環境、資源和經濟的可持續性。 3. 多樣性:幼稚園積木區或建築區的多樣性是需要考慮的因素,需要考慮到不同年齡段、不同性別和不同文化背景的需求。 4. 可訪問性:幼稚園積木區或建築區的可訪問性是需要考慮的因素,需要考慮到殘障人士和老年人的需求。 5. 功能性:幼稚園積木區或建築區的功能性是需要考慮的因素,需要考慮到每個區域的功能需求。 6. 創新性:幼稚園積木區或建築區的創新性是需要考慮的因素,需要考慮到新的科技、新的材料和新的概念。 7. 美觀性:幼稚園積木區或建築區的美觀性是需要考慮的因素,需要考慮到環境、景觀和美學的因素。 通過以上幾個方面的考慮,可以確保幼稚園積木區或建築區的規劃設讈是合理的、安全的、可持續的、多樣的、可訪問的、功能性強的、創新的和美觀的。 評估幼兒園積木區的可持續性需要從以下幾個方面入手: 1. 評估幼兒園積木區的可持續性需要從以下幾個方面入手: 1. 資源使用:評估使用的積木是否是可持續的,例如是否採用了環保材料,是否具有可循環利用的特性。 2. 環境影響:評估積木區對周圍環境的影響,例如是否會產生過多的噪音、污染等。 3. 經濟效益:評估積木區的經濟效益,例如是否可以長期使用,是否具有經濟效益。 4. 社會效益:評估積木區的社會效益,例如是否可以提高孩子們的創造力、團隊合作能力等。 通過以上幾個方面的評估,可以確定幼兒園積木區的可持續性。最終,還需要考慮到當地的環境、經濟和社會因素,以便確定最合適的評估方法。 【作者簡介】陳康妮 Miss Connie澳門科技大學講師澳洲墨爾本大學主修教育管理學澳門資深教育學專家澳門資深設計師:澳門斷捨離群組創辦人(群組合共26000人)澳門資深國際培訓師澳門資深全球職涯發展師澳門作家書名:澳門教育創新澳門兒童文學作家

「我們的桌遊故事」書寫與圖像展已於周三開幕
文化創意
繪本與棋@黃庭熾・2022-12-24

  澳門青年桌遊教育學會「我們的桌遊故事 ── 書寫與圖像展」周三(12月21日)上午在G32 Gallery 影藝廊開幕。經過一個月的徵集,共選出12件富人文情懷、生活氣息濃厚的書寫與圖像作品,展覽期到2023年2月10日結束,歡迎蒞臨參觀。   是次展覽由澳門青年桌遊教育學會主辦,獲少權工作室、一夕桌遊、卓傑桌遊、遊戲男孩協辦,望德堂區創意產業促進會、G32 Gallery 影藝廊提供場地支持。作為澳門首次以桌遊為主題的徵集活動及展覽,活動得到了廣大桌遊玩家關注和樂於分享個人桌遊生活的參加者大支力持,參展的書寫與圖像作品內容多元,有對經典遊戲的禮讚、對體驗中旅行感的回味、對桌遊合作性與沉浸感的憶述、對過程中驚悚感的刻畫,不一而足,歡迎到場分享澳門桌遊社群對心頭好的熱情與想像。   「我們的桌遊故事 ── 書寫與圖像展」假G32 Gallery 影藝廊(聖美基街G32號地下)展出,每天上午十一時至下午六時(逢周一休息),免費參觀。   2022年第四季,「我們的桌遊故事」書寫與圖像展通過攝影作品聯乘文字的展現方式,與市民大眾分享桌遊帶來的喜悅,但不凡的旅程遠未結束,難忘的桌遊故事不勝枚舉,學會邀請愛好者們續按快門再揮毫,記下桌遊過程中的快慰時光,為美好生活留下凝練的紀錄 ── 「桌遊物語」攝影作品聯乘文字故事徵集活動由即日開始,至2023年6月12日(一)止。參加者遞交之作品如獲入選,將於澳門青年桌遊教育學會Facebook 專頁中以「每週一圖」的形式展出。   除徵集活動續杯添飲外,「我們的桌遊故事」書寫與圖像展另設有展場推廣活動,借展場的雅緻環境氣氛,推廣多元的桌上遊戲。展場推廣活動設兩單元,率先登場的為「中國桌遊體驗會」(2023年1月7日,15001600、16301730兩場),及帶人身歷其境的「桌上遊戲讀書會」(2023年1月14日,15001600、16301730兩場),務求通過特色的桌遊體驗,讓參加者感受到桌上遊戲多采的文化韻味。 延伸閱讀:挽碧藍世界於海獸肆虐時 延伸閱讀:走進「博物之門」 ── 桌上遊戲讀書會 延伸閱讀:在別致的澳門共讀點裡悦讀 ── 桌上遊戲讀書會

CTM「尊壹會」會員專享,“ SOLER & FRIENDS MACAU (澳門) LIVE”音樂會六折優惠
音樂聯合國
澳門好幫手2.0・2022-11-08

由夏氏兄弟文創主辦,一慧娛樂製作協辦的ldquo; SOLER amp; FRIENDS MACAU 澳門 LIVErdquo;音樂會將於2022年11月12日晚上8時 假澳門威尼斯人劇場專屬舞台區域舉行。 Soler樂隊成員Julio,將與身在海外嘅弟弟Dino,通過線上直播連線方式,衝破地域界限再次合體,為大家呈獻組合經典。 ARI阿瑞,為土生土長的唱作歌手,2016年代表澳門參加《中國新歌聲》,並贏得了與來自東南亞地區音樂人合作的機會。時至今日,他繼續以自已的才華貢獻給中國、香港、澳門和台灣的音樂產業。 Winnie林靜翬於2022年7月推出與本地音樂製作人T.E.N合作的EDM音樂專輯《HEAL》,專輯裏中的主打歌《Free And Wild》被韓國電視節目《SOMEBODY S2》選為其中一集之插曲,更在YouTube上累積達七十萬觀看次數。 F.I.D.A. 由主音兼結他手青原及鼓手Ivan組成,於2020年發行《Light‧Colours》專輯。樂隊曾於海內外獲得多個獎項,包括《廈門國際原創音樂大賽》冠軍及最佳樂隊大獎、《Vansmusicians wanted.2019》亞軍、《澳廣視至愛新聽力》至愛歌曲獎及最佳填詞獎。 賴嘉欣Jessica是一位熱愛音樂、喜愛創作的獨立唱作人,擅長國語、粵語、英語三種語⾔的歌曲,曲風主要是抒情和Ramp;B。這位喜歡抱著吉他的鄰家女孩有著鐵肺唱功、穩健台風,原創歌曲有《依賴》、《這世界怎麼了》及《別說》。 優惠詳情: 由即日起至2022年11月12日。 憑CTM「尊壹會」電子會員卡,親臨 金光票務售票處, 即享ldquo; SOLER amp; FRIENDS MACAU 澳門 LIVErdquo;音樂會門票六折優惠,澳門幣$168 原價 澳門幣$280 。 咁著數!仲唔快啲去買飛!! 備註: 金光票務售票處地址 澳門威尼斯人度假村酒店東門大堂售票處 澳門倫敦人二樓售票處 澳門巴黎人正門入口售票處 營業時間 上午1000至晚上1100 票務熱線 853 2882 8818 入場須知 本演出活動將有限度放寛至室內可容納人數上限為75%,根據衛生局疾病預防及控制中心最新防疫指引,入場觀眾進場時須出示以下任一證明,否則將謝絕觀賞演出,且不設退票: 完成新型冠狀病毒疫苗初種系列的全程接種(滅活或信使核糖核酸疫苗初種系列的全程接種為2劑)達14天(澳門健康碼上顯示ldquo;金框rdquo;圖示); 48小時內作出的核酸檢測陰性證明。 進入演出場地時須進行體溫測量,任何時候發現有發熱或呼吸道症狀的人士,將謝絕進入場地,敬請留意。 溫馨提示 客戶需於下單前出示有效之「尊壹會」電子會員卡方可使用優惠。

陳康妮:後疫情時代,生涯規劃教育更需要個性化
文化創意
陳康妮・2022-10-11

生涯規劃教育需要更個性化 自2022年疫情後,大學畢業生越來越難找工作。甚至出現畢業之後即失業的現象。因此很多大學生對此感到迷惘。大部份畢業生會選擇繼續升學修讀碩士課。選修科目由學士至碩士卻又十分單一。同時,面對第四次工業革命(All in Digital , 有部份工作會被人工智慧替代,或者消失。面對這種現象,建議同學有跨科能力,同時培養多個技能,併且對自己的生涯進行盡早的規劃。 生涯規劃要全面 因此,需重視學生的生涯規劃教育。需要更新教育理念,通過教育、引導、輔導、實踐等一繫列教育措施,把學生塑造成適應社會、全面發展的創新型人才的教育過程,不但重視貼近學生的生活實際和就業需要,更重視學生綜合能力的提升和未來職業的發展。在職業指導人員配備、設施建設、資金投入等方面需加大力度。 生涯規劃教育需要個性化 生涯規劃意義在於尋找適合自身發展需要職業,實現個體與職業匹配,體現個體價值最大化。開展ldquo;個性化rdquo;職業生涯規劃指導是基於ldquo;人職匹配rdquo;理論對學生開展形式多樣職業生涯規劃教育,幫助學生確立適合自己特質職業目標與職業取嚮,並制定可行職業生涯路線。 生涯教育的機構都擁有職業化、專業化、高素質的師資隊伍,相關教育和輔導人員都具有教育學或心理學的碩士或博士學位。所有人員都要有培訓資格證書或經過考試達標才能上崗,有些甚至擁有不同行業35年以上的實際工作經歷。專業性的師資隊伍為職業生涯教育實務工作提供了重要的人力資源支撐。 因此我們的生涯規劃教育需要從學生本身出發,可以通過科學的測試繫統來瞭解學生的個性,讓學生充分瞭解自身的情況,同時瞭解各個專業的情況,讓他們對生涯有繫統的認識,同時教師對學生的生涯規劃應具有充分的個性化。 生涯規劃不僅對學生來說很重要,對每個人來說也很重要。只有做到充分,全面,以及個性化具有針對性的生涯規劃,有國際視野,培養跨科能力和多個技能。有同理心,和領導才能,社交能力,才能更大地發揮自己的長處,對社會的發展提供貢獻。 【作者簡介】 陳康妮 Miss Connie 澳門科技大學講師 澳州墨爾本大學主修教育管理學 澳門教育管理學專家澳門國際培訓師澳門作家(教育兒童文學)澳門教育專欄作家全球職涯發展師 從事教育管理培訓工作26年