TL;DR: Una forma rápida de convertir la información principal de un fichero de issues exportado de Bitbucket a una tabla es usando el siguiente comando:

in2csv -f json -k issues archivo_exportado.json > tabla_salida.csv

Desde Bitbucket se pueden exportar los “issues” a un archivo json que guarda todos los datos relacionados con los mismos: contenido, comentarios, adjuntos, versiones, logs, etc. Aunque es un formato 1 muy completo, que permite exportar e importar cómodamente entre repositorios git, no es lo más cómodo para ser leido por personas (es lo que tiene el json, muy fácilmente procesable por máquinas, pero aunque legible por humanos, no es especialmente amigable).

A veces es útil poder visualizarlos en un formato más cómodo, para, por ejemplo, poder trabajarlos en el marco de la gestión de proyectos con personas que no trabajen habitualmente con código.

Una forma rápida de extraer parte de la información es a través del comando in2csv del paquete 2 csvkit. En este caso, nos quedaríamos con las características principales (estatus, prioridad, tipo, titulo y contenido, usuario que reporta, etc) y se quedarían fuera comentarios, adjuntos y otras informaciones.

En primer lugar hay que descomprimir el archivo que se genera al exportar desde Bitbucket y quedarse con el fichero llamado db-1.0.json o similar.

in2csv -k issues archivo_exportado.json > tabla_salida.csv

Tras el parámetro -k hay que indicar la clave “top-level” que se quiere extraer y es obligatorio si el JSON contiene más de una de estas claves. En nuestro caso, las claves son:

  • issues,
  • comments,
  • attachments,
  • logs,
  • meta,
  • components,
  • milestones
  • versions
  1. En esta página se puede encontrar una descripción del formato. 

  2. csvkit es un conjunto de herramientas de línea de comandos, escritas en Python, para trabajar con ficheros CSV. 

TL; DR

Cada comando de una tubería se ejecuta dentro de una subshell, con su propio contexto y entorno de variables. Incluyendo los bucles si estos forman parte de la tubería.

La variable que desaparecía

El otro día trabajando con un script en bash me volví un poco loco con una variable que modificaba dentro de un bucle while y que luego parecía no guardar su valor una vez terminado el bucle. Como era un comportamiento que para nada esperaba me costó lo mio dar con el problema. No era un problema del bucle, si no de que éste formaba parte de una tubería (pipe):

var1=0
echo $VARIABLE1 | 
while read task; do
  # cuerpo del bucle
  var1=2
  # ...
done
echo "$var1"


> 0

Efectivamente, cada comando de una tubería se ejecuta dentro de una subshell, con su propio contexto y entorno de variables. Incluyendo los bucles si estos forman parte de la tubería.

En esta web se puede leer una descripción detallada de este comportamiento, qué sucede en las diferentes versiones de shell, así como diferentes maneras de sortearlo.

De las propuestas, la solución que decidí adoptar en mi caso fue el agrupamiento de comandos (Command grouping) así:

var1=0
 
echo $VARIABLE1 |
{ 
  while read task; do
    # cuerpo del bucle
    var1=2
    # ...
  done
  echo "$var1"
}

> 2

Que, como explican en la página, no altera para nada el tema de la subshell, pero como en este caso no necesitaba reutilizar nada de lo que allí había en el resto del código, resulta una solución suficiente y rápida de aplicar.

De paso, he descubierto esta página que parece que va a ser una referencia útil a la que volver de vez en cuando.

Fuente:

BashFAQ

En un post de 20151 de su blog FlowingData, Nathan Yau nos da algunas de las reglas que debemos tener siempre en cuenta a la hora de realizar gráficos:

La línea base de los gráficos de barras debe empezar en cero

Los gráficos de barras se basan en la longitud de las barras para mostrar la información. Si se desplaza la línea base, se distorsiona el significado. Ejemplo:

plot of chunk graficoBarras

No pasarse haciendo trozos en los gráficos de tarta

De hecho hay quien considera que los gráficos de tarta no deben usarse en ningún caso. Ejemplo:

plot of chunk graficoTrozos

Respetar las partes de un todo

Los gráficos que representan partes de un todo (como los gráficos de tarta, mosaicos, etc.) deben comportarse como tales y cada sección de los mismos debe representar una proporción separada, que no se superpone con las otras.

plot of chunk partesTodo

Mostrar los datos

Esto parece algo obvio, ya que es la función principal del gráfico. Sin embargo, se suele fallar en este propósito cuando se muestran demasiados datos de una vez. Algunas soluciones sencillas que se pueden aplicar:

  • Cambiar el tamaño de los símbolos para que no ocupen tanto espacio. Se trata de incrementar el espacio en blanco.
  • Usar transparencias para que todos los símbolos se vean aun cuando tengan otros encima.
  • Separar la población en subgrupos, bien por muestreo o usando categorías.

Explicar lo que se muestra

Cuando realizamos gráficos, codificamos los datos a través de formas, colores y tamaños. Es necesario por tanto incluir siempre las claves que nos permitan entender el gráfico. Esto incluye ponerle título, etiquetar los ejes, añadir leyenda, etc.

Por último, os recomiendo leer el libro de Nathan Yau, Data Points (recomiendo éste porque es el único que he leído, pero los demás tienen muy buena pinta también) y visitar su página FlowingData.com que contiene multitud de información sobre estadística y visualización de datos, parte de ella de libre acceso y otra parte accesible mediante subscripción.

Fuente: