3 คะแนน โดย GN⁺ 2024-08-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • PyScript เป็นแพลตฟอร์มโอเพนซอร์สที่ทำให้รันโค้ด Python ในเบราว์เซอร์ได้ จึงสามารถทำให้หน้าเว็บเองกลายเป็นสภาพแวดล้อมสำหรับรัน Python
  • ชูจุดเด่นการผสานความเป็นสากลของเว็บเข้ากับอีโคซิสเต็มของ Python ทำให้ รัน Python ได้ทุกที่ที่มีเบราว์เซอร์
  • เนื่องจากแอปทำงานในเบราว์เซอร์โดยไม่ต้องติดตั้งอะไรซับซ้อน จึงสามารถสร้างแอปบนเว็บได้ด้วย ไวยากรณ์ที่เรียนรู้ง่าย ของ Python
  • โค้ดทำงานในเบราว์เซอร์ของผู้ใช้ ช่วยลดภาระด้านอินฟราสตรักเจอร์ราคาแพง และสามารถแชร์ผลงานผ่าน URL ของเว็บได้
  • มุ่งเป้าทั้งผู้เริ่มต้นและผู้ใช้ขั้นสูง โดยมีคุณสมบัติหลักคือ ความง่าย ความสามารถในการสื่อความหมาย ความสามารถในการขยาย การแชร์ได้ ความเป็นสากล ความปลอดภัย และความทรงพลัง

สภาพแวดล้อมรัน Python ภายในเบราว์เซอร์

  • PyScript เป็น แพลตฟอร์มโอเพนซอร์ส สำหรับรัน Python ในเบราว์เซอร์
  • ตัวอย่างรูปแบบคือใช้ script type="py" ใน HTML เพื่อรันโค้ด Python
    • โค้ดตัวอย่างจะรัน print('You can!') ภายในเอกสารของเบราว์เซอร์
  • ทิศทางหลักของ PyScript คือการผสานสองอีโคซิสเต็มเทคโนโลยี ได้แก่ เว็บและ Python เข้าด้วยกัน
    • เว็บเป็นแพลตฟอร์มคอมพิวติ้งที่ใช้งานได้ทั่วไปทั่วโลก
    • Python เป็นหนึ่งในภาษาโปรแกรมที่ได้รับความนิยมมากที่สุดในโลก
  • ผลลัพธ์คือวางข้อความหลักไว้ว่า รัน Python ได้ทุกที่ที่มีเบราว์เซอร์

วิธีเริ่มต้นและคุณสมบัติของแพลตฟอร์ม

  • สามารถทดลองใช้งานได้ฟรีและง่ายที่ PyScript.com
  • เอกสาร รองรับทั้งผู้เริ่มต้นและผู้ใช้ขั้นสูง
  • สามารถดูได้จาก แหล่งข้อมูลชุมชน ว่าสร้างอะไรได้บ้างด้วย PyScript
  • เชื่อมต่อกับผู้ใช้ PyScript คนอื่น ๆ ได้ผ่าน Discord
  • คุณสมบัติที่ PyScript ชูมีดังนี้
    • Easy: แอปทำงานในเบราว์เซอร์โดยไม่ต้องติดตั้งอะไรซับซ้อน
    • Expressive: สร้างแอปได้ด้วยภาษาที่ทรงพลัง เป็นที่นิยม และเรียนรู้ง่ายอย่าง Python
    • Scalable: โค้ดทำงานในเบราว์เซอร์ของผู้ใช้ จึงไม่ต้องใช้อินฟราสตรักเจอร์ราคาแพง
    • Shareable: แชร์แอปพลิเคชันผ่าน URL ของเว็บได้
    • Universal: โค้ดรันได้ทุกที่ที่เบราว์เซอร์ทำงาน
    • Secure: ทำงานบนแพลตฟอร์มคอมพิวติ้งที่ผ่านการพิสูจน์แล้วอย่างเบราว์เซอร์
    • Powerful: ใช้ประโยชน์จากจุดแข็งของทั้งเว็บและ Python ร่วมกัน

1 ความคิดเห็น

 
GN⁺ 2024-08-17
ความคิดเห็นจาก Hacker News
  • หากอยากดูตัวอย่างการใช้งาน สามารถดู แดชบอร์ด Panel สถิติอาชญากรรมของ Dallas ได้ที่นี่: https://crimede-coder.com/graphs/Dallas_Dashboard
    ตอนเริ่มต้นใช้เวลาประมาณ 1 นาที ซึ่งรวมถึงการติดตั้งไลบรารี Python หลายตัวและการโหลดชุดข้อมูลภายนอกขนาด 5MB พอเปิดขึ้นมาแล้วก็ตอบสนองได้ค่อนข้างดี และทำงานได้ดีบน iPhone ด้วย
    ผู้ให้บริการหลายรายที่ทำงานร่วมกันใช้ Tableau เวอร์ชันฟรีและอัปเดตข้อมูลด้วยมือ เพราะเวอร์ชันฟรีไม่อนุญาตให้เชื่อมต่อกับ data store โดยตรง นี่เป็นทางเลือกฟรี และตั้งค่าให้ GitHub Actions สร้างไฟล์ CSV ที่บีบอัดไว้เพื่อให้นำเข้ามาในสภาพแวดล้อม

    • การใช้หน่วยความจำ ดูค่อนข้างสูง จาก Task Manager ของเบราว์เซอร์ แท็บนี้ใช้ 657MB ขณะที่แท็บอื่นส่วนใหญ่ใช้ราว 25~70MB
    • บอกว่า “ตอนเริ่มต้นใช้เวลาประมาณ 1 นาที” แต่เมื่อลองเปิดบน iPad Pro 13 นิ้วช่วงฤดูใบไม้ร่วงปี 2023 ผ่านบรอดแบนด์ท้องถิ่นของ NYC และ WiFi หลังคลิกลิงก์ใช้เวลาประมาณ 8 วินาที กว่าสปินเนอร์จะหายไปและฟิลเตอร์จะใช้งานได้
      คิดว่าการบูตสแตรป Python ให้พอรันแอป Panel ภายใน Safari บน iPad น่าจะใช้เวลานานกว่า 8 วินาทีมาก การรีเฟรชแบบ Shift ใช้เวลาประมาณ 6 วินาที
    • อยากรู้ว่าคอขวดคืออะไร บนบรอดแบนด์ในประเทศใช้เวลาประมาณ 20 วินาที
    • เจ๋งทีเดียว สำหรับคนที่สนใจแดชบอร์ดสถิติอาชญากรรม ขอทิ้งของ NYPD ไว้ด้วย: https://compstat.nypdonline.org/
    • เว็บไซต์ดูดี ถ้า “หลายบริษัทใช้ Tableau เวอร์ชันฟรีและอัปเดตข้อมูลด้วยมือ” ก็สงสัยว่าทำไมไม่ใช้ React หรือ Angular อะไรทำนองนั้น
      ยังสงสัยด้วยว่าเป็นปัญหาที่ต้องใช้ Python เพราะการวิเคราะห์ข้อมูล และไม่อยากรันฝั่งเซิร์ฟเวอร์เพราะค่าใช้จ่ายเซิร์ฟเวอร์หรือเปล่า
  • ดูหน้าแรกแล้วก็ยังงง และแม้อ่านเอกสารแล้วก็ยังไม่แน่ใจว่านี่คืออะไรกันแน่
    ลองจับเล่นนิดหน่อย พบว่าเมื่อนำไปใส่ในเว็บไซต์ก็แสดง “Hello World” ได้ ดูเหมือนเป็นสคริปต์ที่หา script ที่มี type="py" แล้วทรานส์ไพล์จาก Python เป็น JavaScript ผ่าน Pyodide
    แต่เดโมในหน้าแรกเป็น REPL และหัวข้อเรียกว่า “แพลตฟอร์ม” เลยยังงงอยู่

    • แทนที่จะเป็น “ทรานส์ไพล์ Python เป็น JavaScript” PyScript ดูเหมือนจะเป็นการ รันโค้ด Python โดยตรง มากกว่า ใช้อินเทอร์พรีเตอร์ Python ที่คอมไพล์เป็น WebAssembly และใช้ CPython หรือ MicroPython ของ Pyodide
    • ไม่ชอบการใช้คำที่คลุมเครือและนิยามไม่ชัดอย่าง “แพลตฟอร์ม” แค่บอกว่าเป็น เฟรมเวิร์กที่ประเมินโค้ดในสคริปต์แท็กสำหรับ Python ด้วย Pyodide ก็พอแล้ว
    • ไม่ได้อ่านเอกสารหรือซอร์สโค้ดจริง ๆ แต่แพ็กเกจ js น่าจะ map ไปยังอ็อบเจ็กต์ window จริง และเป็น API ที่เรียกเมธอด DOM ผ่านอ็อบเจ็กต์ Proxy บางอย่าง
    • ข้อมูลเกี่ยวกับเทอร์มินัลเจอได้ที่นี่: https://docs.pyscript.net/2024.8.2/user-guide/terminal/
      คาดหวังว่าจะรัน Python ในคอนโซลของเบราว์เซอร์ได้
  • สิ่งนี้ต่างจาก Pyodide อย่างไร? https://pyodide.org/en/stable/

    • Pyodide คือการพอร์ต CPython ไปยังแพลตฟอร์ม WebAssembly ส่วน PyScript คือเฟรมเวิร์กที่ใช้ Pyodide เพื่อให้พัฒนาแอปพลิเคชัน Python ในเบราว์เซอร์ได้ ถ้าจะ pitch สั้น ๆ ก็คือ “Python ในสคริปต์แท็กผ่าน Pyodide” ประมาณนั้น
    • สิ่งนี้ใช้ Pyodide จริง ๆ แม้จะไม่ใช่ทรานส์ไพล์เลอร์จริง แต่ให้ความรู้สึกใกล้กับ ทรานส์ไพล์เลอร์จาก Python ไป JS มากกว่า และมีไว้สำหรับสร้างแอปเบราว์เซอร์ด้วย Python ดังนั้นมองได้ว่าเป็น Pyodide + Browser API
    • Pyodide คือ รันไทม์
      PyScript สามารถใช้ Pyodide หรือ MicroPython ได้ และ MicroPython ก็มีขนาดเล็กพอสมควรจริง ๆ บนรันไทม์นั้น PyScript ไม่ได้แค่รันโค้ด Python เฉย ๆ แต่ยังมีฟีเจอร์อำนวยความสะดวกและการปรับปรุงคุณภาพชีวิตเพื่อให้ใช้ Python กับการเขียนโปรแกรมเว็บได้จริง
    • เป็น wrapper
  • ช่วงหลังได้ขุดลึกเรื่องการใช้ PyScript เพื่อ รันแอป Python CLI ในเบราว์เซอร์
    รู้สึกว่าเป็นการแฮ็กตลอดเวลา โดยเฉพาะเมื่อมี dependency เข้ามา ใช้ Pydantic 2.x ไม่ได้จนต้องสร้างคลาส wrapper สำหรับอ้อมปัญหา และแม้พยายามใส่ตรรกะทั้งหมดไว้ในไฟล์ Python แต่ก็มีฟีเจอร์ที่ขาดไปจนต้องใส่บางส่วนใน JavaScript
    ถ้าต้องการวาง UI ง่าย ๆ และตรรกะ UI แบบกำหนดเองทับบนโค้ด Python ก็อาจจะโอเค แต่ Streamlit หรือ Gradio อาจเหมาะกว่า
    GitHub repository: https://github.com/data-catering/data-contract-playground
    เว็บไซต์: https://data-catering.github.io/data-contract-playground/

    • เมื่อโปรเจกต์ Python จำนวนมาก กลายเป็น Rust มากขึ้น การใช้ Python ได้ทุกที่จึงยากเกินจำเป็น
  • หาเคสใช้งานจริงได้ยาก หากต้องการรัน โมเดลแมชชีนเลิร์นนิง ก็สามารถ build เป็น ONNX ได้: https://onnxruntime.ai/docs/tutorials/web/
    สงสัยว่าสิ่งนี้จะมีประสิทธิภาพสำหรับสร้างแอปบนเบราว์เซอร์แทน JS/TS หรือไม่

    • บางคนอาจไม่อยากแตะ JS/TS
    • ภาษาโปรแกรมควรถูกแยกออกจาก สภาพแวดล้อมการ deploy
  • คงจะดีถ้าสามารถเขียนสคริปต์ใน Firefox เพื่อควบคุมเบราว์เซอร์ได้ เช่น ให้ประเมินผลในขั้นตอนไหนก็ได้ตามต้องการ ไม่ว่าจะเป็นตอน GET, หลังจาก GET ทั้งหมด, ก่อนหรือหลังการประเมิน JavaScript
    สงสัยว่ามีเครื่องมือที่ทำแบบนี้ได้ และยังเข้าถึงความสามารถทั้งหมดของ Python จากโฮสต์ได้หรือไม่

  • นี่ไม่ใช่แนวคิดเดียวกับ Brython เหรอ? BRowser pYTHON: https://brython.info/
    https://github.com/brython-dev/brython

    • Brython ดูเหมือนเป็น ตัวแปลง Python → JS มากกว่าจะเป็นการอิมพลีเมนต์ Python ภายในเบราว์เซอร์ ผลลัพธ์สุดท้ายคล้ายกัน แต่วิธีการทำงานต่างกันโดยสิ้นเชิง
      https://yasoob.me/2019/05/22/running-python-in-the-browser/
  • ขออวดหน่อย ผมใช้ PyScript สร้าง เฟรมเวิร์กฟรอนต์เอนด์แบบ reactive ที่มีแนวคิดชัดเจนกว่า ได้แรงบันดาลใจมาจาก Vue.js เล็กน้อย: https://puepy.dev

  • เคยใช้สิ่งนี้ทำ Markdown renderer มาก่อน ซอร์สโค้ดแบบง่ายมากดูได้ที่นี่: https://pyscript.com/@stuartmaxwell/markdown-previewer-v2/la...
    แอปอาจทำงานได้ไม่ดีนักบนมือถือ แต่บนเดสก์ท็อปน่าจะโอเค ผมใช้โค้ดนี้ในแอปบล็อกที่เขียนด้วย Django

  • ไม่ว่าจะตั้งค่า WASM แบบไหน ข้อจำกัดใหญ่ที่น่ารำคาญมากคือสุดท้ายแล้วเรียก API จำนวนมากหรือ scrape เว็บไซต์ไม่ได้เพราะ CORS
    แน่นอนว่า CORS สำคัญต่อการป้องกันสิ่งอย่าง XSS แต่ถ้ามีวิธีอื่นนอกจากตั้งพร็อกซีเพื่อลบ CORS ก็คงดี เพราะถ้าทำแบบนั้นก็จะเหลือ IP ที่มีโอกาสถูกบล็อกมากกว่า แทนที่จะเป็น IP ที่พักอาศัย

    • ปัญหานี้เกิดเฉพาะเมื่อเปิดใช้งาน การแยกข้ามต้นทาง ด้วย COOP และ COEP หรือเปล่า?