2008年10月25日 星期六

發展計畫書&品質計畫書

計畫書的目標(發展計畫書&品質計畫書)
1. 安排發展的活動,使得可以成功且及時的完成專案,並且預估需要的人力和預算
2. 根據前項的預估 ,來召募人員和分配資料
3. 評估風險
4. 實作SQA (Software Quality Assurance)的活動
5. 提供給管理階層所要下決策需要的資料

發展計畫書的項目
1. Project products (專案會產生出什麼東西,和要給客戶什麼東西)



    a. 計設的文件
    b. 完成的軟體產品(完成的時間、安裝軟體的地點)
    c. 訓練的文件(時間、地點)


2. Project interface (若與其它系統溝通,要定義的介面)


    a. 與其它軟體的溝通介面
    b. 與同專案的其它軟硬體溝通的介面
    c. 與其它硬體溝通的介面


3. Project methodology and development tools for each phase (在每一個階段要使用的發展方法與發展工具)
4. Software development standards and procedures (發展的標準與程序)


    列出所有要用到的軟體發展程序的標準


5. The mapping of the development process:發展程序的時程表


    a. 估計每一個活動的時間
    b. 每一個活動與其它活動的相關性(甘特圖)
    c. 估計每一個活動所需要的專業資源


6. Project milestones (里程碑)


    每一個里程碑要完成的時間和產品


7. Project staff organization (員工組織)


    a. Organizational structure (組織架構):參與的人員(包含承包商的人員)
    b. Professional requirements (專業的需求):像是CMMI的資格啦~
    c. 每一個活動需要的人員數
    d. Names of team leaders and team members:透過name了解這一個team主要是在做什麼事情


8. Development facilities (所需要的設備,包含軟硬體)
9. Development risks (研發所會遇到的風險)


    a. Technological gaps (技術差距)
    b. Staff shortages (人員不足)
    c. Interdependence of organizational elements (組織之間互相的依賴):像是承包商的進度會影響到主要的進度


10. Control methods (收集專案資料以便讓專案管理者了解情況)
11. Project cost estimation (估計專案需要的成本)

品值計畫書的項目
1. Quality goals (品質目標):最好用量化來說明需要達到的水準,不要說錯誤要很低,要說在100年內只能出一次錯,這樣的量化。
2. Planned review activities (計畫審查活動):包含design reviews (DRs)、design inspections、code inspections...


    a. 審查活動的範圍
    b. 審查活動的類型
    c. 審查活動的排程
    d. 審查活動的細節
    e. 誰要負責審查活動


3. Planned software tests (軟體測試計畫)


    a. 單元測試、整合測試、完整系統測試
    b. 軟體測試的型態,包含電腦規範、用軟體來測試
    c. 測試活動的時間排程
    d. 特定的程序要實現
    e. 誰負責測試活動


4. Planned acceptance tests for externally developed software (對額外要用到的軟體作可靠度測試)


    a. 購買的軟體
    b. 承包商所開發出來的軟體
    c. 客戶提供的軟體


5. Configuration management (建構管理):必須說明要整個專案控制進度使用的軟體和程序是什麼

「問題」:小專案是否要development plans and quality plans?
1. 若根本不需要的專案,像是15天就可以完成的專案就不需要。
2. 依據此專案是若失敗是否會損失很大;若不會很大,則不需要計畫書;若會損失很大,則需要計畫書
3. 某一些專案計畫書是責任也是義務

小專案所需要注意的事項
The development plan:


    a. Project products, indicating "deliverables"
    b. Project benchmarks
    c. Development risks
    d. Estimates of project costs


The quality plan:


    a. Quality goals



若設計給公司內部使用的系統,是否需要計畫書?
優點:


    a. 避免被否絕預算
    b. 避免對其它公司的專案、造成傷害
    c. 避免對公司的決策出現錯誤


對內部員工的好處:


    1. 比較能按照進度日完成,且比較不容易被否絕這一個提案
    2. 若會延遲可以提早知道;並且可以早一點嘗試解決問題
    3. 較少對內部造成傷害


對組織的好處:


    1. 降低市場損失的風險
    2. 降低因延遲使得公司被起訴的風險
    3. 降低損壞公司的名聲
    4. 降低增加預算的風險

2008年10月21日 星期二

C風格字串

C風格字串沒有什麼特別之處,只是char型態的陣列,最後一個字元是0,這個最後的字元是標記字串的結束。

建立C風格字串時,可以建立char型態的陣列,並將字串中的每一個字元指定給陣列中的元素,然後加上一個0,表示為'\0'代表字串的中止符號,標記字串結束。

建立字串有以下兩個方法

#include <iostream>
using namespace std;
int main()
{
  char word[] = {'H' , 'e' , 'l' , 'l' , 'o' , '\0'};
  char string1[] = "Hello";
  cout << string1 << endl;
  return 0;
}


其它字串function:
尋找字串:strstr
比較字串:strcmp
連結字串:strcat
拷貝字串:strcpy
將整數轉換成字串:itoa
將字串轉換成整數:atoi
將字串轉換成float:atof
傳回字串的長度:strlen
將一個數格式化為一個字串,該函數的用法是:

sprintf(string,format,list)

string是將要顯示的字串,format是表明格式化結果的轉換字串,為list中的每一個元素都指定轉換字串。可能在使用socket時會用到~

用cin的方法讀取C風格的字串

#include <iostream>
using namespace std;

int main()
{
  const int total = 50;
  char string1[total];
  cout << "Type some words: ";
  cin.getline(string1,total);
  cout << "You typed: " << string1 << endl;
  return 0;
}

該方法讀取的字元數為傳入的數目減1,因為,必須考慮到串尾的'\0'的空間。

將儲存字串的C風格的字串以及要讀取的最大字元傳入到cin.get (cin.get將一直讀取到最大的字元數減1,或者使用者按下Enter)。
需要注意一點:cin.get一直讀取,直到有一個終止符號'\n',但是,不讀取'\n'。要將'\n'從輸入緩衝區清除時,可以使用方法cin.clear,或者再次呼叫cin.get。


#include <iostream>
using namespace std;

int main()
{
  const int total = 50;
  char string1[total];
  cout << "Type some words: ";
  cin.get(string1,total).get();
  cout << "You typed: " << string1 << endl;
  return 0;
}


在C++中如果以""來包括一串文字的話,即為字串字面常數,例如"Hello! World!"就是字串字面常數,字串字面常數由字元陣列組成,每一個字串最後會以一個null字元結束。

2008年10月20日 星期一

把圖轉成xpm格式

氣在在寫qt的拖曳程式,
在拖曳的時候有時候就會出現小圖案~
而這個小圖案是以xpm的型式寫在程式裡面~

目前還沒有成功啦~先把網址記錄下來~

一成不變的GRUB開機splash看久了也會挺膩的,如果各位跟我ㄧ樣有這樣的問題時,可以準備一張640×480 16 色的圖片,便可以輕易的改裝你的splash了。製作方式如下:

(1) 準備一張640×480 16色圖片,檔案類型為JPG的格式

(2) [root@Fedora figaro]# convert -geometry 640×480 -colors 14 Image.jpe Image.xpm

(3) [root@Fedora figaro]# gzip -9 Image.xpm

(4) [root@Fedora figaro]# cp Image.xpm.gz /boot/grub

(5) 修改 /boot/grub/menu.lst,將splashimage=(hd0,0)/grub/splash.xpm.gz,把splash.xpm.gz改成我們剛才製作好的 Image.xpm.gz。完工^^

GRUB splash.xpm.gz 圖檔製作

QT - drag and drop


以上就是這一個範例程式的介面~
共會有三個這個介面,可以由其中一個拖曳到另一個DropSite~
DropSite就是要讓別人拖曳到的地方。
Secret Source可以拖曳到DropSite,會出現the secret number is X,但是拖曳到其它地方,滑鼠會出現禁止的符號~

QStoredDrag::QStoredDrag ( const char * mimeType, QWidget * dragSource = 0, const char * name = 0 )

mineType應該是說此Drop有支援mimeType這一個類型


void QWidget::setAcceptDrops ( bool on ) [virtual]

設置對於這個窗口元件按滑鼠事件是否生效為on。


void QWidget::dragEnterEvent ( QDragEnterEvent * ) [virtual protected]

當一個拖動正在進行並且鼠標進入這個窗口元件,這個事件處理器被調用

QDragObject Class
用來封裝:主要是用來當在application與application之間拖曳、或是使用在剪貼功能上


QDropEvent::Action
QDropEvent::Copy - The default action. The source simply uses the data provided in the operation.
QDropEvent::Link - The source should somehow create a link to the location specified by the data.
QDropEvent::Move - The source should somehow move the object from the location specified by the data to a new location.
QDropEvent::Private - The target has special knowledge of the MIME type, which the source should respond to in a similar way to a Copy.

預設值是Copy,也就是說,當由一個地方拖曳到另一個地方,是會在新的地方建立一個新的元件


const char * QDropEvent::format ( int n = 0 ) const [virtual]

傳回目前的drag可以支援的型式

通用資源標誌符(Uniform Resource Identifier, 簡稱"URI")是互聯網的一個協議要素,可以通過它來定位任何遠程或本地的可用資源(這些資源通常包括HTML文檔、圖像、視頻片段、程序等)。


QStoredDrag::QStoredDrag ( const char * mimeType, QWidget * dragSource = 0, const char * name = 0 )

設定要解碼的mimeType,它可以解QDragObject之類的封包


bool QDropEvent::provides ( const char * mimeType ) const [virtual]

判斷是否有支援mimeType這一類的QDragObject

這一個例子中,在dropsite.h中,有宣告一個signals function,
但是,沒有實作這一個function,
只有在main.cpp中,透過

QObject::connect( d, SIGNAL(message(const QString&)),format, SLOT(setText(const QString&)) );

實作這一個function,
我的感覺就變成,其實,message這一個function就是setText的別名啦~當執行message,就會執行setText這一個function

=======================================================

其實在良葛格學習筆記中,dragdrop有一個例子非常的清楚,只是沒有說明如何自定dragobject。

主要會用到的function有:
mousePressEvent
dragEnterEvent
dropEvent
dragLeaveEvent

2008年10月17日 星期五

實體層概觀

實體層被分成兩個附屬層(sublayer):
實體層收斂程序(Physical Layer Convergence Procedure,簡稱PLCP)附屬層
實際配媒介(Physical Medium Dependent,簡稱PMD)附屬層。

PLCP的功能在於結合來自MAC的訊框與空中所傳輸的無線電波。PLCP同時會為訊框加上自己的標頭。

每一種變調方式採用的同步訊號均不相同,因此PLCP會為準備傳送的所有訊框加上自己的標頭。
接著由PMD負責將PLCP所傳的每一個位元,利用天線傳送至空中。實體層還包含了頻道淨空(clear channel assessment,簡稱CCA)功能,用來指示MAC是否偵測到了訊號。

無線鏈路
無線頻譜可以被劃分為許多頻段,每一個頻段針對特定的使用目的。每個頻段定義了特定應用可以使用的頻率。其中,防護頻段(guard band)用來防止傳送訊號的溢散影響到其它頻段。

展頻
展頻的運作原理,是利用數學函數將訊號分散至較大的頻率範圍。祇要在接收端進行反向作業,就可以將這一些訊號重組為窄頻訊號。更重要的是,所有窄頻雜訊都會被濾掉,因此訊號可以清楚重現。

對傳統的窄頻接收器而言,傳輸訊號展開至較寬頻段之後,就和雜訊沒有兩樣。

展頻的類型
跳頻(Frequency hopping,簡稱FH或FHSS)
跳頻系統是以某種隨機樣式在頻率間不斷跳換,每一個頻道只作瞬間的傳輸。

直接序列(Direct sequence,簡稱DS或DSSS)
直接序列系統利用數學編碼函數將功率分散於較寬的頻段。

正交分頻多工(Orthogonal Frequency Division Multiplexing,簡稱OFDM)
OFDM將可用頻道劃分為一些子頻道,然後對每一個子頻道所要傳送的部分訊號進行平行編碼。

訊號接收與效能
空氣中到處都是隨機的電磁波,無線電通訊必須從背景的雜訊中分辦出訊號。一旦接收條件變差,訊號就越容易被雜訊淹沒。效能絕大部分取決於訊噪比(signal-to-noise ratio,簡稱SNR)這個決定性因素。圖10-2以訊號峰值(the peak of the signal)與雜訊基準(noise floor)之間的差異值來表示訊噪比。



路徑損耗、傳輸距離與傳輸量
在802.11中,網路的速度受到距離遠近的影響。不同的802.11定義出不同的變調標準,速度範圍由1Mbps到54Mbps。接收器必需能分辦出不同的狀態,方能將位元資料由電波訊號中取出。較高速的變調方式在特定的時間內可以封裝更多的位元,因此需要比較乾淨的訊號(以及更高的訊噪比)方能成功解碼。

電波訊號行經空間時更會衰減。在802.11的有限範圍內,雜訊基準還不至於有太大的變動。不過距離一長,訊號的衰減會影響接收端的訊噪比。當工作逐漸遠離基地台,訊號準位就會不斷的下滑;因此,訊噪比就會下滑。


以網路工程而言,當訊噪比較低以至於無法使用較高的速率,工作站就會降速,以便使用訊噪比要求較低的資料率。

路徑耗損受到距離與電波頻率的影響。距離越遠或頻率越高,則路徑損耗越大。802.11a所使用5GHz。開收式空間的路徑損耗可以表示成如下等式:
路徑損耗(dB) = 32.5 + 20 log F + log d

其中頻率 F 以GHz表示,距離d以公尺為單位。不過,路徑損耗不祇受距離的影響,牆面或窗戶等障礙物也會影響訊號,至於天線或放大器則可用來加強訊號,補償傳輸時的損耗。計算距離時通常會加計一種稱為鏈路邊際(link margin)的虛構因素,代表無法預料的損耗。
總損耗 = 傳輸功率 + 傳輸天線增益 - 路徑損耗 - 鏈路邊際 + 接收天線增益

多重路徑干擾
波與波之間具有疊加性(superposition)。當多個波集於某一點時,所產生的波即是所有波的加總。



圖 10-5(c)所顯示的兩個波幾乎完全相反,加總之後,相當於什麼也沒有。




多重路徑衰弱屬於訊符間干擾(Inter-symbol interference,簡稱ISI)的特例。
再次強調,波與波之間具有疊加性,因此造成速個波形的混淆扭曲。在實際的情況下,來自不同路徑的波前(warefront)會彼此疊加。最先到達的波前與最後到達的多重路徑回音,兩者之間時間差稱為延遲範圍(delay spread)。延遲範圍越長,就必需採用比較穩當的編碼機制。如果延遲範圍較短,效能會更好。
如果有一些延遲範圍太長,有一些網路就會降低傳輸速率以為因應。




天線
天線(antenna)是RF(Radio Frequency)系統中最關鍵的零件,因為由它們負責將線路中的訊號轉換為電波,以及將電波反轉為電路訊號。在方塊圖中,天線通常以倒三角形來表示




天線必需以導電材質方能運作。無線電波遇到天線時,電子就會流入導體而產生電流。同樣地,在天線施加電流就會在天線週圍產生電場。施加在天線上的電流不同,電場也隨之改變。變動的電場會產生磁場,因此形成電波。

天線的長短取決於頻率:頻率愈高,天線愈短。每種頻率可以使用的簡易型最短天線長度為波長的一半。

全向型(omnidirectional)天線,亦即可以收發所有方向的訊號。
指向型(directional)天線,這種類型的天線可以針對某個較窄的範圍進行收發。



給予等量的輸入功率,指向型天線可以傳得較遠,訊號也比較清楚。對於所指的方向,具備較高的無線訊號敏感度。

放大器
放大器可以增強訊號。訊號的放大或增益程度係以分貝(decibels,簡稱dB)做為量測單位。

低雜訊放大器(Low-noise amplifier,簡稱LNA)通常與天線連接,用來將所收到的訊號放大到與RF系統連結的電子零件可辦識的程度。LNA同時也可以就雜訊係數(noise factor)區分等級,雜訊係數可用來評量放大器本身所帶來的不相干資訊。雜訊係數越小,接收器就可以辦識愈細微的訊號,因此可以涵蓋較長的距離。

高功率放大器(High-power amplifier,簡稱HPA):則是用來將訊號提升至最大功率而後傳送。

更新電腦時間

那麼網路校時使用哪一個 port 呢?就是 123 這個 port ,而使用的軟體就是 ntpdate 這一支程式!

基本上,網路校時需要兩個步驟:

1. 由 time.stdtime.gov.tw 取得最新的時間,並即時更新 Linux 系統時間;
2. 更改 BIOS 的時間。

所以整個方法只要執行兩行即可搞定:


[root@host ]# ntpdate time.stdtime.gov.tw
[root@host ]# clock –w // 在redhat下
[root@host ]# hwclock -w // 在ubuntu下


如果還想要讓系統自動去更新時間的話,哈哈!對啦!那個 /etc/crontab 不要忘記了!將底下這一行寫入 /etc/crontab 當中:

10 5 * * 0,3 root /usr/sbin/ntpdate time.stdtime.gov.tw; clock -w

這樣一來,每星期三、日的五點,系統就會自動的去更新您 Linux 的時間囉!

參考資料:
鳥哥的 Linux 與 ADSL 私房菜

由文字模式自動登入,並執行指令

目的:學弟在嵌入式版子上,希望一開機可以不需要登入的動作,可以馬上執行某一個程式
目前有兩個方法
1. 設定自動由一個帳號登入,再由這一個帳號自動執行程式
2. 把要執行的程式設定成服務

目標,想要一開機執行ifconfig這一個程式

那先來試第一個方法吧~先設定成一個終端機為自動登入

[root@host ~]# vi /etc/inittab


隨便找哪個console下手都可以,在這裡以第3個虛擬控制台為例
把下面這一行
3:2345:respawn:/sbin/getty 38400 tty3
改成下面這樣

3:2345:respawn:/sbin/mingetty --autologin myname tty3
其中的「myname」是指你要自動登入的帳號,請依自己的情形輸入

接下來請到以myname的身份,到這個帳號的家目錄下
找一個叫作.bash_profile的檔案(如果沒有,請自行建立)
在.bash_profile這個檔案裡最下面加你想要輸入的指令ifconfig~

這裡另外提醒一下:

(1) .bashrc
系統啟動後就會自動執行。
(2) .profile
用戶登入後才會執行。
可以參考:shell設定


第二個方法
把要執行的指令設定成服務~
以redhat為例:
在/etc下分別有rc1.d/;rc2.d/;rc3.d/;rc4.d/;rc5.d/;rc6.d/
分別放置登入level所要執行的服務的script,文字登入就是level 3、而視窗登入就是level 5

在/etc/rc.local檔案中(這一個script是所有服務中最後一個被執行的script,預設值是空的)
加入要執行的指令~
當登入時,就會去執行這一個指令啦~
要注意的事,此時還沒有shell,所以,沒有辦法中止正在執行的程式喔~

基本上在rc(i).d中的script有的檔名是有義意的~
S表示start、K表示kill
然後是由數字小執行到數字大的script

或是可以寫一個script然後,例如/etc/init.d/bbsd


[root@host ~]# update-rc.d bbsd defaults 90

90為開機時的執行順序,端看您如何設定.
update-rc.d會自動幫各個rcX.d目錄下建立一link至/etc/init.d/執行檔
或者是

[root@host ~]# update-rc.d iptables start 20 2 3 4 5 . stop 0 1 6 .

它會去找/etc/init.d/iptables這一個檔案,
2.3.4.5是指把該執行檔複製到/etc/rcX.d 複製到底下,當開機run level 2.3.4.5才會執行該執行檔
0.1.6是把該執行檔複製到/etc/rcX.d下,當關機時,會執行讓執行檔

在ubuntu中,rcX.d是放在/etc/event下

參考資料:
Linux自動登入技法
如何使程序開機自動運行?
linux開機啟動腳本的順序
開機自動執行script

錯誤記錄

1. slots必需宣告為public slots
error: expected primary-expression before 'void'
error: ISO C++ forbids declaration of 'type name' with no type
error: expected ';' before 'void'

2. signals必需宣告為signals就好,不需要宣告為public signals
error: expected `:' before 'protected'

3. 當header檔中,加入Q_OBJECT之後,必須重新qmake -project;qmake
它必需重新建立pro檔與Makefile

4. 在connect中,若要使用到本類別新建的function,必須要用到this指標
error: no match for call to 類別

2008年10月14日 星期二

管理作業

802.11管理架構由三個元件組成:MAC層管理單元(MAC layer management entity,簡稱MLME)、實體層管理單元(physical-layer management entity,簡稱PLME)以及系統管理單元(system management entity,簡稱SME)

掃描
在無線網路中,工作站加入任何相容網路之前,必需經過辨識的工作。於所在區域辨識現在網路的程序稱為掃描(scanning)

BSSType (independent、infrastructure 或both)
掃描時可以指定所要搜尋的網路屬於independent ad hoc、infrastructure或同時搜尋兩者。

BSSID (individual或broadcast)
工作站可以針對要加入特定的網路(individual)進行掃描或掃描允許該工作站加入所有的網路(broadcast)

SSID ("network name")
SSID係用來指定某個延伸服務組合(extended service set)的位元串。

ScanType (active或passive)
主動(active)掃描會主動傳送Probe Request訊框,以辨識該區有哪一些網路存在。被動(passive)掃描則是被動聆聽Beacon訊框,以節省電力。

ChannelList
802.11允許工作站指定所要嘗試的頻道表。

ProbeDelay
主動掃描探測某個頻道期間,為了避免工作站一直等不到Probe Response訊框,所設定的逾時計時器,用來防止某個閒置的頻道讓整個程序停擺。

MinChannelTime與MaxChannelTime
以TU(時間單位)來指定這兩個值,意指掃描每個特定的頻道,所使用的最小與最大的時間量。

被動掃描
被動掃描(passive scanning)可以節省電力,因為不需要傳送任何訊號。在被動掃描過程中,工作站會在頻道之間不斷切換,並且記錄來自所收到之Beacon訊息的資訊。Beacon在設計上是為了讓工作站得知,加入某個基本服務組合(basic service set,簡稱BSS)所需要的參數,以便進行通訊。

主動掃描
在主動掃描(active scanning)中,在每一個頻道上,工作站都會發出Probe Request訊框,請求某個特定網路予以回應。
1. 跳到某個頻道,然後等候來訊顯示(indication of an incoming frame),或者等到ProbeDelay計時器逾時。如果頻道收到訊框,就証明該頻道有人使用,因此可以加以探測。
2. 利用基本的DCF存取程序取得媒介使用權,然後送出一個Probe Request訊框
3. 至少等候一段最短的頻道時間(即MinChannelTime)
a. 如果媒介並不忙碌,表示沒有網路存在。因此,可以跳到下一個頻道。
b. 如果在MinChannelTime這段時間媒介非常忙碌,就繼續等候一段時間,直到最長的頻道時間(即MaxChannelTime),然後處理任何的Probe Response訊框

在Infrastructure網路中,是由基地台負責傳送Beacon訊框,因此它必需負責回應以Probe Request在該區搜尋網路的工作站。在IBSS中,工作站彼此輪流負責傳送Beacon訊框,因此負責傳送Probe Response的工作站會經常改變。
Probe Response屬於unicast管理訊框,因此必須符合MAC的正面回應(positive acknowldegement)規範。
在網路林立的區域,或許必須調整每個頻道的最長等候時間(maximum channel time),才有辦法處理區域內每個基地台所發出的答覆訊息。

掃描結果
掃描結束後會產生一份掃描報告。這份報告列出該次掃描所發現的BSS及其相關參數。進行掃描的工作可以利用此報告加入其所發現的任何網路。

Beacon interval (訊號間隔;整數值)
每個BSS所傳遞的訊框,均可指定自己的間隔,以TU為單位。

DTIM (DTIM期間;整數值)
DTIM訊框屬於省電(power-saving)機制的一部分

Timing parameter (計時參數)
有兩個欄位可以讓工作站的計時器與BSS所使用的計時器同步

PHY參數、CF參數以及IBSS參數
頻道資訊(channel information)包含實體層參數(physical-layer parameters)中

BSSBasicRateSet
基本速率組合(basic rate set)是打算加入某個網路時,工作站必需支援的資料傳輸速率

加入網路
加入網路(joining)是建立連線的前置作業,不過此時還不能存取網路。存取網路之前,必須經過身份認証以及形成連線。
通常用來決定加入哪一個網路的判斷標準是功率準位(power level)與訊號強度(signal strength)
使用BSSID可以確保目前是與正確的工作站進行傳輸,同時忽略其它BSS的工作站。

身份認証
目前802.11身份認証有一點像單行道。打算加入某個網路的工作站必須通過身份認証,然而網路方面並無義務對工作站証明自己的身份。

事先身份認証
事先身份認証(preauthentication)係用來加速連線關係的轉移。
在掃描階段,工作站可以跟幾部基地台進行802.11身份認証,如此一來,當有需要時,就可以立即進行連線作業,其好處是一旦進入基地台的涵蓋範圍,工作站就可以立即與基地台重新連線,而不必等候認証交換程序。


當行動式工作站移動到右邊,來至AP1的訊號會逐漸減弱。工作站會持續監測來至ESS的Beacon訊框,最後終於注意到AP2的存在。至此,工作站或許會選擇與AP1解除連線,然後與AP2進行身份認証與重新連線。



工作站送出一個EAPOL-Start訊息給新的基地台,揭開事先身份認証的序幕。
工作站每次祇能與一部基地台連線,因此事先身份認証必須透過舊過舊基地台轉達。

AP1收到以後,就會透過傳輸系統(distribution system)將訊框傳給AP2
6. 當工作站扣下扳機(pull the trigger),連線關係就會轉移到AP2。做為初始連線程序的一部分,工作站會提供金鑰快取的副本,告訴AP2它已經通過身份認証。
7. AP2收到身份認証要求,開始搜尋本身的金鑰快取。找出可用金鑰後,便立刻啟動成對金鑰的四道磋商程序。在衍生金鑰的過程中,短時間內工作站將無法正常收送封包。

連線作業
連線(association)屬於一種記錄(recordkeeping)程序,它讓傳輸系統(distribution system)得以記錄每一部行動工作站的位置,以便將傳送給行動工作站的訊框,轉送給正確的基地台。形成連線之後,基地台必須為該行動式工作站在網路上註冊,如此一來,發送給讓行動式工作站的訊框,才會轉送至其所屬基地台。其中一種註冊方式係送出一個ARP訊號,讓該工作站的MAC位址得以跟與基地台連接的交換埠形成連線。

連線程序
一旦連線要求獲准,基地台就會以代表成功的代碼0及連線識別碼(Association ID,簡稱AID)來回應。AID本身是數值形式的識別碼,在邏輯上則是用來辦識暫存訊框所要傳遞的行動式工作站。

重新連線程序
重新連線(reassociation)是指將連線關係自舊基地台轉移至新基地台的程序。不過在骨幹網路方面,基地台之間會彼此溝通,以便移轉訊框。

Infrastructure的網路的電源管理
因為基地台知道所連線的每部工作站的電源管理狀態,因此只要讓工作站處於作用(active)狀態,基地台即可判定,應該將訊框傳送至無線網路,否則就得為之暫存訊框。
開啟接收器聆聽暫存狀態,遠比週期性地送出探查訊框,所秏費的電力要少的多。

暫存單點傳播訊框,以及使用TIM來傳遞
當有訊框被暫存(buffered)時,目的節點的連線識別碼(Association ID)可以在該訊框及其目的地之間提供邏輯鏈路(logical link)。邏輯上,每個AID可將「暫存訊框」連繫至該AID所指定的行動式工作站。群播與廣播訊框被暫存時,會被連繫到0的AID。

如果工作站一直未能提取為之暫存的訊框,根本毫無意義。為了通知工作站有訊框待傳,基地台會產生有資料待傳訊息(traffic indication map,簡稱TIM)

無線基地台必須甦醒過來,並進入作用模式,聆聽Beacon訊框,以便接收TIM。祇要檢視TIM,工作站即可判定基地台是否有幫自己暫存訊框。

PS-Poll訊框用以指示某部處於省電狀態的行動式工作站暫存切換為作用模式,並且準備接收被暫存的訊框。

傳遞群播與廣播訊框:資料待傳指示訊息
每一個BSS均有一個稱為DTIM Period的參數。TIM是以Beacon訊息來傳送的。每當經過幾個固定的Beacon interval (信息間隔),就會發送一個特殊的TIM,稱為資料待傳指示訊息(Delivery Traffic Indication Map, DTIM)

IBSS的電源管理
independent網路中的工作站使用ATIM (announcement traffic indication messages;資料待傳指示通知訊息),強迫其它工作站保持清醒。在同一個IBSS當中,所有工作站必須在Beacon傳送後的特定時間聆聽ATIM訊框。

如果有部工作站為另一部工作站暫存訊框,它可以送出ATIM來通知對方。實際上,ATIM訊框是讓收發器保持開啟的訊息。

在ATIM期間,祇能傳送特定的控制與管理訊框。除了Beacon、RTS、CTS和ACK,當然包括ATIM訊框,傳送時必須依循DCF規則。ATIM訊框之所以只能在ATIM期間傳送是因為若IBSS中其它工作站皆處在休眠狀態,此時送出ATIM訊框便毫無意義。

對任何暫存管理功能而言,唯一的要求是暫存訊框至少得保存一個信標週期。

計時器的同步
除了工作站內部的計時,基本服務區域中每一部工作站都必須保存一份計時同步功能(timing synchronization function;簡稱TSF);該副本是與其本服務區域中所有其它工作站之TSF同步過的內部計時器。
Beacon訊框的另一個作用,就是定期對網路上的工作站發布TSF值。

Infrastructure的計時同步
在Infrastructure網路中,計時功能也採取類似的做法。由基地台負責維護TSF時間,任何與之連線的工作站都必須將基地台的TSF視為有效,而加以接受。
無線媒介充滿雜訊是可以預期的,經常會漏失Beacon訊框早在預料當中,工作內部的TSF計時器可以減緩偶爾漏失Beacon訊框所造成的影響。

IBSS的計時同步
IBSS中所有的工作站會準備在預定時間(target time)傳送Beacon訊框。當預定時間接近時,所有其它傳輸都會暫停。Beacon或ATM除外,所有訊框傳輸暫存器均會中止,等候媒介淨空,以便傳送更重要的管理訊框。
IBSS中所有的工作站都會為Beacon傳輸產生一個backoff(延後)計時器。TBTT結束後,所有工作站即從Beacon backoff 計時器的值倒數至0。
如果工作站在傳送時間之前就收到Beacon訊框,該預定要進行的Beacon傳輸就會被取消。
當Station的計時器逾時,即會傳送一個Beacon
這一個規則能夠確保至少有一部工作站處於清醒狀態,以便回覆正在進行掃描,準備加入網路的新工作站。
祇有當所收到的timestamp晚於內部計時器才會以timestamp更新內部計時器。

動態選頻(DFS)
當工作首度連線到網路,Association Request訊框包含一個Supported Channel資訊元素,其中列出工作站支援的頻道。

頻道禁聲
檢測無線電波頻道是在禁聲期(quiet period)或禁聲期間(quiet interval)進行。禁聲期間是指BSS所有工作站暫時停止傳輸的時間,有助於測量是否存在雷達系統的潛在干擾。

在中控型網路裡,頻道禁聲排程完全由基地台控制。基地台可以完全決定禁聲期長短,或甚至完全停用。
獨立型網路是在網路成立時選擇禁聲期的排程。輪到新工作站負責發送Beacon與Probe Response訊框也無法改變禁聲其參數,祇能延用之前的參數。

雷達掃描
獨立型網路並沒有基地台內建的功能,而是透過DFS owner來協調各個工作站進行頻率選擇服務。

網路中會有一部工作站被指定為DFS owner,負責蒐集量測報告以及監控頻道中是否有出現雷達訊號。

DFS owner負責決定使用哪一個新頻道,並且送出頻道切換宣告訊框。

萬一DFS owner離開網路,所有工作站會進入DFS owner遴選模式(recovery mode)。在這個模式當中,可以有好幾部工作站同時擔任DFS owner,並排程產生標準所要求的頻道切換宣告訊框。
第一部傳送頻道切換訊框的工作站才會成為DFS owner,其它工作站則會放棄這一個角色。

Windows Update 或 Automatic Update 下載更新會出現數十個更新下載成功安裝失敗

最近在安裝xp之後,更新完sp3後,還有一些更新確失敗,那就試試以下辦法吧~

發生的原因
在您嘗試使用修復安裝(重新安裝)您的Windows XP後,你可能會發現自動更新安裝失敗,或您透過 Internet Explorer 連結 Microsoft Windows Update 網站進行更新時,會出現很多個更新下載正常,卻無法安裝。
解決方案
1. 請先下載 wufix.zip壓縮檔
2. 下載完成後,[滑鼠右鍵]點選該壓縮檔 wufix.zip,並選擇[解壓縮全部]。
3. 於[壓縮資料匣解壓縮精靈]的畫面中,請按下[下一步]繼續,接著請選擇你欲存放該檔案的位置,確認後請按[下一步],接著選擇[完成]。
4. 按下[完成]後,會自動開啟一個新視窗,請連點兩下來執行其中的 wufix.exe
5. 執行該程式時,您將會看見一個黑色的視窗,請耐心等待,該視窗會自行關閉
6. 完成上述步驟後,請再次執行Windows Update
※若您無法下載或執行上述檔案,請利用下列手動方式

手動方式
1. 按一下 [開始],再按一下 [執行],在 [開啟] 方塊中輸入 cmd,然後按一下 [確定]。
2. 於命令提示字元中,依序輸入以下指令並按下Enter

regsvr32 wuweb.dll
regsvr32 wuapi.dll
regsvr32 wucltui.dll
regsvr32 wuaueng.dll
regsvr32 wups.dll
regsvr32 wups2.dll
net stop wuauserv
net start wuauserv
net stop bits
net start bits
net stop w32time
net start w32time
net stop msiserver
net start msiserver
3. 請重新執行Windows Update即可

參考資料:
Windows Update 或 Automatic Update 下載更新會出現數十個更新下載成功安裝失敗

2008年10月10日 星期五

幫同學會做的訂閱blog的連結

這裡有說明原因了
以下是內容

==我是分格線==我是分格線==我是分格線==我是分格線==我是分格線==我是分格線==我是分格線==

各位同學好~
為了凝聚高中同學的向心力,
版主很有心的在9/28,也就是教師節的時候舉辦了小型的同學會~
大家離開之後,版主又很熱心的建立此blog,來讓大家作為一個交流的平台~
但是,有鑑於之前不良牛的沒落~因此,我們在這裡做了一個案例的分析~為什麼不良牛會沒落~

案例分析

我們把會上不良牛的同學分為三種同學~
1. 會po文的同學
2. 會回文的同學
3. 會潛水的同學

在初期的時候,大家比較有空,會常上不良牛,所以,整個板都很熱鬧~
但是,有一段時間,大家比較忙~
會po文的同學就比較少上來~
然後,會回文的同學就沒有新主題可以回文~而潛水的同學也沒有新文章可以看~
所以,大家就比較少上來~而,會po文的同學忙完了,回來po時,沒有人回文~久了,連會po文的同學也很少出現了~就變成現在這個樣子了~

最近剛好看到一個好東西,想說可以用協助這一個版主~
就是若有人有po文章,會寄信給各位有通過認証的同學~

可行性分析
之前上來看不良牛是額外的動作~
所以,當上來不良牛看,但是,沒有新的文章,這個時候心裡會很灰心~

但是,若是有新文章時,會寄信給各位同學呢?
基本上,常碰電腦的人,應該每一天會看一次信箱,
若沒有常常上網的話,久久上一次網的人,除了看新聞、拍賣、應該就是信箱了(至少會進信箱把垃圾信清一下~)
如果有同學是用hotmail又有用msn的話,當有新信寄到hotmail時,msn會跳出訊息通知你~
同理~如果有同學用yahoo又用yahoo即時通,同樣,有新信也會通知你~
所以,基本上登入信箱的機率絕對比登入不良牛的機率高~
所以,個人覺得這是一個不錯的方法,當有人留言時,你在上來就可以了~
當然,如果有什麼想要跟大家分享也可以跟大家分享喔~
但是,我覺得可能還是要有一個常常po文的同學,讓大家常常收到信,說有新文章,這樣,大家就會常常上來了~我想這個版主在外面的世面比較廣,應該每一件事都可以引起某一些人的共鳴吧~
我個人覺得可行性是蠻高的~
後台的部分我都搞定了,以下是教大家如何申請寄信到你的信箱~

申請教學
申請新文章信件:當有人建立新文章時,你會收到信
點以上聯結可以連到一個網頁

確定之後,再到你填的信箱按確認信的連結

申請新回應信件:當有新回應時,你會收到信
步驟同上

成果:
訂閱國中同學會新文章通知
訂閱國中同學會新回應通知
訂閱國中同學會留言版更新通知

訂閱高中同學會新文章通知
訂閱高中同學會新回應通知
訂閱高中同學會留言版新回應通知

在vmware下安裝centos

現在還不需要用到CentOS,
這一個作業系統我是直接裝在實體的筆電上~
以後,真的有需要裝在vmware上,再說吧~
節省時間囉~
不過,還是把今天找到的資料先放在下面吧~

參考資料:
在 CentOS 5.1 上安裝 VMware Server
在CentOS 5 作業系統安裝VMWare server 1.0.5
CentOS 5.1 網路安裝方法
在 VMware 6.x 虛擬機器內的 CentOS 5.x 安裝 VMware Tools
Linux CentOS 5 On VMWare Server: Installing VMWare Tools
Installing VMware Tools in CentOS 5
安裝CentOS 5.1與VMware Server的心得

在vmware下安裝debian

1. 下載debian的iso檔,請到這裡下載,下載businesscard比較小的檔案,只要150M左右,當要案裝套件再透過網路下載

2. 新增一個新的Virtual Machine


3. 一般我是選擇Typical


4. 選other Linux 2.6.x kernel


5. 設定檔名和位置


6. 選擇網路模式,基本上選NAT比較方便,除非,你要讓外別的機器連到內部的virtual machine才要選bridge,也就是要設定與host是同一個網段IP


7. 設定虛擬硬碟的大小,映像檔的大小是因virtual machine的資料有多少,而不是你現在設定多少,它就是吃多大~所以,一開始設大一點不會有問題的~


8. 接下來就跟在實體機器安裝debian是一樣的

接下來就要教如何成功安裝vmware-tools
0. 安裝完整版的vim-full

[root@host ~]# apt-get install vim-full


1. 在安裝vmware-tools之前要先安裝gcc編譯器

[root@host ~]# apt-get install build-essential


2. 先了解自己kernel的版本

[root@host ~]# apt-cache search `uname -r` | grep header

我的是
linux-headers-2.6.24-etchnhalf.1-686 - Header files for Linux 2.6.24 on PPro/Celeron/PII/PIII/P4
linux-headers-2.6.24-etchnhalf.1-686-bigmem - Header files for Linux 2.6.24 on PPro/Celeron/PII/PIII/P4
然後,我選linux-headers-2.6.24-etchnhalf.1-686 - Header files for Linux 2.6.24 on PPro/Celeron/PII/PIII/P4

3. 安裝目前版本kernel的header file

[root@host ~]# apt-get install linux-headers-2.6.24-etchnhalf.1-686


4. 到vmware的主畫面的工具列上VM->Install Vmware Tool

5. 把vmware-tool.tar.gz複製到目前的位置

[root@host ~]# cp /media/cdrom0/VMwareTools-6.0.2-59824.tar.gz .


6. 解壓縮vmware-tools.tar.gz

[root@host ~]# tar -zxvf VMwareTools-6.0.2-59824.tar.gz


7. 執行vmware-tools.pl

[root@host ~]# cd vmware-tools-distrib
[root@host ~]# perl vmware-install.pl

然後就一直按確定就好~

以下是要教如何幫vmware的映像檔瘦身
1. 選擇你的虛擬機器選項下的〞Virtual Machine Settings〞,在跳出視窗的〞Hardware〞,選擇要處理的硬碟(Hard Disk),再點右邊的〞Defragment〞進行碎片整理
2. 碎片整理完成後啟動作業系統
3. 把一般使用者加入sudo的成員

[root@host ~]# visudo


root    ALL=(ALL) ALL
下面加以下這一行
ren    ALL=(ALL) ALL
其中ren是我的普通使用者名稱

4. 在debian內不能用root執行vmware-toolbox,要透過一般使用者透過sudo執行vmware-toolbox,所以,我才會在上一個步驟把一般使用都ren加入sudo權限

[root@host ~]# sudo vmware-toolbox

sudo要輸入的密碼是ren,也就是一般使用者的密碼

4. 選點「shrink」
5. 選擇要處理的硬碟,然後就選是,讓它開始處理,中間跳出視窗也選確定,直到它說完成,就可以關閉虛擬的OS


參考資料:
Linux作業系統文本模式下安裝VMware虛擬機
VMware 虛擬安裝Fedora Core 4.0 手冊
在vmware下面安裝debian的心得
使用 VMware虛擬機器安裝 Debian GNU/Linux 4.0

2008年10月8日 星期三

如何透過E-mail訂閱Blog

最近高中同學在想說如何建立一個共同的管道來提供大家交流的平台~

之前我們有在不良牛有建立一個班版,
一開始還蠻多人的,但是到了最後,大家都開始忙了,
所以,很少文章,到了最後,
常上來的人上來很多次,發現沒有文章之後,
就越來越少人上來~
有在發表文章的人上來之後,發表文章,確發現沒有人跟他有回應,
然後,大家都不再上去不良牛了~

看到七號大大(不是海角七號裡面的大大!!)的用E-mail訂閱Blog,
或許可以解決我們目前的問題~

但是,因為,七號大大太忙了~
所以,就找了網路上的一些教學來試試看囉~

「教學開始」
以「無名小站」為例,因為,我是先測試blogger,沒有存圖片,然後,在測試「無名」才有存圖片啦:
一、先燒一個永久的RSS網址:
首先,請先連到FeedBurner的網站
1.輸入你Blog的RSS網址:

2.系統會把你的RSS列出以後的永久RSS網址,並且要你確認(可以修改):


3. 然後系統通知你申請到的永久RSS網址


4. 選擇以下兩個選項

當你按下Next,你已經申請好了永久的RSS了,現在要教你如何在版面建立一個訂閱的Widget

以下資料完全來至網友的blog

讓你的訪客用Email訂閱部落格文章設定透過email訂閱部落格文章,簡單的來說,就是類似以前的「電子報」的功能。有些朋友可能沒時間真的連上部落格,或者已經很習慣收email來獲得資訊,就可以透過這樣的方式。
方法一
步驟1:登入Feedburner之後,進入自己的RSS feed的頁面,會看到上面有一排,請選擇ublicize這一頁。


進入之後會看到左邊有一整排選擇。找到 Email Subscription。 下面還有個 Feed Account,因為也很簡單,待會一起說。


步驟2.啟動Email訂閱服務



啟動之後就會出現這個語法框,全選後複製。



步驟3.
修改成你想呈現的文字
如果你想直接用Feedburner預設的英文字,顯示在部落格上,這個步驟可以省略。但如果你想讓訪客更親近你的部落格,或許你會想修改成你想要的中文文字。那麼,請將複製後的文字,貼在純文字的記事本上。找到下圖中黃色標記的地方,搭配另外一張圖示,就可以清楚知道你要改哪裡,以及你改出來會在頁面上如何呈現?





步驟5.
貼在自己的部落格邊欄上
這部分我沒有截圖。原因是每位朋友使用的平台不一樣,此部分貼語法的方法,就跟各位貼部落格寵物或其他邊欄語法一樣,新增欄位、貼上即可。
請注意,根據艾瑪實驗結果,這個方法
無名小站是沒辦法使用的,就算是金卡以上的會員也不行。Pixnet 是可以的。其他BSP平台請大家嘗試看看囉!

方法二
然而也不是完全沒得用,無名小站的使用者還可以用第二種方式,在邊欄上插入另一種語法。這種語法就是很單純的 html,就算你是一般會員也可以使用。使用其他BSP或部落格軟體的朋友當然也可以選擇這種方式。


這種方式顯示出來的樣子是像這樣


事實上,在Email訂閱的服務項目裡,還有其他幾個細項要設定。不過為了避免文章落落長,還是先這樣打住的好。那些細項就算先不設定,還是可以運作的。

閱人數小貼紙
步驟1.
回到剛剛 Publicize 的服務總攬頁,點 FeedCount進入
步驟 2.選擇貼紙形式與顏色,按下最下面的 Activate「啟動」


步驟3.
複製語法,貼在部落格邊欄上


如何讓網友用Email訂閱你的部落格?
教學:申請FeedBurner的E-mail訂閱RSS功能
[網路] Feedburner的email訂閱服務

2008年10月7日 星期二

文件

網路上有一堆好的文件或是網站,若都記錄在左邊怕會很亂,所以,還是開一篇文章來記錄吧~

嵌入式文件
HOWTO:Linux PCMCIA
本文件主要描述如何在 Linux 下安裝及使用 PCMCIA 卡服務程式並回答大家常問到的問題

Clonezilla Live - 免安裝的單機版還原系統
如何備份Linux、Windows的免費軟體

2008年10月6日 星期一

802.11 訊框封裝細節


用戶端是source、左邊基地台是傳送端(送資料到無線網路)、右邊基地台是接收端(有無線網路接收資料)、伺服器是destination

802.11的訊框主要分成三種:
1. 資料訊框 (data frame):負責在工作站之間搬運資料
2. 控制訊框 (control frame):通常與資料訊框搭配使用,負責區域的淨空 (area cleaning)、頻道的取得 (channel acquisition)以及載波偵測的維護 (carrier-sensing maintenance),並於收到資料時予以正面的回應 (positive acknowledgment of received data)。它們可用來監督無線網路媒介的存取,提供MAC層次的可靠度。
3. 管理訊框 (management frame):負責監督,主要用來加入或退出無線網路。

任何訊號發送前均會有SIFS (短訊框間隔)

資料訊框有兩種分類方式
1. 依競爭服務 (contention-based service)免競爭服務 (contention-free service)
2. 另一種分類方法為攜帶資料提供管理功能的訊框

Duration (持續時間) :欄位用來記錄網路配置向量 (Network Allocation Vector,簡稱NAV) 的值
1. 免競爭期間所傳遞的任何訊框,必須將Duration欄位設定為32768
2. 目的地為廣播或群播位址的訊框,其持續時間為0,此類訊框接收端不會加以回應
3. 若More Fragment為0,則表示後面無分割資料,則Duration欄位為一個短訊框間隔及片段回應所需的時間
4. 若Frame Control欄位的More Fragment為1,則Duration為兩個回應加3個短訊框間隔及下一個訊框片段所需要的時間

定址與DS位元
工作站會回應來自同一個基本服務組合 (Basic Service Set,BSS )的廣播或群播訊息;至於來自其它不同BSS者,則加以忽略。

BSSID
每一個BSS都會被賦予一個BSSID。在Infrastructure BSS中,BSSID就是建立該BSS之基地台無線介面的MAC位址。而IBSS則必須建立BSSID (隨機產生),方能產生網路。
有一個BSSID會被保留不用,就是所有位元均為1的BSSID,又稱為廣播型BSSID,因其不會被MAC中任何BSSID filter所過濾。probe訊框要能夠偵測現存的網路,因此不能被BSSID filter過濾。

資料訊框的類型
1. Data
2. Null:行動式工作站會利用Null訊框來通知基地台省電狀態的改變。當工作站進入休眠狀態,基地台必須開始為之暫存訊框。另外,基地台不可能進入省電模式,因此不會傳送Null訊框。

控制訊框
RTS (要求傳送)
媒介存取權祇能保留給單點傳播 (unicast) 訊框使用,而廣播 (broadcast) 與群播 (multicast)訊框祇須傳送便是。

CTS (開始傳送)
CTS訊框有兩種目的,起初,CTS訊框僅用於回應RTS訊框,後來CTS訊框被802.11g防護機制用來避免干擾較舊的工作站。

ACK (回應)
ACK訊框就是MAC以及任何資料傳輸(包括一般傳輸、RTS/CTS交換之前的訊框、訊框片段)所需要的正面回應 (positive acknowledgment)

PS-Poll (省電模式-輸詢)
當任一部行動式工作站從省電模式中甦醒,便會傳送一個PS-Poll訊框給基地台,以取得任何暫存訊框。
所有收到PS-Poll訊框的工作站,都會以訊框間隔加上傳送ACK訊號所需要的時間來更新NAV。

管理訊框

訊框的組成十分彈性分為兩種欄位
1. 固定式欄位
2. 資訊元素 (是指非固定式的欄位)

固定式欄位的有:
Beacon interval:每隔一段時間就會發出Beacon(信標)訊號,用以宣布802.11網路的存在。Beacon訊框中除了包含BSS參數的資訊,也包含基地台暫存訊框的資訊,因此行動式工作站必須仔細聆聽Beacon訊號。

Capability information
傳送Beacon訊號的時候,它被用來昭告各方,該網路具備何種性能。工作站會使用這些公告資料來判斷自已是否支援該BSS所有功能,未能實作公告的所有功能的工作站就無法加入該BSS。

Current AP Address
這欄位的用途是便於連線 (association) 與重新連線 (re-association)的進行。工作站會藉此傳送上一次所連線之基地台的位址。當工作站打算與不同的基地台建立連線時,此欄位可以用來轉換連線,以及取回所有暫存的訊框。

Listen interval欄位
當工作站處於休眠狀態,基地台必須為之暫存訊框。休眠中的工作站會定期起來聽往來的訊息,而listen interval就是以Beacon interval為單位所算出來的休眠時間。

Association ID
當工作站與基地台連線時,就會被賦予一個連線識別碼,用以協助控制與管理功能。

Time stamp
可用來同步BSS中的工作站,BSS的主計時器會定期傳送目前已作用的微秒數。

Reason Code
當對方不適合加入網路時,工作站會送出Disassociation (解除連線)或Deauthentication (解除身份認證) 訊框作為回應。

Status Code
為0表示某項作業成功,非0表示失敗。

「管理訊框」的資料元素
資訊元素(information element)是管理訊框的組成元件,其長度不定。
Service Set Identity (SSID)
共同組成延伸式服務區域 (extended service area) 所有基本服務區域 (basic service area) 都會使用相同的SSID。

broadcast SSID祇會於 Probe Request訊框,工作站可以藉此找出該區域中所有的802.11網路

Supported Rates
當行動式工作站試圖加入網路,會先檢視該網路所使用的資料速率。有些速率是強制性的,每部工作站都必須支緩,有些則是選擇性的。

Traffic Indication Map (TIM) 資訊元素
基地台會為處於休眠的工作站暫存訊框。每一段時間基地台會嘗試傳送這一些暫存訊框給休眠中的工作站。TIM的內容是virtual bitmap,這是由2008個位元所組成的邏輯結構。每一個位元分別映到一個連線識別碼 (Association ID) 當某個識別碼有資料暫存時,相應的位元就會設為1,否則為0

Request 資訊元素
在Probe Request訊框中,Request資訊元素用來向網路查詢特定的資訊元素。

IBSS DFS 資訊元素
在中控型 (Infrastructure) 網路裡,是由基地台負責動態選項,至於獨立型 (Independent) 網路,則必須指定由誰進行動態選項 (dynamic frequency selection,簡稱DFS) 演算法。

管理訊框
Beacon (信標) 訊框
Beacon訊框是相當重要的維護機制,主要用來宣告某個網路的存在。定期傳送的信標,可讓行動式工作站得知該網路的存在。存中控型網路裡,基地台必須負責傳送Beacon
Probe Request訊框
Probe Request包含兩個欄位:SSID以及Supported Rate。收到Probe Request訊框的工作站會據此判斷對方能否加入網路。

Probe Response訊框
如果Probe Request訊框所探查的網路與之相容,則該網路會以Probe Request訊框回應。送出最後一個Beacon訊框的工作站,必須負責回應所收到的探查訊息。存中控型網路裡負責回應是基地台,存IBSS當中,工作站會彼此輪流傳送Beacon訊息。

IBSS的資料待傳指示通知訊息 (ATIM) 訊框
IBSS中沒有基地台,因此無法仰賴基地台暫存訊框。IBSS中的工作站如果處於休眠狀態的接收者暫存訊框,就會存遞送期間送出一個ATIM訊框,通知對方有訊息待傳。

Disassociation與Deauthentication訊框
Disassociation訊框來終結一段連線關係,而Deauthentication (解除認證) 訊框則用來終結一段認證關係。

Association Request
一旦行動式工作站找到相容網路並且通過身份認證,便會發送Association Request (連線要求) ,試圖加入網路。在接授連線前基地台會驗証Capability Information、SSID及 (Extended) Supported Rated等欄位是否合乎網路參數,另外,基地台也會記錄工作站使用的Listen Interval

Reassocation Request
位於相同延伸服務區域,但在不同基本服務區域之間遊走的行動式工作站,若要再次使用傳輸系統必須重新連線。

Association Response與Reassociation Response
當行動式工作站試圖連線基地台時,基地台會回覆一個Association Request (連線回應) 或 Reassociation Response (重新連線回應)

訊框傳送以及連線與身份認證狀態

2008年10月5日 星期日

Software quality factors:軟體品質因子

McCall's factor model
提出十一個軟體品質的因素

分成三大項,每一項分成多個小項
Product operation factors
Correctness
輸出是精確的、輸出的資訊完整的、資訊具有時效性、資訊具有可用性、coding的standard和文件的standard
Reliability
處理錯誤使得系統可以提供服務、定出可以容忍的錯誤率
Efficiency
要完成所有功能所需要硬體、在硬體上可以發揮最大的效能、所需的硬體的花費
Integrity
系統的安全性、不能讓user拿到不該拿的資料、確定使用者有哪一些權利(write、read...)
Usability
當訓練新的使用者時,所需要花費的時間

Product revision factors
Maintainability
由user與工程師去尋找bug和解決bug的努力
是否有模組架構與撰寫程式標準和撰寫文件
Flexibility
系統最好可以適用在多數類似的使用者身上
Testability
提供一些結果與記錄檔
在開始系統之前,提供一些記錄檔與報告
自動提供錯誤的訊息記錄
Product transition factors
Portability
系統可以在不同的作業環境與硬體上執行
Reusability
設計新的系統可以使用多少舊系統的元件
可以節省資源,較短的時間,並且提供較高的模組品質
Interoperability
建立接口,可以跟讓不同的系統溝通
明確指出輸出的標準結構

2008年10月4日 星期六

What is software quality?

軟體的特性:
1. 複雜性
2. 不可見的

軟體的三種錯誤
1. error:程式的語法錯誤或是與客戶之間的需求的邏輯錯誤。有並不是所有的error都會變成fault,有一些時候這一些誤錯的程式碼並不會影響到到程式的功能性。
2. fault:程式錯誤,但尚未被觸發或是永遠不會達成的條件。換句話說,fault就是沒有被觸發的failure(像是有一些功能使用者完全不會用到)。
3. failure:導致出來的結果錯誤或中斷軟體運作



9種導至軟體出現的錯誤
1. Faulty requirements definition
2. Client-developer communication failures
3. Deliberate deviations from software requirements
4. Logical design errors
5. Coding error
6. Non-compliance with documentation and coding instructions
7. Shortcomings of testing process
8. User interface and procedure errors
9. Documentation errors

工作~

雖然離畢業還有很長的一段路,不過,最好還是早一點了解市場的需求吧~

最近還是有空找一下有台南有什麼工作職缺~
當然是離家近比較好囉~
反正,有空就找找看吧~

(宏達電)宏達國際電子股份有限公司
在台南有分公司,好像不錯喔~
台南市中西區

台灣積體電路製造股份有限公司(台積電)
台南縣善化鎮(台南科技工業區)

奇美精密科技股份有限公司
木柵港東路21號

南茂科技股份有限公司
台南縣新市鄉(南部科學園區)

failed to write cache

通常在安裝ubuntu之後,
更新完套件後,
會出現在更新openoffice時,會出現一堆failed to write cache的錯誤~

原來是有一些檔案不存在,因此我們必需要新增這一些檔案~
建立以下的檔案
patch.sh

#!/bin/bash
#
# 修正 Ubuntu 7.04 fc-cache failed to write cache 錯誤
#

sudo touch /usr/share/fonts
sudo touch /usr/share/fonts/X11
sudo touch /usr/share/fonts/X11/100dpi
sudo touch /usr/share/fonts/X11/75dpi
sudo touch /usr/share/fonts/X11/Type1
sudo touch /usr/share/fonts/X11/encodings
sudo touch /usr/share/fonts/X11/encodings/large
sudo touch /usr/share/fonts/X11/misc
sudo touch /usr/share/fonts/X11/util
sudo touch /usr/share/fonts/truetype
sudo touch /usr/share/fonts/truetype/arphic
sudo touch /usr/share/fonts/truetype/baekmuk
sudo touch /usr/share/fonts/truetype/freefont
sudo touch /usr/share/fonts/truetype/kochi
sudo touch /usr/share/fonts/truetype/openoffice
sudo touch /usr/share/fonts/truetype/thai
sudo touch /usr/share/fonts/truetype/ttf-arabeyes
sudo touch /usr/share/fonts/truetype/ttf-bengali-fonts
sudo touch /usr/share/fonts/truetype/ttf-bitstream-vera
sudo touch /usr/share/fonts/truetype/ttf-dejavu
sudo touch /usr/share/fonts/truetype/ttf-devanagari-fonts
sudo touch /usr/share/fonts/truetype/ttf-gentium
sudo touch /usr/share/fonts/truetype/ttf-gujarati-fonts
sudo touch /usr/share/fonts/truetype/ttf-kannada-fonts
sudo touch /usr/share/fonts/truetype/ttf-lao
sudo touch /usr/share/fonts/truetype/ttf-malayalam-fonts
sudo touch /usr/share/fonts/truetype/ttf-mgopen
sudo touch /usr/share/fonts/truetype/ttf-oriya-fonts
sudo touch /usr/share/fonts/truetype/ttf-punjabi-fonts
sudo touch /usr/share/fonts/truetype/ttf-tamil-fonts
sudo touch /usr/share/fonts/truetype/ttf-telugu-fonts
sudo touch /usr/share/fonts/type1
sudo touch /usr/share/fonts/type1/gsfonts
sudo touch /usr/share/X11/fonts
sudo touch /usr/share/X11/fonts/100dpi
sudo touch /usr/share/X11/fonts/75dpi
sudo touch /usr/share/X11/fonts/Type1
sudo touch /usr/share/X11/fonts/encodings
sudo touch /usr/share/X11/fonts/encodings/large
sudo touch /usr/share/X11/fonts/misc
sudo touch /usr/share/X11/fonts/util
sudo touch /usr/local/share/fonts
sudo touch /var/lib/defoma/fontconfig.d
sudo touch /var/lib/defoma/fontconfig.d/A
sudo touch /var/lib/defoma/fontconfig.d/B
sudo touch /var/lib/defoma/fontconfig.d/C
sudo touch /var/lib/defoma/fontconfig.d/D
sudo touch /var/lib/defoma/fontconfig.d/E
sudo touch /var/lib/defoma/fontconfig.d/F
sudo touch /var/lib/defoma/fontconfig.d/G
sudo touch /var/lib/defoma/fontconfig.d/H
sudo touch /var/lib/defoma/fontconfig.d/J
sudo touch /var/lib/defoma/fontconfig.d/K
sudo touch /var/lib/defoma/fontconfig.d/L
sudo touch /var/lib/defoma/fontconfig.d/M
sudo touch /var/lib/defoma/fontconfig.d/N
sudo touch /var/lib/defoma/fontconfig.d/O
sudo touch /var/lib/defoma/fontconfig.d/P
sudo touch /var/lib/defoma/fontconfig.d/R
sudo touch /var/lib/defoma/fontconfig.d/S
sudo touch /var/lib/defoma/fontconfig.d/T
sudo touch /var/lib/defoma/fontconfig.d/U
sudo touch /var/lib/defoma/fontconfig.d/V
sudo touch /var/lib/defoma/fontconfig.d/a
sudo touch /var/lib/defoma/fontconfig.d/j
sudo touch /var/lib/defoma/fontconfig.d/m
sudo touch /var/lib/defoma/fontconfig.d/u


並且執行以下的指令

[user@host ~]$ chmod +x patch.sh
[user@host ~]$ sudo ./patch.sh
[user@host ~]$ sudo fc-cache -f -v

就可以完成啦,再重新upgrade就可以啦~

還有另一個方法

[user@host ~]$ sudo fc-cache -fv 2>&1 | grep failed | cut -f1 -d":" | xargs -i sudo touch {} && sudo fc-cache -fv

參考資料:阿駕零零壹 © 學習筆記

[Live-MAN] 前置處理指令

對於一個 C 程式 編譯之前,
C 編譯器會先處理 C 程式 中含有 #define、#undef、#if、#ifdef、#ifndef、#endif、#elif、#else 及 #include 敘述,
將之置換成一新 C 程式,
再將之編譯 成一 assembly 程式,
再轉成 machine code(或 object code)。
再經由 linker 變成一執行檔。

C/C++包含一些前置處理的指令
均是以#為開頭的指令
以下均是前置處理的指令
#include
把某個檔案整個放入目前的位置。
例:

#include <stdio.h>

就是把stdio.h整個放到這一個指令的位置

#define
把變數定義成某一個常數

#define MAX 5

在compiler的時候就是把MAX直接由5取代

#undef
解除變數的定義

#undef MAX


#if

#if !define(FILE1)
#define FILE1 "file1.h"
#include FILE1
#endif

以上是避免檔案重複include同一個檔案

#if defined (XXX) || defined (YYY)
...
#endif

當有定義XXX或是有定義YYY時,會把...的部分的程式碼加入編譯

#ifndef

#ifndef MAX

判斷MAX是否有被定義過,若沒有則執行此行以下的指令
#ifdef

#ifdef MAX

判斷MAX是否有被定義過,若有則執行以下的指令
#endif
表示#ifndef或#ifdef或#if的結尾

#else
與if相關的前置處理指令配合使用~
#ifdef MAX
...
#else
...
#endif


#if MAX = 2
...
#elif MAX = 3
...
#else
...
#endif


[2009.12.06 補充]
#error

#pragma
[Live-MAN] #pragma 預處理指令

參考資料:
C前置處理
Live-MAN - #pragma 預處理指令
C# 前置處理器指示詞
前置處理器
前處理指令

2008年10月1日 星期三

802.11 MAC

802.11的規格的關鍵在於MAC。MAC位於各式實體層之上,控制資料的傳輸。它負責核心的訊框封裝作業,以及與有線骨幹網路之間的互動。不同的實體層可能提供不同的傳輸速度,不過實體層之間必須彼此互通。

碰撞(collision)會浪費寶貴的傳輸資源,因此802.11轉而使用碰撞避免(CSMA/CA),而非使用Ethernet所採行的碰撞偵測(CSMA/CD)

802.11採用正面回應(positive acknowledgement)機制。所有傳送出去的frame必須得到回應,只要有任何一個環節失敗,該訊框即視為已經漏失。



隱藏節點的問題:

在無線網路中,隱藏節點所導致的碰撞問題相當難以偵測,因為無線收發器通常只有半雙工(half-duplex);亦即無法同時收送資料。為了防止碰撞產生,802.11允許工作站使用Reguest to Send(要求傳送,RTS)及Clear to Send(開始傳送,CTS)訊號來淨空傳送區域。
RTS訊框CTS訊框資料訊框及最後回應訊框視為不可分割的作業。

一旦收到RTS,接收端會以CTS訊框回應。與RTS訊框一樣,CTS訊框會令附近的工作站保待持沉默,等到RTS/CTS完成交換程序,傳送端可以傳送待傳的訊框,無須擔心來自其它隱藏節點的干擾。



另外,使用者可以透過調整RTS門檻值(threshold)來控制RTS/CTS程序。只要大於此門檻值,就會進行RTS/CTS交換程序。小於此門檻值則會直接傳送訊框。



MAC存取模式與時機:
無線媒介的存取,是由協調功能(coordination function)所控管。
DCF(distributed coordination function):就是透過CSMA/CA判斷傳送前是否淨空。
PCF(point coordination function):只有中控型網路才會使用PCF。
HCF(hybrid coordination function):HCF允許工作站維護多組服務佇列。

載波偵測功能與網路配置向量:
802.11具備兩種載波偵測功能
1. Physical carrier-sensing:實體載波偵測由實體層所提供
2. Virtual carrier-sensing:虛擬載波由網路配置向量(Network Allocation Vector,簡稱NAV)所提供。802.11的訊框通常包含一個duration欄位,用來預訂一段媒介使用時間。NAV本身就是一個timer,當NAV為0表示媒介屬於閒置狀態,若不為0表示為忙碌狀態。

所有收到RTS訊框的工作站均會暫緩存取媒介,直到NAV消逝,然而不見得網路每一個工作站均會收到RTS訊框,因此,接收端會以CTS訊框加以回應,其中,亦包含NAV,不過為時較短。

802.11 MAC內建避免碰撞的功能,所以工作站會延遲媒介的存取,直到媒介再度閒置。當媒體閒置下來,高度優先的資料所等待的時間較短。

DCF允許多部獨立的工作站彼此互動,無須透過中央控管,因此可以運用於IBSS網路或中控型網路。

lifetime:傳送第一個訊框之後,life counter隨即啟動,一旦超過其時間,該訊框會被去掉。

速度較高的實體層會使用較短的時槽。工作站會隨機挑選某個槽,等待該時槽來以便存取媒介。所有slot的機會均相等。而數字越小的越先傳送。

和所有的802.11鍵路層(link layer)一樣,802.11可以傳送不同網路協定(network-layer protocol)和Ethernet不同的是802.11是以802.2的邏輯鍵路控制(logical-link control,簡稱LLC)封裝來攜帶上層協定。

競爭式資料服務:
802.11定義了兩組截然不同的基本交換程序。
DCF:用於競爭式服務(contention-based service)
PCF:用於免競爭服務(contention-free service)

群播(multi-cast)廣播(broadcast)無法加以分割,也無須得到回應。整個基本交換過程祇牽涉到一個訊框,根據競爭式存取控制(contention-based access control)規則加以傳遞。傳送結束後,所有工作站必須等待一段DIFS時間,然後,在競爭期間(contention window)倒數隨機產生的延遲時間。因為只使用到一個訊框,所以NAV為0

單點傳播(unicast)必須得到回應以確保可靠性。

單一訊框(最後一個片段)及其正面回應:
此訊框會利用NAV為本身、回應及SIFS預訂媒介使用權。設定較長的NAV是為了替整個交換程序鎖住虛擬載波,以保証接收端可以回應。因此,交換程序是以ACK做為結束,ACK中的NAV被設為0

RTS/CTS
為了保証媒介使用權及資料傳輸不被中斷,工作站可以RTS/CTS的交換方式。RTS訊框並未攜帶任何資料。RTS中的NAV可讓CTS完成作業,而CTS則可用來為資料訊框保留媒介使用權。

省電程序:
在RF系統中,放大器是最秏電的元件,由它負責將所送出的訊號放大,以及將所有的訊號放大至可以處理的準位。802.11工作站可以關閉無線電波收發器,並且定期進入休眠狀態,以維持最長的電池使用時間,在這一段時間,基地台會被每部處於休眠狀態的工作站暫存訊框。由省電狀態甦醒的工作站可以使用PS-Poll訊框取得這些暫存訊框。
1. 立即回應:基地台可以對PS-Poll(省電模式-輪詢)訊框立即做出回應。經過一段SIFS(短訊框間隔)時間,基地台即可傳送訊框。PS-Poll訊框的Duration/ID欄位中包含Association ID(連線識別碼),因此基地台可以判斷有哪一些訊框是為了該工作站產生的。
2. 延遲回應:基地台可以先回覆一個簡單回應,但並未立即採取實際的發送行動。使用延遲回應的優點之一,在於基地台方面的軟體較易實作,因為回應訊息可以透過晶片組韌體立即傳送,至於資料則可以予以暫存,然後依正常程序傳送。

多種速率支援:
能夠以不同速度作業的網路技術必須具備一種機制,可以協調出一種收發彼此均可以接受的資料率。

工作站通則:
1. 每部工作站均保有一份作業速度清單,其中記錄工作站與所連線BSS均支援的所有速率。
2. 每一個BSS必須負責維護一組(基本速率),亦即打算加入此BSS的工作站所必需支援的速率清單。任何傳送至群組接收位址的訊框必須以基本速率傳送,確保所有的工作站均可以正確解讀
3. 用來啟始訊框的控制訊框,如RTS與CTS的工作站,能夠以相同速率作業。

選速與降速
1. 訊號品質可以直接就訊噪比(signal-to-noise ratio)加以量測或間接觀察有多少訊框需要重傳。
2. 當訊號品質(signal quality)變差,晶片就會降速因應。

訊框的處理與橋接
1. 無線媒介至有線媒介(802.11至Ethernet)
2. 有線媒介至無線媒介(Ethernet至802.11)