programming

什麼是 開放封閉原則 Open-Closed Principle (OCP)

開放封閉原則 (Open-Closed Principle (OCP)) 談論的是,軟體開發所使用的類、方法等,應該具備能拓展,且不須透過手動修改。 在開發大型架構(或框架)時,嚴謹遵照這個方式,才能讓架構保持靈活與易擴充性。 實作方式,都是透過抽象的方式來處理: 繼承 介面 依賴注入 …等 在今天,我們開發專案多會選擇以OCP拓展的框架,在套件擴充及開發都會比較容易上手。 實際開發過程,如果是一些小專案,則可不必強制解耦合,尚未明確的內容提前被封裝,導致需求變動時,修改的成本會隨之提升。 因此,都會建議在剛開始先將邏輯完成,後續再透過重構方式來做封裝。

Continue Reading

工廠模式 (Factory)

工廠模式 (Factory)

在 Design Pattern 中,工廠模式(Factory) 基本的理念是建構一套完整工廠鍊,可以用來生產各種類別品項。

例如,建構資料庫工廠,可以用來產生 mysql, mongodb, redis…. 等物件。

對於使用者而言,他只需要在初始化工廠時,指定要生產的是什麼,

後續在操作資料庫的行為,都會一致。

Continue Reading

建構者模式 (Builder)

建構者模式 (Builder)

建構者模式,主要透過條件堆疊取得產物。

每一個堆疊的步驟,都是一個 Builder,例如透過 set 的方式來傳入 Builder。

實際用途,可運用在設計資料庫查詢器的功能,例如,要查詢一個用戶,名字為 john

Continue Reading

什麼是繼承抽象 Abstract

Abstract 可以用來定義 Abstract 類、一般方法名稱及參數,Abstract 方法。

一般的方法可以實作邏輯。

如果是 Abstract 方法,則僅作描述,不實作邏輯。邏輯會保留到某個類別繼承(extends)時,來實作(強制)。

透過抽象,可以讓我們定義好規則以及實作一些方法,讓其他類別擴充時,可遵照規則實作,以及直接可使用這些方法。

Continue Reading

Guzzle PUT 傳輸參數方式說明

Guzzle PUT 數據方式說明

使用 Guzzle

使用 Guzzle 只能透過 POST 方式來傳遞 application/x-www-form-urlencoded form params

( 官方原文:form_params - Used to send an application/x-www-form-urlencoded POST request. )

若使用 PUT, DELTE 則需要改用 body 或者 json 格式傳輸,例如:

Continue Reading

介面 Interface

Interface Interface 類別主要用於定義一些關鍵字及 public 的抽象方法,不需要定義方法的 body 及參數。 <?php interface Logger{ public function excute(); } 首先,針對未使用 Interface 的情況進行說明, 如果在大型專案只有使用 Class,例如以下範例,當我們要切換不同的 Log 方式時,就要透過手動方式在多處 constructor 處進行 hard-coded 變更,例如 <?php class LogToDatabase { public function execute($message) { var_dump('log the message to a database :'.

Continue Reading

parent 與 child 資料結構

公司新專案,在執行學習測驗完成後,需要跳出一個問券讓使用者填寫, 問券的架構必須要在選取特定選項後,再展開相關對應的題目, 大致示意如下:

Continue Reading

API Blueprint

API Blueprint

API Bluepirnt 是一個 API 描述語言,可以在開發 API 的過程,使用 markdown 方式快速彙整出 API 文件。

標準的 API Blueprint 是以 .apib 作為副檔名(media 類型為 text/vnd.apiblueprint),當拓展到 Github 上,會直接顯示對應的 Heightlight 。

Continue Reading

防駭,資料庫遭入侵勒索的安全應對機制

近期,公司營運多年的舊有專案,十幾套系統發生同時無法連線問題,查明原因發現資料庫被入侵,資料被清空,root密碼被更改,以及留下一個 PLEASE_READ_ME_MXG 資料表,內容如下:

WARNING
To recover your lost data : Send 0.05 BTC to our BitCoin Address and Contact us by eMail with your server IP Address or Domain Name and a Proof of Payment. Any eMail without your server IP Address or Domain Name and a Proof of Payment together will be ignored. Your File and DataBase is downloaded and backed up on our servers. If we dont receive your payment,we will delete your databases.

Bitcoint_Address
xxxxxxxxxxxxxxxxxxxxxxxxxx

Email
xxx@hello-database.xyz

在搜尋過相關類似攻擊 Your File and DataBase is downloaded and backed up on our servers 的真實性不高,事實上,在連線後資料就已經被刪除 ref

所以,如果你也遇到同樣遭遇,千萬別充值!

回歸到話題,關於系統資料庫由於每天都有做雲端備份,所以接下來要復原其實不是太大的問題。

慘痛之中,還是必須保持鎮定,掌握處理的步調

先開出任務清單,召集幾個 MIS 進行研擬狀況及對策,進行處理

Continue Reading

研發技術團隊如何訂立 KPI 指標及抉擇

研發技術團隊如何訂立 KPI 指標及抉擇

最近公司針對整體專案系統及KPI再進行整頓,因此被上級問到:研發部門團隊是否有適當的KPI指標可以作為參考?

針對這個問題,大致花了一點時間,整理了目前軟體管理的論述及自身想法:

公司經營靠 KPI 管理

公司組織,通常都會透過KPI來讓公司朝向成功事業的方向前進,而不是只單純看軟體開發的狀態。

流程大致是,由公司設定目標,並且由各層組織進行分配建立相對應KPI,公司會依照KPI作為獎懲依據,以利於整體效率管理。

那軟體開發的 KPI 呢?

Continue Reading

小程序發展簡記

小程序未來發展簡記

用完即走概念

以 HTML5 技術進行開發,點開即玩的軟體概念,在微信的小程序, Facebook的 Instant Games, Line 的 Line Quick Game(LQG)都是如出一徹。

但這項軟體開發利多,後來產生了一些變革,原因主要在於蘋果針對支付方面的策略進行調整,導致多提供相關服務的平台,不得不跟著調整或者下架。

Facebook 由於以自家廣告盈利為主,因此在iOS策略還是小心翼翼的方式配合著蘋果策略演進,但 Line Quick Game 在 2018年10月遇過支付的問提,進行停擺一段時間,而微信也難免受到影響,以下進行大致說明:

Continue Reading

Page Keygen 防止使用者同時開啟多視窗瀏覽同一個頁面

Page Keygen 防止使用者同時開啟多視窗瀏覽同一個頁面

在現有維護的專案中,其中一個教學系統提供影片單元,

可以讓學生觀看教學影片,並且紀錄學生在各單元影片的學習進度及完成度。

卻發現有部分學生透過開啟多個瀏覽器,或者跨不同裝置來同時播放教學影片的方式快速累積完成度。

為了防止這種狀況,針對這個問題,設計了 Page keygen 的方式來進行處理:

Continue Reading

淺談領域知識

淺談領域知識

通用知識,通常需要處理的數據通常多屬於非結構化數據,技術挑戰較高。

因此,這裡僅針對領域知識及相關問題進行探討:

Continue Reading

Chrome 將 PWA 網頁添加至桌面

Chrome 將 PWA 網頁添加至桌面

PWA (Progressive Web Apps) 可以讓網頁以 Web App 的形式運用在移動裝置及桌機

以仿原生APP的用戶體驗,可以支援離線操作,推播等APP功能,

以及仍保持 Web 的本質優點(開放,易於訪問,可索引),

這裡要說明如何在 Chrom 要將 PWA 添加到桌面,當作桌面應用軟體來使用

Continue Reading

Laravel asset() 如何支援 http & https

Laravel asset() 如何支援 http & https

在 laravel 使用 asset() 來設定一些 public/ 靜態文檔相關位置

在本機主要使用 http,但是更新到正式機需要ssl 憑證

現在有一個情況是,在使用 laravel asset path ,更新到線上主機仍套用 http

底下說明如何在線上及本地切換 http, https

Continue Reading

電子計算機計量單位

電子計算機計量單位

電腦基本單位

電腦傳輸最基本的單位是 Bit (位元),又稱為 2 進位,由 1 跟 0 所構成。

Continue Reading

敏捷開發 - Scrum 執行 Sprint backlog

Scrum 執行 Sprint backlog

  • 將 Story 轉化成可被執行的 Sprint 清單

    首先,先確認清楚團隊可投入的有效工作時數

Continue Reading

敏捷開發 - Scrum 執行 Artifact,如何將需求明確化

Artifact,Scrum 文件管理

  • Vision
    • 軟體的遠景、願景
  • User Story

將期待及需求明確化

Continue Reading

敏捷開發 - Activity,執行 scrum 活動的流程

Activity,執行 scrum 活動的流程 初期衝刺規劃 - Sprint planning meeting 每個 sprint 開始的第一天,先進行 4-8 小時 plan to sprint 會議 Core Role 成員都需要參與,溝通 逐一將所有 stories point分割成 task 項目(要做什麼,該怎麼做) 估算每一個 task 所需要的時間(單位:小時) 會議結束會產生 Sprint baccklog story (以及 task list) 每日立會 - Daily Scrum 每天15分鐘

Continue Reading

敏捷開發 - Scrum 敏捷團隊的角色與任務

Scrum

Scrum 是一個敏捷專案管理架構:

Continue Reading