Presentaciones de fotos en formato vídeo (slideshows) desde la línea de comandos

Posted: julio 18th, 2020 | Author: | Filed under: Sin categoría | Tags: , , | No Comments »

Hace ya algunos años apareció en este blog como hacer presentaciones de fotos en formato vídeo. A pesar de que hay muchos programas buenos para editar vídeo en GNU/Linux, esta vez quería tener un proceso sencillo y fácilmente replicable aún a costa de perder un poco de calidad o efectos (como degradado entre imágenes, …).

En este tutorial veremos, sin entrar en muchos detalles (mis conocimientos no dan para ello), una forma muy rápida de crear un slideshow con música usando únicamente el terminal. Como limitante partimos de la base de que todas las imágenes están en el mismo formato (en este caso JPEG)

Las herramientas


sudo apt-get install --install-recommends rename imagemagick ffmpeg

Normalizar los nombres y ordenar las imágenes

El primer paso es ordenar las imágenes poniéndolos un «nombre normalizado» que represente ese orden. En este caso partimos de unas imágenes que ya tienen cierto orden, pero arreglamos las mayúsculas, usamos dos caracteres para los números y ajustamos las del medio.

Cada caso será muy particular pero veamos un ejemplo:


$ cp -r original copia
$ cd copia
$ ls
0.JPG 1_1.JPG 12_1.JPG 13.jpg 15.jpg 17.JPG 19.jpg 20.jpg 22.jpg 24.jpg 26.jpg 28.jpg 2.JPG 31.jpg 4.JPG 6.JPG 8.JPG
10.JPG 11.JPG 12.JPG 14.jpg 16.jpg 18.jpg 1.JPG 21.JPG 23.jpg 25.JPG 27.jpg 29.jpg 30.jpg 3.JPG 5.jpg 7.JPG 9.JPG
$ rename 's/.JPG/.jpg/' *.JPG
$ rename 's/3(\d).jpg/5$1.jpg/' 3*.jpg
$ rename 's/2(\d).jpg/4$1.jpg/' 2*.jpg
$ rename 's/1([2-9]).jpg/3$1.jpg/' 1*.jpg
$ ls
0.jpg 1_1.jpg 12_1.jpg 2.jpg 33.jpg 35.jpg 37.jpg 39.jpg 40.jpg 42.jpg 44.jpg 46.jpg 48.jpg 4.jpg 51.jpg 6.jpg 8.jpg
10.jpg 11.jpg 1.jpg 32.jpg 34.jpg 36.jpg 38.jpg 3.jpg 41.jpg 43.jpg 45.jpg 47.jpg 49.jpg 50.jpg 5.jpg 7.jpg 9.jpg
$ mv 12_1.jpg 31.jpg
$ rename 's/1([0-1]).jpg/2$1.jpg/' 1*.jpg
$ rename 's/([1-9]).jpg/1$1.jpg/' ?.jpg
$ mv 0.jpg 00.jpg
$ mv 1_1.jpg 01.jpg
$ ls
00.jpg 11.jpg 13.jpg 15.jpg 17.jpg 19.jpg 21.jpg 32.jpg 34.jpg 36.jpg 38.jpg 40.jpg 42.jpg 44.jpg 46.jpg 48.jpg 50.jpg
01.jpg 12.jpg 14.jpg 16.jpg 18.jpg 20.jpg 31.jpg 33.jpg 35.jpg 37.jpg 39.jpg 41.jpg 43.jpg 45.jpg 47.jpg 49.jpg 51.jpg

Rotar las imágenes

A pesar de que en la previsualización del explorador de archivos podamos ver todas las imágenes rectas, alguna de ellas puede estar girada. Esto es por qué muchas herramientas usan por defecto los metadatos EXIF de la imagen para rotarlas de la forma lógica.


# las que no tengan un `1` están rotadas
identify -verbose * | grep -E '(Image:|Orientation)'

# Rotarlas. https://stackoverflow.com/a/19475281/930271
# Esto modifica todas las fotos, por lo que mejor usarlo sólo con la que deben
# ser rotadas
mogrify -auto-orient *.jpg

identify -verbose * | grep -E '(Image:(.*)|exif:Orientation: [2-9])'
mogrify -auto-orient 16.jpg
mogrify -auto-orient 45.jpg

Identificar tamaños y «aspect ratio»

Para montar las imágenes en el vídeo debemos investigar sus tamaños y sobre todo la relación de aspecto. El comando identify de ImageMagick nos puede dar la información más relevante y podemos ordenarla por aspect ratio, anchura, …


# https://unix.stackexchange.com/questions/50252

# ordenadas por aspect ratio
$ identify -format "%[fx:w/h] %w %h %M\n" *.jpg | sort -n -k1

1.5 4608 3072 20.jpg
0.75 1944 2592 15.jpg
0.75 2304 3072 16.jpg
0.75 3864 5152 45.jpg
1.33333 1280 960 44.jpg
1.33333 1280 960 46.jpg
1.33333 1280 960 47.jpg
1.33333 2592 1944 13.jpg
1.33333 3072 2304 17.jpg
1.33333 3264 2448 01.jpg
1.33333 3264 2448 14.jpg
1.33333 3264 2448 19.jpg
1.33333 3264 2448 33.jpg
1.33333 4000 3000 43.jpg
1.33333 4000 3000 50.jpg
1.33333 4000 3000 51.jpg
1.33333 4320 3240 18.jpg
1.33333 4608 3456 31.jpg
1.33333 4672 3504 34.jpg
1.33333 4672 3504 35.jpg
1.33333 5120 3840 49.jpg
1.33333 5152 3864 32.jpg
1.33333 5152 3864 37.jpg
1.33472 1280 959 38.jpg
1.33884 2592 1936 00.jpg
1.33884 2592 1936 11.jpg
1.49841 3776 2520 21.jpg
1.77778 3072 1728 12.jpg
1.77778 3264 1836 39.jpg
1.77778 3968 2232 41.jpg
1.77778 5312 2988 36.jpg
1.77778 5312 2988 40.jpg
1.77778 5312 2988 42.jpg
1.77778 5312 2988 48.jpg

# ordenadas por width
identify -format "%[fx:w/h] %w %h %M\n" *.jpg | sort -n -k2

Aquí la clave es:

  • Ajustar las imágenes para que tengan todas la misma relación de aspecto y que no salgan deformadas. Cosa que haremos directamente con ffmpeg al crear el vídeo.
  • Escoger el tamaño de referencia a usar para las imágenes. La «redimensión» la haremos directamente al crear el vídeo.

Sin entender mucho de vídeos mi criterio es coger el aspect ratio más común a las imágenes, en este caso 1.333, y un tamaño intermedio, de modo que haya pocas imágenes por debajo de ese tamaño, y que al ampliar no pixelen demasiado, en este caso me quedo con 2592×1936

Montar el vídeo

La wiki de ffmpeg da el comando básico para hacer el slideshow, y en stackoverflow también hay buenas respuestas

El comando que usaremos en este caso es:


ffmpeg -framerate 1/5 -pattern_type glob -i '*.jpg' -i audio.mp3 -vf 'scale=2592:1936:force_original_aspect_ratio=decrease,pad=2592:1936:(ow-iw)/2:(oh-ih)/2,setsar=1' -c:v libx264 -c:a copy -crf 14 -r 25 -pix_fmt yuv420p -shortest output.mp4

Los parámetros más relevantes para el slideshow:

  • -framerate 1/5: El denominador define cuanto se mostrará cada imagen
  • -pattern_type glob -i '*.jpg': Cuando las imágenes no están ordenadas exactamente de forma secuencial con este parámetro las meterá en el video ordenadas por nombre
  • 'scale=2592:1936:force_original_aspect_ratio=decrease,pad=2592:1936:(ow-iw)/2:(oh-ih)/2,setsar=1': Escala las imágenes a 2592×1936 y mete bandas negras de relleno cuando no se pueda conservar la relación de aspecto

Circular Dependencies Webcast por Miguel Grinberg

Posted: junio 29th, 2020 | Author: | Filed under: Sin categoría | Tags: , , , | No Comments »

Un Webcast de Miguel Grinberg sobre como evitar Dependencias Circulares en una aplicación Python / Flask.

My Metadata

  • Descripción: Un webcast de 1h en el que se refactoriza una aplicación Flask que empieza con un único fichero a varios paquetes y módulos.
  • Calificación: 3 sobre 5
  • Día de Visualización: 2020-06-28
  • Año de publicación: 2018
  • Duración: 68 minutos
  • Velocidad de reproducción recomendada: 1.75
  • Etiquetas: python; flask; dependencies; refactoring

Lecciones aprendidas

  • Mantener el entry point tan limpio como sea posible. Incluso con un único import.
  • El módulo que es ejecutado inicialmente por Python adquiere el nombre de __main__ a nivel interno, por ello los «nombres» que se definan en este módulo, no se identificarán inicialmente a efectos de dependencias como myfile.myvar si no como __main__.myvar, lo que es más fácil que genere un error de dependencias circulares
  • No usar los __init__.py como mecanismo para acortar los imports. Hay tantas opiniones a favor como en contra sobre el tema. A mi me ha generado más problemas que soluciones.
  • Usar imports desde la «raíz» from myapp.models.user import User y no estilo from user import User.
  • No pasa nada por no poner los import al inicio del fichero cuando tenga sentido que sea de otra forma, por ejemplo para evitar dependencias circulares. Usar # noqa para que no pite el linter en estos casos es aceptable.

Comprar un portátil para desarrollo en 2019

Posted: mayo 13th, 2019 | Author: | Filed under: Sin categoría | Tags: , , , , | No Comments »

Toca cambiar de portátil. 8GB de RAM ya se quedan cortos. La patilla de la pantalla está dañada y no parece que vaya a aguantar mucho más. Y la batería con una vm, el ide y el navegador no dura mucho más de 1h.

Para situarnos el anterior comprado hace cuatro años era un MSI GE60 2PC Apache:

  • Micro i7-4720HQ. 2.60GHz de frecuencia base, hasta 3.60GHz con el Turboboost. 4 cores, 8 threads, 6MB de cache y un TDP de 47W.
  • 8GB RAM SODIMM DDR3 a 1600 fabricada por Kingston. No se cual es la latencia.
  • Nvidia GeForce GTX 850M con 2MB RAM
  • Disco duro mecánico de 1TB a 7200rpm
  • Pantalla de 15.5 y resolución de 1920×1080 normalita
  • Wireless-AC 3160, b/g/n y bt 4.0
  • hdmi, vga. 2 puertos USB 2.0 y 2 puertos USB 3.0, además de jacks para salida y entrada de audio.
  • 383 x 249 x 30 y 2.6kg de peso con batería
  • Batería de 6 celdas, 49Wh

Cuando lo compré escribí una guía de compra de portátil que aunque desactualizada me sirve de base para buscar uno nuevo. En base al rendimiento actual los requisitos no han variado demasiado:

  • Todo lo importante debe funcionar al 100% con linux. Si no va la luz del teclado me da igual. Si deja de funcionar el wifi con cada actualización del kernel adios.
  • Mínimo 16GB de RAM
  • Un i7 o equivalente en AMD. Un vistazo rápido me dice que los i5-82xxu que se montan en este rango de precios no son mucho mejores que mi micro actual y no me interesa averiguar si con un i5 me llega.
  • Resolución pantalla mínima 1920 x 1080. Como la mayoría del tiempo uso una externa como principal no necesito que sea extraordinariamente buena pero no quiero quemarme los ojos así que será un plus interesante
  • Mínimo 1TB de disco
  • No tengo necesidad de gráfica dedicada pero prefiero que no me coma RAM extra
  • No lo quiero más grande ni pesado que el actual. A pesar de que el 85% del tiempo está apoyado en una mesa, el 15% restante de viajes en tren, reuniones y uno o dos viajes de trabajo al año hacen que prefiera uno más pequeño. Pero no voy a sacrificar más de 150€ o rendimiento por ello
  • Quiero un teclado «bueno» a pesar de que la mayor parte del tiempo use uno externo
  • No tengo demasiadas necesidades de conectividad y puertos, no necesito Bluetooth y me da igual que tenga salida VGA y lector de DVD. Estos detalles me ayudaran en la decisión final pero asumo que con el resto de características que busco las necesidades mínimas en este aspecto estarán cubiertas. Update: Cuando revisé las opciones disponibles esto varió un poco, más en otro post
  • La marca no me preocupa. Hay demasiadas opiniones y experiencias particulares a favor y en contra de todas las marcas. Por experiencias cercanas doy puntos positivos a MSI y Slimbook y negativos a los HP y los Dell pero sólo en la clasificación final cuando haya dudas. No a priori. Y lo mismo con otras consideraciones como el uso de minerales de zonas de conflicto
  • Mi orquilla inicial es amplia y la reduciré a medida que investigue un poco. Empezaré por portátiles entre 900 y 1300€ con IVA. Una cantidad por la que se puede comprar algo aceptable para cuatro años si estás dispuesto a sacrificar alguna característica a cambio de precio como: batería, tamaño o potencia.

Hay un par de puntos clave sobre los que tenía dudas al principio:

  • Tamaño de la pantalla. Probablemnte la decisión más eliminadora a la hora de comprar el portátil. El de ahora es de 15.6 y para mi uso es cómodo. Pero siempre dudo con coger uno más pequeño. 14» sería perfecto. A los de 13» les tengo algo de manía. Update: Al poco de empezar a buscar los de 14» quedaron prácticamente descartados porque no me interesaba tanto sacrificar rendimiento o precio a cambio de mejoras de tamaño y batería
  • Con el disco duro también tengo dudas. De comprar unicamente un único disco magnético (HDD) tengo claro que sea de 7.200rpm. Una búsqueda rápida me dice que hay algún SSD de 1TB (lo ideal) a partir de 1.100€ pero en general suben bastante el precio. La opción de dos discos SSD + HDD puede ser buena pero me da que consume bastante batería y me puede fastidiar un poco mi organización actual de particiones, donde guardo las cosas cifrado y backups. Update: Cerca de tomar la decisión final quedó claro que en ese rango de precios tengo que sacrificar mi organización actual.

Con esto en la cabeza preparo mi hoja de cálculo y la inicializo con un par de configuraciones de Slimbook que me servirán de referencia. Luego voy rellenando algunos datos principales y descartando algunos directamente a partir de la búsqueda en un par de páginas. Fundamentalmente:

  • https://www.pccomponentes.com/
  • https://slimbook.es/
  • https://www.vantpc.es/
  • Amazon

y un vistazo rápido a:

  • http://tiendas.mediamarkt.es/ordenadores-portatiles
  • https://www.worten.es/inicio/informatica/ordenadores/portatil.html
  • http://www.elcorteingles.es
  • https://www.dell.com/es-es
  • https://www.pcbox.com/
  • https://www.lenovo.com/

Si estás interesado en este tema puedes ver otros artículos parecidos o seguir esta serie en esta etiqueta.


Virtualbox + Windows + VideoConferencia Múltiple en Skype

Posted: julio 24th, 2018 | Author: | Filed under: Sin categoría | Tags: , , , , , , | 2 Comments »

Si usas linux no sería extraño que alguna vez te hayas encontrado con una ineludible videoconferencia de grupo por Skype y hayas tenido que hacer números para poder participar.

Quien dice Skype, dice alguno de esas extrañas aplicaciones privativas de videoconferencia que alguna gente (clientes) insisten en usar.

Si tienes una licencia de Windows que puedas reusar para una máquina virtual, a mi estas instrucciones me funcionan en Ubuntu 18.04 para poder usar webcam y micro.


# Substituir por el usuario deseado
USER=$(whoami)

sudo apt install virtualbox virtualbox-ext-pack virtualbox-guest-additions-iso virtualbox-guest-x11 virtualbox-dkms
sudo usermod -a -G vboxusers $USER
sudo usermod -a -G video,audio,pulse-access $USER
sudo usermod -a -G audio pulse

Tras crear la máquina guest con Windows:

  • Encender la máquina virtual
  • `Dispositivos ópticos` -> `montar una nueva iso` -> En `/usr/share/virtualbox` seleccionr VBoxGuestAdditions.iso.
  • En caso de que no se ejecute automáticamente el cd/iso, ejecutaremos el .exe desde el explorador de archivos.

Con estas instrucciones tendremos una máquina virtual que soporte webcam, audio, usbs, portapapeles bidireccional (a activar en la configuración de cada máquina), …


Cifrar una disco duro externo en Ubuntu

Posted: junio 10th, 2018 | Author: | Filed under: Sin categoría | Tags: , , , , , , | No Comments »

La sencillez con que se pueden hacer ciertas tareas en Ubuntu u otras distros GNU/Linux ha mejorado enormemente desde la última vez que escribí sobre esto como cifrar un disco duro.

A día de hoy en Ubuntu la mejor opción es usar el asistente gráfico. Llega con insertar el USB y desmontarlo. A continuación desplegamos el menú contextual del disco externo pulsando con el botón derecho sobre él en el navegador de archivos y seleccionamos Format.

En la ventana de opciones seleccionamos las que aparecen en la siguiente captura.

Y listo, ya tenemos un disco duro externo cifrado en formato ext4 ideal para hacer copias de seguridad.


Migrar a GitLab manteniendo mirrors en GitHub

Posted: junio 9th, 2018 | Author: | Filed under: Sin categoría | Tags: , , , , , , , , | No Comments »

En iCarto habíamos planificado hace un tiempo migrar nuestra infraestructura de desarrollo (repositorios de código principalmente) a GitLab. Estos días hemos terminado la migración y he aprovechado para escribir un artículo de como se pueden mantener mirrors de los repos de gitlab en github a través de la propia plataforma o con un servidor intermedio.


Libro: El corredor del laberinto

Posted: diciembre 31st, 2017 | Author: | Filed under: Sin categoría | Tags: , , | No Comments »

He aprovechado las vacaciones de navidad a uno de mis «placeres culpables» que es la lectura de sagas Young Adult de ciencia ficción o fantasía. En este caso toco el turno de «El corredor del laberinto» de James Dashner.

Poco que decir de este libro a parte de ser una decepción absoluta. De los que me he tragado hasta ahora Harry Potter, Los Juegos del Hambre, Divergente, … esta serie es la peor y no la recomiendo.

Clasificación: 2/5

Te gustará si: Eres un fan incodicional de este tipo de novelas y Divergente te pareció buena.

Puedes comprarlo en Amazon, aunque hay quien te lo presta gratis en epubgratis.

Si este post te ha valido para ahorrarte unos euros y un par de horas puedes comprar alguno de los libros que si recomiendo desde los enlaces de mis artículos. Me llevo un pequeño porcentaje que me anima a seguir ahorrando tiempo a quien se fíe de mis críticas :)


Libro: Dive Into Python

Posted: diciembre 8th, 2017 | Author: | Filed under: Sin categoría | Tags: , , , , | No Comments »

Hay una versión del libro para python 2, cuya última edición es de 2004, y una versión centrada en python 3 con algo de contenido reescrito. El autor original Mark Pilgrim hace tiempo que desapareció de internet, pero los libros continúan siendo mantenidos aunque poco actualizados en github.

Ambas versiones de los libros tienen buenas puntuaciones en Amazon [v2] [v3] y Goodreads [v2] [v3]

Se venden como un hands-on en python, es decir poca teoría y presentar ejemplos prácticos.

La estructura de ambas versiones es la misma para todos los capítulos comienza con un ejemplo de código, y a continuación lo explica paso a paso. Durante el proceso va introduciendo nuevas funcionalidades del lenguaje. Tal y como está estructurado no es adecuado para alguien sin conocimientos de programación previos. Tampoco me parece adecuado para gente que sepa de otro lenguaje y quiera aprender python.

Algunos de los capítulos de la segunda versión se quedan antiguos y/o muy específicos como trabajar con http, xml o html. La parte de testing, tdd y refactoring es bastante limitada y no me acaba de convencer, aunque hay que reconocer que pocos libros no específicos tratan estos temas, por lo que es de agradecer que al menos los mencionen. Los primeros tres capítulos y el de expresiones regulares son casi un relleno, me parecen avanzados para alguien que no sepa python, poco útiles para quien ya controle del lenguaje. Los capítulos de Introspección, POO, Programación Funcional y Funciones dinámicas pueden aportar algún conocimiento de interés y funcionalidades del lenguaje algo menos habituales de usar.

En la versión 3 pasa más o menos lo mismo, aunque los capítulos sobre Closures & Generatos, Classes & Iteratos, Advanced Iteratos, y Special Method Names son interesantes. Esta versión tiene un poco menos de carga en la parte de Programación orientada a objetos, así que esos capítulos se pueden revisar en la versión para python 2. Los capítulos sobre migración de python 2 a python 3 sólo son de interés para quien tenga que abordar un proyecto de ese tipo.

Si estás buscando un libro para aprender python sepas o no programar previamente esta no es una buena opción. Pero si merece la pena cuando ya tengas idea del lenguaje y estés buscando aprender un poco más y conocer algunos idioms, sobre todo en modo lectura rápida. Abre cada capítulo y trata de entender el ejemplo propuesto, si no tienes dudas puedes pasar al siguiente capítulo. Si el ejemplo tiene algo que te resulta de interés lee un poco más de ese capítulo.


Libro: Think Python: How to Think Like a Computer Scientist

Posted: noviembre 15th, 2017 | Author: | Filed under: Sin categoría | Tags: , , , , | No Comments »

How to Think Like a Computer Scientist es un libro clásico entre los recomendados para comenzar a programar en python. La primera edición es de 2002, escrito por Jeffrey Elkner, Allen B. Downey y Chris Meyers bajo licencia GNU FDL. El ser tan «antiguo» y el estar publicado bajo licencia libre ha hecho que a lo largo del tiempo hayan aparecido diversas versiones del libro.

Tenemos dos versiones del libro para python 2

  • How to Think Like a Computer Scientist: Learning with Python 2nd edition, sería la última edición para python 2 del libro original, y está fechada en 2012. Las soluciones a algunos ejercicios se pueden encontrar en wikibooks (y seguramente valgan para otras versiones).
  • La primera edición (2002) de ese mismo libro la podemos encontrar en Green Tea Press la página personal (y «editorial») de Allen B. Downey uno de los autores originales
  • Y también en Green Tea Press podemos encontrar una reedición distinta del mismo libro para python, renombrada simplemente a Think Python. Revisando el github donde se mantiene el libro los últimos cambios serios parecen ser de 2015

También tenemos varias versiones del libro enfocadas a python 3.

  1. La que podríamos considerar primera, de 2012, es How to Think Like a Computer Scientist: Learning with Python 3, reeditada fundamentalmente por Peter Wentworth como libro de texto para un primer curso de programación.
  2. Otra versión sería una adaptación de la de Peter Wentworth, hecha por varios profesores de la Universidad de Groningen, para emplearla también como libro de texto para sus clases. En el prólogo declaran que su idea era cambiar la filosofía del libro, de «how to think like a computer scientist» to «how to think as a scientist with a computer», pero revisándolo en mi opinión, los cambios no son tan significativos como para conseguirlo. Está en readthedocs por lo que también se puede descargar
  3. En Green Tea Press también encontramos una versión (los últimos cambios serios en el github son de 2016). Esta sería algo así como la segunda edición de Think Python
  4. Por último, un experimento interesante. Un libro interactivo, que parece basado fundamentalmente la versión de Wentworth. Consiste en una aplicación web que permite ejecutar código en el propio navegador, depurar paso a paso a modo educativo y responder a cuestionarios

En la página de Green Tea Press hay un dos artículos explicando porqué publicar «free books», y su filosofía a la hora de escribir libros de texto. Además en el prólogo del libro se puede leer algo sobre su historia para entender los autores y los cambios a lo largo del tiempo.

Todas las versiones (inluída la interactiva) están en repositorios de código en github o launchpad, por lo que es posible colaborar en su mejora. Y están escritos en reStructuredText o Markdown y convertidos a libros con sphinx u otras herramientas.

No resulta sencillo decir «cual es mejor», cada una de las veriones tiene sus puntos fuertes y débiles:

  • Los que hemos hemos numerado como dos y como tres son los que tienen para mi un orden de capítulos más lógico. Por ejemplo trata listas, tuplas y diccionarios en capítulos contiguos mientras que en las otras versiones los diccionarios están separados del resto de tipos de datos. Pero en dos han juntado varios capítulos en uno sólo por lo que su lectura se hace algo más difícil. Además los capítulos sobre numpy, matplotlib y data handling no encajan muy bien como están escritos en un libro para principiantes. Por tanto a pesar de ser el más actualizado yo en principio descartaría esta versión.
  • El uno tiene algún material adicional respecto a los otros como capítulos sobre estructuras de datos más avanzadas (pilas, colas y árboles). Si bien creo que estos capítulos son de interés, tampoco pasa nada por prescindir de ellos en un primer contacto, porque hay otros libros más avanzados o más específicos que tratan mejor este tipo de temas.

  • El número tres (Think Python) tiene para mi otros alicientes como que algunos de los problemas y soluciones están resueltos en el github del autor. Es de los que siguen un orden más lógico, capítulos cortos, y una sección «debugging» al final de cada capítulo que explica «técnicas mentales» a la hora de depurar y construír un programa que resultan útiles. Además se puede comprar a través de Amazon, descargar gratuitamente en PDF, leer en html… Así que seguramente esta es la versión más recomendable.
  • La versión interactiva también me ha sorprendido gratamente. El texto no es tan bueno como el de Think Python, pero el poder jugar con el código mientras leemos el texto, da muchas opciones a alguien que se introduce en el lenguaje y le permite aprender sin tener que liarse con el entorno. Además la opción de debug (codelens en su terminología es especialmente útil para ver lo que pasa en el programa). Esta tambień es un opción recomendable.

Entre la opción interactiva y Think Python es difícil decidirse, si quieres avanzar rápido y tener una panorámica general, el libro seguramente es mejor, y la irrupción de cajas y botones en medio del texto menos molesta. Depende del estilo de aprendizaje de cada uno. Leer un par de capítulos de cada uno y decide tu mismo.

Si está revisión te ha ahorrado tiempo y quieres agradacerme el esfuerzo planteate donar usando el botón de la derecha, comprar el libro a través del enlace al principio del texto o simplemente dejar un comentario en esta entrada.


Hacen falta más programadores contando sus miserias

Posted: noviembre 12th, 2017 | Author: | Filed under: Sin categoría | Tags: , , , | No Comments »

Desde que Andrés planteara hace ya dos años el reto de escribir sobre la selección tecnológica en pymes llevo queriendo escribir algo sobre ello.

Todavía no va a ir de esta, pero valga este mini-post para referenciar dos enlaces que han entrado en mi radar esta misma semana. En el primero Matt Mullenweg quota a Jony Ive de Apple para afirmar que tan importante como el producto (o el servicio) que proporcionas a tus clientes es el proceso, o el aprendizaje, con el que has llevado hasta él. Algo en lo que creo firmemente y que también leí en Kent Beck (aunque ahora no encuentro el enlace). En el segundo nos hablan de como no todas las arquitecturas valen para todos los casos.

Basicamente mi opinión va en la línea de que los creadores de opinión en torno al software, son lógicamente, increiblemente expertos en sus campos. Los frameworks con más éxito, son hechos por empresas como Google o Facebook. Las conferencias están llenas de gente que hace cosas muy chulas con las últimas tecnologías. Pero cuando tengas que decidir, si estás leyendo este post, seguramente no trabajes en Google, ni serás un mega-experto. Puede que tus clientes para hacer el deploy te hagan conectarte a un teamviewer ejecutándose en un Windows en una red interna donde te permiten abrir un putty al servidor y «monitorizan» todo lo que tecleas que debe hacerse a mano para validarlo. Trata de hablar con ellos de docker (o incluso de scripts para automatizar).

Hace falta más conferencia, más libros y más posts de gente contando sus miserias, y de como su trabajo es tan necesario como el de quien tiene la suerte de poder desplegar en AWS, porqué también están resolviendo problemas reales.