網頁

2013年10月1日 星期二

【Link Aggregation 網路聚合技術】

【來源:Thecus

此技術只支援擁有802.3ad技術的switch方可使用。

一般來說某些設備與軟體,如:NAS、linux,可以在設定上去調整是否要支援此功能。

所謂的802.3ad的聚合技術,經過網友測試,必須當你的設備相當忙碌時,你的第二張網卡,才會發揮功效。
http://www.mobile01.com/topicdetail.php?f=494&t=2538492

Link Aggregation,可稱頻寬聚集或網路聚合,是 IEEE 標準規格802.3ad協定中的一部份,802.3ad協定規範是:交換機(Switch)上許多不同的實體連接埠,可以邏輯性的共同結合在一起,進而視為一條實體線;網路聚合功能也有不同稱呼,Intel 叫Link Aggregation,3COM 叫Port Trunking;在 Linux 系統下可利用軟體的方式(Linux Bonding 的技術)結合多張網路卡來增加網路頻寬。(資料來源:Wikipedia)
簡單來說,當我們一張網卡的速度不夠的時候,就可以試著兩張網卡綁在一起來使用。


為什麼要這樣用?當你沒有10 Gigabit網卡時,又經常透過網路存取超過1 Gigabit的影音檔時,利用Link Aggregation的技術就可以擴充區網的頻寬。而在Thecus NAS的提供的Link Aggregation裡,可讓你設定Jumbo Frame (1500~9000 bytes) 和Aggregation Type。



以下將介紹這些設定的意義與配套措施。
Aggregation Type聚合類型:
Load Balance(L/B; 負載平衡):負載平衡在網路聚合中,自動分配工作量以達到最佳資源利用。極大化提高吞吐量,減少響應時間,避免過載。
採用的時機如下:
  • 在網路服務有「不斷線」需求的時候可以使用。
  • 小封包量多時也可考慮使用,例如使用eMule/BT下載時。
  • 掛載NAS 的iSCSI LUN或網路磁碟機,用來存取影像編輯檔案作業時。
  • 需要流量平衡時,不可以用Failover only。
  • 不同速度的網卡可以共用,但不建議。
Failover(容錯切換/故障切換):在網路聚合中,當網路發生故障時,自動切換到冗餘或備用的網路。
802.3ad:802.3ad是IEEE 802.3ad規範的網路聚合模式。可將多個網路埠組成一個共享相同速度與全雙工的網路聚合,以獲得容錯、負載平衡與提高傳輸效率的功效。需要switch 支援802.3ad設定。此設定特別針對同型號網卡時使用。
Balance-XOR:在發送端所有可用網路埠的MAC位址間,將封包流量分散到所有可用網路埠上。這種模式有容許故障失效與流量負載平衡的效果。
Broadcast:廣播的模式,設法把需要傳輸的「每一個封包」,發送給網路聚合中「每一個網路埠」。當其中一個網路埠失效的時候,仍可正常運作。
Balance-TLB (Transmit Load Balance):此模式對於封包的發送與接收作業採不同機制。對於發送埠同時具有自動負載平衡和容錯功能,而接收埠只具有容錯的功能,此模式不需switch 支援及設定
Balance-ALB (Adaptive Load Balance):發送與接收同時具備自動負載平衡與容錯功能, 其中一個網路埠失效時,仍可持續運作;此模式不需 switch 支援及設定
Client端系統的網卡該如何設定?
如果你想要設定Jumbo Frame,必須先確認網路環境上的分享器(router)/集線器(hub)/切換器(switch)的規格,甚至是網路上的各個客戶端裝置(PC、印表機)是否支援Jumbo Frame。例如NAS上設定了9000 bytes Jumbo Frame,但是switch或PC不支援,那麼這個大封包就會卡在這些不支援的設備上,反而造成網路塞車。


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

【Jumbo Frame】

【來源:Thecus blog

什麼是巨型訊框/巨型封包(Jumbo Frame)
Jumbo Frame是網卡與集線器上支援的功能,是專門為Gigabyte 乙太網路設計的業界標準,一種超長封包格式。採用Jumbo Frame可以發揮Gigabit乙太網路的效能,讓數據傳輸效率提高50%-100%。過去乙太網路的標準為1518 bytes,MTU預設在1500,也就是每個封包1500 bytes大小,傳送資料的時候,要切割很多封包。Jumbo Frame就是把封包大小改大,以節省傳送封包的次數。



建議採用Jumbo Frame的時機:
  • 只適用於「大檔案」、「長時間」傳輸。
  • Database backup
  • HD Audio/Video streaming
  • Video/Image Editing Environment
何時不適用Jumbo Frame
  • 當網路環境有大/小封包共存或小封包數量多時,Jumbo Frame反而會拖垮效能。
  • BT/ eMule這類的檔案傳軟體,不適用Jumbo Frame,因為來源非固定(IP address/MAC address)且傳給你的資料是分割過的小檔案時。




As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年8月20日 星期二

【node.js】安裝+測試

【環境:linux】
說明:
首先須先確認你的環境是否已經安裝
1.g++ GNU C++
2.git
 
git clone https://github.com/joyent/node.git
cd node
git checkout v0.6.7
./configure
make
sudo make install 

接著在terminal上直接編輯一個檔案為node.js
在檔案內新增一行console.log( 'Hey you' );

vim node.js
console.log( 'Hey you' );

離開編輯環境,輸入 node node.js

驗正版本的話,請輸入node --version

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年8月19日 星期一

【android 學習】建立你的ADT

【環境:ADT Build: v22.0.5-757759】

時間:20130819

說明:

對新手來說,為什麼不是安裝eclipse就好了嗎?什麼東西是ADT??
eclipse是編輯環境,而ADT,從名字上來看就是android developer tools。
其實是google對於開發者的一點貼心,一開始我以為這只是一些讓developer開發方便的plugIn。
但其實你只需要安裝ADT,裡面就幫你安裝好eclipse,並幫你整建好大部份的環境設定。

1.
這是官方的 教學文件 ,對於一個android的入門者,整建自己的編輯環境是相當重要的一件事情,這份文件教你下載ADT,並教你安裝一些必須的工具,官方的文件,相對於市面上許多的安裝套件教法,相對的安心許多。

2.
建立,你的android SDK manager。

3.
建立 android virtual device manager。
此跟xcode不同的是,你必須建立你要模擬的模擬器環境。
xcode是,只要你安裝下載後,運用的模擬器的資源,都是跟你的電腦相同。
eclipse的好處是,你可以限定你的環境資源,讓你的模擬器,更加貼近你未來要安裝此app的環境。


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

【eclipse】hot key

【環境:eclipse ADT  v22.0.5-757759】

工欲善其事,必先利其器。
以下為eclipse常用的快速鍵:

Command + Shift + L:快速鍵小幫手
再按一次會進入編輯快速鍵的模式。

Command + O:顯示大綱
Command + 1:快速修復
Command + D:刪除當前行

Command + /:注釋當前行,再按則取消注釋

Command + Shift + Z:向後一個編輯動作
Command + Z:向前一個編輯動作

Command + Option + ↓:複製當前行到下一行
Command + Option + ↑:複製當前行到上一行
Option + ↓:當前行和下面一行交互位置
Option + ↑:當前行和上面一行交互位置
Option + ←:前一個編輯的頁面
Option + →:下一個編輯的頁面

Option + /:代碼提示

Option + Return:顯示當前選擇資源的屬性

Control + Q:定位到最後編輯的地方
Control + M:最大化當前的Edit或View(再按則最小化)
Command + T:快速顯示當前類的繼承結構
Command + W:關閉當前Editer
Command + K:參照當前選中的Word快速定位到下一個
Command + E:快速顯示當前Editer的下拉列表(如果當前頁面沒有顯示的用黑體表示)

Command + Shift + E:顯示管理當前打開的所有的View的管理器

Command + Shift + W:關閉所有打開的Editer
Command + Shift + X:把當前選中的文本全部變為大寫
Command + Shift + Y:把當前選中的文本全部變為小寫
Command + Shift + F:格式化當前代碼
Command + Shift + P:定位到對於的匹配符(譬如{})(從前面定位後面時,光標要在匹配符裡面,後面到前面,則反之)


Option + Shift + M:抽取方法(這是重構裡面最常用的方法之一了,尤其是對一大堆泥團代碼有用)
Option + Command + C:修改函數結構(有N個函數調用了這個方法,修改一次就搞定)
Option + Command + L:抽取本地變量(可以直接把一些魔法數字和字符串抽取成一個變量,尤其是多處調用的時候)
Option + Shift + F:把Class中的Local變量變為Field變量



As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年8月16日 星期五

【數據】2013年第二季 台灣行動市場數據報告

【環境:智慧型手機、平板,特殊節日分析】

此數據為vpon 2013/8/12 的數據報告,僅作參考


目前台灣用戶
android:76.1%
iphone:20.1%


Android數據
目前android主流一樣為 samsung
htc緊追在後

Android 4.x 版本已達 77%。
4.1 版本已成為主流。
4.0 Ice Cream Sandwich 較上,一季減少 10%
持有大螢幕的android的人數上升速度將近7%
平板用戶增加7%
android大螢幕的策略,對於喜愛用大螢幕遊戲的年輕人、眼睛不好的中高年齡層,繼續保有其優勢。




iOS數據
可以看到,主流果然是iphone5,4s,4
比較特別的事 ipad mini 、 ipad4 沒達到預期的效果,還是以ipad2為主流
頻果的硬體和軟體幾乎都是更新後,用戶也會持續跟進,跟android陣營差別最大的地方

而89%的用戶已經更新到ios6
剩下的ios5的用戶,大多應該是還在用iphone3gs or iphone4等用戶


台灣人行為分析
3g行動上網高達51.8%
但若之後的 4g 吃到飽取消後,不曉得是否會下降,值得觀察
如:東南亞用戶其實不流行3g等服務,加上中華電信的定點wifi服務。
但若降低了3g用戶數量,會否對 EC平台 or 一般通訊軟體的使用量會否降低,回歸成 簡訊 等行為模式,也是值得參考。


週末用戶行為分析
代表現在台灣人在週末從早上11點到晚上九點,還是以3g為主

從Android最常使用的app行為來看
社交類的還是佔大多數41%
其他類別如
使用影音、教育、娛樂、生活和新聞 App 有 55%

iphone最長使用的app行為
查詢旅遊、瀏覽影音、生活資訊和新聞媒體 App 有 63%

綜合以上兩者數據,可以發現,除了我們可以預知的『社交』類,還是佔大宗外。
其實『新聞』、『生活』、『影音』等,還是繼續佔有其他應用類別的項目。
但現在卻還未有一個最好的新聞app,畢竟各地方、個人的生活形態不太相同。
所以在建立這些app的同時,或許標準明確的區隔目標對象,如商務人士、高科技業務、一班人、設計師等...或許可以在『資訊』類,得到較大的效果。

特殊節日

數據使用量會上升,可以期待的是,現今大多app開發商,都未有依照節日給予特定的活動,跟客戶聯結,目前版主看到的只有line還有一些美食團購等app。




As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年8月7日 星期三

【新聞】Mashable 公佈 2013 年第二季最多人使用的 App

【來源:Mashable

這份數據,並無特別針對ios or android,但由此可看到,世界上最火紅的果然還是那些,當突破者企圖殺出重圍,或許工欲善其事,必先利其器,從該公司的氣氛,領導人的風格..等,或許可以看出些端倪,單純從app著手,看 UI 如何的特別,或許只是皮毛,雖然學了皮毛,要取得專案的結束,是相當方便,但著重在核心的殺出重圍,沒有突破,卻永遠只是結束一個專案而已。





As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年8月6日 星期二

【推介】bootstrap 3

【環境:mac】
說明:

之前做網站時,接觸到這類型快速的套版系統,對設計上僅有皮毛的程式設計師,幫助相當大也相當快速,功能也相當齊全,當然除此之外還有許多很棒的前端版型,希望以後都可以一一接觸到。


Bootstrap 3

目前已經是第三代,我從第二代用起,第三代相對的符合潮流的扁平化設計....

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年8月5日 星期一

【數據】八月份android用戶數據分析

【環境:android , 來源:developer.android

說明:

這些數據是每個月透過google play 所收集而成,此為android訪問google play時,所採集的數據,數據不斷成長,未來的數據當然會更為準確。

Platform Versions




Screen Sizes and Densities




Open GL Version







As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年8月1日 星期四

【新聞】google play下載量首度超越apple store

【來源:Apple inside , 2013/08/01】

Google Play takes top spot in downloads, but Apple's App Store still tops revenue


根據App Annie Blog所述,google play目前的下載量,已經超過apple store,但可從圖表上看出,目前app store在營收這塊,還是佔據有利的地位,或許版圖的分布,跟硬體手機的分布有異曲同工之妙。

而值得注意的是google play下載量較大的地方,分佈在Russia, China, Brazil, and India. 等地區。






As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年7月31日 星期三

【AWS】EC2 後台串接建立 介紹

【環境:AWS】

說明:

在架設aws後,通常我們會很貪心的想要把server的建立變成自動化,也就是說透過自己的web site自行利用AMI的方法,自動擴增我們的backEnd環境,雖然AWS本身有auto Scaling、Load balancing和cloud Watch 的 alarm 可使用,但若能夠在alarm下,後台管理者,自動的得知系統不論是記憶體or硬碟容量快要滿載下,及時開立一個新的EC2 or EBS
注意建立的數量有上限,若需更多的虛擬設備,可寄信跟他們的管理員通知,當然AWS也不是省油的燈,說明在底下:

http://awsdocs.s3.amazonaws.com/EC2/latest/ec2-gsg.pdf

能夠讓你即時上手,AWS的好處就是用多少,花多少,甚至可開micro,每個月有免費的額度,讓測試者盡情測試,你只需stop你的ec2,就不會增加額外的負擔,但只要terminate即可卸載。


相當好用,推薦。

補充:
安裝ec2-api-tools

1.下載工具
2.安裝
3.設定home


java_home  :  export JAVA_HOME=$(/usr/libexec/java_home)





As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

【跨server結合】心得

【環境:AWS、linux】

說明:

在學習建立大型系統專案架構前

世界上有很多很棒的模仿對象

站在他們的角度上去思考,這就是解決的好方法

架設普通流量的網站,很簡單,但最不容易的就是瞬間大量資訊的流通

所以在此想推薦使用的是AWS

關於AWS的優點,網路上很多

在此介紹我曾用過的方式

建構大型專案,通常我們會把很多細微的部分切割開來,譬如說sql的運算,frontEnd入口網站的分流,backEnd的分流匹配…等等

在不同伺服器間互相的溝通,達到在big data速度上的最大匹配效益

當然我們可以無上限的衝高我們單一主機的硬體設備,但遲早會有崩頂的一天

我看過一句話,『絕對無法想像google的伺服器是用大量的次等,甚至更低階的伺服器串聯而成,透過程式的運算,若系統卡住,立即透過其他的backEnd產生支援』

其實我對於linux or 大型系統沒有什麼概念,憑著這句話,就開始著手規劃心中的藍圖。

方式是用戶透過frontEnd去跟backEnd詢問,達到分工的效果,當然我們也可以把sql拆開來獨立成一個自主的系統,但目前運算量尚為達到最大,所以目前將sql與frontEnd作結合。

至於關鍵點的server間的溝通,可以利用區域網路透過socket去結合兩者。

frontEnd的基礎架構:
linux、apache、 sql:

backEnd的基礎架構:
linux

補充:
通常我們在sql,存入大量big data後,有時會遇到一個問題,就是index的擴增太快,排序錯亂,若超出item設定的格式上限,容易造成資料庫錯誤,所以隔一段時間就要優化你的data index,這部分的解決方法還沒想到:
故暫時的想法為重新整理資料表的index排序
SET @newid=0;

update imageRelation set id = (SELECT @newid:=@newid+ 1);

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

【xCode】static lib與專案結合

【環境:xCode4.6.7 , ios6.1 , USE ARC】
說明:在使用static lib時,據我所知,通常最常用的方法有
1.
將lib compiler後,實機和測試均compiler一次,再用 "lipo" 指令,進行結合。

2.
建立work space,加入所有你需要用的lib,並設定,lib與你將要產出的target project作結合。(此次要介紹的)

3.
將所有的static lib包成framework,在需要使用時,再放入你的專案中。

可能還有其他更好的方法,以上是我所知。

==
第一步:

用Xcode建立一個workspace,並同時建立一個static lib(name:staticLib2)與一個用來套用此lib的project(name:your app)。



第二步:setting your static lib
注意以下幾個地方:


2-1.
設定lib.a的安裝路徑
安裝的路徑取決於xcode的偏好設置:Locations.


但我要把他指定到target的路徑位置。

為了使得在各種情況下都一樣,需要把lib編譯設定裡的"Installation Directory"設置為"$(BUILT_PRODUCTS_DIR)"

以防萬一,我們也順便檢查一下“Skip Install”項,此目錄預設應為yes,避免此lib被裝載到mac目錄下的“/usr/local/lib”位置中,檢查是否為 yes。 


2-2.設置static.h文件的路徑
在Build Settings中,將“Public Headers Folder Path”設為"$(TARGET_NAME)"

如此,.h文件的路徑就為:$(BUILT_PRODUCTS_DIR)/TARGET_NAME/xx.h




第三步:Now setting your app

3-1.點擊該工程的target,在Build Phases 項的“Link Binary With Libraries”添加.彈出個框大概如下:選我們的workspace裡面這個lib.(已加入的lib不會再次顯示)


3-2.添加.h路徑.
Build Settings/User Header Search Paths, 添加$(BUILT_PRODUCTS_DIR),記得選擇"recursive"


此時注意,全部路徑添加完畢後,請先執行一次your app,並且關閉整個work space,並且重開

此時在your app中,Xcode就可自動找到static2.h的頭文件。


補充:

When using a static library which includes categories we will also have to add the “-ObjC” flag to the “Other Linker Flags” build setting. This will force the linker to load all objective-c classes and categories from the library. If the library contains only categories “-all_load” or “-force_load” may be needed as well. See Technical Q&A QA1490 for a more detailed explanation of these settings. 

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年2月4日 星期一

【iAd】(二)WWDC2011 iAd的介紹 和 安裝

【環境:ios4 above】
相關聯結:PDF
說明:
此份文件主要說明基本規則:
包含:
1.如何透過iAd去推銷你的app。
2.文件中錯誤的地方為64分帳,現已改為73分帳。
3.iAd的設定,coding。ps:可參考此篇iTunes connect設定
4.iAd的各類尺寸描述,for ipad可有不同的規格(framework: ADInterstitialAd)。
5.iAd的framework有兩個:

  • ADBannerView
  • ADInterstitialAd


文件中亦包含兩者的建立方法。

你亦可以去此地方下載sample


其中ADBannerView…就是一般會看到的banner呈現方式
而ADInterstitialAd…是for ipad,無縫式的接合廣告

6.在iOS 4中:千萬不要[self.view addSubview:otherViewController.view]
(詳細請參閱PDF)


7.要注意的還有App store Review Guidelines,了解在app store上架的iAd規則。
本站中譯連結


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

【iAd】(一)介紹、iTunes connect上的基本設定

【環境:ios4 above】
20120204
說明:
iAd是一個可以讓開發者經由申請後,可放在自己的app中,當做廣告來源的收入,也可以提供自己製作的iAd上傳到網絡。
可以參考目前已在的app store中的iAd Gallery,下載前請將你的app store轉成us store。



主要參考的頁面:https://developer.apple.com/iad/resources/
ps:參考上面連結即可。


iAd 對 開發者 的好處如下
1.提高你的收入
iAd非常簡單便可實現,百位以上的開發者每季有超過15000美元的產出,因架構于ios上,你不需擔心整合的問題,用少量的code便可將iAd裝載入你的app中,之後剩下的就交給apple的技術人員,技術人員銷售的是廣告,並為廣告商提供服務置入到您的應用程序中,app收集產生的廣告收入的70%會提撥給開發者
ps:以前是只有60%,現在改為70%,所以在一些開發文件中看到60%,那是因為還未改正



2.滿足你app的用戶
iAd提供app無縫的結合,當使用者點擊iAd的banner ad,你的app將會暫停且用戶可直接下載新的app或深入到一種身臨其境的廣告無需離開您的應用程序,當使用者結束iAd時,他們將會回到原有的app頁面,開發者甚至可鎖住競爭對手的的廣告,或者開發者不想出現的廣告在你的app當中,每個廣告傳遞資訊精準,無須從你的app當中使用任何數據資料。
ps:要注意的是,ipad有其特別的iAd尺寸。

3.在你的app中置入世界級的品牌
在iAd的網路中如今包含美國、加拿大、澳大利雅、紐西蘭、日本、法國、德國、義大利、西班牙、英國…等,各個世界頂級且熟悉的品牌設計都在iAd中。

你也可以設計自己的廣告,並將此登錄在iAd的網路中


iTunes connect設定


在啓用iAd到你的app前,你必須加入部分資料到iTunes Connect中。

iAd Network
iAd提供一個自動化和直觀的遭作環境,讓您能夠清酥地將iAd的媒體廣告植入你的ios app,通過iAd網絡,您將有機會經由app用戶點擊而獲得收入,您還可在iTunes connect的主頁上利用iAd模組,監視其效能和跟蹤您的收入。
ps:目前並不支援Mac apps




Setting Up iAd Network
點擊iAd網路的設定按鈕,讓iAd廣告可在您的ios app中啓用。如果您已同意啟用iAd網路合約,此按鈕會顯示您目前的應用程序。




為了使iOS app啟用廣告媒體,點擊設定iAd network按鈕並再之後允許iAd的啟用。
你還需要表明你的主要服務客群是否為未滿17歲的用戶。
當你的app已經上傳itunes connect遞交時,iAd的功能無法被禁用,要移除一個應用程序的廣告,您必須重新提交一個新的『已刪除廣告功能』的二進制文件。



在啓用了至少一個app的iAd廣告,你會在iTunes connect的頁面上看到你的iAd network模組。在這個模組中,你可以設定您的iAd的喜好和跟蹤性能。
重點:在上傳二進制文件前,你必須使你的app啟用iAd的服務。

完成設定後,就會在你的iTunes connect上看到,上圖的icon。


重點提醒:
1.要刪除一個app的iAd,請重新提交你的應用程序。
2.當你選擇你的主要族群為未滿17的用戶時,你將無法更改此設定



在iAd網路中,你可以調整iAd的偏好設定,可判斷何種廣告類型對您的app最有幫助。

更多的詳細訊息,請查看FAQs link(位於iTunes每一頁的底部),然後點擊iAd Network。



As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年1月8日 星期二

【EAGL】Mean?

【環境:xCode4.5 , ios6】
說明:


EGL
原本是
"Embedded-System Graphic Library"

故EAGL
可解釋成
Embedded-System Apple Graphics Library


所以openGL ES
應該可解釋成
openGL Embedded-System

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2013年1月3日 星期四

【armv7,armv7s】different?

【環境:xCode4.5 , ios6 , USE ARC】
宣告:
名稱:
說明:
The iPhone 5's A6 SoC: Not A15 or A9, a Custom Apple Core Instead

主要的說明在上面連結。
What's the main difference between the armv7 and armv7s architecture targets for the LLVM C compiler? The presence of VFPv4 support. The armv7s target supports it, the v7 target doesn't. Why does this matter?
或許你會想瞭解ARM進階精簡指令集機器Advanced RISC Machine) - (浮點處理器)
差別在是否支援VFPv4
主要似乎是跟硬體支援有關係,這部分就不詳細追究下去。

As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年12月21日 星期五

【facebook SDK 3.1】教程2-登入,認證,登出

【環境:xCode4.5 , ios6 , USE ARC】
facebook app what is NEW:【facebook SDK 3.1】what is NEW?

facebook app的基本設定,請參考:【facebook SDK 3.1】教程1-設定

說明:
這篇文章,主要在說明,登入-->驗證-->登出 等步驟說明。
若有需要基本設定等,請參考上面文章。

目前facebook login共有三種,現在說明的是目前2012釋放的版本教學。

在新本的SDK 3.1中,若用戶嘗試登入facebook,facebook SDK將會針對目前用戶的設定,選擇最佳的登入方式。
若用戶已經給與ios app權限,SDK將會立即取得token。

現在讓我們開始享受coding的流程吧...

step 1 : include the Facebook SDK
首先建立一個uiviewcontroller,命名為login,將此view設定為windows的rootviewcontroller。
分別在login.m和delegate.m下加入
#import <FacebookSDK/FacebookSDK.h>

step 2 : impelment the login flow

1.在login.m中建立一個uibutton名稱自定,若要跟下面所講的內容一樣的話,那就authButton

2.開啓你的delegate.h檔,建立一個全域變數
extern NSString *const FBSessionStateChangedNotification; 


3.開啓你的delegate.m檔,並定義一個notification string
NSString *const FBSessionStateChangedNotification =
    @"com.example.Login:FBSessionStateChangedNotification";


你要注意的是『com.example.Login』這是你iOS app的bundle id…..

4.接下來,將下列兩個方法放到你的delegate.m中
/*
 * Callback for session changes.
 */
- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:
            if (!error) {
                // We have a valid session
                NSLog(@"User session found");
            }
            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }
    
    [[NSNotificationCenter defaultCenter]
     postNotificationName:FBSessionStateChangedNotification
     object:session];
    
    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    }
}

/*
 * Opens a Facebook session and optionally shows the login UX.
 */
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    return [FBSession openActiveSessionWithReadPermissions:nil
                                          allowLoginUI:allowLoginUI
                                     completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self sessionStateChanged:session
                                                             state:state
                                                             error:error];
                                     }];
}

5.在你的.h檔中加入
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI;

6.若你需要額外的權限,修改openSessionWithAllowLoginUI:方法

ex:要求email 和 user_likes 的用戶權限
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
        @"email", 
        @"user_likes",
        nil];
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self sessionStateChanged:session
                                                             state:state
                                                             error:error];
                                     }];
}

7.若你需要寫入的權限,如:public_actions,你必須使用
reauthorizeWithPermissions:defaultAudience:completionHandler: 

permissions guide會有更多相關訊息

8.login flow最大的不同點在於 iOS 6+ 與 早期的iOS版本 兩者。
在iOS 6中,登入時,你的app將傳遞控制權給Facebook iOS app or 手機瀏覽器中的Facebook。
當使用者認證後,控制權將返回給你的app,同時夾帶session的資訊在編碼過的URL中。
為了記錄這些資訊,你需要給在返回的url中做一些處理,在ios6+中,login flow從ios中取得用戶的證書,用戶不需傳送資訊到facebook app。

9.在delegate.m中,分別找到對應的位置,把下面的code塞進去
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    // attempt to extract a token from the url
    return [FBSession.activeSession handleOpenURL:url];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    [FBSession.activeSession handleDidBecomeActive];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    [FBSession.activeSession close];
}

10.在你的login.m中
#import "AppDelegate.h"

並將剛剛設定好的button的action,寫成
- (void)authButtonAction
{
    AppDelegate *appDelegate =
    [[UIApplication sharedApplication] delegate];
    
    // If the user is authenticated, log out when the button is clicked.
    // If the user is not authenticated, log in when the button is clicked.
    if (FBSession.activeSession.isOpen) {
        [appDelegate closeSession];
    } else {
        // The user has initiated a login, so call the openSession method
        // and show the login UX if necessary.
        [appDelegate openSessionWithAllowLoginUI:YES];
    }
} 

此時你run project的話會看到兩種畫面,
『根據你的設定會有所不同:有無使用ios 6 內建的facebook帳號登入』
並在log中看到
2012-12-21 18:56:16.832 facebooktest[2725:19a03] User session found

到了這一步...你已經完成了登入+驗證的程序

step 3 : impelment the logout flow

1.在delegate.m中
- (void) closeSession {
    [FBSession.activeSession closeAndClearTokenInformation];
} 

2.在delegate.h中
- (void) closeSession; 

3.改寫你的- (void)authButtonAction
- (void)authButtonAction
{
    AppDelegate *appDelegate =
    [[UIApplication sharedApplication] delegate];
    
    // If the user is authenticated, log out when the button is clicked.
    // If the user is not authenticated, log in when the button is clicked.
    if (FBSession.activeSession.isOpen) {
        [appDelegate closeSession];
    } else {
        // The user has initiated a login, so call the openSession method
        // and show the login UX if necessary.
        [appDelegate openSessionWithAllowLoginUI:YES];
    }
} 

4.在login.m中的viewdidload中
[[NSNotificationCenter defaultCenter]
     addObserver:self
     selector:@selector(sessionStateChanged:)
     name:FBSessionStateChangedNotification
     object:nil];

5.在login.m中的- (void)didReceiveMemoryWarning
 
[[NSNotificationCenter defaultCenter] removeObserver:self];

6.在login.n中添加此方法
 
- (void)sessionStateChanged:(NSNotification*)notification {
    if (FBSession.activeSession.isOpen) {
        [self.authButton setTitle:@"Logout" forState:UIControlStateNormal];
    } else {
        [self.authButton setTitle:@"Login" forState:UIControlStateNormal];
    }
}

7.在login.m中的viewdidload中的最後面加上
 
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate openSessionWithAllowLoginUI:NO];


==
到這邊就完成了自建的登入、驗證、註冊...等動作
當然facebook sdk中也有提供login ui的api
不過就不像這種彈性方式了~

最後若有error,請檢查facebook app的設定是否正確.
ex:bundle id沒有設定好,請參考前面的設定文章


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

2012年12月20日 星期四

【facebook SDK 3.1】教程1-設定

【環境:xCode4.5 , ios6 , USE ARC】
說明:

facebook SDK 3.1 官方範例下載,下載完畢後須安裝。

官方的source code在此:Note that when building the SDK from source, you must first run scripts/build_framework.sh before compiling and running the samples.

這邊有介紹裡面用的sample code目的為何。

上面零零落落的稍微講一下,若你想知道sdk 3.1的特性有哪些,請參考:【facebook SDK 3.1】what is NEW?


若你想參考如何登入、驗證、登出:【facebook SDK 3.1】教程2-登入,認證,登出


Step 1:Create a facebook app(官方步驟4)

首先,你需要一個建立一個 facebook app ,透過這個app,從用戶那邊取得權限,建立的方式比較特別的應該是『Bundle ID』為必填。
下面就是一個簡單的教學步驟:


1.首先請到這邊,建造你的facebook app,並建立基本資訊

建立好你的facebook app 後,會產生專屬的app ID 顯示在最上方


2.現在你需要將你app中的bundle identifier,使你的facebook app可支援從你的ios app中登入
(這在facebook 3.1中必須的動作)

點選 “Native iOS App”  
Bundle ID:  (必填-請填入你ios app中的設定)
iPhone App Store ID: (選填)
iPad App Store ID: (選填)
Facebook Login: 選擇Enable
Deep Linking: 選擇Enable
URL Scheme Suffix: (選填)



bundle id我想寫過app的人應該知道到哪裡可以找得到。


Step 2:Configure a new xcode project
這個步驟主要是講,你的app該怎樣設定,才可以正確使用facebook framework。

一、有四個framework你必須放到你的專案中:

1.**FacebookSDK.framework  : 在你下載的檔案當中,直接拖進專案。
(以下三個均為xcode已有的framework,加入方法我想大家應該都知道)
2.**Social.framework
3.**Accounts.framework
4.**AdSupport.framework

其中AdSupport.framework,僅有在你必須用到facebook的廣告時,才須設定,要付費,如果你想用facebook行銷,或許這是一個不錯的方法。


二、除了上述四個 framework 外,你還需要放入兩個bundle:
FacebookSDKResources.bundle
FBUserSettingsViewResources.bundle


位置在你剛加入的 Facebook.framework 中的 resources 裡。


三、

若你想要3.1版本同時支援較舊版本的ios....非ios6,且ios 4.3+
請將framework的flag
**Social.framework
**Accounts.framework
**AdSupport.framework

從"Required"選擇成"Optional"



四、在other link中,加入''-lsqlite3.0''


五、info.plist中加入
key:FacebookAppID 
type:string
value:(你申請的Facebook app id)  

六、建立url type
格式為   fb + (你申請的Facebook app id)



後記:
走到這一步,恭喜你已經完成基本設定。
雖然看起來很複雜,但是其實每一個步驟都有他的意義,其時設定久了,也就習慣了。



As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。

【facebook SDK 3.1】what is NEW?

【環境:xCode4.5 , ios5.1 & ios6 , USE ARC】

facebook app的基本設定,請參考:【facebook SDK 3.1】教程1-設定
若你想參考如何登入、驗證、登出:【facebook SDK 3.1】教程2-登入,認證,登出

說明:

首先來分享SDK 3.1有什麼新功能,畢竟工欲善其事、必先利其器,重點還要瞭解他的特性,才能把事情做好。

更快、更簡單的方式,去整合SDK 3.1還有你的iOS app,當然iOS 6是整合的重點,包含:
1.本機facebook login:利用iOS 6去登入facebook的功能,原理應該是,因為你已經利用iOS 6裡面的facebook登入過,所以取得session的方式,也是跟iOS 6拿到,不用再透過scheme的方式,跳到facebook的登入頁,再跳轉回你自己的app,相對的速度上優化許多。

2.分享機制也一樣,透過Native sheet提高分享文章的效能。


因整合ios,故可利用Native 提供的UI元件,讓你更快、更簡單的套用相關功能,如:
Friend Picker、Places Picker、Profile Picture、Login controls 
讓用戶的體驗更加的完善。

ps:不過還是自己打造的元件比較順眼點。

其他特徵包括:
1.與iOS的無縫結合:讓你的app與ios 4.3+版本,更無縫地結合,在iOS6上,更簡單的整合login與分享機制。
2.更簡單的session管理:利用引入的FBSession API,管理、儲存、更新使用者的token。
3.改善API效能:你只需要編寫少量的code去使用Facebook Graph, FQL, and other APIs...等,運用多線程的效能,使用上將更快更完善,讓用戶體驗更好。
4.你可以經由SDK 3.1安裝廣告,去了解有多少用戶使用你的ads,安裝ads可以衡量點擊次數和app的安裝次數。
ps:透過facebook app,也可以看到一些基本資料,如:註冊使用人數...等等。


ps:在這一版的SDK中,也遇過不少問題...因為同時要滿足6和6以下的用戶,又要滿足有些人非用ios6的native facebook,考量的點有很多。


As always , if you have any question , feel free to contact me.
有任何問題,請聯絡我

歡迎轉載,請註明出處,感謝。