ubuntu 24.04 default 的輸入管理器是 iBus.
但是iBus在新酷音有點問題,就是不能記住目前的 input mode (Eng/Chinese),以 Excel 來說,換 cell 輸入法就被 reset 成中文。
fctix5 就沒這個問題。
選 fctix5 然後 apt install fcitix5-chewing 之後,在應用城市會出現企鵝的程式 fctix5-config,右邊那邊選 Chewing 按兩下就可以了。
High Altitude Oolong
2025/9/20
2025/9/14
claude code router
claude-code 的 api 不是和其他人一樣的 openai (?) 的方式,所以就有人做了一個 gateway,把 anthropic 呼叫轉為openai 呼叫,同時把回應也改成 anthropic api 回應。
當然,這是用 reverse engineering 做的。
claude code router 也是用 npm 安裝。
安裝完後就是setup,他有提供一個 ui 界面,方便設定。
安裝完用:
以 openrouter 為例,就選新增 provider - openrouter,然後到openrouter 選一些 (free) 或是 $0/M token 的 model。
在 model 的 democode 中會有 model 的名子。
舉例來說: 他的code 就有:
一個 provider 可以add 一堆 model.
oprouter 需要一個 api_key,所以去settings--API keys 產生一個 key,把 key copy 到剛剛 claude code router 的 UI 的 openrouter 項目。
UI 設定好像這樣就可以了。
之後 'save'
就會在home 之下create ./claude-code-router/config.json
然後就可以用
用 stats 看,可以看到 model 還是 anthropic sonnet,
所以要用 command 來改:
This is my config.json (API_KEY marked)
有關openrouter的 model,不是所有model 都 support claude-code-router,需要support tool 的才行: 所以可以follow 說明,在list model 時加上 filter: tool
另外光support tool 好像也不能完全 support claude code router,像mistral 的 model,雖然 support,但是一對tool command 他不認識。
要注意的是,ccr server 啟動之後,修改 config.json 不會生效。
要restart ccr server 才會重新 load config.json
當然,這是用 reverse engineering 做的。
claude code router 也是用 npm 安裝。
安裝完後就是setup,他有提供一個 ui 界面,方便設定。
安裝完用:
ccr ui就會開啟 browser,顯示設定頁面。
以 openrouter 為例,就選新增 provider - openrouter,然後到openrouter 選一些 (free) 或是 $0/M token 的 model。
在 model 的 democode 中會有 model 的名子。
舉例來說: 他的code 就有:
model="z-ai/glm-4.5-air:free"就是他的model name,填入 provider的 add model.
一個 provider 可以add 一堆 model.
oprouter 需要一個 api_key,所以去settings--API keys 產生一個 key,把 key copy 到剛剛 claude code router 的 UI 的 openrouter 項目。
UI 設定好像這樣就可以了。
之後 'save'
就會在home 之下create ./claude-code-router/config.json
然後就可以用
ccr code啟動 claude-code
用 stats 看,可以看到 model 還是 anthropic sonnet,
所以要用 command 來改:
/model openrouter, a-ai/glm-4.5-air:free就可以改成 openrouter 的 glm-4.5-air model
This is my config.json (API_KEY marked)
$ cat .claude-code-router/config.json { "LOG": true, "LOG_LEVEL": "debug", "CLAUDE_PATH": "", "HOST": "127.0.0.1", "PORT": 3456, "APIKEY": "123", "API_TIMEOUT_MS": "600000", "PROXY_URL": "", "transformers": [], "Providers": [ { "name": "openrouter", "api_base_url": "https://openrouter.ai/api/v1/chat/completions", "api_key": "sk-or-v1", "models": [ "nvidia/nemotron-nano-9b-v2:free", "openrouter/sonoma-sky-alpha", "deepseek/deepseek-chat-v3.1:free", "z-ai/glm-4.5-air:free", "qwen/qwen3-coder:free", "moonshotai/kimi-k2:free" ], "transformer": { "use": [ "openrouter" ] } } ], "StatusLine": { "enabled": false, "currentStyle": "default", "default": { "modules": [] }, "powerline": { "modules": [] } }, "Router": { "default": "openrouter,openrouter/sonoma-sky-alpha", "background": "", "think": "", "longContext": "", "longContextThreshold": 60000, "webSearch": "", "image": "" }, "CUSTOM_ROUTER_PATH": "" }
有關openrouter的 model,不是所有model 都 support claude-code-router,需要support tool 的才行: 所以可以follow 說明,在list model 時加上 filter: tool
另外光support tool 好像也不能完全 support claude code router,像mistral 的 model,雖然 support,但是一對tool command 他不認識。
要注意的是,ccr server 啟動之後,修改 config.json 不會生效。
要restart ccr server 才會重新 load config.json
2025/9/2
mediawiki 升級
到 special page (特殊頁面) 去,然後把網址的 : 後面改 "Version" 就會出現版本頁面,例如
把原 server 的文章,user account 倒出來
clone 下面的 github project.
version 1.44
恭喜!
您已經成功安裝MediaWiki。
安裝程式已自動產生LocalSettings.php檔案, 該檔案中包含了您所有的設定項目。
您需要下載該檔案,並將其放置在您 wiki 的根目錄(index.php 所在的目錄)中,下載應已自動開始。
- http://192.168.145.166:9090/index.php/Special:Version
- MediaWiki: 1.25.2
- PHP: 5.3.3
- MySQL:5.1.73
- Image Map
- WikiEditor: 0.4.0
gallery,imagemap,indicator,nowiki 和 pre
把原 server 的文章,user account 倒出來
mysqldump -u wikiusername -p wikipassword > wikidb.sql把upload 的 image 倒出來
tar -zcvf wikiimage.tar.gz /path/to/mediawiki/imagepath這個path 在 LocalSetting.php 中的變數定義
$wgUploadDirectory=/var/lib/www/mediawiki/
clone 下面的 github project.
設定新 MediaWiki 的簡單步驟
以下是設定新 MediaWiki 的簡單步驟,使用這個專案的說明。請先確認你的電腦已經安裝 Docker 和 Docker Compose。
準備工作
- 複製環境設定檔案:
cp .env.example .env
- 編輯
.env
檔案,設定必要的參數:MW_ADMIN_PASS
:管理員密碼(預設changeme123!
,請改掉!)MW_SITE_SERVER
:網站伺服器地址(如果不是http://localhost:9090
,請修改)- 其他設定如
MW_SITE_NAME
、MW_LANG
等,可視需要調整
啟動步驟
- 建置並啟動容器:
docker compose up -d --build
這會自動下載並安裝 MediaWiki 1.41,包含常用擴充套件(如語意媒體wiki、視覺編輯器等)。
- 開啟瀏覽器,前往
http://localhost:9090
查看你的 wiki 網站。 - 使用管理員帳號登入:
- 帳號:
Admin
- 密碼:你在
.env
中設定的MW_ADMIN_PASS
- 帳號:
從現有的 MediaWiki 恢復資料
如果你有一個現有的 MediaWiki 網站,想要將其資料庫和圖片檔案恢復到這個 Docker 環境中,可以按照以下步驟操作:
1. 匯出現有資料
- 匯出資料庫:
mysqldump -u [使用者名稱] -p[密碼] [資料庫名稱] > wikidb.sql
- 打包圖片檔案:
cd /path/to/old/mediawiki tar -czf images.tar.gz images/
或者使用 zip:
zip -r images.zip images/
2. 放置檔案
- 將匯出的
wikidb.sql
檔案放到此專案的./data
資料夾中 - 將打包的圖片檔案(
images.tar.gz
或images.zip
)也放到./data
資料夾中
3. 設定環境變數
- 編輯
.env
檔案,新增或修改以下設定:MW_RESTORE_ON_INIT=1 MW_RESTORE_DB_DUMP=/data/wikidb.sql MW_RESTORE_UPLOADS_ARCHIVE=/data/images.zip
如果資料庫已經有資料表且需要覆蓋,請額外添加:
MW_FORCE_DB_RESTORE=1
4. 啟動容器
docker compose up -d --build
容器啟動時會自動執行恢復程序,將資料庫和圖片檔案匯入到新的環境中。
注意事項
- 第一次啟動時,系統會自動安裝 MediaWiki,即使有舊的
LocalSettings.php
但資料庫是空的,也會重新安裝並啟用擴充套件。 - 如果需要語意媒體wiki(SMW)的設定,請在登入後檢查並執行維護指令(參見 README 的 Maintenance 部分)。
- 所有資料(資料庫、圖片上傳)會儲存在 Docker 磁碟區中,網站設定檔案會存放在
./data/LocalSettings.php
。 - 如果圖片檔案是使用非 UTF-8 編碼(如繁體中文的 cp950),請在
.env
中設定:MW_ZIP_ENCODING=cp950
如果遇到問題,請檢查 Docker 記錄:docker compose logs -f mediawiki
。
version 1.44
恭喜!
您已經成功安裝MediaWiki。
安裝程式已自動產生LocalSettings.php檔案, 該檔案中包含了您所有的設定項目。
您需要下載該檔案,並將其放置在您 wiki 的根目錄(index.php 所在的目錄)中,下載應已自動開始。
2025/8/21
codex-cli
codex 安裝就跟 claude-code, gemini-cli 依樣,用 npm
codex提供更簡單的方法: 就是把 auth 過的機器上的 ~/.codex/auth.json copy 到要 auth 的機器上就可以了。
和 claude-code 的比較:
codex-cli 目前快速改版中,應該會越來越好。
codex-cli 無法搜尋的解法,就是請它給一個prompt,讓我訊問 chatgpt,之後再把reply 貼回 codex-cli
gemini-cli 也有搜尋能力,是用 mcp:websearch 作到,所以能在無網路存取能力下作到 search internet.
本來以為不會遇到的:
25/08/27
0.24.0 更新,果然增加 websearch 功能了,thinking 的內容也不輸出了。
npmm i -g @openai/codexauthentication 依樣會開browser,但是在 headless server (console only)就不能用以前gemini-cli 的方法。
codex提供更簡單的方法: 就是把 auth 過的機器上的 ~/.codex/auth.json copy 到要 auth 的機器上就可以了。
和 claude-code 的比較:
- codex-cli 有明顯的"thinking"時間,以default model: gpt5-medium 來說,隨便一個簡單小命令都會花 30sec以上的thinking 時間,改用gpt-5 low 也要10sec以上,claude-code大部分回應都很快,幾乎是立即,少數會等待5,6 sec。
- utility script: 以產生某工作的 script 來看(舉例來說:生成一個在 ubuntu 24.04 server 安裝 docker service 和 nvidia-container-toolkit),claude-code 的 script 比較接近真人寫的,比較容易了解,codex-cli 的 script 比較複雜,比較難了解。雖然script 達成的結果一樣
- 解決問題/bug時,claude-code解決bug後會自動全面展開,找還有沒有類似的bug沒修正,codex-cli 則是遇到一個改一個。
- claude-code 有搜尋網路的能力,需要的時候,claude-code 會自動搜尋需要的api 文件,codex-cli 不行,他說因為安全問題,它沒有access internet 的權限,其實這是用mcp agent來達成,不是權限問題。
- 對於Android 系統和 application 的知識,還是 gemini-cli 最高,codex-cli 反覆debug 的問題,gemini-cli 馬上就找到問題點。
codex-cli 目前快速改版中,應該會越來越好。
codex-cli 無法搜尋的解法,就是請它給一個prompt,讓我訊問 chatgpt,之後再把reply 貼回 codex-cli
gemini-cli 也有搜尋能力,是用 mcp:websearch 作到,所以能在無網路存取能力下作到 search internet.
本來以為不會遇到的:
🖐 You've hit your usage limit. Upgrade to Pro (https://openai.com/chatgpt/pricing), or wait for limits to reset (every 5h and every week.).
25/08/27
0.24.0 更新,果然增加 websearch 功能了,thinking 的內容也不輸出了。
2025/7/22
$ python3 development/vndk/tools/header-checker/utils/create_reference_dumps.py -l libcrypto .... error: external/crosvm/rutabaga_gfx/Android.bp:59:1: "rutabaga_gfx_test_src_lib" depends on undefined module "libgfxstream_backend". Or did you mean ["libfastdeploy_host" "libtistress-defaults" "slab_test_tests_slab" "zlib_deflate_fuzzer" "zlib_fuzz_defaults" "zlib_inflate_fuzzer"]? error: external/crosvm/rutabaga_gfx/Android.bp:13:1: "librutabaga_gfx" depends on undefined module "libgfxstream_backend". Or did you mean ["libfastdeploy_host" "libtistress-defaults" "slab_test_tests_slab" "zlib_deflate_fuzzer" "zlib_fuzz_defaults" "zlib_inflate_fuzzer"]? ..要加上 -product
python3 development/vndk/tools/header-checker/utils/create_reference_dumps.py -l libcrypto -product rk3576_u
2025/7/7
TP-LINK TL-WN725N, RTL8188EU , on ubuntu 24.04
是 ubuntu-24.04-preinstalled-server-arm64-orangepi-5-plus...
dmesg
然後 ip link 就可以看到 wlxe894f60b34f5
然後開始
dmesg
[ 954.209502] usb 4-1: new high-speed USB device number 4 using ehci-platform [ 954.355029] usb 4-1: New USB device found, idVendor=0bda, idProduct=8179, bcdDevice= 0.00 [ 954.355048] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 954.355058] usb 4-1: Product: 802.11n NIC [ 954.355067] usb 4-1: Manufacturer: Realtek [ 954.355075] usb 4-1: SerialNumber: 00E04C0001 [ 954.499151] usb 4-1: RTL8188EU rev D (TSMC) romver 0, 1T1R, TX queues 2, WiFi=1, BT=0, GPS=0, HI PA=0 [ 954.499173] usb 4-1: RTL8188EU MAC: e8:94:f6:0b:34:f5 [ 954.499184] usb 4-1: rtl8xxxu: Loading firmware rtlwifi/rtl8188eufw.bin [ 954.499387] usb 4-1: Firmware revision 11.1 (signature 0x88e1) [ 955.112461] rtl8xxxu 4-1:1.0 wlxe894f60b34f5: renamed from wlan0原來 loading firmware failed,所以
apt install firmware-realtek他說是 virtual package,選一個 armbian-firmware,install 玩重新插拔 wifi usb.dmesg 就完成了。
然後 ip link 就可以看到 wlxe894f60b34f5
然後開始
harles-chang@orangepi5-plus:~$ nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL> 54:78:C9:D4:03:EE 123456789012 Infra 1 65 Mbit/s 100 > ..然後就可以連線了:
sudo nmcli device wifi connect "ssid" password "thepassword"
2025/7/2
gemini cli, ssh 通過auth
ref:
使用 gemini-cli 要先通過google account 認證。auth 的時候會開啟 browser。
但是在 ssh remote 就沒辦法開啟。
所以可以用上面 ref 的方法。
但是第一步browser 開啟的url 可以直接用 "gemini --debug" 模式啟動 gemini,就會在auth 的時候把 url 印出來。
copy 出來用 browser 打開,login google account, sign in 後,browser 會被重導到一格localhost 的位址,把這個位址 copy 下來。
用 ref 的方法,到 ssh remote 去用 curl 打開就可以。
做上面的事情的時候,gemini 都不能關掉,一職到 gemini 由 waiting 變成 authorize 後才可以關掉。
25/7/16 update
果然 cli 然後要人家開browser未免太無...
所以 0.1.11 版之後,支援no browser
但是在 ssh remote 就沒辦法開啟。
所以可以用上面 ref 的方法。
但是第一步browser 開啟的url 可以直接用 "gemini --debug" 模式啟動 gemini,就會在auth 的時候把 url 印出來。
copy 出來用 browser 打開,login google account, sign in 後,browser 會被重導到一格localhost 的位址,把這個位址 copy 下來。
用 ref 的方法,到 ssh remote 去用 curl 打開就可以。
做上面的事情的時候,gemini 都不能關掉,一職到 gemini 由 waiting 變成 authorize 後才可以關掉。
25/7/16 update
果然 cli 然後要人家開browser未免太無...
所以 0.1.11 版之後,支援no browser
NO_PROWSER=true gemini這樣啟動後,就會出現一個 url,要你用 browser 去 login,login 玩會顯示一個 code,把她貼回來。
訂閱:
文章 (Atom)