搜尋此網誌

2011年3月31日

Apache / MySQL / PHP 安裝備忘

http://twntwn.info/blog/ajer001/archives/2728
http://maci.pixnet.net/blog/post/22930392
http://www.jaceju.net/blog/archives/21

[轉] Ubuntu 10.04 換成 sun-java-jdk 的步驟

add-apt-repository "deb http://archive.canonical.com/ lucid partner"
apt-get update
apt-get install sun-java6-jdk sun-java6-plugin
update-java-alternatives -s java-6-sun

2011年3月29日

fileop porting to Android

fileop 其實就在 iozone 裡面,iozone 編譯好就產生了
但是 fileop 也可以單獨編譯,command 如下:
        arm-linux-gcc -static -o fileop fileop.c

Bonnie++ porting to Android

Purpose: Porting x86 Linux community tool - Bonnie++ to Android
Steps:

  1. Download Bonnie++ source code
  2. Uncompress
  3. ./configure --host=arm-linux CC=/(your arm-eabi path)/arm-non-linux-gnueabi-g++
  4. Modify Makefile
    • CFLAGS=............ -static
    • CXX=(your arm-eabi path)/arm-none-linux-gnueabi-g++ $(CFLAGS)

Execution command: ./bonnie++ -d /path_tobetest -u 1000 -s (test size)
ex: ./bonnie++ -d /sdcard -u 1000 -s 4096

Android data service (PDP) on/off - APN modify or switch

目的: 在 Android 中進行 packet switch 的 on/off test
方法:

  1. 使用 Content resolver: http://osdir.com/ml/Android-Developers/2010-01/msg03787.html
  2. 使用 APNDroid API: http://code.google.com/p/apndroid/wiki/API
  3. http://www.javaeye.com/topic/565662
  4. 修改 Setting 裡面的 checkbox
    • 尚未找到如何用 code 去修改
    • 可以用 Monkey 進行 on/off 控制

參考:

2011年3月17日

[轉] Android 中定時器的幾種用法總結

【原】android 中定時器的幾種用法總結
2010-11-08 18:08
在android中,經常用到的定時器主要有以下幾種實現:
一、採用Handler與線程的sleep(long )方法
二、採用Handler的postDelayed(Runnable, long) 方法
三、採用Handler與timer及TimerTask結合的方法。



下面逐一介紹:
一、採用Handle與線程的sleep(long )方法
Handler主要用來處理接受到的消息。這只是最主要的方法,當然Handler裡

還有其他的方法供實現,有興趣的可以去查API,這裡不過多解釋。
1.定義一個Handler類,用於處理接受到的Message.
Handler handler = new Handler() {
   public void handleMessage(Message msg) {
    //要做的事情
    super.handleMessage(msg);
   }
};
2.新建一個實現Runnable接口的線程類。如下:
public class MyThread implements Runnable{
   @Override
   public void run() {
    // TODO Auto-generated method stub
    while (true) {
     try {
      Thread.sleep(10000);//線程暫停10秒,單位毫秒
      Message message=new Message();
      message.what=1;
      handler.sendMessage(message);//發送消息
     } catch (InterruptedException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
     }
    }
   }
}
3.在需要啟動線程的地方加入下面語句:
new Thread(new MyThread()).start();
4.啟動線程後,線程每10s發送一次消息。
二、採用Handler的postDelayed(Runnable, long) 方法
這個實現比較簡單一些:
1. Handler handler=new Handler();
Runnable runnable=new Runnable(){
   @Override
   public void run() {
    // TODO Auto-generated method stub
    //要做的事情
    handler.postDelayed(this, 2000);
   } 
};
2.啟動計時器:
handler.postDelayed(runnable, 2000);//每兩秒執行一次runnable.
3.停止計時器:
handler.removeCallbacks(runnable);
三、採用Handler與timer及TimerTask結合的方法。
1.定義定時器、定時器任務及Handler句柄
private final Timer timer = new Timer();
private TimerTask task;
Handler handler = new Handler() {
   @Override
   public void handleMessage(Message msg) {
    // TODO Auto-generated method stub
    //要做的事情
    super.handleMessage(msg);
   }
  
};
2.初始化計時器任務。
task = new TimerTask() {
    @Override
    public void run() {
     // TODO Auto-generated method stub
     Message message = new Message();
     message.what = 1;
     handler.sendMessage(message);
    }
   };
3.啟動定時器
timer.schedule(task, 2000, 2000);
簡要說一下上面三步提到的一些內容。
1.定時器任務(TimerTask)顧名思義,就是說當定時器到達

指定的時間時要做的工作,這裡是想Handler發送一個消息,
由Handler類進行處理。
2. java.util.Timer.schedule(TimerTask task, long delay):

這個方法是說,dalay/1000秒後執行task.只執行一次。
java.util.Timer.schedule(TimerTask task, long delay, long period):

這個方法是說,delay/1000秒後執行task,然後進過period/1000秒
再次執行task,這個用於循環任務,執行無數次,
當然,你可以用timer.cancel();取消計時器的執行。

希望對你有所幫助。請尊重原創,這裡是ljlkings的空間。

2011年3月16日

Android developing flow / Android 開發流程與重點元件

  • Ready stage:
    1. Setup developing environment.
    2. First Hello program, then refer Android SDK examples (First should be ApiDemos).
    3. Find a sample and download APKs from Android Market. Just have a trial. Emulator is just ok.
    4. Documents study (Especially all documents / FAQ in Android Developers Site, and some FAQ in big Forums). Also compare new functions Android provided.

  • Study stage: (Application level)
    1. Android APK structure
      • AndroidManifest.xml
      • res
        • layout
        • values
        • others
      • src
      • others
    2. AndroidManifest.xml structure
    3. Four components (Activity / Service / Broadcast Receiver / Content Provider)
      • Details of Activity
        • Life cycle
        • Activity stack
        • View (UI components) / Layout / Menus / List / Widget / Dialogs / Others
        • Intent / Intent flags (To control Activity attributes)
          • Launch mode
          • Task attributes
          • Task affinities
          • Intent flags
        • Others
      • Details of Service
        • Life cycle
        • Binders
        • Remote services
      • Details of BR
        • Life cycle
      • Details of CP
    4. Interaction of four components
    5. Thread / Timer / Handler / Messaging using
    6. Activity / Task / Process / Thread relationship
    7. Data exchange => http://pontiffkao.blogspot.com/2011/02/activity.html
    8. Queue / FIFO?
    9. Rich functions:
      • Debug => http://pontiffkao.blogspot.com/2011/02/android-android-debug-tool-eclipse-ant.html
      • Graphics (2D / 3D / Animation / Surface)
      • Multimedia (Audio / Video / Camera)
      • Location (Navi / GPS / Maps)
      • 2G / 3G / 4G (Data / Voice / Message / Phone related)
      • Widget
      • Networking
      • Database
      • Web (WebView / WebKit
      • Wireless (BT / WLAN)
      • Touch (Touch screen / Gesture)
      • Sensors
      • VoIP
      • NFC
      • Others
    10. Application publish to Market
    11. Unit test
    12. CTS test
    13. Coding style / Coding performance

  • Advance stage: (System level)
    1. Android source code parsing / study
    2. Android CTS study
    3. Android boot flow (bootchart / init)
    4. Android system process (Dalvik / Zygote / Others)
    5. Dalvik study
    6. Cross compile environment
    7. Image build system
      • Kernel porting / patching
      • BSP / Driver
      • Android porting / patching
    8. Your owned framework / library (Native code)
    9. Your owned HAL

參考連結:
  • http://eagle.phys.utk.edu/guidry/android/index.html
  • http://blog.akquinet.de/
  • http://developer.android.com/

2011年3月15日

Android Application Model Lab - Android AP實驗室 (Part2)

測試目的: 呼叫 Activity 內部與外部呼叫 (Flag 留到下次再測)
測試項目: (Stack 變化可從 dump app stat 中取得)

  1. 呼叫內部 Activity (w/wo Finish(), Stack 變化)
  2. 呼叫外部 Activity (w/wo Finish(), Stack 變化)
Case1: 呼叫內部 Activity by startActivity()
  1. Call internal activity without finish()
    • A1 -> A2 -> A3, then back to HOME, then re-launch, then press return key:
        • A3 -> A2 -> A1 -> HOME
  2. Call internal activity with finish()
    • A1 -> A2.finish() -> A3, then back to HOME, then re-launch, then press return key:
      • A3 -> A1 -> HOME
  3. 結論: 使用 finish() 後,該 activity 將會從 activity stack 中移除,等同按 Return key

Case2: 呼叫內部 Activity by stratActivityForResult()
  1. The program: A(A1/A2/A3)
  2. Case A: A1 -> (startActivity) ->  A2 -> (startActivityForResult, int(pattern1)) -> A3 (get pattern1, pattern1++, Finish())
    • 結論: (變數名稱要一致,且 A3 一定要搭配 Finish();)
      • 假設 pattern1 = 1。A3 finish 後,A2 取出的 pattern1 = 1。(也就是說,pattern1++ 後,A2 看到的還是舊 pattern1 = 1)
      • pattern1 變數名稱要一樣,若 A3 宣告成 (pat3 = pattern1, pat3++),A2 收到的 pattern1 = 0。 
  3. Case B: A1 -> (startActivity) ->  A2 -> (startActivityForResult, int(pattern1)) -> A3 (get pattern1, pattern1++, Intent-Browser)
    • Browser 會直接被 Intent 起來,A2 不會收到任何 return value。

Case3: 呼叫外部 Main Activity by stratActivity()
  1. Two programs: A(A1/A2/A3) & B(B1/B2)
  2. Activity call: A(A1 -> A2 -> A3 -> B1) / B(B1 -> B2)
  3. Step:
    • Launch A (A1 -> A2 -> A3 -> B1 -> B2) => 最後畫面是 B2
    • Back to HOME, then launch B(B1 -> B2), then press return key to B(B1) => 最後畫面是 B1
    • Back to HOME, then check A & B program UI
      • Re-launch A => Latest UI is B2
      • Re-launch B => Latest UI is B1
      • Re-launch A => Still at B2
  4. 結論: 
    • 當 A3 呼叫 B1 Activity 時,Mem 會產生兩個 Process, 一個是 A 的,一個是 B 的
    • 同一個 Process 所 launch 的 activity 都會在該 Task's activity stack 中,儘管包含不同 application 的 activity


Case4: 呼叫外部 Activity (呼叫 2nd's sub activity)
  1. Same way as case3
  2. 結論: (Same as Case3)
    • 呼叫別人的 Layout (xx.xml),要將變數全數 implement 到 code 裡。(setContentView(R.layout.main);)
    • Intent activity:
      • 同一個 program:
        • Intent intent1 = new Intent();
        • intent1.setClass(HelloLabTest.this, Activity2.class);
        • startActivity(intent1);
      • 不同 program:
        • Intent intent1 = new Intent();
        • intent1.setClassName("com.android.test2", "com.android.test2.Activity10");
        • startActivity(intent1);.

  
Case5: 呼叫外部 Activity,配合 finishActivity()
Case6: Key vs Package

  1. [轉] Package name 不同,則簽名key是否相同無所謂,兩個apk都可以安裝。
  2. [轉] Package name 相同,簽名key相同則會覆蓋
  3. [轉] Package name 相同,簽名不同則第二個apk安裝會失敗。
Case7: [轉] 不同 Apk,Share User ID 相同
  1. XML 修改: android:sharedUserId="com.demouser"
  2. 導出/data/system/packages.xml,查看其內容


參考資料:

2011年3月13日

網頁分析工具 / (Web analysis, HTTP analysis, HTTP debug, Web developing tools)

Target:
  1. Web server identify / Web service identify
  2. URL check
  3. Web developing tools / Web debug tools
  4. Web test tools / Web performance tools
  5. Web compatibility test
  6. Web validator tools
  7. Web analysis tools
  8. Web ranking tools
  9. Browser function test / Browser compatibility test / Browser performance test
  10. Browser page re-loader

IE Plug-in:
  • HTTPWatch
  • 開發者工具 (Web Developer)
  • Fiddler
  • Firebugger
  • Firebug Lite
  • DebugBar
  • PageTest

Firefox Plug-in:
  • Web Developer
  • Firebug / Firebug Extensions
  • YSlow
  • Live HTTP Headers
  • User Agenet Switcher
  • HTML Validator
  • SEO tools
  • Good Website Inspector 1.0RC1
  • Memory Profiler
  • CustomBench
  • FirePHP
  • SEO & Website Analysis
  • HTTPFox
  • DOM Inspector
  • Ranking tools
  • Web Analytics Solution Profiler
  • Page Speed
  • WebPageTest
  • WebMaster
  • Tamper data
  • Firelogger
  • Greasefire / Greasemonkey
  • HTTPfox
  • Lori
  • Server spy
  • Site information tool
  • Monifox
  • W3Techs Website Technology Information

Chrome Tools: (--purge-memory-button --enable-extension-timeline-api --enable-benchmarking)
  • 開發人員工具
  • Speed Tracer
  • Web server notify
  • Google sniffer
  • Ultimate Chrome Flag
  • Benchmark page
  • Domain detail
  • SEO tools
  • WOT
  • IE tab

Others:
  • Charles
  • IETester
  • Public Web 提供 Web timeline 和 component 分析
  • 瀏覽器效能測試網站
  • Apache (ab)
  • JMeter
  • Siege
  • HTTP_Load
  • Avalanche
  • autobench / httperf
  • webbench
  • Web Application Stress
  • Pylot
  • Wbox HTTP testing tool
  • Web Page Analyser
  • Grinder

2011年3月8日

行動手寫筆 / 數位手寫筆 / NoteTaker / Digital Pen

在飛機的購物手冊中發現個有趣的小東西
先做筆記起來

主要有幾種 Type:
  1. 需要特殊介質 (數位板 / 數位紙) or 數位板+一般紙 or 軟板
  2. 一般紙: 透過Wireless 傳輸方式 + OCR 進行數位化
  3. iPad 專用軟體
  4. Digital pen only (耗材,需要搭配其他的傳輸板或傳輸器)

廠牌:
  • UltraPen
  • Benevo
  • IOGear
  • Logitech
  • XP-Pen
  • Pegasus
  • ReadWriteThink
  • AquaMind
  • Nokia
  • IRISnotes
  • Anoto
  • livescribe
關鍵字:
  • 行動手寫筆
  • 數位手寫筆
  • 數位筆
  • Note Taker / NoteTaker
  • Digital Pen

2011年3月2日

Windows phone 7 (WP7) 參考資料 - Reference document/URL

http://msdn.microsoft.com/zh-TW/ff728583.aspx
http://msdn.microsoft.com/zh-tw/windowsphone
http://msdn.microsoft.com/zh-tw/windowsphone/ff955788
http://www.microsoft.com/taiwan/windowsphone/meet/wp7.aspx?WT.mc_id=wp7promo

2011年3月1日

印度寶萊塢電影 - 三個傻瓜 (3 Idiots) 觀後感

只有一句話: 台灣又輸了!
3C 輸韓國、電影輸印度、廣告輸泰國...我不知道我們還有多少東西可以繼續輸...

從心中的小星星,一直到三個傻瓜,印度電影的質,讓我大大的訝異與讚嘆。
以前一直不喜歡百老匯與寶萊塢的歌唱形式,總覺得電影,就是要雄偉的氣勢 + 媲美 Pop Opera 的悠揚配樂才是首選,但是再看完三個傻瓜後,發覺自己才真是"天才"。三個傻瓜,在電影世界中其實是天才,所以呢,我這個淺見的笨蛋,以電影世界的角度來看,只好稱做天才囉。

主角是印度天王: Aamir Khan。一個勇於挑戰體制,創新又富有同理心的人,在一個印度封閉的教育制度與家庭教育中,不斷的拋出挑戰,偏生這些挑戰卻又富饒詼諧與值得玩味。就像在台灣,很多年輕人不願意照顧老人、與家長共處,因為覺得這些老人家很"盧",講不通。老人家有老人家的智慧與堅持,年輕人有次文化與新知識的填充,在沒有磨合的狀況,挑戰與堅持就不斷的共生共戰。

裡面當然有很多橋段是很衝突的、很刺激的,例如馬蓋先式的電鳥鳥,或者誇張的破壞學校講演。姑且不議手法的好壞,我覺得片中最想凸顯的是"本質"。主角的行徑推演出動機,動機來自於本質的追求,而本質指的是什麼? 就是教育的起始點。

另外一個起點,是一直到看到最後才豁然開朗,所以片子也是前後時空交叉的編排手法。為什麼主角有這麼跳脫的心境,來看到整個體制? 因為他的角色設定。他,不是一個應該在體制內的學生,他的目標與動機不同,也造就他不同看到事物的角度。所以呼應我之前寫的一句話:
處在什麼角色,就換什麼頭腦。更應該說,即使不是那個角色,也應該裝那樣的頭腦,這樣看事情才全面、廣度與深度兼具。基層工程師,就不應該裝主管的頭腦嗎? 寫程式的小咖,就不應該去思考企業與公司的願景嗎? 當然不對。這也是這片中,我得到的體會。

真的,看完心有戚戚焉,自己也常常做一樣的事情,只是結果廻異。但是整個片子最值得玩味的,就是日子還是要繼續走。不管碰到多少挫折與刁難,堅持理想與目標,套一句我們古人的諺語: 天無絕人之路。這片其實充滿了希望與期待,尤其在苦與樂的明快交織中,更見編劇與導演的功力。

片子也在有"小西藏"之稱的拉達克拍攝,廣大恢弘的場景,台灣可是見不到的。但老實說,西藏更大更美,乾淨而有種接近天邊的感覺,純真而自然。看完這片,再推薦各位去觀看另外兩部影片: 喬派西主演的"乞丐博士 (With honors)",與真實故事"阿拉斯加之死-荒野生存 (Into the wild)"。都是對社會有著深深的期盼與不滿,而用自己的方式來對抗。可惜與三個傻瓜的結局不一樣,一個是落魄一生、帶著懷疑與失望而死; 後者在找不出人生的答案中,痛苦的虛弱而往生在荒野中。但是這三部電影,都有很強的論述,很值得一看再看。