ผมสนใจเรื่องการเขียนโปรแกรมแบบที่ไม่ต้องมาเปิดสร้างโปรเจค คอมไพล์อะไรกันเยอะๆเสียเวลาอยู่แล้ว หลังๆนี้ก็ชอบลองเขียนโปรแกรมแนว notebook ที่มันจะมีคำอธิบายแทรกอยู่กับ code ที่ execute กันให้ดูทีละบรรทัด แล้วแสดงผลลัพธ์ออกมาเลย

ที่เด็ดที่สุด คือ ถ้าผลลัพธ์เป็น รูป เป็นเสียง ก็แสดงออกมาเลยไม่ต้องเอาผลลัพธ์ไปโยนไปใส่อะไรเพื่อแสดงอีก

ที่เคยเห็น มีเครื่องมือหลักๆตามนี้

  1. Jupyter — ตัวนี้ดูจะเก่าแก่สุด นิยมมากในหมู่พวก data scientist เมื่อไม่นานมานี้เพิ่งออก Jupyter Lab ที่ใช้งานง่ายขึ้นมาก
  2. Swift Playground — สำหรับสาวกผู้รัก Swift อันนี้อยากจะชอบแต่ทำใจชอบลำบากเพราะมันช้า
  3. Observable — อันนี้น่าเล่นมาก เป็น JS อยู่บนเวป มีคอนเซปน่าสนใจหลายอย่าง เช่น graph execution, async ยังใหม่และล้ำไปหน่อย

Installation

เป็นสาวก เราถือว่า มี brew อยู่ในเครื่องอยู่แล้วละกันนะ ตอนแรกลง python3 ก่อน ใครใช้ Linux หรือ Windows ก็ไปหาวิธีลงกันเอง

brew install python3

เสร็จแล้วก็ลง package Jupyter Lab ผ่าน pip3

pip3 install jupyterlab

แพกเกจอื่นๆอันนี้ไม่จำเป็นต้องลง แต่ถ้าลงจะเล่น Jupyter สนุกขึ้นอีกเยอะ แนะนำว่าลงไปเถอะ เดี๋ยวก็ได้ใช้ สำหรับช่วยคำนวณและวาดกราฟ

pip3 install numpy scipy matplotlib pandas scikit-learn

Usage

Jupyter ไม่ต้องมีโปรเจคอะไรยุ่งยาก cd เข้าไปใน directory โล่งๆ แล้วเริ่มใช้ได้เลย

> mkdir myproject
> cd myproject
> jupyter lab

เสร็จแล้วมันจะเปิด browser ให้เอง พร้อมกับโหลด http://localhost:8888/lab เอง

Interactive Programming

เวลาเราพิมพ์อะไรใน Jupyter ผลลัพธ์ของบรรทัดนั้นๆ ก็ออกมาแสดงได้เลย

Markdown Documentation

คอมเมนท์เป็น text ธรรมดามันจืดไป ใช้ markdown บรรยายได้เลย

ถ้าต้องการเปลี่ยน cell ไหนกลับเป็น code ก็กด Esc ออกมาเป็น Command Mode แล้วกดปุ่ม Y

B   - Insert Cell in newline
Y   - Change Cell to Code
M   - Change Cell to Markdown
Esc - Exit to Command Mode

Rich Output

ถ้า cell ไหน มีผลลัพธ์เป็น matplotlib ก็สามารถจะ render ออกมาเป็นรูปสวยๆ ได้เลย

กด B สร้าง Cell ใหม่ แล้วก็อปโค้ดนี้แปะลงไป เสร็จแล้วก็กด Ctrl + ⮐

import matplotlib.pyplot as plt

data = [1,2,3,5,8,13,21]
plt.plot(data)

Publish to nbviewer

สำหรับ notebook ที่เขียนเสร็จแล้ว จะแชร์ออกไปให้คนอื่นดู​ ก็ทำได้ด้วยการเอาไปแปะไว้ที่ public hosting (Github / Gist ก็เป็นตัวเลือกที่ดี) จากนั้นก็เอา nbviewer ชี้มาที่ url นั้นก็จะได้ notebook สวยๆ ไปดู

คิดว่าสร้าง repo ใน GitHub เป็นกันแล้วนะ สมมติว่าอยู่ใน repo หน้าตาเป็นแบบนี้

จริงๆ แล้ว GitHub ก็ render Jupyter Notebook ได้ระดับหนึ่งแล้ว แต่ถ้าอยากให้สวยขึ้นไปอีกต้องเอาลิงก์ไปไว้ที่ nbviewer

จากนั้นเข้าไปที่ https://nbviewer.jupyter.org แล้วก็แปะ​ URL ลงไป

จากนั้นก็ copy URL เอาไปใช้ได้เลย สังเกตว่า render ได้เร็วกว่า github มาก