unit test, integration test, acceptance test 有什麼不同呢?
unit test 就是 test 最基本的東西,例如一個 function ,藉由確定每個 function 的正確性來確保程式正常運作
integration test 則有點像是橫跨不同 unit 的 test,意即 integration test 測的是某個行為,而這個行為會觸發很多 funcitons,雖然每個 function 都有 unit test,但藉由 integration test 我們可以確保這個行為是正常發生的
acceptance test 則是更宏觀一點的測試,通常是更口語一點,更 feature 導向的測試,例如「我點擊了A按鈕後應該進入B頁面」這類的測試,不用考慮程式實作的細節只考慮行為產生出的結果
http://stackoverflow.com/questions/4904096/whats-the-difference-between-unit-functional-acceptance-and-integration-test
https://martinfowler.com/articles/microservice-testing/
2017年4月27日 星期四
2017年4月25日 星期二
About Redis
In memory, key-value store. 所以其實 redis 就是一個 database,只是他所有的東西都存在 memory 而且是屬於 NoSQL 的 database。
最常用的場景就是拿來快取東西。
In memory 表示是直接存在記憶體上不是存在硬碟裡,由於記憶體上有實作更簡單的演算法所以需要的 CPU 資源較少,而且在 query 資料的時候可以減少搜尋硬碟的時間所以讀寫很快,這也是為什麼大家常常拿 Redis 當 Cache server 的原因
https://en.wikipedia.org/wiki/In-memory_database
當然 Redis 也有提供讓資料存寫進硬碟的功能,關鍵字:Expire
http://huli.logdown.com/posts/926762-redis-introduction
http://stackoverflow.com/questions/7888880/what-is-redis-and-what-do-i-use-it-for
延伸閱讀
https://medium.com/ruby-on-rails/easy-caching-with-rails-4-heroku-redis-5fb36381628
最常用的場景就是拿來快取東西。
In memory 表示是直接存在記憶體上不是存在硬碟裡,由於記憶體上有實作更簡單的演算法所以需要的 CPU 資源較少,而且在 query 資料的時候可以減少搜尋硬碟的時間所以讀寫很快,這也是為什麼大家常常拿 Redis 當 Cache server 的原因
https://en.wikipedia.org/wiki/In-memory_database
當然 Redis 也有提供讓資料存寫進硬碟的功能,關鍵字:Expire
http://huli.logdown.com/posts/926762-redis-introduction
http://stackoverflow.com/questions/7888880/what-is-redis-and-what-do-i-use-it-for
延伸閱讀
https://medium.com/ruby-on-rails/easy-caching-with-rails-4-heroku-redis-5fb36381628
標籤:
Computer Basic,
Database
2017年4月24日 星期一
React native layout with flexbox
flex 基本上就是填充
https://facebook.github.io/react-native/docs/height-and-width.html#content
flexDirection 就是主要的方向,如果是橫向就是 row 縱向就是 column, default 是 column
justifyContent 就是根據主要方向(flexDirection)分佈元件的方式,Available options are flex-start, center, flex-end, space-around, and space-between.
space-between:在元件之間安插一樣長的空白區塊
space-around:在元件旁邊安插一樣長的空白區塊,跟 space-between 不同的是 space-around 即使是最外圍的元件的外側也會安插空白區塊
flex-start:放在 flex direction 的前端
flex-end:放在 flex direction 的後端
center:放在 flex direction 的中間
alignItems 則是根據次要方向(flexDirection 的相反)排列元件的方法,Available options are flex-start, center, flex-end, and stretch.
flex-start, center, flex-end 就不用多做解釋了,如果 flexDirection 是 column 而 alignItems 是 center 代表水平置中,flex-end 代表靠右
stretch 則代表延展,如果元件本身沒有設定次要方向的長度的話就把次要方向延展至底,例如 flexDirection 是 column 的情況下不設元件的 width 就會將元件平行拉長到底
https://facebook.github.io/react-native/docs/flexbox.html#content
標籤:
JavaScript,
React Native
2017年4月13日 星期四
DNS-cache-poisoning or DNS Spoofing, Pharming Attack
很清楚的影片:
https://www.checkpoint.com/defense/advisories/public/dnsvideo/
簡單解釋:
Local 的 DNS Server 通常會有 Cache,如果能夠找到對應的網址就不會問網路上的 DNS Server,攻擊原理就是趁 Local DNS Server 問網路上的 Master DNS Server 而 response 還沒回來時假造 Master DNS Server 的 Response 讓 Local DNS Server cache 起來,這樣就可以把 User 導到自己假造的位置去,進而實行網址轉嫁攻擊(Pharming Attack)
Pharming Attack 跟 網路釣魚(Phishing)的不同在於後者是利用 email 騙受害者,而 Pharming Attack 是專指將使用者導向錯誤網站釣魚方式
http://searchsecurity.techtarget.com/answer/Phishing-vs-Pharming-attacks
Pharming Attack 還有另外一種常見的攻擊方式是修改 hosts 檔,因為電腦會先找 /etc/hosts 的設定,如果找到就不會去問 DNS,所以只要攻擊者藉由木馬或是任何方式改了 hosts 的設定,就一樣可以把使用者轉嫁到惡意網站去。
http://www.informationsecurity.com.tw/article/article_detail.aspx?tv=&aid=6813&pages=2
http://blog.miniasp.com/post/2008/10/22/Be-careful-DNS-cache-poisoning-attack.aspx
https://www.checkpoint.com/defense/advisories/public/dnsvideo/
簡單解釋:
Local 的 DNS Server 通常會有 Cache,如果能夠找到對應的網址就不會問網路上的 DNS Server,攻擊原理就是趁 Local DNS Server 問網路上的 Master DNS Server 而 response 還沒回來時假造 Master DNS Server 的 Response 讓 Local DNS Server cache 起來,這樣就可以把 User 導到自己假造的位置去,進而實行網址轉嫁攻擊(Pharming Attack)
Pharming Attack 跟 網路釣魚(Phishing)的不同在於後者是利用 email 騙受害者,而 Pharming Attack 是專指將使用者導向錯誤網站釣魚方式
http://searchsecurity.techtarget.com/answer/Phishing-vs-Pharming-attacks
Pharming Attack 還有另外一種常見的攻擊方式是修改 hosts 檔,因為電腦會先找 /etc/hosts 的設定,如果找到就不會去問 DNS,所以只要攻擊者藉由木馬或是任何方式改了 hosts 的設定,就一樣可以把使用者轉嫁到惡意網站去。
http://www.informationsecurity.com.tw/article/article_detail.aspx?tv=&aid=6813&pages=2
http://blog.miniasp.com/post/2008/10/22/Be-careful-DNS-cache-poisoning-attack.aspx
HTTP Slowloris Denial Of Service
從上一篇文章的 Reference 延伸閱讀學到的東西
這種攻擊主要是拿來攻擊 Server 讓 Server 連線數滿載沒辦法回應新的 Request
兩種攻擊模式, GET 和 POST
攻擊基本原理:Hold 住連結不放開,佔用 Server 連線
1. GET: 送 Request 的時候故意不送完整的 HTTP Header,慢慢送完
2. POST: 送 Request 的時候送很大的 content-length,然後很慢的速度送,例如每十秒送一個字
P.S./ Denial Of Service 就是阻斷式服務攻擊的意思,常見寫法為 DoS
http://www.piao2010.com/%E4%B8%80%E6%AC%A1%E5%88%86%E4%BA%AB%E5%BC%95%E5%8F%91%E7%9A%84%E8%A1%80%E6%A1%88-http-slowloris-denial-of-service
這種攻擊主要是拿來攻擊 Server 讓 Server 連線數滿載沒辦法回應新的 Request
兩種攻擊模式, GET 和 POST
攻擊基本原理:Hold 住連結不放開,佔用 Server 連線
1. GET: 送 Request 的時候故意不送完整的 HTTP Header,慢慢送完
2. POST: 送 Request 的時候送很大的 content-length,然後很慢的速度送,例如每十秒送一個字
P.S./ Denial Of Service 就是阻斷式服務攻擊的意思,常見寫法為 DoS
http://www.piao2010.com/%E4%B8%80%E6%AC%A1%E5%88%86%E4%BA%AB%E5%BC%95%E5%8F%91%E7%9A%84%E8%A1%80%E6%A1%88-http-slowloris-denial-of-service
2017年4月12日 星期三
Mac Spoofing - 竄改 MAC Address 使用付費 Wifi
原理很簡單,先查查看有哪些人在使用付費 Wifi,把自己的 MAC Address 改成他們的,Boom! 開始上網。
查自己 MAC (之後改回來):ifconfig en1 | grep ether
查哪些人在使用付費 Wifi:arp -a
改 MAC Address:sudo ifconfig en1 ether [mac address to spoof]
Bonus:
用 https://www.torproject.org/ 瀏覽
這做法可能會造成 MAC Conflit,這就要看Switch 的硬體怎麼實作的了,也許會把封包同時送給兩個位置或是只送一個或是都不送...
P.S./ 這裡指的付費 Wifi 是指沒有設密碼的 Public WIFI,連進去後要求提供信用卡資訊或是帳密登入才可以使用的 WIFI Hotpot。
https://www.youtube.com/watch?v=Agodg3dmwaQ
https://www.quora.com/Is-a-MAC-address-conflict-possible
dsniff and arpspoof
俗稱網路剪刀手
原理是讓其他電腦把封包發到自己的電腦藉此做進一步的行為
假設我把他的封包全部丟掉那他就會斷網
或是我也可以檢查他的所有封包,也許有機會拿到重要資料例如密碼和網站 cookie, token 等,又稱做 Man-in-the-middle attack
但是要怎麼讓對方電腦把封包發到自己的電腦呢?
痾,有點雃回答,還是先回答什麼叫做 ARP 好了
ARP(Address Resolution Protocol)位址解析協定
https://zh.wikipedia.org/wiki/%E5%9C%B0%E5%9D%80%E8%A7%A3%E6%9E%90%E5%8D%8F%E8%AE%AE
原則上 ARP 其實就是一個 mapping 的機制,把 IP 跟 MAC address 綁在一起,這樣就可以從 IP 知道要把封包傳送給哪個 MAC
所以,要怎麼讓對方電腦把封包發到自己的電腦呢?
就是讓受攻擊者電腦的 ARP 誤以為其他 IP 是綁在自己的 MAC Address,要做到很簡單,就送 ARP Reply 給被攻擊者,然後把 sender IP 跟 MAC 位置亂搞一通就好
以此邏輯來看,如果是要剪網,就是把被攻擊者的 IP 送給 router 綁定一個假的 MAC address,這樣 router 就會把資料都送到假的位置上,被攻擊者就不會有網路可以用了
也可以把 router 的 IP 綁一個假的 MAC 送給被攻擊者,一樣的效果
而 Man-in-the-middle attack 也是差不多,假設我要偷對方 FB 資訊,那我就把 FB IP address + 我的 MAC address 送 ARP Reply 給被攻擊者就好了,這樣他所有要送給 FB 的資訊就會先經過我,我檢查過後再幫他送出就有機會可以查看到機密資料。
http://www.itwendao.com/article/detail/142631.html
https://hackvault.blogspot.com.au/2014/08/dsniff-and-arpspoof-on-mac.html
https://zh.wikipedia.org/zh-hant/ARP%E6%AC%BA%E9%A8%99
React stateless component
幾個重點
1. 可以不用使用 ES6 的 class
2. State 不存在 presentational component 裡面,變成 pure function,沒有 react lifecycle
3. 沒有 react lifecycle 代表不能快速 hack 功能進去,但相對的可以維持 code 的品質
4. pure function 好測試,而且 react team 考慮(或是已經?)對這類沒有 life cycles 的 function 做效能優化
5. 不用再寫 bind(this) 這種 code
https://hackernoon.com/react-stateless-functional-components-nine-wins-you-might-have-overlooked-997b0d933dbc
標籤:
JavaScript,
ReactJS
2017年4月10日 星期一
Using Database Replicas in Rails with the Octopus Gem
學習到一些東西
* AWS RDS 可以製作 database 鏡像,讓 reading request 打到這些鏡像可以降低主要 database 的負荷
* Rails access 鏡像的做法似乎有內建的 `config/shards.yml`,這篇文章使用 Octopus Gem,實作細節也挺有趣
* `DatabaseReplica ` 這個 wrapper 的實作也可以學習
* 最後還有遇到 connect 到錯誤 server 的 bug,用 Octopus 沒有寫在文件裡的 custom_octopus_connection 解決
Using Database Replicas in Rails with the Octopus Gem
http://freeletics.engineering/2017/03/06/database-replicas.html
2017年4月7日 星期五
OOP - interface segregation principle ISP 介面分離原則
用戶不應該被迫相依於他們用不到的函示
如果有用不到的函示,應該做成不同的 interface 或是 protocal
有要用到再裝上去就好
https://danielkjchen.wordpress.com/2016/02/05/%E7%89%A9%E4%BB%B6%E5%B0%8E%E5%90%91%E4%BB%8B%E9%9D%A2%E9%9A%94%E9%9B%A2%E5%8E%9F%E5%89%87-interface-segregation-principle/
http://ithelp.ithome.com.tw/articles/10101106
標籤:
Design Pattern,
OOP
OOP - Law of Demeter 最小知識原則
意思就是假設 A 要問 B 一個問題,但是 B 要問 C 才能知道答案,那麼 A 應該只需要問 B 就好,A 不需要知道 B 還需要問 C,對 A 來說問 B 就能知道答案了
範例
A.askB #=> Answer
違反此原則的範例:
A.askB.askC #=> Answer
http://ithelp.ithome.com.tw/articles/10101265
標籤:
Design Pattern,
OOP
OOP - Dependency-Inversion Principle
重點:program to an interface, not an implementation
原本上層的類別會依賴下層的類別,就如同要蓋二樓就必須蓋好一樓
但 Dependency-Inversion Principle 的意思就是應該要讓上層和下層都依賴於抽象層,也就是上面重點說的 interface
http://teddy-chen-tw.blogspot.com.au/2012/01/5dependency-inversion-principle.html
標籤:
Design Pattern,
OOP
OOP - LSP(Liskov Substitution Principle)Liskov替換原則
Liskov替換原則的定義是:『子類別必須能夠替代基礎類別』
不要繼承不必要的遺產,沒用到而去繼承反而是種累贅甚至會搞壞了整個系統也不一定。
http://ithelp.ithome.com.tw/articles/10100827
標籤:
Design Pattern,
OOP
OOP - SRP(Single Responsibility Principle)單一責任原則
『你只有一個理由需要更改這個class,如果有一個以上的理由就表示:這個class負責超過一個以上的責任。』
http://ithelp.ithome.com.tw/articles/10100557
標籤:
Design Pattern,
OOP
OOP - OCP (Open/Close Principle)
概念:讓程式「可以擴增」但是「不能修改」
http://ithelp.ithome.com.tw/articles/10100008
標籤:
Design Pattern,
OOP
2017年4月4日 星期二
multi-tiered
簡單來說,multi-tiered 的意思就是很多台機器的意思,例如 client 跟 server 是不同的機器所以就是 2-tiered,而現在都是 N-tiered 了畢竟 database 跟 application 可能也是分開的。
References:
http://www.bethel.com.tw/cht/jpTA.aspx?cate_id=5&doc_id=63
訂閱:
文章 (Atom)