Google Summer of Code, participa en proyectos a nivel mundial

Saludos a todos :) Este post se mantendrá corto pero espero que sea de utilidad a más de uno, y encienda la curiosidad de muchos al mismo tiempo. Cuando hablamos de programación, muchas veces encontrar un trabajo que se ajuste a tus deseos y expectativas es bastante complicado. En especial si vives en regiones como las nuestras donde la demanda no siempre va en la dirección en la que uno se desarrolla.

Pero esto no solamente es complicado para aquel que busca un trabajo, sino que lo es también para aquellos que requieren trabajadores, las organizaciones luchan por encontrar el mejor talento posible, y muchas veces les es complicado por falta de presupuesto o impacto o cualquier otro factor externo.

Es por esto que el gigante de la tecnología lleva más de 10 años trabajando de manera constante para conectar desarrolladores prometedores y vincularlos con proyectos que hacen la diferencia a nivel mundial. Entre las muchas organizaciones que participan en este proyecto, todas sin excepción desarrollan tecnologías abiertas o libres, y el campo de acción de cada una puede ir desde los automóviles inteligentes, pasando por el desarrollo de páginas web, o incluso llegar a temas no relacionados con la programación como pueden ser la revisión de licencias, documentación, traducción, diseño gráfico, organización de eventos, etc.

Cómo funciona

El Google Summer of Code (GSoC) es un evento que se lleva a cabo durante el verano del emisferio norte, (~mayo – ~agosto), en el cual los participantes seleccionados trabajan a tiempo completo (40 horas semanales) de manera remota, con una organización específica. El proceso de selección de las organizaciones comienza en enero, y la resolución de las organizaciones seleccionadas suele aparecer a mediados de febrero.

Cuando una organización es seleccionada, esta cuenta con una lista de proyectos por los cuales Google se ofrece a pagar al estudiante para completar en el plazo de los tres meses. Es un proceso en el cual se cuenta con la ayuda de un mentor, y se llevan reuniones semanales de seguimiento para poder corroborar los avances y problemas que puedan surgir en el camino.

Las inscripciones de estudiantes pueden iniciar en marzo, y entre marzo y mayo existe un periodo de probación y selección donde tanto las organizaciones como Google eligen a sus participantes para la temporada.

Los estudiantes

La definición de estudiante aplica tanto para jóvenes que busquen su título profesional, como para personas llevando títulos de maestrías, o incluso doctorados, la única condición es cursar estudios en alguna universidad acreditada en el momento de la selección para la participación en el GSoC. Además es necesario ser mayor de edad (18 años). Los estudiantes deben acordar un reglamento de comportamiento, que en palabras sencillas significaría, se amable con todos, estudiantes/mentores/colegas, y todo va a ir bien.

Los proyectos

Existe una lista completa de proyectos que se pueden revisar, y dentro de ellos encontramos organizaciones como Gentoo, GNU, The Linux Foundation, Apache, GNOME, KDE, Python, etc etc. Cada una de estas cuenta con una lista propia de proyectos, pero si uno desea, puede presentar un proyecto personal, los requisitos para el proyecto son simples: contar con un horario bien definido (tareas, subtareas, tiempos) y presentar por qué sería bueno completar dicho proyecto para dicha comunidad.

Para una visión más específica de cada proyecto, es necesario ver detalladamente cada página personal, y eso es algo que me tomaría mucho aquí por ser tantas las organizaciones, así que les voy a contar un poco de lo que yo estoy haciendo y el motivo por el que les estoy contando sobre el GSoC :)

The Linux Foundation

No es un secreto para nadie que yo ya he tenido contacto con esta organización, hace unos meses me pude certificar como SysAdmin gracias a sus cursos y hoy estoy en rumbo a poder participar en su GSoC. El proyecto en el cual estoy intentando clasificar es el desarrollo de un driver para un sensor multipropósito de BOSCH, el cual sería integrado en el kernel 4.16.x o 4.17.x en caso de que el proyecto tome más de lo esperado.

Ahora seguro más de uno se preguntará qué tanto sé yo sobre drivers, y la respuesta es simple, no sé casi nada :) pero esto es lo maravilloso de los GSoC, que existen comunidades siempre dispuestas a poder guiarte en el camino de aprendizaje, y en este camino pues estoy aprendiendo mientras descubro un poco de las bases del desarrollo de drivers, esto debido a que en un correo con el Dr. Stallman hace unos meses, me comprometí a en algún momento de mi vida, desarrollar un driver para mi tarjeta de wifi, la cual es el único blob privativo que tengo que usar en mi laptop para poder contar con conexión a internet por WiFi.

Bueno, en mi grupo nos han presentado una pequeña lista de tareas, las cuales debo cumplir antes de poder aplicar oficialmente al Google Summer of Code, entre las cuales tengo cosas como mandar parches a un subsistema del kernel en específico, intentar migrar drivers de la zona de “pruebas” al árbol principal, y una que otra tarea más.

En estas cortas semanas he conocido más estudiantes que están buscando participar, uno de ellos estudiante de master de Brasil, otro estudiante de ciencias de la computación en Europa, ciertamente personas muy capaces que también están en el camino de aprender como yo :)

Para participar

Para participar no necesariamente debes ser un experto programador, a menos que tu proyecto lo requiera, pero sí es necesario que seas capaz de comunicarte de manera virtual con la comunidad, muchas veces esto será en inglés, a menos que encuentres un miembro que domine otro idioma. Más de uno estará renegando al leer esto, pero tenemos que enfrentar el hecho de que si las comunidades tuvieran más miembros de habla hispana (nosotros) seríamos nosotros también los que podríamos participar en esas organizaciones como mentores para ayudar a jóvenes a integrarse en la comunidad.

Como sé que deben estar con muchas preguntas que yo no puedo responder ahora por tiempo o por falta de creatividad, les dejo el link oficial del GSoC para que puedan ver todo el proceso a detalle aquí.

Saludos y espero que más de uno se anime a participar :) tal vez uno que otro quiera entrar a ayudar en Gentoo, eso sería genial también ;)

¿De dónde viene UNIX?

Saludos a todos :) estas semanas he estado bastante entretenido leyendo algunos libros sobre programación, la verdad es que la mejor forma de aprender a programar es siempre con un libro, cualquier artículo, tutorial, guía que uno pueda encontrar (incluyendo las mías) son meros puntos de referencia al momento de compararlas con un libro de verdad sobre el tema. Ahora bien, tenemos que definir lo que es un libro “de verdad” también, puesto que no todos los libros suelen ser buenos, y muchos de ellos pueden incluso costar más de lo que realmente valen y hacernos perder tiempo.

A lo largo de estos años la lista de libros que he leído y la de libros que puedo recomendar han divergido bastante, pero sin lugar a dudas entre algunos de mis favoritos tenemos (en ningún orden específico):

  • CEH Certified Ethical Hacker de Matt Walker.
  • Beginning Python: From Novice to Professional de Magnus Lie Hetland.
  • Hacking: the art of exploitation de Jon Erickson.
  • Getting Started with Arduino de Massimo Banzi.
  • Learning the bash Shell de Cameron Newbam & Bill Rosenblatt.
  • Learning the vi and vim editors de Arnold Robbins, Elbert Hannah & Linda Lamb.
  • Linux Kernel in a Nutshell de Greg Kroah-Hartman (un developer de Gentoo también).
  • Modern C de Jens Gustedt
  • The Shellcoder’s Handbook de Chris Anley, John Heasman, Felix “FX” Linder & Gerardo Richarte.
  • The C programming language de Brian W. Kernighan & Dennis M. Ritchie (creadores de C)
  • Debugging with GDB de Richard Stallman, Roland Pesch, Stan Shebs, et al.
  • Hacking Linux Exposed: Linux Security Secrets and Solutions de un gran grupo de investigadores de ISECOM, entre ellos Pete Herzog, Marga Barceló, Rick Tucker, Andrea Barisani (otro ex developer de Gentoo), Thomas Bader, Simon Biles, Colby Clark, Raoul Chiesa, Pablo Endres, Richard Feist, Andrea Ghirardini, Julian “HammerJammer” Ho, Marco Ivaldi, Dru Lavigne, Stephane Lo Presti, Christopher Low, Ty Miller, Armand Puccetti & et al.
  • Sistemas operativos: Un enfoque basado en conceptos de Dhananjay M. Dhamdhere
  • Pro Git  de Scott Chacon y Ben Straub
  • Expert C Programming: Deep secrets de Peter Van Der Linden.

Podría hablar maravillas de cada uno de estos libros, pero por hoy tomaremos algunos de los pasajes del último en la lista, puesto que muchas de estas anéctodas me han cautivado y ayudado a comprender mejor algunos de los intrincados secretos de C y la programación en general :)

Unix y C

Cuando hablamos de UNIX, la historia se entrelaza con el origen de este sistema y el desarrollo del lenguaje que hasta el día de hoy es uno de los más utilizados en el desarrollo del mismo y sus derivados (incluyendo Linux). Y curiosamente, estos dos nacen de un “error”.

Multrics fue un mega proyecto que juntó a los laboratorios Bell, General Electric y el mismo MIT para crear un sistema operativo, dicho sistema presentó muchos errores, y entre uno de los más importantes, fallos de performance que hacía del sistema algo practicamente inutilizable. Hablamos del año 1969, por lo que el hardware de esa época no podría soportar la cantidad de software que se necesitaba para correr el sistema mismo.

No fue hasta 1970 que un par de ingenieros de Bell empezaron a trabajar en un sistema operativo simple, rápido y ligero para el PDP-7. Todo el sistema había sido escrito en Assembler y había sido llamado UNIX como parodia a Multrics puesto que este solo deseaba hacer pocas cosas, pero hacerlas bien en lugar del tremendo trabajo desperdiciado que significó el segundo. Ahora podrán entender por qué Epoch comienza el 1ro de enero de 1970. :) Un dato bastante curioso para mí. En ese momento todavía no se hablaba de un C propiamente dicho, sino de un New B puesto que las ideas de Ritchie provenían del ya utilizado lenguaje B de esa época.

Early C

Con el paso de los años (1972-3) el término C empezó a ser utilizado puesto que el lenguaje nuevo empezaba a tomar forma, y por esta época nace otro dato curioso, muchos programadores y chistes de programadores dicen:

Los programadores saben que se empieza a contar desde 0 en lugar de 1.

Pues esto no es del todo cierto :) la verdadera razón por la que esto es considerado así hasta el día de hoy es porque en su creación, para los escritores de compiladores era más sencillo calcular un arreglo utilizando offsets, estos indican la distancia que existe desde un punto de origen hasta el objetivo deseado, es por esto que:

array[8]=2;

Nos indica que el elemento de array es definido como 2, porque al array se le suman 8 unidades para llegar al espacio de memoria donde se almacenará el elemento 2. Antes de C, muchos lenguajes empezaban a contar desde 1, gracias a C, ahora casi todos comienzan con 0 :) así que no es culpa de los programadores, sino de los escritores de compiladores que esto sea así.

The Bourne Shell

Este es un tópico que aunque no está directamente relacionado con C, puede ayudar a más de uno a entender por qué la programación en Shell es tan peculiar, y ciertamente es curioso saberlo. Steve Bourne escribió por esa temporada un compilador de Algol-68, este es un lenguaje en el que las llaves ( {} ) son reemplazadas por palabras, por lo que lo podríamos definir de la siguiente manera en C:

#define IF if(

#define THEN ){

#define ELSE }else{

#define FI };

Estos son solo algunos ejemplos de lo que entiende Algol, pero si lo aplicamos a la programación en shell el día de hoy, ya entenderán por qué en shell tus programas requieren de un fi para cada if :) ciertamente interesante.

Comiencen a leer

No puedo contarles todos los detalles del libro, especialmente porque muchos de estos ya son temas de programación que requieren un fondo previo para poder ser comprendidos, pero pensé en compartir con ustedes algunas de las anecdotas curiosas que fui encontrando en el camino :) No he tenido tiempo de trabajar en algunos de los artículos que han estado en la lista de pendientes porque simplemente estos últimos libros me han atrapado y los estoy disfrutando cada día y sobre todo tratando de comprenderlos al máximo. Saludos y ya pronto podré compartir con ustedes más temas, saludos.