anyadiendo raster a mosaico en geoserver
2023-09-27 mié 18:25 2023-09-29 vie 22:13

Cuando creamos un mosaico de imágenes con variables altura-temporales, podemos a posteriori programáticamente añadir nuevos rásters. Esto nos da una gran flexibilidad a la hora de, a medida que procesamos, poder actualizar un conjunto de datos a lo largo de los meses o años.

asyncio
2023-09-27 mié 18:25 2023-09-29 vie 22:13

:ID: 267597bb-ce29-4c25-9623-e89ff1541050

creacion de mosaico en geoserver
2023-09-27 mié 18:25 2024-01-30 mar 18:06

Para crear de forma manual subimos los archivos a la carpeta donde queramos ubicarlos, y creamos los archivos /

sockets
2023-09-27 mié 18:25 2023-09-29 vie 23:15

Python Concurrency with AsyncIO

curry howard
2023-09-27 mié 18:25 2023-09-29 vie 23:11

El isomorfismo de Curry-Howard…

concurrencia
2023-09-27 mié 18:25 2023-09-29 vie 22:14

Como concurrencia entendemos la posiblidad de ejectuar dos procesos a la vez, pero no necesariamente de forma paralela, mediante mecanismos para ir intercambio el proceso que en cada momento está en ejecución. La programación asíncrona suele hacer referencia a concurrencia relacionada con procesos limitados por operaciones de I/O: cuando el sistema operativo coge el control para realizar alguna operación de lectura o escritura, ya sea archivo, red, etc, el programa pasa a ejectuar otras líneas de código de forma que conseguimos trabajar de forma concurrente (aunque dos líneas de código nunca lleguen a ejecutarse a la vez).

corrutinas
2023-09-27 mié 18:25 2023-09-29 vie 22:14

Para crealas, async def. Para esperarlas, await. Cuando se crea, cuando se llama a una función definida con async def, obtenemos la corrutina, que no es más que un objeto con la definición del cómputo que queremos realizar, pero éste no se realiza. Para ejecutarlas, tenemos que llamarlas dentro del bucle de eventos de asyncio. El bucle se crea con asyncio.run(coroutine()), y para ejecutarlas dentro simplemente las llamamos con await. Tenemos tres formas de ejecutar corrutinas:

patron doble publicacion
2023-09-27 mié 18:25 2024-02-04 dom 17:39

No recuerdo cómo se llama exactamente. Es muy simple, pero tiene nombre.

redes en docker
2023-09-27 mié 18:25 2024-01-17 mié 11:55

Para definir cómo se comunican los contenedores.

configuracion caddy
2023-09-27 mié 18:25 2023-09-29 vie 22:14

Caddy es un proxy que puede sustituir a nginx. Ofrece mejor rendimiento 1 y una configuración, en mi opinión, mucho más sencilla.

observer pattern en android
2015-12-21 jue 12:25 2023-09-29 vie 23:14

Un ejemplo del mundo real para entender este patrón sería el siguiente:

onclick en recyclerview
2016-02-23 sáb 12:26 2023-09-29 vie 23:14

Hace unas semanas (posiblemente ya meses) publicaba Antonio Leiva en su blog un artículo sobre cómo él implementa en los ítems de los RecyclerView los manejadores de eventos, en concreto el más típico y útil, el OnItemClickListener. Es algo que casi cualquier aplicación de Android requiere al no ser una funcionalidad que venga de fábrica. Como en su momento tuve que lidiar con ello, y como además encontré y/o reinventé la rueda un par de veces, voy a hablar un poquito sobre las cinco formas (en realidad cuatro más una) que he probado, sus pros y contras.

popup menu en tab
2016-03-23 jue 12:27 2023-09-29 vie 23:15

Necesitaba hacer un menú contextual para Android, pero no quería que fuese un AlertDialog. Con éste, al hacerse un difuminado (blurring) del fondo, se le otorga una importancia excesiva al menú. Por eso, como todos hacemos, me puse a buscar.

named tuples en python
2019-09-18 jue 12:29 2023-09-29 vie 23:13

La programación orientada a objetos se basa en asociar en un mismo elemento (un objeto) tanto un estado como las operaciones asociadas a dicho estado. Como dice Martin Fowler:

encontrar rangos con numpy
2021-01-19 jue 12:31 2023-09-29 vie 23:12

Cuando trabajamos con datos, en muchas ocasiones tenemos que localizar rangos de valores que cumplan ciertas condiciones, normalmente sobrepasar un cierto umbral.

conectar emulador android con localhost
2021-01-02 jue 12:32 2023-09-29 vie 23:12

Sobre Android y su emuldaroe, cómo poder hacer alguna petición desde el emulador a algún emulador que estamos desarrollando en local.

timetable telegraf
2022-02-01 jue 12:33 2023-09-29 vie 23:15

Resumen del artículo sobre como configurar y trabajar con telegraf e inyectar valores en timetabledb.

clojure core async
2022-04-01 jue 12:33 2023-09-30 sáb 02:18

En Clojure, core.async facilita la programación asíncrona mediante canales. Los canales son intermediarios que se usan para conectar dos procesos1, uno haciendo las veces de emisor y otro de receptor. Pero pueden usarse para conectar múltiples procesos: sirven para relaciones many-to-many.

opaque types y refined
2022-05-01 jue 12:34 2023-09-29 vie 23:15

Usando conjuntamente tipos y pocos y refined para validar datos en Scala 3.

modelos en wagtail
2023-10-07 sáb 09:04 2023-10-09 lun 09:52

Wagtail nos ofrece fundamentalmente dos tipos de modelos: Page para modelos que puedan tener vistas, y Model1 para el resto de modelos más sencillos.

concurrencia en python con asyncio
2023-09-27 mié 18:25 2023-10-23 lun 21:15

Del capítulo 1 al 4 es la base que hay que leer. El resto son aplicaciones específicas, algunas muy interesantes, pero que si no se usan de vez en cuando pueden olvidarse. Pero puede venir bien aunque sea solo leerlas, porque se definen muchas tecnologías bastante modernas a bajo nivel.

google matrix api
2015-03-22 jue 09:54 2023-09-30 sáb 07:52

Google nos permite, a partir de una serie de puntos, obtener las distancias y tiempos de viaje previstos para llegar hasta ellos desde una ubicación fija o desde la ubicación obtenida a partir de la posición del dispositivo móvil mediante la API para cálculo de distancias.

nextjs
2023-09-27 mié 18:25 2023-10-01 dom 13:16

Framework basado en React que facilita programar con Server Side Rendering.

server side rendering
2023-09-27 mié 21:28 2023-10-01 dom 09:06

Hay distintas formas de prerenderizar en el servidor componentes de React:

variables en docker
2023-10-06 vie 19:04 2023-10-06 vie 19:43

En docker-compose podemos usar environment in envfile. El primero sirve para definir variables que serán usadas por el contenedor, pero no sirven para sustituir en otros puntos del propio archivo de configuración (o en configuraciones que extendamos). El segundo en cambio nos define un archivo cuyos valores serán también exportados al ambiente del entorno de ejecución.

almacenar password en base de datos
2022-04-01 jue 12:33 2023-09-30 sáb 07:50

Tenemos dos opciones:

aprendizaje org roam
2022-04-01 jue 12:33 2024-03-30 sáb 20:41

El artículo How I Take Notes… me parece un excelente punto de partida una vez se tiene algo de base. También tenemos otras referencias sobre org-roam y sobre la base teórica:

conocimiento y tareas
2022-04-01 jue 12:33 2023-09-30 sáb 01:27

Puedo usar org-roam tanto para conocimiento como para tareas, pero para este último fin no es lo más recomendado. No es que lo piense (es la opinión del autor desarrollada en How I Take Notes), pero sí es cierto que para tareas lo único que nos aporta (la sensación que me da al menos) es la automatización de los links entre los TODO.org que compongan un proyecto entero, en el caso de que en efecto lo dividamos. Así que no voy a usarlo para eso.

introduccion a org roam
2022-04-01 jue 12:33 2023-09-30 sáb 01:27

La utilidad de estas metodologías no es generar listas de tareas, aunque puede usar como ese fin Conocimiento y Tareas. Se le da bastante énfasis a las referencias, de hecho voy a usarlo con un slip-box para referencias. He visto en bastantes sitios usar el software Zotero para gestionar las referencias. Lo probaré a ver si me aporta realmente utilidad.

leptos frontend con rust
2022-04-01 jue 12:33 2023-09-30 sáb 01:27

Leptos es un framework para desarrollo de páginas web SPA, SSR, etc.

rust 101
2022-04-01 jue 12:33 2024-05-23 jue 08:10

Pequeña guía para empezar con Rust.

salt y pepper
2022-04-01 jue 12:33 2023-09-30 sáb 01:27

Ambos conceptos están relacionados pero no son lo mismo.

templates en django
2023-10-08 dom 09:02 2023-10-08 dom 09:03

Las plantillas pueden heredar de otras plantillas.

testing en react
2023-10-13 vie 08:04 2023-10-13 vie 08:11

Si uso Vitest, es en perjuicio de Jest. Tal y como comenta la documentación de Vitest, hay mucha duplicidad entre Vite (que no Vitest) y Jest, con lo que hay que configurar dos pipelines distintos. La existencia de Vitest nos simplifica esta configuración.

python monorrepos
2023-10-15 dom 14:52 2023-10-15 dom 19:54

Voy a probar una forma de crear monorrepos distinta a como lo hacía en el ITI. Me voy a basar en los artículos al respecto de Tweag.

indices vegetales
2023-10-18 mié 11:41 2023-10-18 mié 11:44

Valores adimensionales calculados mediante relación entre DN de distintas bandas, cada uno destacas ciertos aspectos.

supabase
2023-10-23 lun 15:32 2023-10-23 lun 15:36

Esta es una cabecera típica de un GET a Supabase.

redis cheetsheat
2023-10-24 mar 17:13 2023-10-24 mar 17:15

Comandos comunes para Redis. Tengo que usar redis-cli pocas veces y se me acaban olvidando.

mosaico temporal con geoserver
2023-12-10 dom 12:58 2024-01-17 mié 12:04

Geoserver permite crear mosaicos a partir de un conjunto de raster georreferenciados. Pueden ser tanto espaciales como temporales. Este último caso es el que nos interesa.

chuleta emacs
2023-12-13 mié 08:31 2024-05-07 mar 11:33

Distintos atajos de teclado, algunos bastante comunes, pero que no se me quedan de ninguna forma y necesito consultar cada dos por tres.

algebras fp
2024-01-07 dom 10:41 2024-01-08 lun 21:26

Un álgebra nos describe las operaciones permitidas mediante un DSL1, el cual se define dentro de otro lenguaje de programación huésped (en nuestro caso Scala).

publicacion en kafka
2024-01-17 mié 13:53 2024-05-07 mar 10:48

Publicar en Kafka es sencillo. Es importante saber que el orden se garantiza dentro de una partición pero no entre particiones.

kafka en docker
2024-01-17 mié 14:01 2024-05-01 mié 07:03

Para que desde el exterior de una red puedan conectarse a dicha red hay que definir advertised.listeners. Si usamos docker, KAFKA_ADVERTISED_LISTENERS.

kafka en scala
2024-01-20 sáb 17:23 2024-01-23 mar 14:57

La librería más usada en el ecosistema de Typelevel es fs2-kafka. Aquí dejo algunos apuntes extraídos de la documentación y de algún que otro artículo revisado que dejo enlazado.

medir rendimiento con jhm
2024-01-24 mié 07:47 2024-01-24 mié 08:00

La instalación de la JVM lleva asociada varias herramientas. Una de ellas, JMH, sirve para analizar el rendimiento de la trozos de código.

circe
2024-01-25 jue 12:32 2024-01-25 jue 12:55

Para serializar/deserializar a Json instancias en Scala, más si usamos Cats, una opción bastante mayoritaria es usar la librería Circe.

configuracion en kafka
2024-01-30 mar 18:04 2024-05-03 vie 11:32

Después de haber levantado un clúster con Kafka en Docker, hay que configurar el cliente. La configuración en Kafka es bastante compleja.

kafka en rust
2024-01-30 mar 18:13 2024-02-01 jue 15:42

El uso de Kafka en Rust es muy distinto (obviamente) a su uso en Kafka en Scala, al menos si usamos fs2-kafka. Bastante bajo nivel, hay dos librerías con tirón pero usaré rust-rdkafka.

uso de tiles como servidor de mapas
2024-02-04 dom 17:24 2024-02-04 dom 17:32

El uso de tiles, si el archivo de origen a partir del que se generan no es muy grande, me parece más apropiado que usar directamente un COG o soluciones más pesadas como geoserver.

creacion de tiles
2024-02-04 dom 17:21 2024-02-04 dom 17:31

Para la creación de tiles podemos usar gdal.

tooling en rust
2024-02-06 mar 12:54 2024-04-02 mar 19:44

Para instalar podemos seguir la guía en la página oficial. A continuación un resumen.

diferencias mariadb mysql
2024-03-16 sáb 08:44 2024-03-16 sáb 08:48

Aunque MariaDB intenta ser compatible con MySql, esta compatibilidad no siempre se consigue al 100%, muchas veces de forma deliberada por diversas razones.

tipos en mysql mariadb
2024-03-26 mar 14:54 2024-03-26 mar 15:01

Algunas características peculiares de los tipos de datos en MySql/MariaDB y su uso en Rust usando la librearía Sqlx.

p5 js con clojurescript
2024-03-27 mié 10:25 2024-04-10 mié 10:14

Las funciones de p5.js se llaman con el prefijo de javascript. Esto es, aunque al declarar el ns hagamos el require

conexion a mongo
2024-03-27 mié 14:59 2024-03-27 mié 15:01

Las conexiones a Mongo pueden definirse con srv o sin él.

rust lifetime
2024-03-30 sáb 19:20 2024-04-01 lun 15:11

El lifetime en rust es básico para la gestión de las variables por parte del compilador: toda referencia tiene un tiempo de vida, que es el ámbito en que dicha referencia es válida. Si tratamos de usar una referencia cuando ya se acabó su lifetime, el compilador dará un error porque no podrá asegurar que son válidas cuando vayan a usarse.

webgl con p5 js
2024-04-02 mar 21:57 2024-04-02 mar 22:01

Cuando queremos trabajar en 3D con p5js, necesitamos usar Webgl. Para ello, hemos de definirlo al crear el canvas.

macros en clojurescript
2024-04-06 sáb 15:58 2024-04-06 sáb 17:13

Muy útiles pero más farragosas de usar que en Clojure.

rust null pointer optimization
2024-04-22 lun 22:17 2024-04-22 lun 22:24

Cuando tenemos un enum con dos variantes, una de las cuales no tiene valor y la otra sí, el compilador hace que la memoria consumida por dicho enum sea igual a la que ocuparía el tipo envuelto en la variante que sí mantiene un valor.

particiones en kafka
2024-05-07 mar 10:49 2024-05-07 mar 11:16

Cuando un consumidor de Kafka muere, las particiones han de ser reasignadas para que los mensajes no consumidos en las particiones que estaban asignadas a aquél puedan ser consumidos.

dispatch dinamico en rust y monomorfizacion
2024-05-23 jue 08:08 2024-05-23 jue 12:22

Hay una gran diferencia entre usar genéricos y recibir un trait sin especificar implementación. En el primer caso el compilador monomorfiza, en el segundo se produce dispatch dinámico en tiempo de ejecución.

bounded context
2024-05-23 jue 12:34 2024-05-23 jue 12:37

Un Bounded Context es un contexto acotado, un parte de nuestro dominio dentro del cual podemos definir nuestros modelos de forma particular para satisfacer las necesidades específicas que tengamos en esta parte de dicho dominio.

elementos de geoserver
2023-09-30 sáb 12:30 2024-01-17 mié 12:20

En Geoserver existen varios conceptos que es importante conocer para tener los mapas bien ubicacdos.

odm rest api
2023-10-05 jue 18:59 2023-10-05 jue 19:02

OpenDroneMap despliega una api para poder hacer modificaciones, consultar, etc.

odm task api
2023-10-05 jue 18:59 2023-10-05 jue 19:02

OpenDroneMap despliega una api para poder hacer modificaciones, consultar, etc.

mostrar como rgb imagenes unibanda en leaflet
2022-04-01 jue 12:33 2023-10-18 mié 17:07

Cuando calculamos un índice vegetal, obtenemos una imagen con una sola banda. La representación con matplotlib es muy sencilla, está perfectamente preparado para mostrar ese tipo de matrices. Pero Leaflet no sabe representarlas, así que hemos de obtener el RGB para enviárselo con la representación que queremos usar.

sentinel2 products
2022-04-01 jue 12:33 2024-01-17 mié 21:25

Sentinel2 ofrece dos productos, uno imágenes cuasi en bruto en la parte superior de la atmósfera (TOA) y el otro con imágenes en la parte inferior (BOA) con mayores correcciones.

toa boa
2022-04-01 jue 12:33 2023-09-30 sáb 01:27

Los valores obtenidos por el satélite están referidos TOA, y se llaman DN1, sin tener una unidad concreta hasta que no se corrigen.2

cog
2024-01-05 vie 14:16 2024-02-07 mié 14:51

Los COG son archivos Geotiff optimizados para su uso en aplicaciones web.

lambda calculus
2022-04-01 jue 12:33 2023-09-29 vie 23:49

Notas tomadas a partir de la fantástica ponencia de Gabriel Lebec sobre cálculo lambda.

introduccion a la programacion paralela
2023-09-27 mié 18:25 2023-09-29 vie 22:13

Se necesita PP cuando:

libuv
2024-04-16 mar 11:28 2024-04-16 mar 16:20

Documento a partir del estudio de esta web.

an introduction to fp through lambda calculus js
2024-04-30 mar 11:32 2024-05-19 dom 12:19

Código en JavaScript del libro An Introduction to Functional Programming Through Lambda Calculus. Posiblemente (casi seguro al 100%) solamente los ejemplos pero no los ejercicios.