2014年7月26日 星期六

小米 2/2s 解決空間不足問題

小米 2/2S 作為小米公司第二支同名手機,整體表現可以說算是非常不錯。
但美中不足的地方是,一直有一個很困擾的問題。

雖然我買的是32GB版的 MI2, 但也沒灌很多 App。 但是很容易在安裝新 App 時出現,"空間不足無法安裝"。 但打開內存設定,明明內部儲存還很大,為什麼會顯示"空間不足"呢?

雖然是32G的 但系統可用空間卻只有 2.x GB


        探就原因,原來是因為雖然有 32GB的空間, 但系統儲存只有 4GB在扣掉一系統佔掉的問題,可能就只有2.x GB 的空間可以安裝 app。 照理來說 2.xGB 來安裝 app, 也可該可以安裝幾百個 app 阿, 但事實是安裝了2, 3十個 App 後, 或使用一段時間後就已經開始出現"空間不足"的問題了。

原來是,每個 App 自已也會產生資料佔據系統空間。 有的 App 甚至會佔用大量的儲存空間。
例如: Google Music 就會佔用數百 MB 的空間, 如果這種 App 再多一點那系統空間肯定是不夠的。所以,開始有類似 App2SD, Link2SD 這類 App出現。 讓使用者可以將 App 搬到 SD 卡上來節省系統空間。 但很遺憾這類方法不適用在 小米2/s 上面。

唯一目前比較有效的方法是,重新分區。 

但上訴方法不是沒有缺點的, 如
        1. 因為要重新分區, 所以手機所有資料會不見, 這對於我來說這是不太可以接受的。
        2. 操作複雜, 自已去看上面連結, 這不用多說連我看了都覺得太複雜了
        3. 要分多大給"系統空間", 分太大以後用不到就浪費在那邊, 分太小過不久就又不夠用

現在我介紹的方法,是我自已研究出來的, 

其實最簡單的方法就是將 App 的資料移動到 SD卡上就行了, 這樣做跟上訴方法的差別

       1.  不用重新分區, 所以資料不會不見。
       2.  可以單獨對一個 App 操作, 其實 2.x GB 的空間是還滿夠用的。 都是一, 二個 App 佔用大量的系統空間,只要把這二個 App 的資料移到 SD卡就可以釋放大量空間。
       3.  比起來簡單很多


以下技術文正式開始

需求:
1. 必需 root 過
2. root browser 或 root expoler
3. 幸運破解器



step 1. 用任何檔案工具在 /sdcard/ 建立 data 目錄,用來儲放要搬過來的 App 資料。 可以用 MIUI 內建的"檔案管理" 來做

setp 2. 將 App 資料搬到 /sdcard/data
  1. 使用 root browser 或 root expoler, 去 /data/data/ 將要搬移的 app 資料復制到 /sdcard/data
    例如: google music 的資料目錄就是 com.google.android.music, 通常前面的圖示會顯示那個 app 的圖標,仔細找一下應該可以找的到。

  2. 將原本的 /data/data 下的資刪除
setp 3 使用幸運破解器, 工具箱的目錄綁定器, 將 /sdcard/data/com.google.android.music 綁定成 /data/data/com.google.android.music。 雖然目錄綁定器可以用瀏覽的方式選擇目錄, 但不知為何無法瀏覽到 /data 下面,所幸用打的也可以。

例如: google mousic 設定就是
資料目錄: /sdcard/data/com.google.android.music/
掛載資料到: /data/data/com.google.android.music



step 4. 再將掛載的開關打開, 就大功告成了
step 5. 測試將 google music 中專輯設成下載到手機, 確認 /sdcard/data/com.google.android.music 大小增加, 確認成功

ps: 記得去應用管理將幸運破解器, 允許"自動啟動"打勾
這樣手機重開時,才會維持目錄綁定的狀態

2013年12月17日 星期二

Debian(Linux)下, 安裝 QT5 搭配 opencv 的流程



原由:

因為, 這學期有修習數位影像處理的課程,需要使用一套影像處理的函式庫, 來實習驗證上課老師 講的內容,以及交作業。 原本,懶惰的我想要以一套 BCB 打天下,在嘗試後發現 十幾年前 BCB 已經無法使用 opencv 2.x 版的函式庫了。雖然,還是可以在 opencv 1.x 下茍延殘喘。 但長遠看來,一直堅守在 BCB 不是長遠之路。無奈下,終於決定澈底拋棄 BCB, 尋找新的解決方案。

有鑑於,網路上的教學大多不完整,細節沒講清楚。常常就因為一個細節不清楚就卡住了,造成時間的浪費。 且網路上的教學,大多是針對 windows 平台的,少有針對 Debian (Linux)的教學。所以才想說,既然已經安裝完成了,就將過程紀錄下來,以供別人以及自已以後參考。

解決方案: Debain + QT5 + OpenCV

雖然小弟我個人,已經不用 windows 很久了。但是也不排除,使用到 windows 平台的可能性。況且作業,還是要交 windows 的版本, 所以開發軟體就選用跨平台,又不用錢的 QT5。

而小弟工作上使用的 OS 都是 Debian, 所以作業系統就是 Debian 了, 其它 linux 系統也是大同小異。

所以這次的組合就是 Debian + QT5 + OpenCV

流程 & 方法

  • 安裝  opencv
    先下載 opencv source code, 可以直接下載 source code tar ball, 也可以直接使用 git, 我是直接使用 git 的方式, 我個人覺得比較方便。
在你要放 opencv source code 的地方

  1. $git clone git://github.com/Itseez/opencv.git
    $cd opencv
    $git checkout 2.4
    $mkdir build
    $cd build 
設定 opencv 環境
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/opt/local ..
          編譯安裝
make && suod make install 

  •  安裝Qt5部份就不說明了,一直按 next 就對了
  •  Qt5 中,使用 opencv 的設定
  1. 將 opencv 的 pkgconfig 加入, pkg-config 的搜尋路徑(很多教學不是這步沒寫, 就是寫的不清不楚)
    在 rc 檔中加入 pkg-config 的路徑
    $vi ~/.bashrc
    最後面加入
    export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
  2. 測試  pgk-config 有沒有設定成功
        $pkg-config opencv --cflags
        $pkg-config opencv --libs

  3. 使用Qt5建立一 console project
  4. 打開專案檔 .pro,加入 header file 及 libs 路徑

    INCLUDEPATH += /usr/local/include/opencv
    LIBS += `pkg-config opencv --cflags --libs`

5. 這樣就設定完成了

在使用 Debian + Qt5 + OpenCV 之前, 我的解決方案是用 debian + java + opencv 有空再來寫一寫










2013年6月19日 星期三

C 語言的 Bit Rotate

寫 C/C++ 的人, 應該都知道 bit shift 怎麼用。 如果想要將一個 Byte 的資料, 往左 shift 5 個位元, 很容易用以下程式碼就可以做到了。

int a = 45; // 45 = 二進位00101101
a = a << 5; // shift 後變成 10100000, 左邊的5個 bit 移出了, 右邊補進5個0
            // a 的值變成 160


但是有時候, 我們並不是要 bit shift, 而要 bit rotate。也就是說從 MSB shift 出去的 bit, 再從 LSM shift 回來。 
但 C/C++ 並沒有提供這種 bit rotate 的 bitwise operaton 操作, 但 bit rotate 在密碼學中常常用到, 因此在網路上找到 bit rotate 寫法, 並稍微修改了一下, 其實還滿簡單的, 以下的 code 就可以做到了。

unsigned char bit_rotate_left(int shift, unsigned char value)
{
   return (value << shift) | (value >> (sizeof(char)*8 - shift));
}



使用 45 (00101101) 向左 rotate 5 個 bit 的運作範例, 向右 rotate 也是如法炮制, 就不在特別說明了。