Yothinix

My synchronous life in Asynchronous world

Spring ก็เร็วได้! มาเรียก Method ใน Spring แบบ Parallel ด้วย @Async กันเถอะ
Java

Spring ก็เร็วได้! มาเรียก Method ใน Spring แบบ Parallel ด้วย @Async กันเถอะ

สมมติว่าเรามีโจทย์ที่ต้องยิง HTTP Request เพื่อดึง resource มาจาก Web service อื่นหลายๆ ที่ ถ้าเราไม่คิดอะไรเราก็อาจจะเขียนโค้ดให้ ยิงทีละตัวแบบ Synchronous ไปได้ แต่ถ้าแต่ละ Request ไม่ได้ขึ้นต่อกัน เราจะมีตัวเลือกมากขึ้นผ่านการยิ

รีวิวคลาส Domain Driven Design แบบ รูฟๆ
Class Review

รีวิวคลาส Domain Driven Design แบบ รูฟๆ

ขอรีวิวคลาส "Domain Driven Design แบบรูฟๆ" หน่อยนะครับ เป็นการขอบคุณที่พี่รูฟ Twin Panitsombat มอบดาบให้ไปสู้กับไฮดรา (หรือไปสร้างไฮดราตัวใหม่นะ) "คนที่มาเรียนถ้าไม่มาเรียนเพื่อแสวงหาความรู้ ก็มาเรียนรู้เพื่ออธิบายสิ่งที่ตัวเองทำเป็นธรรมชาติอยู่แล้ว"ผมเริ่มค้

แชร์ประสบการณ์ Config ตัว Amazon ElastiCache ให้ใช้งานกับ Spring Boot
Java

แชร์ประสบการณ์ Config ตัว Amazon ElastiCache ให้ใช้งานกับ Spring Boot

Story2 - 3 วันที่ผ่านมาพยายามต่อ Redis บน ElastiCache แล้ว Error ตลอดเวลาเรียกใช้ จะมี Log ขึ้นประมาณข้างล่างนี้ แล้วแก้จนมันใช้ได้แล้วเอาขึ้น Server ไปละ นี่คือเรื่องของมัน org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is

รีวิวคอร์ส Mathematics for Working Programmers
Class Review

รีวิวคอร์ส Mathematics for Working Programmers

อยากจะพูดถึงคอร์ส Mathematics for Working Programmers ของอาจารย์เดฟ Dave Rawitat Pulam ที่เพิ่งรอดกลับมาหลังจาก 2 วันที่หนักหน่วงหน่อยครับ "ทำไมต้อง Refactor ถ้าเรา Prefactoring ได้ตั้งแต่แรก"นั่นคือประโยคที่ผมชอบที่สุดตลอดสองวันที่ผ่านมา ต้องบอกว่าก่อนไปเรียนคื

อย่าเผลอรัก Design ตัวเอง มาทำความรู้จักกับ Second-System effect กัน

อย่าเผลอรัก Design ตัวเอง มาทำความรู้จักกับ Second-System effect กัน

เคยมั้ยครับ เวลาเรา Discussion ในทีมเกี่ยวกับวิธี Implementation ของฟีเจอร์หนึ่งๆ แล้วเราหรือแม้แต่คนอื่นในทีมจะมีโมเม้นต์ประมาณว่า “กับฟีเจอร์นี้นะ เราเคยทำแบบนี้ A B C D นะ ต้องทำอย่างนี้สิ เราเคยทำมาแล้วมันเวิร์ค” แล้วหลังจากนั้นที

เรากลับมาทำ BuJo ได้หนึ่งเดือนแล้ว
Bujo

เรากลับมาทำ BuJo ได้หนึ่งเดือนแล้ว

ในโลกที่วุ่นวาย และงานที่ถาโถม ทำให้ตลอดชีวิตที่ผ่านมา ไม่ทางใดก็ทางหนึ่ง ผมมักจะหาทางจัดการตัวเองผ่านอะไรซักอย่าง ซึ่งอาจจะเป็นได้ทั้ง Planner, Todo list, Trello Board, Post it ฯลฯ ซึ่งผมก็น่าจะเรียกว่าลองมาเยอะพอสมควร จนผมมาเจอ Bujo หรือ Bullet Journaling เมื่อ 2

Backup Django ง่ายกว่านี้ไม่มีอีกแล้วด้วย django-dbbackup
Python

Backup Django ง่ายกว่านี้ไม่มีอีกแล้วด้วย django-dbbackup

ช่วงนี้ผมต้องมาขึ้น Django project ใหม่กับทีมครับ ซึ่งพอขึ้น Project ใหม่ หนึ่งใน Development workflow ที่มาคู่กันคือ การต้องเอา Database จาก Production กลับมาใช้ที่ Local development ให้ได้ เพื่อที่จะ debug ปัญหาหลายๆ อย่างได้กับ Data บน

ใครว่า E2E เทสรันช้า เทคนิคง่ายๆ ที่จะทำให้ Cypress รันเร็วติดจรวด
Testing

ใครว่า E2E เทสรันช้า เทคนิคง่ายๆ ที่จะทำให้ Cypress รันเร็วติดจรวด

เกริ่นก่อนว่าที่ Pronto Tools เราเปลี่ยนมาใช้ Cypress มาได้ซักพักแล้วครับแล้วเราชอบมันมาก เราเลยไม่ลังเลเลยที่จะย้ายและเพิ่ม E2E เทสมาอยู่บน Cypress ซึ่งพอเทสมันเพิ่มขึ้นอย่างรวดเร็ว เวลาที่ใช้รันมันก็เพิ่มขึ้นอย่างมีนัยยะสำคัญ

2018
Year in Review

2018

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

10 Python libraries ที่เราชอบในปี 2018
Python

10 Python libraries ที่เราชอบในปี 2018

เป็นธรรมเนียมที่พึ่งสร้างเป็นปีที่สองกันครับว่า เราจะมามองย้อนกลับไปในปี 2018 ที่กำลังจะผ่านพ้นไปว่า Python Libraries ตัวไหนที่เราชอบบ้าง ของปีที่แล้วเราคัดมา 10 Libraries ปีนี้เราก็จะคัดมาอีก 10 เหมือนกันครับ แต่ลำดับไม่มี

PEP 8016 and the future of Python govenance
Python

PEP 8016 and the future of Python govenance

อย่างที่ทุกคนรู้นะครับว่า Guido ได้ถอดตัวออกจากการเป็น BDFL Role ที่เป็นมาอย่างยาวนานในช่วงกลางปีที่ผ่านมา แล้วการออกนั้นถึงแม้จะไม่ได้ effect กับ user อย่างเราๆ ท่านๆ แต่มีผลมากกับ Core developer ที่คอยดูแล CPython กับ Python Interpreter

เขียนงูให้วัวกลัวรายสัปดาห์ ฉบับที่ 2
Python

เขียนงูให้วัวกลัวรายสัปดาห์ ฉบับที่ 2

ข่าวประจำสัปดาห์Dropbox complete migrate to Python 3เวลานี้คงไม่มีใครไม่รู้จัก Dropbox นะครับ แต่อาจจะมีคนไม่รู้ว่า Dropbox เป็นหนึ่งในบริษัทที่ใช้ Python ใหญ่ที่สุดในโลก เฉพาะโค้ดของตัว Application Dropbox นี่ก็เกิน 1 ล้านบรรทัดแล้วครั

เขียนงูให้วัวกลัวรายสัปดาห์ ฉบับที่ 1
Python

เขียนงูให้วัวกลัวรายสัปดาห์ ฉบับที่ 1

ไอเดียนี้เริ่มจากอาทิตย์ที่แล้ว ที่รวบข่าวไว้ในโพสๆ เดียว แล้วก็เกิดไอเดียว่า ทำไมไม่ทำเป็น Newsletter เลยหละ มันเลยเป็นที่มาของโพสนี้และโพสต่อๆ ไปครับ โดย​ “เขียนงูให้วัวกลัว รายสัปดาห์” เราจะโฟกัสเฉพาะข่าวที่เกี่ยวข้องกับ Python

Share ประสบการณ์ Upgrade Python 3.7
Python

Share ประสบการณ์ Upgrade Python 3.7

ถ้าจะมีงานหนึ่งที่ผมทำแล้วรู้สึกสนุกและท้าทายทุกครั้งที่อยู่ที่ Pronto Tools ก็คือการอัพเกรดเวอร์ชั่น Python นี่แหละครับ ตอนผมเข้ามาทำงานใหม่ๆ ทีมใช้ Python 3.5 อยู่ปีที่แล้วเลยอัพเกรดเป็น 3.6 และในปีนี้เนื่องในโอกาส Python 3.7

สร้าง Load Test ง่ายๆ ด้วย Locust
Python

สร้าง Load Test ง่ายๆ ด้วย Locust

#pythontricks วันนี้ครับ พอดีวันนี้มีปัญหากับ API แล้วต้องทำ Load test แบบง่ายๆ เร็วๆ เลยไปเจอ locustio มาครับ และมันง่ายมากเลย Locust เป็น Load testing tool ตัวนึงครับ ผมไม่เคยใช้ตัวอื่นแต่พอมาใช้ตัวนี้ วันนี้ เช้

Patch ยังไงให้อ่านรู้เรื่อง
Python

Patch ยังไงให้อ่านรู้เรื่อง

สิ่งหนึ่งที่เราจะเจอหลังจากเขียน Unit Test มาได้ซักพักคือ มันจะมีบางอย่างที่เราควบคุมมันไม่ได้ครับ บางอย่างนั้นอาจจะเป็นไปได้ตั้งแต่ ค่าสุ่ม, เวลา, การอ่านเขียนไฟล์,​ การแก้ไข Database อะไรอย่างนี้เป็นต้น พอเรามาเจออะไรพวกนี้ มันจะเกิดคำถามขึ้นมาทันที

Python - ExitStack แบบสั้นๆ
Python

Python - ExitStack แบบสั้นๆ

วันที่ 7 ของ #PythonTricksEveryday วันนี้ขอเสนอ ExitStack() ครับ มาช้าหน่อยนะครับวันนี้ มัวแต่ตื่นเต้น 1,000 likes โอเค เข้าเรื่องดีกว่า ก่อนจะไปรู้จัก ExitStack เราต้องรู้จักสิ่งที่เรียกว่า context manager ก่อนครับ context manager

Why I love Python so much
Python

Why I love Python so much

ในโอกาสที่เพจ เขียนงูให้วัวกลัว ครบ 1000 likes ผมเลยคิดได้ว่า เออ อยู่ดีๆ ผมก็มาทำเพจเอามันส์ อยากเขียนอะไรก็เขียน แล้วก็มาสงสัยกับตัวเองบางครั้งว่า ทำไมเราถึงมีความรู้สึกอยากจะทำเพจนี้มากขนาดนี้ ผมเลยมองย้อนกลับมาหาตัวเองว่า ทำไม เราถึงชอบภาษานี้มากขนาดนี้ มั

Dedent your multiline string
Python

Dedent your multiline string

วันที่ 2 ของ #PythonTricksEveryday นะครับ ไหนๆ ก็เป็นวันสุดท้ายของการทำงานก่อนจะถึงวันหยุดยาว ขอแนะนำด้วย Tricks เล็กๆ ที่จะช่วยให้การทำงานกับ Multiline String เราดีขึ้นครับ สมมติว่าเรามี String ยาวๆ ที่ต้องมี Indent สวยๆ เช่น Email หรือ Code

The Power of Any / All
Python

The Power of Any / All

วันที่ 1 ของ #PythonTricksEveryday นะครับ วันนี้เปิดด้วยหนึ่งในเทคนิคที่ พอรู้แล้วก็ใช้ได้ตลอดเลย มันคือ built-in function ที่ชื่อว่า all() และ any() ครับ ไปดูสถานการณ์เลยดีกว่า สถานการณ์ที่เรามักจะเจอกันบ่อยๆ คือ เราต้องเขียน

Mock requests แบบสวยๆ ด้วย responses
Python

Mock requests แบบสวยๆ ด้วย responses

สิ่งหนึ่งที่เราเจอไม่ว่าจะช้าหรือเร็วคือ เมื่อเขียน Python ไปซักพักเราต้องยุ่งกับการยิง HTTP request ไปหา service ข้างนอก ซึ่ง Library ที่นิยมที่สุดในการทำสิ่งนี้ใน Python ก็คงหนีไม่พ้น requests นะครับ สมมติเรามีฟังก์

A day with Elixir
Elixir

A day with Elixir

จากวันเสาร์ - อาทิตย์นี้พี่ @zkan ชวนมาทำ Hackathon กันที่ Pronto Tools เลยเป็นโอกาสเหมาะว่าจะทำอะไรที่มัน Out of comfort zone ซักหน่อยแล้วส่วนตัวผมอยากจะเขียน Elixir มานานหลายปีมากเลยเป็นที่มาของ Blog นี้ครับ เอาจริงๆ จนจบวันนี้ผมยังไม่รู้เลยว่าที่ผมเขียนไปมั

มารู้จัก Data classes กันครับ
Python

มารู้จัก Data classes กันครับ

เกือบจะไม่ได้มาเขียนต่อกันละสำหรับ Part 2 ของ dataclass ตอนที่หนึ่งอยู่ที่ โพสนี้ นะครับ แต่เพื่อไม่ให้เป็นการเสียเวลาไปมากกว่านี้ เราไปต่อกันที่ Part 2 เลยครับ ตอนที่แล้วเราได้รู้จัก dataclass ได้รู้ถึงเหตุผลว่าทำไมถึงเกิดมันขึ

#100DaysOfPyCon2018 Day6: Big-O: How Code Slows as Data Grows
Python

#100DaysOfPyCon2018 Day6: Big-O: How Code Slows as Data Grows

Talk ผมดูวนอยู่สองสามรอบ เพราะต้องการเก็บทุกเม็ดทุกหน่วยจริงๆ คือ ผมไม่เคยเจอ Talk ที่ดูแล้วตื่นตาตื่นใจขนาดนี้มานานมาก ตอนนี้ยกให้เป็น Talk อันดับหนึ่งในใจของ PyCon ปีนี้เลย ผมคิดว่า Talk นี้จะไม่สรุป Key Takeaway เพราะอยากให้คนที่มารู