2019年11月11日

LISP

Lisp 就是 LISt Processing,誕生於 1958 年 John McCarthy 的設計,是目前年紀第二老的高階程式語言,最老的 Fortran 比它早一年,擅長資料處理。目前 LISP 已經衍生出許多方言,但最通用的是 Common LispScheme (目前比較常用的 scheme compiler 是 chicken)。現今流行的高階程式語言,都有 Lisp 功能的影子,在 1958 年 John McCarthy 設計的 Lisp,其提出的設計概念,普遍用在許多高階程式語言中。

Lisp 一開始只是數學理論,跟 Fortran 不同,Fortran 一開始就是以程式語言的概念設計出來的,也就是說,Fortran 是適應了計算機,刻意設計出來的程式語言。

Lisp 一開始就提出了一些概念,其中有很多概念,已經是大家習慣且接受的概念

  1. 條件結構 if-then-else
  2. 遞迴函數
  3. Functional language,函數也是一種資料型別,可當作參數傳入另一個function,function 也可以回傳 function
  4. 動態資料型別,Lisp 的變數都是 pointer,指向的值有資料型別的分別,但變數本身,只是儲存 pointer
  5. 自動記憶體管理、垃圾回收機制
  6. expression 與 statement,Lisp 程式是許多 expression 的集合,但 fortran 是由 expression 以及 statement 組成,expression 是用來運算,statement 用來控制程式執行的順序
  7. Symbol y 資料型別,這是一種指向 hash 的 string,比較 symbol 時,就只要比較 pointer 是不是一樣就好了,不用做字串比較
  8. 程式用符號跟常數組成 tree structure
  9. REPL: Read-Eval-Print Loop

LISP 並不是一個單純的程式語言,而是一個程式語言家族,一開始發展的 LISP 現在已經不存在了,而是衍生為其他不同的方言,繼續存活下去,這些方言的共通點只有語法,也就是 S expression,s-expression 既可當作程式,也可以當作資料。

scheme 跟 common lisp 的差異是, scheme 比較簡潔,這表示在不同 scheme implementation 之間,會遇到不相容的問題,這不完全是缺點,學習時,會比較瞭解 LISP 的核心概念。Common Lisp 則是以實用為主,目前已經有一個龐大的生態系統,如果要運用在實際的商業環境,要選擇用 Common Lisp,選用 Common Lisp 能夠比較容易切換到不同的實作上。

一般建議是先了解 scheme 語法,入門後,再轉換到 Common Lisp

References

為什麼Lisp語言如此先進

Chicken

ANSI Common LISP 中文

2019年11月4日

BPMN: Business Process Model and Notation

BPM(Business Process Modeling) 是將企業運作流程建模,標準化,讓系統整合的層次由 IT 進入商業領域。關於 BPM 的標準很多:

  • OASIS 的WS-BPEL(Business Process Execution Language for Web Services)
  • BPMI協會的BPML(Business Process Modeling Language)和BPMN(Business Process Modeling Notation)
  • W3C的WS-CDL(Web Services Choreography Description Language)
  • WfMC協會的XPDL(XML Process Definition Language)
  • OMG的MDA(Model-Driven Architecture)

業務流程模型和標記法(BPMN: Business Process Model and Notation)是以圖形及符號描述業務流程的示意圖。最初由 BPMI, Business Process Management Initiative 發展,後來與 OMG 合併,2011/1 發布 BPMN 2.0 版。

BPMN 跟 UML 的 Activity Diagram 及傳統的 Flow Chart 很接近,可將特定的業務流程圖形化,讓大家能快速了解複雜的業務流程。BPMN 有圖形化標記規範,同時可轉換為 BPEL (Business Process Execution Language),這是一種描述業務流程的 XML。

BPMN

BPMN 僅限於支援業務流程方面的 Modeling,以下這些項目,不屬於 BPMN 的範圍:

  • 組織架構
  • 職能分析
  • 資料建模
基本要素
  1. Flow Object
    Events, Activities, Gateways
  2. Connecting Object
    Sequence Flow, Message Flow, Association
  3. Swimlane Pool, Lane
  4. Artifact Data Object, Group, Annotation

NPMN 允許在 BPD 中建立自訂的 Flow Object 及 Artifact。

Flow Object
  1. Events
    事件以圓環表示,代表發生的事件,圓環內可加上該事件的圖示,例如信封代表訊息,時鐘代表時間。

    事件也分為 catching / throwing 兩種,catching 是捕抓輸入的事件,因而開始一個事件處理流程,throwing 是流程結束,往外丟出結束事件。

    • Start Event: 流程的觸發,是空心的圓環
    • Intermediate Event: 在事件開始與結束之間,雙線圓環,可以是 catching/throwing event
    • End Event: 流程結束,是實心圓環,只能 throwing
  2. Activity
    以圓角矩形表示,描述要做的工作內容。

    • Task: task 表示一個工作單元,不能被分解為深層次的業務流程細節
    • Sub-Process: 用來隱藏/顯示深層業務流程細節,隱藏時,用 + 標記這是子流程

    • Transaction: 這是一種子流程,裡面包含的所有活動,都必須要全部完成,結束後,才算是完成工作,只要有失敗,就必須要 rollback。用雙線環繞標記。

  3. Gateway
    用菱形表示,基於描述的條件,決定路徑的分流或合併

Connecting Object

Flow Object 是以 Connecting Object 互相連接,Connecting Object 有三種:

  1. Sequence Flow
    實心線及箭頭表示,描述活動進行的順序,可在開始端帶有符號,增加一個小菱形,變成 conditional flow,或是以對角斜線,標記發自活動,帶有條件的 default flow

    由上而下分別是 Normal Flow, Conditional Flow, Default Flow

  2. Message Flow
    以空心圓圈開始,最後是空心的箭頭,用來表示有訊息跨過 pool 邊界,Message Flow 不能用在同一個 Pool 裡面連接活動或事件

  3. Association
    用點狀的線表示的箭頭,用來建立 artifact 到 flow object 的關係,可使用空心箭頭,表示方向性,指向 artifact 表示結果,源自 artifact 表示輸入,兩者都有,表示有讀取跟更新。

Swimlane

在視圖上用來分類的機制,有兩種類型

  1. Pool
    表示流程中的主要參與者,通常用來區分不同的組織,一個 Pool 可有多個 Lane,當 Pool 展開是大矩形,裡面有流程細節,收合後是一個空的矩形。

  2. Lane
    依照工作職能,或是角色分類,繪製成矩形,裡面包含 Flow Object, Connecting Object, Artifact

Artifact

在 Pool 裡面,增加更多資訊,增加視圖可讀性。預設 Artifact 有三種

  1. Data Object
    在活動中需要或產生的資料

  2. Group
    虛線園角矩形,可將不同的活動分組

  3. Annotation
    註解,增加可讀性

Example

以下是一個議題討論流程的實例,花7天進行 email 討論,結束的1天前,會發送 deadline 警告,另外在過程中,會協調 conf call 時間進行討論。討論後,會評估此次討論過程的有效性,最終決定討論的結果是否有效。

References

BUSINESS PROCESS MODEL AND NOTATION SPECIFICATION VERSION 2.0 spec

BPM提升營運的智慧

業務流程模型和標記法

BPMN 2.0 by Example: non-normative OMG document with BPMN 2.0 examples)

BPMN符號與BPMN的關係

BPMN規範中的三種視圖

業務流程建模標注(BPMN)詳細介紹

BPMN