2011年3月13日 星期日

熱血吧!

公益
輕鬆做公益:Yahoo! 公益 http://tw.charity.yahoo.com/


學生時代,因為經濟關係我連一張發票都不太會捐的。最近比較常去台北,每當有人在收集發票做公益時,卻發現發票都不在身邊,實在是我很少買東西,再加上時常縮減皮包厚度,像是零錢或發票幾乎都會每天清空,導致從事公益的機會少了許多,若是說有的話,大概是參加 BloggerAds 的公益聯播吧 XD 周日中午看到長輩在 Plurk 上分享了 Yahoo! 公益的網頁,設定一下還不妥,所以回到宿舍才來使用。對於捐款的公益團體嘛,仔細去 PTT 八卦版瞧了會,會發現很多八卦,頓時也讓我卻步。晚間跑了步,最後還是選擇在 Yahoo! 公益捐款囉。如果對捐款事宜想要挑選其他單位,可以再參考看看 台灣世界展望會政府單位的捐款資訊


大概半年左右沒啥動力,下了班常常枯坐在電腦前面。昨天聽到一位朋友完成了精湛的作品,頓時被敲醒。對方是在很操的工作環境,週末還有活動,但他終究完成了屬於自己獨一無二的作品,令我十分佩服!前幾天也看到熱血的學弟早上起來喝咖啡寫程式,我想回想起碩班努力寫程式的年代啊,今晚跑了個步轉換心情,再怎樣都要規畫好生活才對,努力,熱血吧!


iPhone skype app 無法接電話和播打電話出去 @ iPhone 3G, iOS 3.1.2, Jailbreak

老家有一台 iPhone 3G 美版的,因為鎖 sim 卡,當初一開始拿到這台手機時,傻傻地從 iOS 2.x 升到 iOS 3.0 吧,想說系統更新應該是很基本無誤的事,接著就開始過著 偽‧iPod touch 的生活,直到三個月後才看到越獄的消息,透過黑雨正式把它解放。雖然他是一隻手機,但其實很少放 sim 卡進去用 XD 倒是拿來拍拍家犬或是玩玩小遊戲為主的生活。


最近除了發現 xGPS 的離線地圖的功用後,這次回家就幫家裡的 iPhone 設定一下,如此一來外出就可以當作堪用的電子地圖,但平時只有這樣的功能好像還是太虛了點,再加上家裡有一台無線 AP,所以我幫他安裝了 Skype, Miu Ptt 等功能,前者就是家喻戶曉的網路電話,後者則是連線到 PTT 閒逛的好工具,然而,並沒有那麼順利,在 Skype 的使用上碰到了一點問題,可以傳訊息出去,並且可以看到 iPhone 上顯示對方來電,但無論怎樣都無法接通網路電話,包括無法播出以及接收別人打來的。


Lazy bums
圖片來源:flickr.com,這張圖比較舊,我看到的有包含 iPhone OS 2.x/3.x 等等的類似資訊


上網查閱了一下,這是因為 Skype 有擋越獄(JB, Jailbreak)後的 iPhone,理由很簡單,因為當初他們限定講網路電話只能用 wifi 而已,但想也知道有一堆人都用 3G 吃到飽,所以啊,這 Skype app 就限制只能用 wifi 時才能打電話,無法透過 3G 網路,因此也就有越獄後的辦法。我家這台就很莫名其妙地中標,我真的是只想在 wifi 的環境使用啊!然後 JB 後的機子,第一次安裝完 skype 時,在執行程式後,會顯示一個訊息框框,大意是說 Skype app 對於 JB 後的 iPhone 只提供部分功能。



fring: Video Calls + IM


接著,跑去使用 fring 這套軟體,看到一些文章說他有支援 skype ,結果一裝完又發現沒有 Skype 服務,並且查到網路的資訊是說 Skype 拒絕(攩掉?)第三者提供自家的服務。正當我要放棄時,無緣無故就自己想說裝一下 SBSetting 這套東西解解悶,結果裝完後 Skype 就能用了 XDD


由於此機是鎖機美版的,只能用 AT&T 的 sim 卡,加上硬體效能不佳、最新 iOS 4.2.1 的 unlock 方式將導致 GPS 可能變成無效的問題,所以我沒有選擇升級,因此無法透過升級後 JB 來解決 Skype 播打的問題,最後倒是誤打誤裝安裝了 SBSetting 而使得 iPhone 3G with iOS 3.1.2 + JB 的狀態,現在就可以正常使用 Skype 啦,另外一提的,我有把 Cydia 的套件更新到最新後才安裝 SBSetting 囉,加一加目前我只裝了 Openssh、xGPS 和 SBSetting 而已,以前還搞過超認模擬器 XDD 只可惜現在要錢,我也不常玩,就算囉。


沒想到以前親人在國外工作,就曾想買一台 Skype wifi 無線手機,這樣講 Skype 電話就不用電腦也不用花國際電話費啦,現在莫名其妙地多了這功能 cc 只是,對於在國外工作的親人,凡事都仍以方便為主,所以還是一樣收到國際電話費 XDD


最後提醒一下,如果手機狀況跟我差不多(越獄過),想播打 Skype 的網路電話又不通,那就試試安裝 SBSetting 囉,他在 Cydia 裡頭,或許這樣也能解決,至少我與 Skype app 的緣分又是這樣接起來的 XD


2011年3月12日 星期六

使用 Google Chrome 瀏覽器觀看 iPhone App Store 排行榜

chrome_extension_iphone_app


以前還滿常留意 iTunes store 上的 app 排行榜,只是每次要查看時就必須開啟 iTunes 起來,十分不便。雖然知道可以利用一些網路連線原理來取到清單,但還是遲遲沒有沒動手。今天看到了 Google Chrome 擴充功能:iPhone AppStore - https://chrome.google.com/extensions/detail/ikfjaojloelkjlgafconlihjodkpfjjb,可以直接透過 Google Chrome 來呈現,可以省去一堆麻煩囉!


由於原先觀看是綁 iTunes,等同於綁在 Windows 和 Mac OS 環境,現在透過瀏覽器來使用,等同於不再受限於作業系統囉!


Update @ 2011/03/14:在 Ubuntu 10.04 查看不行 XDD


2011年3月10日 星期四

[Linux] 使用 Tarball 更新 OpenSSH Server @ Ubuntu 10.04

OS 是 Ubuntu 10.04 64-bit 並且已經做完 apt-get update && apt-get upgrade 後,還是被資安人員發現有安全性漏洞,理由是 Openssh 版本小於 5.6:


http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2010-4478


OpenSSH 5.6 and earlier, when J-PAKE is enabled, does not properly validate the public parameters in the J-PAKE protocol, which allows remote attackers to bypass the need for knowledge of the shared secret, and successfully authenticate, by sending crafted values in each round of the protocol, a related issue to CVE-2010-4252.


處理方式:


只好用 tarball 更新,到 http://www.openssh.com/ 下載程式碼,在此隨便挑一處下載,再加上機器好像沒啥人在登入,就衝 openssh-5.8p1.tar.gz 吧!


$ cd /tmp
$ wget http://openbsd.org.ar/pub/OpenBSD/OpenSSH/portable/openssh-5.8p1.tar.gz
$ tar -xvf  openssh-5.8p1.tar.gz
$ cd openssh-5.8p1
$ ./configure && make


只可惜沒那麼順利,會出現 OpenSSL headers missing 與 zlib.h 相關訊息,只好多裝一下:


$ sudo apt-get install zlib1g-dev libssl-dev


如此一來就能正常 configure && make && make install


只是,問題並沒這般解決,判斷 ssh & sshd 版本:


安裝前:


$ ssh -version
OpenSSH_5.3p1 Debian-3ubuntu5, OpenSSL 0.9.8k 25 Mar 2009
Bad escape character 'rsion'.


$ dpkg -s openssh-server
Package: openssh-server
Status: install ok installed
Priority: optional
Section: net
Installed-Size: 796
Maintainer: Colin Watson <cjwatson@ubuntu.com>
Architecture: amd64
Source: openssh
Version: 1:5.3p1-3ubuntu5
... 


用 telnet localhost 22 來查看


$ telnet localhost 22
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.3p1 Debian-3ubuntu5


安裝後,卻只有 ssh -version 顯示正確,其他的跟安裝前一樣:


$ ssh -version
OpenSSH_5.3p1 Debian-3ubuntu5, OpenSSL 0.9.8k 25 Mar 2009
Bad escape character 'rsion'.


查看預設 configure 結果:


configure: creating ./config.status
config.status: creating Makefile
config.status: creating buildpkg.sh
config.status: creating opensshd.init
config.status: creating openssh.xml
config.status: creating openbsd-compat/Makefile
config.status: creating openbsd-compat/regress/Makefile
config.status: creating ssh_prng_cmds
config.status: creating survey.sh
config.status: creating config.h

OpenSSH has been configured with the following options:
                                                User binaries: /usr/local/bin
                                           System binaries: /usr/local/sbin

                                       Configuration files: /usr/local/etc
                                        Askpass program: /usr/local/libexec/ssh-askpass
                                             Manual pages: /usr/local/share/man/manX
                                                        PID file: /var/run
                Privilege separation chroot path: /var/empty
                              sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
                                        Manpage format: doc
                                              PAM support: no
                                        OSF SIA support: no
                                    KerberosV support: no
                                        SELinux support: no
       Smartcard support: 
                                           S/KEY support: no
                             TCP Wrappers support: no
                            MD5 password support: no
                                          libedit support: no
              Solaris process contract support: no
                             Solaris project support: no
                    IP address in $DISPLAY hack: no
                             Translate v4 in v6 hack: yes
                                     BSD Auth support: no
                           Random number source: OpenSSL internal ONLY

                       Host: x86_64-unknown-linux-gnu
                 Compiler: gcc
         Compiler flags: -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -fno-builtin-memset -fstack-protector-all 
  Preprocessor flags: 
               Linker flags:  -fstack-protector-all
                    Libraries: -lcrypto -ldl -lutil -lz -lnsl  -lcrypt -lresolv


Ubuntu 10.04 server 之 sshd 的設定檔預設是擺在 /etc/ssh/ 而執行檔在 /usr/sbin/sshd, /usr/bin/ssh 並且查看 /etc/init.d/ssh 裡頭的描述也都是用 /usr/sbin/sshd 來動作,因此就稍微改一下流程:


$ ./configure --sbindir=/usr/sbin
$ sudo make install


暫時運行的結果還正常,只是感覺還是整身的不乾淨的感覺


$ telnet localhost 22
Trying ::1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_5.8


2011年3月9日 星期三

[Python] Django 之資料庫與 Models 使用筆記

用了 Django 一陣子,常常會碰到 Datetime 的問題,乾脆記一下。


建立資料表時,使用到 DateTimeField:


from django.db import models
import datetime

MyDatetime((models.Model):
# 新增資料必要欄位
myid = models.CharField(max_length=255)

# 新增資料必要欄位, 沒有指定 mydate1 數值或其格式不對時會出錯
mydate1 = models.DateTimeField()

# 新增資料非必要,允許 mydate2 為 None 或不設定
mydate2 = models.DateTimeField(null=True, blank=True, default=None)


在 views 寫資料:


from myproj.myapp.models import MyDatetime

def MyInsert(request):
_myid = request.POST.get('myid',None) or request.GET.get('myid',None)
_mydate1 = request.POST.get('mydate1',None) or request.GET.get('mydate1',None)
#_mydate2 = request.POST.get('mydate2',None) or request.GET.get('mydate2',None)

try: # 格式轉換, 假設 mydate1 輸入格式是 "%Y/%m/%d %H:%M:%S",無法直接使用,需轉成 "%Y-%m-%d %H:%M:%S" 格式
_mydate1 = datetime.datetime.fromtimestamp(time.mktime(time.strptime( _mydate1 , "%Y/%m/%d %H:%M:%S"))).strftime("%Y-%m-%d %H:%M:%S")
except:
_mydate1 = None # mydate1 欄位不能為空,若在此步,繼續進行下去新增資料會出錯

try:
# 先確認此筆資料是否存在,若存在則更新 mydate2
obj = MyDatetime.object.get( myid=_myid )
# 設定 mydate2 為當地時間
obj.mydate2 = strftime( "%Y-%m-%d %H:%M:%S" , localtime() )
obj.save()
except Exception, e:
obj = MyDatetime(
myid = _myid , 
mydate1 = _mydate1 ,

# mydate2 預設可以為 None,所以不輸入也行,但記得 _mydate2 可以為 None 但不能為 '' 字串
#mydate2 = _mydate2 ,
)
obj.save()


查詢資料時,使用 QuerySet 提供多重的條件限制:


from django.db.models import Q

from django.shortcuts import render_to_response
from django.template import RequestContext
from django import http
 
import simplejson

def MyQuery(request):
_myid = request.POST.get('myid',None) or request.GET.get('myid',None)
  _mydate1 = request.POST.get('mydate1',None) or request.GET.get('mydate1',None)
_mydate2 = request.POST.get('mydate2',None) or request.GET.get('mydate2',None)
 
# 使用 and 條件
try:
obj = MyDatetime.object.get( Q(myid=_myid) & Q(mydate1=_mydate1) )
except:
pass
 
  # 使用 or 條件
try:
obj = MyDatetime.object.get( Q(myid=_myid) | Q(mydate1=_mydate1) )
except:
pass

# 多重條件 ( ( myid == _myid || mydate1 == _mydate1 ) && ( mydate2 == _mydate2 ) )
try:
obj = MyDatetime.object.get( Q( Q(myid=_myid) | Q(mydate1=_mydate1) ) & Q(mydate2=_mydate2) )
except:
pass

# 使用大小判斷 great than , less than, equal
try:
obj_list = list( MyDatetime.object.filter( Q(mydate1__gt=_mydate1) ) )
except:
pass
try:
obj_list = list(  MyDatetime.object.filter( Q(mydate1__lt=_mydate1) ) )
except:
pass
try:
obj_list = list( MyDatetime.object.filter( Q(mydate1__gte=_mydate1) ) )
except:
pass
try:
obj_list = list( MyDatetime.object.filter( Q(mydate1__lte=_mydate1) ) )
except:
pass

_result = {}

# 取出 list 並 sorting
try:
obj_list = list( MyDatetime.object.all() )
obj_list.sort( cmp=lambda x,y: cmp( x.myid , y.myid ) )
output = []
for obj in obj_list:
_obj = {}
_obj['myid'] = obj.myid
output.append( _obj )
_result['result'] = output
exception:
pass

# 回傳 JSON 格式
result=simplejson.dumps(_result)
return http.HttpResponse(str(result))