สรุปงาน .NET Conf 2018! BKK

วันนี้ผมมาแบบงง จริงๆมาเปลี่ยนที่ทำ Thesis และก็ฟังหัวข้อที่สนใจครับ ผมเลยอาจจะเก็บรายละเอียดมาไม่ครบนะครับ โดยสำหรับสถานที่จัดงานอยู่ที่ Lunchpad ในถนนหรือ ซอยดีปั๊น ห่างจาก BTS สุรศักดิ์ ไม่เกิน 500 เมตรครับ

หลังจากเดินเลยไปไกลครับ ก็เจอแล้วครับ สำหรับที่จัดงานครับ โดยหัวข้อมี ดังนี้ครับ

09:30 - 10:20 - What's coming to C# (Will Fuqua)

A look in the future: Nullable reference types, recursive patterns, asynchronous streams and more.

Speaker: Will Fuqua

  • C# / TypeScript จากแนวโน้มของ stackoverflow insight 2017 ยังเป็นที่นิยมครับ
  • Net strategy 2017 (WIN - WIN ครับ)
    • Keep growing C#
    • Innovate aggressively
    • Benefit for all developer
    • Ecosystem - ทุก Platform ไม่ต้องเรียนรู้อะไรมาก มี C# เป็นพื้นฐาน
  • C# 7.x
    • ref keyword - จริงๆ ผมไม่ค่อยชอบนะ มัน maintain ยาก แต่ช่วยประหยัด Memory เพราะ มัน Pass by Reference
    • this ref  keyword - เป็น extension method
    • in  keyword ส่ง param เข้าไปแล้วมันถูก immutable ห้ามแก้ข้อมูลข้างในครับ
    • readonly  keyword เหมือน in  ครับ แต่เพิ่ม Scope ไปห้ามแก้ output
    • span<T>  และ readonlyspan<T>  keyword เน้น perf เพราะตัวแปรถูกประกาศใน memory stack ส่วนตัวผมมองความสามารถของ span ออกไปทาวพวก slicing ของ python นะ เพราะทำได้เหมือนกันเลย
  • C# 8.0
    • Class Attribute [module:NonNullType]  ใช้ complier ตรวจสอบ null ได้เลย และแสดง warning แต่ถ้าต้องการใช้จริงๆ ก็เติม Type มันจะดูแปลกๆหน่อย แต่ไม่ต้องจำเยอะครับ จากเดิมที่ String ปกติสามารถเก็บ Null ได้ครับ แต่คราวนี้ ถ้าจะใช้ String เก็บค่า Null ต้องประกาศเป็น String?  แทนครับ
    • Default Interface - ใส่การทำงานพื้นฐานลงไปใน Interface เลย มันจะขัดกับตำรา OOP ที่เคยเรียนกันมาเลย
      • มาดู Code กันเลย จะว่า Class WHTaxCalcA  ไม่มี Logic อะไรเลยนะ ใช้จาก IWHTaxCalc เตรียมมาให้แล้ว
        public interface IWHTaxCalc
        {
            Decimal DefaultWHTaxCalc(int pAmount, int pWHTaxRate)
            {
              //Default Logic
              return (pAmount * (pWHTaxRate / 100)) + pAmount;
            }
        }
        
        public class WHTaxCalcA : IWHTaxCalc
        {
        
        }
        
        public class Program
        {
            static void Main()
            {
              IWHTaxCalc whTaxCalcClass = new WHTaxCalcA();
              whTaxCalcClass.DefaultWHTaxCalc(1000, 2);
            }
        }
      • สำหรับผมนะครับ ไม่จำเป็นอย่างใช้ เพราะ มันมีโอกาศเกิด diamond inheritance problem ได้ครับ - Interface A มี Method TestX() ซึ่ง Interface B และ C เป็นลูก แล้วที่นี้ Class D ใช้ Interface B/ C คำถาม คือ ว่า จะใช้ Default Method ของ Interface B หรือ C หละ ?
    • Async streams and disposables จริง async มาใน c# 5 แล้ว แต่ใน c# 8 เพิ่มการจัดการ resource มาด้วย และสามารถใช้พวก await yield
    • Pattern ชอบภาพตัวอย่างนะ เจ๋งดี มันมีประโยชน์ใข้ลดพวก If ซ้อนกันเยอะๆ และเพิ่ม Readability ด้วยนะ พวก Turple Pattern นี่สามารถเอามาชนกับ UML อย่าง State Machine ได้เลยครับ
  • Github csharplang https://github.com/dotnet/csharplang อันนี้เราสามารถเพิ่ม issue เข้าใจใน repo นี้ได้ เพื่อขอ Feature เพื่อให้ทีมพัฒนาภาษาเข้ามาเลือก ถ้าสนใจจริงจะถูกติด tag propasal champion

10:40 - 11:30 - Build Great Libraries using .NET Standard (Aaron Amm Theeranit)

  • .NET Standard - เป็น Base API สำหรับ .NET อื่นๆ เช่น .NET Core .NET Framework
  • ตอนนี้ .NET Standard จะสร้างได้แต่ Class Library เท่านั้น ต้องมี
    • .NET Framework มาครอบ ถ้าต้องการใช้บน Windows Only
    • .์Net Core มาครอบ ถ้าต้องการใช้งานแบบ Cross Platform (.NET Core 3 Support WinForm ด้วยนะ)
  • สำหรับกลไลที่ชวย่ให้ .NET Standard ทำงานร่วมได้กับ .NET แบบอื่นๆ คือ แนวคิดของ Type forwarding มันจะช่วย Map DLL ของ  .NET Standard ไปยัง Platform อื่นๆ
  • ปัญหา Unit Test กับ .NET Standard Library
    • ตอนนี้ยัง Test ตรงๆไม่ได้ ต้องเรียกครอบผ่าน Net Framework / .Net Core ก่อน
  • สำหรับผมจากที่ได้ลองทำงานที่ใช้ .NET Standard การออกแบบระบบมีความท้าทายอยู่พอสมควรครับ อย่างระบบที่ผมทำ ผมเลือกใช้ PoEAA กับ Layer แยกส่วน
    • Presentation -  .NET Core  และ .NET Framework สำหรับตัวที่ใช้ WindowsAPI เช่น Registry ผมแยกไว้ในส่วนนี้
    • Business -  .NET Standard
    • Data Access -  .NET Standard
    • DTO -  .NET Standard
  • การทดสอบ .NET Framework 4.X ใช้ความพยายาม + Unit Test ครับ จากนั้นแก้ Reference ให้ถูกต้อง

11:30 - 12:20 - Code at scale (Joel Dickson)

  • Agoda ใช้ Flow ตาม Git เลยครับ แต่ Branch จากนั้นทำเสร็จ Pull Request
  • Good Code - Good Example / Good thing => Good Code Quality
    • ในทางกลับกันถ้าคุณภาพ Code ไม่นี้ มันเหมิอนเรือที่กำลังจมแหละ เรากำลังวิดน้ำออก (ต้นฉบับใช่้คำว่า Burning Ship)
  • Code Quality
  • Coding Standard https://github.com/agoda-com/standards-c-sharp
  • Plugin - WebPAck Analysis
  • Clean your CodeBase -
    • เราจะจัดการกับสิ่งที่อาจจะเป็นขยะยังไง Agoda ใช้ Agile เลยกำหนดตามรอบของ Sprints ทำได้ที่ละนิด
    • SONGKRAN Refactor - เพราะคนลาเยอะ ไม่มีใครมายุ่งกับ Code เราบ่อยๆด้วย

14:00 - 14:50 - 5 Azure Services Every .NET Developer Needs to Know (๋Jose Barbosa)

  • Basic AZURE Terminology
    • Account - ชื่อที่จะเข้าไปจัดการ Azure
    • Hosting vs Service
      • Hosting - เอา Code + Data ไป Deploy เพื่อให้ทำงาน
      • Service - ข้อแค่มี Data พอ Azure เตรียม Service ไว้ให้แล้ว เช่น BLOB Storage
  • #1 Azure App Service - พร้อมรับการ Deploy Code ของเรา พร้อม Tools สำหรับจัดการครบครัน
  • #2 SQL Database - ยกจาก MSSQL ที่เป็น RDBMS ที่ใช้ๆกันไปบน Cloud ครับ
  • #3 Azure Storage - BLOB / NoSQL (Table) / Queue / File
  • #4 Azure Function - เป็น Service เราแค่เตรียม Data กำหนด Event Trigger แล้ว Function (Code ที่จัดการมัน เช่น ใช้ ML สำหรับวิเคราะห์รูปภาพ เมื่อมีการ Upload เป็นต้น)
  • #5 Azure Monitoring - ตรวจสอบ และช่วยวิเคราะห์ Instance ครับ เรียกว่าครบวงจรเลย
  • ยุคนี้เป็นยุคของ JSON กับ Infrastructure as a Code(IaC) ครับ
  • สำหรับผม ถ้าอิงจากงานที่ทำอยู่โอกาศที่จะได้ใช้ Azure หรือ Cloud Service น้อยมาก ดันเรื่อง Docker กับ Automate CI Test ได้ก็สุดยอดแล้วครับ
  • แอบสงสัยว่า Visual Studio ถ้าไม่ใช้พวก Azure สามารถเอาออกได้ไหม

14:50 - 15:40 - Blazor: Modern Web development with .NET and WebAssembly (Guide Vorapat)

  • Web Assembly - สิ่งที่ช่วยให้สามารถ Reuse Library ได้มากขึ้น จากเดิมที่ต้องมี Hepler นี้ใน C# ใน JavaScript ปัญหา ที่ตามมา อยากเน้น Performance แต่การ Maintain ยากตามไปด้วยครับ
  • .wasm - byte code for web โดยตอนนี้ Web Browser ค่ายใหญ่ๆเปิดรับกันแล้ว
  • Blazor
    • Browser + Razor ไม่ต้องลง Plugin ใดเพิ่ม
    • เป็น SPA เหมือน Angular / React
    • Component Model - แยกชิ้น เอามาต่อได้
    • มีทั้ง Client + Server-Side (Signal R - Web Socket ของ MS เค้า)
    • Dependency Injection
    • Suppport Java Script - ถ้าทำไม่ทัน ก็เอา Blazor เรียก JavaScript ได้
    • สามารถรันได้ใน Browser ที่ไม่รองรับ โดยใช้ asm.js แทน
    • Requre .NET Core 2.x ++ แต่ใน .NET Core 3.X ถูก Build in เข้ามาแล้ว
    • มาลองดู Code จาก Tutorial ของ MS จาก https://blogs.msdn.microsoft.com/webdev/2018/03/22/get-started-building-net-web-apps-in-the-browser-with-blazor/ ครับ
      @page "/counter"
      <h1>Counter</h1>
      
      <p>Current count: @currentCount</p>
      
      <button @onclick(IncrementCount)>Click me</button>
      
      @functions {
          int currentCount = 0;
      
          void IncrementCount()
          {
              currentCount++;
          }
      }
    • จาก Web Assembly จุดที่ชอบของผมนะครับ เราสามารถ Debuging Web ได้นะครับ
  • ASPNET Blazor :

15:40 - 16:30 - Complete Awesomeness for Mobile .NET Developers (Teerasej Jiraphatchandej)

  • Xamarin - Cross Platform for mobile development
  • สามารถ Share Logic จริงๆ ใช้ .NET Standard และ ตัว Xamarin ไปเรียกอีกที
  • จาก Session นี้เจ๋งดีนะ เหมือนตัว View จอตามรูปแบบของ Native แต่ Logic เป็น C#
    • UI Android - Logic C#
    • UI IOS - Logic C#
    • Windows Phone is dead - เลยต้องเข้าหาค่ายอื่นๆ ฮ่าๆ
    • ถ้าอยากสร้าง 1 ได้ n platform และประหยัดเวลา ใช้ตัว Xamarin Form
  • Tools - เหมือนช่วยให้ทำงานได้ง่ายนะ UI ที่ Mock เอามาใช้ต่อกับ App จริงได้เลย
  • Xamarin Esstentials

16:50 - 17:40 - What's new of ASP.NET Core and Entity Framework Core 2.2 (Suthep Sangvirotjanaphat)

  • ตอนนี้ ASP.NET Core 2.2 Preview 3
  • dotnet-httprepl - tools เอาไว้ Test API แบบ Command line
  • FiraCode - Programming Font
  • Transform URL  เช่น ..../blogs/2017/test-api  มันจะไปหา Method ของ Controller testapi()
    • ผมว่าน่าจะคล้ายของ Reverse Proxy ของ Apache
  • Swagger - Tool สำหรับทำ API Spec น่าจะเอาไปใช้งานในองค์กร โดยตัว ASP.NetCore
    • มี Nuget ช่วยทำ Spec ด้วยนะ Microsoft.AspNetCore.Mvc.Api.Analyzers ครับ มันช่วยเตือนแสดง Warning ให่ครับ
    • ถ้าขี้เกียจใส่ [assembly:ApiConventionType( typeof (DefaultApiConventions))]  เอาครับ มันจะใส่ค่า Default มาให้ ถ้าทำ API ตามมาตรฐาน
    • ถ้ามีครบแล้ว API Spec จาก Swagger จะสมบูรณ์ครับ
  • EF Core Owned Entity - มี Class Payment ที่มี Class Address เป็น Property ข้างใน ตัว EF จะสร้าง Table แยกไป และเมื่อ Fetch ดึงข้อมูลตัวแม่ Payment ตัว EF น่าจะดึง Address เข้ามาด้วย //ผมนึกถึงตอนเรียน Software Design เลย จากเดิมที่ต้องทำเอง รอบนึง Framework เข้ามาช่วยในการ Convert OOP - RDBMS ครับ

ปิดท้ายแล้ว

  • อาหารการกินเยอะดีครับ นั่งฟังไป แว๊บไปทำ Thesis ไป

    This slideshow requires JavaScript.

  • Trust me - we are software engineer haha<
  • หลังจากมาพักงานนี้ เพราะ มันเกี่ยวกับงานที่ทำอยู่ได้เปิดหูเปิดตา หลายเรื่องเลย หลังจากมุ่งมันเรียนมาหลายปี และเจอมรสุมงานรุมเร้าครับ

Discover more from naiwaen@DebuggingSoft

Subscribe to get the latest posts to your email.