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