miércoles, 30 de diciembre de 2009

Eh ami, tu as cinq pesos pour le champagne?

Esta debe ser la única empresa del mundo en la que los jefes de la oficina organizan un brindis y te piden 5 mangos para comprar las cosas...

martes, 29 de diciembre de 2009

Borrando borradores

Llega fin de año y los medios realizan un resumen de lo mejor y lo peor del año, las noticias más importantes, los sketchs más piolas (?). Algunos hasta eligieron lo destacado de la década (!)

En Arriba el Núcleo, para no ser menos, hacemos cualquier otra cosa (?).
Así que acá van algunas cosas que empecé a escribir y que no salieron porque me aburrí.

- Me compré el libro de Rolon y habia copiado unos parrafos del mismo para poner acá, por ejemplo:
Resiliencia: capacidad de resistencia elástica de algunos materiales para soportar un choque y volver a recuperar la forma inicial o aun lograr una forma mejor. Es decir, la cualidad de mejorar que tienen algunos elementos al ser sometidos a condiciones extremas.
La psicología ha adoptado ese término para describir la capacidad que algunas personas tienen de enfrentar experiencias adversas, sobreponerse, y aun ser fortalecidas o transformadas para bien.

- McDonald's había sacado el McBacon y valía 7 pesos.

- Tutorial para popular, rellenar los checkboxs con struts 1, pero me olvidé como se hacía (!)

- Viernes 13, undécima parte, es un rejunte, una mezcla de situaciones ya vividas en la 2 y en la 3.

- Mezclo idiomas cuando programo... y a quien carajo le importa?

- "Magic City", temazo de Yngwie Malmsteen. Es sobre Miami... ahhhhh (P)

- En Brasil, un caco mantuvo de rehen a unas personas a mano armada... con una pistola de Sega

- Salió el videojuego de Dexter... para iphone ¬¬

- Algo importante que saqué de un foro: When you call Arrays.asList it does not return a java.util.ArrayList. It returns a java.util.Arrays$ArrayList which is an immutable list. You cannot add to it and you cannot remove from it. If you want a mutable list built from your array you will have to loop over the array yourself and add each element into the list in turn.

- Usa BigDecimal para calculos monetarios, porque double se come los decimales

- Me gustaría vivir en Japon pero no podría por lo que comen (?)

- Prince of Persia: The Sands of Time es un juegazo. En una segunda jugada, uno se da cuenta de que es repetitvo (sobretodo en el combate), pero en su totalidad es un juego fascinante. Otros juegos bellos son Beyond Good & Evil y Shadow of the Colossus.

Bien, de 100 drafts bajé a 84.

sábado, 12 de diciembre de 2009

Si viste Iron Man y este poster no te ceba zarpadamente...

qué demonios te pasa?!?!

jueves, 10 de diciembre de 2009

Yo tendría que formar una empresa
llamada "El club de los no IBMers",
en cuyo estatuto se prohibiera emplear a cualquiera
que haya trabajado en esa compañía del mal (?)

viernes, 4 de diciembre de 2009

Sorteo mundiaaaaaaaaal

Realizóse momentos atrás el sorteo correspondiente a la Copa Mundial Sudáfrica 2010 (P), y gracias a la colaboración de Mi Gallina te informamos como quedaron conformados los grupos:

GRUPO A
1 - Sudáfrica
2 - México
3 - Uruguay
4 - Francia

GRUPO B
1 - Argentina
2 - Nigeria
3 - Corea del Sur
4 - Grecia

GRUPO C
1 - Inglaterra
2 - Estados Unidos
3 - Argelia
4 - Eslovenia

GRUPO D
1 - Alemania
2 - Australia
3 - Serbia
4 - Ghana

GRUPO E
1 - Holanda
2 - Camerún
3 - Japón
4 - Dinamarca

GRUPO F
1 - Italia
2 - Paraguay
3 - Nueva Zelanda
4 - Eslovaquia

GRUPO G
1 - Brasil
2 - Corea del Norte
3 - Costa de Marfil
4 - Portugal

GRUPO H
1 - España
2 - Suiza
3 - Honduras
4 - Chile

El análisis pormenorizado de cada uno de los grupos lo realizaremos más adelante, pero a priori podriamos sacar las siguientes conclusiones:
a) Sudáfrica puso toda la plata y lo cagaron mal
b) A Argentina le tocó un grupo facilongo y va a haber que ir preparando piedras por si no pasan de ronda
c) Inglaterra tiene el grupo más facil, así que la cresta de Beckham trae suerte (?)
d) Alemania también la tiene facil
e) Holanda se clasificó holgadamente para esta competencia pero el mundial es otra cosa, papá (?)
f) Italia - Paraguay va a ser un partidazo (?)
g) Brasil no fue tan favorecido en el sorteo como en otras oportunidades, pero Portugal es amargo y Corea del Norte es el peor equipo del torneo, así que pasan tranquis.
h) Muy facil también para España. Ojalá a Bielsa le vaya bien :)

martes, 1 de diciembre de 2009

1 de Diciembre: Día Mundial de la Lucha contra el SIDA

El SIDA (síndrome de inmunodeficiencia adquirida) es una enfermedad que afecta a los humanos infectados por el VIH (virus de inmunodeficiencia humana). Se dice que una persona padece de SIDA cuando su organismo, debido a la inmunodepresión provocada por el VIH, no es capaz de ofrecer una respuesta inmune adecuada contra las infecciones que aquejan a los seres humanos. El VIH se transmite a través de los fluidos corporales (sangre, semen, secreciones vaginales, leche materna). Las relaciones sexuales vaginales, anales y orales sin protección constituyen fuentes comprobadas de contagio. También el embarazo, el parto y la lactancia.

Se calcula que 40 millones de personas viven hoy con VIH/SIDA.

Información para hacerte el test: http://www.buenosaires.gov.ar/areas/salud/sida/vih/testdesida.php

Cada minuto hay 10 nuevos casos de HIV en el mundo.


El comportamiento sexual responsable puede hacer frente a la pandemia.




Reenvialo por favor. La cuestión nos afecta a todos.
Muchas gracias.

viernes, 27 de noviembre de 2009

Horaires

Desde fines de agosto completo una planilla secreta (?) con mis horarios de entrada y salida a la empresa, para que despues mi jefe no me venga con un "eh gato, hace un mes que estas laburando 7 horas por dia" como la otra vez.

Y salvo el día que llegue despues de las 13 porque me sentía para el orto (tendría que haber faltado) y el que llegue 12:30 aprovechando las vacaciones de mi jefe, ayer logré un nuevo record:

11:59

Todo esto viene a colación de algo que pensé hace bocha.
Y sí, estaba en lo cierto.

martes, 17 de noviembre de 2009

Sabrá tu novia lo que hacés...?


Pobre Leo Garcia, el google news lo escrachó malparidamente (!)

miércoles, 4 de noviembre de 2009

Estos son beneficios!

CAMBIO EN MONEDAS


A partir del día de hoy, en tal sede, podes obtener $5 en monedas por semana!


Como tenés que hacer? Muy sencillo, tal persona, en la Recepción de tal sede, te cambiara los $5 en billetes por monedas.
Por el momento, este beneficio es semanal y solamente por el monto especificado.

Los beneficios de ser, un efectivo por ley (?)

viernes, 16 de octubre de 2009

Me estoy perdiendo a los Pet Shop Boys =(

Todo por ese putísimo campo vip

II

miércoles, 30 de septiembre de 2009

Aprendiendo JavaScript a lo bestia

JavaScript es un lenguaje de programación interpretado, es decir, que no requiere compilación, utilizado principalmente en páginas web, con una sintaxis semejante a la del lenguaje Java y el lenguaje C.

Gracias Wikipedia, ahora andate.

Lo que va a ir acá y en sucesivos post con el mismo título, serán funciones, sentencias y pedacitos de código javascript que me han sido utiles en el pasado, así cuando me tenga que enfrentar con un problema similar, evito buscar en google otra vez lo mismo.

Para empezar con nuestra primera leccion (?), tenemos 3 maneras de meter codigo javascript en una pagina: en la cabeza, en el cuerpo o afuera.

1) En la cabeza (HEAD)
Los scripts que metamos aqui solo seran ejecutados cuando sean llamados por algun evento o alguna otra funcion (que esten dentro de esta misma pagina).
Entre los tags <head> y </head> colocamos lo siguiente:

<script type="text/javascript">
function mensaje() {
alert("holaaaaaaaaaaaaaa");
}
</script>

Si queremos que esa funcion se ejecute cuando clickeamos un boton en un pagina, hacemos lo siguiente:

<input type="button" value="boton loco" onclick="mensaje();"/>

El html final quedaria asi (prueba.html):

<html>
<head>
<title>prueba</title>
<script type="text/javascript">
function mensaje() {
alert("holaaaaaaaaaaaaaa");
}
</script>
</head>
<body>
Clickea en este boton y te sorprenderas (?)
<input type="button" value="boton loco" onclick="mensaje();"/>
</body>
</html>



2) En el cuerpo (BODY)
Los script que metamos aca (entre los tags y , que es donde esta el contenido de la página) se ejecutan cuando carga la página y el navegador pasa por esa línea. La verdad que no lo recomiendo, pero alguna vez lo usé y quizás a alguno le sirve.
Ejemplo:

<html>
<head></head>
<body>
<script type="text/javascript">
document.write("Esta linea se escribio mediante javascript. Uy que piola que soy (?)");
</script>
</body>
</html>



3) Afuera de la página
Esta solución es la mejorcita porque separa el html del javascript, pero que se yo (?). Es muy util cuando una o varias funciones son usadas por más de una página (por ejemplo, para validar una entrada de datos).
Entonces las funciones javascript se ponen en un archivo de texto plano directamente, sin los tags <script>

Y en la parte HEAD de la página se hace una referencia al archivo conteniendo las funciones.

<script type="text/javascript" src="funciones.js"></script>


Asi que finalmente tendremos los archivos asi:

funciones.js

function mensaje() {
alert("holaaaaaaaaaaaaaa");
}

function otroMensaje (texto) {
alert(texto);
}


prueba2.html

<html>
<head>
<title>prueba2</title>
<script type="text/javascript" src="funciones.js"></script>
</head>
<body>
Clickea en este boton y te sorprenderas (?)
<input type="button" value="boton loco" onclick="mensaje();"/><br/>
Clickea en este boton y te sorprenderas aun mas (?)
<input type="button" value="otro boton loco" onclick="otroMensaje('hola2');"/>
</body>
</html>


Hasta acá llega nuestra primera lección. Pruebenlo en sus casas y después me cuentan (?)

miércoles, 2 de septiembre de 2009

Grog XD

boludooooooooooo
No me cabe el alcohol, pero ahora que se puso de moda entre los adolescentes de nuestro país tomar Grog XD (con el emoticon y todo), voy a tener que empezar a asistir a los preboliches.
No puede ser que me esté perdiendo de probar la bebida favorita de los piratas de Mêlée Island™ y alrededores.



El informe de los nabos de C5N (Cormillot tirando "SCUMM es un servicio de bebidas alcohólicas en zona oeste" (?) es genial):



Que masa el Monkey Island. Nos sigue arrancando carcajadas al día de hoy.


Fuentes: I - II

jueves, 9 de julio de 2009

Hoy se cumplen 2 años de la famosa nevada en Buenos Aires.
La recuerdo como si fuera ayer:
Mientras todos estaban al aire libre excitadísimos con la nieve, yo estaba encerrado en mi pieza jugando a esto

Marc Ecko's Getting Up: Contents Under Pressure

BUENISIMO

jueves, 18 de junio de 2009

martes, 5 de mayo de 2009

Subir un archivo en Struts

Este tutorial (?) es para aprender (?) a subir archivos correctamente (puro trial and error hasta que me salió) usando el framework Struts 1, asi que si no sabes Struts no sigas leyendo, gracias.

El JSP
Aquí es donde va estar el campo para subir el archivo. Supongamos que ya tenemos el esqueleto del jsp bien configurado y lo que nos falta es lo que vemos en la foto.


En el jsp vamos a tener que poner una cosa asi (en negrita lo importante):

<table align="center">
<tr>
<td align="left">
Fichier a charger <font color="#FF0000">&nbsp;*</font>
</td>
<td valign="top">
<html:file name="massGroupReplacementFileForm" property="replacementFile" style="width:80%;"/>
</td>
</tr>
</table>


Esta tabla va a estar adentro de un form obviamente (el formato es <html:form><table>blabla</table></html:form>) y para que el form tome bien el archivo que subimos tiene que quedar asi:

<html:form enctype="multipart/form-data" action="/admin/massGroupReplacement/fileSave.do">


Ese enctype=blabla es lo que me tuvo a maltraer un buen rato.


El struts-config.xml
Pongo el codigo nomás, it's pretty straightforward (!)

<action path="/admin/massGroupReplacement/fileSave"
name="massGroupReplacementFileForm"
validate="false"
scope="request"
type="com.blabla.admin.struts.MassGroupReplacementFileSaveAction">
<forward name="OK" path="/admin/menu.do" />
<forward name="ERROR" path=
"/jsp/administration/massGroupReplacementFileUpload.jsp" />
</action>


El ActionForm
Pongo el codigo directamente porque también es simple, no hay mucho para decir, solo que el tipo de dato correspondiente al campo del archivo es un FormFile, no un File comun y corriente.

import org.apache.struts.upload.FormFile;

public class MassGroupReplacementFileForm {

private FormFile replacementFile;

public FormFile getReplacementFile() {
return replacementFile;
}

public void setReplacementFile(FormFile replacementFile) {
this.replacementFile = replacementFile;
}
}


El Action
Obviamente uno con ese archivo subido puede hacer lo que carajo quiera, pero que se yo, lo recomendable es copiarlo a una carpeta del servidor para luego hacerle algo.
Entonces obtenemos el FormFile subido y lo metemos en nuestro File, de la siguiente manera:

MassGroupReplacementFileForm rf = (MassGroupReplacementFileForm) form;
FormFile replacementFile = rf.getReplacementFile();
File f = new File("c:\\directorio\\subdirectorio\\pepito.dat");
OutputStream out = new FileOutputStream(f);
out.write(replacementFile.getFileData());
out.flush();
out.close();


En un futuro próximo veremos como carambas se hace esto en Struts 2. Chau.

viernes, 24 de abril de 2009

"Ils m'ont coupé les jambes"


Me cortaron internet en el laburo

martes, 21 de abril de 2009

miércoles, 15 de abril de 2009

A mi se me ocurren los mejores (?) posts, o ideas para posts, introducciones, lo que sea, cuando estoy re boleado y dormido.
 
El problema es que en ese estado no puedo desarrollar esas ideas, no puedo hacer ni un párrafo entendible, solo tengo una idea piola (?) en la cabeza.
Y después, cuando tengo un día bueno (?) (léase: cuando no estoy re dormido como siempre), la inspiración para esas ideas se me fue y cuesta una bocha volver a pensar en las mismas.
Así termino teniendo como 100 posts en borrador.
 
Que pena.

miércoles, 18 de marzo de 2009

Philips SBC HL150

Estos auriculares son una auténtica poronga. $39,90 tirados a la basura.
Uno pensaba que por elegir un producto de marca reconocida y no agarrar el más barato, se iba a encontrar con unos auriculares de nivel no tan choto como terminaron siendo.
Se escuchan muy para el orto, tienen una calidad pésima... me cuesta creer que Philips le ponga su nombre a estos auriculares.
Si sabía me compraba unos jWin de 20 pesos, seguro eran mejores que estos. O algun Coby... tengo unos del siglo pasado que no solo se la bancan, también suenan mucho mejor que estos.
Que bronca, me siento re decepcionado.
En fin.

martes, 24 de febrero de 2009

Validame essssta... fecha

A lo largo de nuestras vidas como programadores (ay el, jose_programador) siempre nos cruzamos con el problema de validar fechas ingresadas por el usuario.
Sabemos que el usuario es un pelotudo capaz de ponerte 30 de febrero como fecha de nacimiento y uno tiene que evitar eso, tiene que estar un paso adelante de ese tarado, porque este tipo de detalles pueden hacer que una aplicación re grosa deje una mala impresión.

Afortunadamente, lenguajes como Java traen clases que hacen hacen esto automáticamente.
A mi me cabe (?) la clase SimpleDateFormat y mi manera de usarla es la siguiente.

Creo un objeto de esta clase usando el constructor que recibe por parámetro el formato de la fecha (lo que se llama "pattern").
El pattern lo defino yo y más adelante comentaré sobre el mismo.

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");


Este objeto sdf va a ser usado para convertir el String recibido (el que ingresó el usuario a traves de un formulario o un campo en una ventana) en un objeto Date.

Antes de llamar al metodo que hace la conversión, hay que setear el lenient de este objeto (sdf) en falso, esto es para que a la hora de comprobar el pattern sea estricto.
sdf.setLenient(false);


Aca se hace la conversión de String a Date
// cadenaFecha es el String ingresado por el usuario
Date fecha = sdf.parse(cadenaFecha);

Si al hacer esa conversion, salta una exception, significa que la fecha estuvo mal ingresada, ya sea porque el usuario no respetó el formato definido por nosotros o porque metió una fecha inexistente.
Por eso es que se tiene que meter en un bloque try-catch, para hacer algo en
que caso que la fecha no funque, así no se rompe todo


try {
// cadenaFecha es el String ingresado por el usuario
Date fecha = sdf.parse(cadenaFecha);
} catch (ParseException e) {
throw e;
/* Podria haber puesto cualquiera de las siguientes:
e.printStackTrace();
o
actionErrors.add("date", new ActionMessage("errors.date"));
return actionErrors;
o
lo q se me cante hacer con esta exception
*/
}


O sea, para poder validar el ingreso del 1 de enero de 2009, el usuario tiene que haberla ingresado como "01/01/2009".
Pero lo bueno es que ese "pattern" (formato) que puse al principio es no restrictivo y se puede cambiar a conveniencia.
Si quisiera que pase ingresando 1/1/09 hubiera elegido como pattern "d/M/yy"
Si quisiera que pase con 1-1-09 hubiera elegido "d-M-yy"
Si quisiera que pase con 01012009 hubiera elegido "ddMMyyyy"

Aquí hay un cuadro indicando los caracteres que se pueden usar y lo que cada uno representa a la hora de definir nuestro pattern.

Entonces, basicamente para pasar una fecha de String a Date y en el medio validar, tengo que hacer:


SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
// cadenaFecha es el String ingresado por el usuario
Date fecha = sdf.parse(cadenaFecha);
} catch (ParseException e) {
e.printStackTrace();
throw e;
}

La magia (?) de la clase SimpleDateFormat no termina aquí. Oh no, no no! (?)
También sirve para hacer la inversa, pasar un fecha que tengamos (de tipo Date) a un String en el formato que queramos.
Esto se hace con el metodo format y una manera simplisima de probar esto es asi:

Date miDate = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("dd MM yyyy - HH:mm:ss");
String cad = sdf.format(miDate);
System.out.println(cad);

Este código nos va a imprimir la fecha y hora actual en pantalla.
Ej: 24 02 2009 - 14:48:33


Bárbaro, pero y si no tenés la suerte de contar con una ayuda así?
Bueno, pues aquí tenemos un código en C adaptable a cualquier lenguaje que hace tooooodo lo que dije al principio.

Fue robado de aquí y adaptado al castellano (menos los comments) por un servidor.

int es_anio_bisiesto (int);

int fecha_valida(int dia, int mes, int anio)
{
int valida=1;
int mes_long[13] ={ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

if (es_anio_bisiesto(anio))
mes_long[2] = 29;

if ( mes < 1 mes > 12 )
valida = 0;
else if ( dia < 1 dia > mes_long[mes] )
valida = 0;

return valida;
}

int es_anio_bisiesto(int anio)
{

int result;

if ( (anio%4) != 0 ) // or: if ( year%4 )
result = 0; // means: if year is not divisible by 4
else
if ( (anio%400) == 0 ) // or: if ( !(year%400) )
result = 1; // means: if year is divisible by 400
else
if ( (anio%100) == 0 ) // or: if ( !(year%100) )
result = 0; // means: if year is divisible by 100
else // (but not by 400, since that case
result = 1; // considered already)

return result;

}

sábado, 14 de febrero de 2009

Propongo que el 14 de febrero
sea considerado como el dia del tocino

martes, 3 de febrero de 2009

 
Lástima que no me alcance ni para un metro cuadrado (!)

martes, 13 de enero de 2009

!HELP ME P-LEEEEESE

I invite you to dinner & drinks
 
come TOMORROW AND SORT THIS HELL HOLE Out!!!!!!