2013年6月26日 星期三

[Linux] 透過 busybox nc 提供簡易 socket server/client 測試方式

最近在整合嵌入式的環境,碰到 socket server/client 的模式,正在想有沒合適的測試方式,就發現了 busbox nc 的用法!在嵌入式環境中真的是超方便的。

$ busybox nc
BusyBox v1.18.5 (Ubuntu 1:1.18.5-1ubuntu4.1) multi-call binary.

Usage: nc [-iN] [-wN] [-l] [-p PORT] [-f FILE|IPADDR PORT] [-e PROG]

Open a pipe to IP:PORT or FILE

Options:
-e PROG Run PROG after connect
-l Listen mode, for inbound connects
(use -l twice with -e for persistent server)
-p PORT Local port
-w SEC Timeout for connect
-i SEC Delay interval for lines sent
-f FILE Use file (ala /dev/ttyS0) instead of network

簡言之,若是整合的程式是一隻 socket server,要走 socket 跟他溝通,這時就可以用 nc 指令測試,假設 server 跑在 port 55688,且 server 是 read 一段話後,去判斷那段話來做事,例如 play boy 好了,那這時只需用 nc 就可以模擬 socket 連線,可省去寫一段小程式來測驗:

$ echo "play boy" | busybox nc server_ip server_port

除了上述 client mode 外,其實 nc 也能當 server:

$ busybox nc -l -p server_port

能夠有這樣的測試方式真是太幸福了 XD

修正 ARM device hostname 為 (none) 問題

hostname (None)
手上有台裝置是 ARM-based Linux device,在其上頭執行 busybox hostname 的結果是 (none) ,原先以為只要更新 /etc/hostsname 後即可改善,但結果仍是不行的。

最後的解法是更新 /proc/sys/kernel/hostname 來處理,由於此例 (none) 的影響某些網路程式的判斷,主要是不 unique 的影響,故手動處理一下,其片段程式:

# update /proc/sys/kernel/hostname
checkhostname=`grep -i -c "(None)" /proc/sys/kernel/hostname`
if [ $checkhostname -gt 0 ]; then                        
newhostname=n$(echo $macaddress | sed 's/://g')            
echo $newhostname > /proc/sys/kernel/hostname        
fi

2013年6月25日 星期二

blog.changyy.org 正式啓用

byebye

前陣子下了決定買了 changyy.org,覺得在資訊業打滾了一會兒後,應該多多建立個人品牌,除了持續將恰當的東西放在 github.com/changyy 外,再買了一個 domain name 來用用,一年也不貴,在 www.namecheap.com 約 10 塊美金,說起來還比一些台灣 .tw 系列的便宜 Orz 真不知該說什麼...連 .com 也是這等價

接著,以為用了多年的部落格只需買一下一般 VIP 會員就能設定使用自己的 domain name ,事實證明我錯了("個人化網址"不是這個意思) Orz 基於需求的不滿,我就試用退費流程(慶幸用的是信用卡,退費無痛),便開始認真地思考搬家議題,把原先一直同步備份在 Blogger 的網站公開了,沒想到就這樣正式啟用了 XD

就這樣,要來適應新的文章撰寫環境了,至於程式碼的部分會在試看看,也可能大部份都擺在 github.com/changyy 吧!

雖然 Google Reader 剩幾天就收了,但這邊還是提一下,原本 Blogger 提供的訂閱位址,在 Google Reader 裡排版都會亂掉且沒法顯示圖片,所以我還是申請了 feeds.feedburner.com/changyyorg 來用用,還有興趣的可以改訂閱這邊,但有三分之一都在碎碎念!

至於部落格廣告嘛,就當作從搜尋引擎過來查資料的過路費吧 XDDD 可以拿來支援買 domain name 囉!

2013年6月24日 星期一

暮色、好星晴

2013/06/24 好星晴


多久沒抬頭望望天空呢?今日台北好星晴,下次不知何時能放鬆地望著天,把飛機的軌道當流星呢?(F1.8、5s、ISO100)


今天開完後賴著不走,遠端登入整理別人寫的 code ,弄一點簡單的 Daemon 雛形,忽然覺得好快樂啊,好久沒這輕鬆地邊寫邊學啊!希望能慢慢找回自己的步調!


2013年6月23日 星期日

[Raspberry Pi] 使用 Raspbmc 之 AirPlay 播放影音 @ Mac 10.8

Raspbmc-Pi AirPlay Enable


AirPlay 對 iOS Device 來說是個很美妙的東西且 Apple TV 獨秀的管道,從 iOS Device 將播放的影片透過 AirPlay 協定輸出到 Apple TV ,簡言之,你可以用 iPod touch、iPhone、iPad 甚至 Macbook 播放 PPS,然後嫌螢幕太小,而家裡剛好又有大螢幕,此時就透過 AirPlay 輸出到大螢幕上,學弟的老爸也特地買了 Apple TV 做這件事呢!


這次使用 Raspbmc 套件:


$ wget http://download.raspbmc.com/downloads/bin/filesystem/prebuilt/raspbmc-final.img.gz
$ cd ~/Downloads
$ gzip -d raspbmc-final.img.gz
$ diskutil list
...
/dev/disk1
  #:                       TYPE NAME                    SIZE       IDENTIFIER
  0:     FDisk_partition_scheme                        *7.7 GB     disk1
  1:             Windows_FAT_32                         58.7 MB    disk1s1
  2:                      Linux                         1.9 GB     disk1s2


$ sudo diskutil unmountDisk /dev/disk1
Unmount of all volumes on disk1 was successful
$ sudo time dd bs=1m if=raspbmc-final.img of=/dev/rdisk1
1300+0 records in
1300+0 records out
1363148800 bytes transferred in 269.010945 secs (5067261 bytes/sec)
  269.02 real         0.00 user         0.98 sys
$ sync
$ diskutil list
...
/dev/disk1
  #:                       TYPE NAME                    SIZE       IDENTIFIER
  0:     FDisk_partition_scheme                        *7.7 GB     disk1
  1:             Windows_FAT_32                         73.4 MB    disk1s1
  2:                      Linux                         1.3 GB     disk1s2
$ sudo diskutil unmountDisk /dev/disk1
Unmount of all volumes on disk1 was successful


Raspbmc-Pi


接著就把 Raspberry Pi 接上剛剛弄好的 SDCard、HDMI線、滑鼠(鍵盤倒可以不用)、網路(可用RJ45或USB wifi 網卡)跟 MicroUSB 電源線,就會看到畫面進入初始化的階段,如果是用 Wifi USB 的話,需要切進程式設定。而當有了網路後 Raspbmc 也能更新系統(是否進行kernel更新),那就擺一下讓他跑一會(大概需要25分鐘吧?)


更新前(藍色系):


Raspbmc-Pi


更新後(紅色系):


Raspbmc-Pi


大概設定完網路後,接著再啟用 AirPlay 功能:


系統設定 -> 服務 -> AirPlay 


最後就可以透過 iOS device 進行 Airplay 輸出到螢幕啦!如果你的螢幕不支援 HDMI,但是跟我一樣是透過轉接頭 (DVI-I) 轉換的,那會碰到音源輸出的問題,所幸這也能解決,在播放過程中,移動滑鼠就可以看到下面有聲音的icon,點選後可以選擇音源輸出,此例採用"類比"輸出,並記得把 Raspberry Pi 接上喇叭(或螢幕支援的小喇叭),這樣就能享受 AirPlay 了


在 Raspbmc 界面打滾一番,發現他做了不少東西,包含提供 HTML5 的 remote player,也有紅外線遙控等(大概要外接USB IR receiver),服務方面還有 FTP、網路芳鄰等,說真的還滿完整的。美中不足的是 AirPlay 在 PPS 等相關 iOS app 內不順,但在 Youtube app 上倒很 OK。


Raspbmc Web Controller