2009-10-21 php copy array

我的code 很簡單, 做test driven development 寫test的時候
pass in 的data 很多時候都要重用
只是其中一個field 的值修改, 其餘的都不變
所以:

<?php
function testSubmit(){
//init. data
$data = array(
   
'user' => 'abc',
   
'password' => 'def',
);

//copy array
$test = array_merge($data);
//change value
$test['user'] = '';
//test
$this->assertTrue(foo($test));

//copy again
$test = array_merge($data);
//change value
unset($test['user']);
//test
$this->assertTrue(foo($test));
}
?>

那我便可以方便的修改pass in 的data (只修改一個地方)

重點是, array 的複製要使用 array_merge()...

2009-09-11 Drupal.org module list RSS

Drupal.org 的 module list 不知道為什麼沒有 RSS feed 提供
一直想知道最新的 module 豈不要天天造訪 http://drupal.org/project/modules?solrsort=ds_project_latest_release%20desc ?

將網頁轉為 RSS: google convert pages to feed
第一個便提供答案了
feed43.com

免註冊, 免個人資料
只是設定 feed 的內容可能對一般使用者有一點點難度
但相比 reg. exp. 真的是小巫見大巫

教學就免了, 直接提供 feed url:
http://feed43.com/0381225752022813.xml

2009-09-10 form to email 2分鐘完成

近來因為真的因為太多案子
這邊很久有update 了

又因為真的太多案子
古怪, 快速, 而又欠缺美感的想法, 一直被我無情的實現了

要求:
表單轉成email

解說:
signup module 不夠欄位, 功能不足
修改又花時間
非 Drupal, framework 的方案又不夠快, 不夠髒
反正沒有要求 email 的整潔程度.......

cck + rules 一口氣完成
cck 定義所需的 fields,
rules 設定新的 node submit 便 send email
再用 token 在 email 的內容做手腳, 將 submit 的 node 連fields 都輸出
設定真的只用了 2分鐘!

2009-08-08 htmlentities() 和 html_entity_decode()

htmlentities() 和 html_entity_decode()

htmlentities()
http://www.php.net/manual/en/function.htmlentities.php

功能上很簡單, 就是將 < 變作 &lt;
當然, 還有其他的entities, 可以參考: http://www.w3schools.com/html/html_entities.asp
主要是給使用者輸入的 entities 會 escape, 輸出的時候便可以直接使用

另一方面,

我的一個project 會使用 file_get_content() 來使用 http 下載某些相關的網頁,
然後抽取其中內容顯示
但 <title> 中的entities 不會被瀏覽器 decode, 所以便會使用到:

html_entity_decode()
http://www.php.net/manual/en/function.html-entity-decode.php

其實是 htmlentities() 的相反

edit: 2016-11-01 broken link

2009-07-17 svn tagging and branching

svn 是一種使用之前會討厭,
但使用過以後你已經不能缺少的開發環節 (情況和測試驅動開發(TDD)一樣)

在"使用過" 並愛上的青況之下,
你很容易便會提起興趣學習進階的 branch 和 tag 的功能了
但如果沒有, 直接跳過就好了

對於使用者來說, tag 和 branch 建立之後, 你會發現 svn 好像複製了 trunk 的檔案到另一個地方
所以你的在 trunk 的 commit 不會對tag 和 branch 的資料做成影響, 相反如是
如果你瀏覽你的 repo, 你便可以發現你的 code 都在 trunk 資料夾之下(如果正常的設定之下)
上一層便可以看到 tags 和 branches 資料夾, 甚至是 releases 資料夾

但tagging 並不會對你的檔案系統和硬碟做成壓力
因為它只會建立連結到 tags, 而不會建立另一組的檔案
另一面說, 就是 svn 提供一個快速的 tag 和 branch, 令你樂於使用, 就好像 commit 一樣

從底層技術的層面來說, tagging 和 branching 是一樣的
唯一的不同是我們, 或者開開發團隊使用的方法和習慣
簡單說, branching 是分作一個階段的除蟲, 可以是一個新加的一個功能, 一些大型的功能上, 或者結構上的修改
相反, tagging 便隨意得多
我會建立日期 tag, 在我將我的code 上傳到共用開發機做相容性測試之前
以確保我可以快速拿回前天的上傳, 令共用的開發機不會因為我今日的 code 而影響到其他人的測試, 開發
當然, 你也可以因應你的需要而建立不同的 tag

最後提示一下, 假如你轉到 branches 或 tag 工作的話
記得要轉回trunk, 否則你的 commit 到會轉到 tag 或 branch 旗下了

Svn is a thing that you will hate it before use,
but cannot live without after first trial. ( same as test driven development here.)

With such environment, you will got the interest to use and learn tagging and branching.
But if not, just skip this blog post.

Tagging is cheap in CPU time and hardisk space.
It just create links to tagged versions of files, which do not create some extra files copies.
In return, svn provide a speedy tagging and branching, which will not block the development process, just like commits.
Tag and branch act like copying your trunk to another folder (although it is not real in file system, stated above),
so you have separate versions of code and their commit will not affect each other.
If you browse the repo of your head, most probably you will find your code live in trunk folder.
Moving up a level, you will find tags and branches folder, an in some config, even a releases folder.

In real backend, tagging is the same as branching, techically.
But like we do commit in trunk, we do tagging in tags folder and branch in branches folder.

So the only difference is how we, or the team, is using it as common practises.
In simple, branching is for bug fix of releases, new major function added, which is usually a huge change in structure or functionality.
But tagging is more "relax".
I will tag codes with datetime, before deploy to staging server, so I can always revert to previous deploy status on staging server.

But last to remind, if you have encountered so case you want to switch to branches or tag version,
remember to switch back to trunk or you will commit to branches instead of normal working trunk version.

Enjoy svn!

Pages

Google