2024-09-08

Django 4.2 之後棄用 PostgreSQL 的 CIText 類欄位的因應做法

參考文件

核心做法

  • 在 migrations 的 operations 建立名為 case_insensitive 的 db_collation,參考文件中的 locale 是設定為 “und-u-ks-level2”,我改成 “zh-TW-u-ks-level2”,以後有問題再改回來。
    from django.contrib.postgres.operations import CreateCollation
    
    operations = [
            CreateCollation(
                "case_insensitive",
                provider="icu",
                locale="zh-TW-u-ks-level2",
                deterministic=False,
            ),
            migrations.CreateModel(
    		    name="MyUser",
    		    fields=[
    			     ...
    			     (
                        "email",
                        models.EmailField(
                            db_collation="case_insensitive",
                            max_length=254,
                            unique=True,
                            validators=[
                                django.core.validators.EmailValidator(
                                    message="請輸入有效的E-mail信箱"
                                )
                            ],
                            verbose_name="電子信箱",
                        ),
                    ),
                ...
    		    ]
            )
    ]
    
  • 在 models.py 中需要不分大小寫的欄位,指定 db_collation 為前面建立的 collation,db_collation=”case_insensitive”
    class MyUser(AbstractUser):
    		email = models.EmailField(
    		        _("電子信箱"),
    		        db_collation="case_insensitive",
    		        unique=True,
    		        validators=[EmailValidator(message="請輸入有效的E-mail信箱")],
    		    )
    

遇到的狀況或修正

  • 我的系統在建立使用者後,會透過 signal 建立其他的 model,而建立其他 model 時又需要讀取資料庫中其他 model 的值。所以測試過程使用 setUp() method 先建立需要的 model 的值。
  • 依據第1篇參考文件的說明,我把 language tag 由 und 改成 zh-TW。

2024-01-17

新安裝 Debian 12(Bookworm)之後的調整

2023-03-03

Linux 上用 Solaar 連接羅技的 Unifying 滑鼠或鍵盤

在 Debian Linux 上可以使用 Solaar 來管理羅技的 Unifying 滑鼠或鍵盤,可以透過「管理/軟體」搜尋 Solaar 並安裝,也可以透過指令:「sudo apt install solaar」來安裝。

啟動 Solaar 後按照畫面指示插拔接受器,並與滑鼠或鍵盤配對即可。

配對之後,滑鼠的選項中有個「Scroll Wheel HID++ Scrolling」不要勾,不然中間的滾輪會失效。

2022-12-05

Samsung Tab S7+ DeX 模式透過 ADB 安裝嘸蝦米輸入法

前言


我慣用的是嘸蝦米輸入法,但是 Samsung Tab S7+DeX 模式下只能用三星輸入法,也就是只有注音輸入法,使得原本想拿 Tab S7+ 當輕便筆電用,卻因為不順手的輸入法導致工作效率大減。

就在查詢許多文章摸索著安裝完嘸蝦米並使用一段時間以後,一時不慎把 Termux 刪掉了,因此又回到了只能使用注音輸入法的狀態。想要重新來過卻一直遇到莫明的錯誤,在幾個月之間趁著工作空檔陸陸續續試了幾次未果,直到最近查到 Termux 的 Issues 中關於無法與 ADB Server daemon 取得連結的討論,才如願重新安裝嘸蝦米了。

從討論串中可以看到這是 Samsung 手機與平板特有的問題,其他品牌的手機並不會出現這個錯誤。

操作步驟

  1. 到 Google Play 安裝 GCIN 輸入法:它現在的名字是「TW 中文輸入法 注音/倉頡/大易/行列/語音/英數」,嘸蝦米所需要的 .gtab 檔請自行準備。
  2. 啟用「開發人員選項」並打開「無線偵錯」:原本「開發人員選項」是隱藏起來的,參考三星網站的教學,在「設定>關於手機>軟體資訊」連續點擊版本號碼,直至出現「開發者模式已啓用」 進入開發人員選項後,打開「無線偵錯(wireless debugging)」功能。
  3. 在 Termux 中安裝 ADB:apt update && apt install android-tools
  4. 使用 ADB 透過無線偵錯與平板本身配對並連結
    1. 先連上 Wi-Fi,並開啟「設定」視窗和 Termux 視窗,讓它們各佔螢幕的一半,因為等等要邊看著「設定」視窗裡的資訊,邊在 Termux 中輸入指令。
    2. 點選「無線偵錯」中的「使用配對碼配對裝置」就會跳出配對所需的 IP、PORT 以及配對碼,其中 PORT 是隨機跳動的。

    3. 輸入指令  adb pair IP:PORT 後再輸入配對碼,用來配對平板。
    4. 輸入指令 adb connect IP:PORT,用來連結平板。

  5. 修改預設輸入法為 GCIN
    • 查詢現在的預設輸入法指令是「adb shell settings get secure default_input_method」
    • 查詢所有已安裝的輸入法指令是「adb shell ime list」
    • 更換輸入法的指令是「adb shell ime set "輸入法名稱"」
    • GCIN 輸入法的名稱是:「com.hyperrate.gcinfree/.Gcin」
    • 三星輸入法的名稱是:「com.samsung.android.honeyboard/.service.HoneyBoardService」

錯誤排除


概述

這是專屬於 Samsung 手機或平板的錯誤,當發現以下錯誤訊息時,要改以 fakeroot 設定環境變數,以及執行上述各個 adb 指令。

錯誤訊息

* daemon not running; starting now at tcp:5037
* daemon started successfully
* daemon still not running
error: cannot connect to daemon at tcp:5037: Not a data message

解決方法

  1. 安裝 fakeroot:apt install fakeroot
  2. 設定環境變數:
    • export ADB_SERVER_SOCKET=localfilesystem:/data/data/com.termux/files/adb_socket
    • export ANDROID_NO_USE_FWMARK_CLIENT=1
  3. 執行 adb 指令:
    • fakeroot adb pair <your device wifi address:pairing port>
    • fakeroot adb connect <your device wifi address:wireless debug port>

注意事項與改進想法

  1. 一旦離開再重新進入 DeX 模式就會還原成三星輸入法,因此需要重新配對、連結、更換輸入法。
  2. 可以把指令寫成 shell script,這樣就不用特別記輸入法的路徑名稱。

 參考資料

2022-01-09

[VS Code] 美化(Prettify)整個資料夾中的程式碼

 參考網址:

  1. formatting - How do I format all files in a Visual Studio Code project? - Stack Overflow
  2. Format Files - Visual Studio Marketplace

步驟:
  1. 安裝喜歡的 prettier,常見的有:Prettier - Code formatter,我安裝的是 Prettier Now
  2. 將預設的 formatter 設定為安裝的 Prettier,在 VS Code 的「設定」中搜尋「Editor: Default formatter」再從下拉選單中挑選想用的 prettier 就好。
  3. 安裝 VS Code 的 extension:Format Files
  4. 在 VS Code 中開啟欲美化程式碼的資料夾。
  5. 按快速鍵「Ctrl+Shift+P」並搜尋「Start Format Files: Workspace」。
  6. 開始搜尋所有檔案,並且詢問是否真的要美化它們。

2021-10-03

調整 VirtualBox VDI 檔的大小

VM 的硬碟容量不夠用了,所以需要擴大 VDI 檔的大小。假設原來的大小是 10GB,要擴大成 20GB,先以管理員權限開啟一個命令列字元視窗,輸入以下指令調整:

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" modifyhd "X:\Need2Extended.vdi" resize 20480

參考網址:

修正 mdadm: No arrays found in config file or automatically 錯誤

前言

最近因為 VirtualBox 的 VM 硬碟空間不夠了,調整 VDI 檔容量之後,利用 GParted 將硬碟分區重新調整一下,原本的硬碟分區規畫為:

/dev/sda1    /
/dev/sda5    swap
其中的 swap 是在 logical partition 裡的,但是我後來調整為
/dev/sda1	/
/dev/sda2	swap
也就是移除了 logical partition,新增一個 primary partition 做為 swap。也就是這個動作使得 swap 磁碟分區的 UUID 改變了,於是開機時出現了以下的錯誤訊息:
mdadm: No arrays found in config file or automatically
同時 swap 也不見了(當然!),因為在 /etc/fstab 中記載的 UUID 找不到了。

釐清了錯誤發生原因,解決問題的方法就簡單分成三個步驟:

  1. 找出現有 Partition 的 UUID
  2. 更新 /etc/fstab 中的 UUID
  3. 更新 initramfs 和 GRUB 的設定
列出各 Partition 的 UUID
sudo blkid -o list
輸出的結果是如下很整齊的表格形式

更新 /etc/fstab 中的 UUID

將原本 /etc/fstab 中的 SWAP 磁區 UUID 改成正確的。

更新 initramfs 和 GRUB 的設定
update-initramfs -u
update-grub
完成之後重開機,在開機過程中就沒看到錯誤訊息,swap 也有 mount 上了。


參考網址:

2021-03-13

將 XFCE 改造成 Mac 外觀

 

在 Reddit 的 Linux Mint 板看到一張 screenshot,覺得介面很乾淨,作者說是參考影片 Customize Your Xfce Desktop Look Like MacOS Big Sur 做出來的,但是有改了些許步驟。