2019年7月26日星期五

IoT 第一步!Wifi 開關電燈,理論及實踐,為何選用 MQTT ( 二 )

【上一回】IoT 第一步!Wifi 開關電燈,天馬行空的吹水時間 ( 一 )

MQTT 特色︰



MQTT 全名是 Message Queuing Telemetry Transport,歷史及誕生,上網隨便搜都一大把資料,這裡就不說了,重點在於它用甚麼機制解決甚麼問題。

  1. Publish Subscribe Pattern

  2. 由發布者 ( publisher )、代理人 ( broker ) 及訂閱者 ( subscriber )三部份組成,這樣的結構可以伸延出各種玩法,例如 broker 可限制各種 publisher 資源存取,管理服務品質等等。

  3. 輕量、可靠的二進制通訊協定

  4. MQTT 格式主要分為標頭、主題及訊息,標頭是一些定義訊息,例如怎樣的傳輸品質,有無 username、password 之類,主題設定給 subscriber 訂閱用,訊息又可稱為 payload,可以看成 binary,所以它是甚麼都可以,定義為 XML、JSON、字串等等。

    XML 分支當中有個 SOAP,可以用 BASE64 編碼,把 Binary data 寫進去,例如圖片、音樂,不過在 MQTT 「輕量」的限制下,不能寫太多資料進去,詳細限制,請參考下面連結。

  1. 主題階層式訂閱

  2. 如果要訂閱多個主題,而那些主題又是同一組別,要把多個主題逐個訂閱嗎?可以用 wildcard 方法,一次訂閱,如果主題定義得好,還可以跟據主題,做點有趣的事,這部份去到寫程式碼 callback 部份才說。

很虛無縹緲……再看下去,下面有更多使用 MQTT 好處及想像,基於以上三點才能實現。

2019年7月8日星期一

IoT 第一步!Wifi 開關電燈,天馬行空的吹水時間 ( 一 )

【上一回】電子玩具必備基礎!KVL、KCL、V = IR、P = VI、R = ρL/A


上次了解過連基本都算不上的電學,作為 Maker 不需要全知全能,只需要不斷試錯,不斷學習,認識用電有多危險,計算風險後實行計劃。

用 WIFI 開關燈,說起來容易,做起來才知有難度,從零開始構思及實踐,真是非常困難,比起開關燈這個項目,學習發現問題及自行解決問題,這層意義更大,會不會研究,都看這種能力,能不能發揮好,要看知識基礎有沒有打好,有沒有人脈給你好建議,能不能遇到高人指點,都是看運氣。

本篇純吹水,由幻想、搜集資料、發掘問題到確立方法,下一回理論,最終回才是動手做,沒興趣自問自答環節,可直跳去最終回,不過建議看下去,項目本身不是重點,學習找出問題及研究方法才是本篇主旨。

注意事項︰


用 220V 交流電!一個失誤可致命!你必須知道自己做甚麼,本人不會負責讀者的人身安全!

2019年6月1日星期六

電子玩具必備基礎!KVL、KCL、V = IR、P = VI、R = ρL/A

【上一回】Raspberry Pi 減肥、備份、重灌及技巧



完全不會電子電路也可以看,文章預設大家不會電子電路而編寫,提供最最最基本的知識,供讀者組裝簡單電路,並提供用電安全知識給讀者參考。

想玩 IoT,必須有電子電路知識才可以自行組裝,在一知半解情況下,跟網上例子及教學挑戰「智能家居」?交流電用電不慎會電死人或發生火災,所以這裡解說完一般知識後,會解釋怎才叫安全用電。

這並不是正規課程!如要學習全面的電子電路,請自行報名正規課程。

———————————簡易的分隔線————————————

必讀事項︰


小心用電安全!初次玩電,會燒一兩個電阻、LED 很正常,當天的你必需有良好嗅覺!當發現燒焦味時,請即時拔電!

待電路散熱後,仔細檢查線路上有沒有燒焦痕跡,測試各種零件有沒有受損,例如電阻阻值有沒有下跌,LED 燈有沒有燒壞等等,檢討一下為甚麼,是否計算上有甚麼出錯。

2019年5月2日星期四

Raspberry Pi 減肥、備份、重灌及技巧


減肥及備份 Raspbian



上一回完成安裝及設定,這一回分享如果節省更多空間,把不會用到的程式移除。各有所需,我不用的程式,並不代表讀者不會用,請酌情刪除。

經過一番 DIY 後,一個乾淨完美的 Raspbian 誔生,如果用官方自帶 "SD card copier" 只能clone 相同容量 TF 卡 ,做法不夠靈活,這裡會分享裁剪 TF 卡,造一個更細容量的 Image 檔,可以將 Image 放落一張不同容量的 TF 卡中,這做法靈活得多之餘,又可以當成檔案備份或分享給人使用,亦可以不受實體卡限制,造多個 Image 版本出來測試,好處多的是。

最後分享一些考慮因數及使用技巧給大家參考,避免後期不斷撿漏,想清楚自己要做甚麼,要做個怎樣的 Raspbian,一開始計劃好,就不會手忙腳亂。

這張 Cheatsheet 已包含之前及這篇文章所有 command 及設定檔,可以先下載回來,再看教學。

( 註︰這是基於 Raspberry Pi 3B+ 版本寫,用 4B 的讀者,自行吧 apt-get 之類 command 改成 apt 即可 )

2019年4月24日星期三

2019年4月9日星期二

香港買 Raspberry Pi 注意事項及位置

【上一回】新玩具!Raspberry Pi 注意事項及新手導讀


上回說過玩 Raspberry Pi 該具備甚麼條件才玩得起,如果只是想上網、做文件、不玩遊戲,當成一部平價電腦用,是不需要之前的要求。

這次分享必要零件、建議及注意事項,假如買漏甚麼而回頭再走一躺,熱情會下降,所以最好了解清楚自己想做甚麼,然後一次過買好所需零件,有點經驗及心得後,再追加其他東西,有兩個選擇,買懶人包或各自買。

2019年4月3日星期三

新玩具!Raspberry Pi 注意事項及新手導讀

很久沒更新過 Blog,在 k8s 的 NFS 研究受挫,轉向其他研究,搜尋 STEM 時發現新目標!那就是 Raspberry Pi!


為甚麼是 Raspberry Pi,而不是其他?


很簡單,因為 Raspberry Pi 本身是一台功能齊全的電腦,說它能取代電腦……又還沒到這個地步,Raspberry Pi 本身也有些限制,如果不了解,當成電腦用,恐怕某一天會發生意外。

網上隨便一搜,有很多令人振奮的項目,不過看別人玩得那麼歡樂,實際上又是怎樣?所以這次說明 Raspberry Pi 缺憾 / 限制之類,別把 STEM 想得那麼簡單。

2019年3月4日星期一

開發者就該學 Linux!

事先聲明,我不是 Windows 愛好者,只是世界上太多開發人員愛用 Linux  做開發。

為甚麼突然有這個「開發就該用 Linux」想法?


跟開發路線有關,試用雲端技術,或多或少接觸到伺服器、Virtual Machine 等等,例如︰
  • minikube
  • Docker
  • git
  • Raspberry Pi
用 Windows 版本不是不行,只是安裝及部署上有各式各樣麻煩問題,尤其雲端技術。IoT 方面,Windows 也有 Raspberry Pi 版本,但限制很多,不能當電腦用。

Windows 10 IoT
https://docs.microsoft.com/en-us/windows/iot-core/downloads

2019年2月20日星期三

Volumes、Persistent Volumes 及 Persistent Volumes Claims

上一回【了解及編寫 Kubernetes 的 yaml


用過 GCP 建立 Pod 及 Service,也試過寫 yaml,差 Persistent Volumes 就完成基本中的基中 k8s 運用……

對,只是運用,離 production 還有不少距離……

Volumes 跟 Pod 共生死, Persistent Volumes 與 Cluster 共生死,因此,Pod 用 Persistent Volumes 的話,就算 Pod 死,資料也可以續存,只要再建立一隻新 Pod,掛載 Persistent Volumes。

Persistent Volumes 與 Persistent Volumes Claims 關係


Volumes = 暫存
Persistent Volumes = 硬碟
Persistent Volumes Claims = 分割硬碟

會電腦硬件,沒更貼切比喻!

2019年1月31日星期四

了解及編寫 Kubernetes 的 yaml

上一回【申請 Google Cloud Platform ( GCP ) 及示範 Kubernetes Engine


Docker 有 yaml,K8s 也有 yaml,兩者都是 yaml,為甚麼完全不同呢?這個就不深究了,但兩者的 yaml 不能共用,已經確認過,所以有必要了解 K8s 是怎樣用 yaml 檔,Docker 那邊忘掉吧。

Kubernetes Object 及 Kubernetes API 不需要太深入研究,稍微知道是甚麼就夠,實戰才是本文重點。

為求方便,這篇用 Google Cloud Shell ( GCS ),不用 Google Cloud SDK 版本,因為 kubectl 之前給 Docker for CE 佔用了,把設定改回來很麻煩,之後的文章,應該會改回用本機 Shell。

Google Cloud 快速入門
https://cloud.google.com/kubernetes-engine/docs/quickstart#choosing_a_shell

yaml 語法
https://javatoybox.blogspot.com/2019/01/kubernetes-yaml.html#try-docker-compose

2019年1月17日星期四

Open Source 是甚麼?怎面對它?擁抱它?

Blog 中多篇文章提到 Open Source,但沒有一篇統整文章,詳細談論 Open Source,網上已經有太多太多對 Open Source 的定義及解說,所以這裡就不再累贅說一篇,只會說我對 Open source 主觀看法。

———————————簡易的分隔線————————————

Open Source 是甚麼?


客觀答案,網上隨便 Google 就有一大堆,那只不過是甚他人的答案,最後還要找個自己答案。為甚麼要有自己答案?那是為了如何面對 Open Source,用甚麼態度使用 Open Source,就會往甚麼方向前進。很玄很虛?舉個例,使用 Open Source 程式碼,當中會有 Lincense ( MIT、GPLv2、Apache, etc ) 問題,程式碼作者對開放的希望都反映在 Lincense 當中︰

作者希望,使用者的洐生産物對外完全開放 ( GPLv2 Lincense)
作者希望,使用者的洐生産物可以 close source ( MIT License )
作者對法律條款感到煩躁,所有權利直接丟出公海 ( WTF Public License v2)

2018年11月30日星期五

申請 Google Cloud Platform ( GCP ) 及示範 Kubernetes Engine

上一回【Docker 上的 Kubernetes

GCP_cover.png

上一回硬將 Docker-compose file 用落 K8s,而且是無法設定的 single node cluster 模式,還有煩人 database lock 問題未解決,用來開發還好,但用在 production 上,無法接受。

一邊看 GCP 有甚麼可以設定,一邊解說功能及使用方法,這次主要說 Kubernetes Engine。

流程︰
  1. 前期準備︰
    • 申請 GCP
    • 建立 Project
    • 設定帳單
    • 安裝 Google Cloud SDK 或使用 Google Cloud Shell

  2. 開始使用︰
    • 設定 project 及 zone
    • 建立及授權 cluster
    • deploy image 到 cluster
    • 測試結果

2018年11月15日星期四

Docker 上的 Kubernetes

上一回【Docker Network 及 Docker Compose 教學

k8s_1.png

自 18.06 Stable 版本起,安裝 Docker CE 會包含 Kubernetes,於本機執行,不能設定的 single-node cluster,作為開發及測試用。

以入門來說,是個好選擇,熟悉後再上 Google Kubernetes Engine 服務。

Deploy on Kubernetes
https://docs.docker.com/docker-for-windows/kubernetes/

2018年10月31日星期三

Docker Network 及 Docker Compose 教學

上一回【Docker 基本名詞及概念 +  用 Eclipse 建立 Docker image

docker_network_1.png

先學 Docker Network 及 Docker compose 沒壞處,K8s ( Kubernetes 簡稱 ) 設定可以由 compose 轉換過去,學習寫 yaml 是必經過程,而寫 Docker 的 yaml 需要 Network 知識,就算是 K8s 也避不了 Network 問題,懂 Network 是必要條件。

2018年10月8日星期一

Docker 基本名詞及概念 + 用 Eclipse 建立 Docker image

上一回【Docker 導覽及申請

學習 J2EE 技術,首先要有 Server……

Web Server ( eg.apache )、application server ( eg.TomEE plus )、database server ( eg.apache derby )、authorization server ( eg.OpenLDAP )、mail server ( eg.Postfix )

不要這樣好嗎?我只是個打字員,System administrate 不是我業務範圍,還沒開始打字,已在建立 Server 那步倒下,不是本末倒置嗎?

假如有個現成 Server,下載即用,世界是不是變得不一樣?

說起來很美好,實際上還是有限制,不能完全不懂各種 Service 怎運作,連基本設定都不會,就算給你下載回來也只是白忙一場。

舉例,建立某 Server 要十個步驟,有熱心人士給你做好前五步,餘下的五步怎樣?把 root 密碼改一改,把網址改成自己,很基本吧?好了,別人的設定不一定適合自己,要怎改?沒有基本知識,連上網 google 的關鍵字都不會,怎做下去?

調整心態,步驟及麻煩的確省了,但不是完全無痛建立 Server,了解 Docker 怎運作才知道怎建立 Docker image。

2018年9月27日星期四

Docker 導覽及申請

docker logo

【應用】是為了解決某種問題而誕生,那麼 Docker 會為你 ( 你的團隊 ) 解決甚麼問題呢?

首先,要覺得 painful 才能體驗 Docker 的好,如果是 painless 的小問題跟本沒必要學 Docker。

假設,現在你是個孤獨的程序猿 / IT狗,沒錢、沒朋友、沒自信……
甚麼都沒有,也有好處……
沒有負擔,沒東西可以輸……
由零開始建立系統……


———————————速查列表 ( start ) ————————————

不想看廢話,可直接跳去 Docker 申請部份。
沒興趣、不知 Docker 是甚麼,請由頭開始看,或許變得有點想學。
———————————速查列表 ( end ) ————————————

2018年9月12日星期三

JNDI + Derby + TomEE Plus 教學

JNDI 用來做甚麼?


JNDI 全名是 Java Naming and Directory Interface,重點在於【Naming】及【Directory】這兩個字,簡單來說,就是查冊服務,用【名字】來查找需要的【目錄 / 服務】。

舉例,香港公共圖書館借書時,有沒有留意書背?那組數字加英文就是索書號 ( Naming ),是個獨一無異的名字,只要用這個名字搜尋公共圖書館目錄 ( Directory ) 就一定找得到想要的書。

與 Database 用 Primary key 搜尋有甚麼分別?


用途不同,Database 用於處理資料,Database 需要頻繁讀寫,而 JNDI 主要透過設定 J2EE container 更新資源,查找  ( lookup ) 目錄 / 服務 / object 等,只需設定一次就好,不會經常改動設定檔吧?

JNDI 目錄 / 服務有甚麼?


放甚麼都可以,不像 Database 那樣,有 data type 及資料長度限制。JNDI 常見用法有以下幾項︰

  • Datasource
  • LDAP ( Lightweight Directory Access Protocol )
  • WSDL ( Web Services Description Language )
  • entry ejb

本文只示範 datasource 設定及使用,日後有機會再補上其餘三項。

2018年8月10日星期五

黑箱作業 - Encapsulation

Encapsulation 是 Object Oriented Programming 其中一個概念,這裡有好幾篇文章,換過不同例子解說同一概念。又翻炒這個概念又有甚麼用?不,【概念】這東西就是拿來用的,同一概念,修改一下,改變想法,能翻炒更多次。


Encapsulation


Encapsulation 目的在於隱藏細節,把複雜麻煩的處理包裝成單一東西。
只需理解【輸入】及【輸出】就好,【處理】這種麻煩事,包裝成【黑箱】,不需要理解【黑箱】做甚麼、怎樣做。很抽象?生活例子多的是。

2018年7月17日星期二

Eclipse 上使用 Apache TomEE

TomEE 是甚麼︰


Apache_TomEE.png

Google【TomEE 介紹】吧,千篇一律的介紹,附有安裝、設定及簡單的部署示範,簡單來說,重點在於 TomEE Philosophy。

  • Be Tomcat
  • Be certified
  • Be small

三點說完 TomEE 理念。

官看版濃縮精華必看, Overview 差不多包含所有基本資訊,雖然是 JavaEE 6,但基礎不變,大部份用在 JavaEE 7 標準也可以。