Make your MacBookPro Cooler

根據前一篇 Make your MacBook Cooler 提到的軟體 smcFanControl2 以及 CoolBook,這次拿了一台 Macbook Pro 來實測。這台 MBP 是 加到爆 的版本,也就是 C2D 2.6G/7k200/4G,能測試這台高貴的機器真是有幸呀。

燒機的方法是使用 Xbench,測試的過程裡除了全速不斷的一直跑 Xbench 以外,並且將 CoolBook 的 CPU loading 也調到最高 10。接著把 Applications 目錄裡所有的程式通通開啟,包含了 iLife08, iwork08, Aperture2, Office08, Adobe CS3, Parallels Desktop 等各式各樣重量級軟體,約略開啟了總共五十多個應用程式。最後... 再連續 “同時播放” 三個 FullHD 畫質的 mpg 影片檔。

想當然爾,系統是整個 Lag 到不行了,我把 CPU 跟 GPU 風扇轉速固定在 2000rpm(最低轉速),讓機器狂燒十幾分鐘,CPU 溫度最高達到八十度C,但是系統卻非常的穩定沒有當機,也沒有任何一個應用程式 Crash 掉,最後實測出這顆 C2D T9500 的極限值:2600Mhz@0.9875v。下面的圖示是使用 CoolBook 調整到最低電壓而且最穩定的狀況,CPU Idle 的待機溫度居然只有 28度C (室溫大約 24度C),只能說 45奈米的 CPU 真不是蓋的。

Ubuntu on Sony VAIO TZ37TN/B (五) Less Watts Tips & Tricks (8.04 LTS)

在這一篇 Ubuntu on Sony VAIO TZ37TN/B (二) Fan Speed Controller 提到 TZ37 在運作 Ubuntu 時,電腦會特別的燙,原本以為是 CPU 風扇控制不良,於是寫了風扇控制的 Scripts 來降溫。後來發現原來最大的熱源來自於 Intel 4965AGN 這張網卡,於是來到了 LessWatts.org 網站來挖寶。

目前以 Fan Speed Controller Scripts 搭配 LessWatts.org Tips & Tricks 之後,我的 TZ37 已經不再發燙。

根據 LessWatts.org Tips & Tricks 所修改的設定:

echo 5 >/sys/bus/pci/drivers/iwl4965/0000\:03\:00.0/power_level
echo 1 >/sys/devices/system/cpu/sched_mc_power_savings
echo 10 >/sys/bus/usb/devices/usb1/power/autosuspend
echo 10 >/sys/bus/usb/devices/usb2/power/autosuspend
echo 10 >/sys/bus/usb/devices/usb3/power/autosuspend
echo 10 >/sys/bus/usb/devices/usb4/power/autosuspend
echo 10 >/sys/bus/usb/devices/usb5/power/autosuspend
echo auto >/sys/bus/usb/devices/usb1/power/level
echo auto >/sys/bus/usb/devices/usb2/power/level
echo auto >/sys/bus/usb/devices/usb3/power/level
echo auto >/sys/bus/usb/devices/usb4/power/level
echo auto >/sys/bus/usb/devices/usb5/power/level
echo 10 >/sys/module/snd_hda_intel/parameters/power_save
echo 1500 >/proc/sys/vm/dirty_writeback_centisecs
hal-disable-polling --device /dev/cdrom
hdparm -B 1 -S 12 /dev/sda
echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 5 >/proc/sys/vm/laptop_mode
ethtool -s eth0 wol d
ethtool -s eth0 autoneg off speed 100
ifconfig eth0 down

關閉藍牙以及內建CD-ROM的電源:

echo 0 > /sys/devices/platform/sony-laptop/bluetoothpower
echo 0 > /sys/devices/platform/sony-laptop/cdpower
hciconfig hci0 down

刪除沒用到的一些硬體相關的核心模組:

rmmod hci_usb ohci1394 sbp2 ieee1394 bluetooth joydev pcmcia parport_pc lp parport tpm_infineon tpm tpm_bios yenta_socket rsrc_nonstatic pcmcia_core ricoh_mmc

PowerTop 測試一下:

Cn Avg residency P-states (frequencies)
C0 (cpu running) ( 2.1%) 1333 Mhz 0.4%
C1 0.0ms ( 0.0%) 1067 Mhz 0.0%
C2 0.1ms ( 0.0%) 800 Mhz 99.6%
C3 7.4ms (97.8%)

Wakeups-from-idle per second : 133.7 interval: 15.0s
Power usage (ACPI estimate): 7.4W (8.2 hours)

Top causes for wakeups:
35.9% ( 65.2) : Rescheduling interrupts
20.1% ( 36.5) : i915@pci:0000:00:02.0
12.3% ( 22.4) : extra timer interrupt
10.9% ( 19.9) compiz.real : schedule_timeout (process_timeout)
9.5% ( 17.2) firefox : futex_wait (hrtimer_wakeup)

雖然 PowerTop 跑出 7.4W (8.2 hours),但可想而知,8.2 hours 是不切實際的數字,下次再來把實際的使用時間記錄下來,看看服用了這些保命長壽丹之後,TZ37 的續航可以延長到多久。

Ubuntu on Sony VAIO TZ37TN/B (四) Running Hardy Heron 8.04 LTS

先前的 Ubuntu on Sony VAIO TZ37TN/B (一) Hardware & Desktop 是在 7.10 的環境下測試,這次我把系統升級到了 8.04 (Hardy Heron) LTS,藉這個機會整理一下 Sony VAIO TZ37TN/BUbuntu 8.04 LTS 的相容性。

相較於在 7.10 還需手動調整的項目,在 8.04 預設裝好就已經能動的有:

  • Sound 耳機孔輸出與筆電喇叭的輸出已經正常了,不會有耳機已經插上去了,結果筆電喇叭也同時還在唱的窘境。
  • FN Keys 音量調整鈕能動, LCD背光也能動了!

原本在 7.10 能動的,在 8.04 卻掛了的有:

  • Integrated Media Buttons (退片鈕也不能動了) 解決的辦法是,使用偏好設定 -> 鍵盤捷徑鍵,將退片動作 binding 在特殊的按鍵上。

除了上述三項以外,其他的就跟 Ubuntu on Sony VAIO TZ37TN/B (一) Hardware & Desktop 大同小異啦!有些預設不能動的東西,改一下就能動了。下面特別整理出幾個在 8.04 要改的東西,因為這些改法跟過去在 7.10 的方式不同。

HSDPA modem (HUAWEI E220 3.5G) 的驅動:
改服用 vodafone-mobile-connect-card-driver-for-linux-2.0.beta2-ubuntu-installer.run 試試,如果遇到問題無法啟動裝置的話,那就只能手動來設定網卡,設定內容可參考 Wireless in Debian II (Huawei E220 3.5G Modem)

Touchpad 的解析設定:
Section “InputDevice”
Identifier “Synaptics Touchpad”
Driver “synaptics”
Option “Device” “/dev/psaux”
Option “Protocol” “auto-dev”
Option “HorizEdgeScroll” “0″
Option “MinSpeed” “0.1″
Option “MaxSpeed” “0.8″
Option “AccelFactor” “0.2″
Option “EdgeMotionMinSpeed” “15″
Option “EdgeMotionMaxSpeed” “15″
Option “UpDownScrolling” “1″
EndSection

Suspend to Ram & Hibernate 終於沒問題了:
$ sudo vi /etc/modprobe.d/alsa-base
options snd-hda-intel probe_mask=1
$ sudo vi /etc/pm/config.d/modules
SUSPEND_MODULES=”ehci_hcd uhci_hcd”

殘念的是,在我的系統上 Hibernate 依舊沒辦法成功,猜測可能是我沒有設定 Hibernate partition 的關係?還沒能去 Debug 這問題。不過話說回來,只要 Suspend to RAM 能一切正常,我就滿足了,這樣就能像在用 Macbook 一樣,隨走即蓋,隨開即用!方便多了。

Ubuntu 8.04 (Hardy Heron) LTSSony VAIO TZ37TN/B 的支援還算不錯,大部分的硬體都能支援,除了 Fingerprint Sensor 還有怪怪的 Memory Card Reader (Ricoh) 以外。不過還存在一個問題需處理,就是增加續航力跟風扇控制的問題,我在下一篇會整理在 8.04 下,如何讓 TZ37 更省電,續航更久。(風扇控制依舊參考這篇 Ubuntu on Sony VAIO TZ37TN/B (二) Fan Speed Controller.)

更多的 Ubuntu on Sony VAIO TZ 討論,請參照 Sony Vaio TZ Series: Quest for 100% Compatibility

How to install Grub from a live cd

老方法了, 最近一直碰到這檔事, 貼起來做個紀錄. From: How to install Grub from a live Ubuntu cd.

  • $ sudo grub
  • grub> find /boot/grub/stage1
  • grub> root (hd?,?)
  • grub> setup (hd?)
  • grub> quit

如果是拿 Debian net-install 開機片修復其他磁區的 boot-loader,
可以這麼做:

  • # mkdir /mnt/XXX
  • # mount -t XXX /dev/XXX /mnt/XXX
  • # mount -t proc none /mnt/XXX/proc
  • # mount -o bind /dev /mnt/XXX/dev
  • # chroot /mnt/XXX
  • # grub
  • grub> find /boot/grub/stage1
  • grub> root (hd?,?)
  • grub> setup (hd?)
  • grub> quit

Ubuntu on Sony VAIO TZ37TN/B (三) Performance Tuning

一拿到 TZ37 時, 馬上感受到, 哇靠! 這真是一台超輕薄的筆電, 但是隨即而來的就是: 漸漸的不能忍受他龜慢的速度, 尤其又是一台 1.8″吋 4200rpm 的硬碟在拖垮效能, 於是想起了過去 小黑愛機 X40 不好的歷史....

首先用 bootchart 測一下 TZ37 的開機速度, 測出來為: 1分5秒, 完整的開機到能使用桌面應用程式, 總共花費 2分17秒!

嗯, 真的很慢, 光開個機就要等上兩分多鐘, 於是我祭出了海陸套餐:

這下子調整完後, 咱們看看 TZ37 是否有跑的更快一點, bootchart 測出秒數為 26秒, 完整的開機到能使用桌面應用程式, 總共花費 1分35秒!

嗯, 還不夠快, 後來我把腦筋動到了高速隨身碟上, 由於 1.8″ ZIF 介面的 SSD 目前價位都還貴的離譜, 因此參考這篇 分秒必爭 24款USB高速閃存盤橫評總結, 買了一支 ADATA PD7 (8G) 回來當作主系統碟使用!

動了一點手術, 我把 TZ37 的 Ubuntu Linux 全部移植到這支 PD7 裡, 把內建硬碟的系統全砍了, 將 1.8″吋 120G 的硬碟當作資料碟及備份碟使用, 測試的結果發現 PD7 快閃碟拿來當作系統碟時, 存取速度還蠻快的, 開啟應用程式也不會有一般機械式硬碟那種 lag 的感覺, 一整個就很流暢!

使用 bootchart 測速, 安裝在 PD7 上的 Ubuntu, 開機只要 21秒, 完整的開機到桌面底下, 花費 44秒!! 接著使用 hdparm 來測存取速度, PD7 測出來的 Timing cached reads: 648.17MB/sec, Timing buffered disk reads: 30.42MB/sec, 對照 TZ37 內建的 ZIF介面 1.8″ HDD 為 644.42MB/sec28.27MB/sec.

雖然 hdparm 測出來兩者差距不大, 但是系統實際在運作時, 速度明顯的快速許多, 猜想是快閃碟平均檔案存取速率(Average access time) 以及隨機讀取速率非常快的因素所致, 這點跟 SSD 性質很類似!

對於目前的 Ubuntu on TZ37+PD7 的速度, 大致上已經很滿意了, 接下來如果還能 tuning 出更多的效能的話, 再繼續寫續集吧! :-P

(PS: 最後補充一下 TZ37 在 Ubuntu 下的續航力: 裝一般電池+PD7系統碟+USB 無線光學鼠+螢幕亮度開第三格+開啟無線網路, MSN聊天+上網找資料, 可使用 4小時40分鐘左右... 很讚吧!)

Ubuntu on Sony VAIO TZ37TN/B (二) Fan Speed Controller

Sony Vaio TZ Series: Quest for 100% Compatibility 討論串裡看到有人問到: I would like to know if around 60 degrees C is a normal temperature (normal use) for the processors. Sometimes I increase the fan speed (using spicctrl) but very soon it decreases. I did not see any option in the bios to get more fan speed at a given temperature. Do you have an idea?

我也測試了一下, 果真發現 TZ37 在 Ubuntu 底下, 風扇控制不甚理想, 為了讓機器更涼快點, 於是寫了一段碼, 即時監控 CPU 溫度, 讓他不飆超過 55度c!

$ sudo apt-get install spicctrl
$ vi /home/cyj/bin/FanSpeedController.sh

  • #!/bin/bash
  • declare -i temp=`spicctrl -T`
  • if [ "$temp" -gt "55" ]; then
  • spicctrl -f 255
  • fi

$ sudo vi /etc/rc2.d/S99FanSpeedController

  • watch -n 120 “/home/cyj/bin/FanSpeedController.sh”

這樣系統每隔兩分鐘 check 一次 CPU 溫度, 如果超過 55度c 的話, 它就 “全速運轉” 一陣子, 直到溫度低於 55度c , 就會恢復原本該有的預設風速! (如果覺得兩分鐘太頻繁的話, 可手動修改 watch 的秒數, 即使改成 10分鐘一次, 也能有效降溫...)

Ubuntu on Sony VAIO TZ37TN/B (一) Hardware & Desktop

告別過去的 Macbook Triple Boot: Used Bootcamp, 以及 Ubuntu 7.04 on MacBook: Used Bootcamp 之後, 近日接手一台 Sony Vaio TZ37/TN, 沒有了 Parallels / Bootcamp 後, 終於能玩玩 pure Linux 了 (純的喔!)

直接上陣的是 Ubuntu 7.10, 參照 Sony Vaio TZ Series: Quest for 100% Compatibility 來安裝系統, 在預設未調整的 Base-System下, 一裝好能 work 的有 (out-of-the-box):

  • Intel 950 Graphics (3D 正常, 1366×768 寬螢幕解析正常)
  • Wired Ethernet
  • Intel 4965 (A,G,N Wireless)
  • Bluetooth (Bluetooth Mouse on Ubuntu)
  • Touchpad (包含右邊的滑動區域都正常)
  • Integrated Media Buttons (僅有退片鈕可以動)
  • FN Keys (音量調整鈕能動, LCD背光不能動)

調整後能 work 的有:

  • Sound (除了耳機孔輸出與喇叭輸出分開外, 一切正常)
  • Headphone Jack Sensing (正常)
  • Motion Eye (正常)
  • HSDPA modem (HUAWEI E220 3.5G 正常)
  • Suspend to Ram (僅有 AC_power 時才能, Battery_power 會當掉)
  • Suspend to Disk (無論如何, 死當就是了....)

確定無法啟動的有:

  • Fingerprint Sensor
  • Memory Card Reader (Ricoh)

.
Sound Card 的調整:
$ sudo vi /etc/modprobe.d/alsa-base
添加 options snd-hda-intel model=sony-assamd
.
HSDPA modem (HUAWEI E220 3.5G) 的驅動:

  1. https://forge.vodafonebetavine.net/frs/?group_id=12&release_id=11
  2. http://static.scribd.com/docs/6kdtdm1khgp7g.pdf

.
LCD 背光 FN Keys 設定:
$ sudo vi /etc/init.d/hotkey-setup (修改下列)
Sony*)
#modprobe sonypi; (把 modprobe sonypi 註解)
modprobe sony-laptop
.
Touchpad 的解析設定:
$ sudo vi /etc/X11/xorg.conf
Section “InputDevice”
Identifier “Synaptics Touchpad”
Driver “synaptics”
Option “AlwaysCore”
Option “SendCoreEvents” “true”
Option “Device” “/dev/input/mouse1″
Option “Protocol” “auto-dev”
Option “ZAxisMapping” “4 5″
Option “Emulate3Buttons” “yes”

Option “LeftEdge” “102″
Option “RightEdge” “921″
Option “TopEdge” “80″
Option “BottomEdge” “641″
Option “MaxTapTime” “180″

# Cover the whole 1280×800 display from one edge to the other:
Option “MinSpeed” “0.1″
Option “MaxSpeed” “0.8″
Option “AccelFactor” “0.2″
Option “EdgeMotionMinSpeed” “15″
Option “EdgeMotionMaxSpeed” “15″
Option “UpDownScrolling” “1″

# Button handling:
# - Middle and Right click are *REVERSED* on the pad buttons
# (as I more often middle-click than right-click)
# - Top Right simulates MIDDLE click
# - Bottom Right simulates RIGHT click
Option “RTCornerButton” “2″
Option “RBCornerButton” “3″
Option “LTCornerButton” “0″
Option “LBCornerButton” “1″
Option “TapButton1″ “0″
Option “TapButton2″ “3″
Option “TapButton3″ “2″
Option “SHMConfig” “on”
EndSection
.
Motion Eye 的細節設定較繁複:
參照 Sony Vaio TZ Series: Quest for 100% Compatibility.

Suspend to Ram & Disk 的細節設定較繁複:
參照 Sony Vaio TZ Series: Quest for 100% Compatibility. 或者直接採用 這裡 的檔案!

.

桌面 3D 環境美化及調整:

硬體驅動及設定完成後, 先給他 dist-upgrade 一下, 接著安裝 lazybuntu, 輕輕鬆鬆搞定桌面應用軟體, 如果覺得預設桌面環境不夠炫的話, 可參考下面文章來美化桌面!

.
視窗邊框半透明:
$ sudo apt-get install emerald
CCSM -> 視窗裝飾 -> 指令 -> emerald --replace (解決視窗邊框消失問題)
Emerald Theme Manager (細部微調邊框半透明樣式)

到此為止, Ubuntu 7.10 在 TZ37 上已經相當好用了, 不過還是遇到了投影機外接螢幕的問題, 參照了 Ubuntu 7.10 的切換螢幕程式, 輕鬆搞定!

目前已經處理完 TZ37 的硬體驅動以及桌面應用環境的佈設, 在下一篇文裡, 將分享 TZ37+Ubuntu 效能調校的測試數據!

Plone HTTP Cache Manager + Apache mod_cache

使用 Plone 內建的 HTTP Cache Manager 配合 Apache mod_cache,
可以讓 Plone-Site 的頁面存取速度增快,網站整體的效能也會跟著提昇。

在開始之前,可先閱讀 使用 Cache Manager,認識 Zope 底下
Cache Manager 的運作模式。若想直接快速獲得 Benchmark 的數據,
可參考 Plone 效能測試綜合報告

底下將說明如何實做 Plone 的 HTTP Cache Manager 並搭配
Apache mod_cache 提昇 Plone 網站的存取效能。

首先載入 Apache mod_cache:

$ sudo a2emod cache
$ sudo a2emod mem_cache
$ sudo a2emod disk_cache

編輯 httpd.conf 加入 Cache Configuration:

<IfModule mod_cache.c>
<IfModule mod_mem_cache.c>
CacheEnable mem /
MCacheSize 65536
MCacheMaxObjectCount 2000
MCacheMinObjectSize 1
MCacheMaxObjectSize 10240
</IfModule>
</IfModule>

$ sudo /etc/init.d/apache2 restart (或 force-reload)

Cache Configuration 的設定值可參考 Apache Module mod_cache

接下來要設定 Apache 做為前端伺服器,並且啟動 mod_rewrite、
mod_proxy,設定步驟可參考:Running Plone and Zope behind
an Apache 2 web server

最後搭配 mod_cache 作為前端快取機制,並設定 Plone HTTP Cache
Manager。

底下是 Plone/manage 的 HTTP Cache Manager 設定畫面:

cache-1.jpg

點選 Associate,找出所有可被 cache 的物件,勾選所需要 Cache 的物件,
選擇完畢後按下 Save Changes:

cache-2.jpg

cache-3.jpg
cache-4.jpg

勾選完成之後,即完成了所有的設定。

此時 Plone 會將需要 Cache 的內容轉交給
Apache mod_cache 來處理,以增進網站存取效能。

.
最後我們使用 ab 來 benchmarking 網站的效能:

1. 完全沒做任何 Cache 的 Plone-Site:
$ ab -n 500 -c 20 -d -k http://localhost:8080/Plone

測出的數據
Requests per second 7.24 #/sec
Time per request 2761.690 ms

2. HTTP Cache Manager + Apache mod_cache 的 Plone-Site:
$ ab -n 500 -c 20 -d -k http://localhost/Plone

測出的數據
Requests per second 2787.50 #/sec
Time per request 7.175 ms

3. 將 Cache interval seconds 設成 5 秒的情況下:

測出的數據
Requests per second 710.95 #/sec
Time per request 28.22 ms

.
由 ab benchmarking 後的數據可以發現:

1. HTTP Cache Manager + Apache mod_cache 的 Plone-Site
相較於沒做任何 Cache 設定的網站,網站存取效能提昇將近 400 倍。

2. 將 interval seconds 由 3600 秒縮減為 5 秒後,
所造成的網站存取效能耗減,將近有 4 倍之多。

.

Triggers in PostgreSQL (using PL/sh & PL/pgSQL)

測試如何在 PostgreSQL 建立一個 觸發器 (Triggers)

測試的目標是:
當 users 資料表的 username 欄位新增資料時,
Trigger 會寄一封信件給管理者,通知欄位資料已經新增。

Google 之後發現 pgMail 以及 PgSendMail 可以做這件事,
但在實際安裝測試後,發現有些錯誤訊息,目前還未能花時間去 Debug,
於是找了另外一個替代方案:使用 PL/sh Procedural Language Handler
手動寫 Shell Scripts 來執行寄信的動作。

PL/sh 的安裝方式可以使用 apt-get install postgresql-8.2-plsh,
也可以來 官網 下載 TarBall 編譯安裝。

安裝完成後,需在 PostgreSQL 裡宣告使資料庫支援 PL/sh 語言,
先找到 createlang_pgplsh.sql 的所在位置,找到後執行:
$ sudo -u $USER psql -d $DBNAME -f $PREFIX/createlang_pgplsh.sql

例如:
$ sudo -u plone psql -d zope_sqlpas -f /usr/share/postgresql-8.2-plsh/createlang_pgplsh.sql

(PS: 以上均為同一行,這裡因為排版關係它自動跳行)

安裝完成後,來到 PostgreSQL 建立 PL/sh function:

CREATE FUNCTION email(text,text,text) RETURNS trigger AS ‘
#!/bin/sh
echo $3 > /tmp/email-trigger
mail $1 -s $2 < /tmp/email-trigger
‘ LANGUAGE plsh;

(PS: 在函數裡使用 shell scripts 寫寄信動作)

建立完成時,可用 SQL 語法測試 Function 有沒有錯誤:
select email(’cyj@localhost’,'Subject’,'Message body’);

如果 cyj@localhost 有收到信件的話,表示此 email() 已能正確運作。

接著必須使用 PL/pgSQL 在 PostgreSQL 裡建立 Trigger Function,
在這 Function 裡呼叫剛才的 PL/sh email() 做觸發的動作。

參考這篇 PostgreSQL - Trigger 入門 寫了一個 email_mytrigger():

CREATE FUNCTION email_mytrigger()
RETURNS “trigger” AS
$BODY$BEGIN
PERFORM * FROM users WHERE username = NEW.username;
PERFORM email(’cyj@localhost’,'Subject’,'Message body’);
RETURN NEW;
END;$BODY$
LANGUAGE ‘plpgsql’ VOLATILE;

此時 email_mytrigger() 已建立完成,接著要決定套用在哪個資料表上:

CREATE TRIGGER email
BEFORE INSERT ON users
FOR EACH ROW
EXECUTE PROCEDURE email_mytrigger();

設定 users 資料表新增資料時,PostgreSQL 會觸發 email_mytrigger(),
在這個 Function 裡會執行用 PL/sh 寫的 email() 去做寄信的動作。

到此為止,這個 Triggers 的測試目標已經達成,在撰寫 Function 過程中,
如果有遇到 PostgreSQL 語法的問題時,可先查找 PostgreSQL Manuals

Running Plone and Zope behind an Apache 2 web server

測試了 Apache mod_rewrite 以及 Zope 的 Virtual Host Monster 物件,
藉由 Rewrite Module 的方式,把瀏覽 Plone 網站的 Request 重導給 Zope,
除此之外,原本在 /var/www/* 裡的 Apache 網頁目錄也能直接在網站上運作。

實際執行的方法很容易,首先要載入 Apache 相關模組:
$ sudo a2enmod rewrite
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

接著在 Apache ServerRoot 下做轉址的設定,
這裡我是採用修改 .htaccess 的方式:
$ sudo vi /var/www/.htaccess

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^phpform - [L]
RewriteRule ^(.*) http://localhost:8080/VirtualHostBase/http/localhost:80/VirtualHostRoot/Plone/$1 [P]
</IfModule>

PS: RewriteRule ^(.*) 那行為同一行,這裡因為排版關係它自動跳行。

填寫完成之後 restart Apache。

未來在存取 http://localhost/ 時,就會導向到 http://localhost:8080/Plone,
Plone 底下所有的 URL 都會從原本的 :8080/Plone/*
重新導向到 http://localhost/Plone/*,
除此之外,原本在 /var/www/phpform 這個目錄,
會原封不動的交給 Apache 來處理。

底下有更詳盡的參考資源:
1. Running Plone and Zope behind an Apache 2 web server
2. Mixing Local Apache and Proxyed Content
3. 使用 Apache 作為 Zope 的前端
4. ZopePowerUser 進階講師研習班
5. Zope 虛擬主機的實例教學

Plone & Python Workshop @ IIS

這是 1/7 日在資訊所與法鼓山朋友一同參與的聚會,
由我與 Marr 介紹 Plone & Python 相關的主題,
並且讓大家一同參與實做。

講題的內容:

* Denny
0. Plone 基礎介紹、架構特色與應用
1. windows/Linux 安裝 Plone-site
2. Plone3.0 操作手冊內容介紹
3. 在 Plone 上安裝 Product (ex: Wiki、Blog...)
4. 介紹 PHParser + MySQL/PostgreSQL
5. 介紹 SQLPASPlugin + MySQL/PostgreSQL

* Marr
1. Baby Steps for Python
2. Lessons Learned from a Python-based Project

.
我準備的內容是 Plone 的入門介紹與實做,
以下是參用的資料,有興趣的朋友歡迎參考。

0. Plone 基礎介紹、架構特色與應用
http://yenjinc.info//?p=268

1. windows/Linux 安裝 Plone-site
http://yenjinc.info/?p=27 (Windows)
http://yenjinc.info/?p=29 (Mac OSX)
http://yenjinc.info/?p=166 (Linux)

2. Plone3.0 操作手冊內容介紹
http://plone.org/documentation/manual/plone-3-user-manual
http://plone.org/documentation/manual/plone-2.5-user-manual

3. 在 Plone 上安裝 Product (LinguaPlone、ZWiki、Blog...)
http://plone.org/products
http://yenjinc.info/?p=273
http://zwiki.org/releases/ZWiki-0.60.0.tgz
http://yenjinc.info/?p=282

4. 介紹 PHParser + MySQL/PostgreSQL
http://marrtw.blogspot.com/2007/12/phparser-with-plone.html
http://yenjinc.info/?p=284
http://yenjinc.info/?p=285

5. 介紹 SQLPASPlugin + MySQL/PostgreSQL
http://yenjinc.info/?p=286
http://yenjinc.info/?p=297

6. 其他參考資源

.Zope / Plone 的相關介紹
http://www.song.idv.tw/docs/ZopeIntro/
http://www.song.idv.tw/docs/ZopeIntro/PloneDoc

.Definitive Guide to Plone (Plone 電子書)
http://plone.org/documentation/manual/definitive-guide

.非開發者角度的文件:
http://learnplone.org/

.客製化網站外觀可參考:
http://plone.org/documentation/tutorial/creating-custom-style

PostgreSQL + ZPsycopgDA + SQLPASPlugin

在上一篇:SQLPASPlugin for SQL based authentication in Plone
介紹 MySQL+SQLPASPlugin 實做過程。

接著我又參考這篇:
How To Setup SQLPASPlugin to Authenticate Against A PostgreSQL Database 實做了 PostgreSQL+SQLPASPlugin。

結果發現事情並不如 文件中 寫的那麼簡單,
這裡面存有一些 小問題需修正 才行!

.
底下是在 Ubuntu7.10 實做的過程紀錄:

.
1. 首先安裝這些軟體 (apt-get install XXX)

apache2
libapache2-mod-php5
libapache2-mod-auth-pgsql
php5
php5-cgi
php5-pgsql
phppgadmin
postgresql-8.2
postgresql-plpython-8.2
postgresql-pltcl-8.2
python-pygresql
python-psycopg2
python-psycopg2da
zope-psycopgda2
plone-site

.
2. 參考這份文件:Debian Linux 架設 PostgreSQL+PhpPgAdmin

2-1. 切換成 postgres 的身份執行
# sudo -u postgres psql template1

2-2. 修改 postgres 的密碼
# template1=# alter user postgres with password ‘PASSWORD’;

2-3. 建立 zope 使用者 (作為 Plone-site 讀取 PostgreSQL 的角色)
# template1=# create user zope with password ‘PASSWORD’ createdb createuser;

這裡的使用者務必建立為 zope/plone 服務啟動角色,
否則在執行 ZPsycopgDA 時會有錯誤訊息:
例如://psql: 嚴重錯誤: Ident 驗證使用者 “某某某” 失敗//

2-4. 離開 PostgreSQL
# template1=# \q

2-5. 參考 上面那篇文件 繼續完成 phppgadmin 的設定。

.
3. 使用 zope 使用者登入 phpPgAdmin 建立資料庫與表格
3-1. 建立使用者認證資料庫 zope_sqlpas
3-2. 建立角色資料表 roles,欄位設定為 username, rolename
3-3. 建立認證資料表 users,欄位設定為 username, password, email

zpsycopgda-1.jpg

.
4. 安裝設定 ZPsycopgDA

cd /var/lib/zope2.9/instance/plone-site/Products/
sudo cp -rf /usr/share/zope/Products/ZPsycopgDA\:2/ .
sudo mv ZPsycopgDA\:2/ ZPsycopgDA
sudo chown zope:zope -Rf ZPsycopgDA

sudo vi ZPsycopgDA/DA.py

找到 99 行:self.encoding = encoding
改成:self.encoding = “utf8″

(如果沒修改,在執行 ZPsycopgDA 存取 PostgreSQL 時
會出現 encoding 錯誤訊息)

.
5. 在 Plone 根目錄建立 Z Psycopg2 Database Connection。

在 Connection string 填入正確的 PostgreSQL 連結資訊
//例如: dbname=zope_sqlpas user=zope password=xxxxx//

zpsycopgda-2.jpg

.
6. 安裝 SQLPASPlugin

.
7. 到 Plone Control Panel 設定 SQL Authentication。

zpsycopgda-3.jpg

zpsycopgda-4.jpg

.
8. 設定 /Plone/acl_users/source_properties。

.
大功告成啦!
此時 Plone 的使用者管理以及認證資訊皆已在 PostgreSQL 進行。

SQLPASPlugin for SQL based authentication in Plone

Plone 是一個可供多人註冊使用的 content management system (CMS)
註冊的 user record 會儲存在 ZODB 裡,經由 ZMI /Plone/acl_users,
可以對其 Authentication 的規則窺知一二。

在 Plone 上預設已安裝 PlonePAS Product,它可讓我們安裝
PluggableAuthService(PAS) plugins,作用是讓其他系統上既有存在
的使用者資料作為 Plone 的 user/group sources,並且支援其帳號密碼認證。

SQLPASPlugin Product 是一個 PAS plugins,
藉由 SQLPASPlugin+PlonePAS,可以把 Plone 的 使用者管理/認證
交由另一台 SQL database 來處理,也就是讓 Plone 網站可以存取
另外一個網站 SQL 裡的帳號密碼。

.
底下簡略紀錄
Plone3+MySQL+SQLPASPlugin 的整合測試。

1. 首先安裝 MySQL for Python & ZMySQLDA

2. 在 Plone 根目錄建立 Z MySQL_Database_Connection。

sqlpas-1.jpg

.
3. 安裝 SQLPASPlugin

sqlpas-2.jpg

.
4. 到 Plone Control Panel 設定 SQL Authentication。

sqlpas-3.jpg

sqlpas-4.jpg

.
5. 設定 /Plone/acl_users/source_properties。

sqlpas-5.jpg

sqlpas-6.jpg

.
6. 到 Plone Control Panel 安全設置,打開使用者相關功能。

sqlpas-7.jpg

.
7. 此時 Plone 的使用者管理以及認證資訊皆已在 MySQL Database 進行。

.
關於 PluggableAuthService(PAS) 資源,可參考 PAS reference manual,
PlonePAS Presentation 的介紹。

以上整合測試是在 MySQL Database,若搭配 PostgreSQL Database,
可參照 How To Setup SQLPASPlugin to Authenticate Against A PostgreSQL Database

File types of OSX-screen-capture

每次重裝 OSX 後想要改預設截圖的格式時,都會忘記指令是什麼,
這次 Google 到了,乾脆貼上來做紀錄,以後就不用在到處找了。

defaults write com.apple.screencapture type XXX
XXX 可以是 pdf jpg gif png,這樣預設截圖時就會採用該格式,
不然還有這個軟體 shotChoice 可以自動設定截圖格式 。

準備要從 Tiger 重新安裝至 Leopard 了,希望一切無痛順利!

PHParser + PostgreSQL

接續上一篇的內容:
Plone and PHP+MySQL (Quick-Note)

這次搭配的 database 改成了 PostgreSQL
安裝流程與方法幾乎跟 上篇 一樣,
差別只在於安裝的是 psycopgZPsycopgDA

經過測試後發現,若純粹搭配 PHParser 來與資料庫互動的話,
其實可以不用安裝 ZMySQLDA / ZPsycopgDA