最近網路的連線品質有點慘,會莫名其妙在非維修期間斷線,透過官網上的數據機重置也沒效。
過年先拿手邊的玩具串一下功能,看看有沒有辦法遠端重新開機:

- 上方:TP-link Tapo P100 智慧插座,可以透過手機 app 操作
- 下方:D-Link 4G LTE 可攜式無線路由器 DWR-932
目前串起來以後,確定只要房東沒有忘記繳電費就可以重開數據機。
軟體開發、伺服器和生活瑣事
最近網路的連線品質有點慘,會莫名其妙在非維修期間斷線,透過官網上的數據機重置也沒效。
過年先拿手邊的玩具串一下功能,看看有沒有辦法遠端重新開機:

目前串起來以後,確定只要房東沒有忘記繳電費就可以重開數據機。
來推薦一本書:「地震 – 火環帶上的臺灣」
9789869804226書籍從地震的成因、臺灣常見的地震災害,到如何加速地震警報的速度、災後重建復原的經驗談。用詞淺顯易懂,算是了解臺灣與地震二者關係的普科好書。以下分享一些筆記:
沒有耐震的「箍筋」方式,地震時,會因受力而變形 ( 攝於 921 地震教育園區 ):

也可參考獨立特派員的影片:
使用 symfony/polyfill-intl-idn 後發現有趣的事,不用特別去檢查 PHP extension 的 function 是否存在,只要 require symfony polyfill 以後,完全不需要進行任何設定就可以正常運作。
後來在 composer.json 看到 autoload 的寫法:
{
    "autoload": {
        "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" },
        "files": [ "bootstrap.php" ]
    },
}
以前以為 autoload 只能挑其中一種方法使用,沒想到可以指定多種方法同時使用。
上面的設定方式,namespace 會在 class 使用時才 require 進來,而 bootstrap.php 則是在一開始就 require 並執行,polyfill 就在當下偵測並處理掉 extension functions。所以使用者 composer require 以後程式並不需要做任何修改。
sudo umount -a -t cifs -l
-l  , --lazy:unmount. Detach the filesystem from the file hierarchy now, and clean up all references to this filesystem as soon as it is not busy anymore.reference:Force Unmount a CIFS Share in Linux
假設有個 class:
class Woker
{
    protected Queue $queue;
    public function run()
    {
        while (!$this->queue->isEmpty()) {
            $job = $this->queue->pop();
            // do something
        }
    }
}
用 PHPUnit 建立 stub 以後,必須使用 reflection 來自訂 $queue property:
$worker = $this->getMockBuilder(Worker::class)
    ->disableOriginalConstructor()
    ->getMock();
$queue = $this->createMock(Queue::class);
$queue->expected($this->atLeast(1))
    ->method('isEmpty')
    ->willReturn(true);
// PHP Reflection on $worker
$refProperty = new \ReflectionProperty($worker, 'queue');
$refProperty->setAccessible(true);
$refProperty->setValue($crawler, $queue);
這樣寫 test case 蠻髒的,有點想要換 test framework ….