2018年2月28日 星期三

CAP 定理 與 NoSQL




NoSQL是對不同於傳統的關聯式資料庫資料庫管理系統的統稱。

兩者存在許多顯著的不同點,其中最重要的是


  1. NoSQL不使用SQL作為查詢語言
  2. 資料存儲可以不需要固定的表格模式 (Schema)
  3. 經常會避免使用SQL的JOIN操作,一般有水平可延伸性的特徵。

不同於RDMBS 的ACID特點,NoSQL的結構通常提供弱一致性的保證 ,如最終一致性,或交易僅限於單個的資料項。




CAP 定理 與 NoSQL 套件對照表

CAP 定理 可參考下述文件:
CAP theorem (CAP定理), 下述摘錄自此兩篇:
在 理論計算機科學中, CAP定理(CAP theorem), 又被稱作 布魯爾定理(Brewer's theorem), 它指出對於一個 分布式計算系統 來說,不可能同時滿足以下三點:
  • Consistency: 一致性 (所有節點在同一時間具有相同的數據) (all nodes see the same data at the same time)
  • Availability: 可用性 (保證每個請求不管成功或者失敗都有響應) (a guarantee that every request receives a response about whether it was successful or failed)
  • Partition tolerance: 分隔容忍 (系統中任意信息的丟失或失敗不會影響系統的繼續運作) (the system continues to operate despite arbitrary message loss or failure of part of the system)
根據定理,分佈式系統只能滿足三項中的兩項而不可能滿足全部三項。
因為 CAP 三者無法同時達成, 所以 NoSQL 套件目前都是符合其中兩項, 另外一項支援度就會差一點, 下述文章有整理目前 NoSQL 的資料庫, 對應 CAP 定理 的整理.
BASE理論
BASE理論是CAP理論結合實際的產物。 BASE(Basically Available, Soft-state,Eventually consistent) BASE恰好和ACID是相對的,BASE要求犧牲高一致性,獲得可用性或可靠性
References:
https://blog.longwin.com.tw/2013/03/nosql-db-choose-cap-theorem-2013/


https://goo.gl/EcCcj7


https://goo.gl/dcdPPA


2018年2月26日 星期一

ARM Alignment



On ARM-based systems you cannot address a 32-bit word that is not aligned to a 4-byte boundary 


LDR r0, = 0x1001
LDR r1, [r0]
The second line in the above code will give hard fault since are trying to read 4 bytes but the memory address is not divisible by 4
If we change the second line in above code to the following
LDRB r1, [r0];//Load 1 byte from address
The above line will not produce a hard fault, since we are trying to access 1 byte(1 byte can be accessed from any memory location)
Also notice the following example;
LDR r0,= 0x1002
LDRH r1,[r0];   //Load half word from 0x1002


References:





2018年2月22日 星期四

SIGFOX 連線&傳送教學





Serial (UART) Parameters:9600 baud, no parity, 8 data bit and 1 stop bit
依序輸入指令,建議使用putty連線
AT // will return OK if not, check Arduino UART, board communition or change Terminal app
AT$GI? //will return X,Y, If X=0 or Y<3
AT$RC
AT$SF= xxxxxxxxxxxx //it's what you want to send

This procedure will force the module to send the frame within the macro channel listened by SIGFOX network.





2018年2月12日 星期一

KNN演算法



監督式學習是透過資料訓練(training)出一個model 但是在KNN其實並沒有做training的動作

最近鄰居法KNN演算法,又譯K-近鄰演算法

KNN屬於機器學習中的監督式學習(Supervised learning)



K=3 時, 鄰居有3人, 新加入的綠色應為 紅色三角形 那一群



尚未分類的資料,我們要怎麼將他分類呢?這邊就是非監督式學習(Unsupervised learning)中的K-Means



K-means主要講的就是「物以類聚」

K-means是一個分群(Clustering)的演算法,不需要有預先標記好的資料(unlabeled data),屬於非監督式學習(Unsupervised learning)。主要是用來做常常被使用在資料分群,簡單的說就是把一堆資料根據你判斷相近的邏輯,把這一堆資料分成k群。

用比較數學(
嚇人)的說法就是,追求各個群組內部的均方誤差總和最小。
argmini=1kxjSi||Xjμi||2
(x1,x2,x3...,xn)
S=S1,S2,,Sk, S為分割的群組集合
μi是群組Si內所有元素xj的重心,或叫中心點。
下面這個圖是一個資料根據不同K所分群出來的結果,顏色只是提供辨識分群用。


  1. 先決定K
    k就是最後要分成幾群,如果你希望最後資料分成 3群 ,k就是3。
  2. 在你的資料中,隨機選擇k個點做為群中心(也可以直接從資料挑)。
  3. 把每一筆資料標記上離它最近的群中心
  4. 根據同一個標記的所有資料,重新計算出群中心。
  5. 如果步驟4算出來的群中心跟原本步驟3不同,則重複步驟3