2013/03/31

VIM 搜尋與取代同時加入遞增號碼

我們常常使用 y 來複製重複的程式,尤其是陣列,例如:

$arr[] = '';

使用 yy 後執行 5p,便會產生六個陣列

<?php
$arr[] = '';
$arr[] = '';
$arr[] = '';
$arr[] = '';
$arr[] = '';
$arr[] = '';
?>

今天學到一個技巧可以帶入遞增的數字

:let i=1 | 2,7g/\[/s//\='['.i/ | let i=i+1

便可以得到下面的結果

<?php
$arr[1] = '';
$arr[2] = '';
$arr[3] = '';
$arr[4] = '';
$arr[5] = '';
$arr[6] = '';
?>

2013/03/24

Facebook Login API For PHP

現在有很多網站使用 facebook 或 Google 的帳號登入,優缺各有,缺點是取得的資料較有限,也可能相對不真實,對方也可以透過設定限制抓取的內容,優點是速度快,可以增加會員加入的意願,在這邊紀錄一下自己使用 fb api 的經驗。

申請 fb app

這個流程網路隨便搜尋就一大堆,所以我這邊就不介紹了,所有的 api 要使用一定要拿到 App ID 以及 App Secret。

下載 sdk

PHP SDK,fb 另外提供許多語言 sdk,如 JavaScript, Android, iOS,直接去 deleopers 的頁面找尋下載即可。

登入頁面佈置

include 'fb/facebook.php'; // 將下載的 sdk 導入

// 初始 class 的設定
$facebook = new Facebook(array( 
    'appId'  => FB_APP_ID, 
    'secret' => FB_APP_SECRET 
));

// 想要抓取的內容
$params = array(
    scope => 'email, user_birthday',
    redirect_uri => $chan->retUri('/fb-login.php') // 我自己設定的頁面名稱,fb 驗證完後會導回這頁
);

// fb 會幫你算出驗證登入的超連結,按下去以後變會導到驗證頁麵
$fbLoginUrl = $facebook->getLoginUrl($params);

其他的 scope 可以在 fb 參考文件 找到。

fb-login.php

include 'fb/facebook.php'; // 將下載的 sdk 導入

// 初始 class 的設定
$facebook = new Facebook(array( 
    'appId'  => FB_APP_ID, 
    'secret' => FB_APP_SECRET 
)); 

$uid = $facebook->getUser(); // 開始抓取用戶資料

if ($uid) {
    $profile = $facebook->api('/me','GET');
    $email = $profile['email']; // email
    $gender = $profile['gender']; // 性別 male / female
    $nickname = $profile['name']; // 名稱
    $birthday = $profile['birthday']; // 生日 01/05/1980

    // 抓取大頭照
    $imgSrc = file_get_contents('https://graph.facebook.com/'.$uid.'/picture?type=large');
    $imgName = $uid.'jpg';
    $imgFile = 'profile/'.$imgName;
    file_put_contents($imgFile, $imgSrc); // 儲存大頭照
}

2013/03/16

MySQL 搜尋組合字串

有時候資料庫某個欄位的存取不只一項資料,可能會以某個自訂的標籤符號來組成多項資料,例如 1,2,3,或者是 a,b,c,那日後該如何取出我們想要的相符和的內容呢,譬如說我想抓出該欄位擁有 1 的內容,或者是擁有 a 的內容。

tbl_test 資料表結構

t_id int primary_key auto increment,
t_name varchar(100),
t_string text,

預先塞了三筆資料

a 1,2,3
b 12,3
c 2,3
include 'main.php';
$chan->dbConnect();

$string = 1; // 今天我們要搜尋出該欄位擁有 1 的資料
$string = '%,'.$string.',%'; // 首先把該搜尋字串使用 %, ,% 包圍

// 將被搜尋的欄位也使用 CONCAT 函式前後加上 ,
// toSql 是我自己的函式,會把 1 變成 '1'
// $sql 最後會變成 SELECT * FROM tbl_test WHERE CONCAT(',', t_string, ',') LIKE '%,1,%' 這樣的結果
// 也就是用 LIKE 的特性對整體欄位做搜尋
$sql = sprintf("SELECT * FROM tbl_test WHERE CONCAT(',', t_string, ',') LIKE %s",
    $chan->toSql($string, 'text'));
$row = $chan->myRow($sql);

if ($row) {
    foreach ($row as $v) {
        echo $v['t_name'].'
'; } } // 最終的結果會找出 a

2013/03/03

哆啦A夢誕生前100年特展

目前在松山文創園區正在展出哆啦A夢誕生前100年特展,在漫畫的設定上小叮噹誕生於 2112 年,所以今年是小叮噹誕生前的 100 年,現在的小朋友可能都叫他哆啦A夢,但我還是喜歡他叫小叮噹,小的時候花了許多零用錢買小叮噹漫畫,都留著的話大概有三百多本了。

展期從 2012-12-29 開始的,今天還下著細雨,但人潮還是很多,小叮噹的魅力是很大的

在外面排隊的地方有技安常常開演唱會空地的布置

雖然小蘋果沒接觸過小叮噹的故事,但可愛的造型也深得她心

入口處就開始拍不停了

一開始的小叮噹是黃色的

看完這段影片就可以了解小叮噹變色的原因,不過這跟我小時候的記憶有一點出入,我記得小時候看漫畫是在他耳朵被老鼠咬掉以後直接哭成藍色,也因此變得很怕老鼠。

人真是多啊,我們算很早來了

場內擺滿了一堆小叮噹,手拿許多大家熟悉的道具,前面還有牌子解說道具用途

老實說一堆東西我壓根沒見過 XD

全世界都想要的道具,「任意門」

閃避披風,常在各大冒險故事出現,其實很多冒險篇都有生命危險....

穿透環,常常不小心穿到宜靜正在洗澡的浴室

媽媽是小孩永遠的小叮噹

時光布,大雄與恐龍的恐龍蛋就是靠這塊布孵出恐龍的

記憶麵包,小時候好想吃這個就不用死背書了

很多手繪紙,對我來說是無價之寶

可以徒手畫出這種東西真的很厲害

大雄最終與宜靜結婚了

時光機

大雄家

我記得我小時候看到這部卡通哭最慘

場內只有大雄家跟宜靜家,阿福家太巨大要擺進來可能有點困難

小叮噹就是從這個透過時光機從這個抽屜跟大雄見面的

阿福是有錢人

魔音穿腦

技安超疼愛妹妹,技安妹從小就想當漫畫家