顯示包含「GitHub」標籤的文章。顯示所有文章
顯示包含「GitHub」標籤的文章。顯示所有文章

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年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

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月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年5月17日星期四

Eclipse 上使用 Java DB ( Apache Derby ) (PART 1 / 3 )

上一回【Eclipse 介紹及預定技術整合

Apache Derby

為何不用常見的 MySql?


由 JDK 6 開始已經包含 Database,而且小巧輕盈。
處理少量資料,只用到 CRUD ( Create, Retrieve, Update and Delete),這是一個不錯的選擇。

Java DB
http://www.oracle.com/technetwork/java/javadb/overview/index.html

註︰避免用好用滿 oracle JDK 後,被背後插一刀,快點習慣 OpenJDK + derby 吧,而且各個版本 Linux 都是選用 OpenJDK。


———————————資料補充 ( start )————————————

DBMS ( DataBase Management System )︰


Apache Derby 是一種【Relational DBMS】,除【Relational DBMS】外,還有其他種類,例如常說的「大數據」、「機器學習」等,他們用到的 database 技術都不一樣 ( 如 Hadoop、Neo4j 等等)。

2018年2月13日星期二

GitHub 及 EGit ( PART 8 / 8 ) + GitHub 完整流程

接上回【GitHub 及 EGit ( PART 7 / 8) + GitHub 介面及功能

講解過 Git、講解過 EGit、也操作過 GitHub,是時候示範一次完整流程是怎樣。

完整流程分兩種角色︰
一個扮演 Repo owner 角色,另一個扮演 contributor 角色。

現在先看官方宣傳片……


宣傳概念,假設人物去解決甚麼問題,以故事形式簡介 GitHub 整個流程。
這裡會分段解說影片,以 Eclipse + Egit + GitHub 實現完整過程。

2018年1月16日星期二

GitHub 及 EGit ( PART 7 / 8 ) + GitHub 介面及功能

接上回【GitHub 及 EGit ( PART 6 / 8 ) + Git Conflict

在申請 GitHub 時,有簡單介紹過介面
https://javatoybox.blogspot.hk/2017/07/github-egit-part-1.html

現在介紹,是真正使用 GitHub 的介面。最基本的 Setting、Fork、Issues 及 Pull requests 介面操作詳盡介紹,而其他功能及介面教學,或許以後再補上。

profile 介面

2017年11月16日星期四

GitHub 及 EGit ( PART 6 / 8 ) + Git Conflict

接上回【GitHub 及 EGit ( PART 5 / 8 ) + Git Branch

Git 最困難的部份就是出現衝突 ( Conflict ) 時,要如何處理,多數人都會用【Merge】解決,雖然還有【rebase】這個方法,但這個方法會重寫 commit history,用法不當會讓參與的人相當困擾。

不想按部就班看,可直接前往 總結,看看本篇文章有什麼能用。

3.6 Git Branching - Rebasing
https://git-scm.com/book/en/v2/Git-Branching-Rebasing

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

事前準備︰


看似只有一個分支,其實是兩分支

現在的 History 是這樣的。

2017年10月10日星期二

GitHub 及 EGit ( PART 5 / 8 ) + Git Branch

接上回【GitHub 及 EGit ( PART 4 / 8 ) + Git Object Model

有沒有聽過 Open Office 這個辦公室軟件?那是跟 Microsoft Office 對著幹的軟件。為什麼會扯上這個?為了讓大家更好理解,先舉例一個近似的功能來說明 Branch 概念。

可以代替 MS OFFICE

這是 Open Office Writer 介面,主角是復原及取消復原 ( Redo and Undo ) 功能,快捷鍵是 Ctrl + Y 及 Ctrl + Z。

2017年9月19日星期二

GitHub 及 EGit ( PART 4 / 8 ) + Git Object Model

接上回【GitHub 及 EGit ( PART 3 / 8 ) + Git Staging

上一回說過別亂按【Commit and Push】,但【Commit】這個按鍵有沒有試按過呢?沒按過也沒關係,這裡會解說,但在解說之前,先了解一下【Git Object】是什麼。

Git Object


Git Object 共四類,每一類有各自功能,把這些 Object 串起來運用,就是 Git 的核心。

  1. Blob Object

  2. 是什麼都可以,在電腦眼中只是零及一。

    Binary Large OBject ( BLOB ) 這個術語在 Database 領域中一定會見到,而在 Git 中,它代表一個檔案,它是什麼都可以,可以是音樂檔 ( mp3, wav, aac, etc )、影片檔 ( mp4, avi, wmv, etc )、圖片檔 ( jpg, png, bmp, etc ),但最常見的,當然是文字檔 (java, c, xhtml, etc)。

    不同檔案名稱或存在路經不一樣,但內容一樣的話,都是會是同一個 Blob Object,計算 SHA-1 時,只計檔案內容,而不包括檔名及路徑。如果改了名或移動了檔案的話,要怎發現呢? Tree Object 有記錄。

2017年8月14日星期一

GitHub 及 EGit ( PART 3 / 8 ) + Git stage

接上回【GitHub 及 EGit ( PART 2 / 8 ) + 網絡素養

設定完成,是時候去了解一下 Git 是什麼,公式化介紹不說,來點不一樣吧。簡單地形容的話,GitHub 是 Open Source 世界入口,Git 是個管理 source code 工具,實際上是怎麼一回事呢?這裡不會單獨講解 Git ,網上可以找到很多教學,這裡會混合 Eclipse + Egit + GitHub 講解及實際操作。

技術環環相扣,要在這個迴圈找個切入點,需要反覆看幾次及動手練習,才會理解怎用。GitHub 是建立於 Git 之上,所以想跳步直接用 GitHub,終有一天會碰釘,還是老實一點從 Git 學起。

基本上,什麼都沒有說明

基本慨念


首先,大約是這樣吧,在認知上,應該有這些東西存在。有伺服器 (server side),有用戶 (client side),每一邊都有各自的 Git 管理檔案,兩者之間有互動。

2017年8月7日星期一

GitHub 及 EGit ( PART 2 / 8 ) + 網絡素養

接上回【GitHub 及 EGit ( PART 1 / 8 ) + 信息安全

Open source 像桃園鄉的理想世界。現在最紅,應該是 Git 這套工具,只持有工具是沒用,背後那一套【遊戲規則】及【遊玩方法】才是重點,除了這兩點外,還有【場地】這個考量,自家建設 Git 伺服器,還是用 GitHub 這個【場地】。

在自己主場,怎做怎玩都可以,別人來玩也得遵守你的【遊戲規則】及【遊玩方法】。不過在 GitHub 這公開場地,不用遵守公家【遊戲規則】及【遊玩方法】的話,不是不行,只是沒人有興趣陪你玩,到頭來只是活在只有自己一個人 Open source 世界 …… 沒有意義。

2017年7月20日星期四

GitHub 及 EGit ( PART 1 / 8 ) + 信息安全

GitHub 是甚麼?能做到甚麼?不要這樣問,有問題問 Google。
既然進來了,就是想學 Eclipse + GitHub 如何運用。

用 GitHub 前,首先要懂得用 git。無論如何,先去弄一個 GitHub 帳號回來再算。

GitHub LOGO

到 GitHub 申請帳號
https://github.com/