2012年4月26日 星期四

USB vs SATA

在看結論之前,先讓我碎碎念一下,學問、學問,要學就要問,但是也不能一遇到問題就急著問人吧!

STFW,明明網路上有人好心的把測試數據擺上讓你比較,問者那到底有花多少時間搜尋,以及研究呢?

如果說是外行的在問就算了,IT工程師耶!

IT工程師需要一定的水準,對數據這麼不敏感,又不去找答案,學歷搞高了也沒用,發展也有一定的限度。

我花了幾分鐘,用網路上找到的數據資料,結論來看,SATA還是比較快,eSATA又幾乎是指改了物理層的連接器跟線而已,所以eSATA原則上與SATA差距不大,SATA 6G與USB3.0比較的話卻差了將近30%左右,還是SATA比較快,SATA 3G與SATA 6G比較的話就沒多大的效益了,所以花錢買設備升級可能需要等等,或是上SSD看看能不能跑到SATA 6G的全部頻寬,不然那個瓶頸應該是硬碟的極限了。

以最後穩定的寫入速度來看,怎麼看都是SATA比較快,而且SATA 6G與SATA 3G沒差多少,實際測試上就是如此。

USB 2.0 vs SATA 3G





















USB 3.0 vs SATA 6G




引用參考:http://ithelp.ithome.com.tw/question/10033311
引用參考:http://en.wikipedia.org/wiki/RTFM

2012年4月16日 星期一

Node.js

一般提到網頁開發技術,很多人的印象就php、Java、.NET、 perl、python、Ruby、、等,在2011年最夯的是Node.js,它是純粹以JavaScript為基礎的框架,不同於jQuery這種前端的框架,它是可以是一種後端的框架,地位跟php、Java 、、、之流類似,只是語法已經純粹使用JavaScript了。

有趣的是他也可以在瀏覽器上直接執行,變成web app,目前看起來就「屌」,用起來也屌,問題是現階段拿來做專案,也可能會屌的爆肝。

這新技術有可能統一backend的程式,使得web app有統一的語言,寫起來也方便多了,是有可能造成趨勢,而且還是個有屌到的open source專案,相信群眾熱情是有可能把它舞台。

優點

  1. JavaScript
  2. 效能表現
  3. 社群支援

缺點

  1. 太年輕,基本上還剛開始而已
  2. 沒專用的開發工具
  3. 一直在callback,維護有點難度


參考:
http://www.inside.com.tw/2011/03/13/new-tech-nodejs
http://syshen.cc/post/5452172966/node-js-1
http://www.grandsights.twbbs.org/2011/09/nodejs_11.html

GreenMamba可以把Excel直接轉成Web Database


GreenMamba(青竹絲!?)可以直接把Excel轉成Web database,提供web介面存取Excel,可能有些人會用的到,也正好有人問到,我也找到方法,就寫一下筆記,雖然不是很推荐的方法,但是就...某些時候可以直接拿來用,也是有機會可以省去一些時間。

我想概念也不難,就是靠CGI去把Excel展開,並且提供Web GUI介面存取該頁面,所以需要開啟一個web server,公式的部份就不知道有沒有實現,主要是我沒有測試過該軟體,所以請有試過的朋友可以回一下文。


而對於想直接套用這軟體把Excel當成資料庫使用,省去寫網頁的人就請三思而後行,通常這種偷空減料的方法,後期很容易遇到困難。


參考資料:http://larsjuhljensen.wordpress.com/2011/10/18/resource-turning-an-excel-sheet-into-a-web-accessible-database-with-greenmamba/

2012年4月13日 星期五

USB DFU Class



USB DFU (Device Firmware Upgrade) Class,主要是用來更新USB Device的軔體,改天再深入研究看看。


參考文件 http://www.usb.org/developers/devclass_docs/usbdfu10.pdf



IPMB通訊協定筆記

IPMB Communication protocol note

IPMI是智慧平台管理(Intelligent Platform Management Interface),按照wiki的講法,原先是INTEL架構給企業系統的週邊設備用的一種工業標準,IPMI也是一個開放的免費標準,IPMI可以橫跨不同的作業系統、軔體和平台,可以監控和自動回報大量伺服器的運作狀況,用以降低伺服器系統成本。

實體上你在伺服器的主機板上有機會看如下圖兩種connector(怎麼看起都長一樣...)。

接腳的定義如下圖所示,TypeA與TypeB的差別就Pin4在不在而已。
這份文件是本人、在下、我對於IPMB通訊協定的筆記,人老了有些東西不靠外部記憶體很難都寫到腦袋裏面,尤其是這種人訂出來的協定,沒有所謂好壞的問題,只有所謂要不要遵守問題,所以就在雲端寫寫筆記。

這協定是架構在I2C之上,有幾個與I2C不一樣的特性:

  1. 只有Master Write可以用,也就是I2C R/W bit一直都是 0 (Write)
  2. 不支援10-bits的位址
  3. 每一個傳輸只能有一個slave address
  4. 不能使用re-start(repeated start)
  5. I2C ACK只表示該位元組收到確定而已,沒有其他意思

協定的外觀如下圖所示:


各個欄位意義如下表所示:


其中比較容易有疑問的是對於checksum的算法,它是zero-checksum,他阿哩阿雜講一堆,我是覺得舉例比較快。


checksum zero-checksum算法是從rsSA/rqSA~dataEnd一個byte一個byte的加總在一起之後mod 0x100,再取 2'sc (2的補數),底下是我從wireshark取下來的資料

0000 20 b4 2c 9c f8 00 00 00 32 03 00 37 .,..... 2..7    

我們用顏色區分資料

0000 20 b4 2c 40 f8 00 00 00 32 03 00 93 .,..... 2...    

紅色部份先是資料目的位址,再來是來源位址,黃色的部份是checksum,零會被忽略不加(國小問題吧)。
第一個checksum是0x2C = 2'sc((0x20+0xB4)%0x100)
第二個checksum是0x93 = 2'sc((0x40+0xF8+0x32+0x03)%0x100)

再來是Net Fn/LUN(net function)的擺法,一樣是舉個例子:

其中netFn是0x06,rqLun是0x00,則Get Device ID request就如下圖所示組合:

Get Device response就如下圖所示組合:

MSB先放netFn則是6-bits,接著才是LUN是2-bits。

Completion Code是在response才會有的回應,主要是功能就像是status word或是稱為response code,用來說明命令執行結果到底OK還是不OK,如果不OK那是什麼狀況。


Command及Response格式之類的就很無聊的查表、查表、再查表,沒什麼營養,IPM Device "Global" Command如下表,O/M=Optional/Mandatory。


參考一 http://download.intel.com/design/servers/ipmi/ipmb1010ltd.pdf
參考二 http://download.intel.com/design/servers/ipmi/IPMI2_0E4_Markup_061209.pdf

2012年4月12日 星期四

perl的檔案處理

配合上perl對文字串的處理,它在做檔案處理還蠻實用的。

  • 刪除檔案 unlink
  • 更改檔名 rename
  • 更改權限 chmod
  • 取得檔案屬性 stat
  • 拷貝檔案 copy
底下的參考網址有範例程式可以參考


參考網址

GUI沒辦法像積木一樣堆積出新的面貌,也就沒什麼彈性可以自動處理,工程師在這種環境底下慢慢的會變得跟一般使用者沒兩樣,失去高速、自動控制系統的能力,當然GUI在某些時候的確是比較直觀、方便,對使用者來說或許是福音,但是對於工程師來說可能就是毒藥,工程師常常需要大批的處理檔案,怎麼辦?

一個一個改嗎?

我是認為寫code按照某個規則,整批的改比較快吧!

檔案及檔案夾中有空白要改

在網路上看到一個問題,有人資料夾或檔案有空白,希望把資料夾或檔案名稱中的空白改成底線,而底下的code就是本人使用Perl寫出來的,事實上還蠻簡單的,當然與上次在Linux上使用的方法有點差異,Perl的資源豐富、強大,有發現好方法可以快速的搞定當然是拿來用阿~~XD。

所以code是愈寫愈小...XD


#!/usr/bin/perl -w

use File::Find;

$start_dir = shift || '.';

find( sub{
 if($_ =~ /\ /){
  my $new=$_;
  $new=~s/\ /\_/g;
  print "$_ --> $new\r\n";
  rename($_,$new);
 }
}, $start_dir );

2012年4月4日 星期三

用日期排列超級影音動物機下載的影片並砍掉垃圾檔

你是不是像我在太陽下低頭下載之後發現一堆垃圾檔案,也像我一樣覺得BT軟體不是按照下載完成的時間排放在資料夾中,覺得不是很方便。

我與一般使用者不一樣的地方就是,我會寫code解決這鳥事,不過就是把檔案撈出來砍掉嘛,順便重做連結讓找的時候方便一點而已,所以我寫出底下的code,這主要是運作在Linux伺服器上,我家的超級影音動物機(改天專題介紹一下這強大的機器),利用crontab排程更新資料就變得十分完美,只要丟檔案到AutoSeed資料夾下,等著看最新下載的就好,當然這個程式改一改就可以自動砍掉老舊的檔案,自動保持系統容量在一定的範圍之內。



#!/usr/bin/perl -w

use File::Basename;

$fileLocate="/media/mediaDisk";
@lines=`find $fileLocate/done`;
my $var=`rm -fr $fileLocate/dayList/*`;

my $index=0;

foreach $line(@lines){
	chomp($line);
	if(($line =~ /\.url$/i)||
	   ($line =~ /\.chm$/i)||
	   ($line =~ /\.mht$/i)||
	   ($line =~ /\.txt$/i)||
	   ($line =~ /___padding_file/)
	){
		unlink("$line");
	}
	if(($line =~ /\.mkv$/i)||
	   ($line =~ /\.avi$/i)||
	   ($line =~ /\.divx$/i)||
	   ($line =~ /\.mov$/i)||
	   ($line =~ /\.mp4$/i)||
	   ($line =~ /\.m4v$/i)||
	   ($line =~ /\.rmvb$/i)||
	   ($line =~ /\.rm$/i)||
	   ($line =~ /\.wmv$/i)||
	   ($line =~ /\.asf$/i)||
	   ($line =~ /\.ass$/i)||
	   ($line =~ /\.srt$/i)||
	   ($line =~ /\.ssa$/i)||
	   ($line =~ /\.sub$/i)||
	   ($line =~ /\.idx$/i)||
	   ($line =~ /\.vkt$/i)
	){
		if(-f $line){
			my @statArray=stat("$line");
			my ($sec,$min,$hour,$mday,$mon,$year)=localtime($statArray[9]);
			$year+=1900;
			$mon++;
			my $locate="$fileLocate/dayList/$year-$mon-$mday";
			#printf("%s\n",$line);
			if(!(-e $locate)){
				mkdir("$locate");
				print "[[$locate]]\n";
			}
			my($fname,$dir,$ext)=fileparse($line);
			print "$fname\n\t$dir\n\t$ext\n";
			print "ln -s \'$line\' \'$locate/$fname\'";
			if(-e "$locate/$fname"){
				$var=`ln -s \'$line\' \'$locate/$index_$fname\'`;
				$index++;
			}
			$var=`ln -s \'$line\' \'$locate/$fname\'`;
		}
	}else{
		if(-z $line){
			print ">>$line\n";
		}
	}
}

MCU的操作系統

當時開發VT100這個操作介面給MCU用,是基於「無聊」,想要在8bit MCU上搞一個操作系統上去而已,後來實際使用上發現,這還是個他媽的好IDEA,開發階段DEBUG可以塞一些功能帶入參數操作試試看,有些時候試爽了之後才把參數填上,有些時候臨時要看系統狀況也是靠這招,我的程式在PIC16系列與8051都有測試過,在非常窘迫的環境下還是可以使用,真是他媽的好程式(也不想是誰寫的),當然更不用說在優渥的環境之下使用,PIC 16bit/32bit或是ARM 系列都是可以運作良好,這個介面主要是在那種小型的嵌入式系統上使用。

JL代表Jones Lai本人、在下、我,以前都是聽老師在台上臭彈,「給我CPU,我就做的出系統」,現在覺得也沒什麼,就那樣嘛~~XD。

當然這個VT100沒實現類似DOS-KEY或是Bash那堆auto-complete方便的服務,除了我懶的寫之外,8bit的MCU無論是ROM或RAM也都塞不下去,在那種系統上連command的長度都要計較,還給你搞這個,純粹是找死,改天深入談VT100的一些細節好了,這篇就先出個code讓你聞香一下,光是這個操作介面要在51的鳥環境下跑,就夠艱苦的了,過程還有一些鳥狀況。



參考資料:
WIKI-VT100
ANSI/VT100 Terminal Control