2011/9/25

資訊學院的30門課 - 總綱

電子計算機程式設計
作業系統
數位系統導論
軟體工程概論
物件導向程式設計
資訊專題
電子電路學
網路與通訊概論
計算機導論
機率論
程式語言
電腦動畫
系統程式
資料結構
線性代數(2)
微積分(1)
普通物理學(1)
以上是85+

集合論
編譯器設計
資料庫系統
演算法
計算機結構與組織
數位系統實驗
線性代數(1)
檔案結構與管理
以上是75+

普通物理學實驗(1)
電子電路實驗
微積分(2)
等候理論
普通物理學實驗(2)
普通物理學(2)

以下是研究所課程
圖型識別
人工智慧
網路程式設計
Inerternet程式設計
高等視窗程式設計
嵌入式系統
電腦視覺
多媒體網路

2011/9/21

雙核ARM多核架構

在單核時代,Cortex A8架構是絕對的主流。作為ARM官方設計的產品,雖然Cortex A8和Cortex A9都基於ARM v7指令集架構,但是它們之間依然有很多的不同點,其中最重要,也是用戶最能感覺到的,是一項叫做亂序執行的功能。雖然Cortex A8和Cortex A9都支持同時執行兩條指令,但是只有Cortex A9支持亂序執行能力,這個功能究竟是什麼意思?
我們知道,計算機程序,都是由一條一條的指令組成的。這些指令有很多種功能,有的是把數據從一個地方復製到另一個地方,有的是做數學運算,有的負責判斷某一個條件,有的負責從一處跳轉到另一處。編譯器會把所程序員寫出的程序編譯成一條一條順序的指令,就像電器的使用指南一樣,讓處理器遵照它去做。為了方便理解,我們假設一個程序的內容是做一份考試卷,執行的過程是先做完選擇題,再做完問答題;做選擇題的條件是要有鉛筆去塗答題卡,而做問答題的條件則是要有鋼筆去寫答題紙。
如果你忘了帶鉛筆,那麼為了完成考卷,就必須要等到鄰座的做完了選擇題,你找他借來鉛筆,才能繼續自己的考卷,這樣就耽誤了時間。對於一顆標準處理器而言,很多時候都會遇到這類"沒有帶鉛筆"的情況,比如需要訪問的數據在內存裡,這就需要處理器通知內存管理器,讓內存管理器去把數據調入處理器,才能繼續執行這一條指令。由於處理器內部的時鐘延遲是納秒級別,而內存的運行頻率則有數十納秒的延遲,兩者之間差了許多倍,因此處理器一般需要消耗很長的等待時間,才能繼續開始工作,最終的結果就是性能下降。

這時候,亂序執行就派上用場了。一個程序的指令都是有嚴格的邏輯順序的,但是所謂的亂序執行,就可以打破這種原本的指令順序,在邏輯允許的範圍內以一種新的順序去執行程序。如果繼續用考試的例子,那就是這樣:
http://www.evolife.cn/html/2011/60967_2.html
那麼回頭來看看Scorpion核心。這個核心是高通在單核時代設計出來的,雖然也是基於ARM v7指令集架構,但在具體設計上屬於高通自己的實現,與Cortex A8相比有很多區別,其中最重要的就是高通為Scorpion核心引入了部分的亂序執行能力。所謂部分的,就是說在某些特定指令序列下,Scorpion可以實現亂序的效果,Cortex A8則不行。在單核時代正是由於這點,高通的處理器核心在很多測試中的表現都要稍好於Cortex A8,但是當雙核時代來臨後,大家都升級到了支持完整的亂序執行的Cortex A9核心,而高通則依然沿用老舊的Scorpion核心,當年的優勢就成為了現在的劣勢。

不僅如此,在純執行能力上,Scorpion面對Cortex A9也處於劣勢。根據高通提供的數據,同樣在1000MHz的頻率下,Cortex A8的執行能力為2000DMIPS(可以簡單認為是每1週期執行兩條指令),Scorpion比它要高一些,為2100DMIPS,但是Cortex A9則高達2500DMIPS,領先Scorpion接近20%。雖然高通試圖通過超頻20%的方式彌補這個差距,但是在單線程性能上,還是被競爭對手甩開了不小的距離,畢竟亂序執行的能力在很多應用中可以獲得的性能提升遠遠不是這200MHz的頻率可以彌補的,而且更高的頻率也會抵消Scorpion核心在省電上的特點。這點在後面的測試裡也可以看出來。
這就是為什麼ASMP目前採用的越來越少的緣故。雖然ASMP存在著設計簡單、結構清晰、耗電較低的優勢,但是由於性能不足,在PC領域從來都沒有成為過主流。而在移動領域,高通認為手機對於耗電的要求要大於性能,又希望可以在雙核時代繼續沿用單核時代的核心架構而不需要徹底重新研發,因此採用了ASMP架構。但是事實證明,高通在這點上可能有些耍小聰明之嫌,因為既然消費者決定購買雙核,那麼就一定是衝著性能去的,並且對功耗也已經做好了心理準備。


最近比較火熱的小米手機就選用了高通MSM 8260芯片,不過它自稱的"最快"還要打上一個問號

根據高通的官方數據,其1.2GHz的MSM8x60芯片組在滿負荷工作的時候,僅處理器部分就要消耗大約1.2瓦特的功率,這相對於單核時代不到500毫瓦的功耗而言,也已經是非常高的數值了,這證明了不管怎麼去省電,雙核都依然是雙核,既然如此,去追求雙核應有的性能顯然應該比如何去節省那麼一點點的電更加重要。換一個方面說,性能足夠強的話,系統可以以更短的時間完成任務,進而更多地進入低功耗的狀態。高通通過ASMP也許節約了一定的耗電,但是其最大33%的性能損失會導致系統多出33%的時間處於高功耗狀態,消耗的功率可能抵消甚至反超節約的,讓高通的如意算盤打空。

回到話題上來,可能有些讀者會認為,單獨來看,可能ASMP和SMP的差距也並不是那麼巨大,在之前圖中的極限狀況下也就相差33%而已,在實際運行中的差距很難達到這個數字。但是不要忘記,之前的文章中我們討論過亂序執行的重要性,那麼如果我們將指令等待也引入到之前的圖中,那麼會發生什麼情況呢?

在此,我們用灰色的方塊代表需要等待的指令,而等待時間​​為兩個週期。
這就是為什麼ASMP目前採用的越來越少的緣故。雖然ASMP存在著設計簡單、結構清晰、耗電較低的優勢,但是由於性能不足,在PC領域從來都沒有成為過主流。而在移動領域,高通認為手機對於耗電的要求要大於性能,又希望可以在雙核時代繼續沿用單核時代的核心架構而不需要徹底重新研發,因此採用了ASMP架構。但是事實證明,高通在這點上可能有些耍小聰明之嫌,因為既然消費者決定購買雙核,那麼就一定是衝著性能去的,並且對功耗也已經做好了心理準備。

2011/9/20

Google在併購Groupon失利後,於今年4月推出Google Offers,為了加快團購服務的腳步,Google採用併購策略,先後買下了Dealmap與DailyDeal。

Google在併購Groupon失利後,於今年4月推出Google Offers,為了加快團購服務的腳步,Google採用併購策略,先後買下了Dealmap與DailyDeal。

Google繼於今年8月買下以美國市場為主的Dealmap團購網站後,本周再併購了德國的DailyDeal團購網站。

DailyDeal是在2009年12月於柏林設立,當時僅有兩名員工,隨後將市場擴大至德國、奧地利與瑞士等,供使用者選購當地的餐廳、旅遊、娛樂與零售服務,被Google併購將可加速該站擴大規模,連結更多商家與消費者。DailyDeal預估今年可創造4000萬歐元的交易額。

北京時間9月19日消息,據國外媒體報道,由於旗下團購業務Google Offers發展緩慢,谷歌宣佈收購德國團購網站DailyDeal。

  DailyDeal創建於2009年9月,今年第一季度出售了25.2萬張優惠券。DailyDeal已經將業務範圍擴展到奧地利和瑞士。據DailyDeal聯合創始人之一法比安·海勒曼(Fabian Heilemann)稱,該公司在奧地利的業務已經超過Groupon。DailyDeal已經宣佈將進入更多的歐洲市場,下一步將進入的市場可能包括斯堪的納維亞地區、比利時、荷蘭和盧森堡。DailyDeal 2011年營收將達到約4000萬歐元。

  目前,Daily Deals只在北美市場開展業務。據團購資訊聚合網站Yipit稱,在投入運營的前三個月,Google Offers在紐約、舊金山和波特蘭地區的業務出現滑坡。與7月份相比,儘管8月份交易數量增長了22%,但營收下滑了23%。

  收購DailyDeal標誌著谷歌有意進入歐洲市場。DailyDeal已經建立起穩固的業務,據稱在許多國家的業務都超過了Groupon和LivingSocial。

  谷歌最近收購了團購資訊聚合網站The Dealmap。

  目前尚不清楚谷歌收購DailyDeal的協議條款。

開價53億美元收購Groupon未果,Google持續向團購網站業務投注資源。根據路透(Reuters)報導指出,網搜龍頭Google於美國時間8月1日對外宣布,該公司已經收購團購訊息聚合網站The Dealmap。分析師認為,Google此舉可說是向被Groupon和LivingSocial霸佔的美國團購市場,展開進一步擴張。

報導指出,Google並未公布收購The Dealmap的交易條款,但在聲明中表示,對於The Dealmap團隊所取得的成就印象深刻。

事實上,在收購Groupon未果後,Google於2011年4月就推出團購服務Google Offers,並於隨後推出行動支付服務Google Wallet,展開該公司進軍電子商務市場的攻勢。

近2年來團購網站正歷經爆炸式的成長態勢,目前全美共計有400家團購服務供應商,根據追蹤在地廣告市場的BIA/Kelsey公司數據顯示,估計到了2015年,團購市場規模將可望達到61億美元。

Groupon目前是美國團購網站中的翹楚,緊跟其後的是LivingSocial,不過在美國市場,其他大型競爭對手,鉅額投資正紛紛湧現。Google曾於2010年試圖收購Groupon沒有成功,甫於2011年4月推出了團購服務Google Offers。

據悉,Dealmap創立於2010年5月,該網站聚合大量團購網站推出的折扣訊息,目前擁有超過200萬的用戶,此外,Dealmap的應用App也已經被蘋果iPhone手機和Google Android手機下載超過100萬次,可見其受歡迎之處。

The Dealmap日前表示,該網站將暫時繼續專注於其目前主打的產品和服務。據悉,透過The Dealmap網站及其行動應用App,用戶依舊可以獲取大量團購訊息。此外,The Dealmap補充表示,該公司已經準備好與合作伙伴和消費者,隨時分享更多關於The Dealmap整合和過渡計劃的最新消息。

對於這塊呈現爆炸性成長的團購市場,網搜龍頭Google已經一步步出招,未來可以想見的是,Google必將團購網站的經營結合該公司既有的線上廣告優勢,對於當前如日中天的Groupon和LivingSocial等團購網站,可說是來勢洶洶。

Google決心要發展團購服務,在併購Groupon失利後,於今年4月推出Google Offers,為了加快團購服務的腳步,Google採用併購策略,先後買下了Dealmap與DailyDeal。

由於團購服務的進入門檻不高,使得全球的團購服務如雨後春筍般出現,並讓Yipit這類專門追蹤全球團購服務及商品的推薦網站應運而生。Yipit每日追蹤全球679家團購服務,向使用者推薦當日最佳交易,而且還會發表團購趨勢報告,但目前Yipit只支援美國城市。

根據Yipit的數據,現階段全球最大的團購服務為Groupon,估計今年可創造15億美元的營收,第二名則是LivingSocial,估計其年度營收為5.4億美元。

Yipit分析,雖然團購服務門檻很低,且Google與Facebook都擁有大量的用戶,不過要達到Groupon現有的規模並不容易,特別是Google與Facebook缺乏在地的銷售團隊,以致於無法提供大量的優惠交易,這也是Google Offers與Facebook Deals只在少數城市提供服務的原因。

Groupon目前全球各地的銷售團隊約有3500名員工,Google則依賴併購擴大市場,而Facebook已在今年8月底宣布關閉4月才上線測試的Facebook Deals團購服務。

Wallet為Google所開發的行動付款免費程式,可於程式中儲存金融卡、信用卡、禮物卡、集點卡或優惠券的虛擬版本,藉由手機內建的近場通訊(Near Field Communication,NFC)技術,使用者只要將手機貼近商家感應器,就能以Google Wallet付款或集點。

Google錢包(Google Wallet)正式上線,合作夥伴除了原有的花旗、MasterCard和Sprint Nextel之外,最新加入全球最大信用卡龍頭Visa,另外還有Discover Financial Services和美國運通卡。

TechCrunch網站進行試用,使用NFC技術的Google錢包,只要貼近感應器就可以付款,手機若未解碼就無法使用,如果30分鐘內沒有使用,再度使用就必須再輸入PIN碼,設計方面還稱得上安全。

不過感應方面偶爾還是不太靈光,當Greg Kumparak(TechCrunch網站記者)利用手機感應不過的時候,再拿出美國運通卡卻是一刷就過;另外一大問題就是,Google錢包需要新規格的NFC讀卡機支援,因此並非設有NFC讀卡機的商店就能使用;雖然Visa、美國運通都已經允諾加入Google錢包聯盟,不過目前的機器還未支援,因此相對來說,能夠使用Google錢包的商家還是極少數。藉由手機內建的近場通訊技術,使用者只要將手機貼近商家感應器,就能以Google Wallet付款或集點。初期僅支援由花旗銀行發行的萬事達卡,但包括Visa、Discover與美國運通等信用卡業者未來也可嵌入Google Wallet中。

Google周一(9/19)宣布Google Wallet服務正式上線,首家搭配的電信業者為Sprint,近日將開始把Google Wallet程式傳送到Sprint的Nexus S 4G手機上,當使用者在手機上發現Google Wallet程式時即可開始使用該服務。

Wallet為Google所開發的行動付款免費程式,可於程式中儲存金融卡、信用卡、禮物卡、集點卡或優惠券的虛擬版本,藉由手機內建的近場通訊(Near Field Communication,NFC)技術,使用者只要將手機貼近商家感應器,就能以Google Wallet付款或集點。

Google付款服務副總裁Osama Bedier表示,Google Wallet現階段允許使用者透過花旗銀行發行的虛擬萬事達卡或Google預付卡(Google Prepaid Card)付款,其中,Google預付卡可利用使用者所擁有的任何信用卡儲值,為了感謝早期採用者,今年底以前於Google Wallet中啟用Google預付卡功能的使用者都能獲贈10美元的免費預付卡金額。

初期Google Wallet僅支援由花旗銀行發行的萬事達卡,但包括Visa、Discover與美國運通(American Express)等信用卡業者也已提供其NFC規格,以讓這些品牌的信用卡未來也可嵌入Google Wallet中。Bedier說,Google的目標是讓所有的付款金融卡都可添增至Google Wallet,讓使用者揮別厚重的傳統皮夾。

Google計畫針對Google Wallet釋出各種API,以供發卡銀行在Google Wallet中整合付款機制,以及讓商家提供換貨、集點或收據等功能,未來亦可望支援其他的行動裝置或平台。

根據Gartner的估計,去年全球約有1.02億的人口使用行動付款服務,估計今年行動支付人口將成長38.2%,達到1.41億人,交易規模亦將成長76%,達到861億美元。

Wallet為Google所開發的行動付款免費程式,可於程式中儲存金融卡、信用卡、禮物卡、集點卡或優惠券的虛擬版本,藉由手機內建的近場通訊(Near Field Communication,NFC)技術,使用者只要將手機貼近商家感應器,就能以Google Wallet付款或集點。

Google Wallet(Google 皮夾)用最簡單的方式說,就是 Google 推出的手機 NFC 電子錢包。在核心的部份可以想像它就是內建在手機裡的悠遊卡,同樣可以「碰了就走」,但自然結合了手機之後功能性就多了很多。首先,存在手機裡的卡片可以不止一張 -- 只要是合作的信用卡都可以存在裡面(目前 Google 的合作銀行是花旗,其他信用卡的話可以「儲值」到 Google 的一張預付卡裡),如果有合作的商店的集會卡/會員卡的話,也可以存在裡面。此外,Google 還推出了另一個配套的服務,叫做「Google Offers」,可以將折價券送到你的手機裡,在你付款的時候只要將手機到感應器前「嗶」一次,計算會員卡優惠、加入折價券折扣、和信用卡扣款三件事可以一次完成。

當然在這樣的系統裡,安全會是第一考量,所以 Google 內建了多套安全機制來保護消費者的信用卡。在軟體方面有手機的鍵盤鎖、PIN 碼、資料加密以及手機上永遠不會顯示完整的信用卡號碼的機制;在硬體方面 Google 則是設計只有在 Google Wallet 已經開啟並解鎖的時候 NFC 晶片才會開啟的防護,以減少被側錄資料的機會。Google 另外設計了遠端資料抹除的機制,如果你手機不小心弄丟的話,可以遠端把這些資料都清掉。我個人的看法是 Google Wallet 應該不會比普通的 RFID 信用卡要危險多少 -- 單純就卡號遺失的危險直接寫在卡片上的信用卡還要來得危險得多 -- 如果是擔心後端系統的安全的話...至少再差也不會比現有的系統差吧 XD。

目前在美國 Google Wallet 系統是由 Google(軟體)、Mastercard(PayPass)、花旗銀行(發卡銀行)、Sprint(手機商)合作,這當中 Mastercard 扮演著最重要的角色,因為目前全球已經建置好的 300,000 個 PayPass 點都可以用 Google Wallet 來付費,對 Google Wallet是否能起飛影響巨大。相較之下 Google Offers 的服務範圍就小得多,目前暫時只從舊金山和紐約開始,但加入的都是頗知名的連鎖店,包括 Macy's、Subway、Wallgreens、Toys 'R Us 等。Google 確認了不會從交易中抽取佣金,Google Wallet 的 App 本身也是免費的。

Google Wallet 初期只支援 Sprint Nexus S 4G 一隻手機,目前正在實際測試系統,預計夏天就可以讓 Google Wallet 正式上路,但暫時沒有往全球其他地方輸出 Google Wallet 的計畫。但可以想見的是,如果真的有遇到困難的話,那也是政治因素居多,而不是技術因素 -- 光是看台灣有多少種 NFC 小額付款方式整合不起來就知道了...

2011/9/19

怪裡怪氣的SQL

本來是這樣寫的
sql = "SELECT * FROM TABLE1 A, TABLE2 B WHERE 1=1";
目的是為了下面的語法好兜
if( condition1 )
sql = sql + " and a=cond1";
if( condition2 )
sql = sql + " and b=cond2";
目的就是不管condition1跟condition2成不成立,sql也是可以跑的。
簡單說就是懶。


但是後來寫的人又發現A.AAA = B.BBB是必要條件,又把它加上去。
就變成這個怪樣子。

比較正確的作法是把1=1改成A.AAA = B.BBB,
不過大家知道的咩,趕案子時有時候沒有想那麼多。