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

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