Model is the base of everything. (Photo by NeONBRAND on Unsplash)

Model layer is the foundation of every app. One way to keep model layer clean is by being able to cleanly manipulate and transform Data or JSON string into Swift type and vice versa. On September 2017, Swift 4 came out with protocol that allows us to cleanly create…


Photo by Sydney Sims on Unsplash

อยากจะพิมพ์ทิ้งไว้ ให้คนๆนึง เผื่อสักวันที่เราหมดแรงที่จะบอก หมดกำลังใจที่จะช่วย หมดความหวังที่จะไปต่อ วันที่เค้าอยากจะเร่ิมฝืนตัวเองบ้าง จะได้มีที่ให้อ่าน

เราพยายามรับฟังอย่างเดียวมานานหลายปีแล้ว เห็นแกไปหาจิตแพทย์มาก็หลายปี กินยามาก็นานมาก เราว่ามันยังขาดบางอย่างไป บางอย่างที่จะช่วยได้ มันคือ แรงที่แกต้องฝืนทำในสิ่งที่แกไม่อยากทำ

เห็นชอบบอกว่าพยายามเท่าไหร่ ก็ไม่มีอะไรเปลี่ยนแปลง เพราะแกพยายามในทางที่ผิดอยู่รึเปล่า มีแรงพุ่งไปอย่างเดียวไม่พอนะ ต้องพุ่งไปในทางที่ถูกต้องด้วย

ขอออกตัวก่อนเลยว่า ทั้งหมดที่จะพูดต่อไปนี้ ไม่ได้บังคับนะโว้ย! สามารถต่อรองได้ ปรับได้ ไม่ต้องทำตามเป๊ะๆ และมันเป็นความคิดส่วนตัว มีผิดบ้าง แก้ไขได้ เป็นแค่แนวทางใหญ่ๆ เดี๋ยวจะหาว่าบังคับทำไมอีก…


สรุปข้อผิดพลาดที่พบเห็นบ่อยๆ

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

1. ให้ศัตรูเห็นตำแหน่งเราโดยไม่จำเป็น

“ถ้าถูกศัตรูเห็นตำแหน่ง ก็เหมือนเลือดเราหายไปครึ่งหลอดแล้ว “ — ขงเบ้ง (ไม่ได้กล่าว)

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

  • ศัตรูจะลอบโจมตีเราง่ายขึ้น เค้าจะรู้ว่าต้องเข้าไปล้วงจากมุมไหน อ้อมซ้ายหรือขวา ตรงไหนไม่มีตัว CC คอยกัน (CC ย่อมาจาก Crowd-Control เช่น Stun, จับ หรือ Slow) สบายเลย…


Making the Soompi iOS app

Soompi iOS App Store page having 4.8 Stars!

We built Soompi iOS app from the ground up and explore concepts like data synchronization, unidirectional data flow, and coordinator pattern. I want to share things I have learned along the way.

This article is divided into 2 sections.

  • Model Layer —How we do data synchronization across pages and and…


Cross-platform experimentation series

We experimented using Kotlin Multiplatform to share code such as data model, networking, parsing, and business logic. Here are my thoughts about the technology.

Kotlin Multiplatform is an experimental language feature that allows compiling code multiple platforms. A main building block of it is Kotlin/Native, which is a technology for…


Cross-platform experimentation series

I take a look at Flutter to see how it can help share some code in Viki mobile applications.

At Viki, we support a wide variety of platforms. This includes Web, iOS, Android, Apple TV, Fire TV, Kindle, and Roku. Each platform team develops and maintains their own code base…


I will walk you through how I made a ping pong shooter robot. I’ll list all the tools, steps and what I learned.

There are so many pingpong shooter robot videos on YouTube. Surprisingly, none of them has any detailed description/blog on how to make it. I can’t even find…


In November 2017, my school Sarasas Witaed Suksa held a 20th anniversary reunion event. It’s been almost ten years after I left. It felt long. Lots of ex-teachers and friends came back today.


Photo by Anete Lūsiņa on Unsplash

There’s no way you can perfectly recall this list from your head. Go through this list every time you pack for traveling. Don’t be lazy. You’ll regret it!

  • Passport — if you only remember one thing on this list, this is the one!
  • Foreign money
  • Travel insurance
  • Coin pouch
  • Pen
  • Hoodie, Underwear
  • Socks, Sandals
  • Toothbrush, Dental floss
  • Umbrella
  • Sunglasses
  • Sunscreen, lotion
  • Medicine (for diarrheas, personal illness, etc.)
  • Batteries, power bank
  • USB wall charger
  • Universal adapter
  • USB cables, lightning cables
  • Camera
  • Camera Charger
  • Earphones
  • Empty water bottle
  • Snacks

Have a nice trip!


Asana task ID in commit message to open task in browser

Our team uses GitHub+Asana integration to link a git commit and Asana task together. This is done by putting task ID in the commit, something like.

One thing I notice in iTerm2 is if we hold and hover around texts, URLs will be highlighted and clickable…

Thongchai Kolyutsakul

iOS developer at Viki

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store