Mempelajari penarik Lorenz dan kemudian mengedit kode di IodideDalam sepuluh tahun terakhir, telah ada ledakan minat nyata dalam "komputasi ilmiah" dan "ilmu data," yaitu, penggunaan metode komputasi untuk menemukan jawaban atas pertanyaan, menganalisis data dalam ilmu alam dan sosial. Kami melihat berkembangnya PL, alat, dan metode khusus yang membantu para ilmuwan mengeksplorasi dan memahami data dan konsep, serta mengomunikasikan temuan mereka.
Tetapi hari ini, sangat sedikit alat ilmiah yang menggunakan potensi komunikasi penuh dari peramban modern. Hasil penggalian data tidak terlalu nyaman untuk dilihat di browser. Karena itu, hari ini Mozilla menghadirkan
Iodide - alat eksperimental yang membantu para ilmuwan membuat dokumen interaktif yang indah menggunakan teknologi web, semuanya dalam alur kerja berulang yang akrab bagi banyak orang.
Ini bukan hanya lingkungan pemrograman untuk membuat dokumen interaktif di browser. Iodide mencoba membantu dengan alur kerja dengan menautkan editor dan pratinjau. Ini berbeda dari gaya IDE, yang menghasilkan dokumen presentasi dari tipe pdf (mereka kemudian dipisahkan dari kode sumber). Dan berbeda dari gaya notebook dengan sel yang mencampur kode dan elemen presentasi. Di Iodide, Anda melihat dokumen yang terlihat seperti yang Anda inginkan dan akses mudah ke kode dasar dan lingkungan pengeditan.
Iodide masih dalam versi alfa, tetapi dalam industri Internet biasanya mengatakan:
"Jika Anda tidak bingung dengan versi pertama produk Anda, Anda terlambat dengan peluncurannya .
" Karena itu, kami memutuskan untuk melakukan peluncuran yang sangat awal dengan harapan menerima umpan balik dari masyarakat. Kami memiliki demo yang
dapat Anda coba sekarang , tetapi masih ada banyak kekurangan (tolong jangan gunakan alpha ini untuk pekerjaan penting!). Kami harap Anda akan menutup mata Anda ke tiang pintu dan memahami nilai konsep itu sendiri, dan umpan balik Anda akan membantu Anda memahami ke arah mana kita harus bergerak.
Bagaimana kami sampai di Iodide
Ilmu Data di Mozilla
Ilmu data Mozilla hampir seluruhnya berbasis komunikasi. Meskipun kami kadang-kadang menggunakan model data mining langsung di depan pengguna, seperti mekanisme rekomendasi untuk ekstensi browser, sebagian besar waktu para ahli kami menganalisis data untuk mengidentifikasi pola dan berbagi informasi dengan insinyur, manajer produk, dan manajemen.
Ilmu data melibatkan penulisan banyak kode, tetapi tidak seperti pengembangan perangkat lunak tradisional, tujuan kami adalah menjawab pertanyaan, bukan membuat perangkat lunak. Ini biasanya bermuara pada pembuatan semacam laporan - dokumen, diagram, atau visualisasi data interaktif. Seperti orang lain, kami di Mozilla mempelajari data kami dengan alat modern yang fantastis seperti
Jupyter dan
R-Studio . Tetapi ketika tiba saatnya untuk membagikan hasil, kami biasanya tidak bisa hanya memberi "pelanggan" buku catatan atau skrip Jupyter, jadi kami sering harus menyalin angka-angka utama dan ringkasan statistik ke dalam dokumen Google.
Ternyata, cukup sulit untuk beralih dari mempelajari data dalam kode ke penjelasan yang dapat dicerna dan sebaliknya. Studi menunjukkan bahwa
ini adalah masalah umum . Ketika seorang ilmuwan membaca laporan orang lain dan ingin melihat kode yang sesuai, banyak masalah muncul: kadang-kadang mudah untuk melacak kode, kadang tidak. Jika seorang spesialis ingin bereksperimen dengan mengubah kode, jelas, itu masih menjadi rumit. Ilmuwan lain mungkin memiliki kode Anda, tetapi konfigurasi pada mesin berbeda, dan pengaturan membutuhkan waktu.
Siklus Tugas yang Berguna dalam Ilmu DataMengapa ada begitu sedikit web dalam sains?
Terhadap latar belakang ini, pada akhir 2017, saya memulai proyek visualisasi data interaktif di Mozilla. Saat ini Anda dapat membuat visualisasi seperti itu menggunakan pustaka yang sangat baik di Python, R dan Julia, tetapi untuk proyek saya perlu beralih ke Javascript. Ini berarti jalan keluar dari lingkungan yang akrab dengan ilmu data. Alat pengembangan web modern sangat kuat,
tetapi sangat canggih . Terhadap keinginan saya, saya harus membuat rangkaian penuh alat Javascript untuk membangun dengan memuat kembali modul panas, tetapi masih mustahil untuk menemukan editor normal yang menghasilkan dokumen web yang bersih dan mudah dibaca dalam alur kerja yang hidup dan berulang.
Saya mulai bertanya-tanya mengapa tidak ada alat seperti itu - mengapa tidak ada analog Jupyter untuk dokumen web interaktif - dan saya bertanya-tanya mengapa hampir tidak ada yang menggunakan Javascript untuk komputasi ilmiah. Tampaknya ada tiga alasan penting untuk ini:
- Javascript sendiri dalam komunitas ilmiah memiliki reputasi yang kontroversial sebagai bahasa yang lambat dan tidak nyaman.
- Tidak banyak perpustakaan komputasi ilmiah bekerja di browser atau mendukung Javascript.
- Saya menemukan kekurangan alat pemrograman ilmiah dengan dukungan untuk iterasi cepat dan akses langsung ke kemampuan presentasi browser.
Ini adalah masalah yang sangat besar. Tetapi bekerja di browser memiliki beberapa keuntungan nyata untuk ilmu data "komunikatif" yang kami pelajari di Mozilla. Tentu saja, keuntungan terbesar adalah browser memiliki set teknologi visualisasi data yang paling canggih dan didukung dengan baik: dari
DOM ke
WebGL ,
Canvas dan
WebVR .
Merefleksikan pada kesulitan komunikasi yang disebutkan di atas, saya datang dengan potensi keuntungan lain: di browser, dokumen akhir tidak harus dipisahkan dari alat yang membuatnya. Saya ingin membuat alat untuk karya ilmiah berulang dengan dokumen web (aplikasi web dengan fungsi spesifik) ... dan banyak dari alat kami pada dasarnya adalah aplikasi web. Untuk aplikasi dokumen web kecil ini, mengapa tidak menautkan dokumen dengan editor?
Dengan demikian, pembaca tanpa pelatihan teknis dapat melihat dokumen yang indah, dan ilmuwan langsung beralih ke mode kode sumber. Selain itu, karena perhitungan dilakukan di mesin JS browser, ilmuwan dapat segera mulai bereksperimen dengan kode. Dan semua ini tanpa menghubungkan ke sumber daya komputasi jarak jauh atau menginstal perangkat lunak apa pun.
Munculnya Iodide
Saya mulai berdiskusi dengan kolega tentang potensi dan kontra dari komputasi ilmiah di browser, dan selama percakapan kami mencatat tren menarik lainnya.
Di dalam Mozilla, banyak demo menarik keluar di
WebAssembly , sebuah platform baru untuk meluncurkan kode dalam browser yang ditulis dalam bahasa selain Javascript. WebAssembly memungkinkan Anda untuk menjalankan program dengan kecepatan luar biasa, dalam beberapa kasus dekat dengan binari asli. WASM menjalankan proses sumber daya intensif tanpa masalah, bahkan
seluruh mesin game 3D . Pada prinsipnya, Anda dapat mengompilasi pustaka komputasi numerik C dan C ++ terbaik untuk WebAssembly di dunia, membungkusnya dalam JS API yang ergonomis, seperti proyek SciPy untuk Python. Pada akhirnya,
proyek semacam itu sudah ada .
WebAssembly memungkinkan Anda menjalankan kode di browser dengan hampir tanpa overheadKami juga memperhatikan bahwa komunitas Javascript siap memperkenalkan
sintaks baru jika itu membantu orang lebih efektif
memecahkan masalah mereka . Mungkin Anda harus mencoba untuk meniru beberapa elemen sintaks utama yang membuat pemrograman numerik lebih mudah dimengerti dan fleksibel dalam MATLAB, Julia dan Python - ini adalah perkalian matriks, pengirisan multidimensi, operasi susunan siaran, dan sebagainya. Dan lagi kami menemukan bahwa
banyak yang setuju dengan kami .
Semua premis ini mengarah pada pertanyaan: seberapa cocok platform web untuk komputasi ilmiah? Paling tidak, ini dapat membantu dengan komunikasi dalam proses yang kami temui di Mozilla (dan yang banyak di industri dan akademisi temui). Dengan inti Javascript yang
terus meningkat dan kemampuan untuk menambahkan ekstensi sintaks untuk pemrograman numerik, JS itu sendiri mungkin menjadi lebih menarik bagi para ilmuwan. WebAssembly tampaknya memungkinkan penggunaan perpustakaan ilmiah yang serius. Kaki ketiga dari kursi adalah lingkungan web untuk membuat dokumen ilmiah. Pada elemen terakhir ini, kami memfokuskan percobaan kami, yang mengarahkan kami ke Iodide.
Anatomi Iodida
Iodide adalah alat yang memberi para ilmuwan alur kerja yang lazim untuk membuat dokumen interaktif hebat menggunakan kekuatan penuh platform web. Pekerjaan ini dibangun dalam bentuk "laporan" - pada kenyataannya, ini adalah halaman web yang Anda isi dengan konten Anda. Ditambah beberapa alat untuk memeriksa data secara berulang dan memodifikasi laporan untuk membuat dokumen akhir. Setelah siap, Anda dapat mengirim tautan langsung ke sana. Jika kolega dan karyawan ingin melihat kode, maka dengan satu klik beralih ke mode belajar. Jika Anda ingin bereksperimen dengan kode dan menggunakannya sebagai dasar untuk pekerjaan Anda, satu klik lagi menjadi garpu.
Selanjutnya, kita akan berbicara tentang beberapa ide eksperimental tentang cara membuat alur kerja ini lebih fleksibel.
Mode Laporan dan Mode Studi
Iodide berupaya menghubungkan penelitian, penjelasan, dan kolaborasi di satu tempat. Tempat utama di sini adalah kemampuan untuk bergerak antara laporan yang indah dan lingkungan yang berguna untuk penelitian berulang dengan perhitungan ilmiah.
Saat Anda
membuat Notebook Iodide baru, Anda memasuki Explore View. Ini adalah satu set panel, termasuk editor untuk menulis kode, konsol untuk melihat data output, alat untuk melihat ruang kerja untuk memeriksa variabel yang dibuat selama sesi, dan panel "Pratinjau Laporan".
Mengedit Kode Penurunan Harga dalam Mode Penelitian IodideDengan mengklik tombol
Laporan di sudut kanan atas, Anda dapat memperluas konten panel pratinjau ke seluruh jendela. Pembaca yang tidak tertarik dengan detail teknis dapat fokus pada presentasi dokumen ini tanpa mempelajari kodenya. Ketika pembaca mengklik tautan laporan, kode mulai secara otomatis. Untuk melihat kode, klik tombol
Jelajahi di sudut kanan atas. Dari sana, Anda dapat membuat salinan buku catatan untuk penelitian Anda sendiri.
Transisi dari mode penelitian ke mode laporanSetiap kali Anda membagikan tautan ke buku catatan Iodide, rekan kerja Anda selalu mendapatkan akses ke kedua pandangan ini. Dokumen yang bersih dan mudah dibaca tidak pernah lepas dari kode dasar dan lingkungan pengeditan.
Dokumen langsung dan interaktif dengan kekuatan platform web
Dokumen iodide hidup di browser. Ini berarti bahwa mesin komputasi selalu tersedia. Setiap dokumen adalah laporan interaktif langsung dengan kode yang sedang berjalan. Selain itu, karena perhitungan berlangsung di browser secara bersamaan dengan presentasi, tidak perlu memanggil backend bahasa dalam proses lain. Dengan demikian, dokumen interaktif diperbarui secara real time, membuka kemungkinan
visualisasi 3D yang lancar . Latensi rendah dan frame rate tinggi
bahkan memenuhi persyaratan VR .
Kontributor Devin Bailey memeriksa data MRI otaknyaBerbagi dan reproduktifitas
Ketergantungan pada web menyederhanakan sejumlah elemen alur kerja dibandingkan dengan alat lain. Berbagi diterapkan secara asli: dokumen dan kode dapat diakses di URL yang sama dan Anda tidak perlu, misalnya, memasukkan tautan ke skrip ke dalam catatan kaki Google Documents. Inti komputasi adalah browser, dan pustaka dimuat dengan permintaan HTTP, seperti skrip apa pun - tidak ada bahasa tambahan, pustaka atau alat yang diperlukan. Dan karena browser memberikan kompatibilitas, Notepad terlihat sama di semua komputer dan OS.
Untuk memastikan kolaborasi, kami membuat server yang cukup sederhana tempat notepad disimpan. Ada contoh publik dari
iodide.io untuk bereksperimen dengan Iodide dan menerbitkan karya Anda. Tetapi Anda dapat membuat contoh pribadi di belakang firewall (kami di Mozilla melakukan ini untuk beberapa dokumen internal). Tetapi penting untuk dicatat bahwa notebook itu sendiri tidak terikat ke server Iodide tunggal. Jika perlu, mudah untuk mentransfer pekerjaan ke server lain atau mengekspor notebook sebagai paket untuk berbagi pada layanan lain, seperti Netlify atau GitHub Pages (untuk informasi lebih lanjut tentang mengekspor paket, lihat bagian "Apa Selanjutnya?" Di bawah). Melewati komputasi ke sisi klien memungkinkan kami untuk fokus pada penciptaan lingkungan yang benar-benar luar biasa untuk pertukaran dan kerja sama, tanpa perlu mengalokasikan sumber daya komputasi di cloud.
Pyodide: tumpukan ilmu Python di browser
Ketika kami mulai berpikir tentang membuat web lebih baik bagi para ilmuwan, kami fokus pada cara-cara yang dapat membuat bekerja dengan Javascript lebih mudah, seperti mengkompilasi perpustakaan ilmiah yang ada ke dalam WebAssembly dan mengemasnya menjadi JS API sederhana. Ketika kami menguraikan gagasan tersebut kepada
pengembang WebAssembly di Mozilla , mereka mengusulkan ide yang lebih ambisius: jika banyak ilmuwan lebih suka Python, maka pergilah ke bidang mereka - kompilasi tumpukan ilmiah Python untuk dijalankan di WebAssembly.
Kami pikir itu terdengar menakutkan, bahwa itu akan menjadi proyek besar, dan itu tidak akan pernah memberikan kinerja yang memuaskan ... tetapi
dua minggu kemudian ,
Mike Droettbum memiliki implementasi Python yang berfungsi, bekerja di dalam notebook Iodide. Selama beberapa bulan ke depan, kami menambahkan Numpy, Pandas, dan Matplotlib,
modul yang paling banyak digunakan dalam ekosistem sains Python. Berkat bantuan Kirill Smelkov dan Roman Yurchak dari
Nexedi , dukungan untuk Scipy dan scikit-belajar muncul. Sejak itu, kami terus menambahkan
perpustakaan lain secara perlahan.
Menjalankan interpreter Python di dalam mesin virtual Javascript menambah overhead kinerja, tetapi mereka sangat kecil. Dibandingkan dengan kode asli, dalam pengujian kami, kode ini berjalan 1-12 kali lebih lambat di Firefox dan 1-16 kali lebih lambat di Chrome. Pengalaman menunjukkan bahwa produktivitas sudah cukup untuk penelitian interaktif yang nyaman.
Matplotlib di browser mendukung fitur interaktif yang tidak tersedia di lingkungan statisPorting Python ke browser menciptakan alur kerja ajaib. Misalnya, Anda dapat mengimpor dan memproses data dalam Python, dan kemudian mengakses objek yang dihasilkan dari Javascript (dalam kebanyakan kasus, konversi terjadi secara otomatis) untuk menampilkannya menggunakan pustaka JS seperti
d3 . Dengan cara yang lebih ajaib, Anda mengakses API peramban dari kode Python, misalnya, untuk
memanipulasi DOM tanpa menggunakan Javascript .
Tentu saja, lebih banyak lagi yang bisa dikatakan tentang
Pyodide dan pantas mendapatkan artikel terpisah - kami akan mempertimbangkannya secara lebih rinci bulan depan.
JSMD (JavaScript MarkDown)
Seperti mode Jupyter dan R-Markdown dalam R, editor Iodide memungkinkan Anda untuk secara bebas mengganti kode dan catatan, memecah kode menjadi potongan-potongan yang berubah dan dijalankan sebagai unit yang terpisah. Implementasi kami atas ide ini sesuai dengan implementasi R Markdown dan "mode sel" di MATLAB: alih-alih antarmuka berbasis sel secara eksplisit, isi notepad Iodide hanyalah dokumen teks yang menggunakan sintaksis khusus untuk membatasi jenis sel tertentu. Kami menyebutnya format teks ini JSMD.
Mengikuti MATLAB, fragmen kode dimulai dengan tanda
%%
, diikuti oleh baris yang menunjukkan bahasa. Kami saat ini mendukung cuplikan berisi Javascript, CSS, Markdown (dan HTML), Python, cuplikan 'fetch' khusus yang menyederhanakan pemuatan sumber daya, dan plugin yang memperluas fungsionalitas Iodide dengan menambahkan jenis sel baru.
Kami menemukan format ini cukup nyaman. Ini menyederhanakan penggunaan alat teks seperti penampil diff dan editor teks favorit Anda sendiri. Anda dapat melakukan operasi teks standar (potong / salin / tempel) tanpa perlu mempelajari perintah manajemen sel. Lihat
dokumentasi JSMD untuk lebih jelasnya.
Apa selanjutnya
Penting untuk diulangi bahwa ini hanya versi alfa: kami terus memoles antarmuka dan memperbaiki kesalahan. Namun selain itu, ada sejumlah ide untuk percobaan berikut. Jika ada dari ide-ide ini yang tampaknya sangat berguna bagi Anda, beri tahu kami! Lebih baik lagi, bantu berkembang!
Fitur Kolaborasi Lanjutan
Seperti yang telah disebutkan, kami menciptakan backend yang sangat sederhana yang memungkinkan Anda untuk hanya menyimpan pekerjaan, melihat pekerjaan yang dilakukan oleh orang lain, dengan cepat bercabang dan memperluas notebook orang lain. Tapi ini hanya langkah pertama dalam alur kerja kolaboratif.
Sekarang kita melihat tiga fitur hebat:
- Utas komentar gaya Google Documents.
- Kemampuan untuk mengajukan perubahan pada notebook orang lain melalui mekanisme fork / merge, seperti di GitHub.
- Mengedit buku catatan pada saat yang sama, seperti di Google Documents.
Saat ini, kami memprioritaskan sekitar pesanan ini, tetapi jika Anda memutuskan untuk mengaturnya secara berbeda atau Anda memiliki saran lain, jangan ragu untuk melaporkannya!
Lebih banyak bahasa!
Kami berdiskusi dengan komunitas R dan Julia tentang kemungkinan mengkompilasi bahasa ini di WebAssembly untuk menggunakannya dalam Iodide dan proyek browser lainnya. Sepintas, ini bisa dilakukan, tetapi implementasinya akan sedikit lebih rumit daripada untuk Python. Seperti pada Python, beberapa alur kerja yang menarik terbuka: misalnya, Anda dapat menerapkan model statistik di R atau menyelesaikan persamaan diferensial di Julia, lalu menampilkan hasilnya menggunakan API browser. Jika Anda mempelajari bahasa-bahasa ini, beri tahu saya - khususnya, kami ingin mendapatkan bantuan dari pakar FORTRAN dan LLVM.
Ekspor Notebook
Versi awal Iodide berdiri sendiri, file HTML yang dapat dieksekusi yang menyertakan kode JSMD yang digunakan dalam analisis dan kode JS untuk menjalankan Iodide itu sendiri, tetapi kami menjauh dari arsitektur ini. Eksperimen yang lebih baru telah meyakinkan kami bahwa manfaat bekerja dengan server Iodide lebih besar daripada manfaat mengelola file di sistem lokal. Namun, percobaan ini menunjukkan bahwa Anda dapat membuat notepad Iodide yang dapat dieksekusi mandiri dengan menambahkan kode Iodide bersama dengan data dan pustaka yang digunakan dalam satu file HTML besar. Ini bisa menjadi besar, tetapi akan berguna sebagai gambar yang dapat direproduksi dan diarsipkan dengan sempurna.
Ekstensi Browser Iodide untuk Editor Teks
Meskipun banyak ilmuwan terbiasa bekerja di lingkungan pemrograman berbasis browser, beberapa orang tidak akan pernah menyerah editor teks favorit mereka. Kami benar-benar ingin Iodide pergi ke tempat orang merasa nyaman untuk bekerja, termasuk mereka yang lebih suka memasukkan kode di editor lain tetapi ingin mengakses fitur interaktif dan berulang yang disediakan Iodide. Untuk memenuhi kebutuhan ini, kami mulai berpikir tentang membuat ekstensi browser yang mudah dan beberapa API sederhana untuk memungkinkan Iodide berkomunikasi dengan editor sisi klien.
Umpan balik dan bantuan dipersilahkan!
Kami tidak mencoba untuk menyelesaikan semua masalah data ilmiah dan komputasi ilmiah, dan Iodide bukanlah solusi universal. Jika Anda perlu memproses terabyte data pada kluster GPU, Iodide sepertinya tidak akan membantu Anda dengan apa pun. Jika Anda menerbitkan artikel majalah dan Anda hanya perlu menulis dokumen di LaTeX, maka ada alat yang lebih baik. Jika Anda tidak menyukai gagasan untuk mentransfer semuanya ke browser, tidak ada masalah - ada banyak alat yang sangat luar biasa yang dapat Anda gunakan untuk sains, dan kami berterima kasih untuk itu! Kami tidak ingin mengubah kebiasaan seseorang, dan banyak ilmuwan tidak membutuhkan komunikasi berbasis web. Hebat! Lakukan saat Anda merasa nyaman!
Tetapi dari para ilmuwan yang membuat atau ingin membuat konten untuk Internet, saya ingin mendengar alat apa yang Anda butuhkan dalam pekerjaan Anda!
Silakan buka
iodide.io , coba alat ini dan tinggalkan ulasan (tapi sekali lagi: perlu diingat bahwa proyek ini dalam versi alpha - harap tidak menggunakannya untuk pekerjaan penting, dan ingat bahwa semuanya bisa di alpha ubah). Anda dapat
mengisi formulir pendek ,
tiket dan laporan bug di Github juga diterima. Permintaan fungsi dan pemikiran umum ada di
grup Google kami atau di
Gitter .
Jika Anda ingin mengambil bagian dalam membuat Iodide, kode sumber
diterbitkan di Github . Iodide mencakup beragam disiplin perangkat lunak: mulai dari pengembangan antarmuka modern dan komputasi ilmiah hingga kompilasi dan transpilasi, sehingga ada banyak hal menarik!