部落客廣告聯播

2011年12月23日 星期五

Log4j File Appender: TimeAndSizeRollingAppender

Apache Log4j 內建提供的Rolling File Appender還不夠合用嗎?

目前Log4j內建有:

Extra提供有:

還不夠合用?  可以試試下面的 TimeAndSizeRollingAppender : Time-and-Size Rolling, Scavenging Appender (http://www.simonsite.org.uk/)


另外log4j.xml設定檔範例可見:
http://wiki.apache.org/logging-log4j/Log4jXmlFormat

2011年11月14日 星期一

XmlUnit

寫JUnit測試時,若想針對XML dom做測試、比較等處理,XmlUnit是很稱職的Library呀~
只不過比較可惜的是, 現仍只支援JUnit1.3版~

更多XmlUnit的相關資訊請參考:  http://xmlunit.sourceforge.net/

另外xmlUnit還有for .NET版本喔....

2011年8月12日 星期五

霸道~


今天心血來潮,想到好久沒登入AdMob,想說去看看有沒有人用我寫的Android軟體,展示率和點閱率不知道如何?

沒想到一登入就看到這畫面:
您的帳戶因為無效活動或屢次違反政策,目前已經遭到停權。










說真的我也不是靠這賺錢(事實上要靠這個賺錢 先餓死吧),寫Android程式到目前為止也是玩票性質, 但我的AdMob帳號被鎖了我竟然一點也不曉得,到現在才知道XD

想了解到底我做了甚麼(是我嗎?)會被鎖?
沒想到Google已經先聲明了「由於我們必須保護專利偵測系統,因此無法提供這些帳戶活動的任何相關資訊給發佈者」....  啥跟啥??

說真的  給人挺霸道的感覺~
申訴?  七刀  我一點都不想再浪費時間在上面~  我倒還寧願來這寫寫我的怨言~  吐吐怨氣~

我對Google印象不差~
但是就事論事~   如果想在Google身上鑽到一塊半毛,那就先體驗它的霸道吧~

2011年8月11日 星期四

如何調整Android Tab元件的高度~

使用TabActivity或TabHost時,若想調整分頁(Tab標籤)高度時,可使用下列程式碼:


//reduce tab height
for(int i=0;i<tabHost.getTabWidget().getChildCount();i++){
	        ((TextView)((RelativeLayout)tabHost.getTabWidget().getChildTabViewAt(i)).getChildAt(1)).setHeight(30);
	        tabHost.getTabWidget().getChildAt(i).getLayoutParams().height = 40;
}

2011年8月10日 星期三

Jenkins CI 及 關於CI的兩篇文章

最近CI真是夯~ 好多國內外文章都在討論CI~

繼上篇「Continuous Integration與Hudson」一文~

今天再推兩篇文章:

然而,還發現了一件事:
原Hudson的建立者因為與Oracle內部的意見不一,所以另起爐灶建立了Hudson的分支 -- Jenkins CI 專案 (話說兩個專案的圖示都是以管家作為標誌, 一個白頭髮, 一個前額禿)~


選Hudson 還是選 Jenkins?  看看別人怎麼說吧:  Hudson vs Jenkins CI?




如何設定Android TabHost元件的Tab文字顏色??

如何設定Android TabHost元件的Tab文字顏色??

詳請參考:

http://stackoverflow.com/questions/5155441/android-tab-text-color

2011年8月5日 星期五

Continuous Integration與Hudson


小弟不才,一直只知道埋頭寫程式便不去思索在軟體開發中其他重要的事情是甚麼,就像閉門造車一樣....

有幸在今年的JavaTwo 2011聽了MaoYang的「使用Hudson打造你專屬軟體建構機器人」一課,雖然課程短短一小時,但讓我初步了解了持續整合(Continuous Integration;CI)的概念,與Hudson這個OpenSource的CI Server。



EasyMock + JUnit4 做單元測試


詳請參見良葛格的JUnit學習筆記:
http://caterpillar.onlyfun.net/Gossip/JUnit/EasyMock.html

更詳細的使用說明可參考官網:

http://easymock.org/EasyMock3_0_Documentation.html


2011年7月31日 星期日

Android: 如何在TabActivity裡面開啟Activity?


在設計Android程式時,我們使用了(繼承)TabActivity,以實現有分頁的畫面。
今天我們在分頁裡面有一個ListView列表元件,我們希望點選了某個ListItem時會出現另個Activity畫面(並且是在該Tab中),接著我們按下手機上的返回按鈕時,畫面又會回到剛剛的ListView列表的畫面,這該如何時做呢?

這裡有一個很詳盡的範例可參考:
How you can open Activities in tabActivity(Nested activities)

2011年6月10日 星期五

使用Eclipse配合AXIS2來建立WebService (Service及Client)

用Eclipse來建立WebService真的是很方便又簡單,下列這篇文章介紹了如何使用Eclipse配合AXIS2來建立WebService (Service及Client):
http://hans0713.blogspot.com/2008/07/eclipsewebservice.html

建立完WebService後,若需要整合AXIS2與Spring Framework,可參考官方文件:
http://axis.apache.org/axis2/java/core/docs/spring.html

2011年5月17日 星期二

Struts 2 tags OGNL裡的單字元字串

Struts2 的OGNL真的是滿難用的東西,
但是用了Struts2的tag就不得不碰,
在使用OGNL時若需比較單一字元內容的字串時,
請參考:
http://struts.apache.org/2.x/docs/why-wont-the-if-tag-evaluate-a-one-char-string.html

2011年4月25日 星期一

jQuery Mobile的history Stack與Login

故事是這樣的,在使用jQueryMobile時進入第一頁點連結進入其他頁時,
畫面上的Header左上角就會跑出'Back'回上頁的按鈕,這算是貼心的設計。

但是我現在在進入第一頁前多了一個Login頁面,
login成功後便會導向第一頁,但在此時進入第一頁,我不希望左上角有'back'按鈕
讓使用者按下後又跑回登入頁。這我該如何解決呢?

很簡單的我只要在登入頁的
多加一個data-ajax="false"屬性,就OK拉~

2011年4月20日 星期三

2011年2月24日 星期四

GAE與Google Map Geocoding API 每日2500限制




Google Map地理編碼API將一堆地址轉換成可在地圖上顯示的經緯度,程式都寫好了,沒想到在測試時才發生了QUERY_OVER_LIMIT的錯誤,回頭仔細看了下Google Map地理編碼API的文件該API有每日只能要求2500個地理位置的限制(參考Geocoding Strategies),更糟糕的是他還是IP-based的限制,也就是說在GAE這種共用基礎建設的平台上,由於IP也是共用的所以你可能連2500個都得不到(最壞的狀況是額度已經被同IP的其他人的程式用光了囧),沒辦法,畢竟是免費的,雖然說要錢的Google Maps API Premier 使用者每天最多可查詢 100,000 個要求,但我的用量不大也沒經費可拿來花在Premier上,只能想想其他辦法囉~

2011年2月21日 星期一

關於Android裡的Handler類別的使用

簡言之,可以把Handler看成是 非GUI thread 與 Activity 之間的橋樑...


實際範例及解說可參考此篇:

[Android]當透過非GUI Thread更新畫面時

2011年2月20日 星期日

台彩最新獎號小工具 發佈 (免費)

終於這幾天將Desire HD入手了,
稍作實機測試後,把之前花了點時間寫的『台彩最新獎號小工具』發布到Android Market上了。
『台彩最新獎號小工具』以小工具(Widget)形式讓您可擺放桌面上,隨時得知最新獎號,另也可查詢顯示上期、上上期之獎號。另按下開獎獎號文字可顯示該期更詳細資訊。



詳細介紹頁面如下:
https://sites.google.com/site/dolphsworkshopdolphgongfang/gong-fang-ruan-ti-ji/android-ruan-ti/tai-cai-zui-xin-jiang-haowidget

或直接前往Market頁面下載︰
https://market.android.com/details?id=idv.dolph.lottoappwidget

2011年2月15日 星期二

Android PendingIntent中放置Extra值問題

.....(略)
 Intent it=  new Intent(this , MyActivity.class);
 it.putExtra("myFlag", dynamicFlag);

PendingIntent pit= PendingIntent.getActivity(this, 0, it, 0);
 remoteViews.setOnClickPendingIntent(R.id.btnMyButton, pit);
....(略)

上列是我在寫AppWidget時的程式片段,這段程式主要是要在App Widget上的按鈕按下時,開啟某Actitity(並傳遞myFlag extra值給該Activity)以顯示所需資訊,但當我在MyActivity取得myFlag值時卻一直都是0,百思不解,後來修改程式,將PendingIntent.getActitity的最後個參數換成:
PendingIntent pit= PendingIntent.getActivity(this, 0, it, PendingIntent.FLAG_UPDATE_CURRENT);後竟然就正常了~

關於該參數該使用那個FLAG請參考:
http://developer.android.com/reference/android/app/PendingIntent.html#getActivity(android.content.Context, int, android.content.Intent, int)

http://stackoverflow.com/questions/4472447/confusing-behavior-when-starting-new-activity-with-pendingintent/5013713#5013713

2011年1月21日 星期五

Android與Google Spreadsheet Data API



今天在Android的專案中使用Google官方下載的Spreadsheet Data API jar檔,
寫了程式要從Google試算表擷取資料,沒寫到在模擬器執行時卻發生了錯誤:

  
  ERROR/AndroidRuntime(3522): *java.lang.VerifyError:  com.google.gdata.client.Service*


看來Google官方的GData API java client library似乎不能在Android上正常使用,
我寫了一個下午的程式沒想到在執行時才知道,真是浪費我的生命呀~

找了資料似乎一直沒看到有人提到在Android中存取Google Spreadsheet的java library,
在努力不懈找了許久發現了這篇網誌:


Google SpreadSheet Library for Android



網誌作者提到說自己開了個專案,主要就是開發一個能在Android上存取Google Spreadsheet的library,該專案已經hosting在Google code了:
http://code.google.com/p/google-spreadsheet-lib-android/

找時間在試試看了,先感謝這位印度的Prasanta Paul囉~

另外,Google Spreadsheet列數、欄數、儲存格數限制請參考:
http://www.google.com/support/forum/p/Google%20Docs/thread?tid=6248d49306db8a85&hl=en

2011年1月20日 星期四

2011年1月6日 星期四

GAE/J 的servlet request計時器與cron service


在GAE上寫了程式要透過cron服務排程來撈取網頁資料存進data store,
當寫好servlet直接使用瀏覽器觸發servlet url執行, 由於我撈的資料較多處理時間較常,沒想到就出現了exception了。

原來在GAE上的request是有時間限制的,若request進來處理了30秒還沒完成就會被終止並丟出exception,詳閱: http://code.google.com/intl/zh-TW/appengine/docs/java/runtime.html#The_Request_Timer

GAE上的排程乃是經由定義cron.xml讓GAE的cron service在設定的時間點或區間觸發我們servlet程式的URL。

然而好消息是最近新的GAE1.4版,把Cron service的30秒限制拿掉了,也就是說經由Cron觸發的servlet的最大處理時限是10分鐘,太棒啦。(詳見:http://googleappengine.blogspot.com/2010/12/happy-holidays-from-app-engine-team-140.html

另外發現許多的GAE英文文件在中文的文件中是沒有的,比如說像是Task Queue(http://code.google.com/intl/en/appengine/docs/java/taskqueue/),所以看完中文版的官方文件(http://code.google.com/intl/zh-TW/appengine/docs/)後還是要再去逛逛英文版的文件(http://code.google.com/intl/en/appengine/docs/)看看有沒有其他可參考的有用資訊~

另外有個東西讓我搞了很久,就是cron.xml裡面若有中文字可是會Deploy失敗的

2011年1月1日 星期六