文章

顯示包含「技巧」標籤的文章

[技巧] 用 VSCode 把 OneNote 快速轉換到 Markdown + 包含程式碼

圖片
工作上的筆記總是寫在 OneNote,但如果想要貼部分資訊到 GitHub/GitLab 中,單純用複製貼上整個格式就會跑掉,還要手動一個一個調整滿麻煩的。有沒有什麼快速的方法來把 OneNote 轉換到 Marrkdown 格式呢? 範例 OneNote 文件 由於 OneNote 中我常常用 tables 來把 code 片段包起來,所以很常筆記會變成下面這樣: Pandoc 工具 網路上常見的解法背後其實常常用了 Pandoc 這個工具,如果我們按照這個 教學方法 把上面的 OneNote 文件轉換成 Word 再轉成 Markdown 會變成這樣: 我們會發現 tables 與程式碼的 indents 整個都跑掉了,就不是我預期的。 而且還要先匯出成 Word,再開 PowerShell 輸入指令,如果頻繁的做這件事就會覺得很累,尤其是還在修改部分細節的時候。 VSCode + Replace Rules 插件 如果我們直接複製 OneNote 的文字,在 VSCode 貼上,會發現他會貼上這樣的格式: 除了文字前面的小圖示,我們會發現他的 indents 終於有保留下來。所以我一開始都是手動用 Ctrl+D 或 Ctrl+Shift+L 把 tabs + 小圖示選起來再改成 Markdown 的格式。Tables 比較麻煩要手動在前後加上 ``` 這個動作做久了之後我就想到,這個動作其實和 find regex & replace 在做的事其實差不多,為何我不用 regex 來自動做到呢? 如果我們去裝 Replace Rules 這個插件,並且在 settings.json 中加上一些設定 (在文章的最後)。 之後,先在最下方空兩行 (為了讓 table bottom regex 可以正常運作),我們就可以在 VSCode 中按 Ctrl+Shift+P 然後輸入 Run Ruleset -> Ruleset: OneNote plaintext to markdown,剛剛貼過來的 OneNote 文件就會變成下方這樣: 我們再手動把 Title/Subtitle 加上 # 與 ##,把結果貼到 GitHub 的 editor 上,預覽就會正確地把 code block 顯示出來: 再也不用手動慢慢轉換啦。 筆記格式的限制 這個方法看...

[Qt] PySide 如何 debug 沒有 stack trace 的 Segmentation Fault

圖片
雖然 PySide 是 open source 也很好用,但如果我們用 PySide 寫了一些有 bug 的程式,GUI 在做了某個操作後就會無預警 crash 消失不見,只留下哀傷的一行訊息在 console 上: Segmentation fault 現在是要怎麼 debug?  最近我就想用 QTableView + QAbstractItemModel 做一個可以動態新增資料的 table,但是以下的程式碼跑起來就會遇到 segmentation fault (完整的程式碼在文章最下面): from typing import Any, List import sys from PySide2 import QtCore, QtWidgets class DataModel(QtCore.QAbstractItemModel): ... class MainDialog(QtWidgets.QDialog): ... if __name__ == "__main__": ... 看了一下我也不知道問題在哪,我也不太曉得 QAbstractItemModel 哪幾個 functions 是一定要 override 的,現在該怎辦? 解法1: 暫時切換成 PyQt 當我們把一開始的 import 全部換成: from PyQt5 import QtCore, QtWidgets 再跑一次程式,這時候 GUI 不僅不會 crash,console 上還會多一行完整的訊息: NotImplementedError: QAbstractItemModel.index() is abstract and must be overridden Oh 原來我忘記要 override "index" function 了。 解法2: 用 gdb 來 debug 如果遇到提示還不夠明顯的狀況,我們可以用 gdb 來 debug。 等等! gdb 不是給 C++ 用的嗎? 和 Python 有什麼關係? 原來 PySide (Qt for Python) 只是像是用 Python 的殼把 Qt C++ 的程式碼包起來,詳細的運作原理可以參考  Qt for Python/Shibok...

[技巧] 同硬碟不同OS動態切換 Rustup/Cargo 路徑

問題 Linux 上不管切換到 x86 還是 Arm 工作上都是用同一個 mount 到的路徑,所以 $HOME 其實資料都一樣。 但如果我在 x86 上安裝 Rustup 和 Cargo 到預設的路徑 ~/.rustup 和 ~/.cargo,假設我安裝了 exa ,切換到 Arm 上後就會跳出下面這樣的錯誤訊息: -bash: /xxx/.cargo/bin/exa: cannot execute binary file 原因 因為 Cargo 的 packages 當初是在 x86 上編譯的,當然就沒辦法在 Arm 平台上執行。 解決方式 第一個直覺想法就是,有沒有辦法在 x86 與 Arm 上都安裝同一個 package,只是安裝在不同路徑。查了一下網路就看到如何 客製化 Rustup/Cargo 安裝在自訂的路徑 : Rustup: 執行 rustup-init 前設定 RUSTUP_HOME Cargo: 執行 rustup-init 前設定 CARGO_HOME 利用這樣的環境變數,我們就可以寫一些 Bash scripts 來達到多個 OS 上的安裝和動態切換。 Bash Script: 安裝 Rustup 在不同的 OS 上 例如我們在 x86 上安裝就可以這樣寫: #!/bin/bash export RUSTUP_HOME="$HOME/x86_64/rustup" export CARGO_HOME="$HOME/x86_64/cargo" cd "$RUSTUP_HOME" # Download rustup script curl https://sh.rustup.rs -sSf >rustup.sh # Install rustup bash rustup.sh -y --no-modify-path 在 Arm 上安裝就換一下 RUSTUP_HOME 和 CARGO_HOME 路徑就好: #!/bin/bash export RUSTUP_HOME="$HOME/arm64/rustup" export CARGO_HOME="$HOME/arm64/cargo" cd "$RUSTUP_H...

[Game] 如何安裝 S.T.A.L.K.E.R. Anomaly 插件,以及解決插件導致的 Crash

圖片
看 Reddit 裡面這麼多人 po 一些 Anomaly 的遊戲影片,突然就想玩,不過這插件真是多到可怕。 安裝 STALKER Anomaly 這步驟應該不會有什麼問題,就去 Anomaly 官網 下載,然後安裝就好了。 要安裝哪些插件 (Addons/Mods)? 這才是最困難的步驟吧,去看 Addons 有哪些赫然發現竟然有將近 1500 個 mods,我到底要選哪一個? 有沒有什麼推薦的安裝列表呢? 後來就在 reddit r/stalker 右邊側欄看到有一個人 Grok 有整理一份不錯的 Google Sheet 表單 : 打開來看雖然也是密密麻麻的看起來很恐怖,但是他其實有放上推薦度和這些插件是做什麼的,還有插件之間的衝突要如何依序解決: 我就把一些 Mandatory 和 Highly recommended 的插件裝來玩玩看。 當然你也可以自己仔細研究,或是參考別人的清單 (例如隨便 Google 一下就找到 Lazy Stalker 的推薦插件清單 )。 如何安裝插件 通常插件都是裝在壓縮檔 zip/7z/rar,打開來至少會看到 gamedata 資料夾,那你就可以複製貼上到遊戲的目錄覆蓋。 但是許多插件本身是會互相衝突,或是部分衝突的。 這樣蓋來蓋去根據以前玩可以客製化的 CS1.6 的經驗來說,走到某一個地步你的遊戲就會開始 crash、發現有材質壞掉、甚至不知道到底是裝了哪個插件造成的,也沒辦法還原。 重頭來過? 或是提心吊膽的一直把整包遊戲壓縮怕哪天突然壞掉,我們應該有更好的做法。 用 Mod Organizer 2 忘記是在哪看到的了,但好像有人推薦用這個來管理插件,所以我就來試用看看。 安裝步驟其實滿繁瑣的,所以我也不會寫整個文章就用完所有力氣只是在教你如何安裝,因為大部分的資源都是英文的,所以我也期待你應該至少看得懂一些英文。 大致上的安裝步驟如下: 先去 Mod Organizer 2 官網 看一下 裡面有 GitHub 連結,去 GitHub 找 "Mod.Organizer-x.x.x.exe" 或 .7z 下載 打開 Mod Organizer 2 創新的 Instance, 一個 Instance 通常就搭配一款遊戲 (他不只能用在 Stalker,還可以用在 Fallout, Skyrim 上...

[技巧] 簡單地讓 Google Analytics 排除 iOS/Android 瀏覽器上自己的流量

圖片
如果在電腦上用 插件 應該是最方便的做法,可是手機上怎麼辦? 如果我用手機上的 Safari 瀏覽我自己部落格的網站,Analytics 裡面就會出現。 想要簡單的 Filter 查了網路有 很多做法 都不太行: 用 IP,可是手機如果用 3G/4G/5G IP 位址就不固定,我可不想一直開 Analytics 調整設定 設定特殊的 cookies,可是我或許只是想用在部落格,拜託不要那麼複雜 在自己的網頁先做一次 filter,但我是部落格,我不是在寫網頁 所以我上網到處 Google,先看看別人都怎麼做的,算是有點被 這篇文章 給啟發,裡面有一個地方用 query parameter 來做 filter: ?internal=true 那我就想到一個超簡單的作法,因為我通常只是想要測試一篇文章在手機滑起來感覺如何而已,那我可以這樣做: 在手機上瀏覽自己的部落格文章前先加上  ?internal=true 去 Analytics 把含有  ?internal=true  的網址排除掉 Analytics 操作 我們打開 Analytics,去到設定頁面內找 Filter (篩選器),加上一條規則: Filter type (篩選器類型): Custom (自訂) Exclude (排除) Filter Field (篩選器欄位): Request URI (要求 URI) Filter Pattern (篩選器模式): ^.*[?&]internal=true.*$ Case Sensitive (區分大小寫): 這要不要勾選應該都可以,嚴格一點就勾起來 我的介面是英文的,不過中文的介面應該也差不多。 如果你是用 account (帳戶) 下的篩選器,別忘記要套用到 views (資料檢視),我一開始忘記套用還以為打錯 pattern: 測試有沒有排除 我就隨便找一篇我部落格文章的網址: https://shawnchang420.blogspot.com/2021/04/ynab-toolkit-for-ynab.html 加上  ?internal=true  之後變成: https://shawnchang420.blogspot.com/2021/04/ynab-toolkit-f...

[技巧] 用 VSCode Terminal 連到遠端 Linux 但是有些組合鍵按不了?

圖片
如果你想用 VSCode Terminal 取代傳統用 PuTTY, MobaXterm 等 SSH 工具,第一個會遇到的障礙就是像是 Ctrl + K , Ctrl + E , Ctrl + V 有些組合鍵都沒辦法用。 "不能用"的原因可能有幾個: VSCode 傳送的 ASCII code 和 PuTTY 傳送的 ASCII code 不一樣 VSCode 的組合鍵被 VSCode 上面的東西給搶先攔截了 (像是 Ctrl + E 會開啟 Go to file... 功能) 再來也有可能不是 VSCode 的問題,是 stty 或 SSH 端的程式沒設置好 按鍵傳送的 ASCII Code 和想像的不一樣 像是我們開 PuTTY 的設定 Terminal -> Keyboard 就會發現裡面有設置像是 Backspace 按下去應該會送出什麼 ASCII code: 預設是送出 127 ( ^?, 0x7f ),但是有可能會出於各種因素設置到 Control-H (也就是 Ctrl + H, ^H, 8, 0x8 )。但 VSCode 預設設定是右邊的。所以如果你習慣的設定剛好就和 VSCode 預設不一樣的話就會發現 VSCode terminal 中 backspace 按下去怎麼不是刪除文字而是會冒出一些怪怪的符號、或是一些不該有的行為。 按鍵被 VSCode 搶先攔截 就算你在 VSCode terminal 按 Ctrl + E,VSCode Go to file... 的功能就會搶先跳出來,terminal 根本沒有機會知道你按了什麼: 其他還有很多按鍵通通會觸發 VSCode 的功能。 別讓 VSCode 攔截按鍵 你可以在 settings.json  裡面用 " terminal.integrated.commandsToSkipShell " 來關閉哪些 VSCode commands 不要使用,記得在前面加上一個 "-" 字元,它自然就會把按鍵乖乖傳給 shell: { "terminal.integrated.commandsToSkipShell": [ "-editor.action.toggleTabFocus...

此網誌的熱門文章

[試算表] 追蹤台股 Google Spreadsheet (未實現損益/已實現損益)

互動式教學神經網路反向傳播 Interactive Computational Graph

[Side Project] Google Apps Script 實作 Google Sheet 抽股票的篩選工具