2007年12月22日 星期六

用 irssi 記錄每天的對話內容

每次想要加入新的聊天室頻道都會忘掉要重新查指令... >_<
還是來做個筆記好了~ ^_^

每次開啟 irssi 時自動加入聊天室頻道
/log open -autoopen -freenode -targets #channel ~/irclogs/freenode/channel/%Y/%m/%d

記錄聊天室頻道的對話內容
/channel add -auto #channel freenode

參考 http://www.jeffhung.net/blog/articles/jeffhung/742/

2007年12月7日 星期五

hiChannel 命令列點播器 v1.1.0

之前的 hiChannel.sh v1.0.0 是用很爛的結構硬刻出來的
昨天把 hiChannel.sh 改到 v1.1.0
整個結構變得比較有組織而且容易維護
而且可以選擇自己喜歡用的多媒體播放器
只要編輯該檔案最前面的部份

function media_player ()
{
#totem $1
#mplayer $1
gst-launch playbin uri=$1
}

看自己喜歡用哪個就把哪個打開其他的就 mark 掉
--
P.S. 另外~ 我在猜~ 如果知道 Mac OS X 怎麼使用命令列方式呼叫 QuickTime 的話~ 應該也是可以直接使用的~ 只是我不知道要怎麼在 Mac OS X 使用命令列呼叫 QuickTime~ 囧rz

2007年11月26日 星期一

hiChannel 命令列點播器

一時興起就忍不住寫了 hiChannel 命令列點播器 .... >_<
也是利用 GStreamer 來當播放引擎
所以還是要裝一堆有的沒有的才可以使用
如果是 Debian/Ubuntu 的話就裝上

$ sudo aptitude install gstreamer-tools gstreamer0.10-plugins-base gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly gstreamer0.10-ffmpeg gstreamer0.10-alsa

如果是 Fedora 的話就增加 http://rpm.livna.org
然後裝上

# yum install gstreamer-tools gstreamer-plugins-bad gstreamer-plugins-ugly gstreamer-ffmpeg

最後當然是下載點囉~ ^o^

http://fd.idv.tw/tux/hiChannel.sh

2007年11月18日 星期日

BetaRadio 的編譯安裝指引

因為自從換了一個新工作後可以自由地選擇使用自己喜歡的 Linux Distribution ^_^
所以我已經不太使用 Debian/Ubuntu 以外的 Linux Distribution 了
因此對於 Debian/Ubuntu 平台以外的使用者只能說聲抱歉了
沒有辦法製作你/妳們喜歡的 Linux Distribution 上面的 Binary Package
同時我是個追求新版本的怪咖,所以像是 Ubuntu 套件只包給 7.10
因為我也沒有 Ubuntu 7.10 以外的環境... ^^|
不過還是有熱心的 swyear 兄幫忙打包了給 openSUSE 10.3 用的套件 Betaradio 0.1.1 for openSUSE 10.3
另外如果你/妳們只想要在 Command Line 下不想要那麼複雜的套件相依性
我推薦你/妳們去使用 champ 兄寫的 Script Hinet radio script 20071112
或者是 pcman 的大作 Hinedo GUI 介面也是不需要複雜的套件相依性
不過因為還是有網友有在詢問要怎麼編譯安裝
所以我特地寫了一份編譯安裝指引文件在 InstallationFromSourceCode
給 Debian/Ubuntu & Fedora 6/7/8 的使用環境編譯

2007年11月11日 星期日

Beta Radio 加入免費電視功能

基本上 Beta Radio 是我自己練習程式的小品
所以如果平時使用上沒有什麼問題就不會去改它
這次因為 Hinet hiChannel 又換了提供免費廣播的網址
所以才又開始改程式... 然後改著改著就不小心把免費電視的功能給加進去了~ :P
不過因為還沒有弄清楚 GStreamer 元件間的相依性
所以目前還不打算放出正式版本
想要嘗鮮的朋友可以從 svn checkout 出來使用
只有基本的功能而且影像跟操作上似乎都還不是很順暢
就先這樣吧~ :P

2007年11月8日 星期四

從西元 2003 年到現在的無線網卡惡夢總算是過去了

從西元 2003 年買了我人生的第一台筆記型電腦
當時我挑了一台最便宜的筆記型電腦買下來
使用它所附贈的無線網路卡 ASUS WL-103b (PCMCIA)
裡面所使用的晶片組是 Broadcom 43xx
之後我就一直不斷地在跟這張討厭的無線網卡對抗... >"<
想盡辦法在 Linux 上使用這張無線網卡
最後我還是放棄了... Orz
因為這張網卡就是沒辦法在 Linux 上得到良好的支援
於是我才會不斷地關心著有怎樣的東西可以讓我舒服地享受無線網路
最後我找到了一個網址 http://atheros.rapla.net/
比對 PCHome 上面賣的無線網路卡 (PCMCIA)
終於給我找到一張無線網路卡 SparkLAN WL-611GS (PCMCIA)
才 NTD 399 就買下去啦~ 到手後馬上開 Ubuntu 7.10 起來~
果然是一開機就可以用了啦~ 啊~~~ 讚啦~~~ *^o^*

在 Ubuntu 7.10 上面安裝支援視訊的 Skype 2.0.0.13

首先把系統上面舊的 skype 移除掉
sudo aptitude remove skype

然後到 Download Skype for Linux 下載給 Ubuntu Feisty Fawn (7.04) 使用的版本
然後執行
sudo dpkg -i skype-debian_2.0.0.13-1_i386.deb

安裝過程中會出現
選中了曾被取消選擇的套件 skype。
(正在讀取資料庫 ... 系統目前總共安裝有 162814 個檔案和目錄。)
正在解壓縮 skype (從 skype-debian_2.0.0.13-1_i386.deb) ...
dpkg:相依關系問題使得 skype 的設定工作不能繼續:
skype 相依於 libqt4-core (>= 4.2.1)﹔然而:
套件“libqt4-core”沒有安裝。
skype 相依於 libqt4-gui (>= 4.2.1)﹔然而:
套件“libqt4-gui”沒有安裝。
dpkg:處理 skype (--install)時出錯:
相依關系問題 - 仍未被設定
在處理時有錯誤發生:
skype

有錯誤發生沒關係,接下來執行
sudo aptitude install

會出現
讀取套件清單中... 完成
了解套件依存關係中
Reading state information... 完成
Reading extended state information
Initializing package states... 完成
Building tag database... 完成
The following packages are BROKEN:
skype
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B of archives. After unpacking 0B will be used.
The following packages have unmet dependencies:
skype: 依存關係: libqt4-core (>= 4.2.1) but it is not installable
依存關係: libqt4-gui (>= 4.2.1) but it is not installable
Resolving dependencies...
The following actions will resolve these dependencies:

Remove the following packages:
skype

Score is 121

Accept this solution? [Y/n/q/?] n

第一個問題是問要不要移掉爛掉的 skype 選擇 n
接下來出現

Resolving dependencies...
The following actions will resolve these dependencies:

Install the following packages:
libqt4-core [4.3.2-0ubuntu3.1 (gutsy-proposed, now)]
libqt4-gui [4.3.2-0ubuntu3.1 (gutsy-proposed, now)]

Leave the following dependencies unresolved:
libqt4-gui recommends qt4-qtconfig
Score is -168

Accept this solution? [Y/n/q/?] Y

第二個問題問要不要把 libqt4-core 跟 libqt4-gui 給裝上去讓 skype 可以用,當然選擇 Y 囉
接者會出現
Writing extended state information... 完成
選中了曾被取消選擇的套件 libqt4-core。
(正在讀取資料庫 ... 系統目前總共安裝有 162932 個檔案和目錄。)
正在解壓縮 libqt4-core (從 .../libqt4-core_4.3.2-0ubuntu3.1_i386.deb) ...
選中了曾被取消選擇的套件 libqt4-gui。
正在解壓縮 libqt4-gui (從 .../libqt4-gui_4.3.2-0ubuntu3.1_i386.deb) ...
正在設定 libqt4-core (4.3.2-0ubuntu3.1) ...

正在設定 libqt4-gui (4.3.2-0ubuntu3.1) ...

正在設定 skype (2.0.0.13-1) ...
Processing triggers for libc6 ...
ldconfig deferred processing now taking place
讀取套件清單中... 完成
了解套件依存關係中
Reading state information... 完成
Reading extended state information
Initializing package states... 完成

這樣就可以把 Skype 2.0.0.13 給裝到 Ubuntu 7.10 上面了~
一切都要感謝強大的 Debian 套件管理系統~ ^_^

Skype 總算在 Linux 平台上支援視訊了

Skype 2.0 beta for Linux
Skype 總算在 Linux 平台上支援視訊了~ 喔! 耶! ^_^y
不過另外的問題是要找一台在 Linux 平台有良好支援的 WebCam 才行~ >_<

2007年11月7日 星期三

betaradio v0.1.1 package for Ubuntu 7.10 (Gutsy Gibbon)

雖然是在 Ubuntu 7.10 (Gutsy Gibbon) 上面打包的
http://betaradio.googlecode.com/files/betaradio_0.1.1-1_i386.deb
但是也不曉得在其他平台會不會有什麼問題!? @_@a
這次不是用 checkinstall
改使用比較正統的 Debian Package 方式~
不過因為也只是剛學習 Debian Package
所以不知道會不會打包的過程中有什麼疏忽掉的地方~ ^^a

tracker : metadata database, indexer and search tool

在 Ubuntu 7.10 上多了一個跑不停的程式 trackerd
稍微查一下就可以找到
Tracker is an advanced framework for first class objects with associated metadata and tags. It provides a one stop solution for all metadata, tags, shared object databases, search tools and indexing.
Homepage: http://www.tracker-project.org

但是顯然預設的情況讓人不太愉悅,所以要調教設定一下才行
[系統] -> [偏好設定] -> [Indexing Preferences]

如果不想要用的話可以把 [Enable indexing] 跟 [Enable watching] 都關掉

又或者是把 CPU 使用的優先序調低一些

這樣就不會在使用 Linux 桌面環境的時候老是被 tracker 影響到愉悅的心情~ :P

Beta Radio v0.1.1 released

該網站又改了 Radio 的來源位址了
可以在這邊下載 http://code.google.com/p/betaradio/downloads/list
有問題可以回報到 http://code.google.com/p/betaradio/issues/list
目前只有 source tar ball
binary package 的話就要等等囉~ :P

2007年10月19日 星期五

upgrade ubuntu 7.04 to 7.10

最近把手上 Ubuntu 7.04 的機器都升級到 Ubuntu 7.10 了
順便記錄了一下升級過程,也許會有一些參考價值吧~ :P
投影片過程

2007年9月24日 星期一

Beta Radio v0.1.0 的 Ubuntu 安裝包

在 Ubuntu 7.04 上面練習使用 checkinstall 做出來的 Ubuntu 安裝包
Download it

2007年9月7日 星期五

PCManX 用程式來畫 ASCII 方塊圖

PCManX GTK+ 0.3.6 多的新功能 一樣地來看圖吧~ :-D

VirtualBox Seamless Mode

VirtualBox 1.5.0 多了一個有趣的功能 Seamless Mode 直接看圖吧~ :-D

2007年9月2日 星期日

把 Gnome 桌面下的磁碟圖示關掉

執行 gconf-editor 找 apps > nautilus > desktop

不過這也會把熱插拔的 USB 磁碟裝置小圖示也都關掉

FON+ AP 其實沒那麼爛啦~ :-P

現在我在用的 FON+ 似乎變得比較穩定了耶...
真奇怪... @_@a
難道是我把 FON+ 一直插著電熱機好幾天的關係勒
總之它現在是穩定的使用了... :P

2007年8月23日 星期四

FON+ AP 爛死了~ >"<

我買了兩台上禮拜五就到手了
剛剛裝起來發現無線網路超級不穩
完全不能使用... 可以退貨嗎!?
第一代的 FON AP 還比較穩勒~ >"<

2007年8月22日 星期三

C/C++ Programming on Linux

網路上其實有不少 C/C++ Programming on Linux 的入門資料~
只是大部分都是英文的~ 所以想當然爾~
想要學習 C/C++ Programming on Linux 基本的英文閱讀能力是必要的~
我會建議初學者先去看
http://www.advancedlinuxprogramming.com/http://tldp.org/LDP/lpg/ 瞭解系統底層的架構
在學習的過程中參考 http://www.gnu.org/manual/manual.html 來當輔助
等到有一些瞭解之後再來學習 C/C++ GUI Programming on Linux
目前兩大主流是 GTK/C http://www.gtk.org/documentation.html 跟 Qt/C++ http://doc.trolltech.com/
學習的過程中最好能夠學會使用 Vim 或是 Emacs 或是 Eclipse
還有熟悉 Makefile 的語法跟一個版本控管系統 (cvs/svn/svk/git/bzr/hg)
熟悉使用 wiki 系統來做筆記能夠幫助學習
還有最好也把 Linux 系統當作平日的桌面使用環境
這樣才能夠事半功倍地學習 C/C++ Programming on Linux

2007年7月24日 星期二

Beta Radio v0.1.0 debian package

可以在這邊下載 http://code.google.com/p/betaradio/downloads/list
有問題可以回報到 http://code.google.com/p/betaradio/issues/list
ubuntu 應該也可以裝吧~ @.@a
感謝 kanru 的大力幫忙~~~ ^o^

2007年7月14日 星期六

喵的勒... 被 ubuntu 的 /bin/dash 錶到了... >"<

原本用 bash 的 /bin/sh 可以跑的 script 在 dash 的 /bin/sh 就不能跑了~ 會出現 "Syntax error: redirection unexpected" 的錯誤訊息~ >"<
Ubuntu 為了加速開機的速度使用了 dash 來取代傳統的 bash
/bin/sh -> /bin/bash 改成了 /bin/sh -> /bin/dash
雖然說 dash 體積有比較小開機時速度也比較快
但是在開機之後使用某些原本在 bash 環境可以正常使用的 script
換到了 dash 之後反而會出現一些莫名其妙的問題
對於想在 Ubuntu 上面開發程式的人會是一件非常討厭的事情
暫時的解決辦法就是設成 /bin/sh -> /bin/bash
為了加速開機的速度反而在其他地方產生了問題
反正改變傳統一定是會帶來問題的
遇到新問題再想個辦法來解決

2007年7月5日 星期四

Java 的外部命令

import java.io.*;
...
try {
Process p = Runtime.getRuntime().exec("ls");
String line;
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null)
System.out.println(line);
input.close();
} catch (IOException e) {
...
}
...

基本又實用... 先記下來... :P

2007年7月3日 星期二

JNI - Java Native Interface

The Java Native Interface (JNI) is a programming framework that allows Java code running in the Java virtual machine (VM) to call and be called by native applications (programs specific to a hardware and operating system platform) and libraries written in other languages, such as C, C++ and assembly.
... from the link

HelloWorld.java
class HelloWorld
{
public native int[][] multiply(int A[][], int B[][]);
static
{
System.loadLibrary("HelloWorldImp");
}

public static void main(String[] args)
{
HelloWorld test = new HelloWorld();
int[][] A = new int[5][5];
int[][] B = new int[5][5];
int[][] result = test.multiply(A, B);
System.out.println(result[0][0]);
}
}

然後使用 javac HelloWorld.java 產生出 HelloWorld.class
接下來再使用 javah HelloWorld 產生出 HelloWorld.h

HelloWorld.h
/* DO NOT EDIT THIS FILE - it is machine generated */

#ifndef __HelloWorld__
#define __HelloWorld__

#include

#ifdef __cplusplus
extern "C"
{
#endif

JNIEXPORT jobjectArray JNICALL Java_HelloWorld_multiply (JNIEnv *env, jobject, jobjectArray, jobjectArray);

#ifdef __cplusplus
}
#endif

#endif /* __HelloWorld__ */

再把 HelloWorld.c 寫出來
HelloWorld.c
#include "HelloWorld.h"

JNIEXPORT jobjectArray JNICALL Java_HelloWorld_multiply (JNIEnv *env, jobject obj, jobjectArray A, jobjectArray B);
{
jobjectArray C;
...
return C;
}

最後使用 gcc -Wall -g -shared -fPIC HelloWorld.c -o libHelloWorldImp.so
現在終於可以執行 Java 程式了
java -Djava.library.path=./ HelloWorld
使用 Java 來做跨平台程式開發
在關鍵部份再利用 JNI 來將平台特性最佳化

2007年6月29日 星期五

Beta Radio v0.1.0 released

PCMan 原本寫的 hinet-radio 一直改一直改
原本寫的部份有九成都被我改掉了~ :P
不過基本的框架還是 PCMan 原本寫的 hinet-radio
後來 PCMan 又 fork 出一份新的 GtkHiRadio
改成使用 perl 去動態 parse 電台撥放清單
底層還是使用 wget 抓資料跟透過呼叫外部的 MPlayer 來撥放音樂

現在我又 fork 出另外一個版本 Beta Radio
因為我之前一直使用 beta 來作為版號~ :P
為什麼要 fork 出另外一個版本呢... ?
因為個人興趣我把底層改成使用 libcurl 來抓電台
播放廣播的部份改成 GStreamer 來做
原始碼的部份改用 autotools (autoconf, automake, libtool, pkgconfig...) 的方法建構
還有整份程式碼都是使用 C 語言來寫的 (使用 GTK, GDK, GStreamer, Curl 等函式庫)
完全不使用外部命令 (ex. system(), exec() ...)
Beta Radio v0.1.0 還是有很多地方需要改進
例如: 更直覺的使用者介面, 錯誤處理, 程式註解, 美工圖片, 自動化更新選單, 多國語言化, 套件打包 ...

Source Code 目前放在 http://fd.idv.tw/betaradio/
以後會移到 http://code.google.com/p/betaradio/ 上面去
這個新專案授權為 GPL v2

P.S. 要裝上 gstreamer 的 ffmpeg plugins 才能夠播放廣播

2007年6月23日 星期六

fifo - first-in first-out special file, named pipe

mkfifo 可以製造出一個特殊的 pipeline 檔案
可以在 A process 讀取它
然後在 B process 將資料寫給同一個它
那麼在 A process 就可以讀取到 B process 傳過來的資料了
在不同的 process 間傳遞資料有一個特殊的名稱 Interprocess Communication 簡稱 IPC
而 pipeline 在 GNU/Linux 上只是其中一種 IPC 方法
有趣的是... :)
如果沒有 A process 打開讀取它 (open for read)
B process 先打開寫入它 (open for write)
這時候 B process 就會開啟失敗
想一想也挺合理的... :P
pipeline 本來就是把某處的資料傳遞到另一處
既然沒有資料也就無法傳遞
那麼 B process 的開啟失敗似乎本來就應該如此~

2007年6月22日 星期五

libtool's versioning system

Never try to set the interface numbers so that they correspond to the release number of
your package. This is an abuse that only fosters misunderstanding of the purpose of library
versions. Instead, use the -release flag (see Release numbers), but be warned that every release
of your package will not be binary compatible with any other release.

文件明明就是這樣寫的... 可是 GNU/Linux 的軟體就是把 -version-info 當 -release 使用... 真是搞不懂啊... XD

2007年6月18日 星期一

Windows Vista 隨機版可以降級安裝使用 Windows XP

http://www.microsoft.com/taiwan/licensing/faq.aspx
哇!真棒!微軟真是貼心的公司啊!
知道新版的 Windows Vista 不好用!
所以讓客戶可以選擇使用舊版的 Windows XP!

2007年6月10日 星期日

2007年6月6日 星期三

Hinet Radio 點播器 Beta3

咦~~~ 在應用程式裡面找到了一個 "Hinet Radio 點播器" 耶~ ^o^
還是一樣只有 Source Code 還是一樣不斷地在 Beta 中~ :P
http://fd.idv.tw/hinetradio/

2007年6月3日 星期日

Hinet Radio 點播器

最近 Hinet Radio 的收聽機制一直改
搞得我在 Linux 系統底下無法使用 champ 提供的 shell script 來收聽
http://tw.myblog.yahoo.com/champ_yen/article?mid=220
這段期間剛好想到 pcman 以前寫的一個小程式
http://moto.debian.org.tw/viewtopic.php?t=9903
基本上兩個都是利用 wget 跟 mplayer 就可以收聽 Hinet Radio
於是心生一計想要來自己改一個可以穩定使用的版本
http://fd.idv.tw/hinetradio/
現在只有改出 BETA 版本 (目前提供原始碼)
在 Gnome/Linux 下收聽是沒問題啦~
不過操作上還是會讓主程式當掉
只剩下 mplayer 在背景跑
如果要關掉的話必須 killall mplayer
最後要說一句 "I welcome to the patch."
還有 Linux 系統的使用者也是使用者啊~
不要排擠我們~~~ ~>_<~

2007年5月31日 星期四

Hinet Radio 的網頁又改版了~

所以線上收聽的 URL 又要改了... :P
#!/bin/sh

wmp_get()
{
wget -q --user-agent 'Windows Media Player' --referer=http://hichannel.hinet.net -O - $*
}

URL=$(wmp_get $(wmp_get http://hichannel.hinet.net/api/streamradio.jsp?id=177 | grep mms | cut -d '"' -f 2) | grep 203 | cut -d '"' -f 2)

mplayer $URL

郵件通知器

Linux 系統上的一個小工具
在 Ubuntu Linux 7.04 上只要下
sudo aptitude install mail-notification
就可以裝好了~

神奇的是... 這個小工具預設就有支援 Gmail 的使用... :D
當然還有檢查 POP, IMAP, System mailbox 都有支援

另外... 如果有使用 Evolution 郵件軟體的話
可以額外裝上
sudo aptitude install mail-notification-evolution
這樣就可以順便檢查 Evolution 上的郵件

裝好後可以在 [系統] → [偏好設定] → [Mail Notification] 調整設定

2007年5月28日 星期一

專為初學者規劃的 Debian 安裝方法

Debian for Beginners
這讓 Debian Etch 安裝的過程變得相當簡單~

1. 下載 debian-40r0-i386-businesscard.iso 燒成光碟
2. 使用光碟開機
3. 開機時使用 auto url=debian.org.tw
4. 分割硬碟
5. 設定帳號密碼
就這樣... 夠簡單吧~ :P
其實這是一個專為正體中文使用者而打造的中文環境
如果覺得燒成光碟太破壞地球資源的話
那麼應該考慮使用 USB Stick 來安裝
這樣上面的過程就會變成了
1. 下載 debian-40r0-i386-businesscard.iso 複製到 USB Stick
2. 使用 USB Stick 開機
3. 開機時使用 auto url=debian.org.tw
4. 分割硬碟
5. 設定帳號密碼
一樣地簡單安裝~ :)

2007年5月19日 星期六

使用 Linux 來報稅就是二等公民嗎!?

又到了報稅的五月了~
每年要報稅時總是要裝一次 Java Runtime Environment
因為報稅的網站需要裝 Java Runtime Environment 才能夠操作... !@#$%^&*()
還好在 Ubuntu Linux 7.04 底下安裝也不是多麻煩的事
sudo aptitude install sun-java6-plugin
裝是裝好了... 總算是可以開始填資料了吧...
tax
哇哩勒... !@#$%^&*()
有種讓人想要砸機器的衝動... >"<
媽媽樂勒... 使用 Linux 來報稅就是二等公民嗎!?

2007年5月14日 星期一

重新打包 deb 加上自己的 patch

首先是要安裝相關的套件
$ sudo aptitude install build-essential dh-make devscripts fakeroot dpatch patch diff patchutils dpkg-dev
這次目標的問題套件是 scim-chewing
$ apt-get source scim-chewing
進入解開的scim-chewing-0.3.1目錄
執行
$ dpatch-edit-patch 50_patch-from-fedora
開始盡情的修改程式要離開時再執行 exit 就可以了
結束後再將 50_patch-from-fedora.dpatch 加到 debian/patches/00list 之中
接下來呢~ 再使用 dch -i 來增加一個 debian 的 changelog
然後再使用 dpkg-buildpackage -rfakeroot 來產生 deb 套件檔
新產生出來的套件分別是
scim-chewing_0.3.1-1ubuntu5.diff.gz
scim-chewing_0.3.1-1ubuntu5.dsc
scim-chewing_0.3.1-1ubuntu5_i386.changes
scim-chewing_0.3.1-1ubuntu5_i386.deb
這樣應該就包好 deb 套件了... 不過 scim-chewing 在 ubuntu 7.04 上會讓 gnome-terminal 突然當掉關閉的問題還是沒有解掉啊~~~ XD

P.S. 我打包出來的套件放在 http://fd.idv.tw/ubuntu/7.04/

DynDNS IP 更新

自己有在使用 https://www.dyndns.com/ 的服務
因為有免費的 Domain Name 可以使用~ :P
剛剛寫了一個簡單的 Perl Script
打算放到 crontab 裡面定時跑一下來更新 IP
#!/usr/bin/perl

use warnings;
use strict;
use LWP::Simple;

my ($username,$password,$hostname) = qw(username password some.domain.name);

my $html = get("http://checkip.dyndns.com");

my $ip = $1 if $html =~ m/(\d+\.\d+\.\d+\.\d+)/;

if ($ip) {
$html = getprint("http://$username:$password\@members.dyndns.org/nic/update?system=dyndns&hostname=$hostname&myip=$ip&wildcard=NOCHG&mx=NOCHG&backmx=NOCHG&");
print "\n";
}

1;

2007年5月4日 星期五

Windows + Firefox + Google

寄件者 Google

Firefox 跟 Google 讓原本不怎麼好用的 Windows XP 的桌面環境變得更好用了

2007年4月28日 星期六

使用 USB stick 來安裝 Debian GNU/Linux 4.0 (Etch)

參考安裝文件
首先去 FTP 下載 boot.img.gz
在隨便一個 Linux 系統上執行 (請小心確認 USB stick 的位置是否在 /dev/sda)
# zcat boot.img.gz > /dev/sda
然後再把 debian-40r0-i386-netinst.iso 複製到 USB stick 上就行了
接下來的動作就是使用 USB stick 開機
(當然使用 USB stick 開機要有主機板的硬體支援才行)
接下去就跟一般使用 debian-40r0-i386-netinst.iso 所燒成的光碟來安裝的過程一樣

2007年4月22日 星期日

Upgrade from Ubuntu 6.10 (Edgy Eft) to Ubuntu 7.04 (Feisty Fawn)

剛剛去下載了 Ubuntu 7.04 (Feisty Fawn) 的 alternate 燒成光碟
在 Ubuntu 6.10 (Edgy Eft) 的環境底下將光碟放進去
結果跳出了

於是就按下"執行升級"
接下來就是一連串的過程







就這樣升級成了 Ubuntu 7.04 (Feisty Fawn)
過程還蠻簡單的... :-)
不過升級後會有一些多餘的套件
再使用 aptitude 或是 Synaptic 調整一下就好了
Ubuntu 的官方網站上還有其他的升級方法
原來我上面這個升級的方法在官方網站的網頁上也有提到
其他還有不需要光碟直接透過網路的升級方法
應該比較環保經濟一點... :-)

2007年4月10日 星期二

三合一 Debian GNU/Linux 4.0 (Etch) 網路安裝光碟

喔~ 原來 Debian 還有提供
debian-40r0-alpha-hppa-ia64-NETINST-1.iso debian-40r0-i386-amd64-powerpc-NETINST-1.iso 啊~ :O
debian-40r0-alpha-hppa-ia64-NETINST-1.iso 給 alpha, hppa, ia64 這三種 CPU 架構的機器使用
debian-40r0-i386-amd64-powerpc-NETINST-1.iso 則是給 i386, amd64, powerpc 這三種 CPU 架構的機器使用
總之~ 燒一張光碟可以同時給三種 CPU 架構的機器來安裝
真是太方便而且節省空間了~
因為現在賣的 CD-R 空片以 700MB 為多數
所以當然是要抓這種 ISO 檔來燒比較好啊~
http://cdimage.debian.org/debian-cd/4.0_r0/multi-arch/
可別呆呆地去抓 21 張 ISO-CD 還是 3 張 ISO-DVD 回來安裝~ 除非你真的想要那樣做~ :P

2007年4月9日 星期一

燒燒燒!!! 熱騰騰的 Debian GNU/Linux 4.0 Etch 出爐~~~

http://www.debian.org 最近釋出了穩定版 4.0 Etch
馬上二話不說... 抓! 去抓 netinst i386 159MB 回來!
燒成光碟! 接上網路! 重新開機! 選好分割區!
選擇 [桌面][筆記電腦][基本] 開始網路安裝!
還要再裝700多個套件
整個裝好後發現...

字型預設是楷體不喜歡
於是 dpkg -P ttf-arphic-bkai00mp 移除掉
再 fc-cache -f -v 一下
/etc/init.d/gdm restart 重開 gdm

預設的輸入法是 gcin 在遇到 Flash 時會掛點
於是 dpkg -P gcin 換使用 scim 或著是升級到 sid 的 gcin

預設的 network-manager-gnome 抓不到網路卡
去 [桌面]->[管理]->[網路] 把網路卡的開機啟動都關掉
再 aptitude install dhcpcd 把網路卡的啟動交給 NetworkManager 來處理
重新開機... :P 功能正常~ ^o^

BBS 沒有 pcmanx-gtk2 !
裝! aptitude install pcmanx-gtk2

經過以上的步驟...
一個堪用的中文桌面環境就裝好了~ ^__^

Linux 絕對有支援的無線網路卡

之前就有在留意 ASUS WL-330g
可以當 Wireless AP 又可以當 Wireless LAN Card
而 LAN Card 的部份需要使用 RJ-45 連線
也就是說只要有線網路的部份可以使用的話
那麼無線網路的部份也可以使用而且不需要額外的 Driver
這麼一來就不用煩惱 Linux 上的 Driver 無法正常使用的問題

昨天跑去光華找了幾間店都沒有看到
反而是看到了另外兩家的產品
一個是 D-Link DWL-G730AP
另一個是 Belkin Wireless G Travel Router
都具有同樣的功能
於是買了最便宜的 D-Link DWL-G730AP 花了 NTD $1400

使用了一陣子之後覺得還不錯
這樣的價格可以買到這樣多功能 (AP+Adapter+Router) 的無線網路設備
只是使用上畢竟沒有單純的 Wireless LAN Card 來的方便
每換一個網路環境就要透過網頁的方式連上這台機器重新做設定
唯一的好處就是無論什麼系統只要有支援 RJ-45 的就一定能夠無線上網

2007年3月26日 星期一

vi 無所不在

根據小道消息(有人告訴我)
bash 中也有 vi
就是使用 set -o vi
這時候就可以開始使用 vi 模式
一開始會是 Insert Mode
當按下 Esc 後會進入 Command Mode
hjkl 左下上右
hl 會在目前的指令前後移動
jk 會在 history 前後項移動
另外像是 /? 可以搜尋啟動 vi 模式後所打過的指令
還有 x,X 可以刪除字元
dd 可以整行刪除
0 可以移到指令"前頭"
^ 可以移到指令"開頭"
$ 可以移到指令結尾
W,w,B,b,E,e 可以在單字間移動
v 會進入真正的 vi 介面
A,I,a,i 進入 Insert Mode
... 繁多不即備載
有興趣的朋友可以自己研究研究... ^_^
最後...
set -o 或是 set +o 可以看到其它可以玩弄的選項
所以想要離開 vi 模式就可以執行 set +o vi
不過這時候會覺得使用上會有點奇怪
像是上下鍵的 history 不見了
原來 bash 的預設值是設定成 emacs 模式
所以只要再執行 set -o emacs 就回復到原本的 bash 了
以上的操作是在 Fedora Core 6 上所觀察到的
其它的系統可能功能上稍有出入

2007年3月22日 星期四

什麼!vim 可以編輯 tarball !

這是真的!
剛剛在 Fedora Core 6 上
不小心對 tarball 使用了 vim
突然發現可以直接對 tarball 裡面的檔案做編輯
查了一下
# rpm -ql vim-common | grep tar.vim
/usr/share/vim/vim70/autoload/tar.vim
/usr/share/vim/vim70/syntax/tar.vim
原來是裝 tar.vim 這個 plugin 的關係啊!
喔齁齁~~~ ^o^

2007年3月20日 星期二

Google 網上論壇 - 直譯式語言使用者社群大亂鬥

最近在 Google 網上論壇 亂逛了一下
找到了
perl@taiwan
python. tw
PHP 台灣
台灣Ruby使用者群組
其中以 Python 以及 Ruby 的台灣使用者群組較為活躍許多 (以 Google 網上論壇為參考範圍)
直譯式語言的四大天王~~~ ^_^

2007年3月14日 星期三

極簡風格的 Window Manager - wmii

http://www.suckless.org/wiki/wmii

Alt + d 標準模式 (水平視窗分割)
Alt + s 堆疊模式
Alt + m 最大化模式
Alt + Shift + l 垂直視窗分割
Alt + hjkl 控制視窗移動
Alt + Enter 叫出終端機
Alt + p 程式隨打執行
類似 MacOSX 上的 QuickSilver
Alt + a 主選單
只有四個選項, 也許可以再自訂
Alt + Shift + [0-9] 將目前的視窗搬到 Workspace [0-9]
Alt + [0-9] 切換 Workspace 到 [0-9]

這不就是我夢想中的桌面嗎!?
整個就是有效率啊~~~ 喔齁齁~~~ ^o^
--
不過在 Ubuntu 6.10 上的 wmii 中的中文顯示有點問題... :(

2007年3月13日 星期二

fc6 upgrade trac to 0.10.3.1 broken

升級了在 Fedora Core 6 上裝的 trac
結果發現到 trac 整個爛掉
http://bugzilla.redhat.com/bugzilla 找了一下
結果找到了這篇 http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=231836
總之... 暫時的解法就是
# rpm -e --nodeps python-sqlite2

vim :TOhtml

#include <stdio.h>

int main(int argc, char *argv[])
{
printf("Hello World!\n");
return 0;
}

喔~ 效果還不錯喔~ ^_^

2007年3月12日 星期一

Blogger Help : Can I get site feeds for specific labels?

哇喔~ 原來 Blogger 有提供依照 Label 來產生不同的 Feed 啊! :|

Template:
http://blogname.blogspot.com/feeds/posts/default/-/labelname

如果想要做出 Linux 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Linux

如果想要做出 Debian 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Debian

如果想要做出 Ubuntu 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Ubuntu

如果想要做出 Fedora 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Fedora

如果想要做出 Mac 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Mac

如果想要做出 Windows 的 Feed 的話就使用
http://fourdollars.blogspot.com/feeds/posts/default/-/Windows

應該可以利用這種方式來加入各種不同類型的 Planet 吧~
也比較容易保持 Planet 的一致性
Planet 上面的文章更符合該 Planet 的主題
不過也同時排除了接觸其他知識的機會... :P

P.S. 大小寫有分喔~ :o

2007年3月9日 星期五

FreeNode 要如何設定 Channel 的 OP

可以先參考 Canydz 寫的這篇 還有我以前寫的那篇
如果是要註冊一個 Channel 的話,必須先註冊一個帳號才能註冊 Channel
帳號有帳號本身的密碼
Channel 有 Channel 本身的密碼
也就是說想要設定 Channel 的 OP 的話
要先經過 Channel 密碼的認證
/msg ChanServ IDENTIFY #ChatRoom [ChatRoom's Password]
/msg ChanServ ACCESS #ChatRoom add FourDollars 30
這樣才能把我設定成 OP
--
另外... 要特別感謝 Mat0220 不厭其煩地幫忙我做些實驗.... ^_^

2007年3月8日 星期四

CMClass: 微軟徵才試題 (完)

算錯篇: http://fourdollars.blogspot.com/2007/03/cmclass.html
算對篇: http://fourdollars.blogspot.com/2007/03/cmclass_08.html
這篇要來個總結... :P
原始的題目是
永源拿了兩個不同數字...
這兩個數字分別大於 1 ,也分別小於 50
永源只把這兩個數字的乘積告訴了亞譚 ...
永源再只把這兩個數字的和告訴了明歆 ...
永源問, 這兩個數字是什麼 ?

以下是亞譚和明歆的對話... (小強, 小毛, 小燕在旁坐陪)
亞譚: 我不知道這兩個數字是什麼!
明歆: 但我也還是不知道這兩個數字是什麼!
亞譚: 喔!那我知道那兩個數字是什麼了 !
明歆: 喔!那我也知道那兩個數字是什麼了 !
突然間 ....聰明的三位陪客同時也說: 我們也知道那兩個數字是什麼了 !
聰明的你, 告訴我....那兩個數字是什麼 ?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "set.h"

#define LOWER 2
#define UPPER 49

#define for_ij_do(A...) \
for (i = LOWER; i <= UPPER - 1; i++) \
for (j = i + 1; j <= UPPER; j++) \
do { A } while (0);

int main(int argc, char *argv[])
{
int i,j;

int m[UPPER * UPPER] = {0};
int a[UPPER + UPPER] = {0};

Set *setA = newSet();
Set *setB = newSet();

for_ij_do (
m[i * j]++;
);

for_ij_do (
if (m[i * j] >= 2)
appendSet(setA, newPair(i, j));
);
/* 亞譚: 我不知道這兩個數字是什麼!*/
/* setA->size == 638 */

for_ij_do (
if (findElement(setA, newPair(i, j)))
a[i + j]++;
);

for_ij_do (
if (a[i + j] >= 2 && findElement(setA, newPair(i, j)))
appendSet(setB, newPair(i, j));
);
/* 明歆: 但我也還是不知道這兩個數字是什麼!*/
/* setB->size == 629 */

memset(m, 0, sizeof(int) * UPPER * UPPER);

for_ij_do (
if (findElement(setB, newPair(i, j)))
m[i * j]++;
);

for_ij_do (
if (m[i * j] == 1 && findElement(setB, newPair(i, j)))
printf("%d %d\n", i, j);
);
/* 亞譚: 喔!那我知道那兩個數字是什麼了! */
/* 明歆: 喔!那我也知道那兩個數字是什麼了! */

destorySet(setB);
destorySet(setA);

return 0;
}
兩篇相關的討論
http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/226
http://hoamon.blogspot.com/2007/03/cmclass.html
總算是想出來了... ^o^
Source Code 放在 http://fd.idv.tw/tux/CMClass.tar.bz2
因為不知道 C 上面有什麼 Set 的相關函式, 所以就自己硬幹一個簡易版出來... XD
另外... 為了把 Source Code 貼到 Blog 上, 用到了一段 command
cat main.c | sed -e 's/</\&lt;/g' | sed -e 's/>/\&gt;/' | less
如果有程式有辦法把 Source Code 轉成 HTML 外加彩色應該會很方便好用吧!?

CMClass: 微軟徵才試題 (續)

昨天的文章算錯答案了... :P
所以... 重寫一個程式... ^o^
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "set.h"

#define LOWER 2
#define UPPER 49

int main(int argc, char *argv[])
{
int i,j;

int m[UPPER * UPPER] = {0};
int a[UPPER + UPPER] = {0};

Set *setA = newSet();
Set *setB = newSet();
Set *setC = newSet();

Node *index = NULL;

for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++) {
m[i * j]++;
a[i + j]++;
}

for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (m[i * j] >= 2)
appendSet(setA, newPair(i, j));

memset(m, 0, sizeof(int) * UPPER * UPPER);
memset(a, 0, sizeof(int) * UPPER * 2);

for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (findElement(setA, newPair(i, j))) {
m[i * j]++;
a[i + j]++;
}

for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (a[i + j] >= 2 && findElement(setA, newPair(i, j)))
appendSet(setB, newPair(i, j));

memset(m, 0, sizeof(int) * UPPER * UPPER);
memset(a, 0, sizeof(int) * UPPER * 2);

for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (findElement(setB, newPair(i, j))) {
m[i * j]++;
a[i + j]++;
}

for (i = LOWER; i <= UPPER - 1; i++)
for (j = i + 1; j <= UPPER; j++)
if (m[i * j] == 1 && findElement(setB, newPair(i, j)))
appendSet(setC, newPair(i, j));

for (index = setC->head; index != NULL; index = index->next)
printf("%d %d\n", index->curr->x, index->curr->y);

destorySet(setA);
destorySet(setB);
destorySet(setC);

return 0;
}
完整的 Source Code 在 http://fd.idv.tw/tux/CMClass.tar.bz2
有興趣可以幫忙 debug ... :P

2007年3月7日 星期三

CMClass: 微軟徵才試題

http://heaven.branda.to/~thinker/GinGin_CGI.py/show_id_doc/226 看到的題目
我的解答是 3 跟 4 (這不是正確答案喔!請看意見)
求解的程式在這裡

#include <stdio.h>

int main(int argc, char *argv[])
{
int i, j;
int a[100] = {0};
int m[2500] = {0};

for (i = 2; i < 50; i++) {
for (j = i; j < 50; j++) {
a[i+j]++;
m[i*j]++;
}
}

for (i = 2; i < 50; i++) {
for (j = i; j < 50; j++) {
if (a[i+j] == 2 && m[i*j] == 2) printf("%d %d\n", i, j);
}
}

return 0;
}

從以前就很喜歡寫程式來解數學問題... ^_^

2007年2月15日 星期四

Google Toolbar 3.0.20070201

再一次的... XD
在使用 Firefox 中的 [附加元件] -> [尋找更新] 後
完全看不到可以更新的資訊 (因為主版本號碼的不同嗎?)
http://toolbar.google.com/intl/zh-TW/
新增了一些有趣的功能,例如:

1.書籤
無論在 IE 還是 Firefox 上使用的都是同樣的書籤
有 tag 的功能,使用感覺比 Google Sync 還要好用
(Google Sync 可以移除掉了... :P)

2.Google 文件
要在 [設定] -> [選項] 中打開
反正就是讓網頁上的 .doc .xls .rtf .ods .odt .csv .sxw 檔案都用 Google 文件來開啟

更詳細的說明在 http://www.google.com/support/firefox/bin/static.py?page=features.html&v=3&hl=zh_TW

2007年2月8日 星期四

Gmail 開放收取外部信件的服務

不過目前沒有支援正體中文
必須先換成英文語系來做設定
http://www.chunmin.com/archives/49/2/ 看來的消息~ :P

2007年2月6日 星期二

rpm: Query all installed packages.

在 Redhat/Fedora/SuSE 上查詢所有已經安裝的套件
可以使用
rpm -qa

如果想要查詢套件名稱含有某關鍵字的則可以使用
rpm -qa | grep kernel

或者是
rpm -qa '*kernel*'

自己習慣上都是使用
rpm -qa | grep kernel
(鍵盤比較好敲)
不過
rpm -qa '*kernel*'
似乎應該比較快速(就程式執行的速度來看)
於是就做了一個小實驗
$ for ((i=0;i<3;i++)); do time echo $(rpm -qa '*kernel*'); done
kernel-devel-2.6.19-1.2895.fc6 kernel-headers-2.6.19-1.2895.fc6 kernel-2.6.19-1.2895.fc6

real 0m2.856s
user 0m2.640s
sys 0m0.149s
kernel-devel-2.6.19-1.2895.fc6 kernel-headers-2.6.19-1.2895.fc6 kernel-2.6.19-1.2895.fc6

real 0m2.854s
user 0m2.656s
sys 0m0.138s
kernel-devel-2.6.19-1.2895.fc6 kernel-headers-2.6.19-1.2895.fc6 kernel-2.6.19-1.2895.fc6

real 0m2.858s
user 0m2.631s
sys 0m0.141s
$ for ((i=0;i<3;i++)); do time echo $(rpm -qa | grep kernel); done
kernel-devel-2.6.19-1.2895.fc6 kernel-headers-2.6.19-1.2895.fc6 kernel-2.6.19-1.2895.fc6

real 0m3.246s
user 0m2.738s
sys 0m0.448s
kernel-devel-2.6.19-1.2895.fc6 kernel-headers-2.6.19-1.2895.fc6 kernel-2.6.19-1.2895.fc6

real 0m3.381s
user 0m2.727s
sys 0m0.570s
kernel-devel-2.6.19-1.2895.fc6 kernel-headers-2.6.19-1.2895.fc6 kernel-2.6.19-1.2895.fc6

real 0m3.311s
user 0m2.705s
sys 0m0.546s
果然經過 pipeline 的方法比較慢~ :)

Yahoo! Widget: Radio_Tuner_Taiwan v1.2

最近因為 Hinet Radio 改變了一些設計
於是原本的 Radio_Tuner_Taiwan v1.2 突然不能只用
可是也沒看到有人在修理
所以就自己來修~ :P

作法如下:
1. 解開原本的 Radio_Tuner_Taiwan v1.2
2. 編輯其中的 widFunction.js
i. 把所有的 player.jsp 取代成 player_ff.jsp
ii. 把 function getLiveURL 代換成
function getLiveURL(theURL){
var url=new URL();
url.location=theURL;
var contents=url.fetch(); //("mmsurl=([^\;]+)\"", "g");
var liveURLRE=new RegExp("setMovieFile\\\(\\\"([^\;]+?)\"", "g");
liveURL=liveURLRE.exec(contents);
url.location=liveURL[1];
contents=url.fetch();
liveURLRE=new RegExp("href=\\\"([^\;]+?)\"", "g");
liveURL=liveURLRE.exec(contents);
stationURL=liveURL[1];
}
再用 Widget Converter 把它包回成 Yahoo! Widget 就可以用了~~~ Happy Hack! ^o^

2007年1月27日 星期六

Planet Linux of Taiwan 新增 Category 功能

現在的 http://planet.linux.org.tw 不單單只是收個人的 Blog RSS Feed

任何跟 Linux 相關的 RSS Feed 都可以收

之後再以 Category 來分類

例如 GCIN 的軟體開發專案的 Blog RSS Feed

就放到 http://planet.linux.org.tw/software/ 底下

而個人的 Blog RSS Feed 放在 http://planet.linux.org.tw/people/ 底下

至於 http://planet.linux.org.tw 則是所有 RSS Feed 的總和

歡迎各位朋友或是軟體開發專案或是新聞台提供 RSS Feed

辦法請參考 http://planet.linux.org.tw/join.html

希望在 Planet Linux of Taiwan 可以收集到台灣所有跟 Linux 有關的 RSS Feed... ^o^

2007年1月22日 星期一

Bash: ${foo:=bar} ${foo:-bar} ${foo:+bar} ${foo:?bar}

${foo:=bar}

 1: #!/bin/sh
2:
3: foo='foo'
4: echo ${foo}
5: echo ${foo:=bar}
6: echo ${foo}
7:
8: unset foo
9: echo ${foo}
10: echo ${foo:=bar}
11: echo ${foo}
執行後的輸出結果會是
foo
foo
foo

bar
bar
因為 ${foo:=bar} 的意義是:
當 $foo 值不存在或者是空字串時,將 $foo 的值指定為 'bar',並且傳回 'bar'

所以第5行的結果並不會改變 $foo 的值並且傳回 'foo'
而第9行的作用是把 $foo 的值指定為 'bar' 並且傳回 'bar'



${foo:-bar}

 1: #!/bin/sh
2:
3: foo='foo'
4: echo ${foo}
5: echo ${foo:-bar}
6: echo ${foo}
7:
8: unset foo
9: echo ${foo}
10: echo ${foo:-bar}
11: echo ${foo}
執行後的輸出結果會是
foo
foo
foo

bar
因為 ${foo:-bar} 的意義是:
當 $foo 值不存在或者是空字串時,傳回 'bar',但是不改變 $foo 的值



${foo:+bar}

 1: #!/bin/sh
2:
3: foo='foo'
4: echo ${foo}
5: echo ${foo:+bar}
6: echo ${foo}
7:
8: unset foo
9: echo ${foo}
10: echo ${foo:+bar}
11: echo ${foo}
執行後的輸出結果會是
foo
bar
foo


因為 ${foo:+bar} 的意義是:
當 $foo 值存在並且不為空字串時,傳回 'bar',但是不改變 $foo 的值



${foo:?bar}

1: #!/bin/sh
2:
3: foo='foo'
4: : ${foo:?bar}
5: echo "Here"
6:
7: unset foo
8: : ${foo:?bar}
9: echo "Cannot be here."
執行後的輸出結果會是
Here
sample.sh: line 8: foo: bar
因為 ${foo:?bar} 只是拿來檢查 $foo 的值存在並且不為空字串
檢查不通過時就會印出錯誤訊息並且結束程式
其中的 'bar' 是自訂的錯誤訊息,不填的話輸出結果就變成了
Here
sample.sh: line 8: foo: parameter null or not set

2007年1月18日 星期四

Bash: function return value

作法有點 tricky
#!/bin/sh

main ()
{
return 123
}

main

echo $?

不然就是要用另外一個變數來存傳回值了~ :P

2007年1月17日 星期三

Planet Linux of Taiwan 加入辦法

http://planet.linux.org.tw

主要是想要收集在台灣有使用 Linux 系統而且有在寫相關文章的個人 Blog

現在開始號召各位英雄好漢大哥大姐小弟小妹新手老朋友來加入... ^__^

請提供三項資料
1. 提供你的個人 blog feed
2. 提供你的個人暱稱(本名可)
3. 提供你的個人圖片(長寬皆在120px以內)

範例1:
[http://planet.linux.org.tw/rss20.xml]
name = Planet Linux of Taiwan
face = tux.png

範例2:
[http://planet.linux.org.tw/atom.xml]
name = 台灣 Linux 星球
face = tux.png

範例3:
[http://fourdollars.blogspot.com/feeds/posts/default]
name = FourDollars
face = FourDollars.png

實際範例:
Planet Linux of Taiwan

郵件標題請寫上 "申請加入 Planet Linux of Taiwan"

將以上資料寄到 planet-linux-of-taiwan [NOSPAM] googlegroups.com

2007年1月13日 星期六

CSS Test

Hello Linux
Hello BSD
Hello MacOSX
Hello Windows

#!/usr/bin/perl

print "Hello Perl!\n";

2007年1月12日 星期五

Yahoo!奇摩字典 command line version

http://plog.longwin.com.tw/programming/2007/01/12/y_dictionary_script_2007
看到一段有趣的 perl script



不過似乎一次只能查詢一個單字

於是我自己又加了一個 wrapper 上去... :P
#!/bin/sh
# FourDollars
# 2007/01/12
skip=15

function func_dict ()
{
for i in $*; do
perl -e "`tail -n +$skip $0`" $i
done
}

func_dict $* | less -r -F
exit
#!/usr/bin/perl
# Yen-Ming Lee...
...
...

這樣一來就可以一次查詢多個單字

還可以 page up, page down

不過後來又發現弄個 shell like 的界面比較好用... XD
#!/bin/sh
# FourDollars
# 2007/01/12
skip=23

function func_dict ()
{
for i in $*; do
perl -e "`tail -n +$skip $0`" $i
done
}

while :; do
echo -n "<Yahoo!奇摩字典> "
read word
if [ -z "$word" ]; then
echo
exit
fi
func_dict "$word" | less -r -F

done
exit
#!/usr/bin/perl
# Yen-Ming Lee...
...
...

哈... 後來又把兩種方式合併在一起用... :P
#!/bin/sh
# FourDollars
# 2007/01/12
skip=27

function func_dict ()
{
for i in $*; do
perl -e "`tail -n +$skip $0`" $i
done
}

if [ -z "$*" ]; then
while :; do
echo -n "<Yahoo!奇摩字典> "
read word
if [ -z "$word" ]; then
echo
exit
fi
func_dict "$word" | less -r -F
done
else
func_dict $* | less -r -F
fi
exit
#!/usr/bin/perl
# Yen-Ming Lee...
...
...

2007年1月11日 星期四

Linux wireless LAN support

Google 到一個不錯的網站

http://linux-wless.passys.nl/

裡面有一個 Complete listing 的按鈕點下去

接下來找綠色的無線網路卡來買應該都不錯吧... ^_^

不過像我目前還在用的 ASUS WL-103b 就是黃色的

有部份功能但是就是不完整

有時候是真的可以連上無線網路

但是很多時候是會發生連不上無線網路的問題

要不然就是無線網路的狀況不穩... >"<

之前找的兩張無線網卡 ASUS WL-107gCorega CG-WLCB-54GT 都是綠色的

有了這個網站參考後買有綠色的標誌應該在 Linux 上有不錯的支援吧... :)

2007年1月9日 星期二

Ubuntu 6.10 Edgy - 看影片聽音樂


sudo aptitude install gstreamer0.10-plugins-ugly

裝上這個後就可以用 "影片播放器(Totem)" 看 DVD/VCD 了


sudo aptitude install gstreamer0.10-plugins-ugly-multiverse

裝上這個後就可以用 Rhythmbox(iTunes like) 來聽 mp3 了,當然用 Totem 也可以聽 mp3 啦~

Ubuntu 6.10 Edgy - NetworkManager

把原本的 Ubuntu 6.06 Dapper 換成 Ubuntu 6.10 Edgy
結果在使用 NetworkManager 時一登入 Gnome
就會跳出以下訊息

NetworkManager 面板程式無法找到一些需要的資源。它無法繼續。

煩死了... >"<
後來 Google 了一下找到了這個 Link
http://ubuntuguide.org/wiki/Ubuntu_Edgy
裡面提到

sudo gtk-update-icon-cache -f /usr/share/icons/hicolor

好吧... 真的是這樣就解決了問題... >"<