Coca de Lepe

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites

Os voy a dar la receta de la coca de Lepe, un postre que está bien rico y que he aprendido a hacer para una actividad que se ha desarrollado en el colegio de mi crío (CEIP Puente Zuazo) ,  dentro del programa europeo Comenius para reforzar la dimensión europea en el campo de la educación infantil, primaria y secundaria, promoviendo la movilidad y la cooperación entre centros educativos (¿Comooooorl?) o, resumiendo, un intercambio entre docentes de países de la UE y la cosa era dar un recibimiento cálido (y sabroso) a los docentes visitantes.

Lo que se ha pretendido es ofrecer a los visitantes una representación de Andalucía a través de sus provincias, y a tales efectos, se representó por cada uno de los niveles educativos una provincia andaluza, con su gastronomía, trajes típicos, paisaje, costumbres, etc. Para ambientar las clases se han hecho murales (espectaculares), se han construido carretas y barcos de cartón, los niños se han disfrazado con vestimentas típicas o relativas a las costumbres de cada provincia… en fin, se ha hecho un gran esfuerzo para dar la mejor acogida posible a los visitantes, y se ha conseguido con creces.

Continue reading

¡¡Compártelo y disfruta!!

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites

Descubriendo socat

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites

¿Qué es socat, y para qué sirve?

Socat es una herramienta que nos permite, básicamente, trabajar como si fuéramos una telefonista de tiempos remotos, esas que vemos en algunas películas en las que mujeres se pasaban el día conectando cables en las centralitas, lo que ocurre es que, en este caso, en lugar de líneas telefónicas nos permite conectar diversos puertos y protocolos de nuestro ordenador.

Centralita telefónica, pricipios siglo XX

Socat funciona como una centralitaa de las antiguas… más o menos…

Llevo un tiempo desarrollando una pequeña aplicación para registrar las posiciones geográficas de las maniobras de pesca. Es tan simple como hacer click sobre un botón y registrar las coordenadas, el tiempo o la sonda a partir de las sentencias NMEA que te llegan desde diversos lugares (UDP, TCP o puertos serie). Esto sería sencillo, hasta cierto punto, en un barco, pues sólo tendría que haber conectado la fuente de datos a mi ordenador y leerlo. Pero en casa, sin un GPS a mano, me resulta indispensable usar un emulador de GPS. En mi caso he empleado gpsfeed+, que funciona perfectamente, pues entre otras cosas permite no sólo simular las sentencias NMEA más habituales (GGA, ZDT, RMC…) sino que, además, nos permite simular nuestras propias señales, con lo cual también es posible simular sondas, por ejemplo. El problema es que, para emular GPS por puerto serie, gpsfeed bloquea el puerto donde emite y no es posible acceder a él para leerlo. La solución me vino empleando socat para crear un puerto virtual en el que volcar la simulación GPS y luego creando otro puerto virtual enlazado con éste.

¿Cómo se puede usar socat?

Yo me he quedado de piedra viendo la cantidad de cosas que se pueden hacer. Hay páginas con montones de one-liners y ejemplos de uso de socat, como en este enlace. Pero, básicamente, lo que hacemos es conectar dos sockets (en sentido amplio) entre sí y comunicarlos, de manera que lo que se escribe en uno sale por el otro y viceversa: En mi caso, el comando es:

Donde lo que indico es que cree dos sockets tipo pty (terminales), con enlaces simbólicos (ya que los suele crear en /dev/pts/) a /dev/ttyV0 y /dev/ttyS0. Ambos flujos son de tipo raw, ordeno que haga la conversión de fin de línea donde proceda con crnl y establezco los permisos de los sockets creados a 666 (todos pueden leer y escribir) Este primer uso es sencillo, aunque, como podréis ver en los enlaces que os he pasado, los usos son infinitos. Por ejemplo, el comando que uso para “poner en red” las balanzas marinas y poder capturar los pesos desde las aplicaciones que uso para muestrear (a bordo o en el laboratorio), es el siguiente:

En este caso, conectamos /dev/ttyUSB0 (habitual cuando se usan conversores USB/serie) y creamos un socket que queda a la espera de conexiones en el puerto 23000. Si conectamos a ese socket y facilitamos los comandos apropiados, podemos interactuar a través de la red con las balanzas y solicitar pesos, tararlas, etc. Los parámetros reuseaddr y fork sirven para que no se pierda la conexión una vez cerrada desde un cliente y para permitir conexiones múltiples. Un comando como el anterior puede servir para, por ejemplo, pasar el flujo NMEA desde puertos serie a la red, igualmente.

¡Disfrutadlo! Saludos desde la Bahía de Algeciras, a bordo del B/O Ramón Margalef .

¡¡Compártelo y disfruta!!

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites

Cursor personalizado en plugin QGIS

Custom cursor showing bearing
  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites

El pasado enero desarrollé un plugin QGIS llamado Transectizer.  Afortunadamente fue catalogado y enviado a la caja (o quién sabe, al ataúd) de los plugins experimentales.

Custom cursor showing bearing
Un cursor parlanchín personalizado en QGIS, mostrando el rumbo del transecto que se está editando

Sí, digo afortunadamente porque esto me urgió a cambiar algunas de las características del plugin. Una de ellas es la capacidad del plugin de proporcionar cierto feedback  al usuario sobre una línea dibujada en el mapa, para hacer posible seleccionar interactivamente cierto parámetro que se necesita para que el plugin funcione.

En la primera versión del plugin QGIS (la segunda versión está próxima, ver más abajo), simplemente se actualiza el texto de un widget lineEdit dentro del diálogo del plugin QGIS. Hacer esto es una tarea relativamente simple, si ya has buceado entre la algo dispersa documentación disponible sobre desarrollo de plugins QGIS. EL primer lugar para empezar es, desde luego, el  repositorio de plugins QGIS donde existe una creciente documentación sobre programación de plugins en QGIS. Pero también existen sitios, como el blog de Anita Graser. donde se puede encontrar documentacion muy útil y, lo que es mejor, ejemplos. Y puedes escrutar el código fuente de otros plugins para ver cómo otros han resuelto el mismo o parecidos problemas a los que te enfrentas.

Pero en la siguiente versión, que será lanzada en un par de semanas si  Mr. Pareto me lo permite, deseo tener esa información en el cursor del ratón, de manera que el plugin sea más agradable y fácil de usar. Y para conseguirlo, debes ser capaz de cambiar el puntero del ratón.

Primer paso. Cambiar la forma del puntero del ratón de tu plugin QGIS

Atención: Este artículo ha sido escrito por un program (ni siquiera llego a programador) amateur y autodidacta. Por favor, no seas demasiado duro conmigo, sobre todo si la terminología relacionada con la programación no es la apropiada. Gracias.

Para empezar, todo esto tiene sentido sólo si tu plugin QGIS necesita interactuar con el mapa. En este caso, tu plugin debe tener activa una QgsMapTool para realizar interacciones con el mapa. Esto está  muy bien explicado en  el pyQGIS cookbook, y, para simplificar, lo que has de hacer es crear una subclase a partir de QgsMapTool o una de sus clases derivadas, dependiendo de la utilidad que quieras darle( una herramienta zoom, una para identificar o para emitir puntos, entre otras) e implementar el código para el cambio de cursor dentro de la nueva clase. Normalmente, querrás cambiar el cursor en respuesta a una interacción con el mapa, de manera que la manera más natural de lograrlo será reimplementando los métódos de clase relacionados con los eventos de ratón (canvasMoveEvent, canvasClickEvent, etc.):

Ahora tienes que efectuar el cambio de cursor. Para hacerlo, primero echa un vistazo a la documentación de PyQt4 acerca de QCursor. Ahora, has de tener en cuenta que el cursor, en sí mismo, pertenece al objeto mapCanvas que le habrás pasado a tu clase myMapTool al crearlo. De manera que simplemente tienes que obtener una referencia al mismo y cambiar el cursor a través del método setCursor de la clase qgsMapCanvas, reemplazando así el cursor por el que tú quieras. En el siguiente ejemplo, vamos a establecer un mapa de bits personalizado para el cursor cuando el usuario haga click sobre el mapa, y volveremos al cursor anterior cuando libere el botón:

 Y ahora… cursores parlanchines en un plugin QGIS

Bien, cambiar el cursor es bastante fácil y también lo es hacerlo dicharachero o, mejor dicho, informativo. En el caso del plugin Transectizer, lo que quiero es mostrar el rumbo de la línea que se está editando en el cursor, o a lo mejor lo que quieres es mostrar una distancia, las coordenadas del cursor o lo que sea pero, en cualquier caso, en tiempo real.

De manera que ¿qué tenemos que hacer? Bien, es bastante simple. Tenemos que implementar el método canvasMoveEvent en nuestra mapTool, haciendo que el cursor cambie cada vez que el método es llamado. Y lo que hacemos es pintar sobre el pixmap del cursor la información que queremos mostrar.

Para lograrlo, tenemos que crear un QPainter en nuestro pixmap y proceder de la misma manera que en el método canvasPressEvent: primero creamos el QCursor y luego asignamos el cursor a nuestro mapCanvas:

Bueno… eso es todo. Puedes usarlo para mejorar tu plugin en buena medida mediante la interacción con el mapa, dando simple pero atractivo feedback a sus usuarios.

Tengo pensado comprobar si cursores de grandes dimensiones pueden ser usados en QGIS, para mostrar el juego completo de coordenadas de un punto, por ejemplo. O, si quieres una idea rápida, para mejorar el plugin ValueTool de manera que muestre el valor de capa en el propio cursor y no en un widget.

¡¡Espero que te sea de utilidad!! Continue reading

¡¡Compártelo y disfruta!!

  • Google Plus
  • Facebook
  • Twitter
  • Email
  • RSS
  • Add to favorites