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 也可以,把指令貼進去就會自己安裝,成功的話下面就會出現已連線。 一個通道建議只綁定一個主機,要多台主機看是要用內網連線,或是用多個通道單獨連線。...
原始碼的價值
影片提到軟體開發過程中,真正有價值的東西是設計的邏輯。技術日新月異,需求也一直在變,所以原始碼很快就會過時。就算其他人用非法的手段拿到原始碼,也很難馬上修改,原始碼越龐大,就要花越多時間理解原始碼的運作邏輯,對於競爭對手來說可能重寫還比較快。總體來說,原始碼本身其實沒有想像中這麼有價值。 (影片是這麼說,不過我個人覺得競爭對手拿到原始碼,是可以逆向工程出很多知識的。我想影片作者真正想表達的是從原本的開發團隊來看,原始碼可以視為負債而不是資產,真正的資產是下面所提到的邏輯。) 這個影片的重點是 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 開始狂操體能,每次前半堂真的是操到爆炸,但一個月下來自己覺得體能變得很好,爬捷運出口的長樓梯都可以不喘一口氣。 筋膜 -- 因為格鬥類運動訓練強度很高,所以都要靠筋膜放鬆才能緩解小腿疼痛,真的很感謝 Tony 教練每次都很認真的幫我把小腿筋壓開。按了痛一天,不按開走路痛一個禮拜。沒有筋膜放鬆來加速恢復,真的不知道怎麼面對下次的訓練。 飲食 上面講了這麼多運動,但真正減重的關鍵是嚴格的控制飲食。我第一年運動的時候完全沒在算熱量,所以體重沒有低於 105kg 過。會開始控制飲食,一方面是我媽迷上了 168、211、地中海飲食這類的減重方法,開始給我帶便當,另一方面是練格鬥體重太重耐力很差且移動非常緩慢,所以整體體重需要大幅下降,連過多的肌肉量都要減少才行。 飲食一開始不要一次就全換,心理跟生理壓力都會太大,要循序漸進的換才能夠變成習慣。本身因為痛風關係就不喝含糖飲料,所以只要戒零食跟垃圾食物就簡單很多。一開始只是一餐改吃自己帶的 211 便當,後來早餐不吃發現也可以,漸漸的變成午餐只喝牛奶 + 晚餐吃 211。 假性飢餓 有時候想吃零食就只是無聊想做點事,所以後來全部改成泡茶包跟咖啡,也就完全戒掉零食了。 大量喝水也是非常重要,因為糖跟鹽滲透壓高的關係,都會讓血液中的水分上升,所以多喝水把血液沖淡不水腫,也可以加速食物消化與代謝。 熱量缺口 上面講到要算熱量,畢竟要長期維持某個體重就是要吃進對應的熱量才行,只要熱量減少了,體重自然就會下降,至於是減脂肪還是掉肌肉就要看涉入的營養素組成與運動多寡。 目前發現 Cofit 這個 app 可以幫忙記錄飲食跟算熱量,簡單拍個照加上用份數來估算熱量還算有效,因為自己估計一定會有誤差,我都會抓超過基礎代謝就好,不會真的吃到他所建議的熱量,這樣每個禮拜會瘦 1% 的體重。...
寫文章的新方法
發現用心智圖來編排文章結構是個好東西~這樣階層式列出來可以省很多心力,也可以不用在用字遣詞中鑽牛角尖。 然後這個階層列表可以直接餵進 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 選擇主機上的上傳路徑...
ADHD 生產力指南
看了一個 ADHD 生產力指南的影片,覺得蠻有共鳴的,來分享一下內容 一般生產力指南強調 – 重要性 – 後果 – 獎勵 但是 ADHD 的腦袋跟一般人就是不一樣! 一般生產力指南的問題是: – ADHD 的驅動力不是與獎勵掛鉤的 – 生產力工具本身太 Fancy 了,注意力很容易被綁架 – 事情看起來太多反而完全沒有動力,只會焦慮到爆炸 “先做最難的事” 為什麼沒效? ADHD 只會盯著那件事沒辦法開始,覺得自己怎麼都不開始感到愧疚,而且這些方法對其他人好像都很管用,連這點都做不到是不是自己有什麼問題,但時間就這樣焦慮過去,明天又是一樣的情形。 “把大的問題分割成小問題” 為什麼沒效? 切完的步驟太多了,感覺要做很久就不想開始,結果要嘛焦慮一整天,要嘛飄去看看其他事情,最後什麼都沒做。 長期使用這些一般生產力指南會造成很多問題: – 自我懷疑 – 規劃很好卻沒辦法照做 – 太多其他更有趣的事情 那 ADHD 怎麼規劃工作?用這4C! – Captivate 有趣 – Create 有創造性 – Compete 有挑戰性 – Complete 有急迫性 將自己開始動起來後事情就好辦: – 先做最難的事 > 不是先做最難的事,而是先做有趣的事 – 把大問題變成小問題 > 不用把問題完全細分,只要先列出開始的步驟就好 這裡有些給 ADHD 的建議: – 知道生產力工具只會維持一段時間的新鮮感,沒辦法持之以恆不用覺得愧疚 – 用番茄鐘製造人工死線,製造緊張感 – 先不要做大任務的首要項目,先做其中看起來有趣的...
生成式 AI 工作坊心得
如何開始使用AIGC ? AIGC 是通用型的模型,所以必須先下指示(prompt),才能得到更準確的生成結果。 詠唱的大原則 像生物分類 ”界門綱目科屬種” 由大到小的方式先從類別與主題開始,再根據產生結果新增具體的表現手法與限制。若生成時風格不穩定,可以加入更多同義詞來強化。 模糊的問題可以不用一次到位,先拆解成多個步驟分別產生素材,再互相組合會有更好的效果。 文字詠唱: 類別:求職信、廣告文案、計畫書 主題:訴求、重點、案例 表現:風格、身份、口吻 限制:字數、禁詞 圖片詠唱: 類別: 油畫、雕塑、攝影 主題: 人物、風景、物品 表現: 筆觸、光影、配色 限制: 4K HDR、不要六根手指 AIGC 起飛後要重視什麼技能? 一般大眾往往受到技巧的限制,空有想法無法實現。現在 AIGC 可以用非常低的成本生成結果,所以人文素養會越來越重要。需要了解藝術與文學的發展史才能累積足夠創意與審美,並且需要良好的觀察與分析的能力來歸納出詠唱所需的關鍵字。