Autor de Cambios
Estaba haciendo labores de mantenimiento en el control de version, como corrigiendo el autor de los cambios porque ha pasado que luego usan mi nombre
, en fin saque una estadistica de quienes son los que más cambios han realizado en el control de versiones, la lista ordenada es la siguiente:
330 dobeslao
237 david
204 polo
189 laura
168 abraham
125 carlos
97 luis
96 joseluis
88 alberto
1 root
1 renato
Yo estoy a la cabeza seguramente porque me he adjudicado cambios que no me pertenecieron, pero tambien porque llevo más tiempo en el proyecto
Laboratorio de Código
Establecimos un repositorio adicional, en el cual podemos agregar piezas de código que nos parezcan adecuadas que puedan resolver alguna situación particular en alguno de los lenguajes utilizados para el desarrollo del Núcleo Mediador.
Hay ocasiones en las que aplicar un patrón de diseño resulta ecónomico y sencillo de explicar con un pequeño ejemplo, abstraer la funcionalidad y despues implementarlo a gran escala, la intención de esta página es documentar de forma sencilla ese problema y almacenar el código asociado.
Pueden utilizar los mismos usuarios y contraseñas aplicadas en el proyecto.
Código de conducta Núcleo Mediador
La siguientes frases provienen del code of conduct de Ubuntu, me parecieron apropiadas y adapto al proyecto:
- Sé considerado. Tu trabajo será aprovechado por otras personas y, a su vez, dependerás del trabajo de otros. Cualquier decisión que tomes afectará a usuarios y colaboradores, y esperamos que tengas en cuenta esas consecuencias cuando tomes decisiones.
- Sé respetuoso. La Comunidad del Núcleo Mediador y sus miembros tratan al otro con respeto. Cada uno puede hacer una contribución de valor al Núcleo Mediador. Podemos no estar siempre de acuerdo, pero el desacuerdo no es excusa para un pobre comportamiento y malas maneras.
- Sé colaborativo. El Núcleo Mediador y el Software Libre tratan sobre colaboración y trabajo en conjunto. La colaboración reduce la redundancia de trabajo realizado en el mundo del Software Libre y mejora la calidad del software producido.
- Cuando disientas, consulta a otros. Desacuerdos, tanto políticos como técnicos, suceden todo el tiempo y la Comunidad del Núcleo Mediador no está exceptuada de ello. La meta importante no es evitar desacuerdos o distintos puntos de vista, sino resolverlos constructivamente.
- Cuando estés inseguro, pide ayuda. Nadie sabe todo, y nadie es considerado perfecto en la Comunidad del Núcleo Mediador. Realizando preguntas se evitan muchos problemas a lo largo del camino, por lo que alentamos a preguntar.
- Retírate con consideración. Desarrolladores en cada proyecto van y vienen y el Núcleo Mediador no es diferente. Cuando dejes o te retires de un proyecto, parcial o totalmente, pedimos que lo hagas de una forma que minimice la interrupción del mismo.
Administración de Memoria en C++
Una de las ventajas/desventajas de C++ es que el programador tiene la capacidad de manipular la memoria a su antojo, pero tener esta libertad conlleva el riesgo de no hacer las cosas de forma apropiada y tener gastos constantes de memoria, agotamiento de la misma o crear condiciones de error.
Para tratar de mitigar los riesgos que puede resultar de la creación y destrucción de la memoria debemos documentarnos y prácticar de forma constante las técnicas aprendidas. Inicie un documento en la wiki del proyecto el cuál esta enfocado a conocer más información sobre el uso de memoria dinámica y presentar algunos escenarios para el manejo eficiente de la misma.
Es una guía inicial y espero puedan seguir contribuyendo en ella:
Introduciendose a GIS
El siguiente enlace es un tutorial llamado “introducing GIS”. Consta de una serie de archivos PDF y videos demostrativos que cubren tópicos como introducción a GIS, datos vectoriales, atributos, captura de datos, datos raster, topología, sistemas de coordenadas, producción de mapas, analisis vectorial, interpolación. Los documentos estan distribudifos bajo licencia GNU Free Focumentation y los videos en Creative Commons. Toda la información puede ser descargada gratuitamente.
Es un excelente recurso para entender mejor los GIS, además de ver la calidad de producción de documentación que deberiamos de enfatizar, la sencilles y la completez, para la documentación del programa cliente.
Geoserver 1.7.7
Se acaba de anunciar el lanzamiento de la versión Geoserver 1.7.7, como en otras ocasiones tuvimos porblemas con el parseo de las respuestas para peticiones WFS 1.0, realizaremos las pruebas de integridad con esta versión antes de pasarla a producción, de igual forma en caso de haber algun fallo lo corregiremos.
Aquí algunas notas de lo que vi en la lista de cambios:
Se supone que han resuelto el siguiente fallo que nos dio dolores de cabeza:
>> Generic WFS DescribeFeatureType responds with 1.1.0 response to a 1.0.0 request
En la lista de mejoras, debemos de ver en que afecta esto:
>> New FeatureTypes unecessarily append “_Type” to Title
>> Report back a proper error exception when GetFeatureInfo QUERY_LAYERS is not a subset of LAYERS
Por el momento ya esta disponible en el servidor de desarrollo la ultima actualización de geoserver, estoy teniendo problemas con el rasgo del municipio de veracruz, en el shapefile.
Actualización: Hicimos la prueba con los diferentes tipos de fuente soportada por el Núcleo (100,110,hibrida), la primera no la carga, la segunda tiene errores al obtener los datos y la tercera parece funcionar bien :S, habra que resolver los problemas para seguir con los estándares.
La teoría de refactorización
En el artículo The Missing Theory of Refactoring , se da un vistazo de la importancia de la refactorización como una medida de control de desarrollo de software para brindarle una mejor claridad a los componentes desarrollados, si bien es cierto que se debe dedicar un buen esfuerzo al diseño de software, algunas características se realizan sobre la marcha, algunas otras de forma rápida, la refactorización brinda un camino por el cual se pueden corregir las atrocidades cometidas en el pasado.
Algunas IDE’s nos proporcionan los elementos para poder refactorizar de forma certera y reducir el número de errores cuando se realiza esta actividad, pero la detección y decisión de lo que se requiere factorizar depende totalmente del desarrollador o de los arquitectos de software. Así que no se debe tener miedo en renombrar esas clases, variables o metodos que no enuncian adecuadamente su función y de corregir aquellos paradigmas rotos del que el diseño de software brinda, por ejemplo eliminar la duplicación de código o reducir el codigo espaguetti.
Mejoras en Qt 4.6
Próximamente se liberará la versión estable de Qt, la versión 4.6, una de las mejoras que tienen es el uso de máquinas de estado, que por ejemplo permiten hacer animaciones y darle efectos a los widgets deforma mucho más sencilla, por ejemplo imaginarnos cuando arrastremos un rasgo al area de consulta este rebote o que salte cuando dos rasgos no son conformables para la union, antes de que se intente hacerla al momento de arrastrar.
Y claro muchisimas mejoras en estabilidad, pueden ver un poco de los cambios y mejoras que estan por venir en:
Herramienta IRIS
Revisando el programa IRIS4 del INEGI, obtenido del enlace que nos proporciono Ana Laura, encuentro algunas funcionalidades que podriamos explotar para el cliente.
- Seleccionar el valor del atributo (de los datos disponibles) en el momento que se especifica las condiciones de filtro en la selección de rasgos
- Ajustar la visualización del mapa a los elementos seleccionados por la herramienta de selección y posiblemente a la de navegación
- Asimilar la herramienta de gradientes, esta bastante completa esta utilidad
- Mejorar la clase de estilos para soportar patrones de diseño sobre las capas y no sólo relleno de color
- Mejoras en la visualización cuando un elemento esta seleccionado
- Proporcionar una vista tabular de los datos asociados a un fid
- Mejorar el visor de capas para poder presentar la información sobre la simbología utilizada por cada capa
Puntos que tienen a favor fue la sencilles de la interfáz, presentan un área de trabajo bastante extensa y de tamaño dinámico.
Lo que no me gusto tanto, fue que algunas herramientas de interacción básicas tienen que ser activadas de forma explicíta, como las operaciones de zoom con el ratón y obtener la información de atributos de un rasgo, bastante engorroso tener que seleccionar primero la capa y despues los fids.

gradiente cuantitativo
Gradientes en capa Vectorial
Aquí trato de demostrar los conceptos utilizados para implementar esta funcionalidad.
El próposito inicial de esta clase es poder proporcionar la funcionalidad de clasificar de forma automática los valores representativos de un atributo del rasgo, para ello se considera que tienen una distribución uniforme, tome algunos conceptos de E2G Thematic Mapping Tool, especifícamente la parte de quantiles, aunque por el momento solo se ha implementado el método para el calcúlo de quartiles, pero es facilmente extensible a otro número de clases.
Finalmente el concepto de quartile, se aplica como una clasificación de los valores localizados en 25%, 50% y 75% de los datos de forma ordenada, para esta clasificación se tomo la definición cómo q1 = (n +1 )/4, el término q2 como la mediana estádistica y q3 = (3n+3)/4, tomando en consideración que debe ser el valor entero más próximo ya que representan el indice en el vector que contiene los datos y donde n, es el número de elementos en el vector.
Para el calcúlo de la mediana, es decir q2, se considera su valor dependiendo si el número de elementos es par o impar, aprovechando el operador modulo, es posible determinarlo de forma rápida y sencilla y aplicar la formula adecuada, (n+1)/2 si es impar ó el promedio de los elementos en las posiciones, n/2 y (n/2)+1.
Lo importante para hacer notar es que con estos tres valores se generan cuatro clases y para tener conjuntos acotados también se conocen el valor mínimo y máximo de la distribución, por lo que los conjuntos de datos quedan como sigue (min,q1], (q1,q2], (q2,q3], (q3,max), de esta forma tenemos nuestro clasificador.
Hasta este momento no hay nada sorprendente, pues sólo hemos definido los puntos de interes para min, q1, q2, q3, max, es el momento en donde procesamos los datos que realmente se tiene la aplicación para construir el gradiente.
Primero se debe de entender que un gradiente es el cambio de color progresivo de un color hacía otro, algunos tipos de gradientes son radial, lineal y cónico, para esta tarea el que mejor encaja es uno líneal porque lo que deseamos es saber el color correspondiente a cierto valor de nuestra colección. Así pues se define un color de inicio y uno de fin en la clase GradienteLineal, es necesario proporcionar los límites de ese gradiente, en este caso con el método setMinMaxValue, es decir que crearemos cuatro gradientes lineales (correspondientes al clasificador que generamos) con los límites que establecimos.
Con los valores mínimo y máximo del gradiente lineal, se puede obtener para cualquier valor comprendido en ese rango el color correspondiente, se considera que los valores esten en ese rango, sino devuelve el color de los extremos dependiendo si es un valor inferior o superior. Para calcular el valor del color correspondiente se realiza una proporción de cada uno de los componentes de color (R,G,B). Así pues para calcular el valor de componente en rojo, se toma la distancia que hay entre el color inical y final en ese compontente, lred=|final.red-inical.red|, eso es proporcional al rango de valores del gradiente, lgrad=|max-min|, y normalizamos el valor recibido con el punto de inicio, lvalue=|value-min|, ahora por proporcion el segemento de rojo buscado sera lred*(lvalue/lgrad) y para obtener el valor de rojo se toma a partir de la posición inical, pero debe tomarse en cuenta el sentido del vector, ya que podriamos ir de un valor de rojo más intenso a un valor de rojo menos intenso y en este caso se debe de restar del valor inicial. Esto se realiza para cada componente de color y esta encapsulado en el método getcolorByValue.
Ahora cada vez que se necesite dibujar tomando en consideración el valor del atributo, lo primero que se debe saber es en que clasificador cae y despues preguntarle al clasificador que tonalidad de color le corresponde por el método getcolorByValue.
En el siguiente demo presento la forma en la que se ve aplicado el gradiente sobre una espiral de 100 valores que van desde 1 a 100 y dos formas de representarlo, como clasificación, donde cada clase tiene un valor fijo y como gradiente, donde una clase tiene tonalidades para el intervalo de valores de esa clase, hay que notar que en el primero no se ve el rojo porque sería el valor de la siguiente clase y solo hay cuarto.

gradiente
En el segundo ejemplo se realiza sobre un vector de 1,000 valores de forma desordenada. Notese que no hay un cambio progresivo de rojo a verde, esto es porque el gradiente y las clases estan definidas como azul, verde, amarillo, naranja y rojo, como en el caso anterior. La imagen también representa una espiral, pero como se menciono estan desordenados.

Gradiente valores aleatorios
Lo que hace falta es integrar esta clase en el programa cliente, definir una lista de gradientes predeterminados, por ejemplo en este caso se uso el termico (a,v,am,n,r), pero podemos definir los que se requieran dependiendo el número de clases con el que se trabaje, incluso cosas así lima,lima,rosa,lima,lima.
deja un comentario