網頁

2012年9月26日 星期三

[Java] String.format method

之前寫了一篇有關String + vs String.format vs StringBuffer vs StringBuilder,發現了 String.format 耗費的時間都比較久,所以花了時間看一下原本 java source 中到底是怎麼實作的。

public static String format(String format, Object ... args) { return new Formatter().format(format, args).toString(); }

format method 是 JDK 1.5 才開始提供的,從上面可看出 method 內部 new 了一個 Formatter 來處理格式化字串,感覺很像 C 的 printf,看來時間都花在解析複雜的輸出格式,但不可否認得這 method 實在非常實用,簡化了格式化輸出,程式花的時間感覺很值得。
閱讀全文...

2012年9月21日 星期五

為什麼 iOS 6 放棄 Google Map

iOS6 一推出,馬上一堆人說地圖難用死了,還我 Google Map 之類,更有人發表了一篇 將自己的利益置於客戶之上? 蘋果移除Google地圖 ,蘋果真的這麼想不開,要挑戰使用者的習慣??

根據 http://techcrunch.com/2012/03/09/google-maps-api-vs-openstreetmap/ Google 更改了Google Maps API 的商業用途合約條款。從免費改成每加載一千次就收取四元美金。如果一支手機一年加載一千次,蘋果 iPhone 只算銷售一千萬支的量,一年就要向 Google 繳交四千萬美元,或許這才是主要原因,迫使 apple 需要推出自己的地圖服務,因為收費實在太貴了,每年繳這筆錢,不如開發屬於自己的map服務。不只 apple 這樣想,Wikipedia 也只好放棄 Google Maps 改用 OpenStreetMaps 。
閱讀全文...

2012年9月18日 星期二

[Java] String + vs String.format vs StringBuffer vs StringBuilder

說真的,現在ram要多大有多大,CPU也飛快,CPU和記憶體對一堆系統已經不在是個問題,所以字串這麼多不同的處理方式,其效率和佔記憶體大小,也越來越多人不在意了。

但我寫程式還是習慣參考 Effective Java 或 Effective C++ 的建議,畢竟那是一堆神人的經驗,應該蠻值得參考的,而且多動手實際試試看,不會有損失。
import java.io.*; import java.util.Date; public class StringTest { public static void main( String[] args ){ int i = 0; long prev_time; long time; Runtime runtime = Runtime.getRuntime(); long memory; String s; int max = 100000; System.out.println("Approach\tTime(ms)\tMemory allocated (long)"); prev_time = System.currentTimeMillis(); memory = runtime.freeMemory(); for (i=0; i<max; i++){ s = "XXX" + i + "YYY"; } time = System.currentTimeMillis() - prev_time; memory = memory-runtime.freeMemory(); System.out.println("+ operator\t" + time + "\t\t" + memory); prev_time = System.currentTimeMillis(); memory = runtime.freeMemory(); for (i=0; i<max; i++){ s = String.format("XXX %d YYY", i); } time = System.currentTimeMillis() - prev_time; memory = memory-runtime.freeMemory(); System.out.println("String.format\t" + time + "\t\t" + memory); prev_time = System.currentTimeMillis(); memory = runtime.freeMemory(); StringBuffer sb = new StringBuffer(); for (i=0; i<max; i++){ sb.delete(0, sb.length()); sb.append("XXX").append(i).append("YYY"); s = sb.toString(); } time = System.currentTimeMillis() - prev_time; memory = memory-runtime.freeMemory(); System.out.println("StringBuffer\t" + time + "\t\t" + memory); prev_time = System.currentTimeMillis(); memory = runtime.freeMemory(); StringBuilder sb1 = new StringBuilder(); for (i=0; i<max; i++){ sb1.delete(0, sb1.length()); sb1.append("XXX").append(i).append("YYY"); s = sb1.toString(); } time = System.currentTimeMillis() - prev_time; memory = memory-runtime.freeMemory(); System.out.println("StringBuilder\t" + time + "\t\t" + memory); } }
跑了好多次,去掉差異太大,取得平均值結果,果然和認知的差不多,一路+到尾的速度蠻不錯的,但記憶體佔的也最多;StringBuffer 和 StringBuilder 多做了 delete 和 toString 動作,但表現實在是非常的好;String.format 說真的非常好用,沒想到卻是最耗時間的,等有空時再來看原本的 java Source,看看它裡面到底賣什麼藥。 Approach Time(ms) Memory allocated (long) + operator 30 319616 String.format 588 76032 StringBuffer 40 43312 StringBuilder 17 43848

閱讀全文...

開放原始碼的東西真好用,但請尊重和遵守其放出的協議

開放原始碼的東西很好用,但是記得遵守協議,不要以為都不會被查到,一次就夠你受的,這次宏碁付出的代價世新手機完全無法發表了。
閱讀全文...

2012年9月12日 星期三

iOS 5.1.1 JB爆笑過程

只能說人有時需要瘋狂一下,不知道哪根筋不對,忽然想把iPhone JB了。這件事一樣發生在星期一,沒想到除了去驗車,展開爆笑的七堵俊德橋尋找之旅,回家後一股腦就在弄iphone越獄這件事。

網路說很簡單,同事和朋友也說很簡單,按一個鈕就行了。這樣應該很容易吧,沒想到過程會這麼艱辛....Orz

將iphone備份到iTunes後,馬上下載了absinthe-win-2.0.4執行,連接上iphone,按下Jailbreak按鈕開始,結果兩分鐘後,迎接第一次失敗,因為自動鎖定時間到了,螢幕一黑,JB終止.....

將自動鎖定設定成永不,再來一次,這次看起來比較順了,撐得比較久,absinthe 當掉了,不死心,換台電腦試試看,absinthe一樣當爽爽。

用iTunes把iphone回復到原廠最新版本狀態,結果一個動作按錯,資料備份開始回復,598個app需要安裝,就這樣一兩個小時過去了,好不容易回復完成,不死心又JB一次,absinthe還是當了,看來資料太多,它吃不消,只好再將iphone回復到原廠最新版本狀態,這次有特別注意,沒把備份資料回復回來,設定成一隻新iphone,再來JB一次,這次就一次到位,一下子就完成了。最後又是一個痛苦的等待,將備份資料回復到iphone。

JB完後有個要注意的地方,因iOS原本是BSD System,用終端機連進去,果然root及mobile每隻手機都是一樣的預設密碼,這兩個使用者的密碼不改掉,有可能被駭,到時白蘋果吃不完,馬上改掉密碼,避免這個問題。

JB完後,怎麼一點感覺都沒有.....
閱讀全文...

2012年9月11日 星期二

七堵俊德橋

前兩天生病還沒好,星期一只好請假一天,本來只是想說驗車的期限快到了,趁機把這事處理了,一路上老婆又提起,近期小孩要參加寫生,地點她查了就在往監理所這條路附近,等會驗完車,可以順便找找,探路一下。

沒想到這次驗車的速度真是有夠快,又不知道是不是頭昏,順便在旁邊把eTag也辦了,還好有拒絕自動補金額扣款的辦理,說實在對遠通超沒信心的....Orz

回家的路上,開得慢慢的,經過許多座橋,就是沒有俊德橋,只好回家換歐多麥再來找一次。遵循老婆所說的路去試,得到的是距離五堵2公理的標示,果然還是照傳統又是錯誤的路,XD。只好先去高速公路底下那吃豆花(上次為了躲雨無意間發現的),沒想到還不錯吃,大中午的消暑一下,順便用常連不上的中華電信3G網路查一下大概資料抓一下大略的方向。

由於查不到有路,只知道在七賢橋上游200公尺,因此先殺到七賢橋去,到時在視情況決定下一步,沒想到一到七賢橋就看到新的俊德吊橋,之前胡亂找,沒想到原來這麼近...... 俊德吊橋 歷史解說
基隆河上俊德吊橋,舊稱為金森橋,是在日治時期(民國二十年)建起的一座運送煤礦的吊橋,早期專門給運煤車通行使用。

後來基隆七堵、暖暖礦產逐漸式微,民國五十年間故基隆市長林番王任內把中間煤車軌道拆除,改建為人行專用吊橋,配上河岸迤邐風光,當年是七堵人的後花園,後來受到象神和納莉颱風摧殘,整條橋全毀,基隆河整治時,位在行水區裡的兩座舊橋墩倖存保留,屹立河岸。

舊橋墩

看一下基隆河

地圖

從俊德吊橋看七賢橋(看得到陽明大樓)
七賢橋已經列為危橋並限重十噸以下才可以通行,但是一堆貨櫃車超重行駛,真讓人擔憂哪時會垮掉也不知道,所以能不經過,就不要拿命去拼吧

閱讀全文...

2012年9月10日 星期一

如何去除毛巾的異味

這是個困擾很久的問題,毛巾用沒幾天後,就會開始有一股味道,用洗潔精去洗,卻越洗越黏,實在讓人受不了。

心理也很納悶,難道就只有我家會遇到這種問題嗎?於是就上網找一找,好多五花八門的說法,感覺好複雜,最後挑了一個最簡單的:放一些鹽和毛巾戳洗,再泡個幾分鐘,然後再戳洗,最後再用水沖乾淨,味道真的不見了。
閱讀全文...

wHY MediaFire always show Invalid or Delete File

最近要從網路空間(MediaFire)下載檔案,常常會出現 Invalid or Delete File 。讓我覺得很納悶,明明在這台機器才剛下載,為什麼換台機器卻不行了,最後才發現,原來是沒有安裝 Adobe Flash Player ,所以不給下載,因為廣告出不來,就不給下載,實在有夠Orz....
閱讀全文...