2012年4月23日 星期一

Ubuntu下gitosis架設


安裝 git 及 gitosis
$ sudo apt-get install gitosis git-core

在 Client 端電腦生成 SSH公鑰並上傳至Server端
$ ssh-keygen -t rsa
(生成出來的key,預設是放在 ~/.ssh/下面)
$ scp ~/.ssh/id_rsa.pub serverIP:/tmp/id_rsa_user.pub

初使化gitosis
在client端電腦連線至server端
$ ssh account@serviceIP
$ sudo -H -u gitosis gitosis-init < /tmp/id_rsa_user.pub
(因為目前只有一位使用者,所以將他設為admin權限)
完成後若出現下列訊息,即代表成功
Initialized empty Git repository in /srv/gitosis/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /srv/gitosis/repositories/gitosis-admin.git/

修改執行權限
$ sudo chmod 755 /srv/gitosis/repositories/gitosis-admin.git/hooks/post-update

設定專案權限、新增帳號
$ git clone gitosis@serviceIP:gitosis-admin.git
抓下來後可以看到,主要分成兩個部份
gitosis.conf
keydir/

接下來將使用者的public key複製到 keydir下面,再新增 git 帳號
$ cp /tmp/id_rsa_user2.pub keydir/user2.pub
$ git add keydir/user2.pub
$ git commit -m 'add user2'
$ git push

$vi gitosis.conf
可以看見預設的管理員權限
[group gitosis-admin]
writable = gitosis-admin
members = admin@example.com
若要新增一個 project,可以輸入
[group project_team_name]
writable = project_name
member = user_name
$ git commit -m 'create a new project and add user2'
$ git push
(這裡的 user_name必需與剛才所加的 .pub 名稱是一致的才行)

建立新專案
$ mkdir project_name
$ cd project_name
$ git init
$ git remote add origin gitosis@serverIP:project_name.git
$ git add.
$ git commit
$ git push origin master

2012年3月29日 星期四

Android Simple File Browser


private ArrayList mFiles = null;
private final String ROOT = "/";

// main file browse function
private void browse(String path) {
mFiles.clear(); // clean previous file list
mPath.setText(path); // a TextView, record file path

File folder = new File(path);
File[] files = folder.listFiles();

if(files != null) {
for(File f : files) {
// add file name to list
if(f.isDirectory()) {
mFiles.add(f.getName() + "/");
}
else {
mFiles.add(f.getName());
}
}
}

ArrayAdapter fileAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, mFiles);
mList.setAdapter(fileAdapter);
}


@Override
public void onClick(View v) {
int id = v.getId();
switch(id) {
case R.id.home:
browse(ROOT);
break;
case R.id.back:
String current = (String) mPath.getText();
if(!current.equals(ROOT)) {
// get parent folder location
String parent = current.substring(0, current.lastIndexOf("/", current.length()-2)+1);
browse(parent);
}
break;
}
}

@Override
public void onItemClick(AdapterView l, View v, int position, long id) {

String path = mPath.getText() + mFiles.get(position);
File file = new File(path);

if(file.isDirectory()) {
file = null;
browse(path);
}
else {
// do something you wants
}
}

2011年2月25日 星期五

Eclipse Debug Certificate Expired Solution

遇到的問題是 eclipse 上面 Android Debug Certificate 過期了,導致無法產生 Android Apk
解決的方法,砍掉 debug.keystore 這個檔案
檔案存在的位罝在:
Win7 - C:\Users\\.android\
XP - C:\Documents and Settings\\.android 或 C:\Documents
and Settings\\Local Settings\Application Data\Android

2010年12月10日 星期五

方便的統計行數

find . -name *.java -type f -exec cat {} \; | wc -l

2010年5月23日 星期日

Android "insufficient permissions for device "

當使用USB連接到device的時候,出現了"insufficient permissions for device
", 下面是我的做法:
$ sudo -s
$ ./adb kill-server
$ ./adb start-server

接下來就可成功連接到device了

2010年5月14日 星期五

檔案分割與合併

分割
split -b size file_name prefix.
split -b 1m phrase.db phrase.

合併
cat prefix.a* > file_name
cat phrase.a* > phrase.db

2010年2月20日 星期六

JarFile


JarFile jar = new JarFile(file);

// get file entry from the JarFile
JarEntry entry = jar.getJarEntry("file_name");

// get file stream to prepare parsing this file
InputStream input = jar.getInputStream(entry);

2010年2月8日 星期一

Build Image Language

append this line "PRODUCT_LOCALES := zh_TW en_GB es_US ja"[...other local
language] at end of [top-dir]/build/target/product/generic.mk if compiling
generic, note,zh_TW must be first position

PRODUCT_LOCALES := \
en_US \
de_DE \
zh_CN \
ru_RU \



reference:
http://pdk.android.com/online-pdk/guide/index.html
http://www.johandekoning.nl/index.php/2009/06/08/building-android-15-building-the-source/

2009年12月10日 星期四

Eclipse 在 Ubuntu 9.10 的視窗問題

在Ubuntu 9.10下,想透過ADT外掛來新增AVD,但卻一直沒法把視窗叫出來
後來執行下面的command,就可以解決這個問題
export GDK_NATIVE_WINDOWS=true

但在9.10下開發Android,感覺似乎相當不穩!

2009年11月20日 星期五

Ubuntu 下安裝 sh 檔

1.首先把 .sh 檔拷貝到某目錄下,ex:/usr/local/
2.執行 chmod command
sudo chmod +x *.sh
3.執行 .sh 檔
sudo sh ./*.bin

2009年10月17日 星期六

Build Custom Application With Android Source

如果要把自己寫的 Android 專案 放入 Android Source code 中,與 Source 一起 build 的話
必需先在自己的專案下建立一 Android.mk ,再把整個專案放到 packages/apps/

接下來要加入專案編譯的路徑到 build/target/product/core.mk
打開 core.mk 後,在 PRODUCT_PACKAGES := \ 下面 (fremework-res \ 之後, Bugreport 之前), 加入自已放在 apps/ 下的目錄名稱就可以了!

2009年10月5日 星期一

Build Android-x86 USB Image

1. 首先取得 source 並將它存放在 android-x86 目錄:
$ mkdir android-x86
$ cd android-x86
$ repo init -u git://git.android-x86.org/platform/manifest.git
$ repo sync


2. Build Image
$ make -jX usb_img TARGET_PRODUCT=eeepc
X:CPU 核心數參數,如果是單核,用 1 取代 X,如果是雙核,則用 2,以此類推。
Build 完後,產出會放在 android-x86/out/target/product/eeepc/ 下
建議:如果是重 build 的話,將上次產生出來的 eeepc_usb.img 刪掉

3. 準備一顆隨身碟放 Android Image
$ sudo dd if=out/target/product/eeepc/eeepc_usb.image of=/dev/sdX
/dev/sdX:是USB Device 的名字,如果不知道,可以用 mount 指令來查詢

2009年9月29日 星期二

Ubuntu 下設定 Hinet 連線

DSL 下
新增一筆
在 Username 跟密碼的地方輸入 Hinet 連線的帳號密碼

Wired 下
新增一筆
IPv4 設定標籤下
Method - Manual
Address - 192.168.1.1
Network - 255.255.255.0
Gateway - 0.0.0.0

重灌 XP 後,修復 Ubuntu Grub

1.利用 Ubuntu Live CD,進入 ubuntu
2.打開終端機,切換到權限到 root 使用者
sudo -i
3.進入 grub
grub
4.找到之前 Ubuntu 所在的分割區
> find /boot/grub/stage1
此時,就會顯示出所在的分割區,如:(hd0,6)
5.設定 Ubuntu 所在的路徑
> root (hd0,6)
6.將 grub 灌入 mbr
> setup (hd0)
如果要將 grub 灌在 linux 的分害區下,,就在 hd0 後面再加上分割區的編號就可以了
7.離開 grub
> quit
8.重開機囉~

2009年9月17日 星期四

Layout XML中使用自訂 styleable 的 namespace 定義方式

在 attrs.xml 中宣告了 styleable 的自訂標籤
如:
<resources>
<declare-styleable name="Custom">
<attr name="position">
<enum name="top" value="0" />
<enum name="bottom" value="1" />
</attr>
</declare-styleable>
</resources>

當在 layout 的 xml 要使用到自訂標籤時,namespace 的宣告方式如下:
xmlns:name="http://schemas.android.com/apk/res/packageName
Sample:
<Framelayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<com.test.custom.ui
xmlns:Custom="http://schemas.android.com/apk/res/com.test.custom"
Custom:position="top" />
</Framelayout>

2009年9月2日 星期三

CMD 命令 - Q - Z 字部

RD - 移除 (刪除) 一個目錄
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path

/S 除了目錄本身之外,一併移除指定目錄裡的所有目錄和檔案。
用於移除樹狀目錄結構。

/Q 安靜模式,有 /S 時,刪除目錄樹結構不再要求確認


RECOVER - 從損壞的磁碟中復原可讀取的資訊
RECOVER [磁碟機:][路徑]檔案名稱
在使用 RECOVER 命令以前,
先查閱\ Windows XP 說明內的連線命令參考。


REM - 在批次檔或 CONFIG.SYS 裡加上備註或說明
REM [comment]


REN - 更改檔案名稱
RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

請注意您不能為目的檔案指定新的磁碟機或路徑。


RENAME - 更改檔案名稱
RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

請注意您不能為目的檔案指定新的磁碟機或路徑。


REPLACE - 取代檔案
REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W]
REPLACE [drive1:][path1]filename [drive2:][path2] [/P] [/R] [/S] [/W] [/U]

[drive1:][path1]filename 指定來源檔案。
[drive2:][path2] 指定要取代的檔案的
目錄。
/A 將新檔案加到目地目錄。不能和
/S 或 /U 參數同時使用。
/P 當取代檔案或新增來源檔案時顯示確
認的提示。
/R 取代唯讀與未受保護的檔
案。
/S 取代在目的目錄中所有子目錄
的檔案。不能和 /A 參數同時
使用。
/W 在開始前等待您放入磁片。
/U 只取代 (更新) 比來源檔案早
的檔案。不能和 /A 參數同時使用。


RMDIR - 移除 (刪除) 一個目錄
RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path

/S 除了目錄本身之外,一併移除指定目錄裡的所有目錄和檔案。
用於移除樹狀目錄結構。

/Q 安靜模式,有 /S 時,刪除目錄樹結構不再要求確認


SET - 顯示、設定或移除 cmd.exe 環境變數
SET [variable=[string]]

variable 指定環境變數名稱。
string 指定設定給變數的一系列字元。

僅鍵入 SET 而不加上任何參數,可以顯示目前的環境變數。

如果您啟用了擴充命令,SET 命令有以下的改變:

如果執行 SET 命令而且只包含變數名稱,沒有等號或數值的話,
命令會顯示出所有字首符合 SET 命令中指定變數名稱的所有變數
值。例如:
SET P

會列出所有以 \'P\' 為開頭的環境變數。

如果在目前的環境中找不到變數名稱,SET 命令會將 ERRORLEVEL
設為 1。

SET 命令不將等號 (=) 視為變數名稱的一部份。

有兩個新參數已經加到 SET 命令中:
SET /A expression
SET /P variable=[promptString]

/A 指定在等號右方的字串是一個要被運算的數字運算式。您可以用運
算式進行簡單的運算,而且支援下列的運算子 (依照運算優先順序由高
到低排列):

() - 組成一群
! ~ - - 一元運算符
* / % - 數字運算元
+ - - 數字運算元
<< >> - 邏輯位移
& - 位元運算 and
^ - 位元運算 exclusive or
| - 位元運算 or
= *= /= %= += -= - 指定
&= ^= |= <<= >>=
, - 運算式分隔字元

如果您使用了任何邏輯或餘數運算子,您必須將運算式兩邊括上引號。
任何在運算式中非數字的字串會被當作環境變數,並且在使用前會先將
這些環境變數轉換為數字。如果您所指定的環境變數名稱尚未在目前環
境中定義,那麼它的值會被設為 0。這可以讓您用環境變數值來做運算
,而不必打入所有的 % 符號來取得它的值。如果 SET /A 是用指令檔
之外的命令列執行,它會顯示運算式最後的數值。指定運算子需要有個
環境變數在等號的左方。0x 字首在數字前方代表十六進位數字、0b 字
首代表二進位數字或 0 字首代表八進位數字,否則數字值都是指十進位
數字。所以 0x12 就和 18、022 等相同。請注意八進位數字可能容易
弄錯: 像 08 和 09 就不是正確的數字,因為 8 和 9 並不是八進位的
正確數字。

/P 參數讓您設定命令列的使用者輸入變數值。在讀取輸入命令列之前,
顯示指定的 promptString。promptString 可以是空白。

環境變數取代功\能已經有下列增強:
%PATH:str1=str2%

會將 PATH 環境變數展開,取代每個發現的 \"str1\" 與 \"str2\"的擴充結果。
\"str2\" 可以是空白字串,這會從擴充輸出中刪除全部 \"str1\"。\"str1\" 可以
用星號開始,這將會從擴充輸出的開頭開始,對應到從所有第一個發現含有
str1 的項目。

您也可以為擴充功\能指定子字串。
%PATH:~10,5%

這將會擴充 PATH 環境變數,然後只使用擴充結果的第 11 個(位移 10)字元
後的 5 個字元如果長度未指定,將會預設為上次使用的變數值。如果數字(位
移或長度)是負數,使用的數字將會是環境變數的長度加上位移或指定長度。
%PATH:~-10%

將抽出 PATH 變數的最後 10 個字元。
%PATH:~0,-2%

將抽出 PATH 變數的最後 2 個字元。

最後,系統加入了延遲環境變數展開的支援。在預設狀態下,命令展開會啟
用這項支援,但是您可以在 CMD.EXE 用 /V 命令列參數來啟用/停用這個功\
能。 請參看 CMD /?

延遲環境變數展開功\能可用來避開展開功\能限制。這項限制是發生在命令列
讀取過程,不是發生在執行過程。下面的範例說明了立即展開變數時會發生
的問題:
set VAR=before
if \"%VAR%\" == \"before\" (
set VAR=after;
if \"%VAR%\" == \"after\" @echo If you see this, it worked
)

這個例子永遠無法顯示 echo 訊息,因為在兩個 IF 敘述中的 %VAR% 會
在第一個 IF 敘述被讀入時便被展開。這是因為它是邏輯上包含了 IF 的內
部,而內部又是一個複合敘述。 所以在複合敘述內的 IF 實際上是用
\"before\" 和 \"after\" 來比較,而這永遠不會為真。同樣的,下面的例子也
不會作用:
set LIST=
for %i in (*) do set LIST=%LIST% %i
echo %LIST%

這個例子中並不會建立目前目錄中所有檔案的清單,相反的只會將 LIST 變
數設為最後一個找到的檔案。同樣地,這是因為 %LIST% 只有在 FOR 敘述
第一次被讀入時才展開,此時 LIST 變數是空的。所以我們實際執行的 FOR
迴圈是:
for %i in (*) do set LIST= %i

這只是重複的將 LIST 設為最後找到的檔案。

延遲環境變數展開讓您可以用一個不同的字元 (驚嘆號) 在執行時展開
環境變數。如果啟用了延遲環境變數展開,上面的例子可以被改寫如下
而正常作用:
set VAR=before
if \"%VAR%\" == \"before\" (
set VAR=after
if \"!VAR!\" == \"after\" @echo If you see this, it worked
)

set LIST=
for %i in (*) do set LIST=!LIST! %i
echo %LIST%

如果您啟用了命令擴充,有幾個動態環境變數會被展開但是不會出現在 SET
所顯示的環境變數列表中。這些變數的值會每次在這些變數被展開時動態地
重新計算如果使用者用這些變數的名稱來定義變數時,則這個新定義會覆蓋\
以下所列的動態變數:

%CD% - 展開為含目前目錄的字串。
%DATE% - 展開為與 DATE 命令格式相同的目前日期字串。
%TIME% - 展開為與 TIME 命令格式相同的目前時間字串。
%RANDOM% - 展開為一個在 0 和 32767 之間的整數亂數值。
%ERRORLEVEL% - 展開為目前的 ERRORLEVEL 值
%CMDEXTVERSION% - 展開為目前的命令處理擴充功\能的版本號碼。
%CMDCMDLINE% - 展開為執行命令處理器前的原始命令列。


SETLOCAL - 開始批次檔中環境變更的本土化工作
在批次檔中屬於中文版環境的開頭已變更。在 SETLOCAL 之後所做的環境變更
已經送出,ENDLOCAL 必須送出,才能還原到上次的設定值。在到達批次指令的
結尾時,批次指令對每個未處理完成的 SETLOCAL 指令都會發出 ENDLOCAL
的執行指令
SETLOCAL

如果您啟用命令擴充,SETLOCAL 的變更如下:

SETLOCAL 批次命令現在可接受一個選項引數,這個引數可為:
ENABLEEXTENSIONS / DISABLEEXTENSIONS
啟用或停用命令處理擴充功\能。
請用 CMD /? 來查看說明。
ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION
啟用或停用延遲環境變數擴充功\能。
請用 SET /? 來查看說明。
這些修正命令作用會持續到對應 ENDLOCAL 命令為止,而不管
它們的設定是否在 SETLOCAL 命令之前。

SETLOCAL 命令將會設定 ERRORLEVEL 的數值,但必須給予一個
引數。兩個有效引數之中如果給了一個,而另一個未給時,它的
數值將變為零。您可以在批次指令檔中使用此命令以決定是否有
可使用的擴充功\能,請使用下列的
語法:
VERIFY OTHER 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 回應無法啟用擴充功\能

這在舊版的 CMD.EXE 中可正常運作,因為 SETLOCAL 並不會設定
ERRORLEVEL 值。用了錯誤引數的 VERIFY 命令會將 ERRORLEVEL
值起始為一個非零的值。


SHIFT - 變更批次檔中,可置換參數的位置
SHIFT [/n]

如果您啟用 SHIFT 擴充命令,支援 /n 參數,它告訴 SHIFT 可以從第 n
個引數開始轉移。n 介於 0 和 8 之間。 例如:

SHIFT /2

會將 %3 轉移到 %2,將 %4 轉移到 %3,以此類推。並且不會影響到
%0 及 %1 。


SORT
SORT [/R] [/+n] [/M kilobytes] [/L locale] [/REC recordbytes]

[[drive1:][path1]filename1] [/T [drive2:][path2]]

[/O [drive3:][path3]filename3]

/+n 指定每次開始比較的起始字元

數目 n。 /+3 表示每次比較都從每行的第 3 個字元開始。
少於三個字元的行數會先被核對。

預設情況下會從每行的第一個字元開始比較。
/L[OCALE] locale 用指定數值覆寫系統預設值。
\"\"C\"\" 地區設定會產生最快的核對順序,而且是目前唯一的其他選擇。排序都不會區分英文大小寫。

/M[EMORY] kilobytes 指定排序時主記憶體的使用量記憶體大小,以 KB 為單位。
不可低於160 KB。如果已指定記憶體大小,不論目前可用記憶體有多少,排序時將會使用
您所指定的值。如果您不指定記憶體的話,可以產生最佳效能。
預設狀況下如果符合預設記憶體大小最大值的話,排序會一次執行完成 (沒有暫存檔案),否則排序會分兩次完成(部分排序完成的資料會儲存在暫存檔案中)。
這樣排序和合併所使用的記憶體容量相等。預設最大記憶體大小是90% 的可用主記憶體大小(如果輸入和出都是使用檔案的話),否則只會設定 45% 的可用主記憶體大小。

/REC[ORD_MAXIMUM] 字元指出一個記錄中字元的最大數目 (預設值為 4096,最大值為65535)。

/R[EVERSE] 反轉排序順序; 也就是,排序由 Z 到 A,然後由 9 到 0。

[drive1:][path1]filename1 指定要排序的檔案。如果未指定排序檔案,會將標準輸入排序。指定輸入檔案比將相同的檔案重新導向為標準輸入還要快。

/T[EMPORARY]

[drive2:][path2] 指定要保留排序的工作存放區的目錄路徑,萬一資料不適合放在主要記憶體中的話可以使用。預設值為使用系統暫存目錄。

/O[UTPUT]

[drive3:][path3]filename3 指定排序的輸入要被存放的檔案。如果未指定,資料會被寫入標準輸出中。指定輸出檔案比將標準輸出重新導向到相同的檔案還要快。


START - 啟動獨立視窗來執行指定的程式或命令
START [\"title\"] [/Dpath] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
[/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
[/WAIT] [/B] [command/program]
[parameters]

\"title\" 顯示在視窗標題列上的文字
path 起始目錄
B 啟動應用程式但不建立新視窗。含有 ^C 控制碼的應用程式會
被略過,除非應用程式啟用 ^C 程序,否則 ^Break 是唯一可
以中斷應用程式的方法
I 新環境會使用 cmd.exe 的原始環境,而不是目前的環境。
MIN 視窗最小化
MAX 視窗最大化
SEPARATE 用不同的記憶體空間啟動 16 位元視窗程式
SHARED 用共用的記憶體空間啟動 16 位元視窗程式
LOW 在 IDLE 主要類別中啟動應用程式
NORMAL 在 NORMAL 主要類別中啟動應用程式
HIGH 在 HIGH 主要類別中啟動應用程式
REALTIME 在 REALTIME 主要類別中啟動應用程式
ABOVENORMAL 在 ABOVENORMAL 主要類別中啟動應用程式
BELOWNORMAL 在 BELOWNORMAL 主要類別中啟動應用程式
WAIT 啟動應用程式並等待其結束
command/program
如果這是內部 cmd 命令或批次檔的話,命令處理器會用 /K
參數執行 cmd.exe。這表示視窗會保持到命令執行完成。

如果這不是內部 cmd 命令或批次檔的話,它就是一個程式,
它會以視窗程式或主控台 (DOS) 應用程式的執行方式執行。

parameters 這些是傳給 command/program 的參數。


如果您啟用擴充命令,經由命令列或 START 命令的外部命令執行有以下改變:

可以經由打入檔案名稱的命令來利用檔名連結以啟動非執行檔。(例如 WORD.DOC
會執行和 .DOC 副檔名連結的程式)。請參看 ASSOC 及 FTYPE 命令來了解
如何在指令檔案中建立這些檔案連結。

當執行 32 位元的圖形介面應用程式時,CMD.EXE 並不會等應用程式停止才回到
命令提示。但是如果從指令檔中執行時,則不會有這樣的行為。

當執行一個命令列時,其中第一個字串項是字串 \"CMD \" 且沒有副檔名或路徑指
示,則 \"CMD\" 會被 COMSPEC 環境變數的值所取代。這會避免由目前目錄中
選擇 CMD.EXE

當執行一個命令列時,其中第一個字串項不包含副檔名時,則 CMD.EXE 使用
PATHEXT 環境變數的值來決定尋找哪個副檔名及用什麼順序來尋找。PATHEXT
變數的預設值為:
.COM;.EXE;.BAT;.CMD

請注意這個語法和 PATH 變數相同,且用分號來隔開不同的項目。

當尋找執行檔時,若是任何副檔名都不符合,則會試著尋找是否有符合的目錄名稱。
如果有的話,START 命令會在那個路徑執行檔案管理員。若是從命令列執行,這就相
當於執行 CD /D 到那個路徑。


SUBST - 建立路徑與磁碟機代號之間的關連
SUBST [drive1: [drive2:]path]
SUBST drive1: /D

drive1: 指定您要指定路徑的虛擬磁碟機。
[drive2:]path 指定您要指定給虛擬磁碟機的實際磁碟
機與路徑。
/D 刪除取代的 (虛擬的) 磁碟機。

鍵入 SUBST 而不加任何參數會顯示目前所有虛擬磁碟機的清單。


TIME - 顯示或設定系統時間
TIME [/T | time]

僅鍵入 TIME 而不加上參數,可以顯示目前設定的時間,並且提示您輸入新的時
間。按 ENTER 鍵即可保持原來時間。

如果您啟用擴充命令,TIME 命令將會支援/T 參數,這個參數
會讓命令只輸出目前的時間,而不提示您輸入新時間。


TITLE - 設定命令提示字元的視窗標題
TITLE [字串]

字串 指定命令題示字元視窗的標題。


TREE - 以圖形顯示磁碟機或路徑的資料夾架構
TREE [drive:][path] [/F] [/A]

/F 顯示各資料夾中檔案的名稱。
/A 使用 ASCII 取代延伸字元。


TYPE - 顯示文字檔案的內容
TYPE [drive:][path]filename


VER - 顯示 Windows XP 版本
VER


VERIFY - 告訴 cmd.exe 是否要驗證檔案有沒有正確地寫入磁碟中
VERIFY [ON | OFF]

僅鍵入 VERIFY 而不加上參數,可以顯示目前的 VERIFY 設定。


VOL - 顯示磁碟區標籤和序號 (若有的話)
VOL [drive:]


XCOPY - 複製檔案和樹狀目錄
XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I] [/Q] [/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]\\r\\r
[/EXCLUDE:file1[+file2][+file3]...]

source 指定要複製的檔案。
destination 指定位置或者/以及新檔案的名稱。
/A 只複製設定成保存屬性的檔案,不要改變屬性的設定。
/M 只複製設定成保存屬性的檔案,並清除保存屬性。
/D:m-d-y 複製在指定日期當天或之後發生變更的檔案。如果沒有給日期,
只複製那些來源檔案日期比目的檔案日期為新的檔案。
/EXCLUDE:file1[+file2][+file3]...
指定檔案清單字串。每個字串
應該在檔案中的不同行。如果有字串對應到要進行複製的檔案絕
對路徑的任何部分,這個檔案會被排除複製。例如,指定字串
\\obj\\ 或 .obj 的話,會排除所有在 obj 目錄下副檔名是
.obj 的檔案複製。
/P 在建立每個目的檔案時顯示提示。
/S 複製每個目錄及其包含的子目錄,不複製空目錄。
/E 複製每個目錄及其包含的子目錄,也複製空目錄。/S 與 /E
相同,能夠用來修改 /T。
/V 驗證每個新檔案。
/W 在複製之前提示您按鍵繼續。
/C 如果錯誤發生時也繼續複製。
/I 如果目的不存在且複製一個以上的檔案的話,就假設指定的
目的一定是目錄。
/Q 在複製時不要顯示檔名。
/F 在複製時顯示來源及目的檔案的全部檔名。
/L 顯示要複製的檔案。
/G 允許\加密檔案複製到不支援加密的
目的地。
/H 時複製隱藏檔和系統檔。
/R 覆蓋\唯讀檔案。
/T 建立目錄結構,但不複製其中的檔案。不包括空目錄及子目錄。
/T /E 會包括空目錄及子目錄。
/U 只複製已經存在目的位置的檔案。
/K 複製檔案屬性。通常 Xcopy 會重設唯讀的屬性。
/N 用所產生的短檔名來進行複製。
/O 複製檔案所有權及 ACL 資訊。
/X 複製檔案審查設定 (包含 /O)。
/Y 不要提示您確認是否要覆蓋\一個已經存在的檔案。
/-Y 示您確認是否要覆蓋\一個已經存在的檔案。
/Z 在可重新開始的模式中複製網路檔案。

參數 /Y 可以在 COPYCMD 環境變數中預先設定。但可以在命令列中用 /-Y 參數
來覆蓋\原有設定。




轉載自:http://www.csie.ntu.edu.tw/~r91112/myDownload/WEB/CMD.html

2009年8月31日 星期一

Tutorial 04b - Sprite2D

Sprite2D - 一個簡化版的顯示方示,用以取代 3D 顯示物件,可以省去許多額外的計算及資源。此物件在場景中,永遠是面對著 Camera 的。舉例來說,天上的星星、水中的魚、森林裡的樹,都可以利用 Sprite2D 來顯示。

重點API:
sandy.util.LoaderQueue
sandy.core.scenegraph.Sprite2D
sandy.events.QueueEvent

  1. package
  2. {
  3. import flash.display.Bitmap;
  4. import flash.display.Sprite;
  5. import flash.events.Event;
  6. import flash.events.KeyboardEvent;
  7. import flash.events.MouseEvent;
  8. import flash.net.URLRequest;
  9. import sandy.core.Scene3D;
  10. import sandy.core.scenegraph.Camera3D;
  11. import sandy.core.scenegraph.Group;
  12. import sandy.core.scenegraph.Sprite2D;
  13. import sandy.events.QueueEvent;
  14. import sandy.util.LoaderQueue;

  15. public class Example004b extends Sprite
  16. {
  17. private var scene:Scene3D;
  18. private var camera:Camera3D;
  19. // Utility class for 載入外部資源
  20. private var queue:LoaderQueue;
  21. /** numTree 將影響 CPU 的效能 **/
  22. private var numTree:Number = 50;
  23. public function Example004b()
  24. {
  25. // 產生一 LoaderQueue 物件
  26. queue = new LoaderQueue();
  27. // 將欲載入資源之Unique名稱及路徑,加入 queue 中
  28. queue.add("tree", new URLRequest("asset/tree.gif"));
  29. // 為 queue 物件新增監聽事件 - 當資源載入完成時,
  30. // 執行 loadComplete Function
  31. queue.addEventListener(
  32. QueueEvent.QUEUE_COMPLETE,
  33. loadComplete);
  34. // 為 queue 物件新增監聽事件 - 當載入資源發生錯誤時,
  35. // 執行 loadError Function
  36. queue.addEventListener(
  37. QueueEvent.QUEUE_LOADER_ERROR,
  38. loadError);
  39. // 開始載入外部資源
  40. queue.start();
  41. }

  42. public function loadComplete(evt:QueueEvent):void
  43. {
  44. // 產生 Camera3D 物件
  45. camera = new Camera3D(600, 300);
  46. camera.y = 10;
  47. camera.z = -300;

  48. // 產生 Group 物件
  49. var root:Group = createScene();

  50. // 產生 Scene3D 物件,並將 Camera3D 及 Group 加入場景
  51. scene = new Scene3D("scene", this, camera, root);
  52. // 設定當物件超出場景之外時,將不會被畫出
  53. scene.rectClipping = true;

  54. addEventListener(Event.ENTER_FRAME,
  55. enterFrameHandler);
  56. stage.addEventListener(KeyboardEvent.KEY_DOWN,
  57. keyPressHandler);
  58. stage.addEventListener(MouseEvent.MOUSE_MOVE,
  59. mouseMoveHandler);
  60. }

  61. public function loadError(evt:QueueEvent):void
  62. {
  63. trace("load resource error");
  64. }

  65. private function createScene():Group
  66. {
  67. // 產生根 Group 物件
  68. var g:Group = new Group();

  69. // 產生 Sprite2D 物件
  70. for (var i:Number = 0; i <>
  71. {
  72. // 將載入 queue 物件中的資源取出
  73. var bit:Bitmap =
  74. new Bitmap(queue.data["tree"].bitmapData);
  75. // 產生 Sprite2D 物件,並設置其參數,分別為
  76. // Unique名稱,顯示物件 (DisplayObject) 及 縮放比率
  77. var s:Sprite2D = new Sprite2D("tree" + i, bit, 1);
  78. // 隨機設定 Sprite2D 的 x, y, z 座標位置
  79. s.x = Math.random() * 600 - 300;
  80. s.y = 0;
  81. s.z = Math.random() * 600;

  82. g.addChild(s);
  83. }

  84. return g;
  85. }
  86. private function enterFrameHandler(evt:Event):void
  87. {
  88. scene.render();
  89. }
  90. private function keyPressHandler(evt:KeyboardEvent):void
  91. {
  92. // 調整 camera 鏡頭之遠近
  93. switch(evt.keyCode)
  94. {
  95. case KeyboardEvent.KEY_UP:
  96. camera.moveForward(5);
  97. break;
  98. case KeyboardEvent.KEY_DOWN:
  99. camera.moveForward( -5);
  100. break;
  101. }
  102. }
  103. private function mouseMoveHandler(evt:MouseEvent):void
  104. {
  105. // 隨滑鼠移動設置 camera 之方向
  106. camera.pan = (evt.stageX - 300 / 2) / 10;
  107. camera.tilt = (evt.stageY - 300 / 2) / 20;
  108. }
  109. }
  110. }




程式碼出處:http://www.flashsandy.org/tutorials/3.0/sandy_cs3_tut042

2009年8月25日 星期二

Flash Player Linux 64bit

目前似乎沒有release正式版
所以還是使用試用版
載點:http://labs.adobe.com/technologies/flashplayer10/

首先將.so檔 複製到 mozilla 的 plugins底下
sudo cp libflashplayer.so /usr/lib/mozilla/plugins/


接著與瀏覽器做連結
‧Firefox
sudo ln -sf /usr/lib/mozilla/plugins/libflashplayer.so /usr/lib/firefox-addons/plugins/
‧XULRunner
sudo ln -sf /usr/lib/mozilla/plugins/libflashplayer.so /usr/lib/xulrunner-addons/plugins

2009年8月24日 星期一

cda轉MP3 - Windows Media Player

將.cda 檔轉成 .mp3檔
1.開啟Windows Media Player
2.至 “擷取” 頁面
3.自由勾選欲轉換之曲目
4.自由編輯專輯名稱、作者等
5.按下右下方的 “開始擷取” 鈕,即可
擷取出來檔案,預設放在 「我的文件/我的音樂」 下

CMD 命令 - I - P 字部

IF - 在批次檔中執行條件處理
IF [NOT] ERRORLEVEL number command
IF [NOT] string1==string2 command
IF [NOT] EXIST filename command


NOT 表示 Windows XP 應該只有在條件為偽時
才執行命令。

ERRORLEVEL number 當上一個執行的程式傳回的結束碼大於或
等於指定數字時,則條件為真。

string1==string2 當指定的文字字串相符合時,則條件
為真。

EXIST filename 如果指定的檔名存在時,則條件
為真。

command 指定當條件為真時所要執行的命令。
命令之後可以接著 ELSE 命令。當指定條件為
偽時,緊接在 ELSE 命令之後的命令
將會被執行。

ELSE 子句必須出現在 IF 之後的同一行。
例如:

IF EXIST filename. (
del filename.
) ELSE (
echo filename. missing.
)

以下命令無法作用,因為 del 命令必須以換行字元來
結尾:

IF EXIST filename. del filename. ELSE echo filename. missing

下面命令也無法作用,因為 ELSE 命令必須在與 IF 命令同一行
的結尾:

IF EXIST filename. del filename.
ELSE echo filename. missing

下面命令只有在寫成一行時才能作用:

IF EXIST filename. (del filename.) ELSE echo filename. missing

如果您啟用擴充命令,IF 的變更如下:

IF [/I] string1 compare-op string2 命令
IF CMDEXTVERSION 數字命令
IF DEFINED 變數命令

compare-op 可以是:

EQU - 等於
NEQ - 不等於
LSS - 小於
LEQ - 小於或等於
GTR - 大於
GEQ - 大於或等於

而如果指定 /I 參數,則執行區分大小寫的字串比對。此 /I 參數也可使用
string1==string2 格式於 IF 命令。這些比對是通用的,因為在比對中,如
果 string1 及 string2 兩者皆由十進位數字所構成,則字串將會轉換為數
字,並執行數字的比對。

CMDEXTVERSION 條件式的運作和 ERRORLEVEL 一樣,除非它和與擴充命令相
關的內部版本編號作比對。第一個版本為 1。若擴充命令大幅度地增強時就
再加 1。當擴充命令停用時,CMDEXTVERSION 條件式永遠不為真。

DEFINED 條件式的運作和 EXISTS 一樣,除非它帶有環境變數名稱,如果環
境變數已定義則傳回 true 值。

%ERRORLEVEL% 將擴充到代表目前 ERRORLEVEL 變數的一個字串,前提是已
經沒有名為 ERRORLEVEL 的環境變數,在這個情況下,您會得到它的值。使
用此值和上面的數字比對運算元,您可以作下列的選擇:

goto answer %ERRORLEVEL%
:answer0
提示您鍵入 Y 加以確定
:answer1
提示您鍵入N 加以否定

您也可使用上面的數字比對:

IF %ERRORLEVEL% LEQ 1 goto okay

%CMDCMDLINE% 將擴充到比 CMD.EXE 的任何處理程序更早傳給 CMD.EXE 的
原始命令列,前提是已經沒有名為 CMDCMDLINE 的環境變數,在這個情形下,
您會得到它的值。

%CMDEXTVERSION% 將擴充成一個表示目前 CMDEXTVERSION 值的字串,
表示沒有名為 CMDEXTVERSION 的環境變數。這種情況下您將會得到它的值。


LABEL - 建立、變更或刪除磁碟的磁碟區標籤
LABEL [drive:][label]
LABEL [/MP] [volume] [label]


drive: 指定磁碟機代號。
label 指定磁碟區標籤。
/MP 指定磁碟區應被視為掛接點
或磁碟區名稱。
volume 指定磁碟機代號 (後接冒號),
掛接點或磁碟區名稱。如果磁碟區名稱已經指定了,
/MP 旗幟就沒有必要了。


MD - 建立目錄
MKDIR [drive:]path
MD [drive:]path


如果您啟用擴充命令,MKDIR 的變更如下:

必要時,MKDIR 會在目錄中建立一個中間目錄。
例如,假設 \\a 不存在,則:

mkdir \\a\\b\\c\\d

相同於:

mkdir \\a
chdir \\a
mkdir b
chdir b
mkdir c
chdir c
mkdir d

如果擴充功\能停用的話,您必須鍵入前一種命令類型。


MKDIR - 建立目錄
MKDIR [drive:]path
MD [drive:]path


如果您啟用擴充命令,MKDIR 的變更如下:

必要時,MKDIR 會在目錄中建立一個中間目錄。
例如,假設 \\a 不存在,則:

mkdir \\a\\b\\c\\d

相同於:

mkdir \\a
chdir \\a
mkdir b
chdir b
mkdir c
chdir c
mkdir d

如果擴充功\能停用的話,您必須鍵入前一種命令類型。


MODE - 設定系統裝置組態
序列連接埠: MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
[to=on|off] [xon=on|off] [odsr=on|off]
[octs=on|off] [dtr=on|off|hs]
[rts=on|off|hs|tg] [idsr=on|off]

裝置狀態: MODE [device] [/STATUS]

重新導向的列印: MODE LPTn[:]=COMm[:]

選擇字碼頁: MODE CON[:] CP SELECT=yyy

字碼頁狀態: MODE CON[:] CP [/STATUS]

顯示模式: MODE CON[:] [COLS=c] [LINES=n]

鍵盤速度: MODE CON[:] [RATE=r DELAY=d]


MORE - 以一次一頁螢幕的方式來顯示輸出
MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]] MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

[drive:][path]filename 指定要顯示的檔案。檔案會以一次
一頁螢幕的方式顯示。

command-name 指定一個命令,而它的輸出將會以
一次一頁螢幕的方式顯示。

/E 啟用擴充功\能。
/C 在顯示一頁之前先清除螢幕。
/P 展開 FormFeed 字元。
/S 將數個空白行顯示為一行。
/Tn 將定位字元展開為 n 個空白 (預設值為 8)

MORE 環境變數中可以有命令
選項

+n 在第 n 行開始顯示第一個檔案。

files 要顯示的檔案清單。在清單中的檔案
用空格分開。

如果您使用了擴充功\能,您可以在 -- 其他 --
提示出現時,使用下列命令:

P n 顯示下面 n 行
S n 跳過下面 n 行
F 顯示下一個檔案
Q 結束
= 顯示行號
? 顯示輔助說明行
顯示下一頁
顯示下一行


MOVE - 移動或更改檔案及目錄的名稱
移動一個或一個以上的檔案:
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

更改目錄名稱:
MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2

[drive:][path]filename1 指定您要移動的檔案的位置與名稱。
destination 指定檔案的新位置。目的位置可以包
含磁碟機代號和冒號、目錄名稱、或
是這些的組合。如果您只移動一個檔
案,您也可以包含檔名。這樣做會在
移動的同時更改檔名。
[drive:][path]dirname1 指定您要更改名稱的目錄。
dirname2 指定目錄的新名稱。

/Y 不要提示您是否要覆蓋\一個現存的
目的檔案。
/-Y 提示您是否要覆蓋\一個現存的目的
檔案。

參數 /Y 可能會在 COPYCMD 環境變數中預先設定。您可以在命令列中
使用 /-Y 來覆蓋\預設值。預設值是除非 MOVE 命令是在批次檔中執行,
否則系統會提示您是否要覆寫現有檔案。


PATH - 顯示或設定搜尋執行檔的路徑
PATH [[drive:]path[;...][;%PATH%]
PATH ;

鍵入 PATH ; 即可清除所有搜尋路徑的設定,並將 cmd.exe 重導為只搜尋
目前的目錄。鍵入 PATH 且不指定任何參數,可顯示目前的搜尋路徑。
在設定的新路徑中加上 %PATH%,可以將舊路徑附加到新的設定。


PAUSE - 暫停執行批次程式,並且顯示以下訊息:
請按任意鍵繼續 . . .


POPD - 變更到用 PUSHD 命令儲存的目錄
POPD

如果您啟用擴充命令,當您使用 POPD 命令將磁碟機從擴充的目錄堆疊
刪除時,POPD 命令會刪除由 PUSHD 所建立的暫時性磁碟機代號。


PRINT - 列印文字檔
PRINT [/D:device] [[drive:][path]filename[...]]

/D:device 指定印表機週邊設備。


PROMPT - 變更 cmd.exe 命令提示字元
PROMPT [text]

text 指定新的命令提示字元。

提示字元可以由一般字元及下列特定代碼組成:

$A & (Ampersand)
$B | (直線)
$C ( (左括弧)
$D 目前的日期
$E 跳出代碼 (ASCII 碼 27)
$F ) (右括弧)
$G > (大於符號)
$H 後退 (清除前一個字元)
$L < (小於符號)
$N 目前的磁碟機
$P 目前的磁碟機及路徑
$Q = (等號)
$S (空格)
$T 目前的時間
$V Windows XP 版本編號
$_ 換行
$$ $ (貨幣符號)

如果您啟用擴充命令,PROMPT 命令會支援下列其他的格式字元:

$+ 零或多個加號 (+) 字元,視 PUSHD 目錄堆疊的深度
而定,每推入一層就多一個字元。

$M 顯示與目前的磁碟機代號或空字串相關聯的遠端名稱
(如果目前的磁碟機不是網路磁碟機的話)。


PUSHD - 儲存目前目錄以供 POPD 命令使用,然後切換到指定的目錄
PUSHD [path | ..]

path 指定要切換到的目錄。

如果您啟用擴充命令,PUSHD 命令會接受正常的磁碟機代號和路徑之外的網
路路徑。如果您指定了一個網路路徑,PUSHD 會建立一個代表該特定的網路
資源的暫時性磁碟機代號,然後以剛定義的磁碟機代號,變更目前的磁碟機
和目錄。暫時性磁碟機代號的配置是由 Z: 往下開始定義,方法是使用第一
個發現到未曾使用過的磁碟機代號。




轉載自:http://www.csie.ntu.edu.tw/~r91112/myDownload/WEB/CMD.html