Friday, November 1, 2013

PPL ... al fin.


Pues si, el día domingo 6 de octubre de 2013 aprobé el exámen práctico para la obtención de la licencia de piloto privado de avión, PPL (A), en Madrid, España.

¿Qué es PPL?, es, literalmente, Private Pilot License, es una licencia que te permite, según  el reglamento de la Unión Europea Nº 1178/2011 del 3 de noviembre de 2011, sección 2, FCL.205.A (a), hacer lo siguiente:

"Las atribuciones del titular de una PPL(A) son actuar sin remuneración como piloto al mando o copiloto en aviones o TMG que participen en operaciones no comerciales."

TMG significa motovelero de turismo.

En cristiano, que puedo alquilarme una avionetica tipo Cessna 172 y darme un paseo.

¿Para qué obtener esta licencia? ¿qué hago con eso? Desde muy pequeño siempre me ha gustado la aviación, recuerdo que en 4º de primaria ya leía libros sobre aviones caza. Recuerdo también que los "simuladores" de la empresa Microprose hacían preguntas para poder acceder al juego, las preguntas consistían en que te ponían la silueta de algún caza y debías responder a qué avión pertenecía. Nunca necesité "la hoja de claves" del juego, siempre me resultó muy facil identificar correctamente la silueta.

La primera vez que me monté en un avión ligero fue en Puerto Rico en 2005, un gran piloto (y mejor persona), Pedro Fernández, me invitó a dar una vuelta en una Cessna 177 RG Cardenal. Aquello no fue normal, otra cosa, tenía ya horas de "vuelo" en flight simulator, pero aquello fue tocar el cielo.

La experiencia se repitió una vez más y qué puedo decir, fue lo máximo.

Cuando llegué a España, y gracias a un regalo de mi novia (hoy mi esposa), pude hacerme un vuelo de bautizo en un ULM (ultraligero motorizado), una Tecnam P96 en el aeródromo de Casarubios del Monte (LEMT). Otra vez tocando el cielo, esta vez pude llevar el ULM con ayuda del instructor.

Después de este vuelo de bautizo y animado por mi esposa, hice el curso de ULM, ya estaba volando. Aprobé mis exámenes práctico y teórico y obtuve mi licencia.

A pesar de tener la licencia de ULM, la escuela requería que hiciese un depósito de 1000 € y aprobar otro exámen interno para poder alquilarme el ULM a mi solo e irme por los pueblos de España. Esa situación me hizo plantearme hacer el curso del PPL ya que:
  • Podría despegar y aterrizar en aeropuertos controlados.
  • Podría meterme en espacios aéreos VFR (todos menos el A).
  • Podría volar solo (sin instructor) cuando tuviese mi licencia.
  • Podría volar aviones más "grandes".


Pues bien, las condiciones económicas estaban dadas para poder pagarme el curso, así que comencé a averiguar en qué escuela hacerlo. Después de leer varios foros y varias opiniones, me fuí a el aeródromo de Cuatro Vientos (LECU) en Madrid a preguntar en las diferentes escuelas que existían, tal y como me lo habían sugerido en los foros.

Como era de esperarse, múltiples impresiones, cantidad de información, precios, opciones, etc. Al final me decidí por Aerofan por varias razones, por precio, flexibilidad de horarios en las clases teóricas, podía asistir a tantas clases como quisiera, no tenían restricción de tiempo para hacer el curso aparte de los que pone la Agencia Estatal de Seguridad Aérea (AESA) y Aviación Civil.

Requisitos

Para poder optar a la licencia de piloto privado hay que tener 16 años y un certificado médico, al menos Clase II. Ambos requisitos los cumplía. Por ese lado estaba bien, sin problemas para comenzar el curso.

Material

El material que debía tener para comenzar el curso es el siguiente:

  • Un plotter.
  • Un CR3.
  • Carta aeronáutica. Yo compré la Jeppesen LE-2 1:500000 vfr+gps.
  • Dos lápices grasos (rojo y negro).
  • Piernógrafo.
  • Drenador.
  • Los "libros de Adsuar" (opcional, ojo con esto).


El piernógrafo y el drenador son exclusivamente para hacer las prácticas, así que, si como yo, se quiere dejar los vuelos para el final, no es necesario que se compren a la primera.

Sobre los libros de Adsuar, yo compré la colección completa para el PPL y ahora no estoy seguro si fue una decición acertada y me explico. Con todo respeto para el señor Adsuar, los libros para el PPL están redactados de una manera bastante enrevesada, pareciera que el autor lo que quiere es demostrar que sabe mucho (lo cual no dudo) pero a nivel pedagógico, en mi humilde opinión, deja bastante que desear. He leido "algún" libro técnico a lo largo de mi vida y opino que este señor debería revisar su redacción para que fuese más clara, concisa y con menos adornos literarios, al final son libros técnicos, no ensayos de prosa.

Sin embargo, los libros de Adsuar sirven y mucho, como libros de consulta una vez que ya se ha aprendido el temario. En resúmen, no son libros para aprender desde cero, son libros de consulta para aclarar alguna duda.

Si, me he quedado a gusto :) es mi blog :)

El curso de PPL

El curso lo comencé el 12 de septiembre de 2011, las clases teóricas eran de 7:00 pm a 9:00 pm, así que salía de la oficina a las 5:00 para no comerme el tráfico de la M-30 y el del Paseo de Extremadura. Llegaba a Cuatro Vientos temprano, así que me daba tiempo de poner la frecuencia de la torre en el scanner o de echarme una pequeña ciesta en el carro ;).

El curso de PPL consta de 9 materias teóricas:

  • Principios de vuelo.
  • Procedimientos operacionales.
  • Comunicaciones VFR.
  • Conocimiento general de la Aeronave (CGA).
  • Performance y planificación del vuelo.
  • Navegación.
  • Meteorología.
  • Derecho aeronáutico.
  • Factores humanos.


Mi primera clase teórica fue principios de vuelo. Es física básicamente, aerodinámica. El instructor muy dedicado, explicaba muy bien, me dió muy buena impresión.

A lo largo de todo el curso todos los instructores que me tocaron (cinco en total) en las teóricas, se esmeraron por enseñarnos las cosas, desde aquí se los agradezco de corazón. Sé lo que es dar cursos y a esas horas del día, con los alumnos bastante "espesos", es de admirar.

A los que se inician en esto, mi recomendación es que acudan a clase, no es lo mismo leerse un libro (y menos los de Adsuar) a que te expliquen con una pizarra y te aclaren las dudas. Reitero, hay que ir a clase!!!!

Exámenes teóricos

Llegó el día en el que me tenía que presentar a exámen. Solo había tenido tiempo para preparar tres materias, me presenté a principios de vuelo, comunicaciones y procedimientos operacionales.

A mi me tocó la época de la transición entre el sistema de exámenes por convocatoria y los exámenes "electrónicos" en SENASA (Servicios y Estudios para la Navegación Aérea y la Seguridad Aeronáutica S.A.). Las tres primeras materias las presenté en la modalidad de convocatorias. El lugar era el mismo Cuatro Vientos que se llenaba de gente de todas partes de España que venían dos o tres días a presentar exámenes (arcaico completamente, pero hay más).

Aprobé las tres materias, ya me había quitado tres de encima.

La próxima vez que fuí a presentar exámenes fue ya en la nueva modalidad que consistía en ir a SENASA y presentar exámenes en una computadora (como cualquier exámen de certificación de HP-UX, Cisco, etc). Aquello fue un caos al principio, en teoría se usaban los bancos de preguntas europeos, pero luego en la práctica y según contaba la gente, en los exámenes de PPL(A) salían preguntas de ATPL (Air Transport Pilot Licese), del PPL de helicóptero, preguntas mal formuladas, mal traducidas, no dejaban usar calculadora a los PPL's, etc., etc. Al final los problemas se resolvieron y la cosa comenzó a funcionar "decentemente", sin embargo, la gente tenía (y tiene al momento de escribir este post) que seguir viniendo a Madrid a presentar unos exámenes, eso si, en unas Sparc.... siglo XXI....

Preparación de los exámenes

Como me tocó presentar en dos modalidades diferentes, la preparación de los exámenes también fue algo diferente.

Modalidad de convocatorias

Para esta modalidad conseguí una cantidad enorme de test's. En teoría, eran preguntas que habían salido en exámenes anteriores, el problema es que algunas estaban mal redactadas, aveces una misma pregunta tenía respuestas diferentes como buena, al final dependes de la memoria de la persona que haya tenido la amabilidad de recordar la pregunta y las respuestas. Sin embargo, pude estudiar así.

La cuestión con los test's es que no puedes estudiar solo con ellos, hay que estudiar el tema, entenderlo, ir a clases y ya luego, para fijar conocimientos, los test's.

Pues bien, para principios de vuelo, comunicaciones y procedimientos operacionales fui a todas las clases, investigué por internet, usé los libros de Adsuar (OMG!!!!), me leí varios anexos al convenio de Chicago y al final si, muchos test's para reafirmar conocimientos y para ir viendo más o menos el tiempo que demoraba en contestar. El resultado, las tres aprobadas :)

Modalidad "SENASA"

Ya para cuando me tocó presentar con esta modalidad, habían muchas personas contando sus experiencias en el foro de extracrew.com (hilo de las preguntas que han salido en el PPL). Recomiendo leer este hilo y recopilar todas las preguntas (y respuestas) que los foristas amablemente colocan. Son un recurso de incalculable valor. También, en la lista interna que tenemos algunos alumnos de la escuela, habían experiencias previas con SENASA (desde aquí mil gracias a todos).

Aquí lo mismo, asistir a clases, investigar por internet, recopilar las preguntas de otros, hacer test's y.... me quedó performance la primera vez que me presenté en la modalidad "SENASA". ¿Por qué? porque la materia se llama performance y planificación del vuelo y en el libro de Adsuar (OMFG!!!!), de planificación del vuelo nada, en clase nos dieron algunas nociones y en el exámen me salieron preguntas "curiosas" del "trip fuel" del demonio que jamás había visto. Pues nada, a preguntar a los instructores, a comentarlas en el foro y en la lista y si, se encontró respuesta :)

Después de esta tanda hice un parón, resulta que me invitaron a una boda (la mía) y tuve que dejar de estudiar por razones obvias.

Después que pasó todo el asunto de la boda, retomé el estudio y decidí tratar de sacarme el resto de materias en dos tandas. En la primera iría "contra" performance porque esa espinita me la sacaba yo porque si.

Pues bien, "cayó" performance y también cayeron las demás. La última tanda la terminé en enero del 2013

Como consejo reitero, pasarse por el foro de extracrew y recopilar todas las preguntas del hilo del PPL, estudiar concienzudamente y asistir a clase.

Fase práctica

Al quitarme de encima las teóricas (son una verdadera losa), llegaba el momento "dulce". Ahora solo me tocaba volar y volar las 45 horas que me exigen para la obtención de la licencia.

Si uno piensa que ya ha pasado el tiempo de estudiar, mejor pensar de nuevo. Hay que estudiar y mucho, hay que leerse el manual del avión, el análisis de maniobras, poner en práctica todo lo que, en teoría, has aprendido de las nueve materias, hay que aprenderse el circuito de LECU, hay que aprender a hablar en la frecuencia común, hay que quitarse el miedo de hablar con los ATC's, etc., etc., pero se hace con un gusto...

Las primeras clases prácticas son realmente abrumadoras, la cantidad de información que debes procesar no es normal pero bueno, para eso uno está ahí, ¿no? ¿quién dijo miendo?. Yo venía de volar ULM's, pero es muy muy diferente volar una C172, para que se me entienda, es como andar en bicicleta y luego en un camión.

La Cessna 172 me parecía pesadísima, muy grande, estaba acostumbrado a que, con el ULM, metes gases y enseguida sube y con la 172 nanai nanai, como no se tire de los cuernos después de meter gases, no se sube. A la hora de la recogida con full flaps, aquello era un ladrillo, era cómico escuchar al instructor hablando del efecto suelo, WTF???!!!!! si aquello se caía como una piedra!!!!!!

Siempre iba "por detrás" del avión, pero bueno, se está aprendiendo... aún hoy no creo que yo vaya muy "por delante" ;)

Las horas transcurren más rápido de lo que uno piensa (y quiere) y llega el día de la suelta, el momento en que debes demostrar lo que has aprendido (básicamente porque de ello depende tu vida ;) ).

Después de la suelta vienen los vuelos solos "supervisados", donde el instructor de turno le reza a todos los santos para que no te pase nada, te reportes sobre S (sierra) y traigas el avión en una pieza. Lo digo por experiencia, vi a una instructora hacer un abismo en Operaciones de la escuela, caminando de lado a lado esperando esa frase ansiada "Cuatro Vientos torre, Aerofan XXX sobre S, instrucciones para el circuito".

En esos solos supervisados es donde ya uno comienza a sentirse piloto, el asiento de al lado está vacío, el avión pesa menos y no hay nadie para salvarte el c.... si haces algo mal... y se disfruta un mundo.

Luego viene el triangular, el mío fue LECU - LEVD - LEMT - LECU. Segunda  vez que cruzaba la sierra de Madrid, primera vez que subía a 8500 ft. Entrar en Valladolid es interesante, fue la primera vez que entraba en una pista de 3 km. Que el controlador de torre te "recite" el METAR estando acostumbrado al ATIS de LECU hace la experiencia más peculiar si se quiere y ya encontrarse el aeropuerto desierto... bueno, no, estaba el señor de la cafetería..... en fin, el tema político-aeroportuario lo discutiré en otro post... o no.

Después del triangular, el tiempo comienza a pasar muy muy rápido, quedan pocas horas para el exámen práctico y quieres que el tiempo retroceda pero no la (poca) experiencia adquirida.

Mi recomendación, "comprimir" lo más que se pueda las horas para estar "suelto" en el momento del exámen. Hay que tratar de colocar las sesiones lo más seguidas que se pueda (aunque la meteo te lo ponga difícil). En mi caso puse 3 horas el sábado y el domingo me examiné.

El exámen práctico

Es el momento más raro de todo el curso, quieres que llegue pero estás c...., asustado. Sentía que no sabía nada (tampoco es que sepa mucho en realidad), que no estaba listo para el exámen, en cristiano, que estaba muy pichón.

Le pregunté a los instructores cómo me veían y me decían que bien, que no me preocupara... no sirvió de nada, de sábado para domingo la intranquilidad aumentó :(

Pero bueno, traté de distraerme y de pensar en lo que había dicho "Eddie" Malacara sobre el exámen práctico, así que la suerte estaba echada. Aquí les dejo el video, lo recomiendo (está en inglés).



El exámen transcurrió tranquilamente, el examinador, ese si es pedagógico, intenta hacerte sentir tranquilo y al final las cosas salen. No fue muy diferente de una clase, creo que los instructores nos preparan correctamente para el exámen.

Si estás cerca de examinarte en la parte práctica, mira el video de Eddie y confía en tus instructores.

El papeleo

Después de aprobar el práctico viene el pago de tasas, entregar la hoja del triangular donde las oficinas ARO pusieron el sellito y esperar a que llamen de la escuela para decirte que tu licencia ha llegado.

¿Y ahora qué?

Yo me encuentro en esta etapa, tengo mi licencia, no me sobra el tiempo y tampoco el dinero y las ganas de volar están en su máximo nivel (¿tienen un mínimo? ;) ). Afortunadamente, hay personas que como yo, escriben cosas en su blog para que luego puedan servir a los que vienen detrás, es el caso de Gonzalo. En su blog el relata cómo fue su etapa "post licencia" y aunque mal de muchos consuelo de tontos, es últil saber que no estamos solos y que si se puede volar después. Desde aquí un saludo a Gonzalo.

Vencimientos y plazos

Otra cosa que hay que tener muy en cuenta después que se tiene una licencia (PPL en mi caso) es el tema de los plazos de renovación. Según el reglamento de la Unión Europea  Nº 1178/2011 el período de validez de la habilitación de clase monomotor de un solo piloto es de 2 años. Por si hay duda, colocaré la sección:

"FCL.740 Validez y renovación de las habilitaciones de clase y tipo
(a) El período de validez de las habilitaciones de clase y tipo será de 1 año, excepto para las habilitaciones de clase monomotor de un solo piloto, que tendrán un período de validez de 2 años, a menos que se determine otra cosa de acuerdo con los datos de idoneidad operacional, establecidos de acuerdo con la Parte 21."

Por lo tanto, después que nos dan la licencia, tenemos 2 años para revalidar la habilitación.

La revalidación viene descrita en el siguiente apartado que copio literalmente:

Nota: Actualización del 17 de marzo de 2015, aquí en inglés

FCL.740.A Revalidación de habilitaciones de clase y tipo-aviones
b) Revalidación de habilitaciones de clase monomotor de un solo piloto.
1)
Habilitaciones de clase de avión monomotor de pistón y TMG. Para la revalidación de una habilitación de clase de avión monomotor de pistón de un solo piloto o la habilitación de clase TMG, el solicitante tendrá que:
i)
superar una verificación de competencia en la clase correspondiente de acuerdo con el apéndice 9 de la presente Parte con un examinador en los 3 meses precedentes a la fecha de caducidad de la habilitación; o
ii)
completar 12 horas de vuelo en la clase correspondiente en los 12 meses anteriores a la fecha de caducidad de la habilitación, incluidas:
6 horas como piloto al mando;
12 despegues y 12 aterrizajes, y
un curso de actualización de al menos 1 hora con un instructor de vuelo (FI) o un instructor de habilitación de clase (CRI). Los solicitantes estarán exentos de esta formación de actualización si han superado una verificación de competencia de habilitación de clase o tipo o una prueba de pericia o evaluación de competencia en cualquier otra clase o tipo de avión.

Creo que está claro, no tengo nada que agregar.

Sobre la experiencia reciente, la norma dice lo siguiente:

FCL.060 Experiencia reciente
b) Aviones, helicópteros, aeronaves de despegue vertical, dirigibles y planeadores. Un piloto no operará una aeronave en transporte aéreo comercial o transporte de pasajeros:

     1) como piloto al mando o copiloto a menos que haya llevado a cabo, en los 90 días anteriores, al menos 3 despegues, aproximaciones y aterrizajes en una aeronave del mismo tipo o clase o un FFS que represente dicho tipo o clase. Los 3 despegues y aterrizajes deben llevarse a cabo en operaciones multipiloto o monopiloto, dependiendo de las atribuciones del piloto


Este último punto también depende de las normas internas de la escuela/aeroclub donde se alquile el avión, es posible que sean más restrictivos.

Eso es todo, me quedó un post larguísimo.

Tuesday, September 10, 2013

Apache Traffic Server en Debian Wheezy

Este post es solo un ejemplo simple de configuración de Apache Traffic Server como proxy inverso (reverse proxy).

Wikipedia tiene esta definición para proxy inverso:

Un proxy inverso (reverse proxy en inglés) es un servidor proxy situado en el alojamiento de uno o más servidores web. Todo el tráfico procedente de Internet y con destino en alguno de esos servidores web es recibido por el servidor proxy. Hay varias razones para ello:

  • Seguridad: el servidor proxy es una capa adicional de defensa y por lo tanto protege a los servidores web.
  • Cifrado / Aceleración SSL: cuando se crea un sitio web seguro, habitualmente el cifrado SSL no lo hace el mismo servidor web, sino que es realizado en un equipo ajeno equipado incluso con hardware de aceleración SSL/TLS.
  • Distribución de Carga: el proxy puede distribuir la carga entre varios servidores web. En ese caso puede ser necesario reescribir la URL de cada página web (traducción de la URL externa a la URL interna correspondiente, según en qué servidor se encuentre la información solicitada).
  • Caché de contenido estático: Un proxy inverso puede descargar de trabajo a los servidores web almacenando contenido estático como imágenes u otro contenido gráfico. También puede almacenar contenido generado dinámicamente pero que pueda ser en alguna medida reutilizable.
No tengo nada que agregar a la definición :)

En este post voy a poner un ejemplo de configuración de Apache Traffic Server (ATS) como proxy inverso para caché de contenido estático.

Entorno de prueba

El entorno de prueba que utilicé es una máquina virtual con Debian Wheezy donde correrán los dos bloques funcionales que utilizaré, el ATS y apache como servidor web. Lo siguiente es un resúmen del entorno de pruebas para que quede claro:
  • ATS escuchando en el puerto 8080
  • Apache escuchando en el puerto 80
ATS necesita al menos un servidor DNS así que tuve que montar uno sencillo en la máquina de prueba. No voy a describir el proceso porque no es el objetivo de este post, lo que describiré es la configuración básica.
  • Zona "int" con un registro A (ats.int) apuntado a 127.0.0.1
  • La zona inversa ya viene configurada con el paquete bind9
Con el servidor DNS funcionando (hay que asegurarse de que funciona) proseguimos con la instalación.

Instlación

Instalamos ATS con el siguiente comando:
# aptitude install trafficserver

ATS es un producto un poco "raro", no se maneja ni se configura como cualquier otro producto de software libre. Tiene varios archivos de configuración con un formato muy poco usual. Para esta demostración de concepto necesitamos "tocar" los siguientes archivos (o saber que existen):
  • records.config: Es el archivo principal de configuración y contiene las directivas principales que gobiernan el comportamiento de ATS.
  • remap.config: En este archivo están las redirecciones a los servidores "reales".
  • splitdns.config: Aquí es donde le indicamos los servidores DNS que vamos a utilizar además de configurar el comportamiento en lo que a resolución de nombres se refiere para cada dominio.

Para esta prueba vamos a dejar muchas configuraciones por defecto y solo modificaremos las que nos interesan, insisto, _para esta prueba_. En cristiano, que hay que leerse el manual, esto no es " la guía definitiva de ATS".

Con el ATS instalado, el siguiente paso es arrancarlo. Editamos el archivo /etc/default/trafficserver y colocamos la variable TC_START en "yes"
TC_START=yes

Ahora arrancamos ATS
# /etc/init.d/trafficserver start

En /var/log/syslog debería aparecer algo como esto:
traffic_cop[10778]: --- Cop Starting [Version: Apache Traffic Server - traffic_cop - 3.0.5 - (build # 5918 on Jun  9 2012 at 18:37:39)] ---
traffic_cop[10778]: can't get passwd entry for the admin user
traffic_cop[10778]: can't get passwd entry for the admin user
traffic_cop[10778]: traffic_manager not running, making sure traffic_server is dead
traffic_cop[10778]: spawning traffic_manager
traffic_manager[10779]: NOTE: --- Manager Starting ---
traffic_manager[10779]: NOTE: Manager Version: Apache Traffic Server - traffic_manager - 3.0.5 - (build # 5918 on Jun  9 2012 at 18:33:34)
traffic_server[10789]: NOTE: --- Server Starting ---
traffic_server[10789]: NOTE: Server Version: Apache Traffic Server - traffic_server - 3.0.5 - (build # 5918 on Jun  9 2012 at 18:36:30)
traffic_server[10789]: {1081143632} STATUS: opened /var/log/trafficserver/diags.log

Ok, ahora toca configurarlo, para eso utilizaremos el comando traffic_line (ya dije que ATS era muy raro).

Configuración

Cambiamos el propietario del estos archivos de manera temporal.
# cd /etc/trafficserver
# chown trafficserver records.config remap.config splitdns.config

Le diremos a ATS es que no guarde copias de los archivos de configuración (esto es una prueba)
#traffic_line -s proxy.config.admin.number_config_bak -v 0

Cache status en los encabezados HTTP (para debugging)
# traffic_line -s proxy.config.http.insert_response_via_str -v 1

Cuando hacer caché de cada objeto (mirar documentación)
# traffic_line -s proxy.config.http.cache.when_to_revalidate -v 4

No necesita encabezados especiales para hacer caché de un objeto.
# traffic_line -s proxy.config.http.cache.required_headers -v 0

Server mappings 

Ahora es cuando le indicamos a ATS lo que va a hacer con las peticiones, es decir, las reglas que debe seguir para manejar las peticiones que vienen desde "afuera". Para esto editamos el archivo /etc/trafficserver/remap.config y colocamos lo siguiente al final del archivo:

map http://ats.int:8080 http://ats.int

Resolución DNS

ATS usa los servidores DNS del /etc/resolv.conf, en este caso, para que use nuestro servidor DNS que es donde tenemos la zona de pruebas "int", debemos editar el archivo /etc/trafficserver/splitdns.config y colocar lo siguiente:
dest_domain=int named=127.0.0.1

y le decimos que lo use
# traffic_line -sproxy.config.dns.splitDNS.enabled -v 1

Hemos finalizado, falta recargar la configuración
# traffic_line -x

Devolvemos el cambio de propietario de los archivos de configuración
# chown root.root records.config remap.config splitdns.config


Pruebas

Ahora toca probar lo que hicimos, para esto, creamos un archivo html de prueba en /var/www con el siguiente contenido:
<html>
<head>Prueba</head>
<body>
hola, esto es una prueba
</body>
</html>

Editamos el /etc/hosts y añadimos el alias ats.int a 127.0.0.1. Esto es para poder utilizar el nombre ats.int con la herramienta GET.

Probamos con el siguiente comando:
$ GET -Ue http://ats.int:8080/prueba.html

Deberíamos obtener algo parecido a esto:
GET http://ats.int:8080/prueba.html
User-Agent: lwp-request/6.03 libwww-perl/6.04
200 OK
Connection: close
Date: Tue, 10 Sep 2013 13:22:28 GMT
Via: http/1.1 murphy (ApacheTrafficServer/3.0.5 [cMsSfW])
Accept-Ranges: bytes
Age: 0
ETag: "4e-4b-4e6073106eb8b"
Server: ATS/3.0.5
Vary: Accept-Encoding
Content-Length: 75
Content-Type: text/html
Last-Modified: Tue, 10 Sep 2013 13:07:48 GMT
Client-Date: Tue, 10 Sep 2013 13:22:28 GMT
Client-Peer: 127.0.0.1:8080
Client-Response-Num: 1

<html>
<head>Prueba</head>
<body>
hola, esto es una prueba
</body>
</html>


Es importante verificar la cadena "[cMsSfW]" del encabezado Via que nos está diciendo:
cM: cache miss (el objeto no está en el caché)
sS: served (el objeto lo proporcionó el "servidor original")
fW: writen (el objeto fue escrito en el caché)

En cristiano, que el archivo prueba.html no estaba en el caché, que lo fue a buscar en el servidor, lo encontró, lo mandó al cliente http y lo guardó en caché. Es lo que se esperaba, no?

Ahora volvemos a ejecutar el mismo comando:
$ GET -Ue http://ats.int:8080/prueba.html
GET http://ats.int:8080/prueba.html
User-Agent: lwp-request/6.03 libwww-perl/6.04
200 OK
Connection: close
Date: Tue, 10 Sep 2013 13:22:28 GMT
Via: http/1.1 murphy (ApacheTrafficServer/3.0.5 [cHs f ])
Accept-Ranges: bytes
Age: 317
ETag: "4e-4b-4e6073106eb8b"
Server: ATS/3.0.5
Vary: Accept-Encoding
Content-Length: 75
Content-Type: text/html
Last-Modified: Tue, 10 Sep 2013 13:07:48 GMT
Client-Date: Tue, 10 Sep 2013 13:27:45 GMT
Client-Peer: 127.0.0.1:8080
Client-Response-Num: 1


<html>
<head>Prueba</head>
<body>
hola, esto es una prueba
</body>
</html>

Observemos de nuevo el encabezado Via, tiene la siguiente cadena "[cHs f ]"  y vemos que tiene un cH, es decir un cache Hit, que quiere decir que el objeto pedido está en el caché y de ahí lo envió al cliente http sin irlo a buscar al servidor original. Es lo que se esperaba de un proxy caché, no?

Se puede seguir haciendo pruebas, por ejemplo, limpiar el caché (ver documentación), hacer un tail -f al access.log de apache y verificar que el apache registra la primera petición del objeto (normal, no está en el caché) y que en posteriores peticiones, no se registra nada en el access.log de apache.

Eso es todo, ya tenemos a ATS funcionando.

Thursday, August 29, 2013

Sesiones web en alta disponibilidad

En este post voy a tratar de explicar con una demostración de concepto, como dotar de alta disponibilidad a las sesiones de una aplicación web.

 Debido a mis limitaciones técnicas, voy a utilizar lo siguiente:
  •  nginx como balanceador web 
  •  php como lenguaje de programación 
  •  apache como servidor web 
  •  memcached,  la estrella en todo esto. 

todo esto sobre Debian Wheezy.

Cuando se tiene una granja de servidores web para una aplicación, se requiere que la información almacenada en la sesión de usuario se mantenga y pueda ser accedida por cualquiera de los servidores, incluso, cuando alguno de ellos falla. Existen varias técnicas, algunas más complicadas que otras. Yo voy a hablar de como hacerlo con memcached.

Escenario

 El escenario descrito como bloques funcionales será el siguiente:
  •  Un balanceador web (nginx) 
  •  Dos servidores web (apache + php) 
  •  Tres instancias de memcached 

El blanceador (nginx) tendrá como servidores de backend a los dos apaches que son los que alojarán el código php del supuesto sitio web. Para efectos de esta demostración de concepto, todos estos bloques funcionales estarán corriendo en la misma máquina :) Espero que esto no lleve a confusión.

Comenzamos con la instalación y configuración de los bloques funcionales.

Balanceador web (nginx) 

Instalamos nginx de la siguiente manera:
# aptitude install nginx


 Nos vamos al directorio /etc/nginx/sites-available y creamos el archivo mem-test que tendrá la configuración de nuestro balanceador. Este es el contenido del archivo:
upstream mem-test {
                   server 127.0.0.1:8081;   
                   server 127.0.0.1:8082;

}

server {
      listen 8080;
      location / {
                  proxy_pass http://mem-test;
      }
}


Como se aprecia, voy a tener dos servidores web escuchando en los puertos 8081 y 8082. Será mi "granja" que después configuraré. La sección siguiente le dice a nginx que escuche en el puerto 8080 (mi blanceador) y que todo lo que llegue lo pase a los servidores descritos arriba.

Nos vamos al directorio /etc/nginx/sites-enabled, creamos un link simbólico que apunte al archivo creado
# cd /etc/nginx/sites-enabled
# ln -s /etc/nginx/sites-aviable/mem-test

y borramos el link "default".

Listo, ya tenemos nginx configurado como balanceador, nos queda arrancarlo:
# service start nginx

No deberían salir errores si se siguieron los pasos descritos.

Servidores web (apache + php) 

Instalamos apache y php de la siguiente manera:
# aptitude install apache2 libapache2-mod-php5

Configuramos dos virtualhosts en apache añadiendo
NameVirtualHost *:8081
NameVirtualHost *:8082
Listen 8081
Listen 8082

al archivo /etc/apache2/ports.conf y creamos dos archivos de configuración llamados server01 y server02 en /etc/apache2/sites-available. Estos son los que yo creé:
server01
<VirtualHost *:8081>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/server01
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/server01>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


server02
<VirtualHost *:8082>
        ServerAdmin webmaster@localhost

        DocumentRoot /var/server02
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /var/server02>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Creamos los directorios /var/server01 y  /var/server02 que alojarán las páginas de nuestros sitios web
# mkdir /var/server01 /var/server02

Activamos los sitios:
# a2ensite server01 server2

Memcached 

Instalamos memcached y el soporte de php para memcache
# aptitude install memcached php5-memcache

Creamos los tres archivos de configuración de las instancias de memcached
cp /etc/memcached /etc/memcached_inst01.conf
cp /etc/memcached /etc/memcached_inst02.conf
cp /etc/memcached /etc/memcached_inst03.conf

En mi escenario, estos son los puertos en los que escuchan las diferentes instancias de memcached:
  • inst01: 11211 
  • inst02: 11212 
  • inst03: 11213 


Eso se hace modificando la línea donde dice "-p" en cada archivo de configuración y colocando el valor correspondiente.

Arrancamos memcached
/etc/init.d/memcached start
Starting memcached: memcached_inst01.
Starting memcached: memcached_inst02.
Starting memcached: memcached_inst03.

Podemos comprobar que están corriendo con un ps.

php5-memcache 

Para que php use memcache para almacenar las sesiones, hay que realizar lo siguiente:
En el archivo /etc/php5/apache2/php.ini colocar:
session.save_handler = memcache
session.save_path = "tcp://127.0.0.1:11211,tcp://127.0.0.1:11212,tcp://127.0.0.1:11213"

y en el archivo /etc/php5/apache2/conf.d/20-memcache.ini añadir:
memcache.session_redundancy=4

Nota muy importante, el valor de memcache.session_redundancy debe ser igual al número de instancias de memcached +1.

Reiniciamos el apache:
# service apache2 stop
# service apache2 start

Solo falta escribir un código de prueba. En cada uno de los DocumentRoot de los virtualhosts, creamos un archivo llamado index.php como el siguiente para comenzar:
<?session_start() ?>
<html>
<head>
        <title>Server01</title>
</head>
<body>
Server01
<? if(empty($_SESSION['contador'])) {?>

<p>El contador est&aacute; vac&iacute;o</p>
<? }else {?>
<p>Valor actual del contador: <? echo $_SESSION['contador'];?></p>
<p>Sumamos 1 al contador</p>
<? $_SESSION['contador'] = $_SESSION['contador'] + 1;}?>
</body>
</html>

Hay que tener en cuenta que cada index.php debe reflejar el nombre de su respectivo servidor virtual.

Ahora, con cualquier navegador (yo usé lynx) podemos probar con la URL
http://localhost:8080

y recargamos la página varias veces.

Esta prueba debe mostrar _siempre_ que la variable "contador" está vacía lo cual es lógico. Lo único que debería variar es el nombre del servidor, que debe alternarse entre server01 y server02 con lo que sabemos que el balanceador está funcionando.

Una vez confirmado esto, modificamos el index.php de server02 para que quede de esta manera:
<? session_start() ?>
<html>
<head>
        <title>Server02</title>
</head>
<body>
Server02
<? if(empty($_SESSION['contador'])) {?>
<p>El contador est&aacute vac&iacute;o</p>
<? $_SESSION['contador'] = 1;
 }else {?>
<p>Valor actual del contador: <? echo $_SESSION['contador'];?></p>
<p>Sumamos 1 al contador</p>
<? $_SESSION['contador'] = $_SESSION['contador'] + 1;}?>
</body>
</html>

Al recargar la URL debemos observar como el contador comienza a incrementarse después de haber contactado a server02.

Para probar que se mantienen las sesiones al ocurrir un fallo, procedemos a parar las instancias de memcached teniendo en cuenta que hay que dejar el menos una corriendo.
# /etc/init.d/memcached stop inst01

Al recargar la URL deberíamos observar que el contador se sigue incrementando demostrando así que tenemos alta disponibilidad con las sesiones web.

Esto es solo una demostración de concepto pero se evidencia la flexibilidad y redundancia de memcached para guardar y mantener la información de las sesiones web.

Tuesday, August 13, 2013

El día de mi suelta

El día de la suelta para un alumno piloto es un gran día, es el momento en el cual sus instructores estiman (ilusos ellos) que el alumno tiene las habilidades mínimas necesarias como para no matarse viajando solo en un avión.

Es un día especial donde la emoción y el susto se combinan para que tengas una sensación que nadie ha podido definir aún.

Este es el relato de mi día de la suelta.

Me había programado para volar el sábado temprano (9:00 a.m) porque en verano me gusta volar a primera hora de la mañana, así me evito turbulencias producidas por térmicas y el avión tiene mejor performance (aire más frío).

Volar a primera hora también tiene sus contras, tienes que pararte más temprano, tienes que ir con prisas para llegar a la oficina ARO de Cuatro Vientos (abren a las 8:30) y tienes que ser Usain Bolt para llegar rápido a la plataforma de la escuela que queda "llegando a Coslada" para ver si no te agarra el "atasco" en el punto de espera que parece la A6 en hora pico.

Para palear un poco estos contras, lo que hago es meter el plan de vuelo el día anterior por la tarde, así llego directo al control de seguridad el día del vuelo y me ahorro un poquito de tiempo (solo un poquito).

Pues bien, el viernes en la tarde veo la página de programación de la escuela que, aunque la información que sale ahí no es oficial sino hasta las 8 de la noche, a las 3 de la tarde es muy probable que esa información ya sea la definitiva (iluso pequeño saltamontes).

A eso de las 4 de la tarde y por "no dejar", reviso de nuevo la página de programación de la escuela y .... oh sorpresa, me habían cambiado al instructor y ahora decía "check". Por supuesto, puse cara de "ponchao", eso de check no lo había visto nunca y pensé que debían ser las nuevas políticas de la escuela que ahora te hacen chequeos teóricos frecuentemente.

No me parece mal, así te obligan a repasar la teoría siempre.

Pues bien, con eso en mente salgo de la oficina hacia Cuatro Vientos (LECU de ahora en adelante) a meter mi plan de vuelo para el sábado un poco preocupado porque, para que coloquen en la programación que me van a hacer un "check", pues debe ser importante, así que ya me veía yo llegando a la casa a estudiar y perderme las finales del viernes del mundial de natación Barcelona 2013.

Llego a LECU, estaciono delante de la terminal y vuelvo a intentar verificar  la programación de la escuela, no fuese a ser que cambiara de nuevo. En eso recibo una llamada, es este nuevo instructor que me han colocado diciéndome que me va a hacer un chequeo y que me prepare un routing El Alamo, Illescas, me parece raro, muy corto. Le pido que me confirme que es El Alamo, Illescas y nos devolvemos a Cuatro Vientos y me dice que si y que ponga la EOBT a las 9:15 locales y que me esperará en operaciones a las 8:30.

Sin problemas, me voy a la oficina ARO, meto mi plan de vuelo, consulto NOTAMS para el sábado y listo, sale mi plan de vuelo aprobado por la impresora y me voy para mi casa.

El camino de vuelta fue una elucubración constante, el routing era muy corto, seguro que era para evaluarme el timing en los puntos de referencia... uffff me toca afinar bastante en el cálculo de tiempos, y siendo tan corto, seguro me iba a freir con teoría....

Pienso también que.... y si es la suelta? OMG!!!!! .... no, no creo, estoy muy "pichón" pero igualito "huele mal".

Llego a las casa con "cara de circunstancias", mi esposa me pregunta que qué me pasa y le cuento lo del "check". Ella me dice que no me preocupe, que me lo tome con calma, que siempre me tomo las cosas muy a pecho. Tiene razón pero cuando llevas eso en el "firmware" poco se puede hacer....

Total que me pongo manos a la obra, saco mis "macundales" y me pongo a hacer el routing. Es tan pero tan corto que solo alcanzo a colocar un punto intermedio en cada tramo para llevar el timing... pienso que aquí está la "trampa", ve van a joder con eso.

Termino de hacer mis garabatos sobre la carta 1:500000, agarro el manual del avión y comienzo a leerme los fallos de motor, los fuegos, velocidades características, etc, etc.

Mi esposa, al verme así, me dice que me va a hacer la cena, que no me preocupe y siga estudiando :)

Termina la natación (damn it!!!! no vi casi nada), termino de cenar y agarro el "análisis de maniobras" que seguro me pone a hacer mil pérdidas y tres mil fallos de motor... "mínime!!!!!!"

Ya preocupado por la hora, me voy a dormir temprano para estar "despierto" al día siguiente.

Suena el despertador y partida!!!!!!! a bañarme, desayunar, sacar la meteo y los NOTAM's y "ráspalo" pa' LECU.

Llego a la terminal (casi vacía), paso el control de seguridad y "rumbo a Coslada".

Cuando llego a la plataforma de la escuela, veo al avión que me toca con las puertas abiertas, full flaps.... que raro.... será que me equivoqué de avión?? Bien bueno pues.....

Entro a la oficina y está extrañamente "llena", dos instructores, tres alumnos (WTF??!!). En fin, se presenta mi instructor (primera vez que lo veo), confirma mi nombre y me dice, "siéntate ahí"... listo, comienza "el parto".

Me pide certificado médico, tarjeta de alumno, plan de vuelo, meteo, plan de vuelo operacional, ruting, NOTAM's, nombre y pedigree de la mascota de mi hermana... (ok, se me fue la mano ;) ).

Me bombardea de preguntas e intento responderlas lo mejor que puedo y cuando terminamos me dice: vamos a avolar..... ajá!!!! aquí está la trampa!!!!! no he hecho la carga y centrado ni la exterior!!! pues nada, se lo digo al instructor y me dice que la exterior la hizo el y la hoja de carga y centrado también.

Lo miro con desconfianza y le insisto, "pero seguro"? y me responde el con mirada de "ya estamos con el mequetrefe este", si, ya lo hice yo, vámonos ya.

Ok, con esa capacidad de convencimiento, nos dirigimos al avión, doy una "ojeada rápida" por si las moscas y comenzamos con la checklist.

Todo perfecto, me dispongo a rodar y el instructorme dice "mío el avión", perfecto, agarra el avión como si fuese una bicicleta, lo saca de plataforma y me lo da. Me dice que me apure para que no nos agarre "el atasco". Bien, pruebo mis frenos y listo, el primer regaño, "no frenes así, no estás probado el ABS", ok, lo tendré en cuenta (uffff bonito comienzo)..

Seguimos hasta el punto de espera de la 28 y el instructor se pone a hablarme del anti skid..... fine.... a ver si se me olvidan los chequeos de brújula , direccional, bastón y bola.... le interrumpo diciéndole que voy a hacer las pruebas y me dice que ok...

Ya en el punto de espera con briefing's y prueba de motor lista, nos autorizan a despegar por la 28, viento en calma (muy bien!!!!).

Estando en viento en cara me dice el instructor que vamos a hacer 2 tomas y despegues, que hable con la torre en viendo en cola.... ok, perfecto, la torre nos autoriza y uffff, a ver como me sale esta toma, las últimas con full flaps me han salido un poco flojas, en cambio, con dos puntos de flaps, esas si me salen chéveres.

Pues bien, ya con toma asegurada y en la cabecera de la 28 con las que te conté de corbata, intento hacer una toma "buena".... uffff un poco dura... ya estamos.... sin embargo el instructor me dice que la toma bien, pero que tengo que rotar a 55 KIAS y no a 60 como siempre he practicado, pero bueno, que lo tenga en cuenta.

Seguimos con la segunda toma y la torre me dice que alargue el viento en cola y autoriza a un tráfico, que estaba en el punto de espera, a despegar.

El tráfico se demora un poco y el instructor me dice: "ves? cuando digas listo salida es listo salida porque haces esperar a los demás tráficos".

Entendido... ya me estaba poniendo nervioso porque ese viento en cola estaba llegando a Vallecas ( no es cierto ;) ) cuando veo que el tráfico despega. Viro a base y la torre nos autoriza a aterrizar.

Como el final fue "largo", me dió tiempo a colocarme bien y a "pensar mucho" en esa toma.... no meter flap's tan pronto que quedaba bastante tiempo, calma...

Ya con toma asegururada y full flap's presento el avión, comienzo la recogida tratando de que esta toma si fuese "buena".... suena la bocina de pérdida y pack, toma suave... coño!!! seguro tomé con 2 puntos de flaps... Verifico los flap's y no, están en full.... pues nada, limpiar el avión, full gases y nos vamos!!!.

Al menos esta toma si había salido como a mi me gusta.

Total que nos dirigimos a W, le comento como voy a hacer el routing, preparo frecuencias, carta, etc, notificamos en W, ponemos rumbo al Alamo y "saludamos" en aire-aire.

El instructor sigue hablándome no se si para distraerme o porque el es así, al menos el vuelo sería "entretenido".

Ya rumbo a Illescas comenzaron las "gracias", fallos de motor, preguntas trampa a ver si sabía en donde estaba pero lo más importante, consejos de "aviación práctica", no la que sale en los libros, la que me va a salvar la vida, cosa que se agradece mucho.

Así transcurrió el vuelo, más fallos de motor, más consejos prácticos, más fallos de alternador, batería, etc etc etc (creo que falló todo lo que tenía que fallar!!!!!).

Ya entrando en al circuito de LECU, escucho en frecuecia la frase "toma intermedia para suelta de alumno"..... de otros tráficos :( dos que recuerde.

Viendo que me quedaba mucho tiempo, le pregunté si esta era toma final o podíamos hacer más tomas y despegues, el me dice que llevará las comunicaciones y que yo me centre en el avión, pues bien, cada vez que el hablaba con la torre yo no escuchaba nada (medio fallo de radio!!!! lo que faltaba!!!!). Le dije que no lo escuchaba cuando hablaba con la torre y el me contestó de lo más tranquilo: "si, yo tampoco te escucho a ti cuando notificas, tengo que verte para saber que estás diciendo (WTF!!!!!!!!!???????????)

Seguimos en aproximación, tomo y le pregunto de nuevo "qué hacemos? plataforma?". No me contesta, liberamos pista, torre nos pasa con rodadura, el instructor sigue hablando con la controladora y yo nada que escucho, (fuck!!!!). Le insisto de nuevo " ya?, no vamos a hacer tomas y despegues?" y el me responde con : "quieres volar solo"? (WHAT!!!!!!!!) - eehhhmmmm mmmmm si... pero..... - y me sigue diciendo: "bueno, ahora llegamos a plataforma y te vas tu solo.... (OMFG!!!!!!!!!!!!!!!!!).

Seguimos a plataforma y antes de llegar a los caribou's me dice, mío el avión, hace un 360 y me dice, "lo agarras desde aquí, aprovecha el día que está muy bueno y no vengas antes de una hora" (GOOOOOOOOOOOOD!!!!!)

Por supuesto, no tenía routing de nada aparte del que había preparado así que le digo, bueno, a ver dónde me voy ahora, el me sugiere Toledo y me parece bien.

Me gusta mucho Toledo y ya la había sobrevolado una vez y es espectacular, así que con autorización, hasta punto de espera de la 28 y a Toledo....

Creo que todavía no me daba cuenta de que era mi suelta, estaba pendiente de checklist's, la ruta que iba a seguir, altitud, tráficos, etc... ya en W y en frecuencia aire-aire notifico que voy al Bosque de Batres, 3000 ft, al ratico notifican 2 tráficos que están cerca del bosque de Batres y que van a S.

Desde operaciones de la escuela "advierten" que estoy en mi suelta y que si pueden, amablemente, subirse 500 ft =) Los tráficos aceptaron sin problemas (desde aquí mil gracias por facilitarme las cosas), sin embargo, ya los tenía a la vista así que los podía evadir.

Ya con el Bosque de Batres a mi izquierda, notifico que voy rumbo sur a Recas, 3000 ft. Que sorpresa, otro tráfico estaba sobre Recas a 3000 ft y rumbo a Toledo, bien bueno pues, hoy es el día de ir a Toledo me dije :)

Decido entonces notificar cuado llegue a Lomichar, así saben que el rookie de la suelta anda por ahí. Escucho a otro tráfico sobre Chozas de Canales y creo recordar que iba hacia Casarrubios, perfecto, más gente para la fiesta.

Abro los ojos lo más que puedo y comienzo a hacer el scan del cielo a ver si aparece "algo"... nada.... ya sobre Lomichar vuelvo a notificar y escucho a mi precedente sobre Olias del Rey... bien, vamos en caravana...

Como ven, de disfrutar poco, siempre pendiente de los tráficos, la altitud, el mapa, los pueblos.... ufffff.

Por fin en Recas, notifico y mi precedente dice que está en Toledo y que se sube a 4500 ft, bien, parece que podré orbitar sobre Toledo sin problemas...

La cosa se relaja un poco sobre Olías del Rey, ya tenía a Toledo en el morro y nadie se había reportado por la zona, hora de descansar orbitando sobre el oeste de Toledo..... el casco histórico es impresionante desde 3000 ft... esta es parte de la recompensa después de haber sufrido a Adsuar.

No se cuantas vueltas di al oeste de Toledo, creo que no me canso de verla :), para asegurarme el disfrute reporté que iba a estar orbitando sobre Toledo, así sabrían que había alguien por ahí.

Miré la hora y decidí regresarme, justo en ese momento se reporta un tráfico que venía de Recas a Toledo, no se si se había reportado antes, yo estaba muy "ocupado" :)

Notifiqué que abanonaba Toledo rumbo Olías del Rey y me aparté un poco a la derecha por si las moscas.

El tramo de vuelta fue tranquilo, la frecuencia estaba callada y fue ahí donde me di cuenta que estaba volando yo solo y que era el día de mi suelta.

Sunday, April 28, 2013

Receptor ADS-B con linux

En este post voy a colocar los pasos que seguí para construir un receptor ADS-B con linux.

Primero, algo de teoría, aunque si estás leyendo este post, probablemente ya sepas que es ADS-B, sin embargo, algo de teoría no cae mal.

Según skybrary, ADS-B son unas siglas que significan Automatic Dependent Surveillance Broadcast. Es un sistema mediante el cual los aviones o cualquier vehículo aeroportuario emiten información generada en sus sistemas de abordo mediante radiodifución (Skybrary, ADS-B).

Existen en el mercado varios receptores para estas emisiones, por ejemplo, el SBS-3 de Kinetic Avionics que cuesta alrededor de £ 500.

En el sitio Flightradar24 se puede apreciar un ejemplo de la data que pueden recopilar estos receptores y de lo que se puede hacer con ella.

Como £ 500 es realmente mucho y existen opciones más baratas disponibles, voy a hablar de una opción que cae en el grupo de las baratas (aproximadamente 8 € !!!!!!!!!).

Hardware

El aparatico que hace la magia es un receptor de radio y televisión digital USB. Según he leido, este es un dispositivo que entra en la categoría de SDR (Radio de software) y lo interesante es que se puede sintonizar a la frecuencia de 1090 MHz que es la frecuencia en la cual se transmite  la información ADS-B.

Uno de los modelos más populares de este "dongle" son los que están basados en los chips RTL2832U+R820T.

Yo compré uno por ebay y me costó 8€ con envío. Este es el link del producto
FM+DAB USB DVB-T RTL2832U+R820T w/ MCX antenna y esta es la foto del producto en su caja, como me llegó:



Este "dongle" viene con una antena que hace un trabajo bastante bueno y que sirve para iniciarse en el mundo del radiospotting.

Esta es la salida de lsusb montrando al "dongle"
Bus 001 Device 003: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
Y esta es lo que muestra el syslog cuando el "dongle" se conecta al puerto USB
kernel: [  167.908218] usb 1-8: new high-speed USB device number 3 using ehci_hcd
kernel: [  168.052057] usb 1-8: New USB device found, idVendor=0bda, idProduct=2838
kernel: [  168.052067] usb 1-8: New USB device strings: Mfr=1, Product=2, SerialNumber=3
kernel: [  168.052075] usb 1-8: Product: RTL2838UHIDIR
kernel: [  168.052081] usb 1-8: Manufacturer: Realtek
kernel: [  168.052087] usb 1-8: SerialNumber: 00000001

Aparte del "dongle", se necesita una computadora con un puerto USB 2.0.


Software

Sistema operativo: En mi caso utilicé Debian Wheezy.

SDR: Para la sintonización utilicé las utilidades rtl-sdr.

Decodificador ADS-B (Opcional pero muy recomendado): Como decodificador adicional de ADS-B utilicé dump1090 que es una herramienta muy útil a la hora de visualizar los tráficos de una manera amigable.

Manos a la obra

Lo primero que hay que hacer es preparar el sistema operativo para compilar, ya que ninguno de estos programas (rtl-sdr y dump1090) están precompilados en los repositorios oficiales de debian.

# aptitude install build-essential git cmake libusb-1.0-0-dev


Ahora hay que bajarse el software para compilarlo.

rtl-sdr

# cd /usr/local/src
# git clone git://git.osmocom.org/rtl-sdr.git
# mkdir -p rtl-sdr/build
# cd rtl-sdr/build
# cmake  -DINSTALL_UDEV_RULES=ON ../
# make
# make install

Ya con esto deberíamos tener rtl-sdr instalado. Los binarios estarán en /usr/local/bin.

Ahora hay que probar que podemos trabajar con el "dongle", para esto, lo insertamos en un puerto USB y ejecutamos los siguiente (Ctrl+c para volver al prompt):

# rtl_test

Esta es la salida que obtengo yo:
Found 1 device(s):
  0:  ezcap USB 2.0 DVB-T/DAB/FM dongle

Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Supported gain values (29): 0.0 0.9 1.4 2.7 3.7 7.7 8.7 12.5 14.4 15.7 16.6 19.7 20.7
22.9 25.4 28.0 29.7 32.8 33.8 36.4 37.2 38.6 40.2 42.1 43.4 43.9 44.5 48.0 49.6

Info: This tool will continuously read from the device, and report if
samples get lost. If you observe no further output, everything is fine.

Reading samples in async mode...
lost at least 68 bytes

No me preocupo por los bytes perdidos, lo que interesa es que el dispositivo está reconocido y más aún, que reconoció el radio Rafael Micro R820T.

Ahora hay que conectar la antena (si es que ya no está conectada) y probar si recibimos data ADS-B.

Si es posible colocar la antena cerca de la ventana y tener visión del cielo sin obstáculos, mejor.

En mi caso, como las pruebas las estoy haciendo en una laptop, me es fácil ubicarme cerca de una ventana.

Ejecutamos lo siguiente (Crtl+c para volver al prompt):

# rtl_adsb -V

Y deberíamos tener una salida como esta
Found 1 device(s):
  0:  Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: ezcap USB 2.0 DVB-T/DAB/FM dongle
Found Rafael Micro R820T tuner
Tuner gain set to automatic.
Tuned to 1090000000 Hz.
Sampling at 2000000 Hz.
Exact sample rate is: 2000000.052982 Hz
*8d405f1391404839a80495d13bdd;
DF=17 CA=5
ICAO Address=405f13
PI=0xd13bdd
Type Code=18 S.Type/Ant.=1
--------------
*8d505ec162b98399033c73ba8256;
DF=17 CA=5
ICAO Address=505ec1
PI=0xba8256
Type Code=12 S.Type/Ant.=2
--------------
*8d34150e9901650a80b296f522d3;
DF=17 CA=5
ICAO Address=34150e
PI=0xf522d3
Type Code=19 S.Type/Ant.=1
--------------
*8597c521e0e38161319e05f52f61;
DF=16 CA=5
ICAO Address=97c521
PI=0xf52f61
Type Code=28 S.Type/Ant.=0
--------------
*8e44ce719910e92280809106d31b;
DF=17 CA=6
ICAO Address=44ce71
PI=0x06d31b
Type Code=19 S.Type/Ant.=1
--------------

Señores, ahí están los tráficos!!!!!!!, el receptor funciona y tenemos información. Las líneas que salen como "ICAO Address" son la identificación de los tráficos que tienen transponders en Modo S. Más información Aquí.

Por supuesto, esta representación no nos dice mucho, lo que realmente queremos es ver los tráficos en un mapa y conocer su altitud, velocidad, heading, call sign, tipo de avión, etc, etc, etc, y para eso se necesita un visualizador.

Para linux he encontrado dos, el dump1090 que es decodificador y visualizador y el Virtual Radar Server que está escrito en C# (Mono) y aseguran que corre en linux. Yo solo lo he probado en windows y dada mi nula habilidad en ese sistema operativo, poco puedo aportar, salvo que me ha dado uns resultados bastante "aceptables" pero me sigo sintiendo "incómodo". Por esa razón, solo voy a hablar de dump1090 que si corre bien en linux y además de decodificador es visualizador.

dump1090

Dump1090 es muy versátil, permite decodificar la información ADS-B, mostrarla en modo texto de una manera amigable y además tiene un servidor web en el que se pueden ver los tráficos al estilo Flightradar24.

En mi caso, con la antena que viene el "dongle", dentro del apartamento (1° piso) y con una visión sin obstáculos de un sector "pequeño" del norte de Madrid, he podido seguir tráficos a altitudes de entre 5000 ft y FL380 (Madrid está a 2000 ft aproximadamente) y a una distancia de 110 NM.

Ye que le he hecho tanta propaganda a dump1090, hay que compilarlo:

# cd /usr/local/src
# git clone https://github.com/antirez/dump1090.git
# cd dump1090
# make

Esto genera el binario dump1090. Ahora solo resta copiar el binario y el archivo gmap.html a un directorio apropiado.

Entre las opciones que tiene dump1090 están, la visualización en modo texto (--interactive), la visualización por web y la posibilidad de compartir la data decodificada con otros visualizadores.

Para conocer todas las opciones de dump1090 hay que ejecutar:

# ./dump1090 -h

Dejo unas capturas de dump1090 en funcionamiento.

dump1090 en modo texto:



Visualización de la data en modo web proporcionada por dump1090:



Eso es todo, espero que sea de utilidad.

Saturday, March 2, 2013

DNIe en Debian wheezy

Este es un post más sobre como usar el DNI electrónico en linux en una distribución diferente a las que tiene listadas la policía, en este caso es en Debian Wheezy de 32 bits.

Hardware

Una de las cosas importantes es contar con un lector de tarjetas inteligentes compatible con linux. Hay varios en el mercado, yo compré este:



Es un lector marca bit4id usb. Esto es lo que sale de un lsusb:

Bus 005 Device 003: ID 072f:90cc Advanced Card Systems, Ltd ACR38 SmartCard Reader


y esto es parte de lo que sale cuando conecto el lector en el puerto USB

usb 5-1: new full-speed USB device number 3 using uhci_hcd
usb 5-1: New USB device found, idVendor=072f, idProduct=90cc
usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
usb 5-1: Product: CCID USB Reader
usb 5-1: Manufacturer: ACS

Esta compañía tiene un sitio web donde tienen algo de información para linux

http://www.bit4id.com/es/soporte/instalacion.php

Nota: Cuando hice la prueba de insertar el DNI, el led no permaneció encendido 15 segundos, pero si 5.

Instalación de software

Esta es la parte "complicada" porque no hay paquetes de opensc para wheezy ni en la página de la policía ni en los repositorios oficiales de Debian que sea capaces de leer el DNIe.

La gente de opendnie tiene un .deb de opensc que es una modificación del "oficial" de Debian y es esta modificación la que hace que opensc funcione con el DNI electrónico. Todo esto al momento de escribir este post (24 de Febrero de 2013)

A continuación coloco los pasos que seguí para el DNIe funcionara en wheezy:

  1. Verificar que se tienen estos paquetes instalados:
    libltdl7
    libssl1.0.0
    zlib1g

  2. Descargar e instalar opensc_0.12.1-1-svn385_i386.deb
    # cd /usr/local/src
    
    # wget https://forja.cenatic.es/frs/download.php/file/1305/opensc_0.12.1-1-svn385_i386.deb
    
    # dpkg -i opensc_0.12.1-1-svn385_i386.deb
    

  3. Instalar los paquetes  pcscd y pcsc-tools
    # aptitude install  pcscd pcsc-tools

  4. Como instalamos un opensc que no es el oficial, debemos evitar que se actualice cuando hagamos un aptitude upgrade.
    # aptitude hold opensc

  5. Creamos un enlace simbólico para  libpcsclite.so.1
    # cd /usr/lib
    
    # ln -s /usr/lib/i386-linux-gnu/libpcsclite.so.1

  6. Instalar los siguientes paquetes para tener algunas utilidades importantes para trabajar con cualquier tarjeta inteligente
    aptitude install pinentry-gtk2 libnss3-tools

Hasta aquí la instalación de software.

Verificación

Para verificar que todo está correcto, utilizamos el programa pcsc_scan y así comprobar que el lector funciona y lee el DNIe.

Insertamos el lector en un puerto usb y en un terminal ejecutamos
pcsc_scan

Deberíamos obtener una salida parecida a esta:
$ pcsc_scan
PC/SC device scanner
V 1.4.20 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC lite version: 1.8.3
Using reader plug'n play mechanism
Scanning present readers..
0: ACS AET65 00 00

Sun Feb 24 11:09:37 2013
Reader 0: ACS AET65 00 00 
 Card state: Card removed, 

El programa no devuelve prompt, así que no se susten.

Insertamos el DNIe en el lector y deberíamos ver como salen una serie de mensajes en el terminal. Las últimas líneas deberían ser algo como esto:

       DNI electronico (Spanish electronic ID card)
       http://www.dnielectronico.es

Si esto es así, el sistema operativo reconoce al lector y es posible usar el DNIe en wheezy, si no es así, revisar los pasos anteriores.

Ya podemos salirnos del terminal y desconectar el lector.


Configuración de Firefox para utilizar el DNIe.

En esta sección describiré como hacer funcionar el DNIe con firefox ya que es lo interesante, entrar a los sitios como el banco o hacienda (es interesante entrar en el sitio de hacienda?????) para realizar operaciones que requieran nuestra identificación.

Básicamente, lo que haremos es bajar e instalar el certificado raíz de la policía, decirle a firefox que use el DNIe como dispositivo de seguridad e instalar el plugin de java de Sun ya que con el icedtea no me funcionó la petición de PIN que hace el banco para identificar a alguien con DNIe.

Nota importante: El paso en el que le decimos a firefox que use el DNIe como un dispositivo de seguridad requiere que firefox no esté corriendo.

Certificado raíz de la Policía

Debemos ir a este sitio;

http://www.dnielectronico.es/seccion_integradores/autoridades_cert.html

y bajarnos el certificado raíz de la policía, en mi caso, el archivo que me bajé fue:

Certificado pkcs1-sha256WithRSAEncryption

http://www.dnielectronico.es/ZIP/ACRAIZ-SHA2.zip

Una vez descargado, hay que descomprimir el zip y obtendremos un archivo llamado  ACRAIZ-SHA2.crt

En firefox (18.0.2) realizamos el siguiente procedimiento:
Edit -> Preferences -> Advanced -> Encryption -> View Certificates -> Authorities -> Import

Buscamos y elegimos el certificado descargado ACRAIZ-SHA2.crt.

Nos saldrá una ventana preguntándonos para qué porpósitos vamos a confiar en este certificado y seleccionaremos todas las opciones.


Hacemos click en OK y listo, ya tenemos la CA de la policía en nuestro repositorio de certificados de firefox.


Ahora viene un paso muy muy importante y es necesario cerrar firefox, por lo tanto, hay que copiar el siguiente comando en algún lado y ejecutarlo como usuario "normal" (no como root) solo cuando firefox esté cerrado. En este paso le diremos a firefox que use al DNIe como dispositivo de seguridad.

Repito, este comando debe ejecutarse cuando firefox no esté corriendo. Cuando firefox esté cerrado, ejecutarlo como usuario, no como root.

$ modutil -dbdir ~/.mozilla/firefox/$(cat ~/.mozilla/firefox/profiles.ini | \
grep Path | awk -F"=" '{print $2}') -add "DNIe" -libfile /usr/lib/opensc-pkcs11.so

El comando debería ejecutase sin problemas.

Para verificar que tenemos el DNIe como dispositivo de seguridad en firefox realizamos lo siguiente en este orden:

  1. Desconectamos el lector de trajetas inteligentes (si no lo hemos hecho ya)
  2. Reiniciamos el demonio pcscd
    # /etc/init.d/pcscd stop
    # /etc/init.d/pcscd start
    

  3. Conectamos de nuevo el lector de tarjetas inteligentes
  4. Abrimos firefox y vamos a Edit -> Preferences -> Advanced -> Encryption -> Security Devices

    y deberíamos obtener algo como esto:


 Si no obtenemos esto, es probable que no se hayan seguido los pasos anteriores. Habría que cerrar firefox, desconectar el lector, reiniciar pcscd, conectar el lector y ejecutar firefox.

No se si es un bug, pero el lector tiene que estar conectado antes de ejecutar firefox (la mayoría de las veces).


 Instalación del plugin de java de SUN

Solo resta instalar el plugin de java de SUN (Oracle). No coloco las instrucciones porque hay muchos sitios que ya lo hacen.

A mi no me funcionó el icedtea, cada vez que un sitio me iba a pedir el PIN me salía el mensaje de error  "changing the securitymanager is not allowed".

Referencias

https://forja.cenatic.es/projects/opendnie/

https://wiki.tegnix.com/wiki/DNI_electronico


Eso es todo, espero que sirva.