聚會時間公告: 7月份聚會為7月17星期六下午兩點在
MocaMona / 講者: Lloyd Topic: Introduction Graphviz

七月 28, 2010
» 貝貝 6個月達成

貝貝從初階(一、二階)升三階囉~ 現在吃手手的次數也減少了, 都開始吃長頸鹿囉~ 貝貝 6個月達成 事項紀錄 身高 68 公分, 體重 8.2 公斤, 頭圍 43 公分 每次奶量還是喝 150cc 一天大便一次 吃副食品消化不良, 臉上會長小紅疹 學校副食品吃蘋果泥、芭樂泥, 吃芭樂泥消化不好, 所以重新再回吃蘋果泥. 粥 + 水果泥吃的很開心, 都會吃光光, 每次還是一湯匙的量 升階, 同學四個一起升級.(同班同學) 升階, 所以換成簡老師帶班, 也換了教室, 這個教室有爬坡道可以攻頂. 升三階的慶祝蛋糕 有時後爸爸會騎機車, 用背巾接她放學 使用環保尿布, 但是學校說有尿味, 大便難洗, 試用三天就只能在家用了~ 在學校會交朋友了 (跟同學一人一句有來有往, 而且還會主動去摸同學的手手. XD) 老師說我有古典美 看書書時, 會搶著要拿書來翻、啃 看到書書會想要自己翻 鏡子中的貝貝 拿書給她看, 然後筆會出聲音, 她就會去找聲音在哪裡(所以就把聲音放在她的背上. XD) 所有東西拿到就往嘴裡塞 肉食性動物, 愛吃長頸鹿, 先研究要從哪邊開始吃 長頸鹿整隻從頭吃到腳, 只要拿到手, 就吃個不停. 第一次跟長頸露洗澡, 會自己把長頸鹿抓在身邊玩 吃玩具手手 偷吃東西的表情 (嘴巴裡面就像有東西, 一直在動來動去, 好像有東西在嘴裡吃的感覺) 吃藥的時後, 原本是用舌頭將藥頂出來, 現在新招是用咳或噴的噴出來(噗的音, 就一直連續噴出來) 愛爬爬 爬行現在會翹屁股, 然後用膝蓋撐起來. 已經很會爬了, 看到目標可以很快速的爬過去, 達陣~ 比較有力可以把身體撐起來, 開始會注意到比她高的東西了 愛坐坐, 剛開始需要扶著地版或腳腳 坐的會左右亂看 練習放手 現在坐的很穩囉~ 可以放手了. 很會笑 笑的時後, 已經可以笑出聲音了~ 人家說她像土撥鼠, 所以送了一隻給她 睡覺前會自己唱歌 第一次發燒, 感冒不舒服, 媽媽不准我出去應酬 量耳溫 扁嘴 哭的時後還是很兇, 只是已經比較不會哭了 我要起來, 但是我自己爬不起來 不喜歡被丟在一旁的躺著. 不過, 就算不喜歡躺, 爭扎久了還是會放棄 持續維持著睡大字形, 起床揍爸爸的姿勢 躺在爸爸身上, 好奇的看爸爸 手手特寫 腳腳特寫 跟她玩飛高高(腳頂著她的身體, 把她頂上去、下來)、擠牛奶, 會笑的很開心 喜歡嚇一跳的遊戲 喜歡玩躲貓貓, 然後臉忽近忽遠就會很開心 庭院遇到的鄰居看她第一眼, 就直接叫她蠟筆小新 像蟲一樣動個不停 抱三歲和六個月的比起來, 三歲的比較輕(因為三歲的會抓緊我, 六個月的會亂動) 想睡覺前會一直揉眼睛 三角飯團, 越來越有難度了 媽媽不給我吃雞腿, 淚汪汪 早上起床心情很好, 會自己唱歌 早上起床會拉著爸爸的衣服, 拍爸爸, 叫爸爸起來陪她玩 坐汽車坐椅, 喜歡坐坐, 不喜歡躺躺, 要一直看外面車車 去阿信家坐會動的車車 最近幾天半夜要起來三次, 很難睡, 安撫她睡也要安撫很久 喝喜酒 跟爸爸愉看電視 滿6個月的蛋糕 看到蛋糕後亂動手, 所以鼻子被媽媽整了

七月 27, 2010
» Google 問答上線 (Google 版的知識+)

Google 的問答上線, 類同 知識+, 只是規則看起來蠻簡單的. 一個問題, 多個回答, 靠投票數來排序回答的順序, 沒有特意標明最佳解答. 目前網址是掛在香港(hk), 不過內容都是以簡體為主. 詳見: Google 問答 相關網頁 谷歌問答已經正式上線

» [Kernel Driver] 撰寫簡易 Timer 機制

在底層 Linux Kernel 提供了時序(timing)機制,方便驅動程式設計者所使用,核心是依據硬體發出的『計時器中斷』來追蹤時間的流動狀況。我們可以依據 HZ 的值來設計 Delay 機制,讓驅動程式可以每隔固定一段時間啟動或者是發出訊號,也可以利用 Timer 來讓 LED 閃爍變化,在介紹 Timer API 之前,可以先參考 Linux Kernel: 簡介HZ, tick and jiffies 這篇文章,瞭解一些相關名詞,舉例:如果想知道一秒後的 jiffies 時間,可以寫成底下:

#ifdef CONFIG_BMA150_TIMER
#include <linux/timer.h>
#endif
j = jiffies;
/* 一秒之後 */
stamp_1 = j + HZ;
/* 半秒之後 */
stamp_1 = j + HZ/2;
/* 20秒之後 */
stamp_1 = j + 20*HZ;

Timer API 用法

筆記一下自己在寫 BOSCH Sensortec 三軸加速偵測器(BMA150 Sensor) Driver 的時候,遇到底層要回報 input event X,Y,Z 到 Android HAL(Hardware abstraction layer),所以利用 Timer 的機制定時 report 給 Android。

首先宣告:

#ifdef CONFIG_BMA150_TIMER
#include <linux/timer.h>
#endif
/* 定義 timer_list struct */
#ifdef CONFIG_BMA150_TIMER
struct timer_list bma150_report_timer;
#endif

在 Driver 內的 bma150_probe 裡面 call function:

#ifdef CONFIG_BMA150_TIMER
  bma150_init_timer();
#endif

撰寫 bma150_init_timer 函式:

#ifdef CONFIG_BMA150_TIMER
static void bma150_init_timer(void)
{  
  D("BMA150 init_timer start\n");
  /* Timer 初始化 */
  init_timer(&bma150_report_timer);
  /* 定義 timer 所執行之函式 */
  bma150_report_timer.function = bma150_report;
  /* 定義 timer 傳入函式之 Data */
  bma150_report_timer.data = ((unsigned long) 0);
  /* 定義 timer Delay 時間 */
  bma150_report_timer.expires = jiffies + BMA150_REPORT_DELAY_1;
  /* 啟動 Timer*/
  add_timer(&bma150_report_timer);
}
#endif

上述 add_timer 執行之後,會在一秒後執行 bma150_report 函式,執行之後就會停止,所以如果要一直產生迴圈,就必須在 bma150_report 裡面繼續加入 add_timer,改寫如下:

static int bma150_report(void)
{
  D("appleboy: test timer. \n");
#ifdef CONFIG_BMA150_TIMER
  bma150_report_timer.expires = jiffies + BMA150_REPORT_DELAY_2;
  add_timer(&bma150_report_timer);
#endif
  return 0;
}

我們可以重新定義 expires 時間 jiffies + BMA150_REPORT_DELAY_2,就可以一直循環了,要離開 Timer 可以在最後加入 deltimer(&bma150_report_timer),最後就完成簡易的 Timer 功能。

參考:
add_timer的使用方法
Linux Kernel: 簡介HZ, tick and jiffies

Related View

七月 26, 2010

小狼的學習筆記
snowwolf725
小狼的學習筆記 is about »
» 修改 A688 手機開機畫面

來談下怎麼修改 A60/A688 的手機畫面
更改 splash 的部份應該 A60 和 A688 是通用的,
可是更改開機動畫的部份可能就不一樣了...

A688 的開機畫面分成 splash 和 開機動畫兩部分,
splash 就是開機第一眼看到的手機廠商畫面,
另外還有兩段由圖片組成的動畫放在 hidden.img 的
/hidden/data/Power-on animation/ 下面,
圖片大小為 320x480 全彩 png 可以拿相同格式的圖替換,
就算弄錯也只是沒開機畫面而已,
用 Root Expoler 就可以替換

splash 的部份要更換比較麻煩些
首先先到下面的網站下載
xxxx.raw565
xxxx.jpg 是實際未轉換前的圖可以先看看是不是自己想要的,
http://ostebaronen.dk/android/splash/
然後透過 fastboot 將 raw565 刷到 splash 分割區就可以替換掉開機畫面
(別刷 .jpg 的刷錯會開機沒畫面不過還是能夠正常開機)
(介紹 http://bbs.apanda.com.cn/thread-7378-1-1.html)
(我 Blog 上的介紹 http://snowwolf725.blogspot.com/2010/04/a688-rom.html )
命令類似下面這樣
fastboot flash splash android13.raw565

======================
修改結果:
Youtube
http://www.youtube.com/watch?v=elY9yDh2Jx8
優酷
http://player.youku.com/player.php/sid/XMTY0MjU3MDg0/v.swf
土豆
http://www.tudou.com/v/dVD0bpUK1Ss


» A60/A688 刷機注意

最近刷機的人多了,磚頭也變多了都快要能夠蓋好幾棟大樓了
刷機前要註意的事情,
0. 刷機前一定要備份資料
1. 手機跟電腦連線的 USB 線強烈建議一定要用原廠的連接線
2. 電腦 USB port 的供電要足
部分電腦的供電不足會導致刷到一半資料傳輸錯誤導致刷機失敗,
大部分桌機(台式電腦)的前面 USB port 供電不足建議用後面的(但是也有相反的情況)
這個怎麼知道目前刷機的情況是否穩定呢?
可以透過下面的方式測試
先手機開到 Fastboot 糢式打
fastboot getvar version
打完應該會出現
0.5
多打幾次如果有時出現有時出現錯誤訊息表示連線不大穩定,
如果還不放心可以試著下載 recovery.img
然後打 fastboot boot recovery
(這不是刷機所以資料也不會真正寫入到你的手機)
如果能夠進去到 recovery 糢式這樣代表連線應該是正常的
3. 刷機時不要刷 hidden 分割區
hidden 這個分割區似乎有保護所以無法直接刷資料進去,
刷進去後會發現 hidden 都是空的,
如果你已經刷了,請用 RUT 刷機的方式救回來,
目前 RUT 方式是唯一可以正確刷進去 hidden 的刷機方式
4. 刷機的方式的選擇
A60/A688 有多種刷機的方式,
所以要刷機時有很多方式可以選,
如果要刷機使用的方式建議:
新手
RUT=>Recovery=>Fastboot=>ADB
非新手
Fastboot=>Recovery=>ADB=>RUT
(Recovery 糢式目前無法使用...近期看能不能改個可以用的版本出來)
會這樣排列是因為 RUT 雖然是最簡單的刷機方式,
但是風險也最高,RUT 除了會刷寫 Boot,System 等分割區外還會改寫 Radio
其他糢式正常操作是不會動到 Radio 的刷壞了救回來的機率也比較高
QPST 最危險因為動到的就是 Radio 這區,
另外刷機時要找跟 Radio 相對應的 boot,syste 等 Rom 來刷,
刷了不正確的版本也是會沒辦法開機的
5. 飛磚情況和 Boot, System 等分割區無關
看到許多人變飛了就刷這幾個分割區結果越刷越糟....
問題不是出在這幾個分割區上面
6. 每次刷機只刷一個分割區
不要貪快同時刷這麼多分割區壞了也不知道是哪區壞了
7. 刷機失敗
刷機失敗後不要慌,要先分析還有哪幾種刷機的方式可以用,
要上來問時也說下是用什麼刷機方式刷壞的,目前能用的刷機糢式是哪些,
還有刷的是哪個分割區及Rom的版本,Radio版本這樣版友會比較清楚
類似這樣
=============
刷機方式:
目前可用刷機糢式:
刷的分割區:
Rom 版本:
Radio 版本:
情況描述:
=============
8. 各分割區刷壞情況說明
"boot" 開機區
刷壞會導致無法開機
"misc" 未知
應該沒有影響
"splash" 開機畫面
會看不到開機的第一個畫面
"recovery" recovery糢式啟動區
會無法進到 recovery 糢式
"ftm" ftm糢式啟動區
會無法進到 ftm 糢式
"hidden" 廠商的定製區
會無法看到開機動畫及無法存取 Mico SD卡上面的資料也無法看到虛擬光碟機(虛擬光驅)
"dbgmsk 未知
未刷壞過不過應該不影響
"system" 系統區
會無法開機
"cache" 緩衝區
不影響
"userdata" 用戶資料區
未刷壞過不過可能會無法開機
還有很多要註意的給其他版友補充,
最後提醒沒事不要亂刷...


» A688 APP2SD

以下內容我只有在我的 A688 下實際測試過可以使用,
下面的內容會改寫 boot 分割區所以操作錯誤可能會無法開機,
而且部份操作是之後補記的所以可能有遺漏,請慎重,
A60 雖然理論上應該相同不過對於不熟的還是不要輕易嘗試為好

1. 重新配置 SD Card 分割區

用 PartedMagic,Acronis Disk Director 之類的工具重新分割 SD Card
需要有兩個分割區一個是 Fat32 的分割區放一般資料用
另一個是小於 1GB 的 ext2 的分割區放手機應用程式用,

(若是用 VFAT 版本請格式化成 Fat32)

分割完大概像下圖 Disk4 一樣

SD

2. 將 /data/app 內的檔案複製到 SD 的新分割區內(自動)

2.1. 手機開機到 FTM 模式(就是取得 root 的那個模式)
2.2. 下載 A688_Tools v2.2 並解壓縮

http://www.megaupload.com/?d=T9RO9I39

2.3. 執行 A688_Tools 內的 app2sd.bat

(FAT32 的執行 app2sd_fat32.bat , Ext2 的執行 app2sd_ext2.bat)
應該會有下面的訊息

H:\A688\A688_Tools>adb shell ls -l /dev/block/mmcblk0*
brw------- root root 179, 0 2010-04-19 12:12 mmcblk0
brw------- root root 179, 1 2010-04-19 12:12 mmcblk0p1
brw------- root root 179, 2 2010-04-19 12:12 mmcblk0p2
Do you want to continue (Y/N)?

2.4. 輸入 y 確認並開始 App2SD,或是輸入 n 離開
image

按下 y 之後可能要等快一分鐘左右,視手機程式多寡而定,

結束後長這樣:

image

2.5. 輸入 adb shell busybox rm -rf /data/app/*
(可不做, 刪除手機中的 /data/app,也可以保留部份程式,這樣沒插SD時那些程式還可使用)

2. 將 /data/app 內的檔案複製到 SD 的新分割區內(人工)

這步驟不用作,除非你發現上面執行 app2sd.bat 有問題

才需要用人工的一步步執行的方式來找出問題

http://www.megaupload.com/?d=3BUPLNCF Busybox
2.1. 手機開機到 FTM 模式(就是取得 root 的那個模式)
2.2. 下載 A688_Tools v2.2 並解壓縮, 並下載 busybox 放到解壓縮後的 A688_Tools 內
2.3. 執行 A688_Tools 內的 Dos_Console.bat
2.4. 輸入 adb shell ls -l /dev/block/mmcblk0*
應該會有下面的訊息
brw------- root root 179, 0 2010-04-18 21:02 mmcblk0
brw------- root root 179, 1 2010-04-18 21:02 mmcblk0p1
brw------- root root 179, 2 2010-04-18 21:02 mmcblk0p2
2.5. 輸入 adb shell mkdir /sdapp
2.6. 輸入 adb shell mount -t ext2 /dev/block/mmcblk0p2 /sdapp
(若是 vfat 的話要打 adb shell mount -t vfat /dev/block/mmcblk0p2 /sdapp )
2.7. 輸入 adb push busybox /sbin
2.8. 輸入 adb shell chmod 4777 /sbin/busybox
2.9. 輸入 adb shell mkdir /data
2.10. 輸入 adb shell mount -t yaffs2 /dev/block/mtdblock9 /data
2.11. 輸入 adb shell busybox cp -a /data/app/* /sdapp
2.12. 輸入 adb shell busybox rm -rf /data/app/*
(刪除手機中的 /data/app,也可以保留部份程式,這樣沒插SD時那些程式還可使用)

3. 測試 APP2SD

http://www.megaupload.com/?d=688AAPAO boot_App2SD.img (ext2 版本)

http://www.megaupload.com/?d=OAP3HVDS boot_App2SD_VFAT.img (VFAT 版本)
3.1. 開機到 Fastboot 模式
3.2. 下載特製的 boot_App2SD.img 並放到 A688_Tools 內
3.3. 執行 A688_Tools 內的 Dos_Consle.bat
3.4. 輸入 fastboot boot boot_App2SD.img
3.5. 手機自動重開, 先測試看看程式執行有沒有問題

4. 實際安裝 APP2SD


4.1. 開機到 Fastboot 模式
4.2. 執行 A688_Tools 內的 Dos_Consle.bat
4.3. 輸入 fastboot flash boot boot_App2SD.img
4.4. 輸入 fastboot reboot
4.4. 手機自動重開, 測試看看程式執行有沒有問題
安裝完 APP2SD 後若開機時手機有插 SD Card,
則在應用程式中會看到 SD Card 內的程式 (不會看到 /data/app 內的程式),
請不要在手機開機的狀態下拔掉 SD Card,
這會讓你的手機系統異常自動重開
若是沒有插 SD Card,
則開機看到的就會是 /data/app 內的程式

另外發現某先軟體可能因為不相容的緣故,

所以可能執行上會出現問題如 Handcent Sms,

不過透過重新安裝後目前運作正常

================================

之前下載過 V2.1 的話其實 V2.2 只是加了兩個 App2SD 的腳本和 busybox 而已,可以自己加上去

=============app2sd_ext2.bat=====

adb shell ls -l /dev/block/mmcblk0*
@echo off
SET /P ANSWER=Do you want to continue (Y/N)?
if /i {%ANSWER%}=={y} (goto :yes)
if /i {%ANSWER%}=={yes} (goto :yes)
goto :no
:yes
adb shell mkdir /sdapp
adb shell mount -t ext2 /dev/block/mmcblk0p2 /sdapp
adb push busybox /sbin
adb shell chmod 4777 /sbin/busybox
adb shell mkdir /data
adb shell mount -t yaffs2 /dev/block/mtdblock9 /data
adb shell busybox cp -a /data/app/* /sdapp
ECHO APP2SD OK...
goto :exit
:no
ECHO Bye
:exit
PAUSE

================================

=============app2sd_fat32.bat====

adb shell ls -l /dev/block/mmcblk0*
@echo off
SET /P ANSWER=Do you want to continue (Y/N)?
if /i {%ANSWER%}=={y} (goto :yes)
if /i {%ANSWER%}=={yes} (goto :yes)
goto :no
:yes
adb shell mkdir /sdapp
adb shell mount -t vfat /dev/block/mmcblk0p2 /sdapp
adb push busybox /sbin
adb shell chmod 4777 /sbin/busybox
adb shell mkdir /data
adb shell mount -t yaffs2 /dev/block/mtdblock9 /data
adb shell busybox cp /data/app/* /sdapp
ECHO APP2SD OK...
goto :exit
:no
ECHO Bye
:exit
PAUSE

================================


» A688/A60/A88 資源收集

A688/A60/A88 Tools V3.1

增加 win7 x64 driver

增加 boot/recovery/system repack tools

更新 busybox 版本

增加 Root/UnRoot 腳本(FTM 模式下連結 USB 執行 Root.bat/UnRoot.bat)

http://www.megaupload.com/?d=51O0OM4A

A688 Root 教學使用 FTM 方式(380J及部份 420 適用)

http://kocpc.pixnet.net/blog/post/26440042

部份 420 的 rom 似乎無法進入到 FTM 模式請使用 A88 Custom Recovery 內的 root 功能進行 Root

A688 Custom Recovery image V2.5 (380J)

http://www.megaupload.com/?d=LBAIPOUM

A88 Custom Recovery image By K0ng

http://droidsans.com/A88-Recovery-Rom-App2SD


http://www.mobile01.com/topicdetail.php?f=423&t=1592542&last=20090646

tsai1715 對於如何在 A688 上使用 A88 Recovery Rom 的教學

A688 420 Roms

光刷這些 rom 並不完整,因為 Radio 和 NV Item 等並沒有更新,

所以還是建議直接去官方門市更新,

目前官方似乎不打算放出 NB0 檔案讓使用者自己升級,

升級 420 後似乎沒辦法用 RUT 或是 QPST 刷機了,

剛試了一下似乎只要重刷舊版的 Recovery 就能開啟了,

另外 Recovery mode 的實體按鍵無效化只剩軌跡球和電源還能用…,

最後在這裡感謝某位低調的大大上傳新的 Rom 給我^^

http://www.megaupload.com/?d=WFASATV0 boot

http://www.megaupload.com/?d=2JHMQTXN cache

http://www.megaupload.com/?d=LHO5BFV9 dbgmsk

http://www.megaupload.com/?d=TZ9YFD5T ftm

http://www.megaupload.com/?d=HTPZU1HO hidden(勿刷)

http://www.megaupload.com/?d=X5ZDPK7W system

http://www.megaupload.com/?d=4G1F7YZT misc

http://www.megaupload.com/?d=ZEVO4J1E recovery

http://www.megaupload.com/?d=J429NBOG splash

http://www.megaupload.com/?d=3NZXN9BO userdata

各分割區對照表:

dev:    size   erasesize  name
mtd0: 00500000 00020000 "boot"
mtd1: 00200000 00020000 "misc"
mtd2: 00080000 00020000 "splash"
mtd3: 00500000 00020000 "recovery"
mtd4: 00500000 00020000 "ftm"
mtd5: 01000000 00020000 "hidden"
mtd6: 00060000 00020000 "dbgmsk"
mtd7: 0a000000 00020000 "system"
mtd8: 06400000 00020000 "cache"
mtd9: 0ac80000 00020000 "userdata"

A688 380J Roms



http://www.megaupload.com/?d=SR2E1YDQ boot.img


http://www.megaupload.com/?d=HN9S3I35 cache.img


http://www.megaupload.com/?d=LHO5BFV9 dbgmsk.img


http://www.megaupload.com/?d=V861MDYP ftm.img


http://www.megaupload.com/?d=YRD4BMCJ misc.img


http://www.megaupload.com/?d=ONX7CZSQ recovery.img


http://www.megaupload.com/?d=J429NBOG splash.img


http://www.megaupload.com/?d=58N1F0Y0 system.img (rooted)


http://www.megaupload.com/?d=06IUBABD system.img(non-rooted)


(感謝 Aaron 網友上傳未 root 的版本)


A60 380 Roms (感謝szbitway網友上傳)



http://www.vdisk.cn/down/index/4280691A3160 ftm.img (4.47 MB)


http://www.vdisk.cn/down/index/4280582A5055 recovery.img (2.39 MB)


http://www.vdisk.cn/down/index/4280688A9953 boot_7003.img(2.15 MB)


http://www.vdisk.cn/down/index/4280684A3321 system_7003.img(98.75 MB)


http://www.vdisk.cn/down/index/4280583A3555 splash_7003.img (300.00 KB)


A688 APP2SD(380J)/A60 APP2SD(280)

http://www.megaupload.com/?d=688AAPAO boot_App2SD.img (ext2 版本)


http://www.megaupload.com/?d=OAP3HVDS boot_App2SD_VFAT.img (VFAT 版本)


A60 Hipi2_1_1 測試版 Roms
http://apk.apanda.com.cn/2010/0706/370.html

A60 Hipi2_1 正式版 Roms
http://apk.apanda.com.cn/2010/0721/371.html

A60 Hipi2_1_1 SuperBoot (Root)

http://www.megaupload.com/?d=OMY63CBN

A60 APP2SD (280)

http://www.megaupload.com/?d=2EJ4VAWT

A88 APP2SD & Tools

http://www.megaupload.com/?d=W32U657H


» A60 2.1 Root 教學

最近苦等威寶 A688 的 2.1 版 Rom,

結果反而是對岸的首派 A60 2.1 測試版的 Rom 先出來了,

昨天放出來後我也把我的 A688 刷成 A60 2.1 的 Rom,

結果發現原本 Root 的方式失效了,

雖然能夠進到 FTM 模式可是無法安裝驅動程式,

所以只好繞道暫時先用 fastboot 刷機的方式把手機 root 了,

下面是 Root 的步驟:

1. 手機關機,然後拔掉 usb 連接線, 同時按住[音量減少按鍵]+[掛號鍵]+[電源鍵] 開機

2. 成功的話手機會開機並且在左上角有顯示 enter fastboot mode, 這時就可以把 usb 連接線接上了

3. 從下面的連結下載 A688_Tools 及 A60_Superboot.img

http://www.megaupload.com/?d=51O0OM4A A688_Tools

http://www.megaupload.com/?d=OMY63CBN A60 Hipi2_1_1 SuperBoot (Root)

4. 解開 A688_Tools 到電腦上任意資料夾中, 並且把 A60_Superboot.img 放到解開的 A688_Tools 資料夾內

5. 執行 dos_console.bat 開啟 dost 視窗

6. 輸入 fastboot getvar version 並按下 Enter 鍵測試連線是否正常, 正常情況下會出現 version: 0.5

7. 輸入 fastboot flash boot A60_Superboot.img 並按下 Enter 鍵, 把 boot 開機檔案換成特製的檔案

8. 輸入 fastboot reboot 並按下 Enter 鍵, 把手機重開詳細過程看下面的圖示

image

9. 開機完後, 進到程式區中會看到最右上角多出個 Superuser Permissions 的圖示, 如果有就是成功 root 了

image

PS. 進行上面的過程會將 boot 區換成特製的 rom , 對開機並不影響還是能夠正常開機, 如果有潔癖的可以仿照上面的過程將 boot 區刷回原本的 boot

PS2. 其實應該是 fastboot boot A60_Superboot.img 就可以了, 可是新版的 appbootsbl 被換掉了, 所以輸入 fastboot boot xxx.img 並不會以 xxx.img 開機, 而是使用 boot 分割區進行開機

PS3. 這次首派放出的是測試版還是有些問題沒有解決像是 GPS 有問題, 還有這次的 Rom 中並不含 GMS , 也就是 Google 相關的應用程式都沒有包含 market

PS4. 在這裡順便感謝某位不具名的大大幫忙測試和提供幫助^_^


» rTorrent + Rutorrent 安裝- 多使用者環境

租 seedbox 經常會遇到有共用的情況,

如果兩個使用者同時都要用 rtorrent+ rutorrent 的話要如何設定呢?

下面說明下要如何設定才能多個使用者共用

簡單說下其實就是要有不同的 ~/.rtorrent.rc, /etc/init.d/rtorrent.sh, /var/www/rutorrent 還有要修改 /etc/lighttpd/lighttpd.conf

下面的情況假設已經有了一個使用者 snowwolf725,

我們希望增加另一個使用者 useradmin 的情況

(1) 切換身份成為 root

su root

(2) 複製 .rtorrent.rc 的設定檔並修改

cp /home/snowwolf725/.rtorrent.rc /home/useradmin/.rtorrent.rc

vi /home/useradmin/.rtorrent.rc

主要要修改下面幾項資訊

=====================

# 存放下載檔案的路徑
directory = /home/useradmin/data
# rtorrent 的工作目錄
session = /home/useradmin/session

# 每五分鐘查看特定目錄並下載新的種子
schedule = watch_directory,5,5,load_start=/home/useradmin/watch/*.torrent

# DHT 的 port, 不能跟之前的使用者相同
dht_port = 19001

# scgi 的 socket 檔案要不同,這邊用 rpc2.socket 後面幾個檔案也要一致

scgi_local = /tmp/rpc2.socket
schedule = chmod,0,0,"execute=chmod,777,/tmp/rpc2.socket"
=====================

(2) 複製 /etc/init.d/rtorrent.sh 的設定檔並修改

cp -a /etc/init.d/rtorrent.sh /etc/init.d/rtorrent2.sh

vi /etc/init.d/rtorrent2.sh

把所有 snowwolf725 的字串取代成 useradmin

(3) 複製 /var/www/rutorrent 並修改

cp –a /var/www/rutorrent /var/www/rutorrent2

vi /var/www/rutorrent2/conf/config.php

主要要修改下面幾項資訊

====================

$XMLRPCMountPoint = "/RPC3";

$scgi_host = "unix:///tmp/rpc2.socket";

====================

(4) 修改 /etc/lighttpd/lighttpd.conf

vi /etc/lighttpd/lighttpd.conf

找到

=======================

scgi.server = (
"/RPC2" =>
( "127.0.0.1" =>
(
"socket" => "/tmp/rpc.socket",
"check-local" => "disable",
"disable-time" => 0, # don't disable scgi if connection fails
)
)
)

=======================

改成

=======================

scgi.server = (
"/RPC2" =>
( "127.0.0.1" =>
(
"socket" => "/tmp/rpc.socket",
"check-local" => "disable",
"disable-time" => 0, # don't disable scgi if connection fails
)
),

"/RPC3" =>
( "127.0.0.1" =>
(
"socket" => "/tmp/rpc2.socket",
"check-local" => "disable",
"disable-time" => 0, # don't disable scgi if connection fails
)
)

)

=======================

要注意小括號的數目,及 "/RPC3" 前面有個逗點…

(5) 測試

/etc/init.d/rtorrent.sh start

/etc/init.d/rtorrent2.sh start

/etc/init.d/lighttpd force-reload

開啟瀏覽器分別輸入 http://你的ip/rtorrent/ 和 http://你的ip/rtorrent2/

並且分別上傳不同的種子,

成功的話應該就可以在兩邊看到不同的種子正在下載中了


» rTorrent + Rutorrent 安裝- RUtorrent 部份

接續前一篇安裝 rtorrent 的部份,

接下來安裝 Web UI 的部份

(1) rtorrent 的設定檔(~/.rtorrent.rc)中加入下面這兩行
scgi_local = /tmp/rpc.socket
schedule = chmod,0,0,"execute=chmod,777,/tmp/rpc.socket"

(2) 切換成 root

su root

(3) 修改 /etc/lighttpd/lighttpd.conf

vi /etc/lighttpd/lighttpd.conf

將檔案內容改成下面這樣, 比較要修改的是 IP 和主機名稱

=====================

server.modules = (
"mod_access",
"mod_alias",
"mod_accesslog",
"mod_compress",
"mod_scgi",
"mod_fastcgi"
)
server.document-root = "/var/www/"
server.errorlog = "/var/log/lighttpd/error.log"
index-file.names = ( "index.php", "index.html",
"index.htm", "default.htm" )
accesslog.filename = "/var/log/lighttpd/access.log"
url.access-deny = ( "~", ".inc",".db", ".tpl.php", ".cls.php" )
server.pid-file = "/var/run/lighttpd.pid"
dir-listing.encoding = "utf-8"
server.dir-listing = "enable"
server.username = "www-data"
server.groupname = "www-data"
$HTTP["remoteip"] =~ "127.0.0.1" {
alias.url += (
"/doc/" => "/usr/share/doc/",
"/images/" => "/usr/share/images/"
)
$HTTP["url"] =~ "^/doc/|^/images/" {
dir-listing.activate = "enable"
}
}
$HTTP["host"] == "ks0000.kimsufi.com" {
server.document-root = "/var/www/"
server.errorlog = "/var/log/lighttpd/error.log"
accesslog.filename = "/var/log/lighttpd/access.log"
server.error-handler-404 = "/error-handler.php"
}
include_shell "/usr/share/lighttpd/create-mime.assign.pl"
include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

fastcgi.server = ( ".php" => ((
"bin-path" => "/usr/bin/php-cgi",
"socket" => "/tmp/php.socket"
)))

scgi.server = (
"/RPC2" =>
( "127.0.0.1" =>
(
"socket" => "/tmp/rpc.socket",
"check-local" => "disable",
"disable-time" => 0, # don't disable scgi if connection fails
)
)
)

=====================

(4) 安裝 rutorrent

cd /var/www/

wget http://rutorrent.googlecode.com/files/rutorrent-3.1.tar.gz

tar zxfv rutorrent-3.1.tar.gz

cd rutorrent/

wget http://rutorrent.googlecode.com/files/plugins-3.1.tar.gz
tar zxfv plugins-3.1.tar.gz

(5) 修改 config.php

vi conf/config.php

找到下面兩行

==============

$scgi_port = 5000;
$scgi_host = "127.0.0.1";

==============

改成

==============

$scgi_port = 0;
$scgi_host = "unix:///tmp/rpc.socket";

==============

(6) 設定權限

chown –R www-data:www-data /var/www/rutorrent/

(7) 測試

啟動 rtorrent

/etc/init.d/rtorrent.sh restart

打開瀏覽器輸入 http://你的主機ip/rutorrent/

成功應該會看到下面的畫面

image


» rTorrent + Rutorrent 安裝- Rtorrent 部份

這篇是關於 rtorrent + rutorrent 安裝的教學如果只安裝 rtorrent,

你可以參考下面的文章安裝會比較簡單:

http://snowwolf725.blogspot.com/2009/11/rtorrent.html

舊的 rtorrent + wtorrent 安裝文章過時了,

今天剛好重裝系統所以重寫一篇讓自己下次安裝時可以參考,

本文章安裝方式參考下面這篇文章,

http://filesharefreak.com/2010/02/13/how-to-install-rtorrent-rutorrent-using-socket-ssl-authentication-on-ubuntu-or-debian/

其實只能算是該篇文章的部份中譯,

(1) 先連上 SSH 並以 root 的身份開始進行安裝

su root

(2) 更新 apt 資料庫

apt-get update

(3) 安裝相依套件

apt-get install -y build-essential pkg-config libcurl4-openssl-dev libsigc++-2.0-dev libncurses5-dev lighttpd screen subversion libterm-readline-gnu-perl php5-cgi apache2-utils  php5-curl curl php5-cli

(3) 安裝 libtorrent

cd ~

wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.12.6.tar.gz

tar zxfv libtorrent-0.12.6.tar.gz

cd libtorrent-0.12.6

./configure

make

make install

(4) 安裝 XMLRPC-C

cd ~

svn checkout http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable xmlrpc-c
cd xmlrpc-c/
./configure
make
make install

(5) 安裝 rTorrent:

cd ~


wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.8.6.tar.gz
tar zxfv rtorrent-0.8.6.tar.gz
cd rtorrent-0.8.6
./configure --with-xmlrpc-c
make
make install


(6) 接下來為了讓 rtorrent 能夠開機就自動執行,需要作下面的動作


vim /etc/init.d/rtorrent.sh



將下面的文字寫到 /etc/init.d/rtorrent.sh 將 snowwolf725 改成你自己的使用者 ID



===========================



#!/bin/sh



case "$1" in

  start)


        echo -n "Starting rtorrent"


        su - snowwolf725 -c "screen -A -m -d -S rtorrent /usr/local/bin/rtorrent" &


        echo "."


        ;;


  stop)


        echo -n "Stopping rtorrent"


        ppid=`ps ax | grep "/usr/local/bin/rtorrent" | grep -v grep | grep -v screen | awk '{ print $1 }'`


        kill ${ppid}


        echo "."


        ;;


  restart)



        echo -n "Restarting rtorrent"

        ppid=`ps ax | grep "/usr/local/bin/rtorrent" | grep -v grep | grep -v screen | awk '{ print $1 }'`


        kill ${ppid}


        sleep 1


        su - snowwolf725 -c "screen -A -m -d -S rtorrent /usr/local/bin/rtorrent" &


        echo "."


        ;;


  *)


        echo "Usage: {start|stop|restart}" >&2


        exit 1


        ;;


esac



exit 0



==============================


讓該檔案變成可以執行


chmod +x /etc/init.d/rtorrent.sh


(7)換成一般使用者的身份, 這裡的 snowwolf725 要換成你自己的使用者名稱, 要先更新函式庫 cache


ldconfig


su snowwolf725


cd ~


(8) 設定 rTorrent



vim .rtorrent.rc

依照下面的設定檔改成自己可以用的設定檔#開頭的那幾行是註解可以不用打, vim 有分編輯模式和命令模式,一開始進入是命令模式,按 i 或是 a 可以進入編輯模式打字,按 ESC 可以離開編輯模式回到命令模式,輸入 [:w](不包涵中括號,即冒號和w) 然後按下 Enter 可以寫入檔案,[:q!] 按下Enter 可以離開畫面, 其實檔案可以先打好命名成 .rtorrent.rc 利用 PPutty (不是putty)上傳到主機就可以了(上傳方法是開啟 pputty 並登入然後將檔案拖曳到 pputty,會詢問你帳號密碼傳完預設在家目錄下面)



主要需要修改的是



主機的 IP,DomainName,各個 rtorrent 的目錄



===================================



# 最大最小連接數

min_peers = 50


max_peers = 100


# 最大最小連接數(對於已經完成下載的種子)


min_peers_seed = 10


max_peers_seed = 100


# 最大同時上傳的連接數


max_uploads = 50


# 檔案名稱編碼


encoding_list = UTF-8


# 上下傳 ratio (0表示不限)


download_rate = 0


upload_rate = 0


# 存放下載檔案的路徑


directory = /home/snowwolf725/data


# rtorrent 的工作目錄


session = /home/snowwolf725/session


# 每五分鐘查看特定目錄並下載新的種子


schedule = watch_directory,5,5,load_start=/home/snowwolf725/watch/*.torrent


# Server 的 IP 和 Domain name


ip = 1.2.3.4


ip = ks00000.kimsufi.com


bind = 1.2.3.4


# rtoreent 所使用的 port


port_range = 49152-65535


# 是否使用 udp 的 Tracker


use_udp_trackers = yes


# 連線加密(允許加密連線連入,但預設使用未加密連線)


encryption = allow_incoming,enable_retry,prefer_plaintext


# 依照種子設定決定是否開啟 DHT


dht = auto


# DHT 的 port


dht_port = 19000


# 是否開啟 peer exchange 功能(開啟)


peer_exchange = yes



umask = 0000

on_erase = rm_complete,"execute=rm,-rf,$d.get_base_path="



schedule = low_diskspace,5,5,close_low_diskspace=100M



==============================



(9) 測試 rtorrent



執行 rtorrent



這樣就完成了, 按 Ctrl+q 可以離開 rtorrent



image


» Bash 變數 與 數字 相加

Bash 的 Shell Programming, 於 變數 要 數字相加, 會印出 "變數+數字", ex: $ TT=1 $ TT=$TT+1 $ echo $TT 1+1 變數 與 數字 相加 Bash 要印出 1+1 的值, 要怎麼寫? $ TT=1 $ TT=$(($TT+1)) $ echo $TT 2

七月 25, 2010
» 好站: 快速分享 Website 資訊的工具 - Bounce

雙方在對頁面做溝通, 如果分隔兩地, 通常就是把頁面的圖抓下來, 用小畫家等等的工具來畫圈圈, 除此之外, 有沒有更方便快速的方法? 網站 Bounce 這個網站提供的工具相當方便, 只要把網址輸入進去, 就會自動幫你把網站的圖抓下來, 然後還可以在圖上面畫框框, 寫註解. 網站: Bounce – A fun and easy way to share ideas on a website 範例: Bounce Howto - 照這個連結的 1~4 的步驟做, 就可以分享囉~ (請大家別在此張圖再加其它註解了. XD) 避免上述範例被玩爛, 所以另外抓張圖下來說明 操作方式 Bounce 首頁, 輸入網址, 點選 Grab Screenshot. 於下述網頁抓圖的地方, 去寫自己要的註解後, 再依下述設定方式即可分享. 依圖示設定 Title, Click to title 依圖示設定 What's your name? 依圖示點選 SAVE 就可以取得分享用的網址囉~

» Install Dropbox on Ubuntu 10.04

Dropbox 是凍仁近來在 Ubuntu 上必裝的套件之一,除了檔案備份、與N台電腦資料同步以外,更可以透過它分享資料給網路上另一端的伙伴,最重要的是這樣凍仁就可以快速的在N台電腦上切換,當然也支援 Windows, Mac OSX,也因這樣現在用隨身碟的次數減少許多

由於 BenQ Joybook S52 已經偷偷升上 Ubuntu 10.04 LTS (Lucid Lynx) Daily Build 的關係,之前都得自己下載 source 來編譯,其實只要動個小腦筋就不用自己編啦,只不過官方還沒放上以下這段就是了,噓 :P

Install Dropbox by apt

加入 Dropbox 軟體來源
jonny@lucid:~$ sudo vi /etc/apt/sources.list
...

# Dropbox on Ubuntu 10.04
deb http://linux.dropbox.com/ubuntu lucid main
deb-src http://linux.dropbox.com/ubuntu lucid main

加入 Dropbox 認證金鑰,建議使用 Dropbox 官方金鑰
jonny@lucid:~$ gpg --keyserver pgp.mit.edu --recv-keys 3565780E
jonny@lucid:~$ gpg --keyserver keyserver.ubuntu.com --recv 5044912E
jonny@lucid:~$ gpg --export --armor 5044912E | sudo apt-key add -

安裝 Dropbox
jonny@lucid:~$ sudo apt-get install nautilus-dropbox

Install Dropbox by make

安裝編譯相關套件
jonny@lucid:~$ sudo apt-get install gcc libnautilus-extension-dev libnotify-dev python-docutils

下載 Dropbox sources code
jonny@lucid:~$ cd DirName

jonny@lucid:~/DirName$ wget https://www.dropbox.com/download?dl=packages/nautilus-dropbox-0.6.1.tar.bz2

解壓縮
jonny@lucid:~/DirName$ tar jxvf nautilus-dropbox-0.6.1.tar.bz2

開始編 Dropbox
jonny@lucid:~/DirName$ cd nautilus-dropbox-0.6.1
jonny@lucid:~/DirName/nautilus-dropbox-0.6.1$ sudo ./configure
jonny@lucid:~/DirName/nautilus-dropbox-0.6.1$ sudo make
jonny@lucid:~/DirName/nautilus-dropbox-0.6.1$ sudo make install

Dropbox 加碼了,從原本的 3G 變成了 8G,好讓大家繼續拉下線衝 G 數!當初會想寫 Blog 有部份原因也是怕轉換系統或電腦掛掉時沒文件可看,有了 Dropbox 凍仁就算電腦掛掉也不會那麼心疼了。

延伸閱讀:
Dropbox - 超實用!免費網路文件備份、同步與分享工具!

相關連結:
高登工作室 | Dropbox
Mobile01 | DropBox 免費加到10G, 不用求人小密方

» [Linux Kernel] 簡單 hello world: License and Module 介紹(part 3)

在 Kernel 2.4 或以上版本,在編譯模組完成,要進行 load module 之前,你會發現底下訊息:

# insmod hello-3.o
Warning: loading hello-3.o will taint the kernel: no license
  See http://www.tux.org/lkml/#export-tainted for information about tainted modules

很顯然這訊息是要您在 kernel module 裡面加上版權宣告,例如:”GPL”,”GPL v2″…等來宣告您的 module 並非 open source,利用 MODULE_LICENSE() 巨集來宣告程式 License,同樣的,可以用 MODULE_DESCRIPTION() 來描述此模組或者是 Driver 的功用跟簡介,以及用 MODULE_AUTHOR() 來定義此模組作者,這些巨集都可以在 linux/module.h 裡找到,但是這些並非用於 Kernel 本身,如果大家想看範例程式,可以到 drivers/ 資料夾底下觀看每一個 Driver 程式,底下是簡單 hello world 範例:

#include <linux/kernel.h> /* pr_info所需 include 檔案*/
#include <linux/init.h>
#include <linux/module.h> /* 所有 module 巨集需要檔案*/
#include <linux/version.h>

static int __init hello_init(void)
{
    pr_info("Hello, world appleboy\n");
    pr_info("The process is \"%s\" (pid %i)\n", current->comm, current->pid);
    return 0;
}

static void __exit hello_exit(void)
{
    printk(KERN_INFO "Goodbye\n");
}
MODULE_DESCRIPTION("Hello World !!");/* 此程式介紹與描述*/
MODULE_AUTHOR("Bo-Yi Wu <appleboy.tw AT gmail.com>");/* 此程式作者*/
MODULE_LICENSE("GPL");/* 程式 License*/
module_init(hello_init);
module_exit(hello_exit);

在 linux/module.h 裡頭,可以找到 MODULE_LICENSE 可定義的 License

/*
 * The following license idents are currently accepted as indicating free
 * software modules
 *
 *  "GPL"               [GNU Public License v2 or later]
 *  "GPL v2"            [GNU Public License v2]
 *  "GPL and additional rights" [GNU Public License v2 rights and more]
 *  "Dual BSD/GPL"          [GNU Public License v2
 *                   or BSD license choice]
 *  "Dual MIT/GPL"          [GNU Public License v2
 *                   or MIT license choice]
 *  "Dual MPL/GPL"          [GNU Public License v2
 *                   or Mozilla license choice]
 *
 * The following other idents are available
 *
 *  "Proprietary"           [Non free products]
 *
 * There are dual licensed components, but when running with Linux it is the
 * GPL that is relevant so this is a non issue. Similarly LGPL linked with GPL
 * is a GPL combined work.
 *
 * This exists for several reasons
 * 1.   So modinfo can show license info for users wanting to vet their setup
 *  is free
 * 2.   So the community can ignore bug reports including proprietary modules
 * 3.   So vendors can do likewise based on their own policies
 */

巨集 define:

#define MODULE_LICENSE(_license) MODULE_INFO(license, _license)

/*
 * Author(s), use "Name <email>" or just "Name", for multiple
 * authors use multiple MODULE_AUTHOR() statements/lines.
 */

#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)

/* What your module does. */
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)

Related View

七月 24, 2010
» [高雄美食]道明中學武廟路好吃臭豆腐

IMG_1290
我相信在高雄要吃到好吃的臭豆腐,無非就是豪記臭豆腐,大家可以參考懶喵兒滴窩:『[高雄-三民]豪記臭豆腐王【港式臭豆腐專賣店】 (新址)』,但是這次要來介紹也許在高雄比較少人知道的路邊攤臭豆腐,它位於高雄市武廟路上一間不起眼的臭豆腐,道明中學對面巷子走進去接到武廟路就可以吃到了,營業時間是下午15:30~19:40,時間不長,但是大排長龍阿,想要去吃的,最好不要挑晚餐時間,因為自己那個時間去吃,至少等了半小時。

底下是大份餐點50元,真的還蠻大一份的,至少跟其它地方比起價位,這裡價位跟份量還蠻傳統的
IMG_1288
香香脆脆的,那醬汁也是調配的剛剛好
IMG_1287
50元一份,一個男生吃剛剛好喔,泡菜可以無限暢飲
IMG_1285
IMG_1284
IMG_1282
如果想吃到小時候傳統臭豆腐,一定要來這家品嚐看看的



Related View

七月 23, 2010
» debian squeeze plymouth

這兩天裝了兩台 Debian Squeeze 之後,突然發現 plymouth 已經很簡單的可以使用了。如果你正巧用的是 Intel 的顯示晶片,請聽我娓娓道來…(飛踢)

首先裝 plymouth 跟一些 theme:

sudo aptitude install plymouth plymouth-themes-all plymouth-x11

plymouth-x11 我猜測應該是 plymouth 跟 gdm 接合用的一些程序。

裝好之後,請修改 /etc/default/grub,把下面這個參數加入 splash (原本應該是空的):
GRUB_CMDLINE_LINUX="splash"

接著更新 grub 參數:
sudo update-grub

因為預設的佈景主題很遜,建議你用 solar:
sudo plymouth-set-default-theme solar
sidp update-initramfs -u

做完之後重開機就完成了。雖然最後噴了一些錯誤訊息出來

七月 22, 2010
» 於 Ubuntu 使用雙指操作 Touchpad 捲動頁面(仿滑鼠滾輪效果)

Mac 讓我覺得第一個驚訝的地方, 就是 Touchpad 很好用(兩隻手指放在觸控版上, 同時向上或向下, 頁面就會往上或往下捲動), 不過我還是一直忠愛著 IBM 的小紅點. XD 註: 下述執行環境是 Ubuntu Linux 10.04. 因為有 Mac 的體驗, 於是也很想要讓 Notebook 可以兩隻手指在 Touchpad 上, 來捲動頁面. 非常感謝 小朱 這篇文章: 在 Ubuntu 10.04 啟用 Touchpad 雙指滾輪的功能 , 非常輕易的就解決這個問題. 下述就是照此篇文章內容操作, 把該換的參數換一換, 就可以動囉~ :) 於 HP Compaq NC6000 設定 Touchpad 的雙指滾輪 功能 下述是於 HP Compaq NC6000 的機器上做設定, 設定步驟如下: $ xinput list # 列出裝置, 呈現如下. (找到 TouchPad 那整個的完整名稱, 如下述粗體字) ⎡ Virtual core pointer                      id=2[master pointer  (3)] ⎜   ↳ Virtual core XTEST pointer                id=4[slave  pointer  (2)] ⎜   ↳ SynPS/2 Synaptics TouchPad                 id=10[slave  pointer  (2)] ⎜   ↳ Macintosh mouse button emulation          id=11[slave  pointer  (2)] ⎜   ↳ PS/2 Generic Mouse                        id=12[slave  pointer  (2)] ⎣ Virtual core keyboard                     id=3[master keyboard (2)]     ↳ Virtual core XTEST keyboard               id=5[slave  keyboard (3)]     ↳ Power Button                              id=6[slave  keyboard (3)]     ↳ Video Bus                                 id=7[slave  keyboard (3)]     ↳ Sleep Button                              id=8[slave  keyboard (3)]     ↳ AT Translated Set 2 keyboard              id=9[slave  keyboard (3)] # 設定 Elantech Touchpad 的雙指滾輪 功能, 把上面找到的 TouchPad 整段, 跟下面粗體字的區塊整個換掉, 再執行下述: $ xinput set-int-prop " SynPS/2 Synaptics TouchPad " "Two-Finger Scrolling" 8 1 $ xinput set-int-prop " SynPS/2 Synaptics TouchPad " "Synaptics Two-Finger Scrolling" 8 1 1 $ xinput set-int-prop " SynPS/2 Synaptics TouchPad " "Synaptics Two-Finger Pressure" 32 10 $ xinput set-int-prop " SynPS/2 Synaptics TouchPad " "Synaptics Two-Finger Width" 32 8 到此就已經可以使用囉~ 設定開機自動啟用 Elantech Touchpad 的雙指滾輪 功能 sudo vim /usr/bin/touchpad-setting.sh #!/bin/bash   sleep 5 xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Two-Finger Scrolling" 8 1 xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Scrolling" 8 1 1 xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Pressure" 32 10 xinput set-int-prop "SynPS/2 Synaptics TouchPad" "Synaptics Two-Finger Width" 32 8 sudo chmod +x /usr/bin/touchpad-setting.sh 設定開機啟動: 系統 → 偏好設定 → 始動應用程式 → 初始啟動程式 → 加入 /usr/bin/touchpad-setting.sh 到此即完成, 之後開機就都可以使用囉~ :)

» GNOME javascript runtime introdution

這幾天在寫 COSCUP 議程 Javascript in Linux Desktop 的範例,對於 Seed 跟 GJS 有了些認識。先解釋一下 GNOME javascript runtime。這個時候你先要把『javascript 就是拿來寫 Web Application』的觀念先忘掉,GNOME javascript runtime 可以讓你使用 javascript 撰寫桌面應用程式,一如 pidgin, stardict, 或是 filezilla 這類的軟體(當然 js runtime 現在還沒成熟)。

這個時候問題就跟你挑瀏覽器一樣:我要用哪種 javascript engine? 目前開放源碼的 javascript 不外乎是 Mozilla Firefox 用的 Spidermonkey, Webkit 內建的 JavaScriptCore, 以及 Google Chrome 用的 V8。而 Spidermonkey 跟 JavaScriptCore 在 GNOME 裡面分別被發展成兩套 Javascript runtime: GJSSeed

或許你有點疑惑,怎麼又提 javascript engine 又提 javascript runtime?

因為有了 javascriptp engine 後,內建的函式庫並不足以開發桌面應用程序,而且在桌面應用程式也不一定有 DOM 可以使用。GNOME 為了解決這個問題,發展了一套 framework: GObject introspection (GI),他主要的用處是提供 GNOME 使用 C 語言撰寫的函式庫跟其他 runtime 如 javascript, python, ruby 的橋樑,讓這些語言都可以透過 binding 的方式來使用 GNOME 函式庫。不過 GObject introspection 發展以前,python 跟 ruby 都已經有了跟 gnome 的 binding,只是 GObject introspection 採用更全面的方式來分享這類 dynamic language 作 binding 時都需要的基礎工程。詳細的原理寫出來就太多了,略過 XD

所以基本上 GNOME 開發的函式庫都已經包含了 GIR (GObject Introspection Repository),也就是給動態語言用的 binding 資料。Runtime 如 javascript engine 就可以利用這些資料來製作對 GNOME 函式庫的 binding,所以使用 javascript runtime 也可以撰寫 GTK 程式。

以下是個 GTK hello world in javascript

#!/usr/bin/seed

Gtk = imports.gi.Gtk;
Gtk.init(Seed.argv);

var window = new Gtk.Window();
window.signal.hide.connect(Gtk.main_quit);
window.show_all();
Gtk.main();

如果你有安裝 python-gi, 那也可以透過 gir 來呼叫 gtk (而不是以現有的 python-gtk)。不過 GI 官網上是建議如果已經有了作好的 binding 就用原本的就好。畢竟 GI 的東西沒有針對每個語言 fine tune。


#!/usr/bin/env python
from gi.repository import Gtk
import sys

Gtk.init (sys.argv)

window = Gtk.Window ();
window.connect ("hide", Gtk.main_quit);
window.show_all ();
Gtk.main ();



晚點再來寫 seed 跟 gjs 真的動工時的差異。


Rex’s blah blah blah
chihchun
Rex's blah blah blah
» 在 Google Docs 試算表中用 SQL 語法

之前用 Microsoft Excel 或 OpenOffice Calc,時常會想在寫函式時使用 SQL 語法。因為你在試算表中,最常用得功能之一,就是統計並計算出原始資料工作表 (Sheet) 中的數值。 例如,你可以用 SUMIF, COUNTIF, FILTER 等公式,去統計、過濾查出某一種類別的加總或平均。可是這樣一來,你得寫好一行公式,然後把他拉開複製到每一個儲存格 (Cell) 中,有時參照 (cell reference) 沒寫好或無意中拉錯一格計算範圍,你就算錯所有資料。偏偏這種錯誤很容易在不停重複複製儲存格時發生。 所以你就想,為什麽不讓我直接 SELECT * FROM cells GROUP BY 來拉資料就好?可是這些試算表軟體,都只讓你從其他 Data Source 中拉資料時,才能用 SQL 語法。但是把手上的資料匯入 Microsoft Access 或 OpenOffice Base 又很脫褲子放屁。 最近為了方便分享資訊給其他人,常改用 Google Spreadsheets 編輯。發現 Google Spreadsheets 有一個 Query function,可以讓你在試算表中用類似 SQL 得 Google Visualization API Query Language. Query [...]

A Feedjack powered Planet
A Django site.