รัน unit test บน jasmine ด้วย karma บน javascript บ้าน ๆ

ไปเจอโค้ด javascript ของลูกค้าแบบที่ไม่ได้ใช้ framework อะไรที่เป็น legacy คือไม่มี test ด้วย แล้วต้องการเขียน unit test เลยแนะนำว่าให้ลองใช้ jasmine ไปแบบไม่ได้บอกอะไร คิดว่าไม่เกิน 15 นาทีน่าจะหาวิธีใช้งานได้ เดินไปดูอีกที อ้าว เข้าป่าไปซะแล้ว เลยนึกขึ้นได้ว่า jasmine เฉย ๆ มันจะยุ่ง ๆ หน่อย ถ้าใช้ karma ร่วมด้วย น่าจะสะดวกกว่านี้เยอะ เลยทำตัวอย่าง ยัดใส่ github แล้วก็เอาไปให้ลูกค้าดู น่าจะเห็นทางไปละ

อ่านต่อ »

ใช้ Watcher ใน .NET Core

Microsoft ทำ tool ที่เอาไว้ auto rerun โค้ดใน .NET Core ไม่ว่าจะเป็น app เราหรือแค่เฉพาะ test เรียกว่า watcher โดยมันจะทำหน้าที่คอย detect ว่าโค้ดเรามีการเปลี่ยนแปลงหรือไม่ ถ้ามีการเปลี่ยนแปลงเกิดขึ้น มันก็จะ auto rerun สิ่งที่เราทำอยู่ให้

อ่านต่อ »

Headless Robot Framework มาพร้อมกับ SeleniumLibrary แล้ว

ก่อนหน้านี้เคยโพสต์เกี่ยวกับการใช้ Headless Browser ใน Robot Framework ทั้ง Chrome และ Firefox ตอนนั้นตัว Selenium Library เองยังไม่สนับสนุนการใช้ Headless Browser ทำให้ต้องเขียน Keyword หรือ Library เอา เพื่อเปิดใช้งาน Chrome หรือ Firefox แบบ Headless แต่วันนี้ลองเข้าไปดูใน Document ของ SeleniumLibrary อีกที อ้าวเฮ้ย มันสนับสนุน Headless Browser แล้ว ทั้ง Chrome และ Firefox เลยเว้ย ลองกันเลยดีกว่า

อ่านต่อ »

แปลง UTF-8 เป็น TIS-620 ไป ๆ กลับ ๆ ใน .NET Core

ได้ไปทำงานกับลูกค้าที่มี project เก่า ๆ บางตัวที่ยังใช้ข้อมูลในฐานข้อมูลที่มี character set เป็น tis-620 อยู่ และไม่สามารถแปลงเป็น utf-8 ได้ด้วยสาเหตุอะไรบางอย่าง (น่าจะเป็นงานที่จะงอกขึ้นมากับทุก ๆ ระบบที่เค้า live อยู่) รู้แค่ว่า project ใหม่ ๆ ยังต้องไปดึงข้อมูลจากฐานข้อมูลนี้ แถมอีก project ต้องส่งข้อมูลที่เป็น utf-8 ไปหาระบบที่รองรับแต่ tis-620 อีก นั่นคือ ต้องมีวิธีแปลงข้อมูลจาก tis-620 ไปเป็น utf-8 และแปลงจาก utf-8 กลับไปเป็น tis-620

ข่าวร้ายคือ ใน .NET Core Framework ยกเลิกการ support legacy character set บางภาษาไปแล้ว รวมถึงภาษาไทยด้วย นั่นคือ วิธีการ convert encoding ที่ควรจะทำได้ง่าย ๆ มันไม่ง่ายอีกต่อไป

อ่านต่อ »

Convert Datetime จาก ค.ศ. เป็น พ.ศ. ใน Razor Template

ใน C# ที่ใช้ Razor Template Engine เช่นในแอพที่เป็น MVC หรือเอา RazorLight Package มาใช้ในการ render ตอนเวลาต้องการ render วันที่ที่เป็น string ที่เป็นปี ค.ศ. เช่น “2018-02-17T01:22:38” ให้เป็นปี พ.ศ. จะต้องทำการ convert ก่อน โดยอาจจะ convert ตั้งแต่ใน app เอง หรือจะ convert ใน template ก็ได้

อ่านต่อ »

เพิ่ม Environment Variables ใหม่ใน Angular

ใน Angular โดยปกติจะมี environment มาให้ 2 environment คือ prod กับ ไม่ prod (เรียกรวม ๆ ว่า dev ละกัน) โดย environment ของ prod จะอยู่ที่ /src/environments/environment.prod.ts ส่วนอันที่เป็น dev จะอยู่ที่ /src/environments/environment.ts ซึ่งปกติเวลาเราสั่งคำสั่งผ่าน angular cli เช่น ng serve หรือ ng build มันจะเอาอันที่เป็น dev มาใช้ ถ้าต้องการใช้อันที่เป็น prod ต้องมีการประกาศอย่างชัด ๆ ว่าฉันจะเอา production นะ ผ่าน option --prod หรือ --environment=prod เช่น ng serve --environment=prod

อ่านต่อ »

เวลาตำรวจจับผู้ร้ายในหนัง เขาพูดว่าอะไร

เวลาดูหนังตอนฉากที่มีการจับผู้ร้ายหรือผู้ต้องสงสัยได้ ตำรวจเค้าจะพูดอะไรซักอย่างรัว ๆ ยาว ๆ ตอนที่ฟังผ่านซาวด์แทร็กก็ฟังไม่ทัน ได้ฟังแบบพากย์ไทยก็จำไม่ได้อีก จำได้แค่ประมาณว่า “คุณมีสิทธิ์ที่จะไม่พูด เพราะสิ่งที่คุณพูด …” อะไรก็ไม่รู้ ที่เหลือกำลังตื่นเต้นว่าตำรวจจับผู้ร้ายได้แล้วอยู่ ไม่ได้สนใจฟังเลย

เมื่อสองวันก่อนได้ฟังรายละเอียดเรื่องนี้ผ่านทางวิทยุคลื่น 102.5 FM เลยเอามาหาข้อมูลเพิ่มเติมได้ว่า

อ่านต่อ »

Blur ใน Robot Framework

มีโจทย์ว่า input text ในเว็บแอพ เวลา on blur ให้มันไปทำการ validate ข้อมูลใน input นั้น ถ้าไม่ถูกต้องก็แสดง error message ด้วยความที่ไม่รู้ ตอนที่อยากทำให้เกิด event on blur ก็ใช้วิธีเอาสีข้างแถ ๆ ไป

อ่านต่อ »

ใส่ Swagger ให้กับ .NET Core API

swagger เป็น tool เอาไว้สำหรับสร้าง document สำหรับ API แถมว่า document ที่สร้างขึ้นมา มันทำหน้าที่เป็น testing tool เพื่อใช้ทดสอบ API นั้นให้ได้อีกด้วย คือเรียกได้ว่า โคตรมหาเทพ tool กันเลยทีเดียว

ตัว swagger เอง มัน support หลาย ๆ ภาษา .NET Core เป็นหนึ่งในนั้น วิธีการใช้งานก็ไม่ยากอะไร (เท่าที่ลอง) เลยเอามาจดไว้หน่อย เดี๋ยวลืม

อ่านต่อ »

JSON Configuration ใน .NET Core

ใน .NET Core มันใช้ configuration ได้หลายแบบ แบบที่เป็นไฟล์ หลัก ๆ ก็ INI, JSON ไม่ก็ XML ทีนี้พอจะทำแอพที่เอา .NET Core ไปเข้า pipeline ของ ci/cd การทำ configuration file ก็เป็นทางเลือกที่น่าสนใจในการ manage configuration

ต้องเตือนไว้ก่อนว่า โดยปกติ มันไม่ควรเอา configuration ไว้ใน code base แล้วมา set profile ว่าเออ นี่จะ build สำหรับขึ้น production นะ อันนี้จะใช้ build ขึ้น staging นะ แต่ควรจะใช้ binary เดียว build ครั้งเดียว และใช้ configuration ในการจัดการควบคุม environment แทน

อ่านต่อ »