搜尋

搜尋結果

Spring Boot Web App 更新期間的維護模式:從唯讀到全鎖的解決方案
科技新知
MacauYeah・2025-08-25

在營運 Web App 的時候,雖然我們有 Docker K8s 可以滾動更新,但難保用戶在更新的過程中,有一半訪問去到了舊版,另一半去了新版。如果可以,Web App 本身自帶維護模式,可以自我判斷什麼時候應該忽略新的訪問,當然最好。但要做到這一點,前期需要很多規劃。狠心一點,可以直接關掉對外的服務,讓用戶無法訪問。 但在另一些情況下,例如升級搬遷的情況,下線時間比較長,完全關掉服務並不是一個很好的方向,我們至少還可以提供唯讀的選擇。而且這個可以從資料庫出發,讓 Web App 少處理一點邏輯。 如果 Web App 背後的資料庫是 MSSQL 或 MySQL,唯讀這件事應該是簡單的,只要你把 service account 的權限改變就好。但如果你用Oracle,就要想想辦法。 筆者想到的方法,暫時有兩個。第一個就需要大家寫寫 Script ,一口氣把所有 Table 給鎖起來。例如 第二個,就是生成一個新的唯讀 User schema,給他所有Select的權限。然後更新 Web App 使用那個唯讀 User schema存取資料。 兩個方法有什麼差異呢? 前者就全部鎖起來,沒有任何一個資料庫用戶可以改寫資料。如果你的業務沒有差異性,全部一起封起來就完事。但如果你只想 Web App 轉成唯讀,但其他背景程式還可以執行更新。那你就只能用後者了。但後著也不是百分百的完全無痛,至少你 Web App 要支援登入與操作的 Schema分離。 例如用Spring boot JPA的話,可以在 application.properties 可以讓登入及操作的Schema不一樣。 spring.datasource.username=READ_ONLY_USER spring.jpa.properties.hibernate.default_schema=ORIGINAL_SCHEMA 又或者在 java 層面指定。 @Tableschema = quot;ORIGINAL_SCHEMAquot; 這看上去,是很有彈性的。但其實也是有些局限。如果你本來的JPA有寫特制的 JPQL 或 Raw Query,又或者你在Java層面加了 @Subselect,由於這些都是程式原作者所 hard code 的,JPA沒法幫你改寫。改來改去,可能還是前述寫Script的方法,一口氣把所有 Table 給鎖起來實際一些。 Reference 更多筆者的程式開發分享,見請 github

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

[教學] 平民雲端服務不是夢 | 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又會再多一重功夫。

程式交易經驗分享
創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2020-06-10

《程式交易經驗分享》 《Markek Wizard》這書提及一點,這世上能賺錢的策略其實很多,但諷刺的是要找它出來卻十分困難。其實交易就是經驗的累積,每天坐在電腦前,看著股價變動,隨著一年又一年過去,經驗會逐漸增加,然後你會發現,即使你不看任何指標,很多時候真的預測得到接下來會發生什麼,那便是經驗,市場就是重覆又重覆著去出現一些變化,只是重覆的時間及次序你不會每次也確實知道,只能耐心去等待機會,等待你見過、經歷過的變化再度出現在你面前,然後你便懂得像以往一樣去交易。經驗累積得越多,便越懂得更直接有效去執行交易。 學習運用程式,能讓你將這些經驗變得更系統化,繼而寫成一個能讓程式自動去執行的交易策略, 這能讓你更直接,更迅速去執行這些你見過無數次,而又再重覆的獲利機會,這便是程式交易的優勢。 其實程式交易在歐美及台灣真的十分流行,但在香港目前也有不少人是初次接觸,或許不少人就是聽過multicharts、amibroker等,但就是沒有親身用過。其實程式不是新手所想的那麼複雜,只要懂得簡單的電腦操作也能學得會。 不過,學習前必需明白一點,程式不是什麼必勝的工具,但程式肯定可以讓你的交易次數大幅減少,因為透過程式做回測,你會發現很多很多被認為是可行的交易策略,回測的結果也會告訴你其實在真實交易中根本不能獲利,但這過程中也讓你的交易變得更加準確,至少你的本金不會再因為這些策略而虧損。 而且降低交易次數,對任何一個來說都肯定十分有用,交易時的買賣差價、佣金、交易費用等,一年累積下來其實成本根本很大。目前香港已逐漸流行「零佣金」,但即使是零佣金,請記得買賣差價也是一個重要的成本,這是絕對不能忽略的。 此外,程式交易是需要練習的,除了學習程式的語法、連接自動交易的過程,還要學懂如何讓程式在真實交易中持續執行,這世上沒有任何策略是一年中每一天都賺錢的,一個好的交易策略,一年12個月中有1至2個月是輕微虧損其實已是很厲害的策略,但學習程式的可能受廣告影響,總認為每天開啟程式,然後每天便會給你回報。 要學懂讓程式持續去執行,這點其實是最難的,比學習電腦知識更難。程式交易能降低你在真實交易時因心理因素而導致的虧損,但也不代表你會完全沒有壓力,讓程式執行一個其實能賺錢的策略,也要時間去累積經驗,去練習。

你敬我一分, 我敬你一丈
宗教玄學
熊神進・2020-05-31

每天想一想 常常聽到客戶在談及個人恩怨時, 說「你敬我一分, 我敬你一丈。」筆者沒有完全同意這句話。 少時候,家師曾引用《孟子middot;離婁下》其中一段話教導我們 ldquo;仁者愛人,有禮者敬人。愛人者,人恒愛之;敬人者,人恒敬之rdquo; 。 我們犯了一個通病, 就是「先」要別人敬自己, 然 「後」才去尊敬人。他人禮讓尊敬我、我亦應禮讓尊敬他人。人家敬我一尺, 於是我敬人一丈, 在生活上, 這個哲學看起來沒有爭論點, 但從佛學思考, 《起信論》說, ldquo;一切眾生以有妄心,念念分別rdquo;, 人的行為不是由因果決定的,而是由自己的心念決定的。因果是一種規律,造了什麼樣的因,就會感什麼樣的果,這個「果」還需要許許多多的緣來成熟。 想要別人尊敬自己,首先得學會尊敬別人。要人敬己,必先敬人;要人愛己,必先愛人, 這是我處世座右銘, 也是我教學生處世原則。凡事先想別人的, 再想自己, 便可與人無爭。多學習別人的優點,少針對別人的缺點, 每個人心裡都有一把尺,量人先量己, 罵人先罵己, 一切由自己做起。做人,人品為先,金錢為次;做事,明理為先,利益為次。 佛說:ldquo;應觀法界性,一切唯心造rdquo;。筆者認為與其「你敬我一分, 我敬你一丈」倒不如我們把ldquo;敬rdquo;保留, 把先後次序排列, 我敬你一生, 你照亮眾生。我不需要你以「敬」來敬,也不需要你還我一丈的「敬」,我不犯貪, 你只要好好學佛, 好好修行, 幫助眾生, 這就是你「敬」了我, 感恩。 如有任何問題,歡迎聯絡: 風水、改名、講座預約服務, 林小姐 13726267799晚8時後 或加微信號 熊神進:澳門 85366618785 公共微信 macaumasterxiong 私人微信 macaumickey 淘寶風水法器店: httpmacauhung.taobao.com Facebook 熊神進澳門風水師 中國澳門風水掌相學會會長(澳門政府註冊)

那些年,一直在變的FF戰鬥系統|FF7 Remake Demo 試玩後感
手機‧電玩
MacauYeah・2020-03-13

續前篇 經過幾年的再磨練,FF7 Remake終於要出來。 新式ATB模式 普通場景下,動畫、音樂以及NPC對話動作都十分不錯。戰鬥糸統就像FF15一樣,以無鏠接合的方式進入。這些應該都是期待中的事,對不? 好,來點新鮮的改動吧。 戰鬥中,角色有HP、MP、ATB 3個數值,HP當然就最直觀啦,到0就掛掉,而MP就是供魔法使用,估計中後期召喚獸都是靠MP來召喚舊版FF7也是。而ATB的角度就有點不一樣。ATB以往是所有行動的先決條件,現在則是使用魔法、技能以及道具的必要數值,而且必需要以基本攻擊來增加其ATB數值當然你躲著什麼也不做也是可以累積ATB,只是更慢。試玩版中ATB只有2格,戰鬥中每個角色戰鬥都需要好好進行管理。遊戲故意設計成,自己當前操作的角色ATB增加比較慢,而AI的角色就相對增加得快,所以切換角色就變得很必要,而切換角色速度都十分方便。 如果要講問題的話,就是敵人鎖定問題,例如敵人是在玩家背後,則鎖定切換不到,必需要將角色方向調向另一方才能進行鎖定,令戰鬥流暢度卡卡的,而敵人則有類似眩暈值、弱點值等等,有效累積之下,可以使戰鬥更加順心,整體來說,試玩版體驗都十分良好,正式版是值得期待。 想睇直播,記得訂閱我地嘅 Twitch YouTube Facebook

台灣虎航高雄旅展促銷!澳門飛台灣來回連稅HKD798起!
激安優惠
OHChance 旅遊誌・2018-11-30

台灣虎航繼台北旅展後,再推出高雄旅展促銷,促銷日期及價格跟台北旅展完全一樣。不過今次搵過,最平的價格不論北中高都要在農曆新年後先有;新年前就貴幾十蚊,另外回歸聖誕都無咩平飛,跨年就都算有d,而農曆新年就全線都無。 提提大家最平的 tigerlight 票價是不包括托運行李,如果有20KG行李需求建議直接買 tigersmart票價,因為tigersmart比tigerlight貴HKD240,即等於買20KG行李價錢,但 tigersmart 還可以免費選位。 關於護照資料未有或換緊護照不要緊,只要確定姓名、性別、出生日期打對就ok,護照資料可以預訂後自行上官網修改。方法請參考:httpsohnote.infotigerair_manage_booking  《優惠價錢(來回連稅連手續費)》*澳門⇄台北台中高雄:HKD798*台北台中高雄⇄澳門:TWD2,887  《出發日期及最長停留》.出發日期:即日起至2019年3月30日.最長停留:不限  《購票日期及方法》.購票日期:12月3日2359前預訂.預訂方法:至台灣虎航官網.預訂網址:httpswww.tigerairtw.comzhtw  【輔助訊息】.是次優惠必須買來回(可不同點進出);.是次優惠可以台中高雄不同地點來回,在搜尋時目的地選 ldquo;台灣-所有機場rdquo; 即會來回程均顯示台灣三個地點;.現在台灣虎航的預訂系統已可訂票後自行上網免費修改護照資料。方法可參考:httpsohnote.infotigerair_manage_booking.虎航 tigerlight 票價不包括托運行李額,只包10KG手提行李額。  附註:上述最低價錢為航空公司公告之最優惠價格,或本站能找到的最低價格;每一航班有否優惠票價及所存票量由航空公司決定,優惠票量有限售完即止。  價錢 Sample - 澳門飛台北、台中、高雄優惠價(未連HKD130預訂費) ===== 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 httpsohchance.info 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 httpsohnote.info 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:httpsyoutube.comcOHChanceTravel 睇埋 Facebook 專頁 httpsfb.comohchance 第一時間獲得最新旅遊資訊!