Fixing routing errors from alternativaslibres faster

alternativaslibres.org provides several .zip files with routing errors from OpenStreetMap database. This .zip files contains several .txt files with this format:

2017/01/05 03:32:50 (RouteNode): 55114001.o5m: Roundabout (http://www.openstreetmap.org/browse/way/30983372) is connected to more than one road at http://www.openstreetmap.org/?mlat=39.475536&mlon=-6.399011&zoom=17 2017/01/05 03:32:50 (RouteNode): 55114001.o5m: Roundabout (http://www.openstreetmap.org/browse/way/311363264) is connected to more than one road at http://www.openstreetmap.org/?mlat=39.475971&mlon=-6.395029&zoom=17 2017/01/05 03:33:57 (RouteNode): 55114006.o5m: Roundabout (http://www.openstreetmap.org/browse/way/174438373) is connected to more than one road at http://www.openstreetmap.org/?mlat=38.885061&mlon=-4.352789&zoom=17 2017/01/05 03:35:07 (StyledConverter): 55114015.o5m: Roundabout 463667389 direction is wrong – reversing it (see http://www.openstreetmap.org/?mlat=40.487723&mlon=-3.181809&zoom=17) 2017/01/05 03:35:07 (StyledConverter): 55114015.o5m: Roundabout 463453323 direction is wrong – reversing it (see http://www.openstreetmap.org/?mlat=40.534629&mlon=-3.299410&zoom=17)

To fix one fo this errors, you should:

  1. Copy the way ID «30983372».
  2. Paste it in JOSM under «File->Download Object».
  3. Fix the error.
  4. Upload the changeset.
  5. Repeat from step 1.

This workflow is slow, so I tried to improve it with a little Bash «piping» under Linux:

start_line=1; file="Roundabouts_ESP.txt"; ids=$(cat $file | \
sed -n 's/.*way\/\([0-9]\+\).*/w\1/p' | sort -n | uniq | \ 
tail -n +$start_line | head -n 20 | tr '\n' ','); \
curl "http://localhost:8111/load_object?new_layer=false&objects=${ids}"

To use this new and faster workflow you need to open JOSM and enable remote control, then:

  1. Set «file» variable with the one you want to fix.
  2. Run the command. JOSM will load the ways to fix.
  3. Fix one error.
  4. Upload the changeset.
  5. Repeat from step 3 until all errors are corrected.
  6. Repeat from step 2, changing variable «start_line=X» from X to X+20.

Cyanogen 7.1: Problemas WiFi en Motorola Defy

El pasado día 9 de Octubre de 2011 el smartphone Motorola Defy fue incluido definitivamente en el proyecto CyanogenMod. La versión 7.1 es la primera soportando Motorola Defy oficialmente.

Captura detalles Motorola Defy con Cyanogen 7.1

Captura detalles Motorola Defy con Cyanogen 7.1

Tas replicar el procedimiento de la guía de instalación he conseguido ejecutar CyanogenMod 7.1 en mi Motorola Defy sin ningún contratiempo. La instalación la realicé a partir de la rom 3.4.2 131-003 Orange Deblur rooteada (procedimiento que seguí para su rooteo). Las primeras pruebas fueron satisfactorias, el sistema es estable y más fluido que con la anterior rom. Sin embargo salió a la luz un problema con la conexión WiFi. En condiciones de uso «estándar» la conexión funcionaba correctamente. Al hacer uso intensivo de la red WiFi, como por ejemplo en la sincronización de música a través de Spotify o llamadas vía Skype, la conexión se perdía. Para recuperar dicha conexión era necesario desactivar la comunicación WiFi en el móvil y reactivarla.

Tras consultar las fuentes habituales (xda-developers y HTC manía) parecía que dicho problema era algo aislado. De modo que si no es un problema de la rom, debería ser de algún tipo de parámetro personalizable. Tras repetir los wipes de cache, dalvik, SD, etc. el problema persistía por lo que se me ocurrió que podría ser que a mi anterior rom, la cual no era oficial, le hubiese cambiado también el firmware de radio, encargado de las comunicaciones inalámbricas móviles y WiFi. En ese punto recordé que Cyanogen 7.1 incluye la utilidad Defy Baseband Switcher que permite cambiar la banda base de la radio. La banda base que tenía seleccionada por defecto era «Europa Central Hong Kong, Taiwan, Saudita, Francia, Nóridocos 3.4.x, Reino Unido 4.5.1-85«. Tras seleccionar «Europa Central RT_3.4.2-145» y reiniciar el sistema, pasé ha realizar una sincronización de música con Spotify y el problema de pérdida de conexión WiFi se había solucionado.

Captura Baseband Switcher

Captura Baseband Switcher

Rootear Motorola Defy

El Motorola Defy que está comercializando Vodafone actualmente viene cargado de utilidades de Motorola que seguramente nunca utilizaré. Para deshacerme de ellas, hacer overclocking, underclocking, cambiar la ROM o  instalar algunas aplicaciones cómo Titanium Backup o AdFree necesito obtener acceso root en el sistema Android.

Sigue leyendo

El servidor más rápido para sources.list

Hasta hoy era usuario de netselect-apt para hacerme con el servidor (o repositorio) con mayor ancho de banda posible para las actualizaciones de paquetes de Debian. Digo hasta hoy ya que me encontré con que el repositorio que estaba usando (http://mirrors.nfsi.pt/debian/) dejó de funcionar. A raíz de eso me dispuse a ejecutar el «nectselect-apt -n unstable» de rigor pero el resultado no era el esperado. El sources.list generado contenía una línea sin especificar servidor:

deb unstable main contrib non-free

Tras buscar unos minutos encontré la alternativa a  netselect-apt: apt-spy. Su funcionalidad prácticamente la misma, testea mirrors de Debian y genera un archivo sources.list con el servidor de mayor ancho de banda.

Sigue leyendo

Instalar Debian sin lector de CD o DVD

Hace un par de días compré un pequeño PC para usar de servidor (streaming de música, ssh tunneling, sftp…). El  sistema operativo que traía instalado era Ubuntu 9.10. Además de ser una versión «ya algo vieja» venía un tanto mal instalada (sin particiones, sin swap), por lo que la mejor opción era reinstalar el sistema operativo. Por tradición me decidí a instalar Debian. El impedimento era que esta máquina no cuenta con lector de CD/DVD y descartando la opción de instalar por USB, me quedé con la opción más cómoda: Instalar a través de red local mediante PXE.

Si bien a priori la configuración de un servidor DHCP y TFTP necesarios para iniciar con PXE podría parecer engorrosa, gracias a éste manual conseguí realizar la instalación sin topar ninguna dificultad. He añadido a mi wiki un resumen del proceso modificando algún detalle (ver la página de debian en el wiki).

Wiki

He abierto un wiki que me servirá como repositorio de «chuletas». En principio el contenido que tiene es sobre Linux pero no descarto seguir añadiendo otros apartados, como pueden ser otros sistemas operativos, PHP, seguridad, etc.

Principalmente es para mi uso personal pero lo hago público por si le pudiese resultar útil a alguien en algún momento.

Wiki de Rodrigo Rega

Instalar VMware Server 2.0.2 con kernel 2.6.32

La instalación de VMware Server 2.0.2 en Debian SID con kernel 2.6.32 cuenta con varios impedimentos que dificultan su puesta en marcha. Tras leer diversas fuentes de información he conseguido solventar todos estos problemas. A continuación listo las dificultades con las que me topé y cómo las he solucionado:

Sigue leyendo

Comprimir rar multipart en Linux

Una pequeña chuleta de cómo crear un archivo comprido rar multipart en una terminal Linux:

rar a -r -s -v51200 mi_nuevo_archivo_multipart.rar "directorio_que_quiero_comprimir/"

Los parámetros usados para comprimr el archivo rar en varias partes en Linux son los siguientes:

a: Añadir archivos (comprimir).

r: Añadir directorios recursivamente.

s: Archivo sólido. Copia todos los archivos a uno único antes de comprimir, aumentando así el ratio de compresión.

v: Divide el archivo comprimido resultante en partes de 50 MB cada uno (expresado en KB).

Indentar XML con PHP

Trabajar con archivos XML en PHP es realmente cómodo gracias a SimpleXML. Por desgracia los archivos .xml que genera no son «human-readable». En el caso de necesitar consultar algún dato manualmente en el archivo .xml, nos encontraremos con que no cuenta con saltos de línea y por extensión está sin indentar.

Para solucionar este problema he usado esta pequeña función que se encarga de formatear un archivo XML.

function formatXml($archivoXml) {
    $doc = new DOMDocument();
    $doc->preserveWhiteSpace = false;
    $doc->formatOutput = true;
    $doc->load($archivoXml);
    $doc->save($archivoXml);
}