2013年12月24日 星期二

[House]土地使用分區常見的住宅區、商業區、工業區

土地使用分區有:住宅區、商業區、工業區、行政區、文教區、倉庫區、風景區、農業區、保護區、公共設施用地

住宅區有住一、住二、住三、住四
商業區有商一、商二、商三、商四
工業區有工二、工三

[使用性質管制]
住宅區可再細分為四種住宅使用種別,以第一種住宅區之實質居住水準最高,依序遞減至第四種住宅區,且於細部計畫中住二另劃設有住二之ㄧ、住二之二,住三有住三之ㄧ、住三之二,住四有住四之一
商業區依商業階層劃分為四種商業區
工業區則依公害污染程度劃分為二種工業區,工二及工三

[面積管制 - 建築基地之最小寬深度]
住一>住二>住三>住四
商業區之基地寬度照規定之最小寬度,而深度按商一至商四分別規定
工業區之最小基地寬深度則照工業分區類別遞減規定

[建築高度管制 - 度與自該部分起量至面前道路境界線之水平距離之比]
住宅區建築高度比由住一至住四作遞減規定
商業區、工業分別作統一規定

[容積管制 - 建築總樓地板面積與基地面積之比率]
住一容積率60%,住二120%,住三225%,住四300%;
商業區按商一至商四遞增規定
工業區同商業區

[退縮建築管制 - 前後側院深度、後院深度比、鄰棟間隔、建築長度]
住宅區中住一至住四前院後院深度按遞減方式規定,側面設有門窗者須留設側院
商業區未規定前院,後院深度依商一至商四遞減
工業區前院作統一規定,後院按工二至工三遞減,側面設有門窗者須留設側院

[停車(裝卸)空間管制 ]
商業區、倉庫區及工業大樓使用上,由於裝卸貨物需求,而設裝卸場,避免
本身使用所產生之交通問題影響至鄰近周圍及道路

[景觀管制]
廣告物設置在各使用分區中規定廣告物之設置許可及廣告物大小、位置、形
式等。地形樹木保護僅在風景區、農業區及保護區內規定不得變更地形及砍伐樹
木。騎樓及無遮簷人行道除配合原有留設外,並指示以道路寬度規定留設騎樓及
無遮簷人行道。

[獎勵措施]
鼓勵建築基地留設空間作公共開放空間,而給予建築容積率、高度放關之規定

reference:
http://140.134.4.2/~up/term%20paper/951/9621.pdf


2013年12月17日 星期二

[Hardware][FM]如何量測FM的sensitivity 及 layout注意事項

拿一台FM generator打出一個固定power1K tone
從耳機孔的GND進去,然後LR聲道分別接到音頻分析儀上量SNR
開始調降generatorpower,然後音頻分析儀那邊的sinar值不可低於26
當降到26的時候再去看power是多少

這個值就是sensitivity



LR聲道中間要用地線隔開 

建議GND的長度不要大於15cm 

LVP9是用6層板的141
141的意思是,1+4+1=6,貫孔方式是一二層版,二到五層,五六層板,這樣去貫孔

[Hardware] 長度單位 mil

常常在電路圖上看到mil這個字

mil : 千分之一英寸

1 inch = 1000 mil = 2.54 cm = 25.4 mm

1 mm = 0.03937inch = 39.37mil

長度換算
https://www.ied.edu.hk/has/phys/units/convert/lengthi.htm

[Hardware]耦合/旁路 電容

旁路電容和去耦電容的區別
    去耦:去除在器件切換時從高頻器件進入到配電網絡中的RF能量。去耦電容還可以為器件     供局部化的DC電壓源,它在減少跨板浪湧電流方面特別有用。

旁路:從元件或電纜中轉移出不想要的共模RF能量。這主要是通過產生AC旁路消除無意的能量進入敏感的部分,另外還可以提供基帶濾波功能(帶寬受限)。

我們經常可以看到,在電源和地之間連接著去耦電容,它有三個方面的作用:一是作為本集成電路的蓄能電容;二是濾除該器件產生的高頻噪聲,切斷其通過供電回路進行傳播的通路;三是防止電源攜帶的噪聲對電路構成干擾。



在電子電路中,去耦電容和旁路電容都是起到抗干擾的作用,電容所處的位置不同,稱呼就不一樣了。對於同一個電路來說,旁路(bypass)電容是把輸入信號中的高頻噪聲作為濾除對象,把前級攜帶的高頻雜波濾除,而去耦(decoupling)電容也稱退耦電容,是把輸出信號的干擾作為濾除對象

reference:

2013年12月12日 星期四

[Android] getprop/setprop/watchprops

getprop是去獲取android系統屬性

#getprop
[fmradio.driver.enable]: [1]
[persist.backgrounddata.enable]: [true]
.
.
.
前面代表key,後面代表value


所以如果要去更改property的值,如下
#setprop fmradio.driver.enable 0
但不是每個property都是可以修改的
例如ro.secure

watchprops則是會去監聽系統屬性的變化
一旦發生變化就會秀出來
例如按下power key去喚醒系統時,會出現如下
#watchprops
1357085171 sys.ipowin.done = '1'
1357085171 ril.keyguard.emergency = 'true'
1357085171 sys.settings_system_version = '4'


一般如果要利用property去做一些事情,首先要
import android.os.SystemProperties;
然後利用
String ProjectName = SystemProperties.get("ro.build.product", "");
去得到

2013年12月9日 星期一

[House]買房要注意的事

「買房要注意的事」
01、房仲要找直營不要加盟
02、服務費直營收1%,加盟2%
03、看業務員到這區域多久
04、普專店高薪低獎直營店,高專店低薪高獎加盟店
05、上內政部地政司全球資訊網查業務員是否合格
07、仲介公司要加入當地同業公會
一般約:各家房仲皆可賣,議價空間大,專任約。簽約要注意和頌
08、拿出斡旋金有可能成為A級客戶
09、apple case有時來不及po上網
10、不只看格局和採光,還看傾斜和龜裂,和動線
11、廣告中不應出現[使用面]字樣,注意違建
12、管理費有無欠繳
13、問業務員帶看過的房子別人買的成交價
14、觀察同區域的預售指標個案人潮,10~12,15~17點會最多人
15、去地證事務所調謄本,一份電子檔20元
16、有沒有土地權狀
17、要看屋主簽名的不動產說明書,裡面提到是否為凶宅、露水、違建
18、出價可用斡旋金或要約書


1. 房子的底價如何算出來? 如下公式
建商成本〈C〉 = 土地取得成本〈F〉/ 法定容積率〈G〉 / 售坪比〈H〉
預售屋成本〈A〉= 〈建商成本〈C〉+ 建造成本〈D〉〉 × 管銷係數〈E〉
建商開價 = 預售屋成本〈A〉 × 建商利潤〈B〉
說明:
v 建商成本〈C〉: 土地買到的價格/坪 (第二點會解釋,這是你的彈性空間運用) + 容積率 (問代銷小姐或是上網查, 真實數據) + 售評比(about 1.6~1.7 真實數據)
v 預售屋成本〈A〉: (建商成本 + 建造成本 (一般大概是7~8萬/坪, 用材較好的會8~12萬/坪, 另外台北的豪宅又是另一種等級, 有可能會到12~20萬不等) (彈性空間運用) )* 管銷係數 (若是有代銷公司,那大概就是抓6%, 相當於房仲的利潤)
v 建商開價: 就是你的建案底價 = 預售屋成本〈A〉* 建商利潤(大約是20~30%, 這就是你的彈性空間)
舉例: 某建案 土地取得成本 NT50萬/坪, 法定容積率 =420%, 售坪比=1.6
建造材料都是冠軍牌磁磚80*80+BOSH 廚房用具 + 義大利進口衛浴, 算11萬/坪.
建商成本〈C〉 = 土地取得成本〈F〉/ 法定容積率〈G〉 / 售坪比〈H〉
= 50 / 4.2 / 1.6 = 7 萬/坪
預售屋成本〈A〉= 〈建商成本〈C〉+ 建造成本〈D〉〉 × 管銷係數〈E〉
= (7 + 11) * 1.06 = 19.08
建商開價 = 預售屋成本〈A〉 × 建商利潤〈B〉
= 19.08 * 1.2 = 22.9 萬/坪
以上就是你的底價, 然後你就可以微調彈性運用空間,配合嫌惡設施,為自己爭取合理的房屋價格.


在你熟知前面的公式後,最難知道的就是土地取得成本, 我就來告訴大家,如何可以有效地算出土地成本(與適當的漲幅為何). 

2. 

V 在102 年1月以後,較簡單,可直接由實價登錄,查詢"土地" 即可.
http://lvr.land.moi.gov.tw/N11/homePage.action

V 但是若是在102年1月以前,那可沒那麼容易. 偏偏國內的建商都會養地,實價登錄是最近這兩年的事. 所以重點就在這了.

2.1 政府有兩種地價計算,一種是公告地價,一種是公告現值. 地價 < 現值, 差異點在此.
http://www.yungching.com.tw/CB/CB040101.asp?Pkey=%7B28FDE5F9-AA88-4B65-A1F9-CF83F3268F56%7D

2.2 要算土地取得成本〈F〉, 必須要看公告現值, 公告現值是有交易時,公家機關會由交易時的金額算出土地增值歲, 所以很接近市價,但仍有一個比率,我等一下會講,如何從公告現值反推市價.

2.3 查102年以前的土地, 首先先查你要看的那塊地的地段與地號. 可以先由實價登錄->土地, 查詢那一區是那一個段與那一個地號. 或是直接查詢地方除遂務局地價遂課,請他們告知你.


2.4 接下來,要確認此地真正坪數,以利我們街下來要查尋公告現值. 此坪數,要問代銷小姐or Google. 問到後,請改成平方公尺 , 1坪=3.3 平方公尺

2.5 用google 查尋某某市公告土地現值, 現此我以高雄市為例.
http://landp.kcg.gov.tw/KCGQuery/lcaap030f.jsp

輸入剛查到的地段,地號則用000~999 當range , 下去查.
 


2.6 接下來就可以看到許多地的公告現值,且是最近的一次103/1. 可是有很多,怎麼找?

答案很簡單,就拿剛剛要你問代銷人員的土地坪數,轉出來的平方公尺一個一個對.舉例,下圖為我的地基圖. 面積,方向正確. 它為每平方公尺NT$67720, 乘以3.3 (坪換算單位) , 為每坪 NT 223,476 元


歷年公告土地現值及公告地價
http://www.land.moi.gov.tw/pda/content.asp?cid=14&mcid=194



2.7 上述為政府的公告土地現值價錢,但與市價有一定比率. 所以我門要反推回去市價, 還好公部門有提供此推比率表.
http://www.land.moi.gov.tw/pda/content.asp?cid=14&mcid=194

選擇(二)歷年公告土地現值及公告地價占一般正常交易價格百分比統計表, Or http://www.land.moi.gov.tw/uploadpic/uploadpic-478.pdf

看到103 年度, 高雄市 現值與市價比率 為87.95%, 所以, 剛剛我門的現值為每坪 NT 223,476 元, 市價應為 223,476*100/87.95 = NT$ 254094

2.8 如上所述, 你已經算出每年一月的市價為何, 但是可能你現在並不是一月,所以會有漲幅. 但是這地方可能有漲幅,也可能沒有漲幅.所以概略一循如下原則.
2.8.1 政府算出市價後,若是它要爭收,會加四成. 也就是NT$254094*1.4 = NT$ 355731, 建商一般也都是如此算 , 也就是若無特殊原因,這四成就是你的彈性空間.

2.8.2 但是若是有View, 如興富發的正高雄美術館那塊地(華人桂冠), 它就不只四成. 它那塊地會有view + 正大馬路邊 , 所以它是市價*3 , 你可以用剛剛原則去查那一塊地,市價約百萬,但實價登錄為3百萬, 差3 倍

2.8.3 若是有view, 但是市對面房子,應該不算1 倍. or 0~1. 任你定義.若是正馬路or 交通建設如捷運/鐵路/輕軌 , 則有1 倍. 如明誠四路某一塊地,市價算出為NT50萬,但實價為NT100萬,差1 倍

以上就是全文,希望對正在買房子的朋友有幫助.


[Android]android.mk

裡面都是用MACRO來命名
開頭一定要寫這兩行
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS) 把之前的設定給erase掉


E:\packages\apps\Bluetooth\Android.mk裡面
LOCAL_PACKAGE_NAME := Bluetooth
include $(BUILD_PACKAGE)
所以build出來會放在/out/target/product/xxx/system/app
叫做Bluetooth.apk

E:\frameworks\opt\emoji\Android.mk裡面
LOCAL_MODULE := libemoji
include $(BUILD_SHARED_LIBRARY)
所以build出來會放在/out/target/product/xxx/system/lib
叫做libemoji.so

E:\frameworks\base\cmds\surfaceflinger\Android.mk裡面
LOCAL_MODULE:= surfaceflinger
include $(BUILD_EXECUTABLE)
所以build出來會放在/out/target/product/xxx/system/bin
叫做surfaceflinger(這是個可執行檔)

E:\frameworks\base\services\audioflinger\Android.mk裡面
LOCAL_MODULE:= libaudiointerface
include $(BUILD_SHARED_LIBRARY)
所以build出來會放在/out/target/product/xxx/system/
叫做libaudiointerface

E:\frameworks\base\libs\usb\Android.mk
LOCAL_MODULE:= com.android.future.usb.accessory
include $(BUILD_JAVA_LIBRARY)
所以build出來會放在/out/target/product/xxx/system/framework
叫做com.android.future.usb.accessory.jar


Q: Given to build a shared library named libaudio, it will static link with
a library named libutil. And it has some src files, they individually are
libaudio1.c and libaudio2.c, please write a Android.mk to implement it.
A:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= libaudio
LOCAL_STATIC_LIBRARIES += libutil
LOCAL_SRC_FILES:= libaudio1.c libaudio2.c
include $(BUILD_SHARED_LIBRARY)

[Android]IPC - sensorManager

在AP的部分,這個檔案裡面
G:\packages\apps\Settings\src\com\android\settings\fuelgauge\PowerUsageSummary.java
需要用到SensorManager
SensorManager sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);

在framework資料夾裡面有一個XxxManager.java就會有一個對應的XxxManagerService.java
例如PowerManager
proxy就是/frameworks/base/core/java/android/os/PowerManager.java
stub就是/frameworks/base/services/java/com/android/server/PowerManagerService.java

Service在Android框架裡的角色是「存取底層硬體」


\frameworks\base\core\java\android\app\ContextImpl.java
裡面的
public Object getSystemService(String name) {
會去比對妳是哪個manager,如果你是SensorManager
它會return getSensorManager();

private SensorManager getSensorManager() {
裡面,她會去new一個SensorManager
mSensorManager = new SensorManager(mMainThread.getHandler().getLooper());
然後實作在
\frameworks\base\core\java\android\hardware\SensorManager.java
裡面的建構式
public SensorManager(Looper mainLooper) {



\frameworks\base\core\jni\android_hardware_SensorManager.cpp
裡面有
int register_android_hardware_SensorManager(JNIEnv *env)
{
    return jniRegisterNativeMethods(env, "android/hardware/SensorManager",
            gMethods, NELEM(gMethods));
}
看到jni小寫開頭的就會到AndroidRuntime裡面去
\frameworks\base\core\jni\AndroidRuntime.cpp
註冊
static const RegJNIRec gRegJNI[] = {
   REG_JNI(register_android_hardware_SensorManager),
要在gRegJNI[] array裡面填入妳要註冊的東西


還有sensors_module_init在G:\frameworks\base\core\jni\android_hardware_SensorManager.cpp
static JNINativeMethod gMethods[] = {
    {"nativeClassInit", "()V",              (void*)nativeClassInit },
    {"sensors_module_init","()I",           (void*)sensors_module_init },
上面這是JNI mapping table
左邊是JAVA最後一支,右邊是C code第一支

有關mapping table會有兩個地方
一個在framework裡面,user自己寫的放這邊
一個在Dalvik VM裡面,也就是AndroidRuntime,android自己寫的放這邊

AndroidRuntime是由Dalvik VM + core lib所組成
上面的API都會經過Dalvik VM來check是否要進入c code
如果前面有native字眼的,就是會
它有個名稱叫做native method

所有java process都由一個叫zygote process去fork出來的
包含system server和JAVA AP
不是JAVA的,就是Daemon,也就是純C的,在zygote前面(比較靠近kernel的)

那像上面的mapping table,Daemon沒有,只有java process有

[Android]HAL

HAL的body在G:\hardware\libhardware\hardware.c
裡面有
int hw_get_module(const char *id, const struct hw_module_t **module)
裡面的load()的dlopen()去load stub [xxx(id).xx(prop).so]

HAL module的路徑有兩個地方,這是run time的時候才放在這邊
/** Base path of the hal modules */
#define HAL_LIBRARY_PATH1 "/system/lib/hw"
#define HAL_LIBRARY_PATH2 "/vendor/lib/hw"

HAL body會給妳一個variant key,然後利用這個key去data base裡面搜尋
data base有兩種,一個是\system\core\rootdir\init.rc

HAL stub
是Android user space driver
它是用來取代kernel space driver
以避開GNU license(人家跟你要source code,妳一定要給)
它在user mode有個license叫做apache license(人家跟你要source code,妳可以決定要不要給)
HAL stub
是透過PMEM來access hardware

HAL 的目的是為了把 Android framework 與 Linux kernel 完整「隔開」
目前 Android 的 HAL 實作,仍舊散佈在不同的地方
HAL 主要的實作儲存於以下目錄:
1. libhardware_legacy/ - 過去的實作、採取程式庫模組的觀念進行
過去的 libhardware_legacy 作法,比較是傳統的「module」方式,
也就是將 *.so 檔案當做「shared library」來使用,在 runtime(JNI 部份)
以 direct function call 使用 HAL module。透過直接函數呼叫的方式,來操作驅動程式。

2. libhardware/ - 新版的實作、調整為 HAL stub 的觀念
現在的 libhardware 作法,就有「stub」的味道了。
HAL stub 是一種代理人(proxy)的概念,stub 雖然仍是以 *.so 檔的形式存在,
但 HAL 已經將 *.so 檔隱藏起來了。Stub 向 HAL「提供」操作函數(operations),
而 runtime 則是向 HAL 取得特定模組(stub)的 operations,
再 callback 這些操作函數。這種以 indirect function call 的實作架構,
讓 HAL stub 變成是一種「包含」關係,即 HAL 裡包含了許許多多的 stub(代理人)。
Runtime 只要說明「類型」,即 module ID,就可以取得操作函數。

3. ril/ - Radio Interface Layer
RIL的stub是另外獨立拉出去變成一個process
傳統的是body+stub是一個process

core libraries即是Service程式碼的實作,
也就是,Android應用程式透過JNI(Dalvik)來到Service這一層,再透過Service載入*.so檔

Android的Service分為二種:Android Service與Native Service。
Android Service又稱為Java Service,是實作在框架層(framework)裡的「Server」。
這裡所講的「Service」是System Service,又稱為Server,
與應用程式設計上所討論的Service(android.app.Service)不同。Android Service以Java撰寫。

Native Service則是實作在Runtime層裡的Server。
架構設計上,我們有二個選擇,一個是實作Android Service、再透過JNI與HAL stub溝通;
另一個選擇是,跳過Android Service,讓Application(Manager API)直接與Native Service溝通。

未來的Android發展趨勢,應會以第二種做法為主,即Manager API直接與Native Service溝通,以達到更好的效能表現。

[Android]source code layout

bionic:
放一些lib, 讓你link到.so呼叫system call
原本是GNU library, 但是因為要open source code
所以google自己寫一個符合apache的, 這樣就不用open source code

bootable:
bootloader放這裡, u-boot...
Android稱它為USB bootloader,可與PC的fastboot溝通
\bootloader\legacy 是舊的
\bootable\bootloader\lk 是新的

\recovery 相當於Windows mobile的update loader

boot.img - 其實是kernel + 薄薄的一層user mode(RAM disk) 包含vmlinux, user process
userdata.img - NV ram非揮發性的記憶體,放一些device參數的設定,例如calibration...
system.img - (user mode)framework + 一點kernel

build:
所有make的環境, 裡面都是makefile
在這邊選用哪個toolchain

dalvik:
就是android runtime,
包含兩個folder
dalvik virtual machine: private, protect (jni_xxx)
vm: public (JNI_xxx)對外的public API
core library: JNINativeMethod 這邊的是system defined

development:
這裡會去build一些PC會用到的tool,例如
模擬器debugging,還有一些寫android AP的tool,
ddms, 相當於Windows mobile的platform builder,可以去看kernel debug, memory, register
apkbuilder, hierachyviewer, fastboot

framework:
是system server所在的地方,以及daemon的code
xxxService
system server process
有JAVA
有core library,這邊的是user defined
有C code: 1.HAL 2.HAL拿來當作daemon, 例如RIL 3.Multimedia
\cmds\ 儲存的是純C的process (daemon) 有servicemanager, surfaceflinger...

hardware:
就是HAL body
有type1, 2, 3, 有body, stub
type1(tranditional):
body - \libhardware
stub - \libhardware-legacy
type2(RIL):
body - rild
stub - reference ril(xx.so) 含AT-command,Qulcomm用的是自己寫的stub
shared memory方式,用RPC
type3(multimedia):
(body) alsa_sound .../libaudio/...
(stub) audioflinger, surfaceflinger .../msm7k/...

kernel:
vanilla香草kernel
device driver
7支spy
http://huenlil.pixnet.net/blog/post/25605797-%5B%E8%BD%89%5Dandroid-kernel-%E4%BB%8B%E7%B4%B9
http://loda.hala01.com/2011/01/android%E7%AD%86%E8%A8%98/
1.Ashmem(Android Shared Memory) 虛擬的
由Goolge 設計的一種記憶體分享、分配機制,主要用於 Google 設計給 Android 使用的 IPC Binder
http://huenlil.pixnet.net/blog/post/26662128-android-ashmem-%E7%9B%B8%E9%97%9C%E8%B3%87%E8%A8%8A
2.Binder
基於OpenBinder框架的一個驅動,用於提供Android平台的process間通訊(IPC,inter-process communication)
3.Logger

4.Low Memory Killer
相對於Linux標準OOM(Out Of Memory)機制更加靈活,它可以根據需要殺死process來釋放需要的記憶體
5.PMEM(Physical Memory) 實體的
有些device需要使用連續的memory,所以PMEM就是去做Physical Memory的管理
http://blog.csdn.net/sure00/article/details/6267208
6.Power Manager
針對嵌入式設備做了很多最佳化
7.Ram Console
他用一段Physical memory去模擬一個console,printk的時候會把message印到這塊RAM裡,最後透過/proc/輸出
http://blog.ednchina.com/bluehacker/1799392/message.aspx

external:
3-party release的AP和shared library
multimedia用的codec放這

package:
帶有UI的AP
google release有50個, 但只看到23個
其他是GMS, no source code
有一些要加入OHA協會才拿得到*.apk,例如google search, google talk, google map,

prebuild:
userimage
engimage
放toolchain G:\prebuilt\linux-x86\toolchain

system:
少量daemon放這邊, 其他在framework/base/core
/bluetooth/ 藍牙tool
/core/ minimal bootable環境 最小化可開機的環境
/extras/ low-level debugging, inspection tools
/wlan/ti TI 1251 WLAN driver and tools

在build ramdisk.img的地方

E:\system\core\rootdir\init.rc

vendor:
3-party放的
        HAL的stub

[Android]Build error出現cannot find symbol

在merge code的時候,直接覆蓋了 *.java 和 *.aidl 
  
當你build code的時候出現下面這樣 
frameworks/base/core/java/android/bluetooth/BluetoothAtt.java:263: cannot find symbol 
symbol  : method getAttPriority(android.bluetooth.BluetoothDevice) 
location: interface android.bluetooth.IBluetooth 
                return mService.getAttPriority(device); 
                                        ^ 
  
你可能要看mService是屬於哪個class 
結果找到是BluetoothService 
但是在BluetoothService裡面寫getAttPriority method阿! 卻還是跟我說找不到 
於是發現BluetoothService是繼承 IBluetooth.Stub,看到Stub,就知道他是binder 
所以就會跟aidl有關,aidl就像是C code裡面的 .h檔案 
在BluetoothService.java裡面新增了一個method,因為他是繼承binder的 
所以就必須在 
\frameworks\base\core\java\android\bluetooth\IBluetooth.aidl 
裡面去宣告getAttPriority 
但是我查過了~~確實有宣告 
所以為了確定他有重新去build這個BluetoothService.java 
我們去out/target/product/zoom/...把 Bluetooth.java & Bluetooth.class刪掉,讓他重新build一次 
  
這樣做完之後就可以build過了 

[Android]如何修改suspend default timeout

修改frameworks/base/packages/SettingsProvider/res/values/defaults.xml
找到def_screen_off_timeout就是了

[Android]如何抓出手機裡的apk

先把logcat打開 
  
點一下你要抓的app 
  
在logcat裡面找到ActivityManager 
I/ActivityManager(  606): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.qca.bluetooth.le.proximity.apptest/.LEProximityClient u=0} from pid 904 
而我們想要的就是com.qca.bluetooth.le.proximity.apptest關鍵字 
  
輸入 adb shell pm list package -f | grep com.qca.bluetooth.le.proximity.apptest 
就可以得到 
package:/system/app/ProximityAppTest.apk=com.qca.bluetooth.le.proximity.apptest 
由此可知你要的apk在哪個路徑下,且他實際的名稱是什麼

[Linux]Attribute

有 DRIVER_ATTR 和 DEVICE_ATTR 兩種

Device drivers can export attributes via their sysfs directories.
Drivers can declare attributes using a DRIVER_ATTR macro that works
identically to the DEVICE_ATTR macro.

macro定義如下
#define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
#define DRIVER_ATTR(_name, _mode, _show, _store) \
struct driver_attribute driver_attr_##_name = \
__ATTR(_name, _mode, _show, _store)
例如:
static DRIVER_ATTR(i2c,  S_IWUSR | S_IRUGO, show_register_value,  store_register_value);


這些mode的值,定義在kernel/include/linux/stat.h
S_IRUGO=(S_IRUSR | S_IRGRP | S_IROTH)
S_IRUSR:00400 表示user read
S_IRGRP:00040 表示group read
S_IROTH:00004 表示other read


通常會定義attribute的路徑,例如
#define BLUETOOTH_POWER_PATH "/sys/module/bluetooth_power/parameters/power"
#define SE123_POWER_PATH "/sys/class/misc/ssiscan/power_en"

然後會有個function如下去enable power
static int set_se655_power(int on) {
    int ret = -1;
    int sz;
    const char buffer = (on ? 'Y' : 'N');
    int fd = open(SE655_POWER_PATH, O_WRONLY);

這些mode的值,定義在kernel/include/asm-generic/fcntl.h
#define O_RDONLY 00000000
#define O_WRONLY 00000001


在kernel/include/linux/device.h裡面定義了以下幾種attribute類型
Bus_attribute
Device_attribute
Driver_attribute
Class_attribute
Dev_ext_attribute
Bin_attribute

Reference:
http://www.bitscn.com/os/linux/200904/158631_7.html

[Linux]Ubuntu更改多重開機的方式

首先修改這個檔案
sudo gedit /etc/default/grub
 
GRUB_DEFAULT=2  這個代表第幾個選項
 
GRUB_TIMEOUT=30 這個代表停留在default選項的時間
 
然後修改完之後要去執行
sudo update-grub
執行完如下
brandon@brandon-ubuntu:/etc/default$ sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-42-generic
Found initrd image: /boot/initrd.img-2.6.32-42-generic
Found linux image: /boot/vmlinuz-2.6.32-38-generic
Found initrd image: /boot/initrd.img-2.6.32-38-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1

done

2013年12月6日 星期五

更改windows視窗背景顏色

default是白色
我們選一個看起來讓眼睛比較舒服的顏色
方法:
桌面按右鍵\內容\外觀\進階\項目(視窗)\色彩(其他)
色調85
濃度123
亮度205

[觀點]詞

同樣的街道
同樣的餐廳
同樣的海邊
不同樣的是沒有妳的陪伴~
安靜的空氣
安靜的呼吸
安靜的夜晚
不安靜的是我心裡的呼喚~在我無法入睡的三點半

2013年11月26日 星期二

[觀點][C語言]用指標寫bubble sort

#include <stdio.h>

#define SIZE 5

void bubbleSort(int *array_a, int array_size);
void swap(int *sw1, int * sw2);

int main()
{
    int a[SIZE]={3, 6, 1, 9, 2};
    int i;
    printf("original array:\n");
    for (i=0; i < SIZE; i++)
    {
        printf(" %d", a[i]);
    }
    printf("\n");

    bubbleSort(a, SIZE);

    printf("bubble sort array:\n");
    for (i=0; i < SIZE; i++)
    {
        printf(" %d", a[i]);
    }
    printf("\n");
    return 0;
}

void bubbleSort(int *array_a, int array_size)
{
    int j, k;
    for (j=0; j < SIZE-1; j++)
    {
        for (k=0; k < SIZE-1; k++)
        {
            if (array_a[k] > array_a[k+1])
            {
                swap(&array_a[k], &array_a[k+1]);
            }
        }
    }
}

void swap(int *sw1, int * sw2)
{
    int temp;
    temp = *sw1;
    *sw1 = *sw2;
    *sw2 = temp;
}
[Answer]
original array:
 3 6 1 9 2
bubble sort array:
 1 2 3 6 9

[觀點][C語言]switch case裡面沒有break的話,就會一直選到下面的case

#include <stdio.h>

int main()
{
    int id = 3; 
    int value;
    switch(id)
    {
        case 1:
            value = 1;
            break;

        case 2:
            value = 2;
            break;

        case 3:
            value = 3;

        default:
            value = 4;
    }

    printf("value = %d\n", value);   
    return 0;
}
[Answer] value = 4

2013年11月21日 星期四

[觀點][C語言]字串是不能比較的

#include <stdio.h>

int compare_string(char* a, char* b)
{
    if (a == b)
        return 0;
    else
        return 1;
}
int main()
{
    char str1[] = "abc";
    char str2[] = "abc";
    int answer;

    answer = compare_string(str1, str2);
    printf("%d\n", answer);

    return 0;
}
[Answer] 1

[觀點][C語言]在while(負數)判斷是TRUE,在if(負數)判斷也是TRUE

#include <stdio.h>

int foo(int x, int y)
{
    while(x)
    {
        ++x;
        ++y;
    }
    if(y)
    {
        --y;
    }
    return x+y;
}

int main()
{
    int answer;

    answer = foo(-1, -1);
    printf("%d\n", answer);

    answer = foo(0, -1);
    printf("%d\n", answer);

    return 0;
}

[answer]
0
-2

[觀點][C語言](0x7700 && 0x8800) || 0xff00 用%d印出來是1

#include <stdio.h>

int main()
{
    int a = 0x7700;
    int b = 0x8800;
    int c = 0xff00;
    int d, e;

    d = (a && b) || c;
    e = (a | b) & c;

    printf("d = %d\n", d);
    printf("e = %d\n", e);

    return 0;
}

[Answer]
1
65280

[觀點][C語言]sizeof各類型別,struct > union == array > char*

#include <stdio.h>

union
{
    char chVals[16];
}uu;

struct
{
    char chVals[16];
    int a;
}ss;

int main()
{
    char chVals[16];
    char* pVals = chVals;

    printf("%lu\n", sizeof(ss));
    printf("%lu\n", sizeof(uu));
    printf("%lu\n", sizeof(chVals));
    printf("%lu\n", sizeof(pVals));

    return 0;
}
[answer]
20
16
16
4

[觀點][C語言]即使函式內的變數和local變數名稱一樣,但跳出函式後就無關 

#include <stdio.h>
#include <stdlib.h>

void foo(int* x)
{
    x = (int*)malloc(sizeof(int));
    *x = 12;
}

int main()
{
    int x = 10;
    foo(&x);
    printf("x = %d\n", x);
    return 0;
}
[answer]
x = 10

[觀點][C語言]重新定義一樣的變數名稱,觀察其值的改變

#include <stdio.h>
#include <stdlib.h>

void foo(int* x)
{
    x = (int*)malloc(sizeof(int));
    *x = 12;
}

int main()
{
    int x = 10;
    foo(&x);
    printf("x = %d\n", x);
    return 0;
}
[Answer]
a = 7 b = 13
a = 7

[觀點][C語言]x變數在做完logic判斷後,它的值會變成1

#include <stdio.h>

int main()
{
    int x = 2;
    int y = 2;
    int z;

    if (x = 2 || y == 2) //x = 1
        z = x + y;
    else
        z = x - y;

    printf("z = %d\n", z); 
    return 0;
}
[Answer]
z = 3

[觀點][C語言]變數沒有initialize,則會有run-time error,硬是要印出來的話,會印出其位址

#include <stdio.h>

int main()
{
    int x;
    while(x < 100)
        printf("x = %d\n", x);
    return 0;
}
[Answer]
run-time error
x = -858993460

[觀點][C語言]n會先--之後才去做<=的比較

#include <stdio.h>

void Test(int n)
{
    int i;
    for (i = 1; i<= --n; i++)
    printf("i = %d n = %d\n", i, n);
}

int main()
{
    int x;
    Test(5);

    return 0;
}
[Answer]
i = 1 n = 4
i = 2 n = 3

[觀點][C語言]multi array

#include <stdio.h>

int main()
{
    int sum = 0;
    int i, j;
    int ary[][4] = {1, 3, 5, 7, 9, 11};

    for (i = 0; i <=6; i++)
        for (j = 0; j <=6; j++)
        printf("ary[%d][%d] = %d\n", i, j, ary[i][j]);

    int (*ptr)[4] = ary;
    sum = (*ptr)[1] + ary [0][3] + ary[1][2];
    printf("sum = %d", sum);

    return 0;
}
[Answer]
ary[0][0] = 1
ary[0][1] = 3
ary[0][2] = 5
ary[0][3] = 7
ary[0][4] = 9
ary[0][5] = 11
ary[0][6] = 0
ary[1][0] = 9
ary[1][1] = 11
ary[1][2] = 0
ary[1][3] = 0
ary[1][4] = 15773951
ary[1][5] = 0
ary[1][6] = 4195824
ary[2][0] = 15773951
ary[2][1] = 0
ary[2][2] = 4195824
ary[2][3] = 0
ary[2][4] = 0
ary[2][5] = 5
ary[2][6] = 2
ary[3][0] = 0
ary[3][1] = 1
ary[3][2] = 3
ary[3][3] = 0
ary[3][4] = -2050383040
ary[3][5] = 32767
ary[3][6] = 0
ary[4][0] = -2050383040
ary[4][1] = 32767
ary[4][2] = 0
ary[4][3] = 0
ary[4][4] = 0
ary[4][5] = 0
ary[4][6] = -662104211
ary[5][0] = 0
ary[5][1] = 0
ary[5][2] = -662104211
ary[5][3] = 32702
ary[5][4] = 0
ary[5][5] = 0
ary[5][6] = -2050383032
ary[6][0] = 0
ary[6][1] = 0
ary[6][2] = -2050383032
ary[6][3] = 32767
ary[6][4] = 0
ary[6][5] = 1
ary[6][6] = 4195572
sum = 10

[觀點][C語言]#define之後代入的數要小心

#include <stdio.h>

#define S(z) (z*z)

void foo(int x, int *py)
{
    int n = S(x+1);
    x = *py;
    *py = n;
}

int main()
{
    int a = 2;
    int b = 10;
    foo(a, &b);
    ++b;
    printf("a = %d b= %d\n", a, b);
    return 0;
}
[Answer]
a = 2 b= 6

a = 2代入S(2+1)則2+1*2+1=5,不是3*3=9

[觀點][C語言]array搭配強制型別轉換的pointer, 當轉換小型別轉成大型別的時候, 位址會跟著變, 還有int的加減法和char不同, 單位會是4

#include <stdio.h>

char ary[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
char *p1 = ary;
char *p2;
int *pn;

void test()
{
    p1+=2;                  //p1[0] = 2     
    pn = (int*)&p1[2];     //p1[2] = 4, char->int之後,pn[0] = 7
    pn+=1;                  //加完之後pn[0] = 8
    p1 = (char*)pn;        //pn從int->char,還是維持在原位,所以p1[0]=8
    --pn;                   //因為pn是int型別,做加減法會位移4個byte而不是1個byte,所以pn[0]=4
    p2 = (char*)pn;        //int->char不會縮減,所以p2[0]=4
    --p2;                   //p2是char,所以只會減1個byte,p2[0]=3
}

int main()
{
    test();
    printf("*p1 = %d *p2= %d\n", *p1, *p2);
    return 0;
}
[answer]
*p1 = 8 *p2= 3

2013年11月20日 星期三

[觀點]證件被盜用該做什麼動作

[身份證遺失]
馬上去戶政事務所補辦一張
不用向警察局備案遺失
不用開立遺失三聯單(因為只有刑案才開立報案三連單, 沒有遺失三連單這種東西)
不用向金融聯合徵信中心登錄遺失記錄

[被冒名申請大哥大門號]
若電信業者向法院申請支付命令,你只要向法院提起抗告﹝寄一封書函過去即可﹞,或將存証信函影本提交法院即可,不必跑法院。
不要笨到請一天假,去替銀行、電信業者,做一些他們應該做的徵信工作。

[
信用卡遺失、被盜刷]
一定要在第一時間,向原發卡銀行申報遺失。在你掛失後的盜刷行為,銀行會自行吸收
你可以向發卡銀行要求檢視簽帳單,若簽帳單上的簽名,與你在信用卡背面簽名不同或相差甚遠,這筆錢你就省了
你可以要求檢視刷卡時的監視影帶

reference:
證件被冒用了 不要笨笨的跑去找警察

[觀點][C語言]enum如果有指定值的話, 其值的變化

1.
enum {
    x1,
    x2,
    x3,
    x4 = 6,
    x5,
    x6
};

[Answer]
x1 = 0
x2 = 1
x3 = 2
x4 = 6
x5 = 7
x6 = 8


2.
enum { 
    x1, 
    x2, 
    x3 = 0, 
    x4, 
    x5, 
    x6 
}; 
  
[Answer] 
x1 = 0 
x2 = 1 
x3 = 0 
x4 = 1 
x5 = 2 
x6 = 3 


3.
enum { 
    x1, 
    x2, 
    x3 = -1, 
    x4, 
    x5, 
    x6 
}; 
  
[Answer] 
x1 = 0 
x2 = 1 
x3 = -1 
x4 = 0 
x5 = 1 
x6 = 2 

[觀點]HDMI整理

HDCP,High-Bandwidth Digital Content Protection,中文名稱是高頻寬數位內容保護。

目前共有兩種數位介面採用HDCP保護標準,其中一個是HDMI,另一個是DVI(Digital Visual Interface)。

[測試HDMI的儀器]
Astro HDMI protocol analyzer VA-1831, VA-1838
Agilent U1998A


[EDID]
延伸顯示能力識別Extended display identification data
EDID 是 依據 video output 的解析度,自動調整顯示的解析度品質。
也就是說,使用者不必特別麻煩地調整輸出設備的解析度去配合想
要介接的個人電腦,機器將會自動地將兩者不同解析度的品質設定
成相同的解析度。
更平民化的說法,EDID都是放在顯示器裡面,裡面記載了我這台顯示器
所能支援的最高顯示解析度與掃描頻率,因為很多播放器(DVD或機上
盒)所能輸出的解析度往往高於LCD TV所能承擔的上限,於是當你連上
去LCD TV時,播放器透過一條I2C訊號線跟LCD TV溝通,從EDID ROM
裡面得到顯示器最佳解析度為何,再依據這個數值輸出適當的畫面給
LCD TV播放...

[深色技術]
就是色彩取樣精度的提升,HDTV全部採用8bit取樣精度,及24位色彩系統,即16.7M色。可以使HDTV和其他顯示設備由16.7M種色彩發展到數億色彩,色彩之間的漸變更細微,增加對比度,在黑色和白色之間展現更多倍的灰色陰影,獲得空前逼真和精確的畫面。HDMI v1.3以後才有support,是optional
HDMI Deep Color – Deep Color is an OPTION for some TVs or projectors that feature HDMI 
v1.3 inputs. Normally, each pixel of the video image is transmitted using 24-bit data (8-bit per 
channel for R, G, B or Y, Cb, Cr). If Deep Color is supported, each pixel of the video image can 
be transmitted using 30-bit (10-bit per channel) or 36-bit (12-bit per channel) data. The 
increased bit depth should result in smoother color transitions and better gradients. The 
available options are: 
• 30 Bits – Use the 30-bit per pixel Deep Color mode. 
• 36 Bits – Use the 36-bit per pixel Deep Color mode. 
• Off (default) – Do not use Deep Color.
NOTE 
Since the Deep Color feature is OPTIONAL and may not be supported by all TVs, enabling 
Deep Color while connected to a TV without this feature may result in no effect or no video. 

[觀點]HDCP整理

HDCP的認證透過HDMI的第15Pin與16Pin腳來進行確認的,當雙方認證完畢之後,這兩個腳位可還沒停止動作喔!它每隔兩秒還會再做一次確認!所以想偷機的人,可別以為有訊號之後就能換成可以燒錄(盜拷)的器材來破解認證的問題!
reference:
[知識]HDMI技術與HDCP工作原理 !-HD.Club 精研視務所 High Definition Vision Club - Powered by Discuz!


欲應用HDCP技術於產品上的廠商,皆須先成為DCP的會員(會費美金15,000)並取得授權,授權等級依產品的開發程度有不同分類。僅有取得全部授權的廠商能取得唯一的密鑰集(稱作KSV)以開發或販售產品,此授權密碼並會記錄於DCP,一旦授權廠商會員過期,則其KSV會在DCP的資料庫標示為撤銷密鑰。
reference:
數位內容保護 HDCP相容測試大揭祕


HDCP 是用來保護內容串流通道的保護機制,也就是從「內容來源」到「顯示裝置」之間的加密。它是由內容輸出後,才經過硬體(HDCP 晶片)加密的。
這次流出的 HDCP 主密鑰和過去以大量破解以取得 HDCP 私密鑰的方式不同,私密鑰有可能會被取消,讓你的 HDCP 破解裝置無法再運作,不過主密鑰卻沒辦法取消,除非 Intel 想將目前採用 HDCP 加密的機器統統砍掉重練,所以主密鑰的流出就代表了完全破解 HDCP 的第一步。
HDCP 主密鑰破解後,只要將這個密鑰寫入 HDCP 晶片,你就可以避開 HDCP 的限制,像是可以利用 DVR 來完整錄下藍光播放器所播出的高解析內容,而不會損害解析度;同時也可以讓不支援 HDCP 的顯示裝置完整顯示高解析內容,如此一來,就算使用 HDMI 將 PS3 連接不支援 HDCP 的電視也可以正常玩遊戲了。
因此這次主密鑰的流出對於有更好擷取方式的藍光光碟播放器衝擊較小,不過別忘了,具有 HDCP 加密的可不只有藍光光碟。HDCP 破解後,不論高解析影片是經由網路線、同軸電纜還是衛星傳輸,都可以直接經由 HDMI 等數位介面直接將影片錄制到你的電腦中,不用再痴痴地等待廠商推出具有錄影功能的機上盒,更不用被收取200元額外費用才能開啟錄影功能。
reference:

[觀點]WAPI整理

WAPI(WLAN Authentication and Privacy Infrastructure,無線鑒別和保密基礎結構)是一個關於無線區域網路的中華人民共和國國家標準(GB 15629.11-2003),一般讀作「WAIPI」。雖然它被設計為基於WiFi執行,但其與802.11無線網路標準所用安全協定的相容性存疑。


中國政府為保護自主智慧財產權,在WAPI標準的實施無限期推延後,由工業化訊息化部宣布所有在中國大陸發售的手機禁止安裝WiFi。後來迫於市場壓力,以及2009年WAPI通過ISO認證,2009年以後中國政府對WiFi開禁,但所有在中國大陸銷售的帶WLAN功能的手機必須相容WAPI。

reference:

[觀點]FM的RDS/RBDS整理


台灣RDS列表
104.9MHz  RDSIOT11
106.5MHz  VOH01/V.H.B.N
103.3MHz  BCC
92.7  MHz  ASIA--FM www.asiafm.com.tw (03)220-9207

RBDS規範

RDS相關的名詞解釋
ftp://ftp.rds.org.uk/pub/acrobat/ps_clauses.pdf
http://www.radio-electronics.com/info/broadcast/rds/radio-data-system-acronyms.php

RDS問運研所的Q&A
http://61.57.40.123/EIntegration_new/RDS/Q&A.htm

Block1 為節目識別碼(Program Identification code:PI code)由16
位元所組成,位元1~4 是國家/區域符號碼,字碼5~16由相關的國
家或區域分配使用,例如位元 5~8 用於描述節目型態,位元 9~16
節目參考數目。故基本上節目識別碼是一個電台專用碼,如果 RDS
解碼器發現節目識別碼改變時就代表已換台。而節目識別碼亦是解譯
出Data Group的關鍵數值

Block 2 是RDS資訊傳送的關鍵位元,block 2 的前5 個bit 為群
型態碼(Group Type code),bit 1~4為功能選擇,4個位元可定義出16
種服務項目,但在第 10 至 13 項未定義,故實際的 RDS 之服務項出
只有12 種。bit 5為version A或B選擇。所有的RDS所能提供之服
務都由群型態碼所定義。經由群型態碼的定義延伸出各種不同的資料 - 14 -
格式,其中之影響包括了Group bit 6~16,接在後面的block 3,block
4 與接下來之 Group 有關係。因此要了解 RDS 之功能,首先要從群
型態碼著手

reference:
http://www.ee.ncut.edu.tw/project/ResultFile/98123.pdf

[觀點]各國FM頻率列表(50kHz調頻間隔主要是歐洲使用)

在開發的時候,遇到有的chip有support 50kHz的調頻間隔
但是台灣都是100kHz的
所以找了一下
原來主要是歐洲在使用的

收音機
• 調諧範圍:
• 歐洲/俄羅斯/中國:FM 87.5-108
MHz (50 kHz)
• 亞太地區/拉丁美洲:FM 87.5-108
MHz (50/100 kHz)


reference: 

[觀點]香港FM頻率範圍87~108MHz

由圖知是87~108MHz

reference: http://tel_archives.ofca.gov.hk/zh/freq-spec/FreqTable.pdf  (第41頁)