HOW TO: Unir mucho shapefiles en un solo shapefile con GDAL en Windows

Si trabajas con cartografía es normal que te den un montón de shapefiles como respuesta a “necesito el vectorial de una zona”, y en algunos casos (en el mío) no es manejable cuando su número es mayor de 1000 ficheros.

Para unir todos los ficheros, y de paso borrando las geometrías repetidas, podemos usar la fabulosa herramienta ogr2ogr del paquete GDAL, que puedes obtener desde el instalador de la OSGeo4W que nos permite instalar de manera sencilla GDAL compilado para Windows. Creo que esta parte es suficientemente sencilla como para explicarla, pero si hay dudas, deja un comentario.

Una vez instalado, entramos en “Inicio > OSGeo4W > OSGeo4W Shell”, y vamos a la ruta donde tenemos la montonera de shapefiles. Y creamos el siguiente fichero “.bat” dentro del mismo directorio:

@echo off
mkdir merged
set counter=0

setlocal ENABLEDELAYEDEXPANSION

for %%f in (*.shp) do (
	if not exist merged\mergedFilter.shp (
		echo Uniendo %%f
		ogr2ogr -f "ESRI Shapefile" merged\mergedFilter.shp %%f
	) else (
		echo Uniendo %%f - Iteracion !counter!
		ogr2ogr -f "ESRI Shapefile" -update -append merged\mergedFilter.shp %%f  
		if !counter! GTR 500 (
			echo Simplificando %%f
			ogr2ogr -f "ESRI Shapefile" merged\mergedFilterAux.shp merged\mergedFilter.shp -sql "SELECT * FROM mergedFilter GROUP BY id_parcela" -dialect sqlite
			del merged\mergedFilter.*
			ren merged\mergedFilterAux.* mergedFilter.*
			set counter=0
		)
	)
	set /A counter=counter+1
)

Este código tendrás que adaptarlo a tus necesidades, por ejemplo lo nombres de los fichero y demas, pero te cuento lo que hace:

  • Va leyendo todos los fichero del directorio donde se ejecuta
  • Une el fichero con un fichero que se va creando dentro de “merge/mergedFilter.shp”
  • Cada 500 uniones, borra todas las features que tengan el mismo “id” (en tu caso puede que sea diferente y tengas que usarlo comprobando la geometria).

Le das unas horas, y al final tendrás un fichero Shapefile gigante… pero al menos uno.

Please follow and like us:

Geoserver en entorno de producción (VI): Cacheando mediante MapProxy

Logo MapProxy

Si os fijáis, tener un servidor de mapas no es “ligero”, ya que por defecto, genera todas la capas al vuelo, reproyecta y cambia de formato… ¡Aunque pidamos dos veces lo mismo!.
Por lo tanto: usa mucha cantidad de CPU, memoria y incluso disco. Si pensamos en subirlo a la nube, y usar el Amazon para servir tus mapas, por poner un ejemplo, tendrías que pensar en controlar mucho el consumo  y de no encontrarnos con alguna sorpresa en la factura de algún mes.

Pero esto tiene solución, claro. La idea es cachear el trabajo, y lo vamos a hacer mediante un servicio de proxy geoespacial que guardará los mapas generados para no tener que volver a generarlos y gastar tiempo/recursos. Para esta tarea, usaré “MapProxy ya que es el desarrollo mas maduro y versátil que he encontrado. Está montado sobre Python, y su montaje es “relativamente” sencillo, si tienes una buena guía, como esta, por ejemplo.

Preparar el entorno

Empecemos, vamos a instalar todo lo necesario para empezar. Utilizaremos nuestro querido “apt-get” para bajar todas la librerías que necesitamos.

sudo aptitude install python-imaging python-yaml libproj0 libgeos-dev python-lxml libgdal1-dev python-shapelyy build-essential python-dev libjpeg-dev zlib1g-dev libfreetype6-dev

Aparte, bajamos la herramienta de creación de un entorno independiente de Python. ¿Que hace esto?, pues generar un entorno virtual Python dentro de un entorno real de Python, para que nos entendamos, tener siempre una versión de Python, aunque en el sistema este cambie.

wget https://raw.github.com/pypa/virtualenv/1.7.1.2/virtualenv.py

Creamos el entorno virtual, y le damos permisos para poder escribir sin ser root. Este paso no es necesario, pero es muy cómo para trabajar desde cualquier usuario normal.

virtualenv /var/local/mapproxy/venv
chmod ugo+x -R /var/local/mapproxy/venv

En este momento ya disponemos de un entorno virtual Python, y se encuentra dentro de “/var/local/mapproxy“, y lo usaremos  para trabajar e instalar MapProxy.

Para activarlo (esto significa que usaremos el Python virtual, no el real), tendremos que ejecutar el comando “source“. Si no hacemos este paso, será como si no existieran todas las herramientas que vamos instalar posteriormente. Por lo tanto este paso es muy importante.

source /var/local/mapproxy/venv/bin/activate
# Fijate como ha cambiado el prompt, y nos indica que estamos en un "venv" o entorno virtual.
(venv)admin@svrmapas:~$
# Si queremos salir del entorno virtual, NO lo uses aun, usa este comando:
deactivate

Usando PyIP para dejar nuestro Python perfecto

Este herramienta, que en adelante llamaremos PIP, es como el “apt-get” pero solo para Python. Es muy sencilla de usar, y de verdad, nos facilitará la instalación de todas las librerías Python. Pasemos a instalar todas las librerías:

pip install https://bitbucket.org/olt/pil-2009-raclette/get/default.tar.gz # Para uso avanzado de PNG
pip install flup # Servidor fcgi
pip install MapProxy
# Si MapProxy necesita dependencias que no tienes, se las bajará.
# Esto puede tardar.

Configuración básica para MapProxy y test del servicio

Ahora creamos una configuración por defecto para MapProxy. Esto es una configuración por defecto que consulta unos mapas (creo recordar que del OpenStreetMap, pero no estoy seguro) y nos sirve para testar que nuestra instalación de MapProxy funciona. No voy a entrar mucho más allá, pero puedes consultar el manual de MapProxy para configurarlo.

mapproxy-util create -t base-config /var/local/mapproxy

Vale, tenemos la configuración básica, pero quiero ver algo. La gente de MapProxy son muy listos y nos permiten lanzar un servicio de test, solo usando herramientas de Python.

cd /var/local/mapproxy
# Yo le he pasado la ip y el puerto de escucha ya que tengo un Tomcat
# escuchando por el puerto 8080 que es el defecto que usa.
mapproxy-util serve-develop -b 192.168.0.100:8081 mapproxy.yaml

Con este comando, tendremos un servidor escuchando por el puerto 8081, es decir se podrá acceder a dicha cache mediante la URL:

http://192.168.0.100:8081/service?

Este servicio lo podremos testar mediante el uso de algún cliente GIS que tenga soporte para WMS, como por ejemplo “gvSIG” que permite la consulta a servidores WMS.

Ahora, a producción

Ahora habrá que utilizar, algún método para desplegar el servicio de caché de manera que de el mejor rendimiento. Yo he optado por FastCGI sobre un servidor “Apache2”, ya que estoy muy familiarizado con este sistema, pero hay muchas otras formas de hacerlo como indican en la documentación oficial y en otras guías.

sudo apt-get install libapache2-mod-fcgid

Ahora creamos un fichero “mapproxy.fcgi” con el siguiente texto:

#!/var/local/mapproxy/venv/bin/python
# WSGI module for use with Apache mod_wsgi or gunicorn
# # uncomment the following lines for logging
# # create a log.ini with `mapproxy-util create -t log-ini`
# from logging.config import fileConfig
# import os.path
# fileConfig(r'/var/local/mapproxy/log.ini', {'here': os.path.dirname(__file__)$

from mapproxy.wsgiapp import make_wsgi_app
application = make_wsgi_app(r'/var/local/mapproxy/mapproxy.yaml')

if __name__ == '__main__':
    from flup.server.fcgi_fork import WSGIServer
    WSGIServer(application).run()

En este script, hay varias cosas a destacar:

  • La primera linea tiene que indicar donde está el fichero de python del entorno virtual. NO vale con el python que tiene instalado el servidor, ya que no tendrá instalada ninguna de las librerías anteriores.
  • Esta línea: make_wsgi_app(r’/var/local/mapproxy/mapproxy.yaml’) indica donde esta el fichero .yaml donde has configurado todas las capas que consultara MapProxy. Esto es muy extenso y te recomiendo el manual de la web de MapProxy.

Tras esto configuramos el servidor web Apache, incluyendo esta línea al final de fichero “/etc/apache2/mods-available/fcgid.conf“:

[...]
# Tiene que tener la configuración del módulo arriba
ScriptAlias /mapproxy /var/local/mapproxy/mapproxy.fcgi

Y ahora un paso muy oscuro, tiene que poner como propietario al usuario que maneja el servidor web de TODA la carpeta de MapProxy. No sé si se podrá solo dar permisos en ciertos lugares, pero es lo único que me ha funcionado.

chown apache /var/local/mapproxy/ -R

Reinicia Apache, y ahora tendrás que tener accesible la web de prueba de MapProxy en “http://server/mapproxy” y el servidor WMS está en “http://server/mapproxy/service?“.

Otra guerra, es la configuración correcta para servir mallas… no me veo con fuerza hoy de escribir, ya que ese si sería un gran manual.

Documentación usada:

Please follow and like us:

Error “svn export failed” en WebSVN al hacer un tarball

Pero que complicado es esto… y desesperante. Lograr tener todo perfecto y sin ni una mancha 😛

Logo de WebSVNHoy vamos a luchar contra un “bug” (no se si se puede decir que sea culpa del script) de WebSVN en su rama 2.3.x. Si no conoces este software/script/web, es una pequeña página web que usa PHP, que permite acceder a un servidor Subversion desde una página web muy amigable. Este programa tiene la característica de hacer un zip/tar con el código fuente y bajarlo desde esta web… salvo si pones acentos en algún fichero. Entonces tendremos un bonito error que pondrá algo como:

svn export failed [...]

En ese momento piensas: “Seguro que es una chorrada de configuración de la web”. Mal, compañero, mal. Siguiendo una lógica deductiva busque si era un error de WebSVN, luego de Subversion, luego de Apache, luego de PHP y luego del sistema operativo. Obviamente, y como ocurre en estos casos, era un error en conjunto.

La causa, básicamente, es que Apache siempre arranca con las “locale” asignas a “C”, y obviamente, WebSVN lanza Subversion con dichas “locale” lo que hace que no sepa interpretar los caracteres acentuados y eñes (que están en UTF-8).

¿Como arreglarlo?, así de fácil o de complicado (como quieras verlo):

// Fichero websvn/include/setup.php
//
// Busca la línea 329 mas o menos, donde habrá algo del tipo:
setlocale(LC_ALL, '');
// Cambialo a:
setlocale(LC_ALL, 'es_ES.UTF-8');
// Añade esta línea
putenv('LC_ALL=es_ES.UTF-8');

Si no codificación de caracteres no es la misma, pues pon la que tenga tu equipo (ejecuta un “locale” en la consola).

Hecho.

Referencias:

Please follow and like us:

Unir Subversion con MantisBt, sin complicaciones.

Cuando trabajamos de manera “seria” en proyectos de desarrollo software, hay una parte muy importante que es utilizar una buena herramienta de control de versiones, y un buen gestor de incidencias o bugs.

Personalmente, llevamos bastante trabajando con Subversion en mi empresa sin grandes quejas, lo cual nos permite mantener los desarrollas saneados y controlados… aparte de saber quien metió la pata en un programa, ya que sabemos quien modifica cada línea del programa.

Hace unos meses, nos dimos cuenta que necesitábamos un control de las incidencias que encontrabamos, y incluimos en nuestros sistemas MantisBt que sustituyó a las clásicas hojas escritas con todos los problemas encontrados :P. Todo un clásico para todo desarrollo informático.

Ahora bien, nuestro sistema de trabajo era muy simple, desarrollar, probar y luego subir a Subversion, y revisar más tarde Mantis para cerrar las incidencias resueltas.

Pero no paramos en este protocolo para el control de nuestros desarrollos y quisimos integrar ambos sistemas, con el siguiente objetivo: cuando subamos una revisión a Subversión, automáticamente se cerraran las incidencias asociadas, que indicaremos en el comentario de la revisión.
Tras investigar un poco por la red, encontramos una forma muy limpia, sin tener que programar, gracias a que ya habían desarrollado un plugin para integrar los dos servicios de manera bastante sencilla.

  1. Al menos tener la versión 1.2.x de Mantis (en nuestro caso la 1.2.3), y Subversion, cualquier versión por encima de 1.3.x, (en nuestro caso la 1.6.6). Tener acceso a un usuario con acceso a los repositorios y ser administrador en Mantis.
  2. Ir a la web del creador del plugin (por si tienes curiosidad, aquí tienes el Mantis del plugin), y bajarte los plugins que indica de este repositorio git. Son solo dos: “meta” y “source-integration“. Desde allí mismo nos permite bajar un snapshot en tar.gz.
  3. Descomprimimos y vemos que el plugin “source-integration” tiene una carpeta “Source” y luego otras carpetas para cada unos de los servidores de control de versiones soportados (Git y SVN). En el caso del SVN, podemos usar directamente el protocolo SVN o a través de WebSVN (en mi caso, use directamente el protocolo SVN), copiando sólo la carpeta “Source” y “SourceSVN“.
  4. Lista de Plugins

    Lista de Plugins en Mantis 1.2.3

    Una vez tengamos copiados las carpetas (ojo es importante que sean las carpetas que contienen los ficheros php) en el directorio “plugins” del directorio donde se encuentra Mantis, ir al interfaz de “Administración > Administrar Plugins“, e instalarlos, respetando las dependencias que muestran.

  5. Ahora seguimos las indicaciones que se indican en esta web, que son mucho más detalladas que las de su creador. Sólo hay una discrepancia: Todo se configura a través del plugin “Source Control Integration“, solo rellenando el campo “SVN: Path to binary“, en mi caso con “/usr/bin” en una Ubuntu 10.04 server.
  6. Ahora si queremos adaptarlo al castellano, cambiamos “Bug Fixed Regex Pass 1”, por algo parecido a:
    /(?:corregido?d?s?|arreglado?s?)+\s+(?:#(?:\d+)[,\.\s]*)+/i
    

    Así cada vez que escribamos esto (“arreglados #001 #008”) en un comentario de un commit de Subversión, cerraremos los bugs asociado en el mensaje.

  7. Se puede cambiar muchas más opciones, pero lo dejo a vuestra investigación. Nosotros no indagamos mucho más. Hay muchas más información en: aquí.
  8. Obtener la ruta de un repositoro

    Ahora aparecerá una nueva sección en los apartados principales de Mantis, llamado “Repositories”. Al entrar, podremos añadir un repositorio que controlar, en nuestro caso, hemos seleccionado el protocolo “SVN”, por lo que tiene que tener usar ruta el repositorio que empiece por “svn://”, y que tendréis que conocer si tenéis el repositorio en nuestro equipo (en Windows sólo hay que seleccionar la carpeta que tiene el repositorio en nuestro ordenador, y en propiedades, en la pestaña de “TortoiseSVN”, esta la ruta con el protocolo SVN). Recuerda que tienes que dar un usuario existe en Subversion, no en el sistema.

  9. Tras esto, pulsamos en “Import Latest Data“, y si no hay ningun error, tendremos un mensaje que nos indica hasta que revisión ha logrado importar. Si tienes muchas revisiones, puede dar un timeout, por lo que tendrás que volver a darle o aumentar el tiempo de timeout de servidor.

Ya está… Bueno, realmente no. Con esto esta conectado, pero cuando subamos un revisión a Subversion, veremos con desesperación que no se refleja en Mantis. ¿Porqué?. Bueno, en teoría, tendríamos que importar los datos cada vez desde el interfaz de Mantis. Esto, claramente, no es lo que buscamos, ya que queremos una experiencia “automática”. Para remediarlo, podemos automatizar la adquisición de los datos de los repositorios mediante una tarea programada. En nuestro caso:

  1. Editar el fichero “/etc/crontab“:
    # Integracion subversion y mantis
    */5 *   * * *   svn     curl "http://localhost/mantis/plugin.php?page=Source/import&id=all" >> /tmp/updateMantisFromSVN 2>&1
    

    Yo, al principio y por depuración, incluyo la redirección a un fichero, tu puedes cambiarlo a “/dev/null” por ejemplo.
    También, se puede cambiar la frecuencia, en este caso está puesto cada 5 minutos, que quizás sea un poco exagerado, y se podría subir.

  2. Nos tiene que devolver algo parecido a esto:
    <pre>Requesting svn log for Repo 1 starting with revision 28...
    Processing svn log...
    No revisions parsed.
    </pre><pre>Requesting svn log for Repo 2 starting with revision 9...
    Processing svn log...
    No revisions parsed.
    

    Y ya tenemos todo el tinglado montado.

Please follow and like us:

Como optimizar todas las tablas de una base de datos MySQL

Simplemente poniendo esto en una consola (y conociendo el password de root o usuario con privilegios) y observando como el programa hace el trabajo:

mysqlcheck -u root -p --auto-repair --check --optimize --all-databases

Si tu “root” no tiene password sólo quita el “-p” para que todo funcione.

Please follow and like us:

Como deshabilitar Clamav, si te de problemas, en Postfix

Cuando un servidor Postfix empieza a dar problemas, todos nos echamos a temblar, ya que es un servicio que tiene que funcionar como sea. En nuestro caso, y tras mirar los logs (/var/log/mail.info) nos dimos cuenta que nuestro ClamAV no funcionaba, por alguna extraña razón (… quizás 3 años sin actualizarlo xD), así que tuvimos que tomar una decisión rápida, que fue deshabilitarlo, hasta que podamos corregir todos los problemas.

Para deshabilitarlo, la forma más rápida en quitar Amavis-new del medio, ya que es el que se encarga de pasar por los filtros los correos y era quien devolvía el error al no encontrar el antivirus funcionando. Para esto sólo hay que comentar las siguientes líneas:

  • En “/etc/postfix/main.cf”:
    content_filter = amavis:[127.0.0.1]:10024
    receive_override_options = no_address_mappings
    
  • En “/etc/postfix/main.cf”:
    content_filter = amavis:[127.0.0.1]:10024
    receive_override_options = no_address_mappings
    
  • En “/etc/postfix/master.cf”:
    #amavis unix - - - - 2 smtp
    # -o smtp_data_done_timeout=1200
    # -o smtp_send_xforward_command=yes
    #127.0.0.1:10025 inet n - - - - smtpd
    # -o content_filter=
    # -o local_recipient_maps=
    # -o relay_recipient_maps=
    # -o smtpd_restriction_classes=
    # -o smtpd_client_restrictions=
    # -o smtpd_helo_restrictions=
    # -o smtpd_sender_restrictions=
    # -o smtpd_recipient_restrictions=permit_mynetworks,rej ect
    # -o mynetworks=127.0.0.0/8
    # -o strict_rfc821_envelopes=yes
    # -o receive_override_options=no_unknown_recipient_chec ks,no_header_body_checks
    # -o smtpd_bind_address=127.0.0.1
    
  • Terminado esto, reiniciamos el Postfix.
  • Y ahora hacemos que todo vuelva a “reencolarse” para que no se quede pendiente en la cola de mensajes de Postfix
    postsuper -r ALL
    

Y rezamos porque todo vaya bien 🙂

Please follow and like us:

Registrar el nombre de un servidor en el DNS de Windows, mediante DHCP

Un problema clásico, cuando tenemos una nueva máquina linux “out-the-box” (recién instalada), es que cuando nuestra red funciona mediante Active Directory en Windows y con asignación de ips mediante DHCP, no podemos resolver su nombre, es decir, si hacemos ping al nombre de la máquina, esta no responde y necesitamos conocer su ip, lo que en una red con 12 o 13 servidores es un coñazo.

El problema suele residir, en que el cliente DHCP de linux (en mi caso uso Ubuntu) no se registra dentro del DNS correctamente, al recibir la cesión de la ip. Hay muchas preguntas en Internet sobre este tema, peticiones para que se añada esta opción directamente en la configuración por defecto. Y aunque por ahora no es así, no es difícil arreglarlo.

Tenemos que editar del fichero “/etc/dhcp3/dhclient.conf” y añadir las siguientes líneas a este fichero.

send fqdn.fqdn "nombre.dominio";
send fqdn.encoded off;
send fqdn.server-update on;

Como puedes ver, estamos mandando el nombre FQDN, para que el servidor DHCP sea capaz de añadirlo en la base del DNS para poder resolverlo correctamente. Ahora sólo nos queda volver a refrescar nuestra ip mediante el comando:

sudo dhclient3 eth0 -s servidorDHCP

Y ya podremos utilizar su nombre, en vez de la ip. Esperemos que os sirva de ayuda.

Please follow and like us:

Reciclando una Fonera+, medinate DD-WRT, para usarla como router para ONO

fon-dd-wrt-300x240Hace tiempo que comenté por el foro, que ya no quería formar parte de FON, que no era lo que esperaba, por lo que iba a pasar de tener enchufado un cacharro más en mi casa. Así fue, como la Fonera (en concreto una Fonera+ modelo 2201) se quedo metida en su cajita, y iba a ir a la basura… Pero, ¡qué suerte tiene este chisme!.

Mi hermana, tiene la enorme suerte de vivir en una zona donde ONO tiene 50 megas… si, 50Mb/3Mb para ser exactos. Sin pensarlo lo contrató (más bien, se lo subieron ya que ya tenía ONO), y la comentaron que el router actual, no funcionaría a esa velocidad y que le mandaban uno nuevo. Pero claro, no la comentaron que era un modem, lo que implica que se quedaba sin Wifi, y tener que tener un firewall como dios manda (mi hermana es la típica adicta al messenger que no entiende de nada más). Entonces pensé en la Fonera, muerta de asco, pero no quería que mi hermana tuviera FON, ya que no le iba a meter el marrón a ella.

Basicamente mi esquema mental, de lo que quería hacer, era esto:

DiagramaFonera

Solo tuve que mirar un poco por Google para encontrar la solución: Flasearla a otro firmware que le hiciera funcionar como router neutro y le diera todas las funcionalidades Wifi también, ya que estamos liados. Pero al principio, me acojonó un poco el tema, ya que parecía muy complicado (por ejemplo Iván López lo hizo hace 3 años y se tenía que montar parda para flasearla, con riesgo de cagarla), pero luego vi que todo había cambiado mucho con el paso del tiempo y todo era muchos mas sencillo. Y más aun cuando encontré una guía fabulosa en este blog (Superviviente 2.0, que os animo a visitar), donde te dan todas las herramientas necesarias para flasear a DD-WRT y te lo explica paso a paso como hacer un flash correcto.

Tras flasear te darás cuenta del montón de nuevas posibilidades que te da este gran firmware, y que te permiten hacer casi de todo con estos chismes, aparte de poder instalar este firmware en un montón de cacharros, no solo en la Fonera. También, quiero remarcar, que se puede flashear sin perder las funcionalidades de FON, y así seguir fieles al “espíritu” si no quieres desvincularte de este empresa. En este post no me voy a centrar en todo lo que puede hacer este maravillo firmware, ya que solo tienes que buscar por Google y tendrás toda la información que necesitas.

Una vez hecho todo (ser paciente, el flaseo lleva bastante tiempo, como 30 minutos), accedemos a la red 192.168.1.x que es donde se configura por defecto la Fonera con su nuevo firmware, y más concretamente, nuestro nuevo router estará en la 192.168.1.1. La primera vez, cambiáis usuario y password. Aun no conectéis el cable a la clavija WAN, ya que os recomiendo que os metáis antes en el interfaz y configuréis lo siguiente:

  • En el menú: Setup > Basic Setup > Internet Connection Type > Connection Type > DHCP
  • En el menú: Setup > Advanced Routing > Operating Mode > Router

¿Para que?, para que la Fonera reciba la ip, al igual que antes la recibía el PC, y en modo router, para que funcione de puerta de enlace con la funcionalidad añadida de ser un firewall. Ahora conectáis el cable que va del modem de ONO a la Fonera (clavija blanca) y esperáis. Es posible que el PC tarde en darse cuenta que la fonera ahora sirve todo, así que puede fallar, darle un tiempo o reiniciar.

Ahora solo os queda configurar los puertos en: Applications & Gaming > Port Forward. ¡Listo!. Ya tenéis un buen router neutro por muy poco dinero y muchas funcionalidades extras.

Please follow and like us:

Diferentes configuraciones IP para cada SSID Wifi en Android

Logo de Android

Logo de Android

¡Cuanto hace que no escribía!

Bueno, ya tengo hasta mi querida Hero por “cortesía” de Orange, con su sistema Android. Simplemente no tengo palabras, ya que no para de sorprenderme, y eso que ya tuve un iPhone que paso con más pena que gloria entre mis manos.

Android no es perfecto, y aun más la versión del sistema operativo que trae de serie las HTC Hero de Orange que no es precisamente muy actualizada, pero el Market lo hace perfecto.

Un fallo del cual se están quejando sobre este sistema operativo en el foro de desarrollo de Android, es que no guarda configuraciones IP diferentes para cada red Wifi a la que se conecta. Por ejemplo, en mi casa tengo las ips estáticas, mientas que en el trabajo uso DHCP, pero Android solo permite que configures una ÚNICA configuración para todas las redes Wifi.

Bueno, rebuscando por el Market ya tengo la solución (gratuita claro) que es la aplicación “Static Wifi“. Sencillamente genial y creo que no necesita mucha explicación, ya que cuando encuentra que se conecta a una red Wifi con cierto SSID, cambia toda la configuración para que se adapte a lo que se necesite.

Please follow and like us:

Solución a que innerHTML no funcione bien en IE7 y superiores

En uno de mis proyectos de trabajo en mi empresa, me he encontrado con los míticos “Javascript madness“.

Esta vez, el problema surge al intentar modificar la propiedad innerHTML de una etiqueta con texto y así poder modificar su código HTML desde javascript. Aunque el uso de innerHTML no está recomendado por la W3C ya que habría que utilizar createElement y createTextNode, pero sinceramente, es mucho más lento y bastante complejo. Pero claro, el IE tenia algo que decir, y era que no le apetece funcionar con el puñetero innerHTML, unas veces si, otras no… al parecer al meter etiquetas HTML anidadas, deja de funcionar. Muy divertido.

Os pongo un ejemplo:

output = req.responseText;
document.getElementById(pageElement).innerHTML = output;

Si ouput es una etiqueta tipo “ancla“, sin más, todo funcionará y verás cambiar el código HTML de tu etiqueta con id igual a la variable “pageElement“. Pero si metes una tabla, esto no funcionará. Pero solo en IE, ya que el resto de navegadores funcionará bien.

¿Como forzarlo a funcionar?. Pues siguiendo el estándar de la W3C… y como indica este post.

var newdiv = document.createElement("div");
newdiv.innerHTML = output;
var container = document.getElementById(pageElement);
container.appendChild(newdiv);

Y bingo…

Please follow and like us: