2011/12/28

gpio 隨手記

gpio_get_value()

=> __gpio_get_value()    定義在位置 kernel/drivers/gpio/gpiolib.c

 

2011/12/27

什麼是system call ?

System Call(系統呼叫)

    1. Def:

作為user program執行時與OS之間的溝通介面,當user program需要OS提供服務時,藉由呼叫system call(伴隨trap to monitor mode)通知OS,OS可依據system call ID查表,啟動service routine執行,得到結果,再傳回給user program,完成服務請求

    1. System Call種類:(P3-8~3-9)
      1. Process Control
      2. File Management
      3. Device Management
      4. Information Maintenance
      5. Communication
    2. system call的參數傳遞

有三種方法:

    1. 法一:利用registers儲存參數
      • 優:快速
      • 缺:不適用於參數多時。
        ∵register數目有限,參數不能太多
    2. 法二:將參數存在memory中的某個表格或Block,同時將此表格的起始位址存在一個register中,將此register傳給OS:
      • 優:適用於參數多時
        ∵ 可存參數較多
      • 缺:速度較慢
        ∵不限制參數的數目與長度
    3. 法三:利用system stack保存參數
      • push(保存)參數
      • OS利用POP取出參數
      • 不限制參數的數目及長度

 

Linux 驅動程式的大架構中,system call 是屬於第一層的架構;本文以一個 Linux 範例程式來展示 user application 與 Linux 驅動程式的關係。

作者/陳俊宏
www.jollen.org

System Call 與驅動程式的關係

System call 是 user application 與 Linux device driver 的溝通介面。

User application 透過呼叫 system call 來「叫起」driver 的 task,user application 要呼叫 system call 必須呼叫 GNU C 所提供的「wrapper function」,每個 system call 都會對應到 driver 內的一個 task,此 task 即是 file_operation 函數指標所指的函數。

 

Linux 驅動程式與 user application 間的溝通方式是透過 system call,實際上 user application 是以 device file 與裝置驅動程式溝通。要達成此目的,驅動程式必須建構在此「file」之上,因此 Linux 驅動程式必須透過 VFS(virtual file system)層來實作 system call。

一個簡單的範例

/dev目錄下的檔案稱為device file,是 user application 用來與硬體裝置溝通的介面。以下是一個簡單的範例:

int main(int argc, char *argv[]){    int devfd;    devfd = open("/dev/debug", O_RDONLY);    if (devfd == -1) { printf("Can't open /dev/debug\n"); return -1;    }    ioctl(devfd, IOCTL_WRITE, num);    close(devfd);    return 0;}

當我們打開/dev/debug檔案時,範例所呼叫open()函數會叫起支援/dev/debug驅動程式的對應函數;同理,我們對/dev/debug執行ioctl()函數時,也會叫起驅動程式的相對應函數。

範例中的open()與ioctl()函數皆是GLIBC裡的函數,「叫起」驅動程式函數的動作涉及user space與kernel space的切換,此動作藉由system call介面來完成。設計一個支援”/dev/debug”裝置的驅動程式則是Linux驅動程式設計師所要負責的工作。

–jollen

2011/12/20

程式碼可以用tag方式: 將vim當作source insight 來使用

Trace source at vim
幾個步驟大綱:

  • Introduce
  • Install
  • Setup
  • Tag Your Codebase
  • Text Editor
  • 進階版

[Introduce ]

•Source Insight
–Good IDE
–Good at Windows platform
–Bad Overload files
•But what if you …
–Non-Windows platform (BSD, Linux, …)
–Command line interface (CLI)
–Dislike brute force search : find / grep

[Tools ]

•vim
•ctags
•taglist

[Install ]

安裝vim:

apt-get install vim

安裝ctags:

apt-get install exuberant-ctags

然後到Taglist網站去下載zip檔

• Download taglist
–Steps:
• 下載後解壓縮該檔案
# unzip taglist_45.zip
Archive: taglist_45.zip
inflating: plugin/taglist.vim
inflating: doc/taglist.txt
• 將plugin及doc複製到家目錄的”.vim”這個目錄裏,如果不存在就建一個新的”.vim”

[setup ]

在vim裏設定功能鍵F7 – 用它來開啟/關閉taglist功能

• 在/etc/vim/vimrc裏加入下面1行

map <f7> :Tlist<CR>

[Tag Your Codebase ]
最後一個步驟,到你的原始程式目錄裏輸入
會把此目錄底下的檔案, 建立tag的資訊
所以如果很多檔案就會很久, 我通常都會縮小範圍

ctags -R -h ".h.c.cpp.java"

開啟vim xxx.c按F7
你就會看見如下圖的結果

按鍵功能:
F7 : 可以 Enable / Disable ctags
Ctrl + w + w: 可以Switch window

左視窗Left side (Tag List):
Enter就會自動跳到相對應的函式或定義

右視窗Right side:
Ctrl + ] : 可以跳到游標所指function的implement 位置
Ctrl + t : 可以返回到剛剛的位置

[進階版 ]

•apt-get install cscope
•Download
–Unzip and put these plugin files to
•~ /.vim/plugin

•Modify /etc/vim/vimrc
” Open and close all the three plugins on the same time
‚nmap <F8> :TrinityToggleAll<CR>
” Open and close the srcexpl.vim separately
‚nmap <F9> :TrinityToggleSourceExplorer<CR>
ƒ
ƒ” Open and close the taglist.vim separately
„nmap <F10> :TrinityToggleTagList<CR>
…” Open and close the NERD_tree.vim separately
†nmap <F11> :TrinityToggleNERDTree<CR>
‡set mouse=nv

[參考]:

為了apt-get修改linux route

由於我的公司網路會檔apt-get的下載與更新
讓我感到非常不方便, 甚至我不想要每次都要插拔網路線

第一種方法:
1: 拔除公司網路線
2: 連上手機當熱點的3G無線網路

  • 這種方法缺點就是要手動拔掉網路, 會造成我samba斷線, 每次都要重連

第二種方法:
1: 修改linux的route table
2: 指令:

  • 看route table
    • route -n
  • 指定網域140.x.x.x 會透過無線wlan0上網, 記住要先搞清gateway IP address
    • route add -net 140.0.0.0 netmask 255.0.0.0 gw xx.xx.xx.xx dev wlan0

2011/12/14

git format-patch 可以限定個數

git format-patch 預設會從某個commit開始
一路依照commit作出n所有patch檔案

但是有可能你只想要產生該commit的patch2,其實很簡單
後面加個-1就可以啦

git format-patch  xxxxxxxxxxxxx  -1 

如果你要該commit往後的兩個commit的patches
就改成-2

git format-patch  xxxxxxxxxxxxx  -2 

2011/12/08

printk() 採用的級別

核心通過 printk() 輸出的訊息具有日誌級別,日誌級別是通過在 printk() 輸出的字符串前加一個帶尖括號的整數來控制的,如 printk(“<6>Hello, world!\n”);。內核中共提供了八種不同的日誌級別,在 linux/kernel.h 中有相應的宏對應。

#define KERN_EMERG “<0>” /* system is unusable */
#define KERN_ALERT “<1>” /* action must be taken immediately */
#define KERN_CRIT “<2>” /* critical conditions */
#define KERN_ERR “<3>” /* error conditions */
#define KERN_WARNING “<4>” /* warning conditions */
#define KERN_NOTICE “<5>” /* normal but significant */
#define KERN_INFO “<6>” /* informational */
#define KERN_DEBUG “<7>” /* debug-level messages */

所以 printk() 可以這樣用:printk(KERN_INFO “Hello, world!\n”);。

未指定日誌級別的 printk() 採用的默認級別是 DEFAULT_MESSAGE_LOGLEVEL,這個宏在 kernel/printk.c 中被定義為整數 4,即對應KERN_WARNING。

在 /proc/sys/kernel/printk 會顯示4個數值(可由 echo 修改),分別表示當前控制台日誌級別、未明確指定日誌級別的默認消息日誌級別、最小(最高)允許設置的控制台日誌級別、引導時默認的日誌級別。當 printk() 中的消息日誌級別小於當前控制台日誌級別時,printk 的信息(要有\n符)就會在控制台上顯示。但無論當前控制台日誌級別是何值,通過 /proc/kmsg (或使用dmesg)總能查看。另外如果配置好並運行了 syslogd 或 klogd,沒有在控制台上顯示的 printk 的信息也會追加到 /var/log/messages.log 中

2011/12/05

android: get orientation data 方向/指北針的感測資料

Data may be used to calculate the orientation as outlined below:

1)
Retrieve sensor data from accelerometer and magnetic field sensor
as required by getRotationMatrix():
This actually involves a number of steps in the Activity class:

1.1)
Obtain a sensor manager.
NOTE: Context.getSystemService needs a Context, typically called
within an Activity’s context.
mSensMan = (SensorManager) getSystemService(SENSOR_SERVICE);

1.2)
Register a sensor event listener for each of the above sensor
types.
mSensMan.registerListener(this,
mSensMan.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI);
mSensMan.registerListener(this,
mSensMan.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);

1.3)
In the listener’s onSensorChanged method copy the data from the
SensorEvent.values.
NOTE: The data must be copied off the event.values as the system is
reusing that array in all SensorEvents, simply assigning won’t work.
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, mGravs, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, mGeoMags, 0, 3);
break;
default:
return;
}
}

2)
Pass the copied sensor data as arrays to
SensorManager.getRotationMatrix() to receive the rotation matrix.
SensorManager.getRotationMatrix(mRotationM, null, mGravs, mGeoMags)

Optionally transform the returned rotation matrix through
SensorManager.remapCoordinateSystem() or multiplying by a
transformation matrix.

3)
Pass the rotation matrix to SensorManager.getOrientation() to
receive the orientation as yaw, pitch and roll expressed in radians.
SensorManager.getOrientation(mRotationM, mOrientation);

原文: http://www.mail-archive.com/android-beginners@googlegroups.com/msg23415.html


其實你可能會說:”有沒有中文的說明呀!!!”
沒錯, 有的!
http://blog.csdn.net/octobershiner/article/details/6641942
而且有寫一個小範例
有空實作一下吧

2011/12/01

pthread simple example: pthread_join



pthread_join 是等待其他的thread結束後才會return
寫的代碼中如果沒有pthread_join主線程會很快結束從而使整個進程結束,從而使創建的兩個線程沒有機會開始執行就結束了,所以沒有輸出。加入pthread_join後,主線程會一直等待直到等待的線程結束自己才結束,使創建的線程有機會執行。

pthread_create 一建立thread之後即開始執行

如果對於創建的線程如果不調用pthread_join,會造成什麼樣的後果
有可能子線程沒被執行完就退出主線程了!

能不能說清楚一下點,為什麼會這樣,如果在線程裡加上控制,應該就不會出現這個問題吧
When a joinable thread terminates, its memory resources (thread
descriptor and stack) are not deallocated until another thread performs
pthread_join on it. Therefore, pthread_join must be called once for
each joinable thread created to avoid memory leaks.
警防內存洩露

程序的主線程結束了, 這個程序的進程就over了。 進程結束時,其他線程就被清理了。也就是執行不倒了。
主要就是防止在子進程結束完之前結束主進程。

所以說,加個pthread_join,既可防止內存洩露,又可以知道子線程的退出狀態,而不是所謂的子線程無法運行下去。要知道線程還有一個狀態:DETACHED,就不需要pthread_join

2011/11/30

android tablet是否支援openCL? 沒有啦...


官網 openCL 的支援產品表:
http://www.khronos.org/conformance/adopters/conformant-products/

android tablet是否支援openCL?
答案是否定的,

  • – 因為透過OpenCL整合CPU與GPU是尚未完全成熟的,
  • – 目前支援為X86系統而非嵌入式系統

來自癮科技:http://chinese.engadget.com/tag/OpenCL/

  • OpenCL是一項提供GPU與CPU協同運算的開放標準
  • 在AMD的規劃中,由於PC業界CPU與GPU整合已成趨勢,加上內建顯示效能逐步提昇,入門等級的GPU在進入HD 6000系列後,已經從獨立GPU的名單中,被下放到處理器整合的GPU內,例如目前市面上的C系列以及E系列APU,就分別使用HD 6200系列以及HD 6300系列的型號
  • A系列APU就是將AMD的主流CPU與主流GPU技術合而為一的產品

2011/11/24

linxux指令: 搜尋某檔名的檔案, 然後刪掉

假設要找的檔名關鍵字是”sensor”的話,
先透過find去找出這些檔案
再透過xargs承接這些檔案, 然後刪掉
find . -name "*sensor*" | xargs rm -rf

2011/11/23

Android APK反編譯 source code

最近解產品的issue時,
發現有時候手邊只有APK檔而無該APK的 source code …
其實在Android應用程式開發,
那個JAVA source是可以透過工具被反譯得到的
如果有興趣可以參考看看

有個網頁將步驟寫得很詳細: Android APK反编译详解(附图)
http://blog.csdn.net/sunboy_2050/article/details/6727581

編譯過程:
JAVA Source (*.java) -> JAVA BYTECODE (*.jar) -> DEX BYTECODE(*.dex)

反譯過程:
DEX BYTECODE(*.dex) ->JAVA BYTECODE (*.jar) -> JAVA Source (*.java)

2011/11/22

wordpress:文章排列依據的最後修改時間

wordpress預設的文章的顯示排列是按照發表的時間的

而有些時候,有些博主需要對以前的文章做一些修改,

這樣需要將修改的文章顯示到第一個位置,就需要按照修改的時間排序。

在index.php檔

方法簡單, 加入一行 query_posts(‘orderby=modified’); 在 if ( have_posts() )之前即可

< ?php query_posts('orderby=modified'); ? >< ?php if ( have_posts() ) : ?>		

2016/08/08更新:

這樣修改有個後遺症, 就是分頁文章會錯誤

不管 http://domain_name/page/2 或到 page/5

都只秀第一頁的資料…..

解決方法就是按照原本方式排序…

或可參考這篇文章解法

2011/11/16

線上追蹤查詢Linux原始碼: Linux Kernel Cross Reference

通常開發人員會透過自己下載的 source code 來追蹤(trace) 程式碼
但是如果身邊沒有source code要怎麼trace code呢

ANS: 只要上網就可以了
http://lxr.oss.org.cn/source/
Linux Kernel Cross Reference

2011/11/15

openCL 隨意看看

由於nvidia一直提到GPU的概念, 也積極推動GPU應該獨立於CPU之外的一個專門處理影像的單元! 現在也逐步看出效果, 而異質多核心概念也成為目前熱門話題

所謂異質多核心處理器就是, 不同架構的處理器要如何彼此合作分配工作達到更好的效率, openCL正式處理這樣異質多核心處理器的軟體架構框架


CPU+GPU Heterogeneous Computing (異質運算) :

使用者透過sw applicasation發出request
若是邏輯性強需要複雜運算的工作, 會交給CPU去處理
若是圖形相關需要大量密度高的單一性質工作, 則交由GPU處理


OpenCL提供了基於任務分割和資料分割的並列計算機制
因此這些多異質處理器之間該如何處理資料變成重要議題, 而openCL就是提供任務分割和資料分割的並列計算機制


越來越多application與處理器支援openCL
支援產品表查詢:
http://www.khronos.org/conformance/adopters/conformant-products/

AMD宣布業界在創新軟件應用上採用OpenCL標準的情況愈趨普遍。為止AMD與軟件公司緊密合作,協助他們優化通用平台上的應用程式,同時透過如AMD Fusion加速處理器(Accelerated Processing Unit,APU)等技術,為這些程式進一步加速。

由於軟件開發人員採納通用的應用程式編寫界面(APIs),讓軟件業界憑藉OpenCL標準固有的跨平台、跨作業系統和跨硬件供應商靈活的特點,令採用OpenCL標準的消費性和商業應用程式迅速發展。

下面是現時支援OpenCL,或在不久的將來加入支援OpenCL的領先應用程式實例:

DVD/媒體播放器

– ArcSoft :TotalMedia Theatre — 一體化影片播放軟件
– Corel :WinDVD — Blu-ray 和 DVD 播放軟件

網真及網絡視像鏡頭應用

– ArcSoft:Webcam Companion —網絡視像鏡頭高清及3D綜合應用
– ViVu:VuRoom — 多方桌面視像會議軟件
– ViVu :VuCast — 大規模視像網絡廣播軟件

影片製作/編輯軟件

– ArcSoft:ShowBiz — 影片編輯軟件
– Corel:Digital Studio — 整合多媒體軟件組合
– Corel:VideoStudio Pro — 高清影片編輯軟件
– Cyberlink:PowerDirector — 影片編輯軟件
– Sony:Vegas Movie Studio HD — 家庭影院高清影片編輯解決方案
– Sony:Vegas Pro — 專業的高清影片、音效及Blu – ray光碟製作解決方案

影片、照片特效、影像及效能

– ArcSoft:Panorama Maker Pro —相片及影片合併與媒體管理器
– eyeon:Fusion — 視覺特效與合成工具
– HP Labs:「每頁都與眾不同(Every Page Is Different)」的光柵圖像處理和千兆圖元實時影像應用,針對HP大尺寸、商業和工業打印解決方案
– Viewdle:Uploader — 照片面部識別軟件
– Viewdle:Video SDK — 影片開發面部識別軟件工具組合

影片轉換軟件

– ArcSoft:MediaConverter — 多媒體檔案轉換器
– Rovi:MainConcept Transcoding Platform — 專業轉碼應用程式
– Rovi:MainConcept H.264/AVC OpenCL — 編碼軟件開發工具組合

工程模擬軟件

– Altair Engineering:HyperWorks RADIOSS — 進行線性和非線性模擬有限元素分析(Finite Element Analysis,FEA)
– Dassault Systemes:產品生命週期管理(PLM)— 模擬及 CAD 軟件
– DEM Solutions:EDEM —分散式單元模型軟件解決方案,用於微粒流動模擬(Particle Flow Simulation)上
– ESI Group:PAM-CRASH 和 PAM-STAMP 2G 解決器 — 標準和生產流程數碼模擬軟件
– MSC Software:MSC Nastran — 通用有限元素(Finite Element)分析解決方案
– OPTIS:RTLab 和 VRLab — 實時光線追蹤軟件解決方案

在Linux中執行.sh時 異常/bin/sh^M: bad interpreter: No such file or directory

在Linux中執行.sh腳本
異常/bin/sh^M: bad interpreter: No such file or directory

分析:
這是不同系統編碼格式引起的:在windows系統中編輯的.sh文件可能有不可見字符,所以在Linux系統下執行會報以上異常信息。

解決:

1)在windows下轉換:
利用一些編輯器如UltraEdit或EditPlus等工具先將腳本編碼轉換,再放到Linux中執行。
轉換方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可

2)也可在Linux中轉換:
首先要確保文件有可執行權限
chmod a+x filename

然後修改文件格式
vi filename

利用如下命令查看文件格式
:set ff 或 :set fileformat

可以看到如下信息
fileformat=dos 或 fileformat=unix

利用如下命令修改文件格式
:set ff=unix 或 :set fileformat=unix

:wq (存檔退出)

最後再執行文件
./filename

2011/11/14

Git Server 簡易架設 - 使用SSH

http://shadowofisaac.blogspot.com/2011/05/git-server-ssh.html
這邊記錄了Git Server 利用SSH協定以及權限的架設流程
此方法較為快速,如果原本的Server上SSH是可以溝通的,那不到20分鐘就可以完成架設過程
但是缺點也是相對的明顯,因為利用了SSH權限,所以在專案的權限管理會有些麻煩,必須使用到Linux user的權限的權限管理。

P.S此篇目前只有可以run的流程而已,以後會新增更多有關git的文章

Server O.S: Ubuntu Server 10.04
Client O.S: Ubuntu Deaktop 10.04

所需條件:
1.當然最少區域網路要通(廢話 XD)
2.Terminal可以以SSH協定溝通


以下為Server端

第一步:
#apt-get install git-core
此為安裝git package,在Ubuntu系統需在最前方加上sudo指令,以super user權限執行

第二步:
#adduser git
新增git user

第三步:
#mkdir /home/git/test.git
在git家目錄下,新增專案資料夾,在此為test.git

第四步:
在test.git底下執行
#git –bare init

init為新增一個程式庫 或是 重新初始一個已經存在的程式庫
bare為指定現在工作的程式庫。


以下為client:

首先為push檔案的流程

第一步:
在要存放project的資料夾下,執行
#git init
新增.git資料夾
client 端所有git相關資料皆會在.git資料夾內,此資料夾為隱藏檔,須以ls -al指令才可看到

第二步:
#git add filename
新增要管理的檔案名稱

第三步:
#git commit -m ‘註解’
增加此專案之註解,註解須在’ ‘內

第四步:
#git remote add origin ssh://git@Server IP Address/home/git/test.git
設定上傳server IP、使用者名稱 以及資料夾位置
在此使用者名稱為git 資料夾位置為 /home/address/git/test.git
Server IP Address則須看自己Server IP
如果輸入錯誤,可以至/home/git/test.git/.git/config做修改

第五步
#git push origin master
將設定管理的檔案上傳,在此會要求輸入密碼,密碼即為當初新增使用者git的密碼

最後使用
#git clone ssh://git@Server IP Address/home/git/test.git
來將上傳完成的檔案下載,已驗證是否成功

P.S client端步驟為第一次新增管理專案才需執行 之後僅需使用git push、git commit、git pull、git add等指令即可操作

2011/11/10

android 燒image: usb read error (71): Protocol error

bootloader.bin sent successfully
waiting for bootloader to initialize
bootloader downloaded successfully
setting device: 2 3
creating partition: BCT
creating partition: PT
creating partition: EBT
creating partition: GP1
creating partition: SOS
creating partition: LNX
creating partition: APP
creating partition: CAC
creating partition: MSC
creating partition: USP

creating partition: UDA
creating partition: GPT
usb read error (71): Protocol error
Formatting partition 2 BCT please wait.. FAILED!
command failure: create failed

處理方法:
因為我是用usb供電
所以可能導致供電不穩定
現在裝上電池就解決了

2011/11/08

因為kernel.org被駭客 的repo fail

如果你也發生類似的問題
我想有可能是因為我想有可能是因為kernel.org被駭客了

android.git.kernel.org[0: 149.20.4.77]: errno=Connection refused
android.git.kernel.org[0: 2001:4f8:1:10:1972:112:1:0]: errno=Network is unreachable
fatal: unable to connect a socket (Network is unreachable)
error: Cannot fetch repo

處理方式:
編輯/home/[user]/bin/repo 檔Repo url:
#REPO_URL=’git://android.git.kernel.org/tools/repo.git’
REPO_URL=’https://github.com/android/tools_repo.git’

2011/11/01

Designing for Performance 筆記

 

 


Avoid Creating Unnecessary Objects

在 Dev Guide 裡還有另外一個重要的觀念:避免產生不必要的物件。這個觀念真的很重要,如果要讓程式的效能更好,不斷在 Main Thread 裡產生物件是 bad idea。原因是 Garbage Collection。

Android 的 Dalvik 虛擬機在初始化時,會建立 Main Thread。Main Thread 負責眾多任務,其中之一是 Garbage Collection,也就是負責做資源回收,把用不到的物件回收再利用。如果我們不斷在 Main Thread 裡產生物件,Main Thread 很可能忙著幫我們收拾垃圾,當 Main Thread 花費太多心思幫我們撿垃圾,處理其它工作的效率就會變差,例如:UI 事件處理。

所以,這告訴我們一個重要的觀念:「不要產生不必要的物件」,難怪 Dev Guide 在講「Designing for Performance」時,把這個觀念放在首位。有些 Class 在設計時,提供了多種 instantiate(實例化)方法,以 android.os.Message 為例,我們可以這樣做:

Message msg = new Message();

也可以這樣做:

Message msg = Message.obtain();

(From Jollen blog): http://www.jollen.org/blog/2011/05/android-leak-3-dont-create-unnecessary-object-in-main-thread.html

 

Prefer Static Over Virtual

If you don’t need to access an object’s fields, make your method static. Invocations will be about 15%-20% faster.

 

 

Avoid Internal Getters/Setters

for (int i = 0; i < this.getCount(); i++)

dumpItems(this.getItem(i))

在for迴圈作this.getCount()這種操作!很浪費!請先宣告個變數,再放到for迴圈裡面

Use Static Final For Constants

the constants go into static field initializers in the dex file it’s good practice to declare constants static final whenever possible.

Use Enhanced For Loop Syntax

static class Foo {
int mSplat;
}
Foo[] mArray = ...

public void zero() {
int sum = 0;
for (int i = 0; i < mArray.length; ++i) {
sum += mArray[i].mSplat;
}
}

public void one() {
int sum = 0;
Foo[] localArray = mArray;
int len​​ = localArray.length;

for (int i = 0; i < len; ++i) {
sum += localArray[i].mSplat;
}
}

public void two() {
int sum = 0;
for (Foo a : mArray) {
sum += a.mSplat;
}
}

zero()最慢,因為JIT並不能優化循環中每次迭代獲取數組長度的消耗。
one()快一點,因為一切都放入局部變量,避免了字段查找。只有在數組長度上提供了性能上的優勢。
two()在設備沒有JIT的時候最快,在有JIT的時候和one()大相徑庭。其使用了Java 1.5 介紹的增強型for循環語法。

總結:默認使用增強性for循環,但是考慮在關鍵性能地方使用傳統for循環來迭代ArrayList。

 

Consider Package Instead of Private Access with Private Inner Classes

考慮下面的類定義:

public class Foo {
private int mValue;

public void run() {
Inner in = new Inner();
mValue = 27;
in.stuff();
}

private void doStuff(int value) {
System.out.println("Value is " + value);
}

private class Inner {
void stuff() {
Foo.this.doStuff(Foo.this.mValue);
}
}
}

這裡需要指出的關鍵是我們定義的內部類可以直接訪問外部類的私有方法和私有實例字段,這是合法的,並且代碼將輸出期盼的值“Value is 27”。

但問題是,即使Java 語言允許內部類可以直接訪問外部類的私有成員,VM(虛擬機)認為從Foo$Inner類直接訪問Foo的私有成員是非法的,因為Foo和Foo$Inner是不同的類。為了彌補這樣的差距,編譯器生成了一對綜合的方法:
/*package*/ static int Foo.access$100(Foo foo) {
return foo.mValue;
}
/*package*/ static void Foo.access$200(Foo foo, int value) {
foo.doStuff(value);
}

當內部類需要訪問外部類的“mValue”或者“doStuff”方法時將調用這些靜態方法。上面的代碼就意味著使用了訪問方法替代了你直接訪問成員字段。之前我們提到了訪問器是如何的比直接訪問慢,所以這完全是一個因為語言習慣(idiom)導致的“不可見”性能損失。
我們可以通過為內部類訪問的字段或者方法定義為包可見而不是私有的。這樣將運行的更快並且會不再生成上面的代碼。 (遺憾的是,這也意味隻字段可以被同一個包中的其他類直接訪問,這樣與將所有字段聲明為private的做法背道而馳,再次提醒,如果你在設計定義公共的API,你應​​該小心考慮使用這種優化)。

Use Floating-Point Judiciously

As a rule of thumb, floating-point is about 2x slower than integer on Android devices.

Know And Use The Libraries

In addition to all the usual reasons to prefer library code over rolling your own

Use Native Methods Judiciously

Native code isn’t necessarily more efficient than Java.

 

#即時編譯(Just-in-time compilation,又稱為動態翻譯,是一種提高程序運行效率的方法。通常,程序有兩種運行方式:靜態編譯與動態直譯。 靜態編譯的程序在執行前全部被翻譯為機器碼,而直譯執行的則是一句一句邊運行邊翻譯。Just-in-time compilatio則混合了這二者,一句一句編譯原始碼,但是會將翻譯過的代碼緩存起來以降低性能損耗。相對於靜態編譯代碼,即時編譯的代碼可以處理延遲綁定並增強安全性。

2011/10/31

佈景系統-wordpress的theme設定在資料庫哪裡呢?

wordpress create出來的資料庫tables, 各有其各自的功能, 而關於網站的相關設定都在wp-options這個table

所以網站設定要使用哪一個theme佈景主題, 請看此wp-options表格

目前的佈景主題是twenty seven, 所以有三個欄位包含theme name
1.template
2.stylesheet
3.current_theme

因此這三個欄位一定都跟背景主體theme有關, 下一篇繼續介紹 …

wordpress 自動安裝之後到底發生什麼事情?


在安裝的時候就開宗明義的告訴使用者, 安裝程式會為使用者自動產生一個wp-config.php的設定檔案! 而使用者只需要step-by-step方式填入資料, wordpress預設安裝系統就能根據這些資訊產生該設定檔


就是需要這些資料:
1.資料庫名稱
2.資料庫使用者帳號
3.資料庫密碼
4.資料庫主機位址
5.資料表前綴(若您想要在單一資料庫內安裝多個 WordPress)

同時, 說明也很實在的告訴使用者:
wordpress安裝系統是根據wp-config-sample.php的格式來產生wp-config.php
所以一但真的安裝失敗無法產生wp-config.php, 你也可以手動修改wp-config-sample.php成wp-config.php
並手動加入設定

自動產生的wp-config.php :
(關於wp-config.php的說明: http://wptw.org/wp-config/)

<?php
/**
* WordPress 基本設定檔。
*
* 本檔案包含以下設定選項: MySQL 設定、資料表前綴、
* 私密金鑰、WordPress 語言設定以及 ABSPATH。如需更多資訊,請
* 前往 {@link http://codex.wordpress.org/Editing_wp-config.php 編輯
* wp-config.php} Codex 頁面。或者向您的空間提供商諮詢關於 MySQL 設定資訊。
*
* 這個檔案用於安裝程式自動生成 wp-config.php 設定檔。
* 您不需要將它用於您的網站,可以手動複製這個檔案,
* 並重新命名為 "wp-config.php",然後輸入相關訊息。
*
* @package WordPress
*/
// ** MySQL 設定 - 您可以從主機服務提供商獲取相關資訊。 ** //
/** WordPress 的資料庫名稱,請更改 "database_name_here" */
define('DB_NAME', 'xxxxxxxx');
/** MySQL 資料庫使用者名稱,請更改 "username_here" */
define('DB_USER', 'xxxxxxxx');
/** MySQL 資料庫密碼,請更改 "password_here" */
define('DB_PASSWORD', 'xxxxxxxx');
/** MySQL 主機位址 */
define('DB_HOST', 'localhost');
/** 建立資料表時預設的文字編碼 */
define('DB_CHARSET', 'utf8');
/** 資料庫對照型態。如果不確定請勿更改。 */
define('DB_COLLATE', 'utf8_unicode_ci');
/**#@+
* 認證唯一金鑰設定。
*
* 將這些更改為不同的唯一字串或符號。
* 您可以使用 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私密金鑰服務} 來自動產生。
* 您可於任何時候修改這些字串讓 Cookies 失效。這將會強制所有使用者必須重新登入。
*
* @since 2.6.0
*/
define('AUTH_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
define('SECURE_AUTH_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
define('LOGGED_IN_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
define('NONCE_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
define('AUTH_SALT', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
define('SECURE_AUTH_SALT', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
define('LOGGED_IN_SALT', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
define('NONCE_SALT', 'xxxxxxxxxxxxxxxxxxxxxxxxxx');
/**#@-*/
/**
* WordPress 資料表前綴。
*
* 若您為每個 WordPress 設定不同的資料表前綴,則可在同個資料庫內安裝多個 WordPress。
* 前綴只能使用半型數字、字母和底線!
*/
$table_prefix = 'wp_';
/**
* WordPress 本地化語言設定。預設為正體中文。
*
* 舉例來說,要使用 WordPress 正體中文介面,只需要填入 'zh_TW'。
* 更改此設定將 WordPress 本地化。對應的 MO 檔案必須放置於 wp-content/languages 目錄下。
* 舉例來說,將 zh_TW.mo 放置於 wp-content/languages 內並將 WPLANG 設定為 'zh_TW' 將
* 使用正體中文介面。
*/
define ('WPLANG', 'zh_TW');
/**
* WordPress 自動儲存間隔
*
* 當您編輯文章時 WordPress 使用 Ajax 技術自動地定時幫您儲存文章草稿。
* 您可更改數值以延長或減少自動儲存的時間間隔。
* 預設儲存間隔為 60 秒。
*/
//define('AUTOSAVE_INTERVAL', 60 ); // 單位:秒
/**
* WordPress 文章版本設定
*
* WordPress 預設會幫您儲存舊版的文章與分頁,以便您之後可以回復到先前的版本。
* 這功能可關閉,或是指定最大版本數量。
* 預設為開啟,若要關閉請將它設為 false。
* 若您想指定指定最大版本數量,請設個整數。
*/
//define('WP_POST_REVISIONS', true );
/**
* 快取
*
* 若 WP_CACHE 值為 true,當它執行 wp-settings.php 時會把 wp-content/advanced-cache.php 一起執行。
* 許多快取外掛會要求您將這個值設為 true。
*/
//define('WP_CACHE', false);
/**
* 啟用多網誌站台與網誌網路功能
*
* 若 WP_ALLOW_MULTISITE 值為 true 可啟用多網誌站台功能。
*/
//define('WP_ALLOW_MULTISITE', false);
/**
* 開發人員用: WordPress 偵錯模式。
*
* 將此設定為 true 將可開啟開發時的通知顯示。
* 強烈建議外掛與佈景主題開發人員使用 WP_DEBUG
* 於他們的開發環境中。
*/
define('WP_DEBUG', false);
/* 設定完成,請儲存檔案。然後開始 Blogging 吧! */
/** WordPress 目錄的絕對路徑。 */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** 設定 WordPress 變數和包含的檔案。 */
require_once(ABSPATH . 'wp-settings.php');

wordpress-3.2.1 的檔案目錄結構樹


進入wordpress目錄之後可以看見的檔案與目錄
wp-admin 為wordpress網站管理後台的目錄
wp-content 是wordpress前台網站顯示出來的目錄
wp-includes 是放重要的API定義, 提供wp-admin/wp-content以及其他檔案使用


用linux指令 tree
看一下有多少檔案與樹狀圖
wordpress-release/3.2.1/wordpress# tree
.
|– index.php
|– license.txt
|– readme.html
|– wp-activate.php
|– wp-admin
| |– admin-ajax.php
| |– admin-footer.php
| |– admin-functions.php
| |– admin-header.php
| |– admin.php
| |– admin-post.php
| |– async-upload.php
| |– comment.php
| |– credits.php
| |– css
| | |– colors-classic.css
| | |– colors-classic.dev.css
| | |– colors-classic-rtl.css
| | |– colors-classic-rtl.dev.css
| | |– colors-fresh.css
| | |– colors-fresh.dev.css
| | |– colors-fresh-rtl.css
| | |– colors-fresh-rtl.dev.css
| | |– dashboard.css
| | |– dashboard.dev.css
| | |– dashboard-rtl.css
| | |– dashboard-rtl.dev.css
| | |– farbtastic.css
| | |– farbtastic-rtl.css
| | |– global.css
| | |– global.dev.css
| | |– global-rtl.css
| | |– global-rtl.dev.css
| | |– ie.css
| | |– ie.dev.css
| | |– ie-rtl.css
| | |– ie-rtl.dev.css
| | |– install.css
| | |– install.dev.css
| | |– install-rtl.css
| | |– install-rtl.dev.css
| | |– login.css
| | |– login.dev.css
| | |– login-rtl.css
| | |– login-rtl.dev.css
| | |– media.css
| | |– media.dev.css
| | |– media-rtl.css
| | |– media-rtl.dev.css
| | |– ms.css
| | |– ms.dev.css
| | |– nav-menu.css
| | |– nav-menu.dev.css
| | |– nav-menu-rtl.css
| | |– nav-menu-rtl.dev.css
| | |– plugin-install.css
| | |– plugin-install.dev.css
| | |– plugin-install-rtl.css
| | |– plugin-install-rtl.dev.css
| | |– press-this.css
| | |– press-this.dev.css
| | |– press-this-rtl.css
| | |– press-this-rtl.dev.css
| | |– theme-editor.css
| | |– theme-editor.dev.css
| | |– theme-editor-rtl.css
| | |– theme-editor-rtl.dev.css
| | |– theme-install.css
| | |– theme-install.dev.css
| | |– theme-install-rtl.css
| | |– theme-install-rtl.dev.css
| | |– widgets.css
| | |– widgets.dev.css
| | |– widgets-rtl.css
| | |– widgets-rtl.dev.css
| | |– wp-admin.css
| | |– wp-admin.dev.css
| | |– wp-admin-rtl.css
| | `– wp-admin-rtl.dev.css
| |– custom-background.php
| |– custom-header.php
| |– edit-comments.php
| |– edit-form-advanced.php
| |– edit-form-comment.php
| |– edit-link-form.php
| |– edit.php
| |– edit-tag-form.php
| |– edit-tags.php
| |– export.php
| |– freedoms.php
| |– gears-manifest.php
| |– images
| | |– align-center.png
| | |– align-left.png
| | |– align-none.png
| | |– align-right.png
| | |– archive-link.png
| | |– arrows-dark.png
| | |– arrows-dark-vs.png
| | |– arrows.png
| | |– arrows-vs.png
| | |– blue-grad.png
| | |– bubble_bg.gif
| | |– bubble_bg-rtl.gif
| | |– button-grad-active.png
| | |– button-grad.png
| | |– comment-grey-bubble.png
| | |– date-button.gif
| | |– ed-bg.gif
| | |– ed-bg-vs.gif
| | |– fade-butt.png
| | |– fav-arrow.gif
| | |– fav-arrow-rtl.gif
| | |– fav.png
| | |– fav-vs.png
| | |– generic.png
| | |– gray-grad.png
| | |– gray-star.png
| | |– icons32.png
| | |– icons32-vs.png
| | |– imgedit-icons.png
| | |– list.png
| | |– loading.gif
| | |– loading-publish.gif
| | |– logo-ghost.png
| | |– logo.gif
| | |– logo-login.png
| | |– marker.png
| | |– mask.png
| | |– media-button-image.gif
| | |– media-button-music.gif
| | |– media-button-other.gif
| | |– media-button-video.gif
| | |– menu-arrow-frame.png
| | |– menu-arrow-frame-rtl.png
| | |– menu-arrows.gif
| | |– menu-bits.gif
| | |– menu-bits-rtl.gif
| | |– menu-bits-rtl-vs.gif
| | |– menu-bits-vs.gif
| | |– menu-dark.gif
| | |– menu-dark-rtl.gif
| | |– menu-dark-rtl-vs.gif
| | |– menu-dark-vs.gif
| | |– menu.png
| | |– menu-shadow.png
| | |– menu-shadow-rtl.png
| | |– menu-vs.png
| | |– no.png
| | |– press-this.png
| | |– required.gif
| | |– resize.gif
| | |– resize-rtl.gif
| | |– screen-options-toggle.gif
| | |– screen-options-toggle-vs.gif
| | |– se.png
| | |– sort.gif
| | |– star.png
| | |– toggle-arrow.gif
| | |– toggle-arrow-rtl.gif
| | |– upload-classic.png
| | |– upload-fresh.png
| | |– wheel.png
| | |– white-grad-active.png
| | |– white-grad.png
| | |– widgets-arrow.gif
| | |– widgets-arrow-vs.gif
| | |– wordpress-logo.png
| | |– wp-logo.png
| | |– wp-logo-vs.png
| | |– wpspin_dark.gif
| | |– wpspin_light.gif
| | |– xit.gif
| | `– yes.png
| |– import.php
| |– includes
| | |– admin.php
| | |– bookmark.php
| | |– class-ftp.php
| | |– class-ftp-pure.php
| | |– class-ftp-sockets.php
| | |– class-pclzip.php
| | |– class-wp-comments-list-table.php
| | |– class-wp-filesystem-base.php
| | |– class-wp-filesystem-direct.php
| | |– class-wp-filesystem-ftpext.php
| | |– class-wp-filesystem-ftpsockets.php
| | |– class-wp-filesystem-ssh2.php
| | |– class-wp-importer.php
| | |– class-wp-links-list-table.php
| | |– class-wp-list-table.php
| | |– class-wp-media-list-table.php
| | |– class-wp-ms-sites-list-table.php
| | |– class-wp-ms-themes-list-table.php
| | |– class-wp-ms-users-list-table.php
| | |– class-wp-plugin-install-list-table.php
| | |– class-wp-plugins-list-table.php
| | |– class-wp-posts-list-table.php
| | |– class-wp-terms-list-table.php
| | |– class-wp-theme-install-list-table.php
| | |– class-wp-themes-list-table.php
| | |– class-wp-upgrader.php
| | |– class-wp-users-list-table.php
| | |– comment.php
| | |– continents-cities.php
| | |– dashboard.php
| | |– deprecated.php
| | |– export.php
| | |– file.php
| | |– image-edit.php
| | |– image.php
| | |– import.php
| | |– internal-linking.php
| | |– list-table.php
| | |– manifest.php
| | |– media.php
| | |– menu.php
| | |– meta-boxes.php
| | |– misc.php
| | |– ms-deprecated.php
| | |– ms.php
| | |– nav-menu.php
| | |– plugin-install.php
| | |– plugin.php
| | |– post.php
| | |– schema.php
| | |– taxonomy.php
| | |– template.php
| | |– theme-install.php
| | |– theme.php
| | |– update-core.php
| | |– update.php
| | |– upgrade.php
| | |– user.php
| | `– widgets.php
| |– index-extra.php
| |– index.php
| |– install-helper.php
| |– install.php
| |– js
| | |– cat.dev.js
| | |– categories.dev.js
| | |– categories.js
| | |– cat.js
| | |– comment.dev.js
| | |– comment.js
| | |– common.dev.js
| | |– common.js
| | |– custom-background.dev.js
| | |– custom-background.js
| | |– custom-fields.dev.js
| | |– custom-fields.js
| | |– dashboard.dev.js
| | |– dashboard.js
| | |– edit-comments.dev.js
| | |– edit-comments.js
| | |– editor.dev.js
| | |– editor.js
| | |– farbtastic.js
| | |– gallery.dev.js
| | |– gallery.js
| | |– image-edit.dev.js
| | |– image-edit.js
| | |– inline-edit-post.dev.js
| | |– inline-edit-post.js
| | |– inline-edit-tax.dev.js
| | |– inline-edit-tax.js
| | |– link.dev.js
| | |– link.js
| | |– media.dev.js
| | |– media.js
| | |– media-upload.dev.js
| | |– media-upload.js
| | |– nav-menu.dev.js
| | |– nav-menu.js
| | |– password-strength-meter.dev.js
| | |– password-strength-meter.js
| | |– plugin-install.dev.js
| | |– plugin-install.js
| | |– postbox.dev.js
| | |– postbox.js
| | |– post.dev.js
| | |– post.js
| | |– revisions-js.php
| | |– set-post-thumbnail.dev.js
| | |– set-post-thumbnail.js
| | |– tags.dev.js
| | |– tags.js
| | |– theme.dev.js
| | |– theme.js
| | |– theme-preview.dev.js
| | |– theme-preview.js
| | |– user-profile.dev.js
| | |– user-profile.js
| | |– utils.dev.js
| | |– utils.js
| | |– widgets.dev.js
| | |– widgets.js
| | |– word-count.dev.js
| | |– word-count.js
| | |– wp-fullscreen.dev.js
| | |– wp-fullscreen.js
| | |– xfn.dev.js
| | `– xfn.js
| |– link-add.php
| |– link-manager.php
| |– link-parse-opml.php
| |– link.php
| |– load-scripts.php
| |– load-styles.php
| |– maint
| | `– repair.php
| |– media-new.php
| |– media.php
| |– media-upload.php
| |– menu-header.php
| |– menu.php
| |– moderation.php
| |– ms-admin.php
| |– ms-delete-site.php
| |– ms-edit.php
| |– ms-options.php
| |– ms-sites.php
| |– ms-themes.php
| |– ms-upgrade-network.php
| |– ms-users.php
| |– my-sites.php
| |– nav-menus.php
| |– network
| | |– admin.php
| | |– edit.php
| | |– index-extra.php
| | |– index.php
| | |– menu.php
| | |– plugin-editor.php
| | |– plugin-install.php
| | |– plugins.php
| | |– profile.php
| | |– settings.php
| | |– setup.php
| | |– site-info.php
| | |– site-new.php
| | |– site-settings.php
| | |– sites.php
| | |– site-themes.php
| | |– site-users.php
| | |– theme-editor.php
| | |– theme-install.php
| | |– themes.php
| | |– update-core.php
| | |– update.php
| | |– upgrade.php
| | |– user-edit.php
| | |– user-new.php
| | `– users.php
| |– network.php
| |– options-discussion.php
| |– options-general.php
| |– options-head.php
| |– options-media.php
| |– options-permalink.php
| |– options.php
| |– options-privacy.php
| |– options-reading.php
| |– options-writing.php
| |– plugin-editor.php
| |– plugin-install.php
| |– plugins.php
| |– post-new.php
| |– post.php
| |– press-this.php
| |– profile.php
| |– revision.php
| |– setup-config.php
| |– theme-editor.php
| |– theme-install.php
| |– themes.php
| |– tools.php
| |– update-core.php
| |– update.php
| |– upgrade-functions.php
| |– upgrade.php
| |– upload.php
| |– user
| | |– admin.php
| | |– index-extra.php
| | |– index.php
| | |– menu.php
| | |– profile.php
| | `– user-edit.php
| |– user-edit.php
| |– user-new.php
| |– users.php
| `– widgets.php
|– wp-app.php
|– wp-atom.php
|– wp-blog-header.php
|– wp-comments-post.php
|– wp-commentsrss2.php
|– wp-config-sample.php
|– wp-content
| |– index.php
| |– languages
| | |– ms-zh_TW.mo
| | |– ms-zh_TW.po
| | |– zh_TW.mo
| | `– zh_TW.po
| |– plugins
| | |– akismet
| | | |– admin.php
| | | |– akismet.css
| | | |– akismet.gif
| | | |– akismet.js
| | | |– akismet.php
| | | |– legacy.php
| | | |– readme.txt
| | | `– widget.php
| | |– hello.php
| | `– index.php
| `– themes
| |– index.php
| |– twentyeleven
| | |– 404.php
| | |– archive.php
| | |– author.php
| | |– category.php
| | |– colors
| | | `– dark.css
| | |– comments.php
| | |– content-aside.php
| | |– content-featured.php
| | |– content-gallery.php
| | |– content-image.php
| | |– content-intro.php
| | |– content-link.php
| | |– content-page.php
| | |– content.php
| | |– content-quote.php
| | |– content-single.php
| | |– content-status.php
| | |– editor-style.css
| | |– editor-style-rtl.css
| | |– footer.php
| | |– functions.php
| | |– header.php
| | |– image.php
| | |– images
| | | |– comment-arrow-bypostauthor-dark.png
| | | |– comment-arrow-bypostauthor-dark-rtl.png
| | | |– comment-arrow-bypostauthor.png
| | | |– comment-arrow-bypostauthor-rtl.png
| | | |– comment-arrow-dark.png
| | | |– comment-arrow-dark-rtl.png
| | | |– comment-arrow.png
| | | |– comment-arrow-rtl.png
| | | |– comment-bubble-dark.png
| | | |– comment-bubble-dark-rtl.png
| | | |– comment-bubble.png
| | | |– comment-bubble-rtl.png
| | | |– headers
| | | | |– chessboard.jpg
| | | | |– chessboard-thumbnail.jpg
| | | | |– hanoi.jpg
| | | | |– hanoi-thumbnail.jpg
| | | | |– lanterns.jpg
| | | | |– lanterns-thumbnail.jpg
| | | | |– pine-cone.jpg
| | | | |– pine-cone-thumbnail.jpg
| | | | |– shore.jpg
| | | | |– shore-thumbnail.jpg
| | | | |– trolley.jpg
| | | | |– trolley-thumbnail.jpg
| | | | |– wheel.jpg
| | | | |– wheel-thumbnail.jpg
| | | | |– willow.jpg
| | | | `– willow-thumbnail.jpg
| | | |– search.png
| | | `– wordpress.png
| | |– inc
| | | |– images
| | | | |– content.png
| | | | |– content-sidebar.png
| | | | |– dark.png
| | | | |– light.png
| | | | `– sidebar-content.png
| | | |– theme-options.css
| | | |– theme-options.js
| | | |– theme-options.php
| | | `– widgets.php
| | |– index.php
| | |– js
| | | |– html5.js
| | | `– showcase.js
| | |– languages
| | | |– twentyeleven.pot
| | | |– zh_TW.mo
| | | `– zh_TW.po
| | |– license.txt
| | |– page.php
| | |– readme.txt
| | |– rtl.css
| | |– screenshot.png
| | |– searchform.php
| | |– search.php
| | |– showcase.php
| | |– sidebar-footer.php
| | |– sidebar-page.php
| | |– sidebar.php
| | |– single.php
| | |– style.css
| | `– tag.php
| `– twentyten
| |– 404.php
| |– archive.php
| |– attachment.php
| |– author.php
| |– category.php
| |– comments.php
| |– editor-style.css
| |– editor-style-rtl.css
| |– footer.php
| |– functions.php
| |– header.php
| |– images
| | |– headers
| | | |– berries.jpg
| | | |– berries-thumbnail.jpg
| | | |– cherryblossoms.jpg
| | | |– cherryblossoms-thumbnail.jpg
| | | |– concave.jpg
| | | |– concave-thumbnail.jpg
| | | |– fern.jpg
| | | |– fern-thumbnail.jpg
| | | |– forestfloor.jpg
| | | |– forestfloor-thumbnail.jpg
| | | |– inkwell.jpg
| | | |– inkwell-thumbnail.jpg
| | | |– path.jpg
| | | |– path-thumbnail.jpg
| | | |– sunset.jpg
| | | `– sunset-thumbnail.jpg
| | `– wordpress.png
| |– index.php
| |– languages
| | |– twentyten.pot
| | |– zh_TW.mo
| | `– zh_TW.po
| |– license.txt
| |– loop-attachment.php
| |– loop-page.php
| |– loop.php
| |– loop-single.php
| |– onecolumn-page.php
| |– page.php
| |– rtl.css
| |– screenshot.png
| |– search.php
| |– sidebar-footer.php
| |– sidebar.php
| |– single.php
| |– style.css
| `– tag.php
|– wp-cron.php
|– wp-feed.php
|– wp-includes
| |– admin-bar.php
| |– atomlib.php
| |– author-template.php
| |– bookmark.php
| |– bookmark-template.php
| |– cache.php
| |– canonical.php
| |– capabilities.php
| |– category.php
| |– category-template.php
| |– class-feed.php
| |– class-http.php
| |– class-IXR.php
| |– class-json.php
| |– class-oembed.php
| |– class-phpass.php
| |– class-phpmailer.php
| |– class-pop3.php
| |– class-simplepie.php
| |– class-smtp.php
| |– class-snoopy.php
| |– class-wp-admin-bar.php
| |– class-wp-ajax-response.php
| |– class.wp-dependencies.php
| |– class-wp-error.php
| |– class-wp-http-ixr-client.php
| |– class-wp.php
| |– class.wp-scripts.php
| |– class.wp-styles.php
| |– class-wp-walker.php
| |– class-wp-xmlrpc-server.php
| |– comment.php
| |– comment-template.php
| |– compat.php
| |– cron.php
| |– css
| | |– admin-bar.css
| | |– admin-bar.dev.css
| | |– admin-bar-rtl.css
| | |– admin-bar-rtl.dev.css
| | |– jquery-ui-dialog.css
| | `– jquery-ui-dialog.dev.css
| |– default-constants.php
| |– default-filters.php
| |– default-widgets.php
| |– deprecated.php
| |– feed-atom-comments.php
| |– feed-atom.php
| |– feed.php
| |– feed-rdf.php
| |– feed-rss2-comments.php
| |– feed-rss2.php
| |– feed-rss.php
| |– formatting.php
| |– functions.php
| |– functions.wp-scripts.php
| |– functions.wp-styles.php
| |– general-template.php
| |– http.php
| |– images
| | |– admin-bar-sprite.png
| | |– admin-bar-sprite-rtl.png
| | |– blank.gif
| | |– crystal
| | | |– archive.png
| | | |– audio.png
| | | |– code.png
| | | |– default.png
| | | |– document.png
| | | |– interactive.png
| | | |– license.txt
| | | |– spreadsheet.png
| | | |– text.png
| | | `– video.png
| | |– rss.png
| | |– smilies
| | | |– icon_arrow.gif
| | | |– icon_biggrin.gif
| | | |– icon_confused.gif
| | | |– icon_cool.gif
| | | |– icon_cry.gif
| | | |– icon_eek.gif
| | | |– icon_evil.gif
| | | |– icon_exclaim.gif
| | | |– icon_idea.gif
| | | |– icon_lol.gif
| | | |– icon_mad.gif
| | | |– icon_mrgreen.gif
| | | |– icon_neutral.gif
| | | |– icon_question.gif
| | | |– icon_razz.gif
| | | |– icon_redface.gif
| | | |– icon_rolleyes.gif
| | | |– icon_sad.gif
| | | |– icon_smile.gif
| | | |– icon_surprised.gif
| | | |– icon_twisted.gif
| | | `– icon_wink.gif
| | |– upload.png
| | |– wlw
| | | |– wp-comments.png
| | | |– wp-icon.png
| | | `– wp-watermark.png
| | `– wpmini-blue.png
| |– js
| | |– admin-bar.dev.js
| | |– admin-bar.js
| | |– autosave.dev.js
| | |– autosave.js
| | |– colorpicker.dev.js
| | |– colorpicker.js
| | |– comment-reply.dev.js
| | |– comment-reply.js
| | |– crop
| | | |– cropper.css
| | | |– cropper.js
| | | |– marqueeHoriz.gif
| | | `– marqueeVert.gif
| | |– hoverIntent.dev.js
| | |– hoverIntent.js
| | |– imgareaselect
| | | |– border-anim-h.gif
| | | |– border-anim-v.gif
| | | |– imgareaselect.css
| | | |– jquery.imgareaselect.dev.js
| | | `– jquery.imgareaselect.js
| | |– jcrop
| | | |– Jcrop.gif
| | | |– jquery.Jcrop.css
| | | |– jquery.Jcrop.dev.js
| | | `– jquery.Jcrop.js
| | |– jquery
| | | |– jquery.color.dev.js
| | | |– jquery.color.js
| | | |– jquery.form.dev.js
| | | |– jquery.form.js
| | | |– jquery.hotkeys.dev.js
| | | |– jquery.hotkeys.js
| | | |– jquery.js
| | | |– jquery.query.js
| | | |– jquery.schedule.js
| | | |– jquery.serialize-object.js
| | | |– jquery.table-hotkeys.dev.js
| | | |– jquery.table-hotkeys.js
| | | |– suggest.dev.js
| | | |– suggest.js
| | | |– ui.button.js
| | | |– ui.core.js
| | | |– ui.dialog.js
| | | |– ui.draggable.js
| | | |– ui.droppable.js
| | | |– ui.mouse.js
| | | |– ui.position.js
| | | |– ui.resizable.js
| | | |– ui.selectable.js
| | | |– ui.sortable.js
| | | |– ui.tabs.js
| | | `– ui.widget.js
| | |– json2.dev.js
| | |– json2.js
| | |– l10n.dev.js
| | |– l10n.js
| | |– prototype.js
| | |– quicktags.dev.js
| | |– quicktags.js
| | |– scriptaculous
| | | |– builder.js
| | | |– controls.js
| | | |– dragdrop.js
| | | |– effects.js
| | | |– MIT-LICENSE
| | | |– scriptaculous.js
| | | |– slider.js
| | | |– sound.js
| | | |– unittest.js
| | | `– wp-scriptaculous.js
| | |– swfobject.js
| | |– swfupload
| | | |– handlers.dev.js
| | | |– handlers.js
| | | |– license.txt
| | | |– plugins
| | | | |– swfupload.cookies.js
| | | | |– swfupload.queue.js
| | | | |– swfupload.speed.js
| | | | `– swfupload.swfobject.js
| | | |– swfupload-all.js
| | | |– swfupload.js
| | | `– swfupload.swf
| | |– thickbox
| | | |– loadingAnimation.gif
| | | |– macFFBgHack.png
| | | |– tb-close.png
| | | |– thickbox.css
| | | `– thickbox.js
| | |– tinymce
| | | |– langs
| | | | |– wp-langs-en.js
| | | | `– wp-langs.php
| | | |– license.txt
| | | |– plugins
| | | | |– directionality
| | | | | `– editor_plugin.js
| | | | |– fullscreen
| | | | | |– editor_plugin.js
| | | | | `– fullscreen.htm
| | | | |– inlinepopups
| | | | | |– editor_plugin.js
| | | | | |– skins
| | | | | | `– clearlooks2
| | | | | | |– img
| | | | | | | |– alert.gif
| | | | | | | |– button.gif
| | | | | | | |– buttons.gif
| | | | | | | |– confirm.gif
| | | | | | | |– corners.gif
| | | | | | | |– drag.gif
| | | | | | | |– horizontal.gif
| | | | | | | `– vertical.gif
| | | | | | `– window.css
| | | | | `– template.htm
| | | | |– media
| | | | | |– css
| | | | | | `– media.css
| | | | | |– editor_plugin.js
| | | | | |– js
| | | | | | |– embed.js
| | | | | | `– media.js
| | | | | |– media.htm
| | | | | `– moxieplayer.swf
| | | | |– paste
| | | | | |– blank.htm
| | | | | |– editor_plugin.js
| | | | | |– js
| | | | | | |– pastetext.js
| | | | | | `– pasteword.js
| | | | | |– pastetext.htm
| | | | | `– pasteword.htm
| | | | |– spellchecker
| | | | | |– changelog.txt
| | | | | |– classes
| | | | | | |– EnchantSpell.php
| | | | | | |– GoogleSpell.php
| | | | | | |– PSpell.php
| | | | | | |– PSpellShell.php
| | | | | | |– SpellChecker.php
| | | | | | `– utils
| | | | | | |– JSON.php
| | | | | | `– Logger.php
| | | | | |– config.php
| | | | | |– css
| | | | | | `– content.css
| | | | | |– editor_plugin.js
| | | | | |– img
| | | | | | `– wline.gif
| | | | | |– includes
| | | | | | `– general.php
| | | | | `– rpc.php
| | | | |– tabfocus
| | | | | `– editor_plugin.js
| | | | |– wordpress
| | | | | |– css
| | | | | | `– content.css
| | | | | |– editor_plugin.dev.js
| | | | | |– editor_plugin.js
| | | | | `– img
| | | | | |– audio.gif
| | | | | |– embedded.png
| | | | | |– image.gif
| | | | | |– media.gif
| | | | | |– more_bug.gif
| | | | | |– page_bug.gif
| | | | | |– page.gif
| | | | | |– trans.gif
| | | | | `– video.gif
| | | | |– wpdialogs
| | | | | |– editor_plugin.dev.js
| | | | | |– editor_plugin.js
| | | | | `– js
| | | | | |– popup.dev.js
| | | | | |– popup.js
| | | | | |– wpdialog.dev.js
| | | | | `– wpdialog.js
| | | | |– wpeditimage
| | | | | |– css
| | | | | | |– editimage.css
| | | | | | `– editimage-rtl.css
| | | | | |– editimage.html
| | | | | |– editor_plugin.dev.js
| | | | | |– editor_plugin.js
| | | | | |– img
| | | | | | |– delete.png
| | | | | | `– image.png
| | | | | `– js
| | | | | |– editimage.dev.js
| | | | | `– editimage.js
| | | | |– wpfullscreen
| | | | | |– css
| | | | | | `– wp-fullscreen.css
| | | | | |– editor_plugin.dev.js
| | | | | `– editor_plugin.js
| | | | |– wpgallery
| | | | | |– editor_plugin.dev.js
| | | | | |– editor_plugin.js
| | | | | `– img
| | | | | |– delete.png
| | | | | |– edit.png
| | | | | |– gallery.png
| | | | | `– t.gif
| | | | `– wplink
| | | | |– css
| | | | | |– wplink.css
| | | | | |– wplink.dev.css
| | | | | |– wplink-rtl.css
| | | | | `– wplink-rtl.dev.css
| | | | |– editor_plugin.dev.js
| | | | |– editor_plugin.js
| | | | |– img
| | | | | `– toggle-arrow.png
| | | | `– js
| | | | |– wplink.dev.js
| | | | `– wplink.js
| | | |– themes
| | | | `– advanced
| | | | |– about.htm
| | | | |– anchor.htm
| | | | |– charmap.htm
| | | | |– color_picker.htm
| | | | |– editor_template.js
| | | | |– image.htm
| | | | |– img
| | | | | |– colorpicker.jpg
| | | | | |– flash.gif
| | | | | |– gotmoxie.png
| | | | | |– icons.gif
| | | | | |– iframe.gif
| | | | | |– pagebreak.gif
| | | | | |– quicktime.gif
| | | | | |– realmedia.gif
| | | | | |– shockwave.gif
| | | | | |– trans.gif
| | | | | |– video.gif
| | | | | |– windowsmedia.gif
| | | | | `– wpicons.png
| | | | |– js
| | | | | |– about.js
| | | | | |– anchor.js
| | | | | |– charmap.js
| | | | | |– color_picker.js
| | | | | |– image.js
| | | | | |– link.js
| | | | | `– source_editor.js
| | | | |– link.htm
| | | | |– shortcuts.htm
| | | | |– skins
| | | | | |– default
| | | | | | |– content.css
| | | | | | |– dialog.css
| | | | | | |– img
| | | | | | | |– buttons.png
| | | | | | | |– items.gif
| | | | | | | |– menu_arrow.gif
| | | | | | | |– menu_check.gif
| | | | | | | |– progress.gif
| | | | | | | `– tabs.gif
| | | | | | `– ui.css
| | | | | |– highcontrast
| | | | | | |– content.css
| | | | | | |– dialog.css
| | | | | | `– ui.css
| | | | | |– o2k7
| | | | | | |– content.css
| | | | | | |– dialog.css
| | | | | | |– img
| | | | | | | |– button_bg_black.png
| | | | | | | |– button_bg.png
| | | | | | | `– button_bg_silver.png
| | | | | | |– ui_black.css
| | | | | | |– ui.css
| | | | | | `– ui_silver.css
| | | | | `– wp_theme
| | | | | |– content.css
| | | | | |– dialog.css
| | | | | |– img
| | | | | | |– butt2.png
| | | | | | |– button_bg.png
| | | | | | |– down_arrow.gif
| | | | | | |– fade-butt.png
| | | | | | |– separator.gif
| | | | | | `– tabs.gif
| | | | | `– ui.css
| | | | `– source_editor.htm
| | | |– tiny_mce.js
| | | |– tiny_mce_popup.js
| | | |– utils
| | | | |– editable_selects.js
| | | | |– form_utils.js
| | | | |– mctabs.js
| | | | `– validate.js
| | | |– wp-mce-help.php
| | | |– wp-tinymce.js.gz
| | | `– wp-tinymce.php
| | |– tw-sack.dev.js
| | |– tw-sack.js
| | |– wp-ajax-response.dev.js
| | |– wp-ajax-response.js
| | |– wp-list-revisions.dev.js
| | |– wp-list-revisions.js
| | |– wp-lists.dev.js
| | `– wp-lists.js
| |– kses.php
| |– l10n.php
| |– link-template.php
| |– load.php
| |– locale.php
| |– media.php
| |– meta.php
| |– ms-blogs.php
| |– ms-default-constants.php
| |– ms-default-filters.php
| |– ms-deprecated.php
| |– ms-files.php
| |– ms-functions.php
| |– ms-load.php
| |– ms-settings.php
| |– nav-menu.php
| |– nav-menu-template.php
| |– pluggable-deprecated.php
| |– pluggable.php
| |– plugin.php
| |– pomo
| | |– entry.php
| | |– mo.php
| | |– po.php
| | |– streams.php
| | `– translations.php
| |– post.php
| |– post-template.php
| |– post-thumbnail-template.php
| |– query.php
| |– registration-functions.php
| |– registration.php
| |– rewrite.php
| |– rss-functions.php
| |– rss.php
| |– script-loader.php
| |– shortcodes.php
| |– taxonomy.php
| |– template-loader.php
| |– Text
| | |– Diff
| | | |– Engine
| | | | |– native.php
| | | | |– shell.php
| | | | |– string.php
| | | | `– xdiff.php
| | | |– Renderer
| | | | `– inline.php
| | | `– Renderer.php
| | `– Diff.php
| |– theme-compat
| | |– comments.php
| | |– comments-popup.php
| | |– footer.php
| | |– header.php
| | `– sidebar.php
| |– theme.php
| |– update.php
| |– user.php
| |– vars.php
| |– version.php
| |– widgets.php
| |– wlwmanifest.xml
| |– wp-db.php
| `– wp-diff.php
|– wp-links-opml.php
|– wp-load.php
|– wp-login.php
|– wp-mail.php
|– wp-pass.php
|– wp-rdf.php
|– wp-register.php
|– wp-rss2.php
|– wp-rss.php
|– wp-settings.php
|– wp-signup.php
|– wp-trackback.php
`– xmlrpc.php

97 directories, 956 files

2011/10/28

INSTALL_FAILED_MISSING_SHARED_LIBRARY : error 處理

安装apk發生錯誤的情形:
-adb install ***.apk
-205 KB/s (2783356 bytes in 13.248s)
pkg: ***.apk
-Failure [INSTALL_FAILED_MISSING_SHARED_LIBRARY]:

另一方面看 logcat訊息:
Package com.*** requires unavailable shared library com.xxx.xxxxx

處理方式:
檢查設定lib的xml檔如下:
可能是com.xxxxxxxx打錯字了也有可能

2011/10/27

error: undefined reference to 'android::ProcessState::self()'

一個典型的android build error, 因為系統可能漏掉該函式庫
只需要在Android.mk裡面加入 shared binder lib entry

但是要加入哪個函式庫呢?
其實是有步驟可以查詢的, 以 error: undefined reference to ‘android::ProcessState::self()’ 為例

第一步:
查詢error message關鍵字, 並找到定義的檔案

第二步:
依照該定義的檔案名稱, 去找函式庫名稱

“LOCAL_SHARED_LIBRARIES += libbinder”

2011/10/17

在系統註冊表 修改SourceInsight的serialNumber


最進安裝完SourceInsight新版之後, 出現an invalid source insight serial number was detected, 而我重新安裝好幾次但是也沒有解決, 於是猜想應該是系統內部註冊表沒有更改, 所以不論重新安裝幾次都會出現錯誤訊息

在系統註冊表 修改SourceInsight的serialNumber

第一步: 在執行輸入: RegEdt32

第二歩: 找到相關位置進行修改
\HKEY_CURRENT_USER\Software\Source Dynamics\Source Insight