搜尋

搜尋結果

用Trading View寫Machine Learning算法(二)|將簡單訊號變成實用策略|Random Forest (隨機森林)|動態計算訊號權重|麥振威
創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2025-03-11

用Trading View寫Machine Learning算法二|將簡單訊號變成實用策略|Random Forest 隨機森林|動態計算訊號權重|麥振威 上一段影片已介紹了KNN算法,自己一直也強調有很多的演算法其實也適合用來設計交易策略。要學習AI、Machine Learning就要明白各種的演算法,這次介紹的Random Forest也是常用的演算法,若配合「權重投票」,可以寫成很多不同的策略。 雖然大部份人都會運用Python來寫Random Forest,但我們可用Trading View 的pine script,配合array的寫法,不斷「動態」去計自每個入市訊號的權重。 例如以下四個十分簡單的入市準則 1MACD的快線是否高於慢線 股價是否上升下跌 2Zero lag MACD的快線是否高於慢線 股價是否上升下跌 3RSI升穿或跌穿50 股價是否上升下跌 4ATR是否升穿或跌穿其SMA10 股價是否上升下跌 例如MACD的快線升穿慢線,其後股價真的上升的話,這個訊號的的權重就會增加0.1,若果股價下跌,這個訊號的權重就減0.1,不斷「動態」咁去計算每個入市準則既權重,權重越高,之後再有訊號出現時,重要性就越高。用這種方法,一樣可以有Random Forest的效果,而且一些好簡單的入市準則,只要經過這個步驟來組合之後,效果都可以提升。 重點是用「動態」的方法去計算每個入市訊號的權重,只要學懂這種方法,過去大家想過很多的交易策略,都可以嘗試去改良。例如你同時運用了1分鐘圖、5分鐘圖、15分鐘圖、小時圖的訊號綜合一齊變成一個買入策略,但有時候1分鐘圖、5分鐘圖的訊號配合,股價便已上升,但有時候則確實要四個timeframe的訊號也配合才算準確,原因就是市場的波幅會不斷變化,透過「動態」的方式去計算毎個timeframe的訊號權重應多大,整個策略的效果就會有很大的不同。

Home Media 系列驚爆娛樂陪您過「哈囉喂」 🎃👻
生活在我城
Cheers!・2024-10-28

今個 Halloween 留喺屋企一樣咁「盞鬼」!Home Media 集齊一系列驚險遊戲、懸疑猛片、解密綜藝等,為您開啟刺激冒險之旅,依家新客戶仲可用 350 CTM 積分換購 Home Media 免費體驗,快 d 去換購,同家人朋友一齊挑戰驚悚極限啦 ! OnePlay 雲遊戲平台服務(30 小時)(優惠價:$68) 免費 3 個月 myTV SUPER 服務(App 網頁版) 首月免費 Blacknut hmvod 芒果 TV 國際服務,期後享優惠月費 $28 月 6 個月 myTV Gold 服務(電視盒子 智能電視版 App 網頁版)(優惠價:$280) 仲有 Home Media 電視盒子連 myTV SUPER 服務等更多積分優惠:httpss.ctm.netotdXe 萬聖節心跳推介: 冒險類雲遊戲 #OnePlay:《Batman》化身蝙蝠俠對抗危險惡棍 #Blacknut:《Among the Sleep》直面童年恐懼 都市懸疑劇 myTV SUPER 帶您重溫經典懸疑劇《金宵大廈》《降魔的》等, 仲可升級 myTV Gold 專享更多海外驚悚劇 《2323(雙語版)》《天黑了》等 萬聖節必睇猛片 #hmvod:《鬼靈精怪大酒店:怪獸變錯身》展開歡樂緊張奪寶之旅 ,《窺探者》改編自愛爾蘭古老恐怖傳說 推理解密綜藝 #芒果TV國際 《密室大逃脫》《YES OR NO 第三季》靠線索逃出密室 推理故事 好歌分享 #JOOX:Serrini《日月無光》、陳蕾《妖治時代》擊退內心魔鬼 下載 Home Media App 體驗一系列精彩娛樂:httpss.ctm.net0X0oD,一個賬號盡享最新體育賽事直播、電視劇、電影、綜藝等! Home Media 娛樂服務詳情:httpss.ctm.netsIrfC

推坑SFC的神作
手機‧電玩
MacauYeah・2024-09-03

因為年紀漸大,筆者玩遊戲的機會越來越少。一方面是因為家庭,一方面則是因為身體大不如前,腦袋開始跟不上3D遊戲的場境,常常不是玩一玩就累了,就是玩一玩就暈了,那怕連手遊都一樣。 所以筆者現在什少會再開新坑試新世代遊戲,反而專注在舊世代中,體驗一下過去的名著。值得一提的是,過去的遊戲體量通常比較少但完整,對於繁忙的生活節奏,是適合的。相比手遊,舊世代的遊戲更無抽蛋要素,更沒有那種玩個空虛的感覺。所以若然大家主機有買會員,趁會籍到期之前,快試一試那些年被你跳過的遊戲,應該有所收獲。 今日筆者就選了NS online會員的SFC舊遊戲,《薩爾達 眾神的三角力量》。只要大家有NSO,應該都可以順利重玩這個遊戲。 向大家推坑這遊戲的原因主要有幾個。 薩爾達 Switch 兩作稱霸天下。過去的作品,很值得一試。 眾神的三角力量是平面遊戲,不會暈,而且 Switch 隨時待機,玩玩停停沒有壓力。 玩後的優點 那個古早的年代,已經發展出到處鼓勵四處探索的玩法。那怕只是2D平面,都感覺到世界的大。 攻略好找好看。薩爾達在 Switch 中的最後兩,好玩歸好玩,但攻略真的難攪,難以用文字來表達。即使各大出版社如何編制圖文包,還不如直接看影片攻略來得直接。眾神的三角力量,那怕筆者不看圖,筆者也知道攻略制作人想表達的意思和方向。不知道下一步去哪?不用怕,看一看網上攻略就攪掂。 偏向動作遊戲,穿插少量劇情。筆者過去都是接觸以劇情量為主的JRPG,以現在的生活形態,要好好地讀完一個新的JRPG故事真的很難。 沒有壓力。這真的很重要。Switch 兩代,都有一個很麻煩的資源系統。武器、道具、盾,都是會快速消耗的。除非大家對操作很有信心,不然每次戰鬥,那怕打贏了,也會覺得消耗過多,選擇重讀存檔重打。這樣的遊戲玩下去很有壓力,跟魂系遊戲有得比。多磨幾次,人也會累。但SFC 舊作,只有副武器為消耗性。你的劍和盾,可以一直用,副武用光,誰怕誰。 參考連結 筆者遊玩時看的攻略httpslasjargon.blogspot.com201412legendofzeldalinktopastchapter01.htmlm=1,雖然覺得不全,但至少讀得懂 由 本封面圖像可由任天堂處取得。, Fair use, httpszh.wikipedia.orgwindex.phpcurid=7663843

github flow - github 開發流程
科技新知
MacauYeah・2024-06-20

那些年那個很穩定卻又不受歡迎的 git flow 開發流程 多年前,朋友就向筆者介紹git的團隊整操作流程。筆者深思過後,的確實用,那些年的gitflow,很美滿,由開發、測試,到發佈、修補漏動(backport),都有清楚明確的指引。 原作者連結:gitflow 大家如果沒有更複雜的需求,真的可以照搬,筆者也很推這一個模型。 但在長期推廣下,筆者發現大部份人其實都不熟git的基本操作,什至連git graph也不看,現在看git flow,就更不可能接受。那怕是有常用git的個人團隊,也是不怎使用分支模型。 前一兩年,筆者也不懂,筆者也努力地簡化git flow。例如把master和develop合而為一,但最後也是少有人可以接受,很多人還是卡在分支那邊,對checkout、merge還是很陌生。在跟更多不同人的協作過後,筆者總於意會到一件事。其實大部份人,只想知道最後、最新的狀態,只會更新 master main ,也因為個人開發,所以連衝突也不會有,更不需要使用merge。那怕是少型團隊,頂多也是維護main的衝突,間中用用merge,而checkout還是用不著。 其實這個情況,並不限於小型團隊。因為 web app 和 DevOps 的流行,所以越來越少機會要維護多個舊的穩定版本。大家都專心於最後一個開發及發佈版本就完事,用戶的某個版本有問題?更新到最新版本吧。(註:越底層的應用開發模式,因為相容性問題,不可能只保留一個穩定版本。) 那麼我們就大力簡化吧 github flow 開發流程 既然大部份情況,大家都只在乎 main master 預設分支,那我們也沒有必要跟著複雜的 git flow 走。但在 DevOps 的角度下,為保證 main master 穩定性,大家還是至少要遵守branching 、pull merge request 、code review 、auto test 原則 。 github就最簡單的branching 、pull request 、code review 提出了它們的 github flow。 簡而言之,就是每個人在開發時,都先從 main 起一個新分支,不斷更新。待合適的時候,就透過 pull requst,向原項目負責人提出申請,只要項目負責人點頭,就可以把改動傳入 main 中。又因為Github 原本的定位在於個人與個人之間的協作,初時已經需要通過fork建立獨立的倉庫,那怕你不愛分支也必需分支。所以 pull request,code review 的作用更明顯,後逐的協作更理所當然。 但若果回到公司團隊協,Github flow 就應該像筆者之前提出協作方案,各自起分支,最後由某個人守門,把所有結果放到 main 中。(前文連結)

開發者在Steamdeck上的另一個選擇: Gnome box
科技新知
MacauYeah・2024-05-28

前些日子,因為升級podman的關係,筆者對Steamdeck的限制就更為了解。因為Steamdeck是一個修改過的Arch linux,不單止代表是某些區塊是唯讀不可寫。更深一層的問題是,有些依賴包,不能簡單地通過安裝或自行編輯來解決。 例如早前podman 5.0.x需要的pasta依賴,雖然Arch linux官方有這個lib的發佈,但Steamdeck沒有選用,那些我們自己下載原始碼,你地會發現steamdeck的gcc或cc編譯指令還法完全執行,一來是編譯器指令沒有預設對,另一方面則是缺少了更多的c lib .h 依賴包。最後筆者只好選擇下載pasta官方預編譯的二進位程式。能用,但就總是多少有點不安心。因為pasta的預編譯只是針對x86_64的CPU,並沒有考慮link lib的問題,不過這次運氣還算可以,沒有無盡依賴的問題。 回來講Steamdeck的情況,之前筆者介紹brew,其實是macOS帶過來的,雖然他們對其他linux的支援很不錯,但多少都基於某些低層的依賴包可以隨時更新。而Steamdeck這個限制版,就沒有保證linux 依賴包的預安裝。那怕是Ubuntu也是一樣,只是我們可以通過進一步的指令案裝就可以了。所以在Steamdeck上,長遠還是要找一些官方維護的軟件比較安全。 Steamdeck上預設的是依賴安裝是【Flatpak】,雖然它不像yum, apt, dnf這些仔細可以安裝原始碼依賴,但它們可以安裝App,例如Firefox、Chrome、輸入法等。遺憾的是,Flatpak上沒有podman, docker,對於開發者來說就很不方便。 但最後,筆者終於在【Flatpak】上發現一套【BOX】VM解決方案。它的功能不算強大,但至少可以經ISO安裝自己想要的OS,也有快照功能只限關機狀態下。BOX官方亦表明,這套VM不是針對自動化或企業管理所做的,只有一些基本操作。 官方連結 httpsapps.gnome.orgBoxes 官方原始碼 httpsgitlab.gnome.orgGNOMEgnomeboxes Flathub載點 httpsflathub.orgappsorg.gnome.Boxes 對於筆者來說,能裝到VM,代表就有更多的操作空間。如果大家不介意多了一些虛擬層,會太影響效能,其實很多操作可以在VM內使用。例如不需要再用podman,可以直接在VM中使用docker、安裝k8s等。對於效能問題,我們必需要在Steamdeck操作時,至少我們可以在VM中先安裝Arch linux,找回必要的依賴包,編譯我們想要的link lib,再抄回Steamdeck下執行。過程的確比較轉折,但若然Steamdeck這台機器只適合打機的話,就真的很可惜。

測試驅動開發 | 系統邊界Mock
科技新知
MacauYeah・2024-04-23

好一段日子之前,筆者就介紹了一些寫Test Case的大方向 。對於大部份情況來說,有分隔的開發環境,有整個配套,測試起來是順暢的,想做單元測試可以,做整合測試也可以。但如果沒有,我們其實也要想辦法寫Mock。 Mock這個概念,對於寫前端程式的朋友應該比較熟悉,因為前端開發者總不能等後端準備好之後,才開始慢慢設計。前端很早期就要模擬一些情況,做介面設計,做各種思考。而且這個Mock不是指在運行單元測試時,才使用的臨時修改隨機數據。而是針對開發時,自行模擬的後端或外部環境。不過因為前端介面涉及很多主觀設計,很多元素冇辦法做固定的自動測試,所以前端的測試通常要人幫測試。 而後端開發,邊界Mock這一概念也很有用。在外部環境不足的情況下,為自己系統的邊界部份自建一個Stub Dummy 等的模疑數據,是很有幫助的。不論我們對外部環境的掌控度有多少,我們走測試驅動開發(Test Driven Development),好好地定義這個外部環境的期待行為是很重要的。 例如,你有個功能,需要存入數據,但資料庫未準備好,也沒有所謂的In Memory資料庫可以用。這時,自己架空寫一個什麼都不做或回傳固定結果的函數作為中轉接口,然後在你的Test Case可以規劃你的想要結果。 也許你會說,這個函數就是存下資料,我不會需要它的回傳結果,但我們其實還是可以在Test case 中定義一些錯誤檢測,確保這個函數沒有Throw Exception 。再進一步想,我們主程式是否真的不負任何儲存失敗的責任?要定義其他回傳變數,方便寫Log讓追蹤?或者我們至少要知道成功後的Primary Key ?若然業務上真的不在乎儲存結果的有效性,我們不存入數據也是可以的? 所以歸根究底,我們還是在乎儲存的成功與否。還是有必要去驗證驗寫入是否成功。 上述例子,因為資料庫不存在,開發途中可能Test Case 有好長一段時間也通過不了,但至少當資料庫完備後,可以直接驗證,不用人手手工測試。 舉另外一個例子,我們要從某個地方,例如API或資料庫,讀取數據。我們也可以先寫中轉接口,並為它寫Test Case定義應有的行為。雖然明明就只是讀取,我們沒法控制太多。但在接口做好異常狀態處理,是很重要的。例如Handle exception、檢查某些重要業務值會不會是空、確保後續部份可以正常使用,這是因為我們不能被外部系統的失誤而導致自身系統癱瘓。 其實測試驅動,本質上就是強逼大家想多一點,好好定義預期的行為,不論內部條件怎樣變化,都有一自動的檢收標準。

Git Worktree
科技新知
MacauYeah・2024-04-09

看了Git 大神的影片 part two,才知道原來切換git分支還是有不同的做法。傳統中,我們使用git checkout BRANCH_NAME_1 來切換到我們想要的分支。通常這樣做,代表我們放棄原來的工作環境,換到另一個工作環境中。 這樣做很好,對不對? 是的。但有些時候,我們只是被逼離開原本的工作環境,跳到一個過去的分支節點去查一些東西,或者修正一些東西。更什的是我們原本的工作環境都還是混亂狀態下,我們不想做commit(提交),我們只好用git stash,暫時將工作環境存起,然後再git checkout BRANCH_NAME_1。在你想做的事做完後,再git checkout OLD_BRANCH。 看起來其實也沒有很麻煩,是不是? 但其實當你的專案有一定大小,你在不同版本跳來跳去,你的IDE就會不斷地重新編譯。更不幸的是,當你的不同版本中有模組數量的差異,弱一點的IDE,什至會攪死它的cache,之後就會發生鬼打牆。為解決IDE引發的問題,筆者有時會直接cp r YOUR_PROJECT TEMP_PROJECT,在一個新資料夾下另起爐灶。那就是有兩個不同的資料夾裝載著你的專案。 這樣應該沒有問題了吧,是不是?這次是真的可以了,扣除了筆者個人健忘的問題,就沒什麼問題了。 不知大家有沒有經驗,連續commit了幾次,但最後一次commit卻忘了push(與伺服器同步),然後就跳到其他地方繼續工作。如果我們在同一個git repository下,我們commit了但忘了push,即使我們git checkout去了其他分支,用git GUI畫出commit graph時,也至少可以提醒筆者有一個未與伺服器同步的分支。但如果當初我們用的是cp,那就沒戲唱了,什至乎當初複制了去哪裏都忘了。(當你老闆同時要你跟多個專案,健忘真的很容易發生。) 這問題有解嗎?有的,git在2.5版本以後,就提供了一個git worktree的指令。它有點像cp 指令,更重要的是,它打通了兩個資料夾下的隱藏資料庫.git,當大家在那兩個資料夾底下,都可以看到另一方的存在。大家可以用git branch a或git log oneline graph來看看。 詳細的指令介紹:git worktree git 大神的影片 Part 2

開心到「蛋」起!新濠影滙復活節 –【免費尋蛋嘉年華】周末親子好去處
生活在我城
Cheers!・2024-03-21

由「新濠風尚」呈獻的復活節 ndash; 尋蛋嘉年華,不僅可以一次過免費玩遍攤位遊戲和工作坊,齊齊尋蛋還有機會贏取總值超過澳門幣20萬奬品,絕對適合一家大小一起歡度佳節。 「8字扭蛋機」 只要即場登記成為「新濠風尚」會員,即可免費挑戰「繽Fun尋蛋樂」遊戲!限時鬥快集齊8隻不同顏色的復活蛋就可以參加「8字扭蛋機」抽獎贏走驚喜禮物,隨時可獲酒店免費住宿、餐飲禮券、水上樂園門票等等,禮賞總值近澳門幣20萬! 這次活動集結多個本澳中小型企業主理的市集攤檔,為大家帶來極富特色手作、節日甜點、文創禮品等,還可以免費參加一系列以復活節為主題的手藝工作坊,包括復活蛋彩繪及幻彩玻璃蛋,讓小朋友發揮無限創意。 園內還有多個5米高巨型充氣復活蛋及彩色復活蛋裝置,大家可以盡情的打卡!別忘了有多個免費經典攤位遊戲,包括彩蛋大作戰及奇趣套彩蛋,更會送出多份復活節禮物,讓大家盡情享受玩樂時光! 這麼精彩的活動,一家大小都可以盡情玩樂,今年復活節去新濠影滙復活節 ndash; 免費尋蛋嘉年華度過最難忘的時光啦!「新濠風尚」呈獻ndash; 復活節尋蛋嘉年華日期:2024年3月30及31日地點:新濠影滙3樓法式庭園開放時間:1200 ndash; 1800了解更多:httpss.ctm.net10l5f 提提大家,只需登記成為「新濠風尚」會員,就可以免費參與以上活動!成為會員更可享各種優惠禮遇,例如餐廳9折優惠、演唱會優先購票、購物特別優惠等! 立即登記 httpswww.studiocitymacau.comtcmelcostyle

街霸六-如何不要被【贏】成為競技遊戲的唯一目標?
手機‧電玩
MacauYeah・2024-01-19

眾所週知,玩遊戲普遍都是圖開心。很多朋友玩遊玩競技遊戲時,【贏】都是一個很重要的樂趣指標,但競技總不可能每個人都贏,輸的人反而是大多數。所以競技遊戲若沒有其他樂趣,玩著玩著,就會越來越少參與者。 問題是,競技遊戲真的有其他方面的樂趣嗎 筆者認為是有的,但至少參與者的心態要放開。 就像求學不是求分數一樣,探索一門新知識比分高低要來得重要,玩遊戲也更是如此。以筆者玩街霸六的情況來講,可以探索的地方實在很多 目押、取消連技 對空 對策動力衝擊 對策突進 狗昇、防狗昇 打亂動、搶制Abare 壓起身 Meaty 安全跳 Safe Jump 立回 Neutral 確反 Punish 差合 Whiff Punish 打拆 Shimmy 最後才引伸不同的角色對策。 而大部份人都一定會陷入的低潮就是當等級越高,對手的熟練度就越高,對機制的理解就越深,然後就會對戰得越沮喪。筆者因為一些原由,看到別人都爬分時都有非常沮喪的練歷,也看到退遊戲的心路歷程分享。 筆者屬低分區,無條件指導別人如何進步,但筆者可以提的意見是,要逆向思維自己會輸,是因為對方是強者,跟強者對戰,其實是在學習、在感受。有時候,筆者也會因些微差距而輸了對局。有時候,筆者也會想,是不是對方運氣好。 但感謝街霸六的對戰大堂,只要對方願意,可以很方便的跟同一位對手重複對戰。經過重複對戰,你就會知道是不是真的只是對方運氣好。更重要的是,重複對戰可以有助於大家熟知對手的策略,只要有對策,對局就不一樣。就算當下無解,也可以在訓練室再進一步研究。 街霸六的對戰機制和訓練室的各項細微功能,是眾多手遊、什至是主機遊戲,都無法提供的。可以隨時與陌生對手匹配友誼賽,可以自定義對戰,可以重播比賽,觀看對手的輸入按鍵,訓練室還可以查幀表,錄動作,混合抽樣播放動作,讓你可以有目的性地實驗、練習反應對策。 在分數線機制上也有一些保障,不同角色分數獨立,打上特別段位後有一次跌級保障。讓大家在排名賽上,輸掉也不至於十分心痛。若果心理上實在受不住排名賽的壓力,友誼賽絕對低分爬上高分區的一個試招的好選擇。在對戰大堂的友誼賽中,很易會遇到比自己排名高的對手,多找對方實戰看看,輸了沒有成本,但贏得了經驗。

Switch / Steam Deck / Mobile 使用體驗大比拼 (三)
手機‧電玩
MacauYeah・2023-12-14

上兩期,筆者從機身重量、續航性兩方面,對於遊戲機身便攜性的影響,今期最後一期,就從穩定性方面去討論,最後再做一個綜合影響。 沒有對比也就沒有傷害 Mobile Smart Phone 筆者所講的穩定性,其實就是正常運行一個遊戲,不會出現閃退的情況,讓你可以正正常常玩完一款遊戲。但因為Mobile原本是多用途機器,你玩著玩著,可以就要跳出遊戲回覆信息,但再次回到遊戲後,能不能正常運行的不知道。 大部份iOS遊戲,因為舊iphone機能限制,基本上跳出去後,都因為不夠RAM,回來後遊戲會重置。除非你打死不切換,否則一款遊戲沒有頻繁auto save功能,根本玩不下去。Android可能會好一點,有不同機型可以選擇,多一點RAM總是安全一點。 強行地用Linux運行Windows的黑科技 Steam Deck 老實說,Windows已經不夠穩定,用Linux運行Windows Game,會比較穩定嗎?不過最幸運的是,Steam Deck有技術支援,更有社群支援,各遊戲經過Steam官方驗證,連續遊玩下閃退情況都很少。不穩定的原因,反而是Steam Deck主機本身。 在筆者遊玩的經驗中,待機後再打開,有一定機會率會整個遊戲閃退。這些問題在遊玩大作,特別是3A大作,會引來一個很不愉快的體驗。因為它們的auto save位置點一般都是以情節點來做考量,而以上班族來講,三步一待機的使用情境也很常見,那麼觸發閃退的機會率就很高。某次啟動會隨機引起閃退遊戲,真的欲哭無淚。 筆者也翻查過網上的資料,一年多前就有這個問題存在,而官方亦無法根治。筆者在寫稿的途中,還在測試坊間一些可能的補救方式,但因為時間不長,不敢說這問題是可以解決的。 穩定發揮 Switch Switch在穩定性真的無可挑剔,多次待機後都沒有太多問題。完全貼合它的市場定位在家可以隨時在電視玩,出外也可以四處走。隨時隨地停,隨時隨地再開。最多最多都是遊玩實體卡帶時,因為接觸不良而閃退。但這些不可避免的,因為實體卡始終是物理型態存在,跟著Switch四處奔波,難免會出問題。但下載數位版,存放於SD卡就不會有閃退。至少SD卡不會像實體卡會經常替換,所以出問題的機會也較少。 綜合體驗 其實討論了幾個方面,筆者都從是省心遊玩的角度出發去討論。 Mobile在裝備上會最少煩惱,想最輕鬆出問,這個是不二選擇,但考慮玩非課金類遊戲就最沒有保障。 Steam Deck優點是移動堡壘,若你玩的是高性能需求的遊戲,你只能選它。但想隨時玩就未必做得到。 Switch 在重量和穩定性上面最有優勢,考量延續性體驗,這個是首選。

Spring官方教學 | Spring Certified Professional 2023
科技新知
MacauYeah・2023-11-07

筆者作為一個網頁程式開發者,使用Spring Boot開發已經有六年。從當初Spring Boot 1.x開始,查看官方Tutorial七零八落,慢慢摸索,到大改版升級2.x,都碰過不少釘。最近Spring Boot亦要升級到3.x,正式進入Java 17時代。筆者亦不斷Update自己,保持程式於一個可支援的狀態。 相對以前,現在入門Spring Boot已經比1.x年代輕鬆很多。主要前些年某些網頁開發的概念,例如REST API,已經深入行業,大家不再糾結要走傳統MVC還是RESTFul API,也使得Spring Boot這樣的Framework,可以有一個受眾比較廣的統一入門教學。 筆者最近也正式參與Spring Academy的官方教學,好好地厘清一些概念。 官方連結 httpsspring.academypathsspringcertifiedprofessional2023 在讀過官方的幾個章節後,真的覺得很適合有興趣的人去看一看。主要是因為 官方以一個經典例子作為切為點,教學REST API,In Memroy Database。它還介紹了一些簡易的HTTP Code Standard、Test Case。真的比其他民間教學更有系統性。 提供一個可以在網頁上就實驗到的Lab實習環境。那是極為重要的一件事,因為九成人,在setup java 及library dependency maven, gradle時,都碰釘到直接放棄。有時是因為公司工作環境比較有要求,並不允許你使用一鍵安裝的java套件及它的library dependency;有時則因為網路安全,java把你公司的firewall當作a man in the middle MITM attack擋了,也有時是因為你公司的firewall把java擋了。Spring Academy在一個遠端的https網頁提供實驗環境,真的比本機開發要易入門很多。 Spring Academy可要多謝vscode、codeserver,及其他VM、Container技術。 在真實環境中,筆者也有自己的codeserver,打包java os cert等等,盡量減少firewall問題。 因為官方教學持續以Spring boot的最新版本作為教材,它更新的速度總比民間要快。只是官方的教學不會全面覆蓋到所有Spring project。如果大家作為Web入門的話,還是有推薦的。 在Spring boot 3.x當中,因為要求Java 版本至少為17以上,那些教材也有使用一些Java 17的新語法Syntax,實在也令人驚喜。 基本上Java 17現在可以簡化getter setter switch statement,這些在開發Web的環境下都是很重複的事。在Java 11或以前,只能經過IDE去生成getter setter等,但似始都有會一大堆Code佔據你的頁面。 官方教學及Lab環境暫時免費,除非大家很在意的修業證書,不然都可以自由免費看。 官方教學真的值得一看,雖然距離真正開發還差很遠,筆者日後若有條件,會針對官方沒有提及的內容作補充,分享一些在技術面上所需求的最少可運行配置。

Steam Deck With Podman
科技新知
MacauYeah・2023-10-06

Steam Deck With Podman 眾所週知,Steam Deck預裝的是一台Linux主機。但它的系統比較特別,為了可以安全更新,所以系統最主要的部份都設定為唯讀read only。也就是,傳統你可以直接在Linux上經管理員權限安裝的軟件包,全部都會被擋,即使你把唯讀部份設為可讀寫read write,在下次更新時,都會被一次過覆蓋掉。 筆者作為一個負責任的機迷開發者,怎樣可以白白讓一台Linux機只可以玩遊戲呢 怎樣跟老婆交代呢 所以筆者千辛萬苦,找到一個折衷方案,讓他可以當為開發機使用,那就是Podman。當然,若果大家有條件有金錢,直接改裝Windows就可以了。 Podman是什麼 Podman跟Docker一樣,都是一些管理和運行Container的主程式。跟Docker不一樣的是,它是Open source,而且是daemonless。 所謂的daemonless,就是不會有一個背景程式去長期管理Container。好處是不會因為背景程式死了,就全部Container一起掛掉,預設也不需要走管理員權限路線。但也因此跟Docker有一些使用上的差異,例如Podman沒有原生的dockercompose結構,即使坊間有python寫的podmancompose去硬對應dockercompose,但某些network是跟結構還是不能直接從Docker轉移過來。 就筆者早期的踩雷經驗而言,用Podman跑起一兩個獨立固定Port的Container來說,都很夠用,也不會遇到奇怪的Bug。所以這次,亦用來作為Steam Deck運行整合式開發的Container。 不平凡的安裝之路 install homebrew Steam OS 3,雖然可以使用更改read write,再使用pacman來安裝podman。但因為Steam OS更新後,全部要重來,工作量和網路流量都不少,所以筆者改為使用homebrew來安裝podman。homebrew只需要首次安裝時使用管理員權限,之後就會在home資料夾下留下可執行的程式,所以它不會被Steam OS更新所破壞。 install podman 記得記得重新開機,之後應該就可以成功運行container

[教學] 平民雲端服務不是夢 | 5分鐘教你如何快速起VM
科技新知
MacauYeah・2023-05-11

前言 原本筆者只是想做docker cluster,但因為在實機中建VM極其麻煩,所以就研究了好一陣子如何快速起VM。 HyperV有預設的Ubuntu template,但只有ubuntu desktop版,沒有server版。而且desktop gui顯得浪費資源,要clone VM也很廢時,放棄。 Windows Subsystem Linux起VM很方便,但同一個Linux version只有一個instance,沒法起cluster,放棄。 Virtual box沒有Ubuntu template,若要clone的話就變得跟HyperV差不多,放棄。 經過一輪資料搜集,發現了一個Ubuntu multipass engine,聲稱可以跨平台快速起VM。裏面有一些很吸引的功能,可以自己建立images、使用固定IP。 那怕即使是沒有snapshot,在自定義images的配合下預裝docker,要隨時加減cluster node都是一件容易的事。 重大決策點 醜話說在前頭。經過一輪測試,multipass最大的問題,就是custom image、fix IP都只能在bare metal ubuntu 中才能使用。如果你沒有一台閒置實體機安裝Ubuntu,還是要再多考慮一下。 重點 詳細的流程,筆者記錄了在Packer template 和Multipass Static IP中,在這裏就只說一些重點。 packer是使用cloudinit和qemu的技術,行起template中指定的cloud image 在筆者的例子中就是ubuntu22.04servercloudimgamd64.img 大家可以定義image行起後進行一些操作,而那些操作都是經過qemu vnc、ssh進去操作的。 操作完後就會直接儲存當時的image。所以在操作結束之前,盡可能地刪cache或刪去不要的user group settings。 最後生成的image,還是一個cloud image。若要再運行它,必需要使用支援cloudinit的VM來讀取。 cloudinit是用來指定初次運行時要設定的事,例如hdd size, user account password, ssh key import等。 使用工具cloudlocalds可以生成一個seed.img,這樣qemu也可以cloudinit。 HyperV應該也可以經過類似方式,進行cloudinit,但筆者未有去實測。如有更簡便的方法請告知。 multipass預設就已經有cloudinit,在bare metal ubuntu就可以直接執行。 multipass也可以設定不同的cloudinit參數。 成品 最後筆者就選擇了用packer用來預裝docker,經mulitpass無腦起VM,再使用shell script對多個node設定docker,達到即時起docker node的功能。這樣就減省了VM的安裝時間,也省去了docker的安裝問題。 說到底,如果只想測試docker cluster,其實windows, macOS中的multipass也可以實現相同的功能。因為安裝docker那些都可以經過shell script自動化,只是每次重複操作,都變得相當慢。另外,因為multipass在windows, macOS不支援fix ip,對於指定docker cluster interface又會再多一重功夫。

《廣場協議》- 日本迷失三十年之迷
環宇搜奇
幸村・2022-09-17

人氣日劇『半澤直樹』,其實就是日本泡沬經濟爆破後的社會縮影。 『半澤直樹』的背景是日本泡沫經濟爆破後,造成銀行業相繼破產,最後由原產業中央銀行和東京第一銀行合併成為「東京中央銀行」,故事實際上就是兩間銀行的派系鬥爭。 七八十年代日本經濟急速上升,當時幾乎所有人都覺得,日本即將在各個方面超越美國,成為GDP第一的國家。 在國力最頂盛的時候,日本的GDP是美國的七成,1988年,日本的土地價值超過美國四倍。 但在1985年9月,日本和西方四個巨型經濟體(美、英、德,法),簽署《廣場協議》,同意大家對美元升值。 結果到了1995年,十年間日圓升值了三倍,導致房地產泡沫爆破,從此日本走向低迷。 但日本經濟走下坡,坊間一直都有個講法,《廣場協議》實際上是美國的陰謀,為了狙擊日本經濟,推高日圓削減日本產品的競爭力,從而失去挑戰美國地位的力量? 這是個近三十年來最大的迷思,但這個說法是錯誤的。因為日圓升值了,卻沒有造成日本出口的萎縮。 經歷了輕微下跌後,到了2006年,出口又重回1985年的高位,即使到了今日,日本產品出口依然強勁,每年都有極大的順差。 另外是其餘三個經濟體,英國德國法國,並沒有出現經濟危機?間接証明了貨幣升值並不是主要原因。 那麼為什麼日本的經濟會一蹶不振? 原因是日本政沒有狠心去槓桿,不捨得處理壞帳,結果到了的2001年小泉純一郎上台才開始大刀闊斧去槓桿,但已經造成實際上的通縮。 民眾不願消費只想儲蓄,企業營利下降又導致裁員,造成了惡性循環。 另一個使日本經濟下挫的原因,是老年化愈來愈嚴重,勞動力衰退,人口每年都在減少,消費力自然無法增長。 雖然近年開放勞動力入口,引進大量外國人材,但已經無法阻止下跌的趨勢。 現在中國也迎來像日本泡沬爆破前的時刻,英國「金融時報」的東京分社長Harding預計,即使恒大等一系列房地產問題,未必是導致泡沫經濟崩潰的關鍵,但人口下降的問題比日本還要迅速。 日本人口金字塔 這不禁想起蘇聯老大哥的創舉,史太林時期為了鼓勵婦女生育,生五個孩子就可獲頒「英雄母親」的稱號,不只有榮耀,還實際上的金錢獎勵。 但現在「英雄母親」的門檻已經提升到生十個小孩,每個小孩獎勵100萬盧布,但如強如戰鬥民族,能生十個恐怕少之又少。 不過「重賞之下必有勇婦」很可能是解決人口老化的法寶。