jump to navigation

M-010 22.4.17

Posted by Migsar in Desarrollo Web, Ideas, Vida.
Tags: , , , , , , ,
add a comment

Intenté hacer mis compras por internet y, no puedo explicar exactamente por qué, pero no funciona. Cada vez más gente se está cambiando a servicios en línea, y yo también, hay muchas cosas que hago en línea, desde la comunicación con mi círculo alguna vez cercano, por Facebook, Skype, Whatsapp o Telegram, hasta la banca y el pago de servicios, sin embargo, las compras cotidianas aún no llegan a ese punto en el que prefiera hacerlas en línea. Estuve pensando un poco al respecto y es lo que quiero exponer a continuación.

¿Por qué no me gusta? Creo que las compras en línea en su estado actual satisfacen a personas de hábitos muy fuertes, a personas rutinarias, no digo que sea malo, de hecho, me gustaría serlo, pero no lo soy. Si uno conoce la marca de cereal que desea, las galletas, las frutas y verduras, es muy fácil hacerlo en línea, los sitios actuales son perfectos para eso, el cuadro de búsqueda tiene una función de autocompletado que hace que uno encuentre rápidamente un producto en específico, incluso se tiene una función de categorización, muy vinculada al autocompletado, que realiza ciertas sugerencias. Lamentablemente el alcance de esto es muy limitado. Uno empieza a escribir jugos y le recomienda todo lo relacionado con jugos, suena bien, lo sé, pero cuando uno va al lugar uno ve bebidas en general y a veces decide comprar una cosa que no es necesariamente un jugo. Mi punto es que todavía no se ha aplicado la tecnología para substituir el vagar sin rumbo dentro de un espacio determinado, es decir, se tiene un propósito, pero mucha libertad a la hora de cumplirlo. Creo que la tecnología existe, pero se necesita dedicarle un poco de tiempo a estructurarlo de otro modo, romper la linearidad de los sistemas, aprovechar más los aspectos de visualización, utilizar más la retroalimentación.

El segundo punto clave es la entrega y/o distribución, también creo que se dispone de la tecnología pero no se ha decidido atacar el problema de frente. El elegir el horario cuesta, en parte, pienso que es porque al proveedor del servicio le cuesta porque ha trabajado muy poco en optimizar sus procesos en este aspecto. Algunos ofrecen un servicio de entrega gratuito a partir de cierta cantidad consumida, otros ofrecen un costo económico para un rango de horarios y un costo premium para una entrega inmediata. no estoy seguro de cuál sea el mejor modelo, pero sé que tiene que mejorar, uno pasa mucho tiempo en su casa, pero parece que la Ley de Murphy aplica para estos casos, todo lo que tiene que salir mal sale mal, hay alguna emergencia, uno se mete a bañar o al baño, decide ir por un refresco a la tiendita de la esquina, para la que aplican los mismos problemas mencionados en diferente escala, incluso puede que uno tenga el radio, la tele o audifonos y no sé da cuenta de cuando la persona de la entrega toca el timbre.

Al final, creo que existe un gran campo de oportunidad en este nicho y falta mucho trabajo por hacer. En muchos foros y conferencia se habla de que el futuro nos alcanzo, creo que es cierto, respecto al desarrollo tecnológico, pero sucede totalmente lo contrario a la hora de aplicar el desarrollo tecnológico a resolver problemas cotidianos, deberíamos de ser más concientes que el hecho de que algo se perciba como simple implica siempre un inmenso esfuerzo detrás, esto aplica tanto para los deportistas que hacen parecer que las proezas son naturales como para los ingenieros de Google o Apple que hacen que un niño pequeño parezca genio al utilizar sus productos, sí, en este momento me acuerdo del meme que circula en las redes sociales que dice algo similar a “si su hijo logra utilizar el iPhone a los tres años no es que su hijo sea genio sino que los ingenieros de Apple son genios”, creo que no son sólo las madres las que no lo entienden.

Anuncios

M-001 06.9.16

Posted by Migsar in Computación, Uncategorized, Vida.
Tags: , ,
add a comment

Pues básicamente me cansé de ponerles nombres y creo que como siempre ando con el mismo humor, se empezarían a repetir, así, que siguiendo un par de grandes ejemplos, los empezaremos a llamar de un modo sencillo y fácil de identificar.

Han sido tiempos difíciles, siguen siendo. He perdido la costumbre de escribir y siento que me falla un poco el poder expresar las ideas, mis pensamientos se desvanecen cuando intento ponerlos en palabras, o dibujarlos, o de cualquier modo sacarlos de mi cabeza. Creo que los motivos, esta vez, los quiero mantener privados.

Por otro lado, quiero empezar a poner mis ideas por aquí con la esperanza de que alguien las retome o las realice completamente, ya que, por lo visto, nunca lograré organizarme. Sobre Qarmazi Labs, que ha estado un poco abandonado, tengo un par de ideas en la cabeza. La primera es hacer unos boxes de vagrant a la medida para las distintas herramientas, en particular QGIS y gvSig, que tengan todas las bibliotecas y plugins listos para utilizarse, creo que esto hace mucha falta porque incluso en distribuciones sencillas como Ubuntu QGIS no aparece en el repositorio de inicio y desconfigura las actualizaciones. Además de que permitiría unificar cursos y tutoriales.

Siguiendo este camino, también está en mis planes hacer un conjunto interesante de datos limpios para empezar con un tutorial sobre data-mining y análisis estadístico. Por cierto, si alguien desea ayudar con alguno de estos proyectos es más que bienvenida la ayuda, son iniciativas de código libre, pero sí requieren bastante esfuerzo para echarlas a andar.

Quiero un nuevo framework 30.6.16

Posted by Migsar in Computación, Ideas.
Tags: , ,
add a comment

Decidí que Sails js no era lo que tenía en mente, pero empecé a usar Koa y se nota la diferencia, casi nada está hecho aunque existen todos los elementos para hacerlo. Estaba pensando en un framework dirigido a eventos, no en como se programa en él sino en la estructura de datos que se utiliza, algo parecido a los componentes en el front end, que incluyen su propio MVC a escala, en este caso cada vista o serie de vistas es un componente que se conecta a los anteriores. Quizá si se quiere ver como los slots que tiene Qt, el núcleo tiene slots en los que se conectan los distintos componentes. La idea es que no tenga archivos distintos con rutas y vistas ligadas vagamente a mano, la vista tiene su ruta y su tipo de respuesta asociada, sé que es algo muy vago pero me gustaría profundizar un poco en eso, ya que me parece horrible que las rutas no se manejen con orientación alguna a objetos.

Nuevos proyectos: GIS 17.11.15

Posted by Migsar in Computación, GIS.
Tags: , , ,
add a comment

Han sido días difíciles, he estado muy ocupado con nuevos proyectos y no he tenido tiempo de avanzar con esos pequeños proyectos de vida que tengo, aquellos que nunca terminan. Estoy desarrollando un visualizador de datos espaciales y ha sido una experiencia muy enriquecedora, ya van tres meses de trabajo y he aprendido mucho más de lo que habría aprendido simplemente estudiando. Como se lee en el post anterior, no ha sido una experiencia totalmente positiva, sin embargo, creo incluso de las cosas malas he aprendido bastante como para no volver a caer en estos errores en el futuro.

En el proyecto usamos Geoserver, postGIS y OpenLayers, pero creo que fueron decisiones apresuradas. Siempre pienso que una máquina muy rápida es, en la mayoría de los casos, un desperdicio, pero intenté compilar Mapnik en esta computadora (que me sirve muy bien para todas las tareas cotidianas pero tiene procesador de 32 bits, apenas 3Gb de RAM y una tarjeta de video bastante mediocre) y no lo logré. Supongo que habrá trucos de configuración y memoria, la verdad es que no soy nada experto en el flujo y las herramientas para compilación, pero me dolió mucho no lograrlo. Creo que ha llegado el tiempo de jubilar a esta computadora y relegarla a tareas de administración de redes o prototipado de hardware. Cada vez me han gustado más los sistemas de información geográfica y me he metido más en ellos. Por el trabajo he abandonado un poco los programas de escritorio como QGIS para dedicarme en la parte web y espero retomarlo pronto porque había hecho algunos progresos respecto a escribir un plugin.

Hay un par de ideas sobre las que estoy trabajando y que me gustaría que vieran la luz muy pronto; primero, un curso sobre QGIS con un enfoque totalmente práctico, todavía le falta mucho desarrollo pero ya está el repositorio y poco a poco ha ido creciendo el material; segundo, la integración de tercera dimensión en QGIS, primero como elevaciones en un mapa del terreno, después como algo más inmersivo, respecto ha eso ya tengo un par de ideas sobre usar servidores de mapas en ambientes tridimensionales y en interiores, pero tampoco se han materializado; finalmente, he estado trabajando con una tarjeta de TI con procesador ARM Cortex M4 para mezclar un poquito la parte de software y hardware.

Ayer estuve peleando con un ejemplo de Three.js para una plática que daré en un grupo de usuarios de Angular JS y me encontré con la generación fractal de terreno, me parece un concepto muy interesante y estoy por crear un repositorio en Github para poner algunos documentos al respecto. Hay un wiki interesante en Google Code y lo tomaré como punto de partida, Fractal Terrain Generation, en él se explican algunas técnicas básicas para empezar en este campo. Por el momento estoy con el Algoritmo de Diamante-Cuadro.

La calidad de los datos 07.8.15

Posted by Migsar in Computación, GIS.
Tags: , , , , , , , , , ,
add a comment

Lo más importante a la hora de obtener información mediante el procesamiento de datos, sean geoespaciales o no, es la calidad de los datos. Si los datos no sirven no es posible extraer información de ellos, para saber si sirven o no, existen algunos criterios, entre los principales se encuentran los siguientes. Es importante entender que los criterios pueden ser cualitativos o cuantitativos, a mi parecer es más sencillo tratar con criterios cuantitativos pues se trata de una escala numérica en base a una regla establecida; para los criterios cualitativos es necesario definir la escala en base a experiencia, en ambos casos se puede ser más o menos subjetivo y también tener escalas erróneas. Por ejemplo, si queremos saber si la llanta de un coche sirve podemos establecer el criterio de la presión del aire, medida en kilogramos fuerza por centímetro cuadrado o libras por pulgada cuadrada, que sería un criterio cuantitativo, con un rango de utilidad basado en el dato, por otro lado, podríamos utilizar un criterio visual sobre el desgaste, en donde se diga si está nueva, tiene poco uso, mucho uso o está inservible, esta vez se trata de un criterio cualitativo. Ambos criterios son necesarios y muy útiles, sin embargo, el juzgar el uso dependerá mucho de la experiencia del encargado y de su conocimiento sobre distintos grados de uso, apariencia y desempeño, es decir, requiere una mayor capacitación. Los cinco primeros criterios mostrados son cuantitativos y los otros tres cualitativos.

Exactitud posicional

Se refiere a la precisión del componente espacial de una base de datos. Las medidas de la exactitud posicional dependen de la dimensionalidad. El método está muy bien definido para los puntos, pero no es tan aceptado para las líneas y los polígonos. Para los puntos el error se define como la diferencia (normalmente mediante distancia euclideana) entre la unicación codificada y la definida en la especificación. El error puede ser medido en cada uno de los ejes combinados o en combinación de todos. La medida más usada es el error horizontal (tanto x como y) y el error vertical (z). Existen varios métodos, como el error promedio o el error cuadrático medio (RMSE) . Se llama sesgo a un error sistemático, es decir, presente en todos los datos.

Exactitud temática

Los métodos para medir la exactitud temática, también llamada exactitud de atributos, varían según la escala de medición. Para los atributos cuantitativos los métodos son similares a los utilizados para la exactitud posicional de puntos, ya que los atributos cuantitativos pueden verse como superficies estadísticas en las que la exactitud se percibe de un modo similar a la elevación. Para datos categorizados la mayoría del trabajo se ha hecho en investigaciones de calidad de datos en percepción remota. Es importante no confundir la resolución con la presición. La resolución baja puede ser adecuada para ciertos trabajos pero la presición baja no lo es.

Exactitud temporal

La exactitud temporal no es la más tratada en la literatura quizá porque el tiempo no es considerado explicitamente en los modelos geoespaciales convencionales. El término se refiere a la concordancia entre las coordenadas codificadas y las ‘actuales’ refiriéndose a las del momento al que se compara el dato. A veces se confunde con actualidad, sin embargo, la actualidad es una medida de exactitud temporal particular a una aplicación. Un valor es actual si es correcto a pesar de cualquier posible cambio temporal de su valor. Esto significa que la actualidad se refiere al grado de relevancia respecto al presente de una base de datos. Para que la actualidad y la exactitud temporal sean iguales se necesita que una base de datos temporalmente exacta este puesta al día, es decir, con datos respecto al tiempo presente. Evidentemente una base de datos puede tener gran exactitud temporal sin estar referida al tiempo presente, de hecho, los registros históricos dependen de la exactitud temporal de sus datos. Para evaluarla es necesario tener un marco temporal definido, algo que ha costado mucho trabajo en la práctica.

Completitud

Completitud se refiere a la relación entre los objetos de una base de datos y el universo abstracto de los mismos, es decir, la posibilidad de variación en los valores. Los criterios de selección, las definiciones y otras reglas de mapeo se utilizan para determinar la completitud de una base de datos. Se necesita una descripción precisa del universo de datos para evaluar la relación entre este y los datos. El universo puede describirse en términos del grado de abstracción deseado y de las generalizaciones asumidas. Así, existen dos tipos de completitud, la de los datos, que significa que no existen omisiones, es decir, contienen todos los datos especificados; y la del modelo, que se refiere a la concordancia de la definición del modelo con el universo abstracto requerido para la aplicación en particular. La completitud o falta de la misma se puede definir respecto al tiempo, al espacio o al tema.

Consistencia lógica

Se refiere a que no haya contradicciones aparentes en una base de datos. Para datos geoespaciales el término se refiere usualmente a que los datos respeten ciertas reglas topológicas, que varian de acuerdo a la dimensionalidad de los datos. Quitar las inconsistencias topológicas se considera un requisito previo al procesamiento en sistemas de información geográfica. La consistencia topológica es sólo un aspecto de la consistencia lógica, en el dominio espacial, sin embargo, también debe de existir consistencia lógica para el resto de los atributos, en estos casos el método para verificarla depende del atributo a considerar. El identificar inconsistencias no siempre significa que puedan ser resueltas y en algunos casos, tampoco significa identificar en que atributo se encuentra el error, se identifica simplemente el conjunto en el que se presenta la inconsistencia. Por otro lado, la falta de inconsistencias lógicas no tiene nada que ver con la exactitud de los datos.

Objetivo

Se refiere al propósito de los datos. Tanto de su obtención como de su representación en un sistema de información geográfica o una base de datos. La calidad misma de los datos está fuertemente ligada a este concepto, pues las características de aceptaptación de los datos dependen de para que piensen usarse. Siendo el modelo una abstracción del mundo real el objetivo determina que cualidades deben observarse al realizar el modelado.

Uso

El uso está muy relacionado al objetivo, sin embargo, existe una diferencia fundamental, el uso se refiere a la materialización del objetivo. Cuando se diseña una base de datos espacial se contempla un uso deseado, que puede o no corresponder con el uso real que se hará. Existe una disparidad generada por esta dicotomía entre la utilidad prevista y la obtenida siempre que el uso sea diferente del objetivo, que es algo muy usual en los campos tecnológicos y científicos.

Linaje

Se refiere a las fuertes de los datos, los métodos de obtención de los mismos y las transformaciones aplicadas para representarlos en una base de datos. Incluye información temporal y debe de ser lo suficientemente preciso para identificar las fuentes de objetos individuales. Si una base de datos se obtuvo de una funete distinta al levantamiento o captura de datos, o de varias fuentes diferentes, se de considerar incluir información sobre el linaje en un atributo u objeto de la base de datos.

Categorización en QGIS 07.8.15

Posted by Migsar in Computación, GIS, Tecnología.
Tags: , , , , , , , ,
add a comment

Objetivos:

  1. Categorizar una capa vectorial para convertirla en raster
  2. Realizar comparaciones en la calculadora raster

Para esto hemos seleccionado tres capas vectoriales:

  • Polígonos de localidades urbanas (INEGI → Geografía → Marco geoestadístico → Polígonos de localidades urbanas).
  • Isotermas medias anuales (Conabio → Portal de geoinformación → Climatología → Temperatura → Isotermas medias anuales)
  • Precipitación media anual (Conabio → Portal de geoinformación → Climatología → Precipitación → Precipitación media anual)

La idea es poder responder preguntas como las siguientes:

  • ¿Existe una ciudad en la republica en que llueva demasiado y sea fría?
  • ¿En qué ciudad podría vivir si no me gusta la lluvia y me gusta el calor?
  • ¿Cuál sería una buena ciudad para un invernadero, con clima cálido y lluvioso todo el año?
  • ¿Existe alguna ciudad templada en Durango?

Por supuesto, hay cierto grado de subjetividad en esto, para unos caluroso puede ser frío para otros, igual sucede con la humedad, es por eso que es importante saber categorizar.

Lo primero es reproyectar las capas, el INEGI usa un sistema raro ITRF92, seguramente habrá razones de peso para haberlo escogido pero si el GPS usa WGS84, prefiero este último. Lo mejor es crear una nueva carpeta con el nombre del sistema y guardar ahí nuestras capas reproyectadas, de paso podemos usar nombres menos crípticos.

Empecemos con las localidades urbanas, podríamos hacer simplemente una capa que dijera si es localidad urbana o no, pero es mejor ponerla por estados. La tarea es bastante sencilla, la tabla de atributos tiene un atributo llamado CVE_ENT, es decir, clave de entidad, sin embargo, necesitamos que sea entero, así que creamos un nuevo atributo llamado “estado”, con valor numérico.

  1. Abrir tabla de atributos de localidades urbanas.
  2. Activar el modo de edición (ícono de lápiz a la izquierda) y abrir calculadora de campos (ícono de abaco a la derecha).
  3. Escribir en el espacio para el valor to_int(“CVE_ENT”).

tut001

tut002

to_int() es una función que trabaja sobre el campo contenido entre paréntesis y convierte su valor en entero. Ahora necesitamos convertirlo a imagen, para esto usamos la función rasterize en el menú de raster → conversion y en el campo de atributo de campo usamos “estado”. No hay que olvidar guardar la tabla de atributos y salir del modo de edición antes de hacer esto.

Puede que se vea todo obscuro, eso es a causa del estilo, es necesario usar SingleBand Pseudocolor y crear 33 valores, el del 0 ponerlo transparente, que es el espacio vacío, podemos si sabemos que trabajaremos mucho con imágenes del INEGI cambiar los nombres de las clases y guardar el estilo. Al convertir nuestros vectores en imágenes perdimos la información asociada a los polígonos pero ganamos la facilidad de hacer ciertas comparaciones.

tut003

Ya tenemos nuestra capa raster con las localidades urbanas por estado, ahora necesitamos algo similar on las otras dos capas. Como se mencionó anteriormente, frío, templado y caluroso son un poco relativos y es en esa categorización en la que radica la fuerza de la calculadora de campos. Empecemos con la temperatura, en Conabio aparecen las isotermas en categorías desde -2 hasta más de 28 grados Celsius, los intervalos no son regulares, algunos son de dos, otros de tres y algunos bastante ambiguos, como el de menor a -2 grados y el de mayor a 28 grados. Para mí el frío empieza abajo de los 14 grados, incluso podría ser 12, pero para fines del tutorial queda en 14 y el calor empieza en 24, es decir, tenemos sólo tres categorías, frío, templado y calor, dejaremos en una cuarta las que mencioné como ambiguas. Esto se hace también con la calculadora de campos pero ahora utilizaremos la estructura CASE. Al abrir las tablas de atributos notamos que ya tienen cierta clasificación, incluso uno de los atributos puede convertirse a número de modo similar al anterior, sin embargo, se trata de proponer nuestro criterio de temperaturas.

  1. Abrir tabla de atributos de localidades urbanas.
  2. Activar el modo de edición (ícono de lápiz a la izquierda) y abrir calculadora de campos (ícono de abaco a la derecha).
  3. Escribir en el espacio para el valor:

CASE
WHEN ( "TA_RANGO" = 'DE -2 A 5' OR "TA_RANGO" = 'DE 5 A 6' OR "TA_RANGO" = 'DE 6 A 8' OR "TA_RANGO" = 'DE 8 A 10' OR "TA_RANGO" = 'DE 10 A 12' OR "TA_RANGO" = 'DE 12 A 14' ) THEN 1
WHEN ( "TA_RANGO" = 'DE 14 A 16' OR "TA_RANGO" = 'DE 16 A 18' OR "TA_RANGO" = 'DE 18 A 20' OR "TA_RANGO" = 'DE 20 A 22' OR "TA_RANGO" = 'DE 22 A 24') THEN 2
WHEN ( "TA_RANGO" = 'DE 24 A 26' OR "TA_RANGO" = 'DE 26 A 28') THEN 3
ELSE 0
END

tut004

Puede parecer demasiado complejo, sin embargo, es bastante fácil de escribir con la ayuda de la calculadora de campos porque al dar doble click en la estructura CASE ELSE la copia en la pantalla y para la variable al dar click aparece en la ventana de la extrema derecha la opción de elegir los valores únicos, que también al dar doble click copia automáticamente al editor. Además, en tiempo y procesamiento la demanda a la computadora es mucho menor que con otras operaciones.

Para la lluvia haremos exactamente lo mismo, como tengo menos idea de que cantidad sea correcta, pero me gustan los días lluviosos de vez en cuando diremos que de 0 a 400mm es seco, de 400 a 1500 es agradable y más de 1200 es locura. El punto de aquí no es establecer un criterio científico sino saber categorizar. Podemos ver que para la precipitación existe el valor Cov_id que corresponde a los rangos, en este caso usaremos ese para agruparlos, usaremos una notación un poco diferente, pues está permitido poner más de una vez el mismo resultado en el when y a algunos les parecerá más claro así:

CASE
WHEN "COV_ID" IS 1 THEN 1
WHEN "COV_ID" IS 2 THEN 1
WHEN "COV_ID" IS 3 THEN 2
WHEN "COV_ID" IS 4 THEN 2
WHEN "COV_ID" IS 5 THEN 2
WHEN "COV_ID" IS 6 THEN 2
ELSE 3
END

Aquí podemos ver varias cosas, la primera es que si quisieramos la misma categoría podríamos hacer el raster directamente con “COV_ID” pero la técnica es útil incluso para reagrupar datos que ya están categorizados, la segunda, es que este método es mucho más legible que el anterior y, finalmente, que si no hay posibilidades de un dato fuera del rango se puede usar else para evitar comparaciones, en este caso no puede llover menos de 0mm y todo lo que sea mayor que “COV_ID” = 6 es locura, no hace falta escribirlo.

Al convertir a raster decidí utilizar resolución de 6000 pixels cuadrados, es necesario entender que el crecimiento del tamaño es cuadrático, es decir, para 3000 pixels el tamaño de la imagen sería de 3000 x 3000 x 1 byte = 9000000 bytes = 9Mb, para 6000 pixels se convierte en 6000 x 6000 x 1 byte = 36000000 bytes = 36Mb, así, duplicar el lado hace que el tamaño crezca cuatro veces. Por supuesto esto es el peso de una imagen sin compresión con 1 sóla banda de color de 1 byte.

Para saber el nombre de las ciudades tendría que tenerse activada la capa vectorial y verlo, pero para responder las preguntas se usa la calculadora raster, creando una nueva capa de máscara. La calculadora raster funciona con operaciones lógicas.

tut008tut007tut009

¿Existe una ciudad en la republica en que llueva demasiado y sea fría?

Localidad > 0
Precipitación = Diluvio (3)
Temperatura = Frío(1)

("localidadesUrbanasPorEstado@1" > 0) AND ("isotermas@1" = 1) AND ("precipitacion@1"=3)

tut010

El mapa parece obscuro pero al cambiar el estilo para que el valor 0 sea negro y el 1 blanco se ven un par de puntitos:
Tenejapa, en Chiapas
Tetelzingo, Acajete, Tlacolulan, Huayacocotla en Veracruz

Los Reyes, Santa Ana Tzacuala, Zacualtipán, Tianguistengo y Xochicoatlán en Hidalgo
Honey en Puebla

¿En qué ciudad podría vivir si no me gusta la lluvia y me gusta el calor?

Localidad > 0
Precipitación = Seco (1)
Temperatura = Caliente(3)

("localidadesUrbanasPorEstado@1" > 0) AND ("isotermas@1" = 3) AND ("precipitacion@1"=1)

Salieron menos de las que uno pensaría, pero un poco más que en el anterior, la más grande es Los Mochis en Sinaloa, le sigue Ciudad Obregon en Sonora y, aunque parezca extraño también hay en el sur, Progreso y Chicxulub en Yucatán.

¿Cuál sería una buena ciudad para un invernadero, con clima cálido y lluvioso todo el año?

Localidad > 0
Precipitación = Diluvio (3)
Temperatura = Caliente(3)

("localidadesUrbanasPorEstado@1" > 0) AND ("isotermas@1" = 3) AND ("precipitacion@1"=3)

Con lluvia y calurosas hay muchas en el sur de la república, entre las más grandes están Veracruz, Coatzacoalcos, Minatitlán y Villahermosa, San Juan Bautista Tuxtepec, Playa del Carmen y Cozumel.

¿Existen ciudades templadas o frías en Durango?

Localidad = Durango(10)
Temperatura = Fría(1)
Temperatura = Templada(2)

Aquí se utiliza un truco, un poco largo, pero necesario a falta de condicionales:

(("localidadesUrbanasPorEstado@1" = 10) AND ("isotermas@1" = 1))*1 + (("localidadesUrbanasPorEstado@1" = 10) AND ("isotermas@1" = 2))*2

Existen dos ciudades frías en Durango, El Salto y La Ciudad (ambas se ven muy pequeñas pero el INEGI las considera ciudades, también pueden ser cabeceras municipales) y varias templadas, entre ellas la capital, Victoria de Durango, y Gomez Palacio/Lerdo.
Las operaciones binarias generan valores 0 para falso y 1 para verdadero, al hacer la suma funciona como un OR lógico. Además para que tome valores diferentes de 0 se multiplican los resultados verdaderos de la operación binaria por el valor que se desea que tome, que puede ser una variable.

Una breve introducción a la programación de QGIS 17.7.15

Posted by Migsar in Computación, GIS, Tecnología.
Tags: , , , , , , , , , , ,
add a comment

A continuación explico de manera breve los aspectos básicos de programación de QGIS. Es un error creer que se tiene que entender todo a la primera. La mayoría de los conceptos se verán a profundidad gradualmente al ser necesarios para el desarrollo de plugins, sin embargo, es bueno tener un panorama general que sirva como marco de referencia para los nuevos conocimientos.

QGIS

QGIS es un programa pensado para computadoras de escritorio que permite utilizar Sistemas de Información Geográfica, desde la visualización hasta la creación, edición y el posterior procesamiento o análisis. Es compatible con los formatos de otros programas comerciales y puede trabajar tanto con datos raster (imágenes) como con datos vectoriales.

C++

Es un lenguaje compilado, es el lenguaje en el que QGIS está escrito. Por ser compilado se necesita una versión diferente del programa o plugin para distintos tipos de computadora. Además, es mucho menos amigable que Python para los programadores principiantes. La interfaz gráfica de QGIS se hizo en C++ mediante una librería llamada Qt que se distribuye de manera libre, esta librería tiene una serie de componentes visuales que permiten crear programas, éstos van desde las distintas ventanas y cuadros de diálogo hasta las áreas para imágenes y botones. Es posible agregar plugins a QGIS escritos en C++, lamentablemente no se trata del lenguaje de programación más popular porque tiene una forma de escribir estricta y a veces complicada. Afortunadamente existe una capa en Python que permite utilizar los componentes de la interfaz gráfica sin programar en C++, ocultando las funciones originales con funciones de Python.

Python

Es un lenguaje de programación interpretado, es decir, el programa que lo interpreta (entiende) es diferente para cada plataforma pero los programas escritos en Python son exactamente iguales en todas las computadoras, lo que es una ventaja al escribir y compartir código. Es el lenguaje preferido en el ámbito científico porque es bastante flexible, con una estructura amigable y con manejo incluido de números complejos. QGIS tiene una interfaz en Python desde la que es posible controlar prácticamente todos los aspectos de la aplicación. Lleva tiempo conocer la estructura de objetos que la compone (en la próxima sección se habla al respecto) y pienso que esto es una de las barreras más comunes que enfrentan los usuarios que quieren empezar a utilizar la parte programática de QGIS, pues incluso es difícil empezar a buscar la información en la documentación referente a los distintos componentes.

Programación Orientada a Objetos

Existen libros en donde está muy bien explicada la programación orientada a objetos (recomendar uno) pero se tratará aquí de manera muy superficial para ubicarnos en el contexto necesario para empezar a programar plugins de QGIS. Generalmente se aborda el problema programando con clases y objetos reales y simulando su comportamiento y características, no obstante, creo que así es difícil percibir como se relaciona con un programa de cómputo. Es necesario empezar con ese ejemplo, pero no dejarlo ahí sino aterrizarlo en nuestra materia.

Primero los conceptos, existen tres que me parecen indispensables: objeto, propiedad y método. Existen otros conceptos que son básicos en un tratamiento computacional riguroso, pero que no mencionaremos aquí hasta que sean necesarios. La programación se trata de abstraer la realidad y general modelos, que consideran sólo las características que nos interesan.

Objeto

Si se considera de manera abstracta (indefinida, en el sentido del artículo indefinido en el lenguaje) se llama clase. Las clases representan componentes u objetos, por ejemplo, manzanas, patos, coches, plumas, etc. Estos objetos en el mundo real tienen ciertas características, como el sabor, color o funcionamiento. Es necesario incluirlas en nuestro modelo, aunque hay que tener cuidado de no incluir las características que complicarían innecesariamente el análisis. Las características se dividen en propiedades y métodos, la división es muy tenue y suele depender de los criterios del programador aunque existen ciertos parámetros considerados universales en la decisión.

Propiedad

Se refiere a características pasivas e inmutables por sí mismas. Por ejemplo, el color o el sabor de una manzana, el color o el tamaño de un pato o la velocidad máxima de un coche. En general se trata de datos descriptivos del objeto.

Método

Se refiere a posibilidades de acción o cambio, es decir, características activas. La manzana no tiene ninguna característica de este tipo a diferencia del pato, que puede hacer ruido, caminar, volar o nadar, si es hembra puede poner huevos, etc. El coche puede arrancar, detenerse, acelerar, frenar, abrir las puertas, la cajuela, cambiar de velocidad, etc. En general se trata de funciones, es decir, modificadores de los datos del objeto.

Algunas reflexiones sobre los objetos

Las definiciones anteriores quedarán claras con el uso y es importante saber que en programación siempre hay más de una forma de hacer las cosas, no existen formas incorrectas en términos generales sino que dependiendo del contexto hay formas que ofrecen ventajas sobre otras. Lo que para una persona puede parecer una función para otra puede parecer un dato, por ejemplo, con el pato, uno puede pensar que tiene tres métodos de desplazamiento: caminar, nadar y volar; alguien más puede decir que solo existe un método, desplazar y que el tipo de desplazamiento es una propiedad que puede tomar los valores caminar, nadar o volar. Las dos formas son válidas y la correcta dependerá del procesamiento que se necesite después, quizá solo es importante saber el estudio de las rutas migratorias y no importa el tipo de desplazamiento sino el origen y destino, por lo que resulta complicado escribir tres métodos y es necesario saber la posición espacial del pato, sin embargo, puede ser que se esté estudiando el metabolismo del pato y su consumo calórico diario, en este caso se requeriría una propiedad adicional que se refiera a la energía del pato pero además, no importa ni el origen ni el destino sino el tiempo que el pato pasa desplazándose y el consumo energético relacionado a cada forma por lo que tres métodos separados se vuelven la mejor alternativa. Pueden existir objetos sin propiedades ni métodos pero su utilidad es bastante limitada (o nula).

Ahora daremos un salto a lo abstracto, objetos propiedades y métodos en los programas de computadora. En esencia se trata de lo mismo, la ventana del programa es nuestro objeto padre (o madre) y tiene propiedades, como el tamaño horizontal y el tamaño vertical y métodos, como crear, cerrar, minimizar o detectar si el usuario hace click o mueve el mouse sobre ella. Las cosas se complican un poco si tenemos muchos botones como sucede en cualquier programa moderno, además de la pantalla de captura o visualización y los menús desplegables. Una forma de abordar el problema sería crear muchas funciones para cada uno de los elementos, pero rápidamente nos cansaremos de repetir código y veremos que surgen muchas generalidades, todos los botones se comportan de un modo similar, pueden parecer ligeramente presionados cuando el mouse está sobre ellos y completamente presionados cuando se les hace click, además, se trata de objetos dentro del objeto principal. Lo más fácil es decir que el objeto ventana contiene otros objetos más pequeños, cada uno con métodos y propiedades propios, una forma de representar esto es mediante una estructura de árbol invertida en la que la ventana principal está hasta arriba y los objetos descienden jerárquicamente, pues así como los botones son objetos también lo son los menús y las barras de herramientas; los primeros contienen opciones que pueden ser seleccionadas y las segundas contienen íconos que representan acciones.

APIs

Se conoce como API al conjunto de objetos disponibles para interactuar con una aplicación o biblioteca, el término significa Application Programming Interface, es decir, Interfaz de Programación de la Aplicación. El API es un término muy importante y con el que hay que familiarizarse pues es lo que se busca siempre que se quiere empezar a programar con alguna aplicación o librería en particular. En el caso de QGIS nos tendremos que familiarizar con dos APIs, uno para la parte visual y otro para el procesamiento de datos correspondiente a los sistemas de información geográfica.

Qt

Se mencionó anteriormente que Qt es una biblioteca de componentes (es común aunque semánticamente incorrecto llamar librería a la biblioteca por la similitud con library en inglés, yo uso intercambiablemente los dos términos y no me parece grave hacerlo siempre que se tenga claro el concepto de programación asociado). Se utilizará la documentación de Qt para todo lo que tenga que ver con la interfaz gráfica de QGIS, ya que los componentes no son particulares de QGIS sino generales a cualquier programa que use Qt.

La documentación se encuentra en:

http://doc.qt.io/qt-4.8/

Casi al final de la página aparece Qt API.

QGIS

El API de QGIS hace referencia a las funciones de C++, sin embargo, es accesible desde Python mediante el objeto iface, que se refiere a la interfaz de QGIS disponible para los plugins. Su documentación se encuentra en:

http://qgis.org/api/2.8/index.html

En ambos casos la documentación puede parecer abrumadora al inicio pero con el uso se irá aclarando.

Sobre los sistemas de información geográfica 17.7.15

Posted by Migsar in Computación, GIS, Tecnología.
Tags: , , , ,
add a comment

Hace una semana creé una nueva página en este blog sobre sistemas de información geográfica, ayer escribí un poco acerca de algunos términos de moda relacionado a esto y de la importancia de educar respecto a estos temas. Hace unos momentos inventé una nueva categoría para estos posts y a continuación pienso decir como empezó todo esto. Es un post algo largo y tiene muchos datos personales, si no les interesa eso posiblemente pueden ver otros posts sobre el tema que serán de naturaleza más técnica.

Siempre me han interesado los datos geográficos, se puede ver en la sección de hostales y sitios para acampar en México, que he tenido un poco descuidada pero lleva ya varios años. A inicios del 2014 empecé a vislumbrar mi propia empresa, en abril renuncié a mi trabajo y empecé a trabajar en mis ideas, todavía no he podido terminar el producto, pero debo decir que he avanzado bastante y adelantando un poco, se trataba de un sistema para mensajería georeferenciada; la idea ha ido cambiando un poco pero la esencia sigue siendo la misma, empezar a utilizar la ubicación como elemento rector de aplicaciones móviles y no sólo como atributo opcional informativo, es decir, empezar a permitir al usuario tomar muchas decisiones basándose en su punto en la tierra. Descubrí que la empresa tenía muchísimos aspectos y que hacer una empresa solo era muy difícil pues perdía más tiempo en cosas de logística, publicidad y relaciones públicas que en el desarrollo de mi producto (sé que no era el modo correcto de empezar pero en ese entonces nadie me lo dijo y la verdad es que aún creo que los cursos para emprender que están tan de moda no son muy útiles si se analizan los casos de éxito y los testimonios de empresarios exitosos). Para octubre estaba ya sin dinero para seguir así que volví a buscar trabajo y encontré en una empresa bastante grande relacionada con restaurantes, ahí me tocó entre otras tareas programar un par de cosas relacionadas con Google Maps, áreas de reparto, direcciones de tránsito y ubicaciones. Descubrí que todo eso se hacía muy empíricamente, es decir, existen formas mucho más eficientes de hacerlo. En abril de 2015 dejé de trabajar en esa empresa y volví a trabajar en mi proyecto, la experiencia me hizo decidir cambiar radicalmente como estaba manejando las coordenadas geográficas y empecé a meterme mucho más en el tema.

Por azares del destino me enteré de un diplomado sobre sistemas de información geográfica con open source, parecía caído del cielo, pues siempre he sido gran partidario de los sistemas libres y era justo lo que estaba explorando, en julio de este año empezó el diplomado y está por concluir. Creo que este diplomado ha sido una gran experiencia, he conocido a gente muy capaz y con una gran vocación docente, descubrí que había muchas más aplicaciones de las que había pensado inicialmente y en campos demasiado variados, desde procesos electorales, estudios políticos, ciencias forenses, geografía, biología, estudios de impacto ambiental, etcétera. Creo que falta un poco de detalle en algunos aspectos técnicos de los SIG, pero me parece que en parte es porque se trata de un diplomado y hay limitantes de tiempo, es decir, aclaro que no creo que el no ser ingeniero o científico (en el sentido de físico, matemático o afines) sea excusa para ignorar estos aspectos. También me molesto un poco, ver que algunas personas, afortunadamente una minoría, ve el movimiento open source como una alternativa para los pobres, creyendo que tiene más defectos que el software propietario y que se usa cuando no se puede pagar el otro, sin apreciar todas las ventajas que ofrece para el usuario dispuesto, como el contar con una comunidad que apoya por convicción y no por lograr una venta, que tiene conocimiento científico bastante avanzado y que muchas veces va mucho más adelante que la alternativa comercial aunque requiere una curva de aprendizaje más pronunciada. Finalmente, respecto a este último punto, el diplomado estaba pensado para usuarios finales y no para desarrolladores pero creo que la diferencia debe ser muy sutil y específicamente se refiere a la disposición para intentar las cosas, sin embargo, debo adminir que hace mucha falta información sobre programación para este tipo de sistemas y es lo que me he dado a la tarea de mejorar. Por un lado quiero que exista más información en español, creo que es un grave error de estrategia el no saber inglés, y que se pierden de muchos documentos excelentes pero la realidad es que en México somos bastante apáticos en este sentido.

Empezaré con una serie de posts introductorios, no van orientados al usuario básico, sino al que quiere aprender un poco más sobre el sistema y programar soluciones a la medida. El software sobre el que escribiré es QGIS, que es un excelente Sistema de Información Geográfica de código abierto, pero muchos de los principios son generales, y por lo que tengo entendido Python es uno de los lenguajes más usados para análisis espacial por lo que varias de las cosas serán aplicables a otros programas. Pienso que habrá tres tipos de posts:

  • Información sobre la estructura de QGIS y su uso para desarrollo.
  • Guías para resolver problemas sobre programación en QGIS.
  • Algoritmos particulares de análisis geoespacial.

Estaré encantado de recibir retroalimentación sobre estos temas o ideas sobre posts que les gustaría leer.

Profesión y descripción y percepción 03.7.15

Posted by Migsar in Computación, Cultura, Vida.
Tags: , , , , , ,
add a comment

Estaba en un diplomado sobre sistemas de información geográfica, GIS, en un módulo sobre productos de información. Salió a plática la habilidad de ser concreto en el discurso y el poder transmitir la idea sobre uno y su producto en alrededor de dos minutos, cosa que creo que no es muy importante, pero el expositor empezó a preguntar sobre la profesión y una descripción concisa de la misma, le preguntó algunos biólogos y geógrafos y no dieron con una respuesta argumentando que era difícil, poco después dijo que con los programadores era distinto y se oyó una voz en el fondo que decía “programamos” a lo que el expositor dijo que era bastante simple. Todo esto me estuvo dando vueltas en la cabeza durante el día pues me parece que es un ejemplo perfecto de la percepción sobre uno mismo, la transmisión de esa percepción en forma de descripción y la dificultad que generan los matices individuales cuando están tan polarizados para llegar a un consenso y modelar el mundo en que se vive.

El problema tiene que tomarse en cuenta desde un contexto, estudié ingeniería y soy programador de profesión, creo que la gente piensa que el ingeniero es demasiado centrado, preciso y analítico, en un sentido de análisis similar al de las computadoras, aparentemente guiándose por la razón y no los instintos. Por un lado se ha comprobado que los instintos y los sentimientos tienen mucha mayor parte en el pensamiento razonado de lo que suele aceptarse (para eso recomiendo leer a Antonio Damasio), por otro, la percepción propia se crea en base a la percepción que tienen los otros sobre la profesión y muchas veces es bastante mala y tiene consecuencias graves en el desarrollo social.

Las ciencias, sean sociales, naturales, puras, aplicadas o cualquier adjetivo que quiera dárseles deben de seguir el método científico, que establece parámetros para que sean, sobretodo, reproducibles. Pueden interpretarse los pasos y las cuestiones sobre cantidad o calidad en el objeto de estudio, pero hay que dejarlo claro, si no se basan en una teoría comprobable y reproducible, con todas las dificultades que a veces supone, no es ciencia. Y como dice el refrán, ni tanto que queme al santo ni tanto que no lo alumbre, dos minutos para describir lo que uno hace es perfectamente razonable si se hace a grandes rasgos, claro que se omiten las noches de desvelo, los libros favoritos y demás personas que uno ha conocido, pero no creo que haya una profesión que necesite más de ese tiempo para describirse, otra cosa es la comprensión que se espera que el interlocutor tenga, pero en ese caso quizá diez años no bastarían; tres segundos y una palabra tampoco es un ejemplo de habilidad descriptiva, es fácil describir como medicina la actividad profesional del médico y como médico a cualquiera que ejerza la medicina, algo simple pero poco ilustrativo y en el mejor de los casos impreciso.

Si alguna vez han intentado contratar a un programador se habrán dado cuenta de que programar no es instalar un sistema operativo, saber usar Google para encontrar instrucciones sobre programas de oficina, entender el funcionamiento subatómico de una computadora, ser capaz de hacer algoritmos para cualquier tarea imaginable, incluso hay un premio bastante generoso relacionado con eso (P vs NP Problem). Definitivamente puede haber afinidades entre ciertas actividades y ciertas profesiones, pero no son más que probabilidades, no predominantes sobre gustos individuales. Un programador puede tener mucho interés en cómputo paralelo y poco o nada de interés en sitios web y los lenguajes que se usan para crearlos, existen programadores teóricos, programadores empíricos, a algunos les interesa la eficiencia del algoritmo a otros sólo la eficacia, a otros ni una ni otra sino lo monetizable de la profesión, con biólogos y geógrafos sucede lo mismo. A lo que quiero llegar es que es malo generalizar a la ligera y que hablar mucho no significa que el tema sea complicado ni que el hablante sea un poco tonto, pero hablar poco tampoco da muchos datos sobre el tema o el hablante más allá de su gusto o no por hablar, e incluso eso dentro de un contexto.

Como ver archivos DBF y convertirlos a CSV 02.5.14

Posted by Migsar in Computación.
Tags: , , , , , , ,
add a comment

Este post va un poco relacionado con el anterior, sobre el INEGI, resulta que algunos de sus datos se encuentran en formato DBF, que por lo que investigué es de dBase, al parecer se puede ver en Gnumeric, para Linux, pero con ciertas riesgos de falla o en Open Office, aunque lo intenté y no pude, a continuación dejo dos soluciones, la primera es para convertirlo a CSV (valores separados por comas) y la segunda es para visualizarlo de la línea de comando, esta última opción la encontré útil para ver el título del registro, que no sale en la conversión a CSV.


sudo apt-get install libdbd-xbase-perl
dbf_dump --fs="," cat_municipio_MAY2013.dbf > cat_municipio_MAY2013.csv


sudo apt-get install dbview