原來 ZendFramework 1 還有在出新版...

在「Zend Framework 1.12.18 Released!」這邊看到因為「ZF2016-11: Potential Insufficient Entropy Vulnerability in ZF1」而推出新版的消息...

另外在「Changelog 1.12.18」這頁可以看到還是有一些 bugfix,所以其實都還是有在維護?(記憶中以為現在沒在管了...)

Google 將之前買下 Skybox 公司的工具放出來 (MapReduce for C)

Zite 上看到的,Google 把之前買下的 Skybox 所開發的工具 MapReduce for C (MR4C) 放出來:「Google open sources a MapReduce framework for C/C++」。

MR4C 的程式碼放在 GitHub 上,以 Apache License Version 2.0 授權放出來:「google/mr4c」。

用起來有點苦的 Laravel...

Laravel 是個 PHP framework,是目前還蠻常看到討論的 PHP framework。不過實際在研究後發現用起來有點苦啊...

Laravel 官方覺得 PSR-2 是個鳥蛋 (參考 GitHub 上的 issue:「PSR-2 Conflicts」),而我也知道 PSR-2 不怎樣,但這好歹是個標準可以靠啊...

另外一個是 overhead,在 AWS 上用 m1.large 跑 Ubuntu 64bits 測試純 PHP 的 echo "Hello, world."; 可以到 8000 reqs/sec (這是開了 APC 的情況測試,比較接近 production),但同樣是要顯示 Hello, world.,用了 Laravel 後剩下 174 reqs/sec (debug mode 已經關閉),如果再套上 Laravel 的 View 就剩下 152 reqs/sec...

也就是說這個數字是起點 (往下的起點),這樣看起來有點慘烈啊...

Zend Framework 1 的 Zend_View 與 Zend Framework 2 的 Zend\View 的差異...

Zend Framework 1 的 Zend_View 實踐了 Rasmus Lerdorf (PHP 發明人) 的想法「PHP 本身就是 template language,不應該在 PHP 裡面再發明一套 template language」。

Zend_View 是可以獨立拿出來用的,使用方式很簡單:

$view = new Zend_View();
$view->setBasePath(realpath(__DIR__ . '/../application/view'));
echo $view->render('index/index.phtml');

這樣對應的 template 檔案是 application/view/scripts/index/index.phtml

Zend Framework 2 除了改用 namespace 外 (所以名稱從原來的 "_" 改成 "\"),還把 Zend\View 深度整合到 Zend\Mvc 裡,這使得要獨立拿出來用的手續就變得... 超... 麻... 煩...

透過 Composer 安裝的人除了在 composer.json 裡面要設定 zendframework/zend-view 外,還要設定 zendframework/zend-filter 才會動 (不知道為什麼沒被放進 dependency),像是這樣:

    "require": {
        "zendframework/zend-filter": "2.2.*",
        "zendframework/zend-view": "2.2.*"
    }

另外 ZF 2 的 Zend\View 則是透過 resolver 物件設定要讀哪個目錄,而非之前用 setBasePath 打發:

$resolver = new \Zend\View\Resolver\TemplatePathStack(
    array(
        'script_paths' => array(
            realpath(__DIR__ . '/../webdata/view/')
        )
    )
);

$renderer = new \Zend\View\Renderer\PhpRenderer();
$renderer->setResolver($resolver);

echo $renderer->render('index/index.phtml');

這樣對應的 template 檔案是 webdata/view/index/index.phtml,跟 ZF1 相比少了一個 scripts

ZF 的文件一如往常的難讀,還是要去翻 source code 才知道要這樣用,所以也跟往常一樣,寫下來避免之後又忘記...

Google 官方提供 Google Fonts 下載的建議方案...

Update:一次只能選一個字體,找不到全選的地方,然後有一千多個... 還是去網路上找人家包好整包抓比較快。

Google Developers Blog 上看到官方對於下載 Google Fonts 的建議方案:「Download Google fonts to your desktop」。

Monotype 所推出的工具「SkyFonts」,支援 Windows 與 Mac 版。當 Google Fonts 有新的字型時,SkyFonts 會自動更新。不過當 Google Fonts 刪除時會發生什麼事情就不知道了...

會需要 Microsoft .NET Framework 4.0 與 WindowsInstaller 4.5 (x86):

這樣感覺有點肥... XD

Tatsumaki 與 Twiggy 的搭配...

感謝 #perl.tw 上的幫助,總算是找到方法將 Tatsumaki 跑起來,而且把該拆開的地方拆開...

這是 app.psgi

use Controller::Main;
use Tatsumaki::Application;
use strict;
use warnings;

Tatsumaki::Application->new([
    '/' => 'Controller::Main',
]);

這是 Controller/Main.pm

package Controller::Main;

use parent qw/Tatsumaki::Handler/;
use strict;
use warnings;

sub get {
    my $self = shift;
    $self->write('It is Main Controller.');
}

然後直接用 twiggy 不加參數就可以跑起來..