聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

五月 12, 2012
» 藉由 Gobi 2000 啟用 ThinkPad T410 行動網路 on Ubuntu 10.04

約一年前凍仁就曾考慮過為這台 ThinkPad T410 (2518-A38) 補上張行動網卡,直接內建就不需再外接 USB 3G 網卡,但基於技術上的考量還是先採購了 NOKIA N900 來使用,相信大多數的伙伴都會這樣選擇的,它除了可以模擬 USB 3G 網卡撥接,也可開 NAT 分享網路給 T410,真的很方便!但同時續航力也會大打折扣,畢竟智慧型手機也是要吃電的,然後還會順便拿筆電充電

後來才得知想在筆記型電腦(Laptop)上使用內建的行動網卡還需符合 WWAN Ready 才行,也就是說除了行動網卡以外,還要有天線及 SIM 卡槽。凍仁很幸運的得到 David 前輩支援,除了裝上 Qualcomm Gobi 2000 這張行動網卡以外,連天線也一併換掉了,而 SIM 卡槽的部份原先就有內建,不過這是在整台拆開後才確認的,成功改造一番後 T410 終於可以直接使用行動網路了!

作業系統相容性部份 WindowsXP, Windows7 官方都有支援,但有很大的機率會失敗,並沒有想像中的穩;Ubuntu 目前只支援 10.04 (kernel 2.6),其 11.10 (kernel 3.0) 以及 12.04 (kernel 3.2) 還不支援,為此凍仁也花了些功夫把原先的 11.10 換成 10.04,好險當初有多切幾個分割區,不然會連 12.04 都沒得玩,經凍仁一週的測試後得 Ubuntu 10.04 最穩,其搭配重新掛載模組的指令(請參考 5.3)都能成功連線!

1. 檢查裝置(Check Device)


開始前先看一下系統有沒有抓到 Gobo 2000 這張卡,其 WWAN 的介面一般都是掛在 USB 底下,所以得使用 lsusb 指令檢查。一開始 USB ID 的值會是 05c6:9204,完成以下步驟並成功初始化後的值將為 05c6:9205,也就是說要最後要取得後者才行,。
jonny@lucid:~$ lsusb | grep -i "Qualcomm" [Enter]
Bus 002 Device 003: ID 05c6:9204 Qualcomm, Inc.

# USB ID: 05c6:9204 (loader)
# USB ID: 05c6:9205 (modem)

2. 取得韌體(Get firmware)


2.1. 至 Lenovo 下載韌體,請依各電信業者選擇韌體,台灣用戶請選 (6) Generic UMTS

2.2. 使用 Windows 解開 7xwc48ww.exe 或者加裝 wine 解開。

2.3. 建立放置韌體的目錄。
jonny@lucid:~$ sudo mkdir -p /lib/firmware/gobi/ [Enter]

2.4. 複製對應的韌體至 /lib/firmware/gobi/。
jonny@lucid:~$ cp 6/UQCN.mbn /lib/firmware/gobi/ && \
cp UMTS/*.mbn /lib/firmware/gobi/ [Enter]

2.5. 檢查檔案完整性,對照表請參考 ThinkWiki
jonny@lucid:~$ md5sum /lib/firmware/gobi/*.mbn [Enter]
80fcfbb41a7d4331d4b7145972f5f3c4   /lib/firmware/gobi/amss.mbn
00cbd411048cdadc3e4caf0d89d14fca   /lib/firmware/gobi/apps.mbn
bdf27325ebb63251c1310cd3a8f7bab6   /lib/firmware/gobi/UQCN.mbn

3. 安裝(Install)


3.1. 加入套件來源並更新套件庫。
jonny@lucid:~$ sudo add-apt-repository ppa:linrunner/thinkpad-extras && sudo aptitude update [Enter]

3.2. 安裝 gobi-loader 以及為 ThinkPad 客製化的 kernel
jonny@lucid:~$ sudo aptitude install gobi-loader linux-generic-tp \
linux-image-generic-tp linux-headers-generic-tp [Enter]

3.3. 若想使用快捷鍵開關 WWAN 可順便裝上 tp-wwan-hotkey
jonny@lucid:~$ sudo aptitude install tp-wwan-hotkey [Enter]

3.4. 重新開機,請改選 kernel 有 tp 字樣選項,若已裝過 nVidia, hdapsd 或 Virtualbox 等需取編譯 kernel 相關模組的套件可能需重裝
jonny@lucid:~$ sudo shutdown -r now [Enter]

4. 環境設定(Environment Configure)


4.1. 檢查 WWAN 狀態,並確認 WWAN 裝置已開啟。
jonny@lucid:~$ cat /var/lib/NetworkManager/NetworkManager.state [Enter]
[main]
NetworkingEnabled=true
WirelessEnabled=true
WWANEnabled=true
#WimaxEnabled=true   # Ubuntu 12.04 才有此行。

4.2. 若 WWAN 未啟動可使用 tp-wwan-hotkey 的快捷鍵 Fn + F6 切換。

WWAN: on.

WWAN: off.

4.3. 新增行動網路(mobile broadband)連線設定。

4.3.1. 應用程式選單 → 系統 → 網路連線。

4.3.2. 行動網路 → 新增。

4.3.3. 選擇 Gobi 2000 裝置。

4.3.4. 在城市列表中選取台灣(Taiwan)。

4.3.5. 選取電信業者,以下使用威寶電信(Vibo Telecom)為例。

4.3.6. 由於未收入 375 網路吃到飽專案,故手動修改成 APN 為 internet。

4.3.7. 同意後以上的設定才算建立完成。

4.3.8. 完成後可以在網路列表看到 Vibo Telecom 的選項。

4.3.9. 連線成功!令人感動的一刻

4.3.10. 察看 IP 資訊。
jonny@lucid:~$ ifconfig ppp0 [Enter]
ppp0      Link encap:Point-to-Point Protocol  
inet addr:1.200.147.149 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:546 (546.0 B) TX bytes:249 (249.0 B)

5. 除錯(Debug)


以下紀錄些 Debug 的東西,可略過。

5.1. 監控 log。
jonny@lucid:~$ sudo tail -f /var/log/syslog [Enter]

5.2. Ubuntu 12.04 目前還不支援,以下為 WWAN 跑不起來的訊息。
jonny@lucid:~$ sudo tail -f /var/log/syslog [Enter]
May  3 22:02:14 thinkpad-t410 NetworkManager[1191]:  Activation (ttyUSB1) starting connection 'Vibo Telecom'
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: Activation (ttyUSB1) starting connection 'Vibo Telecom'
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): device state change: disconnected -> prepare (reason 'none') [30 40 0]
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: Activation (ttyUSB1) Stage 1 of 5 (Device Prepare) scheduled...
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: Activation (ttyUSB1) Stage 1 of 5 (Device Prepare) started...
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: Activation (ttyUSB1) Stage 1 of 5 (Device Prepare) complete.
May 3 22:02:14 thinkpad-t410 modem-manager[17215]: (ttyUSB1) opening serial port...
May 3 22:02:14 thinkpad-t410 modem-manager[17215]: Modem /org/freedesktop/ModemManager/Modems/0: state changed (disabled -> enabling)
May 3 22:02:15 thinkpad-t410 modem-manager[17215]: (ttyUSB1): using text mode for SMS
May 3 22:02:15 thinkpad-t410 modem-manager[17215]: Modem /org/freedesktop/ModemManager/Modems/0: state changed (enabling -> enabled)
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: WWAN now enabled by management service
May 3 22:02:15 thinkpad-t410 modem-manager[17215]: Modem /org/freedesktop/ModemManager/Modems/0: state changed (enabled -> registered)
May 3 22:02:15 thinkpad-t410 kernel: [13718.358807] modem-manager[17215]: segfault at 7fea28778b51 ip 00007fea286ed0f8 sp 00007fff7cca5580 error 4 in libpcre.so.3.12.1[7fea286da000+3c000]
May 3 22:02:15 thinkpad-t410 kernel: [13718.458948] init: modemmanager main process (17215) killed by SEGV signal
May 3 22:02:15 thinkpad-t410 kernel: [13718.458983] init: modemmanager main process ended, respawning
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: the modem manager disappeared
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): now unmanaged
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): device state change: prepare -> unmanaged (reason 'removed') [40 10 36]
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): deactivating device (reason 'removed') [36]
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: nm_system_iface_flush_routes: assertion `ifindex > 0' failed
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: nm_system_iface_flush_addresses: assertion `ifindex > 0' failed
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: ModemManager (version 0.5.2.0) starting...
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin AnyData
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin MotoC
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Nokia
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Linktop
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Novatel
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Sierra
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin ZTE
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Generic
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Gobi
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Option High-Speed
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Wavecom
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Samsung
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Ericsson MBM
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Huawei
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin X22X
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin SimTech
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Longcheer
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Option
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: Policy set 'Wired connection 1' (eth0) as default for IPv4 routing and DNS.
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: Policy set 'Wired connection 1' (eth0) as default for IPv4 routing and DNS.
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): cleaning up...
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): taking down device.
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: (ttyUSB0) opening serial port...
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: (ttyUSB1) opening serial port...
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: (ttyUSB2) opening serial port...
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: trying to start the modem manager...
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: modem-manager is now available
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) closing serial port...
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) serial port closed
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) opening serial port...
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (Gobi): GSM modem /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4 claimed port ttyUSB1
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) closing serial port...
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) serial port closed
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB0) closing serial port...
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB0) serial port closed
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB0) opening serial port...
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB2) closing serial port...
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB2) serial port closed
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB2) opening serial port...
May 3 22:02:30 thinkpad-t410 modem-manager[20121]: (ttyUSB0) closing serial port...
May 3 22:02:30 thinkpad-t410 modem-manager[20121]: (ttyUSB0) serial port closed
May 3 22:02:33 thinkpad-t410 modem-manager[20121]: (ttyUSB2) closing serial port...
May 3 22:02:33 thinkpad-t410 modem-manager[20121]: (ttyUSB2) serial port closed
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): failed to look up interface index
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: WWAN now disabled by management service
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): new GSM/UMTS device (driver: 'qcserial' ifindex: 0)
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): exported as /org/freedesktop/NetworkManager/Devices/4
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): now managed
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): device state change: unmanaged -> unavailable (reason 'managed') [10 20 2]
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): deactivating device (reason 'managed') [2]
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: nm_system_iface_flush_routes: assertion `ifindex > 0' failed
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: nm_system_iface_flush_addresses: assertion `ifindex > 0' failed
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): device state change: unavailable -> disconnected (reason 'none') [20 30 0]


5.3. 當 USB ID 為 05c6:9204 時可以手動重啟 modem-manager 以及重新掛載 qcserial 模組。
jonny@lucid:~$ sudo pkill modem-manager; sudo rmmod qcserial; sudo modprobe qcserial [Enter]

延伸閱讀:
What is wwan ready - answers.com
親自操刀,拆解 T410 加裝 3G WWAN 天線 - it168.com
ThinkPad T410 拆機紀錄 - David 的 Flickr
Setting the default carrier firmware when installing GOBI 2000 driver - ThinkPad

相關連結:
Qualcomm Gobi 2000 Wireless WAN Driver for Windows 7 (32-bit, 64-bit), Vista (32-bit, 64-bit) and XP - ThinkPad
ThinkPad Extras : linrunner - launchpad.net
Qualcomm Gobi 2000 - ThinkWiki

資料來源:
Howto: Gobi 2000 generic GSM/UMTS on Thinkpads - Ubuntu Forums
[kubuntu] Unable to connect using Qualcomm Gobi 2000 on thinkpad t410 - Ubuntu Forums
Qualcomm Gobi 2000 unter Linux installieren – ThinkPad-Wiki

五月 10, 2012
» [筆記] Ubuntu apt-get update 出現 NO_PUBKEY / GPG error

logo-Ubuntu

當我們更新 Ubuntu/Debian 伺服器套件時,apt-get update 出現底下錯誤訊息

W: GPG error: http://ppa.launchpad.net maverick Release:
The following signatures couldn't be verified because the public key is not available:
NO_PUBKEY 1C1E55A728CBC482


網路上找到一篇 [Debian] Apt-get : NO_PUBKEY / GPG error,解決方式非常容易,上面錯誤訊息有告知 public key 是 1C1E55A728CBC482,透過底下兩個步驟就可以成功解決,請注意務必將 public number 換成上面錯誤訊息的號碼

gpg --keyserver pgpkeys.mit.edu --recv-key  1C1E55A728CBC482    
gpg -a --export 1C1E55A728CBC482 | sudo apt-key add -

之後再重新跑 apt-get update 即可。

Related View

» 如何使用 Apache Module mod_mime

apache_software_foundation_logo_3074

Apache 可以透過 mod_mime 模組且根據使用者定義的副檔名來 response data 給 Client 端,此功能可以應用在前台搭配 Template Library,例如 Mustache Logic-less templates,透過此 Apache 模組 可以在 html 檔案將定義好全部 Template,一次讀取進來,底下舉個例子:

<script type="text/x-mustache-template" data-id="me">
  <!--#include file="assets/templates/test1.mustache" -->
</script>

我們希望 apache 能夠讀取 assets/templates/test1.mustache,並且將檔案內容放到 script 裡面,這時候就必須在 apache httpd.conf 定義 text/x-mustache-template

<IfModule mime_module>
    AddType text/x-mustache-template .mustache
    AddOutputFilter INCLUDES .mustache
</IfModule>


接著必須設定網站根目錄可以輸出 include file

<Directory "C:/xampp/htdocs">
    Options All
    AllowOverride All
    SetOutputFilter INCLUDES
    Order allow,deny
    Allow from all
</Directory>

上面例子是 xampp httpd.conf 檔,設定完成後重新啟動 apache,大家就可以發現,原本的 js 就會變成

<script type="text/x-mustache-template" data-id="me">
  Hi, {{first_name}} {{last_name}} 使用者
</script>

這有個缺點就是,之後在轉移機器,就要在重新設定 Apache,為了省掉這個步驟,推薦大家使用 RequireJs 模組: Text plugin

Related View

五月 4, 2012
» AptURL on Ubuntu 11.10

一年又要過了,算一算凍仁已經認識 Ubuntu 1,442 天,也就是再過 18 天就滿 4 年,然後這個 Blog 也就四歲了,也挺佩服 2008 年的自己寫了 200 多篇文章,這邊就讓凍仁多凹一篇了,以下是凍仁在 Oneiric Ocelot (有夢的虎貓) 除預載的套以外另行安裝的部份,互相交流囉 :-)

1. 附屬應用程式

7zip - 7z and 7za file archivers with high compression ratio.
Figaro's Password Manager 2 - 密碼管理員,除使用 AES-256 加密外,也可使用金鑰雙認證機制。 (more)
FBReader - 電子書閱讀器,除 Linux 外還支援 Android. FreeBSD, Maemo 及 Windows。 (more)
Guake Terminal - 是個能在 Gnome 快速由上而下彈跳出來的終端機,有著類似 KDE 的 yakuake 效果。 (more)
GVim Test Editor - Vi 純文字編輯器的強化版。
MySQL Client - MySQL 資料庫終端。
QuickSynergy - 簡單的 Synergy 圖形設定介面。 (more)
Screen Message - 在全螢幕顯示大大的文字。
Shutter - 擷取、編輯及分享螢幕截圖。
Terminator - 在單一視窗使用多個終端機。
Wallch - 自動更換桌布,也就是讓桌布有幻燈片的功能模式。
Xournal - 使用手寫筆記。
Zim - 使用 Python 撰寫的私有筆記,並支援 windows 平台。

2. 美工繪圖

GIMP - GNU 授權的影像處理程式。
Gcolor2 - 簡單的 GTK2 顏色擷取程式。

3. 網際網路

Chromium Browser
Dropbox (third-party) - Dropbox integration for Nautilus. (more)
Filezilla - 圖形化的 FTP Client,並同時支援 Windows 及 Mac OS X。
Googlizer - utility to search Google via your GNOME menu/panel.
Google Chrome (third-party) - Google 瀏覽器。 (more)
JDownloader (third-party) - 跨平台的免費空間下載套件。 (more)
Mutt - 文字模式的收信套件,並支援 MIME, GPG, PGP 及穿梭。
Opera (third-party)
Skype (third-party)
Thunderbird
Wireshark - 網路封包分析套件。

4. 影音

Audacious - 音樂播放器。
EasyTAG - viewing, editing and writing ID3 tags.
Google Music Frame (third-party) - 將 Google Music 整合至狀態列的小工具。 (more)
MOC - 基於 ncurses 的純文字音樂播放器。 (more)
SMplayer - 完整的 MPlayer 前端套件。
VLC media player - VLC 影音播放器。

5. 佈景主題與系統調校

CCSM - Compiz 進階設定工具。
Compiz Extra Plugins - Compiz 的額外/擴充套件。
ClassicMenu Indicator (third-party) - 於狀態列使用傳統選單,強烈推薦給還用不慣 Unity 的伙伴。 (more)
MyUnity (third-party) - Unity 設定工具。 (more)
Gnome Tweak Tool - Gnome Shell 的進階設定工具,可調整佈景主題、滑鼠指標以及字型等等。 (more)
Gufw - 圖形化的 ufw 防火牆設定工具。
Indicator CPUfreq - CPU frequency scaling indicator. (more)
Indicator for Keys Lock (third-party) - An appindicator for showing the status of the keyboard lock keys. (more)
Indicator Virtualbox (more)
Ubuntu Tweak (third-party) - 專門為 Ubuntu 製作的調校工具,素有 Ubuntu 優化大師之稱。 (more)

6. 辦公

Adobe Reader - 檢視 PDF 的閱讀器。
Dia - 流程圖繪製套件。

7. 開發者工具

Bluefish - C, CSS, HTML, PHP, SQL.. 多種程式語言 的 IDE。
Eclipse - Extensible Tool Platform and Java IDE.
Meld - diff 及 merge 的圖形化套件。

8. 未分類

Aptitude - 文字模式的套件管理員。
AptURL - install packages using the apt protocol - GTK+ frontend.
Cmatrix - 在終端機秀出「駭客任務」中很酷的動畫。
dstat - 萬能的資源統計工具。
Gnome Classic - 傳統 Gnome 模式。
Gnome Shell
GParted Partition Editor - GNOME 分割區編輯套件。
Hime (third-party) - 中文輸入法,為 Gcin 的衍生版本。 (more)
Hime Chewing (third-party) - 移植至 Hime 上的新酷音輸入法。
Htop - 互動式的行程檢視器。
libnotify-bin - 可送自訂訊息到訊息服務。
Nautilus Scripts Manager - 在檔案管理程式(Nautilus)增加自訂 Script 選單。
Openssh Client - SSH 終端機。
rcconf - Debian Runlevel configuration tool, like Redhat`s chkconfig.
tasksel - Debian 有內建但 Ubuntu 沒有的套件管理軟體,可依照其需求(任務)安裝套件,例如 Lubuntu, Kubuntu, LAMP..
Unity 2D
Virtualbox - 虛擬機器。
w3m - 文字模式的瀏覽器。

全選/取消


2011-12-14


凍仁用了 jQuery 及 Javascript 的技術做了個 一次安裝按鈕,在此要感謝能讓凍仁現學現賣的 星夜如雨、以及一同討論的 雨蒼BlueT 前輩們 :-)

站內連結:
AptURL

相關連結:
Luna's Debian Archiver

延伸閱讀:
Google Libraries API - Google Code

» Enable WWAN whti Gobi 2000 at ThinkPad T410 on Ubuntu 10.04

= Enable Gobi 2000 at ThinkPad T410 on Ubuntu 10.04 =
藉由 Gobi 2000 啟用 ThinkPad T410 行動網路 on Ubuntu 10.04

約一年前凍仁就曾考慮過為這台 T410 補上張行動網卡,直接內建就不需再外接 USB 3G 網卡,但基於技術上的考量還是先採購了 NOKIA N900 來使用,相信大多數的伙伴都會這樣選擇的,它除了可以模擬 USB 3G 網卡撥接,也可開 NAT 分享網路給 T410,真的很方便!但同時續航力也會大打折扣,畢竟智慧型手機也是要吃電的,然後還會順便拿筆電充電

後來才得知想在筆記型電腦(Laptop)上使用內建的行動網卡還需符合 WWAN Ready 才行,也就是說除了行動網卡以外,還要有天線及 SIM 卡槽。凍仁很幸運的得到 David 前輩支援,除了裝上 Qualcomm Gobi 2000 這張行動網卡以外,連天線也一併換掉了,而 SIM 卡槽的部份原先有內建,不過這是在整台拆開後才確認的。成功改造一番的 T410 現在可以直接使用內建的行動網路了!

作業系統的相容性部份 WindowsXP, Windows7 官方都有支援,但 Ubuntu 目前只支援 10.04 (kernel 2.6),其 Ubuntu 11.10 (kernel 3.0) 及 12.04 (kernel 3.2) 還不支援,為此凍仁也花了點功夫把原先的 11.10 換成 10.04,好險當初多預留個分割區,才不會連 12.04 都沒得玩

1. 檢查裝置(Check Device)

開始前先看一下系統有沒有抓到 Gobo 2000 這張卡,其 WWAN 的介面一般都是掛在 USB 底下,所以得使用 lsusb 指令檢查。一開始 USB ID 的值會是 05c6:9204,完成以下步驟並成功初始化後的值將為 05c6:9205,也就是說要最後要取得後者才行,。
jonny@linux:~$ lsusb | grep -i "Qualcomm" [Enter]
Bus 002 Device 003: ID 05c6:9204 Qualcomm, Inc.

# USB ID: 05c6:9204 (loader)
# USB ID: 05c6:9205 (modem)

2. 取得韌體(Get firmware)


2.1. 至 Lenovo 下載韌體,請依各電信業者選擇韌體,台灣用戶請選 (6) Generic UMTS

2.2. 使用 Windows 解開 7xwc48ww.exe 或者加裝 wine 解開。

2.3. 建立放置韌體的目錄。
jonny@linux:~$ sudo mkdir -p /lib/firmware/gobi/ [Enter]

2.4. 複製對應的韌體至 /lib/firmware/gobi/。
jonny@linux:~$ cp 6/UQCN.mbn /lib/firmware/gobi/ && \
cp UMTS/*.mbn /lib/firmware/gobi/ [Enter]

2.5. 檢查檔案完整性,對照表請參考 ThinkWiki
jonny@linux:~$ md5sum /lib/firmware/gobi/*.mbn [Enter]
80fcfbb41a7d4331d4b7145972f5f3c4   /lib/firmware/gobi/amss.mbn
00cbd411048cdadc3e4caf0d89d14fca   /lib/firmware/gobi/apps.mbn
bdf27325ebb63251c1310cd3a8f7bab6   /lib/firmware/gobi/UQCN.mbn

3. 安裝(Install)


3.1. 加入套件來源並更新套件庫。
jonny@linux:~$ sudo add-apt-repository ppa:linrunner/thinkpad-extras \
&& sudo aptitude update [Enter]

3.2. 安裝 gobi-loader 以及為 ThinkPad 客製化的 kernel
jonny@linux:~$ sudo aptitude install gobi-loader linux-generic-tp \
linux-image-generic-tp linux-headers-generic-tp [Enter]

3.3. 若想使用快捷鍵開關 WWAN 可順便裝上 tp-wwan-hotkey
jonny@linux:~$ sudo aptitude install tp-wwan-hotkey [Enter]

3.4. 重新開機,請改選 kernel 有 tp 字樣選項,若已裝過 nVidia, hdapsd 或 Virtualbox 等需取編譯 kernel 相關模組的套件可能需重裝
jonny@linux:~$ sudo shutdown -r now [Enter]

4. 環境設定(Environment Configure)


4.1. 檢查 WWAN 狀態,並確認 WWAN 裝置已開啟。
jonny@linux:~$ cat /var/lib/NetworkManager/NetworkManager.state [Enter]
[main]
NetworkingEnabled=true
WirelessEnabled=true
WWANEnabled=true
#WimaxEnabled=true   # Ubuntu 12.04 才有此行。

4.2. 若 WWAN 未啟動可使用 tp-wwan-hotkey 的快捷鍵 Fn + F6 切換。

WWAN: on.

WWAN: off.

4.3. 新增行動網路(mobile broadband)連線設定。

4.3.1. 應用程式選單 → 系統 → 網路連線。

4.3.2. 行動網路 → 新增。

4.3.3. 選擇 Gobi 2000 裝置。

4.3.4. 在城市列表中選取台灣(Taiwan)。

4.3.5. 選取電信業者,以下使用威寶電信(Vibo Telecom)為例。

4.3.6. 由於未收入 375 網路吃到飽專案,故手動修改成 APN 為 internet。

4.3.7. 同意後以上的設定才算建立完成。

4.3.8. 完成後可以在網路列表看到 Vibo Telecom 的選項。

4.3.9. 連線成功!

4.3.10. 察看 IP 資訊,令人感動的一刻
jonny@linux:~$ ifconfig ppp0 [Enter]
ppp0      Link encap:Point-to-Point Protocol  
inet addr:1.200.147.149 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:546 (546.0 B) TX bytes:249 (249.0 B)

5. 除錯(Debug)


5.1. 監控 log。
jonny@linux:~$ sudo tail -f /var/log/syslog [Enter]

5.2. Ubuntu 12.04 目前還不支援,以下為 WWAN 跑不起來的訊息。

jonny@linux:~$ sudo tail -f /var/log/syslog [Enter]
May  3 22:02:14 thinkpad-t410 NetworkManager[1191]:  Activation (ttyUSB1) starting connection 'Vibo Telecom'
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): device state change: disconnected -> prepare (reason 'none') [30 40 0]
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: Activation (ttyUSB1) Stage 1 of 5 (Device Prepare) scheduled...
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: Activation (ttyUSB1) Stage 1 of 5 (Device Prepare) started...
May 3 22:02:14 thinkpad-t410 NetworkManager[1191]: Activation (ttyUSB1) Stage 1 of 5 (Device Prepare) complete.
May 3 22:02:14 thinkpad-t410 modem-manager[17215]: (ttyUSB1) opening serial port...
May 3 22:02:14 thinkpad-t410 modem-manager[17215]: Modem /org/freedesktop/ModemManager/Modems/0: state changed (disabled -> enabling)
May 3 22:02:15 thinkpad-t410 modem-manager[17215]: (ttyUSB1): using text mode for SMS
May 3 22:02:15 thinkpad-t410 modem-manager[17215]: Modem /org/freedesktop/ModemManager/Modems/0: state changed (enabling -> enabled)
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: WWAN now enabled by management service
May 3 22:02:15 thinkpad-t410 modem-manager[17215]: Modem /org/freedesktop/ModemManager/Modems/0: state changed (enabled -> registered)
May 3 22:02:15 thinkpad-t410 kernel: [13718.358807] modem-manager[17215]: segfault at 7fea28778b51 ip 00007fea286ed0f8 sp 00007fff7cca5580 error 4 in libpcre.so.3.12.1[7fea286da000+3c000]
May 3 22:02:15 thinkpad-t410 kernel: [13718.458948] init: modemmanager main process (17215) killed by SEGV signal
May 3 22:02:15 thinkpad-t410 kernel: [13718.458983] init: modemmanager main process ended, respawning
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: the modem manager disappeared
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): now unmanaged
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): device state change: prepare -> unmanaged (reason 'removed') [40 10 36]
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): deactivating device (reason 'removed') [36]
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: nm_system_iface_flush_routes: assertion `ifindex > 0' failed
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: nm_system_iface_flush_addresses: assertion `ifindex > 0' failed
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: ModemManager (version 0.5.2.0) starting...
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin AnyData
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin MotoC
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Nokia
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Linktop
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Novatel
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Sierra
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin ZTE
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Generic
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Gobi
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Option High-Speed
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Wavecom
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Samsung
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Ericsson MBM
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Huawei
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin X22X
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin SimTech
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Longcheer
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: Loaded plugin Option
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: Policy set 'Wired connection 1' (eth0) as default for IPv4 routing and DNS.
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: Policy set 'Wired connection 1' (eth0) as default for IPv4 routing and DNS.
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): cleaning up...
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): taking down device.
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: (ttyUSB0) opening serial port...
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: (ttyUSB1) opening serial port...
May 3 22:02:15 thinkpad-t410 modem-manager[20121]: (ttyUSB2) opening serial port...
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: trying to start the modem manager...
May 3 22:02:15 thinkpad-t410 NetworkManager[1191]: modem-manager is now available
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) closing serial port...
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) serial port closed
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) opening serial port...
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (Gobi): GSM modem /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.4 claimed port ttyUSB1
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) closing serial port...
May 3 22:02:16 thinkpad-t410 modem-manager[20121]: (ttyUSB1) serial port closed
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB0) closing serial port...
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB0) serial port closed
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB0) opening serial port...
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB2) closing serial port...
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB2) serial port closed
May 3 22:02:27 thinkpad-t410 modem-manager[20121]: (ttyUSB2) opening serial port...
May 3 22:02:30 thinkpad-t410 modem-manager[20121]: (ttyUSB0) closing serial port...
May 3 22:02:30 thinkpad-t410 modem-manager[20121]: (ttyUSB0) serial port closed
May 3 22:02:33 thinkpad-t410 modem-manager[20121]: (ttyUSB2) closing serial port...
May 3 22:02:33 thinkpad-t410 modem-manager[20121]: (ttyUSB2) serial port closed
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): failed to look up interface index
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: WWAN now disabled by management service
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): new GSM/UMTS device (driver: 'qcserial' ifindex: 0)
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): exported as /org/freedesktop/NetworkManager/Devices/4
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): now managed
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): device state change: unmanaged -> unavailable (reason 'managed') [10 20 2]
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): deactivating device (reason 'managed') [2]
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: nm_system_iface_flush_routes: assertion `ifindex > 0' failed
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: nm_system_iface_flush_addresses: assertion `ifindex > 0' failed
May 3 22:02:33 thinkpad-t410 NetworkManager[1191]: (ttyUSB1): device state change: unavailable -> disconnected (reason 'none') [20 30 0]


5.3. 手動重啟 modem-manager 以及重新掛載 qcserial 模組。
jonny@linux:~$ sudo pkill modem-manager; sudo rmmod qcserial; sudo modprobe qcserial [Enter]

延伸閱讀:
What is wwan ready - answers.com
Setting the default carrier firmware when installing GOBI 2000 driver - ThinkPad

相關連結:
Qualcomm Gobi 2000 Wireless WAN Driver for Windows 7 (32-bit, 64-bit), Vista (32-bit, 64-bit) and XP - ThinkPad
ThinkPad Extras : linrunner
Qualcomm Gobi 2000 - ThinkWiki

資料來源:
Howto: Gobi 2000 generic GSM/UMTS on Thinkpads - Ubuntu Forums
[kubuntu] Unable to connect using Qualcomm Gobi 2000 on thinkpad t410 - Ubuntu Forums
Qualcomm Gobi 2000 unter Linux installieren – ThinkPad-Wiki

五月 2, 2012
» 請改用國網中心的鏡像站(mirror)

大約一年前,台灣的鏡像站(mirror)開始不穩,凍仁則改用 shadow.ind.ntou.edu.tw 鏡像站。2011/10/12 凍仁發現其首頁有大大的標題寫著「ftp.tw.debian.org 以及 tw.archive.ubuntu.com 的管理者正在尋求資源」才終於知道這些 mirror 不穩的原因,幫不上忙的凍仁,只能上 Plurk 問前輩們,最後在前輩們的提醒下改用國網中心[1]的 mirror 就穩定了。

可以看的出來下方有幾個網域名稱(Domain name)是指到同一個 IP,凍仁雖不能肯定是指到同一台 Server,但可以肯定的是機器不夠力了!

OS Mirror IP
Debian  opensource.nchc.org.tw   211.73.64.9 
 Ubuntu  free.nchc.org.tw  211.73.64.9 
 Ubuntu  ftp.twaren.net 140.110.123.9
 2001:e10:5c00:5::9 
國網中心的 mirror。


OS Mirror IP
Debian  ftp.tw.debian.org   140.138.145.242 
 Ubuntu  tw.archive.ubuntu.com  140.138.145.242 
 Ubuntu   shadow.ind.ntou.edu.tw  140.121.80.201
凍仁原先使用的 mirror。


1. 使用更新管理員更換 mirror

1.1. 開啟「更新管理員」。

1.2. 點選「設定」按鈕。

1.3. 點選「下載自:」 一欄,並點選「其他...」。

1.4. 找到國網中心的 mirror 後點選「選擇伺服器」。

2. 使用 sed 取代 mirror


2.1. 在取代前得先找出目前使用的 mirror。
jonny@oneiric:~$ cat /etc/apt/sources.list | grep main | awk '{ print $2}' | cut -d'/' -f3 | sed -n '3P' [Enter]
tw.archive.ubuntu.com

2.2. 將 tw.archive.ubuntu.com 替換成 free.nchc.org.tw。
jonny@oneiric:~$ sudo sed -i 's/tw.archive.ubuntu.com/free.nchc.org.tw/g' /etc/apt/sources.list [Enter]

使用完以上任ㄧ方法都得再次更新套件庫,切忌切記[2]

# 註1:國網中心的全名為國家實驗研究院高速網路與計算中心(NCHC)
# 註2:「切忌」指的是千万不可,而「切記」則是要牢記的意思。


延伸閱讀:
NCHC | Main / HomePage

相關連結:
大澤木小鐵 好奇 ftp://os.nchc.org.tw 滿載了,請問大家都是在哪裡更新 Ubuntu ? [已解] 國研院國網中心自由軟體

» 指紋辨識系統 on Ubuntu 10.04, 11.04+

指紋辨識對凍仁而言是個很棒加值,除了可以幫 ThinkPad T410 開機以外,還免去了被人看到密碼的風險,那個小熊軟糖請離凍仁的手指頭遠一點,美中不足的是還不能達到 Windows 上只需掃描一次就可開機並直接登入的效果,但或許這也是件好事,安全性與便利性是永遠的矛與盾啊!

不得不提的是 UPEK 的辨識率比起同事的 HP 高了不少,據同事的說法是進了 Windows 就會很難用,反而在 BIOS 才比較好用,但重點是誰會一直待在 BIOS 使用指紋辨識啊?!

正常版的提示視窗 (資料來源)。

1. 查詢指紋辨識裝置


可至 ThinkWiki 觀看各個 ThinkPad 搭載的晶片組。
jonny@natty:~$ $ lsusb [Enter]
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 1a40:0101 TERMINUS TECHNOLOGY INC. USB-2.0 4-Port HUB
Bus 001 Device 004: ID 147e:2016 Upek Biometric Touchchip/Touchstrip Fingerprint Sensor
Bus 001 Device 005: ID 17ef:480f Lenovo Integrated Webcam [R5U877]
Bus 001 Device 006: ID 046d:c404 Logitech, Inc. TrackMan Wheel
Bus 001 Device 007: ID 046d:c408 Logitech, Inc. Marble Mouse (4-button)
Bus 001 Device 008: ID 046a:0011 Cherry GmbH G83 (RS 6000) Keyboard
Bus 001 Device 011: ID 0421:01c7 Nokia Mobile Phones N900 (Storage Mode)

2. 安裝


2.1. 新增套件來源。
jonny@natty:~$ sudo add-apt-repository ppa:fingerprint/fingerprint-gui [Enter]

2.2. 更新套件庫。
jonny@natty:~$ sudo aptitude update [Enter]

2.3. 安裝 fingerprint-gui
jonny@natty:~$ sudo aptitude install fingerprint-gui \
policykit-1-fingerprint-gui [Enter]

2.4. 安裝 UPEK 晶片函式庫「libbsapi」。
jonny@natty:~$ sudo aptitude install libbsapi [Enter]

3. 設定


3.1. 啟動 Fingerprint GUI。

3.2. Fingerprint GUI 已經啟用 UPEK,這真是太棒了,接著點選 Next

3.3. 建立指紋辨識金鑰,Next 繼續 (本文使用右手食指)。

3.3.1.掃描手指頭。

3.3.2. 掃描成功三次即可。

3.4. 完成後會問您是否繼續新增其他手指。

3.5. 若要繼續新增請點選其他手指並重覆 3.3. 步驟。

4. 測試


4.1. 在 Fingerprint GUI 的 Settings 裡可以找到測試的功能。

4.2. 提示視窗出現後請掃瞄手指 (由於凍仁改過佈景主題才會看不到字)。

4.3. 這時 ThinkPad T410 指紋辨識裝置上的 LED 會亮起。

4.4. ThinkPad T410 指紋辨識裝置未啟動時的對照組。

4.5. 測試結果:成功!

# 第二週的減重大作戰成果為 2.5kg,共 6kg。

2012-05-02


確認 Fingerprint 支援 ThinkPad T410 + Ubuntu 10.04 的組合!

資料來源:
Fingerprint GUI
Fingerprint GUI : “Fingerprint readers integration” team - launchpad.net
ThinkPad X220i 安裝 Ubuntu 的硬體相關設定(指紋辨識、Webcam.. 等) - Tsung's Blog
Fingerprint Reader with Thinkpad T410 using Ubuntu - ich-wars-nicht.ch
ubuntu 指紋辨識 fingerprint 驅動 - 九王爺的府邸

五月 1, 2012
» CodeIgniter TextMagic API Library Release (簡訊功能)

CodeIgniter

之前寫了 Nexmo 簡訊 API Library for CodeIgniter Framework,現在又發現國外新的一家簡訊系統,叫做 TextMagic,看了一下簡訊價格,27 美金可以傳送 285 通簡訊,似乎比 Nexmo 還貴了一些,不過沒關係,TextMagic 還支援了後台系統或者是 Email 來傳送簡訊,這點倒是不錯,相較於 Nexmo,TextMagic 後台多了太多功能了,不多說了,直接來使用 CodeIgniter TextMagic Libray。

申請簡訊帳號跟密碼

先到 TextMagic 註冊新帳號,完成之後請到後台申請API密碼。這樣大致上完成。

從 getsparks 安裝

如果您有在使用 Getsparks 服務,透過此方式安裝是最快的,請參考 TextMagic-SMS-API getsparks website

// install from getSparks website
$ php tools/spark install -v1.0.1 TextMagic-SMS-API
// include TextMagic Library to controller
$this->load->spark('TextMagic-SMS-API/1.0.1');

如果不想透過 getsparks 安裝,可以直接到 Github CodeIgniter-TextMagic-API 下載 Source Code,將檔案放入到您的 application 目錄底下即可。

使用方式

用 API 之前,請先閱讀 官方 TextMagic API 文件,搭配 Github CodeIgniter-TextMagic-API Readme 文件 即可。

如果有任何問題都可以直接留言給我。

原始碼

CodeIgniter-TextMagic-API Github Source Code
Getsparks TextMagic-SMS-API

Related View

四月 27, 2012
» Redmine on Debian 6

Redmine 是一套 GPL 授權的專案管理系統,其底層架構為 Ruby on Rails,老實說凍仁自己也不是很了解,只知道 COSCUP 團隊近幾年來開始使用它管理碎髓的事務。

原本以為 Debian 上 Redmine 的環境很難搞的凍仁,在 Zeroplex 心得分享後才得知 FreeBSD 的環境更麻煩,好險沒有跳 BSD 的坑啊

Redmine 介面截圖。

1. 安裝相關套件


jonny@squeeze:~$ sudo aptitude install redmine redmine-mysql mysql libapache2-mod-passenger [Enter]

2. 環境設定


2.1. 連結 Redmine 目錄至網頁目錄底下。
jonny@squeeze:~$ sudo ln -s /usr/share/redmine/public /var/www/redmine [Enter]

2.2. 修改權限。
jonny@squeeze:~$ sudo chmod -R www-data:www-data /var/www/redmine [Enter]

2.3. 建立 Redmine 的 Apache 設定。
jonny@squeeze:~$ sudo vi /etc/apache2/sites-available/redmine [Enter]
RailsBaseURI /redmine

2.4. 啟用 Redmine 設定。
jonny@squeeze:~$ sudo a2ensite redmine [Enter]

2.5. 重開 Apache。
jonny@squeeze:~$ sudo /etc/init.d/apache2 reload && sudo /etc/init.d/apache2 restart [Enter]

2.6. 測試 http://localhost/redmine/

# 記得先修改 admin 密碼,預設為 admin。

3. 解決 Redmine 中文亂碼

最快的解法為先將 MySQL dump 出來,待手動將轉換成 utf8 再匯入回去 (感謝強者同事的心得分享)。

3.1. dump.
jonny@squeeze:~$ mysqldump --user=root -p redmine_default > redmine_default.sql [Enter]

3.2. 使用 sed 手動將 latin1_swedish_ci 取代成 utf8_general_ci。
jonny@squeeze:~$ sudo sed -i 's/latin1_swedish_ci/utf8_general_ci/g' redmine_default.sql [Enter]

3.3. 使用 sed 手動將 latin1 取代成 utf8。
jonny@squeeze:~$ sudo sed -i 's/latin1/utf8/g' redmine_default.sql [Enter]

3.4. 匯入 utf-8 的 redmine_default.sql。
jonny@squeeze:~$ mysql -uroot -p redmine_default < redmine_default.sql [Enter]

3.5. 亂碼解決完畢!

延伸閱讀:
Zeroplex 生活隨筆: Redmine 簡介

資料來源:
HowTo Install Redmine using Debian package - Redmine
最簡化的 Ubuntu 10.04下 Redmine 部屬方法
Ubuntu 10.04 安裝 Redmine – ㄚ凱隨手紀

» IPv6 種子培訓 - Linux 筆記 (4)

3. Web Server - Apache

以本次的練習而言,是最簡單的就是 Web Server,因為 CentOS 5.6 包的 Apache 2.2.3 原生就支援 IPv6,裝起來就可以用了。

注意,在 Debian/Ubuntu 的套件名稱是 Apache 而 RHEL/CentOS/Fedora 則是 httpd

3.1 安裝 Apache

在 redhat 體系的世界裡,我們可以用 yum 這個套件管理工具,與 apt 相似並且都擁有相依性檢查、補完的功能。

3.1.1. 安裝前可以先用 search 參數察看 CentOS 家的 Apache (httpd) 套件有哪些,32bit 為 *.i386 而 64bit 則是 *.x86_64。
root@ipv6day:~$ yum search httpd [Enter]
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tc.edu.tw
* extras: ftp.tc.edu.tw
* updates: ftp.tc.edu.tw
========== Matched: httpd ==========
mod_ssl.i386 : SSL/TLS module for the Apache HTTP server
system-config-httpd.noarch : Apache configuration tool
centos-ds.i386 : CentOS Directory, Administration, and Console Suite
httpd.i386 : Apache HTTP Server
httpd-devel.i386 : Development tools for the Apache HTTP server.
httpd-manual.i386 : Documentation for the Apache HTTP server.
mod_dav_svn.i386 : Apache server module for Subversion server.

3.1.2. 安裝 Apache。
root@ipv6day:~$ yum install httpd [Enter]

3.2 啟動 Apache

root@ipv6day:~$ /etc/init.d/httpd start [Enter]
Starting httpd:                                 [   OK   ]

3.3 Apache 測試

接下來就可以直接透過 Browser (瀏覽器)測試,要記得 IPv6 在 Browser 裡要使用中括號括起來。
http://[::1]                         # localhost
http://[2001:288:5000:17::26]

3.4 開機自行啟動 Apache

此步驟可於練習時跳過,若打算上線並長期提供,建議設為自動啟動,這樣重新開機後才不至於忘記。
# Apache 預設不會自行啟動。
root@ipv6day:~$ chkconfig httpd --list [Enter]
httpd   0:off   1:off   2:off   3:off   4:off   5:off   6:off

# 將 Apache 設為開機時自行啟動。
root@ipv6day:~$ chkconfig httpd on [Enter]

root@ipv6day:~$ chkconfig httpd --list [Enter]
httpd   0:off   1:off   2:on   3:on   4:on   5:on   6:off

簡單比較 redhat 與 Debian 的對應路徑,其中 DocumentRoot 為 預設網頁路徑,而 Configure 則是設定檔路徑。
     DocumentRoot   Configure  
  redhat     /var/www/html/     /etc/httpd/  
  Debian     /var/www/     /etc/apache2/  


延伸閱讀:
IPv6 種子培訓 - Linux 筆記 (1)
IPv6 種子培訓 - Linux 筆記 (2)
IPv6 種子培訓 - Linux 筆記 (3)

資料來源:
CF197: IPv6 web server

» Failed test 'use DBD::mysql;'

凍仁在幫 Perl 安裝 DBD 模組時,得到了錯誤訊息:

t/00base ......NOK 2# Failed test 'use DBD::mysql;'

請教 星空夜雨 後才知道這是因為 DBD 模組與 MySQL 有相依性,若沒依照 Distribution 預設的方式安裝,得手動補上參數才會過,而以下條件大概都會碰到:

  • MySQL Server 為自行編譯。
  • 本機無安裝 MySQL Server。
  • 未於 MySQL Server 建立指定的測試帳號及密碼。

1. 安裝 DBI 模組。
root@CentOS:~$ perl -MCPAN -e 'install DBI' [Enter]

2. 手動切換至編譯環境底下。
root@CentOS:~$ cd ~/.cpan/build/DBD-mysql-4.020/ [Enter]

3. 手動設定 DBD 參數。
root@CentOS:~$ perl Makefile.PL --testuser='test' --testpassword='password' --testhost="192.168.oo.xx" [Enter]

4. DBD 參數請參考 Makefile.pl 內文 (可略過)。
root@CentOS:~$ vi Makefile.PL [Enter]
......
32 Getopt::Long::GetOptions(
33 $opt,
34 "help",
35 "testdb=s",
36 "testhost=s",
37 "testport=s",
38 "testuser=s",
39 "testpassword=s",
40 "testsocket=s",
41 "cflags=s",
42 "libs=s",
43 "verbose",
44 "ps-protocol",
45 "bind-type-guessing",
46 "nocatchstderr",
47 "ssl!",
48 "nofoundrows!",
49 "embedded=s",
50 "mysql_config=s",
51 "force-embedded",
52 "with-mysql=s"
53 ) || die Usage();
......

5. 編譯及安裝。
root@CentOS:~$ make && make install [Enter]

6. 完成!

資料來源:
Install MySQL and DBD::MySQL on Mac OS X - Building Bioinformatics Solutions

» MyUnity - 設定 Unity 的好工具

Unity 是個好物,但千里馬還需伯樂,而 MyUnity 就是專門拿來設定 Unity 的套件,我們可以很簡單的固定啟動列更改透明度改變圖示行為自訂裝置顯示方式..等等;想當初凍仁都是靠 compizconfig-settings-manager(ccsm) 來設定其行為(Behavior),但這樣真的一點都不好用也不夠簡單


Youtube 上的 MyUnity 示範影片。


安裝 MyUnity

增加 MyUnity 於 Launchpad 上的來源,適用於 Ubuntu 11.04+。
jonny@oneiric:~$ sudo apt-add-repository ppa:myunity/ppa [Enter]

安裝 MyUnity。
jonny@oneiric:~$ sudo apt-get update && sudo apt-get install myunity [Enter]

凍仁的 MyUnity

1.永不在啟動列顯示裝置
2. 停用啟動列 選單淡入淡出效果
3. 固定啟動列。
4. 只讓執行中圖示有背光效果。

5. 啟動儀表板時會自行選擇模糊方式。

6. 關閉面板透明效果

7. 在桌面上顯示已掛載的裝置

8. 使用自訂字型。

Other

若是版本在 1.0.7 以下會遇到 never 及 mounted 事件(event)顛倒的 bug,經在下回報後已在 1.0.10 版修正。

Myunity 1.0.7-0ubuntu1~oneiric x86_64

最後補上 MyUnity 的開發者及翻譯團隊資訊。

資料來源:
‘MyUnity’ Is a Small, Simple Unity Tweaking Tool

相關連結:
MyUnity on Launchpad
Chinese (Traditional) (zh_TW) : Tanslations : MyUnity

» AptURL

一直以來凍仁在推薦各個 Ubunt 套件時都是用指令的方式來介紹,雖然這是最不容易出錯的方式,其實 Ubuntu 還有個小程式更能勝任這個任務,它就是「AptURL」。

我們可以透過點擊連結來安裝套件,不過得符合幾個條件:
1. 安裝 apturl 套件,Ubuntu 7.10 以上版本都會預載。
2. 只支援 Firefox, Pidgin 這兩套件的連結。
3. 只適用於套件庫有的套件,也就是說其他的套件得在手動加入套件來源後才適用,例如 Google Chrome。


資料來源:OpenFoundry


AptURL 使用語法

HTML

# 安裝單一套件。
<a href="apt://套件">文字</a>

# 安裝多個套件。
<a href="apt://套件1,套件2,套件3">文字</a>

# 先更新套件來源再安裝。
<a href="apt://套件?refresh=yep">文字</a>

BBCode

[URL="apt://套件"]文字[/URL]

Shell 指令

apturl apt:套件 Enter

站內連結:
AptURL on Ubuntu 11.10

相關連結:
Appnr - Get Ubuntu Applications!

資料來源:
Apturl – 安裝 Ubuntu 程式就像瀏覽網站一樣簡單 - OpenFoundry
AptUrl - Ubuntu Wiki
一鍵安裝 Ubuntu 軟體 - Ubuntu 正體中文 Wiki

» GSDL Koha - 系統正體中文化

GSDL Koha 是個基於 Lubuntu 的圖書管理發行版本,並事先建置好 Greenstone, Koha, dbWIZ, WordPress, Drupal 以及 phpMyAdmin 環境,但也因為是尼泊爾的夥伴在 support 的關係,其預設的中文支援度也就相對的差了點。

在與 Emily, Hsieh 的接觸下知道毛老師有在推這個 distribution,索性就花了點時間整理一下,最後還要感謝 Ubuntu-tw 論壇上的各位前輩,要不是有大家無私的分享凍仁可是不知道又要繞到哪才解的完這一題呢。


GSDL Koha 中文化幻燈片教學。


1. 安裝 GSDL Koha 作業系統

1.1. 至 GSDL Koha 官方下載 ISO。
1.2. 燒製光碟或製作 Live USB。
1.3. 安裝步驟請參考上方的簡報。

2. 安裝中文輸入法 - gcin

2.1. 安裝 gcin
jonny@oneiric:~$ sudo apt-get install gcin [Enter]

2.2. 切換輸入法為 gcin 並取代 ibus
jonny@oneiric:~$ im-switch -s gcin [Enter]

3. 安裝正體中文語系

3.1. 安裝正體中文語系套件 - language-pack-zh-hant
jonny@oneiric:~$ sudo apt-get install language-pack-zh-hant [Enter]

4. 安裝中文字型

4.1. 安裝文泉驛正黑體 - ttf-way-zenhei
jonny@oneiric:~$ sudo apt-get install ttf-way-zenhei [Enter]

# 偏愛文泉驛微米體者請改用 ttf-way-microhei 套件。

   若中文字型是手動下載並放置到 $HOME/.fonts/ 底下,則必須手動修改 /etc/fonts/ 底下的設定檔,否則 LXDMSynaptic 會在整個系統切換至正體中文時,因沒有對應的中文字型設定反而顯示亂碼。

4.2. 更改 Firefox 字型設定。
   不少軟體套件都有內建修改字型的選項,以 Firefox 為例,若想確保各個網頁的字型都套用到該字型,就得同時修改 Simplified Chinese, Traditional Chinese (Hong Kong), Traditional Chinese (Taiwan), Westem, Other Languages 五種語系才會都套用到,其中文的翻譯依序為簡體中文正體中文(繁體,香港)正體中文(繁體,台灣)英文/西歐語言其他語言

5. 將整個系統切換至正體中文語系

   此步驟請於第三、第四步驟完成後再動作,確定字型與語系包都裝好就可以登出,並於登錄畫面(GSDL Koha 預設使用 LxDM)更換語系。

Language 一欄會多出 zh_TW 可以切換。

6. 修改中文字型設定 bug

由於 Ubuntu 11.10 在中文字型的設定上有問題,故得手動執行以下指令。
jonny@oneiric:~$ sudo fontconfig-voodoo -a [Enter]

結束這一單元 :P

站內連結:
Monaco + LiHei 字型優化 on Ubuntu 10.04
切換登入畫面語系 on Ubuntu 11.10

延伸閱讀:
Koha 中文 WIKI 文件區

資料來源:
無中文介面、畫面及輸入法 [論壇 - Ubuntu安裝問題] | Ubuntu 正體中文站

相關連結:
GSDL Koha Digital Library | Making everything available for everyone
Koha Translation Project: 漢語 (臺灣)
如何製作 Ubuntu Live USB « 高登工作室

四月 26, 2012
» 用 RSS 訂閱 facebook

自從 facebook 強制使用者只能用 timeline (動態時報) 的介面時,不時聽到一些抱怨聲,希望可以回復成舊版的模式。但是,就是回不來了(茶)

不過如果你不喜歡的只是那充滿動態的排版方式的話,是有個方法可以弄成比較傳統的排版,像下面這樣的閱讀方法可以接受的話再繼續閱讀下去吧。

google_reader

四月 17, 2012
» make Git on CentOS 5.6

Git 是個很棒的分散式版本控制系統,在 Debian, Ubuntu 只需一行指令就可無痛安裝,而 CentOS 的套件庫似乎還未收錄到 Git,這對開始使用 Git 管理機器的凍仁有些意外,只要預裝一下 gcc 自己編就搞定了!


1. 下載 git-$VERSION.tar.gz (本文使用的版本為 1.7.9.4)。

2. 解壓縮。

root@CentOS:~$ tar zxvf git-1.7.9.4.tar.gz [Enter]

3. 切換至 git-$VERSION 目錄底下。
root@CentOS:~$ cd git-1.7.9.4 [Enter]

4. 設定編譯環境 (自訂安裝目錄為 /usr/local/git)。
root@CentOS:~$ ./configure --prefix=/usr/local/git [Enter]

5. 編譯。
root@CentOS:~$ make && make install [Enter]

6. 將 git 執行檔連結至 /usr/local/bin/。
root@CentOS:~$ ln -s /usr/local/git/bin/git* /usr/local/bin/ [Enter]

7. 測試。
root@CentOS:~$ git [Enter]
usage: git [--version] [--exec-path[=]] [--html-path] [--man-path] [--info-path]
[-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
[--git-dir=] [--work-tree=] [--namespace=]
[-c name=value] [--help]
[]

The most commonly used git commands are:
add Add file contents to the index
bisect Find by binary search the change that introduced a bug
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
clone Clone a repository into a new directory
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
fetch Download objects and refs from another repository
grep Print lines matching a pattern
init Create an empty git repository or reinitialize an existing one
log Show commit logs
merge Join two or more development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetch from and merge with another repository or a local branch
push Update remote refs along with associated objects
rebase Forward-port local commits to the updated upstream head
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify a tag object signed with GPG

See 'git help ' for more information on a specific command.

恭喜您,現在可以在 CentOS 上使用 git 了,是不是很棒啊!

# 近來在下啟用了減重大作戰,相對的整理筆記的時間也少了,不過能在第一週就瘦了 3.5kg 真的是很開心呢,紀錄一下囉!

2012-04-17


在編譯 Git 之前還需從安裝光碟補完 curlcurl-devel 兩套件,而安裝 curl-devel 時得一同補上其相依套件 (e2fsprogs-devel, keyutils-libs-devel, krb5-devel, libidn-devel, libselinux-devel, libsepol-devel, openssl-devel, zlib-devel)。

延伸閱讀:
Debian Linux 架設使用 SSH 存取 的 Git Server - Tsung's Blog

相關連結:
在 CentOS 5.5 上使用 yum 安装 Git - SoniTech

資料來源:
Downloads - git-core - Git - the stupid content tracker - Google Project Hosting
Simple Install of Git on Leopard

» NTP - 網路校時

Network Time Protocol (NTP) 主要的用途是拿來做網路校時,這個名詞凍仁還是學生時就在計算機概論一課程聽過,卻不知其重要性,直到吃了大虧才知道很多情況下是不容許時間有誤差的,尤其是具有唯一性的時候,索性幫公司架設了台 NTP Server 並讓區網內所有的 Server 都與它校時,這樣一來可與上層校時,二來也可讓區網內部的 Server 時間具有一致性

不能說從此就高枕無憂了,但狀況能少一個是一個,而且老舊的機器多少有些狀況,CMOS 換了也不見得有作用,既然軟體可以解決就不必手軟啦。

1. Server


1.1. 安裝 NTP 服務


1.1.1. Debian / Ubuntu

1.1.1.1. 查詢套件名稱。
jonny@debian-server:~$ sudo aptitude search ntp [Enter]
[sudo] password for jonny: 
p chntpw - NT SAM password recovery utility
p cyrus-nntpd-2.2 - Cyrus mail system (NNTP support)
v cyrus21-nntpd -
v cyrus22-nntpd -
p libnet-ntp-perl - Perl module to query NTP servers
p libnews-nntpclient-perl - Perl module to access NNTP servers
p libxfontp-dev - X11 font rasterisation library with Xprint support (development
p libxfontp1 - X11 font rasterisation library with Xprint support
p libxfontp1-dbg - X11 font rasterisation library with Xprint support (debug packag
p mountpy - script for quick mounting of removable devices
p ntp - Network Time Protocol daemon and utility programs
p ntp-doc - Network Time Protocol documentation
i ntpdate - client for setting system time from NTP servers
p sinntp - tiny non-interactive NNTP client

1.1.1.2. 安裝套件
jonny@debian-server:~$ sudo aptitude install ntp [Enter]

1.1.2. Redhat / CentOS

1.1.2.1. 查詢套件名稱 (此範例環境為 32 位元的 CentOS)。
root@centos-server:~$ yum search ntp [Enter]
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tc.edu.tw
* extras: ftp.tc.edu.tw
* updates: ftp.tc.edu.tw
====================================== Matched: ntp ======================================
adjtimex.i386 : A utility for adjusting kernel time variables.
chkfontpath.i386 : Simple interface for editing the font path for the X font server.
cyrus-imapd.i386 : A high-performance mail server with IMAP, POP3, NNTP and SIEVE support
inn.i386 : The InterNetNews (INN) system, an Usenet news server.
ntp.i386 : Synchronizes system time using the Network Time Protocol (NTP).
system-config-date.noarch : A graphical interface for modifying system date and time
xfce4-fsguard-plugin.i386 : Filesystem-Guard plugin for the Xfce panel

1.1.2.2. 安裝套件。
root@centos-server:~$ yum install ntp [Enter]

1.1.2.3. 開機自動啟動 NTP 服務。
root@centos-server:~$ chkconfig ntpd on [Enter]
ntpd         0:off 1:off 2:on 3:on 4:on 5:on 6:off

1.2. 環境設定


jonny@server:~$ sudo vi /etc/ntp.conf [Enter]
# = 上層校時伺服器設定 =

# - Debian 預設的校時伺服器。
#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst

# - RHEL 預設的校時伺服器。
#server 0.rhel.pool.ntp.org
#server 1.rhel.pool.ntp.org
#server 2.rhel.pool.ntp.org

# - CentOS 預設的校時伺服器。
#server 0.centos.pool.ntp.org
#server 1.centos.pool.ntp.org
#server 2.centos.pool.ntp.org

# - Microsoft Windows 預設的校時伺服器。

server time.windows.com prefer # 主要校時的上層 NTP Server。

# - 台灣常用的校時伺服器。
server time.stdtime.gov.tw
server clock.stdtime.gov.tw
server watch.stdtime.gov.tw

# - 日本常用的校時伺服器。
#server 0.jp.pool.ntp.org
#server 1.jp.pool.ntp.org
#server 2.jp.pool.ntp.org
#server 3.jp.pool.ntp.org

# = 權限設定 =

# - 預設允許本機使用。

restrict 127.0.0.1
restrict -6 ::1

# - 允許 192.168.11.0/24 網段。
restrict 192.168.11.0     mask 255.255.255.0     nomodify

1.3. 防火牆及埠口


1.3.1. 允許 NTP 服務(udp)進入防火牆。
jonny@server:~$ sudo iptables -A INPUT -m udp -p udp --sport 123 -d 0/0 --dport 123 -j ACCEP [Enter]

jonny@server:~$ sudo iptables -A FORWARD -m udp -p udp --sport 123 -d 0/0 --dport 123 -j ACCEPT

1.3.2. 察看有無傾聽(listen) 123 埠口(Port)。
jonny@server:~$ sudo netstat -nlp | grep ntp [Enter]
udp        0      0 10.150.85.145:123       0.0.0.0:*                           15748/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 15748/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 15748/ntpd
udp6 0 0 fe80::1031:43ff:fe0:123 :::* 15748/ntpd
udp6 0 0 ::1:123 :::* 15748/ntpd
udp6 0 0 :::123 :::* 15748/ntpd

1.4. 檢測 NTP 服務


1.4.1. 察看同步狀態 (不適用於 Debian 6)。
jonny@centos-server:~$ ntpstat [Enter]
synchronised to NTP server (65.55.21.17) at stratum 3
    time correct to within 105 ms
    polling server every 1024 s

1.4.2. 察看與上層的同步狀態,各項說明請參考 鳥哥的 Linux 私房菜
jonny@server:~$ ntpq -p [Enter]
remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*wwwco1test12.mi 64.236.96.53 2 u 30 64 377 170.141 -3.533 18.675
+59-124-196-84.H 59.124.196.86 2 u 23 64 377 36.023 20.247 15.053
+clock.stdtime.g 220.130.158.70 2 u 20 64 377 40.096 -4.748 17.998
+59-124-196-85.H 59.124.196.86 2 u 25 64 377 34.366 17.730 10.913

2. Client


2.1. 校時成功。
jonny@client:~$ sudo /usr/sbin/ntpdate $HOST [Enter]
6 Apr 12:24:44 ntpdate[12172]: adjust time server $HOST offset 0.057422 sec

2.2. 校時失敗時,請檢查防火牆是否有開啟。
jonny@client:~$ sudo /usr/sbin/ntpdate $HOST [Enter]
6 Apr 12:23:36 ntpdate[12157]: no server suitable for synchronization found

2.3. 若不使用自家 NTP Server,在 Debian/Ubuntu 還有 ntpdate-debian 命令可用。
jonny@debian:~$ sudo ntpdate-debian [Enter]
16 Apr 22:01:17 ntpdate[20857]: adjust time server 91.189.94.4 offset 0.284967 sec

延伸閱讀:
IPTables-Linux Firewall - 不自量力 の Weithenn

相關連結:
How do I synchronise my single Debian Linux desktop clock to network?
[備忘錄]Ubuntu 網路校時 @ 酒中狂士的狐狸窩 :: 痞客邦 PIXNET ::

資料來源:
鳥哥的 Linux 私房菜 -- NTP 時間伺服器
Debian / Ubuntu Linux Install NTPD To Synchronism Clock With Internet Standard Time Servers

四月 16, 2012
» Windwos 下安裝 Web Developer tool LiveReload

去年寫了一篇: LiveReload 網頁程式設計師必備工具,介紹如何在 FreeBSD 及 Linux 底下安裝 Livereload,相信過程也都不難,只是筆者目前有在 Windows 底下開發 Web,原本是透過 Linux 來使用 Livereload,但是我發現只有在 Chrome 才可以 Work,但是 FireFox 提供的 LiveReload :: Firefox 附加元件,安裝之後,發現瀏覽器根本沒有出現按鈕讓使用者連接伺服器,所以這方法作罷,查了官網資料才知道已經有提供 Windows 安裝檔架設 Server,及 Browser extension 來連接伺服器。

安裝 LiveReload Server

目前官網提供 Pre-Alpha v0.0.3 安裝包下載,下載之後,跟平常安裝 Window 軟體一樣,按下一步就可以了,完成後直接從程式集裡面啟動,並且加入需要偵測的目錄即可。

安裝 Browser extension

官網目前提供 Safari, Chrome, Firefox 2.0.8 版本,大家可以根據 Browser 種類去下載,或是插入一段程式碼到 html file body 之前即可

<script>document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1"></' + 'script>')</script>

Related View

四月 12, 2012
» Backbone.js Event 事件介紹

backbone

今天我們可以來介紹 Backbone.js Event 事件,介紹 Event 之前,大家可以先看看 Backbone.js 的初學介紹,該教學文件可以學習如何載入 Backbone.js library,利用此套件如何去制定各種事件。Backbone.js 提供了3個 method 去控制事件產生、移除、執行,分別是 on(bind)off(unbind)trigger。文字上寫得很清楚 on 就等於 bind,off 就是 unbind,最後就是如何去 trigger 事件。底下就來簡單舉例:

綁定事件

底下例子可以幫助我們建立一個事件

html:

<div>
    <h3>backbone.js bind event</h3>
    <button class="btn btn-primary add_1">Click one event</button>
</div>

backbone.js

Backbone.Events.on('test', function(){ alert('I am appleboy'); });
$(document).on('click', '.add_1', function(event){
    Backbone.Events.trigger('test');
});

上面可以看到我們點選按鈕後,backbone.js 會觸發已註冊的 test 事件,那也許讀者會覺得每次都要寫 Backbone.Events 這麼長的字串很不方便,我們也可以自訂變數喔,把 js 改成底下即可

var object = {};
_.extend(object, Backbone.Events);
object.on('click_me', function(){ alert('click me'); });
$(document).on('click', '.add_2', function(event){
    object.trigger('click_me');
});

建立一個空 object,再利用 underscore.js 套件 extend Backbone.Events 物件,這樣就可透過 object.on 來使用了,另外如果想要綁定全部事件,那就第一個參數帶入 all,也就是

object.on('all', function(){ alert('click me'); });
$(document).on('click', '.add_2', function(event){
    object.trigger('click_me2');
    object.trigger('click_me2');
});

當我們點選按鈕時,就會跳出兩次 click me

移除事件

透過 Backbone.Events.off 可以移除事件內的單一 callback,或者是移除任何 event 或是移除全部 events,底下我們先建立三個事件

var change_1 = function() {
    alert('change_1');
};
var change_2 = function() {
    alert('change_2');
};
var change_3 = function() {
    alert('change_3');
};
object.on('click_event', change_1);
object.on('click_event', change_2);
object.on('click_event', change_3);
$(document).on('click', '.add_3', function(event){
    object.trigger('click_event');
});

上面程式碼可以看到,點選按鈕後會跳出三個不同 alert 訊息,接著透過 object.off(‘click_event’, change_1); 來移除事件 callback

$(document).on('click', '.remove_1', function(event){
    object.off('click_event', change_1);
    alert('remove change_1 function');
});
$(document).on('click', '.remove_2', function(event){
    object.off('click_event', change_2);
    alert('remove change_2 function');
});
$(document).on('click', '.remove_3', function(event){
    object.off('click_event', change_3);
    alert('remove change_3 function');
});

如果不想這麼麻煩,那該如何移除事件全部 callbacks 呢,可以透過

$(document).on('click', '.remove_event', function(event){
    object.off('click_event');
    alert('remove all event');
});

移除全部綁定的 events 可以透過

$(document).on('click', '.remove_all_event', function(event){
    object.off();
    alert('remove all event');
});

trigger 事件

用法很單純,如果要 trigger 單一 callback 可以透過底下:

object.trigger('click_event');

trigger 多個 callback function,利用 space 區隔開就可以了

object.trigger('click_event_1 click_event_2 click_event_3');

直接看 Demo

Related View

四月 11, 2012
» jQuery 1.7 透過 on 來綁定事件

既上一篇作者寫了 Javascript 前端工具 Backbone.js Framework 初學介紹,這次來將程式改寫成 jQuery 寫法,藉這個機會來介紹 jQuery 新功能 on API,底下來看看 jQuery event handle 的演進

//在 jQuery 1.3 以上版本
$(selector).live(events, data, handler);
//在 jQuery 1.4.3 以上版本
$(document).delegate(selector, events, data, handler);
//在 jQuery 1.7 以上版本
$(document).on(events, selector, data, handler);

上面三種寫法都可以榜定網頁上全部元件,如果只是單純只是用 click bind event 的話,那只要新增的元件就無法作用,講得有點抽象,底下直接看個例子:

html 程式碼:

<div class="container well">
    <h1>jQuery Click Event</h1>
    <p>&nbsp;</p>
    <button class="btn btn-primary add">Click me to add new item</button>
    <ul style="margin-top:5px;margin-bottom:5px;" class="li">
        <li style="margin-top:5px; font-size:1.2em">I am old item.&nbsp;&nbsp;<button class="btn btn-danger delete">Delete</button></li>
        <li style="margin-top:5px; font-size:1.2em">I am old item.&nbsp;&nbsp;<button class="btn btn-danger delete">Delete</button></li>
        <li style="margin-top:5px; font-size:1.2em">I am old item.&nbsp;&nbsp;<button class="btn btn-danger delete">Delete</button></li>
        <li style="margin-top:5px; font-size:1.2em">I am old item.&nbsp;&nbsp;<button class="btn btn-danger delete">Delete</button></li>
    </ul>
</div>

jQuery Click 事件

<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
(function ($) {
    $(".add").click(function(){
        $(".li").append('<li style="margin-top:5px; font-size:1.2em">I am new item.&nbsp;&nbsp;<button class="btn btn-danger delete">Delete</button></li>');
    });
    $(".delete").click(function(){
        $(this).parent().remove();
    });
})(jQuery);
</script>

上面例子,大家可以發現只要是透過 button 新增加的 li element 都不可以被刪除,原因就是在 .delete 是 bind 在 click 事件。這時候就要用 jQuery.on API 來重新實做,其實很簡單,只要將 click 改成 on 就完成了,請取代底下程式碼。

$(".delete").click(function(){
    $(this).parent().remove();
});

換成

$(document).on('click', '.delete', function(event){
    $(this).parent().remove();
});

直接看 Demo 範例,這樣可以更直接瞭解。

Related View

A Feedjack powered Planet
A Django site.