2009年12月17日 星期四

boost::noncopyable

trace到一半忍不住…又忍不住來打混又來跟大家分享了。
還記得陳欠欠之前提到的
雞婆的
C++
嗎?
這篇告訴我們一個該養成的好習慣,防止一些可以避免的錯誤。

還我漂漂拳

上次欠有貼過的link
SyntaxHighlighter
基本上竹林新文章的template已經有幫忙加好script了
想貼code的時候如以下的形式就可簡單的放好

2009年12月16日 星期三

Composite VS Private Inheritance


這兩天和阿伯討論Composite VS Private Inheritance
事實上這是effective C++的item38 和 39
都是在論述"is-implement-in-terms-of"
相信大家都懂composite得用途
當你需要他的一些特性,但你不是他,得要客製化他的behavior就可以使用composite

2009年12月14日 星期一

2009年12月13日 星期日

指標常犯錯誤一

最近NJ在談指標, 我昨天剛犯了一個常見的指標錯誤, po來和大家分享, 順便秀一個po程式碼的語法.

我寫了個小routine要parse字串, 把"aaa_bbbb_cc"拆成"aaa", "bbbb", "cc", 其中"_"代表切分用的字元, 程式碼大概如下(忽略buffer size checking等細節)

2009年12月11日 星期五

Michael Say Hello

Hi Guys,

我是Michael, James欠的朋友, 和他前後當過三次同事, 包括現在這次 :)

這裡的文章質量都不錯喔 有機會再和大家分享我的經驗

Some facts about me:

1. 慣用的程式語言: C/C++, Java
2. 喜歡用 SDK style 作 Windows programming
3. Favorite editor: vi
4. 最近在玩OpenGL ES

Michael

Bridge Patthern

昨天真是愉快(打混)的一天,因為欠上篇提到coding convention與link裡的Herder files dependencies讓我想起之前effective c++報告過的item 31 Minimize compilation dependencies between files。在大家討論的過程中,forward declaration 的精神相信大家都透過hsu的 abow-stara類別圖更了解了,現在來點實用的吧! Bridge Pattern。我小改了以前item31的sample(因為貼code篇幅還有天生的惰性,在Person端的implement有偷懶),總之,review以前的code再擴充些亂七八糟的想法真是太有趣了。

2009年12月10日 星期四

指標非常淺的淺談

由於對 C/C++ 實在很不熟悉, 最近就跑去唸 K&R 的 The C Programming Language, 作者在指標章節提供了一個 declaration 的簡單定義如下:


dcl: optional *'s direct-dcl
direct-dcl: name
(dcl)
direct-dcl( )
direct-dcl[optional size]

借用書內的圖表, 可以比較清楚的知道他的關係如下:

Coding Convention

在看上一篇阿伯的文章後,找了一些關於objective-c #import的資料,無意間看到這篇 Google Objective-C Style Guide 覺得值得參考google怎麼訂定coding convention的,重點在哪,等等。
C++版在這-> Google C++ Style Guide

還有Apple版的

2009年12月7日 星期一

Include guard VS. #pragma once

一個簡單的小觀念,卻是我工作以後才開始的習慣-Include guard
Include guard解決了大型專案修改時,牽一髮動全身的already be defined問題(同一個header被include兩次在c++是不合法的)。另外還有一招叫作#pragma once 有同樣的效果,不同點在於它是用”物理”的檔案位置來避免重複include。所以今天如果專案裡有兩份"一模一樣'"的header file,就…還是會出包。稍微比較一下兩種方法的優缺點。

JSON String Encoding

最近在找關於JSON string encoding的時候額外發現一個有趣的技巧可以分辨Unicode家族。
JSON text SHALL be encoded in Unicode. The default encoding is UTF-8. Since the first two characters of a JSON text will always be ASCII characters [RFC0020], it is possible to determine whether an octet stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking at the pattern of nulls in the first four octets.
00 00 00 xx UTF-32BE 
00 xx 00 xx UTF-16BE 
xx 00 00 00 UTF-32LE 
xx 00 xx 00 UTF-16LE 
xx xx xx xx UTF-8
Read more: http://www.faqs.org/rfcs/rfc4627.html#ixzz0V5v8SI97

2009年12月6日 星期日

UML Modeling/Drawing Tools

最近在找一些跨平台的UML Modeling/Drawing Tools,意外發現兩個很有特色的東西。
  1. yUML
  2. Gliffy

2009年12月5日 星期六

Stack-Based Class Design

我學過一招,也在前幾天施展給Hsu跟阿伯看,所以在這裡撰文分享一下。

(靠~招式快用完了,沒神秘感了)

事情是這樣的

2009年12月4日 星期五

Configure Unit Test in Xcode 3.1.3

Test Driving Development 是一種開發 Project 的方式. 可以自動化去檢查每個要檢查的地方有沒有正常工作. 可以有效的減少許多在開發和除錯過程中產生的 side effect 的發生. 因此, Refactoring , 非常的倚賴這種工具來加強開發的安全性. 除此之外, 要先寫好 test case 然後才 implement 實體 method 的邏輯, 也可以讓 method 的邏輯會更明確, 否則 test case 會難以設計. 所以, 今天在介紹在 Xcode 裡面, 應該如何設定 test unit.

Burden of Using Dynamic Link Library

濫用DLL是我長久以來看到的一個現象。這裡提到DLL泛指各平台的dynamic link library,不是單指Windows的DLL。而且dynamic link也分成Load-Time Linking 與Run-Time Lining兩大類,本文是針對Load-Time Linking做個探討。

為何說濫用呢?

不知所為何事,就是濫用。我看到的狀況是通常都在不知道DLL的好處(或者是壞處)的情況下就決定每個Module都要寫成DLL,以為只要寫成DLL就一定有好處,其實不然。

2009年12月3日 星期四

Convention Over Configuration

之前在找一些web相關的framework的時候,在功能比較表裡看到一個項目叫CoC。很好奇的就去一探究竟什麼是CoC,原來CoC就是Convention Over Configuration的縮寫。

這個概念簡單來講就是用一些簡單的常規、慣例(convention)來取代繁雜的設定(configuration)。這在很多先進的framework廣泛地被應用,目的就是要簡化開發者的工作,免除一些複雜的設定。我個人認為它是一個潮流。

詳情還是請看一下列文章:

http://en.wikipedia.org/wiki/Convention_over_configuration

http://softwareengineering.vazexqi.com/files/pattern.html

2009年12月2日 星期三

包版本惹辣


最近我在包版本的時候老是出狀況
不是不能compress不然就是不能copyflash drives
實在讓人感到很機八

所以就去survey了一下到底哪裡出問題
先排除電腦本身的問題後
嘗試了用網路(drop box)取代flash drives來傳遞資料
結果發現能compress & copy!!!!

所以矛頭就指向flash drives
雖然我家小黑被我操很大
但是以往他為我傳遞了無數高槽
所以應該沒有問題才是呀

assert(I'm loving it);

我很推崇在code裡加assert,可以讓問題及早被發現,也可以透過assert與client溝通。
廢話不多說,讓我先舉幾個assert常見的用法。

2009年12月1日 星期二

Reference vs. Address

相信大家都知道C++有個特有的參數傳遞方式 - call by reference,只是
大多數都
不太確定它跟call by address的差別與使用時機。我想藉由這篇文章分享我個人的看法。