composer install 時,注意到 packagist 冒出一段訊息:

烏克蘭加油!
軟體開發、伺服器和生活瑣事
遠端連線到 PostgreSQL 時,遇到錯誤訊息:
SCRAM authentication requires libpq version 10 or above
這個問題主要是新舊版本儲存使用者密碼的方法不同所導致的,只要讓 PostgreSQL 支援 MD5 儲存密碼即可。
開啟 postgresql.conf 修改 password_encryption 參數:
password_encryption = md5
再來修改 pg_hba.conf,讓使用者驗證的時候使用 MD5 方式驗證:
# IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 host all zeroplex 0.0.0.0/0 md5
設定檔修改後記得重新啟動 PostgreSQL。
設定檔改好、啟動也沒問題,就來更新使用者密碼,這樣一來,PostgreSQL 的密碼儲存方式就會改用 MD5:
ALTER USER zeroplex WITH PASSWORD 'your-password'
Laravel 和 Lumen 都有自己整理好的一套 unit test framework,因此若要加入 AspectMock 會需要對預設的 boostrap file 做一些調整。
整合時需要注意的事情:
/bootstrap/app.phpphpunit.xml 中的 bootstrap config,要改成自己新建立的 bootstrap filerequire 順序,不要讓 Laravel App 的資料被覆蓋掉 (另外也要注意 require 和 require_once 的差異)建立新的 bootstrap 設定檔 /tests/bootstrap.php:
<?php
// composer autoload
require_once __DIR__.'/../vendor/autoload.php';
// load Laravel bootstrap
$app = require_once __DIR__ . '/../bootstrap/app.php';
// create temporary folder for AspectMock
$tmpPath = '/tmp/aspectMock/';
if (!file_exists($tmpPath)) {
mkdir($tmpPath, 0777);
}
$kernel = \AspectMock\Kernel::getInstance();
$kernel->init([
'appDir' => __DIR__ . '/..',
'debug' => true,
'includePaths' => [
__DIR__ . '/../app',
__DIR__ . '/../vendor/laravel', // 如果需要 mock Model 則加上這行
],
'excludePaths' => __DIR__, // "/tests" 目錄不需要處理
'cacheDir' => $tmpPath,
]);
return $app; // 把 App 回傳給 createApplication()
接下來要調整原有的 phpunit.xml 設定檔,需要參考 AspectMock 的要求,來調整:
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
bootstrap="tests/bootstrap.php"
backupGlobals="false">
注意最後面二行,bootstrap 要改成剛剛新建立的檔案,backupGlobals 則要關閉。
最後,去調整 BaseTest.php,在 tearDown() 加上 AspectMock 清理設定的指令:
protected function tearDown(): void
{
test::clean();
}
另外在 createApplication() 這邊,要改用上面建立的 bootstrap file:
public function createApplication()
{
return require __DIR__ . '/bootstrap.php';
}
以上全部改好的話,執行 vendor/bin/phpunit 應該可以正常運作。
注意 require 和 require_once 的差異,Laravel 會在每次開始 unit test 之前,重新建立 $app,所以用 require_once 的話,就的設定清不掉
-$app = require_once __DIR__ . '/../bootstrap/app.php'; // Laravel bootstrap +$app = require __DIR__ . '/../bootstrap/app.php';
在官方 wiki 的說明,都是透過 btrfs balance 指令去清理出可用空間,但 Synology 上的 btrfs 指令並不支援 balance 參數。
追了一陣子在 reddit 上看到別人說要改用 btrfs filesystem defrag 去釋放空間:
sudo btrfs filesystem defrag -yvr /volumeX
自己機器上的 btrfs utils 是支援 btrfs balance 的,不知道是 Snology 用的是舊版?還是閹割過的版本?
一般在賣場結帳時,會看到店員翻轉商品並掃描張由直線組成的條碼,掃描完成收銀機便可立即顯示出商品名稱以及售價。近一年因 COVID-19 而要求大家進入公共場所需要掃描的 QR code 也是條碼的一種,只是單位面積可以儲存的資料量更多 (資料密度更高)。以下貼出幾種常見的圖形條碼。
「一維條碼」指的就是這種條碼只由直線組合而成,常見的商品條碼就是條碼的一種。依照不同的檢查碼、線條格式等,還可以細分成很多種,但大致上就是長得像 UPC code 這樣:

由於在相同面積,一條條碼可以儲存的資料有限,所以後來做出了 PDF 417 這種以方格組成的條碼:
接著為了更複雜的需求 (快速辨識圖形方向、容忍變形、容忍圖形毀損等等)、提高資料密度,開始出現了設計不一樣的長形、方形條碼 (二維條碼),最常見的就是 QR code:
再來還有幾個比較少見的圖形條碼,像是 Datamatrix 和 MaxiCode: