Friday, July 27, 2012

How to use "git reset"

I found I can use "git reset" when I want to store my changes to the remote git repository temporarily.

Here is a few steps to do that: (assume we are in the "develop" branch now)

a. store
  a.1. git branch temp
  a.2. git checkout temp
  a.3. git commit -m "temporarily changes"
  a.4. git push origin/temp

b. resotre
  b.1 git pull origin/temp
  b.2 git checkout origin/temp
  b.3 git reset origin/develop
  b.4 git push origin :temp # remove the remote temp branch

then, we done! All changes is back to the stages.

Sunday, June 03, 2012

Facebook PHP Optimization

http://sizzo.org/wp/talks
http://www.slideshare.net/shire/php-tek-2008-apc-facebook

Thursday, May 31, 2012

PHP Benchmarking Tools

1. ab: http://httpd.apache.org/docs/2.0/programs/ab.html
2. flood: http://httpd.apache.org/test/flood/
3. Web Capacity Analysis Tool: http://support.microsoft.com/kb/231282

reference: http://phplens.com/lens/php-book/optimizing-debugging-php.php

Sunday, May 13, 2012

Use Event Dispatcher in Symfony2

Just use the code below to get the "event_dispatcher" service, easy!
$eventDispatcher = $this->container->get('event_dispatcher');

Sunday, May 06, 2012

Compile PHP binary with Lua extension on Windolws 7

  1. download and install Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 
  2. download PHP source code (php-5.3.11.tar.bz2) from: http://windows.php.net/download/
  3. download PHP SDK (php-sdk-binary-tools-20110915.zip) from: http://windows.php.net/downloads/php-sdk/
  4. download PHP Dependable libs (deps-5.3-vc9-x86.7z) from: http://windows.php.net/downloads/php-sdk/
  5. download PHP PECL Lua extension source code (lua-0.9.4.tgz) from: http://pecl.php.net/package/lua
  6. download and install Lua 5.1 from http://code.google.com/p/luaforwindows/downloads/list
    install Lua at C:\Lua
  7. create a directory at C:\php-sdk, unzip the php-sdk-binary-tools-20110915.zip into this directory
  8. open Microsoft Windows SDK v7.0 CMD Shell
  9. enter those commands below:
    setenv /x86 /win7 /Release
    cd C:\php-sdk
    bin\phpsdk_setvars.bat
    bin\phpsdk_buildtree.bat php-5.3.11
  10. unzip php-5.3.11.tar.bz2 into C:\php-sdk\php-5.3.11\vc9\x86\php-5.3.11
  11. create a directory at C:\php-sdk\php-5.3.11\vc9\x86\deps, unzip deps-5.3-vc9-x86.7z into this directory
  12. create a directory at C:\php-sdk\php-5.3.11\vc9\x86\pecl, unzip lua-0.9.4.tgz into C:\php-sdk\php-5.3.11\vc9\x86\pecl\lua
  13. back to Microsoft Windows SDK v7.0 CMD Shell, and enter those commands below:
    cd C:\php-sdk\php-5.3.11\vc9\x86\php-5.3.11
    buildconf
    configure --disable-zts --enable-snapshot-build --with-lua=C:\Lua\5.1
    nmake
    nmake snap
  14. go to the directory C:\php-sdk\php-5.3.11\vc9\x86\php-5.3.11\Release, you can get the PHP Winodows Binaries: pecl-5.3.11-nts-Win32-VC9-x86.zip and php-5.3.11-nts-Win32-VC9-x86.zip
  15. enjoy to use the binaries!

troubleshooting:
  1. "ext\calendar\jewish.c(324) : error C2001: newline in constant": open two files: jewish.c and calendar.c, re-save them with UTF-8 encoding.
  2.         cd Release\php-5.4.7
            ..\..\..\..\bin\zip.exe -9 -q -r ..\php-5.4.7-nts-Win32-VC9-x86.zip .
    The system cannot find the path specified.
            cd ..\..
            cd Release\pecl-5.4.7
            ..\..\..\..\bin\zip.exe -9 -q -r ..\pecl-5.4.7-nts-Win32-VC9-x86.zip .
    The system cannot find the path specified.
            cd ..\..
            cd Release\php-test-pack-5.4.7
            ..\..\..\..\bin\zip.exe -9 -q -r ..\php-test-pack-5.4.7.zip .
    The system cannot find the path specified.
            cd ..\..
            cd Release
            ..\..\..\..\bin\zip.exe -9 -q php-debug-pack-5.4.7-nts-Win32-VC9-x86.zip *.pdb
    The system cannot find the path specified.
            cd
    Z:\PHP-SDK\_php54\vc9\x86\php-5.4.7-src\Release
            cd
    Z:\PHP-SDK\_php54\vc9\x86\php-5.4.7-src\Release
            ..\..\..\..\bin\zip.exe -9 -q -r php-devel-pack-5.4.7-nts-Win32-VC9-x86.zip php-5.4.7-devel-VC9-x86
    The system cannot find the path specified.
            cd ..\..


    open Makefile, added a line as below after "PHP_SRC_DIR =C:\php-sdk\php-5.3.11\vc9\x86\php-5.3.11":
    ZIP="$(PHP_SRC_DIR)\..\..\..\..\bin\zip.exe"
memo:
  1. There is no php_lua.dll.
    The lua extension is static only.

reference1: Build your own PHP on Windows
reference2: Windows 中编译 PHP5.4 + xdebug
reference3: /dev/php/php-on-windows
pre-build DLLs: http://downloads.php.net/pierre/

Friday, February 17, 2012

Facebook 檢查是否有點擊讚按鈕 (Likes)

$appId = '1234567890'; // Facebook App Id
$res = $this->facebook->api('/me/likes/' . $appId);
回傳值:
{
  "data": [
    {
      "name": "應用程式名稱",
      "category": "Application",
      "id": "1234567890",
      "created_time": "2012-02-17T07:54:54+0000"
    }
  ],
  "paging": {
    "next": ""
  }
}
use FQL:
$appId = 1234567890;

$query = array(
  'likes' => "SELECT uid, page_id, type, profile_section, 
                     created_time FROM page_fan
              WHERE uid = me() AND 
                    page_id = "' . $appId . '",
);

/**
 * 回傳值
 * $response = array(
 *   array(
 *     'name' => 'likes',
 *     'fql_result_set' => array(
 *       array(
 *         "created_time" => "1329468255",
 *         "page_id" => "1234567890",
 *         "profile_section" => "other",
 *         "type" => "APP",
 *         "uid" => "100000119629520"
 *       )
 *     )
 *   )
 * );
 */
$responses = $this->facebook->api(
  array(
    'method' => 'fql.multiquery',
    'queries' => $query
  )
);
Facebook Javascript Like button click event:
FB.Event.subscribe('edge.create',
  function(response) {
    //alert('You liked the URL: ' + response);
  }
);

Tuesday, January 24, 2012

偵測是否要取得最新版本的 Flash 檔案

Flash loader 在開始取得檔案前, 先用 xxx?v=28172364656 的方式取得一個設定檔, 該設定檔帶的 v={microtime} 其時間單位為 load 檔時的時間郵戳, 以確保該設定檔每次都是 load 到最新的, 再將要取得的檔案列表放在該設定檔內, 每個檔案都用 yyy?v=123458 的方式做版本控制, 這樣應該可以讓 Flash loader 隨時都能取得最新的檔案

Monday, January 02, 2012

Doctrine2 ORM add query result cache and delete cache

// add query result cache
$query = $this->createQueryBuilder('i')
              ->where('i.delete = false')
              ->getQuery();
$query->useResultCache(true, 3600, 'allItems');
$items = $query->getArrayResult();

// delete cache
$em->getConfiguration()
   ->getResultCacheImpl()->delete('allItems');

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"