2012年1月18日 星期三

牛排推薦_No°168 Prime 牛排館(維多利亞酒店)

帶著五週年的快樂心情,選定了期待已久的No°168 Prime 牛排館,為兔年的五臟廟寫下完美的句點。

來到維多利亞酒店4樓,電梯打開就會看到大家都有拍照留念的168投影燈。

一坐到位置上,馬上開始熱烈的菜單討論。晚餐的套餐包含:餐前麵包、前菜、湯或沙拉、主菜、附餐、甜點與飲料。


經過網路上參考與再三討論,決定菜色以後,開始上菜囉!
1. 餐前麵包:吃起來有點像是軟嫩型的山東大餅,標準的越嚼越香,配上旁邊有點酸甜的醬料,實在讓人開始期待後面的餐點。

2. 前菜1─香煎明蝦:就像在港口吃的新鮮明蝦一般,肉質非常緊實,並帶有Q彈口感,微微鮮甜的滋味在口中迴盪。

前菜2─炙燒北海道干貝:保有干貝特殊一絲一絲的口感,在口中逐漸化開,咀嚼後海鮮的甜味在口中蔓延開來,是一道會直呼「喔~~~好甜喔!」的奇妙感受。

3. 沙拉與湯─季節鮮嫩沙拉:有著各式鮮蔬搭配油醋醬,本來覺得只是一道清爽的油醋沙拉,但切開最下層的番茄,搭配旁邊的馬芝拉起司與鮮蔬,表現出相當多層次的口感,番茄包覆著煙燻香味,清脆的蔬菜裹著酸甜的油醋,讓人一口接一口。

沙拉與湯─No°168巧達湯:整個巧達湯非常的濃郁,煙燻培根+牛肝蕈+干貝的絕妙組合,是一道我覺得必點的湯品。

4. 附餐─奶油洋芋泥:賣相非常樸素,奶油與洋芋都是我的最愛,所以沒辦法評論,只要是奶油+洋芋我都覺得讚。

附餐2─白酒香炒野菇:相當刷嘴的附餐,有著菇類原有的獨特口感,伴著微微的酒味,讓人一口接一口。

上主菜之前,先上了相關的配備,首先是看似很高級的牛排刀!

另一個就是重點中的重點,看起來會讓等等主餐很好吃的醬料!

5. 主菜─澳洲頂級冷藏羊排:有著完美的前菜,讓我們非常期待主菜的來到,很快的切一小塊羊排,沾了原本附的羊排醬,送入嘴巴.....10秒過去,
我問:怎麼樣?
++:很嫩,但是不香耶...
我:怎麼可能?
我也切了一塊,放入口中,......嗯,很嫩.....

正當有點失望之際,切下來另一個主菜─牛排雙重奏(精選老饕牛排、頂級和牛紐約客牛排),意思的撒了點以為很弱的法國鹽之花。

一口咬下去,牛肉的香味整個在口中散開,一整個無法形容那個滋味,只好拿出真相:

就在絕妙滋味在口中迴盪,立刻將法國鹽之花撒上一小塊羊排,我只能說:「天呀!鹽之花是美味的鑰匙」

就這樣,伴隨著各式醬料、很多很多的鹽之花與滿足的表情,清空了...

連蒜頭都清光光。

6. 點心─法芙納香蕉熱巧克力塔:常常在電視上看到香蕉與巧克力的甜點組合,但自己卻從來沒有嘗試過,一口咬下,暖暖的巧克力從蛋糕裡流出來,配上甜蜜的香蕉,真的是絕妙搭配。

點心2─水果雪酪冰淇淋蛋糕:普通酸酸甜甜的冰沙型蛋糕。

7. 飲料─摩卡卡布奇諾:我沒有很懂咖啡,但我覺得是好喝的咖啡。


總結:是一家非常適合想要好好犒賞自己的大家,別忘了帶上快樂的心情,並且記得沾鹽之花喔。

小提醒:如果點羊排,可能不會附上9項的牛排沾醬,記得要跟服務生說你想沾鹽之花喔。^.< ....

2012年1月17日 星期二

五週年慶

五週年,選在很久以前就鎖定的No°168 Prime 牛排館(維多利亞酒店)。

以本日最經典作為紀念。



連帳單都在慶祝五週年。

五週年快樂。

2012年1月14日 星期六

iOS小抄_NSString的常用方法

字串比較:[@"被比較的文字" isEqualToString:@"比較的文字"];

字串相加:[@"要被加的文字" stringByAppendingString:@"要加的內容"];

字串相加2:[@"要被加的文字" stringByAppendingPathComponent:@"要加的內容"];
*會自動將用於路徑的/加上去。

字串切割(split):NSArray *array = [@"要被切割的文字" componentsSeparatedByString:@","];
*利用“,”切割文字,回傳NSArray
[array objectAtindex:0]來取得分割後的第一個結果。

取代字串:[str stringByReplacingOccurrencesOfString:@"被取代的" withString:@"取代的"];

字串轉整數(轉int):[@"要轉的文字" intValue];

字串轉整數(轉NSinteger):[@"要轉的文字" integerValue];

字串轉浮點(轉NSfloat):[@"要轉的文字" floatValue];

NSMutableData轉NSString:NSString *s = [[NSString alloc] initWithData:MutableData encoding:NSASCIIStringEncoding];

整數轉字串:[NSString stringWithFormat:@"%d", 12];

去除空白:str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

2012年1月7日 星期六

憶1月7日

四年前的這個時候,我正躺在床上心裡帶著一些坎坷,想著明天可能會發生的情況。

轉眼間,已經在辦公室繞了一圈,初步認識了大家,回到坐位上敲打著鍵盤,寫著需要繳交的文件;在完全沒有蜜月期的情況下,很快的第一天下午開始默默寫著vb6單機程式,而現在過了四年,每天仍舊埋首在報告、程式碼、裝機與發呆中。

上個月,我桌面變成了這樣:
除了特地拿出來跟大家一起拍照的flyer以外,其他都是恰巧需要處理東西而放在桌子上的。

倒杯水,走回位子的路上看到桌面這個情景,心中五味雜陳,一個讀土木讀生工在那邊算力學算用水量,原本程式只是寫寫課堂作業、論文模擬的學生,現在突然學了一堆010101的東西;還記得剛工作時,常常跟其他工程師詢問或討論程式的內容,聽著一堆新鮮的名詞,沒有想過的流程;但不知道從什麼時候開始,討論的對象只剩下google,寫程式一個人、裝機也一個人,慢慢地有些人的問題我竟然也可以回答了,回頭一看什麼時候學了這麼多發不了財也餓不死自己的010101?

不是資訊科系,沒有深厚的基礎、沒有相關的背景知識,帶著一堆自己亂七八糟的概念,有些自學有些上課,七拼八湊的也還可以完成一個案子,也還可以幫人解解bug,也還可以讓人相信說出來的"ok"。
-----------------------------------------

除了那些糊口飯吃的粗劣技術,因為這四年而誕生的還有這個blog,原始一個純粹當作筆記的平台,慢慢變成了"想分享"的宣洩出口,希望討論的激盪、團隊的合作與"阿哈"的歡呼,沒辦法在工作上成真,轉而成為維持亂寫文章的動力,變成動力維持熱血,熱血維持動力的怪異循環。

之前為了紀念單月突破5000瀏覽人次,發了一篇文章,結果就在這篇文章後,瀏覽人次以每月成長1000的數目持續上升,上個月竟然突破9000;每當自己在孤獨查詢資料時,能看到說明清楚的資料就會相當高興,這也讓自己想要寫出"可參考"的資料,而更想要整體搞懂再下筆,總之,這個blog似乎是有幫助到一些人,但幫助自己更多。

-----------------------------------------

辦公室比較年輕,四年前踏進辦公室所看到的"資深"工程師大約落在4-6年,如果現在又有新的人進來,在他心中我是否也變成了"那些資深的"?然後再1-2年後,他會在心中默默認為我不太有上進的心,只想用既有的技能與知識來混日子,接著我也會說出:你們年輕人對新東西比較在行的鬼話。新東西,萬宗不離其根本,是個有經驗的人來看比較容易吸收,還是一個懵懵懂懂的新鮮人?在我來看,是有經驗的熱血人。

想起來這類產業保值相當的低,既有知識與技能的衰退速度遠遠大於其他產業,當你越老就越有可能被賦予在工作上越大的責任,而相對的你會喪失越多學習新知的時間,接著頭腦更新的速度開始不及市場上出來的新東西,就因為如此,越早放棄學習的人越快以不正確的天秤來看待自己與別人的工作。

-----------------------------------------

總之,就這樣在很多人的幫助之下也來到了第五年,是一個說新不算,又完全談不上老的年數,又是嶄新的一年,加油。

2012年1月6日 星期五

火源之界_團隊高手的榮耀

就在kaka、辰藍、真影三個小飛俠的強大火力下,火鳥在還沒放出龍捲風前就跌落地上,所以在很多人拿到髒鳥(腐化火鷹)後,我們也拿到囉,賀!

排好隊伍,攝影師真會拍。


應攝影師要求來一張活潑的.......似乎.......有點.......


感謝:KAKA、真影、辰藍、若琪、小乾乾、阿龍、飛魚、飆魔、嘉嘉、我!

iOS學習_多個NSURLConnection的識別(利用accessibility等屬性)

如果進行稍微複雜一點的應用,就有可能在一個Class裡面使用多個NSURLConnection來連接不同的資料,但是根據這篇我們在使用NSURLConnection時會將各項處理交給相對應的delegate。

所以除非將各個delegate寫在不同的Class裡面,才有可能將這些要處理回應的程式碼分開,如果希望將處理的內容都寫在同一個delegate方法內處理,就必須要做一些識別。

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:urlReq delegate:self];

也就是說上述程式碼的delegate都想寫在self內,那麼就必須在delegate內判斷目前傳來的NSURLConnection是誰?

方法一:將每一個NSURLConnection在一開始就實體化,於delegate內判斷為那一個connection傳進來。

NSURLConnection *conn1;
NSURLConnection *conn2;

-(void)doPost
{
conn1 = [[NSURLConnection alloc] initWithRequest:urlReq delegate:self];
}
-(void)doPost2
{
conn2 = [[NSURLConnection alloc] initWithRequest:urlReq delegate:self];
}

//取得資料時觸發
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
if (connection==conn1)
{
NSLog(@"didReceiveData SendInfo");
}
if (connection==conn2)
{
NSLog(@"didReceiveData SendInfo2");
}
}


但我們所建立的NSURLConnection其實只有在送出要求時才有用處,卻因為要比較目前誰被呼叫而一直佔用記憶體空間,所以就希望類似用tag的方式來判斷目前的NSURLConnection究竟為何者?來作出對應的處理。

方法二:NSURLConnection沒有所謂的tag屬性,但是他有大量的accessibility屬性,所以這邊就是利用其他屬性來達到tag的效果。

-(void)doPost
{
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:urlReq delegate:self];
[conn setAccessibilityLabel:@"SendInfo"];
[conn release];
}

-(void)doPost2
{
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:urlReq delegate:self];
[conn setAccessibilityLabel:@"SendInfo2"];
[conn release];
}

//取得資料時觸發
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
if ([[connection accessibilityLabel] isEqualToString:@"SendInfo"])
{
NSLog(@"didReceiveData SendInfo");
[httpPostResponse appendData:data];
}
if ([[connection accessibilityLabel] isEqualToString:@"SendInfo2"])
{
NSLog(@"didReceiveData SendInfo2");
[httpPostResponse appendData:data];
}
}


*在網路上沒有找到類似的說法,所以不確定accessibility這類屬性是否有預設一定要使用的時機,但不論如何,如此即可簡單地判斷傳入的NSURLConnection,若使用有意義的名稱更可讓程式碼可讀性增加,自認為是一個不錯的方案。

iOS筆記_讓WebView可以放大縮小(Zoom)

如果需要顯示doc,pdf,jpg,txt等檔案型態可以藉由WebView來顯示,而預設的WebView並不能讓使用者進行放大縮小的動作,若是要加上該功能很簡單,只要設定scalesPageToFit=YES即可。

webView.scalesPageToFit = YES;

iOS學習_利用POST方法取得Server資訊(以NSURLConnection)

如果要做關於網路的應用,就必須要與伺服器溝通,所以串接HTTP要求或是WebService都是必測功能,本篇先以POST方法來傳遞要求並取得伺服器回應。

1. 建立以POST方法回應的頁面(以asp.net c#為例),內容很單純:接收兩個參數,並回傳一個json字串。

//於page_Load內
string tempName1 = Page.Request.Form["name"];
string tempName2 = Page.Request.Form["name2"];
Page.Response.Write("[{\"name\":\"" + tempName1 + "\"},{\"name:\"" + tempName2 + "\"}]");
Page.Response.End();


2. h檔,定義要接收結果的NSMutableData,並定義一個執行post的方法。

@interface AppDelegate : UIResponder <UIApplicationDelegate>{
NSMutableData *postResponseData;
}
-(void)doPostRequest;


3. m檔,以非同步方式,送出POST要求,並顯示回傳結果。

//a. 初始化NSMutableData,並執行doPostRequest。
-(void)initApp
{
postResponseData = [[NSMutableData alloc] init];
[self doPostRequest];
}
//b. 釋放該釋放的NSMutableData
- (void)dealloc
{
[postResponseData release];
[_window release];
[super dealloc];
}
//c. 於didFinishLaunchingWithOptions執行initApp
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self initApp];
[self.window makeKeyAndVisible];
return YES;
}
//d. 撰寫doPostRequest方法
-(void)doPostRequest
{
//第一步驟所建立的頁面url
NSString *urlPath = @"第一步驟所建立的頁面url/SendInfo.aspx";
//將NSString轉為NSURL
NSURL *url = [NSURL URLWithString:urlPath];
//因為要修改封包所以使用NSMutableURLRequest
NSMutableURLRequest *urlReq = [NSMutableURLRequest requestWithURL:url];
//指定封包方式
[urlReq setHTTPMethod:@"POST"];
//指定HTTP表頭
[urlReq setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
//產生封包內容,name=iphone.pdf&name2=b.jpg為送出的參數
NSString *requertString = @"name=iphone.pdf&name2=b.jpg";
NSData *requertBody = [NSData dataWithBytes:[requertString UTF8String] length:[requertString length]];
[urlReq setHTTPBody:requertBody];
//利用非同步方法送出要求
[[NSURLConnection alloc] initWithRequest:urlReq delegate:self];
}


4. m檔,撰寫NSURLConnection的delegate,共三個分別為:didReceiveResponse(第一次取得回應時,用於清空內容),didReceiveData(接收到資訊時,用於進度管理),connectionDidFinishLoading(完全取得資料時,用於程式後續處理)

//e. 撰寫NSURLConnection的delegate
//第一次回應時觸發
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
[postResponseData setLength:0];
}
//取得資料時觸發
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[postResponseData appendData:data];
}
//資料取得完成後觸發
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSString *jsonString = [[NSString alloc] initWithData:postResponseData encoding:NSUTF8StringEncoding];
NSLog(@"json:%@",jsonString);
NSArray *names = [jsonString JSONValue];
NSLog(@"You get %d names" , [names count]);
for (int i = 0; i < [names count]; i++)
{
NSLog(@"name: %@" , [[names objectAtIndex:i]objectForKey:@"name"]);
}
}

*於connectionDidFinishLoading有使用json轉換的相關lib(SBJson),若沒使用可直接秀出NSString來看結果。

如果頁面回傳資料是從資料庫撈取,將上述的names放入UITableView就可以呈現一個單純又非常重要的Web應用。

Android學習_ArcGIS Runtime SDK for Android(v1.0.1 released)

自從轉戰iOS,又看到iOS Runtime SDK的版本已經進入2.1版,就覺得ESRI似乎暫緩了Android的發展,沒想到近期Android Runtime版本就出來了,以往下載bate版本只需要在Eclipse的Help→Install New Software,輸入下載網址就可以快速取得(參考),但是正式版就必須要於ESRI的網站下載,就與其他軟體相同,必須先加入其會員才能下載。(位置:http://resources.arcgis.com/content/arcgis-android/sdk)

下載後是一個大小10.3MB,名為ArcGISAndroidSDK_1_0_1.zip的檔案。(不需解壓縮)
------------------------------------------------

安裝:
1. 至Eclipse的Help→Install New Software


2. 點擊Add按鈕,於Name輸入:ArcGIS 4 Android Plugin,點擊Local選擇剛剛下載的zip檔案。


3. 接下來就是Next→Next→Finish。
-----------------------------------------------

使用:
1. 建立ESRI空專案:File→New→Project,選擇ArcGIS for Android內的ArcGIS Project for Android



2. 建立ESRI範例專案:File→New→Project,選擇ArcGIS for Android內的ArcGIS Samples for Android(位置與上圖同)

3. 如果有已經開發到一半的專案,或是之前用Bate版開發的專案,就必須要手動將相關的jar加入。
a. 專案按右鍵選Properties,左側項目選擇Java Build Path。
b. 點選Add External JARs,選擇剛剛安裝的三個檔案(位置可以參考ESRI空專案的JAR位置(不確定是否每個人都相同,我的是:D:\Android\eclipse_c\configuration\org.eclipse.osgi\bundles\929\1\.cp\lib))
* ArcGIS_Android.jar
* jackson-core-lgpl-1.6.3.jar
* jackson-mapper-lgpl-1.6.3.jar
-------------------------------------------------

測試的一點點心得
1. 編譯的速度明顯變快,以往簡單的應用都需要編譯2-3分鐘,甚或編譯到當機,同樣專案目前大致10-20秒。
2. 許多內建方法皆改變,用Bate所製作的專案必須要進行幅度不小的修正。
3. Bate版GraphicsLayer有提供postInvalidate()方法,可於繪製途中不斷更新圖面繪製情況,1.0.1版移除了這個方法,導致目前只能繪完後才能出現繪製圖元。

*若是Android Bate版與iOS 2.1版相比,iOS整體操作的感受明顯優於Android,不知道Android Runtime v1.0.1的表現怎麼樣。

2012年1月3日 星期二

解決vSphere Client Open Console時出現:Unable to connect to the MKS:Host address lookup for server XXX failed:No such host is known錯誤

錯誤訊息:Unable to connect to the MKS:Host address lookup for server XXX failed:No such host is known.

錯誤畫面:

錯誤原因:DNS沒有正確解析(可能安裝vSphere Client的電腦並沒有加入網域)

解決方法:
1. 於→控制台→網路和網際網路→網路連線
2. 於連線網路上右鍵選擇內容
3. 選擇TCP/IPv4,點擊內容
4. 於一般中點選進階
5. 於DNS中點選新增,將環境中的DNS加入。