2019年12月3日 星期二

光圈Aperture F/xx 意義?


光圈:

F / 數值 = 鏡頭焦距 / 光圈的直徑

故,F值越大,光通量越小

    F/x  2 | 2.8  | 4 | 5.6 | 8 | 11 | 16 | 22
    平方  4 | 7.84 | 16 | 31.36 | 64 | 121 | 256 | 484
    倒數  0.25 | 0.1276 | 0.0625 | 0.03189 | 0.01563 | 0.0083 | 0.0039 | 0.00206
與上階面積比  1.96 | 2.04 | 1.96 | 2.04 | 1.89 | 2.12 | 1.89

可以發現,與上階的面積比大約差兩倍,所以光圈每一格大約差1/2的光通量。


ND Filter(Neutral density Filter):中性灰階濾光鏡

NDx = 光通量為1 / x

規格      ND2 | ND4 | ND8 | ND16 | ND32 | ND64 | ND128 | ND256 | ND512 | ND1024
與上階光通量比 1/2 | 1/4 | 1/8 | 1/16 | 1/32 | 1/64 | 1/128 | 1/256 | 1/512 | 1/1024


故:ND2與光圈調小一格意義一樣,ND4就是調兩格,以此類推ND1000,即調10格。

2019年10月30日 星期三

make file

基本結構如下:

#--------------------------------------------------------------
target(要生成的文件): dependencies(被依賴的文件, Prerequisites)
#命令前面用的是「tab」而非空格。誤用空格是初學者容易犯的錯誤。
        command1
        command2
        command3
          .
          .
          .
        commandn
#可用「\」表示換行繼續,「\」後不能有空格
#--------------------------------------------------------------

說明:
1. target與dependencies中間用冒號(:)分隔開來
2. command前面是tab,不能是空白符號( ),會有錯誤,指令最後面也不能有空白符號( )
3. 註解(comment):符號為#
4. dependencies: 要完成target或產生target檔案,所需要的檔案
5. target: 透過dependencies與下面的command來完成


特殊target:

#--------------------------------------------------------------
clean:
        command1
        command2
        command3
#--------------------------------------------------------------
說明:
1. 這種沒目標文件或間接關聯,不會自動執行,不過我們執行: make clean

偽目標 .PHONY

#--------------------------------------------------------------
.PHONY: clean
clean:
        rm *.o
        rm *.exe
 #--------------------------------------------------------------
說明:
.PHONY 會將目標設成假target,使 make目錄下沒有目標檔案或目標檔案為最新時,仍可執行 make <target>
make預設的假target有 all, install, clean, distclean, TAGS, info 和 check

變數

#--------------------------------------------------------------
cc = gcc
src = a.cpp b.cpp c.cpp
program : $(src)
        $(cc) -c $(src)
#--------------------------------------------------------------
說明:
1. 變數宣告時,使用 = 或 := 給予初始值
2. 取用時,加入$(),如上面的$(src)
3. 特殊變數
3-1. $@ : target檔名
3-2. $< : 第一個dependencies檔名
3-3. $^ : 所有個dependencies的檔名, 並以空格隔開這些檔名(已經拿掉重複的檔名)
3-4. $* : target主檔名,但不含副檔名
4. 特殊等號
4-1. ?= : 若變數未定義,則替它指定新的值。否則,採用原有的值。
4-2. := : 變數的值決定於它在 Makefile 中的位置,而不是整個 Makefile 展開後最終的值
4-3. = : 變數的值為整個 Makefile 展開後最終的值
4-4. += : 把+=後面的內容,放入+=前面

萬用字元

#--------------------------------------------------------------
CC = gcc

%.o: %.c
  $(CC) -c -o $@ $<
#--------------------------------------------------------------
說明:
makefile中所用的萬用字元是 %,代表所有可能的字串。
target、個dependencies檔名可以接指定的字串來表示某些固定樣式的字串。
例:%.c 表示結尾是.c 的所有字串。

特別字元

#--------------------------------------------------------------
.PHONY: clean
clean:
    @echo "Clean..."
    -rm *.o
#--------------------------------------------------------------
說明:
1. @ : 不要顯示執行的command,因執行make後,會在終端機印出正在執行的指令
2. - : 即使執行出錯,也不會中斷執行,因make只要遇到錯誤,就會中斷執行。
故像上面沒有任何檔案可以rm時,rm傳回錯誤值,會導致 make 中斷執行。
利用 - 來關閉錯誤中斷功能,讓make不會因而中斷。

範例:

用makefile 建立資料夾
#--------------------------------------------------------------
OBJDIR = ./obj
$(OBJDIR):
    mkdir -p $@

makeDir: ${OBJDIR}
#--------------------------------------------------------------

2019年10月18日 星期五

const

A. 變數宣告

1. const char *tVar;
2. char const *tVar;
3. char * const tVar;
4. const char * const tVar;

加上括號方便了解

1. const (char) *tVar;-->把*tVar當作一個變數,所以*tVar的值,不可變
2. (char) const *tVar;-->同上
3. (char *) const tVar;-->tVar型別為(char *),tVar指標不可變, 右邊語法為一樣意思:const (char *) tVar;
4. const (char *) const tVar;-->指標與和指標所指到值,都不可變


B. Function內有const變數

1. void function(const int Var);
2. void function(const char *Var);
3. void function(char * const Var);

加上括號方便了解,其實就與需告變數同

1. void function(const (char) tVar);-->tVar傳function內,變數值不可變(無意義,tVar本身就傳進去參數)
2. void function(const (char) *tVar);-->*tVar型別為(char),*tVar的值不可變
3. void function((char *) const tVar);-->tVar型別為(char *),tVar指標不可變(無意義, tVar也是傳進去參數)


C. const 放在Function的回傳值

1. const int function()
2. const int *function()
3. int * const function()

加上括號方便了解,其實就與需告變數同

1. const (int) function()-->因回傳值是被assign的,所以沒意義
2. const (int) *function()-->把function()當成變數,應該較很清楚,*function()的值不可變。使用方式:const int *tValue = function();
3. (int *) const function()-->function()型別為(int *),回傳指標不可變。使用方式:int * const tValue = function();


D. const 拿來形容 object / object pointer / object reference

const 形容的物件,表示該物件為const物件,所以物件的任何member都不能改。object pointer / object reference 指到的物件也是一樣。
const 形容的物件,該物件的任何非const成員函數都不能被呼叫用,因為任何非const成員函數都可能有修改成員變數的企圖。

例:
class A
{
    void func1();
    void func2() const;
}

const AAA aObj;

aObj.func1();-->錯誤
aObj.func2();-->正確


const AAA* aObj = new AAA();

aObj->func1();-->錯誤
aObj->func2();-->正確


E. const 形容 class內的變數

class中有const的成員的值固定,不能被修改,且只能在初始化時,給值。
class A
{
    const int mVal;

    A(int mVal): nValue(mVal) {}; //初始化,給值
}


F. const 形容 class內的Function

class中有const的函數,不能修改class中任何非const成員函數。一般把const寫在函數最後。

class A
{
    void function() const; //const函式, 不改變物件的成員變數. 也不能呼叫任何非const成員函數。
}


G. const與define區別

1. compiler行為不同
define-->在compile前,即作取代動作
const-->compile時,處理

2. 類別和檢查行為不同
define-->沒有型別,不做型別檢查,只是展開。
const-->型別型別資訊,在compile時,會檢查。

3. 存儲方式不同
define-->僅展開,不會分配記憶體。
const-->會在記憶體中分配

參考網址:
const 放置位置的意義

2019年10月17日 星期四

Class Inheritance - Constructor, Destructor

#include <iostream>
using namespace std;

class A {
public:
    A() {
        cout << "A Constructor" << endl;
    }

    ~A() {
        cout << "A Cestructor" << endl;
    }
};

class B : public A {
public:
    B() {
        cout << "B Constructor" << endl;
    }

    ~B() {
        cout << "B Cestructor" << endl;
    }
};

int main() {
    B f;

    cout << endl;

    return 0;
}

執行結果:
A Constructor
B Constructor

B Cestructor
A Cestructor

static, extern in C, C++

extern

例:
xx.h
extern int a;

xx.cpp
int a = 100;

即:
    當別的cpp檔,include xx.h時,即告知linker a不在此.h與.cpp內,要去其他.o檔找。而build xx.h與xx.cpp時,會告知此a變數,可以給其他.o找到



Function或variable非class member


static function();(此變數宣告不在function裡)
static variable;(此變數宣告不在function裡)


A static function is a function whose scope is limited to the current source file.

即:
    此function只會在自己對應的.h與.cpp內被看到,當.h與.cpp被build成.o檔時,其他程式如果
需要link此function會看不到。同理,此變數只在此.h與.cpp內看的到。

static variable;(此變數宣告在function裡)

即:
    call完此function後,此variable依然存在,不會消失。



Function或variable是class member

class xxx{
  static int a;
  static void function();
}

即:
    此variable不屬於任何instance,而是屬於此class的,所有instance共用此變數,可用此變數來計算instance個數。
    此function不屬於任何instance,而是屬於此class的,未有instance即可呼叫此function。



參考:
[C/C++] 靜態函式 (static function) 2011
C/C++ 中的 static, extern 的變數

2019年9月29日 星期日

Simplify MIUI - updater-script

Use updater-script to remove some unused apps.


ui_print("");
ui_print("");
ui_print("Remove some APPs");
ui_print("");
ui_print("");
ui_print("Mount System");
run_program("/sbin/busybox","mount","/system");
ui_print("");
ui_print("");
ui_print("Start to remove system apps.");
delete_recursive("/system/app/AntHalService");
delete_recursive("/system/app/BookmarkProvider");
delete_recursive("/system/app/BugReport");
delete_recursive("/system/app/BuiltInPrintService");
delete_recursive("/system/app/CatcherPatch");
delete_recursive("/system/app/Calculator");
delete_recursive("/system/app/ConfURIDialer");
delete_recursive("/system/app/Email");
delete_recursive("/system/app/FidoAuthen");
delete_recursive("/system/app/FidoClient");
delete_recursive("/system/app/FidoCryptoService");
delete_recursive("/system/app/FileExplorer");
delete_recursive("/system/app/greenguard");
delete_recursive("/system/app/HTMLViewer");
delete_recursive("/system/app/HybridPlatform");
delete_recursive("/system/app/Joyose");
delete_recursive("/system/app/KSICibaEngine");
delete_recursive("/system/app/LiveWallpapersPicker");
delete_recursive("/system/app/MiDrive");
delete_recursive("/system/app/MiuiCompass");
delete_recursive("/system/app/MiuiContentCatcher");
delete_recursive("/system/app/MiuiScreenRecorder");
delete_recursive("/system/app/MiWallpaper");
delete_recursive("/system/app/Notes");
delete_recursive("/system/app/PaymentService");
delete_recursive("/system/app/PrintRecommendationService");
delete_recursive("/system/app/PrintSpooler");
delete_recursive("/system/app/SecurityAdd");
delete_recursive("/system/app/SecurityCoreAdd");
delete_recursive("/system/app/TouchAssistant");
delete_recursive("/system/app/UserDictionaryProvider");
delete_recursive("/system/app/WallpaperBackup");
delete_recursive("/system/app/XMCloudEngine");
ui_print("");
ui_print("");
ui_print("Start to remove priv-apps.");
delete_recursive("/system/priv-app/BackupRestoreConfirmation");
delete_recursive("/system/priv-app/Browser");
delete_recursive("/system/priv-app/Calendar");
delete_recursive("/system/priv-app/CallLogBackup");
delete_recursive("/system/priv-app/CellBroadcastReceiver");
delete_recursive("/system/priv-app/CleanMaster");
delete_recursive("/system/priv-app/CloudBackup");
delete_recursive("/system/priv-app/DownloadProviderUi");
delete_recursive("/system/priv-app/EmergencyInfo");
delete_recursive("/system/priv-app/MiDrop");
delete_recursive("/system/priv-app/MiGameCenterSDKService");
delete_recursive("/system/priv-app/MiuiScanner");
delete_recursive("/system/priv-app/MiuiVideo");
delete_recursive("/system/priv-app/MiuiGallery");
delete_recursive("/system/priv-app/Music");
delete_recursive("/system/priv-app/QuickSearchBox");
delete_recursive("/system/priv-app/SoundRecorder");
delete_recursive("/system/priv-app/SpacesManagerService");
delete_recursive("/system/priv-app/VirtualSim");
delete_recursive("/system/priv-app/WallpaperCropper");
delete_recursive("/system/priv-app/YellowPage");
ui_print("");
ui_print("");
ui_print("Un-Mount System");
unmount("/system");
ui_print("");
ui_print("");
ui_print("Done");
ui_print("");
ui_print("");


ref:
[Android] 升級包中的 updater-script 簡易撰寫教學
updater-script命令详解教你写刷机脚本
[TUTORIAL] The updater-script completely explained

2019年9月5日 星期四

Mi6 - find device storage corrupted your device is unsafe now



My Problem is like the under reference website. Please check the under first one reference website #3,062.

I have fixed the problem, but I don't know the root cause.

1. Install OmniRom(clean dalvik, cache, and internal).
2. Install magisk to root OS(clean dalvik, cache, and internal).
3. Boot to os and reboot to twrp.
4. Reinstall xiaomi.eu_multi_MI6_V10.3.1.0.OCACNXM_v10-8.0.zip.
5. Boot to OS and I find the problem is fixed.

Reference:
MIUI 10.0/10.1/10.2/10.3/10.4 STABLE RELEASE
[Discussion] find device storage corrupted your device is unsafe now
find device storage corrupted your device is unsafe now

2019年9月2日 星期一

Facebook App 自動播放影片,音效關閉


右上三條線-->設定和隱私-->設定-->媒體和聯絡人-->媒體和聯絡人

自動播放影片,音效關閉
->動態消息的影片音效已開啟-->關閉

應用程式中的音效-->關閉

關閉自動播放影片功能
->自動播放-->永遠不要自動播放影片

2019年8月19日 星期一

汽車維修資訊

網路上找到相關文章,先整理。

底牌輪胎
銓威輪胎
銓哥
新竹市中華路一段182號
0972118795

保養維護
宇田汽車
華哥
新竹縣竹北市光明十四街20號(中華路路口~光明六路與福興路中間)
0933-118-245

聖發汽車保養廠
小黑
302新竹縣竹北市麻園三路210號
0928-649-226

冷氣維修
竹東-振騰
310新竹縣竹東鎮中興路一段147巷18號 竹北-誠天 302新竹縣竹北市中華路180號

大溪-權盛機電
桃園市大溪區仁和西街80號


PS濕式變速箱維修
台中志育變速箱整修, 含後曲軸油封 , 五萬一
保固一年
Power Shift 變速箱 (濕式)維修心得 - Mobile01
https://www.mobile01.com/topicdetail.php?f=260&t=5386626&p=47


台北正佳
台北市中山區濱江街301巷8號


泰誠變速箱
地址: 247新北市蘆洲區復興路323巷12-10號
電話: 02 2848 8834
Power Shift 變速箱 (濕式)維修心得 - FSC
http://www.focus-sport.club.tw/viewthread.php?tid=489594&extra=page%3D1&page=11

2019年6月27日 星期四

勁戰四 規格

輪胎:
前:100/90-12
後:120/70-12


大燈:
H4 60/55W


方向燈
前、後:1156斜角

2019年5月27日 星期一

Excel Function

=RAND()-->Random一個值,介於0~1( >= 0, < 1)

=RAND()*(b-a)+a-->Random一個值,介於a~b( >= a, < b)

=INT(RAND()*X)-->Random一個值,小於X的整數

=RANDBETWEEN(B1,C1) -->Random一個值,介於儲存格B1, C1

=IF(MOD(RANDBETWEEN(Parameters!B1,Parameters!C1), 2)=0,"+","-") -->Random一個值,介於儲存格B1, C1,再Mod 2,1的話顯示+, 2的話顯示-

=EVALUATE(A1&B1&C1),EVALUATE可以把字串當運算式,運算

Ctrl + F3(開名稱管理員)-->新增Function
Name: calculate(隨便命名)
參照=EVALUATE(A1&B1&C1)

在儲存格,輸入=calculate

2019年2月1日 星期五

GPS JoyStick v3.0.3 after updating to PoGo v0.133.0

1 Twrp - Mount - System
2 Twrp File Manager -> Copy /system/framework/services.jar to /sdcard/Download*
3 Copy services.jar to Pc, browse on Smali for services.jar, click Patch Jar
4 Extract zip module created by Smali
5 Go to extracted folder, enter /system folder, copy the 'framework' folder inside to Phone Internal Storage, "/Download"
6 Boot Twrp, Mount System, go to Advanced->File Manager and copy :
*/sdcard/Download/framework/services.jar To /system/framework

*/sdcard/Download/framework/arm/services.odex To /system/framework/arm
*/sdcard/Download/framework/arm64/services.odex To /system/framework/arm64

*/sdcard/Download/framework/oat/arm/services.odex To /system/framework/oat/arm
*/sdcard/Download/framework/oat/arm64/services.odex To /system/framework/oat/arm64

7 Still in Twrp, go to /system/framework/services.jar, click services.jar, BlueButton, CHMOD 755 (bootloop if not)

8 Install GPS JoyStick (default options, no system, no disabled, no agps reset, no indirect mocking(caused rubberband after 5 minutes))

9 Enable Developer Options, Select GPS JoyStick as Mocking app.


Can't spoof using GPS JoyStick v. 3.0.3 after updating to PoGo v. 0.133.0 (rooted)

You can't spoof on version 0.133.0 with fusedlocation service disabled (Android/Rooted)

PoGo 0.133 No Root / TWRP only / FakeGps Not systemized

Smali Patcher 3.4