Pages

Subscribe:

Ads 468x60px

2011年12月13日 星期二

報告:Android惡意軟體數四個月增加472%

Juniper Networks認為,Android不一定比iOS或其他平台危險,Google對Android平台線上軟體商店採取開放的態度可能是惡意軟體成長迅速的主要原因。



瞻博網路(Juniper Networks)發表一份統計報告,顯示最近四個月中針對Android開發的惡意軟體大量增加,七月以來總共成長472%,該公司將其原因歸咎於Google開放式的應用軟體商店上架模式及Symbian、Windows Mobile平台駭客轉移到Android平台。

該份報告認為,Google對Android平台線上軟體商店採取開放的態度可能是惡意軟體成長迅速的主要原因。任何人僅需支付25美元就可以在Google官方的Android線上軟體商店上架,而且不需要經過任何審查。

Juniper Networks先前的一份行動裝置惡意軟體趨勢報告顯示,自2009到2010年夏季,Android的惡意軟體成長400%。最新報告則顯示,今年十月及十一月是Android平台有史以來惡意軟體成長最快的階段,所蒐集的惡意軟體樣本數十月份比九月份就成長110%。

除了數量增加之外,Juniper Networks指出,惡意軟體的結構也日趨複雜。今年初才出現利用Android平台漏洞取得root權限、進而可以在背景中執行、更新的惡意程式,現在幾乎所有的惡意軟體都具有這種能力,原因在於90%的Android設備都存有此類漏洞。

報告指出,這些惡意軟體中有55%會竊取通訊記錄、所在位置等足以辨識個人的資料,有44%會在暗中傳送簡訊導致用戶必須支付高額費用,例如簡訊抽獎、投票等。

相較於Android平台惡意軟體大量成長,Symbian及Windows Mobile平台的惡意軟體成長則日漸趨緩,該份報告認為這些平台的惡意軟體開發人員可能轉向Android平台導致成長速度如此迅速。

Juniper Networks認為,從作業系統的安全性來看,Android不一定比iOS或其他平台危險。但Android採用開放式線上軟體商店,加上缺乏事先審核及數位簽署等機制,導致駭客可以輕易散佈惡意程式。(編譯/沈經)

2011-11-18

詳見

Adobe放棄行動版Flash,轉進HTML 5

Adobe互動開發部門總經理Danny Winokur在官方部落格宣布這項產品調整策略,他表示,未來只提供安全更新,不再針對個別裝置推出新版Flash Player。



Adobe將停止開發行動版Flash Player,將資源轉投入HTML 5工具的研發。Adobe互動開發部門總經理Danny Winokur在官方部落格宣布這項產品調整策略,他表示,未來只提供安全更新,不再針對個別裝置推出新版Flash Player。

Adobe首席產品經理Mike Chambers也在部落格上坦言,Flash未獲主流行動平臺蘋果iOS的支援,導致Flash在行動裝置的普及率遠低於桌面裝置,因此,Adobe改將研發資源投入目前獲得行動裝置普遍支援的HTML 5技術。

不過,Adobe並未撤出行動市場,Danny Winokur表示,未來將集中資源來協助開發者,運用Adobe AIR技術封裝Flash應用,以發布成行動裝置上的原生應用程式。另外,Adobe也已投入Flash Player 12的開發,現已完成CSS著色功能,未來也會推出Flash和HTML 5的轉換機制。文⊙王宏仁
2011-11-21

詳見

紅陽科技線上金流平台交易資料外洩!

包括交易店家、消費者姓名、電話、訂單編號、交易金額、交易時間、IP位置,以及信用卡部份號碼等即時的交易資料,都可在網路上查詢得到。



提供第三方線上支付服務的紅陽科技線上交易平台傳出資料外洩,包括交易店家、消費者姓名、電話、訂單編號、交易金額、交易時間、IP位置,以及信用卡部份號碼等即時的交易資料,都可在網路上查詢得到。紅陽科技已經緊急修補網站漏洞,並預計在周三發佈新聞稿對外說明。

周日(12/4)晚十點鐘左右在Mobile 01論壇上出現一篇以「<01獨家新聞>線上交易平台漏洞,洩漏個人購買資料~」為題的文章,文章以網路截圖指證歷歷表示,此漏洞資料是即時更新的,作者並表示之前買完東西馬上就有人(暗指詐騙集團)來電說繳款失敗!

紅陽科技協理李宏鑫表示,早上在得知此事後,發現是Windows伺服器的安全漏洞所致,因此已立即進行修補;另外也已經請Google刪除搜尋的頁庫存檔資料。對於漏洞詳情李宏鑫未多所說明,但他坦承,此事件讓公司可能評估改用Linux。

對於有多少資料外洩,紅陽並不確定,但表示,早上發現時Google庫頁存檔資料約可查到300筆;iThome記者在下午四點左右查詢時約可查到近200筆。另外,根據Mobile01上署名為ient的網友表示嘗試改code之後,可以追朔資料到11月份。如果真如ient所言,那麼資料外洩的數字將遠比上述數字更加嚴重。

在後續處理方面,紅陽預計請客服專員向合作店家直接說明,而消費者方面則會透過e-mail或簡訊通知,另也會在周三發佈新聞稿對外說明。

據李宏鑫表示,公司合作的商家約3000家左右。不過,依據紅陽科技網站所提供的公司介紹,2005年時所提供的「 e`safe 代收代付金流服務」機制全台灣已有超過 4500 家企業及商家簽約採用,已有超過200萬人次的消費者使用過MSTS機制支付其日常消費。2005年每月透過「MSTS全方位金流服務」的流量高達 2.5億元,預估金流流量於年底前將達到每月 5億元。

李宏鑫表示,洩露的資料並未包含信用卡的完整資料,因此消費者不用擔心因此會被盜刷。另外,他也強調紅陽在資安上的重視,並表示紅陽已通過Visa及Master Card的PCI DSS認證。
2011-12-05

詳見

Android程式下載突破100億次

Android Market在去年7月創下10億次的程式下載,今年3月達到30億次,代表今年以來Android Market每月平均都有10億次的程式下載數。



Google周二(12/6)宣布,Android Market的應用程式下載量已於上周末超過100億次,為了慶祝此一里程碑,Google與開發人員協議讓Android用戶可以0.1美元添購多種受歡迎的程式,此一慶祝活動將維持10天。

Android Market在去年7月創下10億次的程式下載,今年3月達到30億次,代表今年以來Android Market每月平均都有10億次的程式下載數。

從周二開始,Android Market每天都可看到售價只要0.1美元的程式,目前上線的有Asphalt 6 HD、Color & Draw for Kids、 Endomondo Sports Tracker Pro、Fieldrunners HD、Great Little War Game、Minecraft、Paper Camera、Sketchbook Mobile、Soundhound Infinity及SwiftKey X等,10天內還會有其他優惠程式上線。

Android Market程式下載數的爆炸性成長歸功於Android手機的市佔率。市場研究機構Canalys今年第二季的調查顯示,Android手機出貨量已佔全球智慧型手機48%的比例,蘋果的iOS則佔19%。

目前Android Market約有超過30萬的應用程式,蘋果App Store的程式數量則超過50萬,同時App Store在今年7月的程式下載量就已突破150億,即使的應用程式數量與下載量現在皆領先Android Market,但市場認為在Android裝置數量不斷擴大的情況下,Android程式下載量很快就會超越iOS程式。(編譯/陳曉莉)

詳見

GFK:8月Android已佔台灣智慧型手機銷售量8成

8月手機零售通路銷售統計,智慧型手機銷售量已佔整體手機46%,智慧型手機銷售中高達8成為Android手機,其次是約1成的iPhone與不到5%的Symbian S60。



GFK對台灣零售通路8月調查指出,Android手機佔該月智慧型手機整體銷售量已達8成,在手機零售通路銷量佔比創下新高,遠超越iOS、Symbian等其他手機平台。

該調查是以台灣零售通路為對象,調查通訊行、電信通路與3C資訊通路手機銷售資料,不同於IDC、Gartner是以手機業者為對象,研究各家業者手機出貨至通路的數量。

根據GFK的8月統計資料,該月所有手機銷售約71萬支,其中智慧型手機共賣出33萬支,佔所有手機銷售量的46%,在手機業者、電信業者力推下,智慧型手機銷量已接近一半市場。智慧型手機銷售以Android遙遙領先其他平台,8成智慧型手機銷售為Android手機。

GFK分析師吳柏毅表示,Android手機銷售成長除了品牌手機、電信業者的支持外,還與其他平台在該季的表現下滑有關,包括微軟芒果機在8月尚未推出,蘋果尚未發表iPhone 4S,加上Symbian銷售下滑,都促使Android手機在通路銷售上取得高佔比。

該月智慧型手機平台表現,蘋果iPhone 4以1成左右的比重居次,Nokia的Symbian S60手機佔比不到5%,其他平台如微軟Windows手機、RIM黑莓機各自佔比不到1%。

吳柏毅表示,從季度資料來看,Android在第二季已拿下6成5的智慧型手機銷售,第三季雖然尚未完成統計,但8月Android手機銷量站上新高之下,第三季有機會達到7成以上。

智慧型手機銷售中,高階機種因規格、功能的豐富性吸引消費者青睞,約佔整體智慧型手機銷售的4成,而價位在5千到9千之間的入門級智慧型手機也達到2成左右。顯示本地消費者對智慧型手機喜好呈現高階、入門兩端發展。

除了GFK最新資料之外,統計手機業者出貨給通路數量的IDC,第二季報告顯示Android手機出貨已將近智慧型手機的7成,第三季因Windows手機、iPhone尚未推出新品,IDC預期Android手機出貨可能繼續增加。


詳見

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