WSO2 EI 學習筆記(ㄧ)訊息傳遞架構

WSO2 Enterprise Integrator (原名為 WSO2 ESB) 是一個輕量化、元件導向、基於Java的企業服務匯流排(Enterprise Service Bus ESB)。有關於ESB的入門介紹,可以參考這部說明的淺顯易懂的影片。WSO2 EI是基於 Apache WSO2 ESB可以讓開發者整合各項服務及應用更加有效率極容易,license 授權是基於 APACHE LICENSE, VERSION 2.0 100%的開源而且是免費。此外新版的 WSO2 ESB 也提供能連接例如Salesforce、Google、Microsoft Dynamics 365、Dropbox …..非常眾多雲端服務的能力。此篇文章主要是利用 ESB訊息傳遞架構 來學習及暸解 WSO2 Enterprise Integrator

下圖為WSO2 EI訊息傳遞架構圖 (Messaging Architecture)

當服務的調用端 (Service Consumer) 調用服務時,會經過以下步驟:

1. 訊息先透過傳輸層 (Transport) 進行傳遞

我們在傳遞訊息的時候必須要考慮我們的訊息是由什麼方式傳遞,這就是 Transport 所扮演的角色,Transport支援各種 Protocol例如 HTTP、HTTPS、JMS…. 完整的列表可參考 ESB Transports

2. 建立 Enterprise Integrate mediation engine 能讀取及了解的 XML

依照訊息的內容格式(content type),例如 SOAP、JSON、CSV… 選擇對應 message builder,將訊息從 raw data 轉換成後續 Enterprise Integrate mediation engine 能讀取及了解的 XML。

如果有特定的內容格式是預設不支援的,也可以自己撰寫 builders。可參考 Working with Message Builders and Formatters

3. Quality of Service (QoS)

接下來訊息或透過QoS元件確保的安全性及正確性。例如我們必須先檢查料號格式是否正確,客戶是否存在,客戶編號是否正確等等,或是訊息中的某些欄位是有加密的,我們也必須在此將其解密。詳細說明可參考 Applying Security to a Proxy Service

4. Mediation Engine

WSO2 EI 的 Mediation Engine 核心為 Apache Synapse 。以下列舉幾項重要功能:

4.1 訊息傳遞路徑 (Message Router)

Message Router 的,Message Router會以訊息的內容來決定如何轉遞訊息。我們可以用一般程式語言裡面常用到的 Switch 語法來理解 Message Router。我們會在 Message Router 中去定義或撰寫特定的邏輯,來決定該訊息內容會轉遞到哪個 Service 。

更完整的說明可參考 Message Router

4.2 訊息過濾 (Message filtering)

可以經由 WSO2 EI 中的 Message filtering 功能,將訊息依照所設定的邏輯傳遞至特定的路徑。也可以用程式語言常用到的 if/else 語法來理解這個功能。詳細可參考 Filter mediator

4.3 訊息轉換 (Message transformation )

當傳遞端及接收端有不一樣的資料格式,例如欄位名稱不同,欄位型態不同,欄位數量不同…等等。可參考 Message Translator 來進行轉換處理。 Mediator Engine 中的 PayloadFactory mediatorData Mapper mediator 可用來處理訊息轉換。可以藉有此功能增加或是刪減訊息內容,或是將訊息內容轉換到另一個格式,也可以在這邊進行資料驗證之類的處理。

4.4 豐富化內容 (Content enriching)

可以使用 Enrich Mediator 將訊息結合其他資料來源,以組成接收端需要的資料內容。

5. 建立接收端能讀取及了解的 RAW data

參照上述第2步驟,當訊息要回應到接收端時,訊息自然也需要從WSO2 EI的XML轉換回接收端所使用的 Protocol 及 data format。例如原本 FTP (UDP) 傳送進來的資料,透過步驟2的 message builder轉換為WSO2 EI能了解的XML,處理完之後,再透過本步驟中的 message formatter 轉換成 REST API (HTTP) 送到接收端。

以上 ESB訊息傳遞架構 流程圖說明了當發起了一個服務請求 (Request) 的時候,訊息是如何在 endpoint (服務端點) 間傳遞的。架構流程圖上的所有元件都可透過 WSO2 EI management console 監控及管理。

Meteor + ReactJS 學習筆記(四)部署至 Heroku

如果 Web 應用是要在 Internet 存取的,或是這個應用是要 24 小時存取但是你並不想要維護一台機器,也不想要擔心資安及防火牆的問題。當然你可以選擇到 AWS、Azure、Google上租個主機,然後架設 Meteor,但是這樣花費的成本是比較高的,最快且節省成本的方式是直接使用 PaaS (Platform As A Service) 服務。各大雲端廠商都有 PaaS,比較知名的有 Google App EngineAWSIBM Cloud (從前叫做 Bluemix)、Microsoft AzureRedHat OpenShift。本篇採用的是2011年被Salesforce 所併購的老牌 PaaS 平台 Heroku 來做說明如何將Meteor專案 部署至Heroku

Step 1: 安裝 Heroku CLI (Command Line Interface)

Mac 使用者可使用以下指令安裝

brew tap heroku/brew && brew install heroku

Windows 使用者可點選下面連結下載安裝檔
The Heroku CLI Windows Installer

Step 2: 建立一個 Meteor + ReactJS project

可參考上一篇說明。請自行選擇一個專案名,不要跟 meteor-heroku-demo 重複

meteor create --react meteor-heroku-demo
cd meteor-heroku-demo

Step 3: 將專案目錄進行 git 儲存庫的初始化

git init
git add .
git commit -m "My first commit!"

Step 4: 建立 Heroku instance

heroku login
heroku apps:create <你的專案名>

Step 5: 指定使用 Meteor Buildpack

在 Heroku 上面,執行不同程式語言的專案,有不同的 Buildpack,Buildpack 是用來將建置專案會使用到的相關資源及 Scripts 轉換成 slug,slug 是執行在 Heroku 和行 dyno 之上,裡面包含專案的 source code、相依的模組及資源、特定程式語言的 run time。
以下指令是執定 heroku 使用 admithub/meteor-horse 這個 buildpack,而 admithub/meteor-horse 是由 AdmitHub 所開發,用來生成 meteor 專案的 buildpack

heroku buildpacks:set admithub/meteor-horse

Step 6: 建立 MongoDB

Meteor 的 Server 端是使用 MongoDB,所以必須也在 Heroku 上設定好 Mongo 的環境,Heroku上提供 500MB 免費的 MongoDB ,可透過以下指令設定

heroku addons:create mongolab

或是使用以下指令設定你自己的 MongoDB

heroku config:add MONGO_URL=<your mongodb URL>

Step 7: 設定你的 Meteor app 執行在 Heroku 上

heroku config:add ROOT_URL=https://<你的專案名>.herokuapp.com

Step 8: 確認 heroku 指令是沒問題的

git remote -v
//應該會出現以下回覆
heroku https://git.heroku.com/meteor-heroku-demo.git (fetch)
heroku https://git.heroku.com/meteor-heroku-demo.git (push)

Step 9: 部署至Heroku

git push heroku master

當出現類似以下畫面,代表建置完成

Step 10: 使用瀏覽器確認 App 是否執行

使用瀏覽器打開 https://<你的專案名>.herokuapp.com


Meteor + ReactJS 學習筆記(三)使用 Salesforce Lightning Design System

除了上一篇 Meteor + ReactJS 學習筆記(二)使用 Semantic UI 所介紹的 Semantic UI,也可以選擇 Salesforce 所開發的 Salesforce Lightning Design System   來作為 ReactJS Web 應用中的 UI 元件。要讓 Meteor + ReactJS 搭配使用 Lighting Design System 有兩種方法,一種是直接使用官方的 design-system-react ,另一個方法是使用 Propertybase 這家公司基於官方的 Salesforce Lighting Design System  所開發的   React LDS 。

使用官方 Salesforce Lightning Design System for React

Step 1: 建立一個 Meteor + ReactJS project

meteor create --react meteor-slds-demo
cd meteor-slds-demo

Step 2: 安裝 Salesforce Lightning Design System for React

meteor npm install --save @salesforce-ux/design-system @salesforce/design-system-react 

Step 3: 複製 CSS 檔

cp node_modules/@salesforce-ux/design-system/assets/styles/salesforce-lightning-design-system.min.css client/

Step 4: 複製 Lightning Design System 所需要的圖示及字型檔

mkdir public
cp -r node_modules/@salesforce-ux/design-system/assets/icons public/
cp -r node_modules/@salesforce-ux/design-system/assets/fonts public/

Step 5: 使用方式範例

必須在 client/main.jsx 中引入 salesforce-lightning-design-system.min.css
於 client/main.jsx 一開頭,加入以下程式碼

client/main.jsx
import "./salesforce-lightning-design-system.min.css";

可使用元件及範例可參考官方網站的說明文件
以下是使用 Icon Button 的範例

imports/ui/App.jsx
import React from "react";
import { Button, IconSettings } from "@salesforce/design-system-react";
const App = () => (
<div>
<IconSettings iconPath="/icons">
<Button
iconCategory="utility"
iconName="download"
iconPosition="left"
label="Click Me"
/>
</IconSettings>
</div>
);
export default App;

Step 6: 啟動 meteor 專案

meteor

於瀏覽器瀏覽 http://localhost:3000 會得到以下使用 Button UI 的畫面

使用 Propertybase React Lightning Design System

Step 1: 建立一個 Meteor + ReactJS project

meteor create --react meteor-plds-demo
cd meteor-plds-demo

Propertybase React Lightning Design System 跑在 Meteor 1.8.1 之前的版本會有些問題,所以需要把 Meteor 升級到至少 1.8.2 版,升級的指令如下(目前(2019/09) 1.8.2 還只有 beta 版)

meteor update --release 1.8.2-beta.16

Step 2: 安裝相關模組

meteor npm install --save react-dom moment moment-timezone moment-range
meteor npm install --save react-lds

Step 3: 複製 CSS 檔

cp node_modules/react-lds/react-lds/assets/styles/salesforce-lightning-design-system.min.css client/

Step 4: 複製 Lightning Design System 所需要的圖示及字型檔

mkdir public
cp -r node_modules/react-lds/react-lds/assets/icons public/
cp -r node_modules/react-lds/react-lds/assets/fonts public/

Step 5: 使用方式範例

必須在 client/main.jsx 中引入 salesforce-lightning-design-system.min.css
於 client/main.jsx 一開頭,加入以下程式碼

client/main.jsx
import "./salesforce-lightning-design-system.min.css";

可使用元件及範例可參考官方網站的說明文件
以下是使用 Icon Button 的範例

imports/ui/App.jsx
import React from "react";
import { Button, Badge } from "react-lds";
import AssetPathProvider from "./AssetPathProvider.jsx";
const App = () => (
<div>
<h1>Welcome to Meteor!</h1>
<AssetPathProvider>
<Button icon="download" sprite="utility" title="Hover Me">
Click Me
</Button>
<Badge theme="warning">1234</Badge>
</AssetPathProvider>
</div>
);
export default App;

imports/ui/AssetPathProvider.jsx
import { Component } from "react";
import React from "react";
import PropTypes from "prop-types";
class AssetPathProvider extends Component {
getChildContext() {
return {
assetBasePath: "assets/"
};
}
render() {
const { children } = this.props;
return <div>{children}</div>;
}
}
AssetPathProvider.propTypes = {
children: PropTypes.node.isRequired
};
AssetPathProvider.childContextTypes = {
assetBasePath: PropTypes.string
};
export default AssetPathProvider;

Step 6: 啟動 meteor 專案

meteor

於瀏覽器瀏覽 http://localhost:3000 會得到以下使用 Button UI 的畫面

使用 ES6+ 語法 Node.js 於 AWS Lambda

如果你有某種偏執狂,就是想要用最新版本的 Javascript ,無論是 ES6 ( ES2015 ) ES7 ( ES2016) 寫 node.js,而且計畫寫 Serverless 並且部署到  AWS Lambda  (例如: webhook),那希望這篇文章對你有些幫助。

Step 1: 安裝 node-lambda 執行以下指令,安裝 node-lambda

npm install -g node-lambda

node-lambda 是一套 CLI (command line tool) 工具,可以讓開發者在本地端執行及測試 AWS Lambda 的 node.js 應用程式,並可將其部署到  Amazon Lambda 上 詳細請參考 https://www.npmjs.com/package/node-lambda

Step 2: 下載 node-lambda-babel-template

已經有善心人士把  webpack 及 Babel  加入進了 @motdotla’s node-lambda-template 所做的 node.js 程式模板,讓我們可以使用最新版本的 Javascript 撰寫 node.js 跑在Amazon Lambda 上 執行以下指令,下載 node-lambda-babel-template

curl -o- https://ribjyr1g9l.execute-api.us-east-1.amazonaws.com/nodelambdababeltemplate/latest | bash

將 node-lambda-babel-template 改為自己的專案名 (例:node-lambda-babel-hello-world)

mv node-lambda-babel-template node-lambda-babel-hello-world cd node-lambda-babel-hello-world

 

Step 3: 修改 package.json

先開啟 package.json,將與專案名稱相關的內容,改為自己的專案名。再來由於 node-lambda v0.8 有一個小bug,所以需要將 package.json 中
node-lambda 設定,將版本改為 ^0.11.7

 "node-lambda": "^0.11.7", 

Step 4: 完成 node-lamba setup 執行以下指令

npm install

npm install 會執行 node-lambda setup,下載相關的node_modules並自動產生以下檔案context.json, event.json, .env, and deploy.env 可以參考 https://github.com/motdotla/node-lambda#setup 了解更多內容 打開 .env 檔,修改以下的欄位
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_ROLE_ARN=
AWS_REGION=
並且將  .env 檔中 AWS_DLQ_TARGET_ARN= 這行移除(否則會出問題)

Note: AWS_ENVIRONMENT 與 AWS_HANDLER 定義在 package.json 中的 npm script,並不是在 .env 中定義,所以記得要是要改 handler name (預設是 default) 要去 package.json 中改 關於 AWS Role 的設定可參考 https://docs.aws.amazon.com/lambda/latest/dg/with-s3-example-create-iam-role.html

Step 5: 編寫程式

接下來就可以開始撰寫程式,預設的啟動程式是 index.js,所以開啟 index.js 加入你自己的程式 (當然是使用 ES6/ES7 語法) webpack 會將 index.js 編譯轉碼至 dist/index.js

npm start

可以修改 webpack.config.js 及 .babelrc ,加入額外你需要的 plugins 及  presets. 使用下面指令,測試你的程式

npm test

修改 event.json 加入你要模擬的 event 事件

Step 6: 佈建至 AWS Lambda 使用下面指令,佈建你的程式至 AWS Lambda

npm run deploy

參考: https://github.com/motdotla/node-lambda https://github.com/motdotla/node-lambda-template https://www.npmjs.com/package/node-lambda-babel-template

Meteor + ReactJS 學習筆記(二)使用 Semantic UI

上一篇文章是說明怎麼建立一個基本的 Meteor 專案。本篇文章,的目的是紀錄如何在一個 Meteor+ ReactJS 專案中,使用 Semantic UI來建置 UI 元件

Step 1: 建立一個 Meteor project,前端使用 ReactJS

自 Meteor 1.8.0.2 版開始,meteor 中建立專案的指令 meteor create 新增了一個參數 –react,可以讓開發者很容易的就建立一個前端使用ReactJS 的 Meteor 專案
使用以下指令建立名為 meteor-react-hello 的 Meteor 專案

meteor create --react meteor-react-hello
cd meteor-react-hello

Step 2: 安裝 Semantic UI

一個好的 Web 應用,使用者第一眼看到的介面是很重要的,用傳統 HTML做出來的表單、按鈕、對話框…不免讓人覺得網站很老舊的感覺,所以建議還是去找尋比較好的 UI Framework 來使用。UI Framework的選擇很多,如果懶得自己去找,建議可以使用 Semantic UI

從 Atmosphere 安裝 Semantic UI

meteor add semantic:ui

移除 standard-minifier-css

meteor remove standard-minifier-css

安裝 less 與 juliancwirko:postcss

meteor add less juliancwirko:postcss

安裝 Semantic UI for React 及 postcss-load-config

meteor npm install --save semantic-ui-react postcss-load-config posts

修改 package.json,將 postcss 設定加入 package.json

打開 package.json, 加入以下 json code

"devDependencies": {"autoprefixer": "^6.3.1"},"postcss": {
"plugins": {
"autoprefixer": {
"browsers": ["last 2 versions"]
}
}
}

安裝 autoprefixer NPM package

meteor npm install

建立一個空的 custom.semantic.json 檔

custom.semantic.json 使 Semantic UI 的設定檔,用來設定需要載入哪些 UI 元件,原則上就是要使用的元件設為 true,不使用的設為 false。完整的 custom.semantic.json 範例可參考 https://github.com/SilentCicero/meteor-dapp-builder/blob/master/.custom.semantic.json

輸入以下指令,建立一個空的 custom.semantic.json 檔

mkdir -p ./client/lib/semantic-ui
touch ./client/lib/semantic-ui/custom.semantic.json

打開 custom.semantic.json,複製貼上以下的 json code

{
"definitions": {
"site": true,
"container": true,
"button": true,
"segment": true,
"form": true,
"grid": true,
"header": true,
"image": true,
"message": true,
"flag": true
},
"themes": {
"basic": true,
"default": true
}
}

Step 3:啟動 meteor project

輸入以下指令,啟動 meteor 專案

meteor

Step 4:使用瀏覽器打開 Web 應用

使用以下網址打開 Web 應用
http://localhost:3000

你會看到如下圖畫面。這時候 Click Me 按鈕還是用預設的 HTML button,我們必須在程式碼中加入我們要使用的 Semantic UI Button

Step 6: 修改 Hello.jsx

Hello.jsx 的位址在 imports/ui/Hello.jsx

打開 Hello.jsx,在程式的最上方加入以下程式碼,引入 Button 模塊

import { Button } from 'semantic-ui-react'

將程式中原本

<button onClick={() => this.increment()}>Click Me</button>

將 button 改為 Button
<Button onClick={() => this.increment()}>Click Me</Button>

再次瀏覽  http://localhost:3000 ,按鈕已換成 Semantic UI Button 了

Box Platform API 學習筆記(一) 建立第一個 Box 應用程式

Box 比其他雲端硬碟(例如:Dropbox、GoogleDrive、OneDrive、百度雲)更厲害的地方,就是對於應用程式開發者來說,Box 提供了相當完整的 API 及 SDK,讓企業可將暨有的應用附加上 Box 的很多功能。甚至可以直接利用BOX API打造一個自己專屬的BOX系統及介面。BOX Platform API 能研究的東西實在太多了,這一篇主要先談如何在自己的應用裡面嵌入BOX的功能。 以下是幾種整合BOX功能至應用系統及服務的方式:

  • 獨立應用程式 具有 Box 內容服務的Web應用程式。例如:直接在應用裡面嵌入BOX介面、直接調取BOX檔案預覽功能預覽應用程式裡的檔案,或啟用及控制使用者權限及共同作業功能。
  • 企業整合功能 使用程式與後端整合功能來擴展你的 Box 功能。範例整合功能包含使用者、群組,和事件管理功能。
  • 合作夥伴整合功能 允許使用者在您的協力廠商應用程式中存取、編輯與儲存 Box 內容,並提供如電子簽名或專案管理服務等功能。

試想如果要在自己的一個應用系統裡面嵌入類似 Box 或 DropBox 這樣雲端硬碟功能,會是一件多蠻複雜的工程。這樣的系統至少要有以下幾個功能:

  1. 目錄結構
  2. 權限管控
  3. 檔案線上預覽
  4. 上傳及下載檔案

每個功能,光是要把它實作出來,就不知道要花多久的時間,所以 Box 有提供了現成的 Box UI 元件可供開發人員直接調用使用。 本文先以獨立Web應用程式作為一個開始,建立你第一個Box應用。最終你可以瞭解如何將Box的功能及UI元件直接嵌入到你的Web應用程式中:

Step 1: 建立 Box 應用程式

要開始開發BOX應用,首先要先登入 Box 帳號 ,要是沒有 Box 帳號,可以依照註冊免費box帳號的說明,註冊一個免費的 Box 帳號,然後點選 Box Developers 網站 右上方的 Console 連結,登入 Box 開發人員主控台 接下來進入開發人員主控台後,點選建立新應用程式 選擇自訂應用程式 選擇使用 OAuth 2.0 搭配 JWT 方式進行驗證 為應用程式取一個名字,按下建立應用程式 應用程式建立好之後。畫面上會出現如下圖的畫面。 你可以直接使用 curl 指令( Mac有內建,Windows要另外裝)測試 Box API 是否可以運作。要注意 curl 指令中的 Authorization: Bearer [憑證] ,憑證中的32字元字串是開發人員專用的暫時憑證,60分鐘就會到期。在開發階段,你可以先不用實作 OAuth 2.0 JWT 的 SSO ,只要先用暫時憑證,就可以測試應用程式了。暫時憑證的取得方式會在下一步驟Step 2說明。 接下來,點選檢視您的應用程式,進入應用程式組態的畫面


Step 2: 設定 Box 應用程式組態

進入應用程式組態設定畫面後,會看到開發人員憑證的欄位,現在可以 Copy 下來,或等下再回來 Copy 讓你的應用程式使用 到畫面下方,在CORS 網域欄位中,填入你的 Web Server 網域名稱,若是要先在本機測試,填入 http://localhost 再來按下儲存變更


Step 3: 撰寫HTML code

若是你使用 Mac 內建的 Apache server 做測試,先到 Apache 根目錄 /Library/WebServer/Documents/ 建立一個新的 HTML 檔 (例如: boxdemo.html),於 boxdemo.html 中使用下面的 html code

<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8"></meta>

<title>Box Content Explorer Demo</title>

<!-- polyfill.io only loads the polyfills your browser needs -->
<script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=es6,Intl"></script>
<!-- Latest version of the explorer css for your locale -->

<link rel="stylesheet" href="https://cdn01.boxcdn.net/platform/elements/1.1.0/en-US/explorer.css"></link>
</head>

<body>
<div class="container" style="height:600px"></div>

<!-- Latest version of the explorer js for your locale -->
<script src="https://cdn01.boxcdn.net/platform/elements/1.1.0/en-US/explorer.js"></script>

<script>
var folderId = '0'; var accessToken = 'xxxxxxxxxxx';
var contentExplorer = new Box.ContentExplorer();
contentExplorer.show(folderId, accessToken, { container: '.container' });
</script>
</body>
</html>

 

要注意 html code 第19行中的 accessToken,要使用 Step 2中你自己的開發憑證。通常要是最後網頁跑不出來,不是因為憑證有問題(要記得,憑證效期只有60分鐘,要記得去取得新的憑證),就是因為 CORS 網域沒設定對


Step 4:完成

使用瀏覽器,打開 Step 3所製作的網頁,可以看到Box UI元件直接嵌入你的Web應用程式中。網頁中直接列出你的Box account中,根目錄的所有檔案。你也可以直接瀏覽檔案,或是對檔案進行任何你有權限進行的處理。 如果進一步,你想修改畫面左上方的 Logo,可參考這篇文件說明


Box有提供幾種UI元件可供開發者嵌入至自己的應用中,提供使用者在使用你應用的同時也可以同時享有使用Box中檔案及資料夾的使用體驗。 Box提供給應用程式開發人員的UI元件如下:

  • Box Content Preview – 檔案Viewer,開發者可利用此元件,提供給使用者多達130種檔案(例如:Microsoft Office、PDF、Adobe Photoshop、Adobe AI、各種圖片檔及影像檔)線上的預覽功能
  • Box Content Pickers – 讓使用者可以選擇其Box account中特定的檔案或是資料夾
  • Box Content Explorer – 讓使用者可以搜尋及瀏覽檔案及資料夾
  • Box Content Uploader – 讓使用者可以直接上傳檔案或使用drag-and-drop上傳檔案

Box UI 元件可以單獨使用,也可以合併再一起使用。例如上傳檔案後在線上預覽檔案。 詳細的Box UI Elements的說明文件及範例可以參考 https://developer.box.com/v2.0/docs/box-ui-elements 也可參考 github https://github.com/box/box-ui-elements-demo or https://github.com/box/box-content-preview-demo

Meteor + ReactJS 學習筆記(一) Hello World

Meteor  是 Full-Stack Development (全端開發) 的 JavaScript 平台,用來開發 Web 或是 Mobile 應用。前端主要可使用 React、Blaze 或 Angular Javascript framework,後端是 Node.js。 Meteor 已經直接將 MongoDB 整合在平台內了,也包含打包工具 (build tool) 。相信如果要做 Full-Stack Development , Meteor 會是一個很好的選擇。本文主要是說明如何 Meteor + ReactJS 完成 Hello World 範例。

Step 1: Install Meteor

用 Windows 可以先安裝  Chocolatey,然後打開命令提示字元(太久沒用 Windows 了,覺得命令提示字元這名字取的好奇怪),執行以下指令

choco install meteor

如果是使用 Linux or Mac,在 terminal 中輸入以下指令:

 curl https://install.meteor.com/ | sh 

等待安裝完畢:

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed
100 7786 0 7786 0 0 3741 0 --:--:-- 0:00:02 --:--:-- 3743 Downloading Meteor distribution
######################################################################## 100.0% 

 

Step 2: Create Meteor project

輸入以下指令建立一個 Meteor project

 meteor create helloworld-meteor

 

Step 3: 啟動 Meteor project

切換至 meteor project 目錄,輸入 meteor 即可啟動 project

 cd helloworld-meteor meteor 
用瀏覽器打開 http://localhost:3000/ ,可以看到 Meteor 的基礎範例已經順利執行了
Meteor project 主要會有兩部分的程式,client 端的程式會放在 client 目錄下,server 端的程式會放在 server 附錄下,基本檔案如下

client/main.js # client 端是從這支Javascript開始執行的
client/main.html # 若是使用 React, main.html 裡面基本上就只會放一個 div element 供 React DOM使用
client/main.css # a CSS file to define your app's styles
server/main.js # server 端是從這支Javascript開始執行
package.json # a control file for installing NPM packages
package-lock.json # Describes the NPM dependency tree
.meteor # internal Meteor files
.gitignore # a control file for git 

 

Step 4: 安裝 React modules

原本執行 Meteor project 的 terminal (or 視窗) 不要關閉,另外打開一個 terminal,一樣回到 meteor project 所在的目錄,執行以下指令安裝 React 相關 modules

 meteor npm install --save react react-dom 

 

Step 5: 修改 main.js and main.html

main.html

<head>
<meta charset="utf-8">
<title>Hello World</title>
</head>
<body>
<div id="react-root"></div>
</body>

main.js

import React from 'react'; 
import { Meteor } from 'meteor/meteor';
import { render } from 'react-dom';
Meteor.startup(() => render("<div>Hello World</div>" , document.getElementById('react-root')));

 

Step 6: Hello World 完成

等待 meteor project refreshing 結束

 => App running at: http://localhost:3000/ 
=> Client modified -- refreshing

回到瀏覽器,不需要 reload 可以看到 Hello World 顯示

Meteor HelloWorld

10分鐘完成你的第一支 Watson Workspace bot

IBM Watson Workspace 是一個類似 Slack or Microsoft Team 的「團隊溝通平台」+「即時通訊軟體」。它的底層稱為 Watson Works Services,已經內建IBM Watson  NLU (Natural Language Understanding 自然語言理解) 及 IBM Watson NLC  (Natual Language Classfier 自然語言分類)。簡單來說,在 Watson Workspace 的每句對話的背後,到底這句話是一個命令動作 (ex: 你需要於星期五前完成這個專案),或是是個問句 (ex: 你知道哪裡可以找到簡報檔嗎?),或是這句話裡面有談到關於地域、食物、天氣、情緒、人名……..,Watson Workspace都已經會有這些資料可以直皆提供給開發 Watson Workspace bot 的 developer 。

本文說明如何使用 node.js 從 0 打造一個最簡單的 Watson Workspace bot,傳送訊息到 Watson Workspace 中。知道如何傳送訊息到 Watson Workspace 中之後,能應用範圍就會很廣了,例如可以建立一個客服的後台系統,把前台不管來自網站的 chat bot 或是 line chat bot 的訊息都拋轉給後台的客服人員,客服人員可以使用  Watson Workspace 處理從不同管道進來的訊息,決定在前台 chat bot 無法自動處理客戶訊息的時候,人工介入來幫客戶處理問題。

Step 1: 註冊或登入 Watson Workspace
若還沒有 Watson Workspace 帳號,可於註冊一個免費帳號來玩玩

2018-04-18_10-59-29

開始試用 Watson Workspace

接下來你可以下載 Desktop 版的 Watson Workspace 使用,也可以直接使用 Web 版的。

Step 2: 建立一個 Space
如果已經有Space了,可以跳過這個步驟。
進入 Watson Workspace 後,點選畫面中的 Spaces 旁的 + icon,建立一個 Space

Step 3: 建立一個 Watson Work Services App
進入 Watson Work Services App console

2018-04-18_15-24-32

打開 Watson Work Services Apps 管理介面

建立一個新的 App

為你的 Bot 取個名字,為避免跟別人的Bot名字重複,建議在 App Name 最後加入你的名字的縮寫之類的
建立好之後,把 App ID 及 App secret 記下來(很重要,因為App secret 只會出現一次)
2018-04-18_11-17-21

Step 4: 將 App 加入 Space 中
到 Space Settings 中 把 Step 2 中建立的 App 加入你的 Space

Step 5: 複製 Space ID
回到 Space Settings 中,選擇 Audio & Video,將畫面中 Meeting Link 的 URL,meeting/ 之後的那段編碼 copy 下來,這個就是每個 Space 的 unique ID,將它記錄起來
SpaceID

Step 6: 建立 nodejs project
建立一個新的Folder

mkdir wws-bot-nodejs
cd wws-bot-nodejs

初始化 nodejs project
npm inits

這邊我是使用 watsonworkspace-sdk,這不是官方的 sdk,但是因為 Watson Works Services 的 API 呼叫大多數是透過GraphQL,這個非官方的 sdk 把呼叫 GrapQL 這段都封裝起來了,所以使用上會簡單非常的多,程式也會簡潔易懂多
watsonworkspace-sdk 除了能傳送訊息之外,也可以處理接收到的訊息,詳細可以參考 watsonworkspace-sdk
安裝 watsonworkspace-sdk
npm install watsonworkspace-sdk —save

建立 index.js
source code 如下
const wwsdk = require('watsonworkspace-sdk')
const ww = new wwsdk("<Step 2中的 APP ID>","<Step 2中的 APP secret>")
const msg = "Hello World!!"
ww.authenticate()
.then(token =>; {
ww.sendMessage('<Step 5中的 Space ID>', msg)
})

Step 7: 測試
執行

node .

回到 Watson Workspace,可以看到訊息已經傳送到 Space 中了。 第一支 Watson Workspace bot 完成!
Watson Workspace bot

如何申請免費SSL憑證讓NGINX 加入 HTTPS 支援

SSL for Free 可以申請 免費SSL憑證 ,唯一缺點就是效期只有90 天,所以每90天要回到網站上重新 renew。不過效期快到之前,會有郵件通知就是了。

Step 1: Create Free SSL Certificate 建立 免費SSL憑證

首先先到 https://www.sslforfree.com/,輸入你要申請 免費SSL憑證 的網址,再按下 Create Free SSL Certificate

SSL-For-Free-免費SSL憑證

Step 2: 確認 Domain 擁有權

接下來的選澤 Manual Verification 透過 DNS 手動確認你擁有這個 Domain

2018-04-13_18-11-44

1. 點選Manual Verification

2018-04-13_20-46-18

2. 接下來點選 Manual Verify Domain

Step 3:Update DNS Records

接下來畫面會顯示 Update DNS Records,在Update DNS Records步驟2中,會顯示類似下面的說明

2.  Add the following TXT records below to the DNS server for each domain (In the Time to Live (TTL) field, enter 1):
1. Add TXT record with the name/host _acme-challenge.www.xxxxx.me with the value b7-sYV7EWFyJxxxxxxKc7wq3RtRaGz6-SIgilDA
2. Add TXT record with the name/host _acme-challenge.yourdomain.com with the value 2rnrUcbVCoUJxxxxxIGycNd_cpUGee8kM

_acme-challenge.www.yourdomain.com 是到時候要加到DNS TXT record中的 name/host值 b7-sYV7EWFyJxxxxxxKc7wq3RtRaGz6-SIgilDA 是 TXT record 的 value 值

Step 4: 於DNS中加入TXT records

這邊以 GoDaddy 為例,在GoDaddy DNS管理工具裡面,按”加入“新建一筆 DNS record
類型選擇 TXT  主機欄位內填入 Step 3 中 TXT name/host 值 (只要填 Domain 前的值,例如 _acme-challenge.www),TXT 值 填入Step 3 中 TXT value值,TTL 選擇自訂,秒數選擇 600
2018-04-13_21-19-27
然後按下”儲存“(如果畫面上有出現任何錯誤,可以不用管它)
再重複一次 Step4,把 Step 3中的第二筆 TXT record 也加到 DNS 中
 

Step 5:驗證TXT record

回到 SSLforFree 網站,大概等個幾分鐘後,點選  Verify _acme-challenge.www.yourdomain.com 連結,驗證TXT record
2018-04-13_21-32-43
這邊要注意的是,設定文件裡面建議TTL是設定為 1 秒,但GoDaddy DNS的TTL最低只能設定 600 秒,所以設定完之後,可能不能馬上進行驗證,要等個幾分鐘再進行驗證
畫面應該會出現如下(若有 Warning 可以不要理它)

TXT Record(s) Found. Make sure the value matches the value specified by the instruction for with the domain hostname:

Step 6: 建立 SSL Certificate 檔

點選 Download SSL Certificate
在本機上新建一個檔案命名為 <yourdomain.com>.crt (ex: coryma.com.crt),將畫面上 Certificate: 內的值複製貼上到 <yourdomain.com>.crt
在本機上新建一個檔案命名為 <yourdomain.com>.key (ex: coryma.com.key),將畫面上 Private Key: 內的值複製貼上到 <yourdomain.com>.key
在本機上新建一個檔案命名為 <yourdomain.com>.crt (ex: coryma.com.ca-bundle),將畫面上CA Bundle 內的值複製貼上到 <yourdomain.com>.ca-bundle

Step 7:建立 Intermediate/chain certificate

用任一種文字編輯器把 Step 6 中的 <yourdomain.com>.crt  及 <yourdomain.com>.ca-bundle 合併為  <yourdomain.com>_chain.crt

或是在 Mac or Linux 中可以直接使用以下指令

cat <yourdomain.com>.crt <yourdomain.com>.ca-bundle >> <yourdomain.com>_chain.crt 

Step 8:將 <yourdomain.com>_chain.crt  及 <yourdomain.com>.key 放置到 nginx server 上

例:
放置於 nginx server 上
/etc/ssl/certs/<yourdomain.com>_chain.crt
/etc/ssl/private/<yourdomain.com>.key

Step 7: 於 nginx server 上建立 ssl.conf

於 /etc/nginx/conf.d 建立 ssl.conf

server {
listen 443 ;
server_name <your domain>;
ssl_certificate /etc/ssl/certs/<yourdomain.com>_chain.crt ;
ssl_certificate_key /etc/ssl/private/<yourdomain.com>.key ;
}

Step 8: 重啟 nginx server

註冊免費的Box雲端硬碟帳號 10GB 空間

講到雲端儲存空間,一般人比較常聽過的應該是例如:Dropbox、GoogleDrive、OneDrive、百度雲,應該比較少聽過box這家公司。因為box並不是聚焦在一般的使用者,box比較多的客戶是企業用戶。Fortune 500強裡面,64%都是他的客戶。這篇就先談談如何 註冊免費box帳號 。

註冊免費box帳號
box最強大的是他的內容權限控管及資安稽核,還有另外一個部分,就是box提供完整的API,供開發者可將自己的應用程式整合box的功能,或是直接透過API,針對box內的檔案或資料夾進行操作,提供非常大的整合彈性。

box免費版及box企業版的比較
 功能 免費帳號  企業帳號
檔案上傳限制
250MB
15GB (default 5GB)
儲存空間
10GB
無上限
針對分享連結設定密碼限制
支援
支援
後台管理
支援
存取紀錄
提供完整的下載及預覽記錄
文件權限控管
七層
七層
版本紀錄
100個版本
註冊免費box帳號

若需要測試企業版的功能,註冊企業版的免費試用帳號可以到這個網站填一下公司資料,然後就會有專人跟你聯絡
若是只是要註冊個人要測試使用的box免費帳號,可以先到box網站.,點選右上角的 註冊  (Sign Up)
選擇 Individual Plan 然後在點擊 Sign Up  (如下圖)

填寫註冊資訊後,點擊提交
檢查郵件信箱裡面,有沒有一封來自 noreply@box.com 的信件.
如果等待超過五分鐘以上,沒收到信,可能要看看是不是被誤判成垃圾郵件了.
直接點選該封信裡面的驗證電子郵件
輸入帳號及密碼,點登入
直接點選畫面最下方的略過此程序直接前往 Box
這樣免費的box帳號就可以開始使用了