2009-09-28

社群經營

藍色小舖似乎漸漸式微...
沒有甚麼新功能,
也沒有推甚麼活動,
在目前web 2.0,微網誌正炒的火熱的時候,
這個社群還是無聲無息...

參考來源: 首頁-藍色小舖 BlueShop (在「Google 網頁註解」中檢視)

2008-05-22

google sites開放讓大家都可以玩了.

之前還需要有google app才能玩,
現在只要有google帳號就可以去建立了.
只是網址是http://sites.google.com/site/[你所命名的名稱]/
(這跟Offical Google Blog上提得不太一樣)

如同google pages一樣,
一個帳號可以建立多個site,
而一個site的空間是100MB.
感覺就像是進階版的google pages.

所以想玩的現在趕快去建立網站吧.

2008-05-21

Google Treasure Hunt 2008

五月初Google Australia Blog開放了一個treasure hunt的遊戲,
這個網站大致會每周開放一個問題,而目前已經出了兩題了.

第一題是計算機器人到達目的地的所有可能路徑,
第二題是掃描資料夾跟開啟檔案取得內容並計算的功能.

聽說第一個正確解出這些問題的會有獎品...

大致上第二題沒有太大的難度,
而第一題倒是有點麻煩,
而麻煩的地方是在於大數計算的部分.

因為這題跟組合排列有關,所以需要使用階乘的計算
而excel中有提供一個fact的函數可以計算階乘.

例如在excel儲存格中輸入 =fact(5) 就可以得到 120
而輸入 =fact(20) 則是 2.4329E+18
這時只要修改儲存格格式,
改為數值,並去掉小數點,就可以得到2432902008176640000
感覺大致上沒有甚麼問題.

所以就直接套用公式,取得結果送出,但是得到的答案卻是說不正確.
後來仔細研究才發現,
excel中,當fact(21)時,算出來的數值就開始不正確.
在excel中,fact(21)會得到
51090942171709400000
但是實際上的數值應該是
51090942171709440000
那當然,在往後面算也就不會是正確的了.

這時才想到大數運算的問題.
所以只好自己用c#寫個處理超長整數運算的功能.
這才總算得到正確的數值了.

不過,剛剛改用python來試試看階乘計算時才發現,
原來python不會超長整數計算的問題

def fact(num):
    tmp = 1
    for x in range(1,num+1):
        tmp = tmp * x
    return tmp

if __name__ == "__main__":
    print fact(21)
    print fact(50)

不知道出這題是不是要展示python的這個特性
ps. treasure hunt是架在appengine上的系統,所以是用python開發的.

2008-05-04

幾個python的學習資源

前兩天google appengine的試用終於下來了,
不過還是沒有寫出甚麼東西...

下面是一些python的學習資源.
如果有興趣的話,也一起來玩玩吧!

在windows上要玩的話,除了裝官方的python的安裝程式外,
也可以直接使用activepython.
在微軟的網站上也有介紹 : HOW TO: install Python for a UNIT-to-Windows Migration

再來是兩份教學文件

Python Tutorial (中文版 - 譯者:周譯樂)

Dive into Python
有提供電子書下載,不過中文版只有簡體中文,
所以如果有裝office的話,可以下載word檔,然後用office的繁簡轉換.

2008-04-18

玩玩Google Appengine - Using Static Files的問題

今天又繼續玩google appengine,
照著網站上的教學試到了Using Static Files的步驟,
照個上面的語法寫卻發生錯誤,
我的環境是 : winxp + Python 2.5.2
(這個好像是只有在windows系統上才有的問題)
在執行dev_appserver.py時出現了下面的錯誤訊息

ERROR    2008-04-18 23:14:48,826 dev_appserver_main.py] Application configuration file invalid:
regex invalid: unbalanced parenthesis

還好在google論壇上已經有人找出問題了,
確實是個bug,不是我操作上的問題.

改用下面的語法就可以讓教學的步驟順利往下走.

將app.yaml中的

- url: /stylesheets
  static_dir: stylesheets

改為

- url: /stylesheets/main.css
static_files: stylesheets/main.css
upload: stylesheets/main.css

但這樣只是讓哪個main.css可以讀取,
要改成是整個資料夾的話,可以用下面這段

- url: /stylesheets/(.*)
  static_files: stylesheets/\1
  upload: stylesheets/(.*)

另外有個直接修改SDK的方式,
也就是讓你完全可以照著教材內的程式來做.
就是修改dev_appserver.py
(跟執行的那隻路徑不同,
是在C:\Program Files\Google\google_appengine\google\appengine\tools\下的dev_appserver.py)

在dev_appserver.py的第2369行,

      regex = os.path.join(re.escape(regex), '(.*)')
      path = os.path.join(path, '\\1')

改為

      regex = re.escape(regex) + '/(.*)'
      path = path + '/\\1'

這樣,app.yaml就可以照教材上的設定就可以了,
至於哪個比較好用.那就看你比較想用哪個,
因為畢竟現在的google appengine只是preview release而已.

2008-04-14

玩玩google appengine SDK

google appengine出來也好幾天了,
不過來不及申請試用,也還沒排到,所以只先玩玩它提供的SDK.

關於google appengine的介紹現在在網路上應該有很多,所以就不多做介紹,
那就直接來說一下開發環境.

他的環境很單純,只要先裝pythongoogle appengine sdk就可以了.
我是在windows(winXP)的環境下開發,安裝Python 2.5.2.

安裝pythonApp Engine時都使用預設的安裝設定就可以了.
App Engine的安裝目錄中(預設是 C:\Program Files\Google\google_appengine)會有下面這兩個檔案.

dev_appserver.py : 開發用的web server
appcfg.py : 用來將你的程式上傳到app engine

因為目前申請不到試用帳號,所以只會用到dev_appserver.py
安裝完pythonApp Engine後,就可以開始寫hello world了.

先建一個資料夾叫Helloworld,
我是建在c:\files\Helloworld

然後裡面建兩個檔案

helloworld.py : python script
app.yaml : 設定檔(記得檔名要正確,不然出現google.appengine.tools.dev_appserver.AppConfigNotFoundError的錯誤訊息)

helloworld.py內容如下

print 'Content-Type: text/plain'
print ''
print 'Hello, world!'



app.yaml內容如下




application: helloworld
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
script: helloworld.py



建好後就可以啟動測試用的web了.



開啟一個dos命令視窗.



然後輸入




c:\Python25\python.exe "c:\Program Files\Google\google_appengine\dev_appserver.py" c:\files\helloworld




如果dos沒有出現任何錯誤,(下面是已經在測試寫入資料的動作後啟動畫面,所以跟第一次執行的畫面不太一樣...)



appengine001


那就可以開啟IE來瀏覽 http://localhost:8080/


這時就可以看到Hello, world!的網頁了.


如果你可以看到測試了話,就可以開始寫程式了...環境搞定,一切就簡單多了.


我遇到的問題大概就是找不到app.yaml,因為命名錯誤...


不然就是路徑問題,不過執行dev_appserver時直接使用完整的路徑就比較沒有甚麼問題了.



google appengine sdk上的教學文件


會先教你基本的google.appengine.ext.webapp的功能,


然後在教你使用google.appengine.api.users產生登入畫面跟存取使用者資料.


然後再透過webapp去處理表單資料,


可以處理接收表單料後,就是要存到資料庫中,而appengine提供了google.appengine.ext.db來操作,


在這邊要查詢資料的語法跟sql是有點類似的,但是這邊叫"GQL",



要建立一個"資料物件"(在這邊稱資料物件應該是會比稱資料表合適)的語法如下:




class Greeting(db.Model):
author = db.UserProperty()
content = db.StringProperty(multiline=True)
date = db.DateTimeProperty(auto_now_add=True)



目前支援的型態請見 : Types and Property Classes


而執行查詢語法就像下面這樣.




greetings = db.GqlQuery("SELECT * FROM Greeting ORDER BY date DESC LIMIT 10")



或是用



 greetings = Greeting.gql("ORDER BY date DESC LIMIT 10")



而要下查詢條件的話,可以使用下面這三種方式



greetings = Greeting.gql("WHERE author = :1 ORDER BY date DESC",users.get_current_user())




greetings = Greeting.gql("WHERE author = :author ORDER BY date DESC",author=users.get_current_user())




greetings = Greeting.all()
greetings.filter("author =", users.get_current_user())
greetings.order("-date")



目前還不知道怎麼列出我到底建了那些資料物件...不知道有沒有可能寫個類似myphpadmin的功能...
如果要清空開發環境的資料庫的話,只要在啟動dev_appserver時加個--clear_datastore的參數,指令如下



c:\Python25\python.exe "c:\Program Files\Google\google_appengine\dev_appserver.py" --clear_datastore c:\files\helloworld



而appengine的api目前主要有四個功能 - Datastore,Users,URL Fetch,Mail


然後是教你怎麼使用模板(appengine是使用Django模版引擎),
以及教你怎麼修改設定檔讓你的開發web可以存取子資料夾及靜態檔案,
最後就是上傳你的程式到appengine了,不過沒有測試帳號,所以目前還玩不到...
以上是這一兩天是玩的結果...再來就等有試用帳號再說了...

2008-04-13

推薦[點部落]

前陣子受Dotjum的邀請,在點部落開了個分站,
點部落開站到現在已經兩三個月了,也慢慢看到他們的用心.
從基本的部落格功能開始,現在也加上書籤收藏,
在台灣,似乎還沒有一個像是DZone這樣專門針對developer的書籤網站.
我還蠻期望有個專屬developer的華文書籤網站.

以目前點部落的計畫,我想他將不只是部落格,
而可能將會是另一個developer的社群.