18 de julio de 2008

Sensibilidades y despedidas...

Desde luego, no se puede decir que en los últimos tiempos esté fino, no. Más bien todo lo contrario: cada día que pasa, más y más problemas llegan a mi puerta para que les reciba con los brazos abiertos y predispuesto a solucionarlos... O a intentarlos al menos... O, al menos, eso es lo que esperan.

Pues, como ser humano, mi paciencia y motivación tiene límite, y el mío se sobrepasó hace tiempo. Cada día ando más convencido de que mi futuro es estar sólo, pues cada día que pasa, se me hace más real el hecho de que nadie más me entiende, ni nadie más puede ayudarme. Yo soy la llave de mi felicidad. Un aseveración muy cruda dicha así, de sopetón, pero muy muy cierta al mismo tiempo.

Lo mejor/peor de saberlo y vivir con ello, es que no esperas nada más de nadie que lo que pueden aportarte, lo cual es un alivio para las personas que me rodean, pues mis exigencias, si alguna chica se planteara la macabra idea de querer convivir conmigo durante X tiempo, son bastante altas: soy insoportable, susceptible, cabezota y tengo un punto autista: me gusta estar sólo; no en vano, paso mucho tiempo sólo y disfruto con el hecho de que nadie moleste cualquier cosa sin sustancia que me apetezca hacer en mi soledad.

No me interpreten mal, me encanta la compañía, disfruto las cenas con amigos que organizo en mi casa, me gusta que mi casa sea centro de unión de mis amig@s, que se sientan cómodos y que vengan cuando les venga en gana. Pero estando en pareja, como estoy, noto cada vez más esa sensación de ahogo, de no poder llegar a donde quiero por causas que yo no puedo controlar, que son externas a mi, y todo se me va haciendo cada vez más cuesta arriba por pensar SIEMPRE en lo que a la otra persona le gustará más/menos, le molestará más/menos o lo que le apetecerá hacer más/menos, y si eso irá más/menos en contra o a favor de lo que a mi me apetece y lo dispuesto que estoy a adaptarme a situaciones que para mi son insulsas, carecen de sentido para mi bienestas personal o, simplemente, me aburren soberanamente. Tampoco creo que eso sea la definición de "vivir en pareja", pero es lo que yo he vivido.

Y tampoco se equivoquen, quiero a mi pareja con locura, pero necesito que se "despegue" de mi un poco, que me de mi espacio. Es muy difícil convivir 24 horas y que no haya nada que te moleste pasados los primeros 3 meses de relación (el umbral donde empiezan las parejas, de verdad, a conocer sus escasas virtudes y sus numerosos defectos), pero más difícil se hace estar discutiendo por cualquier cosa que a cualquiera de los 2 nos haya molestado, a cualquier hora del día, y en cualquier situación. No, no es agradable, ni sano, no es así como yo me veo. Y lo peor no es eso, es que, en cualquier caso, los 2 tienen razón. Que si dijiste eso y me dolió, que si fue fuera de lugar, de que siempre me reprochas X, de que te has dejado la taza de WC abierta, que has dejado los zapatos en tal sitio y me tropiezo, que mi orden es este, que no quiero ver ese canal pon otra cosa menos estúpida, etc... Es decir, multitud de situaciones que, en mayor o menor medida, son realmente la convivencia entre personas, que seguro aguantarías a un amigo, pero no a tu pareja.

Extraño si, pero cierto. Al menos, eso me pasa a mi, y cada día que pasa me vuelvo más intransigente, me molestan más cosas, tengo menos paciencia. Si a eso le sumamos los problemas cotidianos individuales, los familiares de cada cual y un problema puntual de trabajo, ya tienes armado El Belén. ¿Cómo conseguimos pues que nuestra relación sea lo más sana posible sin llegar a volvernos locos por conseguirlo y hacerlo de tal manera que no estorbe la progresión personal de cada uno? Porque de una cosa estoy seguro: por muchas cosas que me puedan molestar de mi pareja, luego están los llamados intangibles, que son los que te recuerdan por qué estás enamorado hasta la médula de esa persona y por qué vives con ella y no quieres separarla de tu lado. ¿Contradicción? Si. ¿Locura? Por supuesto que si, es amor, ¿qué esperaban?.

Por lo menos escribiendo me desahogo y me abstraigo del mundo por un rato.

Saludos de viernes con sabor a despedidas de grandes amigos y sensibilidades que hoy se tocarán en mayor medida. Deseenme suerte.

FoN
Tags Technorati: , , , , ,

9 de julio de 2008

Malos tiempos, nuevos tiempos...

En fin, parece que cuanto más cerca está la meta, más me cuesta llegar a ella, o al menos esa es la sensación que se desprende tras mi fatlísitico mes de exámenes, ya que no he podido aprobar ninguna de las 4 asignaturas que me restan para terminar la carrera, por lo que tendré un verano un tanto movidito. Todo lo contrario a lo planeado. Vamos, que me he desviado del objetivo un 100%. Malos tiempos para mi mente, que se ve saturada por un año difícil e injusto y que ya no desea, al menos por el momento, almacenar más información, y me lo transmite en forma de sueño, incapacidad para concentrarse y dificultad para recuperar conceptos ya manidos.

Año difícil, nuevos tiempos, nuevos retos, trabajo y más trabajo: aquí no se para.

Creo que lo más difícil, de todos modos, ya está hecho: encarrilada la carrera, el verano supone machacar conceptos ya tratados y comprendidos, hasta que sean "palabra de teleco...". Sin pararme a pensar, vamos, sólo actuar. También empezando lo profesional, con nuevos e interesantes proyectos a la vista. Encarrilado también el proyecto fin de carrera, que empieza a ver la luz en forma material y no sólo, digamos, académica.

Lo que no está nada encarrilado, y creo que nunca lo estará, es el tema personal. Necesito abstraerme más de lo que me rodea, del entorno, pues tampoco me está ayudando a encontrar ese punto de equilibrio necesario para tener una estabilidad que me permita seguir adelante con paso firme. Mi paso es más bien dubitativo. Y de ese paso tengo también un pequeño esguince en el tobillo izquierdo. Contratiempos.

Así que me he propuesto, a lo largo que resta del mes, centrarme en varios asuntos que tengo pendientes, para finiquitarlos de tal manera, que me permitan entrar en el mes de Agosto con pasillo libre, para alcanzar la recta final y saltar las últimas vallas del recorrido de la manera más limpia posible, sin errores que me priven de la victoria.

Saludos de miércoles con sabor a reencuentro y horas de trabajo.

FoN

7 de junio de 2008

Comunicación por bluetoth entre un terminal móvil y un GPS bluetooth en J2ME...

A continuación, y como muestra de frikismo, os presento el código asociado a la comunicación bluetooth entre un terminal móvil y un GPS.

Funciona, os lo aseguro. Si no me creéis, probadlo. Mola.

/* TITULO DE LA APLICACIÓN: practicaGPS
AUTOR: FoN
DESCRIPCIÓN: Generación de una clase que va a crear una conexión bluetooth con un GPS bluetooth y éste le va a responder
con la posición geográfica en que nos encontramos (latitud, elevación, longitud y orientación)
VERSIÓN: 1.0 */

/* Librerías necesarias */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.bluetooth.*;
import java.io.*;
import javax.microedition.io.*;

/* Creación de la clase que extiende de MIDlet e implementará las interfacez CommandListener y DiscoveryAgent
Estas interfaces sirven para la comunicación de órdenes al terminal (CommandListener tiene asociado un método abstracto commandAction implementado más abajo) y para el descubrimiento y tratamiento de terminales bluetooth (DiscoveryAgent) */
public class AplicacionGPS extends MIDlet implements CommandListener, DiscoveryListener
{
private Display pantalla;
private Command salir, buscar;
private Form formulario;
private List lista;
private LocalDevice local;
private DiscoveryAgent agente;
private TextBox infoPos;
private StreamConnection conn;
private InputStream in;

/* CONSTRUCTOR: creamos todos los elementos necesarios al iniciar la aplicación */
public AplicacionGPS()
{
/* Inicializamos el objeto Displayable a null */
pantalla = null;

/* Creamos la orden SALIR */
salir = new Command("Salir", Command.EXIT, 0);

/* Ponemos el formulario como pantalla activa */
formulario = new Form("Informacion del dispositivo local");
formulario.addCommand(salir);

/* Se crea un lista de dispositivos */
lista = new List("Lista de dispositivos", Choice.IMPLICIT);
lista.addCommand(salir);
lista.setCommandListener(this);

/* Si no se encuentran dispositivos conocidos, se buscan y se añaden a la lista */
buscar = new Command("Buscar", Command.OK, 1);
formulario.addCommand(buscar);
formulario.setCommandListener(this);

/* Objeto TextBox */
infoPos = new TextBox("Posicion geografica", "Buscando...", 50, TextField.ANY);
infoPos.addCommand(salir);
infoPos.setCommandListener(this);
}

/* Método para pausar la aplicación en curso (se necesita declarar, pues implementamos una interfaz y este método es abstracto) */
public void pauseApp() {}

/* Cuando salimos de la aplicación, cerramos la conexión con el GPS */
public void destroyApp(boolean t)
{
try
{
if (conn!=null) conn.close();
if (in!=null) in.close();
}

catch(IOException ioex) {}
}

/* Método implementado para comenzar la aplicación */
public void startApp()
{
if (pantalla == null)
{
/* Obtenemos las características de la pantalla del terminal */
pantalla = Display.getDisplay(this);

/* Y le ponemos como pantalla activa un objeto de la clase Form */
pantalla.setCurrent(formulario);

try
{
/* Obtenermos las características del terminal local */
local = LocalDevice.getLocalDevice();
agente = local.getDiscoveryAgent();

/* Y la mostramos por la pantalla activa */
getInfo();
}

/* Capturamos la excepción BluetoothStateException */
catch (BluetoothStateException bse) {}
}
}

/* Implementación del método abstracto asociado a la interfaz CommandListener */
public void commandAction(Command c, Displayable d)
{
if (c == salir)
{
destroyApp(true);
notifyDestroyed();
}

/* Vemos si buscamos dispositivos */
else if (c == buscar)
{
/* Borramos los elementos de la lista para iniciar el Inquiry */
lista.deleteAll();

try
{
/* Iniciamos el Inquiry (busqueda de dispositivos bluetooth mediante APIs) */
agente.startInquiry(DiscoveryAgent.GIAC, this);
}

catch(BluetoothStateException bse)
{
formulario.append("Error de dispositivo BT");
}
}

/* O si seleccionamos un elemento de la lista de entre los dispositivos encontrados o ya conocidos */
else if (c == List.SELECT_COMMAND)
{
try
{
/* Obtenemos su dirección bluetooth */
String dir = lista.getString(lista.getSelectedIndex());

/* Y abrimos la conexión bluetooth para la comunicación de datos */
/* El GPS siempre será un esclavo, por lo que únicamente obtendremos datos de él */
conn = (StreamConnection)Connector.open("btspp://"+dir+":1", Connector.READ);
in = conn.openInputStream();

/* Si la apertura fue satisfactoria, pasamos a obtener los parámetros para mostrar */
if ((conn != null)&&(in != null)) escucharGPS();
}

catch (IOException ioex) {}

/* Y ponemos como pantalla activa el TextBox donde veremos los datos a mostrar */
pantalla.setCurrent(infoPos);
}
}

/* Este método obtiene la información de los terminales remotos y se pone él en modo Discoverable, para poder
ser descubierto por otros dispositivos */
void getInfo()
{
formulario.append(local.getBluetoothAddress() + "\n");
int modoI = local.getDiscoverable();
String modoS = "";

switch(modoI)
{
case DiscoveryAgent.GIAC: modoS = "GIAC";
break;
case DiscoveryAgent.LIAC: modoS = "LIAC";
break;
case DiscoveryAgent.NOT_DISCOVERABLE: modoS = "No descubierto";
break;
}

formulario.append(modoS + "\n");
formulario.append(local.getFriendlyName() + "\n");
formulario.append(local.getProperty("bluetooth.master.switch") + "\n");
formulario.append(local.getProperty("bluetooth.api.version"));

try
{
local.setDiscoverable(DiscoveryAgent.GIAC);
}

catch(BluetoothStateException bse){}
}

/* Método que pone al terminal en modo escucha
No es más que la invocación a un Thread que nos va a capturar información del GPS para tratarla */
private void escucharGPS()
{
Thread thr = new Thread()
{
public void run()
{
try
{
StringBuffer informacion = new StringBuffer();
int dato;

while(in.read() != (int)'$');

while((dato = in.read()) != 13) informacion.append((char)dato);

String temp = informacion.toString();
String infoGPS = temp.substring(0, temp.length() - 1);

/* De entre las muchas tramas que puedo recibir, sólo trato 2 en concreto que
me mostrarán el posicionamiento de mi terminal, el resto las descarto */
if ((infoGPS.indexOf("GPRMC") == 0) || (infoGPS.indexOf("GPGGA") == 0) presentarInfo(infoGPS);
else escucharGPS();
}

catch(IOException ioex) {}
}
};

thr.start();
}

/* Método que me va a presentar por pantalla los detalles del posicionamiento que he descrito en el inicio.
Evidentemente, cada trama tiene un formato que debe ser conocido de antemano para poder tratarlas de manera
adecuada y seleccionar la información que cada uno quiera mostrar */
void presentarInfo(String cadena)
{
String latitud, longitud, a, b;
int i = cadena.indexOf(',');
System.out.println ("i = " + i + " " + cadena.substring(0, i));

if (cadena.substring(0, i).compareTo("GPRMC") == 0)
{
i = cadena.indexOf(',');
i = cadena.indexOf(',' , i + 1);
i = cadena.indexOf(',', i + 1);

/* Latitud*/
latitud = cadena.substring(i+1, cadena.indexOf(',', i+1));

/* Elevación */
i = cadena.indexOf(',', i + 1);
a = cadena.substring(i+1, cadena.indexOf(',', i+1));
if (a.compareTo("N") == 0) a = "Norte";
else a = "Sur";

/* Longitud */
i = cadena.indexOf(',', i + 1);
longitud = cadena.substring(i+1, cadena.indexOf(',', i+1));

/* Orientación */
i = cadena.indexOf(',', i + 1);
b = cadena.substring(i+1, cadena.indexOf(',', i+1));
if (b.compareTo("E") == 0) b = "Este";
else b = "Oeste";
}

else
{
i = cadena.indexOf(',');

/* Latitud*/
i = cadena.indexOf(',' , i + 1);
latitud = cadena.substring(i+1, cadena.indexOf(',', i+1));

/* Elevación */
i = cadena.indexOf(',', i + 1);
a = cadena.substring(i+1, cadena.indexOf(',', i+1));
if (a.compareTo("N") == 0) a = "Norte";
else a = "Sur";

/* Longitud */
i = cadena.indexOf(',', i + 1);
longitud = cadena.substring(i+1, cadena.indexOf(',', i+1));

/* Orientación */
i = cadena.indexOf(',', i + 1);
b = cadena.substring(i+1, cadena.indexOf(',', i+1));
if (b.compareTo("E") == 0) b = "Este";
else b = "Oeste";
}

/* Mostramos la información relevante con respecto a las 2 tramas validadas */
infoPos.setString("Latitud: " + latitud + ", " + a + "\n" + "Longitud: " + longitud + ", " + b);
}

/* Conjunto de métodos asociados a la interfaz DiscoveryAgent, que hay que declarar al usar Inquiry para
buscar dispositivos */

/* Estos 2 métodos hay que declararlos (ya que son métodos abstractos de la interfaz DiscoveryAgent), pero en
este caso, no es necesaria su implementación */
public void servicesDiscovered(int transID, ServiceRecord[] rd) {}

public void serviceSearchCompleted(int transID, int tipo) {}

/* Método que me inserta por el frente de una lista las direcciones bluetooth de los dispositivos encontrados
en el Inquiry */
public void deviceDiscovered(RemoteDevice rd, DeviceClass dc)
{
lista.insert(0, rd.getBluetoothAddress(), null);
}

/* Método asociado al Inquiry que me mostrará por la pantalla activa la dirección bluetooth de los dispositivos
encontrados, en caso de existir alguno */
public void inquiryCompleted(int tipo)
{
if (lista.size() == 0)
{
lista.insert(0, "No hay dispositivos al alcance", null);
lista.addCommand(buscar);
}

pantalla.setCurrent(lista);
}
}

Ahí es nada.

FoN

6 de junio de 2008

El principio del fin...

Empieza la hora de verdad: la hora de los exámenes finales.

Y esta vez son finales de verdad, pues son los últimos de la carrera técnica que estoy haciendo (no serán los últimos de mi vida pues debo decidir si hacer la superior o no, pues es una espinita clava en el alma). La fiesta ha empezado hoy: Tecnologías Telemáticas Avanzadas. Y ha ido bien (como no podía ser menos en una asignatura optativa, con un examen optativo que valía el 20% de la nota final), teniedo en cuenta que no he estudiado, pues lo realmente importantes empiezan el lunes con el segundo parcial de Circuitos eléctricos, y terminaré con el examen de convocatoria de Programación el día 4 de Julio (pues la profesora me hace presentarme finalmente). Entre medias, varios más: Cálculo II (12 de Junio), segundo parcial de Programación (16 de Junio) y examen de convocatoria de Circuitos eléctricos (30 de Junio).

5 exámenes, 5. 5 (por el c*** te la hinco) ... Pues eso. Y además el proyecto, que va bien, y en Agosto (crucemos los dedos) estará todo listo para pasar página y enfrentarme a un verano que espero sea todo lo relajante que ha sido este año de estresante. Realmente lo necesito. 1 mes sin móvil, lejos del mundanal ruido y disfrutando de las cosas que me gustan hacer: novia, amigos, entrenar y disfrutar con calma de la vida, sin agobios. Ya llegará septiembre y llegará el momento de hacer el examen de Electrónica básica, que es la que he decidido dejar por problemas de tiempo y, pro supuesto, el lío administrativo para presentar el proyecto al tribunal, papeleo, colegiarme, pagar el título, etc...

Saludos de viernes con sabor a cuenta atrás...

FoN

17 de mayo de 2008

Empezando de nuevo...

Vaya por Dios...

Meses leyendo documentación, aprendiendo a manejar una plataforma determinada para desarrollo web y resulta que... el hosting bajo el que se va a alojar el portal no soporta Java! Todo el trabajo tirado a la basura.

Cambiamos a PHP e iniciamos ya la memoria del proyecto, donde reflejaré todas las trabas que imponen las empresas de hosting para mantenimiento de aplicciones ava.

En fin, volver a empezar, sólo que esta vez iremos un poquito más rápido, ya que con Drupal casi todo está hecho y sólo es cambiar el front-end y crear la base de datos de socios.

PFC... Allá voy!... De nuevo!

FoN

5 de mayo de 2008

Miserias de un cobarde...

"[...] Y enfrente: la nada...

Una nada tan espesa que apenas podías distinguir lo real de lo ficticio: de película...

Especialmente para enmarcar, es el momento en que, nuestros protagonistas, chocan de bruces contra la cruel realidad que les acecha: no son capaces de despertar del sueño en que se han enfrascado. Suena extraño. Que un grupo de personas no pueda (no, que no quiera) despertar, puede parecernos una situación ridícula, pero nada más lejos de la realidad: no pueden despertar. Algo los paraliza. Dormidos. Difícil situación para quien no entiende de sueños, para quien no entiende de agonía en un sueño.

Pero dejemos a un lado la agonía para centrarnos en lo que nos ocupa: nuestros protagonistas se encuentran ante un laberinto de sensaciones que tienen que interpretar para poder romper las ataduras (que existen) y devolverlos al lugar del que fueron arrancados semanas atrás: la realidad. [...]"

¿Se imaginan no poder despertar? Pues de esta macabra historia (propia, por cierto, e inacabada), podemos deducir varias de las situaciones a las que diariamente nos enfrentamos: sueños rotos, sueños ideales, perfectos, sueños...

Os dejo con el enigma. ¿Algún voluntario para comentar su propia historia?

FoN

1 de mayo de 2008

Cuando no se da para más...

Extasiado...Ansioso...

Quemado...

Palabra que definen mi estado de ánimo tras este último año de infarto que he vivido, tanto en lo personal como en lo profesional. Estamos en Mayo ya y quién me diría a mi que a estas alturas del camino, ya uno está cansado. Pero la verdad es que lo estoy, y mucho. Necesito un descanso. Llevo demasiado tiempo sin vacaciones y necesito que mi cuerpo respire, cargue pilas y se reactive de nuevo para los meses venideros.

Todo muy bonito, ¿verdad? El tema es que será imposible hacer tales cosas hasta, por lo menos, Julio, mes en el que, presuntamente, habré acabado con la carrera, el PFC, la web del Vicerrectorado de Relaciones Internacionales, la liga con los niños y la planificación de la siguiente temporada, y demás entuertos que van saliendo aquí y allá, sin parar. ¿De algo hay que vivir, no?

Pero en serio, necesito parar, coger aire, relajar un poco el cuerpo y la mente, desahogarme, desconectar y volver a ser el de siempre. Porque además, siento que mi cabeza no da ya para mucho más. Mucha información en pocos meses. Probablemente este haya sido el año más productivo en materia de conocimientos de mi vida. Pero necesito parar un poco, centrarme de nuevo.

En fin, podría seguir divagando, pero ya ni para eso me da la cabeza, hoy, día 1 de Mayo de 2008, festividad de los trabajadores estoy yo, trabajando, estudiando y planificando.

FoN

27 de abril de 2008

Mola el J2ME...

Lo que a continuación os voy a presentar en las capturas que veis más abajo, son los resultados de mi primera experiencia en la programación de aplicaciones para terminales móviles en J2ME (Java 2 MicroEdition) y, la verdad es que, salvo algún que otro error subsanado, debido a mi inexperiencia con el manejo de estos métodos, la verdad es que es relativamente sencillo diseñar e implementar una aplicación para este tipo de terminales.

En fin, no es gran cosa ni esperéis grandes artificios, pero estoy bastante satisfecho con el resultado.





¿Qué os parece? No es nada del otro jueves, pero.. ¿mola, verdad?



FoN


24 de abril de 2008

Aprendiendo a programar portlets para Liferay...

Menudo coñazo... A este paso voy a ser un experto en el uso de tecnologías Java para programar todo tipo de aplicaciones, ya sean web, para móviles, para mi, frontends, o lo que sea, porque la verdad es que me está costando más de lo que pensaba arrancar de verdad con el PFC, ya que la herramienta utilizada es más compleja de lo que pensaba.

Menos mal que ando en contacto con más gente que desarrolla en Liferay, porque si no, estaría más perdido que un pulpo en un garaje.

En fin, seguiré sufriendo que el fin, en este caso, justifica los medios. Todo sea por terminar de una puñetera vez.

FoN

21 de abril de 2008

Fuerzas para la recta final...

¿Alguien sabe de algún remedio casero para recuperar las fuerzas que antaño exhibía en situaciones límite? Lo pregunto porque ahora mismo carezco de ellas y estoy, últimamente, teniendo más problemas de salud que en ningún otro año que yo recuerde (habría que preguntarle a mi madre para eso).

¿Será que me hago viejo? No se, pero vamos, que parece que me dejó más tocado de lo habitual el mes de exámenes de Febrero, pues parece que no me he recuperado de las pocas horas de sueño, las comidas rápidas y los esfuerzos mentales. ¿Será que soy alérgico a aprender? Como mi salud se siga resintiendo de estas formas tan poco comunes en mi, lo voy a pasar mal, ya no a nivel físico (que eso es evidente), sino psicológico, porque los deadlines son los deadlines, y los objetivos están fijados y están más que claros: Junio se acerca y estoy a un 20% de rendimiento y, lo que es peor, no lo puedo superar pues, cuando me pongo, caigo enfermo, y van muchas veces este año.

Y lo que más me preocupa no es que no pueda llegar a los finales con garantías, sino que, ¿qué haré cuando realmente no pueda alargar nada los deadlines en el mundo profesional y se me junten diferentes proyectos con el mismo nivel de prioridad (o sea, para antes de ayer)?

Preguntas que el tiempo resolverá por si mismo, pero no me digan que no es para preocuparse.

FoN