文章列表

重入膠坑4 | 走線滲線的選擇

手機‧電玩
MacauYeah・2025-02-14

重入膠坑將近大半年,筆者陸逐實驗了過去不敢做的東西。前幾次就分享了剪鉗、打磨、補色的心得,時代真的一直在變,很多東西已經不需要大師級就可以動手做,而且有一定美觀效果。 例如薄刃剪+打磨+消光漆,已經一定程度可以淡化水口。用不著全上色,也就意味著普通人做個後樓梯勇士噴噴消光就可以了,其餘都是室內一般環境可以操作。當然打磨部份可能要加水,才能減少對健康的影響。 又例如補色方面,很多水性馬克筆可以選擇,軟筆頭可以大面積筆塗,很多品牌還是無味無臭,家裏隨時可以使用。相較以前動不動要用溶劑開油、洗筆,不方便且很大異味,水性馬克筆可謂極其方便。 這次筆者再來分享一下滲線和加深刻線的心得,希望退坑很久的淺度用戶們,有機會都可以試試這些簡單的操作,美化自己過去的作品。 2B鉛筆是神物 在十多年前,看教學,一定會教滲線筆和滲線液。滲線筆應該是那時候最易勾劃出立體感的工具。滲線筆其實是一些很幼細的油性馬克筆,但不論筆頭多幼細,走線時都嫌太粗了。所以筆者過去很長時間,都不滲線。但慢慢地,有網友提出了使用鉛筆勾線,一來隨手可得,二來勾錯也可以很容易擦了重來。 筆者試用過,大推這種做法。不過有兩點要注意的 筆頭要夠幼,走線勾線時才不會勾在坑的兩邊。平時寫字用的0.5是太粗了,那怕用畫面專用的0.3也是太粗了(也貴)。但其實我們可以自行手動磨尖筆頭,這樣才能上色到坑中間。不過磨尖了,代表筆頭很易斷,力度要很溫柔。 馬克筆上過色或上過消光漆的地方更易使用2B勾線。筆者未知確切原因,但感覺上是因為漆面不再原始膠面那麼光滑,質感更像A4紙張,2B筆跡更易留在模型表面。 加深刻線再滲線 在那個古早的過去,滲線液也是自行經法瑯漆稀釋調配。但現在就已經有現成的滲線液可以即開即用。某牌子的滲線液,其實也只是法瑯漆預先稀釋的成品,筆者也先針對這類滲線液做介紹。 這類滲線液是利用管線的毛細現象達到滲線效果,但為確保滲線液的流動性,模型原來的坑線需要先加深,而且在沒有消光漆的情況下使用。(如已使用消光,要重新噴光油,讓表面回復平滑,滲線後再重新消光)。這些都是教科書般的操作。 筆者想分享的,主要是刻線及滲線時機的部份。通常教科書是上色後再滲線,所以一般是假組、打磨、加深刻線、上色、滲線、保護漆(光油/消光)。但若我們只是素組補色,筆者就試行假組、補色、加深刻線、滲線、打磨、再補色、保護漆。 第一次的補色主要為大面積補色,補完後就進行刻線滲線動作,打磨要留在刻線之後,主要是因為刻線容錯率很低,不一小心就刻出界,打磨可以一定程度修補刻錯的地方。真的不行,就再少量補色。打磨過程也可能引起刮漆問題,再補色是必需要。 第一次大面積補色,若為淺色系列,可以用2B鉛筆直接走線勾線,不需要刻,減低出錯風險,劃出界也可以再補色。 水性馬克筆滲線 之前一直有講,水性油易被刮漆,但我們也可以反過來利用這點,直接用水性筆走線勾線。在沒有上色的部份,我們可以直接刻線,再用水性馬克筆走線。走完之後跟滲線液有少許差別,我們需要趁著水性油完全完乾之前,就用紙巾擦走多坑線周圍的部份。(但如果本身有上色,就只能回到2B鉛筆及滲線液的方向,這樣才不會出現擦走底色的問題。) 這個做法的好處是,我們顏色的選擇多了,也沒有法瑯漆X-20溶劑爆膠的風險。刻線部份依然會有出界問題,處理方式同前述一樣。 以下就是筆者運用上面所講的方式的實驗作品,右半是2B勾線及水性馬克筆滲線混合使用的效果,左半則是完全沒有塗裝/補色的狀態。

學習寫程式,除了複制貼上還有什麼?

科技新知
MacauYeah・2025-02-07

不知道大家是如何學習特定程式語言/框架的建構? 也不知道大家可如何保持程式庫/框架的最新狀態? 筆者就分享一下最新的經驗,看看對大家有沒有得著。 制作自己的範本 跟著程式/框架的導覽教學(Tutorial)走一偏 從零起一個新專案 設定專案,該用的基本功能全部設定好,作為概念驗證(Proof of Concept),也作為日後範本(Template)之用。 有需要用新專案,就複制之前的範本,再逐一修改名字或路徑的設定。 上述做法,是筆者過去比較常用的策略。面對很統一要求的專案,都有效。當程式庫有更新,我們可以選擇只局部修改,範本就可以長期用。我們也不需要經常從零走一篇。 練手的Code - 從零起一個新專案 上述的範本做法,對於現時需求多變的專案,可能不是很有效。例如有些專案使用Session Auth,有些則是Api Auth,有些則是Open Auth。同一個範本中有齊多種Auth的設定,原本難度就有夠高,之後複制完還要自行禁用不相關的部份,也是相當的煩人。當範本中多有個地方都有互相衝突的地方,複制範本就不是一個很易的做法。 面對那些複雜的配對,我們務必要真正了解技術的運作原理,然後為每個功能都從零建一個專案,做一個最簡單的Proof of Concept。重點不是在未來拿它們複制貼上,而是用來厘清概念,哪段程式對這個功能至關重要,哪段其實沒有作用。 如果可以,每次程式庫/框架升級時,都從零建一次。這樣一來可以練手,加深記憶,二來是每次版本的變動,有些程式碼可能已經變得沒有作用,原本的寫法並不再是最簡的。當然這個也可以為每個功能獨立做成範本,到有需要的時候再抄少量的程式碼就好。 其實練手的過程中,我們亦會慢慢熟習IDE的功能,有些IDE或Plugin已經很方便地自行完成一些設定。所以筆者漸漸的也習慣了不抄程式碼,改為以IDE Plugin的方式建立,某些真的很不熟練的部份才會維持範本複制的型式。 這是筆者最近學習vue3 的練習清單,還在持續新增中。讀者們有興趣也可以一起來修訂。 https://github.com/macauyeah/AProgrammerPrepares/blob/main/src/vuejs/TimeAttack.md

Spring Data Jpa 自動化的選擇 - Code First

科技新知
MacauYeah・2025-01-22

Code First vs Database First 在早期SQL資料庫盛行的年代,在設計要使用資料庫儲存資料時,很經常遇到一個策略選擇的問題*Code First* vs *Database First* 這兩個策略的差異可能越來越講不清,筆者也找了一些現時網路上的講法。 Code First: 先從寫程式的角度出發,設計數據模型,再使用工具把你程式碼中的數據模型類(Class),生成一個對應用SQL資料庫的表(Table),自動編做好對應的數據結構(Schema)。這樣你在設計時,以程式設計為主導,方便熟悉程式的人使用。這常見於第一手開發設計,因為資料都是第一次收集和儲存,考慮收集程式的運作最為實際。 Database First: 先從SQL資料庫的儲存、取用資料的方式出發,先用SQL成生Table及Schema,再轉變成為程式碼中的數據模型。這樣的資料庫在日後作分析用途時,比較簡單易懂,方便使用熟悉SQL的人去使用。這也常見於二次開發程式,因為這樣可以確保不會錯誤地破壞原有資料庫。 那麼筆者為何講這兩個差異越來越講不清?那是因為現在的資料庫不能單純地只考慮初次或二次開發問題,而是需要考慮多個系統協調運行的問題。 多系統共享協定 - Database First 因為隨著資料系統發展,有些資料會作為數據源出現或用作共享媒界,如果一定要對設計策略作分類,在多系統協調運作下,這些應該叫使Database First。不論它們是SQL還是NoSQL資料庫,我們的程式碼都要為這個預先定義好的數據結構作出妥協。不論使用工具,還是人為分析,都要把共享的數據結構轉換成自己程式中的數據模型。 即使不是多系統協調運作,有時候因為要移植系統,但同時又要令兩個系統版本相容。新系統也是被逼使用Database First的方式設計。 自動化考量 - Code First 前述我們講到,很多時候我們也是從Database First的方式思考。不過筆者就這個Database First,也弄到滿身傷痕。 首先,拋開工具轉換的誤差,我們人為的把共享數據轉化為數據模型,共享數據有時會有一些先天的缺陷,例如: 資料沒有設計Primay Key (主鍵,唯一鍵)、日期時間的定義不明確等。面對一些意義不明的數據來源,要整合確實很要命。而且二次開發中,不可能100%重用原有的資料庫結構,很多時都會加入新的欄位或更多表格去計數。一旦加入新欄位,在團隊多人開發中,那麼使用唯一的共享開發環境,就變很易有程式碼上的衝突。 若需要多人開發,各人有一個Code First的開發用資料庫,是很必要的。這也可以在系統正式升級前,對比開發中資料庫及舊資料庫的結構,觀看它們之間的差異,評估升級的風險。 也許Code First並不是重點,重點是可以隨時建立一個測試用的資料庫,這才方便合作開發。自動化的地方,不單只限於數據結構,範例資料也該是如此。如果有維繫一個初始範例資料,可以在有需要時自動生成,對於多變的環境一定有很幫助。 現時,筆者基本上都會人為檢視資料庫,人工對照編寫程式中的資料結構(即是人工的Database First),並確保那時程式再次經自動化生成的測試用資料庫,並沒有失真(即是Code First)。至於範例資料,初期筆者也只使用SQL生成,但後期因為資料結構開始複雜,筆者也暫暫使用程式碼生成,雖然工作量會多了,但對於資料庫升級、品牌更換,這是很有效的手段,程式碼升級測試也更順暢,絕比SQL生成更易維護。 Ref - Code First vs Database First https://builtin.com/articles/code-first-vs-database-first-approach

快速做用 elasticsearch 做中文 n-gram 關鍵字全文搜尋

科技新知
MacauYeah・2025-01-16

有些時候,我們對一些文章資料,光是使用Ctrl-F文字區配搜尋,很難找到完全吻合的結果。這時候,我們可以試試看快速搭建自己的中文搜尋引擎,看看能不能更易地找到資料。而中文搜尋引擎,其實用免費的elasticsearch也可以做到。我們就來看看怎樣快速起lab吧。 經 docker 下載及運行 elasticsearch docker run -p 127.0.0.1:9200:9200 -d --name elasticsearch \ -e "discovery.type=single-node" \ -e "xpack.security.enabled=false" \ -e "xpack.license.self_generated.type=basic" \ -v "elasticsearch-data:/usr/share/elasticsearch/data" \ docker.elastic.co/elasticsearch/elasticsearch:8.17.0 建立資料庫。在elasticsearch 中,示作index,並建立自己的n-gram analyzer和tokenizer。 curl -X PUT "localhost:9200/book-ngram?pretty" -H 'Content-Type: application/json' -d' { "settings": { "index" : { "max_ngram_diff" : 4 }, "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "ngram", "min_gram": 1, "max_gram": 5, "token_chars": [ "letter", "digit" ] } } } } } ' 假設資料庫每筆記錄有 record_id,title 和 content 三個欄位,其title, content都是中文內容。它們都套用 n-gram analyzer 。 curl -X PUT "localhost:9200/book-ngram/_mapping?pretty" -H 'Content-Type: application/json' -d' { "properties": { "title": { "type": "text", "analyzer": "my_analyzer", "fields": { "keyword": { "type": "keyword" } } }, "content": { "type": "text", "analyzer": "my_analyzer", "fields": { "keyword": { "type": "keyword" } } }, "record_id" : { "type" : "text", "fields" : { "keyword" : { "type" : "keyword" } } } } } ' 批量上傳內容。(如果要上載json檔,請把 -d'xxx' 改為 --data-binary @FILENAME) curl -X POST "localhost:9200/_bulk?pretty" -H 'Content-Type: application/json' -d' { "index" : { "_index" : "book-ngram" } } {"record_id":"1","title":"紅樓夢","content":"甄士隱夢幻識通靈賈雨村風塵懷閨秀"} { "index" : { "_index" : "book-ngram" } } {"record_id":"2","title":"西遊記","content":"混沌未分天地亂,茫茫渺渺無人見。自從盤古破鴻蒙,開闢從茲清濁辨。覆載群生仰至仁,發明萬物皆成善。"} { "index" : { "_index" : "book-ngram" } } {"record_id":"3","title":"水滸傳","content":"張天師祈禳瘟疫洪太尉誤走妖魔"} ' 多欄位搜尋,並指定title的權重為content的兩倍。 curl -X GET "localhost:9200/book-ngram/_search?pretty" -H 'Content-Type: application/json' -d' { "query": { "multi_match": { "query" : "開天闢地", "fields": ["title^2", "content"], "analyzer": "my_analyzer" } } } '

為程所困-是什麼讓你不想寫自動化測試?

科技新知
MacauYeah・2025-01-08

測試場 VS 自動化測試 筆者一直地更新自己過去所編寫的程式,很恐怖的是,那時的自己很少思考過怎樣寫測試Test Case。致使每次做更新時,都膽戰心驚,要手動建立測試場,人肉去測試每個可能有受影響的地方。在那些年的時候,有能力自己搭建測試場,已經是萬幸。但當面對一些要長期維護的程式,測試場的人肉測試並不是一個有效的方法,一來費時間,二來人腦記憶並不可靠。單靠自己去想想那些地方受影響,再測試,某程度是在挑戰人腦的記憶上限。如果是團隊合作,就更麻煩,你以為修改不會影響到其他人,結果卻是翻天覆地。 所以為求長治久安,編寫自動化測試,是有必要的。這些自動化測試,都算是回歸測試,每次程式有任何地方改動,都確保所有自動化測試被通過。理想始終是理想,但實際操作又會遇到怎麼的問題? 以筆者剛更新的程式為例,難以測試主要是當初沒有想過要測試這件事,所以程式結構通常是【連續順序】地執行。想分段測試?除非先重構。 Function中太多自己創建的Object 回顧自己的程式,初期編寫時,總會我手寫我心,每想要創建任何資源,在java中就會使用 new 字眼,或是自行呼叫某些 builder 類來取得資源,這是其中一個令自己無法寫測試的原因。 我們要想想,這些資源,是不是自己Function中所關心的核心。如果這個資源是被直接回傳的,我們要保留,如果它是HttpClient,只是要來獲取其他資源的媒介,我們或許可以利用依賴注入來取得它,即是把 HttpClient 改為經呼叫方傳入。注入的好處時,我們可以在Test中,修改那些資源的行為和結果。更進一步的是,把那些資源改為 interface 的方式存取,那麼在 Test 中就能更任意地控制該資源的行為。 首次重構某些資源成為依賴注入,大部份都會影響呼叫方,很多地方都要重寫。不論使用constructor injection, setter injection, annotation injection 等,上傳呼叫方,或多或少都會要加減改變參數。極致地,我們把構建都交給Program 框架去做,例如Spring Boot中,各種資源,都交給框架去自動配致。當然,這種做法的學習成本高,除錯成本也高。 【注入】其實是想在控作那些資源,在測試中運行得到固定的行為。使用前述的HttpClient例子,當我們業務邏輯是先訪問外部Web API,再根據結果做處理,那麼我們測試時,就會想模擬Web Api的結果。如果要做到自動化測試,最強硬的手段,就修改自己的HttpClient,模疑給出固定結果。 想要做到這種,在傳統的Java中,我們需要透過進一步抽離Interface去做。但這樣做很累,所以筆者通常會用如Mockito的程式庫,去修改HttpClient的行為。有興趣直接看程式碼的讀者,可以去看 github 。 當然,上述的 HttpClient 例子,使用測試場也有可做測試,自己再去模擬那些Web Api的回傳,有些情況下,這樣會更真實,但大家就必需好好定義測試場的行為。因為測試場可能與團隊的其他成員所共用,有機會其他人可能想要更多互動的測試方式,而非固定的結果。但並上非固定結果的測試場,自動化要測試的可控度就減少。

免費自用的私人AI助理 | Ollama - 本地大型語言模型

科技新知
MacauYeah・2025-01-06

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

Steam OS 內建 podman DNS 問題解決方法

科技新知
MacauYeah・2024-12-20

前幾天筆者在介紹SteamDeck 內建的podman時,沒有測試得很清楚。在長期使用下,的確有些問題需要進一步處理,這裏就補充一下解決方法。 我們前一篇介紹的 Steam Deck 內建 podman ,配上再自行安裝 podman-compose 有時會出現warning :`WARN[0002] aardvark-dns binary not found, container dns will not be enabled`。這不單影響到沒有在 service 之間自動産生 DNS 記錄,還會令互聯網功能失效,因為它會是整個 DNS 解釋功能丢失了,只是在 service 中定義 DNS 的地址並不會解決問題。筆者亦測試過,照著原本的 docker 思路,使用最傳統的做法,自己起 network ,自己起 container ,然後再串連在一起,依然會出現問題:`Error: "slirp4netns" is not supported: invalid network mode`。所以根源問題應該不在 podman-compose 上,而是在內建的 podman 依賴上。 緊急的解決方案,我們需要用到 "network_mode: host" 的方式去解決。例如以下例子 "network_mode: host" 的主要作用,就是讓 container 直接在主機的網段上執行。上面的例子中的 postgres 資料庫,它預設使用5432端口,我們並不需要再獨立宣告,即使在 container 內外,都可以直接使用 localhost:5432 溝通。而使用了主機的網段後,DNS 也可以正常運作。但這個做法的缺點就是 container 內的所有 port 都自動佔用了 host 上的使用,有時候那怕我們並不需要,它也會被暴露在外。更可能的是增加了不同 container 之間的 port 衝突。不過筆者要用於開發環境,所以這並不會是很太大的問題。

Docker 來源掃瞄 - Docker Image Scan

科技新知
MacauYeah・2024-12-19

當網安要求越來越高時,我們也要留心 docker image 的來源是不是有漏洞問題。 docker hub 本身就已經有一些安全掃瞄報告,以 nginx 的 1.27.3 版本為例, docker hub nginx 1.27.3 , docker hub 已經列出相當多的CVE漏洞。 不過對於不公開的 docker image ,安全描瞄可是要收費的。作為小團隊,可能想先尋求一些簡單的免費方案。如果你想同樣的需求,可能Trivy會幫到你。 Trivy Trivy 是一個用於描瞄軟件版本依賴或設定檔是否引用到一些有漏洞問題的軟件,它也能檢測 docker image 是否有漏洞或錯誤設定的問題。而且更好的是, Trivy 本身亦有 Docker Image 版本,我們就不用煩惱怎樣弄一個 Trivy 的執行環境,只要可以運行 docker ,有網路就可以了。但使用 Docker Image 版的 Trivy 有一個額外要求,就是它要有主機上的 docker.sock 權限。 描瞄的指令如下,其中 docker.sock 就是為了讓 containers 內部的程式可以存取主機的 docker daemon , .cache 則是為了方便暫在下載資源。 上面故意用 nginx 的兩個同版本號不同平台的 docker image,其實就是為了引出一些潛在問題。nginx 預設是使用的debain OS的,在筆者寫文章的當下,已經更新到最近的 image ,但始終有一大部份可能的漏洞。反觀 alpine OS 版本,就找不到這麼多問題。 這是因為 alpine 預設安裝的依賴較少,所以找到的漏洞也少。正所謂,做多錯多,唔做唔錯(大誤)。這其實有好有不好,因為在發生問題時,在 alpine 下可能連基本的除錯工具都沒有。除非大家有完整測試,或者對 alpine 有相當的認識,你才會選擇一個非官方預設的版本。但就以事論事,引用較少的依賴,長久之下的確是不會有那麼多隱患。大家如果有條件,也可以試試 alpine 或其他版本。 前一節我們可以看到,Trivy需要經過 socket 的方式才能存取主機上的 container daemon 操作權。但 podman 作為一個不主張 daemon (daemon less),亦主張不需要 root (rootless),那麼它該怎樣執行? 其實podman也有user層面上的 socket,而且 trivy 也有對應的方式去轉用第三方 socket (有點像使用遠端主機 socket,但官方並未宣佈正式支援遠端的方式。) 具體使用方式,筆者亦已在 steam deck 上測試,使用方式如下。不過因為 steam deck 預設沒有 root,筆者就省略 cache 指令,免得之後要有權限問題要手動清理。 Ref Podman socket activation Trivy: Support for rootless podman

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 (https://flathub.org/apps/com.google.Chrome) ,但它實際是經過一個github 專案移植過去的 (https://github.com/flathub/com.google.Chrome)。它有提供持續更新,但筆者不保證當中有沒有任何被植入過任何不正當軟件。 相反,flathub中有一些程式是經過原開發者支援的,例如 Firefox (https://support.mozilla.org/en-US/kb/install-firefox-linux), Gnome Boxes (https://gitlab.gnome.org/GNOME/gnome-boxes), Gimp (https://www.gimp.org/downloads/) ,這類可以比較放心使用。 筆者過去使用 Discovery ,的確有遇到一些權限問題,但最後估計應該是筆者安裝 Homebrew 所影響。筆者在重裝 Steam OS 後,直接使用 Discovery,就沒有問題。過去需要經 Homebrew 安裝的東西,現在經 podman , distrobox 或 Gnome boxes 就可以了,不再需要經Homebrew去折騰一輪。而且Homebrew也不是萬能的,因為Steam OS有限制一些套件的事用,即使安裝Homebrew也解決不了。若想要完全開放套件限制或解決依賴問題,還不如直接開啟Steam OS覆寫權限,轉用Arch Linux的安裝包。

Steam OS 3.5更新,內建 podman, distrobox

科技新知
MacauYeah・2024-12-10

之前筆者有介紹過如何在Steam OS上安裝podman,但都必需要自行折騰一番,特別是遇到一些依賴缺失時,還要逐個除錯。在Steam OS 3.5更新之後,官方已經有預安裝的 podman,筆者建議,如果有機重刷OS,就直接使用預安裝版本就好。更重要的是,不但有預設podman,連另一個神器distrobx,也在Steam OS 3.5之後引入。 podman-compose Steam OS 3.5,雖然已經有預安裝 podman ,但在實際環境下,多安裝一個 podman-compose 可以更方便地一體化操作。 我們可以經 python 安裝。 剛安裝 podman-compose ,會出現在自己的 home 目標的隱藏目錄。最後一步就是要加到自己的 PATH 環境變數裏面。 修改保存後,就重啟。之後 podman-compose 的指令就可以任意存取了。 要補充一點,就是官方預安裝的 podman 還是缺少了一些 DNS 的元件,大家會看到 warning 提示。不過在筆者單個 container 的使用情境下,並不受影響。之後要在其上二次引用的 distrobox 也可以順利執行。 神器 distrobox 在 Steam OS 3.5 中,除了 podman 外,還有預裝 distrobox 。 distrobox 其實是基於 container 技術的擴展應用,它目標是讓用經過 container 就可以輕鬆使用到不同 linux 的發佈版本。例如我想在 Steam OS 中使用 Ubuntu ,經過 distrobox 就可以用到。道理上, distrobox 基於 container (podman) 操作的,所以它能做到的,其實自己手動經 podman 也是可以做到。但若果大家想使用跨 Linux 版本的 GUI 程式,筆者還是建議優先使用 distrobox 。因為 distrobox 預設已為不同版本的 Linux 的 Image (來源影像檔) 加入部份調整,在運行時亦有x11等互通,指令也較為簡單。 以下做來例子,示範在 Steam OS 中就執行 Ubuntu 版本的 vscode。 註: Distrobox 也不是萬能的,例如它的 Ubuntu 版本內沒有 snap ,所以不能執行 Ubuntu 版本的 Firefox。 snap will not works (firefox not works)

國模內卷作-摩動核-威遠式劍鬥型

手機‧電玩
MacauYeah・2024-12-04

隨著模型愛好者的增多,中國的拼裝模型市場逐漸崛起,尤其是原創拼裝模型,不少廠商都在研發自己的機甲拼裝模型,價錢宜人,份量十足,所以吸引了越來越多的目光。 今日,筆者亦來分享一下自己首款的原創國模拼裝體驗-摩動核-威遠式劍鬥型 一般來講,國模機甲有以下特色 分件量多,但也因此可能太過細碎 好多隱藏水口。有好有唔好,精修隱水口一定比傳統水口易處理,但處理不好,會導致不完全咬合。 摩動核的特色 內卷的大廠,分件量多之餘,還有金屬骨架。亦因為有成品骨架,所以少了骨架的拼裝體驗,換來的就是更強的關節。 外型尖刺多,吉手(扎手),要小心。 有送支架 摩動核-威遠式特色 原本的角色分類為小兵機,尖刺量已經大大減少,但腳部還是有一些,把玩時要小心。 隱水口設計不太合理,導致剪鉗不好下刀。若強行用薄刃剪修水口,長久會因為位置不當,令薄刃剪變型。筆者薄刃剪就中招了,應該需要用筆刀做精修清理。 隱水口量多,所以不需要做任何打磨。 除手掌部份有個別掌型難以組裝,其他都易於組裝,不需要擴孔或削柱,精密度讓筆者很感動。雖然比不上日本Bandai,但都算流暢。 單手、單腳的可動性高,手型多,裙甲亦有三款,有潛力地擺出各種(奇怪的)姿態。 胸部、腹、胯部裙甲有相連,站屍很好看,但攞動就變得很有干涉。需要拆了裙甲,才能同時平轉腰部及抬腿。 站立沒有煩惱。因為沒有背包負擔,站立沒有配重不良的問題。再加上有合金骨架,初期不會有腳軟、腰軟問題,但緊合度有待時間的驗證。 如果一定要評個分,那就分幾個方面逐評分,以下各項以5分為滿分。 拼裝流暢度及體驗:組合度OK,但剪零件、修隱水口很花時間。組合體驗就很一般,以貼皮為主。3.5分。 造型:分件多,而且成型色好,亦有預塗裝件,成品一流。美中不足就是扎手,4.5分。 性價比:官方售價99RMB,性價比高。5分 因為性價比高,如果各位對那個小兵造型不太討厭,都可以入手一款,試下手感,支持原創。 但若果各位對機械感很有要求,就不要入手了,因為拼裝部份就是貼皮,沒有很驚艷的體驗,簡說講就是沒有結構感覺。但要補充,在99RMB這個價錢,有金屬骨架+預塗裝的貼皮,已經是成本上的極限。

重入膠坑3 |如何在有限的空間內收納Gunpla高達模型:斷捨離的是必要之技巧

手機‧電玩
MacauYeah・2024-11-26

高達模型(Gunpla)是許多模型愛好者的最愛,隨著收藏數量的增加,如何有效地在有限的空間內進行收納成為一個重要課題。這時,斷捨離的概念顯得尤為重要。這篇文章將探討如何在有限的空間內收納高達模型,還有如何處理不再需要的模型。 1. 理解有限空間的重要性 在收納高達模型時,我們首先要認識到,空間是有限的。我們不可能無限制地擴展收藏,因此在購買前,就需要對模型進行認真的思考和評估。問問自己:這個模型是否真的令我感到滿足?它是否在我的收藏中有特別的意義?這些問題能幫助我們展示、收藏、出讓的決定。 2. 選擇合適的收納容器 一個足夠大的立體空間,絕對是展示高達模型最好的方式。高模模型主要想呈現的,是機械感及戰爭感。而現在很多型號的模型,都以大翅膀為主,需要夠大的地方,才能好好地展現它們原本的設計。但土地資源短缺,是大部份澳門居民的常見的情況,所以通常的結果就是在一個空間中放入多台模型,每台模型所分得的空間相對不夠充足。筆者一直以來也有這個問題,經過幾次搬遷,再加上空間越來越少,令筆者不得不調整展示策略。 方法一:分開兩個空間,一個空間以自然站立為主,另一個空間即以支架作獨立展示。 第一個空間,自然站立,即通俗講的「站屍」,以方便收藏及次要觀賞為主。即使緊密地站著,也有列陣的感覺,只要不要模型之間不要相互壓到就好。 第二個空間,獨立展示。但這裏只會展示一或兩台模型,不要多。盡力去擺姿勢,利用各種支架或配件,展現最有魄力的感覺。大家可以想像成這就是一個攝影棚,在這裏放著的就是主角。把自己的焦點,集中在單一的模型上,好好地欣賞自己的大作。 方法二:分開兩個空間,一個空間完全看不見,另一個空間即以支架作獨立展示。 如果空間很不夠,就完全取消自然站立的空間,只保留獨立展示空間。前者就是等於要入盒收納,除了使用原裝的模型盒外,其實飯盒(透明膠盒)也是一個好的收納方式。放在飯盒中,方方正正,易於疊起,它比原裝的模型盒要堅硬一點,也易於查看內部內容。 3. 定期清理和整理 定期檢查和整理您的收藏,就是斷捨離的具體體現。經過歲月的消禮,模型可能會發黃,經常把玩的話,關節亦會有鬆脫或折斷的情況出現。有能力自己修件重鑄的話,一定要好好修理。打椿,重新上色補色是必要的保養技巧。若然無修件再修復,可以考慮設立一個零件區,把作品分解(即俗稱殺肉),供日後其他改造之用。清理損壞的模型,讓空間更加整潔,可以讓您更專注於珍藏的模型。 另一點,也是最難的一點,就是重新檢視您的收藏,將那些不再合心意的模型進行取捨,這樣不僅能騰出空間,還能讓收藏更具意義。 4. 處理被淘汰的模型 前述因為不再合心意,或是損壞而變成被淘汰的模型,有幾種處理方式: 贈送或交流:將不再需要的模型送給朋友或其他模型愛好者,這樣能讓它們得到更好的利用。 二手出售:澳門常見的社交平台,都有模友互相出售二手作品,這不僅可以收回一部分資金,還能讓其他人享受這些模型的樂趣。 二次改造:如果模型已經損壞,可以考慮拆件,進行再利用或改造。例如常見的步槍,可以二次改裝為手槍,巨劍、造型手可以用藍丁膠固定,讓其他作品更易手持。 練習用途:確定不要的模型,可以進行各種上色或改造實驗。不同的塗裝、改造、滲線刻線,都需要大量的練習去熟練。如果大家有意進一步提升制作技巧,需要練手的素材就相當多。 總結 在有限的空間內收納高達模型需要一些創意和計劃,特別是斷捨離的智慧。希望這些建議能幫助您在小空間中也能享受高達模型的樂趣!

重入膠坑2

手機‧電玩
MacauYeah・2024-11-21

水性漆上色 雖然筆者已經砌模型很久了,但很少試著自行上色。但多得模型開模技術的進步,以及水性漆、補色筆的出現,模型預設的分色再加上少量自行補色,就已經效果不錯了。以下是筆者完全使用水性漆+補色筆重塗的作品。打灰底後全部重新上色,白色為水性漆海棉干掃,紅色、藍色、黃色則為Marker筆。 海棉干掃要注意幾點,因為是白色,遮蓋力弱,一定要多層掃。而家每層一定要足夠輕透。筆者太貪,想半小時內就掃第二層,效果不是特別好。有條件的話,放個半天會好一點。感覺上白色遮蓋力弱,掃完第三層後,第四、五層的差別就不太大。大家可以自行取捨。 關於刮漆 大家留意自己的補色筆是不是水性,若果為水性,就跟水油的刮漆情況差不多。再加上小制作的情況下,使用補色筆都是為了方便,九成都不會預先打灰底,所以附著力會更弱。把玩時要更小心。(感謝賢者模型工作室關於水性油的選擇及指導。) 拍照把玩 作為經驗尚淺的筆者來看,老實講,在「上色」與「把玩」之間,還找不到共存的地方。前面已經提到,刮漆是會發生的問題,那怕大家用的是油性漆。更什的是,即使大家只打磨、素組、滲線,把玩多了也是會斷關節的。當花了一百小時精心制作,然後玩壞了,可痛心阿。若換成金錢來衡量,100元的高達模型,找代工精修上色,最後埋單可能要400以上,跟買一隻入門的成品模型差不多。所以大家在把玩之前,一定要做心理準備,斷了,就讓他去吧。塑膠,始㚵是不耐操。 雖然模型易壞,但放著不玩,就跟鹹魚沒有分別。所以筆者就拼著一去無回頭的決心,把高達模型扭下去(但也的確扭壞了兩三隻高達)。在這裏分享一些拍照的姿勢。 支架 拍照環境光不可控的情況下,不要拘泥於背景及支架。有條件搭個攝照棚,打光充足,誰不想。但條件不允許就要要拘泥那些了,找個有燈光的地板,手持拍照就好。選擇手持的原因是,拿得比較穩,重力干涉的因素較少,可以容易地調整模型的面向,使光源看來起比較充足。 構圖 如果是戰鬥模型,例如是高達,盡量選一些對角線構圖,會讓模型看來起更猛。另一個重點就是手機不要貼太近拍照,因為會變型。至少距離一個成人的手位,最後再把圖栽成合適的大小。或者在一個遠的位置,再使用1.5倍或2倍放大,拍出來的效果就跟肉眼感覺得差不多了。手機太近,一定是筆者卡關的問題,好不容易筆者才發現這一點。

概有雲供應商的K8S,為何要自己弄Docker Swarm / 本地K8S ?

科技新知
MacauYeah・2024-11-19

其實筆者寫了這麼多篇docker 的文章,可能有朋友會問,為何要自己從零建立Container環境,使用供應商直接提供的K8S服務不是很好嗎? 按照市場發展,各大雲供應商都越來多,競爭越嚟越激烈,作為用戶方,理應可以得到更合理的價格。不過作為使用VPS多年的筆者,真的沒有覺得雲服務的價格可以便宜到一個不用煩惱的水平,大家還是需要很㥀重地考量自己的業務是不是值得雲端化。 正常來講,在有足夠使用量的前提下,雲端化也是合適的,也真的有產到錢。但問題是大部份情況下公司內部自主開發的應用,都沒有去到這個程度。每個應用去租用一個VPS,即使使用最低配置,用起來的時候覺得不夠快,閒起來的時侯也是浪費錢。 這時,使用 Container 技術,就是讓多個不同的應用,共享同一個或多個VPS的好方法。因為 Container 可以簡易地做到應用之間的隔離,即使不同應用之間有依賴衝突,只要 Contianer 層面沒有衝突就可以共存。 Docker swarm 與 K8S 同為 container 技術,文章最前面,就提到了這個問題,為何不選現有的K8S,反而要自己弄Docker Swarm?其實關鍵亦是價錢的問題。使用K8S固然方便,但就每個節點都得使貴一級的雲端供應商服務,當我們的應用總是流量不足,就更易變得食之無味,棄之可惜。老實講,貴一級的雲端服務,有它存在的價值,很多東西可以做自動化擴展,例如概據流量自動擴容。另外,因為底層 Container 技術有供應商支援,也不用再另外購買支援服務。但這些都是業務有一定流量,才能展現出優勢。 反觀Docker Swarm,就是簡單可入手,初時一個VPS也可以。什至乎不上雲,找幾台舊電腦,實機做也可以。當然K8S也可以實機,不過就簡易程度來講,Docker Swarm 無得輸。待業務真正成長到一個有足夠流量的服務時,才進一步遷移到供應商的原生雲。在初期使用自建的Docker Swarm或小型K8S,可以先加入一些資源統計,以確定是否即裝滿負荷。