Resultados de Google Summer of Code 2021

El equipo de Dart recibió 92 propuestas de proyectos GSoC de estudiantes de todo el mundo. Aquí están los resultados de los 3 proyectos que aceptamos.

Google Summer of Code (GSoC) es un programa global enfocado en integrar a estudiantes desarrolladores en el desarrollo de software de código abierto. Los estudiantes son patrocinados por Google para trabajar con una organización mentora de código abierto en un proyecto de programación de 10 semanas durante el verano. Durante los últimos 16 años, más de 16.000 estudiantes han participado en Google Summer of Code.

2021 es la segunda vez que la organización Dart participó en Google Summer of Code como organización mentora. Tras nuestra convocatoria de propuestas de estudiantes en marzo recibimos 92 propuestas de proyectos de estudiantes de todo el mundo, de las cuales nos emocionó aceptar 3 proyectos. Hoy, estamos emocionados de compartir nuestros resultados, descritos por los estudiantes que trabajaron en estos proyectos.

Cliente HTTP basado en Cronet para Dart

#

By Soumyadip Mondal

El paquete cronet es un paquete HTTP para plataformas Dart Native, respaldado por el motor de red de Chromium.

Podrías preguntarte "¿por qué añadir un paquete HTTP?" cuando Dart ya tiene soporte HTTP en dart:io. Una razón es que package:cronet puede usar el protocolo QUIC/HTTP3, que es una función muy solicitada por la comunidad. Además de eso, package:cronet es [más rápido que d](https://github.com/google/cronet.dart/blob/main/dart_io_comparison.md#performance-comparison)art:io en muchos escenarios.

Un binding de Dart para Cronet nos da acceso fácil a sus funciones, como: reutilización de sockets, potentes algoritmos de caché y compresión, priorización de solicitudes, y conexiones de red más confiables. Varios productos de Google — incluyendo YouTube, Chrome, Google Maps, Google Photos y la app de Google — ya dependen de la librería Cronet para sus necesidades de red. Con package:cronet, obtienes acceso a la librería Cronet usando un API similar a dart:io, con pocos o ningún cambio de código en tu app Dart/Flutter existente.

Revisa github.com/google/cronet.dart para benchmarks, ejemplos, y [comparaciones con d](https://github.com/google/cronet.dart/blob/main/dart_io_comparison.md)art:io. También revisa este blog post sobre package:cronet para una descripción técnica general y discusión de los desafíos que enfrentamos.

Herramienta de escritorio de Flutter

#

By Abdullah Deshmukh

Tras el lanzamiento beta del soporte de escritorio en Flutter 2, necesitábamos una app de ejemplo para demostrar cómo escribir una app de Flutter que pueda ejecutarse en Windows, macOS y Linux. Trabajé en ese ejemplo, en forma de una herramienta de linting de Flutter que te ayuda a gestionar las reglas de lint para tus proyectos de Flutter. El código fuente de la app muestra cómo podrías implementar técnicas básicas de apps de escritorio como leer y escribir archivos, implementar un layout responsivo, usar almacenamiento persistente, e incluso cómo trabajar con archivos YAML. Además, el ejemplo podría usarse para probar la distribución de apps de Flutter a las diferentes tiendas de apps de escritorio.

Para más detalles, visita GSoC ’21: Creando un ejemplo de escritorio para Flutter.

La herramienta de linting de Flutter muestra varias reglas de lint y sus descripciones.
Herramienta de linting de Flutter

Detección de licencias para pub.dev

#

By Bharat Biradar

Un paquete publicado en pub.dev es evaluado en varias métricas como si sigue las convenciones de archivos de Dart, tiene un archivo CHANGELOG, etc. Este análisis lo realiza pana (Package ANAlysis para Dart). Pana también es responsable de detectar el identificador de licencia bajo el cual se publica el paquete.

Hasta ahora los nombres de licencias mostrados en pub.dev se determinaban mediante heurísticas simples de expresiones regulares, y solo soportaban la detección de unas pocas licencias con baja precisión. La tarea de este proyecto era crear un detector de licencias para pana que detectara licencias SPDX, de acuerdo con las guías de coincidencia de SPDX.

El detector de licencias construido para pana usa el mismo enfoque que v2_licenseclassifier, con modificaciones hechas para adaptarse mejor a nuestros requisitos.

Dado el archivo LICENSE de un paquete, pana usa tres pasos para detectar los identificadores de licencia SPDX:

  1. Eliminar coincidencias obvias del corpus SPDX: Dividir el texto en tokens (básicamente palabras), verificar si el archivo LICENSE tiene un número suficiente de tokens (al menos 50%) en comparación con una licencia conocida, y eliminar todas las licencias conocidas que no satisfagan el criterio. Este paso permite a pana descartar rápidamente muchas licencias, permitiendo cálculos más costosos en el paso 2.

  2. Encontrar subcadenas coincidentes en la licencia desconocida y las licencias SPDX restantes: Para las licencias conocidas restantes, encontrar las subcadenas en el texto desconocido que coincidan con el texto de una licencia conocida. Buscamos subcadenas, porque el texto desconocido podría contener múltiples licencias. Al identificar subcadenas coincidentes, ignoramos secuencias con menos tokens que threshold * number_of_tokens_in_known_license, porque tales secuencias no tienen suficiente densidad de tokens para constituir una coincidencia. Si no se encuentran subcadenas con suficiente densidad de tokens para una licencia conocida dada, entonces sabemos que no es una coincidencia.

  3. Determinar puntuaciones de confianza: Este paso ****estima una puntuación de confianza (entre [0,1]) para las subcadenas encontradas. Primero se hace un diff de la subcadena, usando levenshtain word diff, contra la licencia del corpus SPDX en la que fue detectada. Luego la licencia se considera una coincidencia si la confianza calculada de la siguiente manera está por encima del umbral establecido:

Una fórmula para calcular la puntuación de confianza de una coincidencia de licencia.

Esperamos que esto te dé una idea del proceso de detección de licencias. Si quieres probar el detector de licencias, puedes encontrarlo en el repositorio de pana.

Muchas gracias a todos los que aplicaron para Google Summer of Code 2021 con Dart, a los estudiantes 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 2020.

Más de Dart