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/

何岳峰 敬上

2009年2月11日 星期三

把 Mercurial 用 mod_python 裝在 Apache 中

實際上, Mercurial 這種分散式版本控制器是不太需要架個 Web Server 來 Run 的,尤其是我多半都是獨自在寫程式,但架了個 Web Server 後,我會比較方便在多台個人電腦中轉移陣地,且這也多了一種備份的機制。

不過,目前已有人將 hg 成功移植成 GAE 版(hg-repos.appspot.com),現在只待作者把說明文件完成,我就會將跑在 apache 上的部份儲存庫再移至 GAE 去。

廢話不多說,透過 mod_python 來跑 HTTPS 版的 Mercurial 儲存庫方式如下:

一、 下載 modpython_gateway.py ,載點何處? Google 比較快且安全。下載後放到 /raid1/A2B2/www/HG/ (可自行更換其他資料夾) ,也就是在 apache.conf 中所設定 PythonPath 。此檔案內容不用修改。

二、 設定如何執行 modpython_gateway.py ,一樣在 /raid1/A2B2/www/HG/ 下,新增一個 hgwebdir.py ,其內容如下:

import os
os.environ["HGENCODING"] = "UTF-8"

from mercurial.hgweb.hgweb_mod import hgweb
from mercurial.hgweb.hgwebdir_mod import hgwebdir
from mercurial.hgweb.request import wsgiapplication

def make_web_app():
return hgwebdir("/raid1/A2B2/www/HG/hgweb.config")

def test(environ, start_response):
toto = wsgiapplication(make_web_app)
return toto (environ, start_response)


三、 設定你的檔案庫位置,一樣在 /raid1/A2B2/www/HG 下新增一個 hgweb.config 其內容如下:

[paths]
/trachg = /raid1/A2B2/www/trac/hg

[collections]
#我把 /raid1/A2B2/www/HG/product soft link 到 /product
#這樣在連結上,才會是用 /product/product1 來觀看 product1 儲存庫。
/PathDoesNotMatter = /product/

[web]
style = gitweb
allow_archive = bz2 gz zip


四、 apache.conf 設定如下:

<virtualhost *:443>
--ServerSignature Off
--ServerName hg.yoursite.name
--DocumentRoot /raid1/A2B2/www/HG/tmp
--RewriteEngine On
--RewriteRule ^/(.*) /DoesNotMatter/$1
--<Location />
----PythonPath "sys.path + [ '/raid1/A2B2/www/HG' ]"
----#PythonDebug On #Uncomment this ligne if you got a problem and need debug information
----SetHandler mod_python
----PythonHandler modpython_gateway::handler
----#PythonOption SCRIPT_NAME /repo
----PythonOption wsgi.application hgwebdir::test
----AuthType Basic
----AuthName "Mercurial Repository"
----AuthUserFile /raid1/A2B2/www/auth_users
----Require valid-user
--</Location>
--LogLevel warn
--ErrorLog /var/log/apache2/hg_error.log
--CustomLog /var/log/apache2/hg_access.log combined
--SSLEngine On
--SSLCertificateFile /etc/apache2/ssl/apache.pem
</virtualhost>

五、 重啟 apache

你就會在 https://hg.yoursite.name/ 中,看到 trachg 、 product/product1 、 product/XXXproduct ... 的儲存庫了。

2009年2月9日 星期一

難道我真的是 Windows 白癡! 搞個 https 憑證花了一個上午還是沒成功

照著這位仁兄的筆記: http://blog.roodo.com/myroodo/archives/4219557.html ,就是會在最後一個指令

> openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt

出現

I am unable to access the ssl
ewcerts directory
ssl
ewcerts: Invalid argument

查了相當多的地方,也找不出原因。後來想想,這不過是個憑證,它是一種資料,所以它應該與平台無關,且之前我在 Linux 上作了那麼多的憑證,也沒遇過機器重灌,憑證得重作的現象,所以它應與當時製作的平台也無關,索性在 Ubuntu 上打了三個指令,作出憑證,再送到 Windows 去用。

您猜猜,這麼著了?

It's Work~

2009年1月21日 星期三

Trac + Mercurial on Apache 的亂碼問題

這個問題搞了我很久。

用 trac 內帶的 tracd 來跑, changelog 部份的中文就是正常的,但跑在 apache 上時,它就亂了,而且只亂 changelog 部份,程式碼的 diff 結果及 raw 格式都沒事。

看了很久的 mercurial-plugin-0.11 程式碼,看來看去覺得這應該是 mercurial 的錯,不過為什麼我在 shell 中用沒事,或是用 tracd 跑也沒問題,但它跑在 apache 上就錯了呢???

hg 在讀 changelog 的部份,它是用 mercurial.changelog.changelog 函式來處理,但裡面有一個 read() 被 mercurial-plugin 拿來用了,而這個 read 函式在解讀字串時,要叫用 util.tolocal() 來處理編碼,只要沒設定 os.environ['HGENCODING'] 的話,它就會預設為 ascii ,這就是造成 changelog 亂碼問題的地方。

以前,我只須在 /etc/python2.5/sitecustomize.py 設定 sys.setdefaultencoding('utf8') 就行了,現在還得加上 os.environ['HGENCODING'] = 'utf-8' 。

我還是不太懂 os 及 sys 的差別是什麼?

2008年12月21日 星期日

VirtualBox: 在命令列下,將 host os 中的 usb 設備指定給 guest os 使用

如果我們把 Windows 開在背景中執行,這時得用遠端桌面連線來控制它的。

但如果我們臨時想要為 Windows 加入一 usb 設備的話,該如何處理? 原本若依正常的使用方法,在 VirtualBox 程式中開出 Guest OS 時,它在右下角視窗外會有添加 usb /光碟/硬碟…的按鈕,但在背景中執行時,這些按鈕則見不到了。

其實很簡單。首先查出你要添加的 usb 設備的 uuid 。

# VBoxManage list usbhost
UUID: aead9d43-12fb-4faa-8c83-8e810217210c
VendorId: 0x0ca6 (0CA6)
ProductId: 0x0010 (0010)
Revision: 0.5 (0005)
Manufacturer: CASTLES
Product: EZ100PU Smart Card Reader
Address: /proc/bus/usb/001/003
Current State: Captured

接下來,在指定的 guest os 中啟用它。
# VBoxManage controlvm {{YOUR_GUEST_OS_NAME}} usbattach aead9d43-12fb-4faa-8c83-8e810217210c

你就會在 Windows 中,看到一 usb 設備被找到了。

而移除它的方法則是如下:
# VBoxManage controlvm {{YOUR_GUEST_OS_NAME}} usbdetach aead9d43-12fb-4faa-8c83-8e810217210c

2008年12月12日 星期五

在無 X window 下,在 Linux server 中安裝一個跑在 VirtualBox 上的 Windows XP

有時候,就是很無奈,得裝上一個自己不喜歡的東西來討人歡心,要不然生不出人家想要,且是一模一樣的封閉格式檔案。所以只好在 Linux Server 上裝個 VirtualBox 來跑 XP 。但問題是,它沒有 X window 耶,怎麼辦? 很簡單,照下面指令一樣畫個胡蘆就成了。

# 製作一個近 6g 的硬碟檔案(virtualbox用的vdi檔)
VBoxManage createvdi -filename GuestOSName.VDI -size 6000 -register
# 註冊你要使用的 WinXP 光碟檔
VBoxManage registerimage dvd /home/hoamon/WinXP.iso

# 創建一個虛擬機器,名稱是 GuestOSName
VBoxManage createvm -name GuestOSName -register
# 設定 GuestOSName 所用的記憶體為 768MB 、使用 dvd 、使用 nat 、
# 使用 GuestOSName.VDI 為 hda 硬碟、並在 3389 port 上使用「遠端桌面連線」來作控制虛擬機器、
# 在光碟機中放入 WinXP.iso
VBoxManage modifyvm GuestOSName -memory 768MB -acpi on -boot1 dvd -nic1 nat -hda GuestOSName.VDI -vrdpport 3389 -dvd /home/hoamon/WinXP.iso

# 開啟虛擬機器,然後你就可以連入 XXX.YYY.ZZZ.WWW:3389 去安裝 Windows XP 了。
VBoxVRDP -startvm GuestOSName &

# 強制關機
VBoxManage controlvm GuestOSName poweroff

在這個過程中,有一個非常棒的設計,那就是這個遠端桌面連線並不是 Windows XP 的遠端桌面連線,它是 VirtualBox 所提供的遠端桌面連線,所以當我們一打開 GuestOSName 時,以 3389 連線進去是可以看到 BIOS 畫面,但此時 Windows 都還沒啟動。

因為是 VirtualBox 所提供的桌面連線,所以如果你的 Guest OS 裝的是 GNU/Linux 、 *BSD 之類的作業系統,一樣都是用遠端桌面連線來控制。

接下來若是要開放 Guest OS 連線請參照用 VirtualBox 讓 Windows Server 偷偷(背景執行)跑在 Linux Server 上

2008年9月16日 星期二

「政治文」:危橋的定義是「颱風就倒」?

斷橋新聞請看 http://www.libertytimes.com.tw/2008/new/sep/15/today-t1.htm 。

大家對后豐橋為什麼會斷,應該是沒有疑問,因為它是「危橋」,只是我不懂的是,它前年就被宣告「危橋」了,為什麼這次遇到辛樂克才斷,難道是阿扁神力護佑,所以換總統後,新總統神力不夠,活該它斷。

那又為什麼甲仙大橋沒列「危橋」,但這一次颱風來,卻也斷了。雖然沒有死人,不過,從新聞畫面看來,有輛車在橋斷前緊急迴轉,怎麼那位司機就不罵公路單位沒有事先封橋(或許有罵,只是記者沒報)。

依政府預算編列、採購相關規定來看,后豐橋前年被判定「危橋」,去年編列預算,今年發包施工,看起來是沒有問題的。大家在罵的好像是「太晚封橋了」,如果被判定危橋後馬上封橋就不會有雷工程師事件。可是我們看看下面的 google map 。連接后里鄉及豐原市之間的橋有三座,由左至右分別是「中山高」、「后豐大橋」及「長庚大橋」。如果前年就封橋了,那麼真如交通部長所言的,必須開放機車上國道,那會有多少的用路人會開罵呢!


檢視較大的地圖

又大家都大聲地說:「判定危橋了,為什麼不趕快拆了重蓋?」

那一下子這麼多危橋要重蓋,可以加稅嗎? 這時候又沒聲音了。只有我心里喊了兩聲:加徵證所稅以及加徵石油附加稅吧!

2008年9月10日 星期三

「政治文」:證交稅打折?

「利益揭露」:因為我想要買股票,所以我希望股市大跌。

「證交稅打折」這個風聲讓我的股票市值回升了不少,不過,我不樂見。如果政府聽從那些大企業建言冀望使用證交稅減半來提昇大盤指數,那就等著看真正調降證交稅後,那些說話大聲的企業家賣股票吧。

如果真的很想拉抬指數,那應該是提高證交稅(因為它是賣股票時才課徵的),然後把多徵的稅補貼給買股票的股民,藉由獎勵買股票; 懲罰賣股票的手段來推昇指數,這才是「王道」吧!

事實上,我希望劉內閣應該對股市少干預,像之前沒什麼聲音不是也很好。回顧過去八年扁政府作了多少指施、喊了多少口號,結果還是不景氣,我相信馬政府上任半年,花多少力氣也不可能「馬上回昇」,會相信「馬上好」的,不是麻痹自己的理智,就是本來沒理智的。「治大國,若烹小鮮」,如果換了一個總統,底下公務員要從東邊,改往西邊走,那什麼時候,才可以到達終點呀! 還是建立正確的文官制度會比較好,真正是「文官治國」,不是總統,只是總統往往是那個敗壞國格的人

如果真的覺得沒喊口號、沒改個制度,會對不起選民,那我建議在股市低迷的現在,取消證交稅,但放個風聲恢復「徵收證所稅」(註1)吧! 沒錯,是讓台灣證券交易史上創下連 19 根無量跌停的「證券交易所得復徵所得稅,一方面符合賦稅公平(實際上,這是對散戶無所謂,但對大企業、證券大戶是種大傷害的政策),再方面,過去四大基金操作績效太差,可以在無量下跌時,大量買進股票,如果真的跌到四大基金也救不回時,再視情況宣佈「不徵證所稅」了。當然,我也會和四大基金一樣進場買股票的。

註1: 事實上,這是不可能的事了。請見實話實說證所稅。立法院諸公們肯嗎??

== 2012/04/28 後記 ==

多年後,再回顧這篇文章,發現我的確算是『一以貫之』的人。
Related Posts Plugin for WordPress, Blogger...