2011年11月28日 星期一

Yahoo 系統工程師的技能需求與具體描述

1. Linux/FreeBSD
2. Apache
3. MySQL
4. PHP
5. Nagios
7. Perl
8. Shell Script

A. Function as a technical generalist responsible for the overall health and performance of our many web applications and cloud services

B. Develop tools by scripts (shell scripts, Perl, python, …etc) to automate the deployment, administration, and monitoring of a large-scale Linux and FreeBSD environments on different global locations.

C. Gain deep application-level knowledge of the systems as well as contributing to their overall design

D. Work with development teams to harden, enhance, document, establish process and generally improve the operability of our systems

E. Assist in the configuration/build-out of new deployments to facilitate our constant growth

F. Participate in a global support of on-call pager rotation

Common Tech Skills for Search Cloud Service Engineering

Boot Process and Configs


    Remote on/off Machines / Remote Boot
    MBR, GRUB, Lilo.
    Kernel device probing, root mount
    init process, run levels
    configs of apache, dns, network, …etc


    a hash and/or hashing function works.
    Sorting of arrays and hashes.
    Recursive functions
    Plus: Advanced Perl

Shell Scripting


    Bash / Commands
    Write an init scrip..
    Awk, sed, regular expression.
    Pipe, redirect
    If, loop, case, …

Monitoring, Alerting and Nagios


    Plus: Cacti, ganglia, cricket, etc.
    Plus: Gomez or Keynote or other such tools



    df show partition is full, you delete a file, df still shows full. What's going on?
    Web performance is slow. What do you do? (Network, system, app, DB, etc. troubleshooting.)
    Disk is "slow" what might you look at? iostat, dmesg to see if the disk is dying, etc.
    Network is slow. What do you look at? duplex, saturation, etc.

Unix Internals


    Paging, swapping. How to tell what's occurring (vmstat, etc.) Ill-effects of paging.
    How typical FFS based filesystems work. Cylinder groups, inodes, data blocks, indirect blocks, super blocks.
    log/extents/journal based filesystems
    inodes and dirents.
    symlinks and hardlinks.
    /proc/ filesystem.
    Block devices vs. raw devices.
    FIFOs, regular files, …etc.
    sysctl and other tunables



    how DNS works. Recursive vs. iterative. Zones. Record types.
    Socket, bind, …etc
    nsswitch.conf, /etc/hosts, resolv.conf.
    network performance tuning.
    SACK and interface aggregation.
    Deeper network topics like 802.1Q, core/aggregation|distribution/access switch infrastructure, BGP, OSPF, etc.
    Discussion of load balancing techniques. like DSR, SNAT, etc.
    TCP packets, IP packets, ethernet frames
    ARP and RARP, switches , routers.

Hardware, RAID, misc.


    RAID levels.
    Difference between 32-bit and 64-bit architectures.
    Software RAID vs. Hardware RAID.
    SAN vs. NAS.

Infrastructure and Architecture


    A typical three tier web site architecture
    Concerns to design an architecture
    GSLB (akadns, brooklyn), failover, BCP.
    Capacity planning

2011年11月27日 星期日

在 Linux 上調整 glassfish 的 porcess pool number 時遇到的問題

在 Linux 上每個 porcess 可以開啟的檔案數量預設為 1024,
glassfish 在預設 porcess pool number 為 5 時執行就已經開啟了 500 多的檔案,
所以要是將 porcess pool number 調整為 500 瞬間就會超過 1024,然後出現下面的 Error Message。

0|SEVERE|glassfish3.0.1|grizzly|_ThreadID=18;_ThreadName=Thread-14;|doSelect IOException
java.io.IOException: 開啟太多檔案
       at sun.nio.ch.IOUtil.initPipe(Native Method)
       at sun.nio.ch.EPollSelectorImpl.<init>(EPollSelectorImpl.java:49)
       at sun.nio.ch.EPollSelectorProvider.openSelector(EPollSelectorProvider.java:18)
       at java.nio.channels.Selector.open(Selector.java:209)
       at com.sun.grizzly.util.Utils.openSelector(Utils.java:100)
       at com.sun.grizzly.TCPSelectorHandler.initSelector(TCPSelectorHandler.java:399)
       at com.sun.grizzly.TCPSelectorHandler.preSelect(TCPSelectorHandler.java:379)
       at com.sun.grizzly.SelectorHandlerRunner.doSelect(SelectorHandlerRunner.java:183)
       at com.sun.grizzly.SelectorHandlerRunner.run(SelectorHandlerRunner.java:130)
       at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
       at java.lang.Thread.run(Thread.java:662)


解法是要先調整每個 porcess 可以開啟的檔案數上限,
先編輯 /etc/security/limits.conf

* soft nofile 65536 



ulimit -Sn 65536


2011年11月16日 星期三



2011年10月21日 星期五




竹北:俏媽咪、澎澎 POMPOM


編輯 FreeRADIUS 的 users 設定檔

users 是 FreeRADIUS

Copy CMD Output Directly To The Clipboard

  • dir – output in the command prompt
  • dir > test.txt – output copied to the file test.txt in the same directory.
  • dir | clip – output copied to the clipboard
Reference: http://www.ghacks.net/2011/10/20/copy-cmd-output-directly-to-the-clipboard/

2011年10月15日 星期六

Environment Portrait

1. 人帶景 (以人為主題)
2. 景帶人 (以景為主題)

2011年9月19日 星期一

籃球教室 : 籃球呼吸法

從事任何運動第一個要學習的就是呼吸,一個好的呼吸法,不但可增強體力,在疲勞時能夠使用最短的時間 恢復正常。很多人呼吸不得法,將氣吸至胸腔中,反而增加體力的消耗,心臟也會因肺部充氣的壓迫而發生短暫的痲痺、昏倒等。所以想要打好球,就必須時常練習 呼吸。呼吸的次數與速度快慢的調配是有很大的關係。因為在球場上跑步的速度變化很快,如果無呼吸次數的配合,則很難能支持中長時間的體力,一個標準球員的 體能必須能夠打滿全場的比賽。





2011年8月4日 星期四

設定 Wireshark 解析無法被預設設定解析出來的封包

有時候我們改變 RFC 定義預設的 port number,Wireshark 就無法解析用預設的設定解析出封包。這時候我們可以在該封包上點滑鼠右鍵,選 Decode as,指定我們想要的 Protocol 解析方式,就可以看到原來 Protocol 應該顯示的欄位。


SNMPv3 engine-id discovery

節錄自 RFC3414

4. Discovery
   The User-based Security Model requires that a discovery process
   obtains sufficient information about other SNMP engines in order to
   communicate with them.  Discovery requires an non-authoritative SNMP
   engine to learn the authoritative SNMP engine’s snmpEngineID value
   before communication may proceed.  This may be accomplished by
   generating a Request message with a securityLevel of noAuthNoPriv, a
   msgUserName of zero-length, a msgAuthoritativeEngineID value of zero
   length, and the varBindList left empty.  The response to this message
   will be a Report message containing the snmpEngineID of the
   authoritative SNMP engine as the value of the
   msgAuthoritativeEngineID field within the msgSecurityParameters field.  It contains a Report PDU with the usmStatsUnknownEngineIDs
   counter in the varBindList.
   If authenticated communication is required, then the discovery
   process should also establish time synchronization with the
   authoritative SNMP engine.  This may be accomplished by sending an
   authenticated Request message with the value of
   msgAuthoritativeEngineID set to the newly learned snmpEngineID and
   with the values of msgAuthoritativeEngineBoots and
   msgAuthoritativeEngineTime set to zero.  For an authenticated Request
   message, a valid userName must be used in the msgUserName field.  The
   response to this authenticated message will be a Report message
   containing the up to date values of the authoritative SNMP engine’s
   snmpEngineBoots and snmpEngineTime as the value of the
   msgAuthoritativeEngineBoots and msgAuthoritativeEngineTime fields
   respectively.  It also contains the usmStatsNotInTimeWindows counter
   in the varBindList of the Report PDU.  The time synchronization then
   happens automatically as part of the procedures in section 3.2 step
   7b.  See also section 2.3.

2011年7月9日 星期六

Google Reader 快捷鍵

j/kitem down/upselects the next/previous item in the list
space/shift-spacepage down/upmoves the page down/up
n/pscan down/upin list view, selects the next item without opening it
oopen/close itemin list view, expands or collapses the selected item
enteropen/close itemin list view, expands or collapses the selected item
stoggle starstars the selected item
shift+stoggle shareshares the selected item
mmark as read/unreadswitches the read state of the selected item
ttag an itemopens the tagging field for the selected item
vview originalopens the original source for this article in a new window
shift+amark all as readmarks all items in the current view as read
1expanded viewdisplays the subscription as expanded items
2list viewdisplays the subscription as a list of headlines
rrefreshrefreshes the unread counts in the navigation
shift+n/pnavigation down/upselects the next/previous subscription or folder in the navigation
shift+xnavigation expand/collapseexpand or collapse a folder selected in the navigation
shift+onavigation open subscriptionopens the item currently selected in the navigation
g+hgo to homegoes to the Google Reader homepage
g+ago to all itemsgoes to the "All items" view
g+sgo to starred itemsgoes to the "Starred items" view
g+tgo to tagallows you to navigate to a tag by entering the tag name
g+ugo to subscriptionallows you to navigate to a subscription by entering the subscription name
utoggle full screen modehides and shows the list of subscriptions
?keyboard shortcuts helpdisplays a quick guide to all of Reader's shortcuts

2011年7月4日 星期一

From 華為 RD


2011年5月4日 星期三


在某個 RD 的簽名檔上看到的


2011年5月3日 星期二


1. 三分法:將拍攝範圍用直線和橫線分為三等分,拍攝主體盡量安置在直線和橫線的交點上 (共有四個焦點),避免畫面過於四平八穩、單調。

2. 拍攝範圍中的水平線務必要保持水平。可用相機的水平儀、LCD螢幕的邊線、或是三分法的輔助線來協助對齊。

3. 妥善分配畫面中各項元素的比例,如拍攝主體、前景、背景,不要喧賓奪主,也不要頭重腳輕。

4. 前景、背景不要雜亂。

5. 人的視線會順著畫面中的線條延伸,坐落在點上 (轉折、交會處),注意點安置的位置 (如利用三分法)。

6. 讓主體填滿畫面。

7. 避免幾何失真 (如利用廣角端近拍,造成畫面被擠壓)。

PS. 持續增加中...

2011年4月30日 星期六


1. 在構圖時若發現被攝物主體不在相機預設的對焦範圍中時,先將被攝物置於對焦範圍中半按快門對被攝物對焦,將相機可視範圍移回原先構圖後,直接按下快門到底拍攝。


2011年4月20日 星期三

Stateful DHCPv6、Stateless DHCPv6、and Stateless Autoconfiguration

Router Advertisement Option 當中的 M 欄位與 O 欄位。

1. M 欄位 (Managed Address Configuration):
這個 bit 如果是 1,代表要請電腦另外透過 DHCPv6 要 IPv6 Prefix

2. O 欄位 (Other Configuration ):
這個 bit 如果是 1,代表請電腦另外透過 要 DNS 等等資訊。

我們常聽到的 stateful DHCPv6 與 stateless DHCPv6,就是由 M 欄位與 O 欄位組合不同而來的。

1. M=1, O=0 or 1:所有資訊(包括 Prefix、DNS等等資訊)都請電腦使用 DHCPv6 取得。(Stateful DHCPv6)
2. M=0, O=1:使用 RA 裡面的 Prefix,但是 DNS 等等資訊請電腦使用 DHCPv6 取得。(Stateless DHCPv6)
3. M=0, O=0:電腦將只得到 Prefix,無法取得 DNS 等資訊。(Stateless autoconfiguration)

所謂的 stateful 就是必須要由 server 去動態維護、保留其對應狀態的資訊。
而 stateless 則是不須動態維護的資訊,如 DNS 等資訊,因為這些不會動態改變,都是固定的資訊。
所以當 prefix 由 DHCPv6 來提供的時候,因為 DHCPv6 server 會有對應表(binding table),所以這種就叫 stateful DHCPv6。
而 prefix 是由 router 提供,因為 router 不會留存這個 binding table,所以這種方式就叫做 stateless autoconfiguration or stateless DHCPv6。




2011年4月19日 星期二

相機的曝光曲線圖 (直方圖)

X 軸由左到右依序是由明到暗的色調分級,Y 軸是該色調的像素數量。所以看曝光曲線圖我們可以得到一張照片各個色調的像素分布資訊。

Reference: 如何解讀數位相機的直方圖


視野率:「透過觀景窗所見範圍」與「實際成像範圍」的比值。 若小於 100% 觀景窗所見的範圍會略小於實際成像 (感覺像周圍被裁切掉) 可以參考 reference 的 "如何看待觀景窗的大小"。

放大率: 「透過觀景窗所見範圍」的大小比例。

有關 [視野率] 和 [放大率]

2011年4月17日 星期日

相機 LCD 注意事項

因為相機上的 LCD 受限於機身大小,所以螢幕不大,因此顯示的縮圖就容易讓拍攝者忽略一些細節。另外 LCD 本身的亮度彩度對相片也有美化的效果,透過電腦的大螢幕來顯示後,往往會變成另外一回事。按一次快門得到的畫面沒有第二次的機會,為了避免事後的遺憾。注意以下

1. 將 LCD 的亮度彩度調略低於電腦 LCD。
2. 拍攝前頭幾張照片透過放大縮圖的功能,將縮圖放大來確認細節。
3. 透過拍攝經驗記住相機 LCD 呈現的效果和實際輸出後的差異,透過人工和經驗法則來降低差異。

2011年4月13日 星期三


以 Canon EF-S 18-55mm F3.5-5.6 IS 為例:
a. EF-S 表示接環規格
b. 18-55mm 表示焦距
c. F3.5-5.6 表示當焦距 18mm 時最大光圈 F3.5,當焦距 5.6mm 時最大光圈 F5.6
d. IS 代表防手震

另外有些鏡頭僅有  50mm F1.8:
a. 表示這是定焦鏡,無法調整焦距
f. 最大光圈 F1.8


鏡頭的 (最小焦距 *3) 越接近 最長焦距 越好。


1. 拍全身,完全不要切到
2. 拍半身,切大腿
3. 拍半身,切肚臍
4. 永遠都要為臉蛋和髮型留下最好的角度和美感
5. 剛開始拍照先把主體占滿照片,再考慮把其他東西放進來

PS. Liming 不愧是學長!簡單幾句輕鬆掌握要點~

IPv6 Neighbor Discovery (ND) Summary

1. ND 是藉由 ICMPv6 在 hosts 和 routers 間傳送資料

2. 共分為 5 種 type 的 ICMPv6 message:
a. Router Solicitation / Router Advertisement
b. Neighbor Solicitation / Neighbor Advertisement
c. Redirect message

3. 可達到下列功能
a. Neighbor Discovery (ND)
b. Router Discovery (RD)
c. Address Autoconfiguration
d. Address Resolution
e. Neighbor Unreachability Detection (NUD)
f. Duplicate Address Detection (DAD)
g. Redirection

2011年3月23日 星期三

在 IE 瀏覽器上輸入 IPv6 Link Local Address 為 URL 時的注意事項

因為當使用 IPv6 Link local Address 來連線時必須要指定連線使用的 NIC (Network Interface Card )。

假設我要透過第一張 NIC 連線到 "fe80::02E0:0CFF:FE11:2233",
我必須要以 "fe80::02E0:0CFF:FE11:2233%1" 來表示。

但是 IE 在處理 URL 時遇到 % 會出現編碼問題,所以我必須在 % 後加上 25,
也就是 "http://[fe80::02E0:0CFF:FE11:2233%251]" 來表示。

IPv6 URIs in IE7
ASCII Table and Description

2011年3月11日 星期五

編輯 FreeRADIUS 的 users 設定檔

users 設定檔位於 /usr/local/etc/raddb/ 或是 /etc/raddb/,負責記錄 Server 端的帳號,與各種認證方式的 default 設定。

1. 每一行若是以 '#' 開頭將視為註解,FreeRADIUS 處理時將會略過該行的內容。

2. 每一筆 user 的記錄都分為三部分
a. Username
b. Check items
c. Reply items

vlan2 Auth-Type := EAP, Cleartext-Password := "vlan2"
    Service-Type = Framed-User,
    Tunnel-Type = 13,
    Tunnel-Medium-Type = 6,
    Tunnel-Private-Group-ID := "2p"

3. Check items 中的項目必須位於同一行,項目間必須以 ',' 分隔,最後一個項目之後不加 ','。

4. Check items 和 Reply items 間必須換行,每個 Reply items 位於不同行,且每行必須先以 [Tab] 開頭再加 Reply items 的項目。每一行的結尾則以 ',' 分隔,最後一個項目之後不加 ','。

5. 當 Server 收到 RADIUS-Request 後,首先判斷是否來自合法的 client 端 (clients.conf),再來判斷是否在本地端作驗證或是轉發到其他 server (proxy.conf),若是在本地端作驗證就會以 users 中的記錄依序來逐一比對。首先帳號是否存在,有符合的帳號就會進一步比對 Check items 中的項目是否吻合,若是 Check items 中的項目吻合,就會將 Reply items 中的項目以 RADIUS attribute 的方式加在 RADIUS-Response 中。

6. RADIUS-Request 無論夾帶的帳號為何,都會與 DEFAULT 的記錄作比對。

7. 若是 Reply items 的結尾加入 Fall-Through = No 則不會再比對下一筆記錄;Fall-Through =Yes 則會繼續比對下一筆記錄。

8.  Check items 中的 Auth-Type 可以指定以認證方式作為確認的條件。

9. '=' 僅用於 Reply items 中,當 RADIUS-Response 中沒有相同的 attribute 時會新增此 attribute。

10. ':=' 用於 Check items 中,會先比對此 attribute,但是當 RADIUS-Request 中沒有此 attribute 時,則會加入此 attribute。

11. ':=' 用於 Reply items 中,會先比對此 attribute,但是當 RADIUS-Response 中沒有此 attribute 時,則會加入此 attribute。當 RADIUS-Response 已有此 attribute 時,則會以新值取代此 attribute。

12. '==' 僅用於 Check items,比對此 attribute。

Man page of users
RFC attributes
Radius Types

2011年3月3日 星期四


在相機上可以透過調整 EV 值來達到曝光補償的效果。

正補償 (調高 EV 值):加強白皙、潔淨、活潑的感覺,或是強調白色或反光物體。

負補償 (降低 EV 值):加強濃郁、細緻、深沉的感覺,強調黑色或吸光物體。

DC 曝光補償的技術意涵
EV 曝光值 [ Exposure value ]



Full Frame: 安全快門 (sec) = 1/ 焦距 (mm)

APS-C:Canon => 安全快門 (sec) = 1/ ( 焦距 (mm) * 1.6)
                Nikon => Full Frame: 安全快門 (sec) = 1/ ( 焦距 (mm) * 1.5)

4/3:安全快門 (sec) = 1/ ( 焦距 (mm) * 2 )

Reference: 安全快門之二 ~ 防手震級數算法

2011年3月2日 星期三




Full Frame (傳統相機 135 System 的感光元件大小): 焦段 *1
APS-C: 焦段 *1.6 (Canon) or 焦段 *1.5 (Nikon)
4/3 (Four Thirds System): 焦段 *2

PS. 一般 DC 或是類單眼會以等效焦段來表示根據感光元件大小換算過後的實際焦段

甚麼是全片幅(Full Frame)?
Image sensor format

2011年2月8日 星期二

閃光燈的 GN 值

閃光燈的 GN 值為在 ISO100 的條件下,閃光燈全力照射時的指數。

GN = 光圈 * 距離


  1. 光圈越大景深越淺
  2. 焦距越長景深越淺
  3. 對焦距離越近景深越淺