วันนี้ผมมาแบบงง จริงๆมาเปลี่ยนที่ทำ 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 หละ ?
- มาดู Code กันเลย จะว่า Class WHTaxCalcA ไม่มี Logic อะไรเลยนะ ใช้จาก IWHTaxCalc เตรียมมาให้แล้ว
- 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
- Client - https://github.com/DotNetAnalyzers/DotNetAnalyzers / TypeScript(TSLint)
- Server - Sonor Cube เอามาใช้ในส่วนของ CI & CD Process
- Agoda Analyser - https://github.com/agoda-com/AgodaAnalyzers
- 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++; } }
- Syntax คล้าย Razor ใช้ @ อ้างถึง Keyword โดยใน @function สามารถเขียน Code C# ได้เลย เท่ากับว่ารู้ HTML5 + C# พร้อมลุยแล้ว
- ถ้าจะแก้จาก Client Side เป็น Server Side ลองดูอย่างจากตัวอย่างนี้ได้ครับ ลอง Get มาเล่นแล้วเจ๋งดีเหมือนกัน Chrome เข้าไปดูใน Network มีแต่ดึง .DLL เข้ามา
- จาก 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
- Basic API ในรูปแบบ Nuget Package และ Tutorial เตรียมไว้ให้ สำหรับ Cross-Platform
- https://docs.microsoft.com/en-us/xamarin/essentials/
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 ไป
- Trust me - we are software engineer haha<
- หลังจากมาพักงานนี้ เพราะ มันเกี่ยวกับงานที่ทำอยู่ได้เปิดหูเปิดตา หลายเรื่องเลย หลังจากมุ่งมันเรียนมาหลายปี และเจอมรสุมงานรุมเร้าครับ
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts to your email.