2007年9月7日 星期五

firefox 同文堂搞的鬼!!

就在剛剛安裝 zencert 簡體版本的時候,一直無法順利安裝
trace 了一下 code ,才知道是 同文堂 搞的鬼 XD
我本來以為 同文堂 只會修改看到的網頁,可是firefox 會以 同文堂 改過的網頁來傳送
舉例來說:
有一個網頁,程式如下



用 firefox + 同文堂 開啟,當然會看到一個已經被轉成繁體中文的按鈕 "保存數據庫設置" 好,問題來了,當你按下他以後,伺服器收到的是 "保存數據庫設置",而非 "保存数据库设置"(簡體)



這會發生什麼問題勒?

如果按下去呢?
你會得到以下回應:



為什麼呢?不是一樣嗎?
但是如果不用 同文堂 轉換,妳實際上是得到:

真的是不一樣的!

更新java後, firefox 下面出現 menuitem 錯誤

更新完 java後

發現 firefox 底下出現了 menuitem ——-^ 的紅字

如附圖:

firefox-err.JPG


找過 google 這應該是 java 5 & 6早期版本的問題
請看下面方法解決 (把 zh_TW 改成 zh-TW)

Java 1.6 會在 IE 和 Firefox 上新增一個 Java Console 選項, 所以會放一個 extension 到 firefox 的安裝目錄裡以達到效果,由於是硬塞的,這個套件不會在列表中顯示,但是它不巧 zh-TW 的地方寫錯了,如果你想顯示這個選項,那麼你可以用文字編輯器修改
Firefox 安裝目錄\extensions\{CAFEEFAC-0016-0000-0000-ABCDEFFEDCBA}\chrome.manifest
這個檔案。

代碼:

locale javaconsole1.6.0 zh-TW chrome/locale/zh_TW/ffjcext/

改成
代碼:

locale javaconsole1.6.0 zh-TW chrome/locale/zh-TW/ffjcext/

存檔。
然後進到 安全模式 後再退出就可以了。

這個 bug 已回報給 Sun.

2007年9月5日 星期三

web介面的 svn : SvnWebClient

在前面一篇文章中,痛訴了安裝ViewVC for Subversion的種種不便之處,晚上又到Subversion的網站上閒逛,然後看到http://subversion.tigris.org/links.html中有一個純Java的客戶端庫,於是就順帶逛到了JavaSVN的網站上,然後在其頁面底部發現了兩款用Java開發的Web客戶端:SVN Web ClientSventon,心想自己不就是吃這碗飯的嘛,總歸要比用Python開發的ViewVC來得順手吧,於是就試著下載安裝了一下。果然是自家人啊,安裝使用得心用手,幾乎就沒有遇到一點問題,哈哈!所以,具體的安裝配置就不囉嗦了,有興趣的下載一個一裝就知道了。

選用svnwebclient完全支援中文,安裝方法參考下載的readme就可以了
建議可以設定server.xml以支援utf8

我的網址: http://140.134.26.7:8080/svnwebclient

參考來源:http://www.blogjava.net/evanwhj/archive/2006/04/06/39498.aspx

apache2 + svn + virtual host

*** 修改 ***
此篇方法會導致部份 svn 指令失敗,需要修正!
*************
apache2中要使用svn功能
可以先參考 Gentoo的文件 http://gentoo-wiki.com/HOWTO_Apache2_with_subversion_SVN_and_DAV

我設定如下:
<Location>
DAV svn
#SVNPath /var/svn/repos
SVNParentPath /var/svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /var/svn/conf/svnusers
AuthzSVNAccessFile /var/svn/conf/svnaccessfile
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
權限設定檔svnaccessfile:
[groups]
admin = ppc52776
ptms = simi
wrms = simi

[/]
* = r
@admin = rw

[osc:/]
ppc52776 = rw

[PTMS:/]
@ptms = rw

[WRMS:/]
@wrms = rw

安裝完以後,連結網址是: http://localhost/svn/xxxx

但是我希望可以是virtualhost的方式,例如 http://svn.ppcsite.info 就可以直接連接到 svn
目前想到的方法是用 apache2 的 mod_rewrite 去作修改
<VirtualHost *:80>
ServerName svn.ppcsite.info
DocumentRoot /var/svn
ReWriteEngine on
ReWriteCond %{REQUEST_URI} !^/svn.*
RewriteRule /(.*) /svn/$1/ [PT]
</VirtualHost>
ReWriteCond 是為了避免 http://svn.ppcsite.info/svn/osc 變成 http://svn.ppcsite.info/svn/svn/osc
RewriteRule 後面的 [PT] 似乎就市直接把網址導過去,不加的話會變成 /svn/svn/svn/svn/...../svn/

2007年8月22日 星期三

同一台電腦啟動兩個以上MySQL

同一台啟動兩個MySQL,要注意的就是不能listen同一個port 和 資料庫資料
因此要另外設定一個 my.cnf ,裡面要寫另外一個資料庫要 lsiten 在哪個ip:port,以及他所使用的sock和datadir在哪,舉例如下:

[mysqld_safe]
err-log = /var/log/mysql/mysql-20.err

# add a section [mysqld-4.1] or [mysqld-5.0] for specific configurations
[mysqld]
port = 3307
socket = /var/run/mysqld/mysqld-20.sock
pid-file = /var/run/mysqld/mysqld-20.pid
log-error = /var/log/mysql/mysqld-20.err
datadir = /mnt/20/mysql
skip-locking

# security:
# using "localhost" in connects uses sockets by default
# skip-networking
bind-address = 192.168.1.7

然後以
# mysqld --defaults-file=/etc/mysql/my-20.cnf 啟動

2007年8月18日 星期六

mysql 4.1/5.0 升級亂碼問題

緣由

升級mysql到4.1/5.0等支援unicode的版本後,馬上會遇到資料庫變亂碼的問題,主要的原因是早期的資料庫是採用 latin1 編碼去儲存 utf8, big5 等,到了 4.1 以後的版本開始支援unicode多國語系,所以從早期的升級上來會變成亂碼。


解決方法

先把有問題的資料庫用以下指令匯出
mysqldump -h 192.168.1.7 --default-character-set=latin1 tcse07 -p --compatible=mysql40 > tcse07.sql
以上指令的意思是要以 latin1 編碼的方式匯出資料庫 tcse07 的內容到 tcse07.sql 檔案,後面的 --compatible=mysql40 是為了使匯出的資料不包含 DEFAULT_CHARSET = latin1 的語系設定,這樣才可以確保匯出的資料是真正原始的資料,而非把 latin1 以 utf8 讀出來的資料

接下來要把轉過的資料在匯入資料庫中
這邊建議匯出以後,先把本來的資料庫 tcse07 刪除,重新建立使其使用 utf8 編碼,之後用以下指令把資料放回去
mysql -p --default-character-set=big5 tcse07
以上指令是要把目前要匯入資料庫 tcse07 的資料,以 big5 的方式讀取 tcse07.sql 並存入 tcse07 資料庫中

或是也可以在php連線的時候,指定以 latin1 的方式去讀去資料表的資料
mysql_connect("192.168.1.7", "root", "xxxx");
mysql_query("SET NAMES latin1");

總結

以上方法的大概就是要讓mysql在讀取以前舊的資料庫的時候,能夠以當時存進去的編碼方式讀出來
在 mysql 支援 Unicode 以前,其存資料的編碼都是 latin1,不管你實際上是用 big5 或 utf8,真正存到內部以後都是當作 latin1 處理
但是後期支援 Unicode 的版本,對於以前的資料會當作是 utf8 去把他讀出來,也就是會背景自動作 latin1 -> utf8 的動作,而不是 big5 -> utf8 的轉換,這也是導致亂碼的原因


其他

big5是以 2 bytes 的方式存檔,而 utf8 是 3 bytes,因此如果看到亂碼的時候,一個中文有2個亂碼,就是 big5,有三個就是 utf8
另外還有當以前php網頁存資料庫是big5的時候,如果不想把網頁改utf8,可以用以下方式解決資料庫讀出亂碼問題
mysql_connect("192.168.1.7", "root", "xxxx");
mysql_query("SET NAMES big5");
ps. SET NAMES的意思是要把資料庫中的資料轉成什麼編碼讀出來,例如存utf8,讀出成big5,但是必須在原本資料庫就是正確的情況下才有用

code:
/* 以Latin1讀取資料庫, 並於畫面顯示INSERT語法
* 使用時須加參數dump.php?table=aaaa
*/
$table=$_GET['table'];
mysql_connect("localhost", "user", "pass") or die(mysql_error());
mysql_select_db("loopek")or die(mysql_error());
mysql_query("SET NAMES 'latin1'");

$r=mysql_query("SELECT * FROM `$table`") or die(mysql_error());

while( $d=mysql_fetch_assoc($r) ) {
$a="INSERT INTO `$table` VALUES (";
foreach($d as $data)
$a = $a."'$data', ";
$a=substr($a, 0, strlen($a)-2);
echo "$a);<br>";
}

由php建立shadow密碼

如果把/etc/shadow搬到mysql裡面當作使用者認證
這時passwd將無法改變資料庫的密碼
可以改用php的方式去改變

在php中有crypt可用

On systems where the crypt() function supports multiple encryption types, the following constants are set to 0 or 1 depending on whether the given type is available:

  • CRYPT_STD_DES - Standard DES-based encryption with a two character salt

  • CRYPT_EXT_DES - Extended DES-based encryption with a nine character salt

  • CRYPT_MD5 - MD5 encryption with a twelve character salt starting with $1$

  • CRYPT_BLOWFISH - Blowfish encryption with a sixteen character salt starting with $2$ or $2a$


但是在不同系統似乎會有不同結果
例如在13.13可以直接產生正確的 CRYPT_MD5 密碼
但是在26.7卻會產生 CRYPT_BLOWFISH 密碼

$salt_str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.';
$salt=substr(str_shuffle($salt_str), 0, 8);

因此必須手動處理crypt的干擾碼:str_shuffle會隨機從字串中選出
substr才可以選其中八碼來用
最後crypt('aaa', '$1$'.$salt) 便可以產生正確的 CRYPT_MD5密碼給shadow使用
Related Posts Plugin for WordPress, Blogger...