模擬 PHP 的 getopt()

Aug. 16, 2008 / All(全部), Digitalk, 我寫(改)的程式 / Author: 可愛柚爸 / Comments: (10)

PHP 的 getopt() 可以抓取命令列的參數,但是很不幸的,目前的 PHP 5.2.6 還沒有完整支援 getopt() 的所有功能,比如說 long options 就不支援,要等到 PHP 5.3.0 才有完整的支援。但是我最近寫程式的時候要用到這種功能,又等不及 5.3.0,就只好自己寫了一個 _getopt() 來代替。

繼續閱讀 “模擬 PHP 的 getopt()”

在 unix 下使用 shell script 更改現行目錄

Sep. 15, 2007 / All(全部), Digitalk, 我寫(改)的程式 / Author: 可愛柚爸 / Comments: (0)

有一位老同學從美國回台灣出差,昨天見面的時候,他問了我一個問題:「能不能跑一個 shell script 來更改現行目錄?」想要這樣做的理由是他會常進好幾個目錄,每次都要打 cd xxx 很麻煩,想說執行一個 shell script,就會跑出一個像這樣的選單

[0] /abc
[1] /work/install/content
[2] /opt/work/ath
…..

然後按 0, 1, 2 … 來選擇 cd 到那個目錄去。

繼續閱讀 “在 unix 下使用 shell script 更改現行目錄”

續:有從無名搬家到無名的程式嗎?

Apr. 01, 2007 / All(全部), Digitalk, 我寫(改)的程式 / Author: 可愛柚爸 / Comments: (2)

前兩天提到了要幫小姨子找一個 從無名搬家到無名的程式 ,不過把這個問題 po 在批踢踢上,奚落者多而給建議者少。後來看到了一支程式 copyblog.pl 可以把別的部落格的內容同步到無名,想說改一改那個程式應該就可以了。

改程式不是問題,問題是我完全不會 Perl,我會寫 C/Bourne shell script/PHP 的程式,但是就不會 Perl,連 Perl 的 if 語法都不會、連 Perl 裡能不能用 $a++ 都不知道,還要面對 XML 的處理和 WWW::Mechanize 的折磨,只好一邊看 CPAN 上的文件一邊改程式,實在很累。

不過很糗的是,隔了兩天,我的小姨子改變主意,不打算把舊的部落格搬到新的去,所以這程式算是白寫了。只是既然寫了,還是放出來吧,也許以後還有別人會用到。

這個程式會做以下事情:

  • 將舊網誌的所有文章分類(不包含分類目錄)複製一份到新網誌上(需要先刪除新網誌的所有文章分類)
  • 將舊網誌的所有文章複製到新網誌上,而且舊文章的 PO 文時間、標題、置頂、允許回應、文章保護方式 、文章分類等屬性都會保留。
  • 舊文章的所有回應會以正文方式留在新文章裡,所以原本有 10 篇回應,在新文章的回應數將會是 0,但是在新文章裡還是可以看到這些舊回應。

注意,本程式會用到三個 perl modules: WWW::Mechanize 、 XML::Parser 、 Text::Iconv。

程式請 於此下載,使用方法如下,

1. 在原來的無名網誌上,點「網誌管理」,在最下面有一個「下載網誌備份檔案」,點後面的下載,就會下載一個 .xml 檔。

2. 把這個 .xml 檔和 wretch_to_wretch.pl 放在同一個目錄。

3. 修改 wretch_to_wretch.pl 裡的幾個設定值,

my $wretch_user = ”; <== 新網誌的使用者名稱
my $wretch_password = ”; <== 新網誌使用者的密碼
my $wretch_original_xml_file = ”; <== 舊網誌的備份檔案

4. 刪除新網誌的所有文章分類

5. 執行 wretch_to_wretch.pl 即可。

小軟體:在 Solaris 下更好用的安裝 patch 程式

Mar. 10, 2007 / All(全部), Digitalk, 我寫(改)的程式 / Author: 可愛柚爸 / Comments: (0)

myinstallpatch (<– 點此下載),是我很多年以前寫的一個小程式,可以在 Solaris (2.5.1 – 10)的環境下比較人性化的安裝 patch。

繼續閱讀 “小軟體:在 Solaris 下更好用的安裝 patch 程式”

小軟體:讓 root 在 Solaris 下快速修改使用者密碼

Mar. 02, 2007 / All(全部), Digitalk, 我寫(改)的程式 / Author: 可愛柚爸 / Comments: (0)

my_pw (<– 點這裡下載)是我很久以前寫的一個小程式,這兩天在備份資料的時候不小心看到,想說分享出來,也許有人會用到。在這裡特別講一下,我個人相信這個程式在 linux 和 freebsd 上也可以正常的執行,但是我沒有這樣的機器,所以沒辦法確認,有興趣的人可以試試,請再告訴我你測試的結果。

我的目標是讓 root 在 Solaris 下可以「不」透過互動模式來修改使用者密碼,直接在命令列裡指定密碼,達到快速修改使用者密碼的目的。

舉個例子,底下是一個很標準的改密碼方式, root 執行 passwd yoyo 來改 yoyo 的密碼,系統會先問密碼要改成什麼,然後要你再打一次,

# passwd yoyo
New Password: <— 這裡要打一次密碼
Re-enter new Password: <— 要再打一次密碼
passwd: password successfully changed for yoyo
#

(最後,再手動記下 yoyo 的密碼,並且告訴 yoyo 他的密碼是什麼)

這樣改密碼,改一個是還好,但是如果一次要改500個密碼豈不是當場掛了?也許你會問,什麼時候會需要一次改500個密碼?可以想到的幾個情形是,

  • 學校開學的時候會大量新建帳號,每個帳號都要有一個密碼。另外,針對每個帳號,要把帳號名稱和密碼印下來發給這些新使用者
  • 某使用者的帳號遭盜用,有可能需要緊急更改所有使用者的密碼
  • 為了某些原因,將幾個帳號移轉給一群人使用,事後要將密碼改回來
  • …..

使用 my_pw,想要快速修改使用者密碼就不難了,只要執行 my_pw yoyo yoyo123 就可以把 yoyo 的密碼改成 yoyo123 ,

# my_pw yoyo yoyo123
Password has been successfully changed for user “yoyo”

加上 -v 的話,就會顯示出剛剛設定的密碼,很適合把這段結果印給 yoyo,

# my_pw -v yoyo yoyo123
Password has been successfully changed for user “yoyo”, password is yoyo123

執行這個指令的時候也可以不指定密碼,程式會隨機產生一個密碼指定給這個使用者(要 Solaris 8 或以上),

# my_pw -v yoyo
Password has been successfully changed for user “yoyo”, password is aSaamJbx

如以上所述,這個程式讓 root 可以快速修改「一個」使用者的密碼,所以如果想要大量修改使用者密碼,很容易,再寫一個 shell script,用 for/while 的方式來執行 my_pw 就可以了。

以下提供一個很簡單的範例,增加 53 個帳號並且隨機指定密碼,這 53 個帳號是 b7201001 到 b7201053,只要把底下這段程式碼存成一個檔案,加上執行的權限,再去執行這個檔案就可以了。有需要的人可以修改一下,想搞得多複雜都可以。

#!/bin/sh
#
# the example demonstrate a way to add 53 user accounts, from
# b7201001 to b7201053 and then set their password to a random string.
#
#

index=1

preceding=”b7201″

while [ "$index" -le 53 ]
do

account=`printf “${preceding}%03d” $index`
useradd $account
my_pw -v $account

index=`expr $index + 1`
done

執行了這個小程式之後,就會看到這樣的結果,
Password has been successfully changed for user “b7201001″, password is GQ3OUSTT
Password has been successfully changed for user “b7201002″, password is 0PADKsN4
Password has been successfully changed for user “b7201003″, password is t5LpQP0u
Password has been successfully changed for user “b7201004″, password is pUe0XCfi
…..
…..
Password has been successfully changed for user “b7201051″, password is An1xzQzU
Password has been successfully changed for user “b7201052″, password is 6DuOYAl9
Password has been successfully changed for user “b7201053″, password is gnWqjeTw

有農曆的網頁日曆軟體

Nov. 07, 2006 / All(全部), Digitalk, 我寫(改)的程式 / Author: 可愛柚爸 / Comments: (0)

由於有查農曆的需要,我一直想要一個可以查農曆的網頁日曆軟體,不但要查,而且要能夠記事,比如說記下岳父岳母以及老婆的農曆生日,這樣我才不會忘掉重要的日子。

不過找了很久都找不到這樣的軟體,能找到的軟體當中,最多只能顯示農曆的日子,卻不能依農曆日子記事,這真的很糟糕。

在沒有更好辦法的情況之下,我去修改了 WebCalendar ( http://www.k5n.us/webcalendar.php ) 這個算是很成熟而且很多人在用的軟體,測試了兩個多月,現在應該算是還可以用。

特點如下:

1. 在 calendar 上有顯示農曆 ( 陰曆, moon calendar, lunar calendar)日期。
2. 可以依農曆日期記事。比如說增加一筆「每年的農曆九月二日是岳母的生日」。
3. 每個日期旁邊都有兩個 ㊉ ,點左邊那個就是增加國曆記事,右邊那個是增加農曆記事。
4. 我把增加記事的預設等級改成「機密的」而不是原本的「公眾的」。
5. 這是一個 PHP 的程式,所以要安裝在可以跑 PHP 的機器上。
6. 本程式改自於 WebCalendar 1.0.4。

目前還有一些問題沒解決:

1. 一般日常使用都沒問題,但是如果要 export 出來的話,可能只能倒出國曆的資料,因為我沒這個需求,所以懶得動那段程式碼。
2. 目前能用的資料庫只有 MySQL ,因為我沒有 oracle, db2, …. 可供測試,所以只有去改 table-mysql.sql,其他的幾個資料庫檔案都沒修正。
3. 瀏覽器的語系只能用 UTF-8(我也只在 UTF-8 上測試過),否則會有亂碼。
4. 如果修改 calendar 裡的選項,把 language 改成非 UTF-8 的選項,就會看到一堆亂碼。

安裝方法:

1. 解開檔案之後會看到一個 calendar 目錄,這就是原本的 WebCalendar-1.0.4 目錄。
2. 接下來的安裝步驟請參考 WebCalendar 的安裝手冊,

http://www.k5n.us/webcalendar.php?topic=Documentation

3. 再次提醒,目前只支持 MySQL,所以最後一定要 import table-mysql.sql 這個檔案的內容。

本檔案可以在這裡下載: calendar.tar.gz

另外,我提供一個線上測試的版本:http://www.ntu.beautifulworldco.com/calendar/login.php 帳號是 test,密碼也是 test,歡迎來測試。

賺P幣的程式

Jul. 23, 2006 / All(全部), Digitalk, 我寫(改)的程式 / Author: 可愛柚爸 / Comments: (39)

在PTT上寫文章有所謂的P幣,標準是每一秒一字有一元。所以對打字快的人來說,打一篇文章所賺的P幣其實是比較少的。

我寫了一個賺P幣的程式,讓大家可以先打好要打的文章,選取複製了之後,到PTT的視窗上按 Win-Z (就是 windows 鍵 + Z),這個程式就會把剪貼簿裡的文字以每秒一字的速度貼上去,這樣打同樣一篇文章就可以得到比較多的P幣了。但是就我實際使用的結果,其實P幣只有理論值的一半左右,也許是現在改成一秒一字只有半元吧。

坦白說這其實是很無聊的一件事,而且在貼的時候電腦不能做其他的事,不過相信還是有人有這種無聊的需求,所以我還是放在這裡供有需要的人使用。

使用方法如下,
1. 裝 autoit 。(autoit 可以在 http://www.autoitscript.com/autoit3/ 下載)
2. 執行 ptt-2sec.exe(兩秒鐘貼一個字)或 ptt-1sec.exe(一秒鐘貼一個字)

特別注意:使用 pcman 的人請下載 ptt-pcman-2sec.exe (兩秒鐘貼一個字)或 ptt-pcman-1sec.exe (一秒鐘貼一個字)
3. 選取複製所要寫的文章,然後在PTT上按 Win-Z 就可以了。

一次調一格聲音大小的程式 by autohotkey

Jan. 24, 2006 / All(全部), Digitalk, 我寫(改)的程式 / Author: 可愛柚爸 / Comments: (3)

去年買了這台 laptop Fujitsu S6240,它和我以前用的不一樣,機身上面沒有兩個實體的按鈕來控制音量大小,所以要調大小聲的話得按 Fn + F8 或 Fn + F9,這實在很不順手,尤其是光線不明亮的時候,我常常會亂按一通,結果聲音大小沒調到,反而調到一些其他的東西,實在很痛苦。

這一台機器上面有四個圓圓的小按鈕,可以讓人設定按下去之後就去執行某一個程式。所以我的想法是,把其中一個按鈕設定為去執行一個可以把音量調大的程式(按一次調一小格),另一個按鈕設定為去執行一個可以把音量調小的程式(一樣,按一次調一小格)。如果可以,再把第三個按鈕設定為切換靜音/有聲 的話就更理想了!
所以我一直想找這樣的三個程式,其中一個程式是執行一次就會把聲音調大一格,一個程式是執行一次就會把聲音調小一格,另外一個程式是可以切換 靜音/有聲。最理想的情況是可以在 dos 下執行這些程式,執行的時候不會開啟任何視窗。這樣我按下這些按鈕就可以很順利的調整音量大小!

這兩天我在ptt問到了,autohotkey 正是我所需要的軟體!不過說實在,autohotkey實在是太複雜了,讓我看說明文件看得頭昏腦脹!還好我要的功能夠簡單,一行就結束了 :)

在此介紹一下作法,希望能幫助有類似需求的朋友。

1. 首先當然是要下載並安裝 autohotkey ( http://www.autohotkey.com/ )
2. 建立一個檔案 test.ahk,裡面放一行

#InstallKeybdHook

3. 執行 test.ahk,右下角會出現一個綠色的H,那就是 autohotkey 的常駐程式

4. 點開 autohotkey,選擇 View -> Key history and script info

5. 以我的筆電而言,我要按 Fn + F8 來調小音量,所以我就按 Fn F8

6. 在視窗裡就會冒出一行,這一行就是 Fn F8 所送出來的 virtual key 和 scancode,

AE 12E ……..

7. 另外開一個文字檔 voldesc.ahk,裡面放進這一行,

Send {vkAEsc12E} ;

9. 直接去執行 voldesc.ahk 就可以調小音量了!

10. autohotkey 還有一個很棒的功能,就是可以把這個 voldesc.ahk 轉成一個 .exe,
這樣就更方便了!