prism

2007-12-16

Profiling & Debugging are friends

用 Django 開發的好工具,有時候也許覺得,要除錯的時候,資訊不太夠,或是,想分析,ORM 幫你下 SQL 的語法,有沒有問題,請參考照這兩個 snippet

Profiling Middlware http://www.djangosnippets.org/snippets/186/

Template Query Debug http://www.djangosnippets.org/snippets/93/


看到重點了嗎? http://www.djangosnippets.org is Good Place

2007-12-14

My Third Django Site

秉持著作中學的原則,有新的想法的時候,就會在下班後花一點點的時間把他實現出來

我的第三個 Django Site,支援多國語文的介面,可以沒有語言界線了,不過,很多語言的 po 檔,我生不出來,語言能力太差 ;-)

U & People ,一個人際 RSS planet 的玩具


極簡的功能是網路名片,使用到複雜一點的部份,可以延伸到人脈的管理,在群組的實現,還是以人為中心,以標籤的方式實現,開始測試中......

這是我的自我介紹頁面,非常低調,哈哈

http://digez.com/users/terry/

想法由來

網路上已經有各式各樣的服務,也許,部落格,我喜歡用 Blogger,可是相簿我喜歡用 Flickr ,不想用無名的相簿,因為他的照片,只能在他的網站上看,或是也有在 Twitter 寫 micro blog 的習慣,我們可以選擇不同的服務商,可是這些更新,無法整合,所以才有一個單純的想法,把在 Web 2.0 裡被技客叫好,卻不叫座的 RSS 再延伸整合,除了訂閱,可以直接看更新,再把門檻降低

附註

網站的外觀,參考 Django http://www.djangoproject.com/ 及 Django snippets http://www.djangosnippets.org/




2007-12-13

Qrcode

很久以前,日本公司發明的,開放的規格,在日本比較普及,可以用來存放資料,用軟體辨識,讓人不需輸入,比文字的辨識容易,精確性高,要了解更多,請看維基百科 http://zh.wikipedia.org/wiki/QR%E7%A2%BC


Python 可用的函式庫

http://libpanda.s18.xrea.com/qrcode.html


在 Django 下可以這樣用,已經有大大作好了

http://d.hatena.ne.jp/technolize/20071005/1191582133

2007-11-13

The Lost Middle Class

世界是平的,這一本書相信很多朋友都有看過了,說了新興市場的崛起及網路世代的來臨,縮短的人的距離,你的競爭對手,已經不是你的同班同學,不是本國的居民,而是,遠在世界某一端,另一個和你有相同興趣背景,相似的專業,但是領著你一半或是更少薪水的人,老闆把工廠移到低人力成本的地方,慢慢的研發人員也培養了,慢慢的整個供應鍊,及市場成型,老闆們成本降低了,可是在最後的消費層,卻一點也沒有收到低成本到來的低價效應,這就是消失的那一部份,中間層,消費了低成本,高利潤的產品,讓 M 型的上層富有,自己也就成了M 型的下層了。

這些令人不解的價格,就是因為成本降了,卻沒有反應的,舉一小部份,其他請讀者自行去了解

Nike 的鞋子,並沒有因為到了大陸,就賣你便宜一點

雀巢生產的食品,成本差很多,價格沒有差很多

捷安特,和美利達也沒有給你便宜一點的腳踏車

一些高貴的名牌,都變成大陸製的了,價格沒變

拍婚紗已經由傳統的四五相機,需高貴底片,及暗房成本,轉為數位處理了,婚紗業者也沒有反應,暗槓起起來,想想自己以前買底片,和沖洗的成本吧

要終止這樣的循環幾乎是不能的,除非,所有的人能認清,如果,他是在低人力的生產國製造的,價格和在台灣製的差不多的話,記得,愛台灣,買台灣一個機會,買一個,不成為M型社會下層的機會。

2007-11-12

World Class Service

在網路上的創業家,多到數不清,最近中國大型的 B2B 網站,阿里巴巴在香港發行募集資金,又一次讓人見識到網路的洪流,見識到一個沒有邊界的機會。

網路服務的機會在於,你有好想法的時候,可以很快的把他轉成服務,可以沒有工廠,沒有通路,沒有客服,就把你的產品推向全世界,只要你的服務夠好,可以改變生活,可以讓世界變得更好,人們很快接受的同時,也帶來了相對的報酬,我想這才是他迷人的地方,並不是他的技術(當然技術也是不可或缺的,不然哪來好的服務),背後的想法與創新才更有價值

好好思考,什麼是會受歡迎的世界級服務吧,沒有太多的明天,好好加油吧

2007-11-10

Taiwan Stock

同學聚在一起,難免都會談談理財之道,其中一個同學有透過寶來的管道,開香港的戶頭,投資大陸,同學個個手上都有不少的單位,同學說:"早知道就不花腦筋在台股上,一年穩穩賺一倍",沒錯他每一段時間就問我要不要開戶,我都回答我要愛台灣,哈哈,自己真像傻子,我也看他們一直更新的基金淨值由 40 美元 到 100 多美元,看來傻人有傻福一直是假的。

真有傻福的人,是大智若愚,你笑他傻的時候,只是你還沒有智慧了解他的聰明


First State Investments (Hong Kong)

台灣股市,市場總值是越來越大,可是個別的公司的總值可未必是增長的,還記得,第一次上萬點的時候,國泰人壽,可是一兩千元的公司,現在百元不到,辛酸壓,股本是增加了,股價,可是越來越便宜,要是所有的公司也像大陸股市一樣都漲到歷史最高價,國壽上千,聯電破百,那應該台股可以到 3 萬點以上吧!

哈哈,恭喜,三年來投資大陸香港有賺到的同學時,也不忘提醒自己,大陸與香港的風險,還有在台灣,除了資金出走到海外投資,台股還有沒有比較值得投資的公司

2007-11-07

Taiwan economy

每到總統大選,政治人物的口水就越多,所以現在每天聽到如何拼經濟的言論,說得都是同一套,大陸政策更開放,無言的台灣人,到底什麼時候,才能真正擺脫和中國比較的命運

為您找家找房子 Find You Home

在網路上,要看房子越來越方便了,但是,各家房仲公司的網頁介面不同,有些有地圖,有些沒有,不太方便,一個整合地圖網站,可以方便找房子的站,用 Debian, DjangoLighttpd,和一些 Google 提供的 API 就可以達到一致化的好處,還做了地址的正規化,提供看屋的平台,最重要的是,做了所有地區和路段的 RSS 訂閱,這應該是有使用 RSS 的一大福音,不過話說回來,大概在台灣還是只有學生族群,還有網路重度使用者會用 RSS,一般的上網人口可能只會用作業系統預裝的IE6,還不會下載 FireFox ,是我低估了台灣人嗎? :-)

http://home.digez.com/

2007-11-06

A Memo for wxPython

這是作給自己看的筆記,怕以後自己都忘了,主要說明一個 windos 庫存軟體的開發我所用的工具

要注意的事,都是安裝 win32 的套件包

基本套件


Python2.5
http://www.python.org/

wxPython http://wxpython.org/

wxGlade http://wxglade.sourceforge.net/ 可以快速拖拉的方式產生視窗程式碼
PIL
http://www.pythonware.com/products/pil/

Django http://www.djangoproject.com/ ,拜託不要K我,我在 windows 裡也是用他的 ORM,除了,幾乎所有的 SQL 都可以作,如果嫌套件太大,可以把 locales 的目錄去掉,就很小了

IPython
http://ipython.scipy.org/moin/ ,必須加裝 pyreadline http://ipython.scipy.org/dist/ 這種 shell 方式的測試開發,算是特別的福利喔,好好珍惜,很好用的
pywin32 http://sourceforge.net/projects/pywin32/ ,可以用 COM 的方式來控制元件

ReportLab
http://www.reportlab.org/ ,可以用PDF來處理列印
reportlab 在 windows 下有一個很久沒有修的 bug,maillist 上也有人說,就是沒修正,記得 /reportlab/pdfbase/_cidfontdata.py line 137

'MSung-Light': ('cht', 'UniGB-UCS2-H')
改成
'MSung-Light': ('cht', 'UniCNS-UCS2-H')

生成安裝包

py2exe
http://www.py2exe.org/ 生成執行程式,0.6.6版有一點怪怪的 bug,也許是 windows 系統的問題,記得發行套件加入 MSVCP71.dll http://www.dll-files.com/dllindex/dll-files.shtml?msvcp71

NSIS
http://nsis.sourceforge.net/ ,可以用來作安裝包,好用



Move to Blogger from WordPress

WordPress 功能非常的強大,不過 bug 很多,修正非常的多,如果沒有把安全顧好的話,機器很容易被破臺,家裏的 ADSL 穩定性也不佳,所以還是耐不住,由原本 WordPress 的平台搬到 Blogger 上來,不需自己再維護自己的部落格,至於自己開發,維護,是另一個工程,,所以打消念頭,最重要的一點,節省了自己的頻寬,無奈,在台灣,什麼時候,才有正常的上傳下載的頻寬

移上來後,順便感受一下,Blogger 世界級開發人員提供的服務,反正所有的資料都可以用 Google Data API 來寫入,或是讀出,以後要備份,要搬家,都不是問題,只要 Blogger 繼續是這樣的服務,與胸襟,為什麼不支持他,不過,程式寫入,目前一天只限 50 篇,搬移過程,讀者的留言,沒搬到,也沒有對應原本的連結,對不起了,網友們

2007-08-26

jQuery 1.1.4 Out

耶,新版的 jQuery 出來了,算是一個修正的版本,效能有不少的提昇,找時間,來升級測試一下

連結: http://jquery.com/blog/2007/08/24/jquery-114-faster-more-tests-ready-for-12/

鄉民們,衝壓

.. -*- mode: rst -*-

2007-08-10

做網站真的很簡單嗎

現在做一個網站好像是小學生做的事情一樣,好像一點難度也沒有,聽一聽鄰居大嬸說,我們家小朋友,國小四年級就會做了,真的這麼簡單嗎,為什麼一大堆的網頁不符合標準,一大堆網站用 Firefox 看起來就是怪怪的

技術高深不可測,學歷比天還高的專家,或是某公司會說,耗資多少,做出 WEB X.0 的網站,但是,我要說的是,做網站,很簡單,要做好,又優美的很難,至少以我自己龜毛的個性來看

我想大聲說

可不可以 URL 的連結盡量有意義的,不要超過像是 512 的字,裡面不要有中文字,如果真的要有,能不能先轉好碼,以下有一個血淋淋的範例,各位就知道我在說什麼了,對不起,我知道這樣很傷眼睛,如下

http://xxx.xxx.xxx.tw/object/detail.php?city=台北市&objectid=10111831780&storeid=A0111&pagekind=1&city_2=&code_2=&way=&oneself=&park=&life=&keyword=&line=&station=&station_2=&tablename=&school=&road=&city=台北市&code=&kind=&type=&type_2=&layout=-1&layout_2=no&price=0&price_2=upward&ping=0&ping_2=no&way=&notindex=1&pagekind=1&direction_check=&direction=&control_check=&control=&stall_check=&stall=&mrt_check=&school_check=&park_check=&life_check=&today=&orderby=order%20by%20movie%20desc,%A5Z%B5n%B0%E2%BB%F9%20asc

還有重複的變數,真是夠了,不然就是,URL 裡面還有空白,或是斷行的,看了,差點眼淚掉下來

還有一件事很想說,很多的網站花了很多的技術,效能和時間,在收集,或是保護資料,讓您要一直停在網站上,找不到資料,然後看了一大堆廣告,或是動不動就要您註冊成會員,註冊成會員以後,所有的產出,責任都是會員的,所有的產出收益都是網站的,感覺有點邪惡 ......

.. -*- mode: rst -*-

2007-07-05

Django Unicode Merge

等很久的 Unicode branch 終於 merge 到 trunk 了,我可是流口水很久了,之前 Oracle branch 也 merge 了

HowTo

http://code.djangoproject.com/wiki/UnicodeBranch

2007-06-04

ORM and SQL

在有 Database 的應用裡,寫多了 SQL(Structure Query Language) 會覺得他是一種累贅,讓你的邏輯不斷的,在程式語言,及 SQL 之間轉換,所以後來,就有了,很流行的 Database ORM (Object Relational Mapper) 來幫助我們開發,一來,可以用相同的邏輯思考方式,用物件的方式,去對應資料庫的元件,一來,可以有資料庫的抽象層,對一個系統的開發有很大的助益,但是,如果,要寫的 code ,比一般的 SQL 還要複雜,還要隴長,你該怎麼作呢?

寫回去 SQL 嗎?還是就去適應這樣的物件對應方式?

這也許沒有一定的答案,不過,我來分享一下,我用 **Django ORM** 到目前所遇到的問題,和解決的方法,所以,裡面有一些是個人好惡的選擇

* 現在Unicode 的branch 還沒有 merge 到 truck 裡,如果用 wxPython unicode 的版本,自己要處理,string to unicode 及 unicode to string 的問題

* ManytoManyField 的欄位,Q object OR 沒有辦法套用,在 djangosnippets 有解決辦法,連結是 http://www.djangosnippets.org/tags/m2m/ 不過還是希望有官方的

* 目前如果是用 truk 的 Django, 用 groupu_by() 只能在對應該物件的 database table 裡分 group,無法使用別的欄位作 group_by 的條件,在別的 branch 有解決了,可是基於,愛乾淨不要混用,太多 branch 的原則,我是用 extra 的解法,算是走 SQL 的回頭路,不過, "GROUP BY" 在 SQL 也是標準的語法,不至於破壞了資料庫的抽象層,不過,如果有用 GROUP BY 的話,不可以混用 filter 的功能,不然,產生的 SQL 語法不對,我們要決定所有的 where 條件,第一個例子,是有 where 的 group by,第二個,是沒有 whehe 可是要強加 grouop by 在不同欄位,這樣就還可以在 DB 上只用一個 query,在 Django 上還是傳回 QuerySet 的作法,不過,這一個 QuerySet 不可以再用 filter 的方式,因為這樣會讓 group by 及 where 的位置錯了

範例1::

qset = Stock.objects.extra(select={'totalsum':'sum(volume)'},where=["customer_id='%s' group by product_id" %(customerid)])


範例2::

qset = Stock.objects.extra(select={'totalsum':'sum(volume)'},where=["1 group by product_id"])

以上,是目前,我遇到的一些限制,及解決辦法,也許對您有參考的價值,在 Desktop 的應用程式上, 如果,還有更複雜的的需求, SQLAlchemy 應該是不錯的選擇

.. -*- mode: rst -*-

2007-05-18

mozex with web application

想起以前用 Zope 及 Plone 的美好時光,文件是使用 ExternalEditor_ 編輯的, 對編輯器有固執堅持的人,很難接受在網頁上的一個 TEXTAREA,秉持著,細心,耐心,安於現狀的原則,乖乖的敲打文件內容,可是Web AP 沒有像 Zope 或是 Plone 一樣整合 ExternalEditor 怎麼辦?

哈哈,答案來了,請愛用 FireFox,裝個套件吧!

Mozex http://mozex.mozdev.org/

看是要 VIM 還是 EMACS 還是有人覺得電腦效能太強,一定想開個 WORD,當然,我們這窮苦人家的小孩,是買不起 Word 這一種軟體的,總之要用什麼就用什麼

.. _ExternalEditor: http://plope.com/software/ExternalEditor

.. -*- mode: rst -*-

2007-04-27

你不可不知的匯率

你長期都是盯著美元匯率看嗎?

要吃大虧了,我想全台灣都應該改使用歐元了,在過去的三個月裡,台幣相對歐元已經貶值 15%了,不算利息上的差異,這代表,過去三個月,歐洲人除了,本來就賺的比我們多外,他們再加薪 16% 左右,你能三個月加薪 16%嗎? 新台幣可以收起來了,再一次見視到錯誤的政策比貪污嚴重的可怕,照這種速度,新台幣相對歐元很快就變成壁紙了,而且相對其他的外幣也沒好到哪去,澳幣,紐幣都一樣

為什麼新台幣這麼弱勢呢?

* 政府刻意的政策,寬鬆資金,要刺激民間投資,可以藉此降低企業負擔

* 要刺激經濟成長,達成拼經濟的口號

* 要刺激房地產,炒地皮,商人才有錢賺

* 政府的財政惡化,所以大家都不要新台幣

* 有錢人拼了老命,把錢送到國外投資

什麼是有改善空間的

* 民間的投資意願低落,主要不是因為利率原因,而是朝野惡鬥,經濟政策舉棋不定

* 有通膨隱憂,可是政府視而不見

* 以為利用龐大的公共建設可以解決一切問題,財政日漸惡化

* 平均所得無法往上成長,內需無力

以上是對經濟很無知的我,發的牢騷,感謝收看

查詢外匯走勢 http://rate.bot.com.tw/Pages/UIP004/UIP004INQ1.aspx?lang=zh-TW

.. -*- mode: rst -*-

Choosing Framework

每個人做出選擇都有許多的原因,我來說說我的。

話說去年秋末的時候,手上用 TurboGears 寫的東西,就快完成了,在一個天氣不錯的週末,趕著回家,notebook 掉了,泣,裡面,裝著我三四個月的努力,最後,當然是沒有像電視報導那樣,被善心人士撿到送到警察局,所以證件重辦,電腦重買,系統重寫,要重寫的時候,TurboGears 轉變的非常快,SQLObject 到 SQLAlchemy,範本系統則是 Kid 到 Genshi,而且開發進行的飛快,API 也不確定,所以那時候就選了 Django 來重寫,沒錯,我選的原因是,notebook 掉了,當時沒有時間等 API 穩定了

這一個真實的例子,告訴我們 Version Control 的重要,就算是只有一個人在寫也不例外

最令人高興的事,這兩個專案,都一直有進步

參考資料

http://www.turbogears.org/ TurboGears

http://www.djangoproject.com/ Django

.. -*- mode: rst -*-

2007-04-26

Django POP3Backend

最近作一個公司內部簡單的應用,希望不要讓使用者再去記憶更多密碼,所以 POP3Backend 於是誕生,可以直接用公司的 POP3 Server 來作認證,會先試試 POP SSL 來連,不行才用一般的 POP 連結,真的是很短啦,有一點陽春,用了一個需外裝的 python dns 模組,來查網域的 MX 資料,還有很大的改善空間,不過還是可用啦,一樣,版權沒有,自己取用,責任自負

雖然也很想用 LDAP,不過,內部系統雜亂的歷史包袱,還一時改變不了,還是先撐一下吧,說到認證,不免要抱怨一下,什麼時候,台灣才有正式的非商業,OpenID service provider 壓

連結在這 http://www.djangosnippets.org/snippets/203/

參考資料

http://www.carthage.edu/webdev/?p=12 ,LDAP Authentication in Django with Backends
http://www.djangoproject.com/documentation/authentication/ ,User authentication in Django

.. -*- mode: rst -*-

2007-04-20

80對800的戰爭

對政府的拼經濟的方向,真的非常憂心,拼出了,十年勞工,基本工資不變,大學畢業生,起薪比十年前差,先不管是不是部份媒體刻意在唱哀,台北的房價確創下歷史新高,經濟沒拼成,倒把房價拼上去了,說政府,還有民代是最大的炒手,一點也不為過吧,像是,最近的樂生事件,帶著民眾去抗議的民代,個個的都說是為了捷運線居民的福祉,但是又有哪一個沒有建商色彩呢,沿著捷運線的新建案,又有誰沒有關係呢?大家都是幕後的金主吧,如果,這麼多的國有地都要釋出給建商蓋豪宅的話,那直接政府發包,自建自售好了

http://www.businessweekly.com.tw/webarticle.php?id=22163

這是一篇商業週刊的文章,值得一讀,台灣的教育,及未來,教育經費,幾乎全用在人事支出,尤其是最後所說得,

苦不能苦孩子 ,窮不能窮教育

若無法讓教育的歸教育,福利的歸福利,台灣教育經費背後失衡的情況繼續下去,未來我們孩子究竟會成為跨國菁英,還是國際台勞?令人不敢想像。

.. -*- mode: rst -*-

2007-04-06

MySQL backend 編碼解決

果然,自己又當了一次小白,我錯怪了 Django

原來是自己修改了 mysql backend 的 base.py 才會造成怪怪的編碼問題,精神不好的時候,還是,看看資料,想想計畫,不要寫太多東西

.. -*- mode: rst -*-

2007-03-29

Django and MySQL

最近在做的東西,是用 MySQL (懶,已經有 MySQL了,不想再裝 PostgreSQL 了),在資料庫上預設用 UTF8 編碼,在 Django 上,如果 DATABASE_ENGINE = 'mysql',第一個 connection 都會下, SET NAMES utf8; 然後,之後的 Query 都會自己加 SET NAMES latin1; 大多時候,是正常,不過,有時是亂碼,奇怪就在,我把這一個有問題的結果,print 出來除錯時,螢幕是亂碼,可是在網頁上又可以變正常,真想掉眼淚

這種情形,一開始用 Sqlite 開發的時候,也沒有,所以開發環境,還是跟實際一模一樣比較好

真是很怪的情形,令我頭痛好幾個晚上,有點像是靈異現象了

不過還好試一下舊的mysql engine ,還可以用,而且不會有這種怪情形,他只有會在connection 時下, SET NAMES utf8; 之後的 Query 不會加 SET NAMES latin1

暫時用這一個好了,設定 settings.py 裡改成 DATABASE_ENGINE = 'mysql_old'

作業環境,Debian_etch,python2.4.4,python-mysqldb-1.2.1-p2-4,mysql-server-5.0.32,Django svn 4866

.. -*- mode: rst -*-