Thursday, January 30, 2014

如何晉升為軟體設計魔人

農曆年關將近,在「封關」之前,今天Teddy要公布一個「公開的秘密」(疑,公開的秘密還需要公布嗎?!),那就是:要如何才能夠修練成為「軟體設計魔人」,或是好聽一點的「軟體設計大師」?
搞笑談軟工的忠實觀眾可能已經猜出答案,最簡單的方法當然是來上Teddy所開的每一門課,不過如果只有這個方法對於「時間很多,口袋很淺」的鄉民可能就不適用,所以Teddy要提供另外一個「很花時間,但是相對來講比較省錢」的方法,那就是「讀Alexander的書」
***
Teddy在部落格上已經好幾次介紹Alexander的書,例如:
  • Notes on the Synthesis of Form
  • The Timeless Way of Building
  • A Pattern Language
  • The Oregon Experiment
為什麼要讀Alexander的書?很簡單,因為很多「大師」在學習的過程中,也都讀了Alexander的書。例如GoF的Design Patterns,這本書算是設計模式領域的「聖經」,光是把GoF的書讀懂,就已經很厲害了。但是,等一下,GoF的靈感是來自於Alexander的建築模式。如果要真的成為「大師中的大師」、「魔人中的魔人」,光是看完GoF的書是不夠的,還必須要追本朔源,了解Alexander的想法,知道為什麼這些想法會影響GoF。
除了GoF,在很多「大師級」的作品裡面,也都提到了Alexander的書。隨便舉幾個例子:
  • Extreme Programming Explained, 2nd, by Kent Beck(Kent Beck的影響力不用多說了,光是XP與TDD就打掛一堆人了 XD)
  • The Design of Design, by Frederick P. Brooks, Jr.(人月神話作者)
  • About Face 3 : The Essentials of Interaction Design by Alan Cooper(很多UI/UX設計師都讀過About Face 3這本書,但卻很少人讀過Alexander的書)
  • The Psychology of Everyday Things, by Donald A. Norman(這本書更不用說了,看過的人可能比About Face 3更多)

***
Donald A. Norman在他的書中說:
…The other architects whose work has influenced me are not builders; they are thinkers and designers, in particular, Alexander and this colleagues at the University of California, Berkeley.
Alexander的書雖然是在談建築的問題,但其實他是一位思想家與設計家。讀了他的書,可以應於在各種不同的「設計領域」,光是軟體設計與UI/UX設計,就有不少人受到Alexander的影響。
讀了大師(Kent Beck、Frederick P. Brooks, Jr.、Alan Cooper、Donald A. Norman)的書,略有小成之後有資格成為大師門派的信徒。讀了大師讀的書,略有小成之後有可能可以自立門派,或是有能力將大師的想法發揚光大。這就是程度上的差別。
***
友藏內心獨白:不就是讀書,有那麼嚴重嗎


Reference:
http://teddy-chen-tw.blogspot.ca/2014/01/blog-post_29.html

Tuesday, January 28, 2014

check monitor color

Simple Affordable Solution for color calibrating a single display…

Spyder4express™ features a patented, full-spectrum 7-color sensor that can accurately characterize a variety of wide gamut and normal displays. Spyder4express software lets you use the same sensor to calibrate your computer, iPad, iPhone and Android devices (with the free Spydergallery App). No other calibrator has this capability. The fourth-generation sensor uses double-shielded filters for longer life and better performance. On average, accuracy and precision are improved by 26% and 19% respectively.

Why Color Calibrate Your Display?
Displays render the same image differently: Calibration tunes your display to a reference standard and brings color consistency across desktop, laptop, iPad, iPhone and Android devices.
Displays change over time: Recalibration returns it to reference state for brightness and color
Prints often do not match display: Display calibration provides a base for better print matching
Wide gamut displays may be oversaturated: Without calibration even wide-gamut displays may be inaccurate.
Highlight and shadow details may be inaccurate: Control of brightness, white point and tone response with calibration.
Image colors are not true to life: After calibration, images can be viewed and edited with confidence
Photographers and designers can work confidently on a properly color calibrated screen and can assert greater control over the color fidelity of their digital process. Images can be reliably assessed and adjusted on a properly calibrated display, enabling true-to-life reproduction of image files.

How Does Spyder4express Work?
Spyder4express automates and simplifies display calibration. Install the software, attach the color sensor to USB, and step through the wizard. The sensor measures a series of colors on your screen and creates a “profile” that brings your display to a reference state. At the end, you can compare how the images look before and after calibration.

http://spyder.datacolor.com/portfolio-view/spyder4express/

Saturday, January 25, 2014

尋找 memory error 的強力工具: Address Sanitizer (ASan)

官網有很詳細的介紹, ASan 可以偵測出以下的問題:

Use after free (dangling pointer dereference)
Heap buffer overflow
Stack buffer overflow
Global buffer overflow
Use after return
都是出錯時很難察覺, 之後會造成奇異的行為, 或是讓程式掛在莫明奇妙的地方。

clang 3.1 和 gcc 4.8 開始內建 ASan 的功能。號稱執行速度平均慢兩倍, 比起 Valgrind 的 20 倍, 實在相當誘人。這裡有說明 ASan 怎麼做的。這樣在 Linux 上也有不錯的 memory error detector 了。不知什麼時候能追上 OS X 的腳步

除了 Chromium 有用之外, Firefox 也有使用

Reference:
http://fcamel-life.blogspot.ca/2014/01/memory-error-address-sanitizer-asan.html

Thursday, January 23, 2014

To mount a CD, specify the filesystem

To mount a CD, specify the filesystem
# mount -t cd9660 /dev/cd0 /mnt

Tuesday, January 21, 2014

Set up VLAN on pfSense and Cisco Layer Two Switch

Set up VLAN on pfSense and Cisco Layer Two Switch

Internet --- (ext) Router (int) --- (port 1) Layer 2 Switch

VLAN setting on pfSense
Step 1: To determine whether your LAN network card driver supports 802.1Q VLAN tagging by looking for the VLAN_MTU and VLAN_HWTAGGING options in ifconfig command:
 - ifconfig
 - output: em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
   options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>

Step 2: Interfaces > (assign) > VLANs tab > Add VLAN:
 - Parent interface: em0 (your LAN network card).
 - VLAN tag: 2
 - Description: IT
 - Repeat the steps for VLAN3.

Step 3: Interfaces > Select Opt 1
 - check "Enable Interface".
 - Description: VLAN2
 - IPv4 Configuration Type: Static IPv4
 - IPv4 Address: 192.168.2.2 / 24
 - Gateway: none
 - Click on "Save" Button
 - Repeat the steps for VLAN3.

Step 4: Firewall > NAT > Outbound tab > Add new mapping:
 - Interface: WAN
 - Protocol: any
 - Source Type: Network
 - Source Address: 192.168.2.0 / 24
 - Source port: (leave blank for any)
 - Destination Type: any
 - Destination Port: (leave blank for any)
 - Description: VLAN2 IT
 - Click on "Save" button
 - Repeat the steps for VLAN3

Step 5: Firewall > Rules > VLAN2 tab > Add new rule:
 - Action: pass
 - Interface: VLAN2
 - TCP/IP version: IPv4
 - Protocol: any
 - Source Type: VLAN2 subnet
 - Destination Type: any
 - Description: VLAN2 to any
 - Repeat the steps for VLAN3

VLAN Plan on Cisco Layer Two Switch
Port 1       // VLAN1 (the default VLAN).
Port 2, 3, 4 // VLAN2
Port 5, 6, 7 // VLAN3

Interface Settings
Port 1: Interface VLAN Mode: Trunk
Port 2, 3, 4: Interface VLAN Mode: Access
Port 5, 6, 7: Interface VLAN Mode: Access

Port VLAN Membership

Port 1: Join VLAN:
 - Add VLAN1 UP (Untagged member, PVID).
 - Add VLAN2 T (Tagged member).
 - Add VLAN3 T (Tagged member).

Note: Port 1 有比較安全的設法是:
 - Remove VLAN 1
 - Add VLAN99 UP (Untagged member, PVID).
 - Add VLAN2 T (Tagged member).
 - Add VLAN3 T (Tagged member).
 - Note: 這樣的設法是,沒有加到 自定義的 VLAN 的 ports 就認不得 Port 1 (也就是對外的 gateway),以防有任何人未經允許把網線插到沒被定義的 ports。

Port 2, 3, 4: Join VLAN:
 - Remove VLAN1.
 - Add VLAN2 UP (Untagged member, PVID).

Port 5, 6, 7: Join VLAN:
 - Remove VLAN1.
 - Add VLAN3 UP (Untagged member, PVID).

Monday, January 20, 2014

心智堅強的人不做的20件事

我常常寫我認為我們都該做、嘗試或實驗什麼,好讓我們獲得最多的成功與快樂。然而,改變我們生活最鉅的未必都是我們所做的事情,我們避而不做的事有時反而有最大的影響。身為人類,我們對「不做」有強烈的反感,我們覺得為了產生結果,一定要展開行動。
不過正因為我們幾乎總是在做些什麼,累積到最後經常適得其反。心智堅強的人會避免某些行動,以在最短的時間內得到最大的好處。

以下就是心智堅強的人會避免、而我們應該考慮跟進的行為:


1. 糾結於過去

心智堅強的人會專注於當下和不久的將來,他們知道過去不在自己的控制之中,太遙遠的未來則像今年冬天的天氣一樣難以預料。


2. 不願踏出舒適地帶(comfort zone)

舒適地帶是危險之地,在這個黑暗深淵待太久的人都會徹底迷失。駐足於你的舒適地帶就等於放棄人生。


3. 拒聽別人的意見

只有笨蛋才會相信自己可以應付所有的事。就算是集思廣益,點子也是強求不來的,只能期盼有人靈光一現。好點子就是好點子,無論是不是你想出來的。別敗給你的自負,如果有人有很棒的主意,採納吧。


4. 避免改變

心智堅強的人了解、而心智不堅的人不了解的一件事,就是改變是無法避免的。試圖避免必然會發生的事毫無意義,因此避免改變也毫無意義,那樣只是在浪費時間與力氣。


5. 思想封閉

你不是萬事通,即使是你認為自己知道的事,也有可能不完全正確。如果你思想封閉,你只會阻礙自己學習新知。如果你停止學習,就停止了生活。


6. 讓別人替自己做決定

該為你做決定的人只有你自己,而不是別人。讓別人替你做決定只會把責任轉嫁到別人身上,但最後唯一失敗的人卻是你。如果你沒有失敗的勇氣,你就沒有成功的勇氣。


7. 嫉妒別人的成功

當別人成功,你應該感到開心。如果他們可以,你也可以。別人的成功無論如何都不會減少你成功的機會。真有什麼差別的話,它應該會激勵你,讓你繼續努力。


8. 總是想失敗的機率有多高

我們的想法影響我們的觀點,我們的觀點決定我們的成果。心智堅強的人知道、也懂得利用這一點。你總是有可能會失敗,但只要你有成功的機會,就值得一試。


9. 自憐自艾

鳥事就是會發生,生活可以很難過。有人會受傷,有人會死去。人生不是只有美麗的花朵和蝴蝶,你也會一而再、再而三的落馬。問題在於,你有堅強到可以不斷爬上來嗎?


10. 專注在自己的弱點上

改進自己的弱點確實有好處,但著重於發揮強項更重要。在人生道路上走得最長遠的不是最多才多藝的人。在各方面表現一般雖然讓你顯得平凡,但是精通某些技能或擁有某些特質,會讓你更輕而易舉打敗競爭對手。


11. 想要四面玲瓏

事情做得好就是做得好,無論最後的成果是由誰定奪。你無法討好所有的人,但你絕對可以想辦法把事情做到最好。


12. 為無法控制的事自責

心智堅強的人知道他們可以掌控哪些事情,了解他們無法掌控哪些事情,並且會避免去想完全不在他們控制範圍內的事。


13. 耐性不足

耐心不只是一項美德,還是很重要的美德。多數人失敗不是因為他們不夠好、沒有獲勝或成功的能力,而是因為他們沒有耐性,並在時候到之前就放棄了。


14. 被人誤解

在任何妥善運作的體制裡,溝通都是一大關鍵。牽涉到人的時候,情況會變得比較複雜,光只有陳述資訊是不夠的。如果接收者誤會了你,表示你沒有適當地傳遞你的訊息。心智堅強的人會盡力讓自己被人了解,也有耐性澄清誤解。


15. 覺得被虧欠

人生中沒有人虧欠你什麼。你出生了,剩下的事情都取決於你。生活不欠你任何東西,別人也不欠你任何東西。如果你想要什麼,你應該主動去爭取,好事不會憑空發生。


16. 重蹈覆轍

犯一個錯,好吧。犯同一個錯兩次…不太好。犯同一個錯三次,你可能得考慮別再喝酒或嗑藥了。你不是太蠢就是太常神智不清了。


17. 屈服於自己的恐懼

這個世界可以非常可怕,有些事情確實有充分理由把我們嚇壞,但我們多數的恐懼是沒有邏輯的。如果你知道你想嘗試某件事情,去嘗試吧。如果你害怕,請記住害怕失敗勢必代表成功對你來說會有天大的意義。


18. 魯莽行事

心智堅強的人一定會完全了解眼前情勢再採取行動。如果你有時間,請務必深思熟慮、面面俱到。不這麼做完全只是懶惰而已。


19. 拒絕別人伸援

你不是超人,你無法獨力做好所有的事。就算你可以,你為什麼該做?如果別人願意幫忙,就讓他們幫忙。與人往來,聆聽別人的想法,觀察別人做事的方式,你也許會學到東西。如果沒有,你可以教他們東西,做人類應該做的事:社交。


20. 率先放棄

人性最大的弱點就是放棄──不幹了、丟毛巾。心智堅強的人是這樣做事的:只做對你來說很重要的事,忘了對你來說不重要的事。如果是你認為很重要的事,就做到你成功為止,絕對沒有例外。

http://www.fankudo.com/usd/19121

Friday, January 17, 2014

Command to determine whether the network card supports IEEE 802.1Q VLAN tagging on FreeBSD



Look for the VLAN_MTU and VLAN_HWTAGGING options in ifconfig command
# ifconfig | grep VLAN

Wednesday, January 15, 2014

svn Error converting entry in directory to UTF-8

Date: Sun, 20 Oct 2013 01:40:00 -0700 (PDT)
From: svn@j-www.local (Cron Daemon)
To: svn@j-www.local
Subject: Cron /usr/local/bin/svn update --username MYUSERNAME --password MYPASSWORD --non-interactive
+/www/web_hosting
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:

Updating '/www/web_hosting':
svn: E000022: Error converting entry in directory '/www/web_hosting/www.example.com' to UTF-8
svn: E000022: Can't convert string from native encoding to 'UTF-8':
svn: E000022: G?\195?\169oM?\195?\169gA.html

Method 1:

Since the svn server stores everything in utf-8, and crontab is using /bin/sh shell. So, we need to add:

# vi /etc/crontab
*/5 * * * * svn export LC_ALL=en_US.UTF-8 && /usr/local/bin/svn update --username MYUSERNAME --password MYPASSWORD --non-interactive /www/web_hosting > /dev/null 2>&1

Method 2:
Run the command with tcsh:

# vi /etc/crontab
*/5 * * * * svn tcsh -c "/usr/local/bin/svn update --username MYUSERNAME --password MYPASSWORD --non-interactive /www/web_hosting" > /dev/null 2>&1

Make sure you do have following setting:

# vi ~svn/.cshrc
setenv LC_ALL en_US.UTF-8
setenv LANG en_US.UTF-8

Monday, January 6, 2014

To register ASP .NET to IIS server


start > run > cmd >
cmd> cd C:\Windows\Microsoft.NET\Framework64\v4.0.30319
cmd> aspnet_regiis -i
cmd> iisreset

install MySQL as a Windows Service

cmd> mysqld.exe --install MySQL56

Friday, January 3, 2014

list all mapping key binding - Displaying the current Vim environment

list all mapping key binding - Displaying the current Vim environment

You can display the current Vim environment (settings, options, commands, maps, etc) using the following commands:

:abbreviate   - list abbreviations
:args         - argument list
:augroup      - augroups
:autocmd      - list auto-commands
:buffers      - list buffers
:breaklist    - list current breakpoints
:cabbrev      - list command mode abbreviations
:changes      - changes
:cmap         - list command mode maps
:command      - list commands
:compiler     - list compiler scripts
:digraphs     - digraphs
:file         - print filename, cursor position and status (like Ctrl-G)
:filetype     - on/off settings for filetype detect/plugins/indent
:function     - list user-defined functions (names and argument lists but not the full code)
:function Foo - user-defined function Foo() (full code list)
:highlight    - highlight groups
:history c    - command history
:history =    - expression history
:history s    - search history
:history      - your commands
:iabbrev      - list insert mode abbreviations
:imap         - list insert mode maps
:intro        - the Vim splash screen, with summary version info
:jumps        - your movements
:language     - current language settings
:let          - all variables
:let FooBar   - variable FooBar
:let g:       - global variables
:let v:       - Vim variables
:list         - buffer lines (many similar commands)
:lmap         - language mappings (set by keymap or by lmap)
:ls           - buffers
:ls!          - buffers, including "unlisted" buffers
:map!         - Insert and Command-line mode maps (imap, cmap)
:map          - Normal and Visual mode maps (nmap, vmap, xmap, smap, omap)
:map<buffer>  - buffer local Normal and Visual mode maps
:map!<buffer> - buffer local Insert and Command-line mode maps
:marks        - marks
:menu         - menu items
:messages     - message history
:nmap         - Normal-mode mappings only
:omap         - Operator-pending mode mappings only
:print        - display buffer lines (useful after :g or with a range)
:reg          - registers
:scriptnames  - all scripts sourced so far
:set all      - all options, including defaults
:setglobal    - global option values
:setlocal     - local option values
:set          - options with non-default value
:set termcap  - list terminal codes and terminal keys
:smap         - Select-mode mappings only
:spellinfo    - spellfiles used
:syntax       - syntax items
:syn sync     - current syntax sync mode
:tabs         - tab pages
:tags         - tag stack contents
:undolist     - leaves of the undo tree
:verbose      - show info about where a map or autocmd or function is defined
:version      - list version and build options
:vmap         - Visual and Select mode mappings only
:winpos       - Vim window position (gui)
:xmap         - visual mode maps only
Notes

Additional information is available to a Vim script. For example, :help tabpagebuflist() shows how to list all buffers in all tabs.

A script called bugreport.vim is provided with Vim. When run, the script produces a file with information about Vim's environment. To see the script, use the command :view $VIMRUNTIME/bugreport.vim in Vim.

Reference:
http://vim.wikia.com/wiki/Displaying_the_current_Vim_environment