網頁

2014年2月15日 星期六

Mac學習筆記-將Sites中網頁資料放至dropbox

接續這篇Mac學習筆記-Mac OS X 10.8.x 配置Apache PHP MySQL,今天想將project放在Dropbox,但又希望http的設定仍然存取使用者家目錄下的Sites,這時可以使用soft link的方式,步驟如下:

Step1. 先做連結

ln -s {路徑}/Dropbox/target target

Step2. 所有目錄要開755的權限,底下只做Dropbox及target這兩個目錄的更動記得Dropbox上的所有目錄也要相同權限

chmod 777 Dropbox
chmod 777 Dropbox/target

Step3. 更動apache user conf。

這部分我使用user底下的目錄,所以是在/private/etc/apache2/users底下更動,我個人照Mac學習筆記-Mac OS X 10.8.x 配置Apache PHP MySQL所寫處理,所以設定是在alvin.conf。

vim /private/etc/apache2/users/alvin.conf

在Options最後加上FollowSymLinks,再重開啟apache server即可。


參考網址:
Getting Apache to host Dropbox files on a mac

2014年1月26日 星期日

iOS開發筆記 - iOS6及iOS7的Status bar的Interface問題

在iOS6及iOS7上,最上面的Status bar最大不同就是一個是佔了20px,一個是變成可以使用且讓電池或訊號的影示浮貼在上面。但這就造成一個很大的問題,在iOS6上面看來好好的,到了iOS7上就往上移了20px,在Interface builder上往下調20px,在iOS6上也真的往下調了20px,這真完全不是我要的,而偏偏我沒有用autolayout(說實在是不知道怎使用,跟storyboard一樣難用),找半天發現Interface builder多了底下的調整選項


這部分就是調整兩者間的差距,例如我這邊選的UIImageView的大小是548*320,在iPhone5的iOS6的是正常的,但在iOS7就會整個往上移了20px,所以要像底下這樣設定
Y設20,但iOS 6/7 Deltas的△Y部分要設-20,這樣這UIImageView在這兩個系統中都是在你想要的位置上了。


參考網址:
Supporting iOS 6
iOS 7 is out, but we can't completely forget about iOS 6 just yet.
點我參考Apple的iOS 7 UI轉換指南PDF

2014年1月23日 星期四

iOS開發筆記 -放入舊的SDKs

弄完了PHP的單元測試,回過頭來看看iOS的,下載了最新的xCode 5.0.2(安裝網址)並安裝後,發現整個介面變了,完全是iOS 7的介面。這這這!!!第一個想到的是那SDK 6.0會不會也不在了,開Terminator
$ cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs
$ ls -l

果然剩iOS 7.0了,其實是沒太大的差別,以前也一直都這樣,不過這次改變實在太大,加上舊專案都還在用,還是最好有舊的SDK比較放心,查了下資料,可以去下載以前舊的xcode版本或找出舊版xcode,好在我都有備份,將dmg打開,開Terminator,基本上都是放在/Volumes,目錄名稱叫Xcode
$ cd /Volumes/Xcode/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
$ ls

我這邊是看到iPhoneOS6.1.sdk,所以就
$ mkdir /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk
$ cp -ri iPhoneOS6.1.sdk/ /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk

其他版本也一樣的做法。

How To Support Old iOS SDK’s in Xcode 5文中提到
Update: @rekle points out that it’s possible to get older versions of Xcode from the Downloads area of the Apple Dev Center. Even once Xcode 5 hits the App Store, it should still be possible to get an old SDK version.
有申請開發帳號的人,可以點擊get older versions of Xcode,登入後找以前的版本下載

PS. 建議是在安裝前,先將這目錄下的原SDK都先備份起來,若有同名的,當然是以新的為主

參考網址:
iOS 5 SDK is gone after upgrade to Xcode 4.5
How To Support Old iOS SDK’s in Xcode 5

測試開發學習筆記-PHP篇

從上星期一弄到昨天,將整個從Mac的PHP開發環境安裝一直到WordPress的TDD及BDD的安裝整理完畢,照著整個過程列出,方便自己及大家看。

  1. Mac學習筆記-Mac OS X 10.8.x 配置Apache PHP MySQL
  2. PHPUnit學習筆記-PHPUnit安裝(使用PEAR)
  3. PHPUnit學習筆記-測試的第一步
  4. Wordpress開發筆記-執行WordPress的Unit test的第一步
  5. WordPress開發筆記-一個簡單的WordPress Plugin Unit Test
  6. WordPress開發筆記-使用Selenium測試的第一步
看起來還有很多要再加上去,後續再更新

2014年1月22日 星期三

WordPress開發筆記-使用Selenium測試的第一步

WordPress開發筆記-一個簡單的WordPress Plugin Unit Test這篇寫的是TDD(Test Deriven Develpment),另有一種是BDD(Behavior Deriven Develpment),這次來寫寫BDD的測試。

查了不少資料,看起來都是指向Selenium,另外有Behavior,但看來是給Python用,不知道還有沒有其他的,不過也不想再花時間找了,這邊一樣以WordPress當例子,但只會介紹到環境建好,剩下的就像是在開發WordPress的流程,就由看倌再自己找囉~

開始之前可以先看看這影片How to Use Selenium 2 With PHPUnit。

Step1 安裝Selenium2 Server及phpunit/PHPUnit_Selenium套件

到http://phpunit.de/manual/3.7/en/selenium.html可以找到下載點,如下:

點選"Selenium Server"後,再點選紅框部分,就可以取得jar檔。

執行底下指令將jar檔移到/usr/local及啟動(PS. 在影片中是移到/usr/local/bin,但在mac中,那邊是只有root可以執行的,有點麻煩)
$ sudo mv selenium-server-standalone-2.39.0.jar /usr/local
$ java -jar /usr/local/selenium-server-standalone-2.39.0.jar

接下安裝phpunit/PHPUnit_Selenium,若沒有裝過PHPUnit可以參考PHPUnit學習筆記-PHPUnit安裝(使用PEAR),另外文中提及安裝PHPUnit_Selenium,指令如下
$sudo pear install phpunit/PHPUnit_Selenium

若沒有成功,可能是沒有找到,可以先下底下指令,再執行剛才的指令
$sudo pear channel-discover pear.symfony-project.com 
$sudo pear channel-discover pear.symfony.com

Step2. 安裝好一個WordPress
安裝WordPress的方式,這邊就不多說了,大概流程如下:
下載WordPress繁中版(這裡)
-> 解開後直接放在自己目錄下的Sites,命名為wordpress
-> 建立Database
-> 設定wp-config.php
-> 開啟http://localhost/~alvin/wordpress,做初始設定,按下一步即可。
我這邊網誌是命為Hello WordPress,使用者admin,密碼1234。

Step3. 寫第一個測試
cd ~/Sites/
vim WpSeleniumTest.php
加入底下的程式
<?php
class WpSeleniumTest extends PHPUnit_Extensions_Selenium2TestCase
{
    protected function setUp()
    {
        $this->setHost('localhost');
        $this->setPort(4444);
        $this->setBrowser('firefox');
        $this->setBrowserUrl('http://localhost/wordpress/');
    }

    public function testTitle()
    {
        $this->url('http://localhost/~alvin/longda/');
        $this->assertRegExp('/Hello WordPress/i', $this->title());
    }
}
?>

執行
phpunit WpSeleniumTest.php

得到這結果

這邊就可以看到ok了,另外再測測登入的功能加入底下的程式
public function testLogin()
{
    $this->url('http://localhost/~alvin/wordpress/wp-login.php');
    $form = $this->byCssSelector('form');

    $action_page = $form->attribute('action');
    $this->assertStringEndsWith('wp-login.php',$action_page);
    $this->byId('user_login')->value('admin');
    $this->byId('user_pass')->value('1234');
    $form->submit();

    $this->url('http://localhost/~alvin/wordpress/wp-admin');
    $this->assertRegExp('/Hello WordPress/i',$this->title());
}

再度ok


當然也可以用別的帳密測測,會得到Fail,因為沒登入成功,我這邊是硬要它轉用wp-admin,因為title不是期望的,所以Fail。

PS. 命名php檔要注意,不能用"_"分隔,否則會被取代成"/",而造成找不到檔案。

Selenium預設是只支援FireFox,所以要支援其他browser要另外再安裝其他的WebDriver,可以仔細看看http://docs.seleniumhq.org/download/。

感覺起來,用先用BDD建起一個期望的行為,再建立WordPress的function時,再用TDD的概念將每個function建起它的unit test,就可以建構完整的測試,之後修改就不怕會有side effect,當然超出預期的動作或結果也是會有的,但也可以藉此一個個補強囉

PS. 看到一篇文章不要盲目的 BDD / TDD,我對寫測試的看法,嗯~就看看囉!

參考網址:
Chapter 17. PHPUnit and Selenium
Selenium Downloads
https://github.com/stuartherbert/sublime-phpunit