Joanillo Blog. Maker, Open source and hardware http://www.joanillo.org Programación y proyectos maker con herramientas libres - Programació i projectes maker amb eines lliures Tue, 31 Mar 2020 10:26:43 +0000 es hourly 1 http://wordpress.org/?v=3.2.1 La Casa de Papel: aplicación web http://www.joanillo.org/?p=2280 http://www.joanillo.org/?p=2280#comments Mon, 30 Mar 2020 10:54:54 +0000 joanillo http://www.joanillo.org/?p=2280 ...Read the Rest]]> Este es un ejemplo que he hecho mano a mano con Pere, ahora que estamos confinados por la COVID-19 y vamos por la mitad de la 3a temporada de La Casa de Papel.

Para mi también ha servido para hacer una aplicación OpenLayers con código Node, que es la tendencia actual. Todo está explicado en la wiki y en los enlaces a los que se hace referencia.

La renderización que se ha hecho del mapa en blanco y negro es el estilo toner de Stamen. A mí particularmente me gusta mucho, y creo que hemos conseguido una buena integración con el diseño propio de la serie, que juega con los colores negro y rojo.

Enlaces:

]]>
http://www.joanillo.org/?feed=rss2&p=2280 0
Veguerías/regiones de Catalunya. Densidad de población http://www.joanillo.org/?p=2270 http://www.joanillo.org/?p=2270#comments Wed, 25 Mar 2020 15:16:25 +0000 joanillo http://www.joanillo.org/?p=2270 ...Read the Rest]]> He estado programando unos scripts para fusionar fronteras (ver enlace). Ha sido un poco más difícil de lo que me pensaba, y me ha queddo un código Python bastante guarro, pero al final he logrado fusionar comarcas de Catalunya para obtener las regiones/veguerías. Ya miraré de arreglar el código cuando pueda, pues estudiar los diferentes casos es un problema de topología bastante interesante y no demasiado difícil. Pero ahora, debido al confinamiento provocado por el corona-virus y la COVID-19, este es el mejor código (y ya le he dedicado más horas de las que deseaba).

Todo esto viene porque estuve buscando el geojson de las veguerías y fui incapaz de encontrarlo. Este código también ha de servir para fusionar otros casos. Estoy pensando por ejemplo fusionar los municipios del Alt Berguedà.

Con todo esto he hecho como ejemplo la densidad de población, clasificado por veguerías/regiones.

Nota 31-03-2020: He mejorado el código y ahora ya estoy contento con el resultado final. Con la nueva versión he fusionado los municipios del Alt Berguedà.

]]>
http://www.joanillo.org/?feed=rss2&p=2270 0
GeoJSON: densidad de las comarcas de Cataluña http://www.joanillo.org/?p=2212 http://www.joanillo.org/?p=2212#comments Tue, 10 Mar 2020 17:42:39 +0000 joanillo http://www.joanillo.org/?p=2212 ...Read the Rest]]> Tenía un tema pendiente con la visualización de mapas: programar aquellos mapas en que se ven las fronteras (ya sean países, regiones, comarcas, municipios), y donde podamos asignar un color o podamos clicar en cada una de las regiones.

En la API de Overpass se pueden hacer consultas de las relaciones a nivel administrativo, y normalmente se obtiene las ways que representan líneas de frontera administrativa. Esto ya va bien para pintar el contorno de un municipio, por ejemplo. Ahora bien, para sombrear toea una área necesitamos un polígono cerrado. Lo mejor es buscar una fuente de datos con formato GeoJSON de los datos que necesitamos, por ejemplo las comarcas. Buscando un poco puedes encontrar datos de todo: países, comunidades autónomas, provincias, etc. Combinando estos datos con la información que nos interesa (por ejemplo, la densidad de población por comarca), podemos hacer una aplicación como la que se muestra en la imagen.

Para hacerlo, está explicado en la wiki. Ahora que me he puesto con el GeoJSON, ahora veo que hay otro formato interesante que es el TopoJSON. Esto es un no parar!

]]>
http://www.joanillo.org/?feed=rss2&p=2212 0
Cataluña megalítica http://www.joanillo.org/?p=2198 http://www.joanillo.org/?p=2198#comments Tue, 25 Feb 2020 16:01:54 +0000 joanillo http://www.joanillo.org/?p=2198 ...Read the Rest]]> Ya tengo acabada la visualización de todos los dólmenes de Catalunya y Catalunya Nord. Se ha hecho este trabajo con varios propósitos. Por una parte, unificar y actualizar toda la información disponible en OpenStreetMap, donde sólo estaban listados la mitad de los dólmenes. También me interesaba la programación de OpenLayers para visualizar el mapa, y la renderización del mapa con diferentes estilos a parte del clásico de OSM.

Para visualizar el mapa creo que lo más chulo es el estilo Terrain. Ahora bien, si quiero hacer zoom y que aparezca información en detalle de la zona, el mejor mapa continúa siendo el de OSM. La aplicación también puede visualizar el mapa con los estilos Toner y Watercolor.

He tenido más trabajo del que tenía previsto y tiempo del que quería gastar. O sea que he hecho un subdominio para que al menos la información esté siempre disponible:

]]>
http://www.joanillo.org/?feed=rss2&p=2198 0
web de Rutas BTT, nueva versión (v4) http://www.joanillo.org/?p=2188 http://www.joanillo.org/?p=2188#comments Thu, 13 Feb 2020 13:35:05 +0000 joanillo http://www.joanillo.org/?p=2188 ...Read the Rest]]> Hace años que publico las excursiones con BTT en el subdominio rutesgps.joanillo.org.

Todo empezó con la programación de la API de Google Maps. Más adelante se hizo la migración a OpenStreetMap. Y durante este tiempo he ido añadiendo funcionalidades. También, durante estos años siempre he hecho con los alumnos prácticas de geolocalización, en el marco de la asignatura de Javascript de DAW.

Así que ahora he añadido unas cuantas funcionalidades más: los videos de Relive; los puntos de interés; iconos de inicio y fin de ruta; 3 capas de visualización del terreno; aspectos de diseño; etc. Ahora, cada vez que añada una ruta, tengo un protocolo consistente para no cometer errores.

El pasado otoño me compré un GPS de ciclismo, el Bryton 450E (que está basado en mapas de OpenStreetMaps), y a pesar de sus limitaciones, le estoy sacando el máximo provecho. Y todo este trabajo no tendría ningíun sentido si esto no se tradujese en kilómetros de bicicleta y disfrutar de la naturaleza.

]]>
http://www.joanillo.org/?feed=rss2&p=2188 0
OpenCV: detectar círculos http://www.joanillo.org/?p=2173 http://www.joanillo.org/?p=2173#comments Thu, 30 Jan 2020 12:10:02 +0000 joanillo http://www.joanillo.org/?p=2173 ...Read the Rest]]> Una vez ya sabemos detectar las rectas, ahora vamos a la parte de detectar los círculos. OpenCV nos da el círculo de mejor ajuste, con su centro y su radio. Por sólo nos falta aplicar el algoritmo de calcular el error de ajuste, como se explica en el anterior post.

Como fichero de entrada tenemos un CSV con los nombres de los participantes, el nombre del fichero de las rectas, y el nombre del fichero de los círculos. Como salida tenemos el fichero resultados.txt con las puntuaciones obtenidas por cada uno de los participantes.

Así pues, ahora sólo falta llevarlo a la práctica. Espero que sea pronto.

]]>
http://www.joanillo.org/?feed=rss2&p=2173 0
Medir la rodondez de un círculo http://www.joanillo.org/?p=2162 http://www.joanillo.org/?p=2162#comments Wed, 29 Jan 2020 18:14:42 +0000 joanillo http://www.joanillo.org/?p=2162 ...Read the Rest]]> Después de resolver el problema de medir la linearidad de una recta, ahora toca medir la redondez de un círculo. En la imagen hay una captura de la solución que hemos implementado.

Hay bastante literatura sobre el tema, pero he preferido buscar la solución por mi cuenta. Dado un círculo, openCV ya nos da el círculo de mejor ajuste, con el centre y el radio. La primera idea es recorrer todos los puntos del círculo y hacer el sumatorio de todas las diferencias entre el punto y el radio. El valor da una buena idea de cómo de bueno es el círculo, en términos absolutos. Pero si ahora escalamos x2 o por x0.5 nuestro círculo, los resultados serán diferentes. Por tanto, no he de buscar un error absoluto, sino un error relativo.

La segunda idea es medir áreas. Concretamente, el cociente entre la diferencia de áreas del círculo dibujado y el círculo aproximado, dividido por el área del círculo. Como se ve en el papel, ahora sí que obtenemos un valor relativo de la rodondez del círculo. Una cosa que hemos de tener en cuenta es que cuando sumamos áreas, hay que coger el valor absoluto de la diferencia, para que no haya cancelaciones.

Cuanto más se aproxima a 0 el valor, más bueno es el círculo. Si el valor lo resto de 1, entonces el círculo perfecto valdrá R=1, y R=0.98 no sería tan bueno. Ahora falta implementarlo en mi programa.

]]>
http://www.joanillo.org/?feed=rss2&p=2162 0
Volvemos a la carga con OpenCV: detectar rectas http://www.joanillo.org/?p=2155 http://www.joanillo.org/?p=2155#comments Tue, 28 Jan 2020 11:51:09 +0000 joanillo http://www.joanillo.org/?p=2155 ...Read the Rest]]> Después de un tiempo sin hacer nada con OpenCV, retomamos el proyecto antiguo de la aplicación de las rectas y círculos. Me explico, se trata de hacer un concurso para niños para evaluar si son capaces de hacer rectas y círculos perfectos. El problema es que ahora Maria y Pere ya tienen 14 iy10 anys, quizás ya son un poco mayores para esto. Pero ningún problema, lo haremos igualmente con otros niños más peques que tenemos por aquí.

Continuaré programando en C++, por aquello de programar más rápido, pero soy consciente de que la misma aplicación la podríamos hacer en Python, lenguaje con que he programado bastante últimamente.

Mostramos una captura donde se ve claramente cómo detectamos las rectas, dibujamos la recta de mejor ajuste, y mostramos el valor de la correlación que nos da el valor de como es de buena la recta dibujada. El siguiente paso será hacer los mismo con círculos.

]]>
http://www.joanillo.org/?feed=rss2&p=2155 0
Elementary Mechanics Using Python http://www.joanillo.org/?p=2146 http://www.joanillo.org/?p=2146#comments Sun, 26 Jan 2020 23:21:10 +0000 joanillo http://www.joanillo.org/?p=2146 ...Read the Rest]]> Ya he terminado el libro Elementary Mechanics Using Python, y en el fichero adjunto tenemos todo el código Python y los gráficos generados. Ha sido una buena repasada de un curso de Mecánica general: fuerzas, energía, trabajo, sólido rígido. He escogido uno de los gráficos al azar, todos los ejercicios han sido interesantes de programar. En el fichero exercicis.txt se ha documentado el trabajo realizado y se ha relacionado todos los ejercicios realizados. De todas maneras, la manera com se han nombrado los scripts y los gráficos resultantes hace que se ubiquen rápidamente en el apartado del libro correspondiente.

Los scripts se han hecho con python2, aunque fácilmente se pueden portar a python3. En el libro se ha utilizado la librería pylab que representa que simplifica la tarea de realizar los gráficos y utilizar los módulos matemáticos. Sin embargo, nosotros hemos preferido utilizar las librerías numpy y matplotlib directamente, es una aproximación más general.

]]>
http://www.joanillo.org/?feed=rss2&p=2146 0
Block (or book) stacking problem http://www.joanillo.org/?p=2130 http://www.joanillo.org/?p=2130#comments Tue, 21 Jan 2020 15:02:30 +0000 joanillo http://www.joanillo.org/?p=2130 ...Read the Rest]]> Esta mañana he resuelto el problema de apilar libros (o bloques). Se trata de estudiar bajo qué condiciones puedo apilar bloques (de longitud L) de manera que los vaya desplazando un respecto al anterior, de manera que no caigan. Cuál es la condición límite para que no caigan? Con bloques de longitud L puedo conseguir un desplazamiento de longitud L?

Este problema recuerdo haberme peleado con él (y creo que en su día no lo llegué a solucionar) el verano de 1989 en Bagà, pues el problema estaba enunciado en el Schaum de Mecánica Teórica (Murray R, Spiegel). He buscado el libro (lo he encontrado en pdf en la red, seguro que lo tengo en una estantería), y en la foto se ve el enunciado del libro en la pág 249. NOTA: La figura que enseña el libro está mal y genera confusión: es al revés, el bloque de arriba es el que sobresale la mitad, y los bloques de abajo son los que están más juntos (la figura del llibre tiene un apilamiento claramente inestable, los bloques segur que caen porque el centro de gravedad está fuera del bloque de más abajo).

En aquella época no existía Internet, o sea que uno se peleaba con el problema solo, sin poder pedir ayuda. Ahora lo he resuelto (solito, hay que decirlo, ver el pdf en los enlaces de abajo), y después de resolverlo he buscado información complementaria que he encontrado de lo más interesante (videos de Youtube incluidos), ver los enlaces.

La solución. Todo el sistema de los blocs 1…N-1 que están sobre el bloque N no caen si su centro de masas cae justo en el extremo del bloque N. Se puede resolver de forma iterativa: el bloque 1 se aguanta sobre el bloque 2 si lo ponemos en la mitad, L/2. El sistema bloques 1+2 se aguanta sobre el bloque 3 si el centro de masas de los bloques 1+2 está justo en el extremo del bloque 3. Vamos poniendo bloques, y vamos calculando los centros de masas, y vamos viendo cuál es la condición de equilibrio. Y al final (ver la solución) se encuentra que el centro de masas es una serie armónica:

Xi+1cm = L/2 * (1 + 1/2 + 1/3 + … + 1/i)

Y ahora un poco de matemáticas: la serie armónica es divergente (aunque diverge muy lentamente). Lo que significa que se puede conseguir un desplazamiento teórico tan grande como se quiera (vere el video del enlace, donde se consigue un desplazamiento bastante grande).

Ahora sólo me falta hacer la experiencia con Maria y Pere, a ver si lo podemos hacer este mes. Si lo conseguimos, colgaremos también el video.

Enlaces:

]]>
http://www.joanillo.org/?feed=rss2&p=2130 0