Google Summer of Code

El GSoC es un programa de Google para introducir a estudiantes universitarios en el desarrollo de software libre de código abierto.

En 2014 participé como estudiante (Improve wxQt port and wxPython for Android proof of concept), y en 2017 como mentor (wxWebView JavaScript Integration).

La idea de esta entrada es documentar brevemente estas experiencias, explicando y comentando las cuestiones aprendidas, especialmente para futuros estudiantes y mentores que puedan encontrarle utilidad.

Intro al GSoC:

Para empezar, las organizaciones interesadas en participar publican una página de ideas (por ej ver wxWidgets 2017 Project ideas), donde se listan al menos un par de mentores por cada proyecto.

Los estudiantes interesados deberían ponerse en contacto con la organización, descargar el código del proyecto y resolver algún bug "simple", como práctica de "pre-calentamiento".
Una vez elegido el proyecto, deben envían sus propuestas, y la organización hace una preselección de candidatos. 

Finalmente, Google determina cuantos slots puede asignar a cada organización, y se eligen los estudiantes definitivos, asignándoles sus mentores.

Luego de un período inicial de "aclimatación" (community bonding), los estudiantes comienzan a trabajar en su proyecto y existen tres evaluaciones que se deben superar para continuar participando.

Al finalizar, se presentan los resultados y se realiza una reunión de mentores en Google.

Proyecto GSoC 2014: mejoras wxQt y PoC Android

En 2014 participé como estudiante, mientras estaba realizando la Maestría en Software Libre. La propuesta completa puede encontrarse en el Archivo de Internet 


Como resumen general, la experiencia fue muy positiva, pudiendo lograr varios avances y principalmente que el código sea incorporado luego al proyecto principal.

Además, la rama wxQt tuvo nueva difusión y atrajo desarrolladores adicionales que colaboraron con distintas contribuciones para poder hacer funcionar sus aplicaciones.

Si bien quedaron algunos tickets abiertos y el último milestone resultó ser muy ambicioso, la mayoría fue solucionado (ver tickets cerrados incluyendo temas interesantes de segmentacions faults, memory leaks, Qt internals, diferentes API entre Linux / Android, etc.)

Abstract

wxWidgets es una biblioteca multiplataforma que permite incluir navegadores nativos en aplicaciones de escritorio (además de otras opciones para construir GUI: Interfaz Gráfica de Usuario).


Un proyecto previo de GSoC creo las bases para un port de wxWidgets a Qt. 
Este proyecto consistió en hacer el port usable y completar las partes faltantes, para poder desarrollar pequeñas aplicaciones, trayendo los standares actuales de wxWidgets a  wxQt, actualizando a Qt 5.2.
Como prueba de concepto para explorar el desarrollo rápido de aplicaciones en ambientes móviles, la idea era construir un prototipo minimalista de wxPython usando wxQt para Andorid.

Prueba de Concepto

Repositorio: https://github.com/reingart/gsoc2014 (PoC wxQt + Android)


Proyecto GSoC 2017: mejoras JavaScript a wxWebView

En 2017 participe como mentor para un proyecto wxWidgets GSoC que consistió en extender el método RunScript para que pueda retornar el valor devuelto por JavaScript, de esta forma extendiendo la funcionalidad de la biblioteca en C++ y posibilitando una mejor integración con los distintos navegadores.

wxWebView mostrando el ejemplo JS RunScript


Diversidad: experiencia técnica e idioma

Participé como mentor para un estudiante español, lo que por el lado del idioma, ayudo a discutir más fácilmente las cuestiones del día-a-día (especialmente), para luego presentar en la lista las cuestiones más elaboradas (en inglés).

Igualmente hubieron problemas de comunicación y malos entendidos, "normales" para este tipo de proyecto (considerar que los desarrolladores están distribuidos alrededor del mundo, con distintas zonas horarias, usos y costumbres, etc.)

Por el lado de las expectativas técnicas, es bueno recordar que el GSoC es un programa para introducir nuevos desarrolladores a proyectos de software libre / código abierto ya establecidos.
Por lo tanto, puede haber distintas perspectivas y los estudiantes pueden no estar al tanto de la metodología de desarrollo (estilos, reglas para las revisiones de código, cobertura de pruebas), calidad esperada, balance entre costo/beneficio del esfuerzo, etc.

Lecciones aprendidas:

En este sentido, sería recomendable aprovechar el tiempo previo para entrenar a los potenciales estudiantes:
  • tratando de establecer las expectativas técnicas claramente con anterioridad
  • ejemplificando el proceso de desarrollo del proyecto (con un ticket / Pull Request simple)
El tiempo es una cuestión fundamental: no todos los desarrolladores estan disponible siempre (por ej. para revisar el código), y pueden surgir imprevistos (tanto del lado del estudiante como para los mentores).

La interacción inicial del estudiante candidato con los potenciales mentores es un muy buen indicador a futuro, y en base a eso es conveniente organizar bien el proyecto para no sumar stress innecesario a los participantes ni a la comunidad.

Desafíos técnicos:

wxWidgets, al ser una biblioteca GUI multiplataforma, implica levantar entornos de desarrollo para distintos sistemas operativos y navegadores web. Es recomendable tener todo preparado con tiempo.

Cuestiones de bajo nivel y viejas vs nuevas API influyeron significativamente en el proyecto:
  • Linux: WebKit vs WebKit2 y GTK2 vs GTK3
  • Mac OS X: UIWebView vs WKWebView
  • Windows: IE (ActiveX) vs Edge
Por el lado de tipos de datos, simplificar en JSON fue una alternativa para minimizar desarrollo requerido, considerando especialmente todas las variantes de objetos posibles a ser devueltos por JS y ser necesario de procesar en la capa C++.

También hubo otras cuestiones, como llamadas sincrónica vs asincrónica (no soportadas por todas las plataformas / componentes), cuestiones de C++ (memory leaks, performance, "gotchas"), ejemplos y tests a adaptar, etc.

Organización vía GitHub

Para un mejor seguimiento, se decidió utilizar todas las características de GitHub (hitos, tickets, PR).
En general fue una buena estrategia, pudiendo unificar la mayoría de los aspectos de organización, aunque la mayoría de las conversaciones del día a día fueron por chat, y muchas otras por la lista de correo.

Para la planificación, se definieron varios hitos: uno por cada etapa de evaluación determinada por los deadlines de Google, más otros de "precalentamiento" (ticket inicial y community-bonding).

Para estimar se cargaron tickets iniciales (Scrum), con una estimación aproximada considerando que cada etapa dura aproximadamente 1 mes. Varios de estos tickets tuvieron que ser reconsiderados, ya que se encontraron dificultades y diferentes acercamientos a medida que avanzaba el proyecto.

No olvidar que algunas cuestiones, como la revisión del código, documentación y discusiones de características pueden tomar su tiempo. Es fundamental considerar el esfuerzo necesario + eventualidades, y no dejar todo para último momento.

IMPORTANTE: no perder de vista que el GSoC esta pensado para las vacaciones de verano del hemisferio norte (para no interferir con los estudios / trabajo cotidiano); dado que en estas latitudes las vacaciones de invierno son mucho más cortas, la disponibilidad y fechas límites pueden no ser temas menores.

Ficha del Proyecto:

GSoC 2017 Mentor Summit

Cada año Google lleva a cabo una desconferencia (un-conference), donde participan dos mentores de cada proyecto en diversos espacios abiertos: https://sites.google.com/view/2017gsocmentorsummit

La idea es intercambiar experiencias, consejos y relacionarse con miembros de las distintas comunidades de software libre.

En las diferentes salas se podría proponer varios espacios abiertos de discusión:

Las tematicas fueron super variadas, desde juegos a hardware libre, incluyendo como motivar y preparar a futuros contribuidores (para proyectos como Chrome, el Kernel de Linux), licenciamiento, diversidad, arte, robótica, "nuevas tecnologías" como WebRTC, mobile, usabilidad etc.
También algunas charlas eran propuestas por ingenieros de Google sobre iniciativas open source.   


Por mi parte propuse una sesión sobre "Open Source Education" que tuvo bastante interesados, y luego de presentar algunas experiencias como disparadoras, se abrio una discusión muy productiva.

En 2017 se realizó en los edificios Tech Corners 4 de Google (California):
 GSoC 2017 Mentor Summit (public photos)

Tuve la oportunidad de conocer a Vadim Zeitlin, uno de los principales desarrolladores de wxWidgets, y mi mentor en el primer proyecto de GSoC:



Licencia y Aviso Legal
Licencia y Aviso Legal

CC BY-SACopyright (C) 2009 - 2013 Mariano Reingart reingart@gmail.com - Visite el sitio http://reingart.blogspot.com/ para novedades. Salvo indicación contraria, el texto de esta página está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0 Unported; podrían ser aplicables cláusulas adicionales.

Se solicita mantener el aviso de copyright (enlazando al texto original), compartir las obras derivadas bajo la misma licencia, y si es, posible comunicando al autor cualquier mejora. No utilizar logotipos ni marcas sin la debida autorización de sus titulares.

Toda información es proporcionada a Titulo Informativo y se entrega como está, sin garantías explícitas ni implicitas de ningún tipo, incluyendo sin limitación, pérdida de ganancias, interrupción de negocios, pérdida de programas u otros datos en sistemas de computación o cualquier otro reclamo. Al usarla acepta hacerlo bajo su propia responsabilidad, conociendo la normativa y reglamentaciones existentes. En caso de controversias respecto del presente, usted acepta presentarlas y resolverlas exclusivamente en la jurisdicción de los Tribunales Ordinarios Civiles y Comerciales del Departamento Judicial de Morón, Provincia de Buenos Aires, Argentina, renunciando expresamente a cualquier otro fuero que pudiere corresponder.


Enlaces
Laboral
Laboral
Laboral
Grupo de desarrolladores independientes
Docente en
Docente en
Docente en
Instituto Superior Blaise Pascal
Diplomatura
Diplomatura
Diplomatura
Universidad del Este
Proyecto PyAfipWs
Proyecto PyAfipWs
Proyecto PyAfipWs
Interfáz libre a los servicios web de AFIP
Etiquetas
Datos personales
Datos personales
Suscribirse
Suscribirse
Archivo del blog
Cargando