Resultados de Google Summer of Code 2022

El programa Google Summer of Code (GSoC) se enfoca en involucrar a nuevos desarrolladores de todo el mundo con el desarrollo de software de código abierto. Google…

El programa Google Summer of Code (GSoC) se enfoca en integrar a nuevos desarrolladores de todo el mundo con el desarrollo de software de código abierto. Google patrocina a estudiantes para trabajar con una organización mentora de código abierto en un proyecto de programación de 12 semanas durante el verano. Durante los últimos 17 años, más de 18.000 colaboradores han participado en Google Summer of Code.

Los logos de Google Summer of Code y Dart lado a lado.

En 2022, Dart participó como organización mentora en Google Summer of Code por tercer año consecutivo. Tras nuestra convocatoria de propuestas en marzo, recibimos 50 propuestas de proyectos de participantes potenciales de todo el mundo. Hoy, destacamos algunos de los proyectos que mentoreamos este verano. Los colaboradores describen sus proyectos en este post.

Interop JNI para Dart

#

By Mahesh Hegde

La plataforma Android usa Java como su lenguaje oficial. Acceder a su rico ecosistema añadiría gran valor a Dart, así que desarrollé una interfaz Java Native (JNI) interop para Dart como mi proyecto de GSoC.

package:jnigen genera bindings para habilitar el uso de clases y métodos de Java desde Dart. jnigen genera bindings en C que envuelven librerías de Java, y bindings de Dart que llaman a esos bindings en C. La librería de soporte package:jni proporciona las funciones comunes para inicializar y acceder a JNI*.*

Considerando la complejidad tanto de Java como de JNI, el interop JNI para Dart sigue siendo experimental. El interop puede envolver características básicas del lenguaje Java, como constructores, métodos estáticos y de instancia, y getters de campos. Las excepciones en Java se "relanzan" en Dart junto con los stack traces originales. El interop no puede hacer subclass de una clase Java desde Dart ni pasar callbacks. Después de GSoC, planeamos mejorar el pipeline de generación de bindings e implementar más características del lenguaje Java.

La complejidad técnica del proyecto resultó desafiante. Sabíamos que no había ningún intento de interop con Java para un lenguaje compilado nativamente, de alto nivel, usando JNI. A menudo teníamos que encontrar workarounds cuando algo no funcionaba como esperábamos, como la carga de librerías dinámicas y las excepciones de JNI. Terminé escribiendo varias herramientas para ayudar al proyecto. Estas incluyeron una para obtener fuentes de Java desde maven y otra para construir librerías compartidas. Aprendí mucho sobre gestión del tiempo, priorización, testing, y escribir código limpio, legible y comprensible.

Panel de administración de Flutter Community

#

By Abdelrahman Amer

Para GSoC'22, diseñé y construí un panel de administración para los repositorios de Flutter Community en GitHub. El panel asiste a los administradores de Flutter Community mediante la agregación de las últimas actividades en repositorios, mantenedores, niveles de acceso y más. Contiene un trigger para compilar y desplegar a pub.dev. Implementé el proyecto usando Flutter para el frontend y Firebase para el backend.

Durante el proyecto, desarrollé componentes reutilizables interesantes, incluyendo:

  1. Una capa de abstracción de Firebase

  2. Un widget MVC y clases de estructura de datos asociadas para mostrar cualquier información tabular ordenable por cualquier campo

  3. Un widget MVC y clases de estructura de datos para mostrar datos gráficos 2D

Al panel de administración le faltan algunas funciones, pero las funcionalidades centrales han sido implementadas. Espero continuar trabajando en más funciones después del período de GSoC.

La experiencia de GSoC me enseñó valiosas habilidades de desarrollo, especialmente en Flutter. Estoy muy agradecido por la oportunidad, el excelente ambiente de trabajo, la experiencia que gané, y el mentoreo que recibí de Majid.

Detectando restricciones de versión incorrectas

#

By Arseny Uskov

Un mantenedor de paquetes debe asignar una versión apropiada a cada lanzamiento de paquete Dart. Deben decidir si han introducido cambios disruptivos para los usuarios que dependen de su paquete. Los paquetes dependientes también asumen cuál sería un rango de versión apropiado para cada una de sus dependencias.

Pueden surgir bugs por suposiciones incorrectas en estas áreas. Mi proyecto buscó identificar e investigar un subconjunto de estos bugs.

Diagrama mostrando una restricción de dependencia incorrecta causada por un versionamiento inadecuado de package:foo.
Una restricción de dependencia incorrecta causada por un versionamiento inadecuado de package:foo

El proyecto proporciona herramientas que resumen una porción del API público de una versión dada de un paquete dado. Este resumen identifica cualquier otro paquete dependiente del paquete dado que podría tener una restricción de versión incorrecta. Nuestro caso de uso cubrió donde un paquete usó un símbolo definido en una de sus dependencias, pero el mismo símbolo no incluía la versión mínima permitida de esa dependencia.

El modelo de resumen del API público permite una gama de otras aplicaciones interesantes de análisis estático. No tuvimos tiempo de explorarlas durante GSoC. Para más información, consulta el blog post de Análisis de API sobre el proyecto, los desafíos que enfrentamos, los resultados obtenidos al ejecutar el análisis en el ecosistema de pub.dev, los bugs que encontramos en paquetes reales, y un punto de partida para que hackees el proyecto tú mismo.

Muchas gracias a todos los que aplicaron para Google Summer of Code 2022 con Dart, a los colaboradores que completaron proyectos este año, y a los mentores que ayudaron a hacer de este un verano de código increíble. Si estás interesado en saber más sobre Dart en Google Summer of Code, revisa nuestro post de 2021.

Más de Dart