搜尋

搜尋結果

Github copliot vs Intellij IDEA ultimate
科技新知
MacauYeah・2025-02-18

github copliot 最近正式開放每月限量免費使用,只要有github 帳號,就可以經過vscode copliot plugin,向 github copliot 交互式生成程式碼,又或是經 copliot 提供 code completion。大家會不會想過,加了github copliot的vscode,是不是效率暴升,可以跟傳統的付費IDE 例如intellij 的IDEA ultimate版本平起平坐? 流暢度明顯提高 是的,在生成程式碼方面,特別是code completion,在開啟copilot之後,實在好太多了。筆者長期寫java,vscode 原生的 java code completion,實在太陽春。java class name都很長,而且是強型別,很多時候都要完整打出class name。但大部份時候,筆者都要打很多個字之後,vscode才猜到你想打什麼,再給你可能的code completion,但這樣一來你也快打完了,幫助不大。要麼就是自己複制貼上,要麼就自己全拼出來。 在開了github copilot之後,在空行開始時,它就會開始猜你的意途,在打幾個字母以後,它雖然會頓一頓,但總在筆者跳去其他部份複制class name之前,就給出更新結果,實在省心太多。但猜測始終是猜測,大部份時候還是邊打邊修正。不過code completion方面,已經是追得上intellij,有些時候更是超越了intellij。例如我們有時寫 javascript 時,需要做多語言顯示,我們需要為每個語言設定一份i18n的翻譯。copilot 在這方面也能幫到忙,它會自動推薦可能的翻譯,你連問都不用問,這些功能,都不是 intellij 的本地運算會有的支援。 另一個要提提的是 copilot chat,它跟大家平時使用 chatgpt 程式碼生成的方面類似,只是它可以直接在vscode的某個檔裏直接交換生成程式碼。不過生成的品質都很一般,很初階的事可以做,深一點的就不懂。例如你很常寫java,但突然要寫javascript,有些javascript的array操作你懶得查,這時你可以叫copilot chat幫你生成。但若果你今日使用 javascript 框架,有一些 vuejs 或 reactjs 的結構參數傳遞你不太了解,你想找copilot chat,那就幫助不太。它依然可以生成一些程式碼,但對你碰釘的地方沒有修正意義。你還是需要自行從官方文件較對、研究Stack overflow中相似問題的解決方案。就跟chatgpt差不多。當然這些不是傳統IDE可以給你的。但如果現今對比的是收費的copilot chat和本地免費的ollama qwen2.5coder,copilot chat就沒有太大性價比。 可以作為付費IDE的平替嗎 如果我們拿vscode github copilot 跟 intellij IDEA ultimate來比較,前者入門價錢是120美元一年,後者入門則是169美元次年續期有優惠,但到了第三年才會比 github copilot便宜。單看價錢的話,github copilot的確比較便宜。想省點錢,github copliot絕對是一個可以考慮的選擇。但除了錢以外,或者我們還要考慮一些其他因素。 公司立場上,介不介意你的IDE上傳資料到cloud service上面? 付費IDE的除錯功能、多環境整合、程式碼品質分析,這些關係到長期維護,非程式碼生成部份,是不是可以忽略不計。 筆者在開發開源的程式,長期都使用vscdoe,在配上 github copilot 後,明顯覺得它提升了 vscode 的流暢度。但相對實際工作上,筆者還是會集中使用 intellij IDEA ultimate 。因為即使vscode 有明顯改善,但日常碰到的問題更多不是在生成部份,而是解決那些似是而非的程式碼結構陷阱,這方面還是intellij 更幫到忙。當然stack overflow和其他網路資源才是真正的救命靈藥。

steam deck 辦公用途工具資訊 2024/12更新
科技新知
MacauYeah・2024-12-17

購入steam deck 已經有一年多的時間,之前亦發過一些安裝教學。適逢筆者系統重裝,又有機會重新檢視工具的可用性。 Podman Distrobox 一項很重要的更新,Steam OS已經有預安裝podman,不需要經home brew安裝。但預裝的podman 沒有內置DNS,可能會對K8S等進階應用有影響,不過筆者只作為單機測試用,普通的podman compose沒有問題。 另一項很重要的更新,就是 distrobox,它可以經 podman 讓大家方便地執行不同的 linux 版本,想在Steam OS上使用Ubuntu?沒問題,開箱即用;想用VScode官方維護版本,沒問題,安裝指定Linux再按裝VScode就好。 詳見上一期的介紹。Steam OS 3.5更新,內建 podman, distrobox 中文輸入法 我們不需要再安裝Fcitx5 Rime,如果大家在遊戲模式下,已經設定好中文輸入法,那麼在輸到桌面模式下,照樣以Steam Button X Button的方式,打開內鍵輸入法。你會見到有虛擬鍵盤彈出,它會覆寫桌面模式的。此時,即使你關掉虛擬鍵盤,並用實體鍵盤,中文輸入法都會保留。不過大家要確認,彈出當下必需要是【中文】。 若然你彈出的虛擬鍵盤是英文,請按【地球】轉換到【中文】後,關掉虛擬鍵盤,再重來一次重按Steam Button X Button,確保彈出的時候是經【中文】覆寫。 Discovery Discovery 是 Steam OS 預設用來安裝第三方程式的地方,它經 flathub flatpak 存取程式。但筆者一定要先強調,它提供的第三方程式,並不一定會得到原開發者的支援,它屬於打包移植之類。 例如 flathub 中可以找到 Google Chrome httpsflathub.orgappscom.google.Chrome ,但它實際是經過一個github 專案移植過去的 httpsgithub.comflathubcom.google.Chrome。它有提供持續更新,但筆者不保證當中有沒有任何被植入過任何不正當軟件。 相反,flathub中有一些程式是經過原開發者支援的,例如 Firefox httpssupport.mozilla.orgenUSkbinstallfirefoxlinux, Gnome Boxes httpsgitlab.gnome.orgGNOMEgnomeboxes, Gimp httpswww.gimp.orgdownloads ,這類可以比較放心使用。 筆者過去使用 Discovery ,的確有遇到一些權限問題,但最後估計應該是筆者安裝 Homebrew 所影響。筆者在重裝 Steam OS 後,直接使用 Discovery,就沒有問題。過去需要經 Homebrew 安裝的東西,現在經 podman , distrobox 或 Gnome boxes 就可以了,不再需要經Homebrew去折騰一輪。而且Homebrew也不是萬能的,因為Steam OS有限制一些套件的事用,即使安裝Homebrew也解決不了。若想要完全開放套件限制或解決依賴問題,還不如直接開啟Steam OS覆寫權限,轉用Arch Linux的安裝包。

Git 歴史修正
科技新知
MacauYeah・2024-10-29

有時候,我們修正一系統檔案,例如某個commit中,多了一個不該放的檔案,又或者想修改該commit的作者,我們就要追搜到某個commit,然後用rebase隨個改。 例如本次repo,有一個githubAction.md,因為錯誤原因,被加到了main中,也藏了很久。如果我們想連根拔起,我們需要加出它第一次出現的commit。 $ git log githubAction.md commit 60ccd70f6b768138cbe23c93ffcfa32574ce895c 那我們就以它前一個commit作為rebase的根據,進行逐個commit修正。 $ git rebase i 60ccd70f6b768138cbe23c93ffcfa32574ce895c pick 60ccd70 draft some content pick e2ee9a3 add some senario. pick b91afc1 refine submodule; pick 98cd366 add notes about submodule specific checkout; pick 064b06f test directly commit in submodule main pick 7b648d2 update git submodules notes pick 556f25e add notes about merge timing pick 5244804 Create gitcontinuousintegrationstrategy.md pick 107e486 add more pratical nodes about ci; pick d93cbee add mono repo challenge pick 1c471b6 add worktree notes pick 9063ccb notes about different of git flow and github flow; pick b72e89e Update githubflow.md, add ref more link pick 0b8f2a9 draft github flow release problem pick 8b333fc finalize github flow release strategy 在rabase選項中,把需要改的commit由pick改為edit。rebase會以舊到新顯示。然後儲存。例如 edit 60ccd70 draft some content edit e2ee9a3 add some senario. edit b91afc1 refine submodule; pick 98cd366 add notes about submodule specific checkout; pick 064b06f test directly commit in submodule main pick 7b648d2 update git submodules notes pick 556f25e add notes about merge timing pick 5244804 Create gitcontinuousintegrationstrategy.md pick 107e486 add more pratical nodes about ci; pick d93cbee add mono repo challenge pick 1c471b6 add worktree notes pick 9063ccb notes about different of git flow and github flow; pick b72e89e Update githubflow.md, add ref more link pick 0b8f2a9 draft github flow release problem pick 8b333fc finalize github flow release strategy 我們第一次會在60ccd70,我們作出想要的改動,然後經amend去改掉60ccd70 $ rm githubAction.md $ git add u $ git commit amend author=quot;newuser quot; 確定無誤的話,就可以去下一步,即是到了e2ee9a3 $ git rebase continue 因為已經rebase過,你此時看到的不會再是hash不再是e2ee9a3,而是自動rebase完的e2ee9a3。若大家有東西要改,就使用commit amend。如果沒有東西要改,也沒有conflict,可以繼續rebase continue下去。

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做太細緻的權限管理。

Ceph Storage 水很深
科技新知
MacauYeah・2024-09-25

筆者不才,早前為大家介紹了一篇關於Ceph Storage的最入門安裝教學。但在後續測試中,發現了一些概念上的問題,需要盡早說明,不然就會像筆者一樣,要砍掉重來很多次。 OSD HDD Ceph Storage的主要功能,就是為Contiainer提供外置儲存空間,它對儲存空間有特定的要求。我們最好在建立ceph clustercephadm bootstrap之前,就為每個node上增加合適的HDD 引述官方說明 OSD Object Storage Daemons The device must have no partitions. The device must not have any LVM state. The device must not be mounted. The device must not contain a file system. The device must not contain a Ceph BlueStore OSD. The device must be larger than 5 GB. 簡而言之,大家需要準備新的HDD,不要做任何格式化,讓OS見到HDD但不作任何操作。筆者試過,使用hyperv VM hyperv HDD,也是可以做到的。不過之前筆者於教學中用的 multipass 就沒有這個模擬HDD功能,我們需要使用比較強大的VM作為實驗。 若然HDD是在ceph clustercephadm bootstrap建立之前,就存在的。我們可以經過ceph的網頁介面,或經指令自動加入。 ceph orch apply osd allavailabledevices 若然HDD是在ceph clustercephadm bootstrap建立之後,才加入的。那麼ceph有機會沒法自動發現它,筆者當前的dev版本就出現這問題。我們就需要經指令手動增加 ceph orch daemon add osd NODENAMEdevsdb OSD 官方說明文件 httpsdocs.ceph.comenreefcephadmservicesosd#cephadmdeployosds Reset 在我們做實驗時,若我們想回復到上一個狀態,測試不同的參數差異,Ceph指令並不會即時執行。例如前一句的add osd,想倒回來自行刪掉一些osd,即 ceph orch osd rm OSDID 它就會排隊慢慢做刪除。 但這個過程筆者未有成功過,OSD一直處於繁忙狀態。有機會是因為系統需要保持同步狀態,待成功遷移資料前,什麼都不能動,所以一直都在待刪除的狀態中。 同樣地,當我們想要刪除一些node時,我們使用以下指令 ceph orch host drain NODENAME ceph orch host rm NODENAME 最後也是會卡在刪除OSD的情況 Removing Hosts 官方說明文件 httpsdocs.ceph.comenreefcephadmhostmanagement Static IP 因為 container 技術,很多都需要固定 IP ,我們做實驗之前,最好先了解你的VM engine如果提供Static ip 。以 hyperv 建立的 VM ,其實可以同時建立兩張網卡的,一張為預設網卡,用於連網用,另一張則設定為內部網絡。在安裝 ceph 時,經 cephadm bootstrap 所引用的IP則設定為內部網絡的IP。之後基本上使用任何一張網卡的 ip ,也可以訪問到cephadm的網頁介面。如果不是在一開始的階段上準備Static IP ,我們又會在重設解綁cluster時,同樣因為機器繁忙而卡在不上不下的狀況。

Coding | Test Case 值得寫嗎?
科技新知
MacauYeah・2023-11-02

很多做軟件開發的朋友,其實都會聽過Testdriven的開發模式。就像Scrum一樣,名氣很高,但試過的人很少。為何會這樣呢?筆者認為,並非開發者懶,而是編寫Test Case的難度真的高。對比開發程式本身的成本,寫Test Case的時間學習成本一樣高。 造成這些高成本的原因很多。一來是因為開發者並不像過往一樣,慢慢從零寫程式,一般都應用Framework去預構建一些東西,例如打包Database connection pool,Dependency injection。Framework是好用的,但就令你要模擬Mock up特定資源,變得越來越複雜。所以一般中、小型開發,都鮮有人懂得做Test Case除了大神獨立開發者外。筆者對於Spring boot等Framework,都摸索了很久,才能模擬一些特定資源。但Framework一更新,就很多部份都要重寫。所以筆者沒有很強調要做Test Case,因為成本認真大。 最近,在摸清一些test case 基本concept後,筆者又重新開始嘗試編寫test case。以下假設用的是object oriented programming 在開發自己的class,為每個public function,都寫test case。很多IDE, 都有提供相關自動生成test case function signature的功能(就是為你的目標function,起一個只有外框的test function。)vscode雖然不是原生支援java,但只安裝基本的java test package,就可以達到同樣效果。 在不依靠framework的情況下,自己class要『引用』的其他class object,不要經過自己使用new來生成object。全部經set function來傳入你要引用的class object。除非你的class是作為Factory Pattern(工商模式)生產某些object,不然你就不會再有new字眼。 在為自己class編寫test case時,就會可以模擬被『引用』Object的行為。這個object在傳統上可以使用oop中的interface類型來達到模擬又不會影響到原結構的做法。實在不想做interface,java還可以用mackito 這個libraray來硬改Object的行為。 同理,自己class要『引用』一些外部資源,那些設定資源的config,都應該要set function傳入。這樣你在test case中才能起一個臨時的模擬外部資源。 在不使用framework的情況,要全數去自行模擬,當然很痛苦,但至少你可以做一些很簡單的測試。 在使用framework的情況下,還有些教學都是教你mockito繼續模疑。但這會是很痛苦的,因為這樣叫做unit test,單元測試,你要模擬所有東西。在折衷的情況下,應該底層元件做unit test,但上層的元件就做integration test,整合測試。 在做integration test時,就差不多等同使用framework行起部份或必要的資源。而那些必要資源,可能指是的database service, network service。我們可以在test case中設立不同的config,從而把framework指向一些備用資源。 Database好貴,腦細不會付錢set up多一套,自己電腦不夠強,也不能跑起多個開發用Database。好在還有h2 database可以幫你,它是memory可以操作的。只要你的framework支緩就好。在初次使用Framework時,你總會覺得為何Database層要設得這些抽像,其實為的就是讓你可以隨時換Database。不論做測試還是做移植,都會少很多問題。 模擬Network service還是沒有銀彈,要麼就mockito硬改行為,要麼就是提供一套測試用service。筆者曾經為模擬別人的Network Http API,也花了相當時間自己建立dummy server,提供模擬效果。無論dummy的效果有多假,有多局限,例如if id == 1,always return true,也是有一定價值。當你做source code refactoring (重構),又或是做framework升級時,還是讓你可以安心一點。

Design Pattern: Observer / Subscribers - Push vs Pull
手機‧電玩
MacauYeah・2023-09-29

相信一般入行IT不久的朋友,都會知道IT系統更新時,有推和拉push、pull兩種方式。特別是Programer,對於觀察者模式又或者是訂閱者模式Observer Subscriber 會有更多的使用經驗,例如OS programing要處理event bus,Mobile App要做的推送通知Push Notification。 但一般來說,很少人討論推和拉push、pull的問題,筆者就著一些踩過的坑來說說差異。 首先,在一個通訊相對穩定的系統中,Push、Pull都很好用。例如同一個OS內,它的socket或pipe可以看作很穩定,可以假設那些要廣播的消息可以正常傳遞出好。但好用歸好用,這個模式對於越來越複雜的交互系統都有一個無法明確處理的問題:怎樣去處理觀察者訂閱者自己的操作失敗問題。 對於非IT行業的讀者來說,只要你接觸過手機即時聊天程式IM,如whatsapp, wechat, facebook messenger應該都會遇到一個問題就是:你收到OS提示通知,但打開聊天程式卻看不到新的對話內容;又者是你連續收到多個同一個內容的提示通知,那怕你已經讀過了。這些都代表了,手機端當初時沒有好好即時回應是否已經操作成功,不需要重複通知的問題。有可能是手機當時掛了,也有可能是網絡不太好。 上述的例子,對一般人來說,可能影響不太。因為重複收到訊息,又或是漏了訊息,也不會怎樣。但對於業務系統,例如定期收費,多收一次又或是少收一次,都會引起某部份關係者的不滿,即使事後有退費機制,但有些匯率問題,始終會有差異。在傳統架構上,有規模的公司系統都可能會使用內部的中央資料庫等做交易transaction管理,整個過程,都要嚴謹地記錄廣擴是否成功、觀察者自己的操作是否成功。 在近代,分散式系統又或是微服務的出現,令上述的中央資料庫無法實行。如何好好地重新定義好Transaction管理,就是一大挑戰。筆者最近亦實作了一個要在微服務的上廣播的觀察者模式,但雪上加霜的是,在互聯網的環境下,廣播的消息沒法保證可以正常傳遞出好。觀察者訂閱者可能已經正常收到消息,也做了相應的操作,只是來不及回應,網路就斷了。這令重複發送信號的可能增加了。 如果說,要以平民的方式去實作這類廣播,Pull會比較有大的容錯。廣播者只是通知觀察者訂閱者來拉資料,保證廣播當時的資料量可以盡量地少。廣播者開放盡量大的查閱權,觀察者訂閱者可以自由決定事後更新要取得的資料量。但這樣每個觀察者訂閱者都要重做一次同步機制,不過好處是,主動權在於他們自己手上。 相對地,Push的容錯就低一點,但要付出的成本也跟Pull差不多。因為網路環境,大家要重現一個基於TCPIP而有commitrollback的難度較大。當網路出現斷線,廣播者無法確定是否需要重做。在重複收到訊號時,最後還是需要觀察者訂閱者來決定怎樣處理重複記錄。但比Pull好的是,Push可以限制單次訊號的傳送量,也可以確保觀察者訂閱者一定收到特定的記錄。 上述就是筆者在這一年來遇過的坑,如有什麼不足,很歡迎大家一起來作更多討論。

Git Submodule
科技新知
MacauYeah・2023-09-15

Git Submodule 初次實務上使用submodule來同時管理幾個project的更新。如果有任何理解上的錯誤,請在github中提issue或pull request。 Why Submodule 假設你的團隊中有三個人,A君做A Project,B君做B Project,C君做Main Project。如果可以,A,B各提供已編譯的Binary或Library,給C君直接使用就最好。 但要做到好好管理,A,B都要有自己的發佈系統,即是把Binary上傳到某個分享Repo中,這樣C君就能有條理地通過IDE或Compile工具下載對應的版本。如果是javascript,Repo可能就是npm repo,如果是java,可能就是maven repo。這亦代表A,B君對程式編譯、打包、版本命名等都要很熟悉,不能一輩子都命名為v1.0.0。 如果團隊對這些都不熟悉,C君還有什麼方法呢其實靠著Submodule的功能,C君也可以硬把A,B的Source code取出,做最後打包。 這跟A、B君自己把source code壓縮然後Email寄給C君是有不同的。因為這樣C君並不清楚A,B的git脈絡:C君需要自己做好A、B的版本記錄。想要只回滾A,B的版本普不容易。但經過git Submodule後,C君可以清楚知道現在正使用的是A、B的那一個commit版本。假如有一天,A、B、C三個都更新了,但發現合起來時就跑不動。C君可以保持A、C的版本不變,單獨提取B的某個版本進行測試。當然,你可以說原本Email也可以這樣管理,但始終你不清楚B的版本記錄,Email的日期並不代表Source Code的進度。因為有時候,Bug Fix是針對舊版本的做更新,新功能的Email日期反而比Bug Fix要早 同理,如果大家要連結多個沒有發佈系統的文字資料,也可以利用Submodule。例如筆者正在編輯一本書,當中不同的主題,就是使用Submodule的功能串連起。 Command 馬上看來來Submodule可以怎樣做。 假設你已經知道git 怎樣用,也起了git repo。假設你是C君,進入你的本機repo資料夾內,使用submodule參數。 上面的效果,就是把C君當前repo的狀態,連結到B君submodule當時預設分枝default branch的最後一個commit 中。然後C君在自己的repo怎樣更新,它引用到B君的submodule版本都不會變。 直到某一刻,B君說他加了一個穩定的新功能,請C也連帶更新一下。C君也做好自己的準備後,使用submodule參數進行更新。 注意,如果C君有多於一個submodule,上述指令會全部一口氣更新。另外,如果你覺得B君的最新版本不能用,還是可以針對B君取得特定的版本。

Git Co-Work Flow
科技新知
MacauYeah・2023-06-23

Git CoWork Flow 雖然git面世已很久,但相當一部份澳門朋友都是solo man,很少合作寫code,對git branch始終都有些恐懼。所以這次來解召一個基本原則,至少你不會爛了code救不回來。 若然大家未熟悉git,初次利用git合作寫program,請盡量減少使用共同分支branch,可以極大地減少問題。 第一個大原則 建立一條自己分支 在一個repo中,為自己建立一條分支branch,可以減少Remote repo中有人比你先commit,而令你push失敗的情況。 Code block由於安全性問題,沒有獨立寫了LifeMag 網誌中,請移到github repo。 除非你的隊友故意你用的分支名先commit,又或者你自己有幾台電腦,幾台一起做改動。不然push 應該不會有問題。 第二個大原則 用fetch取代pull 很多人在取用Remote Repo的更新時,都會使用pull。但pull其實是fetch及merge的混合,而且merge還要考慮source branch是那條分支的問題,若然大家都有一條獨立branch,那麼這個無腦pull並不存於每人只有一台電腦下的多人協作中。 fetch的過程中,還可以加入參數prune,順便依照Remote Repo的指示,同步刪掉本機中一些不再存在的originbranch。 Code block由於安全性問題,沒有獨立寫了LifeMag 網誌中,請移到github repo。 第三個大原則 Merge前先Commit 經過前述fetch後,其實他人的改動並未加入自己的分支中,必需經過merge才會出現。但並不是沒有conflict就無腦merge。 假若自己有改動,未commit,應該老虎蟹都先commit。這是為了在merge後,還有機會可以無腦reset,回到之前那個commit。這就像是做任何更新前,先做backup。 Code block由於安全性問題,沒有獨立寫了LifeMag 網誌中,請移到github repo。 第四個大原則 由某個特定的人來管理master或main branch main branch以前叫master branch,是他人下載時的預設分支,也是Github、Gitlab的預設顯示分支。所以該分支存放著的source code,應該在代表信心度比較高。 在協作的環境中,每人都有自己分支,那就代表要有一位人員做管理,他負責checkout main, 然後合併其他已驗證的分支。 Code block由於安全性問題,沒有獨立寫了LifeMag 網誌中,請移到github repo。 在某些比較嚴僅的環境中例如Github、Gitlab,main分支可能會被系統機制鎖定,必需通過系統內鍵的Pull Request,才能通過審核,合併到main。另外,也有一些關於開發上的Git workflow,主要針對功能管理、版本發佈、錯誤修正等控制。有機會再為大家介紹。 希望以上的流程,可以有效且容易地讓大家協作。如果有任何command錯誤或更新,都可以經Github Pull Request通知筆者。

崩壞:星穹鐵道|體驗章節心得
手機‧電玩
MacauYeah・2023-05-26

上一篇推介的RPG手遊作品《歧路旅人:大陸的霸者》,其首發日期,已是兩年多前的作品。大家若果覺得畫面不太適合,想試試別的,實在可以試試米哈遊的最新作《崩壞:星穹鐵道》。筆者在前述的文章也有強調過,要在手機平台推遊戲,就必需配合手機的操作時機,以及同時重現在機制上的可重複遊玩性。更好的是,不要把課金意圖弄得太難看,讓人有試玩的空間。而《崩壞:星穹鐵道》,就最初遊戲的5小時體驗裏,以上的事都做得不錯,所以盡早為大家推薦一下。 首先講講戰鬥系統,遊戲採用回合制, 每次上場,我方可以最多上場四名角色,有直接影響戰鬥的戰鬥屬性分七種,分別是:物理、火、冰、雷、風、量子、虛數。每個角色只會對應一種屬性,而敵人則擁有幾個弱點屬性。若玩家成功攻擊敵人的弱點屬性,不單有大傷害,更可以令敵人崩壞,喪失行動力。遊戲雖然以回合制進行,但每個角色都有不同的速度值,如何運用角色屬性令敵人崩壞,去創造行動優勢,就是這遊戲的遊玩核心。(回合制就像《FF10》那樣,速度高的角色就相較其他角色行動來得頻密。《歧路旅人:大陸的霸者》則是一回合內各角色行動一次,但先後順序不同。) 雖然除弱點屬性外,還有七種角色屬性「命途」,但因為不直接影響戰局,筆者就不再逐個列出。在戰鬥屬性和命途的互相影響,看似有七七四十九種組合,看似要組一隊萬能隊伍,需要很多的課金。但筆者遊玩的時候並沒有這種壓力。因為上場人數的限制,最多只有四人,所以不論你課不課,也頂多只有四種弱點屬性,所以也不必在初期不斷去抽角色。大概有個五種就足以上場(對比《歧路旅人:大陸的霸者》,八種武器弱點加六種魔法弱點,即便八人上場,一人就一種武器,少量角色才有一種魔法,《崩壞》真的沒有那種課金壓逼感) 戰鬥系統的聲畫演出各方面,都比筆者過去遊玩的要強得多。而且遊戲亦有自動保存機制,每走一段路、跟環境或NPC互動後,都會自動保存,那怕是如筆者般的碎片化時間,也能玩得下去。故事亦沒有明顯的小關卡段落,在劇情上的連貫性就表現得比普偏手遊的小關卡制好。(某些手遊的小關卡過場,看多了真的會覺得很造作,在筆者珍貴的碎片化時間中,看看就會選擇完全跳掉)。如果你真的很久沒有試手機上的RPG故事作品,《崩壞:星穹鐵道》絕對可以是一個選擇。 《崩壞:星穹鐵道》官方網頁 httpshsr.hoyoverse.comzhtw

遊戲手柄Backbone 評測:使用心得及存在之問題
手機‧電玩
MacauYeah・2023-03-13

近年來,手機遊戲的盛行使得手機遊戲手柄的需求逐漸增加,其中一款較為知名的手機遊戲手柄為 backbone 遊戲手柄。筆者早在半年前就想入手,苦在澳門沒有進口,某寶網購亦只有代購一路,所以遲遲不敢購買。但最近,澳門各遊戲店都有入貨,筆者亦急不及代地買了一套iphone款。以下,就分享一下我的使用心得及存在之問題: 使用心得:最美的部份 沒有延遲、也沒有無線干擾:因為Backbone 遊戲手柄使用的是直接以Lightening直連手機,所以流暢度很高,按鈕也沒有網路上所謂的硬(頂多像是Switch Joycon)。也因為是直連手機,沒有舊款藍芽之間那些干擾問題,不會讓你的藍芽耳機斷斷續續。 設計合理:因為沒有使用藍芽,也沒有內置電池,所以跟手機配合起來也不重。能夠大大減少使用者手部的疲勞感,而且長期玩也不怎吃手機電量。也因為足夠輕,即使帶出戶外也不費力。 不夠完美的部份 安裝方便性:雖然是Lightening直連,但每次連接都要拆掉手機保護套。本體的安裝過程其實很方便,但拆套是件很費時、也怕手滑跌手機的事。折衷方法,就是長期手機跟手柄合體,它可以經外置的Lightening 電源,由手柄為手機充電。合體後手機也不算變大很多,還是可以放在公事包中一同出行。 價格偏高:Backbone 的價格有夠高,比常見的8BitDo系列、PS4、PS5系列,都要高。而且亦無其他可以使用的平台,這個價格下的所有功能,只能用在手機上,所以CP值對比其他手柄就差很大。 圖為合體後的大小,因為沒有手機殼,整體不重也不會太大 總體而言,如果你已經無法玩主機遊戲,想在手機上另找出路,你的手遊亦支援手柄的話,這款Backbone一定買得過。不過如果你本身有遊戲主機,又或者你的手遊共不支援手柄,就不用花錢買這個了。 註:如果你想用手機玩PS remote play,也請三思。因為有些遊戲要用Touch Pad和Motion Sensor,而PS Remote Play對這些功能並不友好。例如The Last of Us第一集,就有手搖電筒的問題,你在Remote Play下就是搖不出來。這不是Backbone的問題,這是PS remote play自己的問題。

高質雲遊戲影片 | 最後生還者Part I
手機‧電玩
MacauYeah・2022-12-23

前幾期筆者為大家介紹了攻略收藏,本期就繼續為大家介紹優質的雲遊戲影片。 不知道什麼時候,討論區上開始多了【雲遊戲】這一個詞。那不是指的PS Now XBox Cloud Gaming,而是指你看直播主玩了某款遊戲,就當成自己玩了一遍所有遊戲謎題我都看過,都知道解法,劇情也看了,連操作體驗也知道直播主都做過。所以,遊戲也玩完了。 其實網上看別人玩遊戲這件事一點都不新鮮,但想好好地體驗遊戲的各個方面就很有難度,特別是單機劇情遊戲,要麼就是無腦剪接,要麼就是直播存檔。想真的讓你看一遍,就看到了整理好的東西,而且劇情不是硬生生地拼出來的,真的不多。因為要做到這些,制作方一定要先玩通遊戲一至兩遍,再重新理順所有事情,再錄影一次。 能做到這些的直播主、Up主、Youtuber不多,有做的也不能全遊戲都做,只能挑一下比較重點遊戲的來做。 筆者找了好久,才遇見一位比較有誠意,在這方面很持續產出的大神 那位名為【黑桐谷歌】的大神。 他最近在【最後生還者】的PS5重制版 PS5版改名為【最後生還者Part I】,以最高難度解說了一遍,也做了新舊版本的對比,真的並不是一般人可以做到。他勾起了筆者的回憶,也讓筆者體會到原來這個遊戲還有這麼多的機制是當初筆者漏掉的,這遊戲也絕對有二週目的可玩性。一週目看劇情,二週目做收集或難度挑戰。 完整Playlist httpswww.youtube.complaylistlist=PL7PA3hyhaHFIl8tIWkb9A_CbaLmxkOQ1E 黑桐其實也有在更新其他熱門遊戲,例如當時PS4魂系列中大賣的【血源詛咒】 ,不能說很強很強,但故事與攻略方向都頭頭是道。 完整Playlist httpswww.youtube.complaylistlist=PL7PA3hyhaHFKkIlYJl37Po0ck1IGkSc_h 【艾爾登法環】他也有做,但因為筆者未實際看,不敢現在推薦。畢竟不是所有攻略,都一定能講得透徹,而且艾爾登法環的體量也有大,以筆者查看其他紙本攻略來講,能在完整性上做好這遊戲的解說應該相當有難度。待筆者正式看過後,再為大家推薦。

四年的等待-《戰神:諸神黃昏》下
手機‧電玩
MacauYeah・2022-12-09

筆者總算全破遊戲,但感覺上有些失落,劇情上和戰鬥難度上也有些期待的落差。以下部份涉及劇透,不想受影響的朋友趕緊回頭。 本篇以預言來作為故事的引線,但預言的反轉並沒有帶來合理的戲劇張力。 預言中,一直強調『提爾』帶領眾人對抗奧丁。隨着劇情發展,玩家會找到提爾,但最後這個提爾,只是奧丁假扮的。目的就是要從中引誘主角一行人向一個錯誤方向走,而且在重要時刻奪取關鍵道具。但這個詭計,最後並沒有導向成功,也一步一步讓奧丁陷入困局。 這個不明顯的反轉,讓預言變得不像是全知,缺乏自圓其說的戲劇張力(就是缺乏那種聰明反被聰明誤的感覺) 還有,劇情中去找命運三女神的作用就完全不明所以,主角一行人從中知道了海姆達爾會殺死阿特柔斯這個預言,但最後這個預言就如大家所知的一樣,沒有發生(主角怎會死?)。 在這個結構下,本篇中所謂的『預言』,更像很多電影題材中的平行宇宙或者是量子世界: 並不會有必然的後果, 只是在多個平行世界中,通常阿特柔斯會死在海姆達爾中。 當奎爺得知海姆達爾會殺死阿特柔斯,就去做一把新武器對抗海姆達爾,而這把武器的名字居然是德羅普尼爾,是原神話中奧丁的裝備之一。而更讓人感到可惜的,就是奎爺打海姆達爾要做新武器,打奧丁同雷神就不需要,感覺海姆達爾比奧丁更強。 而阿特柔斯方面,因為幫奧丁拿取面具而釋放出赫爾,這段劇情更是令人費解。因為去拿最後的面具碎片,本來是阿特柔斯、斯露德、海姆達爾三人去拿,而到達目的地後,海姆達爾第一時間就離開,而正當阿特柔斯釋放赫爾,海姆達爾又突然回來鬧場,嘲弄他放走赫爾,最後陰差陽錯令任務失敗。這段劇情又是一段令人費解。 全篇劇情都表現得很情緒化,有前一刻希芙一直想阿特柔斯死,後一刻又為斯露德、阿特柔斯化解矛盾;前一刻雷神要殺死阿特柔斯,後一刻因不願再打就被奧丁桶死。最有劇情反轉效果的,就是奧丁分身扮提爾, 但這有讓遊戲的『主軸』變得不夠嚴謹。 而且這集Boss有點少,配不上諸神黃昏的背景,由頭到尾就死奧丁,雷神,海姆達爾以及光明神,就四個神級人物,感覺配不上原著。到最後奎爺做代理神王,希望還能有下一集吧。

收藏高質遊戲攻略 - UCG典藏攻略系列
手機‧電玩
MacauYeah・2022-11-15

早前在5月份的時候,就為大家介紹了UCG這個內地的國產遊戲雜誌。當時筆者購入的攻略典藏並不多,就只有《鬼泣 終極檔案》一本,其他都只屬於設定集,所以並不敢斷言它的攻略質量。直到最近,筆者看了它的【艾爾登法環攻略本】和【掌機王 NS Vol.SP 怪物獵人 崛起】內地譯怪物獵人,港台譯魔物獵人後,實在大開眼界,所以不得不再一次推薦它。 先說一說筆者比較攻略質量的準則。首先筆者並不以最快攻略為目準,反而更看重有沒有完整介紹一隻遊戲,再來就是編章整理找尋資料的難易度。 以各類網媒來說,例如巴哈、HK01、游俠網,這些網站都著重於快速攻略,加上搜尋引擎的幫助,突發地找些資料,總是很方便的找到。但以遊戲指引來說,他們都很少可以從頭到尾有一個體貼的教學,跟著他們走而又想大大地體驗不同支線,要走兩、三週目一定少不了。一來看他們攻略產生的方式都以素人各自編寫為主,二來一切也是用愛發電,能有效校正已正已經很偉大。想要有條理地,盡可能完整地介紹,變得不太可能。 但作為網媒和紙媒混合的UCG來說,推出典藏攻略,就成了他們最有能力的事。作為有資歷的媒體,他們有機會取得遊戲先行版,可以提前開始編寫攻略。而且他們並不是跟網媒拼首發搶流量,不需要隨遊戲發售第一時間就推出典藏攻略當然他們也有週刊的短期攻略,他們反而是在遊戲更新穩定後才推出經修訂的典藏版,整體品質高下立見。 以【掌機王 NS Vol.SP 怪物獵人 崛起】為例,它所載的內容是以3.1.0版本為準,而3.0.0是DLC發售前的最後一個遊戲內容正式更新,距離遊戲首發,中間可是經歷了兩個大版本的改變。在以【破關了就封存】的Game迷民俗習慢來說,經歷了一段時間才推出的話,受眾讀者絕不是隨便玩玩的Game迷。就本書而言,它的資料搜集量真的大,各種武器、防具的制作素材都有列出,雖然未能做到配裝推薦,但這份強逼症,而夠顯示制作組的恆心。再來就是怪物攻略要點,對完全沒有接觸過系列作的新人們,很具有參考價值。而且各項練金迷一樣的遊戲設定,都以表格條列式解釋。這可不是一般制作組願意附出的努力對比之前香港的Great Game電玩文庫的魔物獵人世界的狩獵手冊,GG的實在太沒有誠意 比較遺憾,遊戲的DLC編章還在有序更新中,想要現在就買到對應攻略,應該還要等個幾個月。不過適逢雙十一,筆者亦繼續加購UCG的其他作品。待筆者好好檢閱後,再為大家推介值得一看的書籍收藏品。 UCG商城連結筆者就不在這裏分享了,大家在某寶上搜【UCG商城】就可以找到,它還有一家【UCG奧特萊斯】,就專賣一些過氣大作的攻略本,價錢上會更有優勢

手機遊戲情報 | 2021/11/15-11/21
手機‧電玩
MacauYeah・2021-11-22

之前筆者因為參加一些主機遊戲Speedrun的節目,停更了手機遊戲情報一個月。現在將會回到原本的步伐,為大家搜羅每週值得關注的手機遊戲資訊。 跨跨跨平台遊戲 近年MMORPG不僅沒有因為行動平台的侵佔而被淘汰,很多廠商還很積極地做跨PC、手機平台的大型MMORPG。《奧丁:神叛》就是其中一款努力做這個嘗試的作品。《奧丁:神叛》是用 Unreal Engine 4 引擎開發,看著宣方的預告版,真的很有家用主機作品的AAA大作精美畫面水平。 官方中文網站:httpstwodin.kakaogames.com 遊戲暫時未有試玩,預計2022年上市。雖然未上市,但遊戲已經在韓國遊戲大獎橫掃四大獎項,為本屆遊戲展最大贏家。 傭兵物語:軍團戰略 接下來介紹的,同為韓國廠商的2D風格遊戲《傭兵物語:軍團戰略》。與Unreal當然無得比,但這遊戲著重RPG的排兵佈陣策略體驗。玩家可以通過收集不同種族的傭兵團來攻略故事,體驗人海戰術的樂趣。 未有下載的朋友,不妨先來看看不同YouTuber的攻略試玩,感受一下人海戰的感覺 遊戲已於11月15日正式開放下載啦 iOShttpsapps.apple.commoappid1573550944Android httpsplay.google.comstoreappsdetailsid=com.playside.fq 燒腦視錯覺解謎籠中窺夢 打打殺殺的遊戲,可能玩多了也會悶。如果厭惡了動作遊戲,不妨來試試看解迷類型。《籠中窺夢》是一款「視錯覺」解謎遊戲,由兩人工作室Optillusion開發完成。遊戲的內容全部包含在一個神秘的立方體中,立方體的每個面都是一個獨立的世界:工廠,燈塔,遊樂園,教堂等等,他們之間看似毫不相關,實則交錯萬千,充滿了意想不到的關聯。 遊戲以買斷制的方式發售,售價約為3.99USD iOShttpsapps.apple.commoappid1587860402Android httpsplay.google.comstoreappsdetailsid=com.Optillusion.Moncage