2011年2月24日 星期四

[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) 啊,不小心卡在這邊所以筆記一下。


透過 Google Maps 顯示 GPS 軌跡 (GPX)

gpx


丟一些關鍵字問問 Google ,發現一些討論文都在講透過別的網站作提供 GPS 軌跡服務,還有透過一些 Google Docs 轉換等等,後來看到有人把 KMZ 格式丟給 Google Maps 就能呈現,心一想,該不會他也懂 GPX 格式?(答:略懂、略懂)於是就丟給 Google Maps 測試,發現真的略懂!所以,也省得我用 Python 把 GPX 轉成 KMZ 囉!


2011年2月23日 星期三

免費申請 edu.tw 信箱

台灣有些服務需要使用 edu.tw 的信箱,例如 BBS 認證等,今天突然想起亞卓市,這個大概跟 kkcity 差不多年紀的東西?我記得 10 年前剛開始紅的 BBS 跟架網站服務,其中 kkcity 就提供 bbs 的環境,而亞卓市算是個人網站的服務,當然,還有非常多家網站空間的服務啦,只是剛好讓我想把這兩個年代擺在一起。


只要去申請亞卓市 http://www.educities.edu.tw 的會員,就可以免費得到一個 educities.edu.tw 結尾的信箱啦!如此一來,有一些驗證服務只吃 edu 的,就可以拿來用囉!例如當紅的 dropbox ,邀請 edu.tw 的信箱可以獲得 500MB 的空間容量 XD


2011年2月22日 星期二

在 iPhone 3G, iOS 4.2.1, JB 安裝 libgcc 和 iphone 2.0 Toolchain

沒想到 JB 後,從 Cydia 更新到最新時,對於手上這台 iPhone 3G 來說,有些軟體不會顯示出來或無法安裝,之前還被強者主管說怎可能沒有 XD 花點時間仔細看看,有一些好用的工具都需要 libgcc ,但是預設沒有 libgcc 可以安裝,查看一些資訊可能是因為 iOS 版本不同會產生一些問題,因此軟體清單被過濾掉了吧?!總之,就是要花點力氣弄一下,我的目標是安裝 iphone 2.0 Toolchain ,更仔細來說是使用 otool 這種東西。


解法,就在 Cydia 作者網站: http://apt.saurik.com/debs/,上頭有 libgcc_4.2-20080410-1-6_iphoneos-arm.deb,只要透過 wget 抓到 iPhone 上面安裝就行了



  1. 透過 Cydia 安裝 OpenSSH, 別忘了登入後要改一下 root 密碼,以免被盜用

  2. 透過 Cydia 安裝 wget

  3. 手動安裝 libgcc

    • # cd /tmp

    • # wget http://apt.saurik.com/debs/libgcc_4.2-20080410-1-6_iphoneos-arm.deb

    • # dpkg -i libgcc_4.2-20080410-1-6_iphoneos-arm.deb




如此一來就可以透過 Cydia 安裝 iPhone 2.0 Toolchain 囉!


提一下額外的,其實我是要用 otool 這個工具,此工具可以用來查看軟體到底用了哪些 framework 囉,藉以研究實作上的方向,例如以 iPhoneApp 這套軟體來看,可以先從 /User/Applications 裡頭看到一些序號目錄,想辦法找到 ooxx 這套軟體,並切換進去:


# cd /User/Applications/xxxxxxxxxxxxxxxxxxxxxx
# ls 
Documents  Librarys   iPhoneApp.app  iTunesArtwork  iTunesMetadata.plist tmp
# cd iPhoneApp.app
# ls -la iPhoneApp
# otool -L iPhoneApp
iPhoneApp:
        /System/Library/Frameworks/CoreGraphics.framework/CoreGraphics (compatibility version 64.0.0, current version 359.16.0)
        /System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 678.60.0)
        /usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
        /System/Library/Frameworks/QuartzCore.framework/QuartzCore (compatibility version 1.2.0, current version 1.6.0)
        /System/Library/Frameworks/SystemConfiguration.framework/SystemConfiguration (compatibility version 1.0.0, current version 289.0.0)
        /System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 1100.0.0)
        /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
        /usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.1.0)
        /usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
        /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 478.61.0)


可惜的,超強主管已離職了,在這之前我也被分配到作其他案子,也來不及去驗證某個程式是不是用某個方向實做的。當初我是以測資方向去驗證,例如用刪減法處理,餵特定資料給程式,看其結果來猜,馬上被主管唸了,說要更謹慎處理,才有上述使用 otool 的足跡啊,只不過上述問題用 otool 也還不能解掉。


另外,我也在 Ubuntu 把 ooxx 的 binary 檔進行反組譯,是啦,可以看到組語,但我更該珍惜時間 :P 所以沒有衝下去人腦分析,也順便記一下指令:


$ arm-elf-objcopy -I binary -O elf32-littlearm iPhoneApp out.elf && arm-elf-objdump -marm9 -D out.elf


iPhone/iPod 離線地圖,使用 xGPS 和 xGPS Manager


來源:xGPS官網 http://xgps.xwaves.net


去年老早就看到離線地圖的部分,但一直遲遲沒有使用 XD 現在終於來摸一下,在此在 iOS 設備上使用 xGPS 軟體,此軟體需要 JB 後才能安裝,我記得 App Store 上也有一些 Offline Map,有些不用錢,但往往要使用地圖或上傳地圖到軟體裡就要收費了!而 xGPS 是免費軟體,算是一個框架讓你擺離線地圖。


xGPS 官方網站:http://xgps.xwaves.net,上頭有 xGPS Manager 軟體,用來下載地圖用的,因此是使用 Java 寫的,所以算是跨平台,於是就在 Virtualbox 裡面跑了一下:


挑選要下載的地圖範圍:


xgps_manager_01


勾選要幾個 level ,在此僅用預設幾項:


xgps_manager_02


估算下載的地圖大小,此例是127MB:


xgps_manager_03


開始下載地圖:


xgps_manager_04


下載完返回畫面,此檔約 100MB,接著就是傳到 iPhone 上面,該軟體上頭的介面都是透過 wifi 來進行傳輸,也可以自行用 sftp 傳輸,而下載的地圖擺在 C:\Documents and Settings\user\My Documents\xGPS Manage\xGPS_map.db,把它擺進 iPhone 裡的 /var/mobile/Library 中即可,最好上傳到 iPhone 前先下載好 xGPS 以及執行一下再離開,如此一來就會發現 iPhone 裡 /var/mobile/Library 已有 xGPS_map.db,再把它移除改換成下載好的地圖:


xgps_manager_05


如此一來,沒有 3G 網路或 wifi 時,也可以看定位地圖,記得要去設定 GPS 為 iPhone 3G 模式,只是要做路線規畫時,這時還是需要網路的。這套軟體我猜 Android 上頭應該也有類似的吧!而網路上有人分享全台 1~17 的地圖,約 1.4 GB 大小。


除了這種很貼心的軟體外,最近看到越多越便利的軟體被開發出來,手機軟體市場慢慢飽和,但換個角度來說,會有越來越便利的程式出現,也不用自己寫,也是挺不錯的!未來應該會買隻 Android 手機吧!至少開發比較便利 :D