2013年9月15日 星期日

旋風式杜拜(Dubai)之行 - Day5

From Evernote:

旋風式杜拜(Dubai)之行 - Day5

前言(100/11/12)

每天起床迎接我的天氣都這麼好, 每棟大樓設計都不一樣, 賞盡各建築師的傑作, 讓人心情愉悅.


早上發現了附近的一家super market.
貨架上各式各樣的優格.


看起來應該是"舶來品"的水果


天氣熱嘛, 總是要吃點甜筒~


喔~然後網友有推薦 "必吃" 雪糕也讓我買到啦!!!! 還不錯喔 ^^b


觀光
飯店通往海邊必經的一座橋 (白天版)


橋上可以看到飯店後方的港灣, 果然停滿有錢人的遊艇


過了橋就是面海的飯店了, 飯店相連著好幾棟都由空橋串起. 


空橋下排班的計程車


飯店的大門側邊, 光線不錯, 順手就拍了


好~熱~鬧~阿!!!


不過癮? 再補一張 >////<


走累了, 找了一家比薩店


吃完中餐我就走回飯店, 也沒啥休息就跑到頂樓瞧瞧.
除了大馬路兩旁比較熱鬧, 再往內陸看去就是一片黃沙了~ 


飯店頂樓的泳池, 水靜靜的躺著沒有人打擾


冒險
回到房間想想明天就要搭機回台灣了.
心中總有些不甘(大誤) ,
看到梳妝台放著一本旅遊導覽, 一台沙漠中的吉普車後面一群駱駝映著日落餘暉.
在台灣作功課時網友也有介紹Desert Safari, 飯店櫃檯也都有agent可以馬上安排.
我心想下次什麼時候才有機會再來這麼神祕的國度.
心一橫, 衝到樓下找了飯店的agent幫我book行程. 
(幫我訂位的agent是位高挑金髮美女, 又很溫柔, 印象好極了>////<)

因為是散客, 所以與我同行的有兩位法國人跟一個俄羅斯妹妹.

駕駛是位身穿白袍的阿拉伯人,
一坐上車就可以聽到車子內濃濃的中東風音樂.
駕駛開得一副很悠哉的樣子, 不時跟副駕駛座的俄羅斯妹妹哈啦.
逗的她咯咯笑著~

駛離市區的高樓, 映入眼簾的是土黃色調的民宅.


中途的休息站, 可以看到附近已經幾乎是沙漠了


休息完後再度出發, 準備要去"衝沙"啦!!
駕駛越來越嗨~ 一邊開車一邊扭腰擺頭的XD
來到了沙丘邊, 駕駛下車把輪胎放掉一點氣.
然後回到駕駛座卻沒坐下來, 像特技表演一樣.
半個身體露在外邊, 一手持方向盤, 一腳踩油門, (車門開開的喔!)
阿~阿~阿~整車伴隨著尖叫聲就往下衝!!!

然後瘋狂的衝沙就開始了.
音樂聲幾乎開到最大!!
車窗外不時看到沙子噴上來.
駕駛最喜歡斜斜的從側邊開上沙丘, 然後在我們覺得車子快要翻了的時候,
猛然一轉方向盤, 突然往下衝, 搭配俄羅斯妹妹的尖叫聲.
我覺得駕駛超嗨的, 而且是越來越嗨XD

衝沙刺激歸刺激, 但是我不時撞到車頂,
而且大幅度的上下顛簸, 沒幾分鐘我就想吐了XD
幸好半路有下來看駱駝拍了幾張照片.
後來又有到山丘上跟其他車隊會合休息了第二次.
不過休息時間都很短, 保證沒有卡油水或虛應故事的啦!


沙漠中看著夕陽慢慢落下真的很美, 跟著大家倒數 5~4~3~2~1 然後一起讚嘆這幅美景!



晚上的BBQ buffet 大家自己找位子, 席地而坐, 看表演大啖美食!


晚上一直到8:30才離開營地, 回到飯店後只有我跟法國遊客下車.
這才知道俄羅斯妹妹要跟司機跑去"續攤" >/////< 我跟法國遊客相識而笑, 跟他們道別, 就各自回房休息了.
嗯~晚安了Dubai, 明天要搭機回家囉~

2013年9月13日 星期五

旋風式杜拜(Dubai)之行 - Day4

From Evernote:

旋風式杜拜(Dubai)之行 - Day4

前言(100/11/11)

今天我不貼三餐文了XD
杜拜這邊星期五是不上班的, 所以只有一位同事加班陪我.
早上也是"打滴"到沙漠中央洽公.

真的是沙漠中央喔!
車子順著路旁的小徑, 方向盤一轉從原本的柏油路切到了黃沙滾滾的…沙漠中.
然後就在煙塵瀰漫中切著西瓜, 上下顛簸, 然後在我已經完全迷失方向之際, 抵達公司.
其實襯著藍天矗立在荒漠之中也是很有fu的! (肅然起敬貌~)

公司停車場

公司對面還是工地

瞧~真的就坐落在沙漠中啦

中午同事Noor帶我到附近的餐廳覓食, 不過食堂是休息的.
後來跑去吃休息站旁的Subway~
我們中途也聊了幾句, 交換了一些訊息.
老實說, 這邊的問題不是always發生, 跟台灣的同事con-call抓了些server的問題.
其他的就是盡可能蒐集資料, 回飯店也一直try並試圖重製問題.
如果沒法釐清真正的問題點, 我可能就要被"就地解決"了!

救兵
老闆請旅行社幫我提早了回程班機時間.
跟Noor解釋過我們工程師已經蒐集完資料, 有些後續工作需要回台處理.
這邊的debug工作算是告一段落啦~

回飯店後, 趁太陽還有點餘暉, 我趕到海邊拍個夕陽.

這次往回拍海灘邊的飯店, 捕捉的角度有比較正面一點.

原本想說要來犒賞自己一下, 結果點了個鹹到不行的"撈麵"? "炸麵"?

還有甜吱吱的草莓汽水…

晚安了, 明天星期六終於可以休息一下了.

旋風式杜拜(Dubai)之行 - Day3

From Evernote:

旋風式杜拜(Dubai)之行 - Day3

晨間(100/11/10)
早起後又開始在附近找尋商店買早餐. 早上沒時間, 不然跨過橋就是海邊了.

很乖的幫公司節省開支 - 我的早餐

Debugging...
這天中餐就比較早開動了XD
個人滿喜歡這種印度料理的, 咖哩雞肉+生菜+卷餅 ,比起"偽"中式便當好吃喔!

晚餐自理真的有點頭痛.
餐廳已經不多了, 菜單也完全看不懂, 勉強從英文推敲餐點的樣貌.
繞來繞去, 最後還是決定來吃個"鮮蝦炒飯"好了.
喔~蝦子呢? 我吃完了.
蛤~飯都沒吃, 這麼挑食喔? 不,我已經吃一半掉了, 太飽了!
一點都不誇張喔. 可能點到"家庭號"份量真的是嚇死我了@@~

飯後往海邊走去, 從海灘往回照, 燈火通明很是熱鬧~

街道上有些市集, 不過時間有點晚了, 沒特別拍照, 隨意看看就打道回府了~




旋風式杜拜(Dubai)之行 - Day2

From Evernote:

旋風式杜拜(Dubai)之行 - Day2

晨間 (100/11/09)

早上起床後因為飯店沒有附早餐的關係, 我到附近的商店買了早餐.
痾~有點像比薩的麵包跟一杯巧克力牛奶


喔~在台灣出發前, 同事跟我說當地會有同仁開車來載我.
然後我在Lobby等待約定的時間, 果然有台貼有公司logo的車子來載我了!
哈, 路上我們用英文稍微聊了一下.
水, 杜拜這邊很貴.
油, 便宜到不行.
車, 跑車滿街跑, 有錢人家3,4台車不稀奇, 稅金很少是主因.
外國人很多, 度假, 置產, 搞生意, 乘私人遊艇, 熱鬧的很.

Debugging...
第一天的中餐, 是一直到快下午2點才吃~
我都快餓昏了, 後來才知道當地沒有這麼早吃中餐的習慣.
不過同事很貼心的幫我選了家中式便當:)


當工程師怎麼可以沒有可樂~哈

下班
約莫晚上7點來到了另一間投宿的旅館Marina Byblos Hotel
放下行李後立馬尋找晚餐, 老實說旅館外頭黑漆漆, 沒看到什麼商店~
後來路過了一間百貨公司就走進去覓食了.

結果晚餐怕會超支, 選擇了麥當當, 還中東特殊口味, 不過薯條居然指給我裝一半~吼!

這是要過馬路的人行陸橋, 還有"輸送帶"~哈, 馬路是有多寬啦? 嗯~大概16線道吧XD

房間一隅


這飯店鄰近海邊, 明天有空再往那邊探索好了~

2013年9月12日 星期四

旋風式杜拜(Dubai)之行 - Day1

From Evernote:

旋風式杜拜(Dubai)之行 - Day1

前言
因為一些技術上的問題,
我非常有幸的被公司指派前往杜拜解決當地BU的問題.
一整個旅程中很多驚險的事情, 也鬧了不少笑話,
雖然過了這麼久的時間,
我對這特別的旅程印象卻是依然清晰.

由於事發突然, 我記得出發前是自己上網訂飯店的.
適逢杜拜的一個很大的節慶假期的尾巴,
怎麼都訂不到可以連續入住的飯店,
索性拆開來訂, 幫公司省錢, 又可以體驗到不同飯店的風情.
第一天住的是市中心的 Byblos Hotel
後來的幾天住的是 Marina Byblos Hotel

出發前我還有在網路上換了一些旅支,
可能貪圖那一點點匯率上的優惠吧,
我現在真的想不透我怎麼會換了旅支想拿去杜拜用.

啟程 (100/11/08)
台北13:05  >  香港14:55 
香港16:40  >  杜拜21:45

搭乘國泰的飛機在出發前拍了一張


航程短短到香港轉機中間有附了個點心,立馬拍了一張
熱熱的,好好食


轉機
下了飛機發現香港天氣似乎不太好, 隔著玻璃窗拍張照
在免稅店還花了大把鈔票 買了一個轉接頭

Juniper的廣告作很大,要搭接駁車過去其他航廈轉機

起飛後不久, 晚餐時間到

機場有點大, 繞了很久, 沒有空橋, 然後有接駁車來載人, 第一次所以感覺很新鮮


抵達
接下來已經是當地晚上10點了, 刺激的事也接踵而來
入境檢查隊伍排了很久, 檢查相當嚴格, 還得瞳孔掃描

終於入境了!
我緊握者手中行李跟小紙條還有我的旅支,
一邊東張西望, 一面跟著人群走著~
在大門口附近的窗口問了小姐要怎麼換旅支,
結果小姐晴天霹靂的告訴我, 我剛剛還沒過海關前就應該換了!

我問她該怎麼辦?小姐只是聳聳肩...
我頓時傻眼, 心也涼了半截.

我口袋剩下的50港幣是香港買轉接頭找的零錢.
剩下一些台幣跟毫無用武之地的旅支.
哀求海關讓我走回去換旅支?
還是該打電話向誰求救呢?
打回台灣? 還是試試看當地同事的電話?

糗大了, 還沒進公司解bug, 才下飛機就卡關.
就在我緊張到快要崩潰的剎那,
我看到不遠處的ATM讓我想起,
之前去韓國玩有將一張Visa金融卡特別開通了海外提款的功能!

幸好ATM有提供英文介面,
我也在半嘗試的過程中領到了500 AED 花了台幣4252(含手續費)
驚險過了第一關後, 我往外頭走去坐上了一台排班計程車.

跟他說明了飯店名稱後, 他就開著Camary帶我直奔目的地.
真的是直奔喔!! 我坐在副駕看著他的時速表一度來到140!
超車技術一流, 閃個燈就油門下去~
10來分鐘就到了飯店, 然後跟我收了80AED (大哭)

驚魂未定的我check in後, 進了電梯, 上了樓
想說房卡怎麼都打不開,
突然聽到門後好像有人講話的聲音.
我倒退了幾步, 看看房卡號碼, 再抬頭看看房門~噗

我跑錯樓層了XD

第一天的驚魂已經夠了!!
害我整個人緊張到拉肚子…

PS 如果跟我一樣住這間Byblos的15樓晚上樓上的夜店包準會讓你high整晚...

2013年9月11日 星期三

iOS 使用SDWebImage在table view載入不同高度圖片

From Evernote:

iOS 使用SDWebImage在table view載入不同高度圖片

前言
剛開始我有種困擾,
我希望用table view的方式載入圖片。
下載方式既是非同步,
每個table view cell還要依據圖片大小來調整高度。
這…這...我一度有打算放棄,
改用scroll view來實作~

困境
但是一想到最基本的scroll view實作方式,
就是在create content時指定好frame的大小及內容來源。
也就是說,如果我有100張圖片,豈不要發100個requests!
網路接口都被我塞爆了,再者高度也無法事先取得阿!

咦~其實有比較高明的作法,
我只載入前後幾張圖,loading總比較輕了吧。
不過通常都實作在有paging的情況下(就是一頁一頁翻的效果)
這沒法子恣意滑來滑去。

那我就取消paging限制讓他滑來滑去阿~
可是問題又來了,
scroll view content一直被我切換的狀況下,
request還是無止境的一直發,圖片load下來的效果讓我很擔憂阿。

實作
我是沒用scroll view下去實作試試看,
著眼的還是table view的特性,
就是user滑動過程,只有看得到的部分才會進行繪製

1
- (UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath

這樣可以減輕大部分loading,但是還有圖片高度阿!
很窩心的是stackoverflow上也有類似的提問 ( 連結在此 )

重點就是 以image url為key將圖片高度存起來
然後在設定cell高度的function去判斷

1
2
3
4
5
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *idxKey = [imageArray objectAtIndex:indexPath.row];
    CGFloat height = [[[NSUserDefaults standardUserDefaults] objectForKey:idxKey] floatValue];
    return (height &lt; 1) ? 240 : height;
}

回頭看一下SDWebImage這邊要怎麼用好了。
可以到 GitHub 下載,MIT License

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
 [cell.imageView setImageWithURL:[NSURL URLWithString:urlKey]
                   placeholderImage:nil
                          completed:^(UIImage *image, NSError *err, SDImageCacheType typ) {
                                  [activityIndicator removeFromSuperview];
                                  // save height of an image to some cache
                                  [[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithFloat:image.size.height * 320 / image.size.width]
                                                                            forKey:urlKey];
                                  if ([record containsObject:[NSString stringWithFormat:@"%d",indexPath.row]]) {
                                      NSLog(@"index:%d record already have it! curr is %d", indexPath.row, currentLoadingIndexPath.row);
                                  } else {
                                     //animation effect seems not good enough...
                                      //[tableView beginUpdates];
                                      //[tableView reloadRowsAtIndexPaths:@[indexPath]
                                      //                 withRowAnimation:UITableViewRowAnimationFade];
                                      //[tableView endUpdates];
                                      [mainTable reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
                                      [record addObject:[NSString stringWithFormat:@"%d",indexPath.row]];
                                  }
                                 
                          }];
               
        return cell;
}

在completed底下寫個block
o 移除activityIndicator。 (這轉圈圈的效果稍後補充一下)
o 把image的高度用url當key記錄起來。
o 建一個array (record)把 完成loading image的indexPath.row給記起來
   這樣的用意是為了不希望每次都重畫整個table view。
o 註解掉update特定table cell的原因是我試起來的效果不好。

補充
如果想讓SDWebImage的placeholder放一個轉圈圈的效果,
比較快的作法是把 activityIndicator放在cell.contentView 上面。

1
2
3
4
__block UIActivityIndicatorView *activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
activityIndicator.center = CGPointMake(160, 120);
[cell.contentView insertSubview:activityIndicator atIndex:999];
[activityIndicator startAnimating];

不用試cell.imageView了,我花了很多力氣,都沒成功 :(
希望這樣可以順便幫到一些忙~

2013年9月9日 星期一

[Android] 難搞透了的R.java

雖然我發現,stackoverflow的分享功能很方便
但還是在我blog留點資料好了 ~"~ 

對新手一定要這麼殘忍嗎??
一起手馬上遇到這難搞的R.java問題.
如果一直卡在R.xx.xx cannot be resolved or is not a field.

最有可能就是class import了 android.R 這個壞東西,
請改成packagename.R 就搞定了~呼.

花了我好幾天時間, 搞得我都快崩潰了的爛問題!


希望能幫到快要絕望的人!
資料來源: stackoverflow

2013年9月2日 星期一

使用WebView來顯示google街景地圖

緣起
2012年底新版的google map開始就支援街景地圖,
如今google官方也都有開api出來取用街景.
如果app不想讓user跳出程式來觀看google街景地圖,
也不想k一堆官方文件, 用WebView來嵌入是最快選擇了.


需求
有gps座標資料, 然後想要顯示該地區的街景


實作
比較老土的作法是把下面的string存成一份html檔案在local,
然後讀出html後轉成string再把經緯度給填上.

後來發現也不用這麼搞, 直接寫一份就對了!


NSString *htmlString = [NSString stringWithFormat:@"<html>\

                            <head>\
                            <meta id=\"viewport\" name=\"viewport\" content=\"width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;\">\
                            <script src='http://maps.google.com/maps/api/js?sensor=false' type='text/javascript'></script>\
                            </head>\
                            <body onload=\"new google.maps.StreetViewPanorama(document.getElementById('p'),{position:new google.maps.LatLng(%f, %f)});\" style='padding:0px;margin:0px;'>\
                            <div id='p' style='height:460;width:320;'></div>\
                            </body>\
                            </html>",lat, lon];
    webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];
    webView.scalesPageToFit = YES;
    webView.scrollView.scrollEnabled = NO;
    webView.scrollView.bounces = NO;
    webView.delegate = self;
    [webView loadHTMLString:htmlString baseURL:nil];

完成圖如下:
























沒有很高深的技巧, 也不會太複雜.
分享給需要的人~

內容回應