Trabajo:Cómo colaborar con el ayuntamiento

De FdIwiki ELP
Saltar a: navegación, buscar

El Ayuntamiento de Madrid está desarrollado dos nuevas aplicaciones de participación y transparencia fomentando el desarrollo colaborativo y abierto. Estas aplicaciones están hechas enteramente en software libre para que luego puedan ser usadas en cualquier parte del mundo. Las aplicaciones están desarrolladas completamente en Ruby on Rails.

El Ayuntamiento va a organizar el evento #CodingMadrid el 2º jueves de cada mes de 12:00 a 15:00 (aunque se pueden sugerir otros horarios), en el Medialab-Prado, con todos aquellos que quieran unirse a trabajar en las nuevas aplicaciones de participación y transparencia: http://diario.madrid.es/blog/2015/11/16/desarrollo-colaborativo-y-abierto-en-codingmadrid/

Trabajo realizado por

  • Ana María Martínez Gómez (Doble Grado Ingeniería Informática - Matemáticas 5º)
  • Jakub Holubanský (Grado en Ingeniería Informática 4ºA)

¿Cómo puedo colaborar con el ayuntamiento?

Donde más ayuda se necesita es en el desarrollo.

Para quienes no se animen a programar, se puede colaborar de de otras formas:

  • Pensando mejoras y cómo implementarlas, y proponerlas sin programarlas.
  • Se puede colaborar con análisis de datos. Ya hay un grupo que está realizando análisis de datos de cómo participa la gente en el Portal de Participación. Por ej, la vida media de una propuesta, el uso que tiene, lo que atrae cada propuesta por tipo... hacen scrapping y analytics. Ese grupo se reune regularmente en el Medialab, y está abierto a cualquiera que quiera unirse y colaborar.
  • Se puede ayudar a repensar los algoritmos de ordenación de las propuestas. Es decir, al usuario se le muestra una lista de propuestas en portada. ¿Cuáles deberían subir/bajar y en qué casos? Ahora mismo se usa uno como el de Reddit pero simplificado. Hay muchos posibles, y un análisis de los que hay para elegir otro mejor sería algo muy útil.


Participar en el desarrollo

¿Qué necesito saber para poder participar en el desarrollo?

El ayuntamiento de Madrid utiliza Ruby on Rails en todo su software, por tanto si no sabes Ruby on Rails lo primero que debes hacer es aprender. Para ellos puedes utilizar este artículo: Trabajo: Cómo aprender Ruby on Rails

También necesitaras tener un cuenta en Github. Puedes crearla aquí si no la tienes ya: https://github.com/join

Deberás además saber usar Github y Git. Para ellos puedes utilizar la siguiente guía: https://git-scm.com/doc


Manos a la obra

El portal de participación se encuentra en: https://github.com/consul/consul

El portal de transparencia de encuentra en: https://github.com/AyuntamientoMadrid/transparencia


Requisitos previos

Para colaborar en ambos proyectos lo primero que debes hacer es instalar git, Ruby 2.2.3, la gema bundler y PostgreSQL (9.4 o superior). Además para el de participación también necesitarás ghostscript.


Git

Si estás en linux para instalar git basta con:

sudo apt-get install git


Ruby 2.2.3

Si estás usando Ubuntu o debian NO utilices

sudo apt-get install ruby-full

Esto intalará la versión 1.9.3 que no es válida para este proyecto.


Puedes descargar la versión 2.2.3 en formato .gz aquí: https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.3.tar.gz

Luego ejecuta desde la consola lo siguiente:

sudo apt-get update

sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison nodejs subversion

Desde la carpeta donde esté la descarga haz:

tar xvfz ruby-2.2.3.tar.gz

cd ruby-2.2.3

./configure

make

sudo make install

sudo gem update --system


En algunos sistemas operativos hay formas más sencillas:

CentOS, Fedora, or RHEL: sudo yum install ruby

OS X: brew install ruby

Windows: Usando el siguiente instalador http://rubyinstaller.org/

Puedes encontrar más información sobre como instalar Ruby aquí: https://www.ruby-lang.org/en/documentation/installation/


Gema bundler

Si estás en linux basta con:

gem install bundler

Si necesitas más información: http://bundler.io/


ghostscript

En Debian basta con

sudo apt-get install ghostscript


PostgreSQL (9.4 o superior)

Esto es lo más dificil de instalar y configurar.

En Debian tienes la siguiente guía detallada: https://wiki.debian.org/es/PostgreSql

Para evitar problemas es recomendable instalar también: apt-get install postgresql-9.4-postgis-scripts


Descargar y configurar proyecto

Descarga el proyecto de Github y sigue las instrucciones. Lo más adecuado es bajarlo usando el comando git. Para esto, visita el enlace del repositorio y copia el enlace del .git (aparece entre los botones, junto al botón HTTPS). Tras esto, ejecuta (cambiando el enlace en caso de que uses un repositorio distinto):

git clone https://github.com/consul/consul.git


Si al hacer bundler install te da problemas la gema pg en Ubuntu o Debian prueba lo siguiente:

sudo apt-get install libpq-dev

gem install pg


Debes crear un usuario en PostgreSQL (por ejemplo consul) con una contraseña (por ejemplo 000) y modificar el fichero config/database.yml antes de hacer bin/rake db:setup. Lo que debes modificar en el fichero es lo siguiente:

 username: consul
 password: '000'


No olvides darle permisos al usuario, sino seguramente bin/rake db:setup te dará errores. La siguiente documentación puede serte de utilidad: http://www.postgresql.org/docs/8.2/static/sql-alterrole.html

Si obtienes un error similar a este:

ActiveRecord::StatementInvalid: PG::UndefinedFile: ERROR: could not open extension control file "/usr/share/postgresql/9.4/extension/unaccent.control": No such file or directory

Lo más probable es que tengas un error con tu instalación de postgis. Prueba con:

apt-get install postgresql-9.4-postgis-scripts


Issues

GitHub utiliza un sistema de tickets para manejar los avisos de bugs y peticiones de nuevas funcionalidades, llamados aquí issues. Un usuario comienza abriendo un issue informando del problema o proponiendo cambios, y otros usuarios pueden comentar el issue para discutir cambios o informar de que han decidido trabajar en él. En issues complejos (principalmente funcionalidades nuevas), se sigue el siguiente proceso:

  • Se abre el issue sugiriendo los nuevos cambios.
  • Los usuarios comentan el cambio, incluyendo a veces bocetos.
  • Uno o más usuarios se encargan de hacer el informe de los cambios. Publican el informe.
  • Uno o más usuarios se encargan de llevar a cabo la implementación.
  • El código se publica en una Pull Request (una solicitud para incluir el nuevo código en el repositorio principal).
  • Se acepta la Pull Request y se cierra el issue.

En caso de issues menores como bugs, es posible pasar directamente a la parte de implementación. En la lista de issues, habitualmente veremos etiquetas que avisan del estado del issue y de si se encuentra asignado a algún colaborador. En el caso de querer ayudar con alguna implementación, lo ideal es buscar aquellos issues que no estén asignados y se encuentren marcados como PRs-welcome, puesto que esta etiqueta indica que está esperando a que algún programador aporte el código para solucionar el issue. Aquellos issues marcados como Not-ready no tienen los nuevos cambios todavía definidos del todo, por lo que es mejor no comenzar a implementarlos aún.

Es posible también colaborar sin contribuir código, abriendo nuevos issues en los que se informe de un bug o se proponga una nueva funcionalidad. Es de mucha ayuda ser descriptivos en estos casos, incluyendo información sobre el sistema operativo y navegador en caso de informar de un bug, por ejemplo.

Proceso para llevar a cabo una Pull Request

En caso de querer aportar el código para un issue, el primer paso (normalmente) es pedir que te asignen el issue. Tras esto, toca hacer un fork del repositorio, creando así un repositorio en nuestra cuenta en el que iremos poco a poco añadiendo el código necesario hasta haber terminado. Para esto, seguimos los siguientes pasos:

  • Abrimos la página de GitHub principal del repositorio.
  • Hacemos click en el botón de Fork y tendremos ahora un nuevo repositorio en nuestro perfil personal.
  • Cogemos el enlace .git del nuevo repositorio (suele salir al lado de un botón que pone HTTPS) y hacemos clone del repositorio en nuestro ordenador:
  • Configuramos los archivos database.yml y secret.yml usando las instrucciones que hemos visto anteriormente.
  • (Bucle) Realizamos cambios en el código en nuestro ordenador. Para subirlos a nuestro repositorio, los agrupamos en un nuevo commit en git y luego lo subimos mediante push:
    • git commit -m <descripción sobre los nuevos cambios
    • git push (pide usuario y contraseña de GitHub)
  • Repetimos el bucle hasta tener el código listo. Antes de realizar el Pull Request, nos aseguramos de que cumpla los tests Spec:
    • bin/rspec (en Windows podemos usar bundle rspec, aunque es más aconsejable no usar Windows para esto)

Ahora que ya tenemos el código listo, toca pedir que sea añadido al repositorio principal. Para ello, creamos un Pull Request:

  • Nos dirigimos al repositorio principal y elegimos New Pull Request
  • Pulsamos "compare across forks", pues queremos añadir el código de nuestro fork.
  • En base fork dejamos el repositorio original. En head fork, elegimos el repositorio de nuestro usuario (por ejemplo, <usuario/consul> y master, aunque podemos usar otros nombres).
  • Añadimos un título y una descripción al Pull Request (informando además de qué issue estamos resolviendo), y hacemos click en Create Pull Request

Con esto, nuestro Pull Request aparecerá en el repositorio principal, y en él la lista de cambios al código que queremos realizar. Al principio, se ejecutarán automáticamente tests sobre nuestro código para comprobar que cumple los requisitos (no deberíamos tener problemas si hemos ejecutado rspec antes y nos salía todo correcto). Por supuesto, el código no será incluido hasta que uno de los administradores del repositorio decida hacer un merge (unir el código). Mientras el pull request siga disponible, podemos añadirle más código subiendo nuevos commits al repositorio.

Nota: a la hora de escribir nuevo código, intenta seguir las buenas prácticas de Ruby que aparecen en este enlace: https://github.com/styleguide/ruby

Véase también