ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2014年12月3日 星期三

ant 就是 Make ..

用來build java project 的 tool : apache ant
角色上就跟用來 build c project 的 Make 一樣。

那為什麼要特別做一個 tool 呢?
有什麼是 Make 做不到的 ?

這一篇有說明:

大概是因為啟動 javac 的時間很長,所以compile java 傾向於一次 compile 很多 java file.
和 c 一次compile 一個差異很大。

加上 target-depends rules 的更動,不太容易處理階層性的 source code.
所以才重寫了 make 的 tool

所以,就把 ant 當 make 就好了


make 是吃 Makefile
ant 是吃 build.xml (default)

是 xml 格式。
大約也跟 makefile 一樣,定義變數,定義 target, 然後有 action

同意也有 include 的功能。
還有一些定義另外分別開來,叫 property file, 或 config 檔,。

啟動ant 的 command 大概就是:
ant -v -f build.xml
加上 -v 是output message,好方便 verify 動作。


android software developement kit 也使用 ant 作為 build system (雖然後來又改用 grandle)
所以sdk 中有一個 folder: sdk/tools/ant, 裡面有一些寫好的 xml,
讓 developer 直接使用,不用自己再寫 build.xml



ant 雖然是為java 而做,但是他在包裝 jar 時,不會自動 copy resource file (png, wav,..etc)。
所以 jar 中用 getResource("icon.png"), 常常會出現 nullpointerexception.
因為 ant 在包 jar 時,沒有把 icon.png 也包進去。

一般來說,resource 所在位置,就是要跟使用 getResource( ) 的那個 class 在相同的目錄。
ref: http://stackoverflow.com/questions/804150/ant-compile-doesnt-copy-the-resources

就是在 jar 的 action 加上.. https://github.com/checko/androidscreencast_org/commit/fe9083623469a2e8e533179226766b84bfcd09a9

2014年12月2日 星期二

install run-java6 on Debian Jessie

去 http://ghaffarian.net/downloads/Java/JDK/ 下載 jdk-6u45-linux-x64.bin (因為到 oracle 下載要註冊).

ref: http://unix.aspcode.net/view/635395087004115229152482/install-java-sdk-6-wheezy

debiand 沒辦法直接提供 oracle java package (因為 license),但是提供了把 Orcale java 包裝成 deb 的 tool:
apt-get install java-package
包裝 jdk-6u45-linux-x64.bin:
make-jpkg jdk-6u45-linux-x64.bin
安裝剛剛包好的 deb:
dpkg -i oracle-java6-jdk_6u45_amd64.deb

Selecting previously unselected package oracle-java6-jdk.
(Reading database ... 169950 files and directories currently installed.)
Preparing to unpack oracle-java6-jdk_6u45_amd64.deb ...
Unpacking oracle-java6-jdk (6u45) ...
Setting up oracle-java6-jdk (6u45) ...
update-alternatives: using /usr/lib/jvm/jdk-6-oracle-x64/jre/bin/ControlPanel to provide /usr/bin/ControlPanel (ControlPanel) in auto mode
update-alternatives: using /usr/lib/jvm/jdk-6-oracle-x64/jre/lib/amd64/libnpjp2.so to provide /usr/lib/mozilla/plugins/libjavaplugin.so (mozilla-javaplugin.so) in auto mode

會裝在 /usr/lib/jvm/jdk-6-oracle-x64

然後就是設定 default :
sudo update-java-alternatives -s jdk-6-oracle-x64
然後會 complain 一下 這個 folder 有一些 tool 沒提供。

2014年11月28日 星期五

build and install minidlna from source

因為一些舊的 distribution 沒有,所以只好自己 build

ref:
先download source..
現在 sourceforge 也有提供 git 囉: http://sourceforge.net/p/minidlna/git/ci/master/tree/

裝好需要的 libxxx-dev

然後依照說明 (INSTALL),應該是要先 run ./autogen.sh
但是 他 complain 說 gettext 版本太舊。

所以只好直接做:
./configure
make
sudo make install
然後是手動的部份:
sudo cp minidlna.conf /etc/
sudo cp linux/minidlna.init.d.script /etc/init.d/minidlna
sudo chmod 755 /etc/init.d/minidlna
sudo update-rc.d minidlna defaults
這樣做完之後,就可以和一般一樣,編輯 /etc/minidlna.conf
然後用 service minidlna start|stop|status 來控制了。



為了測試(亂動),所以 fork 一份到 github 了: https://github.com/checko/minidlna

client (player) 的話,用 VLC 就可以了。vlc 2.0 以上都有內建 UPNP player 功能。
ref: http://askubuntu.com/questions/88754/upnp-dlna-client-player-recommendations

開啟的位置是: View -- Playlist -- Local Network -- Universal Plug'N'Play

2014年11月27日 星期四

controldlna and iperf

from : https://github.com/Nutomic/controldlna

附的 build tool 是 gradle.

build 的過程大概就是...

找不到 android sdk ..
ref: http://xinyustudio.wordpress.com/2014/07/02/gradle-sdk-location-not-found-the-problem-and-solution/

new 一個 local.properties:
sdk.dir=/home/charles-chang/adt-bundle-linux-x86_64-20140702/sdk
這樣就可以。

剩下就是 需要對應的 sdk version, build tool version, support repository 等等。
就有 error 就開啟 android sdk manager 來 install 就可以。


github: https://github.com/checko/iperf-project

這個 project 很有趣,是分成兩部份: iperf, Android UI

iperf 就是一般的 iperf 執行城市,所以是用 ndk-build,
build 出來執行檔 iperf 會被放在 Android package 的 assets 中。

UI 啟動後,把 assets/iperf copy 到 /data/data/iperf.project/ 來執行。
 InputStream  in  = getResources().getAssets().open("iperf");
 OutputStream out = new FileOutputStream("/data/data/iperf-project/iperf", false);
 byte[] buf = new byte[1024];
 int len;
 while ((len=in.read(buf)) > 0) {
    out.write(buf,0,len);
 }
 in.close();
 out.close();

然後 chmod +x :
 Process processchmod = runtime.GetRuntime().exec("/system/bin/chmod 744 /data/data/iperf.project/iperf");
 processchmod.waitFor();

執行 iperf 和取得結果的動作在令一個 , AsyncTask 做:
先把 command process 做出來,執行。
 List<String> commandList = new ArrayList<String>(Arrays.asList(commands));
 commandsList.add(0,"/data/data/iperf.project/iperf");
 Process process = new ProcessBuilder().command(commandList).redirectErrorStream(true).start();

然後拿到這個 process 的 output, 接到一個 InputStream 來讀:
 BufferReader reader = new BufferReader(new InputStreamReader(process.getInputStream()));

 int read;
 char[] buffer = new char[4096];
 StringBuffer output = new StringBuffer();
 while((read = reader.read(buffer)) > 0) {
   output.append(buffer,0,read);
   publishProgress(output.toString());
   output.delete(0,output.length());
 }
 reader.close();
 process.destroy();

2014年11月26日 星期三

mount partition and the owner

mount partition 的時候,mount folder 的 ower 依據 partition 的 filesystem 而有不同的決定方法。
像沒有 owner attr 的 filesystem, 像 fat。
就可以在 mount 的時候指定 uid, gid

如果是本來就有 ower attr 的 filesystem, 像 ext4
就是由 partition 的 root attrib 決定的。

像 mount ext4 進來後,到 mount folder 的 root 去看 (ls -al)

那個 . 的 owner 是誰,就決定 mount folder 的 owner 是誰。

2014年11月20日 星期四

enable adb for redmi 1s

ref: http://en.miui.com/thread-52488-1-1.html

大概就是..
  • 把redmi1s 的 各種 vid, pid 寫到 /etc/udev/rules.d/50-android.rules, 讓 user 有 access 的權限
  • 新增 .android/adb_usb.int 把 redmin1s 的 vid 寫進去,這樣 adb server 才會認得

redmi1s 的pid 根據mode 會不一樣:
# Xiaomi Redmi1S WCDMA - PTP Mode
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", ATTR{idProduct}=="1210", MODE="0666",GROUP="plugdev"
# Xiaomi Redmi1S WCDMA - PTP Mode with USB Debug
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", ATTR{idProduct}=="1218", MODE="0666",GROUP="plugdev"
# Xiaomi Redmi1S WCDMA - USB Mode == Built-in CD-ROM Mode!
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", ATTR{idProduct}=="1220", MODE="0666",GROUP="plugdev"
# Xiaomi Redmi1S WCDMA - USB Mode with USB Debug
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", ATTR{idProduct}=="1228", MODE="0666",GROUP="plugdev"
# Xiaomi Redmi1S WCDMA - MTP Mode
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", ATTR{idProduct}=="1260", MODE="0666",GROUP="plugdev"
# Xiaomi Redmi1S WCDMA - MTP Mode with USB Debug
SUBSYSTEM=="usb", ATTR{idVendor}=="2717", ATTR{idProduct}=="1268", MODE="0666",GROUP="plugdev"

而 .android/adb_usb.in 內,就是把 vid 寫進去:
0x2717

2014年11月13日 星期四

sfdisk . script fdisk.

create_partition(p, 1, +5M)...
create_partition(p, 2, +30M)...
create_partition(p, 3, +160M)...
create_partition(e, 4, +all)...
create_partition(l, 5, +100M)...
create_partition(l, 6, +512M)...
create_partition(l, 7, +1024M)...
create_partition(l, 8, +all)
寫成 sfdisk 的 script 的話是....

start, size, id, bootable

標籤

網誌存檔