2011/12/21

[Linux] Linux 上的 GPIO / I2C 實作筆記之二 概念重提

前言
Linux 上的 GPIO / I2C 其實是很有趣的一個東西,可以用 GPIO 控制的方法去和硬體做溝通。和硬體的溝通比軟體有趣的地方在於馬上就「具現化」在你眼前,所以感覺實在多了,而且也有很多想像的空間。不過,I2C 在 Linux 上的實踐方法其實有兩種: GPIO 拉 I2C 的 protocol 跟 adapter driver 的方式。 I2C 靠 adapter driver 運作的方式我還不會,所以我會談的,都只有用 GPIO 實做 I2C protocol 的方式,這樣的做法其實很多變數在裡面,用到最後會不好整理,不好維護,結果也不夠穩定。不過優點就是在還不了解 linux i2c adapter driver 這一層的時候,不用花多少時間,光靠別的平台的 source code 仿照寫法,就可以開發完成,所以應該可以說是快速開發的方法。

準備材料
在開始工作之前,我們要先了解 GPIO/I2C 的需求:
a. SDA / SCL 兩根 GPIO 的腳位在哪裡。
b. 和 I2C 裝置交談的具體內容 意即是 I2C 裝置的 datasheet

I2C 的交談內容大要
如果把 I2C 簡單化,那麼 I2C 就像是在吟詩一樣,把平當作不動,仄當作腳位拉高再拉低,就會有 平平仄仄仄平平,仄仄平平平仄仄 像這種鬼東西出來。那誰看得懂呢?所以我們先跳過吧。

鬼東西 跳過之後,I2C 的交談內容大致上會是這樣的內容:
[S][Device ID][A][Data][A][Data][N][P]


[S] 代表的意思是 Start ,就是按 I2C protocol 拉一個 Start 。
[Device ID] 就是按 DataSheet 裡頭的說明,拉 Device ID 的值出來。
[A] 就是按 I2C protocol 拉一個 Ack。
[Data] 看 DataSheet 裡面需要送什麼 Data (一開始的 command byte 通常就一個 byte 而已)
[N] 就是按 I2C protocol 拉一個 NAK。
[P] 就是按 I2C protocol 拉一個 Stop。

所以其實很簡單吧? (鬼才相信很簡單,一開始要實作的時候看到這種拉高拉低的,我就開始頭昏眼花了)

因為 I2C 的特性是用一個 Device ID (也就是 Slave Address),做為識別,在同一個 Data Bus 上面進行溝通。因為每一個 Slave Device 的 ID 不一樣,所以在溝通的時候不會發生混亂,可以分時進行。但是每一個 I2C 裝置的交談內容都不大一樣,所以在實作的時候,需要參考各家產品的 data sheet 來進行實作。

在實作的時候因為每個裝置的需要,大致上會有一些名詞:

Config 設定
Polarity 極性
Input 輸入
Output 輸出
Read 讀取
Write 寫入
Register 註冊位址
Command / Control Byte 命令位元
Data Byte 資料位元

你暈了嗎?其實也都還在 [S][Device ID][A][Data][A][Data][N][P] 這個格式裡頭打轉。
執行的順序用人話來說明,大概會是:

1. Config (Initial 這個裝置)
2. Register (說明你要執行或讀寫哪個位址)
3. Control Byte (送出命令)
4. Write Data (寫入資料) 或 Read Data (讀取資料)

別睡,別睡,下文就要開始舉例說明,如何參考一份 datasheet 來開始在 Linux Kernel 上面實作 GPIO / I2C 了:

--
圈重點:
* 所以在溝通的時候,時間差(timer)和延遲(delay)很重要,務必在一開始看 datasheet 的時候就先把時間差先圈出來。

參考資料:
* [Linux] Linux 上的 GPIO / I2C 實作筆記之一 http://antontw.blogspot.com/2011/06/linux-linux-gpio-i2c.html
* 拉平仄 S, P, A, N 什麼鬼的可以參考這裡 I2C 的協定內容 http://en.wikipedia.org/wiki/I%C2%B2C

2011/12/14

[軟體][Linux] SMS 之路 (一) 發送簡訊

前言
最近很忙,所以很久沒寫網誌了,剛剛遇到一點問題,所以想想還是回頭來寫一下筆記。

問題
* Linux 底下如何發送簡訊?

環境配置
* Linux 的開發環境
* 一張 2G/3G 網卡
* 一張可以正常的 SIM 卡

執行動作
* 打開 Linux (不管你是用 vbox/vmware 還是實機的 Linux)
* 把網卡大力插進去

接著應該會在裝置底下看到網卡浮出來:

它有可能長這個樣子,如果你跟我一樣用比較舊的 Kernel ,或著跑到 ttyACM0 如果你的 kernel 很清楚的認為它是 modem 的裝置。

接著就要開始玩弄它了,因為 kernel 把它當成是 serial 的裝置,所以你需要一個 terminal 連接它才能開始跟它溝通。

那麼,我會建議使用:
* putty (linux 版) 初學者建議
* minicom (console 工具) 如果你嫌 GUI 很麻煩的話,建議用這個

putty 選裝置 /dev/ttyUSB3 + serial + baurate (可能是 115200 之類的)
minicom -s 選 serial protocol 調整 device 跟 baurate

接著下來要和 3G網卡/modem 溝通,時間很夠就先把網卡的 AT Command List 看過一遍。
這樣可以發中文簡訊到某人的手機裡:

這樣可以發一堆數字到某人的手機裡:

...
要罵我了嗎?好啦,讓我解釋一下:
AT Command 是和 modem 溝通的指令集,所以下這些 command 可以讓 modem 知道你想做什麼事情。
AT+CMGF=0 代表你想送簡訊的模式是 PDU mode 這個 mode 底下的簡訊是編碼過的,裡頭會帶上 SMS 訊息中心的電話號碼,跟你的訊息本文,還有接受者的電話號碼。
AT+CMGS=22 代表你的訊息本文長度是 22,下面接的那一串就是編碼過後的樣子。

...
嗯,應該還會再罵我一次,因為這樣還是不知道怎麼做 PDU 的編碼。
可以參考一下 http://www.dreamfabric.com/sms 上面有說明 SMS PDU 的編碼格式。

如果你跟我一樣很懶得去看,那這裡也有編碼器

--
參考網址:
* Fred Shell scirpt 發送簡訊 http://fred-zone.blogspot.com/2010/04/blog-post.html
* PDU 編碼參考http://www.dreamfabric.com/sms/
* SMS Tutorial http://www.developershome.com/sms/howToReceiveSMSUsingPC.asp
* SMS 中文編碼 http://en.wikipedia.org/wiki/UTF-16
* AT Command 發送 SMS 的方法 http://www.smssolutions.net/tutorials/gsm/sendsmsat/

2011/09/30

[Linux] vmware-workstation 移除

話說這星期突然間有客戶要我安裝 vmware ,只好去找了 vmware-workstation 下來安裝,結果跑起來慢的要死,遠遠不如 virtualbox ,所以最後客戶讓我直接裝在本機的 Windows 上面,至於這個 Ubuntu 底下的 vmware 就只好移除了,這才想到,對厚,這個 vmware 是用 script 安裝的,那移除的時候怎麼辦?

找了一下才在 Ubuntu Forum 上面看到,原來有一支 vmware-installer 是處理這些事的,可以下:
vmware-installer --uninstall-product vmware-workstation 來移除曾經安裝的 vmware。

vmware-workstation 可以替換成: {vmware-workstation | vmware-player | vmware-vix}
--
參考資料:
Ubuntu Forum

2011/08/24

[軟體] Xmind 不能在 Command Line 底下打開 map 檔

這個其實不是什麼大問題,但是想要高調把這個問題的解決方案講出來。

解法在這邊找到的,
簡單的說就是:

寫一個 shell script 的 wrapper ,然後去呼叫 xmind-bin 以 -p 參數帶 map file 就可以。
所以這個 shell script 會長這樣:
#!/bin/bash

/usr/local/xmind/xmind-bin -p "$@"

也可以在這邊 下載。(因為是 shell script ,所以你也可以看一下內容長怎樣,如果有疑慮的話。

--
資料來源:
Xmind 的討論區

2011/08/18

[Linux] 哇!我的無線網路速度怎麼這麼慢?

常常聽到人家問說,我的網路速度怎麼這麼慢?然後我就會回答說,用 speedtest 或者 中研院測速網站 來做測試網路速度,大柢上就可以分辨得出來是真的網路速度很慢,還是其實是你的電腦處理在拖慢最後呈現的速度。

不過這個測試不能分辨是不是無線網路分享器跑到了極限,抑或著是無線網路選擇模式 b, g, n 的極限。所以這篇文章主要目的,在說明常見的無線網路模式 b/g/n 是怎麼回事,在 Linux 上面要如何查詢及調整。

我的無線網路分享器可以跑什麼模式?
打開你的瀏覽器,連線到你的 ap router 應該可以找到類似下面的設定畫面:
上圖就說明了,AP Router 設定是 11 B/G/N 都可以使用的模式。(這樣我們就只需要調查 筆電 或 PC 上面使用的無線網卡是什麼模式,就可以知道,我們無線網路速度可以跑多快。)

我的筆電/PC上的無線網路跑什麼模式?
這個問題其實也很簡單,在 gnome 上面我們可以點無線網路的圖示,再點選連線資訊,就會出現下圖:
上圖直接說明了你的無線網路理論上可以跑多快,按 維基百科:無線網路 這個條目的說明:







分類速度(Mbps) 頻段(Mhz)
11a545G
11b112.4G
11g542.4
11n n 2.4


確認過自已使用的無線網路模式之後,我們就可以開始測試網路的速度了,這邊採用的是 linux 上很常使用的 iperf 測速工具。

操作方式是:在固定一端跑 iperf 的 server mode ,在另一頭跑 iperf 的 client mode ,這樣就可以由 client 餵資料給 server 從而達成測速的目的。

server mode 的指令:
iperf -s
如果是 Windows 請下:
iperf.exe -s
(Windows 版本可點我下載, Linux 版本請由 apt-get 或其它套件管理工具下載安裝)

client mode 的指令:
iperf -c server_ip
相關選項可以參考這邊,它寫得很詳細,我就只列出我會用的選項:
-c # server ip
-t # timeout
-w # window size
-l # read/write buffer
-P # concurrent thread number



--
參考資料:
* Mobile 01 上面關於 11n 的討論:
一個符合 802.11n 的產品,假設採用 OFDM 調變、兩個發射和兩個接收串流(稱為 2×2 配置)、20MHz 通道寬度,可以達到 144 Mbps 的典型流量;或者採用 OFDM 調變、4×4 配置、40 MHz 通道寬度,(目前理論上)可以達到最大 600 Mbps 流量。今天大多數 802.11n 產品所實現的是這兩個極端之間的某種傳輸速度:如採用 OFDM、2×2 配置和 40 MHz 通道寬度的 300 Mbps,或只將 MIMO 配置改為 3×3 時的 450 Mbps。


* 11n 的加密模式限用 AES 加密,因而使用 TKIP 或混合模式都有可能讓 b/g/n 的混合模式只能跑到 g 而已

* Linux - 網路效能測試工具 "iperf"
* Windows 上使用 iperf 測速工具

2011/06/10

[Linux] Linux 上的 GPIO / I2C 實作筆記之一

什麼是 GPIO ?
全稱是 "General Purpose I/O"。General Purpose ,就是用途不限。 Input / Output 指的是拉電位高低,Hardware 上的電位高低是以電壓值的範圍來規範,下面 DataSheet 中提供的電位表:

依循這個規則,我們可以指揮 SoC 的暫存器作工在 PIN 腳上,讓這些 PIN 腳電位 [輸出|輸入] + [拉高|拉低] 來達成我們的要求。

既然是要 SoC 的暫存器工作,就可以看 SoC 的範本怎麼工作,我們依樣畫葫蘆就可以。
例如:
我們可以在 ./arch/mips/ar7240/gpio.c 裡面找到 ar7240 的 wpa, wps led, factory reset button 的 gpio ,就照抄這些 function call 去工作。

ar7240_gpio_out_val (WPS_LED_GPIO, WPS_LED_ON);
ar7240_gpio_out_val (WPS_LED_GPIO, WPS_LED_OFF);


呼叫時代入的參數,因為 gpio 是代入 PIN 腳的號碼,所以一次動作只有一個 bit(0|1) ,要特別小心注意自已代入的值是什麼。

--
參考資料:
* 維基百科上的說明 http://zh.wikipedia.org/wiki/GPIO
* 我所知道的 GPIO http://kezeodsnx.pixnet.net/blog/post/30257192
* http://www.microchipc.com/sourcecode/#PIC18LF4550_LCD_temp_sensor
* I2C 介紹 http://www.youtube.com/watch?list=PLB1BE22BA36431CFD&feature=player_embedded&v=BcWixZcZ6JY

2011/05/19

[Google] Google Map API v3 範例

其實應該看過 Google 官方網頁說明 就好了,就不用再寫什麼筆記來說明怎麼寫一個 Google Map API 了。

不過,因為 Google Map API v2 跟 V3 的差別不小,所以還是寫一個筆記來說明一下。

0. 不用申請 api key 了。
1. 要 Detect User Location ,就要用 v3。 (就是抓瀏覽網頁的這個使用者的位置)
2. 要用滑鼠滾輪,請用 v3 。(v2 我不知道用什麼方法可以,不過預設就不行,所以我就改 v3 了)
3. div 的位置有改變,所以 v3 比較好用。 v2 的 division 要放在 body 這個標籤之中,會有 js 載入的先後之類的問題, v3 變作一個 function 去呼叫,這樣使用比較方便。


好,廢話說完了,開始說明,怎麼使用:

1. 需要 load 兩隻 js 進來:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<script type="text/javascript" src="http://code.google.com/apis/gears/gears_init.js"></script>

2. 使用時呼叫 function init 就可以 (範例是在 body onload 時呼叫)
function init()
{
var map;
var infowindow = new google.maps.InfoWindow();
var myOptions = {
zoom: 14,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("mymap"), myOptions);
var pos = new google.maps.LatLng(40.69847032728747, -73.9514422416687);

map.setCenter(pos);
infowindow.setContent("my comment");
infowindow.setPosition(pos);
infowindow.open(map);
}


3. 你想秀地圖的地方,就是用一個 div 包起來, id 我這邊取叫 "mymap"。
4. 參數說明:
zoom 的部份可以微調。數字愈小就看得東西愈多,愈大就愈精細。
經緯度的部份是在這一行:
pos = new google.maps.LatLng(40.69847032728747, -73.9514422416687);
要再自已去 google map 找一下地點,然後看一下 ll 等於多少,再自已加進來。

步驟就是這樣而已,其實很簡單吧?

--
Google 官方網頁說明
Google Map API v 2 的範例 這篇寫的很棒很簡單,也感謝主人一下。

2011/05/16

[Linux][軟體] 使用 Logwatch 檢查系統日誌的重點 (懶人請用範例檔)

說到 logwatch ,雖然我已經用了很久,但是還從來沒有寫過一篇關於它的文章,所以這篇將會提到以下的煩惱:


  • 每天看 system log,是人也會瘋掉。
  • syetem log 很多,很煩,很討厭,所以很多人都不想看。
  • system log 不能連線看就只能寄 email ,寄 email 還要裝 postfix 或 sendmail 這個服務正是最容易被入侵的服務之一,為了防杜入侵結果反而造成入侵,這是本末倒置的事情。


所以這篇記錄有 3 個重點:

  1. 找出系統日誌(system log)的重點
  2. 決定多久送一次系統日誌摘要就好
  3. 改用 gmail 來送 email
logwatch 預設的 config 檔放在:/etc/logwatch/logwatch.conf
預設的 config option 很多很煩,所以簡短一點就變成下面的樣子:
LogDir = /var/log
TmpDir = /var/cache/logwatch
MailTo = your_email
MailFrom = Lunar
Print = No
Range = yesterday
Detail = Low
Service = All
Service = "-zz-network"
mailer = "mail.php your_email -s LogWatch"


設定 Logwatch 的 config 檔
  • Service 可以填入不要檢查的 service 名稱,這樣就不會一堆落落長的 log 內容每天去煩你。
  • MailTo 改成你的信箱地址
  • Range 改成你想要檢查的時間範圍
  • mailer 這邊改成我們用 phpmailer 偽裝的送信指令
用 PHPMailer 幫你透過 Gmail 送信
這個方法需要先安裝 phpmailer ,在 debian/ubuntu 底下都可以使用 apt-get install 來安裝這個套件,接著就是下載我參考資料有列出來的 範例檔 逕自修改就可以不用特地為了看 log 來跑一個 sendmail 服務。


重點就紅線框起來的地方而已,請換成你的 gmail 帳號﹑密碼就好,logwatch 會走 stdin 塞資料進來,所以範例程式後面有處理一下 stdin 的部份。

最後,不要忘記在 crontab 裡面加入 logwatch 的服務,通常會在 /etc/cron.daily/ 底下加入一個 00logwatch 的 script (有執行權 x),內容會像是:
#!/bin/bash
#Check if removed-but-not-purged
test -x /usr/share/logwatch/scripts/logwatch.pl || exit 0
#execute
/usr/sbin/logwatch --output mail
#Note: It's possible to force the recipient in above command
#Just pass --mailto address@a.com instead of --output mail

--
參考資料:

2011/05/05

[軟體] Betaradio 在 Ubuntu 11.04 上不能顯示

Betaradio 是 Linux 上面FourDollars 為播放 hichannel 廣播所做的一套軟體,還蠻好用的,不過在 Ubuntu 11.04 上面,因為政策的改變,所以預設只允許某些應用程式占用 system tray 。

不過這是可以手動修改的問題,所以我們只要做下面的動作就可以免除掉這個麻煩:
gsettings set com.canonical.Unity.Panel systray-whitelist "['JavaEmbeddedFrame', 'Mumble', 'Wine', 'Skype', 'hp-systray', 'scp-dbus-service', 'betaradio']"

理論上要
gsettings get com.canonical.Unity.Panel systray-whitelist
再追加到白名單後面才對,不過我想這樣的說明又太冗長了 ~

2011/05/01

[微軟] Windows XP 重灌錯誤 0x00000078

記錄一下,最近重灌 Windows XP 時遇到的藍底白字,原來是 sata 硬碟的關係,只要再進 Bios 的設定,把硬碟工作模式設成 IDE 就可以了。

參考來源:
安裝不了 XP

2011/04/30

[Linux] ubuntu 11.04 上的 oxim 輸入法

老實說,我在 11.04 上面 build oxim 失敗了,錯誤訊息如下:

.ui/../oxim-setup.ui.h: In member function ‘void OXIM_Setup::IMListInit()’:
.ui/../oxim-setup.ui.h:296:85: error: cannot call constructor ‘QIconSet::QIconSet’ directly
.ui/../oxim-setup.ui.h:296:85: error:   for a function-style cast, remove the redundant ‘::QIconSet’
.ui/../oxim-setup.ui.h:297:81: error: cannot call constructor ‘QIconSet::QIconSet’ directly
.ui/../oxim-setup.ui.h:297:81: error:   for a function-style cast, remove the redundant ‘::QIconSet’
.ui/../oxim-setup.ui.h:298:87: error: cannot call constructor ‘QIconSet::QIconSet’ directly
.ui/../oxim-setup.ui.h:298:87: error:   for a function-style cast, remove the redundant ‘::QIconSet’
make[4]: *** [.obj/oxim-setup.o] Error 1
make[4]: Leaving directory `/home/anton/code/oxim/oxim-setup-1.4.4/src/oxim-setup-qt3'
make[3]: *** [oxim-setup-qt3] Error 2
make[3]: Leaving directory `/home/anton/code/oxim/oxim-setup-1.4.4/src/oxim-setup-qt3'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/home/anton/code/oxim/oxim-setup-1.4.4'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/anton/code/oxim/oxim-setup-1.4.4'
make: *** [build-stamp] Error 2
dpkg-buildpackage: error: debian/rules build gave error exit status 2
anton@anton-nb:~/code/oxim/oxim-setup-1.4.4$
anton@anton-nb:~/code/oxim/oxim-setup-1.4.4$
不過還好的是,以前 build 給 ubuntu 10.10 的 oxim deb 包裝 還可以使用,所以就下載下來安裝就先用著了。

對了,不要忘記,安裝完後要
im-switch -a all_ALL oxim

指定現在使用的輸入法給 oxim ,讓下次開機登入時 oxim 就可以正常使用了。

更新:
問題已解決,新的 11.04 oxim deb 包裝參照舊文的連結

[Linux] Ubuntu 11.04 第一印象 - 精簡風

話說 Ubuntu 11.04 出來了,所以我也更新我家裡的 ubuntu desktop 到 11.04 的版本上去。不過因為這版的 ubuntu 其實改得蠻大的,所以不是很建議一般使用者冒然就更新到這個版本上去,應該會有很多不適應的地方。

像是面版(gnome-panel)不見了,選單不見了,取而代之的 unity 這個使用者介面。
工具列上的狀態列(notification/system tray)預設狀態也是走精簡風,很多訊息都不秀出來,所以剛開始很不習慣。
圖左紅框是我所說的 unity 使用者介面最基本的表現。圖上紅框是狀態指示列(system tray),這邊的圖示比以前要少了很多,也沒有右鍵提示選單可以設定。

預設沒有舊式功能表「應用程式」﹑「功能選單」這種東西,所以一切都在右上角的 start 按下去之後開始,也可以選擇按 alt + f2 來開啟一項應用程式,在邊打字的同時就會提示你可能要的應用程式是哪些。

另外,在 start > 更多程式 > 的選單也可以看到如下圖的分類項目:


第一個想法是 ubuntu 想開始走平板電腦的路線,所以很多功能要精簡化,不想要一堆選擇,就是可以很簡單的 click, click, click 然後 就達成自已想要的功能。當然不是替 ubuntu 護航,覺得以前那樣不好,以前功能一列展開也可以很快的找到自已想要的東西,但是在 touch panel 上面就顯得很不方便,很容易不小心就按到別的去了。

2011-04-30 更新:
剛剛發現其實在右上角的登出按扭最底下就有跑一個「系統設定」裡頭就可以呼叫「控制中心」出來使用。

2011-05-01 更新:
剛發現一個快速鍵(super + tab, number) 可以用鍵盤很快叫出 toolbar 上面的應用程式如下圖 ~

2011-0502 更新:
gsettings set com.canonical.Unity.Panel systray-whitelist "['all']" 可以讓我的 oxim 顯示 在 system tray 沒錯,不過整個布景主題就出問題了,還不知道為什麼,所以暫時不能用這招,再來看看這個 array 存的是 x class name 還是什麼。

2011-05-04 更新:
讓 libreoffice 支援 Global Menu 的方法:
sudo apt-get install lo-menubar

2011-05-06 更新
Unity 的快速鍵列表
--
參考來源:
如何讓 Ubuntu 11.04 上的 LibreOffice 支援 Global Menu
Unity 的快速鍵列表

2011/04/01

[Linux] Dropbox 跑在 Linux Command Line

主要參考資料是從這邊來的。

前情提要:
我已經先跑過 nautilus-dropbox 的部份,所以登入授權應該已經有了,後來把 gdm 關掉,讓這台 server 就只跑服務而已,就沒有在跑 X, gdm, web browser 之類的東西 。

1. 安裝

要先下載 dropbox 的工具,包含 daemon 的部份:
wget -O dropbox.tar.gz "http://www.dropbox.com/download/?plat=lnx.x86"
然後解開這一包,會跑出來 .dropbox-dist 目錄。
安裝說明是建議我們放在 $HOME 底下,所以就照著作。
(事實上, nautilus 的版本也有這包東西放在 $HOME 底下)
然後去跑它:
~/.dropbox-dist/dropboxd

如果先前沒有註冊過的話,現在跑起來會跑出下面的畫面:

再把它提示的這個連結,丟到你的瀏覽器裡面,它就會要你輸入你的 dropbox 帳號密碼,然後登入成功後,就把你的 daemon 跟這個帳號連結在一起,如此一來,你的 $HOME/Dropbox 目錄就會自動同步你的檔案了。

2. 操作
dropbox.py可以幫你在這個 daemon 跑起來之後獲得這個 daemon 的運行狀態,像是連線中,還是下載﹑上傳檔案中之類的。

3. 自動啟用
dropbox 有提供一個範本,我作了點修改,把這個 script 下載下來,然後丟到 /etc/init.d/ 底下,命名作 dropbox ,並 chmod +x 。
接著按 ubuntu 的現況是用 update-rc.d 來加入 run level 的管理:
sudo update-rc.d dropbox defaults

這樣就可以每次重開機後,還會自動開啟 dropbox 的 daemon。

--
參考資料:
http://wiki.dropbox.com/TipsAndTricks/TextBasedLinuxInstall/UbuntuStartup
http://wiki.dropbox.com/TipsAndTricks/TextBasedLinuxInstall

2011/03/28

[Linux] apache 藏 .svn 目錄的技巧

用 apache + svn 寫網頁習慣了,結果 subversion 會有 .svn 的目錄留存著,所以需要再用點技巧去把這些重要資訊再藏起來,其中:
    RedirectMatch 404 /\\..*(/.*|$)
會把 .svn 的目錄導引到 404 的頁面去。
    
        Order Allow,Deny
        Deny From All
  

會把 .svn 的目錄統統拒絕存取。
---
參考資料:
20 種保護你的網站的方法

2011/03/24

[軟體] 中華電信 P874 設定無線網路

話說中華電信這台 P874 要設定無線網路要使用一點密技的方法大家都知道了。在網路上 google "中華電信" "p874" 可以找得到一堆結果出來使用。不過並不是每個人都有空去看那一堆文章,遇到網路沒有辦法連線的時候,更是讓人頭痛。

所以我就想問「既然改 config 檔就可以開放無線網路的功能出來了,為什麼不放一個 config 檔出來就好了呢?」於是乎,我把這個 config 檔放在我的 dropbox 資料夾裡,可以在這邊下載得到。如果瀏覽器直接打開這個 config 檔,請在連結上面按右鍵直接下另存新檔。

檔案下載下來後直接找到 P874 restore settings 的地方,把這個 config 檔丟進去,然後重開裝置後,進 web 頁面修改 wireless 的密碼 (config 裡面預設 ssid 是 P874, 密碼是 1234567890),還有 WAN 的 hinet 連線帳號跟密碼就可以。

p874 的 super 帳號是 cht/chtnvdsl (或 chtcvdsl, chtsvdsl),一般使用者帳密是 user/user。
備註:super 帳號有時連進 web 會看不到無線網路的部份,不用驚慌,我也不知道為什麼。

參考資料:

[Linux] Apache2 NameBased VirtualHost 設定

apache 的 NameVirtual Host 很好用,你可以很簡單的用 dyndns 的服務註冊兩個 domain name:
a, b 到同一個 ipaddress 上面去,然後用 a 域名連網頁時看到 a 網站,用 b 域名連網頁時看到 b 網站,這樣可以節省掉很多網頁架站的成本。

不過很多時候我會忘記文件在哪裡,所以一時要用又找不到哪邊有參考的設定檔。所以本篇就是在提醒「用網人」一下,文件在哪裡?

1. 用 google 關鍵字:"apache2" "namevirtualhost" --> 不夠好,因為常常找出來一堆垃圾。

2. 看 apache 官方的文件?像是這裡? --> 不夠好,因為官網上的文件通常是最新的,所以不一定能符合你現在使用的版本,這樣他講他的版本,你的設定不見得能派上用場。

3. 看套件中的文件?像這裡
/usr/share/doc/apache2/examples/apache2/extra/httpd-vhosts.conf
媽啦~ 明明人家就有隨套件附給你文件了,根本不用 google 啊~



  • 重點1: 確定 "NameVirtualHost *:80" 這一行有開。Ubuntu 在 ports.conf 裡面就有,所以不用加這一行。
  • 重點2: 用 "" 標籤包你眾多的 Vhost 起來。
  • 重點3: 至少要填寫 ServerName 跟 DocumentRoot 這兩個值
其實 NameVirtualHost 還蠻簡單的,不用害怕難搞定啊 ...

2011/03/14

[軟體] VirtualBox 硬碟調整大小

話說 VirtualBox 的硬碟調整大小一向是使用者很困擾的事情,大多的文章會建議下列步驟:

  1. 建立一個較大尺寸的新的硬碟
  2. 使用 rescue CD 同時載入新舊兩顆硬碟
  3. 使用 parted 之類的軟體,進行硬碟複製

現在 VirtualBox 4.0 beta 之後的版本提供新的變動方法~
一行指令就可以:
VBoxManage modifyhd --resize 新的大小 XXX.vdi


這行指令下完不到 1 秒鐘就完成了,這樣是不是比原來的 1, 2, 3 要方便很多呢?

2011/02/25

[Linux] OpenOffice 和 Google Docs 合體作戰


--
備忘:
資料來源: http://extensions.services.openoffice.org/en/project/ooo2gd
如果 OOo 3.2.1 不能裝的話 試試看:
sudo apt-get remove openoffice.org-java-common openoffice.org-java && sudo apt-get install openoffice.org-java-common openoffice.org-java

2011/02/04

[Linux] nautilus script review, nautilis-script 出錯, 加上圖片簽名

話說 Ubuntu Tweak 上面有一個 nautilus 的 script 的功能可以加,功能選單在底下:

這些指令稿其實還蠻好用的,像"轉換圖片成 JPEG" 還是"轉換圖片成 GIF"之類的(註1)。

我把我常用的指令稿放在:
http://dl.dropbox.com/u/1117561/nautilus-script.tgz

裡面有 convert 成 1024x768 size 的指令稿 (這樣縮圖很快,方便上傳到網路上面)
也有轉換成 JPG, GIF, PNG 的指令稿,還有一個是在圖片上面加上簽名的指令稿。

解壓縮放到 $HOME/.gnome2/nautilus-scripts 底下就可以在 nautilus 的檔案右鍵上面看到。
--
註1: 指令稿的 convert 指令需要 magick 套件支援,所以請先安裝 imagemagick 套件。另外,因為 ubuntu tweak 的 script 裡面的 os.system('convert %s %s' % (file, new_name(file))) %s 忘了前後加上雙引號 " ,所以遇到特殊字元或空白時就會出錯。

2011/01/25

[Programming] chickenfoot , firefox 上面的瑞士小刀

前言:網路論壇 這邊 我有在 ptt 上面提示人家說,用 chickenfoot 可以解決他的問題。不過他的留言提到一個問題, chickenfoot 不能處理提示(alert)視窗的部份。其實 ... 他搞錯了,並不是不能,只是他不會而已。

讓我簡單的介紹一下 chickenfoot 是一款什麼樣的軟體。你可以用 它 來控制你的 firefox ,利用它來點擊每個網頁的連結,做你想要的測試或其它人手能作的動作。像是進到 google 的首頁,輸入關鍵字,再點擊 google search 的按鈕之類的。

以一個邪惡的應用來說,會像是「蘋果點點紅」的活動,你可以用 chickenfoot 很方便的載入你的 script ,去尋找點點紅的連結,最終達成點擊完所有的點數,這樣就可以拿到獎品。

邪惡的範例內容邏輯示意如下:

1. 用 script 找出所有 50 個點數。
2. 建成 array 。
3. for (i = 0; i < array.length; i ++) {
    go(array[i]);
} /* 點擊所有的點數 */
4. 處理 alert 視窗。

前面都很簡單,第四點的 alert 視窗不好處理,不過並不是沒有。
google keyword "firefox" "chickenfoot" "alert" "handle" 在 chickenfoot 的範例 repository 裡面一樣可以找得到一些範例。(藉此說明,網路的資訊常常以偏概全或積非成是?)

我消化了一下這邊論壇的範例,改成這樣:
function handleDialog()
{
    if (closeWindow() == false) {
        output("W");
        setTimeout(handleDialog, 500);
    } else {
        output("x");
    }
}

可以確保一定能關掉這個 alert 視窗,減少人手操作的需求。
至於邪惡的蘋果點點紅的 chickenfoot 的 script 連結在此
有需要可以拿這個參考。

操作也很簡單, Ctrl + O 載入 script ,再按下play ,接著會詢問你帳號密碼,打完之後就自動點擊完 50 點。(當然,這之中 firefox 是完全由這支 script 所控制的,跑完才把瀏覽器還給你 )

2011/01/10

[新聞] Ubunutu 11.04 開始採用 Unity 做為預設視窗介面(WM)

是的, Ubuntu 從 11.04 開始採用 unity 做為預設的視窗介面了。摒棄了 Gnome 的 Ubuntu 目的何在?且讓我們先看一下 unity 長什麼樣子:



這邊可以看得出來 Unity 的特點是:
1. 按鍵式介面(無桌面上的 icon 全部消失了)
2. 滿版外觀(部份應用程式像 pidgin 還是可以只有小小的一個在旁邊掛著)
3. 無標題列,改用 global menu applet。
4. 工作區直接這個面版上切換
5. 延續之前的設計,視窗按鈕在左邊,也避免了和 indicator 還有 logout / clock applet 的衝突。
6. 加強鍵盤的控制,按下視窗鍵可以用快速鍵直接操作面版上的按鍵。

筆者以為這樣介面的存在應該是為了因應平板電腦的興起而存在,因為像這樣的介面,非常適合觸控式的操作模式,這個面板還可以用拖拉的方式向上或向下延伸,再加下滿版的外觀,和無標題列節省顯示器上的空間,一整個感覺就是在向平板電腦操作的邁進。

不過這樣的設計似乎漏算了幾個地方:
1. 沒有考慮到 儲存裝置/NFS/SMBFS 的處理 (像 docky 有一個 mounter 來處理這個操作)
2. "還" 沒有考慮到客製化的部份 (我用拖拉沒有辦法新增這個面板上的按鍵)(說"還"是因為這還在開發中,所以應該會再做調整)
3. 功能和 dock applet 重複,所以感覺有點多餘(當然,也是因為我還有用 docky 的關係,所以還不確定這邊要怎麼劃分功能)


總結前言:
我覺得這個 WM 在效能和操作上與 Gnome 是兩個設計的面向,並沒有什麼好與不好,不過就小弟的偏好而言,比較喜歡 Unity 這樣簡單快速的介面(而且這樣我的美女桌布就可以要看時就完整的呈現)。不過這應該還只是個「半成品」,離明年四月正式釋出的時間還早,相信還有更多的設計在後面接著會跑出來,且讓我們拭目以待。

--
參考資料:
http://arstechnica.com/open-source/reviews/2010/05/exclusive-hands-on-with-ubuntus-new-unity-netbook-shell.ars
http://www.ubuntu-tw.org/modules/newbb/viewtopic.php?topic_id=32518

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...