2009年11月15日 星期日

[FLEX] 四捨五入

用 Math.round( ) 進行四捨五入, Math.floor( ) 和 Math.ceil( ) 進行上下近似值。NumberUtilities.round( ) 方法可自訂取值。

很多情況我們需要得到整數部分而不是帶有小數的浮點數。
比如計算出結果為 3.9999999 ,期望的結果應該是4.0。


Math.round( ) 方法進行四捨五入計算:
trace(Math.round(204.499)); // 顯示: 204
trace(Math.round(401.5)); // 顯示: 402

Math.floor( ) 方法去掉小數部分,Math.ceil( ) 方法去掉小數部分後自動加1:
trace(Math.floor(204.99)); // 顯示: 204
trace(Math.ceil(401.01)); // 顯示: 402
如果我想要把90.337 四捨五入到 90.34,可以這麼寫:
trace (Math.round(90.337 / .01) * .01); //顯示: 9.34
trace (Math.round(92.5 / 5) * 5); // 顯示: 95
trace (Math.round(92.5 / 10) * 10); // 顯示: 90

2009年11月12日 星期四

[PHP] 去除斷行、空白字元方法

移除斷行字元 :
//利用正規表示式將內容的斷行(\r\n)字元去除
preg_replace( "/\s/", "" , $content );

移除空白字元 :
// 移除前後空白字
$str = trim($str);
// 移除重覆的空白
$str = preg_replace('/\s(?=\s)/', '', $str);
// 移除非空白的間距變成一般的空白
$str = preg_replace('/[\n\r\t]/', ' ', $str);


原文出處:
http://uiop7890.pixnet.net/blog/post/22872252

2009年11月10日 星期二

[PHP] SimpleXML 和 DOM 的區別

SimpleXML:

SimpleXML 是另外一種 XML解析方法。SimpleXML 擴展需要用到 PHP5 並包括內置的 XPath 支持。SimpleXML 最適合處理不複雜的、基本的 XML 資料。如果 XML 文檔不是很複雜、層次不深、沒有混合內容,則與 DOM 相比 SimpleXML 更簡單,正如其名稱所暗示的那樣。如果處理的文檔結構是已知的,就會更加直觀。

SimpleXML 具有 DOM 的很多優點,但是編碼更加簡單。它允許輕鬆地訪問 XML 樹,具有內置的驗證機制和 XPath 支援,能夠與 DOM 交互操作,為其提供讀寫 XML 文檔的支援。可以簡單迅速地處理使用 SimpleXML 解析的文檔。但是要記住,和 DOM 一樣,SimpleXML 的易用性和靈活性的代價也是無法向記憶體中載入大型 XML 檔案。



DOM:

根據 W3C 的定義,DOM 標準是 “……一種平臺和語言中立的介面,能夠讓程式和腳本動態地訪問和更新文檔的內容、結構和樣式。

DOM 是基於樹的解析器。DOM 很容易理解和使用,因為其記憶體結構與原始 XML 文檔相似。DOM 通過創建物件樹來向應用程式傳遞資訊,它完全複製了 XML 檔的元素樹,每個 XML 元素都是樹上的一個節點。DOM 是一種 W3C 標準,由於和其他程式設計語言的一致性,對於開發人員來說,為 DOM 增加了不少權威性。因為 DOM 要創建整個文檔的樹,要佔用大量記憶體和處理器時間。

如果由於受設計或者其他因素的限制必須在解析器領域內耍點小聰明的話,則僅僅從靈活的角度來看應該選擇 DOM。使用 DOM 可以構建、修改、查詢、驗證和轉換 XML 文檔。可以利用所有的 DOM 方法和屬性。多數 DOM level 2 方法的實現都有適當的屬性支援。由於非凡的靈活性,使用 DOM 可以解析任意複雜的文檔。但是要記住,如果要把很大的 XML 文檔一次載入到記憶體中,則取得靈活性的代價相當高昂。

[MSN] 強制更新破解

該死的 MSN 更新就更新,沒事來個"強制"更新,不更新就不讓你用,這也太不合理了吧!
所以上網查了有沒有解決方法,看來痛恨更新的人還真不在少數
以下是文章摘錄,詳細的破解方法請參閱

http://sptuner.blogspot.com/2009/09/2009916-msn.html

附註目前破解的版本代號資料如下

前兩碼改成「9.5」的方法在這個月(11月)好像失效了
要改成「14,0,8064,206」
所以,整個的編譯碼應該會轉變為如下
1 VERSIONINFO
FILEVERSION 14,0,8064,206
PRODUCTVERSION 14,0,8064,206
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
BLOCK "040904B0"
{
VALUE "CompanyName", "Microsoft Corporation"
VALUE "FileDescription", "Windows Live Messenger"
VALUE "FileVersion", "14.0.8064.0206"
VALUE "InternalName", "msnmsgr.exe"
VALUE "LegalCopyright", "Copyright (c) Microsoft Corporation. All rights reserved."
VALUE "OriginalFilename", "msnmsgr.exe"
VALUE "ProductName", "Messenger"
VALUE "ProductVersion", "14.0.8064.0206"
}
}

BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0409 0x04B0
}
}

2009年10月27日 星期二

[PHP] 採用 EX4 解析 XML 資料

PHP 解析 XML 資料時,除了可以用原有的 XML Parser 函式讀取之外,也可以利用目前當紅的 EX4(ECMAScript for XML) 方式來讀取,稱作 SimpleXML

簡單範例:

$xmlStr = <<<XML
<pets>
<pet>
<name>Bonzo</name>
<type>Dog</type>
</pet>
<pet>
<name>Fluffy</name>
<type>Cat</type>
</pet>
</pets>
XML;
$xml = new SimpleXMLElement( $xmlStr );
echo 'Name1: '.$xml->pet[0]->name."<br/>";
echo 'Name2: '.$xml->pet[1]->name."<br/>";


結果:
Name 1:Bonzo
Name 2:Fluffy



補充:
何謂 EX4 (ECMAScript for XML) ?

Firefox 1.5 is bring developers a simple extension to JavaScript that makes XML scripting very simple it’s called EX4 (ECMAScript for XML). E4X support is part of JavaScript 1.6, which is delivered with Firefox 1.5. IE developers might be familiar with XML support through the Microsoft MSXML2 library but E4X is much simpler and easier.

EX4 allows you to access XML document with similar syntax to XPath 1.0.
資料來源: http://www.jpkeisala.com/blog/2005/12/08/ex4_ecmascript_for_xml/

2009年10月23日 星期五

[PHP] 解壓縮 ZIP 檔案

因為專案需要利用 PHP 解壓縮 ZIP 檔案,解析裡面的內容
咕狗了一下,發現有一個套件還滿好用的

PclZip (目前版本至 2.8,2,持續更新中..)
還是來做個筆記記錄一下吧!


使用方法 :
1.include 至檔案中,如: include_once( 'pclzip.lib.php');
2.解壓縮目錄記得將寫入權限開啟,如: temp目錄設定為 777

基本用法 :
//view plaincopy to clipboardprint?
require_once('pclzip.lib.php'); 
$archive = new PclZip('archive.zip'); 
$archive->extract(); 

這樣就完成最基本的解壓縮功能,還有其他參數可以設定,見下表

參數
引數
說明
PCLZIP_OPT_PATH
字串
要解壓縮到哪的路徑。可用於extract()、extractByIndex()。

PCLZIP_OPT_ADD_PATH
字串
增加一個目錄。可用於create()、add()、extract()。(使用於create()時,是把要壓縮的檔案放進這個目錄中再壓縮,使用於extract()時,是在要解壓縮的路徑中增加此目錄,並解壓縮到此目錄中)。

PCLZIP_OPT_REMOVE_PATH
字串
移除部份的目錄路徑,例如原本檔案所在的目錄為aa/bb/cc/test.test.txt,但是希望壓縮或解壓縮後的路徑為cc/test.txt, 就可以使用PCLZIP_OPT_REMOVE_PATH,"aa/bb"。可用於create()、add()、extract()、 extractByIndex()。(與PCLZIP_OPT_REMOVE_ALL_PATH一起用的時候會被自動忽略)

PCLZIP_OPT_REMOVE_ALL_PATH
--
移除所有檔案的目錄,所有檔案都會被解壓縮或壓縮到當前或是指定的目錄中,請注意如果有不同目錄的相同名稱檔案,使用此參數時會被覆蓋,此參數不需要引數。可用於create()、add()、extract()、extractByIndex()。

PCLZIP_OPT_SET_CHMOD
CHMOD值
設定解壓縮出來的檔案的CHMOD值。可用於extract()、extractByIndex()。

PCLZIP_OPT_BY_NAME
檔案名稱
僅解壓縮引數中所指定的檔案,檔案名稱可以用陣列或是逗號隔開表示。

PCLZIP_OPT_BY_EREG
RegEx字串
僅解壓縮引數中正規表達式比對檔名正確的檔案,使用php中的ereg()函式比對。

PCLZIP_OPT_BY_PREG
RegEx字串
僅解壓縮引數中正規表達式比對檔名正確的檔案,使用php中的preg_match()函式比對。

PCLZIP_OPT_BY_INDEX
陣列
僅解壓縮引數陣列中各元素所指定順序的檔案。(這個我還不太懂是照什麼順序,似乎不是照字母排)

PCLZIP_OPT_EXTRACT_AS_STRING
--
將一個檔案的內容解壓縮成一個字串,通常可能用於只需要看readme檔案的情況。請注意如果一次解壓縮太多檔案,有可能會將記憶體耗盡。

PCLZIP_OPT_EXTRACT_IN_OUTPUT
--
將一個檔案的內容解壓縮並直接輸出(即類似直接echo此結果)。

PCLZIP_OPT_NO_COMPRESSION
--
將一個檔案加入此壓縮檔內,此檔案不會被壓縮,僅是放入同一個壓縮檔中。

PCLZIP_OPT_COMMENT
字串
建立壓縮檔時增加一個註解,如果原本已經有註解的話,將會直接覆蓋過去。

PCLZIP_OPT_ADD_COMMENT
字串
建立壓縮檔時增加一個註解,如果原本已經有註解的話,將會接在後面。

PCLZIP_OPT_PREPEND_COMMENT
字串
建立壓縮檔時增加一個註解,如果原本已經有註解的話,將會把原先的註解接在此字串的後面。



資料參考來源:
http://itisjoe.pixnet.net/blog/post/14758894
http://support.oss.org.tw/?q=node/147

2009年10月21日 星期三

[工具] 產生 Loading 圖示的網站

剛好看到別人的部落格分享,就隨手記錄一下吧!
工作上正好需要,就不用一直麻煩視覺處理了
其中 Load Info 已經用過一陣子了,效果還不錯,符合大多數的需求
而 Preloaders 剛試玩了一下,提供的樣式明顯多了很多

[CKFinder] 1.3.2 破解方法筆記

CKFinder 在允許你免費使用的同時,視窗始終有一個“This is the demo version of CKFinder. Click here to visit our web site.”的提示。這種情況一般是顯示一個DIV層或table,取消的辦法無非是隱藏或不讓這段內容添加到物件上即可。

經過分析發現 ckffiles.html 中 “” 有很多嫌疑,基本可以確定是放上面那句話的容器,對 ckfinder_ie.js 分析,有鎖定下面代碼 var D=B.createElement('iframe');D.src=bJ;D.frameBorder=0;D.width=D.height='100%';en.call(window,'\x76\x61\162\40\145\106\73');eF=B.getElementById('qu');if ((1==(dK.indexOf(ab.bW.substr(1,1)) % 5)&&window.top[qC+'\143\141\x74\x69\157\x6E'][qF+'\163\x74'].toLowerCase()!=ab.eo)||ab.bW.substr(3,1)!=dK.substr(((dK.indexOf(ab.bW.substr(0,1))+dK.indexOf(ab.bW.substr(2,1)))*9) % (dK.length-1),1)){/*en.call(window,qo);*/};eF.appendChild(D); 我們只需要把紅色部分注釋掉就OK!

文章來源:
http://jiahf.spaces.live.com/blog/cns!52FB5204951A6E9A!453.entry

[jQuery] 幾個不錯的 Plugins (彈出視窗)

對於 colorbox 和 fancybox 這兩者的印象比較好,找個時間再試用套在專案上吧!

2009年10月18日 星期日

[SVN] 執行更新或加入遠端目錄時遇到的問題

錯誤訊息:
org.tigris subversion javahl.ClientException: Working copy not locked;this is probably a bug,please report
svn:Working copy '你的專案目錄' is missing or not locked
原因是eclipse把src資料夾中的.svn資料夾也"編譯"到WEB-INF/classes中去了,而複製過來的.svn中存儲的是src資料夾中的版本資訊,從而導致在更新時出錯。

解決方法:
打開 Eclipse 中的 Project->Properties->Java Build Path 功能表,在右側面板中的"Source"選項卡,在Excluded中加入"**/.svn/**"。
也就是把.svn資料夾從編譯路徑中排除,這樣就不會出現上面的問題了。

---------------------------------------------------------
錯誤訊息:
containing working copy admin area is missing
表示該目錄下 .svn 受損。

解決方法 1:
1. 先將該目錄檔案另外備份 (不含 .svn 底下的東西)
2. 將該目錄以及底下檔案全部刪除
3. svn update
4. 將剛剛備份的資料還原上去

解決方法 2:
1. Click to Team->Clean Up
2. Try again to commit..

2009年10月16日 星期五

[Javascript] 編碼設定

如果 web application 的編碼規則是 utf-8,如網頁頭中的:

<meta http-equiv="Content-Type" content="text/html; charset="utf-8" />

那麼 js 檔中如果有中文輸出就會出現亂碼,解決此個問題可在引用javascript輸出的地方加上charset="utf-8" 或 charset="big5"(假設輸出的是 UTF-8 編碼)。

例:
<script type="text/javascript" language="javascript" src="scripts/output.js" charset="utf-8"></script>

注意:
對應的 js 文件檔案編碼也要儲存成符合設定的編碼語系,如範例為 utf-8 編碼

文章來源:
http://www.cnblogs.com/zgqys1980/archive/2007/11/13/957653.html

2009年10月8日 星期四

[Codeigniter] Codeigniter 整合 AmfPHP

Codeigniter  搭配開發 FLEX 專案時,要如何透過 Amfphp 傳送資料至前端 FLEX 處理呢?
整合步驟如下:

所需套件:
1. Codeigniter 1.7.1 版本以上
2. AMFPHP 1.9 版本以上

整合流程:
1. 先將解壓縮後的 amfphp 資料夾移至 Codeigniter 開發目錄 (預設路徑為 system\application\) 下的 libraries 目錄裡
2. 建立 amfphp gateway controller 檔案  ( amf_gateway.php )

//This file replaces the need for gateway.php
//setup netConnection to ‘/index.php/amf_gateway’
class Amf_gateway extends Controller
{
  public function __construct()
  {
    parent::Controller();
    //Start our library (keep reading the tutorial)
    $this->load->library('amfci');
    //Set new include path for services
    ini_set('include_path', ini_get('include_path') . PATH_SEPARATOR . AMFSERVICES);
  }

//startup the amf gateway service
public function index()
 {
  $this->amfci->service();
 }
} 

3. 建立 amfci_db 檔案至 libraries/amfphp/services/ 目錄下

require_once(BASEPATH.'/../system/libraries/Model.php');


4. 建立 amfci class 檔案至 libraries 目錄下


//This file is the new amfphp library for CI
//It it loaded from the amf_gateway controller, and binds all of it together
class Amfci
{
  public $gateway;
  public $CI;
  public function __construct()
  {
    $this->CI = get_instance();
    require realpath(dirname(__FILE__))."/amfphp/globals.php";
    require realpath(dirname(__FILE__))."/amfphp/core/amf/app/Gateway.php";
    define('AMFSERVICES', realpath(dirname(__FILE__))."/amfphp/services");

    $this->gateway = new Gateway();
    $this->gateway->setCharsetHandler("utf8_decode", "ISO-8859-1", "ISO-8859-1");
    $this->gateway->setLooseMode();
    $this->gateway->setErrorHandling(E_ALL ^ E_NOTICE);
    $this->gateway->setClassMappingsPath(AMFSERVICES.'/vo');
    $this->gateway->setClassPath(AMFSERVICES);

    if(PRODUCTION_SERVER)
    {
      //Disable profiling, remote tracing, and service browser
      $this->gateway->disableDebug();
    }
  }

  public function service()
  {
    $this->gateway->service();
  }
}
 
5.完成以上四個步驟後,基本的 amfphp 整合已大致完成,接下來就是對應前端的 Service 開發過程
 1.首先在 libraries\amfphp\services 下建立 amfphp Service 
2.載入所需的 model class
3.透過 service 繼承 model 取用存取後端資料方法

require_once('amfci_db.php');

// Use this path if you are using a module (ie, MatchBox)
// require_once(AMFSERVICES.'/../../../modules/test_shop/models/product_model.php');
require_once(AMFSERVICES.'/../../../models/product_model.php');
class product_service extends Product_model
{

}
 
6.最後建立 Flex 專案利用 RemoteObject 建立 amfphp gateway 取用 Service 

2009年10月7日 星期三

[SVN] SVN修改遠端登入密碼技巧

以往為了省事快速連線至遠端 SVN 主機,都會預先就把密碼選擇直接儲存,一旦碰到要更換密碼的情況,才發現好像沒有一個快速的介面可以修改,只好用以下的方法

1.開啟 C:\Documents and Settings\用戶名\Application Data\Subversion\auth\svn.simple
2.找出記錄密碼的文件 (一串加密的亂數檔名),並刪除該檔案即可
3.重新連線至遠端 SVN 主機,就會重新要求你再次輸入登入帳號和密碼
    參考文件來源 :
    http://hi.baidu.com/%D2%BC%C2%B7%BF%F1%B1%BC/blog/item/87229736a07fed370b55a9f2.html

    2009年10月6日 星期二

    [新聞] CodeIgniter v1.7.2 Released

    CodeIgniter1.7.2 版本相隔 7個月後終於再次 Release ,有興趣的朋友,可至官方網站下載。

    1.7.2 版增訂修改部分:


    詳細的 Bug 問題修正,請參考官方網站說明
    http://codeigniter.com/user_guide/changelog.html