明年要做的事情大致上定下來了
- 2010/01/15 前結束掉手上所有的案子,準備寫一本 Drupal 版型開發的書
- 開始嘗試做 Drupal 相關的教學,跟幾個朋友詢問了一下行情,我應該會開價 NT$1,000 / hr
- 多參加各種社群活動、多認識人
明年要做的事情大致上定下來了
上個禮拜幫客戶的 Drupal 網站做升級,一切狀況良好,不過這兩天客戶說,訪客發表的回應無法顯示。
剛剛回到家後做了幾個測試,發現狀況很有趣:的確如客戶所說,訪客發表的回應在文章中無法顯示,但是最新回應區塊卻有顯示。
本來以為是文章權限的問題,檢查了半天,也重設權限了,問題還是一直存在。
為了確認回應是否有寫入,我到管理回應的列表中看了一下,發現管理回應的列表也沒有列出訪客發表的回應。
這是怎麼回事呢?我想一定是最新回應區塊篩出的條件不一樣~
因此我用主機商提供的 phpMyAdmin 介面去看一下 comments 表,發現資料有寫進去,所以一定是因為某個緣故忽略掉訪客發表的回應。
後來我想到了,上次做系統升級時,我順手把 users 裡面 uid 為 0 的那筆資料刪掉了(因為我一直覺得那筆資料沒啥用),或許是這個原因吧~
憑著直覺,我新增了一個 uid 為 0 的使用者,問題就解決了~
話說自從 VirtualBox 3.0 正式 Release 以來,我就把目前手上管理的一個網站移到這上面來作穩定性測試。
歷經數個版本的升級,目前可以說說一些心得。
如果你期待跑了 VirtualBox 以後可以過著幸福快樂的生活,我會覺得那是想太多了~
目前我在 Windows 7 下跑了那麼久的 VirtualBox ,只有 3.0.6 這個版本堪稱穩定,其他的三天兩頭就會引起 OS Crash。
年底我打算買一台 1 L 以下的比較省電小機器來獨立跑看看~
昨天跟客戶定期 meeting,有談到目前一個案子的畫面上的小調整。
由於要修改到 CSS 檔案,所以我把虛擬主機上的整個目錄打包複製下來、資料庫用 phpMyAdmin 匯出,配合空的 PAPM 重建後,卻發現每次進入首頁卻變成下載畫面。
嘗試了幾個方式都還是一樣,最後終於讓我重建成功。
底下是重建筆記(這個方式只適用同樣主版本的 Drupal 上,並且你沒有對原始 Drupal 的檔案做過太大幅度的修改):
這樣應該就重建完成,如果有要修改的 Drupal 檔案,記得改回去~
起源是我想要做一個像討論區板塊的 View,會顯示最上層的討論區,並在每個討論區下面列出該討論區的討論板。
方法很簡單,需要兩個模組:
安裝好了之後,要先設定被插入的 View
然後在另外一個 View 的欄位中新增一個 Customfield: PHP code
內容是
<?php
echo views_embed_view('View 的名稱', 'default', 要傳入的參數列...);
?>
這樣就行了~
雖然我是專業的 SOHO,有案子做當然是多多益善。
不過今天去幫朋友弄電腦(當志工)時,跟朋友聊到我最近推掉了兩個案子,他覺得很驚訝。
我個人接案有一個原則:同一時間我只做一個案子。
有些前輩他們可以同時做好幾個案子,不過我沒辦法,因為我很容易分心,所以不管是什麼事,我一次只能做一件事。
PHP 5.3 Release 出來已經有一段時間了,不過我一直沒有去升級,原因之一是 XCache 沒跟上。
現在 XCache 1.3rc1 已經可以對應 PHP 5.3 了,連 XDebug 2.0.5 也跟上了,所以我也沒啥藉口~
之前在測試時,phpMyAdmin 一直有問題,後來我找到原因了,是因為 phpMyAdmin 的某一行設定的緣故。
在 config.inc.php 裡面,找一下 $cfg['Servers'][$i]['compress'] 這行,他必須設為 $cfg['Servers'][$i]['compress'] = false; 才行。
底下是我包好的 Portable APM,有興趣的人請自取~
追記:目前 Drupal 6.13 跟 PHP 5.3 不相容~看來我還是會堅守 PHP 5.2 一陣子~
消息來源在這裡。
雖然 MS 的 Virtual PC 也很好,不過我個人還是鍾愛 Virtual Box。
只是不知道能不能玩支援 DirectX 的遊戲,期待中~
追記:2009.06.30 Virtual Box 3.0 Release
經過多次實驗證明,在實際燒錄時,會受到燒錄軟體與光碟片(可能還有燒錄器及驅動程式等)因素影響成功率。
由於 Windows 7 目前缺乏廠商晶片組驅動程式的支援(我之前安裝時沒仔細看,其實根本沒裝,因為目前 AMD 只有顯卡的驅動程式有支援 Windows 7),所以只能說燒錄成功那幾次是機率問題。
我的電腦環境有點複雜,先說明清楚比較好:
因此考慮的因素比較多,如果用 IDE 介面的光碟機的話,應該成功率會提高。
過程就不多說了,本來以為 Try 出安裝檔跟 vLite 後在 VirtualBox 上會過,燒成光碟安裝時應該也會過,看來我真是太天真了。
結論是:
相關的設定檔在這裡。這篇文章是以 Windows 7 RC 64 Bits 版為例,設定檔中也是以此為準。
解開來有三個檔,其中 Autounattend.xml 是在最後要燒錄 ISO 前要覆蓋 vLite 產生的檔案用的,另外兩個則是 vLite 用的設定檔。
底下是在 32 bits XP / XP Mode 下來進行,因為 vLite 在 64 Bits 的 Windows 7 底下跑的很慢,在最終的套用設定時常出問題而無法完成。
如果使用 vLite 來產生 ISO 檔,會因為 boot loader 不同而無法安裝 (雖然在 VirtualBox 中可以安裝,但實際燒成光碟來安裝時還是有一定機率無法安裝),vLite 用來整合 Windows 7 RC 目前還有蠻多問題的。
實際上,不使用 vLite,直接將原版光碟的內容複製到某個目錄下,再加上 Autounattend.xml 並安裝 WAIK 直接跳到上述的第六步來產生的 ISO 其實是比較穩定的。
有興趣的人可以研究一下 WAIK,不過個人是認為自從 Vista 以來,Windows 模組化的程度越來越高,已經不像 XP 時代時用 nLite 來縮減容量並自訂來的有意義。
這裡提供的設定檔並沒有刪除任何功能,只是預設將其禁用而已,有需要的人可以自行開啟。
剛剛把 Windows 7 RC 安裝起來玩一玩,第一個印象就是,安裝的時候一口氣裝完,不像 XP 安裝時要重開機兩三次。
再來是驅動程式都不用另外安裝(除了 VIA 的音效驅動程式,這東西在安裝時還要騙安裝程式是在 Vista )。
然後是對 XP 32 位元程式的相容性做的不錯,至少我跑的幾個程式包括防毒軟體都可以跑(我是裝 64 位元版的 Windows 7 )。
這讓我想到前幾天在研究用隨身碟安裝 XP 時的窘境,真是研究辛酸的~
傳說中的 XP Mode 還沒試,不過已經先把下載點找出來了。
下面是 Windows Server 2008 RC 的下載點:
P.S. 雖然驅動程式都有抓到,但還是建議自己去各硬體廠商的下載區找來裝,效能有差~
昨天買了點零組件,把電腦做了點小升級。
過程中相當愉快,也要感謝店家的工程師,幫我把散熱器裝上去~
這是我第一次買散熱器,原以為安裝跟 CPU 的盒裝散熱器差不多,沒想到是必須把底板拆掉,整個主機板翻過來才能完成散熱器的安裝。
這次升級在省電、效能、安靜幾個要素中求取平衡,唯一不能平衡的是我的錢包。
本來我屬意購買 ASUS 的 M3N78-EM,不過到處打聽都沒賣,只好買了 M4N78T-E。
整體說來還好,不過 eSATA 反而是在 IDE 模式下才能抓到,跟之前的經驗有所不同,等過幾天 Windows 7 RC 開放下載時再測看看。
另外我也購買了 VANTEC 的外接硬碟座,這次買得是可以插兩顆硬碟的機種,沒辦法,我的硬碟實在太多了,2 TB 的硬碟還是買不下手。
這次買的機種,可以支援 HotSwap 的 Spindown 功能,果然是一分錢一分貨~
我一直認為,中文化是推廣軟體系統最重要的一步。
Drupal 是我非常喜歡的一套開源內容管理系統,最近因為自己出來作 SOHO 接案子的關係,時間比以前在公司上班時充裕許多,所以我可以一邊作案子,一邊作 Drupal 模組的翻譯。
最近我把相關作翻譯的模組包在一起,並在 Drupal Taiwan 那邊發了文章,希望能推廣翻譯工作。
底下是文章內容轉載(要下載請連過去,我不想兩邊維護):
我用 Drupal with Portable APM for Windows 為基礎,加上以下模組:
包在一起,作成一個翻譯 Drupal 模組用的工具包,希望可以降低翻譯者的門檻。
Localization client 是用它重新匯入翻譯套件的功能,讓翻譯好的模組的 PO 檔可以重新匯入 Drupal 中,看到翻譯的結果。
Translation template extractor 是用它抽取出每個模組的翻譯樣板 POT 檔。
Administration menu 跟 Poormanscron 只是協助一般的操作。
Windows 下翻譯用的工具建議是用 poEdit ,它可以從 POT 檔來轉換成 PO 檔,協助翻譯工作。
線上工具我推薦底下這幾個:
翻譯工作我個人有兩個原則:
這個 l10n 包的更新並不會像 Drupal with Portable APM for Windows 那麼快,不過它還是有幾個階段的目的:
第一階段:推廣模組與版型的翻譯。(對,你沒看錯,版型也是可以翻譯的,請看 Acquia Marina 版型正體中文翻譯檔)
第二階段:加入 Localization Server 的建置與翻譯。
第三階段:加入 OG、CCK、Views、Panels、 Internationalization 這幾個大模組的翻譯。
話說上個月我買了一個 eSATA / USB 雙介面的硬碟座,用起來是蠻快樂的,不過有個小問題,那就是 eSATA 裝置無法卸除。
(註:BIOS 中 SATA 必須設成 ACHI 模式,可以先用 IDE 模式,然後找 RAID / ACHI 的驅動程式裝完後,再進入 BIOS 設成 ACHI 模式)
後來聽說是晶片組的關係,我的板子是用 ATI 的晶片組,驅動程式不支援。
最近聽說 ASUS 出了 NVIDIA 980a SLI 的板子,是有點想敗下去,不過根據某主機板大廠工作的朋友講,NVIDIA 晶片的問題也不少,建議我再考慮。
後來我想說想測看看 NVIDIA 的板子是否真的可以卸除 eSATA 的裝置,於是今天我到了另外一位有人的家中借他的板子作測試,結果的確是可以。
不過我的這位友人很親切的告訴了我一個小程式:HotSwap
這個程式可以用來移除 eSATA 的裝置,我用了之後果然不錯,蠻符合我的需求,而且 ATI 晶片的板子也可以用。
唯一美中不足的部份是 Spindown 功能沒有作用~
不過因為 Spindown 沒作用,所以裝置卸除後,關掉硬碟座的電源後,不可以立刻把硬碟拔起來,要等大約10秒鐘,等讀寫頭自動歸位後再拔比較安全。
今天心血來潮,想來換一換部落格的佈景主題,不過選來選去,每個佈景主題對於文章中內文的列表樣式都是 none。
另外就是固定寬度的問題,這對有寬螢幕的人實在是一種折磨,其他還有一些小問題...
這實在是很糟糕,所以手動改了改,在 部落格 » 樣式管理 » 樣式設計精靈 » CSS 原始碼編輯 加上以下的樣式即可:
/* 列表樣式 */
.article-content ol, .article-content ul {margin:1em; list-style-position:inside;}
.article-content ol {list-style-type:decimal;}
.article-content ul {list-style-type:disc;}
/* 所有文章列表 */
.box-more {display:inline;}
/* 分頁 */
.page {text-align:center;}
/* 比例寬度 */
#container2 {width:95%;}
#content {width:75%;}
#links {width:20%;}
在 Drupal 裡面有許多的所見即所得編輯器,比如說: TinyMCE 和 FCKEditor 是兩個比較為大家熟知的。
不過在設定上,有些只允許本文輸入的狀況,常常需要為不同的 class 或是 path 設定例外條件,以免把所有的 TEXTAREA 都變成所見即所得的編輯畫面。
而 WYSIWYG API 就比較聰明,它可以根據輸入格式(Input Format )來設定不同的編輯器,這樣就無須設定例外條件了。
WYSIWYG API 也支援各種不同的所見即所得編輯器,包括:
這些編輯器支援的功能不一,使用者可依需要來選擇使用。
接下來我來說說這些編輯器的的一些問題:
TinyMCE 3 的 Flash 按鈕解法: TinyMCE 3 沒有 Flash 按鈕的 Plugin,要改成 Media 按鈕的 Plugin,所以需要修改相關的程式。
找到 [模組目錄]/wysisyg/editors/tinymce.inc 中的 wysiwyg_tinymce_plugins 函式。
註解掉以下幾行:
'flash' => array(
'path' => $editor['library path'] .'/plugins/flash',
'buttons' => array('flash' => t('Flash')),
'extended_valid_elements' => array('img[class|src|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name|obj|param|embed]'),
'url' => 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/flash',
'internal' => TRUE,
'load' => TRUE,
),
將函數最後的:
if ($editor['installed version'] > 3) {
$plugins['xhtmlxtras'] = array(
'path' => $editor['library path'] .'/plugins/xhtmlxtras',
'buttons' => array('cite' => t('Citation'), 'del' => t('Deleted'), 'abbr' => t('Abbreviation'), 'acronym' => t('Acronym'), 'ins' => t('Inserted')),
'url' => 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',
'internal' => TRUE,
'load' => TRUE,
);
$plugins['safari'] = array(
'path' => $editor['library path'] .'/plugins/safari',
'extensions' => array('safari' => t('Safari compatibility')),
'url' => 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',
'internal' => TRUE,
'load' => TRUE,
);
}
換成:
if ($editor['installed version'] > 3) {
$plugins['xhtmlxtras'] = array(
'path' => $editor['library path'] .'/plugins/xhtmlxtras',
'buttons' => array('cite' => t('Citation'), 'del' => t('Deleted'), 'abbr' => t('Abbreviation'), 'acronym' => t('Acronym'), 'ins' => t('Inserted')),
'url' => 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',
'internal' => TRUE,
'load' => TRUE,
);
$plugins['safari'] = array(
'path' => $editor['library path'] .'/plugins/safari',
'extensions' => array('safari' => t('Safari compatibility')),
'url' => 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',
'internal' => TRUE,
'load' => TRUE,
);
$plugins['media'] = array(
'path' => $editor['library path'] .'/plugins/media',
'buttons' => array('media' => t('Insert media')),
'url' => 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',
'internal' => TRUE,
'load' => TRUE,
);
} else {
$plugins['flash'] = array(
'path' => $editor['library path'] .'/plugins/flash',
'buttons' => array('flash' => t('Flash')),
'extended_valid_elements' => array('img[class|src|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name|obj|param|embed]'),
'url' => 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/flash',
'internal' => TRUE,
'load' => TRUE,
);
}
即可。
底下是我用來升級新版的 CakePHP 的作法:
原文在此 http://www.jaceju.net/blog/?p=375
剛好我去年曾經實做過 DB Layer,對於抽象我有自己的看法。
首先相對於抽象,在編程上就是實做,換言之,抽象是訂定實做規格前必要的手段。
再來是抽象到底抽掉了什麼象?經驗告訴我,抽象是把介面從細節的「現象」抽出來。
用工程的角度來說,抽象是標準化的手法,它可以讓我們更快的瞭解一個系統。
不過抽象也有盲點,因為他抽掉了細節上的現象,所以在實做的時候,必須把細節補回去。
一來一往這就構造了一個系統。