+38/050/370-3627
+38/067/502-3306
+38/044/257-2444
Новини

Mozilla представив Iodide – інтерактивний науковий редактор

Mozilla представив Iodide - інтерактивний науковий редактор

В останні десять років стався справжній вибух інтересу до «наукових обчислень» та «науки про дані», тобто застосування обчислювальних методів для пошуку відповідей на питання, аналізу даних у природничих та соціальних науках. Ми бачимо розквіт спеціалізованих ЯП, інструментів та методів, які допомагають вченим досліджувати та розуміти дані та концепції, а також повідомляти про свої висновки.

Але на сьогоднішній день дуже мало наукових інструментів використовують повний комунікаційний потенціал сучасних браузерів. Результати дата-майнінгу не дуже зручно переглядати у браузері. Тому сьогодні Mozilla представляє Iodide — експериментальний інструмент, який допомагає вченим складати красиві інтерактивні документи з використанням веб-технологій. Це не просто середовище програмування для створення інтерактивних документів у браузері. Iodide намагається допомогти у робочому процесі, пов'язуючи редактор та перегляд. Це відрізняється від стилю IDE, який видає презентаційні документи типу pdf (вони потім відокремлюються від вихідного коду). І відрізняється від стилю блокнотів із осередками, які змішують код та елементи презентації. В Iodide ви бачите і документ, який виглядає так, як ви хочете, і легкий доступ до базового коду та середовища редагування.

Iodide поки що в альфа-версії, але в інтернет-індустрії прийнято говорити: «Якщо вас не бентежить перша версія вашого продукту, ви запізнилися із запуском». Тому ми вирішили зробити дуже ранній запуск, сподіваючись отримати відгуки від спільноти. У нас є демо, яке ви можете спробувати прямо зараз, але там ще багато недоробок (будь ласка, не використовуйте цю альфу для важливої ​​роботи!). Сподіваємося, що ви заплющете очі на одвірки і зрозумієте цінність самої концепції, а ваші відгуки допоможуть зрозуміти, в якому напрямку нам рухатися далі.

Наука про дані в Mozilla майже повністю ґрунтується на комунікаціях. Хоча ми іноді розгортаємо дата-майнінгові моделі безпосередньо перед користувачами, такі як механізм рекомендацій розширень для браузера, але більшість наших фахівців аналізують дані, щоб виявити закономірності і поділитися інформацією з інженерами, менеджерами продуктів і керівництвом.

Наука даних передбачає написання великої кількості коду, але на відміну традиційної розробки ПЗ наша мета — відповідати питанням, а чи не створювати програмне забезпечення. Це зазвичай зводиться до створення якогось звіту — документа, діаграми або інтерактивної візуалізації даних. Як і всі, ми в Mozilla вивчаємо свої дані за допомогою фантастичних сучасних інструментів, таких як Jupyter і R-Studio. Але коли приходить час ділитися результатами, ми зазвичай не можемо просто передати «замовнику» блокнот Jupyter або сценарій R, тому часто доводиться копіювати ключові цифри та зведену статистику в документ Google.

Як з'ясувалося, досить важко перейти від вивчення даних у коді до зручного пояснення і назад. Дослідження показують, що це поширена проблема. Коли один вчений читає чужий звіт і хоче переглянути відповідний код, виникає багато проблем: іноді відстежити код легко, іноді ні. Якщо фахівець хоче поекспериментувати, змінивши код, очевидно все ще ускладнюється. У іншого вченого може бути ваш код, але відрізнятися конфігурація на машині, а налаштування потребує часу.

На цьому фоні наприкінці 2017 року я розпочав проект з інтерактивної візуалізації даних у Mozilla. У наші дні ви можете створювати такі візуалізації за допомогою відмінних бібліотек на Python, R та Julia, але для мого проекту потрібно було перейти на Javascript. Це означало вихід із звичного оточення науки про дані. Сучасні інструменти веб-розробки неймовірно потужні, але надзвичайно складні. Проти свого бажання мені довелося створювати повноцінний ланцюжок інструментів Javascript для складання з гарячим перезавантаженням модулів, але все одно неможливо було знайти нормальний редактор, який генерує чисті, читані веб-документи в живому, ітеративному робочому процесі.

Я почав питати, чому немає такого інструменту — чому немає аналога Jupyter для інтерактивних веб-документів — і прийшов до роздуми, чому майже ніхто не використовує Javascript для наукових обчислень. Здається, є три важливі причини:

  1. Сам Javascript у наукових колах має суперечливу репутацію як повільну та незручну мову.
  2. Не так багато бібліотек наукових обчислень працюють у браузері або підтримують Javascript.
  3. Я виявив дефіцит наукових інструментів для програмування з підтримкою швидких ітерацій та прямим доступом до презентаційних можливостей браузера.

Це дуже великі проблеми. Але робота в браузері має деякі реальні переваги для такої «комунікативної» науки про дані, якою ми займаємось у Mozilla. Звичайно, найбільша перевага в тому, що у браузера найпередовіший і добре підтримуваний набір технологій візуалізації даних: від DOM до WebGL, Canvas і WebVR.

Розмірковуючи про труднощі в комунікації, згаданих вище, мені спало на думку ще одна потенційна перевага: у браузері кінцевий документ не обов'язково відокремлювати від інструмента, який його створив. Я хотів зробити інструмент для ітеративної наукової роботи з веб-документами (веб-додаток з конкретною функціональністю)… і багато наших інструментів були, по суті, веб-додатками. Для цих маленьких веб-додатків-документів, чому б не пов'язати документ із редактором?

Таким чином, читачі без технічної підготовки можуть переглядати гарний документ, а вчений миттєво перемикається в режим вихідного коду. Більше того, оскільки обчислення відбуваються в JS-движку браузера, вчений може відразу розпочати експерименти з кодом. І все це без підключення до віддалених обчислювальних ресурсів або встановлення будь-якого програмного забезпечення.

Усередині Mozilla виходило багато цікавих демонстрацій на WebAssembly, новій платформі для запуску в браузері коду, написаного мовами, відмінними від Javascript. WebAssembly дозволяє запускати програми з неймовірною швидкістю, в деяких випадках близько до нативних бінарників. На WASM без проблем працюють ресурсомісткі процеси, навіть цілі 3D-ігрові двигуни. В принципі, можна скомпілювати найкращі у світі бібліотеки чисельних обчислень C і C++ для WebAssembly, обернути їх у ергономічні API JS, як це робить проект SciPy для Python. Зрештою, такі проекти вже існують.

Ми також помітили, що спільнота Javascript готова вводити новий синтаксис, якщо це допомагає людям більш ефективно вирішувати свої проблеми. Можливо, варто спробувати емулювати деякі з ключових синтаксичних елементів, які роблять чисельне програмування більш зрозумілим і гнучким в MATLAB, Julia і Python - це матричне множення, багатовимірна нарізка, операції трансляції масиву (broadcast array) і так далі. І знову ми виявили, що багато хто згоден з нами.

Усі ці передумови призводять до питання: наскільки веб-платформа підходить для наукових обчислень? Як мінімум, вона здатна допомогти в комунікаціях у тих процесах, з якими ми стикаємося в Mozilla (і з якими стикаються багато хто в індустрії та академічних колах). З ядром Javascript, що постійно покращується, і можливістю додавання синтаксичних розширень для чисельного програмування, можливо, сам JS стане більш привабливим для вчених. Здавалося, WebAssembly дозволяє використовувати серйозні наукові бібліотеки. Третя ніжка випорожнень — веб-оточення для створення наукових документів. На цьому останньому елементі ми зосередили свої експерименти, які привели нас до Iodide.

Iodide — це інструмент, який забезпечує вченим знайомий робочий процес для створення чудових інтерактивних документів, використовуючи всю потужність веб-платформи. Робота побудована у вигляді «звітів» — це веб-сторінка, яку ви заповнюєте своїм контентом. Плюс деякі інструменти для ітеративного вивчення даних та зміни звіту, щоб створити фінальний документ. Як тільки він готовий, можете надіслати посилання безпосередньо на нього. Якщо колеги та співробітники хочуть переглянути код, то одним клацанням миші перемикаються в режим дослідження. Якщо хочуть поекспериментувати з кодом і використовувати його як основу для своєї роботи, то ще одним клацанням робиться форк.

Режим звіту та режим дослідження

Iodide прагне в одному місці ув'язати дослідження, пояснення та співпрацю. Центральне місце тут займає здатність переміщатися між гарним звітом та корисним середовищем для ітеративного дослідження з науковими обчисленнями.

При створенні нового блокнота Iodide ви потрапляєте в режим дослідження (Explore View). Це набір панелей, включаючи редактор для написання коду, консоль для перегляду вихідних даних, засіб перегляду робочої області для вивчення змінних, створених під час сеансу, та панель «Попередній перегляд звіту».

Натисканням кнопки Report в правому верхньому кутку можна розширити вміст панелі попереднього перегляду на все вікно. Читачі, які не зацікавлені в технічних деталях, можуть зосередитись на цьому поданні документа, не заглиблюючись у код. Коли читач заходить на посилання на звіт, код запускається автоматично. Для перегляду коду потрібно натиснути кнопку Explore в правому верхньому кутку. Звідти можна зробити копію блокнота для власних досліджень.

Кожного разу, коли ви ділитеся посиланням на блокнот Iodide, ваш колега завжди отримує доступ до обох цих уявлень. Чистий документ, що читається, ніколи не відокремлюється від базового коду та середовища редагування.

Живі, інтерактивні документи з потужністю веб-платформи

Документи Iodide живуть у браузері. Це означає постійну доступність обчислювального двигуна. Кожен документ – це живий інтерактивний звіт із запущеним кодом. Більше того, оскільки обчислення відбувається у браузері одночасно з презентацією, немає необхідності викликати бекенд мови в іншому процесі. Таким чином, інтерактивні документи оновлюються в режимі реального часу, відкриваючи можливість плавних 3D-візуалізацій. Низька затримка та висока частота кадрів навіть відповідають вимогам VR.

Спільне використання та відтворюваність

Опора на веб спрощує ряд елементів робочого процесу порівняно з іншими інструментами. Спільне використання реалізовано нативно: документ і код доступні по одному URL і не потрібно, скажімо, вставляти посилання на скрипт у виносках Google Docs. Обчислювальне ядро ​​- це браузер, а бібліотеки підвантажуються HTTP-запитом, як і будь-який скрипт - не потрібно встановлювати жодних додаткових мов, бібліотек або інструментів. І оскільки браузери забезпечують сумісність, блокнот однаково виглядає на всіх комп'ютерах та ОС.

Для забезпечення спільної роботи ми створили досить простий сервер, де зберігаються блокноти. Є публічний інстанс iodide.io, щоб експериментувати з Iodide та публікувати свої роботи. Але можна створити і приватний інстанс за файрволом (ми у Mozilla так і робимо для деяких внутрішніх документів). Але важливо відзначити, що самі блокноти не прив'язані до одного серверу Iodide. Якщо виникне потреба, легко перенести роботу на інший сервер або експортувати блокнот у вигляді пакета для спільного використання на інших сервісах, таких як Netlify або GitHub Pages (докладніше про експорт пакетів див. нижче в розділі «Що далі?»). Передача обчислень на бік клієнта дозволяє нам зосередитися на створенні дійсно чудового середовища для обміну та співробітництва, без необхідності виділяти обчислювальні ресурси у хмарі.

Pyodide: науковий стек Python у браузері

Коли ми почали думати про те, щоб зробити веб краще для вчених, то зосередилися на способах, які можуть спростити роботу з Javascript, таких як компіляція існуючих наукових бібліотек WebAssembly та їх упаковка у прості JS API. Коли ми окреслили ідею розробникам WebAssembly в Mozilla, вони запропонували більш амбітну ідею: якщо багато вчених віддають перевагу Python, то ступіть на їх поле — скомпілюйте науковий стек Python для запуску в WebAssembly. жахливо, що це буде величезний проект і що він ніколи не забезпечить задовільну продуктивність… але через два тижні у Майка Дроеттбума була робоча реалізація Python, що працює всередині блокнота Iodide. Протягом наступних кількох місяців ми додали Numpy, Pandas і Matplotlib, найбільш використовуються модулі в науковій екосистемі Python. Завдяки допомозі Кирила Смелкова та Романа Юрчака з Nexedi з'явилася підтримка Scipy та scikit-learn. З того часу ми продовжуємо потихеньку додавати інші бібліотеки.

Запуск інтерпретатора Python всередині віртуальної машини Javascript додає накладні витрати до продуктивності, але вони на диво маленькі. У порівнянні з нативним кодом, у наших тестах код виконується в 1-12 разів повільніше у Firefox і в 1-16 разів повільніше у Chrome. Досвід показує, що продуктивності достатньо для комфортних інтерактивних досліджень.

Розширені функції спільної роботи

Як уже згадувалося, ми створили дуже простий бекенд, який дозволяє просто зберігати роботу, переглядати роботи, виконані іншими, швидко форкати та розширювати чужі блокноти. Але це лише перші кроки у спільному робочому процесі.

Тепер ми розглядаємо ще три великі функції:

  1. Треди коментарів у стилі Google Docs.
  2. Можливість пропонувати зміни в чужому блокноті через механізм fork/merge, як у GitHub.
  3. Одночасне редагування блокнотів, як у Google Docs.

Інші новини