Traqueo de Satélites desde Internet

 

Proyecto final de ELO330 – Programación de Sistemas.

Realizado por Daniel Doris Cabezas, ddoris [at] elo.utfsm.cl

 

Introducción

El traqueo (del inglés “track”, seguir la pista a algo) de Satélites desde Internet es una herramienta que permite acercar la actividad aeroespacial a toda la comunidad científica, e incluso a los aficionados. Bastando un computador, conexión a Internet y un navegador equipado con la posibilidad de leer los últimos protocolos de web dinámica, se puede observar la posición de los satélites y otros elementos que vuelan por el espacio desde la comodidad del hogar.

 

 

Sin embargo, al estar estas herramientas embebidas en una página web permiten generalmente un acceso de sólo lectura, y muchas veces un investigador desearía llevar un registro en su computador de los datos. Es por esto que se realiza este proyecto, que busca modificar y darle un nuevo marco a las aplicaciones web para que puedan correr desde el computador local y además ofrezcan la posibilidad de guardar en un archivo los datos mostrados.

En particular, en este informe se presenta el trabajo realizado sobre la web:
 
http://science.nasa.gov/realtime/jtrack/NOAA.html
 
Pero existen otras dos páginas de traqueos que están aún pendientes por trabajar:
 
http://www.amsat.org/amsat-new/tools/predict/satloc.php
http://www.n2yo.com/

 

 

Desarrollo

El primer paso para lograr lo anterior es entender como funciona una aplicación web de este estilo. En general, las aplicaciones dinámicas trabajan como applets de Java, y en casos más especiales utilizan formato web dinámico que se comunica con un applet o un javascript (por ejemplo, Ajax). Dado lo anterior, es necesario buscar en el código fuente de la página en cuestión y ubicar los archivos de interés. Por ejemplo:

 

 

Es el código fuente de la página del traqueador de la nasa. Como puede observarse, la página se comunica con el applet mediante los valores de parámetros, y además estos parámetros apuntan a documentos de imagen o texto que son utilizados por el applet. Para entender más a fondo todo el procedimiento es necesario leer el código del applet, para lo cual vamos a utilizar una herramienta llamada decompilador, la cual pasa de código byte a código java, el cual es más sencillo leer. En particular quedé satisfecho con el desempeño de Jad, disponible en http://www.kpdus.com/jad.html, el cual es bastante sencillo y eficiente de usar. Si bien tiene el problema de correr desde consola, existen muchos frontends disponibles (y hacer uno también puede ser un buen proyecto). Un ejemplo de la ejecución de Jad:

 

 

Lo cual nos genera un archivo .jad, que es lo mismo que uno .java. Esto logra traspasar un código byte como:

 

Êþº¾   2


˜

¾¿     [1]“.            EÁÂÃ

ÄÅÆ

 

Ç

...

 

A algo más entendible, como:

 

public class JTrack extends Frame

    implements Runnable

{

 

    private void jm0(boolean flag)

        throws InterruptedException

    {

        long l = jm348.jm357();

        if(l - jm20 > 0x2932e00L && jm27 == null)

...

 

Sin embargo, este no es el final del camino, ya que entender el código de un applet de ochocientas líneas más otros seis archivos de código de cuatrocientas líneas más no es tarea sencilla. Sin embargo, nada es imposible, y con un poco de paciencia se pueden lograr buenos resultados. En general, lo más importante es cambiar métodos nativos de un applet por otro que pueda ser realizado por un frame.

 

Una vez que se ha logrado trabajar el código a un nivel aceptable, se pueden obtener resultados como:

 

 

El cual vemos que se encuentra en un frame corriendo desde java en el computador local.

0K, esta es sólo la primera parte. La segunda motivación del proyecto es lograr guardar los datos de interés en un archivo. Para esto es necesario seguir leyendo el código, y encontrar el método que se encarga de escribirlo. Después de una alegre jornada de lectura de código críptico, se encuentra el método. Como ejemplo, se muestra la consola de la aplicación, la cual despliega las mismas líneas de interés:

 

 

Aquí ya todo va sobre ruedas, y tan sólo es necesario tomar el string y guardarlo según el gusto del consumidor. Si queremos darle un sabor más a programación de sistemas se puede ejecutar un llamado mediante RunTime a una aplicación shell que apende los datos a un archivo. Esto sería bastante práctico, ya que las decisiones de formato quedarían encapsuladas en la aplicación shell y no sería necesario recompilar o crear un complejo menú en la aplicación java.

Ahora, si estamos corriendo en Windows, o de paso no nos interesan las aplicaciones shell, basta un llamado a:
 
new BufferedWriter(new FileWriter("archivo.txt"));
BufferedWriter.write(“datos”, off, len); 
 
Y así termina la resolución del proyecto con la primera aplicación web. 
 

Conclusiones

Pues bueno, de partida se concluye con el éxito del desarrollo de una aplicación de traqueo de satélites basada en web que corra desde el computador local, implementando además la posibilidad de guardar un archivo con los datos.

Recapitulando los pasos de este proceso: se busca el medio en el cual la página web despliega su información dinámica, en caso de utilizar applets se decompila su información, se reemplazan los métodos nativos del applet con métodos posibles en un frame, y se busca el código que despliega los datos y se añaden las líneas que guardan estos en un archivo.

Como trabajo a futuro, es necesario de partida resolver el desarrollo de las otras dos páginas. Además, es necesario observar el comportamiento de la aplicación ya desarrollada, ya que es posible que contenga bugs después de la transformación (de hecho, ya le pillé uno...).

 

Archivos

En caso de que usted sea una persona curiosa y desee jugar con la aplicación desarrollada, acá pongo a su disposición un archivo .zip con los fuentes y otros cosos necesarios para ejecutar. No olvide que debe compilar y ejecutar con java.

 

---> Jtrack.zip