2007年12月31日 星期一

[轉] wine 中文問題

簡單說就是把wine預設的字型刪除就可以了
rm -rf /usr/share/wine/fonts

wine…預設編碼不是中文??
我現在用wine執行程式遇到一個問題就是程式如果沒有指定編碼的部份中文就會變亂碼無法顯示,而用Cross Over的情況下則是使用了英文字型來顯示沒有指定編碼的部份(會變成“|||”),因為我不知道Cross Over怎麼改字型也不知道能不能改所以把目標集中在wine的env設定,因為能正常顯示中文的部份有設定是使用big5的編碼,我用locale -a看了一下好像沒有zh_TW.big5,這樣還能用big5來執行嗎?我用env="zh_TW.big5"跟env="zh_TW"都會全部變成“?”而用env="zh_TW.utf8"則跟直接執行一樣,所以我想是不是wine在執行的時候遇到沒有指定編碼方式的字就會預設用英文來顯示(順序:env→程式設定),但在XP執行是正常的(沒指定默認big5?),這樣有辦法解決嗎?我搜過論壇的wine字型校調相關文章不過設定後也只能讓字變大;嗯…也許一些程式安裝時無法顯示中文也跟這有相關吧~
PS:程式是自己寫的所以知道沒有指定預設的編碼

我自問自答好了= =
今天研究了一天大概有一點頭緒了,發現以下幾點:
1. wine及其延伸產品Crossover預設使用的“字型名”為System
2. 該字型的“檔名”為cvgasys.fon
3. Windows預設使用的“字型名”為Fixedsys
4. 該字型的“檔名”為cvgafix.fon
5. 以上都跟亂碼沒有直接的關係= =
6. Crossover似乎對“notepad.exe”這個檔名有下奇怪的暗示
7.wine及其延申產品只要使用.fon字型就會產生亂碼

在測試的過程中還發現在Crossover中即使執行中文版的記事本仍會顯示英文介面,而且預設如果用中文字型會變特大號字,但只要改一下檔名即可正常執行
判斷應該是某個設定檔中有記載notepad.exe和字型相關資訊不過我不知道要改哪(正確來說是哪裡都改過了可是都無效…還會自動被改回來)
結論就是…幹掉所有.fon字型即可解決大部份亂碼問題
rm ~/cxoffice/share/wine/fonts/*.fon
wine也是一樣如法炮製
sudo rm /usr/share/wine/fonts/*.fon
如此一來在找不到原本的系統字型就會改用拷進去的ttf、ttc字型了

原文: http://www.ubuntu.org.tw/modules/newbb/viewtopic.php?post_id=16868

2007年12月18日 星期二

linux下java 1.5, 1.6中文設定

java 到 linux 下中文都會變成 口口 ...
原來有一個很簡單的方法可以修正
# cd /opt/sun-jdk-1.6.0.03/jre/lib/fonts
# mkdir fallback
# cd fallback
# ln -s /usr/share/fonts/fireflysung/fireflysung.ttf .
# mkfontscale
最後將fonts/fallback/fonts.scale檔的內容貼到fonts/fonts.dir
兩個檔案的第一行數字加總到fonts.dir內
大概是會長這樣:
# head fonts.dir
53
fireflysung.ttf -misc-ar pl new sung-medium-r-normal--0-0-0-0-p-0-big5-0
fireflysung.ttf -misc-ar pl new sung-medium-r-normal--0-0-0-0-p-0-big5.eten-0
fireflysung.ttf -misc-ar pl new sung-medium-r-normal--0-0-0-0-p-0-cns11643-1
fireflysung.ttf -misc-ar pl new sung-medium-r-normal--0-0-0-0-p-0-iso10646-1
fireflysung.ttf -misc-ar pl new sung-medium-r-normal--0-0-0-0-p-0-koi8-r
LucidaBrightRegular.ttf -b&h-lucidabright-medium-r-normal--0-0-0-0-p-0-iso8859-1
LucidaBrightItalic.ttf -b&h-lucidabright-medium-i-normal--0-0-0-0-p-0-iso8859-1
LucidaBrightDemiBold.ttf -b&h-lucidabright-demibold-r-normal--0-0-0-0-p-0-iso8859-1

有了上面幾行中文的定義,就不會找不到中文字行了

2007年12月1日 星期六

Thinkpad X61 Gentoo Linux 安裝筆記

安裝過程一切還好,除了一些特殊鍵需要調整
Fn+F1~F12, Home, End等
安裝acpid還有修改 /etc/acpi/default.sh 然後去分析抓到的 event
ibm/hotkey HKEY 00000080 0000xxxx

有用到工具
  • suspend的s2ram待機
  • acpid for Hotkey
  • xrandr 2.0 for Video switch
  • xbacklight for Brightness control
  • xmodmap for MultiMedia key
  • ndiswrapper for Wireless AR5007EG (可用新的branch/hal-0.10.5.6 or testing就有支援)
  • KNetDockApp for Netflow monitor
  • KNetworkManager for auto-network configuration
  • KPowersave for battery control
  • tp_smapi for hdaps, detail battery info
  • gtk-qt-engine for KDE佈景主題套用到GTK的程式
xorg 設定:
$ X -configure
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "ExplorerPS/2"
Option "Device" "/dev/input/mice"
#The follow setting is used for ThinkPoint
#EmulateWheel: because ThinkPoint has no scrolling function like normal mouse(ZAxis), we need to emulate this.
Option "EmulateWheel" "on"
#EmulateWheelButton: when button(mid) is press, start the wheel emulation.
Option "EmulateWheelButton" "2"
#Mapping mouse XY moving to button 4 5 6 7 (scroll X, scroll Y)
Option "XAxisMapping" "6 7"
Option "YAxisMapping" "4 5"
#Mapping normal mouse, which has scroll function(it will generate ZAxis moving event), to button 4 5
Option "ZAxisMapping" "4 5"
EndSection
說明:
在X-Window中,按鍵6 7代表水平的捲軸,4 5代表垂直的捲軸
因此在ThinkPoint中,配合按鍵2的模擬,本來滑鼠的移動就對應成XY軸的捲動
而本來就有滾輪的滑鼠,他在滾動時會產生X-Window中的Z軸動作
因此把這些動作對應到4 5就代表這些事件會由X-Window的垂直捲軸處理
不過X軸的對應會使Firefox變成上一頁/下一頁的效果...因此必須取消Firefox對水平軸的處理要設定mousewheel.horizscroll.withnokey.action=0

Opera在水平滾動時也可能發生「前進」、「後退」等操作,修正方法為: 菜单中:工具->首选项->高级->快捷键->鼠标设置->Opera Standard->编辑


在彈出的窗口中: 
Application->Button6->删除->Button7->删除

確定后,選中Opera Standard(已修改),一路確定即可。


**更新 @ 2008-09-29**
新的 xorg-server => 1.4 支援裝置隨插即用功能 (上面的設定可以省去摟)
他會透過 evdev 驅動向 hal 取得支援輸入的硬體並自動設定,更好的是支援所有按鍵!!
這使得 xorg.conf 的設定可大幅減少,可以省去整個 InputDevice 的設定讓他自己抓
不過會發現 ThinkPoint 的捲軸功能不見了,這是因為直到寫這篇文章的 evdev 版本 2.0.5
都還沒有支援 EmulateWheel 的功能,必須安裝 x11 overlay 中 git 版本才有效 (2008-09-29)
然後設定的部份改到 hal 中,而非 xorg.conf 了 (參考5)
並增加 /etc/hal/fdi/policy/99-x11-mouse.fdi:
(ps.以下為XML檔案,如果看不到請參考網頁,並加入部份的設定)

<?xml version="1.0" encoding="utf-8"?>
<deviceinfo version="0.2">
  <device>
    <match key="info.product" string="TPPS/2 IBM TrackPoint">
      <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
      <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
      <merge key="input.x11_options.XAxsisMapping" type="string">6 7</merge>
      <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
      <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
    </match>
  </device>
</deviceinfo>


多媒體按鍵設定:
編輯 ~/.Xmodmap
keycode 166 = XF86Back
keycode 167 = XF86Forward
keycode 173 = XF86AudioPrev
keycode 174 = XF86AudioStop
keycode 172 = XF86AudioPlay
keycode 171 = XF86AudioNext
keycode 123 = XF86AudioLowerVolume
keycode 122 = XF86AudioRaiseVolume
keycode 233 = XF86MonBrightnessUp
keycode 232 = XF86MonBrightnessDown

按鍵名稱參考: /usr/share/X11/XKeysymDB
keycode 參考 xev 程式所取到的值

ps,好像更新 BIOS 或是驅動還是什麼的會使對應的keycode變更???

螢幕亮度調整:
新版核心中的 thinkpad-acpi 須在載入時附加參數 brightness_enable=1
並且 echo 0xffffffff > /proc/acpi/ibm/hotkey 啟動所有的 hotkey
這樣當按下 Fn+Home/End 調整螢幕亮暗時,變可以產生 keycode 232/233
並對應到 XF86MonBrightnessUp/XF86MonBrightnessDown 然後由 thinkpad-acpi 控制亮度調整
**更新 End @ 2008-09-29**

一些xorg的小提示:
有時候修改/etc/fonts/conf.d時,可以透過以下指令讓接下來開啟的 X apps 套用新設定
xset fp rehash
又如果有手動安裝新字型,需要用 (root) fc-cache -frv 重新更新字型的資料庫

dbus,hal,ntfs-3g:
http://gentoo-wiki.com/HOWTO_D-BUS,_HAL,_KDE_media:/
http://gentoo-wiki.com/HOWTO_NTFS_write_with_ntfs-3g#Adding_.2Fsbin.2Fmount.ntfs_is_more_easier_.28hal-0.5.9.1_or_later.29

compiz-fusion

http://wiki.gentoo-xeffects.org/Compiz_Fusion
安裝好後可以選擇Window Decoration
ps. kde預設session save功能會倒置 compiz 的 Window Manager出問題
因此要到控制中心改每次都開始新的 session 才不會出錯
還有要在CompizConfig Settings Manager的視窗裝飾的命令指定要用的WM
1. kde-window-decorator --replace 可以看到本來kde的主題
2. /usr/bin/emerald --replace 可以用 compiz-fusion 的,比較好看

取消NetworkManager自動改hostname:
# vi /etc/dhcp/dhclient.conf
send host-name "ppc";
supersede host-name "ppc";

還嫌 gentoo 不夠快嗎!?
See this [HOWTO] Flying with gentoo

參考1. http://gentoo-wiki.com/HARDWARE_Lenovo_Thinkpad_T61
參考2. http://yyhh.org/blog/2007/10/thinkpad-x61-hotkeys-solution-debian-linux
參考3. http://wiki.compiz-fusion.org/
參考4. 一些改過的檔案: http://fcu.ppcsite.info/linux
參考5. 新版 xorg 的 evdev 設定 http://gentoo-wiki.com/X11_Mouse/Xorg_7.3
參考6. 配置Trackpoint的中鍵滾輪功能 

2007年11月29日 星期四

百萬年薪的醒思

一個36歲竹科RD主管寫的文章 ~ 有點好笑,但很寫實

國中為了高中聯考補習,有的人國一就在補了。
到了高中或高職,為大學聯考補、為四技二專補,
念了大學,發現大學生多了,又去補研究所。
一補就是大二補到大四畢業。
念了研究所以為可以輕鬆了,發現老師每天都在找人作奴隸,
每晚待在研究室裡一待就是十六個小時。
研究所畢業以後,進了上市公司當了RD工程師。
以為人生終於可以享受努力換來的果實了。

結果呢…

早上八點半上班晚上12點半下班,一個月六萬多…。不知不覺已經三十六歲了!

如果你問我過去這三十六年來可以回憶出些什麼?
我想了很久…

我可以告訴你十二歲以前~我只記得考試沒有滿分少一分打一下。

十六歲以前,我只記得~ 老媽每天說沒有考上雄中你就不要做人了, 還要每天被迫穿上雄中的校服睡覺。

十八歲那年~~~
我覺得我愛上了每天和我一起等公車的雄商女孩, 鼓起勇氣向她搭訕的時候,她告訴我~~~ 我背後的男生! 已經向她告白了(高雄高工的)。
媽媽說沒關係等你考上一流的大學,會有很多女生倒追你。
我不知道什麼是一流的大學,我只知道~~~
哪一所大學女生多就是我心中的第一志願。

十九歲那年~~~ 夏天高高興興的吃完補習班的慶功宴,
想要回家填志願卡。
心想終於可以到輔大享受~~~ 「所有的男人都會犯的錯」時。
媽媽說你給我念交大!

當我大三那年我仰望著天空大喊~~~史密斯阿你的電子學是寫給鬼看的啊!

碩一那年遇到了我小學同學在~~~
中正路開修車場,雄工畢業一個月十二萬…

退伍之後在竹科一家小公司上班~ 愛上了當時的總務科小姐,猶豫了兩年~
決定展開行動時,她拿出一張喜帖給我…於是我離開了公司(傷心地!)

今年我36了…
沒交過女朋友、沒騎機車載過女生、沒和女生握過手~
沒有愛情…只有每天面對一台~
Viewsonic555的TFT螢幕,喀喀喀喀的鍵盤聲。

之前,我po的文章得到大家的熱烈迴響,可是可能因為我文筆不好, 很多人以為我是感慨沒有女朋友,而看不出我文中所想表達的意思。
就在我寫這篇文章的時候正好是早上12460; T點,我正在準備明天中午的午餐會報的資料。
你知道這就是RD部門主管的生活,你們知道嗎?

就在剛剛我在樓下買了一包七星和一杯咖啡, 仰望著天空看著星星。 說實在的我有時真的覺得自己是不是應該~
自殺重新投胎,免得時時刻刻被寂寞所凌遲轟炸…

回想起小時候功課沒有滿分,學校是少一分打一下,回到了家裡還要再被打一次。

到了國中,念了不知道為什麼叫A段班的奇怪班級~ (那時還有能力編班)。
國中的生活,似乎就是為了考高中而活。
念了高中似乎又是為了考上一流的大學而活。
考上了大學,以為人生真的開始舒服平坦了。

也不知道老媽是聽了那個王八蛋說: 念電機最好考研究所的奇怪意見。 又被抓去考研究所。

我這一生好像就是為了升學為了考試而活著,
我很想問學校的老師為什麼要念那麼苦?
也很想問我老媽為什麼要我念第一志願?
可是我聽到的答案永遠都是~~~ 「為了你的前途為了你的將來!」

就是因為這句話,我從小被教育成~ 以為那些沒考上大學的或是沒念好學校的, 將來一定要吃苦,將來一定要靠勞力吃飯。
「將! 來」一定…沒好下場…

就如同很多版上, 所謂的一流大學一流科系心中所想的一樣…
但事實的情況和你想的會很不一樣。可是我不知道所謂的將來要多久, 我等了36年…

就如親朋好友所預期的,一家上市公司的~
小主管一年,一百五十萬的年薪。
一台LEXUS3000休旅車、
一棟 46坪 位於市區的公寓房子、
一堆股票、一堆存款以及「自己一個家」

也許很多人會羨慕我小有成就,
但是我想告訴你這不是幸福,更不是快樂。

當你們瘋狂的追族著名校的研究所,瘋狂的期待將來有著百萬年薪、名牌轎車時,你的下場十分有可能像我一樣。
因為這些奢侈的物質生活,對許多RD而言,根本連去使用的時間都沒有。

況且,如果沒有一個心愛的人,
陪你一起享受這一切,那麼…
一切的努力都將是毫無無價值的…
因為當你到了我這個而立之年時,你會恍然覺得~
你將一生最寶貴的青春架構在自己的痛苦上。
去追求人人稱羨的名利是多麼不值得…

該玩樂的時候就要玩樂,該睡的時候就要睡,
該交女朋友的時候就要去追!
不要把自己的生命浪費~~~
在課本考! 試還有補習班上面,
不要羨慕那些所謂的科技新貴、
什麼股票分紅百萬年薪之類的。
那些只不過是老闆吸乾你的血液之後~~~
吐回一點給你而已,沒什麼了不起的…

難道真的要念研究所…
真的要念台、清、交、成
真的要當RD才能賺大錢嗎?
你們真的認為台灣的經濟不景氣嗎?
不要被媒體騙了,找工作沒那麼難,
百萬年薪,只要努力,各行各業比比皆是!

順便告訴你們一件事,
當年我們班上只要待在RD部門的不是未婚~
就是離婚,還有一個更慘…孩子的老爸不是他…

學多懂多,懂多煩多,煩多想多,
想多做多,做多付多,付多拿多,
拿多花多,花多吃多,吃多病多,
病多日子不多,
最好還是別管那麼多,開心多多!

願意留下來跟你爭吵的人,才是真正愛你的人!

2007年11月28日 星期三

C語言中 union 用法

今天上C語言課的時候,老師突然問我怎麼把 float 在記憶體裡面的值印出來,當時我第一個想到的方法是先把變數存成 float,然後用 memcpy 複製到 char[4] 的陣列裡,然後從第四個開始 (因為x86是 Little Endian 排列) 印出來,就可以看到 float 在記憶體裡面存放的方式 (IEEE 754),參考程式如下:
int i;
float num=-1;
unsigned chat n[4];
memcpy(n, &num, sizeof(float);
for(i=3;i>=0;i--)
  printf("%x ", n[i]);

除了這方法外,老師另外告訴我一個 union (同構) 的方式,他的原理就是把同一塊記憶體,以不同型態的方式去看待他,有點像 OO 裡的 polymorphism。
老師說當初發明這個的用途是因為以前記憶體空間比較不足,因此許多變數共用同一塊記憶體比較節省,不過還有一個功能就是實現類似 OO 的 polymorphism,這點我還不是很清楚,以下就第一點先做範例說明:

int i;
union {
  float num;
  unsigned char n[4];
  } q;
//q.num=4;
q.num=-1;
for(i=3;i>=0;i--)
  printf("%x ", q.n[i]);

可以得到一樣的結果
IEEE 754:
-1 = -1.0*2^+127 = 1,0111 1111,0000...23個
所以結果: 1,011=B, 1111=F, 1000=8, 0000....=0,00,00 ==>BF800000

2007年11月15日 星期四

netbeans 寫的 jsp 放到 tomcat 需要額外 jar 檔

作個筆記,不知道是 linux 版的 tomcat 有漏 jar 還是 java 版本問題
如果不手動把這兩個 jar 放到 tomcat 的 common/lib 就不能跑

第一個是 ant.jar (from netbean directory) , 另外一個是 tools.jar (from JDK)

一開始錯誤是:
exception
javax.servlet.ServletException: org/apache/tools/ant/BuildException org.apache.jasper.servlet.JspServlet.service(JspServlet.java:256) javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
root cause
java.lang.NoClassDefFoundError: org/apache/tools/ant/BuildException

放 ant.jar 後會有第二個問題:
org.apache.jasper.JasperException: Unable to compile class for JSP
This can usually be solved by copying manually $JAVA_HOME/lib/tools.jar from the JDK

2007年11月14日 星期三

使用 ssh tunnel 輕鬆穿越 firewall 限制

在某些公司內,會限制只有port 80可以連線,那如果你要上 bbs or msn 不就沒則了...
透過ssh tunnel可以把封包重新加密打包,並透過指定的 port 連出去

在 Windows 上建立通道

詳細圖文說明可參考 Jamyy's Weblog - PuTTY - SSH Tunnel 運用備忘

在 Linux 上建立通道

$ssh -N -f -L 9000:dst_server:1234 user@mid_server

-N 參數的用途是"不建立shell"

-f 參數的用途是"連線後執行於背景"

-L 把本機的9000透過 midserver 導到 dst_server 的 1234

輸入完密碼後即會回到原來的shell,建立Tunnel之後的操作就跟前面差不多了。

$ssh -N -f -D 1080 user@mid_server

-D 在本機port 1080 建立 sock ,然後 client app 連線時必須使用 sock 連接到本機 port 1080
支援sock proxy的程式,如:msn 可以用這種方式比較簡單,不需要額外設定 port forwarding

2007年11月12日 星期一

apache 2.2 的 FancyIndexing (Indexes) 預設編碼設定

升級到 apache 2.2 以後,如果資料夾沒有 index.htm,apache 就會自動產生目錄列表
但是會發現他是亂碼,因為它使用 ISO-8859-1 ......=.=|||
而且不論你加上 AddDefaultCharset 是什麼,他就是 ISO-8859-1,怎樣都改不掉
要使他正確使用 Big5,原來是要從 IndexOptions 下手 =.=|||
看範例:


重點只有 IndexOptions Charset=Big5

這樣就 ok 了

終於搞懂 sudo 了

原來 sudo 不只有我想像的這麼多而已
相關連結可以參考 鳥哥 的網站
主要用途在於多人管理同一台主機的時候,可以依照每個人負責領域的不同
而各自有其相對應的部分 root 權限
舉例來說, 管 DNS 的人,大概只會動到以下需要 root 才能執行的指令
  • 重新啟動服務: /etc/init.d/named
  • 修改設定檔: /usr/bin/vim /var/named/*
這時就可以考慮用 sudo 限制他可以以 root 身分執行以上兩個命令,其他的不行
User_Alias DNSMASTER = vbird, dmtsai
Cmnd_Alias DNSCMD = /etc/init.d/named, /usr/bin/vim /var/named/*
DNSMASTER ALL = DNSCMD
visudo 指令格式說明:
使用者或Alias 從哪裡登入=(允許以這個身分執行,缺省值是 root) 指令1,指令2:(允許以這個身分執行,缺省值是 root) 指令3,指令4:...

參數說明:
-l 顯示出自己(執行 sudo 的使用者)的權限
-v 因為 sudo 在第一次執行時或是在 N 分鐘內沒有執行(N 預設為五)會問密碼,這個參數是重新做一次確認(update the user's timestamp),如果超過 N 分鐘,也會問密碼
-k 將會強迫使用者在下一次執行 sudo 時問密碼(不論有沒有超過 N 分鐘)
-b 將要執行的指令放在背景執行
-p prompt 可以更改問密碼的提示語,其中 %u 會代換為使用者的帳號名稱, %h 會顯示主機名稱
-u username/#uid 不加此參數,代表要以 root 的身份執行指令,而加了此參數,可以以 username 的身份執行指令(#uid 為該 username 的使用者號碼)
-s 執行環境變數中的 SHELL 所指定的 shell ,或是 /etc/passwd 裡所指定的 shell
-H 將環境變數中的 HOME (家目錄)指定為要變更身份的使用者家目錄(如不加 -u 參數就是系統管理者 root )
command 要以系統管理者身份(或以 -u 更改為其他人)執行的指令
範例:
$ sudo -l 列出目前的權限
User ppc52776 may run the following commands on this host:
(cocolee) ALL
(ppc52776) ALL
(root) /bin/su -

不過我 來源設定 好像都不能運作??只有設定為ALL的會顯示出來

完整範例:

設定:
$ visudo
User_Alias ADMINS = ppc52776, admin2
User_Alias WEBADM = webadmin1, webadmin2
#以下允許ADMINS直接 su - 到 root
ADMINS ALL=/bin/su -
#以下允許 WEBADM 以 root 啟動apache,並以 apache 編輯網頁
WEBADM ALL=/etc/init.d/apache:ALL=(apache) /bin/vim /var/htdocs/*

結果:
webadmin1@www: $ sudo -l
User webadmin1 may run the following commands on this host:
(root) /etc/init.d/apache
(apache) /bin/vim /var/htdocs/*

啟動apache: sudo /etc/init.d/apache start
改網頁: sudo -u apache vi /var/htdocs/index.htm

其他注意事項:
  • Alias必須全為大寫字串
  • 允許執行的指令,必須為完整路徑
  • 允許執行的指令,sudo 只會檢查到你允許的部分,後面他要加什麼參數都可以
  • 如以上範例 /etc/init.d/apache ,他後面可以自行接 start or stop 的參數
所以好好善用 sudo ,可以方便規劃每個管理員有各自該有的權限,而不用每個人都需要知道 root 密碼
其他範例: http://www.study-area.org/tips/sudo.htm

2007年11月2日 星期五

扁平足要當兵 坐著操作武器!?

跑不快的扁平足役男明年起也要接受徵召當兵了!不過軍方說,不用擔心,新兵訓練時,如果不能跑,就改拉單槓也一樣﹔服役時也不用怕,扁平足役男有車可搭,不用行軍,坐著操作武器就可以!國防部說,這項政策是為了維持兵役公平性。

 國民黨立委林郁方一日在立法院爆料,指國防部因為役期縮短導致兵源不足,目前計畫以修改體位區分標準方式,徵召原本因扁平足、近視和身高體重未達標準而服替代役的役男,在明年開始改服常備兵役。

 對此國防部證實,目前預估明年將以此方式補充五千多名兵員。

 無法跑 新兵訓練改拉單槓

 林郁方在會後還透露,國防部除了預備修改「體位區分標準」外,九十七年也打算暫停辦理「常備役體位役男以專長改服替代役」,用以增加服兵役的人數,預估受影響人數為一千八百至三千人,因此九十七年原本服替代役的役男,到時候可能改服一般常備兵役的人數,總數恐將高達八千餘人。

 對於扁平足役男如何能順利通過新兵訓練包括跑步等測驗,國防部常務次長林於豹在會後表示,扁平足若無法跑步,新兵訓練可以改拉單槓,國軍目前包括陸軍機步旅等單位,都已經改成搭車,沒什麼機會行軍,機動時也不絕會只有扁平足搭車、一般士兵走路狀況,現在已是高科技部隊,士兵最多是進入戰鬥位置前要跑步,距離也不遠,其他都是武器操作而已。

 林於豹在答覆林郁方質疑時也說,體位改變的考量是作戰形態改變,以前對軍人的要求,現在可能不適合,以前步兵作戰為主,扁平足是很大問題,現在進入高科技,扁平足股兵役沒問題也維持兵役公平性。

 變更體位 初估影響五千人

 國防部人力司長王木榮答詢時坦承,軍方確實準備明年修改體位區分標準,將部分替代役體位變更為常備役乙等體位,不過對於扁平足、近視、身高和體重四項的體位劃分,目前還未訂出具體標準,只是粗估有五千多人。

 對於這項改變,林郁方痛批軍方,有問題兵員大量留在軍中,部隊管理與訓練問題會更多,戰力怎麼會夠?進部隊的不是變成愈來愈不堪用的人?他炮轟民進黨,一方面為拚大選操弄募兵制,另一方面把體格未達兵役標準的替代役男大舉拉進軍中,讓這些體格條件無法服兵役的青年成為民進黨拚選舉的犧牲品!

2007年10月26日 星期五

apache2 + svn + virtual host + mysql auth

之前寫過一篇類似的文章,可是在apache 2.0 好像沒有辦法跟 Virtual Host相處融洽,不知道是設定錯了還是怎樣
後來升級到apache 2.2以後,想說在來試試看,結果竟然可以用了說
另外還可以結合 mod_auth_mysql ,實現 apache 透過 mysql 認證
下面LimitExcept定義只要屬於這個 Location 都必須要是 valid-user ,間接也達到認證目的
mysql 中只要定義 user_name 和 encrypt 加密的 user_passwd 即可

請看下面的設定

<VirtualHost *:80>
ServerName svn.xxx.xxx
DocumentRoot /tmp
<Directory /tmp>
Allow from all
</Directory>

<Location />
DAV svn
#SVNPath /var/svn/repos
SVNParentPath /var/svn
SVNListParentPath on
AuthType Basic
AuthName "Subversion repository"

#setting authfile to /dev/null stop apache error log
AuthUserFile /dev/null
AuthzSVNAccessFile /var/svn/conf/svnaccessfile
#mysql
AuthBasicAuthoritative Off
AuthMySQLUser apacheauth
AuthMySQLPassword apache
AuthMySQLDB auth
AuthMySQLUserTable users
AuthMySQLNameField user_name
AuthMySQLPasswordField user_passwd

# <LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
# </LimitExcept>
</Location>
</VirtualHost>

這樣以後只要用 http://svn.xxx.xxx/rep_name 就可以看到相對應的 svn 資料庫
不用像之前 http://svn.xxx.xxx/svn/rep_name 連結上比較 make sense !

用 C 寫 LinkList

google貼程式碼都會怪怪的
請參考以下連結看完整程式碼
http://fcu.ppcsite.info/LinkList.txt

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...