顯示具有 Sixnology 標籤的文章。 顯示所有文章
顯示具有 Sixnology 標籤的文章。 顯示所有文章

星期六, 7月 18, 2009

webOS SDK開放下載


還在癡癡等著何時能夠通過webOS SDK的申請時,沒想到昨天已經開放給所有人申請後直接下載囉...而回復之前SDK申請的信函則是稍嫌沒誠意的到今天才收到。

要開始安裝SDK之前要先安裝以下軟體:
環境準備好之後可以開始安裝SDK囉
  1. 首先當然要先準備好webOS SDK [1][2]
  2. 接著先確定VirtualBox沒在跑,然後開始執行SDK安裝程式
  3. 執行模擬器:開始 -> 程式集 -> Palm ->SDK -> Palm Emulator 或者 透過Palm webOS SDK的目錄裡面的捷徑
  4. VirtualBox跑起來之後會跳出兩個對話框提醒滑鼠跟鍵盤整合情況,我是直接按掉進入模擬器畫面 XD
  5. 接著開始把玩模擬器 (溫馨小提示:Home跟End鍵可以解決很多操控上的問題,Esc和Tab鍵也不錯)


到此已可先體驗一下Palm的介面與操控感覺。下一篇再來講如何開始開發程式。

星期一, 6月 29, 2009

初探Palm webOS



今天在癮科技上逛了一下, 看到webOS的SDK釋出了, 目前還是申請制, 在申請的同時也順便再多了解一下webOS.

Palm webOS Book from O'Reilly Media [1]

webOS integrates the power of a window-based operating system with the simplicity of a browser. Applications are built using standard web technologies and languages, but have access to device-based services and data.

You can think of webOS applications as native applications, but built from the same standard HTML, CSS and JavaScript that you'd use to develop web applications. Palm has extended the standard web development environment through a JavaScript framework that gives standardized UI widgets, and access to selected device hardware and services.

You will build WebOS applications with common web development tools following typical design and implementation practices for Ajax applications. But your webOS applications are installed and run directly on the device, just as you are used to doing with native applications.

還蠻有趣的開發方式, 開發者要使用web開發工具(HTML/CSS/JavaScript)來開發要安裝才能使用的application, 且可以存取裝置上的服務與資訊.

怎麼辦到的呢? Palm說: 謎底就是Mojo Application Framework. 這個有空再介紹~ 總之不是魔獸世界裡面打食人妖會掉的魔精就是 XD

星期六, 6月 27, 2009

Android Developers Blog: Introducing Android 1.5 NDK, Release 1

最近都在忙RoR Web的事情, 比較少注意Android, 沒想到NDK已經出來囉, 看來是配合Google Android Developer Challenge 2而釋放出來的. 有機會再找時間研究一下囉


Android Developers Blog: Introducing Android 1.5 NDK, Release 1

星期五, 6月 19, 2009

OOPS?! rdiscount is not working on Windows

雖然我所使用的NB是Windows, 但因為我一直是連上server side (Ubuntu)去安裝系統與修改程式, 我的NB上並沒有開發RoR的環境, 因此一直沒發現這個問題, 一直到我們家的工程師試圖要在他的電腦上安裝測試環境才發現這個問題: rdiscount這個gem裝不起來!!!

他把這情況跟我回報, 我本來一直以為是他沒設定好或是有gem安裝順序造成的相依性問題, 但在我試圖幫他安裝卻還是一直出現錯誤, 後來努力一陣搜尋之後才發現:

rdiscount不能在Windows平台上運作?!?!

沒錯... 只要你拿到的程式有使用到這個gem, 那就暫時不要想能在Windows上執行了

細節可以參考下列的討論[1] [2] [3], 最無言的是有人問說rdiscount on Windows不work怎麼辦? 其中一個很OOXX的回覆是 rdiscount 只能在Mac and GNU/Linux systems運作喔, Windows請找替代方案...

那ridscount又是甚麼呢? ridscount是Markdown的一種實作, 簡單來說, 就是讓你想輸出在web page的文字 轉換成不會造成HTML crash的字元的一個小程式.

感覺RoR就是一個Windows不friendly的東西, 我不愛Windows, 但是這種平台支援程度我覺得算是很基本的. 系統環境以Windows為主的公司要使用RoR可千萬要三思. 我想rdiscount應該不會是不支援的唯一特例.

目前我所看到的RoR developers都是使用Mac Book, 且Ruby從TIOBE上看來與Mac OS X的成長正相關, 使用族群的特性也許該特別注意一下囉!

星期一, 6月 15, 2009

RoR中時區處理的問題

問題一開始是出現在一段很簡單也很常需要使用的程式碼, 程式希望撈出該年月所含括的資料. 資料庫裡面存的時間時區是UTC.

我們原先從vendor得到的程式碼如下, 但是運作一直不是很正常, 撈出來的資料總是有問題, 但vendor卻始終認為該程式碼沒有錯誤.

date1 = Date.new(year, month, 1)
date2 = Date.new(year, month, -1)
self.find(:all, :conditions => ["start_at >= ? and start_at <= ?", date1.beginning_of_day, date2.end_of_day] )

要求fix bug未果, 不得以只好自己動手, 台灣的時區是UTC+8, 因此當我們想要撈出所有台灣時區2009/6的資料時, 所需要下的SQL stmt其實是 2009-06-01 00:00:00+0800與2009-06-30 23:59:59+0800等同於2009-05-31 16:00:00+0000與2009-06-30 15:59:59+0000不幸的是, 上面這段程式碼並無法正常的運作.


>> puts Time.zone
>> puts date1.beginning_of_day.zone
>> puts date1.beginning_of_day
>> puts date1.beginning_of_day.to_s(:db)
>> puts date1.beginning_of_day.in_time_zone(Time.zone).zone
>> puts date1.beginning_of_day.in_time_zone(Time.zone)
>> puts date1.beginning_of_day.in_time_zone(Time.zone).to_s(:db)
>> puts Date.parse("2009-6-01T00:00:00+00:00").beginning_of_day.in_time_zone(Time.zone).strftime("%Y-%m-%d %H:%M:%S")


=> (GMT+08:00) Taipei
=> CST
=> 2009/06/01 12:00 AM
=> 2009-06-01 00:00:00
=> CST
=> 2009/06/01 12:00 AM
=> 2009-05-31 16:00:00
=> 2009-06-01 00:00:00

=> (GMT+10:00) Hobart
=> CST
=> 2009/06/01 12:00 AM
=> 2009-06-01 00:00:00
=> EST
=> 2009/06/01 2:00 AM
=> 2009-05-31 16:00:00
=> 2009-06-01 02:00:00

=> (GMT+00:00) UTC
=> CST
=> 2009/06/01 12:00 AM
=> 2009-06-01 00:00:00
=> UTC
=> 2009/05/31 4:00 PM
=> 2009-05-31 16:00:00
=> 2009-05-31 16:00:00

=> (GMT-10:00) Hawaii
=> CST
=> 2009/06/01 12:00 AM
=> 2009-06-01 00:00:00
=> HST
=> 2009/05/31 6:00 AM
=> 2009-05-31 16:00:00
=> 2009-05-31 06:00:00

剛看到Taipei部分的結果, 還以為使用date1.beginning_of_day.in_time_zone(Time.zone).to_s(:db)這段是可以正常運作的, 但是多測了幾個時區之後, 發現還是有問題, 無論設定任何時區, 永遠都得到2009-05-31 16:00:00這樣的值

而唯一會變動的兩個值是date1.beginning_of_day.in_time_zone(Time.zone)和Date.parse("2009-6-01T00:00:00+00:00").beginning_of_day.in_time_zone(Time.zone).strftime("%Y-%m-%d %H:%M:%S"), 但很奇怪的是, 這兩個數值變動的基礎都是先減8小時之後再計算與台灣地區的時差, 即使第二段程式是直接提供一個"2009-6-01T00:00:00+00:00"的時間, 希望能得到一個UTC時間之後再作計算, 但結果依然是失敗的.

後來在網路上好一陣搜尋之後, 才赫然發現這是個bug (or issue?)
https://rails.lighthouseapp.com/projects/8994/tickets/2479-inconsistant-time-zone-handling

文中的例子如下, 可以看出Date有時區處理的問題:


>> Date.today.beginning_of_day
=> Fri Apr 10 00:00:00 -0500 2009
>> Time.zone.now.beginning_of_day
=> Fri, 10 Apr 2009 00:00:00 CDT -05:00
>> Date.today.beginning_of_day == Time.zone.now.beginning_of_day
=> true

>> Person.all :conditions => [ "created_at > ?", Date.today.beginning_of_day ]
=> Generated SQL => SELECT * FROM "people" WHERE (created_at > '2009-04-10 00:00:00')

>> Person.all :conditions => [ "created_at > ?", Time.zone.now.beginning_of_day ]
=> Generated SQL => SELECT * FROM "people" WHERE (created_at > '2009-04-10 05:00:00')


簡單說就是要用Time來取得的時間才會是你要的, 因此將原先的程式修改為下面這樣就搞定啦!


fmTime = Time.zone.local(year, month, 1, 0, 0, 0)
toTime = Time.zone.local(year, month, -1, 23, 59 ,59)
self.find(:all, :conditions => ["start_at >= ? and start_at <= ?", fmTime, toTime] )

>> puts Time.zone
>> puts fmTime.to_s(:db)
>> puts toTime.to_s(:db)


=> (GMT+08:00) Taipei
=> 2009-05-31 16:00:00
=> 2009-06-30 15:59:59

=> (GMT+00:00) UTC
=> 2009-06-01 00:00:00
=> 2009-06-30 23:59:59

=> (GMT-10:00) Hawaii
=> 2009-06-01 10:00:00
=> 2009-07-01 09:59:59

如此終於搞定一個邏輯上很簡單處理的bug... RoR還是讓我很無言...

星期六, 6月 13, 2009

SVN小記

SVN Create Repository

> sudo svnadmin create /opt/svn/test

設定檔修改

/opt/svn/test/conf/svnserver.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz

/opt/svn/test/conf/passwd
[users]
admin = admin
user1 = user1
user2 = user2
test = test

/opt/svn/test/conf/authz
[groups]
Admin = admin
User = user1, user2
Test = test1

[/]
@Admin = rw
@User = r

[/web]
#讓@Test只能讀寫/web下面的東西
@Admin = rw
@User = r
@Test = rw

星期五, 6月 05, 2009

RoR的restful_authentication plugin在IE 8上的問題


今天網站在作測試時, 有人反映IE 8無法正確的導到login畫面, 而會跳出這個畫面, 找到原因是因為IE 8有時會送出空的HTML Accept header而使得程式跑到format.any這個區塊, 因此會造成跟其他瀏覽器不一樣的情況.

一個簡單的修改方法是將lib/authenticated_system.rb中原本這段
def access_denied
respond_to do |format|
format.html do
store_location
redirect_to new_session_path
end
format.any do
request_http_basic_authentication 'Web Password'
end
end
end

改為下面這樣, 因為我們暫時沒有其他的format, 所以使用format.any來作判斷
 def access_denied
respond_to do |format|
format.any do
store_location
redirect_to new_session_path
end
end
end
這樣就可以正確的進入login畫面囉.

星期三, 5月 13, 2009

GWT初體驗

GWT stands for Google Web Toolkit.

最近真的很多初體驗... 目前考慮要不要把Spring也拉進來體驗一番...

言歸正傳, 我想大家都知道關聯性資料庫通常是系統效能的瓶頸, 增加資料庫伺服器數量對於運算能力的增加有限, 更換資料庫更是一場災難, 還好我們可用Hiberante之類的架構來改善這些問題. 但Web UI的部分呢? AJAX解決了不停換頁所造成的頻寬浪費, 但是卻依然遭遇各家瀏覽器對於HTML, JavaScript, CSS支援程度不一的問題, 解決這類問題可說是相當煩人又曠日廢時, 因此更該使用一些框架來增加開發效率, 畢竟很多狀況都有人幫忙測試過了.

雖然我對於HTML, JavaScript, CSS皆有一定的熟悉度, 但我對JavaScript一向不太喜愛, 因此JQuery, Ext, Yahoo UI Library, Rico... 等方案都不在我的選擇之中, Flash/ Flex解決方案也曾接觸過, 但ActionScript很類似JavaScript, 因此也出局.

而GWT透過Java程式來產生JavaScript的方式就很符合我的需求, 相容性交給Google的工程師去傷腦筋, 除了GWT之外, JSF, ZK其實也算某種程度滿足我的需求, 但因為Android是公司的重點目標, 我目前認為GWT與Android的UI開發經驗是可以互通的, 再加上GAE也可使用GWT, 因此選擇GWT.

從安裝SDK到開啟第一個專案, 根據GWT官網上的 Quick Start 基本上沒有問題. 不過後來想自己修修改改的時候就遇到問題了, 枉費我這次有比較努力看一下文件...

  • Module, Endpoint, .gwt.xml, .nocache.js不太好搞懂, 我花了不少時間才覺得掌握了一點, 現在可以在一個html上讀入兩個Modules, 使用兩個Endpoints
  • GWT (client)並不完全支援J2SE與J2EE規格
  • GWT可運用RPC架構來處理事務, server端的程式就不受上述的限制
  • 建立專案時所帶的範例程式碼可以幫助你了解RPC的運用, 而若想快點感受GWT的威力, 我推薦SDK裡面的Mail範例

一個html上讀入兩個Modules, 使用兩個Endpoints的畫面

明天來評估要用GWT直接呼叫Web Services還是要透過RPC來實作.

星期五, 5月 08, 2009

Hibernate初體驗

資料庫一向是我特別有興趣的部分, 但Hibernate卻一直沒好好研究與使用, 除了是對於自己既有技能的依賴, 另外也是不想因為framework而失去某些彈性. 但現在Hibernate支援了JPA(EJB3.0規格中的重點之一), 所以系統若需要分散式架構時也可以很容易的擴充, 另外JPA也可以使用在GAE上, 因此現在學習使用Hibernate可說是非常有利的時機點.

我先閱覽了 良葛格學習筆記, 受益良多, 也對於Hibernate有一個快速的認識 (這幾年來, 我應該是第四次看這個網站上的Hibernate介紹了, 站主真的很用心, 更新的也很快).

不過接下來的實作練習還是吃了不少苦頭, 因為
  • 我不喜歡重頭開始刻程式, 所以看到Hibernate Tool可以從資料庫反轉產生code就覺得非用不可
  • 我並不想認識原來的Hibernate, 也就是還需要*.hbm.xml的寫法
  • Hibernate的JPA實作包括 Annotations 和 EntityManager, 我並不清楚這兩者的關係以及與EJB的關聯性
  • 我也沒搞懂persistence.xml 和 hibernate.cfg.xmlx兩者的關係以及與EJB的關聯性, 連要放哪個目錄下都不知道
  • 一堆相依的libraries也沒搞懂
  • 因為需求的關係, 目前我只想使用Tomcat, 並不想使用JBoss/ Glassfish
  • 我不想使用command line來跑Ant之類的東西, 一心只想使用Eclipse來操作
  • 我甚至也不知道Hibernate可以不在AP server/ Web server跑, 哈哈
  • 我一向沒看完使用者手冊的習慣... 真糟糕的習慣...
綜合以上就讓我吃足了苦頭, 雖然後來都搞清楚了, 也發現在良葛格學習筆記中其實大部分都已說得很清楚, 不過這樣try-error的過程中也算是快速累積經驗吧, 哈哈...

另外試著跑自己想要的SQL statement和子查詢, 結果也是ok的.

初體驗的結論是, 目前看來一切都很不錯. 要繼續深入研究下去囉!

星期二, 5月 05, 2009

GAE初體驗

今天終於拿到GAE for Java的使用許可

因為我們已經全部使用Eclipse當作開發工具, 所以透過 http://code.google.com/appengine/docs/java/tools/eclipse.html 所介紹的步驟來安裝 Google Plugin for Eclipse, 這邊不贅述.

我是使用 Eclipse 3.4 (Ganymede) for J2EE的版本. 安裝好之後工具列上會多三個小圖示


點第一個小圖示可以產生一個新的GAE project.




產生出來的專案可以馬上部屬到申請的GAE空間, 最簡單的方法是按那個長得像小飛機的按鈕.




上傳前必須填一些認證資料.




接著要設定application ID, 其實也就是申請時所設定的 http://xxx.appspot.com/ 的那個xxx. 一個人可以設定10個.




ok, 現在可以上傳了



上傳需要花一點時間, 上傳完成後就可以看看甚麼也沒做就完成的東西啦.


接著就是要找時間玩一下其他支援的功能囉. 開小飛機的初體驗還蠻有趣的 :D

星期六, 5月 02, 2009

看來挺有搞頭的Google App Engine

今天忙著在GWT, Ext-GWT, ZK中奮鬥,想了解到底哪一個AJAX framework比較適合我們公司使用, 目前看來是使用GWT多少可以與Android上的開發經驗相結合.

但突然想到如何與視覺化介面設計師 (據說是高級系統美工的雅稱)配合的問題, 畢竟這是web系統開發通常最痛苦的地方所在, 在網路上瀏覽資料, 似乎有還不錯的解法, 不過這不是本篇的重點, 重點是突然發現Google App Engine (GAE)這個有趣的東西, GAE剛滿周歲不久 (一年後才發現, 哈哈), 更巧的是最近剛開始開放支援Java, 也可以支援cron (scheduled tasks). 資料儲存則可以用Java Data Objects (JDO) 和 Java Persistence API (JPA), 還有其他的服務如Memcache, Expand URL FetchURL Fetch, Expand Mail, Expand Images, Expand Google Accounts, 感覺功能相當完整, 以前蠻難找到可以作Java hosting的虛擬主機, 免費的更少, GAE看來提供一個很不錯的解決方案.

使用 Android + RESTful + Google Data API + GAE 組合出有價值的服務, 看來不是夢阿!

其實覺得自己的行為還蠻像internet spider的 XD

GeoAlarm Lite小小更新版放上Android Market遇到的問題

可能是因為SDK1.5釋放的關係, 今天要放上新版的GeoAlrm Lite時遇到一點小問題.

Market requires the minSdkVersion to be set in AndroidManifest.xml.

訊息很清楚, 解決方法看來也很簡單.

我先在 AndroidManifest.xml的manifest下面加上
<uses-sdk minsdkversion="1">
但是不work...好吧~ 那換
<uses-sdk minsdkversion="1"></uses-sdk>
看看...也不work @#$%@#$%...再試試看
<uses-sdk android: minSdkVersion="1"/>
...終於成功了~


新版的GeoAlrm Lite多了四種radius可以選擇囉... 應該有方便一點吧. 哈哈

一開始key有問題會一直force close所造成的評價傷害... 還真的要花很多時間來提升... 乾脆砍掉重練算了...

星期五, 5月 01, 2009

久違的資訊焦慮症

最近一下子要接觸很多的資訊與技術, 這對於半放下技術許久的我來說, 從PM又跳回technical leader甚至是回到programmer的感覺很微妙, 最近接觸的東西如下:

  • Android (SDK1.5剛出... 還沒真的使用)
  • Ubuntu (Linux也很久沒摸到了...其實應該說是Server都很久沒碰到了...)
  • Redmine (還蠻有趣的專案管理系統, 也是Ruby開發的, 不過用套件還是輕鬆點)
  • Web Services, SOAP, RESTful, JSON...
  • MySQL (好久沒用...何況本來就普通熟而已, 我一向比較喜歡PostgreSQL, 因為跟Oracle比較像)
  • Ruby, RoR
  • Apache Active MQ
  • Tomcat, Apache...etc
  • Funambol
  • ZK, GWT (好吧~ 我承認這是我自己加上來的, 不全是因為討厭RoR...而是我希望架構上pure Java... XD)

我一直認為技術不是重點, 重點在於應用本身帶來的價值, 但是一個應用要創造價值, 就要能整合各種技術... 以前在大樹底下好乘涼, 資源豐富, 沒特別感覺到整合各種技術的難度... 這次真的很爽... 樣樣都要自己來... 當然好處是很多東西都是自己決定的, 各種想法能得到驗證也算是收穫的一種, 但我是個single thread的人, 不停的在各種技術切換學習真的讓我覺得精力耗盡...

我想, 資訊焦慮症似乎又悄悄的找上我, 睡很晚, 起很早, 迫不及待打開電腦, 在網路上不停的找各種資料來看... 自己想想都覺得很病態...

這不是我想要的生活, 但現在的情況下卻又避免不了, 很無奈... 只能希望趕快度過這段時間囉! 加油!

星期三, 4月 29, 2009

Ruby...無言的part 1

之前為了混口飯吃, 在別間公司鬼混了一陣子, 因此自己的公司將網站外包給某個廠商來開發, 沒想到竟然是用RoR來開發... 這下可好, Ruby只聽過但沒接觸過... Rails更是陌生... 只知道是一種開發的框架... 但公司沒有這方面的人才, 且最近系統要上線, 之後必須要自家維護, 但我的工程師們又都很忙, 沒辦法只好硬著頭皮自己來了 :(

對於Ruby的聽聞印象是超完美的OO語言... blahblah, 這類讚美之詞就不多說了, 網路上很多... 但是真的接觸Ruby之後, 還真是驚訝於它的...詭異語法... 老實說我實在不知道怎麼欣賞它的美. 我想這是我才疏學淺之故 ><" 廢話不多說... 還是研究怎麼入門吧!

雖然不懂Ruby的美, 但自認還是個懂點程式的人, 因此首先想看的是語法上的差異. 不可避免的先到官網逛逛 http://www.ruby-lang.org/zh_TW

再看看如何從其他語言到Ruby, 我選擇的是Java
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/

恩... 根據文件的說法, 差異點不多, 安心了不少
http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-java/

還很貼心的有線上測試器... 不過這種command line的coding方式讓我有點恐慌...
http://tryruby.hobix.com/

接著研究Ruby User's Guide, 到此總算是看到Ruby的語法了, 不過我沒預期到接下來是無言的開始 http://www.rubyist.net/~slagell/ruby/index.html
怎麼在畫面上印出五次test?
=> 5.times{puts "test"}
讓字串重複相加五次
"test"*5
=> "testtesttesttesttest"
只能說我真的很不習慣吧... 對我來說Ruby有太多的符號, 以及感覺像程式糖衣的東西... 繼續無言的學習中...

星期一, 4月 20, 2009

使用ksoap2-android來呼叫WebServices的問題

最近開發中的軟體要跟server端溝通, 目前決定的架構要使用Web Services來當作溝通的通道. 我跟據以前的經驗, 請我們家的engineer去survey如何使用ksoap2-android這個library, 但是他跟我說新版的lib一直有問題, import進eclipse就會出錯...

上網查了一下, 在ksoap2-android的專案網站上就有提到相關的問題, 不過幸好有人找到問題點並提供解決方法了. 問題出於ksoap2-android-2.2-jar-with-dependencies.jar裡面有兩個.class檔重複了, 因此解決的方法也很簡單, 就是砍掉其中一個就可以囉!

星期五, 4月 17, 2009

Sixnology在 Android上的最新力作-VibrateMaster

隨著 GeoAlarm上線, 但是因為第一次放程式到Android Market上, 有蠻多事情與預期不同, 程式出了一些問題... 有點沮喪... 因此突發奇想寫了這個 VibrateMaster.

VibrateMaster是個很簡單的程式, 用到的其實是 GeoAlarm程式的一部分, 因此只花了很短的時間就完成了. 功能也很單純, 就是讓你玩手機的震動功能.

我的夥伴說一定要提醒大家一件事情, 那就是: 請記得你的手機不防水:P 至於為什麼要提醒這點, 那就請大家上討論區來問問他啦 :D

http://groups.google.com.tw/group/vibratemaster

GeoAlarm Lite放上 Android Market囉!















Want to have a nice sleep on the bus/train without passing your destination? Want to think about things freely without keeping checking where you are? GeoAlarm Lite is your savior! Just double click your destination on the map and create a GeoAlarm. Your GeoAlarm will be fired while you enter the area surrounding (500 meters) your GeoAlarm's location.

NOTICE:
- In Lite version, a GeoAlarm will expire after 5 hours and can only be fired once.
- GeoAlarm works well, even if it's not on the screen.

星期二, 4月 14, 2009

The first step to implement tap and hold on Android

I'd like to implement tap and hold.

The first step is to distinguish "Tap and hold" from other touch screen actions. I was trying to achieve that by overriding onTouchEvent of a certain view, but it's almost impossible to do that since there are only four common actions trigger that function (ACTION_CANCEL, ACTION_DOWN, ACTION_MOVE, ACTION_UP). Therefore, I turn to look for some other solutions.

Finally, here is a easy way to do that.

RelativeLayout relativeLayout = new RelativeLayout (this);
setContentView(relativeLayout);
relativeLayout.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Log.d(this.getClass().getName(), "onLongClick()");
return true;
}
});

星期一, 4月 13, 2009

Can't make a toast from TimerTask while using Timer?

1lI can't find a way to make a toast from TimerTask while using Timer. I still don't know why.

Example:
Timer t = new Timer(false);
t.schedule(new TimerTask() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "msg", Toast.LENGTH_LONG).show();
}
}, 5000);

However, I did find out a solution. It works well.

final Context ctx = this;
Handler mHandler = new Handler();

Runnable
makeToast = new Runnable() {
public void run() {
Toast.makeText(ctx,
"msg", Toast.LENGTH_LONG).show();
}
};
mHandler.postDelayed(makeToast, 1000);

星期三, 4月 08, 2009

想開發Android Map程式? 先取得 Maps API Key再說!


最近又開始進行 Android applications的開發,雖知道一年前的 Android SDK版本早已過時,但進行 SDK的更新之後卻發現幾乎所有的程式碼都無法執行,頓時有種萬念俱灰的感覺...

經過一些小修改之後,想先測試開啟一個 MapView,開個地圖來讓自己獲得一點小成就感,但沒想到看到的竟是一片荒蕪(格線)~頓時大驚!才一年...我連開地圖都不會了嗎?!

趕緊上 Google找尋資訊之後發現,原來現在想要拿到地圖資訊,必須要先申請一個 Maps API Key才行。[參考網址]


看來這是 Android為了避免太多像我這種只想開開地圖來爽一爽的開發者浪費他們家的頻寬的一個設計,所以 Android入門者還是找點別的東西來玩玩吧... Android toturial是不錯的選擇喔~強力推薦!