[.NET] สรุปงาน DevRock #03 Rock Show

สำหรับงานนี้ ผมเพิ่งนึกว่ามีครั้งแรก 555 เพราะเข้ามาอยู่ในกลุ่ม Dev Rock Developer Group นานแล้ว (รู้สึกว่าชื่อเดิมเกี่ยวกับ ASP.NET MVC ครับ) ผมเพิ่งสังเกตุว่าตัว Event เพราะ เพื่อนใน FB หลายคนกด Like ไว้ใน Facebook ไว้นะครับ สำหรับงานครั้งนี้จัดเป็นครั้งที่ 3 และ โดยครั้งนี้จัดที่มหาวิทยาลัยหอการค้า คณะวิทยาศาสตร์ และเทคโนโลยี อาคาร 7 ชั้น 3 ครับ แต่วันนี้งานเริ่ม Late ไปนิดนึงนะครับ เนื่องจากฝนตกครับ โดยตัวงานเริ่มประมาณช่วง 09:30 ครับ โดยมีรายละเอียด ดังนี้

BDD with .NET Behave

Speaker Peerapat Asoktummarungsri

ฺBehavior-driven development หรือ BDD - เริ่มมาจากของฟากภาษา Ruby (RSpec) จากนั้นเริ่มแตกออกไปหลายๆ ภาษา เช่น Java, .NET หรือ PHP เป็นต้น

ตัว BDD ทำหน้าที่เป็นตัวกลาง (Adapter) เชือมงานแต่ละชิ้น เข้าด้วยกัน ลองดูตัวอย่าง เช่น ทำเว็บหาราคาที่พัก

  • มี Login
  • มี Search
  • มีงานชิ้นเล็กอื่นๆ อีกหลายอัน

แล้ว ... งานมันแยกกันทำนี่ คนนึงอาจจะทำ Search คนนึงทำ Login แล้วถ้า Login ก่อน Search หรือ Search ก่อน login ผลลัพธ์มันจะเป็นอย่างไร ?

BDD สำหรับในมุมของพี่เค้ามองว่าเป็น User Acceptance Test แบบ Coding ที่ Integrated หลายๆอย่างมารวมกัน แต่ไม่ใช่ของ Dev แต่เพียงฝ่ายเดียว ตัว Dev เอามันก็มี Bias (ลำเอียงได้)  โดยเอาทุกคนที่เกี่ยวข้องกับ Product เข้ามาด้วยทำด้วยกัน ทั้ง  BA, SA, Product Owner โดยตัว BDD ตามความเข้าใจของผมนะ ส่วนที่สำคัญ 2 ส่วน

  • Feature - ตัวที่เป็นภาษาคน พวก  Give When then โดยมันจะล้อกับ Story Card ใน Agile กลุ่ม  BA, SA, Product Owner  แล้วมันจะได้เป็น Living Document
  • Step - อันนี้แหละเป็นตัวที่ผูกความสัมพันธ์ของ Feature กับงานชิ้นเเล็กๆต่างๆที่เราสนใจ อันนี้ต้องมี Dev เข้ามาช่วยและ

สิ่งที่พี่เค้าทำ BDD บน Rider แต่ตัว Project เริ่มมาจาก Visual Studio ฉะนั้นตัว VS เปิดได้แน่ๆ โดย Tools หรือ Library ที่พี่เค้าใช้

ถ้ามาดู Code ใน GitHub ของพี่เค้า มีอะไรบ้าง จากความเข้าใจของผมล้วนๆ ถ้าผิดขออภัยด้วย

  • Feature - ภาษาคน ว่าจะทำอะไร
  • Actor -class อันนึ่งที่รับ Text เข้าไปจัดการ เอา Feature กับ ActionSteps
  • ActionSteps - Grammar มาตีความว่า Feature นั้น ทำอะไรได้ ใน Git อยู่ในโพลเดอร์ Steps
  • WebDriver - เนื่องจาก Test ตัวอย่างเป็นเว็บเลยมีตัว WebDriver มาเป็นตัวเชื่อมกับ Browser
  • SeleniumHocks - เอาไว้เตรียมอะไรต่างๆให้เรียร้อยำหรับ Test เก็บไว้ใน Context เช่น เปิด Browser ถ้าจะเคลียร์ Cache Cookies ก็ทำใน Step นี้แหละ เพื่อให้มันพร้อมที่สุดก็ทำใน Step นี้แหละ
  • pageObject - เป็น Helper ช่วยในการจัดการจับ Element ต่างๆของเว็บที่เข้า

เกร๊ดความรู้อื่นๆ

  • ตัว Selenium มีแบบ Remote กับ Local
    • Remote - ทำไว้ที่ไหนก็ได้ แล้วให้ Connect เข้าไป ตัว Server ซึ่งรับภาระหนักมาก เช่น เปิด Chrome โดนซัดแรมไปและ
    • Local - ขี้นที่เครื่องตัวเอง
  • ตัว BDD ลองดู Blog ที่ผมเขียนสรุปไว้จากงาน ATH2016 BDD with Cucumber มันไม่ง่าย แต่เริ่มได้

รวม Q&A ใน Session นี้

  • Q: เคยลองกับค่าย Linux ได้ไหม
    A: Mono ยังไม่ได้ลอง ส่วน .Net Core ของ Selenium Support
  • Q: ไม่ใช C# มา Test ได้ไหม ใ้ช้ Selenium ข้างนอกเลย
    A: ได้ แต่ต้องดูด้วย ตัว Framework หรือ Tools ที่เหมาะสมกับการใช้งาน
  • Q: NSpec NBehave ต่างกันไหม ?
    A: ไม่ต่าง NSpec, NBehave, SpecFlow เป็น Implementation ของ Concept ฺBDD
  • Q: ATDD กับ BDD ต่างกัน อย่างไร
    A: ลองอ่านจาก blog นี้ได้ครับ จะเข้าใจว่า ATDD คือ อะไร
  • Q : Support Phathom js ไหม
    A : Selenium - Connect กับใครก็ได้ แต่ต้องมี WebDriver ด้วย มองว่าเป็น Interface กลาง

Giving ASP.NET WebSite visibility with Realtime Metrics

Speaker Mahasak Pijittum

สำหรับเรืองนี้อีกมุมที่เกี่ยวกับ Data Science ลองอ่านประกอบดูได้ครับ เรื่อง Real time Measurement with Big Data โดยคุณ Mahasak Pijittum เปิดแล้วลองเลื่อนลงไปดูครับ

สำหรับใน Session นี้จะมองไปอีกมุมนึง ในแง่ของการ Implement ขึ้นมาครับ

DevOps คือ Culture วัฒนธรรมองค์กร ที่ทำให้ Developer กับ Operation ใกล้ชิดกันมาขึ้น บริษัทใน Fortune หรือ ใน Silicon Valley มีน้อยคนที่เขียน Code อย่างเดียว ส่วนใหญ่ทำ Operation ด้วย (นี่เราทำแบบ DevOps เหรอ 555)

มาเริ่ม Business เขื่อ Report >> Report มาจากระบบ BI >> ฺฺBI มาจาก Data Snapshot แล้ว Measurement ไปเพื่ออะไร

  • Track Success
  • Improve
  • Set Expectations
  • Help Decision

ถ้า Startup ไหนที่ไม่ทำ Measurement เหนื่อยแน่ๆ เพราะ รู้ได้ยังไง Product ที่ทำมันสำเร็จ

Data Driven Strategy

  • มองภาพเหมือน TDD เลย ฺBuild >> Measure >> Learn
  • การทำ A|B Testing - เอามา Measure

ชุด Environment / Tech Stack ที่แนะนำ

Time Series Database - Data Point คือ Single Value with tag ที่มี Time Label เวลาออกแบบระบบพยายามให้มันรองรับกับ DB อื่นๆ

  • InfluxDB
  • Prometheus - เหมาะเอาไว้สำหรับดูพวก Hardware

Visualization

  • Elastic Search เอาไว้ทำ Index + Kibana (UI หรือ Elastic Search)
  • Grafana - Beautiful metric & analytic dashboards และรองรับ Data Source หลายๆแบบ ทำให้เอาข้อมูลมาเปรียบเทียบ หรือหามิติใหม่ได้

Library ที่ใช้

  • Metric.Net - Port มาจาก Java Metrics โดยทำหน้าที่ตามนี้แหละ บรรยายไว้ครับแล้ว library which gives you unparalleled insight into what your code does in production.
    แล้วเราดูอะไรได้บ้าง เช่น
    - Counter
    - Meter
    - Histogram - Percentile
    - Gauge
    - Timer
  • InfluxDB.Net - Time Series Database ถ้าใช้จริงงานทาง Speaker แนะนำส่ง Data แบบ Async เพราะ ถ้า DB ช้าเว็บก็จะช้าไปด้วย

เก็บข้อมูลตอนไหน

  • เก็บข้อมูลตอนไหน - ทาง Speaker แนะนำให้ทำใน MVC Start ในการจัดการ Metric + HttpModules เชื่อมเข้าไป
  • เอาไปครอบให้ได้มากที่สุด ไม่แนะนำให้ไปยุ่งกับ Controller มาก เพราะ ตัว Controller มันมีงานของมันอยู่แล้ว เช่น
    - Response Time
    - Controller
    - Dependency Resolve : Dependency Hell
  • ข้อมูลต่างๆ จะดูจาก Tag ในการ Filter Group by

Code ทุกตัว ส่งผลถึงงานที่หน้า Operation - อันนี้ เขียนจริง เจ็บจริง งานเข้าจริง

  • ประโยชน์
    - Business
    - Peek Time - เอาไปประเมิน Scale up, Scale Down ของระบบ พวก Cloud ใช้มาเพิ่มเครื่อง ใช้น้อยลดเครื่อง
    - Code Refactor - ไม่ใช่สัญชาติญาณ เรามี Data มารองรับ ว่าควรทำจริงๆ
    - และอื่นๆ

งาน Software ไม่ใช่การเขียน Code แต่เป็นการ Design ให้ User และ Operation งานได้ลื่นไหล

  • สำหรับ Source Code อยู่บน GitHub ครับ โดยเขียนเป็น Orion Architecture

รวม Q&A ใน Session นี้

  • Q : Lean Start up กับ Date Driven Strategy ต่างกันอย่างไร
    A : Concept คล้ายๆกัน แต่อย่าสับสนระหว่าง Data Driven Development, Data Driven Programming
  • Q : ใน Enterprise เอาไว้ทำอะไร
    A : Performance Test ของเดิม Test โดยเอา Tools อย่าง JMeter เข้ามาใช้เป็นต้น ในช่วงก่อนขึ้น PROD แต่เรื่องนี้อาจจะมานำใช้ เป็นการรับประกันตาม SLA ก็ได้นะ แต่ต้อง Design ระบบให้รองรับมาตั้งแต่แรก
  • Q: วัด Metric จากอะไร ทั้งหมด หรือ
    A: ที่มีผลกับ Business

CI&CD for ASP.NET Core with VS Team Service

Speaker Nattapong Nunpan

  • CI ส่วนตัวผมมองว่าเป็นการทำ Logistics ของ Software นะ
  • ถ้าไม่มี CI จะเกิดอะไรขึ้น
    • ฺBug
    • Team Cohesion
    • Poor Code Quality
    • Project Vision
    • Lack of Deploy able
  • Best Practices การทำ CI & CD
    • Maintain single repository
    • Automate Build
    • Selt Tesing = Automate Test
    • Commit บ่อยๆ
    • พยายาม Commit แล้วให้ตัว CI มาเดิน Flow Build & Test
    • Test ไม่ควรเกิด 10-15 นาที เพื่อให้ได้ Feed Back ไว
    • Test Environment ควรใช้เคียงกับ Prod
    • Automate Deploy
  • Tools ที่ใช้ Demo
    • Microsoft Visual Studio
    • VS Team - ตัว CI & CD ทาง Speaker แนะนำว่ามันเหมาะกับทีมเล็กๆ
    • GitHub
    • Azure Cloud - สำหรับ Deploy ฟรี ถ้ามี Account ของ Azure
  • Continuous Delivery vs Continuous Deployment - ต่างตอนสุดท้าย Manual กับ Auto ตามรูปครับ

รวม Q&A ใน Session นี้

  • Q : ทำ CD แล้ว Publish ขึ้น NuGet ได้ไหม
    A : ทำได้
  • Q : VS Team ทำงานบน Cloud แล้วมีค่าใช้จ่ายไหม
    A : ใช่ ฟรี Agent เดียว 1 Queue
  • Q : VS Team ใช้ Test ของใคร
    A : MS Nunit XUnit
  • Q : VS Team ใช้ กับภาษาอื่นๆ
    A : คิดว่าได้
  • Q : VS Team Gen Ticket ได้ไหม ถ้าบิ้ว Test แล้ว Error
    A : ไม่แน่ใจว่าเชื่อมกับระบบ Ticket ได้ไหม แต่ถ้าตัว Team City Support

Cross-Platform Development with ASP.NET Core MVC

Speaker Pongsakorn Thanopassakul

ใน session นี้ ผมอาจจะไม่เน้นจดเยอะ ครับ เพราะส่วนมาเป็นการ Demo กับตัว .Net Core และ Slide เข้าใจง่ายมากครับ

  • ASP.NET Core ทุกอย่างอยู่บน NuGet หมด เป็น modular และรันบน .NET Full 4.6 ได้
  • Build In Dependency Injection(DI)
  • Any Host บน IIS, NGINX ได้แล้ว
  • ASP.NET Core รองรับ console, web และ Test (XUnit) แต่ผมลองไปหาข้อมูลเพิ่มมา Nunit ก็ใช้ได้แล้ว
  • ไม่มี csproj และ มีแต่ Json (ดูคล้ายของตัว NPM เลย)
  • ใช้ VS CODE
  • เดิม ASP.NET MVC return ActionResult แต่ ASP.NET CORE return IActionResult
  • คำสั่ง Command line ต่างๆ เริ่มด้วย dotnet เช่น
dotnet --version
dotnet new
dotnet restore
dotnet bulid
dotnet run
dotnet publish
dotnet core cheatsheet

kestrel Build in Serverที่ Claim ว่าเร็วกว่า Node 8 เท่า

Middleware Pipeline
  • Middleware Pipeline คือ ตัวที่เราเข้าถึงได้ ช่องว่างระหว่าง HTTP Request/Reponses ไปจนถึง Controller เราสามารถจัดการได้ ทำงานตามลำดับที่ Add มา เช่น
    • Diagnostic Middleware
    • Authentication Middleware
    • MVC Middleware
  • มี Feature ใหม่อย่าง viewport, tag-helper, vie components (Partial View แบบ upgrade มี Controller ในตัว) และใช้กับ Tools พวก BOWER ด้วย
  • MS Love Docker ทาง MS มีเตรียม Image ไว้ให้แล้ว
  • BOILERPLATE : Tools Generate Code

รวม Q&A ใน Session นี้

  • Q: อุปสรรคตอนเริ่มต้นของ DOTNET CORE
    A: ตัว Document ดีระดับนึง เริ่มจาก 0 จะดีกว่า ถ้าใช้พวก BOILERPLATE มันจะงงสิ่งที่ Tools มันสร้างให้ แต่ถ้าเคยใช้พวก Node กับ NPM มาก่อนจะไปได้เร็วมาก ทางวิทยาการได้แนะนำมี Course ที่น่าสนใจบน Udemy ลองไปทำตามดูครับ
  • Q: tag-helper กับ Angular
    A: คล้ายกันครับ แต่ Tag-Helper จะเข้ากันกับของทาง MS ได้ดีกว่า และตัว Tag-Helper ตัว Code จะสวยกว่า ไม่เหมือนกับ Razer ที่มีอักขระแปลกๆ
  • Q: ช่วยอธิบาย DI ได้ไหมครับ
    A: ตามรูปนี้เลยครับ
  • Q: DTO View Model
    A: DTO เหมาะกับ web service

Microsoft Power BI

Speaker Thirapat Wiwittanaporn

  • มัน คือ Tools ที่เอาไว้สำหรับ Visualization ข้อมูลได้ง่ายๆ User ทำเองได้
  • มีทุก Platform ตัว Desktop ฟรีนะ
  • ตัว Power BI ใช้กับภาษา R ได้ด้วย
  • อ่อกลุ่มใน Facebook ด้วยนะ Thai Power BI User Group

รวม Q&A ใน Session นี้

Use Distributed Cache in ASP.NET (Ignite.NET)

Speaker NineCh Enin

มาเริ่มของเว็บ Cache มี 3 ระดับ

  • Application
  • Session
  • MS SQL Server รองรับทั้ง App และ Session

Ignite.NET เป็น Cached ทำได้หลายอย่างตามรูปเลยครับ

ภาพจากเว็บ https://ignite.apache.org/
ภาพจากเว็บ https://ignite.apache.org/
  • เนื่องจาก Lib ตัวนี้ ข้างใต้เป็น Java เอา .Net มาครอบ โลกของ Java ช่างยิ่งใหญ่แบกรับภาระของโลกใบนี้ ฮ่าๆ ต้อง set JAVA_HOME ด้วยนะ และก็มันมี Exception แบบ Java พ่นออกมาด้วยครับ ถ้าจะใช้ก็ต้องตีความเป็น
  • Support LINQ ในการ Query
  • สำหรับของค่ายอื่นๆ เป็นตัว Memcached (อันนี้ไม่ชัวร์ว่าเข้าใจถูก หรือป่าวนะ เห็นมีหลายตัวเลยที่เกี่ยวกับ Memcached

วิดีโอ BDD ให้ดูกันเต็มๆด้วยครับ

By Boriphuth Saensukphattraka

ปิดท้ายด้วยของที่ระลึกจากงานครับ


Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts sent to your email.