Yoduro: Mozilla Interactive Science Editor


Estudiar el atractor de Lorenz y luego editar el código en Iodide

En los últimos diez años, ha habido una verdadera explosión de interés en la "informática científica" y la "ciencia de datos", es decir, el uso de métodos computacionales para encontrar respuestas a preguntas, analizar datos en las ciencias naturales y sociales. Vemos el florecimiento de PL, herramientas y métodos especializados que ayudan a los científicos a explorar y comprender datos y conceptos, así como a comunicar sus hallazgos.

Pero hoy, muy pocas herramientas científicas utilizan todo el potencial de comunicación de los navegadores modernos. Los resultados de la minería de datos no son muy convenientes para ver en un navegador. Por lo tanto, hoy Mozilla presenta Iodide , una herramienta experimental que ayuda a los científicos a crear hermosos documentos interactivos utilizando tecnologías web, todo dentro de un flujo de trabajo iterativo que es familiar para muchos.

No es solo un entorno de programación para crear documentos interactivos en un navegador. Iodide intenta ayudar con el flujo de trabajo vinculando el editor y la vista previa. Esto difiere del estilo IDE, que produce documentos de presentación del tipo pdf (luego se separan del código fuente). Y difiere del estilo de los cuadernos con celdas que mezclan código y elementos de presentación. En Iodide, ve un documento que se ve de la manera que desea y un fácil acceso al código base y al entorno de edición.

El yoduro todavía está en la versión alfa, pero en la industria de Internet se acostumbra a decir: "Si la primera versión de su producto no le confunde, llegará tarde al lanzamiento" . Por lo tanto, decidimos hacer un lanzamiento muy temprano con la esperanza de recibir comentarios de la comunidad. Tenemos una demostración que puede probar en este momento , pero todavía hay muchas deficiencias (¡no use esta alfa para trabajos importantes!). Esperamos que cierre los ojos a las puertas y comprenda el valor del concepto en sí mismo, y sus comentarios lo ayudarán a comprender en qué dirección debemos avanzar.

Como llegamos a Iodide


Data Science en Mozilla


La ciencia de datos de Mozilla se basa casi por completo en las comunicaciones. Aunque a veces implementamos modelos de minería de datos directamente frente a los usuarios, como el mecanismo para recomendar extensiones para el navegador, la mayoría de las veces nuestros expertos analizan los datos para identificar patrones y compartir información con ingenieros, gerentes de producto y administración.

La ciencia de datos implica escribir mucho código, pero a diferencia del desarrollo de software tradicional, nuestro objetivo es responder preguntas, no crear software. Esto generalmente se reduce a la creación de algún tipo de informe: un documento, diagramas o visualización interactiva de datos. Como todos los demás, en Mozilla estudiamos nuestros datos con fantásticas herramientas modernas como Jupyter y R-Studio . Pero cuando llega el momento de compartir los resultados, generalmente no podemos pasar el cuaderno Jupyter o el script R al "cliente", por lo que a menudo tenemos que copiar los números clave y las estadísticas resumidas en un documento de Google.

Al final resultó que, es bastante difícil pasar de estudiar datos en código a una explicación digerible y viceversa. Los estudios demuestran que este es un problema común . Cuando un científico lee el informe de otra persona y quiere ver el código correspondiente, surgen muchos problemas: a veces es fácil rastrear el código, a veces no. Si un especialista quiere experimentar cambiando el código, obviamente, todavía se está complicando. Otro científico puede tener su código, pero la configuración en la máquina es diferente, y la configuración lleva tiempo.


Ciclo de trabajo útil en ciencia de datos

¿Por qué hay tan poca web en la ciencia?


En este contexto, a finales de 2017, comencé un proyecto sobre visualización interactiva de datos en Mozilla. Hoy en día puedes crear tales visualizaciones usando las excelentes bibliotecas en Python, R y Julia, pero para mi proyecto fue necesario cambiar a Javascript. Esto significó una salida del entorno familiar de la ciencia de datos. Las herramientas modernas de desarrollo web son increíblemente poderosas, pero extremadamente sofisticadas . Contra mi deseo, tuve que crear una cadena completa de herramientas Javascript para construir con una recarga en caliente de módulos, pero aún era imposible encontrar un editor normal que genere documentos web limpios y legibles en un flujo de trabajo dinámico e iterativo.

Comencé a preguntarme por qué no existe tal herramienta, por qué no hay un análogo de Jupyter para documentos web interactivos, y me preguntaba por qué casi nadie usa Javascript para la informática científica. Parece que hay tres razones importantes para esto:

  1. El Javascript mismo en la comunidad científica tiene una reputación controvertida como un lenguaje lento e incómodo.
  2. No muchas bibliotecas de computación científica funcionan en un navegador o admiten Javascript.
  3. Encontré una escasez de herramientas de programación científica con soporte para iteraciones rápidas y acceso directo a las capacidades de presentación del navegador.

Estos son problemas muy grandes. Pero trabajar en un navegador tiene algunas ventajas reales para una ciencia de datos tan "comunicativa" que estudiamos en Mozilla. Por supuesto, la mayor ventaja es que el navegador tiene el conjunto de tecnologías de visualización de datos más avanzado y mejor soportado: desde DOM a WebGL , Canvas y WebVR .

Al reflexionar sobre las dificultades de comunicación mencionadas anteriormente, se me ocurrió otra ventaja potencial: en el navegador, el documento final no tiene que separarse de la herramienta que lo creó. Quería crear una herramienta para el trabajo científico iterativo con documentos web (una aplicación web con funcionalidad específica) ... y muchas de nuestras herramientas eran esencialmente aplicaciones web. Para estas pequeñas aplicaciones de documentos web, ¿por qué no vincular el documento al editor?

Por lo tanto, los lectores sin capacitación técnica pueden ver un documento hermoso, y el científico cambia instantáneamente al modo de código fuente. Además, dado que los cálculos se realizan en el motor JS del navegador, el científico puede comenzar a experimentar de inmediato con el código. Y todo esto sin conectarse a recursos informáticos remotos ni instalar ningún software.

El advenimiento del yoduro


Comencé a discutir con colegas los posibles pros y contras de la informática científica en el navegador, y durante las conversaciones notamos otras tendencias interesantes.

Dentro de Mozilla, aparecieron muchas demostraciones interesantes en WebAssembly , una nueva plataforma para lanzar código en un navegador escrito en otros idiomas además de Javascript. WebAssembly le permite ejecutar programas a una velocidad increíble, en algunos casos cerca de binarios nativos. WASM ejecuta procesos intensivos en recursos sin problemas, incluso motores de juegos 3D completos . En principio, puede compilar las mejores bibliotecas numéricas C y C ++ del mundo para WebAssembly, envolverlas en API JS ergonómicas, como lo hace el proyecto SciPy para Python. Al final, tales proyectos ya existen .


WebAssembly le permite ejecutar código en un navegador casi sin sobrecarga

También notamos que la comunidad Javascript está lista para introducir una nueva sintaxis si ayuda a las personas a resolver sus problemas de manera más efectiva. Quizás debería intentar emular algunos de los elementos clave de sintaxis que hacen que la programación numérica sea más comprensible y flexible en MATLAB, Julia y Python: esto es multiplicación de matrices, corte multidimensional, operaciones de matriz de transmisión, etc. Y nuevamente encontramos que muchos están de acuerdo con nosotros .

Todas estas premisas llevan a la pregunta: ¿qué tan adecuada es la plataforma web para la informática científica? Como mínimo, puede ayudar con las comunicaciones en los procesos que encontramos en Mozilla (y que muchos en la industria y la academia encuentran). Con el núcleo de JavaScript cada vez mejor y la capacidad de agregar extensiones de sintaxis para la programación numérica, JS en sí mismo puede ser más atractivo para los científicos. WebAssembly parecía permitir el uso de bibliotecas científicas serias. La tercera pata de la silla es el entorno web para crear documentos científicos. En este último elemento, enfocamos nuestros experimentos, que nos llevaron a Yodide.

Yoduro de anatomía


Iodide es una herramienta que proporciona a los científicos un flujo de trabajo familiar para crear excelentes documentos interactivos utilizando todo el poder de una plataforma web. El trabajo se construye en forma de "informes"; de hecho, esta es una página web que completa con su contenido. Además de algunas herramientas para examinar iterativamente los datos y modificar el informe para crear el documento final. Una vez que esté listo, puede enviarle un enlace directamente. Si sus colegas y empleados desean ver el código, entonces con un clic cambie al modo de estudio. Si desea experimentar con el código y utilizarlo como base para su trabajo, un clic más se convierte en una bifurcación.

A continuación, hablaremos sobre algunas ideas experimentales sobre cómo hacer que este flujo de trabajo sea más flexible.

Modo de informe y modo de estudio


Iodide busca vincular la investigación, la explicación y la colaboración en un solo lugar. El lugar central aquí es la capacidad de moverse entre un informe hermoso y un entorno útil para la investigación iterativa con cálculos científicos.

Cuando crea un nuevo Cuaderno Iodide, ingresa a la Vista de exploración. Este es un conjunto de paneles, que incluye un editor para escribir código, una consola para ver datos de salida, una herramienta para ver el espacio de trabajo para examinar variables creadas durante una sesión y un panel "Vista previa del informe".


Edición del código de reducción en el modo de investigación de yoduro

Al hacer clic en el botón Informe en la esquina superior derecha, puede expandir el contenido del panel de vista previa a toda la ventana. Los lectores que no estén interesados ​​en los detalles técnicos pueden centrarse en esta presentación del documento sin profundizar en el código. Cuando el lector hace clic en el enlace del informe, el código se inicia automáticamente. Para ver el código, haga clic en el botón Explorar en la esquina superior derecha. A partir de ahí, puede hacer una copia del cuaderno para su propia investigación.


Transición del modo de investigación al modo de informe

Cada vez que comparte un enlace a un cuaderno Iodide, su compañero de trabajo siempre tiene acceso a ambas vistas. Un documento limpio y legible nunca se separa del código subyacente y el entorno de edición.

Documentos interactivos en vivo con el poder de una plataforma web


Los documentos de yoduro viven en un navegador. Esto significa que el motor informático siempre está disponible. Cada documento es un informe interactivo en vivo con código en ejecución. Además, dado que el cálculo se realiza en el navegador simultáneamente con la presentación, no es necesario llamar al backend del idioma en otro proceso. Por lo tanto, los documentos interactivos se actualizan en tiempo real, lo que abre la posibilidad de visualizaciones 3D fluidas . La baja latencia y la alta velocidad de fotogramas incluso cumplen con los requisitos de realidad virtual .


El colaborador Devin Bailey examina sus datos de resonancia magnética cerebral

Compartir y reproducibilidad


La confianza en la web simplifica una serie de elementos de flujo de trabajo en comparación con otras herramientas. El uso compartido se implementa de forma nativa: se puede acceder al documento y al código en la misma URL y no es necesario, por ejemplo, insertar un enlace al script en las notas al pie de Google Docs. El núcleo computacional es un navegador, y las bibliotecas se cargan con una solicitud HTTP, como cualquier script, no se requieren idiomas, bibliotecas o herramientas adicionales. Y dado que los navegadores proporcionan compatibilidad, el Bloc de notas se ve igual en todas las computadoras y sistemas operativos.

Para garantizar la colaboración, creamos un servidor bastante simple donde se guardan los blocs de notas. Hay una instancia pública de iodide.io para experimentar con Iodide y publicar su trabajo. Pero puede crear una instancia privada detrás del firewall (en Mozilla hacemos esto para algunos documentos internos). Pero es importante tener en cuenta que los portátiles en sí no están vinculados a un único servidor Iodide. Si surge la necesidad, es fácil transferir el trabajo a otro servidor o exportar el notebook como un paquete para compartir en otros servicios, como Netlify o GitHub Pages (para obtener más información sobre la exportación de paquetes, consulte la sección "¿Qué sigue?" A continuación). Pasar la informática al cliente nos permite centrarnos en crear un entorno verdaderamente excelente para el intercambio y la colaboración, sin tener que asignar recursos informáticos en la nube.

Pyodide: pila de ciencia de Python en el navegador


Cuando comenzamos a pensar en mejorar la web para los científicos, nos centramos en formas que pueden facilitar el trabajo con Javascript, como compilar bibliotecas científicas existentes en WebAssembly y empaquetarlas en API JS simples. Cuando presentamos la idea a los desarrolladores de WebAssembly en Mozilla , propusieron una idea más ambiciosa: si muchos científicos prefieren Python, entonces ve a su campo: compila la pila científica de Python para ejecutar en WebAssembly.

Pensamos que sonaba intimidante, que sería un gran proyecto y que nunca proporcionaría un rendimiento satisfactorio ... pero dos semanas después , Mike Droettbum tenía una implementación de Python en funcionamiento dentro de un portátil Iodide. En los próximos meses, agregamos Numpy, Pandas y Matplotlib, los módulos más utilizados en el ecosistema científico de Python. Gracias a la ayuda de Kirill Smelkov y Roman Yurchak de Nexedi , apareció el apoyo a Scipy y scikit-learn. Desde entonces, seguimos agregando lentamente otras bibliotecas .

Ejecutar el intérprete de Python dentro de la máquina virtual Javascript agrega sobrecarga al rendimiento, pero son sorprendentemente pequeños. En comparación con el código nativo, en nuestras pruebas el código se ejecuta 1-12 veces más lento en Firefox y 1-16 veces más lento en Chrome. La experiencia ha demostrado que la productividad es suficiente para una cómoda investigación interactiva.


Matplotlib en el navegador admite funciones interactivas no disponibles en entornos estáticos

Portar Python al navegador crea flujos de trabajo mágicos. Por ejemplo, puede importar y procesar datos en Python y luego acceder a los objetos resultantes desde Javascript (en la mayoría de los casos, la conversión se realiza automáticamente) para mostrarlos utilizando bibliotecas JS como d3 . Aún más mágicamente, accede a la API del navegador desde el código Python, por ejemplo, para manipular el DOM sin usar Javascript .

Por supuesto, se puede decir mucho más sobre Pyodide y merece un artículo separado: lo consideraremos con más detalle el próximo mes.

JSMD (JavaScript MarkDown)


Al igual que Jupyter y R-Markdown en R, el editor Iodide le permite alternar libremente código y notas, dividiendo el código en partes que cambian y se ejecutan como unidades separadas. Nuestra implementación de esta idea corresponde a la implementación de R Markdown y el "modo de celda" en MATLAB: en lugar de la interfaz explícitamente basada en celdas, el contenido del bloc de notas Iodide es solo un documento de texto que utiliza una sintaxis especial para delimitar ciertos tipos de celdas. Llamamos a este formato de texto JSMD.

Después de MATLAB, los fragmentos de código comienzan con signos %% , seguidos de una línea que indica el idioma. Actualmente admitimos fragmentos que contienen Javascript, CSS, Markdown (y HTML), Python, un fragmento especial 'fetch' que simplifica la carga de recursos y complementos que amplían la funcionalidad de Iodide al agregar nuevos tipos de celdas.

Encontramos este formato bastante conveniente. Simplifica el uso de herramientas de texto como el visor de diferencias y su propio editor de texto favorito. Puede realizar operaciones de texto estándar (cortar / copiar / pegar) sin la necesidad de aprender comandos de administración de celdas. Consulte la documentación de JSMD para más detalles.

Que sigue


Vale la pena repetir que esta es solo una versión alfa: seguimos puliendo la interfaz y corrigiendo errores. Pero además de esto, hay una serie de ideas para los siguientes experimentos. Si alguna de estas ideas le parece particularmente útil, ¡háganoslo saber! Mejor aún, ¡ayuda a desarrollar!

Funciones de colaboración avanzadas


Como ya se mencionó, creamos un back-end muy simple que le permite simplemente guardar el trabajo, ver el trabajo realizado por otros, bifurcar y expandir rápidamente los cuadernos de otras personas. Pero estos son solo los primeros pasos en un flujo de trabajo colaborativo.

Ahora estamos viendo tres características geniales más:

  1. Hilos de comentarios de estilo de Google Docs.
  2. La capacidad de proponer cambios en el cuaderno de otra persona a través del mecanismo fork / merge, como en GitHub.
  3. Edición de cuadernos al mismo tiempo, como en Google Docs.

Por el momento, priorizamos aproximadamente en este orden, pero si decide organizarlos de manera diferente o tiene otras sugerencias, ¡no dude en informarlo!

Más idiomas!


Discutimos con las comunidades R y Julia la posibilidad de compilar estos idiomas en WebAssembly para usarlos en Iodide y otros proyectos de navegador. A primera vista, esto es factible, pero la implementación será un poco más complicada que para Python. Al igual que en Python, se abren algunos flujos de trabajo interesantes: por ejemplo, puede aplicar modelos estadísticos en R o resolver ecuaciones diferenciales en Julia, y luego mostrar los resultados utilizando la API del navegador. Si estudia estos idiomas, avíseme, en particular, queremos recibir ayuda de expertos en FORTRAN y LLVM.

Exportar cuadernos


Las primeras versiones de Iodide eran archivos ejecutables HTML independientes que incluían tanto el código JSMD utilizado en el análisis como el código JS para ejecutar el propio Iodide, pero nos alejamos de esta arquitectura. Experimentos más recientes nos han convencido de que los beneficios de trabajar con el servidor Iodide superan los beneficios de administrar archivos en el sistema local. Sin embargo, estos experimentos demostraron que puede hacer un bloc de notas ejecutable independiente de Iodide agregando el código Iodide junto con cualquier dato y biblioteca que se use en un archivo HTML grande. Puede ser genial, pero será útil como una imagen perfectamente reproducible y archivada.

Extensión del navegador Iodide para editores de texto


Aunque muchos científicos están acostumbrados a trabajar en entornos de programación basados ​​en navegador, algunas personas nunca renunciarán a su editor de texto favorito. Realmente queremos que Iodide vaya donde las personas consideren conveniente trabajar, incluidos aquellos que prefieren ingresar el código en otro editor pero desean acceder a las funciones interactivas e iterativas que proporciona Iodide. Para satisfacer esta necesidad, comenzamos a pensar en crear una extensión de navegador fácil y algunas API simples para permitir que Iodide se comunique con los editores del lado del cliente.

Comentarios y ayuda son bienvenidos!


No estamos tratando de resolver todos los problemas de los datos científicos y la informática científica, y el yoduro no es una solución universal. Si necesita procesar terabytes de datos en grupos de GPU, es poco probable que Iodide lo ayude con algo. Si publica artículos de revistas y solo necesita escribir un documento en LaTeX, entonces hay mejores herramientas. Si no le gusta la idea de transferir todo al navegador, no hay problema: hay muchas herramientas realmente sorprendentes que puede usar para la ciencia, ¡y estamos agradecidos por eso! No queremos cambiar los hábitos de alguien, y muchos científicos no necesitan comunicaciones basadas en la web. Genial ¡Haz lo que te sientas cómodo!

Pero de los científicos que crean o quieren crear contenido para Internet, ¡me gustaría saber qué herramientas necesita en su trabajo!

Vaya a iodide.io , pruebe esta herramienta y deje una revisión (pero de nuevo: tenga en cuenta que el proyecto está en versión alfa; no lo use para ningún trabajo crítico y recuerde que todo puede estar en alfa cambio). Puede completar un breve formulario , los tickets y los informes de errores en Github también son bienvenidos. Las solicitudes de funciones y pensamientos generales se dejan en nuestro grupo de Google o en Gitter .

Si desea participar en la creación de Iodide, el código fuente se publica en Github . Iodide cubre una amplia gama de disciplinas de software: desde el desarrollo de interfaces modernas y la informática científica hasta la compilación y la transpilación, ¡por lo que hay muchas cosas interesantes!

Source: https://habr.com/ru/post/444596/


All Articles