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

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年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年8月10日星期五

黑箱作業 - Encapsulation

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


Encapsulation


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

2018年3月22日星期四

Object Oriented Programming ( java )?先放下,現在砌模型,玩遊戲

cover

事先聲明,不是教大家組裝精美模型,只是想透過組裝模型,說明 object oriented 這種程式設計概念。一半加餸,一半炒冷飯,換個例子,加點新意,編寫新文章。

文章很長,有很多概念上的東西學,一定要一邊動手試,一邊思考為甚麼,有沒有其他用法之類。總言之,別急,看一次是學不會,看多幾次也是學不好,object oriented programming 要靠實踐及知識基礎才可以學好,兩者缺一不可。

多去 GitHub 看看別人怎用 object oriented,有時候會看到你意想不到的用法,看到像魔術一樣的用法後,可能會知道自己還有所欠缺的知識,因為無知才覺得像魔術,知道原理後,這只是個掩眼法。

例子程式碼 ( V1_gunpla_example )
https://github.com/IntegrityKnight/java_object_oriented/releases/tag/V1_gunpla_example

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月17日星期一

解構世界——功課篇

接上回【以 Object Oriented 哲學看世界 —— Reusable 與 Maintainability概念

Once upon a time,有一間【Low Tech 撈野 High Tech 揩野 IT 已死紀念中學】,全校只有五人,【腦細】校長、【機智】老師、【玩野】同學、【揩野】同學及【撈野】同學。

註︰詳情請 Google【 Object-Oriented Analysis And Design】

定義問題、使用者及目標 ( Target and User Requirements )


老師一方面要防止學生抄功課,另一方面,學生在不被發現之下,用最省時省力的方法【做功課】……

a.老師的目標︰如何高效及智慧地出功課

b.學生的目標︰如何高效及智慧地抄功課

c.你的目標︰把科技融入系統

這是一場漫長的戰爭……

Source Code︰
https://github.com/IntegrityKnight/HomeWork

2017年6月29日星期四

以 Object Oriented 哲學看世界 —— Reusable 與 Maintainability 概念

學 Object Oriented Programming 之前,先學習 Object Oriented 哲學,把世界轉化成 Object Oriented。

為什麼要用 Object Oriented 來解構世界?


如何把生活的日常轉為程式?以前很直覺地把數學那一套【F(x) = 世界】,直接用公式代入 ( Functional Programming ) 電腦 ,很簡單易懂。時移世易,需求 ( requirement ) 改變,程式也要跟著改,會發現越來越難改,沒法簡單地修改一下就追上需求。

簡單來說,Object Oriented 為解決現在的問題外,還要預測未來,預判下一步怎樣走,作好準備。Object Oriented 以【作好準備】而生,先解構世界,把世界重新定義成 Object,為各種 Object 套上關係,用程式碼重現世界。

軟體工程 ( software engineer ) 中,可以用 UML ( Unified Modeling Language ) 視圖化說明及分析設計系統 ( Object-oriented analysis and design ( OOAD )  )。

在談 Object Oriented 之前,首先要預測會遇上什麼問題,然後可以用什麼概念解決問題,所以先離一下題,講解 Reusable 及 Maintainability 概念。