Pages

Subscribe:

Ads 468x60px

Labels

2011年12月13日 星期二

App開發者一定要學會如何行銷

寫出「我要搭高鐵」App的王崇仁認為,自己開工作室發展軟體,除了英文能力要好,也必須學習如何推銷,以提高軟體的下載率

IT人物- Ollix工作室執行長 王崇仁

● 出生年:1985年
● 學歷:中興大學資訊工程系畢、目前就讀同校資工碩士班
● 工作內容:程式設計

公司檔案-Ollix工作室

● 服務項目:軟體開發
● 網址:www.ollix.com
● 軟體作品:我要搭高鐵、Music & Lyrics


在Apple的App Store上有一款名為我要搭高鐵的App,相當出名,它是提供查詢高鐵班次及訂票功能的軟體,雖然售價為4.99美元,但從上架至今已突破30萬人次下載,也曾經獲得臺灣總付費排行榜的第一名。

會獲得這麼好的成績,負責開發這套App的作者王崇仁說,是因為在開發時就以簡單、好用為前提,而且在推出後,也持續的更新功能,讓付費下載的使用者可以感覺到,作者是真正用心經營這套軟體。

因為找不到適合的App協助訂票,於是便開發了我要搭高鐵
王崇仁在大學時,便自己創立了Ollix工作室,他的理念是只做自己想要的東西,而我要搭高鐵就是這樣產生的。王崇仁是桃園人,而當時在臺中念書,所以時常搭乘高鐵往返兩地。因為覺得在網站上訂票及取票很不方便,所以他開始在App Store找能在iPhone上直接查詢並訂票的App,但是所找到的軟體,都沒有完全符合他想要的功能,於是他便有自己開發這套軟體的想法。

在2009年時,Ollix工作室先製作了我要搭高鐵的第一版,但因為第一次開發App,所以在功能上還不完整。直到2010年時,他認為自己的技術已經成熟了,便著手設計第二版並於年底推出,而甫推出便受好評。這一版加入了許多其它同類型App所沒有的功能,例如,可線上刷卡、支援早鳥優惠、即時座位檢查等。

從國小就自修HTML,慢慢累積程式設計的基礎
其實王崇仁在國小時就有接觸程式設計的經驗,一開始他先利用微軟的FrontPage軟體,製作了自己的網站,後來他看到別人的網頁,呈現許多的效果,例如,字體可以設定大小,甚至跑馬燈等,才知道原來那是用HTML寫出來的,於是開始學習HTML,爸爸也會買書給他看。王崇仁說,從小到大,他的電腦知識都是靠自修。

受到同學的影響,開始專注於程式開發
剛上大學時,其實王崇仁就跟一般大學生一樣,不知道自己將來要做什麼,甚至上課也都不專心聽講。直到大二時,有一天他在系上的電腦教室,看到一位同學鄧暐敦坐在電腦前,好奇地走過去看,想知道對方在做什麼?結果發現這個人正在翻譯英日文的電腦書,並且是利用自己開發的翻譯系統在工作。

王崇仁覺得很了不起,於是便詢問他,這套系統是用什麼程式語言寫的?鄧暐敦說,是用Python,因此他便開始學習這套語言,還特地買了一本Python的原文書來看。從此,他便熱衷於學習程式設計。

而在學習程式語言的過程中,每當遇到困難,王崇仁都會去請教鄧暐敦,後來他說,其實有問題可以上Google查詢,幾乎所有的解答都可以在上面找到。因此,他開始學習如何使用Google來解決所碰到的難題,例如,在欲查詢的字串加上雙引號,可以得到更精確的搜尋結果等。而他的經驗是,Google真的可以解決95%以上的問題,所以他得到了一個結論──要學程式語言,必須先學會使用Google查詢。也因為這樣,現在只要有學弟、妹來問他關於程式設計的事情,他也會先請這些人去網路上尋求解答。

除了熱衷程式設計,也喜歡拍照
由於王崇仁認真學習程式設計,在大學時就發展到很不錯的程度──他自己利用Python寫出了一套選課系統。他說,由於大學有些課程非常熱門,所以很難選到,而一些網路上可以下載到的滑鼠連點程式,又不好用,所以才會想開發這套系統。他保證,只要使用他這套程式,絕對選得到課。

而除了程式設計之外,他也喜歡拍照,還買了單眼相機,他會將自己認為拍得好看的照片,上傳到國外一些專門出售照片的網站,例如Shutterstock等拍賣,但因為這類網站在國外有好幾個,而每個網站的分類排序又不一樣,所以要分開上傳時就很麻煩,於是他寫了一套叫Micro agent的程式,它的功能是可以去搜集這些網站的關鍵字,並搜尋前一千張熱賣的照片,然後利用演算法去分析,最後主動將想上傳的照片依照這些網站的分類分好。

不斷創造練習英文的機會,增加自己的國際競爭力
王崇仁提到,想當個程式開發者,英文能力一定不能太弱,至少在讀跟寫方面要沒問題。因為在臺灣,程式設計的相關資源沒有國外豐富,所以想要習得更高的技巧及觀念,必須要到國外網站去找尋資源。

談到這裡,他在大學時有個有趣的小故事。他立志朝國際發展,因此知道英文的重要性,所以無論什麼作業,他都全部用英文去寫。因為他的想法是,這些老師都是留學回來的,所以他天真地認為,只要用英文交作業,那些老師就會順便幫他訂正文法。但結果是,作業發回來只有分數,根本就沒有幫他訂正,那時他有些失望。

雖然他想到的這個學習方法不管用,但他還是不斷找機會學習英文。例如,他只看原文書,遇到不懂的單字或片語,一開始會去查中英字典,但到後來都只看英英字典了,他說這樣學英文才會快。而他在考研究所時,自傳也是全部用英文寫的。由於持續練習英文,目前他的英文程度已經是不錯了。他笑著說,現在回頭去看大學時寫的那些作業,心裡都會想,天啊,這種文法當初怎麼可能寫得出來。

而他希望有一天,當國外有人邀請他上臺演講時,他可以用流利的英文演講。另外,因為他在大學就立志當獨立開發者,但他知道自己沒錢找別人幫他行銷,所以大學所修的輔系,他選擇了行銷系,他說念行銷對現在推廣他的App很有幫助,例如訂價策略,將售價訂的比其它同類型App高,是因為消費者對於價格較高的商品,都會有品質較好的想法。而在提高售價後,下載次數的確成長了不少,這些技巧都是當初念行銷系學來的。

堅持理念做自己,不接外包的案子
Ollix工作室成立至今,雖然有許多大企業找他們合作,甚至連政府機關都有,但都婉拒了。因為如果接受這些案子,那麼就會有時間上的限制,這跟他們的理念不符合。他們寧願多花一些時間讓App的品質更好,也不願意因為期限的關係,讓他們覺得不夠好的作品匆促上架。

而在程式開發上,王崇仁說,他們是比較狂熱的工作者,如果碰到問題,就會不斷的去思考如何解決,因此通常在一天之內就可以處理完。

最近,他們又有一套新的App上架了,這是一套iTunes的歌詞播放軟體,名為Music & Lyrics,它的功能是在播放音樂時,會自動上網下載歌詞,而特別的地方在於,這套軟體可以將簡體自動轉換成正體,他說,轉換的準確率甚至比Google的翻譯系統還高。

夢想邊工作邊環遊世界
他們的夢想是環遊世界,王崇仁說,曾經看過一個攝影師,邊旅遊邊拍賣沿途記錄下來的影片,完成了環遊世界。因此,他希望有一天也能靠著App及出售照片的收入,無憂無慮地完成這個夢想。文⊙胡仁禮

詳見

非官方統計:Android應用程式已超過20萬種

雖然Android Market建立之初應用程式數量的成長速度曾令人擔心,但隨著愈來愈多Android裝置的出爐,也吸引了更多開發人員投入Android程式的開發。



專門偵測Android Market應用程式數量的AndroLib本周的數據顯示,Android應用程式數量現已突破20萬。

Google曾在今年10月底宣布Android Market應用程式數量已突破10萬,若AndroLib的估計確實,顯示了Android應用程式數量在兩個月內就成長了一倍。

雖然Android Market建立之初應用程式數量的成長速度曾令人擔心,但隨著愈來愈多Android裝置的出爐,也吸引了更多開發人員投入Android程式的開發。Google在12月初發表Nexus S時曾表示,迄今市場上已有超過100種不同的Android裝置,且平均每天啟用20萬個Android裝置。

蘋果現仍保持應用程式龍頭位置,旗下的App Store在今年11月就提供超過30萬種應用程式,不過,隨著Android逐漸佔領智慧型手機市場,勢必會吸引更多的開發人員,先前即有多份調查報告透露開發人員最看好的應用程式平台是Android。

Gartner估計Android手機的全球出貨量在今年底將能超越黑莓機,成為全球第二大行動平台,並在2014年挑戰Symbian的龍頭位置。(編譯/陳曉莉)

詳見

2011年12月11日 星期日

Motivation
源起
I have developed a lot of programs, so alought there is no one formal description, I already have one set of naming rules. Recently, I took apart in several group-developing projects. These exprements make me feel that: something such as naming is unnecessary (even awkward) if it is hardness; but is important to list them if you need a general direction.
雖然不能稱得上非常多,但是我個人開發過的程式還算不少,所以雖然沒有很正式的規定,但是已經有自己的一套命名規則;加上最近參加過幾次團體開發的經驗,覺得這種東西,硬性規定的確沒有必要,或者說,還蠻鳥的,不過提些大方向,尤其是條列出來,還蠻重要的。

This document will list several basic naming rules, maybe a few concepts about source code writing. In addition, I will suggest some minor issues, such as indenting. But just like many other documents on Internet, do that as a natural sequence is most important.
這份文件打算條列出一些基本的命名規則,或許還會寫寫一些關於原始碼的想法,什麼地方該怎麼寫,什麼地方不該怎麼寫;還有些更無關緊要的,像是縮排要幾格?我會提些建議,但是就像其他網路上文件提過的,自己習慣還是最重要的。

Variable Prefixes
變數前置字元
Prefix Meaning Description
g global Always used on global variables. But some global variable such as those in a library but that library doesn't provide any interface to access them, because they are global only in their own library, conceptually they are local in that module. So I will use m_ as a prefix on these variables.
通常使用在全域變數上,但是有些全域變數,像是一個函式庫的全域變數,因為它只在那個函式庫中全域,在概念上,我覺得反而比較像是那個模組裡的區域變數,所以這時我會選用 m 開頭,而不是使用 g 。
m module, member You could think them as module variables or member variables. But I like conceptual explanation more personally. So whenever I name an variable, not only class member variables will be prefixed by m_. Above situation is a example. Basically, only variables which span two or more modules will be prefixed by g_.
模組和成員變數,這兩種解釋都通,但因為我個人比較喜歡概念上的解釋,所以通常在使用上,不是只有在物件中(物件才有成員變數)才會用到 m 開頭的變數,上面提的例子就是一個,基本上,會超越模組(跨模組)使用的變數我才會以 g 開頭。
s static In principle, I will use s_ on those variables which are specified by static keyword (in C/C++). Of course, this kind of variables is rare. If you have a lot of s_ varialbes, there are two possible reasons: 1. your program is very special, or 2. you make a mistake! (maybe you confuse the concept of static variable.) Besides, some people like use st_ to be a prefix of static variables. Maybe st_ comes from static, but since one character will not confuse with other prefix characters, why we use two characters?
靜態變數,原則上,使用 static 這個關鍵字(在 C/C++ 語言中)的變數,我就會使用 s 開頭,當然,這在程式中是很少使用的,靜態變數多有兩種可能,一個是程式特殊,另一個就是你寫錯了!或是搞錯靜態變數的概念,基本上應該是不常用到才對;另外也有人喜歡用 st 開頭,取自 static 吧,不過既然一個字元就不會重複了,沒什麼必要用兩個字元。
local There is usually no any prefix before local variable. Here "local" means usually the area between two braces of functions. I list a identical variable in four representations: g_foo, m_foo, s_foo, and foo.
區域變數,通常前面是不會有任何前置字元的,而這邊所謂的區域,通常在函式的兩個大括號中間。這邊列出同一個變數,用四種表示法分別為 g_foo, m_foo, s_foo, foo 。

Variables Type
變數型態
Type Meaning Description
a array 老樣子,我還是喜歡邏輯上的意義,所以同樣是 int * 的型態,如果變數是代表著一個整數陣列,就用 a 開頭,若是代表著一個整數指標,則用 p 開頭。
ch char 字元型態,我不知道有沒有人只有 c 開頭的就是了。
d double 就目前來講,我希望所有浮點數都是倍精確度,所以只有定義 d 開頭的代表 double ,而沒有指定 float 所使用的縮寫。
f flag 其實應該就是布林代數,不過 C/C++ 語言中並沒有這個型態,我個人習慣使用 BOOL 來代表這個抽象型態;其實還有另一種命名法,就是使用 b 開頭代表 boolean ,然後 f 就可以用來代表 float ,但是至少目前我打算採用。
h handle, height 如果用過 handle 這種抽象型態的人,應該知道特地定出來是有其必要的,當然,如果沒用過,就別理它了;另外在不會搞混的情況下,代表高度的變數用 h 開頭也不錯。
i index, int 通常都用來當做索引變數,或是整數變數,雖然我比較喜歡前者,但是整數實在是太常用了,所以在我的程式碼中還是蠻常採用後者。
l long 長整數。
n number 通常用來代表量的變數,配合 i 使用不錯,例如 for (iFoo = 0; iFoo < nFoo; ++i) 。
p pointer 代表某種型態的指標,通常還會配合其他的型態。
sz string end of zero 以 NULL 結尾的字串型態,通常是 char * ,至於為什麼要叫 sz ,則是學別人的,也有人用 str (因為 string ),當然,也有人只有 s 開頭的(因為沒有別的型態衝突)。
t time_t 不一定是 time_t ,代表時間的型態應該都可以使用 t 開頭的變數。
u unsigned 無號數,通常會配合其他的型態一起使用。
w width 代表寬度的變數,通常會和 h 開頭一起用。

Variable Naming
變數命名
由於除了型態和前置字元之外,剩下部分的命名就跟英文沒什麼差別了,所以也無法一一列出,在這邊只會列出一些大方向,以及建議,沒有一定,重點有兩個,首先,自己要看得懂,用起來覺得方便(簡潔),再來,就是希望別人也能一眼就看出來,不然就失去了定標準的意義了。

最簡單的,像是 i, j, x, y 還有 tmp 之類的變數,不用增加多餘的字元了。
一定要使用之前的提的前置字元和型態。
還有一套專門給 Windows Programming 的型態命名法,像是 wnd, bmp 之類的,可能有空再整理出來。
對於不在上面所列的型態(前置字元應該不會有例外才對),取縮寫的方式如下
刪母音,例如 region 可以縮成 rgn (這例子是學 MFC 的), table 可以縮成 tbl 。
取前面數個字元,例如 prefix 可以縮成 pre , binary可以縮成 bin 。
上面兩種,取意義比較明顯的那一個,像是 prefix 只取母音的話變成 prfx ?而 region 取前三個字元的話變成 reg ,太廣泛了,要想到 region 很難,我猜很多人會想到 register 吧?
有時可以多取幾個字元,像是 function 縮成 fun 或許不怎麼樣,但是縮成 func 就不錯(也有人縮成 fn 就是了)。
若是懶得想,或是都沒什麼意義,建議還是採用刪母音的方法。
最後,能短就短,不過有時為了意義要表達清楚,最後整個單字都用上了也無可厚非,看個人喜好,在這邊是建議越簡潔越好。
一個整數陣列要取成 aiFoo 還是 iaFoo 呢?我的習慣是前者,我覺得知道這個變數是一個 array 比知道每個元素是 int 要來得重要;它是一個陣列,而不是一個整數。
同理 piFoo 和 ipFoo 我也是喜歡 piFoo ,因為說到底, piFoo 是一個指標,不是一個整數。
那 paiFoo 跟 apiFoo 有什麼不同呢?前者代表一個指向(整數)陣列變數的指標;後者則是代表一個陣列變數,其中每個元素都是一個(整數)指標。這樣又有什麼不同?邏輯上不同罷了,程式碼都是 int * * ,不過在使用上會有差, (*paiFoo)[i] 跟 *(apiFoo[i]) 才是有意義的,而 *(paiFoo[i]) 跟 (*apiFoo)[i] 可能會使程式當掉。
其他的部分,就把整個變數的意義直接用英文打出來即可;取縮寫的技巧可以參考上面提的。
例如一個依據原子密度來排序的陣列,其中第 i 個元素表示第 i 個原子的密度是在所有原中子的名次,這個名次,我想用 int 就可以了,那麼這個陣列變數我會命名成 aiAtmDnstyRnk ;其中 Atm 代表原子( atom ),Dnsty 代表密度( density ),而 Rnk 代表排名 (Rank) ,至於順序則是用語言的習慣,"原子密度的排名",最後一個詞最為重要,通常在語法上是名詞,有人說英文是 rank of atom-density (rank of density of atom) ,這就真的看個人了,我喜歡把代表性的名詞放在最後,也可以放在最前,其他的順序,就真的不重要了,甚至去掉變成 aiRnk 也無妨(在不會混淆的情況下)。
再強調一次,能短就短,有時取太長,還不如在宣告的地方加個註解來得清楚。
Function Prefixes
函式前置字元
Prefix Meaning Description
i inline inline functions, which are after "inline" keyword (in C++). Because inline functions are more efficient so I create the prefix character. Then whenever I want to call some functions, I could find inline functions first for efficiency.
擁有 inline 這個關鍵字的函式,這是只有在 C++ 中才有的, C 語言並沒有。另外,使用這個函式並沒有什麼特別,我當初定的原因只是因為 inline function 執行起來比較有效率,加上這個前置字元時,我會知道呼叫這個函式會比較有效率罷了。
m module, member You could think them as module functions or member functions. But I like conceptual explanation more personally. So whenever I name an function, not only class member functions will be prefixed by m_. Even some public class member functions, I wouldn't use m as their prefixes. Only pretected and private class member functions are prefixed by _m_. Besides, some functions in a library, although they are not class member functions, if that library doesn't provide a interface to access these functions (so-called module function), then I would use _m_ as their prefixes.
模組和成員函式,這兩種解釋都通,但因為我個人比較喜歡概念上的解釋,所以通常在使用上,不是只有在物件中(物件才有成員函式)才會用到 m 開頭的變數,事實上,在物件中若是 public 的成員函式,我依然不會加上 m 的前置字元,只有受保護的成員函式( protected, private )我才會用;而在某些函式庫中的函式,就算不是一個物件的成員函式,但是若是這個函式庫沒有提供此函式的介面給外界呼叫,如同 m 的變數一樣,我稱之為模組函式,應以 m 開頭。
s static In principle, I will use s_ on those functions which are specified by static keyword (in C/C++).
靜態函式,原則上,使用 static 這個關鍵字(在 C/C++ 語言中)的函式,我就會使用 s 開頭。
other There is usually no local functions. So global (so-called "other") functions are the most common. I list a identical function in four representations: _i_foo(), _m_foo(), _s_foo(), and foo().
通常函式是不分全域還是區域的,所以這邊所謂的其他,就是一般的全域函式。這邊列出同一個變數,用四種表示法分別為 _i_foo(), _m_foo(), _s_foo(), foo() 。

函式的前置字元應該是我自己定的,至少,我沒有參考過別人的文件;至於之所以變數的前置字元是 m_ 開頭,而函式則由 _m_ 開頭,這多一個底線的原因,主要是因為排序的關係,我希望同類的函式能排在一起,而是沒多這個底線的話,那麼所有模組函式可能會和一個 m 開頭的一般函式排在一起,我覺得很醜,所以才這樣定。

Function Naming
函式命名
函式命名和變數命名大同小異,除了函式不要求型態之外(沒看過有人要求,我目前也覺得還好),還有我自訂的函式前置字元,應該沒什麼特別的,但是下面還是列出一些在函式命名和變數命名上的差別。

通常在 C 中,大家喜歡全小寫的函式名,中間用底線分開;例如 get_car_speed() 。
通常在 C++ 中,大家喜歡用大寫的字來分隔單字;例如 GetCarSpeed() 。
通常在 JAVA 中,大家喜歡用小寫開頭,但是又用大寫的字來分隔單字;例如 getCarSpeed() 。
函式通常最重要的意義在動詞,放在最前面,像上面的例子"取得車子的速度",用這個順序幾乎沒有人會有意見。
函式取縮寫的習慣似乎不怎麼普遍,完全不縮寫也蠻常見的,不過還是可以取,像是 rgb2hsv() (原本應該是 convert_red_green_blue_format_to_hue_saturation_value_format() 才對);其中 red 等縮成 r 蠻直覺的,而用 2 取代 to 更是常見;然後利用 to 的意義,進而省略 convert 也蠻直覺的。
上面的例子,雖然很特別又有點極端,但是又說明了一次,能短就短,何況函式的註解相當重要,所以與其取一個長到懶得打的函式名,還不如在旁邊寫一個詳細的註解。
Indent
縮排
使用跳格 (Tab) 字元當作最基本的單位。
跳格建議設為 8 個空白,很多人會不習慣,但是空白越多,在視覺上越輕鬆,用一用就會習慣了。
函式的左大括號,必須換行,例如

void foo() // here need a new-line
{
...;
...;
...; // here need a new-line, too
}
迴圈 (for, while) 以及條件 (if, switch) 的左大括號,皆不用換行,例如
for (...) { // watch here, only one new-line
...;
...; // here need a new-line, too
}
while (...) { // watch here, only one new-line
...;
...; // here need a new-line, too
}
if (...) { // watch here, only one new-line
...;
...; // here need a new-line, too
}
if (...) { // watch here, only one new-line
...;
...; // here need a new-line, too
} else { // watch here, only one new-line
...;
...; // here need a new-line, too
}
switch (...) { // watch here, only one new-line
case ...: // no any word after colon
...; // here need a tab
break; // here need a new-line, too
default:
...; // here need a new-line
}
結構 (struct) 宣告的左大括號,必須換行,例如
struct // here need a new-line
{ // here need a new-line, too
double d;
int i; // here need a new-line
};
下面是我常用的程式碼,順便提一下 typedef 應該如何使用
typedef struct _DOUBLEandINDEX // the struct name is a suggestion
{
double d;
int i;
} DOUBLEandINDEX, * LPDOUBLEandINDEX; // here are two types
上面有提到結構的命名,通常跟其變數或是函式命名的原則差不多,但是如果要用來當一種型態的話(使用 typedef 定義過後),我建議全部用大寫;至於上面名稱中使用小寫的 and ,是為了分隔前後兩個單字,這樣可以一目了然這個結構倒底長什麼樣子;記得在 struct 後面的名稱中加個底線(也有人喜歡加 tag 這個單字,小寫),這樣後面才能使用。
物件 (class) 宣告的左大括號,必須換行,例如
class Car // here need a new-line
{ // here need a new-line, too
protected: // no tab, need a new-line
BOOL m_fDoorClosed;
int m_iSpeed;
public:
void CloseDoor();
void OpenDoor();
void SlowDown(int iDiff);
void SpeedUp(int iDiff); // here need a new-line
}
除了縮排外,上面提到物件的命名,跟結構不同,我建議首字大寫,其餘字母小寫,分隔時也使用大寫,例如 class MyCar ;中間的程式碼我沒有省略,主要是因為我想提醒一下之前的命名法,實際上使用大概就像這樣。
我要提一個自己訂的名詞,單行縮排(英文就先用 inline indent 好了,所以也可以叫行內縮排),因為我雖然有看過別人這樣縮,但是沒看過文件提起過,下面用實例來說明比較方便
double * adDnsty = NULL; // density of each atom, need to free
int i; // iteration variable
int iMax = -1; // index of maximum rank
int iMin = -1; // index of minimum rank
double * adDnsty = NULL; // density of each atom, need to free
int i; // iteration variable
int iMax = -1; // index of maximum rank
int iMin = -1; // index of minimum rank
看得出上面兩塊的差別嗎?我在每行中,都加入了不等的跳格鍵,為了什麼?只是為了方便閱讀而已!通常一個變數的宣告,習慣好的話,會有四個部分,型態,名稱,初始值,以及註解;上面第二塊的程式碼,就有分別對這四塊部分做縮排,現在我把跳格鍵畫出來再看一次

double *^t adDnsty = NULL; // density of each atom, need to free
int^t ^t i;^t ^t // iteration variable
int^t ^t iMax^t = -1;^t // index of maximum rank
int^t ^t iMin^t = -1;^t // index of minimum rank
上面有底線的部分,就是跳格鍵,不過有些地方是連續兩個跳格鍵,所以我會加上 ^t 的記號;而那些沒有底線的空格,就是一個空白鍵而已。不難看出來,我只對四個部分做縮排(所以一行有至少有三個跳鍵)。

而像 double * ,雖然中間有空白,但我認為整個(包括星號)才算是型態,所以就用空白;或是 = NULL ,因為大家都有 = 這個字元,所以只要前後都用跳格鍵,那這邊就算用空白也會很整齊,何必讓整行又變得更長?

另外像是 int i 那行,沒有初始值,或是 double * 比其他型態都多了一格跳格,這時就會發現 ^t 的數目不太一樣,調整這跳格字元的數目就是我所謂的單行縮排,通常在變數宣告的地方使用,例如結構宣告,物件宣告,在函式開頭做區域變數的宣告等,有時可以一群一群相關的變數才對齊,否則相當費時且如果有個變數更動,全部都得更著改,反正,只要自己看起來覺得整齊就可以了。


詳見

Java Programming Style Guide

Introduction
The Java language gives you all the room you need to write code that would be very difficult for others to understand. Java also permits you to write code that is very easy to understand. Most development teams would prefer the latter.

A style guide provides provides a map so that the code generated by a group of programmers will be consistent and, therefore, easier to read and maintain. Many people do not care for the style guide offered by Sun. This document is one alternative.

This document covers most areas where there could be confusion or difference of opinion. Areas that have never been a problem in our experience are undocumented.

詳見

如何開啟 Eclipse 的行號

在使用 Eclipse 編輯 Android 程式碼時,預設是不顯示行號的,這對於程式碼維護是很不方便的。如何開啟編輯區的行號呢?請依照下述步驟操作:

由功能表選取 Windows -> Perferences。
在對話方塊中選取 General -> Editors -> Text Editors,核選 Show line numbers,最後按 OK 鈕即可。

http://blog.e-happy.com.tw/?p=750

開啟main.xml看不到Graphical Layout !!

如果匯入以前做的專案,在開啟main.xml版面配置檔時,只會出現 Design 及 Source 二個編輯模式,找不到過去的 Graphical Layout 及 main.xml 標籤了!

為什麼會這樣?
這個問題的原因是因為,Eclipse 沒有正確的判讀出這個檔案是版面配置檔,而將它視為一般的 XML,所以就直接以 xml 編輯器去開啟。

怎麼解決?
所以解決的方法很簡單,請選取要開啟的 main.xml 檔後按下右鍵,在快顯功能表選按 Open With > Android Layout Editor 即可,如此又會正常將 main.xml 版面配置檔開啟在有 Graphical Layout 的編輯模式下。

http://blog.e-happy.com.tw/?p=1196#more-1196

2011年11月29日 星期二

102個常見問題收集整理(FLASH初學者參考)

說明:該部分整體為一些基本的常見問題的收集,不一定做到完整,盡力為初學者解決必要的常見問題,至於錯誤的地方請提出以便修改.該整理貼版權歸閃吧論壇所有,在此表示感謝

1,FLASH是什麼?
FLASH電影是專為網頁服務的畫像或動畫(當然,也可用於其他用途)。主要含有向量圖形,但是也可以包含導入的點陣圖和音效,還可以把流覽者輸入的資訊同交互性聯繫起來,從而產生交互效果,也可以生成非線性電影動畫。該動畫可以同其他的WEB程式產生交互作用。網頁設計師可以利用FLASH來創建瀏覽控制器、動態LOGOS、含有同步音效的長篇動畫、甚至可以產生完整的、富於敏感性的網頁。

2,怎樣做一個簡單地FLASH動畫?
首先,打開你的FLASH軟體,繪製一個圓形(左面地圓形工具可以直接繪製),然後按F8添加為一個Symbol,再圖層第十影格地位置按F6鍵添加一個關鍵影格,並適當移動該Symbol的位置,最後在第一影格位置點滑鼠右鍵選擇Motion就行了.

3,什麼叫向量圖?
向量圖可以任意縮放而不影響Flash的畫質,點陣圖圖像一般只作為靜態元素或背景圖,Flash並不擅長處理點陣圖圖像的動作,應避免點陣圖圖像元素的動畫。

4,如何迅速地對齊不同Frame中的物件?
用 Inspector “Ctrl+Alt+I” 直接輸入座標。
或是工具欄〉〉視窗〉〉面板〉〉排列“Ctrl+K” 調出排列面板來。圖例

5,怎樣調節一個Symbol/MC地透明度?
選中Symbol/MC,選項欄找到Modify(修改) 〉〉 Instance (實例)〉〉Color effect (效果)〉〉 Alpha(透明度) 調整就可以了

6,做好地Flash放在html上面以後,它老是迴圈,怎麼能夠讓它不進行迴圈?
最後一個影格地Action設置成Stop(停止)

7,怎樣給我的FLASH做一個預載入地LOADING?
用Action語法地if frame is loaded來實現,新建一層,這層專門放Action,
第一影格,
ifFrameLoaded ("場景", frame) {//假如場景中地影格數已經載入
goto and play() //跳至並播放某某影格(自己設定)
}
第二影格,
goto and play("場景1", 1)//跳至並播放第一影格迴圈
再加上一個load地MC迴圈播放在這兩影格的中間,就OK了。

什麼?你要非常詳細地LOADING?那就當這個源碼吧,夠詳細了.
源始碼碼下載

8,怎樣點擊一個按鈕打開一個頁面html而不是一個影格.
製作一個按鈕,上面地AS直接寫:
on (release) {
[$nbsp][$nbsp][$nbsp][$nbsp]getURL ("***.html");
}
這裏地***.html就是你要打開地頁面檔案名,當然也可以是某某URL位址

9,在按鈕地OVER禎放置了一個很大地MC,為什麼要沒有點擊到按鈕滑鼠就變成了手地狀態?
按鈕真正啟動區是在HIT(按下) 影格地位置,如果想控制按鈕的位置為一定值,可以在HIT影格繪製一個透明地圖形來判斷.

10,如果遮罩滑鼠右鍵?FS命令都是什麼意思?
fscommand ("fullscreen", "true/false");(全螢幕設置,TRUE開,FALSE關)

fscommand ("showmenu", "true/false");(右鍵功能表設置,TRUE顯示,FALSE不顯示)

fscommand ("allowscale", "true/false");(縮放設置,TRUE自由縮放,FALSE調整畫面不影響影片本身的尺寸)

fscommand ("trapallkeys", "true/false");(快捷鍵設置,TRUE快捷鍵開,FALSE快捷鍵關)

fscommand ("exec");(EXE程式調用)

fscommand ("quit");(退出關閉窗口)

11,在FLASH中的字體總是很模糊,用變清晰地辦法嗎?
寫好文本以後CTRL+T打開文本設置面板,在最後地文本框選項那裏框選使用設計字體就行了.(注意最好使用宋體,尺寸為12或者8,這樣比較工整)

12,我想做一個MTV,怎麼導入聲音呀?
很簡單,CTRL+R導入你地音效檔案就行了.

13,我製作地MTV聲音和歌詞總是不同步.
CTRL+F打開禎控制面板,右邊找到聲音選項卡,調整聲音地同步效果為STREM(音訊資料流程)模式就行了.

14,FLASH地發佈設置都有些什麼?透明背景怎樣設置?
圖解圖1圖2圖3

15,怎樣可以做出很漂亮地字體特效?
用第三方軟體Swish和Swfx.

16,我在ACTION面板地高級模式為什麼字體總是很小?


17,如何載入一個SWF檔
loadMovieNum地技巧
添加一個空地MC。實體名為ok,ACTION:
loadMovie ("dr/test.swf", "_root.ok");

控制這個MC的位置,大小等相對屬性(Property)就會影響調入SWF的位置和大小。
setProperty ("mc", _xscale, "****");
setProperty ("mc", _yscale, "****");
setProperty ("mc", _x, "****");
setProperty ("mc", _y, "****");
setProperty ("mc", _Alpha, "****"); ............

18,如何導入一個背景透明度效果比較好地點陣圖?
推薦使用PNG格式(FIREWORK),FLASH對PNG點陣圖地融合透明效果支持相當好。


http://nncho.pixnet.net/blog/post/27623656


本文章來自於神魂顛倒論壇 http://bbs.flash2u.com.tw
原文網址:http://bbs.flash2u.com.tw/dispbbs_180_9813_1_1.html

說明:該部分整體為一些基本的常見問題的收集,不一定做到完整,盡力為初學者解決必要的常見問題,至於錯誤的地方請提出以便修改.該整理貼版權歸閃吧論壇所有,在此表示感謝