Służy to jako miejsce na wszystkie moje doświadczenia zebrane podczas udziału w projekcie Pyodide (prowadzonym przez Mozillę) jako student-programista na GSoC 2019. Jeśli tak samo jak ja jesteś zdumiony ogromnym potencjałem tego projektu, czytaj dalej!

Przed GSoC

Zawsze interesowałem się przestrzenią leżącą na styku nauki i oprogramowania. Dlatego moje obszary zainteresowań obejmują zazwyczaj narzędzia naukowe, obliczenia naukowe, analizę danych, wizualizację danych i trochę uczenia maszynowego. Tak naprawdę moje dwa poprzednie doświadczenia związane są z tworzeniem narzędzi w przestrzeni opieki zdrowotnej.

Szukając projektów open source, do których mógłbym się przyczynić i, miejmy nadzieję, zostać później studentem-programistą, odkryłem Pyodide — którego celem jest przeniesienie całego Python Scientific Stack do przeglądarki.

Jodek i piodek

Powszechnie wiadomo, że przeglądarki obsługują wyłącznie JavaScript — język sieci. Jednak ostatnie postępy z Web-Assembly lub w skrócie WASM pozwalają nam uruchamiać kod C/C++/Rust w przeglądarce. Pyodide ma na celu dodanie obsługi uruchamiania Pythona w przeglądarce oprócz wyżej obsługiwanych języków.

Początkowo nie mogłem zrozumieć, dlaczego jest to potrzebne i dlaczego jest to ważne. Wtedy właśnie dostrzegłem jego zastosowanie w Iodide (kolejnym projekcie Mozilli) – będącym beztarciowym przenośnym notebookiem opartym na przeglądarce open source, przeznaczonym do obliczeń naukowych i analizy danych w Internecie.

Jodek i Pyodide razem zadziwiły mnie do głębi. Stworzyli możliwość wielojęzycznych notatników obliczeniowych obsługujących HTML/CSS/Markdown/JavaScript/Python — ze wsparciem udostępniania danych pomiędzy tymi językami (znacznie więcej niż to, co potrafi zwykły notatnik Jupyter).

Więcej szczegółów na temat Iodide i Pyodide można znaleźć w tych znakomitych wpisach na blogu, których autorami są sami twórcy tych projektów!





Wkład

Po wybraniu Pyodide zacząłem wnosić swój wkład w sposób, w jaki może to zrobić każdy nowicjusz — rozwiązując problemy początkujących! Zwykle wymaga to skonfigurowania środowiska programistycznego, ustalenia, w jaki sposób elementy są ze sobą powiązane i, co najważniejsze, zadania właściwych pytań!

Podczas wszystkich powyższych zniechęcających kroków społeczność zapewniła mi komfort — każda wątpliwość/sugestia została rozwiana, a moi mentorzy poinstruowali mnie, jak rozwiązać te problemy jeden po drugim.

Pracowałem przez około 4 miesiące przed złożeniem wniosku do GSoC i udało mi się stworzyć 6 połączonych PR, 1 otwarty PR, 3 nowe numery wraz z recenzowaniem 4 PR mojego mentora.

Faza aplikacji

Faza składania wniosków zazwyczaj polega na pisaniu wniosku, planowaniu harmonogramu działań, zadań do wykonania w jakim tygodniu itp.

Ponieważ brałem udział w projekcie od samego początku, miałem dobre pojęcie o Pyodide i jego działaniu. Jednak nadal nie wiedziałem zbyt wiele o faktycznym projekcie GSoC na lato. Wykorzystałam ten czas na czytanie, czytanie i jeszcze raz czytanie! W końcu udało mi się ustalić pewne przybliżone szczegóły dotyczące plików, jakiego stosu i jakich rzeczy muszę dotknąć, aby móc rozpocząć projekt GSoC — szczegóły są wymienione poniżej:

Projekt

Krótko mówiąc, mój projekt GSoC polega na opracowaniu nowego backendu/silnika renderującego dla biblioteki matplotlib w oparciu o interfejsy API HTML5 Canvas Element. Obecnie Pyodide używa domyślnego backendu Agg matplotliba, który zawiera kilka plików C++ skompilowanych do WASM. Ponieważ naszym ostatecznym celem jest możliwość uruchomienia programu matplotlib w Internecie, powinno być możliwe umożliwienie matplotlib korzystania z internetowych interfejsów API (tagu ‹canvas›) jako domyślnego silnika renderującego, tj. logika rozmieszczania pikseli na ekranie będzie teraz zarządzana przez funkcje interfejsu API Canvas.

Potencjalne zalety tego nowego modułu renderującego opartego na Canvas obejmują zmniejszenie rozmiaru i zajmowanej pamięci przez ostateczną kompilację, przyspieszenie GPU do renderowania poprzez matplotlib oraz możliwość używania czcionek internetowych w matplotlib wraz z czcionkami zainstalowanymi lokalnie.

Propozycja

Pisanie propozycji jest procesem iteracyjnym i zebranie wszystkich informacji, które zebrałem podczas zbierania informacji na temat powyższego projektu, zajęło mi około 10 dni — wymagało to również dokładnego przestudiowania wewnętrznych elementów biblioteki matplotlib. Na szczęście mój mentor („Michael Droettboom”) był byłym głównym programistą matplotlib i dzięki temu mogłem go zapytać, czy zapytał mnie o wszelkie moje wątpliwości, a także uzyskał wyczucie kierunku, gdzie dalej postępować.

Ostateczną złożoną przeze mnie propozycję można obejrzeć tutaj.

Z perspektywy czasu nie mogłem być bardziej podekscytowany latem. Praca nad Pyodide, ale co ważniejsze, praca z Mozillą to satysfakcjonujące i satysfakcjonujące doświadczenie. Możesz być częścią rozproszonej społeczności i pracować nad wpływowymi i znaczącymi projektami. To ekscytujące przeżycie, które, mam nadzieję, nigdy się nie skończy.

PS — Jeśli uda ci się wytrwać w kolejnych wpisach z tej serii, będę szczegółowo opisywał wewnętrzne elementy matplotlib, fajne rzeczy, które można zrobić z Pyodide i postęp w projekcie.

Do tego czasu, wylogowuję się

— Madhur Tandon