Data Science Early Access Program IntelliJ IDEA Releases

Presentamos Kotlin Notebook

Read this post in other languages:

¡Ya está disponible la primera versión experimental del complemento Kotlin Notebook para IntelliJ IDEA! En esta publicación encontrará una visión de la funcionalidad del complemento y sus casos de uso, pero, antes de entrar en detalles, nos gustaría dejar que el complemento hable por sí mismo:


¿Qué es el complemento Kotlin Notebook?

Un notebook es una herramienta interactiva que permite combinar código, visualizaciones y texto en un único documento. En los notebooks, puede escribir y ejecutar fragmentos de código (celdas), ver los resultados y documentar su toma de decisiones en un mismo lugar. Los notebooks están ampliamente aceptados y son fiables para la creación rápida de prototipos, el análisis y la ciencia de datos. El complemento Kotlin Notebook permite el desarrollo interactivo en IntelliJ IDEA, con lo que se complementa la compatibilidad del lenguaje con el IDE para Kotlin combinado con las versátiles opciones de visualización de los navegadores. Entremos de lleno en los detalles técnicos para ver qué puede hacer este complemento y cómo funciona.

Instalación

Para obtener el complemento, solo tiene que instalarlo desde el Marketplace en la pestaña Settings | Plugins de IntelliJ IDEA Ultimate. Debería contar, como mínimo, con la versión 2023.1.2 de IntelliJ IDEA. También puede instalar el complemento en versiones anteriores, pero será inestable. Durante el proceso de instalación, se le sugerirá que instale el complemento de Python, cosa que debería hacer. No se preocupe, ya que no se instalará Python en su estación de trabajo. Kotlin Notebook solo tiene algunas dependencias de componentes de interfaz de usuario que se encuentran en el complemento de Python, pero tenemos previsto eliminarlas pronto.

Tenga en cuenta que, actualmente, el complemento Kotlin Notebook solo funciona en IntelliJ IDEA Ultimate.

Familiarización con Kotlin Notebook

Tras instalar el complemento, podrá crear su primer notebook. Básicamente, un notebook es un archivo en un disco, por lo que puede crearse en cualquier lugar de la vista Project con la acción New | Kotlin Notebook.

Se creará un archivo con una extensión .ipynb. Si ya está familiarizado con los Jupyter Notebooks, esta extensión debería resultarle bastante familiar. Internamente, los Kotlin Notebooks siguen la misma estructura, formato y protocolo, lo que significa que estos archivos se pueden visualizar en GitHub, en los Jupyter Notebooks o en JupyterLab con el kernel de Kotlin instalado. Una vez creado, el notebook solo contendrá la primera celda vacía. Las celdas son los principales bloques de construcción de los notebooks y pueden contener código o texto. Para ejecutar una celda de código, solo tiene que seleccionarla y hacer clic en el botón Run o utilizar el acceso directo Mayús + Intro. Se ejecutará el código y los resultados o errores aparecerán debajo de la celda. También puede escribir texto en celdas de Markdown, que admiten muchas opciones de formato, como encabezados, listas, enlaces, LaTeX e imágenes. Para generar una celda de Markdown y ver el texto formateado, solo tiene que ejecutarla como si de una celda de código se tratase. Los notebooks ofrecen un flujo de trabajo interactivo e iterativo. Puede ejecutar celdas en cualquier orden, modificar el código o el texto, declarar y redeclarar variables, y volver a ejecutar las celdas para ver los resultados actualizados. Esto facilita la experimentación, la creación de prototipos y la documentación del trabajo.

Para experimentar de primera mano las ventajas de utilizar notebooks para explicar y documentar el código, le animamos a que descargue y explore este notebook. Incluye todos los aspectos de los Kotlin Notebooks recogidos en este artículo del blog, lo que le permitirá poner en práctica la teoría.

Notebook de ejemplo ¡Un notebook es la mejor manera de familiarizarse con estos! ;-)

Resultados

Una de las principales características de los notebooks es la variedad de tipos de resultados que admiten:

  • Texto: este es el tipo de resultado más simple e incluye declaraciones impresas, valores de variables o cualquier resultado basado en texto del código. Si el resultado de una celda no entra en ninguna de las categorías siguientes, se imprimirá como texto mediante el método toString().
  • HTML: los Jupyter Notebooks pueden mostrar HTML directamente, lo que permite el formato de texto enriquecido, el uso de tablas o incluso la incrustación de sitios web.
  • Imágenes: las imágenes estáticas pueden mostrarse en formatos como PNG, JPEG y SVG. También admiten resultados del tipo BufferedImage. Todas estas imágenes pueden ser imágenes de archivos, gráficos generados o cualquier otro medio visual.
  • Texto enriquecido: las celdas de Markdown producen resultados HTML de texto enriquecido, lo que las hace compatibles con listas, estilos de fuente, bloques de código, etc.
  • LaTeX: las fórmulas y las ecuaciones matemáticas pueden representarse perfectamente con LaTeX, un sistema de composición tipográfica muy utilizado en el mundo académico.
  • Errores y rastreo: cuando el código contiene errores, los notebooks muestran un mensaje de error y un rastreo, lo que facilita la depuración.

Dependencias de los notebooks

También es importante tener en cuenta qué dependencias tendrá el notebook. Obviamente, la biblioteca estándar se puede utilizar directamente, pero suele ser insuficiente. Hay varias opciones disponibles:

  • Puede utilizar las dependencias del proyecto, lo cual le garantiza que el notebook tendrá acceso a las mismas clases.
  • Es posible utilizar clases y otras entidades del propio proyecto dentro del notebook. Sin embargo, en estos casos se comprobará si hay cambios en el proyecto y se volverá a compilar si es necesario antes de ejecutar cada celda.
  • Puede cargar cualquier biblioteca desde el repositorio de Maven especificando sus coordenadas con un fragmento de sintaxis al estilo Gradle en cualquier celda.
USE {
  repositories {
  maven {
    url = "https://my.secret.repo/maven/"
    credentials {
      username = USER
      password = TOKEN
    } 
  }
  dependencies {
    val ktorVersion = "2.0.3"
    implementation("my.secret:artifact:1.0-beta")
    implementation("io.ktor:ktor-client-core-jvm:$ktorVersion")
    implementation("io.ktor:ktor-client-apache-jvm:$ktorVersion")
  }
}
  • O puede utilizar la versión más corta a través de la anotación DependsOn:
@file:DependsOn(“io.ktor:ktor-client-core-jvm:$ktorVersion“)
  • Recordar y localizar las coordenadas de Maven puede ser engorroso. Para simplificar este proceso, presentamos un método más inteligente y cómodo para cargar bibliotecas populares. Solo tiene que utilizar el comando mágico %use seguido del nombre de una o varias bibliotecas.

Al ejecutar la declaración %use, no solo se descargan las dependencias de la biblioteca, sino que también se añaden importaciones predeterminadas al notebook. Además, registra renderizadores para los tipos de la biblioteca e incluye otras funcionalidades, recogidas en la siguiente sección.

Integración de bibliotecas

Los Kotlin Notebooks ofrecen muchas opciones de integración de bibliotecas. Para los usuarios, aprovecharlas es tan sencillo como añadir una única línea de código:

%use libraryName

Para los autores de las bibliotecas, este mismo comando sirve como trampolín, lo que les permite:

  • Descargar binarios de bibliotecas desde cualquier repositorio de Maven.
  • Incluir importaciones iniciales.
  • Ejecutar código durante la inicialización.
  • Ejecutar código antes y después de la ejecución de cada celda.
  • Procesar previamente el código de cada celda.
  • Invocar un callback al crear variables de ciertos tipos.
  • Crear generadores personalizados para una serie de tipos definidos en la biblioteca.
  • Y mucho más.

En conjunto, esto brinda posibilidades casi infinitas para crear una experiencia de usuario interactiva. Teniendo en cuenta los tipos estáticos y AOT de Kotlin, la capacidad de generación automática de código sobre la marcha ofrece un nivel más de flexibilidad y posibilidad de expansión. Puede consultar la documentación completa aquí. Animamos a todos los autores de bibliotecas a compartir sus integraciones en el registro común para que todos los usuarios de Kotlin Notebook puedan acceder a ellas. Nos complace especialmente ver que algunas bibliotecas (como WebTau, Roboquant, Kaliningraph y otras) ya se están beneficiando de este enfoque.

Compartir

Es habitual querer compartir los notebooks con otras personas, tanto de dentro como de fuera del equipo. Dado que los Kotlin Notebooks se adhieren al formato universal de Jupyter, pueden distribuirse fácilmente utilizando cualquier visor web de notebooks. De hecho, GitHub tiene la capacidad de generarlos de forma nativa. Además, JetBrains cuenta con la plataforma Datalore, que es totalmente compatible con los Kotlin Notebooks. Datalore no solo ofrece posibilidades a la hora de compartir: también permite ejecutar y editar notebooks e incluye funcionalidades avanzadas, como informes interactivos, además de la opción de programar ejecuciones de notebooks para más comodidad y flexibilidad.

En resumen

¡La primera versión experimental del complemento Kotlin Notebook está lista para que la pruebe en su proyecto en IntelliJ IDEA Ultimate!

Aquí tiene un notebook de ejemplo que puede descargar para aprender los fundamentos de los Kotlin Notebooks:

Si es autor de una biblioteca, tenga en cuenta que puede añadir una integración con los Kotlin Notebooks. Si encuentra algún problema o error, háganoslo saber rellenando un ticket en el sistema de seguimiento de incidencias del proyecto. Además, nos encantaría escuchar sus comentarios en el canal #notebook de Kotlin en Slack.

¡Que disfrute con los Kotlin Notebooks!

Artículo original en inglés de:

Luiz Di Bella

Roman Belov

image description