2011年3月1日 星期二

使用 xGPS Manager 製作台灣離線地圖 Zoom Level 0-17

先前在 iPod touch 4 上玩了一下 xGPS ,結果發現 GPS 定位有點問題,找了一些討論,看來 iPod touch 並沒 GPS 天線,導致離線使用時,在外頭並無法進行衛星定位!讓我還滿挫折的,原先一直以為 iPod Touch 4 跟 iPhone 就差在相機的像素跟無法打電話的差別,現在又多了一項了!iPod touch 4 還是適合在 wifi 環境下定位,不然只能說附近的衛星訊號強到可以讓你定位成功 XD


回到主題,之前把玩 xGPS 和 xGPS Manager,覺得這整套軟體還不錯,可以製作離線地圖,實在方便,特別是我家那台美版 iPhone 3G,現在終於可以找到一件事給他做 XD 那就當一台簡單的電子地圖吧!只不過 xGPS 這套軟體,唯一的缺點大概是 UI 操作不是很流暢。


這篇主要是要簡單筆記使用 xGPS Manager 下載全台地圖的大小:


xGPS All Taiwan



  •  環境與設定

    • 勾選 0 ~ 17 全部的 zoom levels

    • 網路速度約 5Mb/s 上下傳





  • 時間花費  

    • 分析待下載的地圖大小,過程約 2~2.5 小時,前面會很慢,大概超過 8% 後會變得比較快並且經過 11% 後就會跳得更快,而最後估計結果是需要 4xxx MB 大小

    • 下載地圖,約 3~3.5 小時





  • 成果


    • 產出 xGPS_map.db 約 1.5 GB (1631596544) 大小




這款 xGPS 適用於 JB 過後的 iOS 設備,改天要來試試 Android 上面的好了,我記得找到的相關文章裡,有一種是產出 SQLite 的,不曉得跟 xGPS 產生的 xGPS_map.db 有什麼差別,另外,網路上可以透過關鍵字找到 1.4GB 的下載位置,但試用的結果並非 0-17 的地圖,這次測試的結果,有 0-17 的地圖可看 :D


2011年2月28日 星期一

幾個 AU-4912 無線網卡的使用問題

最近開始比較常用這張網卡,實在是它的體積很小,很吸引人,之前寫了一篇稍為筆記:USB 無線網卡 - SAPIDO AU-4912 超迷你無線N。用了一陣子,開始發現一些問題,這些問題可能是因為我自己的使用問題,環境資訊:



  • Windows 7 64-bit

  • 網卡數目:主機板內建有線網卡 x1、PCI 有線網卡 x1 、VirtualBox 虛擬網卡 x1,另外,就是這張 USB 無線網卡 x1


其中,我的 OS 有架一個 NAT 服務,也就是上述的 PCI 網卡是拿來架 NAT 的。


問題一:


假設把 AU-4912 架起 Soft AP 時,將導致 PCI 提供的 NAT 服務失效。


這邊可能的解釋是:


對外連線使用主機板內建網卡,當 PCI 網卡提供 NAT 模式時,等同於搶了主機板內建網卡的資源,然而,當啟動 Soft AP 時,此時又變成 AU-4912 網卡搶了系統對外連線資源,導致 PCI 提供的 NAT 服務出了問題。


目前我還沒想到好得解法,大概只有把 Soft AP 關掉時,這時候 PCI 網卡的 NAT 服務才能恢復正常


問題二:


AU-4912 + Windows 7 64-bit


出現藍白當機畫面,顯示資訊關鍵字:RTL8192cu.sys


可能的原因以及解法:


這是因為我買了第二張 AU-4912 無線網卡,把第二張插入主機的 USB 孔時,無論怎樣馬上出現藍白畫面!呈現的內容如上圖。


原先有點失落,也準備去購買的店換一下,只不過工程師的直覺,馬上讓我想到可能的出錯問題:驅動程式與資源的存取,於是開始行動!一開始我想透過 devmgmt.msc 來移除舊的驅動程式,但實在不知該移除哪一項,突然腦筋一轉,直接跑去把 C:\Windows\System32\drivers\rtl8192cu.sys 換個位置(移除驅動程式),於是解決了藍白問題。等同於讓他重新抓驅動程式


這個現象可能是第一張 USB 網卡已經將把相關硬體資訊綁在驅動程式裡,結果第二張 USB 網卡插入時,可能會被當成已經設定 ok ,但當要啟用網卡時就產生問題。我不太確定這個是因為 Windows 7 64-bit 的作業系統的問題,還是 AU-4912 無線網卡本身的設計問題,例如 ID 並非 unique 等


總之,這些現象對一般的使用者來說,應該不太會出現,只能說我使用的環境有些特別吧 Orz  在此順便筆記一下。


2011年2月26日 星期六

[電影] 3 idiots


之前在網路上就看過這個短片,幾個禮拜前,大學認識的學弟跟我說了這部片,要我一定要去看!這部片我今晚看了,豈是一個讚字了得!


裡頭有不少的經驗或觀點的分享,我覺得很 Nice !有些小事跟自己的體驗很接近,例如信念這件事,我在大五那年有了很深刻得體驗,我本身算是個無神論者,但最後我選擇了一種信仰,那追求的是一種心靈的穩定。人都需要一個好的信念,這個信念雖然不會很真實地改變生活,卻能讓人穩定情緒的,最重要的是要樂觀以及進取。


除此之外,我也體會得出那電影中所提及的貧困生活,那卑微地只剩數字可以衡量,這在電影裡也描繪的很生動。另外,也讓我想起工作相關事物,看了這部可以更加讓我確信要走的路 :)


很高興能看了這部電影,希望有興趣的可以抽空看看,我啊,真的越來越愛看低緯度的電影囉!


2011年2月24日 星期四

期待下一次,不如靠自己


好像三年前的廣告吧?去年跟幾位同事閒聊,發現大家對工作的衝勁並不多,今年原先很期待新的案子,結果搞到最後不是做當初說的工作內容 XD 一時間就想到想到這則廣告。過完年就好好思考,不能太期待工作能夠給予你什麼,這條船上大家各有各的盤算,我想,更當規畫自己的目標才是。去年就預約了一本 Android 書籍,春節前剛好輪到我,雖然網路上文獻不少,但有書可翻可以看到完整的筆記,只是偷懶的結果,書到期了卻還沒看完,最後把心一橫,就決定買書了,買了一本拍起來會有四條線的書。


在圖書館是借第二版的,買的是第三版,對我可能也算新書吧?!對於第二版的開頭看幾眼也滿有感觸:


"我們當中有太多人一直在等待, 等著做一些完美的事. 結果是一事無成...", By William Feather , 中譯出於 Android 手機應用程式設計入門第二版 gasolin 著


四條線的書


這本書買的時候很猶豫,因為第三本出版是 2010.01.20,現在連 Android 3.0 都有聲有影了,不過算了,當作支持作者吧 :D 而我這本是 2011 年 01 月第三版 9 刷,看來書賣的不錯喔!另外,我也覺得作者也滿有心的把一些觀念寫在網站上:androidbmi


雖然我喜歡寫 Objective C 勝過 Java (單純覺得前者比較靠近C語言),但未來應該會買隻 Android 的手機來玩玩,可以恣意地把寫好的程式擺上去跑是愉快的,過陣子也會來 build 一下 AOSP 好了。最近看著 Android 開發環境的成熟,越來越感到興奮了,唯一會反彈的大概是 Android 模擬器開起來也太慢了吧,Xcode 三兩下就好了 XD


[Python] 使用 Django 提供檔案下載的 CGI 服務

最近用了一點 Django,在 MVC 架構下,有時候有點脫褲子放屁 XD 真懷念以前重頭打造自己的 framework 的點滴啊,只不過工作後開發 project 要以維護為重,所以,還是老老實實地用 Django 吧。


關於提供下載 CGI 的部份:


修改 urls.py,新增一條路徑規則:


from django.conf.urls.defaults import *
urlpatterns = patterns('',
        (r'^get_file/', 'project.download.views.get_file'),
)


修改 views.py,新增檔案下載的對應函數:


from django.shortcuts import render_to_response
from django.template import RequestContext
from django import http
from django.http import HttpResponse
from django.core.servers.basehttp import FileWrapper

import simplejson
import sys, os, os.path
from time import mktime, gmtime, strftime, localtime
import cStringIO as StringIO

def get_file(request):
filename = request.POST.get('filename',None) or request.GET.get('filename',None)
message = ''
if filename <> None:
file_path = os.path.join( "/tmp" , filename )
if os.path.isfile( file_path ):
try:
response = HttpResponse( FileWrapper(file(file_path)) , content_type='text/plain')
response['Content-Length'] = os.path.getsize( file_path )
return response
except Exception, e:
message = stre(e)
pass
return render_to_response( 'error.html' , { 'message' : message } )


有時候若是動態產生出的結果,那就改成:


from django.shortcuts import render_to_response
from django.template import RequestContext
from django import http
from django.http import HttpResponse
from django.core.servers.basehttp import FileWrapper

import simplejson
import sys, os, os.path
from time import mktime, gmtime, strftime, localtime
import cStringIO as StringIO

def get_file(request):
filename = request.POST.get('filename',None) or request.GET.get('filename',None)

       output =  'filename:' + str(filename)

       # 轉 JSON 格式
       # output = simplejson.dumps( otuput )

        out = StringIO.StringIO()
        out.write( output )
        response = HttpResponse( FileWrapper( out ) , content_type='text/plain')
        response['Content-Length'] = out.tell()
        out.seek(0) 

return response


比較重要的是 get_file 之使用 StringIO.StringIO 時,最後別忘了 seek(0) 啊,不小心卡在這邊所以筆記一下。