Monday, March 16, 2009

CMS開放源碼平台

Drupal
1. apache web server
2. php 5.2
3. mysql 4.2
4. phpmyadmin

dotnetnuke
1. 有vs 2005專案檔
2. 可用C#開發
3. sql 2005
4. professional版本需要付費,
5. lastest vertion-   professtional(Feb 2009)

CommunityServer 2008
1. aps.net 2.0, ms SQL 2005
2. SSO for windows ad
3. 數據量大的時候,效能不好
4. 僅express Edition不需付費

joomla
1.php
2.mysql

Plone
1. python
2. oreilly 06' opensource winner 
3. lastest vertion-   3.2.1(Feb 2009)

Thursday, February 26, 2009

android location

locationListener.onLocationChanged
當作標改變的時候會觸發事件,但是當location設備傳進相同的座標位置時,不會觸發此事件。
locationListener.onProviderDisabled
當location的設備被關閉時,觸發此事件。相反的就是onProviderEnabled
locationListener.onStatusChanged
location設備的狀態改變時,觸發此事件。共有三個狀態,location連線、location離線、location暫時離線。

得到座標的方式可以從LocationManager得到目前裝置有幾個LocationProvider,再從連線狀態的LocationProvider抓到座標資訊Location,再從Location中抓取座標經緯度或高度等其他資訊。

LocationManager locationManager;

locationManager = (LocationManager)this.getSystemService(Activity.LOCATION_SERVICE);

locationManager.requestLocationUpdates("gps", 5000, 1000, new LocationListener(){
@Override
public void onLocationChanged(android.location.Location location) {
Log.v("GPSTest", " gps onLocationChanged:"+location.getLatitude());

}

});

locationListener還有幾個方法要實作出來才行compile,這邊只列出跟抓取經緯度有關的程式碼。 另外在程式執行時,onProviderEnable事件被觸發時,表示gps的設備尚未開啟,想把介面用intent帶到android的設定頁面,程式碼如下:
startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));

Tuesday, February 24, 2009

XMLHttpRequest的411 length required錯誤訊息

在IIS 6.0的環境下,當使用XMLHttpRequest傳送訊息的時候,若訊息為空的話,需要特別註明傳送""(空字串),無法只傳送null。例如下面程式在IIS 6的環境下會有411的錯誤
xmlReq = new XMLHttpRequest();
xmlReq.open('POST', url, true);
xmlReq.send(null);

這個程式在IIS 5測試是正常可以work,在IIS6 則會出現411,其他http server則沒有測試。若不傳送訊息的話,則需要改成下列程式

xmlReq = new XMLHttpRequest();
xmlReq.open('POST', url, true);
xmlReq.send("");

如果有傳送內容的話,則在 ii5, iis6都可以正常執行。

Friday, February 20, 2009

signed apk

在發布程式至android market前程式需要使用jarsigner 加入認證,jarsigner是JDK提供的工具,至於apk的產生,在eclipse中執行run之後就會產生在專案底下的/bin中。
先建立一個目錄keytools,以及子目錄keytools/keys

D:\java\keytools>keytool -genkey -alias kkk.android.demo.location -keyalg RSA -v

alidity 20000 -keystore keys/location.keystore
輸入 keystore 密碼: password
您的名字與姓氏為何?
[Unknown]: liu
您的編制單位名稱為何?
[Unknown]: org
您的組織名稱為何?
[Unknown]: org
您所在的城市或地區名稱為何?
[Unknown]: taipei
您所在的州及省份名稱為何?
[Unknown]: TW
該單位的二字國碼為何
[Unknown]: TW
CN=liu, OU=org, O=org, L=taipei, ST=TW, C=TW 正確嗎?
[否]: 是

輸入 <kkk.android.demo.location> 的主密碼
(RETURN 如果和 keystore 密碼相同):

會產生keytools/keys/location.keystore。-v alidity是認證時間,market上需要25年的有效認證期間。
建立完key之後,要把這個key嵌入apk中,用jarsigner
D:\java\keytools>jarsigner -verbose -keystore keys\location.keystore -signedjar

Location_singned.apk Location.apk kkk.android.demo.location
Enter Passphrase for keystore: password
adding: META-INF/MANIFEST.MF
adding: META-INF/KKK_ANDR.SF
adding: META-INF/KKK_ANDR.RSA
signing: res/drawable/icon.png
signing: res/layout/main.xml
signing: AndroidManifest.xml
signing: resources.arsc
signing: classes.dex

之後在keytools/目錄下會產生Location_singned.ask,完成。

android的log訊息

android.util.log這個類別提供了輸出log的功能,在程式中加入

Log.v("TAG", "logMessage");
即可在DDMS的console看見輸出的訊息。

log的類別分為

  • Log.e()----錯誤(error)

  • Log.w()----警告(warn)

  • Log.i()------資訊(info)

  • Log.d()------除錯debug

  • Log.v()-----多餘verbose


不同的類別除了在DDMS中會顯示不同的顏色以利區別外,再編譯與記憶體配置上也有所不同。verbose只會在開發環境才被編譯,debug雖然會被編譯但是在非開發環境下則不會執行,error, warning, info都是會被編譯與執行。

Wednesday, February 18, 2009

手動安裝linux下的驅動程式

找到的驅動程式包裝成.img檔,先mount起來才能讀取其中的檔案
#mount -o loop rr154x-rhel-4-i386.img  ./

解壓縮modules.cgz這個檔案,裡面包含驅動模組
#gzip -dc /modules.cgz | cpio -idumv

找到與目前kernal相對應的驅動程式版本
#uname -r  //找目前的kernel版本
#cd 2.6.9-5.EL/i686

安裝驅動模組,模組可能有相依性,須照順序安裝
#modprobe sd_mod //先安裝sd_mod這個模組
#insmod hpt374.o

驅動程式安裝成功後,就可以使用新增的硬體了,但是每次重開機後,都必須在安裝驅動程式一次。為了不要這麼麻煩,把驅動程式放入核心。
#install -c hpt374.o /lib/modules/'uname -r'/kernel/drivers/scsi //把編譯完的驅動程式複製到kernel中
#depmod //檢查相依性,並把相依性更新至/lib/modules/'uname -r'/modules.dep

放入核心之後,在通知系統在開機的時候要執行的指令
#echo "modprob hpt374" > /etc/init.d/hptdriver  //如果有相依性的話,也要在這邊寫入
#chmod 755 /etc/init.d/hptdriver
#ln -sf /etc/init.d/hptdriver /etc/rc.d/rc3.d/S01hptdriver
#ln -sf /etc/init.d/hptdriver /etc/rc.d/rc4.d/S01hptdriver
#ln -sf /etc/init.d/hptdriver /etc/rc.d/rc5.d/S01hptdriver

Tuesday, February 10, 2009

android 的 adb指令

透過adb可與android模擬器或是android device作溝通

  • adb devices 
    列出目前的連線的devices。emulator-5554表示為模擬器,連接port為5554。HT850GZ01053為設備的sn。連接至device的話,須要先安裝android_usb_driver。
  • adb -s <serial number>
    指定連接上哪一個裝置,若目前只有一個連接裝置,則可不需要設定。
  • adb -d 
    指定連接上實體的device,如果實體device只有一個的話,就可使用。
  • adb -e
    指定連接上 模擬器, 如果模擬器超過一個的話,則需要用-s 來指定是哪一個模擬器。
  • adb shell
    進入模擬器或是device的shell,可執行符合權限內的指令。目前G1 RC30的版本需要downgrad到RC29才能得到root的權限,可參考Root_For_RC30。拿到root權限後可開啟telnetd,由PC上透過telnet也可以連進去G1的shell。
  • adb shell monkey
    用來產生隨機事件,可以對程式介面進行測試用。例如:monkey -v -p com.adroid.demo.notepad3 100 會在notepad3產生100個隨機事件,並列出事件的處理訊息。
  • adb install <xxxx.apk>
    安裝指定的apk至連接的裝置。相對應的指令為adb uninstall

 

android進入資料庫方法

notepad範例中的資料庫擺放位置為 /data/data/com.android.demo.notepad2/databases/data,開啟方法為進入shell後,執行 sqlite3 /data/data/com.android.demo.notepad2/databases/data 開啟資料庫後,可執行 .help開啟操作指令說明。