Tuesday, June 16, 2015

Noche extrema en el salto de los micos

14 de Junio de 2015

Nos levantamos muy temprano ese domingo, dispuestos (como habíamos planeado esa misma semana) a pasar una aventura outdoor.

En esta ocasión no tuvimos acompañantes, solo eramos mi esposa (Angie) y yo, y lo que pretendíamos era pasar un día en las deliciosas Cascadas llamadas Salto de los Micos, y luego de finalizar la aventura, terminar de rematar en un bar del Municipio de Villeta (esa era la idea macro del paseo).

Entonces fue así, que decidimos salir de Bogotá a las 7:30am para tener tiempo de sobra para sortear cualquier imprevisto.

Como no es de extrañar, la vía hasta Villeta, congestionada y hasta un par de accidentes que atrasaron la duración de nuestro recorrido.

Llegamos al pueblo tipo 9.45am, y sin perder tiempo empezamos a indagar como se llegaba al inicio de estas Cascadas (lastimosamente la información que nos daban era errada, pues las preguntas eran las que en verdad estaban erradas).

En el pueblo, es común visitar las Cascadas en sentido inverso (es decir ascendiendo), pues como atractivo del pueblo los visitantes solo van y alcanzan a conocer las dos primeras (que son las dos últimas, contándolas de arriba hacia abajo)

Aclaración: Las Cascadas de los Micos son 7 majestuosas Cascadas en medio de un bosque seco-tropical.

Ya con las información medianamente clara procedimos dejar el vehículo en el que nos transportabamos en un lugar seguro y cerca a donde inician dichas Cascadas. Nos recalcaron mucho sobre la inseguridad que aveces se presenta por el sitio, y la idea no era dar papaya.

Hablamos con los dueños de un restaurante, los cuales accedieron a cuidarnos el coche a cambio de comprarles los almuerzos.

Ya apunto de iniciar nuestra aventura, ohh sorpresa 😲 las llaves del auto se quedaron encerradas dentro del mismo, así que figuró primero realizar otra misión antes y no era opcional.

Nos fuimos a pata desde el restaurante que está a las afueras del pueblo hasta al otro extremo, también casi a las afuera. En donde se encontraban los mecánicos y todo lo relacionado al auto. Para no déscribir al detalle de esta misión puede resumirse básicamente en que el problema se resolvió exitosamente aproximadamente en dos horas y media.

Siendo la 1:00pm, empezábamos muestra aventura (...  Y si, ya era muy estricto empezar la actividad a esa hora, y de seguro no íbamos a alcanzar de descender todas las Cascadas y figuraría abandonar), hacia el inicio del camino de las Cascadas.

No habíamos caminando ni 100 metros del camino (sendero) cuando había algo que no me tramaba, y era el sentido del caudal del río que pasaba al lado nuestro.
Nos acercamos a unas personas lugareñas, para que nos confirmarar la información que nos habían dado en el pueblo. Y adivina, estábamos al final de las Cascadas (lugar equivocado), nos dijeron que debíamos tomar un camino cerca a una vereda, donde EN VERDAD empezaban dichas Cascadas.

Con rabia de la situación (es) la cogimos con calma, y reflexionamos acerca del momento y la conclusión fue la siguiente: por tiempo, aun no había problema, pues abandonar era una opción, irnos hasta el inicio de las Cascadas en el auto no era buena opción, pues después de terminar el recorrido tendríamos que ir a rescatarlo. Así que, pensamos que lo más sensato era que nos llevará un taxi hasta el inicio y cuando terminasemos tuviéramos el auto alli esperándonos.

Sin pensarlo mucho tiempo, llamamos un taxi desde el restaurante donde nos cuidaban el auto (que por cierto el almuerzo encargado se convertiría en cena)

1:15pm aproximadamente, iniciamos el canyoning. Íbamos avanzando sobre el caudal del agua, hasta toparnos con la primera cascada, montamos el rapel y Pa abajo, Así sucesivamente continuamos con las demás Cascadas hasta llegar hasta las sexta cascada.

De momento, me acuerdo en este momento, que el caudal del agua era bajo (de cierta manera es un punto a favor), pero como nosotros en realidad nosotros queríamos mojar 💦, era mejor, solo decidimos rapelar por un costado de las caídas de agua.

Sexta Cascada

Al llegar hasta la sexta cascada eran aproximadamente las 6:00pm, desde este punto se alcanza a vislumbrar el puente 🌉 colgante que indicaba la finalidad de la actividad. Esto quiere decir, que rapelamos esta última y habíamos coronado.

Pero no, en este momento considerando las diferentes variables, y tomando como principal razón la de no continuar, por no haber ninguna chapa de donde colgarnos (pues solo se veían los tornillos (chazos) de las reuniones, que seguramente fueron fraudulentadas por algún saqueador de la zona) pues, sino implicaría hacer una reunión con elementos naturales, como es la de atarnos a un árbol (que por cierto apenas llegamos al sitio, enseguida localicé uno de donde se podía montar)

En nuestro afán de abandonar, decidimos adentrarnos al bosque que colindaba con la carretera principal que nos llevaría a donde se encontraba nuestro coche.

La misión dentro del bosque era la de encontrar algún sendero que nos llevará a la carretera o en su defecto realizar un Trekking que nos sacara de aquel sitio. La distancia aproxima para atravesar el bosque era aproximadamente de 500 a 700mts, con pendientes muy pronunciadas.

Aparentemente la misión no era tan difícil, pues creímos que aún teníamos el tiempo de luz natural, para terminar. Igual en todo caso, si nos cogia la noche, estaba activado un frontal (un frontal? Acaso no tenían uno para cada uno? Así es, tenemos uno para cada uno. El punto es que solo empaqué uno, creyendo que por ningún motivo lo iríamos a utilizar 😢)

Así que empezamos nuestra odisea dentro del bosque, efectivamente encontramos un sendero y lo tomamos, pero este parecía que nos estaba llevando en sentido contrario a nuestro objetivo final, así que decidimos abandonarlo y empecemos hacer Trekking en dirección a nuestro objetivo.

Mientras íbamos avanzando más denso se iba volviendo el panorama, la oscuridad empezo aparecer, no avanzamos a buen ritmo, figuró activar el frontal (por qué diablos no traje mi otro frontal? Me lamentaba). Pasados varios minutos ya empezábamos a desesperarnos, reflexionando sobre las desiciones tomadas hasta el momento que nos llevó a estar en ese lugar.

Ya oscuros, no teníamos noción del tiempo, aparentemente aún parecía temprano (tal vez las 8:00pm) y con la esperanza de salir no tan tarde de aquel bosque para alcanzar a tomarnos algo de alcohol en algún bar del pueblo.

Pasado otro más de tiempo, ya estábamos con rabia y empezamos a desperar y gritarnos, de quien había sido la culpa, etc. No sabíamos si llegar hasta nuestro objetivo final atravesando el bosque era el camino correcto, o tal vez volver a esa sexta cascada y realizar el rapel. Teníamos una total desorientación y lo que decidimos fue avanzar con el Trekking.

No pasaron ni cinco minutos cuando nos vimos en una situación peligrosa, pues en ese instante nos encontrábamos sobre la montaña y el terreno estaba muy inclinado, casi vertical por no exagerar, pero los árboles eran nuestros pasamanos. Por un descuido, Angie se alcanzó a deslizar y en su afán de no precipitarse se agarro de mi, lo que ocasionó que me desestabilizara, también casi presipitandome. Luego, no pasó ni tres segundos, cuando si, se precipitó,entre en pánico, y solo pensaba que había caído muy, muy alto, y algo muy grave le había pasado, gracias a Dios no fue así, solo se deslizó unos pocos metros por debajo mio, pues de seguro fueron otros árboles quien evitaron un desastre. Ella enseguida me grito 😱 que estaba bien, y me pude calmar por un momento, pero volviendo a lo mio, me doy cuenta que me encuentro en situación precaria de equilibrio, y no pasan ni dos segundos cuando también me deslice, también, afortunadamente otro árbol fue quien me detuvo de la caída.

Muy asustados en ese momento, nos quedamos quietos, y empezamos a reflexionar sobre nuestra situación (nuevamente), nos revisamos, nos encontrábamos bien. Agradecimos a Dios y decidimos volver a aquel rapel Nro 6.

Lo que no habíamos pensando era, aquel deslizamiento que habría ocasionado al bosque y adivina, muchas piedras quedaron flojas.

Y para mi desgracia se desprendió una roca de un volumen considerable (del tamaño de dos balones de fútbol), nunca olvidaré su color rojizo mientras esta caía, pensé que me iba a caer en la cabeza (menos mal y en ese momento llevaba puesto el casco, o eso creo), pero mi reacción natural fue la de tratar de esquivar esa roca, pero lo que hice fue, cubrirme con los brazos. Esta pasó rozando me los brazos, apenas como para abrirme una fisura en uno de ellos.

Nuevamente (otra vez) entramos en pánico, ahora si con más razones, pues la cordada era de consideración, y la sangre empieza a salir en altas proporciones, manchando me exageradamente la pantaloneta y mi Nueva camisa sisa que estrenaba.

Ohh My God, (como aveces digo: a ti no te gusta Hard, te gusta es Hardcore) ahora la cosa si se agravó (pensé). Angie me comentó al día siguiente del suceso que en ese instante, yo le pedia Gaza, la cual estaba completamente seguro que no traíamos, pues ni Botiquín llevábamos (Angie no se te olvide que debemos comprar el Botiquín), yo lo que recuerdo es que le pedía una camisa para apretarme el brazo y parar un poco el sangrado.

Analizando la situación, la empecé a evaluar, y la consideré no tan grave, pues el brazo lo podía flexionar casi normalmente, pues allí asumí que no tenía el hueso partido., o alguna cosa grave (pensamiento siempre positivo) pero si me asustaba el hecho que no habíamos comido nada desde la mañana (un par de papas que nos comimos en el pueblo) y más el agotamiento de todo, pensé que podía desmayar. (pero no, es mas psicológico que físico).

Por obvias razones Angie entro en pánico, y lo primero que se le ocurrió fue llamar a emergencia o policías para un posible rescate (acabo de recordar eso, y si obviamente mi celular tenia aun carga, exactamente un 6%, esas llamada fueron hechas a las 7:56pm, esta si es una referencia exacta) pero yo le dije, imaginate el tiempo que pasará antes que nos rescaten, es preferible auto rescatarnos. De todas maneras lo intentó, pero adivina, nunca contestaron. Ella desistió de la idea, y me copeo la mia.

Analizamos el por qué de los errores, y la conclusión era, teníamos el equipo y no lo usábamos. Así que la desicion siguiente era, rapelar por todo ese bosque hasta volver al caudal del agua (en ese momento, tenía una sed, que obviamente ya no me importaba tomarla del río).

Empezamos a rapelar de aproximadamente cada 10 o 15 mts, lo cual nos propicio tener que realizar entre unos siete o diez rapeles para poder llegar al agua.

En este descenso, yo tenía un anhelo, y era que, al llegar nuevamente al caudal del agua, aparecieramos por delante de la sexta cascada o en su defecto más adelante, para no tener que realizar ese rapel. Pero no, la aventura aún no terminaba.

Terminamos de realizar esos rapeles en el bosque, y acabamos adivina en donde, exactamente en la sexta cascada (figuraba tener que hacer el rapel para avanzar)

Al llegar al caudal del agua evidentemente tomamos agua del río, comimos unos últimos snacks y nos preparábamos para montar el rapel en aquel árbol.

Final, final, no va más

Empezamos a montar el sexto rapel, en aquel árbol longevo, en lo más alto, cuando de repente se empieza a deslumbrar una luz a lo lejos (lo que pensé enseguida fue en una luciérnaga importunandonos), pero no, eran evidentemente de algunos transeúntes.

Ahora la cosa se pone interesante, pues a simple vista, esta podría ser la ayuda tan anhelada que necesitamos ó dársela de papayita a los ladrones. Apagamos nuestro frontal, y esperamos a que estos individuos reaccionarán de cualquier forma.

Llegaron unas 4 personas (era lo que percibimos desde allí arriba), aparentemente también venia una mujer entre ellos. Hicimos total silencio, para escuchar lo que hablaban (casi no se escuchaba nada) y se establecieron gasta donde termina el rapel que debíamos realizar. No podíamos deducir fácilmente si eran bandidos o no (pero la hora en que aparecían no era que le generarán buenos puntos).

Estábamos en un dilema, y no era que tuviéramos muchas opciones en aquel lugar, porque sortearlos no era siquiera una opción.

Ellos empezaron a iluminar donde estábamos medio escondidos, lo que significaba que efectivamente habían visto también la luz de nuestro frontal.
Así que nos animamos y empezamos hablarles y pedirles ayuda.

Al principio ellos también estaban un poco extrañados con nuestra experiencia en ese lugar y a esa hora. Pero a medida que hablamos, se iba perdiendo la desconfianza.

Nos ayudaron indicandonos por donde debíamos hacer el rapel, que era complicado por el solo hecho que no queríamos terminar en el agua (un poco gigante), la primera en descender fue Angie, yo desde el punto en que me encontraba, ni siquiera podía observar por donde hacia dicho rapel. Los muchachos la orientaron y alumbraba el camino que ella debía tomar. Exitosamente termina el descenso, y se encuentra con las personas. (yo en mi escepticismo esperaba un grito de ella, algo así como: Amor son unos ladrones).

Angie al llegar hasta abajo, por fin me dio la señal que era mi turno, así que procedí a cambiar el rapel para descender en doble y poder recuperar la cuerda.

Ya todo organizado, empiezo el descenso, es complicado (aunque en este momento no quiera describir la razón del por qué) y los muchachos me empiezan a  indicar el camino, y en el paso más complicado, me dan la mano, y también lo logró exitosamente.

Felices por haber coronado este rapel, entablamos conversación con las personas quienes nos ayudaron, compartimos información, agradecimos, pero la misión aun no había terminado, el objetivo final era llegar hasta nuestro coche (que ni sabíamos que le había podido pasar, alli abandonado en aquella bahía del restaurante).

Fue cuando entonces, procediamos a retirar la cuerda, pero adivina, esta se atasco en aquel viejo árbol. Allí fue, cuando las personas quienes nos ayudaron nos siguieron que nos fuéramos al amanecer, enseguida quedé petrificado, cuestionando me, acaso que horas son?  A lo cual nos dicen: son las 3:00am del día siguiente. (en que momento pasaron tantas horas? Me preguntaba a mi mismo). La otra razón que nos dijeron para que nos quedaremos era que tal vez al terminar de recorrer el camino que sale de las Cascadas, nos íbamos  topar con ladrones.

Sin tanto pensarlo, la idea no me parecía tan descarriada y más bien sensata, además, con la energía que tenía en ese momento, no creo que me fuera dar para  ascender la recién rapelada cascada.

Bueno, (acá vienen una serie de peros) pero nos quedamos en donde? Y esta gente donde se va a quedar? Que hacen estas horas por este lado? Etc. Muchas preguntas, que a la final, salían de mi interés, lo único que importaba era que Angie y yo estuviéramos bien.

La explicación rápida y resumida de este grupo de personas es la siguiente: según lo que dijeron, es que a ellos les gusta salir a algún lugar natural a esa hora (media noche), que donde iban a dormir (yo asumía que carpas), adivina en donde? A la intemperie 😱!!!

Ellos eran un grupo de 6 personas, en donde habían dos mujeres (una joven y una señora).

Sin titubear, decidimos quedarnos con ellos, y esperar la amanecida. Y como dice aquella canción de Metallica: "Sleep with one eye open", dándole la cara de frente a aquella cascada, siempre enfocado en la cuerda atascada. Y también de ves en cuando a aquellas personas.

Nos cubrimos, con lo poco que teníamos, yo chupando frío con mi camisa sisa, me cubrí con el cubre cuerdas, y esperar. Lo que recuerdo es que las las dormidas eran de pocos minutos, pues la roca que teníamos de cama, y el casco que utilizaba de Almohada, no eran que ayudarán mucho.

Siempre nos quedará la duda (WTF): Como es posible que existan personas que les guste o disfruten salir a dormir en la  intemperie. Y se les notaba que tenían pensando preparar comida al día siguiente, pues en las cosas que llevaban en ese paseo (que no eran pocas) habían, platos, ollas, una guitarra, un sleeping desvencijado, etc. Etc. Etc.

Mientras pasaban las hora y minutos, mientras amanecía, pensaba en cosas, en cosas como:. Que tal si llueve? Que tal si se sube el caudal del agua? Pero al rato se me olvidaba, y me dormía, pero a los 10 minutos volvía y me levantaba, a confirmar que la cuerda aun se encontrará alli.

Listo, por fin hay luz natural (ya es el día de siguiente), ya consciente miraba a mi alrededor, veía a este grupo de personas durmiendo aun, Angie igual estaba durmiendo, así que decidí esperar unos instantes más. Pero no, como que nadie tenia la prisa que a mi me abrumada (el coche), así que me decidí y me mentalice en rescatar la cuerda.

Empecé a escalar aquella roca, aunque el nivel de boulder para escalarla no era complicado, y mi nivel tampoco es que sea de principiante, si temía mi condición física en ese momento, pues con la herida a cuestas no era que me tuviera mucha confianza. Me decidí, y paso a paso, logré subir hasta donde se encontraba atascada la cuerda. (me di cuenta, aprendí, del error cometido, que tampoco pienso describir).

Liberé la cuerda, y procedí a montar el rapel en otro lugar mas preciso, y poder recuperar la cuerda sin inconvenientes.
Disfrute de ese último rapel, recogí la cuerda (que por cierto intentó otra vez atascarse) y empezamos a empacar nuestras cosas.

Agradecimos verbalmente a las personas que nos ayudaron, y como acto de gratitud le ofrecimos, como vulgar mente se dice en Colombia, tomen Pa las gaseosas. Le dimos algo de dinero (lo que en realidad poseiamos en ese momento) y nos marchamos.

Ya para terminar, llegamos al restaurante en donde el coche nos estaba esperando sano y salvo, le contamos todo a la dueña, lo cual supo comprender, desayunamos, fuimos al hospital del pueblo. Y hasta este momento que me encuentro escribiendo esto. Nos encontramos bien.

Esta historia, como muchas de las que me ha ocurrido, no fuera sido posible con las ayuda de Dios. Infinitos Agradecimientos 🙌

Thursday, April 01, 2010

API Preferences

Información General

Las aplicaciones requieren datos de preferencia y configuración para adaptarse a las necesidades de diferentes usuarios y ambientes. El paquete java.util.prefs ofrece un camino para que las aplicaciones almacenen y recuperen preferencias y datos de configuración tanto como de usuarios como del sistema. Los datos son almacenados persistente mente sobre una implementación dependiente de un almacén. Existen dos arboles separados de preferencias, uno es para preferencias de usuario y otro es para preferencias del sistema.

Todos los métodos que modifican los datos de preferencias, tienen permitido operar de una manera asíncrona. Ellos pueden retornar inmediatamente, y los cambios eventualmente serán propagados al almacén de persistencia. El método flush puede ser utilizado para forzar a actualizar el almacén de datos.

Los métodos en la clase Preferentes pueden ser invocados concurrente mente por múltiples hilos en una sola JVM sin la necesidad de tener una sincronizacion externa, y el resultado sera equivalente a algunas ejecuciones de manera serial. Si esta clase es utilizada por múltiples JVMs que almacenan sus datos de preferencias en el mismo almacén de datos, los datos almacenados no estarán corruptos, pero no se garantiza que los datos sean consistentes para los datos de preferencias.

Comparando la API Preferences a otros Mecanismos


Antes de la introducción de la API Preferences, los desarrolladores podían escoger en administrar las preferencias y los datos de configuración de una manera ad hoc fashion, al utilizar la API Properties o la API JNDI como se describe a continuación.

A menudo, las preferencias y los datos de configuración eran almacenado en archivos de propiedades, accedido a través de la API java.util.Properties. Sin embargo, no existen estadares de donde dichos archivos deberían estar en el disco, o como serian ellos llamados. Utilizando este mecanismo, es extremadamente dificultoso en hacer copias de seguridad en los datos de preferencias de un usuario, o transferir esta información de una maquina a otra. A medida como el numero de aplicaciones crecía, la posibilidad de conflictos en nombre de archivos crecía. También, este mecanismo no ayudaba entre las plataformas en donde caía el disco duro, o en donde es deseable que los datos estuvieran almacenado en un almacén de datos externo (como un gran empresarial servicio de directorio LDAP).

Menos frecuente, los desarrolladores almacenaban preferencias de usuario y configuración de datos en servicio de directorio, accedido atravez de la API interfaz de nombrado java y directorio (JNDI). A diferencia de la API Properties, JNDI permite a los usuarios arbitrariamente almacenar datos(back-end neutrality). Mientras que JNDI es extremadamente poderoso, es también bastante grande, consiste de 5 paquetes y 83 clases. JNDI no ofrece políticas de donde en el espacio de nombres de directorio los datos de preferencias deberían ser almacenados, o en cual nombre de espacio.

Ni Properties ni JNDI ofrecen una simple, no ambigua, back-end neutral facilidad de administración de preferencias. La API Preferences ofrece dicha facilidad, combinando la simplicidad de Properties con la neutralidad back-end de JNDI. Este ofrece suficiente política integrada para prevenir conflictos de nombres, coherencia de acogida, y fomentar la robustez frente a la inaccesibilidad al almacén de datos.

Notas de Uso

El material contenido en esta sección no es parte de la especificación de la API Prefereces, este pretende ofrecer algunos ejemplos de como las la API Preferences debería ser usado.

Obteniendo objetos de Preferencia para una clase envolvente

Los siguientes ejemplos ilustran de como se deberían obtener objetos de Preferences (system y user) pertinentes a la clase envolvente. Estos ejemplos deberían trabajar solo dentro de métodos de instancia.

Note que los campos finales estáticos, a diferencias de literales String, son utilizados para los nombres key (NUM_ROWS y NUM_COLS). Esto reduce la probabilidad de bugs de rutinas, de errores tipografía en los nombres key.

Note también que razonables default son ofrecidos por cada una de los valores de preferencias obtenidos. Estos defaults serán retornado si ningún valor de preferencia han sido seteados, o si el almacén de datos es inaccesible.

package com.acme.widget;
import java.util.prefs.*;

public class Gadget {
// Preference keys for this package
private static final String NUM_ROWS = "num_rows";
private static final String NUM_COLS = "num_cols";

void foo() {
Preferences prefs = Preferences.userNodeForPackage(this);

int numRows = prefs.getInt(NUM_ROWS, 40);
int numCols = prefs.getInt(NUM_COLS, 80);

...
}
}
El anterior ejemplo obtiene las preferencias del usuario. Si un solo, valor por sistema fuese deseado, la primera line en foo debería ser remplazada por:

Preferences prefs = Preferences.systemNodeForPackage(this);
Obteniendo Objetos de Preferencias para un método estático

Los ejemplos en esta sección ilustran de como obtener objetos de Preferencias pertinentes a la clase envolvente, y trabaja dentro métodos de instancia. En un método estático (o inicializado estático), se necesita explícitamente ofrecer el nombre del paquete:

static String ourNodeName = "/com/acme/widget";

static void foo() {
Preferences prefs = Preferences.userRoot().node(ourNodeName);

...
}

Siempre es aceptable obtener objetos preferencias del sistema una vez, en un inicializados estático, y utilizarlo cuando las preferencias del sistema son requeridos:

static Preferences prefs = Preferences.systemRoot().node(ourNodeName);

En general, es aceptable hace la misma cosa para los objetos de preferencias de usuarios, pero no si el código en cuestión sera utilizado en un servidor, en donde múltiples usuarios estarán corriendo concurrente mente o de manera serial. En dichos sistemas, userNodeForPackeage y userRoot retornaran el nodo apropiado para la llamada del usuario, ademas es critico que las llamadas a userNodeForPackage o userRoot sean hechas desde el hilo apropiado en el momento apropiado. Si una pieza de código puede eventualmente ser utilizada en dicho ambiente del servidor, está bien, practica conservativa para obtener objetos de preferencias de usuario imediatamente antes de que ellos sean usados, como en el ejemplo anterior.

Actualización Atomica

La API Preferences no ofrece transacciones como las base de datos en donde múltiples preferencias son modificadas atomicamente. Ocasionalmente, es necesario modificar dos o mas preferencias como unidad. Por ejemplo, supongamos que se están almacenando las coordenadas x y y en donde una ventana esta colocada. La única manera de realizar la atomicidad es almacenar ambos valores en una sola preferencia. Muchas codificación son posibles, por ejemplo:

int x, y;
...
prefs.put(POSITION, x + "," + y);

Donde un componente de preferencia es leído, este debe ser decodificado.

static int X_DEFAULT = 50, Y_DEFAULT = 25;
void baz() {
String position = prefs.get(POSITION, X_DEFAULT + "," + Y_DEFAULT);
int x, y;
try {
int i = position.indexOf(',');
x = Integer.parseInt(coordinates.substring(0, i));
y = Integer.parseInt(position.substring(i + 1));
} catch(Exception e) {
// Value was corrupt, just use defaults
x = X_DEFAULT;
y = Y_DEFAULT;
}
...
}

Fuente

Tuesday, February 23, 2010

Javatar

Quien no ha soñado en código?

Sunday, February 21, 2010

Prefijos de Potencias

Potencia Prefijo abreviacion
10^(-18) atto- a
10^(-15) femto- f
10^(-12) pico- p
10^(-9) nano- n
10^(-6) micro- u
10^(-3) milli- m
10^(-2) centi- c
10^(-1) deci- d
10^(1) deka- da
10^(3) kilo- k
10^(6) mega- M
10^(9) giga- G
10^(12) tera- T
10^(15) peta- P
10^(18) exa- E

Sunday, February 14, 2010

El JCP

El Proceso de la Comunidad Java (Java Community Process) es una organización abierta, creada en 1998, que está encargada en la definición de futuras versiones y caracteristicas de la plataforma Java.

Cuando hay la necesidad de crear un nuevo componente o una API es identificada, el iniciador (tambien conocido como el lider de la especificación) crea un JSR (Java Specification Request) y se forma un grupo de expertos.

Este grupo, comformado de compañias representativas, organizaciones o particulares, es responsable por el desarrollo de la JSR y debe entregar: 1) Una especificación que explique los detalles y define los fundamentos de la JSR, 2) Una implementación de referencia (RI), la cual es una actual implementación de la especificación, y 3) Un Kit de prueba de compatibilidad (conocido como Technology Compatibility Kit, o TCK), el cual es un conjunto de pruebas que cada implementación necesita pasar antes de alegar una especifición completa.

Una vez aprobada por el comité ejecutivo (EC), la especificación es liberada a la comunidad para su implementación.

Java EE es llamado un sombrilla JSR, o una Platform Edition Specification (such as Profiles), ya que está agrupa otras JSRs.

Monday, January 04, 2010

Lapel Pin

Para los que no saben que es un Lapel Pin, aquí les muestro el que me mandó Sun Microsystems.


Tuesday, December 08, 2009

Configuracion Avanzada en Firefox

A menudo nos hemos dado cuenta que en el lanzamiento de una nueva version de Firefox, muchas de las opciones que encontramos por el menu Edit->Preferences son eliminiadas, y no sabemos la razón.

Sucede, que Firefox tiene una basta configuración pero esta no se hace por donde estamos acostumbrados.

Para acceder a esta configuración tendremos que digitar en la barra de direcciones "about:config",

Al intentar acceder a esta, se nos advertirá que al cambiar configuración sensible, podremos desconfigurar gravemente el firefox.



Aceptamos la advertencia y podremos ver toda la configuración que mantiene el firefox, cabe notar que esta configuracion esta en la forma de de un listado, en donde la configuración para algunas propiedades son de tipo boolean, es decir que esta activiado (true) o desactivado (false), otras es de tipo numérico, y otros puede ser de un valor hexadecimal, el cual puede indicar un color.

Por ejemplo, si queremos cambiar el color de fondo por defecto (blanco), por otro color que deseemos, solo debemos escribir la propiedad en el filtro de configuraciones que se encuentra en la parte superior.

Escribimos "background", y se filtraran todas la configuraciones que tenga esta palabra. Una de estas es: browser.display.background_color, la cual es la que se desea, en la columna "value", digitamos en formato hexadecimal el valor de color y listo.

Espero que esta info les sea de ayuda.