2017年12月31日 星期日

[Data Science 到底是什麼從一個完全外行角度來看][13]Data的運用 - 介紹篇

image
圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/https://pixabay.com/en/math-blackboard-education-classroom-1547018/

還記得之前提到過,如果Data是原油那麼Data Science就是提煉成石油的技術

到目前為止,解決了Data的儲存和運算的部分。但是就算可以處理Big Data,該怎麼處理?如何把處理結果變成有意義或者可以動作的策略

如果說,Big Data的儲存和運算在武俠小說裡面屬於內功的話那麼Data Process Workflow(資料處理流程)就同等於招式一樣。

沒有足夠的內力(Data),招式在精妙也沒有用(就像瞎子摸象,就算摸的技巧再好,也因為局限的關係摸不到全貌,一定會有偏頗)。

反過來說,如果內力深厚,但是不會招式,那麼同等於英雄無用武之地。

在這個系列的接下來將會著重在介紹Data Processing的部分。這篇將會是概觀介紹。


2017年12月30日 星期六

[Data Science 到底是什麼從一個完全外行角度來看][12]Hadoop總結(下篇) - 一切才剛剛開始

image
圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/https://pixabay.com/en/math-blackboard-education-classroom-1547018/

上一篇(11]Hadoop總結(上篇) - 一切才剛剛開始)介紹了Hadoop的Ecosystem之後,了解到有很多package建立在Hadoop上面。

不過一個問題會浮現出來,這門多package,怎麼讓他們互相溝通沒有問題?畢竟版本和版本之間很有可能會有相容性問題。

這就是Hadoop Distribution的作用,一些整理好包成一包的Hadoop Ecosystem,有些distribution還包括一些管理界面讓整個管理變得更加簡單。


[Data Science 到底是什麼從一個完全外行角度來看][11]Hadoop總結(上篇)–Ecosystem介紹

image
圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/https://pixabay.com/en/math-blackboard-education-classroom-1547018/

在上一篇([10]用.Net Core跑Hadoop MapReduce - Streaming介紹)透過Hadoop Streaming的幫助,改成用.Net Core 2.0的程式作為MapReduce的邏輯,基本上這個系列裡面的Hadoop介紹也要告一個段落。

這一篇,將會快速回顧到目前為止所了解到關於Hadoop的部分,再來介紹Hadoop Ecosystem,和3個比較常見的package介紹。


[Data Science 到底是什麼從一個完全外行角度來看][10]用.Net Core跑Hadoop MapReduce - Streaming介紹

image
圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/https://pixabay.com/en/math-blackboard-education-classroom-1547018/

上一篇([09]了解Hadoop裡的MapReduce到底是什麼?)了解了什麼是MapReduce,並且了解了怎麼用Java寫一個MapReduce的Hello World程式:WordCount。

馬上會想到的一個問題是,難道只有Java可以寫MapReduce的程式嗎?

這篇將會介紹Hadoop的Streaming服務,讓任何語言只要透過Standard Input和Standard Output就可以寫出MapReduce程式。 將會使用最熟悉的語言,.Net Core來完成這個事情。

在這篇也會介紹另外一種測試Hadoop的方式,使用Docker來測試。


2017年12月25日 星期一

[Data Science 到底是什麼從一個完全外行角度來看][07]更深入看看Hadoop裡面的YARN和HDFS

image
圖片來源: https://pixabay.com/en/books-spine-colors-pastel-1099067/https://pixabay.com/en/math-blackboard-education-classroom-1547018/

在上一篇([06]建立Hadoop環境 -下篇)把hadoop pseudo-distributed mode整個建立了起來,在這個過程中有透過 jps看到啟動的時候有5個process:

  1. NameNode
  2. SecondaryNameNode
  3. ResourceManager
  4. NodeManager
  5. DataNode

這些process分別是yarn和HDFS執行起來的process,其中Master會有前 3個而slave有後 2個

這篇將會對於這幾個問題做一些介紹。

這篇提到的架構屬於Hadoop 2.x 版本的內容,Hadoop 3 之後有所變動。

2017年12月23日 星期六
2017年12月22日 星期五

[Data Science 到底是什麼從一個完全外行角度來看][04]Hadoop是什麼?

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://pixabay.com/en/math-blackboard-education-classroom-1547018/

在上一篇([03]Big Data到底是有多Big?)了解到了Big Data的3個V,也就是量、增長速度和多元格式的挑戰,這篇來看看讓管理一切變得有可能的軟體:Hadoop。

這篇將介紹Hadoop的由來,為什麼這麼重要,不同版本之間的差異,和基本架構。


2017年12月21日 星期四
2017年12月20日 星期三

[Data Science 到底是什麼從一個完全外行角度來看][02]Data Science 是什麼?

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://pixabay.com/en/math-blackboard-education-classroom-1547018/

如果說資料(data)和石油一樣是最有價值的資源,那麼Data Science就同等於從原油提煉出石油的技術。

上篇([01]開篇)了解了整個系列的內容之後,這篇來了解一下 Data Science 到底是什麼?需要什麼技能/技術?和到底怎麼把data提煉出來變成可以用來做使用的資訊(變成石油)。


2017年12月19日 星期二

[Data Science 到底是什麼從一個完全外行角度來看][01]開篇

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://pixabay.com/en/math-blackboard-education-classroom-1547018/

又到了新的一屆鐵人賽,這次和之前不一樣的是,多了團隊模式。然後,不知不覺就組成了一個團隊.... 失敗的話應該會永遠被釘死吧。

所以,為了不被釘死,要好好努力來寫啦,已經被警告,別像去年那樣,待補,結果和卡債一樣,永遠翻不了生(雖然到目前為止還在努力的補當中)。

那今年的主題是什麼呢?不是新的程式環境(OS: .Net core哪去了?),不是延伸去年內容打造更完整的建制環境(OS: 整合docker的DevOps哪去了?),而是一個完全不熟悉的領域,Data Science(資料科學)。 (如果你是工程師,那麼別錯過 1/6 在台大的 Study4.TW Study4Love - 與大師對談

今年的題目是:Data Science 到底是什麼 - 從一個完全外行角度來看


同步發佈於第九屆 2018iT 邦幫忙鐵人賽:https://ithelp.ithome.com.tw/articles/10192297


2017年12月16日 星期六

[從.Net工程師的角度來看DevOps 25]在Visual Studio Team Services執行Build Script和CI Server總結

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://blog.xebialabs.com/2016/03/21/essential-devops-terms/

在上一篇([從.Net工程師的角度來看DevOps 24]免費build私人Repo的CI Service - Visual Studio Team Service介紹)了解了如何用Visual Studio Team Services(VSTS)的內建Template來build範例專案;在設定的過程,其實沒辦法直接使用內建template,會需要調整一些參數。

這些調整的內容和AppVeyor要調整的非常不一樣,造成了如果要換CI Server會花一些時間在這些瑣碎的細節上面。

這篇將會看看,如果要把VSTS改成用build script來build專案,會需要做些什麼。


2017年12月13日 星期三

[從.Net工程師的角度來看DevOps 24]免費build私人Repo的CI Service - Visual Studio Team Service介紹

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://blog.xebialabs.com/2016/03/21/essential-devops-terms/

在上一篇([從.Net工程師的角度來看DevOps 23]在AppVeyor執行Build Script - 整合build資訊到github)介紹完了如何用AppVeyor執行我們定義的build script,不過有時候我們有私人的repo也希望做CI,這個時候免費版本的AppVeyor就不夠了。

這邊將會介紹另外一個能夠build私人repo,由Microsoft提供的免費CI服務,Visual Studio Team Service(VSTS)。

這篇先看內建VSTS所提供的方式來建制範例專案,在下篇在改成執行我們的build script。

題外話,假設之前已經有VSTS帳號,想要移動Region到East Asia,可以參考這篇:[VSTS]如何調整Visual Studio Team Service的區域(Region)

[從.Net工程師的角度來看DevOps 23]在AppVeyor執行Build Script - 整合build資訊到github

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://blog.xebialabs.com/2016/03/21/essential-devops-terms/

在上一篇([從.Net工程師的角度來看DevOps 22]免費的CI Server - AppVeyor介紹)了解到了如何把專案關聯到AppVeyor裡面,然後可以很簡單利用AppVeyor裡面內建的一些設定來build專案。

在這篇,我們將完全拋棄AppVeyor的內建機制,改成用我們建立出來的build script來執行。

有自己的build script不止在設定上變得更簡單,local跑的和CI Server跑的會一樣,並且如果要整合到另外一個CI Server也不會有什麼問題。


2017年12月12日 星期二

[從.Net工程師的角度來看DevOps 22]免費的CI Server - AppVeyor介紹

image
圖片來源:https://pixabay.com/en/books-spine-colors-pastel-1099067/ 和 https://blog.xebialabs.com/2016/03/21/essential-devops-terms/

在上一篇([從.Net工程師的角度來看DevOps 21]Build階段的總結和重構 - Build Server介紹)對我們的build script在做了一次重構之後,這篇我們來看看一個佛心的CI Server:Appveyor。

CI Server不是什麼新的概念,一直以來有一些免費的CI Server可以使用,例如Travis CI - 不過多是Linux base的Server。 但是由於Windows版權的問題,.Net沒有什麼免費(至少從Open Source專案角度來看)的CI Server 可以用,直到AppVeyor的出現,和後來的Visual Studio Team Service。

在這篇,將會簡單介紹AppVeyor,並且如何把我們的專案準備好,在下一篇在介紹如何整合AppVeryor執行我們的build script。


2017年12月11日 星期一

[VSTS]如何調整Visual Studio Team Service的區域(Region)

image
圖片來源:https://pixabay.com/en/key-tag-security-label-symbol-2114047/

Visual Studio Team Services (VSTS) 可以簡單理解成為雲端版的Team Foundation Server (TFS),而且微軟很佛心的讓5人以下團隊免費使用。

在建立VSTS的時候,有個選項是VSTS的資料要放在哪個區域(Region)。早期的時候,只有在美國,現在的話在東亞(East Asia)也有辦法建立了。

不過如果是早期建立在美國的VSTS是否能夠移動到East Asia呢?這篇將會介紹如何透過寫VSTS的support ticket來達到這個轉換。


2017年12月10日 星期日

[faq]解決C#呼叫有ssl憑證問題的網站出現遠端憑證是無效的錯誤問題

image
圖片來源:https://pixabay.com/en/despair-alone-being-alone-archetype-513528/

有時候需要在C#的程式裡面發出request和內部或者外部的服務溝通,如果內部或者外部的服務只允許https連線,而且的ssl憑證並沒有經過認證(有可能是用self signed certifcate),那麼C#會直接出錯:

image
錯誤訊息範例畫面

system.security.authentication.authenticationexception the remote certificate is invalid according to the validation procedure

System.Net.Http.HttpRequestException: 傳送要求時發生錯誤。 ---> System.Net.WebException: 基礎連接已關閉: 無法為 SSL/TLS 安全通道建立信任關係。
---> System.Security.Authentication.AuthenticationException: 根據驗證程序,遠端憑證是無效的。

一般來說要解決這個問題有兩個做法:

  1. 把self sign的certificate裝到程式的機器上面並且信任那個憑證
  2. 在送出request的時候做一些特殊處理

這篇將會對於第二個做法,調整程式讓發出request遇到這種問題的時候能夠處理這種問題。


2017年12月6日 星期三

[tool]沒有mail server怎麼測試寄送email?快放過你的gmail來看看有那些可以測試用的smtp mail server

image
圖片來源:https://pixabay.com/en/despair-alone-being-alone-archetype-513528/

不管什麼系統,只要需要通知使用者基本上都是使用email(電子郵件)方式通知,因此寄送email基本上是大部分系統都會需要的功能。

雖然正式環境一定會有mail server給我們使用,但是當我們在開發階段的時候,有時候需要測試寄送出來的mail內容是不是正確、有沒有跑版等問題,這個時候有一個測試用的mail server變得非常重要。

以前最常見應該就是借用gmail的mail server來測試發信,不過那個設定有些步奏,並且gmail也有做出一些限制,因此放過你的gmail吧,來看看有什麼工具可以讓我們測試email寄送。

關鍵字:測試mail server、測試smtp、mailtrap、smtp4dev、papercut、直接寫道檔案系統

測試機送mail的sample程式在github:dotnet-sendmail-smtp-server-review

2017年11月30日 星期四

[iis]為什麼ssl cipher suite關閉了檢查還是有出現問題 - 如何local檢查ssl和cipher suite

image
圖片來源:https://pixabay.com/en/despair-alone-being-alone-archetype-513528/

之前有介紹透過使用IISCrypto來快速設定SSL相關的資安設定。正常來說只要重啟以後禁用的ssl和cipher suite應該就不會出現。

不過如果用一些檢測工具,例如透過Qualys SSL Lab的SSL ServerTest,那麼有可能還是會看到已經禁用的cipher suite

這是為什麼呢?這樣到底如何驗證設定是否有成功?這篇將會介紹如何透過local檢測的方式確認修改是否有成功。


[SQL]為什麼連不到MSSQL資料庫 - 故障排除指南

image
圖片來源:https://pixabay.com/en/key-tag-security-label-symbol-2114047/

任何一個比較大一點的系統都會需要使用到SQL,而以.Net開發為主最長用的資料庫基本上都是MSSQL。

不過MSSQL不一定是我們裝的,因此常遇到的問題就是給的資訊不夠完整,或者裝的時候缺少一些步奏,導致花費很多時間在找出為什麼MSSQL連線不到。

這篇希望提供一個故障排除指南,方便未來如果又連不到的時候可以依照這個項目來排除問題。

關鍵字:troubleshooting guide for MSSQL Database connection problem.

2017年10月31日 星期二

[.Net]Dll明明有在,為什麼出現找不到DLL錯誤 - 一次搞懂如何處理Dll版本問題(Dll Hell)

image
圖片來源:https://pixabay.com/en/despair-alone-being-alone-archetype-513528/

當系統越來越模組化,大量library開始透過nuget方式組成的時候,開始會遇到一個情況,那就是Dll版本問題(Dll Hell)。

如果對於Dll版本問題沒有一些了解的情況下,常常會遇到明明Dll存在bin下面,但是還是出現找不到的錯誤訊息:

image
System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference.

這篇將對於.Net如何處理Dll Hell的問題做一些介紹。


2017年10月21日 星期六

[.net framework 工程師看.net core][03]工程師的語言 C#

image
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

在上一篇介紹完了.Net Framework的概觀(起源.Net Framework) - 在這一篇將會介紹和.Net Framework一起誕生的語言:C#

將會了解到C#版本的歷史、主要版本之間的功能差異和.Net Compiler Platform (Roslyn) 帶來的差異


2017年10月18日 星期三

[.net framework 工程師看.net core][02]起源.Net Framework

image
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

在這一篇,將會從起源,介紹.Net Framework作為開始。

先了解.Net Framework到底包含了什麼,再來介紹一下版本和Runtime之間的關係,最後在介紹一下CLR如何和C#搭配然後整個run起來。

這篇結束之後,會對於整個.Net Framework有個基本的概念並且方便之後和.Net Core和Xamarin做個比對。


2017年10月15日 星期日

[.net framework工程師看.net core][01]開篇

image

作為.net 工程師來說,最近最夯的應該就是.net core 2.0的正式發佈。

如果你和我一樣,是一個從頭到尾只使用Windows並且以開發C# .net為主的工程師,那麼.net core最明顯的跨平台可能沒什麼吸引力,畢竟只用Windows還需要夸平台嗎?

那麼是否.net core就不重要了呢?是否應該花時間學習呢?在這個系列希望能夠給目前.net為主的工程師節省一些查資料的時間,並且了解.net core的重要性。


2017年10月13日 星期五

[.Net Core 與 .Net Standard 實戰教學][Lab][03-3].Net Standard 2.0能夠直接Reference .Net Framework Library

image
圖片來源:https://pixabay.com/en/workshop-rustic-hammer-wrench-tool-2608390/

透過上一個lab: 了解到了如何更容易評估把.net framework程式碼port到.net Standard之後,接下來的問題就是,可是有些第三方.net framework library沒有source code但是又要用怎麼辦?

在這個lab將會介紹.Net Standard 2.0帶來的一大優勢,能夠直接reference .net framework的library。將會使用一個2012的library:NQuery,主要目的是可以用sql語法來查詢資料。將會調整改成這種方式來查資料。

上個lab的最後成果的程式碼可以再github看到:https://github.com/alantsai-samples/2017-10-14-net-core-workshop

git標籤:lab3/1-port-net-standard-finish

兩種方式取得:

  1. 用git clone然後在checkout到lab3/1-port-net-standard-finish
  2. 從github release下載:下載鏈接

[.Net Core 與 .Net Standard 實戰教學][Lab][03-2]使用.NET API Portability分析API支援程度

image
圖片來源:https://pixabay.com/en/workshop-rustic-hammer-wrench-tool-2608390/

在上一個lab:[03-1]現有.Net Framework Lib 改成 .Net Standard 了解了如何把一個現行的.Net Framework邏輯移轉到Target .Net Standard以達到最大跨平台共用邏輯的需求。在操作的過程中有特意轉成.Net Standard 1.6來模擬不支援的api DataSet, 並且了解如何使用 Api Browser來查看api支援度。

不過,難道沒有工具能夠分析現行程式碼是否支援那些target嗎?

在這一個lab將會使用.NET API Portability來達到分析支援度的情況。

上個lab的最後成果的程式碼可以再github看到:https://github.com/alantsai-samples/2017-10-14-net-core-workshop

git標籤:lab3/1-port-net-standard-finish

兩種方式取得:

  1. 用git clone然後在checkout到lab3/1-port-net-standard-finish
  2. 從github release下載:下載鏈接

[.Net Core 與 .Net Standard 實戰教學][Lab][03-1]現有.Net Framework Lib 改成 .Net Standard

image
圖片來源:https://pixabay.com/en/workshop-rustic-hammer-wrench-tool-2608390/

在前兩個lab 2裡面([Lab2-1]了解Framework Dependent Deployment(FDD)執行(發佈)模式[Lab2-2]了解Self Contained Deployment(SCD)執行(發佈)模式)了解了.Net Core和.Net Framework 不同執行模式以後。

在lab 3將會切換到另外一個很重要的部分,.Net Standard 2.0的到來。

這個lab將會介紹如何移轉現有target .net Framework的程式改成.Net Standard以達到多runtime使用重複邏輯。

一般來說會先port test程式碼,在port實際的業務程式碼,不過做法都類似,以這個範例就直接port業務程式碼。

[.Net Core 與 .Net Standard 實戰教學][Lab][02-2]了解Self Contained Deployment(SCD)執行(發佈)模式

image
圖片來源:https://pixabay.com/en/workshop-rustic-hammer-wrench-tool-2608390/

在上一個Lab:了解Framework Dependent Deployment(FDD)執行(發佈)模式建立了一個.Net Core Console程式, 並且用發佈看產出的結果 - 最後得到的是FDD的執行模式。

在這一個lab將會沿用上一個lab的Solution接下去建立另外一種執行模式,Self Contained Deployment (SCD)。

上個lab的最後成果的程式碼可以再github看到:https://github.com/alantsai-samples/2017-10-14-net-core-workshop

git標籤:lab2/1-fdd-finish

兩種方式取得:

  1. 用git clone然後在checkout到lab2/1-fdd-finish
  2. 從github release下載:下載鏈接

[.Net Core 與 .Net Standard 實戰教學][Lab][02-1]了解Framework Dependent Deployment(FDD)執行(發佈)模式

image
圖片來源:https://pixabay.com/en/workshop-rustic-hammer-wrench-tool-2608390/

在上個Lab:[01]準備環境準備好環境之後,接下來就是建立一個.Net Core Console的Hello World範例程式。

建立出來之後,了解.Net Core在發佈出來的成果為 Framework Dependent Deployment(FDD)類型並且了解這個和以前.Net Framework的有何不同。


[.Net Core 與 .Net Standard 實戰教學][Lab][01]準備環境

image
圖片來源:https://pixabay.com/en/workshop-rustic-hammer-wrench-tool-2608390/

要開始開發.Net Core程式之前,一定需要先把環境準備好。

這篇lab主要介紹如何以VS 2017為主的開發模式來準備需要的環境。


2017年9月30日 星期六

[jquery]jquery ajax post能夠正確Model Bind到Asp .net Mvc網站 - 三種不同情境的建議做法

image
圖片來源:https://pixabay.com/en/key-tag-security-label-symbol-2114047/

Model Binding是Asp .net Mvc裡面用來處理表單送出(Form Post)資料自動轉成強型別的機制。

一般來說,如果用HtmlHelper產生的html內容,在Post back的時候Model Binding基本上不會遇到什麼問題。

不過為了網站responsive更好,很多時候會希望Form Post是透過ajax來做。

這個時候依據不同做法,就很容易造成form post到asp .net mvc的時候Model Binding不到。

這篇將會建議不同情境的時候應該如何寫正確的Jquery Form post寫法,避免Model Binding不到的問題。

這篇文章相關的範例程式碼在:https://github.com/alantsai-samples/aspnetmvc-jquery-post-model-binding-sample,有用tag標註每一個不同的情境。

2017年9月20日 星期三

[iis]每個Server都應該做的資安防護 - 使用IIS Crypto一鍵設定該啟用和停用的SChannel (如SSL 3.0)和Cipher Suite (如MD5)

image
圖片來源:https://pixabay.com/en/key-tag-security-label-symbol-2114047/

資安是最需要注意也最容易忽視掉的一環,尤其是當有些資安是和系統設定有關的時候。

作為開發人員,程式開發上面的資安注意事項是一定要知道的,但是Server上面就不一定,但是有時候會需要開發者來管理Server,這時候知道一些Server資安要注意的設定就變得非常重要。

在這一篇將會提到一個Server常被忽視的地方,就是設定IIS https裡面可以使用的SChannel和Cipher Suite。如何透過IIS Crypto設定最佳建議的設定。


2017年9月18日 星期一

[git]repo、branch和tag取名建議和注意事項 - 怎麼取名比較不會有問題

image
圖片來源:https://pixabay.com/en/key-tag-security-label-symbol-2114047/

最近在和同事協同開發的時候,發生了一件事情:

由於我們還沒啟用CD(自動部署)但是更新測試機器又不一定是同一個人,為了好管控目前程式碼和目前測試機器上面的版本,我們使用了一個標籤叫做TestServer來記錄。

不過當我同事更新的時候,他使用了testserver作為標籤,結果我這邊發生了雖然local只有一個tagtestserver,但是在remote上面其實有兩個標籤:TestServertestserver

為什麼會發生這個事情呢?如果不處理,未來在看的時候非常混亂,這讓我想起來一直想要寫的一篇文章,為git repo、tag和branch取名的時候應該要注意什麼比較不會有問題,因此兩篇一起寫,算是不好好naming會帶來什麼問題的use case範例。

搜索關鍵字:naming guidance for git repo, tag and branch.


2017年9月6日 星期三

[打造自己的template-建立一致性程式碼][09]內建VSIX的缺點 - SideWaffle基本介紹

[打造自己的template-建立一致性程式碼][09]內建VSIX的缺點 - SideWaffle基本介紹
圖片來源:https://pixabay.com/en/annual-report-book-brochure-686343/

在上篇([08]Visual Studio Experimental Instance 和 VSIX template的細節設定介紹) 介紹完了Visual Studio(以下簡稱VS)的Experimental Instance的一些維護方式和VSIX template的一些細節設定。內建VSIX方式建立template基本就告一個段落。

不過會發現雖然用VSIX可以版控template專案和部署的時候變得容易,但是建立template的過程有些地方還是過於繁瑣。SideWaffle因此而誕生

這篇將會對現行做法有什麼問題在做一些介紹,和SideWaffle如何讓這些變得更加容易。