3D 列印開始變成熟了
入手一台 3D 印表機 以前已經觀望 3D 列印很久了,大學做通識課的報告就選了這個題目,那時候 3D 列印還很貴,一台要十幾萬,而且聽說很難調又很臭,常常印炒麵出來。 大概兩三年前 Bambu 就憑著 X1C 魔術般的速度與穩定性打開市場,那時候一台還是好幾萬的東西,現在發現 A1 mini 居然單機已經落到 6000 一台這麼不可思議的價格,而且這個價格印出來的品質跟速度還跟高階機種有得比。 去光華看了一下實機發現 A1 系列還有出降噪功能。後來查了一下大家還是推薦 A1,因為他列印大小是跟其他機種一樣大,如果用 mini 的話會少很多東西可以印。 另外一開始還在研究到底要不要買 combo,就是多一個 AMS Lite 可以多色列印,後來發現重點其實不是多色列印,而是可以把四個顏色放上去自動切換,也有一捲線用完自動換下一捲的功能,這個方便性提升非常多。 3D 列印有無限的想像 一開始買回來最新奇的其實是 3D 列印機本身的零件要自己印,像是那個竹屎檔版跟竹屎籃,還有裡面附的鏟刀跟六角板手半成品,這真的是一種文化衝擊。 最有趣的是把 AMS Lite 裝到 A1 頭上的基座,直接解決空間不夠的問題,3D 列印的問題就該用 3D 列印解決。 從現成模型開始 很多人沒有買 3D 印表機很大一個原因是不知道怎麼建模,現在拓竹的 MakerWorld 有非常多現成的模型可以下載,甚至可以用 Bambu handy 用手機遠端操控列印。 這就很像是你在手機上面網購一個小東西,隔天他就出現在你家一樣,像我印過最實用的大概是 Ikea 洞洞板的配件和筆筒。 Slicer 與材料 印這些東西的過程中也開始研究 slicer 裡面的參數,像是 infill 可以很大程度控制成品的強度跟列印時間,像裝飾品就可以印幾乎中空 lightning 的節省時間跟材料,功能件就用比較堅固的 supportive cubic。 元件擺放方向也會影響美觀、強度跟支撐的複雜度。 材料方面 PLA Basic 可以印大部分的東西,只要不是機械元件像是齒輪或高溫環境,強度其實比想像中好。 ...
LeRobot SO101 組裝踩坑紀錄
最近買了一隻 so101 來玩玩~照著 Seeed 的官方文件組,但還是踩了不少坑,這裡作為文檔的補充。 Seeed 的官方文件: How to use the SO10xArm robotic arm in Lerobot 我買的是 Seeed Studio 的 so101 Pro 沒有 3D 列印件的版本,畢竟就是為了用 3D 列印機才買機器手臂(?)。Pro 版跟一般版差別是 follower 用的 servo 是 12V,比較有力,但不知道買不買得到一般版? 內容物大概長這樣,有貼心的附了四個夾子可以固定在桌面上,還有兩個不同的變壓器,一個是 12V,一個是 5V,接錯可能會燒掉。 幾個遇到的坑 MakerWorld 上的 STL 檔案不是 Seeed Studio 的版本,要另外印電路板底座。 要先改零件列印方向跟刪除一些多的零件,所以建議用電腦先編輯過。 伺服 motor ID 跟校正很吃初始位置,所以圓盤安裝上有些技巧。 3D 列印的零件精度不高,有些地方需要用到可能會掰壞的力量。 列印 我這次是用: Bambu Lab A1 follower:PETG Translucent leader:PETG HF 不太建議用一般 PLA Basic 印這種東西,最大原因是蠕變(creep)。PLA Basic 長時間受力之後,會慢慢沒辦法恢復原本形狀,手臂放久了結構有機會變形。再來 PLA 比 PETG 硬,也比較脆,受力或拆裝的時候比較容易斷。還有一點是 PLA 放久了本來就會脆化,所以之後很可能要隔一段時間重印零件。 ...
Tailscale 內網穿透 VPN
想要遠端 VPN 連到家中,在一些 wifi 路由器裡面都有提供一些簡易的 VPN Server 如 OpenVPN 等,但架設 OpenVPN 需要有外網 IP 。 另外一個情況是 IP 通常是中華電信的小烏龜的 IP,假如小烏龜是房東的不能亂改設定 這裡要介紹一個厲害的東西:Tailscale VPN 免費的方案可以有三個帳號與 100 台裝置的額度,非常夠用 安裝也非常簡單,就照著畫面引導去安裝,至少要安裝兩台,就可以每台裝置互聯 source: https://tailscale.com/blog/how-tailscale-works 每台裝置都安裝好後會得到一個 100 開頭的 VPN 內網 IP,最神奇的是可以直接輸入設定好的機器名稱來連線,就不用記那個 IP 如果不想要每台電腦都灌的話,也可以只灌一台主機當節點,其他內網的電腦就靠它當通道 source: https://tailscale.com/kb/1103/exit-nodes 這邊示範最簡單的在 Synology NAS 上設定 Subnet Router 其他主機可以參考:https://tailscale.com/kb/1019/subnets?tab=linux#connect-to-tailscale-as-a-subnet-router 找到套件中心裡面的 Tailscale 安裝 登入後會看到這個畫面,要 Running as Exit Node 才能連到內網其他的主機,然後按下面 subnet router 將內網的網段加進去 設定好遠端主機後,要回來主控台做確認才能開啟 Exit Node 裝置清單上面選有開 Exit Node 的裝置,點 Edit route settings 把選項都打勾 這樣在外面打開 Tailscale 就可以用內網 IP 遠端回自己家的電腦了~
Cloudflare Tunnel 內網穿透架站
最近用 AI 自己寫網站的人變多了,如果想要讓別人可以看到自己寫的網頁,用 http://localhost:8080 別人是看不到的。在問問全知全能的 Chat 大神後,看到了一個免費又神奇的東西:Cloudflare Tunnel 照著 cloudflared 說明文件灌好後就可以用下面的指令生成一個臨時的 .trycloudflare.com 網址 cloudflared tunnel --url http://localhost:8080 在這個範例建立了一個臨時網址 https://prison-throw-accessing-eagle.trycloudflare.com 不過如果要有自己的專屬網址怎麼做呢? 以前要自己架網站最麻煩的地方就是網路的設定,雖然用 DDNS 可以解決浮動 IP 一直變的問題,但如果是租屋處的數據機不是自己可以改設定的話,就沒有辦法 Port Forwarding 進到網頁主機。 這個 Tunnel 的原理就是把 Cloudflare 當作一個中繼站,由網頁主機的 cloudflared 主動向外建立連線,就可以讓外面的瀏覽器穿過防火牆連進去。 source:https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/ 準備的材料有: 一台有接網路的小主機(個人習慣用 Ubuntu) 一個域名 domain name 域名便宜的一年可能 500 NTD 內就有,可以去 Cloudflare 買,就可以少一個 DNS 代管的步驟。 要去 Zero Trust 做一個新的群組 然後到 Tunnels 建立通道 選擇 Cloudflared,至於 WRAP 的設計太”零信任”了,本身是一個 VPN client,會把網路流量都重新導向過去,不是很好用 幫通道取個名字 選一個喜歡的安裝方式,Ubuntu 就選 Debian,喜歡用 Docker 也可以,把指令貼進去就會自己安裝,成功的話下面就會出現已連線。 一個通道建議只綁定一個主機,要多台主機看是要用內網連線,或是用多個通道單獨連線。 再來建立公用主機名稱,也就是對外的網址,下面選擇想要轉發的服務,我們是網頁所以轉發 HTTPS,URL 就填網頁主機的內網 IP 。裡面也有 TCP 選項可以自訂 port ...
原始碼的價值
影片提到軟體開發過程中,真正有價值的東西是設計的邏輯。技術日新月異,需求也一直在變,所以原始碼很快就會過時。就算其他人用非法的手段拿到原始碼,也很難馬上修改,原始碼越龐大,就要花越多時間理解原始碼的運作邏輯,對於競爭對手來說可能重寫還比較快。總體來說,原始碼本身其實沒有想像中這麼有價值。 (影片是這麼說,不過我個人覺得競爭對手拿到原始碼,是可以逆向工程出很多知識的。我想影片作者真正想表達的是從原本的開發團隊來看,原始碼可以視為負債而不是資產,真正的資產是下面所提到的邏輯。) 這個影片的重點是 Peter Naur 提到,軟體開發過程中有三個很難用程式碼或文件完整記錄下來的思考邏輯: 現實世界與原始碼的對應關係 技術決策當下的背景與原因 原始碼如何適應新的需求 而這些難以記錄下來的邏輯,卻是整個軟體專案最有價值的經驗,這些經驗會有很大一部分殘存在參與過專案的人腦海中。 軟體的價值在於解決真實世界的問題 這個影片剛好連結到自己最近看到一個軟體工程的方法:領域驅動設計(Domain-Driven Design, DDD),討論軟體開發的價值所在。開發者常常會陷入鑽研酷炫技術,卻忘了真正要解決的問題,導致做出來的東西沒人用。DDD 思考如何讓領域知識盡早參與到開發過程中,讓開發者在設計時,能更好地捕捉現實世界的問題,最後交付出真正有價值的軟體。 一般軟體開發者因為沒有領域相關的知識,得花很多精力去理解真實世界的問題。另一方面,因為理解原始碼的精神成本很高,除了維護該原始碼的人難以參與其中,要等到做出功能後,才能從利害關係人與領域專家們中獲得重要的意見。為了進一步降低開發的風險,在這個基礎上發展出了領域故事化(Domain Storytelling) 的方法,嘗試使用圖形化語言,消除自然語言中的模糊地帶,增加團隊間溝通的效率。 站在地科領域的角度可以怎麼看? 非資訊相關科系的人,缺少的是對軟硬體生態的理解,導致 AI 出錯的時候找不到原因,怎麼下 prompt 都沒辦法準確地修正,結果越改越糟,所以才會有工程師說: AI 不會通靈,短期不會取代工程師。 前面提到開發者苦於吸收領域知識,而擁有領域知識的人很少可以開發複雜且龐大的程式。不過在這個 AI 可以幫忙寫程式的時代,很多程式語法的問題,現在都可以快速解決,甚至一些簡單的應用都可以快速生成出原型。 AI 時代學習程式的方向? 個人認為現在非資訊科系學習程式的重點,可以不用像過去花大量時間在學習程式的語法上,只要可以理解的程度就好,如果當下不能理解,就叫 AI 幫忙解釋。更多時間可以花在理解技術背後的原理和應用情境,就可以有效引導 AI 得到我們想要的結果。 具體一點的問題像是:每個程式語言的特性?資料怎麼儲存在電腦裡的?程式之間怎麼分配工作?電腦之間怎麼溝通? 理解這些背後的原理後,可以進一步去了解如果資料規模放大數千倍,或是硬體被限縮在規格很低的小電腦上,瓶頸會發生在哪?整個軟體架構該如何適應?這個過程需要慢慢累積,建立出現實世界與軟硬體技術的關係。 如何更有效率的使用 AI 協作開發程式? 如果不知道如何開始,可以從自己遇到的問題作為起點,不要急著生成程式碼(因為修改具體程式碼的成本比修改抽象的程式架構來的高出不少),先問問 AI 怎麼設計功能,為什麼要這樣設計? 理解程式架構後,自己嘗試去評估這些技術與自己現有的資源是否匹配,來回交談確定選用的技術與架構,再根據功能生成出每個程式碼片段組合起來。 在迭代的初期不需要太眷戀生成出來的程式碼,可以直接修改抽象的程式架構重新生成原型,等功能釐清、架構穩定了,再來詳細修改程式碼,這樣就可以慢慢理解整個軟體開發的邏輯。 如果必須維護舊的程式碼,可以先叫 AI 抽取出各個程式碼段落的意圖,抽象回程式架構,利用自己的領域知識去補足當時可能的情境,與 AI 討論組織出新的功能與架構設計,再用 AI 去修改或產生新的程式碼。
利用 Copilot 輔助開發 Word 自動化填入
使用情境: 平常助理有很多重複的行政表格需要填寫,有沒有辦法降低工作量? (以下個資是 AI 生成的虛構資料) 初步想法: 以前在演講看過用 AI 在 Excel 產生大量範例可以填入 Word 制式化表格 撇除 AI 的部分,我們知道可以用 Excel 可以大量填入 Word 表格 尋找最合適的解決方案: AI 給出三種方法: Word 郵件 合併列印功能 Word 巨集 Python 腳本 Python 腳本的問題是需要先建立 Python 環境,考量到一般使用者不會想要用指令來跑程式,所以先不考慮。 合併列印功能需要在 Excel 先做好每一筆的內容,但考慮到每次填入的內容其實都有點不一樣,所以需要手動複製貼上相關資訊這件事情並沒有解決。 Excel 可以根據某欄位的資料去尋找對應的相關資料,就像資料庫一樣。 分析需要填入的資料發現一些可以建表的欄位: 人員相關資料:姓名(索引)、身份證、工作單位、職稱 計畫相關資料:計畫名稱(索引)、計畫編號、會計編號 但是如果要在 Excel 先做好每一條的資料,再用合併列印功能輸出到 Word 上好像沒有這麼直觀。 找到 Word 開發者模式可以在文件中插入互動元件,例如:下拉式選單與勾選框,會讓 Word 用起來像網頁介面一樣。 這邊發現 Mac 的 office 功能比較少 ,Windows 的功能更齊全一點。 要用到互動式元件就得用 VB 寫巨集,這裡就拿出 ChatGPT 幫忙生成。 開發: 一開始小功能能夠產生出合適的程式碼,不過一開始是沒辦法執行的,後來問問 google 得知是中文編碼 Big5 問題。 ...
減重心得
兩年健身房 + 將近一年的飲食控制 115 – 86 = 29 kg -  -  -  -  先說結論 三分練、七分吃 一定要算熱量才會瘦 吃原型食物 + 提高蛋白質比例就可以吃很多 注意不要讓血糖波動太大就不會餓 循序漸進才能夠持之以恆 減肥的動機 疫情關在房間覺得再不動可能會肥到出事,晚上睡覺都會心悸身體很差 搬來台北後就馬上找離家最近的健身房報名 後來大學同學因病過世,再一次體悟到這個年紀已經不是無敵了 重訓 重訓因為以前有底子,所以算是複習為主,最主要還是有個教練約課才不會忙了就斷了運動習慣。後來一方面已經回復記憶能夠自己練,另一方面運動目標以格鬥為主,反而不需要這麼多肌肉,所以就停掉重訓課了。 拳擊 很幸運的遇到了當時也是菜鳥的拳擊教練 Roger,打開了我對格鬥的興趣。拳擊真的是很適合新手的運動,如果不移動只打手靶的話強度可以到非常低,但真的認真起來強度也可以突破天際。 跆拳道 --- 後來換了新的教練 Bolly,體能也有一定基礎可以嘗試以腳為重的跆拳道,這也加劇了足底筋膜炎的發生機率,有時候真的痛到沒辦法正常走路,每隔一段時間都需要教練幫忙筋膜放鬆才行。練了跆拳道後整個人的平衡性變得很好,也比以前更加的敏捷。 HIIT 開始參加減重比賽後遇到新的拳擊教練 Kai 開始狂操體能,每次前半堂真的是操到爆炸,但一個月下來自己覺得體能變得很好,爬捷運出口的長樓梯都可以不喘一口氣。 ...
寫文章的新方法
發現用心智圖來編排文章結構是個好東西~這樣階層式列出來可以省很多心力,也可以不用在用字遣詞中鑽牛角尖。 然後這個階層列表可以直接餵進 ChatGPT 生出中文段落,真是太神奇了~~ 應該大部分的心智圖軟體都可以把圖變成階層清單,我是用 Mac 的 MindNode 下面是小測試,主要跟 ChatGPT 說明要把階層清單變成文章段落就行 雖然讀起來有那麼點生澀,只要最後確定文章結構後再來潤稿就好了,或是叫 AI 回去重寫 整個流程變得像在寫程式然後拿去編譯一樣,要把概念抽象化、整理邏輯順序、或是使用架構延伸都變得一目瞭然。而且全部的重點都是自己提供的,所以不會亂編故事
使用 CLion 與 CMake 開發 Fortran
Fortran 作為一個打孔卡時代就存在的古老程式語言,除了學校教的 Vim 或 Notepad 以外,其實可以使用較為現代的 IDE 來減少開發上的阻力,有很多不錯的功能像是一鍵編譯、語法檢查等等。傳統使用指令編譯與 Vim 編輯的方法還是得先了解過,以備不時之需。 CLion 是由 PyCharm 的母公司 JetBrains 所開發的 C/C++ IDE,裝上插件後也可以拿來寫 Fortran。 Generate by Midjourney niji 5在這裡先假設已經灌好 Fortran 跟 CLion 了,如果 Fortran 還沒安裝可以看看這篇:Installing GFortran 第一次安裝好 CLion 後要先灌 Fortran 插件,從歡迎頁面中左邊選單有個 Plugins,到 Marketplace 尋找這個 Fortran 插件。 在創立新 Project 時就有 Fortran executable 可以選 創立好 Project 後,裡面就會發現系統預先建立好的 CMakeLists.txt 模板 CLion 主要就是靠這個 CMakeLists 讓電腦知道要編譯什麼程式碼,將 進入 Vim > 改程式 > 存檔退出 Vim > 指令編譯 > 執行 這繁瑣的步驟變成一鍵完成。 前面三行是系統產生的模板,注意 Fortran 關鍵字不能刪掉,系統才會知道要用 Fortran 編譯器。 ...
如何解決 PyCharm Pro 2023.2 執行遠端主機中容器內的 Python 找不到檔案的問題?
一般在使用 Docker 容器開發程式的時候,大部分是在自己的電腦上透過 Docker Desktop 產生 Container,但是如果手上只有弱弱的筆電,沒辦法跑那種很吃效能的程式,那就只能在 Server 上直接用 Docker 開發程式。 Generate by Midjourney niji 5照著 PyCharm 的 UI 引導設定 New Interpreter > Docker 的時候, SSH 遠端主機的 Docker Container 會有路徑映射的問題: 這其實要分成三個問題解釋: 筆電的 code 要上傳到遠端主機上的哪裡? -> SFTP 上傳的檔案怎麼放進容器? -> Mount Volume 容器內的 Python 怎麼知道執行路徑? -> Path Mapping - - - - - - 筆電的 code 要上傳到遠端主機的哪裡? -> SFTP Settings > Deployment > SFTP 建立檔案上傳 Connect 分頁選擇要連接 SSH 的主機,如果沒有適合的選項按右邊 ⋯ 建立 在 Mappings 分頁的 Deployment path 選擇主機上的上傳路徑 ...