- 22
- 90 929
Copy Paste Engineer
Thailand
Приєднався 3 лип 2020
ภาษาไทย
: Education, Programming, Python, Web Scraping, Google Cloud
FB Page: CopyPasteEng/
Github: github.com/CopyPasteEngineer/
Dev.To: dev.to/copypasteengineer/
: Education, Programming, Python, Web Scraping, Google Cloud
FB Page: CopyPasteEng/
Github: github.com/CopyPasteEngineer/
Dev.To: dev.to/copypasteengineer/
แก้ Puzzle ด้วย Prolog - ใครคือนักฆ่า
จากคลิปก่อนที่ผมแนะนำภาษา Prolog ไป วันนี้มาลองใช้ Prolog แก้โจทย์ puzzle สนุก ๆ ให้ดูบ้าง หวังว่าจะสนุกและได้รสชาติของ logic programming ก้นไปบ้างนะครับ :)
โจทย์นี้ผมเอามาจาก youtube channel TED-Ed นะครับ ใครอยากฟังตัวโจทย์เต็ม ๆ กับเฉลยวิธีคิดของ TED-Ed ไปฟังกันได้คลิปนี้เลยนะครับ เขาเล่าสนุกกว่าผมเยอะ แค่ 5 นาทีเอง ฟังไม่ยากเลย
ua-cam.com/video/XkHJyqZqjxE/v-deo.html&ab_channel=TED-Ed
ติดตาม Copy Paste Engineer
Twitter: CopyPasteEng
TikTok: www.tiktok.com/@copypasteengineer
00:00 เล่าโจทย์
07:27 แก้โจทย์ Prolog
โจทย์นี้ผมเอามาจาก youtube channel TED-Ed นะครับ ใครอยากฟังตัวโจทย์เต็ม ๆ กับเฉลยวิธีคิดของ TED-Ed ไปฟังกันได้คลิปนี้เลยนะครับ เขาเล่าสนุกกว่าผมเยอะ แค่ 5 นาทีเอง ฟังไม่ยากเลย
ua-cam.com/video/XkHJyqZqjxE/v-deo.html&ab_channel=TED-Ed
ติดตาม Copy Paste Engineer
Twitter: CopyPasteEng
TikTok: www.tiktok.com/@copypasteengineer
00:00 เล่าโจทย์
07:27 แก้โจทย์ Prolog
Переглядів: 287
Відео
พาเล่น Prolog + รีวิวคอร์ส Math for Programmer Aj.Dave
Переглядів 1,4 тис.Рік тому
ในโลก programming มี paradigm การเขียนโปรแกรมที่หลากหลายมาก ที่คนส่วนใหญ่คุ้นเคยกัน เช่น functional programming หรือ imperative เป็นต้น ภาษาที่คนส่วนใหญ่ใช้กัน เช่น Javascript, Python, Golang ก็เป็น paradigm แบบ imperative คือเราสั่งให้คอมพิวเตอร์ทำนู่นทำนี่บน memory/hardware programming paradigm ที่ต่างกัน มันไม่ใช่แค่เปลี่ยน syntax การเขียนโค้ด หรือแค่จำคำสั่งใหม่ ๆ อย่างเดียว แต่มันจำเป็นต้อ...
[Podcast] CI/CD ไม่ใช่ Pipeline
Переглядів 8 тис.2 роки тому
CI/CD เป็นแนวคิดที่มีประโยชน์ในการพัฒนา software สมัยใหม่ แต่คนส่วนมากมักให้ความสำคัญกับส่วนของการทำ automation มากเกินไป ทั้ง ๆ ที่หัวใจสำคัญไม่ได้อยู่ตรงนั้น ใน Podcast นี้เราจะมาคุยกันว่าแนวคิดของ CI และ CD คืออะไร แล้วถ้าเราจะเริ่มทำ CI/CD ในทีมของเรา ควรจะเริ่มยังไงดี Resource ที่เป็นประโยชน์ Podcast TDD (ภาษาไทย) ua-cam.com/video/re4CmYYIyYE/v-deo.html Feature Flag trunkbaseddevelopment.c...
พาฝึกทำ Test Driven Development 1 - โจทย์ Basic
Переглядів 3,4 тис.2 роки тому
จากคลิป Podcast ก่อนหน้านี้ ที่เล่าเรื่องของ Test Driven Development (TDD) ไปแล้ว ในคลิปเราก็มาลองทำโจทย์ฝึกหัด โดยใช้เทคนิค TDD กันจริง ๆ ดูบ้างนะครับ จะได้เข้าใจขั้นตอนการทำงานต่าง ๆ มากขึ้น ในคลิปนี้จะเป็นโจทย์ง่าย ๆ เพื่อให้คุ้นกับการทำงานในแบบของ TDD กันก่อนนะครับ แล้วเดี๋ยวในคลิปถัดไปผมจะพาไปลองทำ TDD กับโจทย์ที่มันสมจริงมากขึ้น เช่น การทำ REST API ที่ต้องมีการต่อ Database แต่ในคลิปนี้เรา...
ออกแบบ Microservices ด้วย Domain Driven Design #4 - เครื่องมือในการทำงานร่วมกับ Domain Expert 1
Переглядів 3,9 тис.2 роки тому
การทำงานร่วมกับ domain expert อย่างใกล้ชิดและมีประสิทธิภาพ ถือเป็นหัวใจสำคัญของ Domain-Driven Design ใน part นี้เราจะมาดูแนวทางในการทำงานร่วมกับ Domain Expert พร้อมทั้งแนะนำเครื่องมือที่มีประโยชน์อย่าง Event Storming Workshop สำหรับ part นี้ และยังมีตัวอื่นจะแนะนำอีกใน part ต่อ ๆ ไปนะครับ Twitter: CopyPasteEng Facebook: CopyPasteEng UA-cam: ua-cam.com/channels/KCwQz-o0n...
[Podcast] ทำ TDD ถ้าอยากได้ software ที่มีคุณภาพ
Переглядів 2,5 тис.3 роки тому
Test Driven Development (TDD) เป็น process ในการพัฒนา software ที่ช่วยให้ software ของเรามีคุณภาพและ design ที่ดีอยู่เสมอ ซึ่งเป็นสิ่งที่สำคัญในการพัฒนา software ในยุคใหม่ ที่ต้องการเร็วและมีความซับซ้อนสูง รายละเอียดเป็นอย่างไร จุดที่ทำผิดพลาดกันบ่อย ๆ มีอะไรบ้าง เชิญรับฟังได้เลยครับ note: 𝐂𝐨𝐮𝐩𝐥𝐢𝐧𝐠 ใน software คืออะไร link นี้ภาษาไทย อ่านง่ายดีครับ naiwaen.debuggingsoft.com/2014/07/cohesion-vs-...
ออกแบบ Microservices ด้วย Domain Driven Design #3 - Architecture Overview
Переглядів 11 тис.3 роки тому
ในคลิปนี้เรากระโดดมาดูเรื่องของ Architecture กันบ้างนะครับ จะได้เห็นภาพการสร้าง microservices มากขึ้น จะได้ดูว่ามีปัญหาอะไรที่อาจจะเกิดขึ้นได้บ้าง แล้วเราจะมี technique อะไรที่จะนำไปใช้ได้บ้าง เป็น Overview โดยพยายามจะไม่ลงลึกเกินไป (นี่พยายามแล้วนะครับ 😂) แล้วปิดท้ายด้วย demo มีโค้ดจริงให้ดู ส่วนเนื้อหาเนี่ย ไม่ว่าคุณใช้ภาษาอะไรก็ดูได้นะครับ ส่วนตัว Demo ผมจะใช้ Python เป็นหลัก ทำ REST API ด้ว...
ImportError - หนีตาย Circular Import + การออกแบบ module/package
Переглядів 5153 роки тому
คลิปนี้ก็จะพูดถึงเรื่องของปัญหา Circular Import นะครับ คือการที่ project เรามีไฟล์หลาย ๆ ไฟล์ แล้วแต่ละไฟล์มัน import กันเอง เป็นวงกลม บางครั้งเราก็เจอ ImportError บอกว่า ไม่สามาร import ได้ ในคลิปนี้เราก็จะมาดูกันว่าสาเหตุจริง ๆ ของมันคืออะไร แล้วจะมีวิธีการแก้ปัญหายังไงบ้าง ผมให้ไว้ 4 วิธีนะครับ แล้วสุดท้ายเราจะมาคุยกันว่าการออกแบบ module/package ให้ดี ไม่มั่ว และเกิดปัญหา ImportError น้อย รว...
ออกแบบ Microservices ด้วย Domain Driven Design #2 - แบ่ง services ด้วยโมเดลภาษา
Переглядів 6 тис.3 роки тому
ในคลิปที่ 2 นี้ มาดูกันว่าเราจะเริ่มออกแบบ Microservices ด้วย Domain Driven Design ได้ยังไงกันนะครับ มีคำศัพท์ 3 คำ ที่เราจะดูกันในคลิปนี้ คือคำว่า Subdomain, Bounded Context, และ Ubiquitous Language คืออะไร สำคัญอย่างไร ไปดูกันครับ เนื้อหาคลิปนี้จะไปทางทฤษฎีสักหน่อย ผมเลยหาตัวอย่างมาเพิ่มให้ค่อนข้างเยอะ คิดว่าน่าจะเห็นภาพมากขึ้น แล้วเดี๋ยวคลิปใน part ต่อไป เราจะมาดูอะไรที่เป็นมุม technical กัน...
ออกแบบ Microservices ด้วย Domain Driven Design #1 - Concept Overview
Переглядів 9 тис.3 роки тому
คลิปนี้เป็นคลิปแรกของ series การออกแบบ Microservices ด้วย Domain Driven Design นะครับ Domain Driven Design เป็นวิธีการออกแบบระบบแบบหนึ่ง ที่ทำให้ระบบเราทำงานได้สอดคล้องกับกระบวนการทำงานจริงในโลกธุรกิจ ซึ่ง Domain Driven Design สามารถนำมาใช้กับการสร้าง Microservices ให้ดีได้ ใน series นี้เราจะมาดูกันทั้งในเรื่องของ concept ของการออกแบบต่าง ๆ ไปจนถึงวิธีการ implement ว่าจะมี technology หรือ desig...
เทคนิคเขียน Python OOP #3 - SOLID, Hexagonal Architecture + Python FastAPI Microservices
Переглядів 4,8 тис.3 роки тому
โค้ด: github.com/CopyPasteEngineer/oop-example-ordering-service part ที่ 3 นี้ก็จะเป็นเรื่องของการออกแบบ OOP ในระบบที่ใหญ่ และซับซ้อนนะครับ ก็จะมีโค้ดตัวอย่าง application จริงมาให้ดูกัน เป็นโค้ด FastAPI ที่ implement ตามแบบ Hexagonal Architecture และออกแบบโดยวิธีการ Domain-Driven Design สำหรับเป็นส่วนหนึ่งในระบบ Microservices นะครับ ซึ่งเป็นโค้ดจาก series สอนออกแบบ Microservices ที่ผมกำลังทำอยู...
เขียนโค้ดอ่านไม่รู้เรื่อง โค้ดแก้ยาก จะแก้ทีต้องลบเขียนใหม่หมด - เทคนิคเขียน Python OOP #2
Переглядів 1,4 тис.3 роки тому
มาต่อกันกับเรื่องการเขียนโค้ดยังไงให้ "ดี" นะครับ part นี้เรามาต่อกันในเรื่องโค้ดที่สามารถหา bug ได้ง่ายนะครับ เราจะมาดูการทำ unit test แบบง่าย ๆ เครื่องมือการทำ testing ใน Python อย่าง Pytest และการ validate ข้อมูล และ input ในระบบ ด้วย module Pydantic กันนะครับ . ตัวอย่างเพิ่มเติม การเขียนโค้ดให้อ่านรู้เรื่อง CopyPasteEng/posts/377462173868940 ทำไมตัดการทำ test ออก ไม่ได้ช่วยให้ท...
เขียนโค้ดอ่านไม่รู้เรื่อง โค้ดแก้ยาก จะแก้ทีต้องลบเขียนใหม่หมด - เทคนิคเขียน Python OOP #1
Переглядів 2,3 тис.3 роки тому
คลิปนี้จะมาพูดเรื่องการเขียนโค้ดยังไงให้ "ดี" นะครับ แน่นอนว่าเขียนโค้ดให้ทำงานได้ตามต้องการเนี่ย ใคร ๆ ก็เขียนได้ แต่เขียนโค้ดยังไงให้มันแก้ไขได้ในอนาคต, อ่านรู้เรื่อง, และเพื่อน ๆ อยากทำงานด้วย เรื่องนี้อาจต้องอาศัยการออกแบบและวางแผนที่ดีตั้งแต่ก่อนโค้ด บวกกับเทคนิค (design pattern) นิดหน่อย คลิปนี้จะมารีวิวเทคนิคง่าย ๆ ให้ฟังแบบไว ๆ นะครับ . Facebook: CopyPasteEng . BGM: Little ...
Quick Tutorial - deploy app ง่าย ๆ บน Google Cloud Run
Переглядів 5 тис.3 роки тому
Quick Tutorial - deploy app ง่าย ๆ บน Google Cloud Run
Neo4j - แนะนำ + Demo การใช้ Neo4j NoSQL Graph Database (Docker + Cypher + Python)
Переглядів 3 тис.3 роки тому
Neo4j - แนะนำ Demo การใช้ Neo4j NoSQL Graph Database (Docker Cypher Python)
สร้างเกม FPS ด้วยภาษา Python และคณิตศาสตร์มัธยม part 2 - ควบคุมการเคลื่อนที่ของตัวละคร
Переглядів 5 тис.3 роки тому
สร้างเกม FPS ด้วยภาษา Python และคณิตศาสตร์มัธยม part 2 - ควบคุมการเคลื่อนที่ของตัวละคร
Python Web Scraping Project 2 - เขียน bot ดูดรูปดาราใน Instagram
Переглядів 2,5 тис.3 роки тому
Python Web Scraping Project 2 - เขียน bot ดูดรูปดาราใน Instagram
สร้างเกม FPS ด้วยภาษา Python และคณิตศาสตร์มัธยม part 1 - Basic การเขียนเกม ด้วย PyGame
Переглядів 16 тис.3 роки тому
สร้างเกม FPS ด้วยภาษา Python และคณิตศาสตร์มัธยม part 1 - Basic การเขียนเกม ด้วย PyGame
Python Graph Visualization - วาด Network ยังไงให้สวย! (Concept + Code)
Переглядів 5034 роки тому
Python Graph Visualization - วาด Network ยังไงให้สวย! (Concept Code)
Python Web Scraping Project 1 - ดึงข้อมูลหุ้นจาก Yahoo! Finance
Переглядів 2,9 тис.4 роки тому
Python Web Scraping Project 1 - ดึงข้อมูลหุ้นจาก Yahoo! Finance
ขอบคุณครับฟังมาหลายคลิปพึ่งมาเข้าใจก็คลิปนี้ละอธิบายดีมาก
สวัสดีครับ พอดีพึ่งมาดูคลิป ขออนุญาตนะครับ ไม่ทำ part 3 แล้วหรอฮะ
ขอบคุณสำหรับความรู้ดีๆครับ
อยากดูแบบยาก ที่พี่อัดไว้ก่อนหน้า เป็น ep.2 ครับ
ศิษย์พี่หายไปไหนกลับมาก๊อน
Thank
ชอบช่องนี้มาก❤❤
ในหนังสือ Sam Newman ไม่ถือว่า 2-Phase Commit เป็น pattern หนึ่งใน microservices นะครับ เผื่อใครมาดูแล้วงง
ขอบคุณครับ แจ่มเลย
ขอบคุณครับ
มีรูปภาพประกอบทำให้เข้าใจง่ายมากครับ ขอบคุณมากครับ
อธิบายได้ดีครับ
พึ่งเจอมาเลยครับได้ merge คนสุดท้าย นั่งแก้ conflict จนท้อ ระเบิดรัวๆ
ขอบคุณมากครับ
ขอบคุณมากครับ
รีวิวซะอยากเรียนตามเลยค่ะ ;-;
เมื่อไหร่ep3จะมาครับ
เย้ มีคลิปใหม่มาแล้ว
หายไปนานเลยนะครับ ติดตามครับๆ
หายไปนานเลย กลับมาทำคลิปลงช่องนี้บ่อย ๆ นะครับ พี่อธิบายดีมากเลย
คุณพระ! หายไปนานเลยครับ 🎉🎉🎉🎉 รอติดตามเป็นกำลังใจให้นะครับ อธิบายดีมาก
ลึกซึ้ง
อยากให้ทำEP.3เเล้วครับ ช้วยทำEP.3ได้มั้ยครับ
ขอบคุณมากครับ หลังจากได้ดู กลับมาคิดว่าตัวเองยังต้องศึกษาอีกมาก ขอให้กำลังใจและวิดีโอดีๆแบบนี้ต่อไปนะครับ
Part 3 มีหรือยังครับ
สุดเจ๋ง
Que idioma es esto ?
มีประโยชน์มากเลยครับ
ผมใช้ git command เป็นหลัก
ชอบมากครับ มีประโยชน์สุดๆ ขอบคุณครับ
noted krub
ขอบคุณสำหรับ content ดี ๆ ครับ ผมรอฟังเรื่อง feature flag ต่อนะครับ
ขอบคุณครับ
ขอบคุณครับมีประโยชน์มากเลยๆ
ขอบคุณ ครับ.. อธิบายดีมาก ครับ..ทำคลิป ออกมาเยอะๆ นะครับ
ขอบคุณครับ รอติดตามนะครับ
ดีมากเลยครับ ถ้ามีเวลาว่างอยากให้ช่วยทำ tutorial สำหรับสร้าง restapi โดยใช้ TDD ครับ
ชอบฟังหัวข้อนี้มากเลยครับ อยากให้กลับมาทำอีกจัง
สอนดีจริงครับ
เข้าใจมากขึ้น อธิบายดีมาก ขอบคุณมากๆ นะครับ
มีคำถามนิดหน่อยครับในเรื่องการแบ่ง bounded context ส่วนนี้จริงๆแล้วอยู่ใน solution space ซึ่งทีม developer สามารถช่วยกันแบ่งขอบเขตและกำหนดได้ไม่ใช่หรือครับ แต่ส่วนที่เป็น problem space หรือการกำหนด sub-domain ผมคิดว่ามันเป็นส่วนที่ไม่สามารถกำหนดได้ (เพราะถูกกำหนดมาแล้วในทาง business โดย domain expert) ถูกผิดยังไงขออภัยด้วยครับ 😅
ขอยกตัวอย่างมาจากในหนังสือที่ผมอ่านนะครับ -> While sub-domains are discovered bounded contexts are designed and modelled to provide the best solution to the problem space and to define the respective boundaries that make sense in your system.
@@weraponpat1913 ใช่ครับ subdomain เป็นส่วนหนึ่งของ business อยู่ใน problem space ส่วน bounded context เป็นขอบเขตความต่อเนื่องของของ ubiquitous language ซึ่งเป็น solution space และ "ทีม" สามารถออกแบบเองยังไงก็ได้ ซึ่งในโลกอุดมคติของ DDD คือเราอยากให้ subdomain กับ bounded context ตรงกันครับ ให้ขอบเขต ubiquitous language ของระบบ ตรงกับมุมมองของฝั่ง business ทำให้การสื่อสารราบรื่น ซึ่งเป็น goal สำคัญหนึ่งของ DDD ครับ แต่ในทางปฎิบัติมันเป็นไปไม่ได้จริงเสมอไป เช่นเวลาที่เรามี legacy system หรือมีข้อจำกัดทาง technical หรือมีการปรับเปลี่ยนแนวทาง business เพราะฉะนั้นคิดว่าที่บอกมาถูกต้องเลยครับ แต่เสริมนิดนึงว่าส่วนตัว ผมไม่คิดว่า subdomain เป็นสิ่งที่กำหนดไว้แล้วครับ มองว่าทั้ง bounded context และ subdomain เปลี่ยนได้เสมอ อยากให้มองว่าทั้ง developer และ domain expert ทำงานร่วมกัน และต่างฝ่ายต่างช่วยกันเรียนรู้ไปพร้อม ๆ กัน developer ช่วย domain expert ให้ทำความเข้าใจในงานของตัวเองมากขึ้นเรื่อย ๆ และ domain expert ก็ช่วยให้ developer เข้าใจ mental model ของ business มากขึ้นเรื่อย ๆ เช่นกันมากกว่าครับ ขอบคุณมากเลยครับ ยินดีแลกเปลี่ยนความคิดเห็นครับ
ไม่ได้ทำต่อแล้วหรอครับ
ยอดเยี่ยม เลย ครับ เทพ มีประโยชน์ กับคนอื่นอีกมากๆ ครับ ขอชื่นชมครับ น้องชาย
มีต่อมั้ยคะ
โหพี่สุดยอดมากๆเลยครับ รอบติดตามทุกซีรี่ย์ครับ ขอบคุณครับ
ขอบคุณมากครับที่ทำคลิปนี้ ทริคการใช้ Chrome Developer หา url จริงจาก JS มีประโยชน์มากครับ
ขอบคุณมากครับ และทำให้เข้าใจถึงภาพรวมมากขึ้น
"ความยาก คือการทำความเข้าใจโจทย์" ขอบคุณมากครับที่แบ่งปันความรู้
ดูเพลินมากครับ อธิบายเรื่อง software project development ที่ยากให้เข้าใจได้ง่ายๆ เวลาทำ product development ก็มักจะเจอระบบที่ซับซ้อนแบบนี้ แต่สงสัยครับ การเปลี่ยนจาก CRUD มาเป็น Repository ส่งผลต่อ performance โดยรวมของ service แค่ไหนครับ?
แน่นอนว่ามีผลครับ 1 คือ Python มันทำการคำนวณช้ากว่าทำใน database เล็กน้อยอยู่แล้ว และ 2 คือมีเพิ่ม network traffic ไปกลับระหว่าง app กับ database แน่นอนว่าจะทำงานได้ช้าลงครับ แต่สิ่งที่ได้กลับมาคือโค้ดเราจะ maintain ได้ง่าย และแบ่งงานกับทีมได้ดียิ่งขึ้นครับ เพราะจากประสบการณ์คือในงานส่วนใหญ่ เราไม่ได้ต้องการ performance ที่สูงที่สุดเสมอไปครับ ถ้าเราอยู่ใน industry ด้าน financial ที่ถ้าทำงานช้าไปสักเสี้ยววินาทีก็ขาดทุนได้เป็นล้าน อันนี้ performance ก็อาจจะสำคัญ แต่งานส่วนใหญ่ ผมเลือก maintainability over performance ครับ คือทำโค้ดให้มัน maintain ง่าย ทำงานร่วมกับคนอื่นง่ายเอาไว้ก่อน แล้วถ้าเราอยากจะ optimize ทำให้มันเร็วขึ้นทีหลัง เราค่อยหาวิธีต่อ ก็จะทำได้ง่ายแล้ว เช่นเพิ่ม memcache, ทำ CDN, ใช้ sharding NoSQL หรือเปลี่ยนบางส่วนกลับไปรันใน db เป็นต้น ก็ทำได้ครับ เพราะเราทำโค้ดให้แก้ไขง่ายอยู่ก่อนแล้ว
@@CopyPasteEngineer ขอบคุณมากครับ
13:30 ขอเพิ่มนิดหนึ่งครับ พึงทำ linting เสมอ ก่อน commit ขอบคุณที่แบ่งปันความรู้ เป็นกำลังใจให้สำหรับคลิปต่อๆไปครับ