pretty code

2021年8月27日 星期五

Can't find a default Python

今天在更新 Python 到 3.9.6 時,原本同事由後端 Node.js 呼叫 py 執行的功能變得無法使用,在 Server  log 可以看到 Can't find a default Python 的錯誤訊息,但我在本機直接執行 py 是可以進到互動式界面的。

上網查了一下,有人說跟系統檔案關連設定有關,有人說跟登錄檔有關,我的系統檔案關連設定看起來跟網路上一樣,但網路上的登錄檔是在 Local Machine 路徑下,我的則是在 CURRENT_USER 下,印象中安裝預設選項似乎只針對目前使用者而已?

懶得繼續追查下去,先把目前登錄檔匯出成檔案,變更檔案裡面 Key 路徑到 Local Machine,接著再匯入修改過的登錄檔,這個問題好像就順利解決了?

暫時就先這樣吧,手上還有 Bug 待解決,不想花太多時間在上面XD

2021年8月26日 星期四

Golang os/exec command

最近為了抓取資料分析,需要定時執行一個 linux command 並儲存結果,由於最近都在使用 Golang,當然優先考慮使用 Golang 開發。

在 os/exec 有一個 Cmd struct,我們可以使用 exec.Command(...) 來得到這個 Cmd 指標,接著可以使用 Cmd.Output( ) 得到執行結果。

看似很單純的程式,但只有第一次執行成功,接著都會失敗,錯誤訊息為"exec: Stdout already set"。

看了一下 source code,原來是程式會檢查 c.Stdout 是不是有設定過,換句話說,這個 struct 只能使用一次,不能重覆使用,解決方式也很簡單,不要使用 for loop 外面的變數,每次在 loop 裡面重新 new 一個即可。

另外,由於 linux command 的結果已經帶有換行字元,我們在顯示執行結果時就不需要再加換行字元了。

可惡,害我要明天才能看到結果,今天沒有心情做事了XD

2021年8月25日 星期三

PostgreSQL 使用的一些心得

最近為了避免 License 問題,終於開始使用這個授權最寬鬆的關聯式資料庫,有些技巧跟我以前使用的 MariaDB 都不一樣,記錄一下避免以後忘記。

01. 命令列工具登入方式

psql -U postgres -h localhost -d database_name

02. 安全性設定檔

pg_hba.comf

03. SQL count(*) 過慢

貌似因為 Lock 機制,PG 需要從頭搜尋一遍以得到精準的數字,如果只是想要知道大概,可以使用下面指令得到近似值。

SELECT reltuples::bigint AS estimate FROM pg_class WHERE relname='table_name';

04. Linux 下得知目前資料庫硬碟使用空間

sudo du -sh /sda3/postgresql/

05. 使用指令得到某 table 使用空間

SELECT pg_total_relation_size('table_name');

06. 使用指令得到某 database 使用空間

此數字會比實際硬碟空間還少,因為實際空間還包括 PG 系統本身,以我的測試資料庫來看,大概還要乘上 2 倍。

SELECT pg_database_size('database_name');

07. 一些建立 table SQL 語法

CREATE TABLE users (
    user_id TEXT NOT NULL PRIMARY KEY,
    name TEXT NOT NULL UNIQUE,
    pwd TEXT NOT NULL,
    privilege TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE
);

CREATE TABLE devices (
    device_id TEXT NOT NULL PRIMARY KEY,
    ip TEXT NOT NULL,
    port INTEGER NOT NULL,
    data JSON NOT NULL
);

CREATE UNIQUE INDEX idx_devices_ip_port
ON devices(ip, port);

CREATE TABLE groups (
    user_id TEXT NOT NULL,
    group_id TEXT NOT NULL PRIMARY KEY,
    group_name TEXT NOT NULL,

    CONSTRAINT fk_users
      FOREIGN KEY(user_id)
  REFERENCES users(user_id)
  ON DELETE CASCADE
);

2021年8月20日 星期五

Add new mount point on Linux for growth size of database

最近為了測試一些 DB 的效能,一直新增資料到資料庫中,導致我一開始切的分割區到後來不敷使用,本來想用 VM 的相關工具把分割區動態變大,但一時不知如何使用,最後還是走回傳統的掛載分割區分式來解決問題。

我試過 MongoDB 和 PostgreSQL,兩者都可以改變預設資料庫位置(/var/lib)到新的分割區。

我使用的是 Ubuntu 20.04,步驟如下:

01. 使用 VM 工具增加原本分配給 VM 的大小。
02. 進 Linux 使用 fdisk 新增分割區,並用 GUI 的工具設定開機自動掛載。
03. 停止資料庫服務(sudo service xxx stop)。
04. 更改各資料庫設定檔,將位置移到新分割區,設定檔是位在 /etc 下面。
05. 參考設定檔原本資料夾名稱,並在新分割區建立一模一樣的資料夾。
06. 先將掛載點權限設成 755。
07. 將檔案權限及群組相關的都改成跟原本一模一樣,像 PostgreSQL 的 main 資料夾必須是 700。
08. 啟動資料庫服務。
09. 去 /var/log 看各資料庫的 Log,理論上應該會看到顯示已開機的字樣。
10. 將系統重新啟動,確認重開機後仍然可以正常運作。

理論上這樣就可以順利使用新的分割區了。

2021年8月2日 星期一

煮湯時視線千萬不要離開鍋子

我個人對吃沒什麼講究!老婆也在約幾個禮拜前不再輪流分組 WFH,既然不用煮飯,故我每天中午都是準備一樣的午餐 - 6 ~ 7 顆手工水餃 + 豌豆苗蛋花湯。

今天也是一如往常的準備午餐,不料在加完蛋花後把一些東西放回冰箱時,我的一鍋湯就以迅雷不及掩耳的速度溢出到整個瓦斯爐檯面,虧我還想說今天狀況還不錯,沒有前幾天打完疫苗後的肩頸僵硬,呆會收拾廚房時應該很輕鬆才對!

無奈只好快速兩三口的把午餐搞定,然後就是無止境的擦拭,今天不是我的天呀!

雖然瓦斯爐檯面有橡膠,但是一鍋子的湯汁還是難免會滲透進去,研究了一下,拆掉兩顆螺絲後,便可以整個拆除做清潔。



這兩顆螺絲不只對應左邊的爐火,只要把右邊爐火的兩顆螺絲依樣畫葫蘆的拆掉,下面長方形的不鏽鋼檯面也可以整個移動拆除,但被這樣一搞後今天真的太累,我就只有清理左邊爐火而已。

其他東西裝回去也很簡單,所有的圈圈提醒處都朝上即可。

Lenovo ThinkPad KU-1255 外接鍵盤滑鼠中間鍵滾動失效

自從 6 月多配合電動升降桌買了這個鍵盤後,其中間鍵滾動視窗功能完全跟我熟悉的不太一樣,重點是時好時壞,原本以為是選項的緣故,在勾選了 ThinkPad 首選滾動後,中間鍵功能恢復成以前習慣的方式,不料過了一陣子後,還是會不定時失效。


據我之前在 Windows 10 使用 SK8835 的經驗,要想讓此類鍵盤的中間鍵正常,一定要安裝正確的驅動程式才行,由於我是時好時壞,故我先假設驅動程式應該是沒問題的,但其實是我忘了 6 月初我是怎麼安裝驅動程式的?我也懶得去確認目前驅動程式的版本。

既然不想走驅動程式這條路,問題還是要想辦法解決,已經知道這個跟驅動程式有關,可見一定是驅動程式的某支負責中間鍵滾動視窗的程式發生問題,我只要在發生問題的時候,想辦法再執行一次該支程式即可,理論上這樣就能解決我的問題。

找了一下資料夾目錄,應該是跟這支程式有關:

C:\Program Files (x86)\Lenovo\ThinkPad Compact Keyboard with TrackPoint driver\HScrollFun.exe

重新執行之後,中間鍵滾動功能馬上就順利恢復,目前暫時可以解決我的問題,等到之後這個問題發生頻率太過頻繁,我就會去找是否有更新版的驅動程式可以安裝,目前只確認我沒有另外安裝驅動程式,都是使用 Windows Update 抓到的驅動程式。

2021年8月1日 星期日

FF3 2D 像素重置版

下午在 Google 首頁中看到此新聞馬上就下單了,我買的是 Android 版,感覺沒有之前移植版來得好操作,但 2D 畫面才是我國一的回憶呀,即使現在不太可能再重玩一次,但還是很不爭氣的入手了。

如果每個人的時間都是無限可以使用,我們的生活又將變成什麼樣子?