My first PyCon US experience (2021, Online)

--

หลายปีที่แล้วผมเคยพูดไว้ว่า หนึ่งในสิ่งที่ผมชอบเกี่ยวกับภาษา Python ที่สุดคือ Community ครับ และผ่านมาหลายปี ผมก็ยังยืนยันคำเดิมว่า Python Community เป็นหนึ่งใน Tech community ที่เปิดรับและเป็นมิตรมากที่สุดที่หนึ่งครับ และงานใหญ่ที่สุดประจำปีของชาว Python คืองาน PyCon US หรือหลาย ครั้งก็เรียกกันแค่ PyCon เพราะที่นี่เป็น Original ก่อนจะมี regional PyCon ต่าง ไม่ว่าจะเป็น Euro Python, PyCon AU, PyCon APAC หรือ PyCon Thailand ครับ

และอย่างที่เรารู้กันดีว่าปี 2021 นี้ยังเป็นอีกปีที่การระบาดของไวรัส COVID-19 ทำให้นี่เป็นปีที่สองที่ PyCon US จัด Online ครับ ซึ่งข้อดีคือ ทำให้เราๆ ที่ไม่ได้อยู่ US สามารถร่วม Conference ได้เพียงแค่มี Computer / Internet เท่านั้นครับ แต่ข้อเสียคือ Timezone จะลำบากหน่อย เพราะเวลา US แทบจะกลับด้านกลางวันกลางคืนกับเวลาไทยเลย

วิธีการ Scout หัวข้อผมก็ง่ายๆ ครับทำ Spreadsheet แล้วก็เรียงตาม timeline สำคัญคือ Track ไหนเวลาไหน

การเตรียมตัว

ก่อนจะถึง Conference หลังจากที่เรา Sign up ในเว็บไซต์ PyCon US (ซึ่งปรับใหม่แทบทุกปี) เราก็คอยติดตามข่าวดูได้ตลอดครับว่ามี Tutorial หรือ Talk อะไรบ้าง ซึ่งหัวข้อจะเยอะมาก และหลายๆ หัวข้อที่เราสนใจก็มักจะมาในเวลาเดียวกันแต่อยู่คนละ Track เพราะฉะนั้น ช่วงสัปดาห์ก่อนวันงานจะเป็นช่วงที่ผมวางแผนว่า อยากจะเข้าไปฟัง ไป Discuss ใน Talk ไหนบ้าง เพื่อที่พอถึงวันงานจะได้ไม่ต้องมาเลือกแบบรีบๆ ครับ

ซึ่งสิ่งสำคัญอย่างนึงที่ผมค้นพบเลยคือ วางแผนเรื่อง Timezone ดีๆ ครับ เพราะใน Official PyCon US website จะแสดงเวลาเป็น US หมด แล้วผมมาค้นพบอีกทีตอนวันงานว่า Talk ที่อยากฟังจะอยู่ตอนใกล้ๆ เช้าเวลาไทย อะไรแบบนี้ ทำให้พลาดไป

นอกจากหัวข้อที่ผมเตรียมตัวแล้ว อีกสิ่งหนึ่งที่เตรียมคือเวลานอนครับ จากประสบการณ์ PyCon Belarus กับ PyCascade ในช่วงต้นปีที่ผ่านมา ผมไม่เคยอยู่ได้เกินครึ่งงาน เพราะว่าสลบก่อนจากผลของ Different Timezone ครับ

หน้าเว็บของ Hubilio ครับ จะเห็นว่าจำลองส่วนต่างๆ ของ Conference มาไว้ตรงเมนูหมดเลย
ช่วง​ Conference Day พอถึงเวลาแต่ละ Talk จะมี Schedule มาแจ้งเตือนครับ

Conference Day

Conference Day ของ PyCon US ปีนี้ตรงกับคืนวันศุกร์ที่ 14 ถึงเช้าวันเสาร์ที่ 15 และคืนวันเสาร์ที่ 15 ถึงเช้าวันอาทิตย์ที่ 16 ครับ ซึ่งวันศุกร์จะเหนื่อยๆ หน่อย เพราะไปทำงานมาทั้งวัน แล้วมาต่อ Conference ในตอนกลางคืน ซึ่งช่วงสัปดาห์ของ PyConUS จะเร่ิมด้วย Tutorial กับ Language Summit ก่อนครับ แต่ผม Sign up สอง event นั้นไม่ทันก็เลยไม่ได้ร่วม ครับโดย Platform ที่ PyCon US เลือกใช้คือ Hubilio ครับ โดยทีมจะส่ง link ในการเข้างานมาให้ตั้งแต่ช่วงต้นสัปดาห์ครับ

ซึ่งใน Platform Hubilio นี่ก็มีตัวเลือกให้เราเล่นหลากหลายมาก จำลองมาจากงาน Conference จริงๆ ครับ ไม่ว่าจะเป็น Lounge หรือ Sponsor Booth ที่เราสามารถไปเยี่ยมชมหน้าเพจที่ custom มาโดยเฉพาะของ Sponsor ครับ รวมถึงเข้าไป Say Hi หรือนัดเวลาคุยกับพนักงานจาก Sponsor Booth ได้ด้วยครับ เหมือนเราไปคุยกับคนที่บูธจริงๆ เลย

นอกจากนั้นแล้วด้วยความที่ Talk จะถูก Pre-record มาก่อนทำให้เราสามารถดูย้อนหลังได้ด้วยครับ ซึ่งมี Sponsor Workshop ที่ผมอยากฟังมากคือ Blackfire: Debugging Performance in Python and Django applications ก็สามารถกดเข้าไปดูย้อนหลังได้ครับ

Keynote: Imaging Rembrandt’s The Night Watch at 5um Resolution (717 GP) with Python — Robert Erdmann (@erdmann)

เป็น Talk ที่มาเล่าถึง Operation Night Watch ครับ ซึ่งเป็นโปรเจ็คการฟื้นฟูภาพ The Night Watch ของ Rembrant ครับ ซึ่งใน Talk เล่าถึงเทคนิคในการฟื้นฟูภาพที่ทีมนี้ใช้กัน ที่ผมขอเรียกว่าจุดสูงสุดของสาขา Image Processing เลยครับ ตั้งแต่การใช้กล้อง Hasselblad 100MP ถ่ายแต่ละส่วนของภาพ หรือใช้ Laser Rangefinder ในการวัดมุมของผืนผ้าใบของภาพ เพื่อสร้าง 3D Map รวมไปถึงเทคนิคในการ Optimization ผ่าน Machine Learning ต่างๆ เรียกได้ว่าถ้าใครหาแรงบันดาลใจในการทำ Image Processing ผมแนะนำ Talk นี้เลยครับ

Generating buzz with realtime FM audio synthesis — Łukasz Langa (@llanga)

Talk นี้พาผมเข้าไปโลกดนตรี synthesis ครับผ่านการเขียนโค้ดสร้าง sine wave จาก Python แล้วเริ่มทำ filter frequency modulate แล้วทำเป็นเสียงผ่าน MIDI interface ครับ ผมชอบ Talk นี้ตรงที่ใช้ Feature ของ Python ใหม่ๆ หลายอย่างเลยทั้ง @dataclasses, Type annotation ที่ไม่ต้อง import Typing แล้วหรือ Generator ที่เราใช้ๆ กันทั่วไปนี่แหละครับ ส่วนตัวผมไม่ค่อยมีความรู้เรื่องดนตรีเลยไม่ค่อยเข้าใจเท่าไรเรื่อง Pitch, note, Envelop function แต่คนที่สนใจเรื่องดนตรีผมว่าน่าจะชอบมากครับ

Writing Good Documentation for Developers — Meredydd Luff

ตอนแรกผมเข้าอีก Talk นึงเรื่อง NumPy API แล้วผมฟังแล้วไม่ค่อยเกท เลยเปลี่ยนมาเข้า Talk นี้แทน แล้วสนุกดีครับ คือใน Talk เค้ามองว่า Documentation is content marketing ของ Software เรา ซึ่งคนอื่น Care มั้ยไม่รู้ แต่เค้าแคร์เพราะเป็นการสร้างประสบการณ์ที่ดีให้กับคนที่มาใช้ Software เรา นอกจากนั้นการที่เค้ามอง Document usage ตามความเป็นจริงทั้ง zoom-in ที่ลงรายละเอียดขึ้นเรื่อยๆ จาก Tutorial, How-to เรื่อยไปจน API Docs หรือ Zoom-out ที่กลับด้านกัน ทำให้เราเข้าใจวิธีการเขียน journey ของการใช้งาน Document ได้ชัดมากครับ อีกจุดนึงที่ชอบของ Talk นี้คือวิธีการแบ่งประเภท Documents ตาม purpose ของมันจะช่วยให้เราโฟกัสกับการเขียนได้ดียิ่งขึ้นครับ และตอบโจทย์คนที่ใช้งานมากยิ่งขึ้น

Zero to production-ready best practice process for docker packaging — Itamar Turner-Trauring (@itamarst)

หลายๆ คนน่าจะรู้จักเว็บไซต์ Python=>Speed กันใช่มั้ยครับ ที่ชอบพูดถึงเรื่อง Infrastructure เกี่ยวกับ Python โดย Talk นี้มาจากเจ้าของเดียวกันครับ ซึ่งพูดถึง Practices ที่เราควรทำเวลา Packaging Python docker แต่ด้วยความที่ Talk จำกัดเวลาแค่ 25 นาที ทำให้เค้าพูดถึงได้แค่บางส่วน ที่กลั่นมาแล้วว่าช่วยให้ชีวิตดีขึ้นแน่นอน เป็น Big Picture ที่เรียงตาม Priority มาให้แล้ว ส่วนตัวผมได้รู้เทคนิคใหม่สองเทคนิคคือ เราสามารถเปิด PYTHONFAULTHANDLER=1 เพื่อให้ CPython interpreter แสดง error ในชั้นที่ interface กับภาษา C ได้ครับ ซึ่งหลายๆ Library ใช้อยู่ไม่ว่าจะเป็น NumPy หรือ Matplotlib หรืออีกเทคนิคนึงคือ เราสามารถ Pre-compile pyc bytecode ได้ตั้งแต่ build Docker image ครับ ซึ่งช่วยลด start-up time ของ Docker Image เราได้ดีเลยทีเดียว

Restarting Pyjion, a general-purpose JIT for Python — is it worth it? — Anthony Shaw (@anthonypjshaw)

Talk นี้ผมไม่ได้ดูสดครับ เพราะหลับไปก่อน (ตี 4 เวลาไทยวันนั้น) แต่ข้อดีของ Online Conference คือ “เราสามารถมาดูย้อนหลังได้ครับ” ซึ่งผมก็มาดูย้อนหลังวันเสาร์ตอนกลางวัน แล้วน่าสนใจมากทีเดียว โดย Talk นี้เป็นการเพิ่มความเร็วในการทำงานของ Python ผ่าน Pyjion ซึ่งเป็น specialize JIT แทนตัวปกติที่มาจากภาษาครับ ซึ่ง JIT ตัวนี้จะช่วย optimize การทำงานบางส่วนของ CPython ให้เร็วขึ้นได้ เพียงแค่ pip install pyjion แล้ว import ไปใช้งานแค่นั้นเองครับ โดยรองรับ cross-platform ตั้งแต่ x86 — ARM เลย ซึ่งเทคนิคที่ Pyjion ใช้คือการ Profile โค้ดที่เคยรันแล้ว Optimize code ให้รันในรอบต่อๆ ไป ซึ่งเป็นเทคนิคคล้ายๆ กับ PyPy เลยครับเรียกว่า Profile Guided Compilation (PGC) ส่วนตัวอย่างใน Talk มีตั้งแต่ง่ายๆ อย่าง function เดี่ยวๆ ไปจนถึงการเอาไปใช้แก้ปัญหา n-body problem ซึ่งเร็วขึ้นถึง 33% เลยครับ

ผมจำได้ว่าผมเห็น Tweet นี้ของ @PyCon แล้วหลังจากนั้นผมจำอะไรไม่ได้อีกเลยของวันแรกครับ

Virtual Lighting Talks (May 15)

ส่วนตัวผมพลาด Lighting talks วันแรกไปเพราะหลับไปก่อน แต่วันที่สองเป็น Session แรกเลย ได้เก็บมาครับ ซึ่งมีตั้งแต่ Promote Regional PyCon อย่าง PyCon Latam, PyCon Chile, หรืองานอย่าง Advent of Code เรื่อยไปถึงเทคนิคการใช้ Jupyter Notebook, pytest Parameterize tests หรือ f-string หรือ Promote Framework ที่ตัวเองทำอยู่ไม่ว่าจะเป็น

  • CommitCanvas ที่ช่วยให้เรา commit เป็นรูปแบบที่เราตกลงกันในทีมผ่าน ML Model ที่เรียนรู้จาก Git commit history ของเรา
  • APIFlask ซึ่งเป็น Framework ที่สมน้ำสมเนื้อกับ FastAPI มาก
  • Direnv ช่วยให้เรา Config environment ตามโปรเจ็คแล้วอ่านตาม directory ในเครื่องเรา
  • All-repos ช่วยให้เราทำงานกับ multi-repo git ได้ง่ายขึ้นผ่าน batch operation

Keynote: Pythonization of Healthcare — Akshay Sharma

Talk นี้พูดถึง Healthcare industry ที่กำลังเปลี่ยนไปด้วยพลังของ Python ครับซึ่งมีประเด็นสำคัญคือ การ shift paradigm ไปที่ compute first ซึ่งก็มือถือของเราๆ ท่านๆ แทนที่จะใช้ Mainframe ที่มี format ข้อมูลหลากหลายและทำงานด้วยยากครับ ซึ่งมันเกิดขึ้นได้เพราะยุค Pandemic นี้เราแทบจะลบ Geographic Constraint ออกไปได้เพราะทุกคนเข้าถึงโทรศัพท์และอินเตอร์เน็ตแล้ว อีกสิ่งหนึ่งที่ผมชอบมากคือ Concept Data Fluency ของการที่ใช้ Jupyter Notebook เป็นตัวกลาง format เดียวในการคุยกันตั้งแต่ data engineer, scientist, finance/operation ไปจนถึง Clinician ครับ

Packaging Python in 2021 — Jeremiah Paige (@ucodery)

Talk นี้จริงๆ โฟกัสที่ pyproject.toml ซึ่งเป็นมาตรฐานใหม่ของไฟล์โปรเจ็คใน Python แทน setup.py แต่ผมว่าสิ่งที่ผมชอบมากของ Talk นี้คือการที่พาเราไปดูวิวัฒนาการของ Packaging ตั้งแต่ distutils มาจนถึงปัจจุบันครับ เลยทำให้เราเข้าใจมากขึ้นว่าที่มีอยู่ปัจจุบันเนี่ย มันอาจจะไม่ดีที่สุด แต่มันก็แก้ปัญหามาหลายอย่างแล้ว ใน Talk ยังมีคำแนะนำเกี่ยวกับการ Migrate project จาก build tools เก่าๆ มา pyproject.toml อยู่ด้วยครับ

Python Performance at Scale — Making Python Faster at Instagram — Dino Viehland

ผมอยากบอกว่านี่เป็นหนึ่งใน Talk ที่ผมตั้งตารอคอยที่สุดของงานเลยครับ (เพราะผมไม่ได้สมัคร Language Summit ไป) แต่ใน Talk นี้เราได้เห็นเลยว่า Instagram ก็ยังคงไม่เปลี่ยนไปมากจากที่เราเคยฟังใน Talk ปีที่ผ่านๆ มาครับ โดยยังคงเป็น Django รันอยู่บน uWSGI อยู่ครับ Talk นี้มี Technical terms เยอะมากเกี่ยวกับ CPython interpreters แต่เราได้เห็นเลยว่าแต่ละจุดที่ Optimize ไปมันช่วยเพิ่ม Performance ได้กี่ % ซึ่งสิ่งที่น่าสนใจคือ Metrics ที่เค้าใช้วัดคือ RPS (Request per second underload) ครับ​ซึ่งวัดบน Production จริงๆ ด้วย อีกส่วนที่น่าสนใจคือในส่วนที่เค้ายัง Experiment อยู่ครับ ซึ่งผมสนใจมากตรง Static Python ครับ ซึ่งเป็นความพยายามในการทำให้ Python ได้ Performance ที่ดีขึ้นพอๆ กับ MyPyC หรือ Cython แต่ยังคงเขียนด้วย syntax เดิมๆ ของ Python อยู่

พอจบ Talk ผมไป join ห้อง discussion ต่อครับเลยได้รู้รายละเอียดนิดหน่อย เพิ่มขึ้นมาคือ โปรเจ็ค Cinder นี้ใช้คนแค่ 20 คนทำมา 3 ปีครับ และเป้าหมายคือการย้าย computation time ลงไปใน JIT ให้มากที่สุด ใน session มีคนถามถึง HHVM ซึ่งเป็นรัน time ของ Hack ด้วยว่าเคยมีแพลนจะแปลง Python ไป HHVM มั้ย ซึ่งเค้าก็บอกว่า สุดท้ายแล้วมันก็ไม่คุ้มที่จะทำทุกอย่างให้เป็นอย่างเดียวครับ

Gradual Typing in Practice — Maggie Moss

ผมฟัง Talk เกี่ยวกับ Type annotation มาทุกปี แต่ Talk นี้เป็นครั้งแรกที่ผมเห็น Pyre แบบใช้งานจริงๆ ครับ ซึ่งเป็น Type checker จาก Facebook ที่ออกมาซักพักละ ซึ่งการได้เห็นฟีเจอร์อย่าง pyre-upgrade, strict mode, infer ก็ทำให้อยากปรับไปใช้ตัวนี้แทน mypy ที่ใช้มานานอยู่มากแล้วครับ อีกส่วนที่น่าสนใจคือ gradual typing strategy ที่ทีมนี้ใช้อย่างเช่น การมี dashboard ในการ track type coverage, การให้เวลา engineer เพื่อเพิ่ม type โดยเฉพาะ, ​การ on board new engineer ให้คุ้นเคยกับงานที่ใช้ type แต่แรกเลย หรืออย่างในเรื่องของ Metrics ที่ตัว pyre statistics มี built-in มาให้ครับ แล้วเค้าเก็บข้อมูลตัวนี้ลง Dashboard ไว้ดูในทีมทุกวันเลยว่าเพิ่มขึ้นเท่าไรแล้วครับ

Unexpected Execution: Wild Ways Code Execution can Occur in Python — Graham Bleaney, Ibrahim Mohamed

เรียกได้ว่าเป็นเรื่องบังเอิญมากที่ Talk ในวันที่ 2 ผมเข้าของ Facebook / Instagram หมดเลย (ตอนแรกนึกว่าแค่ 2 Talks บนแต่ Talks นี้เดินสุ่มๆ เข้ามา โดย Talk นี้พูดเกี่ยวกับเรื่อง Remote Code Execution (RCE) ครับว่ามันเกิดขึ้นได้ อย่างไรบ้างตั้งแต่ Pickle, Untrusted input (ซึ่งผมเพิ่งรู้ว่า underlying มัน implement eval() อยู่ทำให้ execute code ได้) ไปจนถึง upload file ซึ่งมี GitHub repository ที่เค้าทำไว้ให้ลองเล่นพวก Vulnerability พวกนี้ด้วยครับ สำหรับผมได้ key takeaway จาก Talk นี้คืออย่า import untrusted code เด็ดขาดและจงแยก Data กับ Code ออกจากกันให้ชัดเจนครับ

Python Steering Council and PSF Community Address

Session สุดท้ายของ Conference Day ครับ ซึ่ง Steering Council มาเล่าให้ฟังหลายๆ เรื่องผมขอสรุปเป็น bullet ละกันเพราะมีหลายเรื่องมาก

  • Long Term plan — ทาง Steering Council มองในเรื่อง Compatibility concern กับ Maintainability เป็นหลักครับ รองลงมาเป็นเรื่อง Performance ซึ่งก็มีหลายๆ คนทำเรื่องนี้อยู่เช่นทีม PyPy ส่วนในเรื่องการศึกษาก็พยายามที่จะทำให้ Python ยัง easier to access และปรับปรุงคุณภาพ Document และ error message ต่อไปครับ
  • Short term plan — คงหนีไม่พ้น Python 3.10 ที่กำลังจะออกเร็วๆ นี้ครับที่เพิ่มหลายๆ เรื่องไม่ว่าจะเป็น Pattern matching, parenthesized context manager, typing/performance improvement, better debugging และ Deprecate distutils ที่อยู่กับ Python มานานครับ สิ่งที่น่าสนใจอีกอย่างคือ Python 3.10 เป็นเวอร์ชั่นแรกที่ Cover PEP มากที่สุดตั้งแต่ release มาด้วยครับ

สิ่งที่น่าสนใจอีกอย่างที่มีคนถามคือ ไหนๆ เราก็มี type แล้ว Python เราจะเปลี่ยนไปเป็นภาษา Static มั้ยซึ่ง Steering Council ยังยืนยันว่า “Python จะไม่มีวันเป็น Static Type language ครับ แต่ยังคงเป็น Optional Static Type ต่อไป”

ตัวอย่างของ Open networking table ครับ ในห้องนึงก็จะจำกัด 10 หรือ 4 คนแล้วก็ใช้ได้โดยตรงจาก Browser

In Summary

ต้องบอกว่าถึงแม้ PyCon US จะจัด Online ทำให้เราเข้าถึงงานได้ง่ายขึ้นจากที่ไหนก็ได้ในโลก แต่ต้องยอมรับว่าพอมันเป็นงาน Online หลายๆ อย่างมันก็ขาดหายไป และสำหรับ Introvert แบบผมนี่ ผมบอกได้เลยครับว่า การที่จะกลั้นใจกดเข้าไป join Open space นี่มันใช้พลังหนักมาก ซึ่งหลายๆ คนน่าจะเข้าใจจาก Zoom fatique กัน แต่ก็เป็นประสบการณ์ที่ดีครับที่ได้คุยกันคนที่อยู่อีกฟากโลกทั้งจากอเมริกาและแคนาดาครับ อีกสิ่งหนึ่งที่ไม่ได้หายไป แต่ลำบากขึ้นคือ Swag ครับ ซึ่งอย่างเสื้อกับสติ๊กเกอร์ก็ต้องกดสั่งแยก ส่วนพวกตาม Sponsor Booth ก็ต้องกรอกฟอร์มครับไม่ได้หยิบง่าย เหมือนแต่ก่อน

ก็หวังว่าประสบการณ์ที่ผมเล่ามานี่ จะมีประโยชน์กับใครก็ตามที่สนใจร่วม Online Conference ต่อๆ ไปนะครับ ซึ่งจากสถานการณ์ COVID-19 ในปัจจุบัน ผมว่าน่าจะอีกนานเลยกว่าเราจะได้กลับไปหา Conference แบบ Physical อีกครั้งครับและสุดท้าย อยากปิดด้วยวิดีโอเดียวกับที่ปิดในงานครับ ผมเชื่อว่าใครได้ดูวิดีโอนี้จะเริ่มเข้าใจว่า Python Community มันพิเศษและแตกต่างจากหลายๆ Tech Community ยังไง ลองดูจากลิ้งค์ข้างล่างได้เลยครับ

Article written by: Yothin Muangsommuk, organizer of PyCon APAC 2021 For more information on PyCon APAC 2021, checkout: https://th.pycon.org/

--

--