2011年7月6日 星期三

iPhone 開發教學 - 測試 Xcode 4 和 iPhone 3G iOS 4.2.1 取得網路資料

好久沒碰 Xcode 了,上一次寫這種筆記應該是一年前了吧?昨天把公司的環境打理了一下,下載最新的 Xcode 4.0.2 and iOS SDK 4.3,接著把 iPhone 3G iOS 4.2.1 的機器測一下網路連線,結果會噴訊息:


warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/usr/lib/info/dns.so (file not found).


因為 Xcode 沒有支援 iOS 4.2.1 的環境,接上手機後會從手機上下載相關環境資訊,但偏偏就是沒有 info/dns.so 這個檔案,查了一些文章,解法也只是從 4.2 裡頭複製一份,如此一來就不會出現訊息。


xcode 4.0.2


實際測試時,在 iOS 4.3 模擬器可以正常,但在 iPhone 3G iOS 4.2.1 出錯,一直以為是 DNS 反查失敗,其程式大概如下:


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSData *d = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"TheWebURL"]];
    NSLog(@"%@", d );


    // Override point for customization after application launch.
    // Add the navigation controller's view to the window and display.
    self.window.rootViewController = self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}


其中 "TheWebURL" 是比較複雜的網址,如果只是 "http://www.google.com" 這種不會有問題,但如果是 "http://www.google.com.tw/q=?ooxx" 帶有複雜參數且非常長的,看到的是 (null) 的現象,就陷入跑去找到正確的 dns.so 的深淵了。


後來,不知何時跑去印出 NSLog( "NSURL:%@" , [NSURL URLWithString:@"TheWebURL"] ),才發現在機器上也是噴 (null) ,這下可好,就跟 dns.so 沒啥關係了吧?!


急轉而下,改成找 NSURL 回傳是 null 的解法,不一會兒就解掉了:


NSString *url = [[NSString stringWithFormat:@"TheWebURL"] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog( "NSURL:%@" , [NSURL URLWithString:url ] );


可以解釋的理由是網址內有特殊符號,在使用上如果丟進較新的瀏覽器時,瀏覽器有的會自動幫你處理,因此,在 iOS 4.3 環境中,NSURL 會自動處理,但是舊版 4.2.1 就沒有了。


至於 dns.so 的問題?看來只有真的碰到時,才能來解了 Orz 又藏了一顆未爆彈。


2011年6月28日 星期二

否極泰來

上週生了場重病,應該是有生以來最嚴重的一次吧?一連五天,每天晚上的活動就是睡覺跟流汗。這大概要追究到上上週二的活動吧?那時候連續兩天參加排球比賽,第一天打一場還好,但第二天連打三場,在比賽過程中果然受傷了,過於疲憊的狀態下,週末接連感冒生重病。


至於衰事部分,那就是上上週三,一天比完三場排球後,腳趾受傷,指甲黑掉了,上網查了一下資訊並且詢問一下練系籃的大學室友,大概要完全恢復也要數個月甚至快一年的事。那幾天打完球想回宿舍洗澡,發現宿舍浴室維修,從週三起至週五都不能使用,只好拖著傷跑去公共廁所洗澡,感覺真像成功嶺當兵,汗流滿身地排隊洗澡。接著週末身體就開始微微生病。就這樣週二看了醫生,醫生建議我請假回家睡覺,痛苦真正開始,一直睡覺、喝水、流汗。直到下一個週末才好轉。


看來,人逢低潮怪事多。除了自己本身外,還有同事離職等事,甚至激起蝴蝶效應,人可是一批批地要走,可真是內憂外患,就連在職進修的同事都選擇進入休學狀態。


我想,越是低潮越是轉機吧?既然身體健康恢復,接下來就沒啥好擔心,好好把事情做好吧!


給自己的一些提醒:


不要只想要做大事,那肯定只是個清高的空轉模式,因為沒那麼多的大事要做或是大事為何要留給你做?就算創業也不是每個案子都如心所願的進行,只能持續保持好自身狀態,這樣碰到真正有價值的案子才能有本錢!就像 BBS 的某則廣告:「人人都想做英雄,卻沒人幫媽媽洗碗」,我想小事也有他的意義,過於排斥不見得是好事。


另外,也要提醒自己不要過於迷戀某個技術,因為技術是搭配案子才有了靈魂的,沒有施展的場合,那只是淪落到紙上談兵。


最後,抱怨少一點,正向看待生活吧,並且機會到處都有的。


2011年6月12日 星期日

工欲善其事,必先利其器

Logitech MK100


正所謂工欲善其事,必先利其器,身為一位程式設計師,怎能沒有一副好鍵盤呢 XD 不過啥青軸、茶軸還是黑軸的,我搞不清處,查了一下才了解,但也不太需要啦,那種上千的鍵盤經濟上還不太能承擔 XDD 便買了便宜中偏貴的 Logitech 牌,但這款應該是 Logitech 中最便宜的鍵盤組吧(鍵盤是 PS/2 接頭,滑鼠是 USB 並附轉 PS/2 接頭)?在新竹 NOVA 逛了會,價格約比 PCHOME 便宜 50 元而已,平均起來,一個鍵盤約 260 元。


2003-keyboard


前幾天滑鼠有點怪怪的,例如出現連點的怪現象,以前可能是中毒現象,但也有可能是滑鼠快壞了!這隻舊滑鼠忘記是在哪邊買的,但我記得價格是 99 元而已,而鍵盤更舊,是 2003 年第一次組電腦時用 100 元買的 XD 用了 11 年超髒的!順便買一把新的吧。用了新鍵盤之後,覺得便宜跟貴的還真的有差,雖然只差了兩百不到,真不知青軸、茶軸和黑軸那種上千的又會是怎樣的差距?選用 Logitech 是以前有一次花了 350 元買他的滑鼠,覺得真的有比較好用啦,就選擇這個牌子囉。


無論怎樣,換了鍵盤程式功力並不會像小說中的武俠,換了刀就變猛的啦。啊啊,文章還是少打點,多寫點程式把握青春熱血吧!!


機車人生

人生啊,如同騎著車瞧見轉換燈號的號誌,加油催過去不見得是好事,反而穩穩地等待下一個通行的燈號,不久後還有機會與前方的車隊又一同等在另一處的紅綠燈。


這是在新竹光復路的騎車心得 XD 加油催過去,除了承擔行車風險外,仍只是一同等在下一個燈號罷了。反而在目前燈號穩穩等待,往後的路還可能走的更順呢(通常大條馬路的燈號都有設計過,一旦綠燈就可以一直通行)。如此一來與前方的車隊並不會相距太遠,甚至還會一同停在下一個路口呢。


人生的機會也是如此啊,請專注自己的步調,要有信心,天助自助者。


2011年6月9日 星期四

[Linux] 安裝 PostgreSQL、PostGIS 和 pgRouting @ Ubuntu 10.04

上一次用 PostgreSQL 已經是一年多前了,那時是研究 HadoopDB 啦。


最近要使用 PostgreSQL 都忘光光了,就順便再筆記一次,這次用到一些跟圖資相關的 plugin,搞得有點久,果然隔行如隔山啊。


參考資料:


Installing PostgreSQL 8.4, PostGIS 1.4.1, and pgRouting 1.0.3 on Ubuntu 9.10 (Karmic Koala)


Installation - Open Source Routing Library


安裝環境:


Ubuntu 10.04 server 64-bit


流程:


安裝相關環境,雖然只是一道指令,但裝了非常多東西,下載都要一陣子


$ sudo apt-get install postgresql postgresql-server-dev-8.4 postgis proj libgeos-dev libboost-graph-dev libcgal-dev cmake build-essential postgresql-8.4-postgis


安裝 The Genetic Algorithm Utility Library (GAUL)


下載 gaul-devel-0.1849-0.tar.gz


$ tar -xvf gaul-devel-0.1849-0.tar.gz
$ cd gaul-devel-0.1849-0
$ ./configure --disable-slang
$ sudo make install


安裝 pgRouting


$ wget http://download.osgeo.org/pgrouting/source/pgrouting-1.05.tar.gz
$ tar -xvf pgrouting-1.05.tar.gz
$ cd pgrouting-1.05
$ cmake -DWITH_TSP=ON -DWITH_DD=ON .
$ sudo make install


設定相關環境(非必要):


解決 ERROR:  could not load library "/usr/lib/postgresql/8.4/lib/librouting_tsp.so": libgaul.so.0: cannot open shared object file: No such file or directory 問題


$ sudo vim /etc/ld.so.conf.d/libgaul.conf
/usr/local/lib/
$ sudo ldconfig


調整 psql 使用權限,讓 192.168.x.x 連進來的可以不作權限確認


$ sudo vim /etc/postgresql/8.4/main/pg_hba.conf

# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
#host    all         all         127.0.0.1/32          password  
host    all         all         192.168.0.0/16        trust


使用範例:


$ createdb -U postgres -E UNICODE template_postgis
$ createlang -U postgres -d template_postgis plpgsql
$ psql -U postgres template_postgis < /usr/share/postgresql/8.4/contrib/postgis.sql
$ psql -U postgres template_postgis < /usr/share/postgresql/8.4/contrib/spatial_ref_sys.sql
$ psql -U postgres -c "SELECT postgis_lib_version();" template_postgis
 postgis_lib_version 
---------------------
 1.4.0
(1 row)
 
$ createdb -U postgres -E UNICODE -T template_postgis mydb
$ psql -U postgres mydb < /usr/share/postlbs/routing_core.sql 
$ psql -U postgres mydb < /usr/share/postlbs/routing_core_wrappers.sql 
$ psql -U postgres mydb < /usr/share/postlbs/routing_topology.sql 
$ psql -U postgres mydb < /usr/share/postlbs/routing_tsp.sql 
$ psql -U postgres mydb < /usr/share/postlbs/routing_tsp_wrappers.sql