2018/06/14

PHP 的 Memcache 與 Memcached 函式庫無法共用資料

剛接觸的應該會被命名搞的一頭誤水,畢竟名字相同、不然就是幾乎相同 XD

負責提供記憶體讀寫快取的服務叫做 Memcached,這個服務和 PHP 八竿子打不著關係,就算你不是寫 PHP 也這樣可以使用他。

再來要說的是 PHP 底下的二個函式庫:MemcacheMemcached。這二個函式庫,主要是提供一個方法讓 PHP 連接前面提到的 Memcached 讀寫資料。另外要注意的是 Memcache 和 Memcached 函式庫雖然名字很接近,但卻是二個完全不同的函式庫,無法同時使用,只能二選一。

以下透過 psysh 實際操作,來看一下同時使用會發什麼事情。

使用 Memcache 寫入一筆資料:
>>> $m = new Memcache
=> Memcache {#201}
>>> $m->connect('localhost')
=> true
>>> $m->set('test', ['Hello', 'World'])
=> true
>>> $m->get('test')
=> [
     "Hello",
     "World",
   ]

再來使用 Memcahed 函式庫,連到 localhost 的 Memcached server 看看會發生什麼事:
>>> $d = new Memcached
=> Memcached {#198}
>>> $d->addServer('localhost', 11211)
=> true
>>> $d->getAllKeys()
=> [
     "test",
   ]
>>> $d->get('test')
=> 0

可以看出這二個函式庫提供的 methods 看起來很接近,但是底層處理資料的方式不一樣,只能挑其中一個來使用。

2018/06/05

想逃離 Github 嗎?歡迎搬家到 Bitbucket

微軟買下 Github 之際,大家紛紛逃竄到 Gitlab 上,但是大家好像都忘記還有個不錯的服務叫做 Bitbucket



我個人會繼續留在 Github 的原因:

  • 多數開放程式碼、開發平台、CI/CD 服務,短期內不可能轉移到其他程式碼代管平台上
  • 微軟進幾年的作風已經大改,像是 VS code 都開放原始碼、支援 3rd-party plugin,並且支援跨平台。
  • .NET 也支援 Linux 了,雖然我想這有微軟的商業考量,對 Linux 使用者沒有壞處,因為若有更多工程師建立 Linux 專案,表示 Linux 使用者有更多可以選擇的解決方案 (即已要付費)。
  • 微軟知道自己以前的聲譽不好,現在不會笨到對 Github 毛手毛腳。就算有,Github 社群的壓力也會逼微軟放棄。
  • Gitlab 是一個不錯的服務,但是我不認為他有支撐大量負載的能力。當大家都把 open source project 搬過去時,可能會因為負載過高而發生問題。另外還有朋友提醒,Gitlab 之前把自己的 DB 砍掉,還有 live rescue
  • 個人蠻期待後續微軟會推出的整合服務

2018/06/04

61 號快速道路 (西濱公路) 路況

最後更新日期:2018/06/04

數天前從新竹到台中一趟,走 61 號快速道路 (西濱公路) 發現不少路段都接通了,但看起來還沒有施工完成,簡單做個筆記。

我只有機車,以下提及的路段均為機車車道,汽車專用的高架道路。

新竹到苗栗通宵這段的路,基本上可以順順騎,也不需要繞道。

但南下到了苗栗通霄這邊要繞道,改走台 1 線,或是先轉到通霄鎮市區道路,過了南勢溪以後在接回 61 號快速道路。

過了通霄鎮以後路也差不多都接起來了,但路線標示牌尚未全部裝好。有部分交流道沒有警告標示,沒注意的話可能機車就會直接騎上汽車專用道。已知機車在 61 號快速道路只有遇到要過河時,才會有高架道路可以走,其他的應該都是接到汽車專用道的交流道。

總之,遇到不明的路段,還是減速慢行比較安全。


2018/05/31

由網頁觸發、執行 PHPUnit

通常都是在 console 底下執行 PHPUnit 跑測試:
$ phpunit Test.php 
... Run by vendor/bin/phpunit ...
PHPUnit 7.1.5 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 30 ms, Memory: 4.00MB

OK (1 test, 1 assertion)

但若開發環境無法使用 console 的話,只能靠寫 PHP script 來 require PHPUnit library 來執行。在這邊發現其實 PHPUnit 有保留 interface 讓使用者可以不透過 console 來操作 PHPUnit,可以在 PHP script 裡面 require library 來使用。

先使用 composer 把 library 拉下來:
composer require 'phpunit/phpunit'

在 PHPUnut/TextUI 底下,有實作幾個 controller 來模擬 console 的操作。以下使用 Command 來執行 PHPUnit:
<?php

require __DIR__ . '/vendor/autoload.php';

use PHPUnit\TextUI\Command;

$cmd = new Command();

$cmd->run([
    'phpunit',  // 1st arg
    'Test.php', // 2nd arg
]);

如果執行上面這段 PHP script,會得到與在 console 執行 PHPUnit 一樣的結果。
不過要注意的是測試結果會直接輸出到 std out,若另外處理的話,記得用 output buffer 把資料拉回來,直接在瀏覽器看的話會破版。

備註:PHPUnit 不同版本的路徑不同,類別名稱也會不同。

2018/05/26

ZenPad 3 8.0 (8 吋) 使用心得

個人的手機一向偏好體積小、待機時間長的款式,主要是接電話、連或事情、收訊息 (instant messaging),好處是攜帶方便、外出不用帶行動電源。但這樣的硬體限制會造成看影片、看小說漫畫不方便,特別是目前大多的電子雜誌,並沒有特別設計給行動裝置使用,僅將頁面掃描成圖片直接出版給行動裝置,字體是不會隨著行動裝置大小不同而自行調整。因此決定買個平板用於一般休閒娛樂。

目前主流平板的大小好像在 10 吋,但這其實和小筆電沒什麼差別,特別是要拿著眨邊框平板時手指只能拿邊角,力矩產生的重量感不輸於小筆電,所以我最後挑了 ASUS ZenPad 3 8.0 的 8 吋平板。

我想開箱文在網路上已經不少了,我就不放照片,直接針對硬體、軟體列出優缺點供大家參考。