2019年12月29日 星期日

JS學習:基礎資料型別


布林值:Boolean

布林是用來表示真偽的資料型別,只有 True 和 False 兩個值,如果宣告一個布林型態變數,但是沒有賦予值的話,此時的值會是 False 


2019年12月25日 星期三

JS學習:變數的宣告與使用



所有資料都是物件

資料型別分成:基本資料型別、複雜資料型別

基本資料型別 ( primitive data type ):為語言的基本構成單元,Boolean、int、Number、String 等

複雜資料型別 ( complex data type ):通常由基本資料型別構成,Array、Function 等

變數命名

  1. 盡量使用有含意的英文單字
  2. 使用小駝峰命名 ( ex: maxWidth )
  3. 命名符合 最短長度、最富意義 原則
  4. 避免出現數字編號 ( ex: id_1、id_2 )

變數的本質

每個物件在建立時,會向記憶體請求一塊空間來儲存資料,而我們宣告的變數會持有引用
( Reference ),引用則是指向該物件所在的記憶體位置

2017年9月20日 星期三

Android Studio APK 安裝簽名衝突


有時候我們在寫Android APP 安裝到實體機測試的時候

會出現「未安裝應用程式。 發生衝突,安裝套件所使用的簽名與現有套件的簽名相同」

有別的文章有提到說,可能是因為先前安裝的程式沒有刪除,需要先把程式完全移除

但是今天遇到的問題是並非上述所提及的「同一個程式衝突」而是「不同程式衝突」

問題產生的流程是這樣

複製舊程式,修改程式碼與更改package名稱後,安裝程式發生衝突問題


原因可以出在更改名稱之後Gradle沒有同步更改

我們更改package名稱操作可能會如下圖所示


但是在Gradle底下卻不會一起更動



所以需要自己手動更改成新的名稱


另外一個問題是我們在產生APK的時候,可能會選擇「Build APK」這個選項



他會產生APK檔案沒有錯,但是Android在辨別APP的時候會比對「package名稱」跟「簽名」

使用這個選項是Android Studio 幫你使用預設的 Debug 簽名

在安裝的時候發現package名稱不一樣,但是簽名一樣,然後跳出錯誤訊息

所以當你有很多個不同的APP的時候,需要使用「Generate Signed APK」

原則上問題應該可以解決

至於簽名可不可以多個APP用同一個簽名,答案是可以的,而且Android官方也如此建議

為什麼要使用同一個簽名的原因如下

1. 升級:package名稱和簽名相同時,系統會判定兩者為同一個APP所以會更新程式

2. 模組:Android可以讓相同簽名的程式跑在同一個程序裡面,這樣可以個別升級

3. 共享:Android可以用相同簽名的程式在permission與許的情況下共享程式碼與數據

You should sign all of your APKs with the same certificate throughout the expected lifespan of your apps. There are several reasons why you should do so:
  • App upgrade: When the system is installing an update to an app, it compares the certificate(s) in the new version with those in the existing version. The system allows the update if the certificates match. If you sign the new version with a different certificate, you must assign a different package name to the app—in this case, the user installs the new version as a completely new app.
  • App modularity: Android allows APKs signed by the same certificate to run in the same process, if the apps so request, so that the system treats them as a single app. In this way you can deploy your app in modules, and users can update each of the modules independently.
  • Code/data sharing through permissions: Android provides signature-based permissions enforcement, so that an app can expose functionality to another app that is signed with a specified certificate. By signing multiple APKs with the same certificate and using signature-based permissions checks, your apps can share code and data in a secure manner.
                      出處:https://developer.android.com/studio/publish/app-signing.html

2015年9月2日 星期三

AP刷韌體 - tomato


原廠韌體並非不好,某些廠牌的韌體還有在更新,只是可能沒有需求的功能,所以才會刷成別的韌體。

刷韌體需要注意 -- 刷壞會被認定為人為損壞

以RT-N18U為範例

1. 至 Asus 官網下載韌體救援軟體
http://www.asus.com/tw/support


2. 至 Tomato 網站查AP對應的版本 - help 的 Router List


3. 下載該版本的韌體



注意:比較新的AP在ROM上比較沒有這個問題,但是比較舊款的需要注意ROM大小,像是 Asus WL520GU 只有 4MB ,就不能下載超過 4MB的韌體

4. AP接LAN到電腦,AP預設IP為192.168.1.1,電腦IP設成同網段 ,但是不要設與AP預設IP一樣,Mask 設定 255.255.255.0 

note:Dns跟Gateway 可以不用設定,因為沒有要連到外部網路

note:Gateway 是連結不同網段之間的溝通橋樑,而刷機是在同網段,所以可以不用設定

note:Dns 是 對應 IP 跟網域名稱的服務

5. 開啟救援軟體,選好韌體

6. 確認IP同網段,ping AP (有回應為正常)

7. 關電源,同時按住 RESET 與 WPS 鍵 (ping值無回應)


8. 開啟電源,等到燈號閃爍後,放開WPS (ping值無回應)


9. 再次等到燈號變成閃爍,放開 RESET ,上傳韌體 (ping值無回應)

note:第二次的閃爍燈號會比第一次慢

10. 等到上傳完成且ping值穩定,在上傳完後,大概會重開機兩次左右,登入管理頁面(192.168.1.1)

如果無法登入,檢查一下有沒有步驟做錯,像我做的時候,有時候太快放開WPS,就會失敗。

11. 成功後就是設定AP

note:在過程中ping AP 其實是不必要的,但是會這麼做是讓ping值成為我們的眼睛,否則在整個過程中會無法得知 AP 的狀態。




2015年8月31日 星期一

掛載硬碟 - parted 應用

今天的情況是原本的東西都在500G的硬碟,要把home目錄單獨掛到一顆4T的硬碟底下

裝完硬碟後,可以先進BIOS查看有沒有讀到
或是等開機後使用  dmesg 這個指令

note: dmesg - 查看開機過程中 kernel 所偵測到的硬體資訊

note:如果有加插Ram的話 free -h 可以查看

步驟如下

看新硬碟代號
dmesg | grep sd 

切割我們掛載的硬碟(假設代號為 sdb)
parted /dev/sdb

note:rm分割區代號可以移除分割區

先告訴硬碟我們的分割表類型
mklabel gpt

新增分割區
mkpart
part-type[]? primary
fs-type[ext2]? xfs
start? 0
end? -1  
Warning : The resulting partition is not properly aligned for best performance. Ignore/Cancel? i

note:  fdisk 只能支援到 2T 所以超過的話就要使用 parted 

note:-1代表全部

切割完之後 p 可以查看,確認ok後 q 離開

更新分割表資訊
partprobe

然後格式化分割區
mkfs.xfs -f /dev/sdb1

接下來先將舊的home改名字,不然改 fstab的時候會有衝突發生,並新增home目錄
mv /home /home.bak
mkdir /home

將我們新硬碟寫到fstab裡頭
blkid /dev/sdb1 
查看分割區的UUID
如果有圖形化介面可以右鍵複製貼上,沒有的話
blkid /dev/sdb1 >> /etc/fstab 
把顯示的所有資訊寫到 fstab 裡頭,再到 fstab 裡頭做修改
UUID=xxx /home     xfs    defaults  0 0

note:UUID是該分割區的唯一值,所以如果重新分割的話,UUID也會不一樣喔

然後就可以掛載上去了
mount /home
用 df -lh 查看

最後備份原本home底下的檔案
rsync -av 來源 目的
檢查檔案權限
reboot後確定一切正常就完成囉!

-----------------------------------------分隔線--------------------------------------

dmesg | grep sd

parted /dev/sdb

mklabel gpt
mkpart primary xfs 0 -1 

partprobe
mkfs.xfs -f /dev/sdb1

mv /home /home.bak

blkid /dev/sdb1 >> /etc/fstab
vim /etc/fstab

mount /home

rsync -av source goal

JS學習:函數進階使用技巧

代理函數物件 根據不同的條件,代理函數物件可以指向不同的函數來實現動態改變,如下: function femaleFunction() { console.log('female'); } function maleFunction() { ...