2018-01-30

[觀念] 效能量測要注意三件事

簡單講
效能量測要注意三件事
1.  準確度。精確度(每一次測量數據各自都很相近)、真實度(每一次測量數據都很接近平均數據)
準確度(如果精準度與真實度都有達到條件)
2.  量測時間長短。都是在算週期性變化,主要被影響會有兩件事:
a). random    (射箭時候有風吹變化,不可控制的變因;老爺鐘擺在空氣中壓力與灰塵)
b). systematic (弓箭手姿勢,可控制的變因;時鐘所插的交流電: 50Hz or 60Hz)
3. 解析度。量測時間單位大小,就跟標靶第一圈與第二圈的相對距離意思一樣

2018-01-27

[書評] SCRUM:用一半的時間做兩倍的事

SCRUM:用一半的時間做兩倍的事

http://www.books.com.tw/products/0010673295

目前簡單寫下:

產品負責人:
-> 把客戶需求轉為生產清單,把生產結果轉為客戶價值。

Scrum大師: 
-> 安排Scrum流程,糾正Scrum錯誤,排除Scrum一切萬難。

書中有多個貼近生活的舉例,如果此書當作是一個非軟體相關工作者的Scrum入門磚,個人覺得非常適合,看完之後再進一步去看比較實務的Scrum之書籍。

2018-01-24

[筆記] Socket programing I/O Model 類比介紹

### Blocking I/O Model:

User application requests Kernel for UDP datagram by using recvfrom.

The UDP datagram to user application just has two status: ready or not ready.

PS. system call這邊是採用recvfrom



1. System call

小明(User application)拿著他的盤子(Uesr application buffer),

請求(system call) 煎檯的廚師(Kernel) 給他牛肉(datagram)。



2. Application is blocking

由於餐廳規定小明跟廚師要牛肉必須要在煎檯前面等不能走開 (the file descriptor is blocking),

因此小明(User application)只能等待廚師回應(return status),不能走開(blocking)



3. Wait for data

而廚師(Kernel)的煎檯(Kernel buffer)尚未放置牛肉(no datagram ready),

因此需要等待上游廠商牛肉送過來(wait for data)



4. Copy datagram

當上游廠商牛肉到達(data arrival)至廚師(Kernel)的煎檯(Kernel buffer),

因此煎檯(Kernel buffer)上的牛肉已經準備好了(datagram ready)



5. Copy data from kernel to user

過一會廚師(Kernel)再把牛肉(datagram)放置(copy datagram)給小明的盤子(Uesr application buffer)。



6. Copy complete

放置完成(copy complete)之後,廚師(Kernel)就會跟小明(User application)說OK (return status is OK)

,小明可以不用等了。



7. Process datagram

爾後小明就可以從煎檯離開,開始享用牛肉(Process datagram)





###  Non-Blocking  I/O Model

1. System call

小明(User application)拿著他的盤子(Uesr application buffer),

請求(system call) 煎檯的廚師(Kernel) 給他牛肉(datagram)。



2. Application is non-blocking

由於餐廳規定小明可以不用在煎台等(the file descriptor is non-blocking),

因此小明(User application) 可以先離開煎檯,隔一段時間再回來,可不斷詢問(polling)可以問廚師說牛排(datagram ready)好了沒?

這時候會有兩種case:

a. 廚師(Kernel)的煎檯(Kernel buffer)尚未放置牛肉(no datagram ready),
廚師回應(return status) 還沒,小明可以走開,晚點再詢問。

b. 廚師(Kernel)的煎檯(Kernel buffer)已放置牛肉(datagram ready),
廚師回應(return status) 好了,廚師(Kernel)再把牛肉(datagram)放置(copy datagram)給小明的盤子(Uesr application buffer),
小明可以走開。


## 同步跟非同步
這兩者差別不在於小明詢問廚師牛排好了沒,也就是不管前面是否會被阻塞(blocking)的動作。

而是以下這個動作:

廚師(Kernel)再把牛肉(datagram)放置(copy datagram)給小明的盤子(Uesr application buffer),

- 同步的話就是,廚師(Kernel)把小明(User application)叫住(blocking),還是要把牛肉(datagram)放置(copy datagram)給小明的盤子(Uesr application buffer),
小明才可以走開。

- 非同步,也就是異步,廚師可以偷偷在小明不知情的情況下把牛肉放置到小明的盤子上,然後才告訴小明說你的牛肉好了,
小明可以直接享用,在這過程中小明完全不會被廚師攔下來。

也就是說小明可能在拿著盤子在走路,廚師像忍者一樣,不急不徐地偷偷把肉放在小明盤子,放完之後跟小明講你牛肉好了。

# 結論
阻塞跟不阻塞,談的是user application 請求 kernel 的資料方式,要嘛問完就等著(blocking);要嘛問完就離開(non-blocking)。
同步跟非同步,談的是kernel 要用什麼方式把資料放在user application的盤子上。要嘛廚師把你抓住慢慢放完肉在你盤子上才讓你走(同步),要嘛在你邊走路情況下,直接把肉偷偷放在你盤子上(非同步)


2018-01-23

[分享] 下班自修比公司work重要


有帶電腦,不過我只有偶爾覺得重要時候才會碰公司的work,其他時候我就正常上班時候再弄,下班自修比公司work重要 


因為我自己印證,下班自修得到的知識,可以改善公司的work,因為公司不會教你新東西。


因此我就盡可能在非上班時間不要碰公司的work,除非剛好我在自修的內容與公司work重疊,互相驗證