Skip to content

Kor's blog Posts

บันทึกการย้ายบล็อกและใช้งาน HTTPS จาก Let’s encrypt โดยใช้ Docker

บล็อกนี้ผมใช้ WordPress และ MySQL การ Dockerize เลยง่ายหน่อยเพราะมี official image ให้ใช้เลย ส่วนการทำ HTTPS ด้วย Let’s encrypt ก็ง่ายเช่นกันเพราะมี docker-letsencrypt-nginx-proxy-companion ให้ใช้ การสร้าง virtual host และ issue domain/sub-domain ที่ต้องการใช้งาน…

ย้ายบล็อกจาก DigitalOcean มา Vultr

ตอนนี้ผมย้ายบล็อกมาจาก DigitalOcean มาที่ Vultr แล้ว เหตุผลก็เรื่องราคาต่อ resource ล้วนๆ เพราะบล็อกผมเป็นเว็บเล็กๆ traffic ไม่เยอะและไม่ต้องมี availability สูงขนาดนั้น เลยตัดสินใจง่ายหน่อย โดยส่วนตัว DigitalOcean ก็เป็นผู้ให้บริการที่ดี support ตอนมีปัญหาได้ค่อนข้างรวดเร็ว (สำหรับ free support น่ะนะ) ขยันออกผลิตภัณฑ์มาให้บริการเรื่อยๆ และราคาก็ถูก แต่ด้วยราคาที่เท่ากันแล้ว…

Stub JavaScript ES6 Class method ด้วย Sinon

ใครที่เขียน Unit test สำหรับ JavaScript, Node.js น่าจะรู้จัก Sinon เป็นอย่างดี เพราะเป็นไลบรารี่สำหรับสร้าง mock, stub จำลองการทำงานของ service ภายนอกที่นิยมมากตัวหนึ่ง

เดิมที JavaScript นั้นไม่มีแนวคิดเรื่อง class เป็นแค่ function หนึ่งเท่านั้น แต่นับตั้งแต่ ES2015 หรือ ES6 เป็นต้นมานั้นมี class ให้ใช้แล้ว (ถึงจะแบบถูๆ ไถๆ ก็เถอะ) แต่ปัญหาที่พบคือ Sinon รุ่นเก่าๆ มันใช้กับ class ไม่ได้เพราะไม่ได้อัปเดตตามมาตรฐาน ES6

แต่ตอนนี้ Sinon v2.4.1 (ณ วันที่เขียนวันนี้นะ จริงๆ ตั้งแต่รุ่น 2 เป็นต้นมาอาจจะใช้ได้แล้ว) นั้นใช้กับ class ได้แล้ว! จะว่ารองรับตรงๆ เลยก็ไม่เชิง คือมันเป็น work around ที่หน้าตา JavaScript มากๆ

แก้ปัญหาแบตเตอรี่หมดเร็ว (battery leaks) สำหรับ Linux desktop

Ubuntu ตั้งแต่ 16.04 packages ต่างๆ ของ TLP มีใน official repository แล้วครับไม่ต้องติดตั้งจาก PPA แล้ว ผมใช้ Linux desktop กับ Thinkpad x220 ซึ่งก็ใช้งานได้ดีไม่มีปัญหา ถ้าถามผม ผมว่าเป็นยี่ห้อและรุ่นโน้ตบุ๊กที่เป็นมิตรกับ Linux ที่สุดละ เพราะอุปกรณ์ต่างๆ…

Machine Learning #10 | Underfitting VS Overfitting

ห่างหายจากการเขียนบล็อกไปพอสมควรเนื่องจากก่อนหน้านี้งานค่อนข้างยุ่ง เริ่มด้วยเรื่องเบาๆ ก่อนดีกว่า

ในขั้นตอนการเทรนโมเดล เราต้องทำ cross-validation เพื่อเป็นการตรวจสอบว่าโมเดลที่เราเทรนนั้นมัน complex พอที่จะ handle หรือ generalize พอที่จะ predict data ที่เราต้องการหรือเปล่า  การทำ cross-validation นั้นเป็นการตรวจสอบเบื้องต้นว่า model ของเรามันมาถูกทางแล้วหรือยัง มีแนวโน้มจะดีขึ้นหรือไม่แค่นั้นเอง ไม่ได้สะท้อนถึงประสิทธิภาพที่แท้จริงของ model จนกว่าจะเอาไปใช้กับข้อมูลจริง

สมมุติว่าเราต้องการทำ linear regression เมื่อนำ training data มาพล็อตตามแกน x,y แล้วได้กราฟแบบนี้

Node.js | ข้อควรระวังการใช้งาน Async/Await กับ forEach()

หลายคนเข้าใจว่า function ใดๆ ที่รับ callback function เป็น parameter จะทำงานแบบ async เสมอ ซึ่งเป็นความเข้าใจที่ผิด (ผมก็เคยเข้าใจแบบนั้น) แต่บาง function ก็ทำงานแบบ synchrous นะครับ เช่น  forEach()  ที่เป็น built-in function ของ collection ใน JavaScript ก็ทำงานแบบ synchronous เช่นกัน ดู spec ที่นี่

สมมุติว่าผมต้องการ ใช้ async/await กับ forEach() ผมก็สามารถใช้งาน async กับ callback function ที่ส่งเข้าไป เพื่อให้ใช้ await ได้เช่นกัน ดูตัวอย่างโค้ดนี้ครับ

Node.js | ลองใช้งาน Async/Await กับ Node 7

Node 7 ออกแล้วนะครับ ตอนนี้รองรับ Es6 features ถึง 98% แล้ว ที่นักพัฒนาดูจะให้ความสนใจกันเป็นพิเศษคือสามารถใช้งาน async/await ซึ่งเป็น synctax  ของ Es7 ได้โดยไม่ต้องติดตั้งตัว transpile อย่าง Babel เพิ่มเติม

แต่ …. ยังไม่ได้เปิดใช้งานเป็นค่า default ถ้าอยากใช้ async/await ต้องใส่ option --harmony-async-await  ตอนรัน