戰利品
難得給自已排了一段時間出去玩,這趟去英國溜躂,音樂劇Les Miserables是心靈上最值回票價的體驗,當然物質上的一些戰利品也是不可少的啊(其實根本就是去買玩具的吧) (閱讀全文)
難得給自已排了一段時間出去玩,這趟去英國溜躂,音樂劇Les Miserables是心靈上最值回票價的體驗,當然物質上的一些戰利品也是不可少的啊(其實根本就是去買玩具的吧) (閱讀全文)
Oops! 發現最後一篇blog竟然已經是去年的事了!! 是時間過太快還是我太懶了?
最近因為幾個案子在趕著要上線,不久前的OSDC.tw沒辦法全程參加,只好挑自已喜歡的Session參加(ericsk的GAEO比我想像中的還好用)
以前某個我不喜歡的老闆曾跟我說過,做presentation就像表演一樣
近來我自告奮勇的找了一些對flash有興趣的朋友們每週來聚會,每次約2小時,我教大家怎麼來學 ActionScript3.0。沒另外收費(只需各自分擔場地費,我還太嫩,還不到那種敢收學費的等級)
常聽到「這個東西我懂,我只是不會講而已」,但我一直相信,真的懂的人一定是講得出來的;不會講不代表真的不會,只是還沒能完全透徹,某個環節沒學好,講不出來
在台上講話實在是件不容易的事,一來得先克服緊張感,二來得讓自已的腦袋保持清醒。
當然我也沒這麼佛心,開這樣的課當然是有目的:
1. 透過在台上講課,讓自已對AS3更熟悉
2. 訓練自已講話的技巧,練習怎麼掌握台下的反應(可能講太快或一下子講太難)
3. 透過每週準備課程,讓自已不會跟AS3離太遠
越是複雜的技術,要做這種大眾化的教學困難度也越高,像是知名的flash totur Lee Brimelow 用影音的方式來教學,清楚又易懂
最近在路邊牆上貼的一段話:「有困難是能力不夠,有麻煩是方法不對」看來,這條路還相當漫長 :)
Doctrine是一個在PHP上的資料庫ORM(Object Relational Mapper),最近手邊的幾個小案子透過Doctrine來實作。ORM的確是讓開發者少寫不少的SQL查詢,但相對的效能一定是比簡單的SQL要來得差,我想魚跟熊掌要兼得並不容易,便利跟效能之間總有個天平讓開發者來自已調整,所以ORM好不好用就見人見志囉。 (閱讀全文)
Flash在跟Server在交換資料,比較常見的是一般的文字訊息或是XML,我自己在趕時間的時候,會偷懶的隨便echo一個字出來知會flash說server程式已經做完了或是程式執行之後的結果,不趕時間且資料量較多的時候,則會乖乖的用XML。不過,最近開始我比較常用的是AMF跟JSON這兩個方法,其實都還滿方便的,各有其優缺點。
雖然我個人還是比較喜歡jQuery的簡潔方便,而且一些常用的function也都jQuery化了,不過畢竟Dojo從Zend Framework 1.6版後就被officially的收進去了,為了ZF寫起來的完整性,還是花點時間來研究一下。
廢話不多說,先來試玩一下! (閱讀全文)
自從開始改用ZF後,開始慢慢的調整自己的code style,過程也許會痛苦,但相信結果應該會是甜美的。在ZF的Coding Standard裡有一段是這麼寫的:
For files that contain only PHP code, the closing tag ("?>") is never permitted. It is not required by PHP, and omitting it prevents the accidental injection of trailing whitespace into the response.
看不太懂哪來的injection,後來再翻了一下PHP的官方資料才發現也有提到這段:
The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include() or require(), so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files.
後來自己動手做了一下實驗:
檔名:inc.php
<?php
// do something
?>
檔名:test.php
<?php
require_once('inc.php');
session_start();
?>
執行test.php,看起來是沒什麼大問題;不過如果在inc.php的"?>"後面再按幾下enter,多加幾行空白行,test.php就會丟出警告訊息"Cannot send session cookie - headers already sent by...",如果把inc.php的"?>"拿掉就ok了。
原來,在"?>"之後多按的幾個enter(newline)也會被當成資料丟給瀏覽器,所以如果include了這樣的檔案進來,會讓header()或session_start()之類的指令丟出"headers already sent by..."的警告訊息,而如果省去結尾的"?>"則可以避免這個問題。
果然魔鬼都是還是躲在細節裡,PHP的手冊還是要多看啊! ![]()
順帶一提,ZF有PDF版的離線手冊了,一千多頁,雖然不見得有比線上方便,但沒網路的時候倒還不錯用(我是把它放到PDA裡,上廁所可以看)
看到django、rails之類的framework都有可以快速的產生scaffold的工具,甚至連同樣都是php framework的cakephp也有...還好我之前都是在Zend Studio裡直接new一個Zend Framework Project,它也會自動產生基本的架構出來。隨著Zend Framework 1.6版的上市,它也提供了類似的方便工具(不過從目錄名字看起來還是在實驗階段而已..) (閱讀全文)
之前用了一陣子的RC版,今天終於正式Release了,這個1.6版的ZF比1.5版多了不少有趣的東西啊(不過選在跟新聞炒很大的google chrome同一天出來,鋒頭多少被蓋去了一點點)
‧Dojo Integration
‧SOAP
‧Preview of Tooling Project in Laboratory (see /laboratory folder)
‧Unit Testing Harness for Controllers
‧Lucene 2.3 Index File Format Support
‧Zend_Session save handler for Database Tables
‧Paginator Component
‧Text/Figlet Support
‧ReCaptcha Service
‧Captcha Form Element
‧Zend_Config_Xml Attribute Support
‧Zend_File_Transfer Component
‧File Upload Form Element
‧Zend_Wildfire Component with FireBug Log Writer
‧Media View Helpers (Flash, Quicktime, Object, and Page)
‧Support in Zend_Translate for INI File Format
對我工作上比較大的影響是跟Dojo的整合(我還是比較喜歡jQuery),這裡有篇文章有寫到1.6版新增的一些功能介紹
另外,分頁、表單認證碼及檔案上傳功能....這些在做網站時常用的功能,之前都是自己拼裝出來用的,結果在1.6也都加進來了
。我試著直接把1.5版昇級為1.6版,目前手邊的案子看起來都還滿正常的。
在IE6的環境下,如果網頁上有div區塊和下拉選單重疊在一起的時候,即使再怎麼調整下拉選單的z-index,下拉選單還是會把div區塊蓋住(在Firefox是正常的),google了一下網路上的資料,大多是用iframe來解這個問題,但弄iframe寫起來也是花時間而且不順手。有善心人士把這段程式碼寫成jQuery的plugin:bgiframe,只要簡單的呼叫plugin,就可以在div底下插入一段可以把下拉選單遮住的iframe,div區塊就可以正常顯示了。
程式碼很簡單,直接看線上demo就知道了;有需要的也可以整包下載回去![]()
線上demo:http://labs.eddie.com.tw/javascript/div.htm
整包下載:http://labs.eddie.com.tw/javascript/div.rar
最近拿Python在做練習,這真是個有趣的語言,我發現Python對程式碼一定要縮排,不然會出錯的這個特性,對於我這種有程式碼潔癖的人真的是利多。在網路上看到一個個有趣的漫畫,主要是在說python的簡單&易學易用,想要飛起來,只要import別人寫好的反重力模組就行了。
(如果我想變聰明,可以import iq180嗎?)

最近用到Subversion來做版本控制,但常常commit完之後還得再把資料複製一份到www資料夾,實在不方便。查了一下資料發現,原來svn有一些hook可以用,例如可以在commit之前或之後做某些事情,這樣就可以讓開發人員commit之後,直接在web上就看到成果。
‧SVN Server環境是FreeBSD 6.3
‧repository放的位置:/home/svn/repository
‧專案名稱:test
‧web資料夾:/www/test
在每個repository底下都有個hooks資料夾,裡面有好幾個寫好的template,光看名字大概就知道他們是要做什麼事的。這邊我只拿post-commit來用(其它的可參考Subversion Book)。
# cp post-commit.tmpl post-commit
# vi post-commit
我在裡面加了幾行update的語法:
#!/bin/sh
export LANG=zh_TW.UTF-8
/usr/local/bin/svn update --username myid --password mypw /www/test
加入第一行是因為有些非英文檔名的檔案在update的時候可能會出錯
其中myid跟mypw請代入自己的svn帳號密碼
另外,記得chmod +x,讓它變成可執行
最後,在web資料夾checkout一下test專案,大致上應該就可以運轉了。
你想當大明星嗎? 嗯,我想 :)
這案子在當初頁面設計尚未底定,且工作時間有限的情況下,我把這案子用Smarty,搭配MVC(Model-View-Controller)的架構來製作;另外再搭配上Subversion的版本控制功能,讓設計人員可以commit他們的template,工程師可以commit他們的程式碼,讓彼此修改頁面而不小心動到程式碼的影響降到最小,在萬一真的不小心改壞了,還可以回朔之前的版本,真的很方便。
這案子另外還有需要跟金流廠商串接的部份(線上刷卡、便利商店代收及網路ATM功能),忍不住想抱怨一下,有的金流廠商的API很方便(例如綠界),串接起來很輕鬆;但有的廠商的API,看了一下程式碼實在很老舊,明明就有switch的語法可以用,但還用一堆的if...else...來寫,看了實在火大,又還規定一定要用Big5編碼。(我這人有程式碼潔癖,所以看不下去最後就自己動手改寫了....)
我也跑去湊熱鬧了,不過應該是我資質不好,有幾個場次其實聽不太懂,睡得還滿舒服的!
官方的場記照片出來了,我被拍到好幾張入鏡,不是醜臉就是看起來痴肥...
網址:picasaweb相本
經過了許久個日子的努力,終於讓全國加油站上線了,這次,用的也是ZF(Zend Framework)來實作的。
上次的HI-CHEW開心堂實作算是第一個試作品,新手上路,所以架構是仿照Rob Allen的"Getting Started with Zend Framework"這篇文章來佈署的,但上回實作的過程中總覺得有些不方便的地方,所以這次全國加油站網站在實作的MVC佈署架構,就上次實作的HI-CHEW更模組化一些,期望下次再建構網站時可以有更多的模組能在最小修改(或是不用修改)的情況下再重複使用。
心得:果然,還是直接實作比看一堆文件還學得快,也記得比較牢 :)