分類彙整: 技術小抄

系統大升級注意事項

這兩天我在升級Fedora(由9->10) ,出了幾個小問題,特別紀錄起來以免以後又犯:

1.移除所有的備份硬碟

  免得硬碟順序錯亂,到時候改grub.conf 改個半死

2.備份  /etc /usr/local/apach2/conf

  不然httpd.conf  會被蓋掉,欲哭無淚

 3.pg_dumpall -c > xxx  備份postgresql

   不然也會造成大麻煩

4. 新系統boot起來之後注意一下網路卡的順序

    ethx 常常會亂跑,即使已經指定了MAC address也不一定ok

5.grub安裝好之後會跑掉

   應該是安裝了 /dev/sda 但沒有裝進 /dev/sda1 /dev/sda2 ,這時用安裝光碟的rescue  mode 進去 chroot /mnt/sysimage 再grub-install /dev/sda1

grub-install /dev/sda2  即可處理掉 

 

PHP用的unicode中文繁簡體對照表

我們的網站支援繁簡體中文,以前我們都是用 autoconvert這個軟體來處理繁簡體轉換,還算好用,不過後來這個程式停止維護,我們都要另外安裝才能搞定,所以後來改用iconv 來轉換。

iconv有個缺點,就是繁體中文有時候有些字並沒有簡體字的對應,這時候autoconvert會用空白來取代,但是iconv就直接切斷整個文字字串,直接不處理這個轉不出來的字後面的文字,導致轉換常常出現問題。

我們在網路上也找不到uincode的繁簡體對照表,所以一直沒有解決問題。後來我們決定自己做一套,除了解決自己的問題,也可以分享給大家:

bg2gb.zip

 

大家 require(‘bg2gb.php’); 之後,只要  $str=str_replace($BIG5C,$GB2312C,$str); 就可以繁體轉簡體,

 $str=tr_replace($GB2312C,$BIG5C,$str);即可簡體轉繁體

mail server怎麼用不同的port 送信

起因是因為現在學術網路裡面都會阻擋使用者利用port 25送信,所以即使自己架設mail server ,也送不出去,

只好請外面的機器幫忙送信,不過得要避開 port 25,因為port 25已經被擋了。

 

底下這篇說明了怎麼讓client可以透過另外的port 透過另外的送信。

http://www.sendmail.org/faq/section3#3.39

這篇說明了Server怎麼開設另外的 port收client的信

 http://www.sendmail.org/~gshapiro/8.10.Training/DaemonPortOptions.html

更新lifetype版本

元旦在家備份 log,順便也整理一下系統,把

lifetype更新到 1.2.8,除掉一些錯誤信息。

說明一下更新的方法,以後好更新。

首先,先到 http://lifetype.net/ 下載最新檔案,

不過應該要下載升級檔案,亦即應該下載 
lifetype-1.2.7-upgrade-1.2.8.tar.gz 
這類的檔案

解開壓縮檔之後,複製到原來的工作目錄下即可。不過做這動作前最好先備份一下,免得系統出問題時救不回來。

備份方式可以用 cp -a lifetype lifetype.old 這樣搞定

php的 iconv 繁簡轉換文字不出來問題解法

php的iconv是個非常好用的函數,可以輕易達成繁簡體轉碼的功能, 但是這個函數有個缺點,當我們輸入「【囧男孩】為什麼你要一直笑呢?」這段字,由於 「囧」這個字不是gb2312支援的字,結果整個輸出會變成「【」,後面的字串全部會消失,而且 php端沒有任何錯誤信息(return也不會變成 false)。

為了解決這個問題,我用了轉回來的字串長度作為檢驗標竿,看看轉回來的字串是否正確,如果不正確,就用二分逼近法,先把正確的部份轉出來,把不正確的部份用遞迴方式繼續切割下去轉,最後把那個造成問題的字換成「?」,這樣就解決了問題。

 <?php
function trangb($str)
 {
        $nstr=iconv(‘utf-8′,’big5’,$str);
        if (iconv_strlen($str,’utf-8′)!=iconv_strlen($nstr,’big5′))
                $nstr=riconv(‘utf-8′,’big5’,$str);
        $pnstr=iconv(‘big5′,’gb2312’,$nstr);
        if (iconv_strlen($nstr,’big5′)!=iconv_strlen($pnstr,’gb2312′))
                $pnstr=riconv(‘big5′,’gb2312’,$nstr);
        $nstr= iconv(‘gb2312′,’utf-8’,$pnstr);
        return $nstr;
 }
function riconv($loc1,$loc2,$str)
{
    $i=iconv_strlen($str,$loc1);
    if ($i<=1)
        return ‘?’;
    $blen=(int)($i/2);
    $elen=$i-$blen;
    $bstr=iconv_substr($str,0,$blen,$loc1);
    $nbstr=iconv($loc1,$loc2,$bstr);
    if (iconv_strlen($bstr,$loc1)!=iconv_strlen($nbstr,$loc2))
        $nbstr=riconv($loc1,$loc2,$bstr);
    $estr=iconv_substr($str,$blen,$elen,$loc1);
    $nestr=iconv($loc1,$loc2,$estr);
    if (iconv_strlen($estr,$loc1)!=iconv_strlen($nestr,$loc2))
        $nestr=riconv($loc1,$loc2,$estr);
    return $nbstr.$nestr;
}
echo trangb("【囧男孩】為什麼你要一直笑呢?");
?>

Nokia E65與Fedora 9 上的Evolution同步方法

我最近買了一台Nokia E65(因為以前的手機掉到地上一台變成兩台,沒救了,又等不到google的手機平台出現),這台機器蠻好用的,可惜鍵盤很小,要輸入資料的話會耗掉半條命。因此只能在大電腦上輸入,再靠同步的方式輸入手機。

不過Nokia原廠的程式只能與XP、Vista同步,其實一開始我並不討厭Vista,我的電腦也裝了一個Vista,但是Vista開機實在太慢了。加上我的Linux上面自從跑了VirtualBox、裝了XP之後,實在是不需要再開進去Vista。好啦!於是每次我都是因為要更新聯絡人或行事曆才忍耐好幾分鐘,等Vista開機,輸入完、同步完又開回Linux,這樣實在有點笨笨的。

 於是,昨天我下定決心要想辦法讓Nokia E65跟Linux上的Evolution同步,這樣我就可以完全擺脫Vista。很不幸的google裡面找到的東西都是 Ubuntu的說明(看來Fedora真的是危險了) ,害我自己K menu搞了一個晚上才搞定。為了怕忘記,再這裡寫個小抄。

第一步,先搞定藍芽連接

 yum install bluez-utils bluetooth gnome-bluetooth

 service bluetooth start

 vi /etc/bluetooth/hcid.conf  編輯一下內容,讓手機跟電腦配對上(蠻容易的,莫名其妙就好了)

用  sdptool browse  來看一下手機的藍芽 address

通常是 

00:17:E3:xx:xx:xx  這樣的形式

第二步,設定同步

先裝他個一大堆 opensync 的plugin

 yum install libopensync-plugin-evolution2.i386 libopensync-plugin-file.i386  libopensync-plugin-synce.noarch libopensync.i386 libopensync-devel.i386 libopensync-plugin-gnokii.i386 libsyncml-0.4.5-2.fc9.i386 libopensync-plugin-syncml-0.35-4.fc9.i386

然後開始

 msynctool –addgroup nok         建立group

msynctool –addmember nok evo2-sync        設定第一個成員是 evolution
msynctool –addmember nok syncml-obex-client     設定第二個成員是手機的控制系統
msynctool –configure nok 1    設定 evolution修改成

<?xml version="1.0"?>
<config>
  <address_path>file:///home/username/.evolution/addressbook/local/system</address_path>
  <calendar_path>default</calendar_path>
  <memos_path>default</memos_path>
  <tasks_path>default</tasks_path>
</config>
 

記得要把 username 改成自己的id,其實那一段就是定義自己的evolution資料庫放哪裡

msynctool –configure nok 2      設定手機的資訊

<?xml version="1.0"?>
<config>
  <!– (Only for bluetooth) The bluetooth address if the bluetooth mode is selected –>
  <bluetooth_address>00:17:xx:xx:xx:xx</bluetooth_address>

  <!– (Only for bluetooth) The bluetooth channel to use. `sdptool browse $MAC` to search for the correct channel –>
  <bluetooth_channel>14</bluetooth_channel>
 ……

 <recvLimit>10000</recvLimit>

  <maxObjSize>0</maxObjSize>

  <!– XXX: Currently you need to write this by your own.
       Later it’s planned to create such entries on the fly during
       the discovery() call. Example database field:
  –>

  <database>
     <name>Contacts</name>
     <objtype>contact</objtype>
     <objformat>vcard21</objformat>
  </database>
  <database>
     <name>Calendar</name>
     <objtype>event</objtype>
     <objformat>vevent10</objformat>
  </database>

紅色部份就是要改的,不過我還無法同步「待辦事項」,這個對我來說比較不重要….

msynctool –sync nok –conflict i           設定好了就可以同步了
 

 這個同步系統比較陽春(不過會成功就好了),需要自己處理一下衝突的狀況,上面那個 –conflict i 就是要求

如果兩筆資料一樣,就不要忽略不處理,不然每次都會問我要怎麼辦,這樣會回答的半死。

以後只要定期  msynctool –sync nok –conflict i   即可

繁星計畫DVD製作小抄

1.資料轉入: 必須下 update unv set txt=replace(txt,’‧’,”);  把「‧」刪除,否則會造成轉換錯誤

2.語言選擇: config.php GBCODE=1 就是簡體 GBCODE=0 就是繁體

3.字型檔案: 放在 home directory的 pfont與 gfont中,要複製到 parsing與 gparsing檔案中

4.default版面選擇: gen_hb.php裡面有兩個  if ($st==0 && $tab==1)  要同步修改,第一個st 控制strong number的位置、tab控制格式

5. 產生的指令 wget –timeout=300000 http://xxx.xxx.xxx.xxx/gen_hb.php &

要加 timeout,不然會出現問題