把Youtube換成新版面


目前僅支援Firefox、Chrome
在firefox按下: Ctrl + Shift + K (Win) | Cmd + Shift + K (Mac)
在Chrome按下: Ctrl + Shift + J (Win) | or Cmd + Alt + J (Mac)

切換到console並輸入以下文字,再按下enter(可參考下圖,以chrome為例)
document.cookie="VISITOR_INFO1_LIVE=ST1Ti53r4fU";


重新整理後所看到就是新版面啦!

iOS UIActionSheet

UIActionSheet在部份選單中還蠻好用的,其中如果有不需要的按鈕只要將String部份輸入為"nil"按鈕就會自動消失了!

UIActionSheet *myActionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"取消" destructiveButtonTitle:@"cancel" otherButtonTitles:@"AAA", @"BBB", @"CCC", @"DDD", nil];
myActionSheet.actionSheetStyle = UIActionSheetStyleBlackOpaque;
[myActionSheet showInView:self.view];


使用時如果有需要知道按下的按鈕是哪一個記得在.h檔中加入"UIActionSheetDelegate",並在.m檔中加入以下Delegate,"buttonIndex"就是由上往下算的按鈕數目,從"0"開始。
-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
NSLog(@"buttonIndex = %d", buttonIndex);
}


相關連結
iOS Developer Library
iOS Developer Library - UIActionSheet

iOS UIWebView loadRequest

這在iOS中算是蠻常用的東西,不過我每次用完就忘了,在這Memo一下。

其中因為WebView放在ViewController內,所以使用"self.view.frame"來取得CGRect
UIWebView *myWeb = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"URL Here!"]];
[myWeb loadRequest:request];
[self.view addSubview:myWeb];


如果需要在NavigationController內直接push出一個ViewController請使用以下方式
UIViewController *myViewController = [[UIViewController alloc] init];
UIWebView *myWeb = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, myViewController.view.frame.size.width, myViewController.view.frame.size.height)];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"URL Here!"]];
[myWeb loadRequest:request];
[myViewController.view addSubview:myWeb];
[self.navigationController pushViewController:myViewController animated:YES];


相關連結
iOS Developer Library
iOS Developer Library - UIWebView Class Reference

iOS UITableView update cell 更新TableViewo單一cell內容

tableView 真的是iOS中相當關鍵的一個UI,一方面是列表方式在呈現資料可以說是最好的方式,讓使用者快速得到想要的資訊,在其中也因用途不同需要客製化的部份相當多,就如下面要介紹的更新單一cell。

以下myTableView為UITableView的名稱
//更新指定cell
NSIndexPath *path = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section];
NSArray *myArray = [NSArray arrayWithObjects:path, nil];
[myTableView reloadRowsAtIndexPaths:myArray withRowAnimation:UITableViewRowAnimationFade];


如果需要更新所按下的cell可以搭配UITableViewDelegate使用
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSIndexPath *a = [NSIndexPath indexPathForRow:indexPath.row inSection:indexPath.section];
NSArray *my = [NSArray arrayWithObjects:a, nil];
[myTableView reloadRowsAtIndexPaths:my withRowAnimation:UITableViewRowAnimationFade];
}


其中UITableViewRowAnimation有相當多的動畫方式可以使用,當然也可以不要動畫,只要在"withRowAnimation:"輸入"UITableViewRowAnimationNone"即可達到直接修改cell並且無動畫。

NSArray的部份也可以一次加入多個需要更新的cell,如果是需要一次更新所有的cell可以使用以下方式
[myTableView reloadData]

相關連結
iOS Developer Library
iOS Developer Library - UITableView Class Reference

iOS navigation to the address 導航到指定地址

Google的導航真的很好用,在iOS上Google Maps的使用方式也比起在Android上好用很多,光是要申請KEY,還需要弄一堆有的沒的就夠麻煩了,這邊就來解說一下如何使用iOS的Maps導航功能,順便就將寫成了個function來方便使用。

-(void)navivationToTheAddress:(NSString *)address{
//導航起點的經緯度
NSString* myLatitude = @"0.0";
NSString* myLongitude = @"0.0";
NSString* urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?f=d&source=s_d&saddr=%@,%@&daddr=%@", myLatitude, myLongitude, address];

//將地址的中文轉碼
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

//開啟Maps導航
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];
}


相關連結
iOS Developer Library

iOS UITableView cell and section height

TableView在iOS4所寫相同的Code,在iOS5 build起來卻有不同的結果,最後找出原因在iOS4以前TableView預設的section高度為0(簡單來說就是看不到),但在iOS5卻為預設高度(好像是20,剛好一行字)。上架(Apple Store)後並不會出現這問題,所以若已經確定為上架版本可以放心。

iOS5上需要特別去修正過section的高度來讓他消失,此function回傳值即為section的高度。
//section height
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.0;
}


修改Cell高度即為
//cell height
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;{
//set cell size
return 100.0;
}


相關連結
iOS Developer Library
iOS Developer Library - UITableView
iOS Developer Library - UITableViewController

iOS UITableView seleted blue background

TableView預設在點選同時會產生藍色的背景作為Highlight,在某些狀況這是好事,可以清楚的標示出目前所點到的那行,但部份狀況下是不需要他的,其實只要簡單的一行就可以讓他消失掉。

只需要在UITableView的Delegate內加入這行,也就是下面這function內加入

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {}


// cell 為cell的名稱,也就是所定義的"UITableViewCell *cell"
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];


相關連結
iOS Developer Library
iOS Developer Library - UITableView
iOS Developer Library - UITableViewController

Android Gallery switch to position移動至指定位置

需要將Gallery、ListView、GridView移動至指定位置皆可使用此語法。

setSelection(position, animate)

Sample
imageGallery.setSelection(position, animate)


相關連結
Android Developer
Android Developer - Gallery
Android Developer - ListView
Android Developer - GridView

MySQL Client on Android

現在App對於網路的依賴度越來越高,畢竟資料如果是死的,沒辦法分享給朋友,不能按讚、+1、Tweet、Plurk......等的因素實在很痛苦,Android的SDK對於SQLite有完整的支援,但SQLite畢竟還是個local的資料存取,想要更新資料還是需要透過網路,一般App在這種狀態下大概可以分為三種方式。

1. 每次開啟App將所有資料更新
優點:一次將所有資料更新完成,在後續使用上可以完全不必在進行網路存取,減少每次等候時間,常見於電子書
缺點:安全性倍受考驗,若資料有安全性考量應盡量避免,資料量若太大會佔用到過多的容量空間,Mobile Device不是電腦上的HDD,容量是用G來計算

2. 即時存取 - 使用Api界接
優點:由後台對資料整理過後再進行傳輸,減少掉不必要的資訊,快速達成所需,製作一次可供多種平台做使用
缺點:執行製作上必須多花一份工

3. 即時存取 - 直接Query資料庫
優點:省去後台多做一次工
缺點:每次使用都需要與資料庫連線才可以取得資料,Mobile Device上的網路狀況並不像電腦的網路環境,常常會遇上無法順利與資料庫產生連線導致無法取得資訊

不過今天所要談的重點為MySQL Client,所以當然是講"3. 即時存取 - 直接Query資料庫",在這邊我選擇直接使用JDBC來溝通,直接進入重點

Step 1.下載JDBC http://dev.mysql.com/downloads/connector/j/5.0.html#downloads
因為Android對於JAVA支援版本關係,無法使用最新版,經過測試後發現3.0.17這版本就以足夠使用


Step 2. 將JDBC的Jar檔案加入至專案中

Step 3. Sample code
private Connection connect = null;
private Statement statement = null;
private ResultSet resultSet = null;

public static final String MYSQL_IP = "192.168.0.100";
public static final String MYSQL_DBNAME = "Book";
public static final String MYSQL_USERNAME = "isken";
public static final String MYSQL_PASSWORD = "isken";

public ArrayList bookList() throws Exception {
ArrayList results = new ArrayList();
try {
String script = "SELECT id, name, URL FROM Book";
Log.e("Isken", "script = "+script);

// This will load the MySQL driver, each DB has its own driver
Class.forName("com.mysql.jdbc.Driver");

Log.e("Isken", "jdbc:mysql://"+MYSQL_IP+"/+MYSQL_DBNAME+?"+ "user="+MYSQL_USERNAME+"&password="+MYSQL_PASSWORD);

// Setup the connection with the DB
connect = (Connection) DriverManager.getConnection("jdbc:mysql://"+MYSQL_IP+"/+MYSQL_DBNAME+?"+ "user="+MYSQL_USERNAME+"&password="+MYSQL_PASSWORD);

Log.e(PAGETAG, "connection is success");

// Statements allow to issue SQL queries to the database
statement = (Statement) connect.createStatement();

// Result set get the result of the SQL query
resultSet = statement.executeQuery(script);

while (resultSet.next()) {
MyObj obj = new MyObj();
String id = resultSet.getString("id");
String name = resultSet.getString("name");
String url = resultSet.getString("URL");
obj.setId(id);
obj.setName(name);
obj.setURL(url);
results.add(obj);
}
Log.e(PAGETAG, "results size = "+results.size());
} catch (Exception e) {
throw e;
} finally {
close();
}
return results;
}



相關連結
Android Developer
MySQL Developer Zone
Sample Code

Android Google Map Streetview 街景服務

街景服務也是個Google很強大的功能之一,但這功能如果只能使用在一般的PC上實在有點可惜,當然iOS、Android也有相關服務可以使用,在此介紹Android上的使用方式

double objLatitude = 25.066319;
double objLongitude =  121.557541;
Intent streetView = new Intent(android.content.Intent.ACTION_VIEW,Uri.parse("google.streetview:cbll="+ objLatitude+","+objLongitude+"&cbp=1,99.56,,1,-5.27&mz=21"));
startActivity(streetView);


相關連結
Android Developer
Android Developer - Activity

Git

Git init
git init

Saving State
git commit -m "[content]"

Saving State
git commit "[content]"

Add all files
git add .

Add all file
git add [file name] [file name] [file name] ...

Remove file
git rm [file name]

Rename file
git mv [old name] [new name]

Log
git log

Undo
git reset --hard [path]

iOS app icon 反光

ios 在icon預設會有一道圓弧的反光(如下圖),Runkeeper這app很明顯的在反光上是自訂,而kkbox有很明顯的圓弧反光


要消除這礙眼的反光很簡單,在app 專案開啟的info.plist檔內找到一個"Icon already includes gloss effects"一個boolean的設定,如果沒看到這設定再自己加入即可。

YES:沒反光
NO:有反光


相關連結
iOS developer Library

iPhone4 flashlight on/off LED燈開關

目前鏡頭旁邊的led燈似乎只有在iphone4才有,不過說真的這小小的led燈還真的蠻好用的,在app store上也可以看到一大堆類似的軟體。

step1.在.h檔內先將framework給import進來
//import framework
#import <AVFoundation/AVFoundation.h>


//宣告變數並將這變數交由property管理
AVCaptureSession *torchSession;

@property (nonatomic, retain) AVCaptureSession *torchSession;


step2.回到.m檔內記得在@@implementation及@end間加上synthesize
@synthesize torchSession;


step3.開關LED燈的函數
-(void) openLED{
NSLog(@"click openLED");
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
if ([device hasTorch] && [device hasFlash]){
if (device.torchMode == AVCaptureTorchModeOff) {

NSLog(@"On");

AVCaptureDeviceInput *flashInput = [AVCaptureDeviceInput deviceInputWithDevice:device error: nil];
AVCaptureVideoDataOutput *output = [[AVCaptureVideoDataOutput alloc] init];

AVCaptureSession *session = [[AVCaptureSession alloc] init];

[session beginConfiguration];
[device lockForConfiguration:nil];

[device setTorchMode:AVCaptureTorchModeOn];
[device setFlashMode:AVCaptureFlashModeOn];

[session addInput:flashInput];
[session addOutput:output];

[device unlockForConfiguration];

[output release];

[session commitConfiguration];
[session startRunning];

[self setTorchSession:session];
[session release];
}
else {
NSLog(@"Off");
[torchSession stopRunning];
}
}
}


step4.記得在dealloc把宣告過的東西release掉
- (void)dealloc {
[torchSession release];
[super dealloc];
}


step5.加入framework


step6.開始玩LED燈

相關連結
iOS Developer Library

Android phone call撥號

Android內也一樣可以在app內直接進行撥號,如果是iOS上可參考前一篇"iOS dial a phone call 在app內撥電話
"

用法上相當簡單,只要在需要撥號的地方加上以下這段code
Intent i = new Intent( Intent.ACTION_CALL );
i.setData(Uri.parse("tel:"+"Phone number"));
startActivity(i);


然後在"AndroidManifest.xml"的<manifest>與</manifest>內加上下面這段
<uses-permission android:name="android.permission.CALL_PHONE"/>

※"AndroidManifest.xml"在建立專案時就會自動產生在專案最外層

相關連結
Android Developers
Android Developers - ACTION_CALL

iOS UIScrollView image auto switch自動切換圖片

因為剛好有這樣的需求加上我懶得去找,簡單來說就像是個跑馬燈,每隔幾秒自動變換一次圖片,然後讓他自動輪播。原本還有想弄個UIPageControl上次方便管理目前所在頁面,變得有點像iOS瀏覽程式的那種感覺,但是我懶了...

Download code

首先import這class
#import "ImageSwitcher.h"

接著在需要的地方init出來,請記得使用initWithFrame,因為我也只有寫在這裡...反正順便設定寬高大小,以下為加入ViewController內
ImageSwitcher *imgSwitcher = [[ImageSwitcher alloc] initWithFrame:CGRectMake(0, 100, self.view.frame.size.width, 60)];
[self.view addSubview:imgSwitcher];
[imgSwitcher release];


完畢

※圖片檔我預設為"ad%d.png",例ad1.png,圖片都是放local端,等哪天有空再把直接web下載+lazyload加進來
※adHeight為廣告高度
※switchADTime為切換時間的長短

Download code

相關連結
iOS Developer Library
iOS Developer Library - UIImageView
iOS Developer Library - UIScrollView

iOS UIScrollView Scroll to somewhere捲動到指定點

其實這應該也沒啥,不過對我這腦容量不足的人應該還是很有用,最主要就是兩點。
1.設定UIScrollView的大小
2.scroll到指定位置

首先設定大小的部份
//init出來並且設定位置
UIScrollView *myScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
//設定內容大小
[myScrollView setContentSize:CGSizeMake(900, 900)];
//設定可以捲動
[myScrollView setScrollEnabled:YES];
//加進去self
[self.view addSubview:myScrollView];


接著就在需要捲動的地方加上
//point就是要滑動到的點,0,0為原點
[myScrollView setContentOffset:CGPointMake(0, 0) animated:YES];


相關連結
iOS Developer Library
iOS Developer Library - UIScrollView

Android adapter getView

因為這getView被問上不少次,其實這東西就像是iOS UITableViewDelegate內的"cellForRowAtIndexPath",只是在android上不僅可以使用於listView也可以使用在gridView,簡單一句話就是"他很好用"。

不過小弟我根本不會寫程式,如果有寫錯的部份就別給我面子捅下去就對了(簡單一個字就是懶...)

以下為自訂row在getView
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater=getLayoutInflater();
View row;
//直接去抓xml的方式來定義內容
row=inflater.inflate(R.layout.custom_row, parent, false);

TextView title=(TextView)row.findViewById(R.id.title);
TextView subtitle=(TextView)row.findViewById(R.id.subtitle);
ImageView myImage = (ImageView)row.findViewById(R.id.myImage);

return (row);
}


以下為row的xml內容,基本上就是看你高興...
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="left"
>

<ImageView
android:id="@+id/myImage"
android:src="@drawable/my"
android:layout_width="100px"
android:layout_height="100px"
</ImageView>

<LinearLayout
android:gravity="left"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="100px">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Title"
android:textSize="8pt"
android:singleLine="true">
</TextView>
<TextView
android:id="@+id/subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Subtitle"
android:textSize="6pt"
android:singleLine="true">
</TextView>
</LinearLayout>
</LinearLayout>


基本上到了這邊應該還會有個疑問是那每一個row要怎樣來把資料丟進去?我個人都是建一個class丟進array內來做管理,對我這種腦內記憶力不足的人來說還蠻好用的。
public class MyObj{
private String title;
private String subtitle;
private Drawable imageDrawable;
}


對應到row裡面可以使用下面這方法,其中的"myArray"也請記得先宣告出來
MyObj myObj = (MyObj)myArray.get(position);

相關連結
Android Developer
Android Developer - adapter
Android Developer - listview

iOS URL encode UTF8

URL轉UTF8並使用Apple URL Scheme,“Mail”、“Phone”、“Text”、“Map”、“YouTube”、“iTunes”

Mail
NSString *mail = [NSString stringWithFormat:@"Mail here"];
NSString* urlString = [NSString stringWithFormat:@"mailto:%@", mail];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];


Phone
NSString *tel = [NSString stringWithFormat:@"Phone number here"];
NSString* urlString = [NSString stringWithFormat:@"tel:%@", tel];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];

可參考"iOS dial a phone call 在app內撥電話"

Text
NSString *tel = [NSString stringWithFormat:@"Phone number here"];
NSString* urlString = [NSString stringWithFormat:@"sms:%@", tel];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];


MAP
NSString *address = [NSString stringWithFormat:@"address here"];
NSString* urlString = [NSString stringWithFormat:@"http://maps.google.com/maps?q=%@", address];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];

※地址部份可用經緯度代替 EX.25.xxxxx,121.xxxxxx(中間使用逗號隔開)

Map - Native
NSString *addressA = [NSString stringWithFormat:@"addressA here"];
NSString *addressB = [NSString stringWithFormat:@"addressB here"];
NSString* urlString = [NSString stringWithFormat:@"hhttp://maps.google.com/maps?daddr=%@&saddr=%@", addressA, addressB];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];

※地址部份可用經緯度代替 EX.25.xxxxx,121.xxxxxx(中間使用逗號隔開)

Youtube
NSString *id = [NSString stringWithFormat:@"Youtube id here"];
NSString* urlString = [NSString stringWithFormat:@"http://www.youtube.com/v/%@", id];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];


iTunes
NSString *id = [NSString stringWithFormat:@"iTunes id here"];
NSString* urlString = [NSString stringWithFormat:@"hhttp://itunes.apple.com/tw/app/halftone/id%@", id];
NSString *escaped = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:escaped]];

※不同國家store也會有所,此為台灣store

相關連結
iOS Developer Library
iOS Developer Library - Apple URL Scheme Reference
"iOS dial a phone call 在app內撥電話"

iOS NSXMLParser

XML parser在iOS裡面有不少選擇,甚至不少第三方的parser都比官方強勁,不過這篇重點是介紹官方的NSXMLParser。

step1. 先在.h檔加入NSXMLParserDelegate
#import

@interface DemoXML : UIViewController {
//xml
NSXMLParser *parser;
NSString *parserCurrent;
}

//xml
@property (nonatomic,retain) NSString *parserCurrent;

@end


step2. .m檔的部份加入property部份
//xml
@synthesize parserCurrent;


step3. .m檔內需要進行parser的部份加入
//需要parser的URL
NSString *parserString = @"需要parser的URL";

//若有特別需要轉碼
NSString *escaped = [parserString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

//NSXMLParser init
parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:escaped]];

//設定Delegate
[parser setDelegate:self];

//開始parser
[parser parse];


step4.設定Delegate的部份
//parser < XXXX>
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
//NSLog(@"elementName = %@", elementName);
//NSLog(@"elementName = %d", elementName.length);
//elementName就是其中XXX的部份
parserCurrent = elementName;
}

//parser
-(void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
//NSLog(@"didEndElement => elementName = %@ || namespaceURI = %@ || qName = %@", elementName, namespaceURI, qName);

}

//parser <>XXXXXX
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"foundCharacters = %@",string);

//如果XML的Tag名稱與所需相同,就做以下動作
if([parserCurrent isEqual:@"title"]){
//Todo something
}
}

//parser結束
-(void) parserDidEndDocument:(NSXMLParser *)parser{
//todo something
}


相關連結
iOS Developer Library
iOS Developer Library - NSXMLParser
iOS Developer Library - NSXMLParserDelegate Protocol Reference

PHP "Cannot modify header information - headers already sent by"

今天遇上這問題目前是順利解決來紀錄一下,稍微查了一下這可能是UTF8 dom的問題,也可能是buffer這部份的問題,總之我是用以下方是解決。

到"C:\Windows"找出php.ini將"output_buffering"修改為On
※O要大寫
; Output buffering allows you to send header lines (including cookies) even
; after you send body content, at the price of slowing PHP's output layer a
; bit. You can enable output buffering during runtime by calling the output
; buffering functions. You can also enable output buffering for all files by
; setting this directive to On. If you wish to limit the size of the buffer
; to a certain size - you can use a maximum number of bytes instead of 'On', as
; a value for this directive (e.g., output_buffering=4096).
output_buffering = On


修改完後別忘了將apache重新啟動

杜樂麗心饌

其實都吃完好幾天了,不過到現在才想到才想到來po...真的是沒空嗎?大概有99.99%是因為懶,至於未啥會來這家也是因為瘸子生日,不然光看到價錢...應該不是我該來的地方。不過說真的這家東西是真的還不賴

店門口


海膽


!@#!@$!@春捲(很明顯是我忘了)


生魚片、生蝦,生蝦真的超美味!


鍋物,四個人的量


傳聞中的松阪豬,一樣是投入鍋


玫瑰醋


@#%$︿#@$#@蒸蛋(非常好...我又忘了)


炸!@$$@魚排(再次忘了)


︿#@$@#$醋(沒錯!我很確定他是某種醋)


鮑魚


好大的蝦


龍蝦


壽司(連我這不很愛吃壽司的都很愛)


水果+甜點(泡芙)


︿$@#%#@茶(只記得味道很香很好喝)


總之...這家很好吃,但是也很貴

杜樂麗心饌
官方網站:http://www.coeur.com.tw/
地址:106台北市大安區Section 4, ShìMín Blvd 108號
電話:02-2775-2345


相關連結
完整真相

iOS Loading

在iOS內loading也是很重要的,最重要也是在parser資料的同時給user一點心理準備,當然也可以弄一條processbar來告知用戶,不過我懶,所以就直接弄個loading畫面蓋在畫面最上端,一方面也避免User亂按。

Download code

step1.下載完後的檔案直接解壓縮丟到project內


step2.把檔案匯入.h檔並且把function先預設好
#import <UIKit/UIKit.h>

#import "LoadingView.h"

@interface RootViewController : UITableViewController {
//loading
LoadingView *loading;

}

-(void)initLoading;
-(void)removeLoading;

@end


step3.在.m檔內把initLoading、removeLoading兩個function設定完成
-(void) initLoading{
loading = [[LoadingView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
[self.view addSubview:loading];
[loading release];
}

-(void)removeLoading{
// NSLog(@"subView = %@", [self.view subviews]);
for(UIView *subview in [self.view subviews]) {
if([subview isKindOfClass:[LoadingView class]]) {
NSLog(@"remove Loading = %@", subview);
[subview removeFromSuperview];
} else {

}
}
}


step4.完成後就看哪時候需要loading就使用
[self initLoading];

要把他消失使用
[self removeLoading];



Download code

相關連結
iOS Developer Library

金馥記脆皮烤鴨

前幾天剛好去吃了這家烤鴨,門面看起來是蠻厲害的,但進入後看到點細節上得東西就覺得還好,直接進入主題烤鴨!店名顧名思義最厲害應該就是烤鴨,當然要來嘗試一下。烤鴨這種東西一定要現烤才行,所以要吃之前最好是先訂,不然大概整桌都要吃完烤鴨應該差不多可以跟水果一起上XD

烤鴨烤好後會在桌子旁邊將烤鴨切給你看,所切下來的部份就是給你直接服用,搭配餅皮、蔥段、點面醬弄成烤鴨夾餅。


切完後大致上長這樣(其實已經四個人每人都吃完兩三卷...)


搭配上餅皮等東西組合成烤鴨夾餅


完成後


到這應該會有疑問...就這樣切完就包含整隻鴨了嗎?當然沒有,鴨子的部份可以選擇兩吃、三吃、四吃,從三吃開始每多一種要多加200,而基本的兩吃890,烤鴨+兩籠餅皮+蔥段等佐料為基本配備,另一吃可以選擇加入酸白菜、粉絲煮湯或炒鴨骨、炒豆芽菜這三種選擇。

這次選擇為加入酸白菜、粉絲煮湯,味道還不賴


另外還點了一道比較有趣的"宮保皮蛋"其實就是宮保雞丁的雞丁改為皮蛋,皮蛋有先炸過,以前沒吃過所以覺得還蠻新鮮的


總結來說就是間普通的店,烤鴨並沒有特別的強勁,四個人吃下來平均一個人也要3XX將近400,如果不是特別想吃烤鴨在這價位上應該是有更好的選擇。

詳細資訊
電話:02-2579-0585
地址:台北市松山區南京東路四段66號

相關連結
金馥記脆皮烤鴨完整真相

再訪風櫃嘴

台北自從去年12月開始大雨小雨下不停,偶爾放晴一下,不過地板還來不及乾雨又噴下來,只有在過年那幾天很給面子的出了太陽,不過過年那幾天我人也不在台北,只有在放假的最後一天享受到點台北的陽光,今天看到外面出了大太陽當然要出去騎一下啦!

出發前其實也不知道要去哪,不過很自然的就網河濱走,可能因為連假河濱人也特別少,但對於假日的河濱還是充滿恐懼感,到內湖那邊就決定轉往劍南路,不過太久沒騎山路加上過年的養豬行為讓體重增加不少,騎起來是格外吃力,好不容易到至善路後看看時間還早,要爆炸就讓他炸個徹底吧!經過一番努力最後還是順利上了風櫃嘴。



這三個字已經不知道多久沒看過他了


由於我實在很怕從原路下去(風鈴橋to風櫃嘴),每次都會改從內湖或走汐萬路繞到汐止再回家,也就是會繞到五指山,在分岔點這有很多店家,假日也不少遊客會到這來休息,尤其很多重機騎士會到這來會合。還有前陣子蘋果日報的試車摔車也是在這拍的。

交會點的涼亭


下了汐萬路後順便繞去阿姨家拿了點東西,不過沒想到有這麼大一袋,只好掛在手上慢慢騎回家...


相關連結
再訪風櫃嘴(相簿)
風櫃嘴(沒記錯是新訓剛放假...)

Google sync on iphone同步多個月曆

Google的服務真的是太給他好用了,尤其在現在這種時代啥鬼都是雲端,方便是所有資料可以同步使用不需要再重複輸入,壞處就是你的資料全都在別人手中,但為了方便有些東西還是得取捨一下。

行動裝置同步解說網頁:http://www.google.com/mobile/sync/

手機版:http://m.google.com

由於今天主題是iphone所以接下來就解說一下同步上的問題,以往使用Microsoft Exchange只能夠同步(註1)一個月曆,但像我一次用一堆月曆怎麼辦,有些不同的東西還是紀錄在不同月曆比較好分類管理,現在google已經可以同不多個月曆!!但是這服務似乎還沒在台正式推出,以下就來說明該如何同步。

先連到Google 行動服務:http://m.google.com看到以下這些是目前台灣正式上市的服務。


將畫面捲動到最下方點選"語言變更"

接者把語言改為"English(US)"

會回到原來選擇服務的畫面,會熊熊的發現到服務多了好多,沒關係~有空再來慢慢玩,先進入今天重點,點選"sync"

進來就可以看到你有與google同步的行動裝置,就先以iphone為例,點選iphone

可以看到在My Calendars看到第一個就是預設同步的月曆,底下有很多月曆可以點選,只要有打勾就是要同步的月曆,點選完成後別忘了按下右上角的"Save",把設定儲存起來,這樣就完成同步的設定。

如果切回月曆還沒看到同步過來的話可能先稍等一下,等資料下載,去喝杯咖啡,溜個狗回來應該就完成了。

註1:同步Microsoft Exchange可參考google官方說明:http://www.google.com/support/mobile/bin/answer.py?answer=138740&topic=14252


相關連結
行動裝置同步解說網頁:http://www.google.com/mobile/sync/
手機版:http://m.google.com

富足康鞋墊

前幾天拿到這兩款鞋墊,說實在蠻厲害的,把鞋墊換上後確實感覺差蠻多的,經過測量後也拿到最符合我的腳的鞋墊,測量的過程也是相當的仔細,從腳的大小、重心位置、足弓類型、腿型才決定是用哪一種的鞋墊。

半長


材質與邊緣處理部份,正面這材質摸起來是相當的舒服好摸


背面的材質及腳後跟處理


兩種材質接合處


由側面可以很明顯的看到在足弓部份的曲線,這部份也是經由測量結果來決定要用哪一種鞋墊的重點


正反面合照


在背面也有標示上左右腳的,加上腳鞋墊本身的造型應該是不至於會把鞋墊放錯腳



全長


材質與邊緣處理,相同的也可以看到對於足弓、足型的特別設計


側邊看過去


正反面合照,可以看出與半長有些不同,在腳後跟、腳趾後方的那塊有特別處理


腳後跟特寫


腳趾後方特寫


側著的為右腳內側面,此為低足弓款


整體來說就目前這樣穿下來確實感覺很厲害,記得之前看過一個specialized的影片(如下)也是介紹他們配合卡鞋用以矯正踩踏時腳別偏擺,增加效率並且可以保護選手的膝蓋軟骨,雖然我只是個一般人,但因運動造成後遺症這是跟膽固醇一樣,一輩子死心塌地的跟著你不能開玩笑的。


富足康官方網站
鞋墊完整真相