PageRank



轉移公告

計劃把 http://blog.hoamon.info/ 文章全部轉移至 http://www.hoamon.info/blog/ 這裡,而本 Blogger 站台的文章近 500 篇,我預計在 2014-12-31 前移轉完畢,完成後 http://blog.hoamon.info/ 將只作代轉服務,一律把舊連結如 http://blog.hoamon.info/index.html 轉成 http://www.hoamon.info/blog/index.html ,敬請舊雨新知互相走告。

新文章只發佈在 http://www.hoamon.info/blog/

何岳峰 敬上

2007年5月29日 星期二

新的相片簿

我把原本放在 Gallary2 的相片全搬到 Picasa Web 了。過程還滿容易的。只可惜 Picasa Linux 版不能直接上傳本地相片到 Web 。

新的相簿在

2007年5月12日 星期六

封網二周

剩下兩週就要博班筆試及口試了。這兩周不寫 Blog 了,也少上點網。要認真唸書了。

在 re 中使用 utf8 字串

如果你在 utf8 的環境中使用下面這個語句,你會發現這是 True 的。

re.compile('[年度]').search('要旨')

原因在於中文字在 utf8 中,是2~3個碼的,如:
年:\xe5\xb9\xb4
度:\xe5\xba\xa6
要:\xe8\xa6\x81
旨:\xe6\x97\xa8

所以在 re 比對時,[\xe5\xb9\xb4\xe5\xba\xa6] 的確可以比對出 '\xe8 \xa6\x81\xe6\x97\xa8' 。

解決之道就是使用 unicode 字串,如下:

re.compile(u'[年度]').search(u'要旨')

我也申請了「Google 應用服務」

看了Google 應用服務教育版後,發現它不只限定教育機構,其他像個人、公司…皆可申請。

過去(大約1年半前),因為我十分欣賞 GMail 的功能,所以把我的 *@hoamon.info(or *@amon.idv.tw) 信箱利用 Postfix Relay 轉到 hoam0n@ gmail.c0m 。這樣我就可以利用 Gmail 介面來處理 *@hoamon.info 的信件。這麼作是因為我不知道 Google app 的原因,如果使用 Google app 的話,我就可以省下2台 Postfix 伺服器了(是的,我還有作備援喔)

申請方式很簡單,只要你完全擁有1個 domain name ,可以設定 MX 及 CNAME 記錄的就行了。申請時,我還非常客氣地只寫下20個帳戶,沒想到 Google app 直接幫我升到50個。

現在,我可以停掉兩台 Postfix 了,而且我相信郵件接收的妥善率絕對比以前更高。

2007年5月11日 星期五

django處理靜態資料的方法

感謝 yungyuc 提醒,我看過 stitac_files 文件後,重新整理如下:

方法目前有3種:
1、使用 mod_python
利用高效率的 Apache 幫你處理,設定檔範例如下:
 1 <VirtualHost *:80>
2 ServerName somedomain
3 <Location "/">
4 SetHandler python-program
5 PythonHandler django.core.handlers.modpython
6 PythonPath "['/path/to/djangoproject_parentpath'] + sys.path"
7 SetEnv PYTHON_EGG_CACHE /tmp
8 SetEnv DJANGO_SETTINGS_MODULE djangoprojectname.settings
9 PythonDebug Off
10 </Location>
11 Alias /media /path/to/djangoproject_parentpath/djangoprojectname/media
12 <Location "/media">
13 Options None
14 SetHandler None
15 </Location>
16 ErrorLog /var/log/apache2/somedomain_error.log
17 LogLevel warn
18 CustomLog /var/log/apache2/somedomain_access.log combined
19 </VirtualHost>

這種方式應該只用在 product (上線模式) 中,在程式開發時,是不應使用這種方法的(除非你不厭其煩地下 sudo service httpd restart)。而這種方式的輸出效率是最快的,不須透過其他程式,直接從 Apache 輸出,但缺點是沒有彈性,如果你的專案中,有分多個 apps 的話,你得手動把 apps/media 放到 media 中。但這點麻煩還算可以忍受的,如果你的網站是成千上萬人用的話。

2、使用 django.views.static.serve 函式
在你的 urls.py 中設定如下:

(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/media', 'show_indexes': True}),

show_indexes 選項的意思是「要秀出這個資料夾下的所有檔案嗎」,預設是 False ,也建議你用 False 。 '/path/to/media' 可以是相對路徑也可以是絕對路徑。而 site_media 不要與你的 settings.py 中的 ADMIN_MEDIA_PREFIX 設定相同。相同的話,會造成上線模式及開發模式的行為有所不同,增加困惱。

使用這種方法的優點是你的 media 資料夾可以跟著 apps 跑,而且上線及開發模式所使用的資料夾架構是一樣的。缺點是少了效率及多了安全隱
憂。

3、使用 limodou 開發的 staticview.py
staticview.py 是延伸了
django.views.static 的程式,多了一項功能,可以比對整個專案下 apps 的 media 資料夾,讓你的靜態文件,只需要放在某一個 app/media 下即可。設定方式略有不同:

(r'^site_media/(?P<path>.*)$', ' myprj.utils.staticview.serve', {'document_root': '/path/to/media', 'app_media_folder':'media', 'show_indexes': True}),

多一個 app_media_folder 設定值。

本文已修改,若要看舊版錯誤,請看本文的原始碼。

2007年5月10日 星期四

Google 應用服務教育版

本來我失眠了,正在寫另一篇奇怪想法的 Blog ,莫名地看到我的 Google Adsense 廣告出現了 Google 電子郵件代管,心下大感興趣,沒想到 Google 也開始作代管業務了,點進去後標題是Google 應用服務教育版,原來是提供各級學校申請電子郵件代管服務,除了郵件外,還有行事曆及 Gtalk ,這時我在想為什麼早上我要希望中小學不准用 Yahoo! Mail 要用 Gmail ,如果是希望樂透中頭獎的話,或許今晚我失眠就是應該的。

這個方案真是大大地鼓舞中小學的資訊教師:
  1. 不用自已架 Postfix, sendmail 就可以大量建立學生郵件帳號。上資訊課時,不用再教學生如何在 Gmail 上申請信箱了。
  2. 不用架擋垃圾信、色情信件軟體,就可以擁有世上最少垃圾/色情信件的信箱。
  3. 機器不用管,也不會倒。
  4. 可以合理地停用 Yahoo! Mail,因為這個 Gmail 的信對教職員及學生來說,一定是公事上在用的;要收 Yahoo! Mail 的信請回家收,這樣就少了很多病毒。
  5. 可以自訂信箱畫面,不知情的使用者一定覺得資訊教師很 cool ,可以作這麼棒的畫面。
  6. 還同時擁有共同行事曆、 Gtalk (雖然我比較常用 skype)可以用。
* 等不及了,真想叫老婆起床來去申請。

BT式Web(1)

在規劃圖書管理系統時,有一個特別的想法:利用 bt 程式快速備份主資料庫資料到其他資料庫中。原因是每一個獨立的圖書管理系統都須要儲存一份 ISBN 基本資料,如果每個系統都要到主網站來抓,那這個主網站的頻寬就得非常非常大,這代表著得花大筆大筆的鈔票才建立得起這種服務,連我們的國圖都得約束使用者批次抓 ISBN 記錄的次數了,你想我們出得起國圖的預算嗎!如果利用 python 優秀的 bt 算法結合到資料庫備份那應該能超有效率地及省錢地備份這種無機密的資料。

這兩天再把這個想法再擴大了些,起因是看到「丁丁大站」掘起的故事,給了我非常大的啟發,如果它冒頭的原因是交大無窮的資源提供,那它與傳統 Web 有什麼兩樣, Web 2.0 的重點是在分享,除了意見、相簿外,為什麼不拿頻寬來分享呢!『嘿~不要打斷我,我沒打算講 edonkey 、 emule 及 azureus ... 的故事』。

你可想像所瀏覽的 some_sexy.jpg 不是由「丁丁大站」送給你的,而是由我傳給你的,或是 some_smart_guy 所 po 的留言不是從「丁丁大站」抓的,而是由鄰居傳給你的,那這樣我們經營一個「丁丁大站」就不須要跪求 HiNet 降價,也沒有必要吸學網的血(也就是納稅人的血)來成就5~6個人的財富。

如果各位有用過 Azureus 的話,一定覺得自己找種子檔是件辛苦的事,這問題在下一版的 Azureus3 似乎解決了這個問題,它現在結合了瀏覽功能,把所有使用 Azureus 的用戶全部統合到一個平台,大家可以在上面瀏覽影片、文件…,有興趣的話點個左鍵就可以把種子檔下載下來,接著就是原本的 bt 下載。基本上 Azureus 新推出的 Vuze(Azureus3) 不但是像「貪婪之島」、「辛莘摩兒」之類的論壇,而且還把這個論壇加上了 bt 程式。

一個「丁丁大站」除了程式外,剩下的還有什麼!相片及資料庫資料嘛~還有嗎!沒有了。那就把它們混在一起用 bt 傳吧!

* 原文在此

2007年5月9日 星期三

GMail真難用??

常有人跟我抱怨 GMail 不人性化,不能分子資料夾存信,寄信時不能選通訊錄中的人,除了擋圾垃信一級棒外,沒有什麼好用的!!如果你是怎麼想的,請看看下面吧!

1、不能分子資料夾存信:
這是沒有必要的, Gmail 給你另一種角度來收納信件---把信件「標籤化」,譬如你把老婆寄來的信,一律標記為「親愛的」,那麼你就可以點選左邊區塊中「親愛的」標籤,這時你的收件匣內的信就全是老婆寄來的,這像不像子資料夾的觀念。但這麼作比舊方法更好,因為你可以把一封信定義兩種標籤。

2、寄信時不能選通訊錄中的人:
使用 web 那麼多年,你的通訊錄有沒有 200 個以上的用戶,如果有,當你要寄一封信,要選擇其中的 30 位時,你不覺得這樣沒有效率。『嘿~用群組嘛』!!我聽到了高級用戶的建議了,是的「用群組」,那如果這一封信剛好要寄給你定義過的群組及另外 3 個人的話,那麼你還是得很麻煩地東點點西點點,對吧!這是沒效率的作法。 google 把搜尋引擎的概念套用到這裡,當你想要寄信給「中興大學群組」、「何小峰」、「藍小敏」、「馬小九」、「謝小廷」時,你就在收件者(或是新增副本,或是新增密件副本)的地方打「興+<space>」,它就會出現名字或是群組名字中有「興」字的人讓你選,打上「小+<space>」,就會出現「何小峰藍小敏、馬小九、謝小廷…」讓你選。這種方式的效率絕對比傳統高。

3、GMail強項---擋圾垃信超級棒:
你家的小朋友是不是使用 Yahoo! Mail 呢!!如果是,你不擔心他/她看多了色情信件嗎,平平是網路大廠, Gmail 能作到過濾極多數的色情信件,但 Yahoo! Mail 卻作不到!這是我認為 Yahoo! 沒前途的地方,就算它的拍賣、信箱用戶多又如何,沒有技術就是沒有技術。通常一個軟體/OS讓用戶使用的原因是「大家都在用」,而不是它這裡、那裡真的很棒,那它就是靠行銷而不是靠技術的。事實上,如果你是中小學的資訊教師,那我建議你應該在閘道器擋下 Yahoo! Mail ,要不然你的學生們在學網上看的色情信件比你還多,如果那一天出了一則「國小學童看email後性侵同學」新聞,你會祈禱他是在家裡看信,而不是在學校。

4、免費使用加密過的 POP3 下載:
老婆常跟我說,什麼東西都給了 Google ,那它倒了什麼辦。這句話,我到想換成什麼程式都跑在 Windows 上,那 MS 倒了,台灣什麼辦??勞工們放1個月的大假,因為要給時間讓 MIS 們換系統。用 Google 的軟體,你大可放心,它們是不靠「邪惡的事」來賺錢的。所以我們可以把 Gmail 的信收回到本機端來,如果那天 Gmail 真的倒了,至少情人寄給你的信都還在,這點 Yahoo! Mail 還得要你繳錢才作得到。

5、偽裝其他郵件地址:
我是 Gmail 的愛好者,但朋友收到我的信時,寄信地址卻是 hoam0n@h0am0n.info ,而不是 Gmail 的,原因是 Gmail 給你一種自由,只要你真實擁有其他郵件地址,你就可以跟 Gmail 說,寄信地址改用其他的。


* Gmail 還可免費使用 POP3 下載是由好友 change 補充的。
* 希望可以串連中小學資訊教師一起抵制 Yahoo! Mail ,還學生們乾淨的郵件信箱。

2007年5月8日 星期二

Use django's models without running web server

>>This article also posts on django-users<<

Because i can't find related post here, so i post this example. maybe someone else need.

Sometimes, you just want to use the useful models of django without thinking any sql statement.
Maybe you want to run a script to know which user's birthday in your database is today,
this little job should not run in the view.py. It should run in the cron table of linux os every day,
so that your users can receive birthday card from your system.

this example is so easy, all you know is loading the settings.py correctly.
Your script must place in your django project's directory.

script example:

1 #!/usr/bin/env python
2 # -*- coding: utf8 -*-
3
4 import settings
5 from django.core.management import setup_environ
6 setup_environ(settings)
7 # before do something else,
8 # the there lines above here is your first operation.
9
10 from django.db.models import get_model
11 from datetime import date
12
13 if __name__ == '__main__':
14
15 # the 'tmp' is your project's name,
16 # and this script must place in the 'tmp' directory.
17 # the 'person' is your model's name.
18 Person = get_model('tmp', 'person')
19
20 # when you get the model,
21 # you can use it just like you use it in the view.py
22 P = Person(name='hoamon', birth=date(1977, 10, 18))
23 P.save()
24
25 for p in Person.objects.all():
26 if p.birth == date(1977, 10, 18):
27 print p.name
28
29 for p in Person.objects.filter(birth=date(1977, 10, 18)):
30 print p.name

now you can put /somepath/tmp/birthday.py in the cron table.

2007年5月3日 星期四

Eclipse + PyDev + Django

到工具列上的 [Window] => [Preferences] => [PyDev] => [Interpretter - Python] ,把 PYTHONPATH 加入一個 New Folder 。
位置就是你的 django project 的所在位置,如果你的專案 settings.py 是在 C:\www\project\settings.py ,則你要設定的 PYTHONPATH 為 C:\www 。

然後到你的工具列上的 [Run] 去設定 ./manage.py runserver ,專案名為 project 、 module 為 manage.py 、引數為 runserver 。

目前惟一的問題時,啟動了 ./manage.py runserver 後,無法中斷它。只能利用 Windows 工作管理員 或是 Linux 下的 kill 指令來中斷。

一個小錯誤

在配置 django + mod_python 時,出了點小問題,在 python24 時,我可以用

PythonPath "['somewhere/sompath/'] + sys.path"
也可以用
PythonPath "['somewhere/sompath '] + sys.path"

但在 python25 必須寫成

PythonPath "['somewhere/sompath'] + sys.path"
結尾就是不准你用 /

唉~我找了好久。

2007年5月1日 星期二

「異鄉人」到那去了?

看了 change 寫的 異鄉人讀後感 ,忽然有種低落的感覺。

最近我在寫文章時,常覺得我的文筆變得很平凡,用字遣詞枯燥,很像是在寫說明手冊。我認為是太久沒讀文學作品了,前一本讀的文學作品是「阿拉斯加之死」,時間應該是1年前,「阿拉斯加之死」之前呢?我實在是沒印象了。我是學東西快,但忘的也快的人,如果沒有偶爾拿出來思考、複習,鐵定會還給作者。「異鄉人」也是,我都忘了異鄉人的故事是什麼了。

但到底是什麼原因讓我不讀文學了呢!就是電腦科學數學,學 Python 、 Django 、 Optimization …,讓我實在沒時間看小說,但事實上,我也捨不得拿時間來看文學小說,因為 Python 、 Django 、 Optimization … 它們太有趣了。所以就委曲大家的眼睛了,看看我平凡的文章。
Related Posts Plugin for WordPress, Blogger...