2012年5月8日 星期二

[Android] Android Application Foudamentals

1). Application Components (Android 應用程式構成要素)
它如同網站中的網頁般,多半為彼此獨立、不相互依賴的個體。而且,它們都各自擁有特定的工作任務。

● Activities (活動,前景執行的程序)
  ●  一個Activity代表一個單一的螢幕與一個使用者介面。
  ●  例如,一個email Application也許它有一個Activity用來顯示一個新的電子郵件列表(new email list),另一個Activity撰寫電子郵件,而另一個Activity則是讀取郵件,這些Activity work凝聚在一起形成了一個電子郵件應用程式,但其實每一個Activity都是獨立的,因此不同的Application可以啟動任一個Activities(如果電子郵件應用程序允許的話)。


● Services (服務,背景執行的程序)
  ●  Service是一個Component,運作於背景,用來執行長時間運行的操作或是遠端操作的處理程序(remote process)。
  ●  service是不提供使用者操作介面的(在背景當然不需要囉)。
  ●  例如:一個service在背景程序中執行音樂播放,而使用者在其他的Application中執行操作,也可能利用一個remote service經由網路取得資料而不干擾使用者正在進行互動的activity。

● Broadcast receivers (廣播事件監聽程式)
  ●   一個Brodcast receivers是一個component,他用來回應系統全部的廣播通知。
  ●   許多廣播是源自於系統本身,例如,螢幕被關閉、電量不足、圖片被截取。
  ●   應用程序也可以發出廣播訊息,例如,令其他的應用程式知道,有一些資料已經被下載到裝置上,是可以被使用的。
  ●  雖然broadcast receivers不會顯示一個使用者介面,但他們可能會建立一個status bar notification (create a status bar notification)來提醒用戶一個廣播事件發生。
  ●   例如它可能會啟動一個service來執行一些基礎的工作。


● Content providers (分享式的資料儲存程式)
  ●    一個Content providers管理一組共享的application資料。
  ●    你能夠在檔案系統中儲存資料,一個SQLite資料庫在web上或其他持久性的的儲存位置,你的application可以存取。
  ●    透由Content providers,其他的應用程式能夠查詢或是修改資料,如果內容供應者允許的話(if the content provider allows it)。
  ●    content providers也用於私有的(private)讀取與寫入,在你的應用程式上並且不是分享的。例如,Note Pad應用程式使用一個content provider保存筆記。



2). Activating Components
● Intents
  ●   它則如同網頁中的超鏈結般,肩負不同應用程式組件間的連結啟動與傳遞訊息之任務。

2012年5月7日 星期一

[git] 查看檔案修改歷程及差異

1). 檢視codebase歷程紀錄
git log

2). 檢視單隻檔案歷程紀錄
git log [file name]

3). 檢視單隻檔案歷程記錄+diff修改內容
git log -p [file name]

4). diff兩tag/commit間檔案修改內容
git diff [tag1/commit1]:[path/filename] [tag2/commit2]:[path/filename]

※範例
git diff be6a33b6087d5ab1de711774bcdbbf55bfd45785:vendor/si/build.sh e19a487ccaecb10fda12676e4370389241875bd4:vendor/si/build.sh

2012年4月27日 星期五

[Android] 解決AVD執行error

1). Error Message
[2012-04-27 17:02:32 - Emulator] SDL init failure, reason is: No available video device

2). Solution
64-bits的Ubuntu缺少32-bits的libraries
$ sudo apt-get install ia32-libs

[Cloud] 雲端運算

雲端運算

1). 介紹
● 雲端運算是一種基於網際網路的運算方式,通過這種方式,共享的軟硬體資源和信息可以按需提供給運算機和其他設備。
● 用戶不再需要了解「雲端」中基礎設施的細節,不必具有相應的專業知識,也無需直接進行控制。
● 雲端運算可以認為包括以下幾個層次的服務:基礎設施即服務(IaaS),平台即服務(PaaS)和軟體即服務(SaaS)。雲端運算服務通常提供通用的通過瀏覽器訪問的在線商業應用,軟體和數據可存儲在數據中心。

2). 特徵
● 基於虛擬化技術快速部署資源或獲得服務
● 實現動態的、可伸縮的擴展
● 按需求提供資源、按使用量付費
● 通過網際網路提供、面向海量信息處理
● 用戶可以方便地參與
● 形態靈活,聚散自如
● 減少用戶終端的處理負擔
● 降低了用戶對於IT專業知識的依賴

3). Model
● 上層分級:雲端軟體Software as a Service (SaaS)
打破以往大廠壟斷的局面,所有人都可以在上面自由揮灑創意,提供各式各樣的軟體服務。
● 中層分級:雲端平台Platform as a Service (PaaS)
打造程式開發平台與作業系統平台,讓開發人員可以透過網路撰寫程式與服務,一般消費者也可以在上面執行程式。
● 下層分級:雲端設備Infrastructure as a Service (IaaS)
將基礎設備(如IT系統、資料庫等)整合起來,像旅館一樣,分隔成不同的房間供企業租用。




2012年4月25日 星期三

[repo] 安裝repo

安裝repo

1). 設置環境變數
mkdir ~/bin
PATH=~/bin:$PATH

2). 下載repo
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo

3). 將repo設為可執行
chmod a+x ~/bin/repo

---

Initializing a Repo client

1). 創建資料夾
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

2).initial一個repo cilent
repo init -u https://android.googlesource.com/platform/manifest

3). 切換到master branch
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

4). 同步
repo sync

2012年4月24日 星期二

[git] 合併patch到codebase

patch有許多format,若拿到的patch無法用git am合併
則選擇用其他的指令

1). patch (僅可以合併單筆patch)
patch -p1 < [patch路徑及檔名]

2). git am (可合併單筆也可合併資料夾內所有patch)
git am [patch路徑及檔名]

3). 刪除git am先前所有合併patch的紀錄
git am --abort

[Android] [Eclipse] Android開發環境套件

setup Android開發環境套件

1). JDK:JAVA開發工具包
● Oracle官網下載
2). IDE:Eclipse整合開發環境
● Eclipse官網下載
3). ADT:Eclipse的Android開發工具外掛
● 從Eclipse安裝
4). SDK:Android軟體開發工具包
● Android官網下載
5). AVD:Android模擬器
● 從Eclipse設定,SDK要先裝好

[Android] [Eclipse] 解決DemoAPI無法編譯

匯入DemoAPI後
SDK有調到正確的版本
/gen 有build出R.java
但卻有紅色叉叉
問題大部分是『Adpter must override a superclass method』



解決方法:將Eclipse的jdk調到1.6
[project右鍵-Properties]->[Java Compiler]

2012年3月14日 星期三

[Linux] [git] 限制帳號對主機shell

在主機建立一個帳號專放git project
容許其他人從這台主機get code
但限制其帳號只能用ssh連接git,無法對主機shell

1). 修改passwd檔
sudo vi /etc/passwd
2). 更改git帳號的權限
git:x:1000:1000::/home/git:/usr/bin/git-shell

※備註:
更改後shell進去的畫面:
$ ssh git@gitserver
fatal: What do you think I am? A shell?
Connection to gitserver closed.

2012年3月3日 星期六

[Linux] 搜尋檔案、字串

1). 在目錄中以字串搜尋檔案
grep -rin [關鍵字] .

※說明:
● -r:目錄中遞迴搜尋
● -i:忽略大小寫的不同,所以大小寫視為相同
● -n:順便輸出行號


2). 以檔案名搜尋檔案
find [path] -iname [檔案名]