徵才:PIXNET 徵網路系統工程師一名

我現在服務的公司 PIXNET 要徵求一名 System Administrator:

工作內容:

  • 伺服器 (主要為 FreeBSD 與 Debian、Ubuntu 系統) 系統維護,包括套件 (ports 與 apt/deb) 維護
  • 機房與辦公室網路設備 (Cisco/Juniper Router、Switch、VPN) 維護。

工作時間:9:30 ~ 18:30 (一~五),特殊狀況時 (例如晚上處理緊急事件,或是凌晨停機等) 另外補休。
就職日:可馬上就職,或 2012 年二月到職即可。
地點:台北市中山區 (捷運行天宮站旁),機房於台北市內湖區。
需求:熟悉 UNIX-like 系統,Script (Perl, Python 或 shell script 之一) 撰寫。熟 Cisco 網路設備操作者佳。
薪資:約 40k/month,其他技能面議另談。

有意者請聯絡 techjob@pixnet.tw

Google Chrome 全球市佔率超過 Mozilla Firefox,位居第二

根據 statcounter 的統計:

台灣則是在今年七月份就超過了:

於是有人在討論Google Chrome會不會是下一個IE6。配合之前 ppk 的擔憂:Mobile Safari 會不會是行動裝置上的 IE6?

我倒是覺得 Web Developer 的堅持比以上的所有討論都重要的多。畢竟,寫出 IE only 網站的,並不是 Microsoft,而是不夠專業的開發者。

使用 Virtual Box Headless 跑 Virtual Machine

VirtualBox 是 Sun (後來被 Oracle 買下) 開發的一套虛擬化軟體。他的 Host OS 可以是 Windows, Linux, MacOS, FreeBSD。除此之外,VirtualBox 可以在 Terminal 下執行,顯示的畫面由 RDP/VNC 輸出,亦即 Headless 模式。要特別注意的是,RDP 輸出僅限於專屬授權版本,OSE (Open Source Edition) 版本是沒有這個功能的。

要使用 VNC 輸出,必須在安裝的時候加入 VNC 支援:

# cd /usr/ports/emulators/virtualbox-ose; make WITH_VNC=yes all install clean

安裝好 VirtualBox 之後,必須再安裝 kernel module:

# cd /usr/ports/emulators/virtualbox-ose-kmod; make install clean

接著把需要的 Kernel Module 載進來:

# kldload vboxdrv; kldload vboxnetadp; kldload vboxnetflt

之前寫在 /boot/loader.conf 會導致開機時 Kernel Panic,但如果開完機手動載入就不會,目前還沒找出原因。

接下來新增一個 Virtual Machine:(以下都可以不需要 root 權限)

% VBoxManage createvm winxp --register

然後設定 VM 的資源需求:

% VBoxManage modifyvm winxp --acpi on --ioapic on --memory 1024 --cpus 2 --nic1 bridged --nictype 82540EM --bridgeadapter1 em1

以上的範例分配了 1024MB (1GB) 的 RAM 與 2 個 Virtual CPU 給 winxp 這個 VM,另外建立了一張虛擬網卡,型號為 Intel 82540EM,橋接到實體的 em1 這張網卡上。

再來建立一個新的 120GB 虛擬硬碟:

% VBoxManage createhd --filename winxp --size 122880

在 VM 裡增加一個 IDE Controller:

% VBoxManage storagectl winxp --name "IDE Controller" --add ide

把硬碟與安裝 ISO 檔連接到 IDE Controller:

% VBoxManage storageattach winxp --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium winxp
% VBoxManage storageattachwinxp --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium winxp.iso

接著就可以開機了:

% VBoxHeadless -s winxp --vnc --vncport 5900 --vncpass password

執行成功後,可以用 VNC 連入看到安裝 Windows XP 的畫面:

關機、重開機可以使用 VBoxManage 來完成:

% VBoxManage controlvm winxp poweroff

Python 的 GIL (Global Interpreter Lock)

前幾個月在做專案的時候,發現用 mod_wsgi + web.py 寫的程式,理論上支援 multi-thread,應該可以完全利用在多核 CPU Server 的優勢;但實際上跑的時候,會有沒辦法把 CPU Resource 吃完的問題。當時因為時間很趕,想到的解法就是多跑幾個 Process:

<VirtualHost *:80> 
   DocumentRoot “/srv/web/webroot" 
   ServerName python.example.com 
   WSGIProcessGroup pythonexample 
   WSGIDaemonProcess pythonexample processes=16 threads=128 maximum-requests=1024 display-name=%{GROUP}
</VirtualHost>

COSCUPlwhsu 聊到這件事,他講到 CPython 的 GIL,回來查了一下果然就是這個原因。剛好 Web 不需要在每個 thread 之間互相傳資料,所以可以直接用多個 Process 解掉這個問題。

雖然 Python 在執行前就把程式碼轉成 byte code了,但因為這個 Lock 是實做在 CPython 的 Bytecode Interpreter 裡面,所以導致了同時只會有一個 thread 執行 Python bytecode,也因此無法利用到多核 CPU 的優勢1

除了多跑幾個 Process 之外,也可以用 ctypes 配合用 C 寫的 library 來解決這個問題,不過以 Web 應用來說,寫 C 的機會不高就是了。

  1. Stackoverflow: Python threading and gil []

FreeBSD 的 EC2 AMI…

剛到公司就被DK長輩提醒,Amazon Web Services可以跑FreeBSD 64 bit 的 AMI 了(us-east 的 ami-c69862af)。一樣是Colin Percival做出來的AMI。

然後他的作法居然是開一台Windows的機器,然後把Kernel換掉 XD
這樣確實可以跑 HVM 沒錯,不過缺點是每小時的費用比較高(目前會計入微軟稅)。

作者也希望AWS能夠早日把HVM開放給非微軟平台,這樣就不用繳微軟稅了。

Flickr 提供 OAuth Core 1.0a 認證方法

Flickr 今天公佈了一個新功能:OAuth Core 1.0a 認證方法。現有的 API 方法不變,只有認證改用 OAuth Core 1.0a 的方法。原本的認證方法將在明年(2012年)移除。

另外, Flickr 也提供了舊API的轉換認證方式,只要用 Flickr 提供的  flickr.auth.oauth.getAccessToken API 就可以把舊的 Flickr  Access Token 轉為 OAuth 的 Access Token,也就是使用者不需要重新授權一次就可以轉換成 OAuth。

Linode 的 Load Balancer…

長輩那邊看到了Linode 也推出 Load balancer 服務… (剛開始 beta),於是就來測試一下:

這是增加一個 Port 的畫面,可以選 TCP 或 HTTP Protocol(沒有HTTPS),另外可以看Cookie或者查表來把同一個人導到同一台backend上。

Healthy Check 的部份有TCP、HTTP Valid Status 與 HTTP Body Regex,所以可以檢查回傳的頁面是不是正確(例如有沒有</html>)。但是不能指定 Host: 這個 Header。

設定完大概就長這樣:

然後接下來是加入 Member Node:

不能填非 192.168.*.* 或是 IPv6 Link Local Address 以外的值:

討論區的公告上面寫說支援IPv6,不過實際測試發現填不進去:

實際使用上是可以支援 IPv6 的,也有實做 X-Forwarded-For

實際使用上的問題有兩個:

  1. 跟之前的 AWS 的 ELB 一樣,有 Load Balancer IP 的信任問題。沒辦法確認這個 X-Forwarded-For 是不是被假造的。
  2. Node 的 Healthy Check UP/Down Status 更新速度很慢。我今天17:00加了新的Node進去,到現在(21:30)的 Status 還是 Unknown…

security/pam_google_authenticator: Two Factor Authentication PAM Module

security/pam_google_authenticator 是 Google 推出的 Open Source PAM Module,提供 RFC 4226 (HOTP: An HMAC-Based One-Time Password Algorithm) 的 OTP 功能。

只要使用 Android 手機(未來會支援iOS裝置),安裝 Google  提供的 App,開啟並設定 pam_google_authenticator,之後的 ssh 連線就可以使用 OTP 登入。

Linux 上的安裝方法可以看 @gasol 寫的替主機上第二道鎖 – Google Authenticator,這裡介紹的是 FreeBSD 上的安裝方法:

  1. 先安裝 security/pam_google_authenticator
  2. 執行 google-authenticator ,設定 secret key。螢幕上會出現一個 QR Code,用手機 App 掃描之後就會把 secret key 存到手機內。接著按照螢幕上指示把 secret key 存到 ~/.google_authenticator 裡。記得要 chmod 600。
  3. 設定 /etc/pam.d/sshd,在 auth pam_unix 下面增加一行:

auth required /usr/local/lib/pam_google_authenticator.so

這樣就生效了。要注意的是,這不會影響使用 Public/Private Key Pair 登入的使用者。另外,PAM設定完成之後,如果沒有設定 secret key 的使用者,就不能用帳號密碼登入了。

測試前記得請留下一個連線的 terminal,避免設錯導致人得跑到 console 前去處理。

Plurk 的 OAuth API…

聲明:我目前是 PIXNET 的員工。PIXNET 提供 OAuth API 服務給 PIXNET 本體與 Murmur.tw

Plurk 最近推出了新的 OAuth Core 1.0a API,終於是不用存帳號密碼了……今天晚上試著寫了一個機器人:台灣漫畫出版情報

現在的主要語言都有提供 OAuth Core 1.0a 的 Library,不過因為某些因素(其實就是懶……),我用的是 ronnywang 寫的 phppixnetapi 來改。其實也只要改掉前面定義的三個 URL,然後各個 function 照著 Plurk 提供的API寫就可以了。

寫完,測試發噗不會動……不過取得 Timeline 倒是成功了。檢查了老半天看不出什麼原因,最後把 POST 改成 GET 就可以了……OTL 真是令人絕望。

另外測試發噗的時候一如往常的遇到 Plurk 的防洪機制XD

「奇幻。不思議」日本3D幻視藝術畫展

IMG_5205IMG_5206IMG_5207IMG_5208IMG_5210IMG_5212
IMG_5214IMG_5216IMG_5217IMG_5218IMG_5219IMG_5221
IMG_5222IMG_5224IMG_5225IMG_5227IMG_5228IMG_5231
IMG_5233IMG_5234IMG_5238IMG_5240

上週去看了這個展覽,人如傳說中的有夠多……而且一個人去真的是悲劇。

推薦還是兩三個人一起去吧。