2019/04/11

讓 MySQL 預設使用特定的 character set

MySQL 支援多個不同的 character set,像是 latin1、utf8 等等,但是只要在規劃、連線時沒有做好設定,就很容易對應到錯誤的 character set 導致出現亂碼。

自己從 gslinPerconaStudy-Area 那邊整理出一些比較保險的設定方法,可以避免之後在維護時發生錯誤:
[client]
default-character-set = utf8mb4

[mysqld]
default-storage-engine         = InnoDB
character-set-server           = utf8mb4
collation-server               = utf8mb4_unicode_ci
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'


備註:
  • 以上設定檔適用於 MySQL / Percona server 5.7,不同版本有不同的 config keyword
  • 上面的範例為 utf8mb4,可自行調整成自己需要的 character set
  • 就算 MySQL server 有這些設定以後,連線到 MySQL 的程式也需要注意編碼設定,否則還是會發生編碼錯誤

2019/04/09

Garmin fenix 手錶錶帶扣環斷裂的處理

Garmin fenix 3 HR 的手錶,錶帶扣環因為長期使用 (約 2 年) 而斷裂。



查詢後大概知道有幾個處理方式:


這次是透過 email 聯繫 Garmin 客服,先請教報修流程,很意外的 Garmin 客服表示扣環斷裂,可以透過寄信的方式,將零件寄送到住處並自行處理:

錶帶固定扣環我們可以郵局平信的方式免費提供給您,在請您留意郵件。

扣環安裝不需拆下錶帶。
因扣環稍有彈性,在套進去錶帶時,稍微拉撐後,慢慢推入錶帶內即可。

收到扣環後,在將扣環套進錶帶時,會因為最前端的金屬卡榫大小幾乎一致而很難套入,需要稍用力將橡皮扣環拉開。套入後即可正常使用。

2019/02/25

Ubuntu 18.04 網路設定檔異動

在 Ubuntu 14.04 時代,網路介面的設定檔在 /etc/network/interfaces,但在 18.04 以後改用了 netplan 來做網路介面的管理,設定檔也跟著改變。

打開 /etc/network/interfaces 後,你會看到以下的說明:
# ifupdown has been replaced by netplan(5) on this system.  See
# /etc/netplan for current configuration.
# To re-enable ifupdown on this system, you can run:
#    sudo apt install ifupdown

若要修改網路設定檔,大至上要二個步驟:
確認網路介面的 ID (Ubuntu 18.04 的網路介面代號與 14.04 不同)
修改網路設定檔:/etc/netplan/50-cloud-init.yaml


確認網路介面的 ID


舊版的網路卡 ID 會是「eth0」這樣的表示,不過在 Ubuntu 18.04 代號有變動,記得先使用 ifconfig 確認:
$ ifconfig -a
ens33: flags=4163  mtu 1500
        inet 192.168.0.102  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::20c:29ff:fead:d664  prefixlen 64  scopeid 0x20
        ....


修改網路設定檔


Ubuntu 18.04 使用的 netplan 設定檔位於 /etc/netplan/*.yaml,如果是新安裝好的機器,應該可以看到「50-cloud-init.yaml」這個檔案。

開啟檔案後,可以看到以下格式的設定:
network:
    ethernets:
        ens33:
            addresses: []
            dhcp4: true
    version: 2

YAML 的檔案格式可以參考 netplan.io 的說明

假設要改成 static IP,則設定檔的大概會改成以下這個樣子:
network:
    ethernets:
        ens33:
            addresses: [192.168.0.10/24]
            gateway4: 192.168.0.1
            nameservers: 
                addresses: [8.8.8.8, 1.1.1.1]
            dhcp4: false
    version: 2

設定檔修改以後不會立即生效,需要呼叫 netplan 讀取並套用新的設定:
$ sudo netplan apply

2019/02/19

Kali Linux 2019.1 released

最新版 Kali Linux 2019.1 版釋出:

  • Linux kernel 更新至 4.19.13
  • Metasploit 更新至 v5.0

2019/02/18

Ruby 語法一些不太喜歡的地方

最近學 Ruby 看到一些特性,讓我覺得有點毛毛的,像是 Ruby 的 function call syntax:
list = [0, 1, 2, 3, 4]

list.count()

# 寫可以這樣寫
list.count

count() 還算好,如果是 fetch() 就有趣了:
list.fetch(3)  # 3

# 刮號可以省略
list.fetch 3  # 3

不否認這種特性可以工程師提高開發效率,算是 syntax sugar 吧?但是若沒有一致的 coding srandard,可能會讓整個專案的程式碼變的雜亂不容易閱讀,這樣就變成「syntax salt」了。

list = [1, 2, 3]

# 這個應該沒什麼問題
list.fetch(1) + 5  # 7

# 這個就很容易誤會了
list.fetch 1 + 5  # IndexError




感謝 @david50407 提供 Ruby Style Guide