PIXNET Logo登入

香醇咖啡

跳到主文

拉哩拉雜紀錄一些網路上蒐集來的資料~

部落格全站分類:不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 3月 21 週一 201110:24
  • 專有名詞小常識Part 1

AJAX
AJAX全稱為「Asynchronous JavaScript and XML」(非同步JavaScript和XML),是一種創建互動式網頁應用的網頁開發科技。
AJAX不是指一種單一的科技,主要包括了 XHTML+CSS+Javascript,利用XMLHttpRequest與 Web Server 進行非同步資料交換。
(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(1,381)

  • 個人分類:電腦和網際網路
▲top
  • 2月 25 週五 201114:45
  • 什麼是OEM,ODM,EMS與CMMS?

OEM: Original Equipment Manufacturing,接受客戶完全指定,按原圖設計代工製造。
ODM: Original Design Manufacturing,為客戶提供設計、製造代工的服務。
EMS: Electronics Manufacturing Service,提供經濟規模及全球各地的電子專業代工製造服務。
CMMS: Component Module Move Service,是郭台銘首創的代工模服務模式。分別為JDVM(Join DeVelopment Manufacture)共同設計開發製造與JDSM(Join DeSign Manufacture)共同設計服務製造。
(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(24,370)

  • 個人分類:電腦和網際網路
▲top
  • 2月 25 週五 201114:30
  • 什麼是物聯網?

以「智慧地球」、「感知生活」為概念所衍生出來的物聯網(Internet of Things,IOT),其含括的範圍十分寬廣,包括智慧電網、智慧交通、智慧物流、智慧家居、環境安全偵測、工業自動化升級、智慧醫療、智慧農業行動商務等業務。
轉載自:http://money.chinatimes.com/news/news-content.aspx?id=20110225001479
(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(488)

  • 個人分類:電腦和網際網路
▲top
  • 10月 08 週五 201008:59
  • 痘痘告诉你身體哪裡生病了,真的很準,给自己或關心的人收藏




額頭痘VS肝臟:


如果你的額頭總有大粒痘痘不斷,那說明你的肝臟已經積累了過多毒素,不規律的生活、晝夜顛倒、長時間 熬夜都會讓肝臟不能在正常時間(夜裏10 點~12點)工作,毒素就會積累下來。 長效建議:讓肝臟按時工作(壓力大,脾氣差,造成心火和血液迴圈有問題。 應早睡早起,多喝水。) 晚10點按時上床睡覺,讓身體進入休眠狀態。 哪怕睡不著,就是放鬆狀態下也有利於肝臟排毒工作。 表示心火過旺,脾氣不好。中醫研究發現,長期思慮過度、勞心傷神的人,額頭上常常會長出痘痘來,一般此類人心理壓力比較大,脾氣也不太好,一點小事就容易 放在心上,也容易斤斤計較,工作中不乏細緻,但生活中卻易流於瑣碎,從而引起心火旺盛、心火上炎。 中醫認為,五臟當中,心為君主之官,主理人體的神志和血脈功能,如果多思多慮的話,必然耗傷心氣,容易出現入睡困難、睡中多夢、晨醒過早等睡眠問題,也容 易造成氣血運行阻滯,出現心悸、胸悶、氣短等症狀。這類情況的降火應以養心為先。 心是體內的主宰,配合其他所有臟腑的功能活動,它推動血液輸送全身,並統管全身的精神、意識、思維活動。 養心鍛煉應注意“三適”:適時,時間最好安排在清晨或傍晚天氣涼爽時;適量,提倡輕鬆運動,時間控制在20~30分鐘左右,強度適當減小;適地,儘量到戶 外運動,選擇公園、湖邊、庭院等陰涼通風的地方。應注意勞逸結合、適當休息,養成早睡早起的習慣,睡眠充足,特別是要儘量改變多思多慮的生活習慣,尋找一 種適合自己的放鬆心情、舒緩壓力的方式。


 


鼻翼痘VS胃:


當鼻翼處長出痘痘 時,除了此處油脂分泌旺盛的原因外,還是胃火過大、消化不良的表現。如果鼻頭還有輕微脫皮現象,表明血液迴圈也不是很好。另外,經常便秘和胃脹氣的人也容 易長鼻痘。 長效建議:少食刺激性食品 (與卵巢機能或生殖系統有關。不要過度縱欲或禁欲,多到戶外呼吸新鮮空氣。) 減少肉類攝取,謝絕火鍋、冷食和辛辣食品。食物和水都要用溫熱的,以免刺激胃液分泌過多導致胃酸,胃酸也會讓胃火加劇。 一般由於皮脂分泌較多。也可能跟卵巢機能或生殖系統有關。定要及時清除毛孔污垢。另外,不要過度縱欲或禁欲。多多享受健康自然的環境。


 


唇周痘VS腸:


便秘或者腸熱、吃了太多辛辣、油炸食物是嘴唇周圍長痘的原因,當然,如果使用含氟過多的牙膏也會刺激長痘。 長效建議:舒腸助排毒 (便秘導致體內毒素累積,或是使用含氟過量的牙膏。 應多吃高纖維的蔬菜水果,調整飲食習慣。 若長在人中部位,則可能是泌尿與生殖系統問題,女性可能會有白帶問題,男性則常出現頻尿,一定要就醫治療。 ) 服用一次輕瀉劑幫助緩解症狀,可以配合腹部按摩幫助排出宿便。連吃幾天富含纖維的食物疏通腸道,問題就迎刃而解。


 


印堂痘VS心臟:


出現在雙眉中間的痘痘最不能輕視,回憶一下是否最近經常出現心悸、胸口悶的症狀,當心臟活力減弱時這裏才會長痘。 長效建議:注意保護心臟。遠離劇烈運動,增加睡眠,遠離煙酒和刺激,同時儘快諮詢心臟方面的專家,找出問題所在。


 


發際痘VS毛孔:


因為卸妝沒卸乾淨,或者清潔時忽略了這個小細節,造成角質太厚,毛孔堵塞,容易在發際或眉間形成細小痘痘。 長效建議:清潔照顧邊緣細節 每天潔面時注意發際邊緣的清潔,及時清除會堵塞發際周圍毛孔的毛孔代謝物。


 


左臉頰痘VS血液迴圈:


左臉頰長痘說明你的血液排毒能力降低,有可能是肝臟出現了問題或是血液迴圈出現了問題。 長效建議:加速血液迴圈 (肝功能不順暢,有熱毒。 注意作息正常,保持心情愉快,該吹冷空氣就吹,不要讓身體處在悶熱的環境中。 ) 不要讓身體處在悶熱中,可以用溫度略低於體溫的水洗澡,多到戶外活動,吃一些涼血的食物,如絲瓜、冬瓜、柿餅、綠豆等。 一般表示肝氣鬱滯,壓力過大。如果平時壓力過大,又沒有學會適當調節、又沒有個給自己“解壓”的人,常常會感到莫名其妙地心煩意亂,甚至為一點點小事而暴 跳如雷,這是肝氣鬱滯的表現。 應該照照鏡子,看看舌頭是不是有點發紫發暗呢?中醫理論認為,長期的情志不抒,也會影響肝的疏泄功能,如果此時你發現在左側臉頰長出了痘痘,這就提醒該注 意放鬆心情、消除緊張感了。在中醫理論中,肝不僅管理著情志,更有藏血的功能,如果長期情志不暢,造成氣機鬱滯且不及時調整的話,還會影響到女性的月經, 甚至生殖生育的過程。這類情況的降火應注重呵護肝臟。 肝是身體裏藏血的臟器,它努力工作,脾胃功能就能正常,氣、血、水的運行正常。養肝就要梳理它的性情,性情急躁只能助長它的暴脾氣,所以在精神上要保持柔 和、舒暢,力戒暴怒和抑鬱。這樣就不會讓肝氣過旺,肝可以維持正常的疏導功能。 淩晨1~3點,是肝最強的時間,我們能做的就是睡眠,給肝創造一個良好的工作環境;肝最弱的時間是下午1~5點,所以建議把辛苦的工作儘量堆在上午。 肝怕勞累,雖然一天中任何時候都應該注意休息,但下午1~5點這段時間更重要。如果必須工作,肝臟在體表開竅於眼睛,至少每隔一小時讓眼睛休息5分鐘。


 


右臉頰痘VS肺:


右臉頰痘痘是肺部有炎症的反映。如果你肺火上升、喉嚨乾燥、痰多咳嗽,留意一下右臉頰痘痘。 長效建議:禁食易敏食物 (肺功能失常。 注意保養呼吸道,儘量避免芒果、芋頭、海鮮等易過敏的食物。 ) 停止吃海鮮和芒果、酒類食物等易敏食物,過敏會讓你的氣管、支氣管、肺部更加不適。 一般表示有肺火蘊熱,肺氣不宣等的“肺火型”證候。不過這種痘痘多在秋天出現,而且多會伴有咳嗽、咽癢、咽痛、有痰等症狀。肺處於五臟最高的位置,被稱為 華蓋,它主司呼吸運動,從自然界吸入清氣,又把體內的濁氣排出體外,是心臟的輔臣,幫助新陳代謝順利進行。這類情況的降火不妨以滋補潤肺為主。上午7~9 點是肺最強的時間,有什麼運動最好放在這會兒做。在肺最有力的時候做些有氧運動,比如慢跑,能強健肺功能。肺最脆弱的時間是晚上9~11點,所以我們經常 發現晚上咳嗽得更厲害些,建議晚飯後口中含一片梨,到睡前刷牙時吐掉。潤肺最適合吃百合,百合性甘微苦,擅長潤肺止咳,清心安神,對肺病治療有很好的幫 助。   太陽穴痘VS膽囊 是不是吃了太多的工作餐、盒飯、速食食品?如果太陽穴周圍長痘,那是你的膽汁分泌不足,因為吃了過量的油脂而讓膽囊負擔加重。 長效建議:給膽囊減負。每天一杯苦瓜汁是最快捷的方法,或者食用其他瓜類,比如黃瓜、冬瓜,這些都能很好地吸收油脂。 太陽穴附近出現小粉刺,顯示你的飲食中包含了過多的加工食品,造成膽囊阻塞,需要趕緊行體內大掃除。如果不是太嚴重,也不用太擔心,要是有越來越嚴重的跡 象你最好到醫院去檢查一下為好。


 


腮邊頰痘VS淋巴迴圈:


長期肝臟負擔加重後,會在耳際、脖子和臉交界處產生痘痘,反復爆發在同一位置,上升為淋巴迴圈不暢。 長效建議:促使肝膽排毒。不可勞累,飽飲飽食,適度增加睡眠時間,讓大量供應到大腦、腸胃的血液有充分時間供應肝膽排毒。特別要減少睡前飲食的習慣,不加 重腸胃負擔。 三角區長痘: 表示可能有胃腸不適,甚至長期便秘。如果長期嗜食辛辣、油膩或嗜酒,就會導致胃腸蘊熱。 中醫理論認為,如果經常吃一些熱性食物,胃腸道中就容易積有熱邪,從而造成胃腸不通暢,傳輸功能受阻,不僅會引發消化不良、口幹、口臭、便秘等問題,而且 還容易在鼻頭、唇周及三角區周圍出現痘痘。據統計,有20%左右的便秘病人會在口角四周長痘,另外有胃病的患者也容易在口唇周圍冒出一些痘痘來,尤其是喜 甜食、偏食及不愛吃蔬菜的人。這類情況的降火應注重護腸養胃。 對於腸胃不好的人,中醫通常會建議他養成定時排便的習慣,並每天晨起即喝杯淡鹽水,早餐再喝杯牛奶,促使大腸菌產生乳酸,促進腸蠕動。另外,腦力工作者的 午餐不要吃得太飽,晚餐宜吃得清淡一些。每餐餐後吃1個蘋果,平時宜多吃菠菜、胡蘿蔔、番茄、胚芽米、橘子、地瓜等食物,多喝水,記住每天要喝足夠的 水。 如果長期嗜食辛辣、油膩或嗜酒,就會導致胃腸蘊熱。中醫理論認為,如果經常吃一些熱性食物,胃腸道中就容易積有熱邪,從而造成胃腸不通暢,傳輸功能受阻, 不僅會引發消化不良、口幹、口臭、便秘等問題,而且還容易在鼻頭、唇周及三角區周圍出現痘痘。據統計,有20%左右的便秘病人會在口角四周長痘。 有胃病的患者也容易在口唇周圍冒出一些痘痘來,尤其是喜甜食、偏食及不愛吃蔬菜的人。這類情況的降火應注重護腸養胃。對於腸胃不好的人,中醫通常會建議他 養成定時排便的習慣,並每天晨起即喝杯淡鹽水,早餐再喝杯牛奶,促使大腸菌產生乳酸,促進腸蠕動。 另外,腦力工作者的午餐不要吃得太飽,晚餐宜吃得清淡一些。每餐餐後吃1個蘋果,平時宜多吃菠菜、胡蘿蔔、番茄、胚芽米、橘子、地瓜等食物,多喝水,記 住每天要喝足夠的水。


 


下巴長痘:


一般表示體內激素失調,週期失衡。有些女 性已過三十,但“青春痘”卻依然比較嚴重,而且通常只長在下巴,還逐漸形成規律,月經來的時候長,月經結束的時候會消,如此周而復始。這主要是由於體內激 素分泌非常旺盛,變化的幅度比較大,內分泌失調而引起的。 從現代醫學的角度看,青春痘多由雄性激素分泌過盛所致,而女人年過三十,雌激素分泌減少導致對雄激素的制約減弱,造成雄激素相對過盛而起痘。這類情況最好 的解決方法是補充激素。但是,不論是合成類激素、植物性激素還是類激素物質,在改善症狀的同時往往會抑制人體自身激素的分泌,不可避免地使身體產生依賴 性。而人們過量的補充和自身分泌的抑制,往往又造成雌、孕激素等多種激素間失衡,引發內分泌失調,出現月經紊亂、乳腺纖維瘤、子宮內膜異位、息肉,甚至乳 腺癌、子宮癌等嚴重疾患。 內分泌失調。要少吃冰冷的東西。每個月在月經來潮前後下顎長出一顆顆小痘,這區域的皮膚變化與卵巢有直接關係,可以進行身體按摩或是淋巴引流改善。 雙眉間長痘: 胸悶,心律不整,心悸。建議不要做太過激烈的運動,避免煙、酒、辛辣食品。 不要做太過激烈的運動,避免煙、酒、辛辣食品。


 


鼻頭長痘:


胃火過盛,消化系統異常。應少吃冰冷食物。 胸部:與長在人中位置的青春痘一樣. 要注意泌尿與生殖系統問題,需就醫治療。 太陽穴:太陽穴附近出現小粉刺,顯示你的飲食中包含了過多的加工食品,造成膽囊阻塞,需要趕緊行體內大掃除。 前額: 前額出現痘斑,是肝臟裏含有過多的毒素所致,必須減少食用含糖分過高的食物,更要避免用太多的酒精。 眼睛周圍: 眼睛周圍乾澀,或是出現乾燥地表的裂紋,顯示你有必要加強維他命B2及B6的攝取。 嘴角: 嘴角出現細微的皺紋了,表示你要多多補充鐵質了。


 


眼睛下方:


眼睛下方與腎臟有直接的關係,當出現黑眼圈,眼袋及浮腫現象時,表示你喝了太多的咖啡和茶,這類飲料都是鹼性的,有必要節制這類的飲料。 鼻子兩側: 鼻子兩側出現黑頭粉刺,輕微乾燥脫皮現象,表示血液迴圈不良,可以適度進行按摩,加強這部分皮膚的血液迴圈。或是適量補充鋅,維他命B2及B6。 臉頰兩側: 這部分皮膚出現粉刺,表示飲食必須加以節制,不要暴飲暴食,多食用幫助身體去毒的食物 如蘋果,竹筍,對身體腸胃的清潔有很大的功效。 另外,吸煙多的人臉頰容易出現浮腫,並出現清晰的微血管紋路,這是皮膚缺氧氣的訊號,最好解決辦法就是戒煙。 口頸部:若青春痘長在下巴周圍像落腮胡甚至長到頸部,與胃功能有關,多半是胃部濕熱型,要少吃辣與油炸食品


 


資料轉載自:http://www.facebook.com/note.php?note_id=142713719106314&id=100000129641550

(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(5,253)

  • 個人分類:健康
▲top
  • 9月 20 週一 201002:34
  • Android淺探(二),2010─系統廠商


綜觀自2008年底AOSP1公佈以來,從2009年當紅炸子雞,所有廠商都要做Android相關產品,各種相關活動場場爆滿,到2010年漸漸回歸常態,該掛的掛,該起的起,做出些成績的都是大廠,而其他廠商雖在政府重點補助下,仍然沒什麼起色。究竟採用Android有什麼好處、進入困難的門檻何在、國內以硬體廠商為主的思維碰到了什麼問題?以下從個人觀點分析。


Open Source帶來的衝擊


許多專案/產品管理者,在面對採用開放源碼為主的軟體專案時,經常碰見以下問題。



  1. 對程式碼的了解/掌握度:大多數情況下,現存的程式碼並不能完全符合專案的需求,仍需要一定程度的修改。然而,開放的程式碼並不一定容易修改,大部分情況下也沒有充分的文件說明,最多說明一下如何使用,對程式碼內部結構的文件可就更稀有了。大型、複雜的專案可以非常難追蹤、理解,不恰當的拙劣修改常常導致事後維護上的困難,但具有恰當修改能力的工程師非常稀少。對整體架構沒有全盤掌握時,修改、除錯、維護所需的資源都難以估計,造成專案更高風險。

  2. 缺乏概觀:根基於開放源碼的產品常由許多專案組成,而這些專案會基於不同的科技,在系統的不同層面有不同的功能。他們之間的互動方式,以及在整個系統中扮演的角色,在沒有適當背景知識的情況下是難以理解的。故,要維持住對產品概觀的了解,以及掌握專案各部份的狀態,會變成一項挑戰。專案管理者必須對核心優勢以及商業價值有正確理解,對其他部份採取開放態度,藉此獲得社群的支援,以減低開發難度。

  3. 不知與upstream合作:開源專案多半有負責維護的個人/團體,就是此處所指的upstream(上游)。要了解程式碼,以及取得支援,最直接的方法就是與上游保持良好關係。實務上最佳解決方案為,與上游直接合作,將自行開發的錯誤修正與新功能等等都回饋到原先專案。由於有貢獻,上游自然也更願意視為一份子。然而,首先公司內部文化必須克服,如何讓保守文化理解到,將非核心的開發成果公開出去與上游直接合作,實際上無損公司,並且有利減低研發成本。克服之後,還要面對與適應開源社群不同的開發模式、工具與文化。

  4. 法律問題:許多商業組織刻意或非刻意的違反開源軟體的著作權要求。這會讓他們有被Harald Welte2這樣的人控告的危險,而且有損商譽。這些商業組織需要有經驗的人來處理開放源碼的著作權益題,尤其是產品本身必須混合自行開發的封閉程式碼以及開放源碼的情況。

Android帶來的額外挑戰


AOSP是由OHA主導的開放源碼專案,其背景與傳統上開放源碼略有異同,一開始差異頗大,但開放至今,其文化已較為趨近傳統開源專案。原因無他,在長時間的適應下,原先的開源專案文化,許多因素已可視為最佳實務(best practice),有利於軟體發展。比如鼓勵貢獻、盡量公開開發流程、增加社群互動等等。此系統亦帶來了一些新的挑戰,嘗試略述如下:



  1. 除錯需跨越各層:Android是由許多不同技術結合起來的複雜集合。系統上大部分提供的服務,其程式碼都由數種不同的程式語言組成,並在系統的不同層級執行。在平台內除錯(而非對應用程式層之內,這部份相對簡單)經常需要在application層、runtime層與library層來回對照,這比傳統上單純的C/C++程式碼除錯複雜許多。

  2. 需跟上快速的上游開發速度:由最早的1.0/1.1到其後1.5 (Cupcake), 1.6 (Donut), 2.0/2.1 (Eclair), 2.2 (Eclair),短短近兩年時間改變甚大,而每版又有明顯更動/改進,使得緊跟上游成為一困難課題。這意味著,當產品還在開發,其版本可能就已經過時,而業者就必須同時進行跟進與產品化,包括細節整修、除錯、新功能開發等等。這對軟體開發團隊而言是很大的挑戰。這在業界引起的效應相當明顯,例如各家廠商旗下Android手機更新版本速度不同,能力不足廠商到2.2時可能還在出1.6版的產品等等。

  3. 不同領域的技術知識:如上所述,Android是一複雜的集合。週邊、電源管理、手機通訊協定、圖形加速、虛擬機器(Dalvik)、toolchain、使用者介面設計、認證等等,每個都是大題目。Android提供了一個可以往上建造的平台,然而與此同時,也需要更多領域的知識,而這些在之前可能都是由需付費的軟體提供者,例如微軟,來負責的。這意味著更高的進入門檻。

麻煩很多,優點何在?


Android很紅,這點大家都知道,市場一片樂觀,廠商紛紛跳入。然而,在跳進之前,若能先理解這倒底是怎樣的系統,特點何在,為何採用,才容易抓到開發重心。基於Android的產品各家都喊了,到現在卻是幾家歡樂幾家愁,不是沒有原因。


若如前例採用微軟視窗系統,則維護由微軟負責,廠商付費使用即可,相對單純。然而,就廠商角度而言,對系統控制低,要怎麼改都是付費看人臉色,很難累積自己的成果。比如從Windows Mobile 6.5到Windows Mobile 7,介面能客製化的程度降低,微軟的識別度增加,對想主打自身品牌辨識度的廠商來說,就不是好事。然而,做軟體就好像堆磚頭,在現代,製作一套完完全全從底層到上層所有功能都自己來的作業系統,一塊塊從底層堆起,是相當大的工作。以PC上運作的GNU/Linux系統為例,底層為Linux kernel,也就是作業系統的核心部份。而運行在這核心之上,有各式各樣的軟體,有的可以讓我們傳 MSN, Yahoo messenger、看網頁、收發 email 等等之類。在 Microsoft Windows 上我們有些熟悉的軟體來做這些事,在開放源碼的世界同樣也有,例如許多人都聽過,而且也可以在 Windows 上使用的Firefox。把許多開放源碼軟體組合起來呈現給使用者,形成一套完整的作業系統,這樣的組合就稱作 Linux distribution(後簡稱distro)。


一distro則可由社群、非營利組織或是公司來維護,其內有成千上百元件,大部份都是開源軟體,其間共同運作是否順暢、各元件維護、處理錯誤回報、修正等等,需要相當大的研發資源。如目前當紅的Ubuntu,就是由Canonical公司主導。但,到了手機領域,若想以現有系統為基礎自行開發,之前就沒有什麼真正主流的選擇。Meego的出現可能會帶來改變,不過這部份有待觀察,應另文討論。Android為何廣泛被考量作為產品之軟體平台,很大原因即在於它是一套由Google主導的開放源碼作業系統,以此為基礎,可以為廠商省下許多的研發成本,而專注於開發產品獨特的優勢。


也就是說,Android的存在,是建立了一個大家可以在其上建造的「標準平台」,而且「可以修改」。


另外一個重要的考量,則是軟體的流通。作業系統不同,程式也會不能互通。在A系統可以跑的程式,在B系統不見得能跑,因為他們對軟體的組合選擇以及採用的版本可能都不同。在開放源碼的世界,程式碼都是公開的,這就容易解決,由distro維護者選取配合的版本,把他們從原始碼一一編譯起來,發行給使用者就行了。然而,對商業應用程式的開發者來說,這就是一大問題,因為同時支援這麼多平台的花費太高。另一問題是,假定採用的硬體CPU不同,那麼就算採用同一系統,在不同硬體上,仍然無法共通,例如Intel與ARM based CPU就是。Android的存在,可從兩方面來解決這些問題:



  1. 系統組合與維護交由Google and OHA主導,所以軟體平台可以固定下來,以AOSP release為參考點即可。

  2. 不同硬體相容性,由Android runtime解決,只需在framework上可以執行,不同硬體影響可由Android負責處理。

Android在同一時間主流版本有限,並有一定程度的向前相容。例如以本文寫作時來說,2.2的平台為主流,並且可以向前相容上一個主要版本,也就是1.6的應用程式。而只要熟悉了Android Framework,就可以持續的開發應用程式。就此角度而言,Android與Windows類似,都減低了發行封閉原始碼程式的困難度。例如下一主流Windows版本應為Windows 7,那麼程式設計師只要以Windows 7為目標平台來製作應用程式即可,大部分之前由XP, Vista累積下來的經驗,都仍然有效。


然而Android帶來的改變,其實還不只於此。前面提到Android runtime可以讓程式在不同CPU架構下執行。在桌上型、筆記型電腦的世界,大家CPU都是 Intel,不同硬體架構的問題不大。然而到了移動裝置的世界,由於要考慮到功耗等等因素,採用的CPU種類就往往不同。這意味著,兩個裝置就算安裝了相同版本的某作業系統,但是CPU架構不同,也照樣不能執行。以往對於此問題的解決方法稱為Java ME,也就是採用Java runtime。對應到Android,則是由Android runtime解決。


走筆至此,讀者應可了解,Android提供了一方便開發、執行應用程式的平台。程式被創作出來,編譯、包裝成Android應用程式之後,便可一併通行各種不同裝置上的Android作業系統。


因應之道


了解Android開發的困難點,以及採用的好處以後,系統廠適應的策略為何呢?由現有例子可以觀察到,只要研發能力足夠,所有的問題都不是問題:拿回來全部in house自己做就行了。有趣的是,國內公司並不見得整體研發能力不足,而是公司體制內各自為政,不同部門互不合作,分則力弱,變成各單位分別挑戰,自然會發生人家手機出了一整排,自家公司蹲好久才出個一兩隻還比人家差的情況。在研發資源有限的情況下,最佳解法就是回到基本,了解Android仍然是一開源專案,採取開源專案已知的合作方式即可。也就是說,除了技術理解,對協同開發方式,也必須熟悉。視專案規模大小與不同需求,以下嘗試提出幾點方案:



  1. 其他廠商合作開發,共同維護一份通用程式碼。

    1. 自家客製化部份,可視專案需求,與提供商業Android服務的公司/獨立開發者合作,或由內部訓練團隊。

    2. 外部需尋找的對象為,不只理解開放源碼如何運作,也懂得商業價值的重要,易於溝通。

    3. 由內部訓練專家。仍需要一些顧問作為種子,需時較長,但可在公司內培養出自有團隊。

  2. 內部一定要有對開放源碼協同開發方式經驗豐富的經理人。不論合作、驗收、內部培養,都非常重要。

  3. 在共通與自有程式碼混合情形下,需有對開放源碼著作權問題有研究的法律顧問。

建立標準、開放合作


如前所述,可以理解通用程式碼的重點應在於共用功能以及硬體支援。以目前業界情勢來講,採用的硬體平台正快速的收斂,例如手機台廠主流多為Qualcomm,既然如此,小廠可依樣畫葫蘆,合作維護一份「基於常見硬體的Android版本」,以AOSP發行為基礎,針對幾個硬體平台合作開發。畢竟將系統在某硬體上動起來,只是產品化的初步而已。以生產製造為強項的廠商,可以以此版本為基礎,專注在自己擅長的生產。而以軟體研發見長的廠商,則可以在此版本上專注於商業應用程式開發。自有品牌者,則可專注於使用者經驗、介面辨識度、工業設計等等。在共同需要的部份合作,而專注精力在自身擅長領域即可。


功能部份,由於Android並不限於手機,目前已經可以看到平板電腦與電視的應用。同一領域中,基本的功能是共通的,例如支援高解析度螢幕,來處理平板與電視的應用,平板需要不同的使用者介面,而電視需要能躺在沙發上輕鬆的操作等等。以上這些基本門檻,都是廠商可以共同努力的範圍。例如發源於日本的OESF3,就是典型的這種組織,其主要幾個功能為:



  1. 廠商生意交流、媒合的場域。

  2. 維護通用程式碼與支援平台。

  3. 針對各領域如set-top box, VoIP, DLNA等等,訂定標準介面,開發參考用程式碼。

概念正確,在日本也蓬勃發展,但在台灣的推廣卻由於硬體廠(連同一公司都不知識分享!)的封閉觀念而感到阻力。國內如0xlab4自09年起就疾呼此一觀念,也不見明顯成效,實在相當可惜。


回饋上游


Android一出,最理解此一系統的當然是Google以及當年共同開發的Wind River。只是Google重心一直在軟體平台,不輕易做支援,Wind River又奇貴無比,致使Android系統內部知識益形珍貴。時至今日,開發應用程式的說明文件已經相當完整,內部結構的文件仍然欠奉,最佳的文件就是程式碼本身。至於未來開發方向,以及Google內部程式碼與外部的差異等等,Android開發團隊非常忙碌,無心也無力主動提供。身在外圍,要取得這些資訊,最佳方式便是由「工程師對工程師」的社群交流來完成。經由實際操作經驗得知,透過mailing list以及source review5往往可以獲得許多有用資訊。


藉由回饋上游,與AOSP達成正向合作關係,對開發團隊大大有利,卻著實違反傳統商業觀念。在硬體微利時代,軟硬體整合以及使用者體驗,都需要更佳的軟體研發能力。現狀既然已經起跑較晚,開源軟體「站在別人肩膀上開發」的特性,其實相當適合台廠快速應變、打帶跑的作戰方式,然而這也需要新的觀念、視野與執行方式。



notes


1 Android open source project, http://source.android.com/


2 http://en.wikipedia.org/wiki/Harald_Welte


3 http://www.oesf.biz/


4 http://0xlab.org/


5 https://review.source.android.com/


 


資料來源:http://mmdays.com/2010/08/30/android-2/

(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(223)

  • 個人分類:電腦和網際網路
▲top
  • 9月 20 週一 201002:27
  • Android淺探(一),2010


導言


Android應可說是科技界2009年第一大事。Android前身為一公司,被Google買下後繼續開發,以開放源碼的方式發行,還成立了Open Handset Alliance (OHA)作為支持Android的商業組織。其中成員如Qualcomm, TI, Wind River等在各自領域都赫赫有名,尚未上市就已經相當轟動。開放源碼(Open source)的手機作業系統,其實在此之前已經出現數個,例如Qtopia1以及其後雷聲大雨點小的Openmoko,再如當時以行動上網裝置(Mobile Internet Device, MID)為主的Maemo等等。不過,Qtopia與Openmoko的成熟度當時並未達到商業化需求,而日前Nokia雖然已經基於Maemo發表了新一代智慧型手機N900,但當時Maemo仍侷限於行動上網裝置,而非電話。


換言之,Android除了擁有眾多大廠支持,而且在開放之初就發表了T-Mobile G1,有產品可證明商品化能力。這意味著,長久以來受制於Windows Mobile,又無能力開發自有作業系統的手機廠商,看見了站在巨人肩膀上做出自有產品的可能性。從2008年底開放以來,2009年HTC, Samsung, Motorola, Acer等等都發表了Android手機,而看來2010年中還有更多。究竟 Android 有什麼特點,與以往根基於Linux的手機差別何在,以及面對其他手機作業系統的競爭有何優劣等等,本文嘗試做一介紹與探討。


技術面淺探


要談Android,就無法迴避技術面的討論,但在此會忽略細節以及犧牲一些語言精確度,試著做一簡介。


系統架構


Android作為一作業系統,其針對的硬體為智慧型手機,並在設計伊始就考慮到3G網路以及觸控螢幕、相機、GPS等現代應用。作業系統作為裝置與人之間的媒介,以及負責讓手機正常運作。與人接軌的那端,使用者介面、應用程式等,一般稱上層。而與機器接軌的部份,比如對打電話的控制、無線網路晶片、顯示圖形到螢幕上、接受觸控螢幕收到的手指觸摸等等,就是由底層來負責。在此我們先由下層開始介紹,再步步往上。



(http://developer.android.com/images/system-architecture.jpg)


Linux Kernel


必也正名乎:一般所稱Linux,其實是統稱,指根基在Linux kerne以及其他許多跟kernel不見得有關的軟體所組成的作業系統。最早,Linux一詞其實是專指kernel,它提供了系統底層與硬體間的基本核心,讓其他程式可以在上頭執行。其最早作者是Linus Torvalds,他用自己的名字,加上採用了與Unix系統相容的介面,將自己的作品命名為Linux。



如前所述,在Linux kernel上頭執行的程式,跟kernel本身不見得有關係。可以是自由軟體,也可以完全不是。把它加上一些自由軟體,例如基本的函式庫、工具、圖形介面,應用程式等等,所組成的一套完整作業系統,才是一般所稱的Linux。為了避免誤解,而且也為了正確傳達自身的貢獻,自由軟體基金會2 建議大家稱呼這樣的一套作業系統為GNU/Linux。其中的原因是,kernel提供底層機制,但系統中其他重要元件幾乎都是來自於GNU,也就是自由軟體基金會。


希望大家還沒被這些名詞搞混。要弄清這些不同的原因是,Android是在Linux kernel上頭運作的,但他並不是GNU/Linux。因為在一般 GNU/Linux裡面會有的東西,Android幾乎都沒有。


Linux kernel的版權是GNU General Public License version 2 (GPLv2)3,這又是什麼玩意呢?GPLv2是所謂的Copyleft4版權,簡單來說,就是為了確保智慧財產能夠繼續公開流傳,所以任何基於此創作的延伸創作,都自動採用了相同版權。GPL本身還有個特色,就是「共同運作」也算是延伸的一部分,意思是說你的程式沒直接改GPL的程式碼,但是連結了GPL的東西跟你的程式共同運作,那你的程式也必須採用GPL版權。


舉例來講,假定今天某公司覺得某GPL軟體不錯,拿來改了改,放在自己的產品裡頭拿出去賣,那某公司就一定要明確的一起散佈修改後的程式碼。如果沒有,那就是觸犯版權了。有個組織叫GPL Violations5,專門抓這種案例,國內公司如D-Link以及ASUS都上 過榜。這下問題來了:如果你是硬體廠商,希望你的硬體能在Linux kernel下運作,那麼就必須要有驅動程式。驅動程式就是按照硬體的規格寫的程式,用來告訴kernel怎麼操作這個硬體。如果驅動程式的程式碼公開,等於就是揭露了一些內部資訊。許多廠商不願意這麼做,所以就提供編好的驅動程式,但不提供原始碼。而kernel的版權所有者,也就是Linus Torvalds以及其他許許多多的kernel作者們,為了支援盡可能多的硬體,對這種行為是採取睜一隻眼閉一隻眼的態度,也就是目前這種編譯好的驅動程式,算是處在灰色地帶。


既然Android採用了Linux kernel,當然得照遊戲規矩來。但我們從前文可知,Android的重點就是商業應用,他們可不願意系統裡有什麼「灰色地帶」,於是採用了一些手法來繞過這問題。例如可以在 kernel這邊開個小通道,告訴大家說要控制這硬體就透過我吧,我只負責傳進傳出,但真正控制的指令都寫在某個不公開程式碼的Android函式庫裡頭。這樣一來,公佈的就只有那個通道,實際要怎麼控制,別人還是不知道。


走筆至此,可以看出Google的原則之一 “Do no evil” 是很有意思的。他們自己的確承諾,而且也願意公開Android的程式碼,但是他們給了其他人“Do evil”的選擇。這樣還算不算是 Do no evil 呢?當作哲學問題吧。


然而,Linux kernel已經發展了相當長的時間,擁有許多優秀的開發者以及廣大的使用者群,是非常穩定的系統核心。這為Android系統提供了相當穩定快速的基礎建設。


Libraries


這裡說的libraries是跑在系統裡頭的函式庫,採用的語言不是Java,他們提供了許多基礎建設。裡頭有幾個值得一提的元件:


Bionic:這是Android版的 libc。libc是 GNU/Linux以及其他類似Unix系統上最基礎的函式庫,一般最常用的是glibc,就是GNU做的libc。而在較小型的裝置上也可以用uclibc之類的。不論是glibc or uclibc,版權都是LGPL6(GPL的略為弱化版)。看到這大概可以猜到了吧,又是Copyleft問題。官方的說法是,除了版權問題以外,還考慮必須輕量以及快速,所以才做了自己的libc。不過輕量、快速,本來就是小型裝置用的uclibc一開始的目標,因此,最主要的恐怕還是版權問題。


Webkit:鼎鼎大名的Apple Safari瀏覽器背後的引擎就是Webkit,Android也包含進去了。支援可離線使用的html 5新發展,產生了各種有趣的可能,這部分值得另文介紹,這裡就不再贅述。


硬體抽象層(Hardware Abstraction Libraries, HAL):提供了操縱系統硬體的方法,上頭接上標準的Android framework,就可以讓使用者用一致的方式操作硬體。例如程式只要下令「拍照」,那麼雖然不同相機硬體拍照的指令下法不同,透過抽象層都可以包裝成一致的介面。HAL包含了Android對各硬體裝置例如顯示晶片、聲音、數位相機、GPS、3G 等等的需求,但他只是抽象的概念,事實上若要支援新的硬體,需修改的程式碼分散各處,要自行去尋找。這部份與系統廠商息息相關,後面會再談到。


Android Runtime


跨平台:Android最顯著的特徵之一,就是應用程式可以在不同的硬體上執行,而有同樣的行為。這聽起來沒什麼,一般我們用Microsoft Windows不就是如此嗎?其實並不那麼單純。可以想像,假定有一台Windows XP電腦,也有一隻Windows Mobile手機,那麼手機上的程式有沒有辦法拿到XP上面來跑,或者是相反呢?在電腦上,所有人跑的作業系統跟硬體,其實有很高的一致性,但是一旦到了小型裝置五花八門的世界,就不是那麼回事了。


一個程式的執行,牽涉到幾個元素:原始程式碼、編譯器、函式庫、CPU。Android的應用程式是採Java程式語言寫成,跨平台的方式也與Java類似。Java頗為普及,且之前在手機方面已有許多應用如遊戲等,稱為Java ME,由昇陽(Sun Microsystem)主導。一般所謂Java其實包含三個層面,其一是Java這個「電腦語言」,也就是像這樣的東西:

class HelloWorld
{
public static void main(String [] argv)
{
System.out.println("Hello, world!");
}
}

也就是用人比較容易看懂的語言(也許不那麼容易啦,但至少比一堆0跟1來得好)來叫電腦做事,比如上個例子是在螢幕上印一行字Hello, world。所謂程式的原始碼,就是一整篇這樣的文章,結合起來,可以叫電腦執行某些功能。這樣的語言比自然語言容易「翻譯」成電腦看得懂的「指令」,而負責翻譯的,就是「編譯器」。


電腦的核心CPU有很多不同種類。一般我們用的是Intel的產品,有些是32位元、有些是64位元。有些人用的可能是Power,例如以往蘋果電腦的使用者。還有一些小一點的電腦,可能就是用ARM架構。總之,不同的CPU具有不同的指令集合,是不能直接互通的。在此我們可以想像,同樣的程式碼,可以經由編譯器,翻譯成適合不同CPU架構的程式,而他們之間是不能互換的。例如編給ARM使用的程式,在Intel的CPU上頭就不能跑。要如何解決這個問題呢?


這裡引入第二層面:「Java 虛擬機器」(Java virtual machine)。虛擬機器可以想像成一虛擬的CPU,先設定一些共通的指令,然後針對各種不同的架構做個別轉換,如此只要是採用此「共同指令集」的程式,就可以在這虛擬機器上面執行,由虛擬機器負責轉換成目標CPU的指令集。如此一來,我們只需要把用電腦語言寫好的程式編譯成「虛擬機器」看得懂的就行了。Java使用的共通指令就稱做 “Java bytecode”。


最後則是Java runtime library,也就是一個「函式庫」,裡頭存了很多編譯好的現成程式,來讓開發者使用,這樣就可省下很多重覆的工作。比如上頭這例子裡頭的System.out.println就是函式庫提供的。那我們可以想像,如果在程式中我們用了很多某個函式庫裡頭的東西,但是用的人只拿到編譯好的程式,但沒有同樣的函式庫,那這程式還是不能用。比如說,Windows, Linux提供的基本函式庫就很不一樣,所以做同樣事情的程式,寫法可能完全不同。Java函式庫裡頭提供的工具,是有標準可循的,所以以上的程式,不管是要在Windows上頭跑,或是Linux上頭跑,都是一樣的寫法。


於是乎,我們可以把Java runtime library跟Java虛擬機器搭配起來,這樣我們只要用Java這個語言寫程式,裡頭呼叫Java runtime library裡頭的工具,用編譯器編成Java bytecode,交給虛擬機器去執行,就可以在各種平台上面跑一樣的程式了。這兩者的組合稱為「Java Runtime Environment, JRE」,只要針對某環境提供JRE,就可以執行Java應用程式了。雖然這聽起來很棒,但我們可以想像,由於隔了一層虛擬機器,程式跑起來容易比直接下命令來得慢,而且必須額外安裝JRE,用掉較多資源。


Java Runtime讓人們可以在不公開原始碼的情況下,發行編譯好的應用程式,在各種不同的平台上執行,相當適合商業應用。Android循著相同架構,也提供了Android Runtime,但有幾點不同。


Android使用的虛擬機器叫作Dalvik,原本並不是針對Java設計的。它認識的指令集並不是Java bytecode,而叫Dalvik executable,簡稱dex。Android裡頭提供了一個工具程式叫dx,可以把 Java bytecode再翻譯成dex,這樣Dalvik就可以執行它了。這虛擬機器為了適合在電話這種比較小型的平台上使用,而做了許多最佳化的處理,例如適用較慢的CPU、低記憶體使用量、減小應用程式的大小等等。


Android虛擬機器與函式庫合稱Android Runtime,在函式庫方面,提供了大部分的標準Java函式庫,讓Java工程師可以無痛的轉換,而關於手機的部份則提供許多諸如使用者介面、藍芽、GPS相關、網路、3D加速、影音、以及電話本身等等許多現成的函式可用。這些函式使得開發者可以直接取用基礎功能,進而專注於應用程式的開發。


Application Framework


提供應用程式執行環境,針對手機設計,許多觀念與一般個人電腦應用程式有相當不同。在此將開發者網站上的說明大略翻譯如下:


應用程式元件


Android的重要功能之一為,應用程式可在對方允許的情形下,使用其他應用程式的元素。例如,如果你的應用程式想要顯示一排可以捲動的影像,而另一應用程式已經開發出了適合的捲軸元件,並開放給他人使用,你可以直接呼叫這元件來使用,而不需自行開發。你的應用程式不需要包含他人的程式碼,也不需固定連結到某程式。反之,Android框架會在有需要時,自動啟動其他應用程式的相關功能。


要順利運行,系統必須能夠在需要其任一元件時,啟動一應用程式程序,並做出需要的Java物件。所以,與大部分系統上的應用程式不同,Android應用程式並沒有一個單一的「進入點」來使用所有功能。反而是,他們提供元件讓系統可以視需要使用。元件類別有四種:


Activities


Activity表示一使用者介面,用以完成某特定事務。例如,activity可呈現一選單列表,或是顯示相片跟標題。簡訊軟體可能包括一個列出所有傳簡訊對象的activity,一個讓使用者對選擇對象寫簡訊的,以及其他的activity來看舊訊息以及設定功能。他們雖然組成一個使用者介面,但各元件互相之間仍是獨立的,例如,其他軟體需要傳訊時給某人時,可能只需叫出「寫簡訊」的activity,而不需其他。


一應用程式可以只包含一個activity,也可以像剛才描述的簡訊軟體一樣,包含好幾個。當然,需要哪些,以及要多少,都是取決於應用程式的設計。一般來說,其中一個activity會被標為程式執行時第一個看到的畫面。由一個activity移動到另一個,是利用目前的來呼叫下一個。每個activity都分配到一個預設的視窗,可以在裡頭畫東西。一般說來,這視窗跟螢幕一樣大,但它也可以比螢幕小,並浮在其他視窗上。而activity也可以開多個視窗,例如跳出一個視窗來取得使用者回應,或者是針對使用者選擇顯示重要資訊。


視窗內部的視覺組成是由樹狀結構的”view”組成,每個view可以包含其他view,控制視窗中一塊長方形的區域,並可跟使用者互動。換句話說,view可組成activity與使用者互動的「實相」。Android系統中有許多現成的view可供取用,例如按鈕、文字欄位、捲軸、選單、勾選格等等。


Services


Service並沒有可見的使用者介面,而是在背景永久執行。例如,當使用者做其他事情時,service可能在播放音樂,或正從網路上抓取資料等等。


Broadcast receivers


唯一功能為收取以及回應「廣播訊息」。廣播經常來自Android系統本身,例如,手機所處的時區改變,電池快沒電了,或是剛照了一張照片,或是使用者剛改變了顯示介面的語言等等。應用程式也可以發出這類廣播,例如,讓其他應用程式知道某些資料已經下載完成,可以使用了。


一應用程式可以有任意數量的broadcast receiver來收取任何它認為重要的訊息。它沒有使用者介面,然而,他們為了回應廣播訊息,可以呼叫某個對應的activity,或者是發出一訊息通知來告訴使用者發生了什麼事情,以及震動、播放音效、閃爍軌跡球等等。


Content providers


負責對其他應用程式提供或收取資料。資料可存放在檔案系統中,或資料庫、或任何合理的方式。例如:通訊錄。


任何時候,當系統需要某一特別元件時,Android系統會先肯定擁有這個元件的應用程式正在執行,如果沒有,就啟動他。另外還會確認此元件是否已經存在於系統中,若視沒有,就製作一個。


啟動元件:intents


Content provider在有人需要存取時便會由系統啟動,而其他三類元件:activity, service, broadcast receiver都是由一種叫intent的訊息啟動的。一個intent表示的是一種「企圖」。例如,它可能是要求「顯示這張圖片」,或者是「編輯這段文字」,或「編一段訊息傳給這個人」。比如說,某應用程式想傳訊給通訊錄中的某一人,可先發出企圖「瀏覽通訊錄」,則系統中負責此事的元件便被啟動。選取對象後,便呼叫「編輯簡訊」的元件來編輯並接著發送出去。
關於應用程式運作,詳細情形可參考開發者網站上的說明7,在此就不詳述了。


Applications


要開發Android應用程式,並不需要下載整個平台的程式碼,只需要採用Google發行的軟體開發工具(Software Development Kit, SDK)即可。使用的電腦語言是Java,並內建模擬器,可直接驗證寫出的應用程式,而不需擁有實體手機。建議的開發環境為Eclipse,此軟體亦為開放源碼專案,不需付費即可使用,許多公司如IBM等亦根基於Eclipse推出了自有的工具,可說應用相當普遍。Google在這部份提供了Eclipse的一個延伸套件,與模擬器、除錯等等都有整合,並提供完整文件,進入門檻降得相當低。


延伸閱讀:



  1. http://www.betaversion.org/~stefano/linotype/news/110/ (Dalvik: how Google routed around Sun’s IP-based licensing restrictions on Java ME):關於 Android 如何繞過 Java ME

  2. http://blogs.sun.com/jrose/entry/with_android_and_dalvik_at (with Android and Dalvik at Google I/O):對 Dalvik 有興趣的話一定要看

  3. http://sites.google.com/site/io/anatomy–physiology-of-an-android (Anatomy & Physiology of an Android):Google 對 Android 平台內部架構的概觀介紹


notes


1 現已經多次改名,先改為 Qt Embedded,現通稱 Qt,讀音同cute。現已由 Nokia 收購。


2 http://www.fsf.org/


3 http://en.wikipedia.org/wiki/GNU_General_Public_License


4 http://en.wikipedia.org/wiki/Copyleft


5 http://gpl-violations.org/


6 http://www.gnu.org/copyleft/lesser.html


7 http://developer.android.com/guide/topics/fundamentals.html


 


資料來源:http://mmdays.com/2010/08/27/android-1/

(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(556)

  • 個人分類:電腦和網際網路
▲top
  • 9月 20 週一 201002:00
  • Android淺探(二):系統架構


本篇目的在儘量不觸及技術細節的情況下簡介 Android 架構,並探討其設計的特殊處,以及在版權上的意義。主要資料來源為 Anatomy & Physiology of an Android,有興趣深入研究的讀者可參考。

首先來一張現在大概已經很有名的圖片:

由下到上,可以看到紅色的 kernel 層,綠色的系統函式庫,黃色的虛擬機器,以及藍色的 Java 程式碼。以下將一一介紹。


Linux kernel


必也正名乎:一般所稱 Linux,其實是統稱,指根基在 Linux kernel 以及其他許多跟 kernel 不見得有關的軟體所組成的作業系統。最早,Linux 一詞其實是專指 kernel,它提供了系統底層與硬體間的基本平台,讓其他程式可以在上頭執行。其最早作者是 Linus Torvalds,他用自己的名字,加上採用了與 Unix 系統相容的介面,將自己的作品命名為 Linux。


如前所述,在 Linux kernel 上頭執行的程式,跟 kernel 本身不見得有關係。可以是自由軟體,也可以完全不是。把它加上一些自由軟體,例如基本的函式庫、工具、圖形介面,應用程式等等,所組成的一套完整作業系統,才是一般所稱的 Linux。為了避免誤解,而且也為了正確傳達自身的貢獻,自由軟體基金會建議大家稱呼這樣的一套作業系統為 GNU/Linux。其中的原因是,kernel 提供底層機制,但系統中重要的元件幾乎都是來自於 GNU,也就是自由軟體基金會。


希望大家還沒被這些名詞搞混。要弄清這些不同的原因是,Android 是在 Linux kernel 上頭運作的,但他並不是 GNU/Linux。因為在一般 GNU/Linux 裡面會有的東西,Android 很多都沒有。


Linux kernel 的版權是 GNU General Public License version 2 (GPLv2),這又是什麼玩意呢?GPLv2 是所謂的 Copyleft 版權,簡單來說,就是為了確保智慧財產能夠繼續公開流傳,所以任何基於此創作的延伸創作,都自動採用了相同版權。GPL本身還有個特色,就是「共同運作」也算是延伸的一部分,意思是說你的程式沒直接改GPL的程式碼,但是連結了GPL的東西跟你的程式共同運作,那你的程式也必須採用GPL版權。


舉例來講,假定今天某公司覺得某GPL軟體不錯,拿來改了改,放在自己的產品裡頭拿出去賣,那某公司就一定要明確的一起散佈修改後的程式碼。如果沒有,那就是觸犯版權了。有個組織叫 GPL Violations,專門抓這種案例,國內公司如 D-Link 以及 ASUS 都上過榜。這下問題來了:如果你是硬體廠商,希望你的硬體能在 Linux kernel 下運作,那麼就必須要有驅動程式。驅動程式就是按照硬體的規格寫的程式,用來告訴 kernel 怎麼操作這個硬體。如果驅動程式的程式碼公開,等於硬體規格也公開的差不多了。許多廠商不願意這麼做,所以就提供編好的驅動程式,但不提供原始碼。版權所有者,也就是 Linus Torvalds 以及其他許許多多的 kernel 作者們,為了支援盡可能多的硬體,對這種行為是採取睜一隻眼閉一隻眼的態度,也就是目前這種編譯好的驅動程式,算是處在灰色地帶。


既然 Android 採用了 Linux kernel,當然得照遊戲規矩來。但我們從前文可知,Android 的重點就是商業應用,他們可不願意系統裡有什麼「灰色地帶」,於是採用了一些手法來繞過這問題。他們把驅動程式移到 “userspace”,也就是說,把驅動程式變成在 Linux kernel 上頭跑,而不是一起跑的東西,這樣就可以避過GPL。然後,在 kernel 這邊開個小門,讓本來不能直接控制到硬體的 “userspace” 程式也可以碰得到,這樣只要把「開個小門」的程式碼公佈就行啦。事實上,目前因為 Android 已經發行,所以依法他們已經公開了對 kernel 的修改,其原始碼在 http://git.android.com/。


走筆至此,可以看出 Google 的原則之一 “Do no evil” 是很有意思的。他們自己的確承諾,而且也願意公開 Android 的程式碼,但是他們給了其他人 “Do evil” 的選擇。這樣還算不算是 Do no evil 呢?當作哲學問題吧。


關於 Android 對 kernel 的修改,Google 的簡報還提供了兩個重點:



  1. Binder (IPC):提供有效率的程式間溝通管道(Inter-Process Communication)。Android 系統中有很多服務,而上層的應用程式經常要取用這些服務,一般的 Linux 系統已經提供了不少 IPC 的方式,不過 Android 還是搞了套自己的。雖說文件中解釋原因為「一般 IPC 會造成額外資源花費,以及安全問題」,但其實這些都是可以基於原有架構在 kernel 外頭解決的,為何要改在 kernel 裡頭,筆者對此存疑,也只能等找時間去研究程式碼才知了。

  2. Power Management:與桌上型電腦或筆記型電腦不同,手持裝置的電源一向相當有限,必須無所不用其極的去想辦法省電,但又不損及順暢的使用經驗。Android 在此採取了頗為積極的作法:「沒有人說要用,就關掉」。例如某程式在放 MP3 音樂,於是此程式會需要 CPU 的計算能力,那就得開口要。如果與此同時沒其他程式在執行,那麼 LCD 顯示器就可能被關掉,藉以省電。另一特別處,是在於 Linux kernel 一般考慮的都是在電腦上的作法,所以多半只有進入暫停、休眠等等的選擇,而不會如此細緻的去控制到各個小裝置的電源供應。

系統函式庫


這裡說的系統函式庫是指 “native libraries”,是跑在系統裡頭的函式庫,採用的語言不是 Java,提供一些基礎建設。裡頭有幾個值得一提的元件:



  1. Bionic:這是 Android 版的 libc。libc 是 GNU/Linux 以及其他類似 Unix 系統上最基礎的函式庫,一般最常用的是 glibc,就是 GNU 做的 libc。不然在比較小型的裝置上也可以用 uclibc。不論是 glibc or uclibc,版權都是LGPL (GPL 的略為弱化版)。看到這大概可以猜到了吧,又是 Copyleft 問題。官方的說法是,除了版權問題以外,還考慮必須輕量以及快速,所以才做了自己的 libc。不過輕量、快速,本來就是小型裝置用的 uclibc 一開始的目標,因此,最主要的恐怕還是版權問題。

  2. Webkit:鼎鼎大名的 Apple Safari 瀏覽器背後的引擎就是 Webkit,Android 也包含進去了。離線使用的 html 配上 html 5 的一些新發展,產生了各種有趣的可能,這部分值得另文介紹,這裡就不再贅述。

  3. Surface Flinger:提供把各種”surface”組合在一起的能力。在這裡 surface 解釋為程式想要顯示在螢幕的東西,可能同一螢幕上有來自不同程式的內容,而這些內容有可能是 2D 顯示或是 3D 顯示等等之類。Surface flinger 就是把這些東西結合起來,一起送到螢幕上。目前程式碼還沒公布,不過 2D 跟 3D 的混合顯示一直都是問題,根本原因是我們通常告訴 3D 顯示卡的東西都是一些「我要在哪裡哪裡畫上什麼形狀,貼上某某材質然後旋轉多少度」之類的事情,也就是說,我們並不知道最後顯示出來會長什麼樣子,那是顯示卡上頭的 GPU 去算出來的。一般這些東西是顯示在一個有裝飾的視窗裡頭,這裝飾通常是 2D 效果。接下來假定我們想要旋轉這整個視窗,而且裡頭的東西還要繼續動,那等於要隨時把握 3D 視窗裡的東西長什麼樣子,然後把它跟 2D 的視窗框框結合,然後再開始轉動。目前在一般 GNU/Linux 上這件事情還沒有處理的非常好,Android 怎麼做,值得在程式碼公布之後注意。

  4. 硬體抽象層 (Hardware Abstraction Libraries):這就是前文所述的 userspace 驅動程式,如果想要將 Android 在某硬體平台上執行,基本上完成這些驅動程式就行了。其內定義了 Android 對各硬體裝置例如顯示晶片、聲音、數位相機、GPS、GSM 等等的需求。

Android Runtime 前文已有涉及,這裡不再重複。另外藍色部分的 “Application Framework” 主要是跟如何在 Android 上寫程式有關係,之後將另文介紹。


資料來源:http://mmdays.com/2008/10/11/android-%e6%b7%ba%e6%8e%a2%e4%ba%8c%ef%bc%9a%e7%b3%bb%e7%b5%b1%e6%9e%b6%e6%a7%8b/

(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(760)

  • 個人分類:電腦和網際網路
▲top
  • 9月 20 週一 201002:00
  • Android淺探(一)

Java

Android 所採用的語言是 Java,先從這開始談起。一般所謂 Java 其實包含三個元素,其一是 Java 這個「電腦語言」,也就是像這樣的東西:

class HelloWorld
{
public static void main(String [] argv)
{
System.out.println("Hello, world!");
}
}

也就是用人比較容易看懂的語言(也許不那麼容易啦,但至少比一堆 0 跟 1 來得好)來叫電腦做事,比如上個例子是在螢幕上印一行字 Hello, world。我們還會需要一個「編譯器」,來把這語言從人看得懂的,翻譯成電腦看得懂的。容後再論。


第二個元素是「Java 虛擬機器」(後稱JVM, Java virtual machine)。電腦的核心 CPU 是有很多不同種類的。一般我們用的是 Intel 的產品,有些是 32 位元、有些是 64 位元。有些人用的可能是 Power,例如部分蘋果電腦的使用者。還有一些小一點的電腦,可能就是用 ARM 架構。總之,不同的 CPU 使用方法也不同,指令是不能直接互通的。虛擬機器就是設定一些共通的指令,然後針對各種不同的架構各寫一個程式去配合這套指令。如此一來,我們只需要把程式編譯成「虛擬機器」看得懂的就行了。Java 使用的共通指令就稱做 “Java bytecode”。


其三是 Java runtime library,也就是一個「函式庫」,裡頭存了很多編譯好的現成程式,來讓開發者使用,這樣就可省下很多重覆的工作。比如上頭這例子裡頭的 System.out.println 就是函式庫提供的。那我們可以想像,如果在程式中我們用了很多某個函式庫裡頭的東西,但是用的人只拿到編譯好的程式,但沒有同樣的函式庫,那這程式還是不能用。比如說,Windows, Linux提供的基本函式庫就很不一樣,所以做同樣事情的程式,寫法可能完全不同。Java 函式庫裡頭提供的工具,是有標準可循的,所以以上的程式,不管是要在 Windows 上頭跑,或是 Linux 上頭跑,都是一樣的寫法。


二跟三兩者加起來,合稱 “Java Runtime Environment”, JRE. 它可以讓編譯好的 Java 程式「跨平台」。怎麼說呢?我們用 Java 這個語言寫程式,呼叫 Java 函式庫裡頭的工具,最後用編譯器編成共通的指令集,交給虛擬機器去執行。如此一來,同樣的程式在各個地方都能跑了。這雖然聽起來很棒,但我們可以想像,由於隔了一層虛擬機器跟函式庫,一定會比直接下命令來得慢,而且也要有人針對某作業系統跟某 CPU 架構去寫了這套東西,大家才能用。另外一個想法就是,那為何不直接把程式碼公開,讓大家針對不同的情況去處理,這樣就不需要虛擬機器,速度也一樣快,不就兩全其美了嗎?自由軟體走的就是這樣的路子。


問題是,許多公司不想公布自己的程式碼,因為必須要靠它賺錢。Java 讓他們可以不公布程式碼,只發行編譯好的程式,就在各平台上執行。使用者只需要安裝虛擬機器跟函式庫就行了。我們可以說,Java 是適合商業應用的。這點是很重要的一個特性。


以上的觀念大概瞭解了以後,我們看看 Android 在這部分做了什麼。


一、語言部分


Android 使用的 Java 語言並沒有不同,原本熟悉的工程師仍可以繼續使用。


二、虛擬機器


Android 使用的虛擬機器叫作 Dalvik,原本並不是針對 Java 設計的。它認識的指令集並不是 Java bytecode,而叫 Dalvik executable,簡稱 dex。Android 裡頭提供了一個工具程式叫 dx,可以把 Java bytecode 再翻譯成 dex,這樣 Dalvik 就知道怎麼執行它了。這虛擬機器為了適合在電話這種比較小型的平台上使用,而做了許多最佳化的處理,例如減低記憶體的使用,而且可以有效率的同時執行好幾個程式。它仰賴底層的 Linux 作業系統來幫他處理一些事情,意味著目前 Dalvik 是綁在 Linux 上的。


三、函式庫


Android 提供了大部分的標準 Java 函式庫(來自於Apache Harmony),並把他們轉換成 dex 的格式,如此 Dalvik 才認得。除此之外,還提供了很多獨有的函式,讓使用者可以直接呼叫來使用電話、GPS等元件,或者是一些視覺的元件來取得跟其他 Android 程式相同的外觀。


Android 虛擬機器與函式庫合稱 Android Runtime。它有幾個特性:



  • 不能直接執行編譯好的 Java 程式。要轉換成 dex 檔案後才能執行。

  • 若此程式使用了 Android 未提供的函式,仍不能執行。

  • 若我們拿到了 Android 應用程式,無法在 Java Runtime 上跑起來。原因為 1. 必須把 dex 轉回 Java bytecode,這難度目前不明。2. 沒有 Android 提供的獨有函式。

仔細思考的話,會發現所謂 Android Runtime 跟 Java Runtime (尤其是 Sun所提供的套件)的不同處很多,只是「剛好」Android 提供了很多 Java 函式庫裡的功能,讓 Java 工程師可以無痛的轉換罷了。另外就是他仍然保持了對商業應用的親和性,只要發行編譯好的 dex 檔案,而不需公布程式碼。


資料來源:http://mmdays.com/2008/09/29/android-%e6%b7%ba%e6%8e%a2%e4%b8%80/

(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(1) 人氣(1,224)

  • 個人分類:電腦和網際網路
▲top
  • 11月 13 週五 200916:58
  • 他教會她做愛,然後離開。男人,女人~


那是他們的初夜.她的,和他的.

她在他懷裡說.她是他的.以後都只是他的.


他抱著她說,他以後再也不碰別的女人了.


 


 


那一階段.他們好的如膠似漆...


女人.一旦把自己給了他.就覺得自己的一切都是他的了.


認定了一輩子都要和他在一起.不再輕易說分手.她也是


 


 


所以以後的一切她都忍了.


他們做薆的次數從每週3次變成每週1次.再變成每月一次.


他說他沒有精力.


算了.你要注意身體,她說.


每晚的約會變成電話.再後來用幾條消息代替.


甚至有時候連消息都沒有.他說我們老夫老妻了.


幹嗎這麼在乎形式啊.她沒有說話.


他說晚安.她哭了.



她不知道他們之間出了什麼問題.


他會對她這樣...記得誰和我說過.


如果一個男的不碰她了.就是不愛她了.


 


 


後來她知道他和另一個女的上過床了.


據說那個女的不是第一次.但是她能讓他很快樂.


他和另個她天天粘在一起.


 


 


而她和他,已經快兩個月沒有發生過關係了.甚至連聯繫都很少.


 


 


他看到她的時候有點驚訝.


她一看到他就哭了.她說你已經快兩個月沒有碰過我了.


他沒有說話.拉起她去了附近的一家賓館.一路上什麼話也沒有說.


他們像以往一樣開了房間.她洗完澡出來.他還是一動不動坐在沙發上.他連看都沒有看她一眼.


那一刻.她心都碎了.


她強忍住眼淚.脫下浴衣.他還是沒有反應.


她說,最後一次好麼?他沒有說話.從口袋裡拿出避孕套.


她說不用了.我不會要你負責任的.這是我們的最後一次.


她想盡辦法讓他快樂.想盡辦法滿足他.


她要讓他知道.她能給你的,我也可以.


但是她還是發現無論她怎樣努力.


他們之間都已經結束了.以前他都會把她全身吻遍.


但是今天他沒有.


 


 


完了她躺在床上問他.還記不記得他們的第一次?


他邊抽煙邊說,那是很久以前的事了吧.


她說那你還記得你那時候說過的話麼?


他說..人是會變的.我們分手吧.


 


她到現在還清楚的記得他的那句話,人是會變的.


並且,她也發現了.人真的會變的.


 


 


分手以後的她,白天整天躲在家裡.


唯一能做的事情就是上網.有一次在網上認識了一個男的.


他說他要看她的身體.看一次100QB.


她突然想到他們的最後一次了.


他對她的身體一點興趣也沒有.她哭了.竟然脫光了衣服.


晚上她就和那個從來沒有見過面的網友去開了房間.


她讓他很快樂.他讓她做他女朋友.她拒絕了.


 


 


第二天,她又開始尋找新的對象.晚上去一夜情.


她感覺自己已經和****一樣了.她和不同的男人上床.


有的很帥.有的很醜.小的十六七歲.老的五六十歲.


而且.她從來都不要求他們用套子.
她要自己身上沾滿了不同男人的氣味.這樣就不會聞到他的味道了.


 


 


在QQ上碰到他.他換了名字.她沒有認出是他.


他說可以看看麼?她以為又是個來看身體的傢伙.


她照樣把衣服脫光.攝像頭對著自己的身體.


看到對方圖像的時候.她忘記了是什麼感覺.


那張臉曾經無數次出現在記憶裡.現在.卻只在夢裡.


她笑了.


他約她見面.他說你怎麼變成這樣.


她回答他,人總會變的.不是只有你會.


他說,你為什麼要這麼作踐自己.你這樣和****有什麼區別.


她說,區別啊.我不收錢的.


但是如果對象是你.你給我一百萬我都不會再和你上床了.


 



一口煙吐在他臉上.她走了.


後來從朋友口中得知.他每天去酒吧帶不同的女孩子回家過夜.


 


 


曾經,她在他懷裡說.她是他的.


以後都只是他的.他抱著她說,他以後再也不碰別的女人了. 


 
看完,覺得好殘酷...
 
資料來源:http://www.qinyoo.com/home/space.php?uid=450&do=blog&id=1808
(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(4,820)

  • 個人分類:短文
▲top
  • 10月 30 週五 200900:38
  • 搏君一笑

某公司今天舉辦一場面試,結束後。以下是人事官跟總經理的對話
人事官:「今天有三個人來面試,董事長說三個人都要錄用,請總經理想個職務給他們吧~」
總經理:「三個人各是什麼樣的人?他們假日願意加班嗎」
人事官:
「第一個人希望月領3萬,無論發生啥事情,隨時都願意任勞任怨地加班~」
總經理:
「很好!請他來當底層工程師吧!機房最需要這樣的人!!」
人事官:
「第二個人期望月領5萬,不太願意加班,但只要有重大事件發生,即使假日也會呆在職務上」
總經理:
「恩..看他經歷還不錯,請他當課長吧!」
人事官:
「第三個有點...他期望月領7萬以上,無論發生啥重大事件、無論死多少人,只要節日他就一定要過、下午五六點就走人。更糟的是有人罵他,他還會很理直氣壯嗆回去~這樣的人可以擔任啥職務呀?」
總經理:
「沒關係~~~~~~~~~~~~~~~~~
   他可以當我們秘書長!」
 
資料來源:http://dreamyeh.pixnet.net/blog/post/24889221
(繼續閱讀...)
文章標籤

香醇咖啡 發表在 痞客邦 留言(0) 人氣(75)

  • 個人分類:娛樂
▲top
«123...14»

近期文章

  • 增量與差異備份之間的不同!
  • Router ; Switch ; HUB 差異
  • 通過UDLD模式解決交換機接口故障的方法
  • 導致交換機接口出現err-disable的幾個常見原因!
  • ADSL上傳滿載對下傳的影響!
  • VMware的Thin provision與Thick provision格式效能差異
  • LUN和VOLUME的關係
  • 近親結婚?
  • 黃金單位換算
  • 使用iPhone 4的FaceTime必要條件!

最新迴響

  • [23/07/31] 新飛Hsinfei 於文章「原來加油是這樣子用滴呀 ^^~...」留言:
    加油英文是”Add Oil”嗎?教你擺脫中式英文,正確說法這...
  • [22/04/10] 訪客 於文章「黃金單位換算...」留言:
    回饋您這方面資訊,我是從 PTT搜尋引擎的排名,看...
  • [20/11/12] TIM 於文章「[ 網路 ] 何謂 VPN ?...」留言:
    相關2021年 VPN使用推薦可以參考此篇:https://...
  • [18/09/27] 訪客 於文章「黃金單位換算...」留言:
    "個人認為,眾多黃金投資產品當中,國際現貨黃金更具優勢。 ...
  • [18/05/15] cuppa 於文章「[ 網路 ] 何謂 VPN ?...」留言:
    謝謝版主分享. 這裡有一篇從網路行銷的觀點來討論VPN的文...
  • [17/12/27] 眼花 於文章「[ 網路 ] 何謂 VPN ?...」留言:
    感恩分享解說,雖然眼有點花,感恩 ...
  • [17/12/02] 訪客 於文章「★★手機發明者之一施敏的良心告白★★...」留言:
    這些東西高一上就教過了...
  • [17/09/19] 訪客 於文章「★★手機發明者之一施敏的良心告白★★...」留言:
    高中有教那麼多嗎 你念哪間我也要去念...
  • [17/08/23] 訪客 於文章「★★手機發明者之一施敏的良心告白★★...」留言:
    你可以去重讀高中嗎 有能階的是電子 會躍遷的是電子 原子如果...
  • [17/01/28] 外匯車 於文章「Glucosamine(葡萄糖胺)的療效...」留言:
    感謝...

誰來我家

個人頭像

香醇咖啡
暱稱:
香醇咖啡
分類:
不設分類
好友:
累積中
地區:

文章彙整

文章分類

  • 童語 (1)
  • 思考 (3)
  • 音樂 (2)
  • 小品 (7)
  • 旅行 (1)
  • 飲食 (2)
  • 良言 (2)
  • 新聞與政治 (3)
  • 投資 (13)
  • 圖書 (1)
  • 娛樂 (13)
  • 短文 (5)
  • 電腦和網際網路 (53)
  • 健康 (13)
  • 未分類文章 (1)