Development

PHP7 是有多快?

[華語, cmn-Hant-TW] 之前把幾台機器換成 PHP7 就覺得很有感了,這次改寫台灣華語羅馬拼音產生器的測試程式的時候,才發現真的是有夠誇張的快,同一個測試程式用 Apple MacBook 12″ (OS X El Capitan 10.11.3) 在 5.3 到 7.0 跑的結果如下: PHP 5.3.29 – 22.89 秒,使用 71.15 MB 記憶體 PHP 5.4.45 – 42.54 秒,使用 65.75 MB 記憶體 PHP 5.5.32 – 29.96 秒,使用 65.75 MB…

Laravel 4, composer.phar 還有 nikic/php-parser

[華語, cmn-Hant-TW] Laravel 4 的標準安裝是透過 composer.phar 來達成,所以不像 Laravel 3 只要塞一個 security/php5-mcrypt 就收工。為了跑 composer.phar 至少要安裝 archives/php5-phar,然後如果希望執行 composer 的輸出有帶顏色,那需要 sysutils/php5-posix,又安裝過程中會裝到 php-parser 如果沒有 devel/php5-tokenizer 會直接噴出 “Use of undefined constant T_DOUBLE_COLON” 的錯誤訊息,所以這幾個 ports 還是給他裝一裝吧。 話說回來,這是安裝上的需求,安裝好之後只要有 mcrypt 就能用了,所以可以找一台裝好之後再丟到沒這些東西的機器上跑,只是之後要更新的話就會比較麻煩就是

Grand Central Dispatch 試玩

[華語, cmn-Hant-TW] 因為開有多執行緒的需求,就研究了一下 mac 的 framework 有提供哪些東西可以用。初步看來就是傳統 pthread 跟 NSThread 可以用,不過 Thread 程式寫起來一向就很煩,所以就想找找有啥替代品可以用,後來就注意到 Mac OS X 10.6 (iOS 4)之後新加的 Grand Central Dispatch。 基本概念很簡單,就是把你要做的東西加進 queue 就好了。把要做的事情放在同一個 queue 的話他就會照順序一個一個執行,當然你可以開很多個 queue 同時跑,那就可以一次做很多事情,直到把系統榨乾為止。 首先要開一個 queue dispatch_queue_t queue = dispatch_queue_create("cc.pighead.queue", NULL);dispatch_queue_t queue = dispatch_queue_create("cc.pighead.queue", NULL); 第一個參數可以隨便打,第二個參數在…

bash 的 <<<

[華語, cmn-Hant-TW] 有時候會看到用 bash 寫的 script 裡面有 <<< 這種用法,啊這個語法 sh 是吃不進去的,我們這種 sh 基本教義派當然會想要把他消滅掉。 消滅的方法也不難,這個語法其實就是把 <<< 後面字串變數的內容丟給前面的東西 (程式,或是另外一個 script) 吃而已,所以改用 pipeline 就可以了。 bash: run.sh <<< $varrun.sh <<< $var sh: echo "$var" | run.shecho "$var" | run.sh 要注意的是 echo 的變數最好要用雙引號包起來,避免字串內的換行字元之類的東西(如果有的話)被吃掉 。

群組化 $_POST

[華語, cmn-Hant-TW] HTML的表單項目太多的話,丟給 PHP 處理的時候就會有點煩,所以最好是在填表的時候就先分好群組。 分的方式其實還蠻簡單的,只要用中括號([])當元件的名稱即可。 <input name="項目[]" type="text" value="a" /> <input name="項目[]" type="text" value="a" /><input name="項目[]" type="text" value="a" /> <input name="項目[]" type="text" value="a" /> 然後輸入的內容就會變成放到 “項目[]” 這個陣列裡了,依序會是項目[0]、項目[1],當然要直接指定 key 也是可以的,細節可以看這篇。

去掉字串中非數字的部份

[華語, cmn-Hant-TW] 主要是用在去掉電話號碼上那堆括號或是連字號之類的東西。用正規表示式來處理並不困難,其中 ‘\D’ 代表非數字(注意大小寫),把非數字的字元通通取代成空字串即可。 Perl $string =~ s/\D//g;$string =~ s/\D//g; PHP $string = preg_replace( ‘/\D/’, ”, $string );$string = preg_replace( ‘/\D/’, ”, $string );

在 perl script 底肚用 open 拿到系統執行的結果

[客家話, hak-Hant-TW] Perl script 可以用 system(); 來執行外部的程式,偷懶時當好用。 毋過 system(); 有一隻麻煩: 執行結果會直接丟到 stdout,script 自家拿不到結果,是講 script 會拿到執行結果做下一步動作,就要用其他方法了,用 open 加 pipe 就可以做到,像要用 find 尋到全部的 .txt 檔,一隻一隻撈拒打開來,就可以按仔寫: open FILES, "/usr/bin/find *.txt |" while (<FILES>) { open(FILE, $_); }open FILES, "/usr/bin/find *.txt |" while (<FILES>)…

clang 及 gcc 的編譯訊息

[華語, cmn-Hant-TW] 因為 GPLv3 的問題,FreeBSD 將來的預設編譯器會從 gcc 往 clang 移動。clang 的賣點之一就是編譯的訊息較易懂,一個簡單的例子 1 2 3 4 5 6 #include &lt;stdio.h&gt;   main () { int a int b; }#include &lt;stdio.h&gt; main () { int a int b; } gcc version 4.2.1…

ACL in CakePHP

[華語, cmn-Hant-TW] cakephp 下開 acl 的簡單疏失心得,當然資料庫連結之類的設定要先弄好,然後至少要有一個寫好的 controller 。 用 console 工具來弄會比較方便,首先要切到 app 的目錄下 ../cake/console/cake schema create DbAcl../cake/console/cake schema create DbAcl 這是 1.3 的語法,如果是 1.2 的話請用 schema run create,接著在 controller 裡面加上 var $components = array(’Acl’);var $components = array(‘Acl’); 一定要加,不然就有可能會吃到像是這樣的錯誤訊息: Error: Missing…

壓縮檔案小測試

[華語, cmn-Hant-TW] 要把一些舊東西壓一壓,正好可以來測一下哪種格式壓起來效果最好。 原始檔案是事先打包好的 tar 檔,大小為 1,089,927 KB。 格式 參數 大小 zip 預設值 464,597 KB 7z 預設值 286,850KB gzip 預設值 473,692KB bz2 預設值 453,056KB lzma (lzma1) 預設值 314,828KB xz (lzma2) 預設值 314,199KB xz (lzma2) -9, –extreme 217,252KB 其中 7z 和…