發表文章

目前顯示的是 3月, 2018的文章

Serverless

圖片
Serverless You build it, you run it. Serverless 不是真的沒有server, 而是不用在意server端的問題 Serverless -> less 即是 more how to monitor lambda how to debug lambda 必須讓服務全部都是stateless ex: no sticky session 優點 開發者只需要專注寫好 function HA (High Availability) 無法預判狀況時可以快速MVP 使用適當可以 cost down 缺點 執行時間有限 執行時間太長反而無法節省成本 需要做的事情其實變更多 如何debug 如何監控 常見的 serverless AWS lambda function GCP Cloud function Azure Function OpenFaaS (Function as a Service) 應用案例分享 可口可樂在飲料機上使用lambda串接金流 無人機使用lambda即時將監控的畫面回傳 Ref:  https://rickhw.github.io/2018/03/29/About/2018-Serverless-All-Star/ S3 + Event Source + Lambda發送SNS 

[MySQL] 匯入資料

LOAD DATA LOCAL INFILE  ' 檔案的絕對路徑 ' INTO TABLE 要塞入資料的資料表 CHARACTER SET UTF8 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS ;

[iptables, ufw] 修改 docker container (redis) 的防火牆規則

觀看docker container ip # docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id # 新版: # docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id 替 redis container 加上自定義的防火牆規則 iptables -N CUSTOM_REDIS # 只接受 localhost 可以連到 redis container (172.17.0.5:6379) # 若有需要其他白名單可以把 localhost 換成其他主機 ip iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source localhost --destination 172.17.0.5 -j ACCEPT # 其餘往 port 6379 都丟掉 iptables -A CUSTOM_REDIS -p tcp --dport 6379 --source 0.0.0.0/0 --destination 172.17.0.5 -j DROP # 將規則替換掉 iptables -R DOCKER 1 -p tcp --source 0.0.0.0/0 --destination 172.17.0.5 --dport 6379 -j CUSTOM_REDIS 觀看規則運作情形 # iptables -L -v -n Ref:  http://blog.yunfei.me/blog/iptables_quota.html // 開放22和80 port的可以流入流出 $ iptables -A INPUT -p tcp --dport 22 -j ACCEPT $ iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT  $ iptables -A INPUT -p tcp --dport 80 -j ACCEPT  $ iptables -A OUTPUT -p tcp -

[Node.js] 進階 (20%完成)

圖片
Node.js 靠 process.binding('xx') 使用 C++ 函數 Node.js 內包含 .cc (C++ code) 像這次範例是 PBKDF2 (用來做crypto相關的) 在C++ function 內要給 process.binding()用的話就要透過 env->SetMethod(target, "PBKDF2", PBKDF2) V8引擎則是把javascript裡的一些東西轉成C++看得懂的東西 ex: V8:Array => 把js中的array轉成C++可以用的code Thread 當我們在電腦中執行程式的時候, 電腦會起一個 process 一個process是程式本身的實例 一個process內可以有多個threads 一個thread可以看成一個to-do list 要被CPU執行的指令集 os scheduler來排定哪個thread要優先執行 一個核心一次可以處理超過一個thread (multi-thread) Recap: Thread是指令集的單位, 等著被CPU執行 Event Loop 詳細版:  http://www.eebreakdown.com/2016/09/nodejs-eventemitter.html 用來處理非同步的事件 Node.js執行之後就直接進event loop 整個event loop從頭跑到尾是一次是一個tick shouldContinue 是 event loop 判斷是不是還有事件可以繼續跑 pendingOSTasks => networking related pendingOperations => file system related 如果要讓node.js的middleware在執行完原本的handler function後才執行 可以用這個方式 此處的用法是, 在新增完部落格的文章之後, 才清除文章快取 # CI/CD Travis .travis.yml language 使用的城市語言 node_js - 8 => 使用v8.x dist

[Linux] rsync

Ref:  https://blog.gtwang.org/linux/rsync-local-remote-file-synchronization-commands/ https://blog.longwin.com.tw/2012/10/rsync-ssh-different-port-2012/ 安裝: # sudo apt-get install rsync or # sudo yum install rsync 基本用法 rsync 參數 來源檔案/目錄 目的檔案/目錄 -v:verbose 模式,輸出比較詳細的訊息。 -r:遞迴(recursive)備份所有子目錄下的目錄與檔案。 -a:封裝備份模式,相當於 -rlptgoD,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記。 -z:啟用壓縮。 -h:將數字以比較容易閱讀的格式輸出。 遠端備份 從server A上面將某個directory完整備份到 server B 1. 假如server A 用的 ssh port並非 22 port, 可以先設定 ~/.ssh/config Host server_b_ip HostName server_b_ip Port xx 2. rsync -avzh Server_A_Directory user@server_b_ip:Server_B_Parent_Directory ex:  rsync -avzh /root/xxxx/public/videos user@111.222.111.222:/home/user/xxxx/public

[Linux] 利用private key產生public key

ref:  https://askubuntu.com/questions/53553/how-do-i-retrieve-the-public-key-from-a-ssh-private-key ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

[html] 在iframe內的網頁取得外面這個iframe本身, 並設定高

keywords: window.frameElement 在iframe內的網頁如果要把外層這個iframe撐高的話 一般都是從內層去呼叫parent.document.getElementById('iframe的ID') 但其實還有更厲害的就是 window.frameElement window.frameElement是說如果這個頁面有被另外的東西包住 (iframe, object)的話, 會返回這個東西, 也就是iframe 設定高的部份如下: var doc = document, docHeight = Math.max( doc.body.scrollHeight, doc.documentElement.scrollHeight, doc.body.offsetHeight, doc.documentElement.offsetHeight, doc.body.clientHeight, doc.documentElement.clientHeight ); window.frameElement.setAttribute("height", docHeight); 如果是cross domain的話,以上方法就行不通了 必須使用window.postMessage來溝通

[git] 當主機ssh port不是標準22port時, 無法從bitbucket上pull東西下來

圖片
(前提是已經將這台主機的public key新增到bitbucket的ssh key) 1. 先去 ~/.ssh/known_hosts, 看一下對bitbucket的 public key 是否為這台主機的 public key 2. 設定 ~/.ssh/config 這樣應該就可以從上面pull/ clone 東西下來