Saturday, December 17, 2011

Develop Symfony2 with Eclipse

1. Download Eclipse IDE for Java EE Developers

2. Extract the archive file to where you want to install Eclipse.

3. Open Eclipse, Go to Help->Install New Software...

4. Add Symfony-2-Eclipse-Plugin repository: http://pulse00.github.com/Symfony-2-Eclipse-Plugin/

5. Install All of them. (PDT Extensions, PHP Development Tools, Symfony, YEdit)

6. Add Eclipse Color Theme plugins repository: http://eclipse-color-theme.github.com/update

7. Install Eclipse Color Theme

8. Download Eclipse Symfony2 theme

9. Go to Window->Preferences->General->Appearance->Color Theme , and install the Symfony2 theme.

10. ALL DONE! ENJOY Symfony2!

ex1. Go to PHP->Code Style->Formatter(PDT Tooles) Change Active profile to "Symfony [built in]"

ex2. Edit theme color in Twig: Normal, String

ex3. Edit theme color in YEdit: Scalars, Documents, Default

Wednesday, December 07, 2011

Tuesday, November 08, 2011

Javascript and PHP AES encrypt decrypt library

This is a Javascript AES encrypt decrypt library
AES Advanced Encryption Standard

And this is a PHP AES encrypt decrypt library
AES in PHP

Friday, November 04, 2011

Symfony theme for NetBeans

A nice guy make a symfony color theme for NetBeans. You can download from his googlecode page: Symfony Color Scheme for NetBeans v1.3

解決 DejaVu Sans Mono 字型在 NetBeans 下中文顯示成方塊的問題

  1. 找到 NetBeans 安裝路徑, ex: C:\Program Files\NetBeans 7.0.1
    進入 etc 資料夾 ex: C:\Program Files\NetBeans 7.0.1\etc
    打開 netbeans.conf 並搜尋 netbeans_jdkhome 參數
    該參數存放的是 JRE 的路徑 ex:"C:\Program Files\Java\jre6"
  2. 進入 JER 的路徑, 並進到 lib 資料夾 ex: C:\Program Files\Java\jre6\lib
  3. 複製一份 fontconfig.properties.src 並更改檔名成 fontconfig.properties
  4. 編輯 fontconfig.properties 檔
    新增下列的內容
    filename.DejaVu_Sans_Mono=DejaVuSansMono.ttf
    filename.DejaVu_Sans_Mono_Bold=DejaVuSansMono-Bold.ttf
    filename.DejaVu_Sans_Mono_Bold_Oblique=DejaVuSansMono-BoldOblique.ttf
    filename.DejaVu_Sans_Mono_Oblique=DejaVuSansMono-Oblique.ttf
    
    修改下列的內容
    sansserif.plain.alphabetic=DejaVu Sans
    sansserif.bold.alphabetic=DejaVu Sans Bold
    sansserif.italic.alphabetic=DejaVu Sans Oblique
    sansserif.bolditalic.alphabetic=DejaVu Sans Bold Oblique
    monospaced.plain.alphabetic=DejaVu Sans Mono
    monospaced.bold.alphabetic=DejaVu Sans Mono Bold
    monospaced.italic.alphabetic=DejaVu Sans Mono Oblique
    monospaced.bolditalic.alphabetic=DejaVu Sans Mono Bold Oblique
    sequence.sansserif.x-windows-950=
      alphabetic,chinese-ms950,dingbats,symbol,chinese-ms950-extb
    sequence.monospaced.x-windows-950=
      alphabetic,chinese-ms950,dingbats,symbol,chinese-ms950-extb
        
  5. 做完上述的修改後, 再進入 NetBeans -> Tools -> Options -> Fonts & Colors -> Syntax -> Default -> Font, 選擇 Monospaced 字型, 這樣就可以正確地顯示 DejaVu Mono 的字型了, 收工!

Wednesday, September 28, 2011

Sage - Online Mathematical Software

Sage is an mathematical software, the coolest point is it can run with any web browser.

I tried a sample plot function below, the usability is awesome too!

x=var('x')
plot(-0.3+(x+0.6)^0.5, (0,100))

Monday, September 19, 2011

Benchmarks for mt_rand() and rand()

Benchmarks results as below:

mt_rand() 10000000 times for 4.7026278972626 seconds
each one average is 0.00000047 seconds
rand() 10000000 times for 4.7438910007477 seconds
each one average is 0.00000047 seconds

The test machine is Amazon EC2 High-CPU Instances (20 ECU)

Another test as below:

mt_rand() 10000000 times for 2.4974269866943 seconds
each one average is 0.00000025 seconds
rand() 10000000 times for 2.4646849632263 seconds
each one average is 0.00000025 seconds

The test machine is Amazon EC2 Micro Instances (1 ECU)

Tuesday, September 06, 2011

CentOS install node.js

Basically, follow the installation guide in the node.js GitHub wiki page. I use the "Building from source" guide. Then install npm, follow the guide too, just easy type with "curl http://npmjs.org/install.sh | sh"

When I test nmp installation (install express), I found that I should type 'npm install -g express', and the express will be installed in the directory which I want. Otherwise, nmp will install locally (such as: ./node_modules/).

Wednesday, August 31, 2011

Install PHPUnit on Windows 7

First you need install a Zend Server in C:\Zend folder

Install Pear

Run commands below

# pear channel-update pear.php.net
# pear upgrade pear
# pear channel-discover pear.phpunit.de
# pear channel-discover pear.symfony-project.com
# pear channel-discover components.ez.no
# pear clear-cache
# pear update-channels
# pear install --alldeps phpunit/PHPUnit

DONE!

Friday, August 26, 2011

32bit 系統下 json_decode 遇到 BIGINT 的問題

在 32bit 系統下處理 Facebook 的 uid 時, 一定會遇到 json_decode 時, php 把 uid 轉成 float 的情形, 大部分的情形只要把 uid 轉成 string 就能做其他的事了, 以下是正確的轉型技巧

$json = '{"uid":100000123456789}';
$arr = json_decode($json, true);
// $arr = array(1) {
//   ["uid"]=>
//   float(1.0000012345678E+14)
// }
$s2 = sprintf ( "%.0f", $arr['uid'] );
// $s2 = string(15) "100000123456789"

Thursday, August 11, 2011

How to login with Administrator account in Thinkpad

単純にadminでログインしたいだけであれば以下の手順でできます。

  1. 「ユーザーアカウント制御設定の変更」からUACを無効化
  2. OS再起動
  3. コマンドプロンプトを起動し以下を入力
    net user administrator /active:yes
  4. 「ユーザーアカウント」にadminが出ることを確認

resource: http://bbs.kakaku.com/bbs/K0000092865/SortID=11470155/

Monday, August 08, 2011

jQuery file upload plugin: AjaxFileUpload

We can use AjaxFileUpload make a file upload process.

Basic usage:
function ajaxFileUpload()
{
  $.ajaxFileUpload({
    url:'upload.php',
    secureuri:false,
    fileElementId:'fileToUpload',
    data:{name:'logan', id:'id'},
    success: function (data, status) {
      alert($(data).text());
    }
  });
  return false;
}

Official Guide have more detail usage.

Wednesday, July 20, 2011

CentOS install Zend Server CE

Follow the official guide "RPM Installation (RHEL, CentOS, Fedora and OEL)" first.

I install Zend Server CE with "Manually Installing Zend Server" guide. But my Zend Server repository is downloaded from here, enter the Linux tab, download the "Zend Server (DEB/RPM Installer Script)" package. Use the "zend.rpm.repo" repository file.

Then, you can finish the installation with "yum install zend-server-ce-php-5.3"

Link the /usr/bin/php to /usr/local/zend/bin/php
ln -s /usr/local/zend/bin/php /usr/bin/php
Or use "ln -f -s /usr/local/zend/bin/php /usr/bin/php"

Troubleshooting:
1. "Cannot load /usr/local/zend/lib/apache2/libphp5.so into server"
    solution: close SELINUX, /etc/selinux/config >> SELINUX="disabled"

Sunday, June 26, 2011

在 Windows 版的 Zend Server CE 安裝 PEAR

在使用 ZendServer\bin\go-pear.bat 的時候, 會出現 phar...does not have a signature 的錯誤, 這時候只需要修改 go-pear.bat 的內容

original: %PHP_BIN% -d output_buffering=0 -d PEAR\go-pear.phar
change to: %PHP_BIN% -d output_buffering=0 -d phar.require_hash=0 PEAR\go-pear.phar

這樣就可以解決無法安裝 PEAR 的問題

PEAR 安裝完後, 如果有發生 Structures_Graph 的 library 找不到, 去 Pear 下載 Structures_Graph 的 package 回來放到 PEAR 的資料夾, 再執行下面幾個指令:

pear channel-update pear.php.net
pear upgrade pear

最後再 Zend Server CE 內設定 include_path 加入 pear 套件的路徑
如果 go-pear.bat 已經加好了, 就重新啟動 Zend Server 即可使用 pear 套件了

資料來源: http://katsande.com/installing-phpunit-for-php-5-3-on-zendserver

Friday, June 24, 2011

PHP DEBUG 工具 debug_print_backtrace

發現到兩個有用的 debug function
debug_print_backtracedebug_backtrace

debug_print_backtrace() 的功用是將目前程式區塊呼叫的位置開始, 一層一層往上找呼叫的位置, 可以將程式 trace 到最一開始的進入點, 這樣的方式可以有效的找到整個程式是從那一段開始出錯的, Zend_Db 也有實作這樣的功能, 沒想到原來 PHP 裡就已經內建了

debug_print_backtrace() 和 debug_backtrace() 不同的地方在於, debug_backtrace() 是未被格式化的資料, debug_backtrace() 回傳的是一份矩陣的 trace 資料, 而 debug_print_backtrace() 回傳的是已經備格式化過的文字, debug_print_backtrace() 比較方便用來快速檢視, 但若是要寫 LOG 或其他用途, debug_backtrace() 是比較好的選擇

Tuesday, June 07, 2011

camelize and underscore

CakePHP 的 Inflector Class 裡頭找到這段的程式碼, 非常精簡地寫法!
/**
 * Returns given $lower_case_and_underscored_word as a camelCased word.
 *
 * @param string $lower_case_and_underscored_word Word to camelize
 * @return string Camelized word. likeThis.
 * @access public
 * @static
 */
function camelize($lowerCaseAndUnderscoredWord) {
  $replace = str_replace(" ", "", ucwords(str_replace("_", " ", $lowerCaseAndUnderscoredWord)));
  return $replace;
}
/**
 * Returns an underscore-syntaxed ($like_this_dear_reader) version of the $camel_cased_word.
 *
 * @param string $camel_cased_word Camel-cased word to be "underscorized"
 * @return string Underscore-syntaxed version of the $camel_cased_word
 * @access public
 * @static
 */
function underscore($camelCasedWord) {
  $replace = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $camelCasedWord));
  return $replace;
}

Friday, May 20, 2011

資料快取的概念


class test
{
  protected $_tmp = array();
  
  public function foo()
  {
    $id = '123';
    $tmp = $this->get_tmp($id);
    echo '
';
    var_dump($tmp);
    echo '
'; } public function bar() { $id = '223'; $tmp = $this->get_tmp($id); echo '
';
    var_dump($tmp);
    echo '
'; } public function get_tmp($id) { // 已經有資料時直接回傳 if (count($this->_tmp) > 0) { if (isset($this->_tmp[$id])) { return $this->_tmp[$id]; } return FALSE; } // 取得資料 $tmp = array( '123' => array('id' => '123', 'name' => 'xdy'), '223' => array('id' => '223', 'name' => 'xdasdfsafdy'), '323' => array('id' => '323', 'name' => 'xsdfsdfdy'), '423' => array('id' => '423', 'name' => 'xsadasdasdffdy'), ); // 作快取 $this->_tmp = $tmp; // 檢查是否有需要的資料 if (isset($this->_tmp[$id])) { return $this->_tmp[$id]; } return FALSE; } } $test = new test(); $test->foo(); // 抓取的資料會做第一次的快取 $test->bar(); // 這次就會直接從快取抓資料 $tmp = $this->get_tmp('323'); // 這次也是直接抓快取資料

Saturday, April 16, 2011

Tuesday, March 29, 2011

TIMESTAMP 的使用 memo

查詢某個 TIMESTAMP 欄位在一天內的資料

SELECT * FROM table WHERE DATE_SUB(NOW(), INTERVAL 1 DAY) > time
DATE_SUB 的參考文獻
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

TIMESTAMP 的幾種 Default 值:
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

Monday, March 28, 2011

MVC Frameworks Document (1)

./controllers/api_welcomes_controller.php
/**
 * Example Controller
 * 網址範例 http://localhost/api.php?c=api_welcomes&a=index&p[]=p1&p[]=p2
 * 參數 p 是一個矩陣, 可以帶到 action 使用
 * 目前 index 這個 actin 有兩個引數 ($p1 和 $p2)
 * 所以要帶兩個參數 p (p[]=p1&p[]=p2) 來滿足該 action 的引數需求
 */
class STOCK_ApiWelcomesController extends STOCK_AppController
{
  public function index($p1, $p2)
  {
    // using argument example
    d($p1);
    d($p2);
    
    // load model example
    $this->load->model('example');
    $this->m_example->info();
    $this->load->model('example2');
    $this->m_example2->info();
    
    // load config example
    $config = $this->load->config('auth_exception');
    
    // set view data
    $this->view->set('abc.def', 123456);
    $this->view->set('abc.f', 456);
    $this->view->set('abc.def.xyz', 6);
    // render a element
    $this->view->render_element(
      'example',    // element name
      array('test' => 'this is a element test (1).')
    );
    // set veiw layout name
    $this->view->set_layout('');
    // render a layout
    $this->view->render();
  }
}

./models/example.php
class STOCK_Example extends STOCK_AppModel
{
  public function __construct()
  {
    parent::__construct();
  }
  
  public function info()
  {
    $this->load_database();
    d($this->db);
    $this->load_memcache();
    d($this->mc);
    // load model is also avaliable!
    $this->load_model('user');
    d($this->m_user);
  }
}

./views/api_welcomes/index.php
<p>
---------- This is work! ---------- line 2 ----------
</p>
<?php echo d($abc); ?>
<?php
$this->render_element(
  'example',
  array('test' => 'this is a element test (2).')
);
?>

./views/elements/example.php
<div><?php echo $test; ?></div>

在任何地方插入下面的程式, 可以完成事件的處理 (Event Handle), event 的程式放在 ./events/ 下, 檔名即為 event name
include(event('example'));

Wednesday, March 16, 2011

Race Condition of Memcached

最近在思考使用 memcached 時產生的 race condition 的問題, 因此開始 Google 了一些資料, 目前找到最有用的資料莫過於官網上的文件, 原理還算簡單易懂, 但因為沒有使用過這種方案的經驗, 還不知道實際執行的效果為何, 下個月應該就能作實驗了吧, 希望能有不錯的收獲!

Tuesday, February 15, 2011

ZendFrameworks 的技巧 : Zend_Db

// 直接執行 SQL 語法
// 清空 table 資料
$db->getConnection()->exec('TRUNCATE TABLE `foo_bar`');

// update 的 where 語法 1
$where[] = "reported_by = 'goofy'";
$where[] = "bug_status = 'OPEN'";
$db->update('foo_bar', $update_data, $where);
//  WHERE ("reported_by" = 'goofy') AND ("bug_status" = 'OPEN')

// update 的 where 語法 2
$where['reported_by = ?'] = 'goofy';
$where['bug_status = ?']  = 'OPEN';
$db->update('foo_bar', $update_data, $where);
//  WHERE ("reported_by" = 'goofy') AND ("bug_status" = 'OPEN')

// quote 語法
// quote where statement
$where = $db->quoteInto('mkey = ?', $key);
$db->update('foo_bar', $update_data, $where);

// 取得 insert 後得到的 auto incremental id
$db->insert(...);
$id = $db->lastInsertId();

// 先執行 database 的 transaction, 以避免資料寫入失敗情形的發生
$db->beginTransaction();
try {
  $this->db->insert(...);
  $this->db->update(...);
  // 執行都沒問題後, 進行 database 的 commit
  $this->db->commit();
} catch (Exception $e) {
  // 發生問題時, 執行 database 的 roll back
  $this->db->rollBack();
  // 丟出例外發生的文字
  echo $e->getMessage();
}

Saturday, January 22, 2011

Parkour Flipbook Animation



很有趣的表現手法

Sunday, January 16, 2011

犯錯

最近覺得自己越來越像個robot, 並不只是指自己像個機械一般, 成為社會的一顆小螺絲釘來生活, 而是自己的行為越來越理性, 越來越不想發生錯誤, 思考層面雖然不能算是保守, 但卻一直不敢突破, 最大的原因就是不想犯錯, 也可能是自己思考的範疇越來越廣, 深怕一出問題, 後面會出現一堆該死的垃圾要收拾, 想到就懶, 想到就煩, 所以越來越要求自己零缺失, 零失誤, 只是這樣不就和一只機械人一般, 準確地遵守一切的邏輯, 只做邏輯內辦得到的事情, 而且完全不會犯錯.

這突然讓我想到羅賓威廉斯的 Bicentennial Man, 一個具有自我思考能力的AI, 他在學會犯錯之後成為真正的人類, 我是否走在倒退的路上, 從人類變成一只機械人呢?

Sunday, January 09, 2011

奥井雅美 - only one, No.1

人生中第一次買的日本單曲CD就是這首歌, 突然讓人懷念起高中那段總是有著一股腦衝勁的時候, 看著單曲 CD 的封面, 過了十幾年奧井大姊還是保養得很好呢, 而且一直到現在都還這麼地有活力, 非常地另人尊敬與佩服.

Update: 一時興起就繼續挖了一些懷舊歌出來XD
爆れつハンター (ED) - mask

アキハバラ電脳組 (OP) - Birth

それゆけ!宇宙戦艦ヤマモト・ヨーコII (OP) - そうだ、ぜったい。

少女革命ウテナ (OP) - 輪舞-revolution
找了很久才找到 輪舞-revolution 的 mv, 拍攝地點在 New York City 呢~, 1997 年的作品, 酒釀得越久就是越好喝啊!

スレイヤーズNEXT (ED) - 邪魔はさせない
差點忘記這首「邪魔はさせない」, 這張 CD 封面還真是另人懷念勒 (煙)

スレイヤーズNEXT (OP) - give a reason
既然有「邪魔はさせない」那就少不掉 give a reason 囉, 雖然不是奧井唱的啦...

Saturday, January 08, 2011

Lene Marlin - The Way We Are (Life演唱版)


Lene Marlin 的歌聲從我高中畢業後到現在, 一直都有著很強列的印象, 最近在回顧她的幾張專輯, 在 youtube 上找了一些 mv, 這首 The Way We Are 的 Life 演唱, 多給了我一絲絲與 CD 不一樣的感受, 似乎 Lene Marlin 對這首有著更深一層的感受一般, 帶著豐富的情感來詮釋這首歌的真正意義.

陣内智則 - どこでも一緒パロディ (英語字幕)


Tuesday, January 04, 2011

Monday, January 03, 2011