Nacido un 28 de febrero

A propósito del pasado 28F, fecha de nacimiento encontré esta interesante descripción merodeando por la web:

Los nacidos un 28 de febrero tienen una personalidad agradable. Son amigables, intuitivos y trabajadores. Poseen un gran talento y saben tratar a los demás. Se marcan objetivos muy elevados y suelen conseguirlos. Manifiestan un extraordinario entusiasmo por todas las cosas de la vida.
Deben tener especial cuidado con las afecciones crónicas relacionadas con el sistema linfático y circulatorio (varices). En cuanto a la dieta, deben procurar ampliar sus gustos gastronómicos.
Pueden desarrollar con éxito profesiones de periodista, deportista y profesor. Son muy entusiastas y cambian de trabajo con bastante frecuencia. Tienen deseos de explorar mentalmente todo.
Les gusta llamar la atención y hacen cosas extravagantes para conseguirlo. Admiran a personas cultas y que sepan dar buenos consejos. Necesitan una pareja que sepa comprender su vulnerabilidad.

Abril

Qué duro fue este mes de abril:

Agotado...

Así terminé el mes de abril del 2013

1. Descubrí las verdaderas intenciones de ciertas personas, y aunque dolió mucho dar un punto final por lo que pudo haber sido, fue algo demasiado necesario. Por algo dicen que cuando se dice “adiós”, tarde o temprano las puertas estarán abiertas para un nuevo “hola”… Además he descubierto quiénes son esas personas que sí valen la pena cuando todo está mal, pero terriblemente mal.
2. Mes de trabajo duro e intenso, sin descansos, con sobre esfuerzos por sobre las 14 horas diarias y lidiando con gente que tozuda es poco por decirlo. Conocí más mi sillón que mi cama.
3. Mes de contrastes en el clima, mañanas frías, tardes calurosas, anocheceres fríos. Aún no me resfrío pero ya se sienten bajas las defensas.
4. El cambio de hora me afectó, el sólo hecho de salir del trabajo oscuro causa sentimientos de nostalgia.

Terminé agotado, y este 01/05 espero partir el mes reiniciado.

10 razones para amar a un informático

Dentro de todos mis cachivaches encontré este texto que les quiero compartir:

10 razones para amar a un informático

 

Así da gusto…

1. Los informáticos son muy útiles: pueden arreglar tu PC, tu notebook, enchufes, radios, la antena satelital, tu celular, televisores o cualquier cosa que use corriente. Esas habilidades pueden hacer que tu vida vaya sobre ruedas.

2. Son más románticos de lo que la gente piensa. Su idea del romanticismo puede consistir en hacer una página web sobre ti. Las webs duran más que las flores y se la puedes presumir a tus amigas por todo el mundo.

3. Tienen una capacidad sorprendente para optimizar tiempo, espacio, dinero, etc. Todo sea por la formación y por estar acostumbrado a pasar horas e incluso días mejorando algún algoritmo u optimizando alguna query de SQL… Simplemente por picar horas y horas código.

4. No tienen mucho gusto por la comida, así que no habrá necesidad de cenas muy elaboradas. Y si no eres la mejor cocinera, siempre puedes pedir una pizza por teléfono, invitarlos al MC Donalds o a comer un completito en el centro.

5. No tienes que preocuparte de donde están, lo más probable es que lo encuentres frente el computador (activa la geolocalización de Google Maps si quieres ubicarlo rápidamente) o por: Email, Skype, Gtalk, Whatsapp etc. siempre tendrán uno o más de estos servicios activos.

6. No se fijan mucho en los detalles que estén fuera del monitor. ¿Quieres andar por la casa con una camiseta vieja para estar más cómoda? A él no le importará. No le molestará que no te maquilles o que no te arregles el pelo, con un poquitito de sexo diario semanal lo dejarás conforme.

7. Siempre hará los mejores cálculos para ahorrar en el supermercado porque sabe optimizar los recursos escasos (si lo convences de ir).

8. Puede que no entiendas de computadores, televisión ni DVD’s y tampoco te importe ser popular o elegante, pero ¿Qué me dices de los últimos gadgets tecnológicos? Serás la orgullosa poseedora de los aparatitos más modernos si te decides por casarte con un informático (¿Un iPhone? ¿Un iPad? ¿La última BlackBerry?). Además conocen programas para hacer cosas que ni imaginas… No hay nada imposible para ellos. Si no existe, lo crean.

9. No te va a poner los cuernos. Pon a la mujer más sexy del mundo y ponla en la misma habitación que un informático. En un rincón, pon un Macbook último modelo. Apuesto a que a tu informático le apetece más jugar con el equipo que coquetear con la mujer. De hecho, puede que ni siquiera la vea si el equipo dispone de conexión a Internet. ¡Por favor! Tiene que revisar su e-mail, navegar por la web y escribir un post en su página web además de un Twitt contando que está en la misma habitación con una mujer estupenda…

10. Y esta es la razón definitiva: realmente le importas. No tu apariencia (aunque eso es un plus), ni lo rellena que estés, ni todo el maquillaje que te pongas encima. Le gustas porque eres tú.

JAVA: Verificar una fecha

En este rapidín plantearé cómo resolver la problemática de verificar si una fecha es válida, pero a nivel del Java.

Ingredientes:
1 máquina virtual Java sobre JVM 1.4 de Sun
1 Editor de texto
1 terminal para compilar y ejecutar

Manos a la obra… El siguiente código indica con true si la fecha como String pasada como parámetro, junto con la máscara acorde a la Javadoc, es válida.

public class fec {

	public static void main(String[] x) throws java.text.ParseException
	{
	System.out.println("--->"+validaFechaMascara("28/02/1985","dd/MM/yyyy"));
	}

	public static boolean validaFechaMascara(String sFecha, String sMascara)
	{
		boolean retorno = false;
		try {
			//Convertir la fecha al Calendar
			java.util.Locale locInstancia = new java.util.Locale("es","CL");
			java.text.DateFormat dfInstancia;
			java.util.Date dInstancia;
			dfInstancia = new java.text.SimpleDateFormat(sMascara,locInstancia);
			dInstancia = (java.util.Date)dfInstancia.parse(sFecha);
			java.util.Calendar cal = java.util.Calendar.getInstance(locInstancia);
			cal.setTime(dInstancia); //setear la fecha en cuestion al calendario
			retorno = true;
		} catch (java.text.ParseException excep) {
			retorno = false; //unparseable date
		} finally {
			return retorno;
		}
	}
}

JAVA: Trozar Lists

Otro rapidín de código que podría ser útil que me tocó solucionar en un proyecto. La problemática:

Se requiere tomar un List (da lo mismo el tipo) y poder dividirlo cada tantos registros para poder procesarlos de otra manera. ¿Es posible?

Respuesta de Tommy: Si se dispone de la JDK 7 es posible con la API de Google “Guava”, pero si se dispone de una JDK más antigua como la 5 que aún se usa bastante en producción dentro de nuestros sistemas en Chile podemos hacer algo como lo siguiente:

import java.util.ArrayList;
import java.util.List;
public class ListasTest {

private static <T> List<T> trozarLista(List<T> list, int iCotaInferior, int iCotaSuperior) {
iCotaSuperior = iCotaSuperior > list.size() ? list.size()-1 : iCotaSuperior;
List<T> x = new ArrayList<T>(list.subList(iCotaInferior, iCotaSuperior));
return x;
}

public static void main(String[] args) throws Exception {

/* Contador interno parametrizable para cortar cada tantos elementos */
int trozar_por = 10;

List<List<String>> listadosSeparacion = new ArrayList<List<String>>();

List <String>a = new ArrayList<String>();
a.add("1");
a.add("2");
a.add("3");
a.add("4");
a.add("5");
a.add("6");
a.add("7");
a.add("8");
a.add("9");
a.add("10");
a.add("11");
a.add("12");
a.add("13");
a.add("14");
a.add("15");
a.add("16");
a.add("17");
a.add("18");
a.add("19");
a.add("20");
a.add("21");
a.add("22");
a.add("23");
a.add("24");
a.add("25");
a.add("26");
a.add("27");

int iPasoCotaInferior = 0;
int iPasoCotaSuperior = a.size() < trozar_por ? a.size() : trozar_por;

while (iPasoCotaInferior <= a.size())
{
listadosSeparacion.add( trozarLista(a,iPasoCotaInferior,iPasoCotaSuperior) );
//Avanzar pero determinar hasta cuanto mas se puede avanzar
iPasoCotaInferior = iPasoCotaInferior+trozar_por;
iPasoCotaSuperior = iPasoCotaSuperior+trozar_por > a.size() ? a.size() : iPasoCotaSuperior+trozar_por;
}

//Tomar los listados

int contador;
System.out.println("Iteracion de TEST");
System.out.println("Se supone que vienen los siguientes datos"+a.size());
for (List<String> lex : listadosSeparacion)
{
contador = 0;
System.out.println("Se procesa una planilla... ");
for (String cl : lex) {
System.out.println("elemento recibido: "+cl);
contador++;
}
System.out.println("Contador en esta iteracion ... "+contador);

}
}

}

Entonces, con este trozo de código es posible utilizar los subLists que se disponen en la interfaz List, pero teniendo la salvedad que en este caso por cada sublistado se crea uno nuevo en la memoria. La ejecución del código daría el siguiente resultado:


Iteracion de TEST

Se supone que vienen los siguientes datos 27
Se procesa una planilla...
elemento recibido: 1
elemento recibido: 2
elemento recibido: 3
elemento recibido: 4
elemento recibido: 5
elemento recibido: 6
elemento recibido: 7
elemento recibido: 8
elemento recibido: 9
elemento recibido: 10
Contador en esta iteracion ... 10
Se procesa una planilla...
elemento recibido: 11
elemento recibido: 12
elemento recibido: 13
elemento recibido: 14
elemento recibido: 15
elemento recibido: 16
elemento recibido: 17
elemento recibido: 18
elemento recibido: 19
elemento recibido: 20
Contador en esta iteracion ... 10
Se procesa una planilla...
elemento recibido: 21
elemento recibido: 22
elemento recibido: 23
elemento recibido: 24
elemento recibido: 25
elemento recibido: 26
elemento recibido: 27
Contador en esta iteracion ... 7

Por qué no publiqué balance del 2011

Ya que me lo han preguntado constantemente, el 2011 fue el año del trabajo duro, intenso, sin descanso. Cabe destacar que el quiebre se produjo en marzo de dicho año cuando me fui de vacaciones, pero de ahí sin parar hasta septiembre cuando de un fin de semana a otro logré cambiar de empleo, poniendo a prueba la capacidad física, mental y la paciencia… Como había muy poco por comentar además del poco tiempo, no le dí gran importancia a ello. Gracias no se molesten.

JAVA: Despuntear al RUT

Volviendo a los rapidines de código incorporaré una rutina que podría ser útil cuando se recibe el RUT en este formato: xx.xxx.xxx-x y se requiere sólo obtener la mantisa además de quitar el dígito verificador:

public class despuntear {
public static void main(String... x) {
String salida = x[0].replace(".", "");
salida = salida.substring(0,salida.length()-2);
System.out.println("salida->"+salida);
}
}

La idea es simplemente reemplazar todos los puntos y sacar los dos últimos caracteres.
Por lo tanto si se ejecuta este trozo de código de la siguiente manera el resultado sería el siguiente:

java despuntear 10.111.110-1
salida->10111110

Checklist: Por qué nunca seré un buen prospecto

Definiendo el concepto de prospecto como una posible pareja, o novio. En Chile le decimos a eso, un pololo. Qué palabra tan fea.

Por lo tanto, desde mi perspectiva (y como me conozco lo suficiente, por algo me aguanto tan bien), éstas son las razones que me descartan:

1.  Soy muy apasionado por lo que hago, tanto en el trabajo (cosa que hago con demasiado gusto) como en la vida diaria, me puedo volar haciendo algo dejando todo el resto de lado.
2.  Junto con ello a veces tengo que quedarme trabajando hasta más tarde de lo acostumbrado, sin extras. Es decir, entro cuando no hay nadie, y me voy poniéndole el candado al portón.
3.  Tengo muchos proyectos a realizar, pero nadie busca a alguien con “proyectos” sino que con las ideas bien concretadas.
4.  No tengo auto, ni pienso tenerlo aún. Una cosa es que me encanten, y otra es tener uno. Cosa que no ocurre con la bicicleta. Por lo tanto no podría “invitar” de noche a alguien si no fuese en taxi o en algún otro medio de transporte.
5.  ¿Fiestas? ¿Discos? ¡No! ¡Conciertos!. Tambien pueden ser exposiciones, obras de teatro o en su defecto, pubs. Y con eso,  menos posibilidades. Aquí podría decir que soy fome. Bueno, entonces soy orgullosamente fome.
Bonus track. ¿Bailar? Un paso y me caigo.
6.  ¿Me preguntan acerca de algo que salió en TV? ¡Ni idea! Veo poca TV abierta.
7.  Valoro el silencio, otorga, clarifica y permite analizar. Mucho silencio hace mal, además al no tener el don de la palabra en exceso, no califico.
8.  No río mucho, es que tengo un humor tan irónico que, es inentendible, o aburre.
9.  Tengo muchas manías, no mañas de comida, sino que de forma de vivir, lo cual podría chocar con otra personalidad.
10.  Puede que mi apariencia del día a día sea arrogante, pero al ser humilde y tierno por dentro, me descarta inmediatamente. Ellas no buscan ni la humildad ni la ternura. De hecho, ternura = amigo.
11.  Me encanta compartir con mi familia, aunque estén a la distancia, pero debo estar constantemente apoyando y visitando.
12.  A las 23.00 Hrs de un día viernes ya me da sueño, de hecho, me afectan bastante, tal como a la mayoría le afectan los lunes. Y el sábado siguiente a las 08.30 AM ya estoy en pie.
13.  Aparento más edad de la que tengo, si ayer no más me echaron al vuelo como 14 años más.
14. Mido menos de 1.70 por lo tanto calificaría para muchas como un llavero además de tener poco pelo (orgullosamente rapado). Es lo que hay.
15. Hago muchos checklists de cotejo, y éste no es el único.

Espero agregar otras más pero básicamente son esas.

Los JBOWS

Parto con definir este concepto que toma mucha relevancia cuando existe una arquitectura de software orientada a servicios. Los JBOWS o “Just a bunch of webservices” es la abreviatura para representar algo que me ha tocado ver en un sinfín de ocasiones.

Las organizaciones que desean comenzar con un proceso de SOA tienden a romper todos (o parte de) los dominios funcionales en un conjunto o puñado de webservices desplegados en diversos ambientes, con el objetivo de generar una orquestación de procesos a futuro, levantando workflows en el vuelo, o simplemente centralizar procesos. En el camino, este puñado va creciendo, y creciendo chocando con las burocracias propias, llegando a perder el control en particular de lo que se tiene. En consecuencia, el “chiche” termina siendo un obstáculo para la interoperabilidad y el proceso mismo. Entonces llega un nuevo arquitecto y pregunta: “¿Esto es un SOA?”… No necesariamente, tener webservices representa una arquitectura dirigida por servicios, ya que perfectamente se puede implementar hasta con endpoints ad-hoc mientras se conozca el protocolo de mensajería y los contratos de entrada-salida de cada proceso.
Tal como tuve que explicarlo en una entrevista de trabajo donde tuve que justificar el por qué para integrar tres dominios funcionales diseñé servicios ad-hoc bajo sockets y no utilicé el Aqualogic. Todo depende del prisma que el arquitecto vea la solución y el alcance que le de, pero cuando se piensa en WS solamente, es como usar el antipatrón del martillo dorado.

Es más, el riesgo de los JBOWS radica en la baja reutilización y la repetición de operaciones. Por ejemplo, si se requiere hacer una operación que haga un cálculo y ya existía en un conjunto de webservices que perfectamente se podía hacer mediante orquestación.

Por eso antes de comenzar a poner de pie el primer servicio, recomiendo pensar para dónde va la tendencia, y aclarar bien las estrategias de la organización para lograr un alineamiento de manera acorde.