2013/06/24
我痛恨駝峰式命名原則
甚麼叫駝峰式命名原則?
舉個例子來說,假設你有一個用來新增產品用的函數,你可能命名成
AddProduct
如果他是某個物件的方法,那你會這樣命名
addProduct
這個就是駝峰式命名法,目前主流的程式語言大都是推薦這樣的命名方式。
如上面的例子,駝峰式命名原則還分成兩種,如果首個單詞第一個字母也大寫的話,也被稱作帕斯卡命名原則。
相對於駝峰式命名原則,我個人比較喜歡底線命名原則,以上述例子來說,如果用底線命名原則來命名就會變成
add_product
我不否認駝峰式命名原則看起來比較美觀,而且名稱長度較少,但它的優點也僅只於此。
尤其是在一些 Script 語言中,你可以利用一個內容是函數名稱的字串去調用該函數來達到效果時,碰到駝峰式命名原則,你會發現沒有完美的解法~
我寫過剖析駝峰式命名原則字串的函數,從結論上講,不論是上面兩種駝峰式命名原則,還是名稱裡面包含連續大寫縮寫的名稱,我寫的剖析函數都能正確切開個個單詞 (前提是你沒亂命名)。
但能切開不代表能組合回去,原因是因為你沒辦法猜測組合回去的名稱被用在什麼情況下。
相對於駝峰式命名,底線式命名的原則還蠻死板的,他要求全部小寫,分隔單詞全都用底線。
這種命名方式很古老,但任何場合都能用,從各種程式語言到資料庫、表、欄位等等,全都一體適用。
分解組合這種命名方式也很簡單,甚至不用你自行來寫函數來剖析,大多數的程式語言都內建了處理分解組合這種字串的函數。
2012/10/29
關於 Windows 8 升級二三事
上禮拜五 Windows 8 正式發表,同時也帶來了一股升級潮,與此同時,我也用我之前購買的筆電的隨機授權弄了一組折扣眷,花了 NT$439 做了升級。
先來說說花了這筆錢買到的是什麼?
嚴格說來,買到的是一組從 "正式管道" 來的 "Windows 8 專業版" 的 "升級用" 的啟用序號。
這裡有幾個重點,就是我上面引號內的文字,說明如下:
- 正式管道:這是微軟承認可用的啟用序號,不用擔心這組序號通不過啟用程序
- Windows 8 專業版:升級助手下載回來的是另外包裝的 ESD 版,但本質上還是 Windows 8 專業版,所以拿 MSDN 上的 Windows 8 專業版 ISO 來安裝,依然可以用這組啟用序號
- 升級用:這組序號是升級用的,所以不管你安裝的是升級助手下載回來的版本,還是從 MSDN 上的版本,安裝時硬碟必須要有裝過 Windows 作業系統,這組序號才可以啟用
目前網路上大家討論最多的還是這個序號能不能空機安裝,底下我來簡單說明一下。
我自己實驗過的步驟是先拿一顆硬碟,用第三方的磁碟分割程式分隔好並格式化,然後拿這個硬碟去安裝 Windows 8,結果就是第一次無法用該序號啟用,然後拿這顆硬碟再裝一次,就可以正常通過啟用程序。
所以結論是空機安裝是可以的,但可能必須安裝兩次。
底下是我碰過的一些問題與解法:
- 更改序號進行啟用程序的方法:用 Administrator 身分打開 Command Prompt,執行 slui 3
- 無法新增輸入法:把 Windows Search 功能裝上即可
- 有使用 RAM Disk 且改過 TEMP 目錄與 Pagefile 路徑到 RAM Disk 上,安裝某些 Windows Feature 會失敗:先把 RAM Disk 刪掉,安裝完需要的 Windows Feature 後再啟用
2010/11/17
MariaDB 試用
這幾天在找 solr 跟 sphinx 的相關資訊,在網路上找了許多資訊後,有個亮點突然吸引我:那就是 MariaDB 居然有把 Sphinx 的儲存引擎整合進去~
把 MariaDB 裝上後看看,卻沒發現有 Sphinx 的儲存引擎,上官網找了資料後才知道要先把 Plugin 安裝進去~
由於檔案都有了,所以只要下 SQL 命令即可,同樣也是要先作一次安裝 Plugin 的儲存引擎還有 OQGraph。
SQL 語法如下:
- INSTALL PLUGIN sphinx SONAME 'ha_sphinx.dll';
- INSTALL PLUGIN oqgraph SONAME 'ha_oqgraph.dll';
2010/08/11
exFAT 的磁簇大小
在一般硬碟上,如果你直接格式化它,是不會出現 exFAT 的選項可以選,你必須用 Disk Management 先把硬碟的分割區給刪除掉,然後用 New Simple Volume 把分割區切出來時,格式化的選項才有 exFAT 可選。
另外一個方式是用 CMD 去下 Format 命令。
不過問題在於,這時候的磁簇大小的範圍是 512 ~ 64K,沒有 32M 的選項可選 (我用來測試的硬碟是 500G),只有用 Format 命令的方式可以強迫指定磁簇大小為 32M。
後來我拿手邊兩個容量分別為 4G 和 16G 的隨身碟來試,兩者的磁簇大小都有 32M 的選項可選,不過最小的磁簇大小的選項有點差異,4G 的那個最低可以選到 512,16G 的那個則只到 1024。
底下是我剛剛把一些檔案複製到測試的 500G 的硬碟上的資料。
| Size | Size on Disk | Files | |
| 來源:NTFS/64K | 269G | 269G | 3582 |
| 目的:exFAT/32M | 269G | 349G |
值得注意的是,當複製小檔時,會有停頓的現象。
雖然我認為 exFAT 這樣的設計很雞肋,不過我想知道為什麼會有這樣的差異。有誰能提供進一步的資料嗎?
2010/08/09
如何在 Windows 下選擇合適的檔案系統
先講結論:
如果你的儲存媒體是電子式的 (例如:RAMDISK、SSD、Flash 隨身碟等),請用 exFAT。
如果你的儲存媒體是機械式磁性紀錄的 (例如:傳統硬碟),請用 NTFS。
不過有兩個例外:SSD 當系統碟使用、Flash 隨身碟當安裝碟使用時,則必須使用 NTFS。
如果你懶的管這兩個檔案系統的差異,那就都格式化成 NTFS,磁簇大小 64K 來使用就行了。
這幾天我在研究這兩種檔案系統的特點,試圖找出增加其搜尋、存取效能的關鍵以及適用的方式,底下是純理論的分析。
對於搜尋方面,在不靠 Windows Search Index 的前提下,由於NTFS 的目錄內容使用 B+ 樹的關係,所以在相同的儲存媒體中,效能會比 exFAT 來的好。
不過由於電子式比機械式在搜尋速度跟存取速度都有強大的壓倒性優勢,因此對於這兩個檔案系統在電子式的儲存媒體中的搜尋效能來說,並沒有很明顯的差異。
對於存取方面,磁簇大小則是關鍵,底下是這兩種檔案系統的磁簇大小的比較表,單位是 Byte。
| 檔案系統 | 最小 | 最大 | 預設 |
| NTFS | 512 | 64K | 4K |
| exFAT | 512 | 32M | 32K |
一般來說,磁簇越大,存取效能也越好,但相對的對於小檔空間損耗也比較大。
另外,檔案的 Fragmentation 對存取效能也是一個問題,由於 exFAT 一樣使用 linked list 來分配檔案空間,所以這個問題也許會變得很糟。
不過如同上面提及電子式的儲存媒體的特性,這個問題在電子式的儲存媒體中基本上可以無視。
雖然 exFAT 有許多新的特性,例如:TFAT、free space bitmap、ACL 等等,不過我在 Windows 7 裡面沒有確認到這些特性有被實做出來。
另外 exFAT 一樣是兩個 FAT 是連續存放的,如果該區域損毀則整個分割區的資料都無法重建,因此我很難就可靠度、搜尋的議題上,在硬碟中使用 exFAT。
以目前來說,硬碟的每 GB 價格仍然遠低於電子式的儲存媒體,因此在適合 exFAT 的環境中,很難出現真正使用大量的大型檔案的應用。
如果要給 MS 建議的話,我會說請把未來新版的 NTFS 的最大磁簇大小放大成跟 exFAT 甚至超過,這樣比較有意義。
2010/08/02
使用 SSD 該注意的事情
根據水球的鼓吹,我買了 SSD 回來當系統碟。
過去很少注意 Windows 7 系統的調教,不過因為據說 SSD 寫入次數比硬碟少非常多,所以上網找了一些文章來實驗。
我用來修改系統設定的是 Ultimate Windows Tweaker,簡稱 UWT。
底下是一些心得:
- 要裝 RAMDisk 把 TEMP、瀏覽器的 Cache、Search 的索引資料等等指到 RAMDisk 上。
RAMDisk 我是用 DataRAM RAMDisk,固定磁碟機代號的方法請看這篇。
簡單的說就是先改變產生出來的 RAMDisk 磁碟機代號,然後執行 Save Disk Image Now,再把 Load Disk Image at Startup 勾起來,然後按 CTRL+S 把設定存起來即可。(Save Disk Image at Shutdown 不用勾) - 要把 Windows Event Log 和 Superfetch 服務設定為停止,並把 Windows\Prefetch 裡面的所有檔案與目錄刪除。
- 把 SSD 系統碟的 Paging file size 設成最小值 16M(不可設成 No paging file 或是 0,這一步必須先做完第二步,否則會無法把 Paging file size 設成 16M),並用 UWT 設定 Disable pagefile。
- 停止磁碟重組的自動排程。
- 其他的調整可以看這篇。
2010/07/29
小紅傘怪異兩三事
我一直以來使用的防毒軟體都是免費的小紅傘。
我愛用它的原因主要是兩個:
- 防毒能力不錯。
- 可以設定檔案讀取、寫入、或是兩者動作出現時進行即時掃描。
尤其是第二個,我通常設定檔案讀取時才進行即時掃描監控。
這樣的設定對於在跑 BT 軟體或是 Web Server 蠻有幫助的,跟選擇兩者時比較起來系統的反應會比較快一些~
不過最近發現一些小問題:
- 移除熱插拔的外接 eSATA 硬碟時會鎖定,不讓我移除。
- 上網使用 WebATM 時讀不到金融晶片卡。
後來發現只要先把小紅傘的的即時掃描先關掉,在進行上述的動作就都沒問題。
WebATM 的解決方式還有另一個解法:把小紅傘對各種威脅的項目全部不要選取即可。
2010/05/10
幾個 Code Repository 服務支援的 VCS
以速度上來說,Google 是比較快的。
以功能上來說,SourceForge 是比較齊全的。
- Google Code:Mercurial、Subversion
- Microsoft CodePlex:Mercurial、Team Foundation Server
- GitHub:Git
- bitbucket:Mercurial
- SourceForge:CVS、Subversion、Mercurial、Bazaar、Git
2010/05/08
分散式版本控制系統
這幾天在研究 GIT 跟 Mercurial 這兩套版本控制系統。
網路上找了一堆文章來看,大致上只了解 GIT 上手比較難一些,其他的要用過之後才知道。
很巧的是 Google 跟 Microsoft 的 Code Community 都支援 Mercurial。
不過據說 Drupal 正在評估的是 GIT~
2009/11/01
VirtualBox 的穩定性,跟版本有關~
話說自從 VirtualBox 3.0 正式 Release 以來,我就把目前手上管理的一個網站移到這上面來作穩定性測試。
歷經數個版本的升級,目前可以說說一些心得。
如果你期待跑了 VirtualBox 以後可以過著幸福快樂的生活,我會覺得那是想太多了~
目前我在 Windows 7 下跑了那麼久的 VirtualBox ,只有 3.0.6 這個版本堪稱穩定,其他的三天兩頭就會引起 OS Crash。
年底我打算買一台 1 L 以下的比較省電小機器來獨立跑看看~
2009/07/01
2009/06/28
Virtual Box 3.0 支援 Direct3D 8/9
消息來源在這裡。
雖然 MS 的 Virtual PC 也很好,不過我個人還是鍾愛 Virtual Box。
只是不知道能不能玩支援 DirectX 的遊戲,期待中~
追記:2009.06.30 Virtual Box 3.0 Release
2009/06/06
換用新的 IM 軟體
2009/05/12
用 WAIK 自訂 Windows 7 RC 64 Bits 安裝光碟
經過多次實驗證明,在實際燒錄時,會受到燒錄軟體與光碟片(可能還有燒錄器及驅動程式等)因素影響成功率。
由於 Windows 7 目前缺乏廠商晶片組驅動程式的支援(我之前安裝時沒仔細看,其實根本沒裝,因為目前 AMD 只有顯卡的驅動程式有支援 Windows 7),所以只能說燒錄成功那幾次是機率問題。
我的電腦環境有點複雜,先說明清楚比較好:
- 主機板是 ASUS 的 M4A78T-E,有開 AHCI
- 燒錄器是 ASUS 的 DRW-1814BLT(SATA 介面)
- 燒錄時用的 DVD+RW 可重複寫入的片子來做實驗
因此考慮的因素比較多,如果用 IDE 介面的光碟機的話,應該成功率會提高。
過程就不多說了,本來以為 Try 出安裝檔跟 vLite 後在 VirtualBox 上會過,燒成光碟安裝時應該也會過,看來我真是太天真了。
結論是:
- vLite 的整合功能沒問題,但很詭異的是燒錄後可正常安裝的機率低,或許是剛好實驗用的那幾張光碟片比較差也不一定。
- 不用 vLite 做整合,直接把檔案抓出來配合安裝檔,用 oscdimg 來產生 ISO,成功率很高。
相關的設定檔在這裡。這篇文章是以 Windows 7 RC 64 Bits 版為例,設定檔中也是以此為準。
解開來有三個檔,其中 Autounattend.xml 是在最後要燒錄 ISO 前要覆蓋 vLite 產生的檔案用的,另外兩個則是 vLite 用的設定檔。
底下是在 32 bits XP / XP Mode 下來進行,因為 vLite 在 64 Bits 的 Windows 7 底下跑的很慢,在最終的套用設定時常出問題而無法完成。
- 先把從微軟站上拿到的 ISO 檔用虛擬光碟掛起來,然後把裡面的檔案複製到一個目錄下 (假設是 C:\W7) 準備進行整合。
- 安裝 WAIK 與 vLite 。
- 把上面提供的壓縮檔內的 W7.ini 與 W7_u.ini 複製到 vLite 底下的 presets 目錄。
- 執行 vLite,在工作階段把所有的工作項目全選,然後一直進行下一步直到燒錄光碟階段,此時選擇套用,讓 vLite 做整合。
- 整合完畢後離開 vLite 並將壓縮檔內的 Autounattend.xml 複製到第一步的目錄下覆蓋。
- 執行 WAIK 中的 Deployment Tools Command Prompt 。
- 在上述產生的 DOS BOX 中執行 oscdimg -u2 -h -y6 -m -bC:\W7\boot\etfsboot.com C:\W7 C:\W7.ISO
如果使用 vLite 來產生 ISO 檔,會因為 boot loader 不同而無法安裝 (雖然在 VirtualBox 中可以安裝,但實際燒成光碟來安裝時還是有一定機率無法安裝),vLite 用來整合 Windows 7 RC 目前還有蠻多問題的。
實際上,不使用 vLite,直接將原版光碟的內容複製到某個目錄下,再加上 Autounattend.xml 並安裝 WAIK 直接跳到上述的第六步來產生的 ISO 其實是比較穩定的。
有興趣的人可以研究一下 WAIK,不過個人是認為自從 Vista 以來,Windows 模組化的程度越來越高,已經不像 XP 時代時用 nLite 來縮減容量並自訂來的有意義。
這裡提供的設定檔並沒有刪除任何功能,只是預設將其禁用而已,有需要的人可以自行開啟。
2009/05/05
開始使用 Windows 7 RC
剛剛把 Windows 7 RC 安裝起來玩一玩,第一個印象就是,安裝的時候一口氣裝完,不像 XP 安裝時要重開機兩三次。
再來是驅動程式都不用另外安裝(除了 VIA 的音效驅動程式,這東西在安裝時還要騙安裝程式是在 Vista )。
然後是對 XP 32 位元程式的相容性做的不錯,至少我跑的幾個程式包括防毒軟體都可以跑(我是裝 64 位元版的 Windows 7 )。
這讓我想到前幾天在研究用隨身碟安裝 XP 時的窘境,真是研究辛酸的~
傳說中的 XP Mode 還沒試,不過已經先把下載點找出來了。
下面是 Windows Server 2008 RC 的下載點:
P.S. 雖然驅動程式都有抓到,但還是建議自己去各硬體廠商的下載區找來裝,效能有差~
2009/04/17
可卸除 eSATA 裝置的 HotSwap
話說上個月我買了一個 eSATA / USB 雙介面的硬碟座,用起來是蠻快樂的,不過有個小問題,那就是 eSATA 裝置無法卸除。
(註:BIOS 中 SATA 必須設成 ACHI 模式,可以先用 IDE 模式,然後找 RAID / ACHI 的驅動程式裝完後,再進入 BIOS 設成 ACHI 模式)
後來聽說是晶片組的關係,我的板子是用 ATI 的晶片組,驅動程式不支援。
最近聽說 ASUS 出了 NVIDIA 980a SLI 的板子,是有點想敗下去,不過根據某主機板大廠工作的朋友講,NVIDIA 晶片的問題也不少,建議我再考慮。
後來我想說想測看看 NVIDIA 的板子是否真的可以卸除 eSATA 的裝置,於是今天我到了另外一位有人的家中借他的板子作測試,結果的確是可以。
不過我的這位友人很親切的告訴了我一個小程式:HotSwap
這個程式可以用來移除 eSATA 的裝置,我用了之後果然不錯,蠻符合我的需求,而且 ATI 晶片的板子也可以用。
唯一美中不足的部份是 Spindown 功能沒有作用~
不過因為 Spindown 沒作用,所以裝置卸除後,關掉硬碟座的電源後,不可以立刻把硬碟拔起來,要等大約10秒鐘,等讀寫頭自動歸位後再拔比較安全。
2009/04/11
佈景主題的列表樣式
今天心血來潮,想來換一換部落格的佈景主題,不過選來選去,每個佈景主題對於文章中內文的列表樣式都是 none。
另外就是固定寬度的問題,這對有寬螢幕的人實在是一種折磨,其他還有一些小問題...
這實在是很糟糕,所以手動改了改,在 部落格 » 樣式管理 » 樣式設計精靈 » CSS 原始碼編輯 加上以下的樣式即可:
/* 列表樣式 */
.article-content ol, .article-content ul {margin:1em; list-style-position:inside;}
.article-content ol {list-style-type:decimal;}
.article-content ul {list-style-type:disc;}
/* 所有文章列表 */
.box-more {display:inline;}
/* 分頁 */
.page {text-align:center;}
/* 比例寬度 */
#container2 {width:95%;}
#content {width:75%;}
#links {width:20%;}
2008/10/20
超大字集~
我目前使用的輸入法是「新酷音輸入法」,之前在使用的時候,常常有時候選字翻到最後幾排時,都有缺字,即便我裝了號稱有Ext-B 字面的「新細明體更新套件」也是一樣。
直到某個很無聊的下午,我到很久沒更新的「Unicode 補完計畫」的討論區去翻文章來看,發現了一個維基百科的連結:「Unicode 擴展漢字」。
在該連結裡面,我發現了一個有超大字集,具有 Ext-A/B/C 字面的「海峰五筆超大字符集」,下回來裝上去後,本來缺字的部份都顯示出來了~
2008/07/15
2008/02/20
瀏覽器升級到 Firefox 2.0
瀏覽器: Firefox Portable 2.0.0.11
附加元件我裝了以下的東西:
- Add Bookmark Here 2
- Bookmark Sync and Sort
- Data Analytics
- DOM Inspector
- DownThemAll!
- Fasterfox
- FireBug
- gladder
- Google Browser Sync
- GUtil!
- IE Tab
- JSView
- MediaWrap
Old Download Dialog- PCMan Plug-in
Pearl Crescent Page Saver- QuickJava
- QuickRestart
- Right Encoding
- Screengrab!
- Tab Mix Plus
- 新同文堂
另外我已經把 Live 書籤的部份換成靜態的書籤,因為每次一起動,火狐老是會去逛一圈,都不會作 cache 的說。