2011/12/31

Love You Guys

今年的生日親朋好友齊聚一堂吃飯慶祝,給了我好多好多驚喜。

LBJ's Birthday

12/30 是 Lebron James 的生日,今天早上他為我贏得了一場比賽,love you LBJ!!!

LBJ Jersey

首先是 Max Girl 特地去幫我找的 LBJ 2XL 球衣,我非常喜歡 Lebron James 這位球員,但跑遍台北的體育用品店只找到 XL 的,當初把這件 Jersey 當作一個減肥的目標,等瘦身到一定的程度才能披上這件戰袍,但瘦到可以穿的程度時又捨不得穿,本想跟雅雯討論再買一件假的來穿,沒想到 Max Girl 會讀心,幫我買了一件真的 XD

阿建大師親筆繪製圖片

收到時候真的非常感動,阿建大師最近如火如荼的趕他的新作品,要在年前上市,在如此繁忙有限的時間內可以幫我製作這個世界上不會再有第二樣的生日禮物,從小到大的死黨情誼不是三言兩語可以形容。

賤人的 T-Shirt

其實跑了公館跟其他地方的體育用品店好幾次,一直想買一件 LBJ 的衣服,也是苦於找不到適合的 size 所以衣櫃又躺了一件目標衣,我知道我的 size 很難找,Nike 雖然是運動品牌但大號的衣服相當少,兄弟,辛苦了。

大妹跟雅雯的愛

LBJ 的鞋子是我夢寐以求的鞋款,雖然我很喜歡他,但一雙破 5K 的鞋子我實在花不下手,多謝我妹跟雅雯幫我完成這個小心願,到此刻我打文章的時候還是覺得像在作夢,感覺很不真實,但要我穿出去打球還要掙扎一下,雅雯欠我的紙紮鞋可以抵銷了 XD

其實收到禮物的大小以及價格並不是最重要的,重點是你身邊的親友對你的關心以及付出,每樣東西都是細心了解並且放在心上才能這樣的讓我備感溫暖,也謝謝小妹跟老媽、小新、滷蛋還有小蘋果特地撥空前來,今天溫度不高,但我的心真的很暖,除了謝謝,真的還是謝謝。

Love You Guys and Go MIAMI!!!

2011/12/26

MySQL 撈取限定時間資料的方法

DATE_SUB

DATE_SUB(date,INTERVAL expr unit)

某些 case 需要撈出一個區間來限制行為,例如投票,可能一個 ip 一天只能一票,或者十分鐘只能一票,因此資料庫必須記錄 ip 以及建立的時間,以此 ip 來篩選是否存在於現時限的區間內,若有找到,則予以通知無法投票,實際的做法如下:

$sql  = sprintf("SELECT * FROM table WHERE ip = %s AND build_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE))
    ,$_SERVER['REMOTE_ADDR']);

我們用了 MySQL 的 function DATE_SUB 來完成篩選的條件,這個 case 是以此 ip 來找出十分鐘內是否有相符的資料,由於 MySQL 官方建議盡量不要運算欄位,所以我們針對 MySQL 內建的函式 NOW() 來加以運算。

DATE_ADD

DATE_ADD(date,INTERVAL expr unit)

DATE_SUB 的兄弟叫 DATE_ADD,是針對日期做相加的動作,以這個例子來舉一反三的話,會變成下面的結果。

$sql  = sprintf("SELECT * FROM table WHERE ip = %s AND DTE_ADD(build_date, INTERVAL 10 MINUTE)) > NOW()
    ,$_SERVER['REMOTE_ADDR']);

當然還是依照建議盡量不要在欄位上做運算。

官方的時間格式表

unit Value Expected expr Format
MICROSECOND MICROSECONDS
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
SECOND_MICROSECOND 'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND 'MINUTES:SECONDS.MICROSECONDS'
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_MICROSECOND 'HOURS:MINUTES:SECONDS.MICROSECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_MICROSECOND 'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

2011/12/20

MySQL 多個欄位整合為同一欄位

今天 case 遇到一個問題,會員的 table 有三個欄位,分別記錄了寶寶 A、寶寶 B、寶寶 C 的生日年分,後台需要所有的生日年分統合當作下拉選單去篩選,如果只有一個欄位的話還好辦,直接 SELECT 並且 GROUP 就做掉了,但今天有三個欄位要組成一個選項叫要點技巧了,解法如下。

tbl_year
y_id 索引
y_y1 年份 1
y_y2 年份 2
y_y3 年份 3

方法一:建立 tempory table

DROP TABLE IF EXISTS temp_year;
CREATE TEMPORARY TABLE temp_year (
    t_year INT
) ENGINE = MyISAM ;

INSERT INTO temp_year
SELECT y_y1 FROM tbl_year;

INSERT INTO temp_year
SELECT y_y2 FROM tbl_year;

INSERT INTO temp_year
SELECT y_y3 FROM tbl_year;

SELECT * FROM temp_year GROUP BY t_year ORDER BY t_year DESC;

方法二:使用 union 大法

SELECT y_y1 AS theYear FROM tbl_year
UNION
SELECT y_y2 FROM tbl_year
UNION
SELECT y_y3 FROM tbl_year
ORDER BY theYear DESC

這兩種方式會得到相同的結果

2011/12/15

我愛死橘子工坊

最近我真的瘋狂愛上橘子工坊的產品,為什麼我會這麼喜歡橘子工坊,我歸類出幾點:

  1. 恨化學、愛天然這句 slogan 對我來說大中
  2. 每個產品都是白底設計配上幾個大字,然後主視覺是一顆橘子,也滿合我胃口的
  3. 產品用完有淡淡的橘子香味,我很喜歡這個味道

碗盤蔬果洗潔精
碗盤蔬果洗潔精

這是我第一個橘子工坊的產品,當初在頂好看到就很喜歡了,沒想到買回來用的效果這麼好。

天然溫和洗手乳
天然溫和洗手乳

因為買了很貴的 CHERRY 鍵盤,所以我通常在使用鍵盤之前會用濕紙巾或洗手乳清潔一下手,一般的洗手乳洗完會有一種油油的感覺,但橘子工坊不會,而且再次重複提到,有淡淡的橘子香味 XD

超氧活力去漬粉

這是我目前用到覺得最威的,我習慣每天喝 2000 到 3000 cc 的茶,平常泡茶用的水瓶其實滿容易積茶垢的,而且有的部分不管用什麼工具都很難擦拭,但我買了這個產品之後,用「浸泡」的方式他直接就幫我把茶垢分解掉了。

之前在 fb 發問過關於牆壁上黑色的髒污怎麼清潔,一般得到的答案都是必須粉刷,但我用了玻璃硬面那瓶居然順利把髒污擦掉了,真的挺神奇的。

2011/12/12

2011/12/11 福壽山之旅

Flickr 相簿

計畫了很久的福壽山賞楓計畫,因為連日下雨延宕了很久,2012/12/11 這天我們終於成行。

開了近五小時的車,大家都累壞了,小歇片刻以後在一間旅館吃早餐
親親

山上有點下雨,不知道要等多久,索性就拍拍旅館附近的場景
亂拍

這間旅館叫做合法旅館
合法旅館

雨看起來沒有要變小的趨勢,所以不想等待了,直接出發
一大片楓葉

楓葉的 close up 來一張
楓葉 close up

著名的拍照景點
景點

各式各樣顏色的楓葉
紅色楓葉

剪影
剪影

有沒有日本的 fu
小木屋跟親親

人挺多的

另一種顏色

人跟景融為一體

迷人的散景,想買 K5

賤人

超猛 Max,開了 10 幾個小時的車

因雨結成的露珠,我是覺得即便是下雨
也可以當作是一種不期而遇,我的照片 因此跟別人有了不同

福壽山有一棵樹叫蘋果王,樹上有幾十種蘋果

網路上說福壽山必去的景點,照片看看就好

2011/12/06

跟隨鼠標的浮動視窗

要做出一個浮動視窗很簡單,但要加上判斷現在邊界在哪邊來因應相對位置就要下點功夫了,除了要抓出目前點選物件跟視窗的相對位置,還要加上對卷軸距離的判斷,否則就會出現像下圖的情況。

float div with cursor

Chrome Firefox IE Opera Safari

<!DOCTYPE HTML>
<html>
<head>
    <meta charset=utf-8">
    <title>Cursor</title>
    <style type="text/css" media="screen">
    #floatdiv {
        position: absolute;
        top: 0;
        left: 0;
        border: 1px solid;
        width: 200px;
        height: 50px;
        display: none;
        background: #FFFF00;
        z-index: 100;
    }
    </style>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.2.min.js"></script>
    <script type="text/javascript">
        $(function() {
            var $div = $('#floatdiv');

            $('[name="btn"]').click(function(e) {
                var $wH = $(window).height(),
                    $sT = $(window).scrollTop(),
                    $pT = $(this).position().top,
                    $dH = $div.height(),
                    $eY = e.pageY,
                    $wW = $(window).width(),
                    $sL = $(window).scrollLeft(),
                    $pL = $(this).position().left,
                    $dW = $div.width(),
                    $eX = e.pageX;

                $top = ($wH-$pT+$sT < $dH) ? ($eY-$dH) : $eY; 
                $left = ($wW-$pL+$sL < $dW) ? ($eX-$dW) : $eX; 

                $div
                    .css({left: $left, top: $top})
                    .show();
                return false;
            });

            $div.click(function(e) {
                // 點擊 div 本身不觸動消失
                e.stopPropagation();
            });

            $(document).click(function() {
                // 點擊任一物件使 div 消失
                $div.hide();
            });
        });
    </script>
</head>
<body>
    <div id="floatdiv"></div>
    <a href="#" name="btn">click me</a>
</body>
</html>

2011/12/05

I am Mr. Google

Mr. Google

其實最近過得不是很開心,本來不知道為什麼思緒莫名的清晰,在短時間內做了很多之前想要研究的內容,也開發了一直以來沒有時間付諸實現的程式,團隊裡面也加入了有力可靠的夥伴,但總是還是有莫名的一些事情在影響心情,人生不如意事十有八九,但希望阻力與助力在互相拉扯的時候,自己能夠盡快的調適跟尋找平衡點,還好有大神陪我解悶,加油!

2011/11/29

PHPExcel

PHPEcel
PHPExcel API

PHPExcel 是我用過最久最強大的 PHP 檔案轉成 Excel 檔案的套件,簡單介紹一下我常用到的方式,PHPExcel 可以儲存成 Office 2007 的格式,但有鑑於流通性的問題,下方的範例將格式存成 2003 的版本。

include_once 'lib/PHPExcel.php';
$excel = new PHPExcel();
$excel->setActiveSheetIndex(0); // 選擇sheet
$excel->getActiveSheet()->setTitle('sample'); // 將sheet命名
$excel->getActiveSheet()->SetCellValue('A1', 'Hello'); // 設定內容
$type = PHPExcel_Cell_DataType::TYPE_STRING;
$excel->getActiveSheet()->getCell('B1')->setValueExplicit('0966666666', $type);
// PHPExcel 可以選擇 Excel 的欄位格式
// 將格式轉成 string 可以避免像手機開頭的 0 自動忽略的問題
$excel->getActiveSheet()->getColumnDimension('A1')->setWidth(20); // 設定寬度

// 如果你無法預知欄位多寡,可以用動態的方式放置資料
for ($i = 2; $i < 5 ; $i++) {
    for ($j = 0; $j < 2; $j++) {
        $excel->getActiveSheet()->setCellValueByColumnAndRow($j, $i, 'test');
        $excel->getActiveSheet()->getCellByColumnAndRow(1, $i)->setValueExplicit('0966666666', $type);
    }
}

// 下載
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="sample.xls"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($excel, 'Excel5');
$objWriter->save('php://output');

2011/11/24

CKEditor

FCKEditor 是我早期一直用到現在的編輯器,該官網出了新產品 CKEditor 頗久,但一直沒時間摸,最近打算開始使用新玩具,寫下一些筆記來使用。

CKEditor 官方網站

CKEditor api 網站

CKEditor 基本框架

我在 config 裡面定義了自己的 toolbar 叫 chan

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="ckeditor/ckeditor.js" type="text/javascript"></script>
    <script src="ckeditor/config.js" type="text/javascript"></script>
</head>
<body>
<textarea id="editor" name="editor" rows="10" cols="30"></textarea> 
<script type="text/javascript">
    CKEDITOR.replace('editor');
</script>
</body>
</html>

jQuery 導入

ckeditor 有整合 jQuery 的插件,可以利用 jQuery 導入。

<!DOCTYPE HTML>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="js/jquery-1.6.2.min" type="text/javascript"></script>
    <script src="ckeditor/ckeditor.js" type="text/javascript"></script>
    <script src="ckeditor/adapters/jquery.js" type="text/javascript"></script>
    <script src="ckeditor/config.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function() {
            $('#editor').ckeditor();
        });
    </script>
</head>
<body>
<textarea id="editor" name="editor" rows="10" cols="30"></textarea> 
</body>
</html>

config 基本定義

CKEditor 不像 FCKEditor 是修改他預設的 js 檔案,而是自己定義一個檔案並且透過 api 決定你要使用的內容,我定義了我認為比較用的到跟客戶比較不會出錯的按鈕,並且將 enter 的預設模式改為 br,還有加上開啟圖片上傳的功能。

/*
Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/

CKEDITOR.editorConfig = function( config )
{
    config.toolbar = 'chan';
    config.toolbar_chan = 
        [
            {name:'document', items:['Source','-','Preview','Print']},
            {name:'clipboard', items:['Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo']},
            {name:'editing', items:['Find','Replace','-','SelectAll','-','SpellChecker', 'Scayt']},
            {name:'basicstyles', items:['Bold','Italic','Underline','Strike','Subscript','Superscript','-','RemoveFormat']},
            '/',
            {name:'paragraph', items:['NumberedList','BulletedList','-','Outdent','Indent','-','Blockquote','CreateDiv','- ','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','BidiLtr','BidiRtl']},
            {name:'links', items:['Link','Unlink','Anchor']},
            {name:'insert', items:['Image','Table','HorizontalRule','SpecialChar','PageBreak']},
            '/',
            {name:'styles', items:['Format','Font','FontSize']},
            {name:'colors', items:['TextColor','BGColor']},
            {name:'tools', items:['Maximize']}
        ];
    config.enterMode = CKEDITOR.ENTER_BR;
    config.filebrowserImageUploadUrl = 'upload.php';

    // 如果你要更換外觀,只要設定 skin 即可
    // 官方有 v2、office2003 以及 kama 三種預設的 skin
    config.skin = 'v2';
};

toolbar 名稱翻譯,來自阿忠伺服器

Source:原始碼
Save:儲存
NewPage:開新檔案
Preview:預覽
Templates:樣版
Cut:剪下
Copy:複製
Paste:貼上
PasteText:貼為文字格式
PasteFromWord:自 word 貼上
Print:列印
SpellChecker:拼字檢查
Scayt:即時拼寫檢查
Undo:復原(上一步)
Redo:重複(下一步)
Find:尋找
Replace:取代
SelectAll:全選
RemoveFormat:清除格式
Form:表單
Checkbox:核取方塊
Radio:選項按鈕
TextField:文字方塊
Textarea:文字區域
Select:選單
Button:按鈕
ImageButton:影像按鈕
HiddenField:隱藏欄位
Bold:粗體
Italic:斜體
Underline:底線
Strike:刪除線
Subscript:下標
Superscript:上標
NumberedList:編號清單
BulletedList:項目清單
Outdent:減少縮排
Indent:增加縮排
Blockquote:引用文字
JustifyLeft:靠左對齊
JustifyCenter:置中
JustifyRight:靠右對齊
JustifyBlock:左右對齊
Link:插入/編輯超連結
Unlink:移除超連結
Anchor:插入/編輯錨點
Image:插入影像
Flash:插入Flash
Table:插入表格
HorizontalRule:插入水平線
Smiley:插入表情
SpecialChar:插入特殊符號
PageBreak:插入分頁符號
Styles:樣式
Format:格式
Font:字體
FontSize:大小
TextColor:文字顏色
BGColor:背景顏色
Maximize:最大化
ShowBlocks:顯示區塊
About:關於 CKEditor

圖片上傳

CKEditor 的圖片上傳需要自己定義跟撰寫,個人覺得這樣比較好,提供比較大的彈性,下方是 CKEditor 上傳用 PHP 的基本架構。

// Required: anonymous function reference number as explained above.
$funcNum = $_GET['CKEditorFuncNum'] ;
// Optional: instance name (might be used to load a specific configuration file or anything else).
$CKEditor = $_GET['CKEditor'] ;
// Optional: might be used to provide localized messages.
$langCode = $_GET['langCode'] ;

// Check the $_FILES array and save the file. Assign the correct path to a variable ($url).
$url = '/path/to/uploaded/file.ext';
// Usually you will only assign something here if the file could not be uploaded.
$message = '';

echo "";

我使用了 class.upload.php 當作我的上傳套件,下方是我修改的結果。

// Required: anonymous function reference number as explained above.
$funcNum = $_GET['CKEditorFuncNum'] ;
// Optional: instance name (might be used to load a specific configuration file or anything else).
$CKEditor = $_GET['CKEditor'] ;
// Optional: might be used to provide localized messages.
$langCode = $_GET['langCode'] ;

// Usually you will only assign something here if the file could not be uploaded.
$message = '';
$url = '';
$newName = date('YmdHis'); // 新檔案名稱
$dir = 'uploads/editor/'; // 預設目錄
$width = 600; // 定義寬度

include_once 'libs/class.upload.php'; // 使用 upload class
$foo = new Upload($_FILES['upload']);
if ($foo->uploaded) {
    $foo->file_new_name_body = $newName;
    $foo->image_resize = true;
    $foo->convert = 'jpg'; // 轉換為 jpg
    $foo->jpeg_quality = 100;
    $foo->image_x = $width;
    $foo->image_ratio_y = true;
    $foo->process($dir);

    if ($foo->processed) {
        $url = $dir.$newName.'.jpg';
    } else {
        $message = $foo->error;
    }
} 

echo "";

PHPMailer

PHPMailer 是 PHP 一個歷久彌堅的 mail class,有強大的功能,在這邊介紹他簡單的用法。

include_once 'libs/class.phpmailer.php';
$mail = new PHPMailer;
$mail->SetLanguage('zh', 'libs/lang/'); // 設定語言
$mail->CharSet ='UTF-8'; // 設定預設編碼
$mail->Encoding = 'base64'; // 設定文字編碼
$mail->IsHTML(true); // 使用 HTML 格式
$mail->From = 'sender@gmail.com'; // 寄件者 Email
$mail->FromName = 'name'; // 寄件者名字
$mail->Subject = 'subject'; // 主題
$mail->Body = 'contents'; // 內容
$mail->AddAddress('receiver@gmail.com', 'receiver'); // 收件者 Mail
if ($mail->Send()) {
    echo '寄出';
} else {
    echo $mail->ErrorInfo;
}
$mail->ClearAddresses(); // 如果你要在迴圈跑寄信,使用這個函式可以清除收件者

// 如果你要自己設定 SMTP,此時要 include class.smtp.php
$mail->IsSMTP();
$mail->SMTPAuth = false;
$mail->Host = 'msa.hinet.net';
$mail->Port = 25;

// 如果是需要驗證的 Server
$mail->SMTPAuth = true;
$mail->Username = 'username';
$mail->Password = 'password';

2011/11/17

CentOS 6 修改網路卡參數

一般來說修改網路卡有兩種方式,一個是用 ifconfig 指令

ifconfig eth0 192.168.1.12 broadcast 163.26.1.255 netmask 255.255.255.0

另一種是直接修改系統的檔案

/etc/sysconfig/network-scripts/ifcfg-eth0
# 檔案路徑,可以使用 vi 或 vim 來編輯

參數

  • DEVICE=eth0 這個裝置的名稱;
  • BOOTPROTO=static 使用我們給的網路名稱(若為浮動 IP 則為 dhcp )
  • BROADCAST=192.168.1.255 這是節點的網域;
  • IPADDR=192.168.1.12 這是這塊網路卡的位址;
  • NETMASK=255.255.255.0 子遮罩網路;
  • ONBOOT=yes 開機自動開啟網路卡。
  • DNS1=168.95.1.1 DNS

完成之後可以使用指令重新啟動網路服務

service network restart
/etc/init.d/network restart
# 兩個取其一使用即可

如過要啟用或關閉網路卡,可以用 ifup 跟 ifdown 兩個指令

ifup eth0
ifdown eth0

2011/11/16

微軟到底可以多蠢?

之前申請 hotmail,完全就是為了申請 MSN 帳號,hotmail 除了讓我註冊一些日後應該也不會去的網站,作為驗證身分的作用之外,平常是完全沒在用的,可是平常有些 msn 的朋友會把信寄到我的 hotmail,應該是直接從帳號點選寄發,所以常常得花告知的力氣,請他們把東西寄到我的 Gmail。

有一天忘記在哪邊逛到,msn 可以增加 email 信箱進去帳號,我想說微軟終於開始投入於人性化這件事,應該也意識他們的 webmail 有多難用,於是我興沖沖的要加入我的 gmail,但智障的事情從此每天輪迴。

ask to add email

從我真的忘記在哪邊申請加入以後,msn 就會三不五時跳出這個問題,為什麼不一次把它弄好,看下去你就知道。

msn login page

點選了連結以後導到微軟的登入頁面,這很合理啊,msn 是 ap,你要用 website 的功能當然要先 login,於是我輸入了我的帳號以及密碼,按下登入。

ask login again

然後應該可以加入新的 email 了......啥!沒有登入,要再登入一次?於是我點選右上方的登入,結果又跑到同樣的畫面,微軟啊微軟,我實在太低估你的愚蠢能力了,

或許你會說怎樣怎樣就可以,但為什麼我加一個 email 進去 msn 帳號這個普通到不能再普通的動作還要怎樣又怎樣才可以,我有試過先在瀏覽器登入後再在 msn 上點選連結,一樣把你導到登入畫面,我只能說,微軟,你繼續吃屎吧。

deck.js 簡介

http://imakewebthings.github.com/deck.js/

deck.js 是最近很受歡迎的 slide 製作方式,使用 HTML 5 的架構來製作投影片,只要載入他的核心 JavaScript 以及布景的 CSS,就可以構成最陽春的 slide 版本,他另外提供了一些用於場景變換的 transition 以及 extension,搭配使用就有很好的轉場效果,簡單介紹一下他的使用方式。

場景變換

目前官方提供了 4 個場景。

neon

neon

none

none

swiss

swiss

web-2.0

web-2.0

只要 include 該同名的 JavaScript 以及 CSS,程式會自己偵測運行。

Transition

目前官方提供了三種特殊變換方式,只要載入同名的 CSS 檔案便可以使用。

  • fade - 淡入淡出
  • horizontal-slide - 平行切換
  • vertical-slide - 垂直切換

Extension

  • deck.goto: 按下 g 之後,可以輸入數字前往指定的 slide 頁面
  • deck.hash: 將每個有指定 id 的 slide 於網址後方加入 anchor,這樣可以便於提供別人某個指定的網址,以觀看指定的 slide 頁面
  • deck.menu: 按下 m 之後,可以將所有的 slide 切換為縮圖選擇模式(大推)
  • deck.navigation: 增加可以點選左右切換頁面的按鈕
  • deck.status: 呈現目前以及所有頁面的數字編號

相關的使用方式都在這邊:http://imakewebthings.github.com/deck.js/docs/

直接用實際的例子一步一步來完成投影片

這是最基本的 HTML 5 架構,現在要來 include 我需要的格式

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>my first deck.js slide</title>
</head>
<body>

</body>
</html>

完成了初步的布局

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>my first deck.js slide</title>
<!-- core CSS -->
<link rel="stylesheet" type="text/css" href="css/deck/deck.core.css">
<link rel="stylesheet" type="text/css" href="css/deck/deck.hash.css">
<link rel="stylesheet" type="text/css" href="css/deck/deck.navigation.css">
<link rel="stylesheet" type="text/css" href="css/deck/deck.menu.css">
<link rel="stylesheet" type="text/css" href="css/deck/deck.status.css">

<!-- theme and transition CSS -->
<link rel="stylesheet" type="text/css" href="css/deck/web-2.0.css">
<link rel="stylesheet" type="text/css" href="css/deck/fade.css">

<!-- include js -->
<script type="text/javascript" src="js/jquery-1.7.min.js"></script>
<script type="text/javascript" src="js/deck/deck.core.js"></script>
<script type="text/javascript" src="js/deck/deck.hash.js"></script>
<script type="text/javascript" src="js/deck/deck.navigation.js"></script>
<script type="text/javascript" src="js/deck/deck.menu.js"></script>
<script type="text/javascript" src="js/deck/deck.status.js"></script>
<script type="text/javascript" src="js/deck/modernizr.custom.js"></script>
<script>
$(function() {
    $.deck('.slide');
});
</script>
</head>

<body class="deck-container">

<!-- navigation extension --> 
<a href="#" class="deck-prev-link" title="Previous">&#8592;</a> <a href="#" class="deck-next-link" title="Next">&#8594;</a> 

<!-- status extension -->
<p class="deck-status"> <span class="deck-status-current"></span> / <span class="deck-status-total"></span> </p>
</body>
</html>

Hi, this is my first slide

first slide

Introduce

Here is the introduce

  • first: first content
  • second: second content
  • third: third content

intro

我們指定了 .slide 給 deck 辨別,所以所有 class 等於 deck.js 的都會視為投影片,在同一個頁面你想要訊息依次出現的話,只要使用巢狀的結構,將所有內容加上 slide 的 class 屬性 就可以達成,使用一些 HTML 語法會產生不同的預設 layout,如 h1 - h6、pre、cite 等等,也可以搭配自己設計的 CSS 來布置你要的樣式,是不是很有趣呢。

2011/11/14

PHPConf 2011

PHPConf 2011

有幸參與第一屆。

PHPConf place

這是台灣第一次有人舉辦跟 PHP 有關的 conference,並且到場人數超過百人,算是台灣一場程式界很大的聚會,場地也很棒,在平常一般人無法進入的中研院會議室,因為有幸報名到這次的聚會,也沾光進了中研院的 conference room,感受一下一堆奇人平常在這邊開會的氣氛,硬體設備不用說相當良好,每個座位有自己的有線網路插頭(現場也有品質很好的 Wifi),自己的電源插座,冷氣溫度適中,燈光明亮,視野良好,投影設備齊全,左右有很大的投影布幕,中間有電視牆,椅子也很舒適,是一個很銷魂的開會地點,要開多久都沒問題。

pct and Jace

這兩位是網路名人 pct 以及 Jace 大大,Jace 大大是台灣截至 2011 年為止,唯一出過一本有關 smarty 書籍的人,早期也購買拜讀過。

eddit kao

活動主辦者之一高見龍,非常熱心致力舉辦研討性質的活動。

People in PHPConf 2011

滿坑滿谷的人,我想都是來自各領域的 IT 人員。

appleboy

這是台灣 codeigniter 網站的維護者 appleboy,在這邊想特別提一下他,一直覺得執著於沒有這麼主流,卻願意全心投入付出的人很酷,目前算認識的有三位,其中兩位是因為家裡小時候第一台是 Twingo,因此長大開了一間專修 Twingo 的二傻車坊兩兄弟,另一位就是 appleboy,在這邊向你們致敬 :)

要舉辦一個活動並不容易,要顧的環節非常的多,更何況是像這種免費的 conf 更是難上加難,希望有幸能夠報名的人盡量不要缺席,畢竟沒有收費,報名成功就佔了人家一個名額,能夠參加這種神人聚集的神聖聚會實屬難得,感謝所有無私為眾人付出的無名英雄,不過他們多半也滿有名的就是了~哈。