Xnoccio » 2007 » January

Archivos del sitio

Autoboxing en Java5

Posteado por dbejar en January 29th, 2007

En un post reciente en Java Lobby (http://www.javalobby.org), destapaban algo a tener en cuenta cuando usamos alegremente el autoboxing de Java5.

Para el que no lo sepa, gracias al autoboxing podemos de forma muy sencilla asignar un tipo primitivo a su Wrapper class, y viceversa. Es decir, podemos, por ejemplo, asignar un boolean a una clase Boolean.
Por ejemplo, hasta Java5 hay que hacer:


//Sin autoboxing
boolean pBool=false;
Boolean wBool=new Boolean(pBool);//boxing
boolean pBool2=wBool.booleanValue();//unboxing  

Desde Java5, sin embargo, la cosa se simplifica:


//Con autoboxing
boolean pBool=false;
Boolean wBool=pBool;//autoboxing
boolean pBool2=wBool;//autounboxing

Tremenda simplificacion! …en el codigo. Obviamente esto puede tener consecuencias en el rendimiento de la aplicacion, especialmente si mezclamos tipos primitivos y objetos wrapper en exprensiones aritmeticas…. asi lo advierte Sun en su documentacion. Asi que cuidadin, que hay que usar el autoboxing con precauciones.

Pero ojo!!!, porque las precauciones que debemos tomar van mas alla de las que Sun advierte…
Cual creeis que sera el resultado de la ejecucion del siguiente codigo:

package test.absurdo;     

public class TestAbsurdo {        

 /**
 * @param args
 */
 public static void main(String[] args) {
	Integer a = 1, b = 1 ;
	Integer c = 130, d = 130 ;       

	System.out.println( a == 1 ) ; // A
	System.out.println( a == b ) ; // B
	System.out.println( c == 130 ) ; // C
	System.out.println( c == d ) ; // D
 }
}     

  1. false
    false
    false
    false
  2. true
    true
    true
    true
  3. true
    false
    true
    false
  4. true
    true
    true
    false

Si a mi me ponen esto en un examen de certificacion, yo diria que c)
Pero, si lo ejecutamos veremos que la correcta es la d)

Por que???

Desde luego no parece tener sentido que a==b sea true y c==d sea false.

Bien, parece ser que hay una “optimizacion” no documentada, que provoca que cualquier objeto Integer cuyo valor int se encuentre entre -127 y 127, es ‘cacheado’ como si fuese un int. Es por eso que a==b vale true aunque se trate de objetos distintos, porque son ‘cacheados’ como tipos primitivos.

 Ciertamente, uno no usa mucho ‘==’ para comparar objetos, pero conviene tener estas cosas por ahi en la recamara por si algun dia nos encontramos con un corpontamiento ‘esoterico’ de nuestro codigo…

Programación esotérica

Posteado por Félix García Borrego en January 27th, 2007

La última semana me había prohibido acercarme a Java para prepararme un examen que tenía pendiente. El resultado fue que efectivamente no hice nada en Java, pero descubrí algo aún peor… ¡ El Jode Cerebros !

Ya lo había visto otras veces, pero nunca había tenido tiempo libre para probar algún lenguaje esotérico, y que mejor momento que cuando se tiene un examen cerca!!..

Para los que no lo conozcan, un lenguaje esotérico es un lenguaje de programación especialmente extraño, pensado para ser divertido y no para ser productivo. Para que nos entendamos, la evolución normal de los lenguajes ha sido de lenguajes de bajo nivel como ensamblador, a lenguajes de alto nivel como Java; pues bien la programación esotérica va en sentido contrario, de lenguajes de alto nivel al lenguajes jode cerebros (mi preferido :p).

Uno de estos lenguajes esotéricos es el llamado Jode Cerebros(Brainfuck), El lenguaje es muy simple, además del programa, se dispone de un array de (al menos) 30.000 bytes inicializados a cero, un puntero sobre ese array (que al comienzo de la ejecución apunta al primer elemento del array) y dos “corrientes” de bytes para la entrada y la salida. Y nada de mariconadas( no hay letras, no hay palabras reconocias, ni comparadores, ni operadores…), las únicas instrucciones reconocidas por el lenguaje son:

> Incrementa el puntero.
< Decrementa el puntero.
+ Incrementa el byte apuntado.
- Decrementa el byte apuntado.
. Introduce el byte apuntado en la corriente de salida.
, Toma como valor del byte actualmente apuntado el provisto por la corriente de entrada.
[ Avanza a la instrucción inmediatamente posterior al ] correspondiente si el byte actualmente apuntado es nulo.
] Retrocede a la instrucción inmediatamente posterior al [ correspondiente si el byte actualmente apuntado no es nulo.

Y para entrar un poco más en calor y ver lo realmente complejo que puede resultar este lenguaje, aquí van unos cuantos programitas de mi cosecha. Cuando los hice pude confirmar que el lenguaje tenía bien elegido su nombre.

Hola Mundo (No podía faltar)

Hola Mundo utilizando programación esotérica Brainfuck

Te pregunta quién eres

Programación esotérica con brainfuck: un programa que saluda

Y para las mentes inquietas deseosas de aprender esta magnífica forma de perder el tiempo, aquí se pueden descargar un entorno de desarrollo completo Brainfuck Developer

Lástima que esto no entrase en el examen de cicuitos :(…

Seguridad muy básica en Linux

Posteado por Jorge Torres Chacón en January 26th, 2007

Después del artículo anterior sobre port knocking vamos con algo totalmente básico: los permisos en Linux. Hablar de seguridad es hablar de permisos y para ello tenemos el comando chmod de linux.

Anda el lumbreras este, viene a hablarnos de chmod. Pues no, para eso existen tutoriales muy buenos, empezando por poner un ‘man chmod’ ;-). Solo quiero aconsejar que los ficheros críticos de tu sistema no tengan más permisos de los debidos. Por ejemplo en (casi) toda instalación de Linux los siguientes ficheros vienen con permisos de lectura:
/etc/inittab
/etc/group
/etc/passwd
/etc/shadow (este quizás no)

Y digo yo, ¿qué necesidad tienen los usuarios de leer esos ficheros? Un chmod 700 a cal y canto y aquí pan y después gloria.

Puede parecer una tontería pero ¿sabías que la contraseña de Administrador de Windows puede romperse en menos de 30 segundos? ¿o que un Linux es vulnerable durante el propio proceso de arranque? Pues eso, toda precaución es poca.

P.D.: no dejes de leer el post de abajo.

Wiiiiiii!!!!

Posteado por Javier Echeverría Usua en January 26th, 2007

Hoy tenemos una quedada oficial en la empresa para probarla. La combinación [Wii + doble mando + proyector + Baileys de la cesta de Navidad] es una combinación muy tentadora :-D

Programar es divertido, entregar es tu trabajo

Posteado por dbejar en January 25th, 2007

Un abstract,  en traducion, mas o menos libre, de algo escrito por Chuck Jazdzewski:

  • Nunca dejes de aprender. Nunca dejes de estudiar.
  • La comunicacion es critica. Aprende a expresarte. Oralmente y por escrito. Transmite confianza. Aprende a comunicarte con otros tecnicos, pero tambien con clientes, con jefes,  gente de marketing, con gente que no sabe ni quiere saber el argot tecnico… Aprende a expresarte en ingles, al menos a nivel tecnico.
  • Promete menos de lo que crees poder hacer, y da mas de lo que has prometido.
  • Admite cuando te equivocas. Y hazlo saber, no lo escondas.
  • Si no ha sido testeado, no funciona. Asumir lo contrario es un error.
  • Programar es divertido, pero no es tu trabajo, entregar si lo es. Si hace falta documentar, hazlo, es tu trabajo.

(El blog de Chuck: http://www.removingalldoubt.com/)

Ejecutar JUnit en el orden deseado

Posteado por dbejar en January 25th, 2007

Necesitaba una solucion rapida para asegurarme del orden de ejecucion de mis unit tests escritos en jUnit 3.8, sin tener que reescribir codigo.

Fue asi que di con esto, que no hace falta q os leais, a no ser, q no os funcione mi truco:

http://ptrthomas.wordpress.com/2006/08/23/watij-and-running-junit-test-methods-in-the-order-that-you-want/

 De los temas que se comentan, yo implemente el “truco” que uno habia sacado de Ruby….es un truco, mas que una solucion, porque no hay ninguna garantia real de que el orden de ejecucion de los test cases sea exactamente el deseado…

…pero el caso es que funciona… al menos en windows xp professional, con eclipse 3.2 y jdk1.5.0_10

Al grano.

El truco consiste en renombrar los test cases como:

testXXNombreMetodo

Donde XX: es un numero de dos cifras indicando el orden relativo del test case respecto a los demas.

Simple y rapido.

PD: Si no ha sido testeado, no funciona.

Liberar un puerto pillado por Tomcat

Posteado por dbejar en January 24th, 2007

Una tonteria….

Para Windows: 

Quizas os haya pasado que se os queda frito el Eclipse mientras teniais el Tomcat arrancado, y no hay otra forma de arreglarlo que matar el proceso del Eclipse.

Rearrancamos el Eclipse, y al intentar rearrancar el Tomcat nos salta un error de que el puerto esta ya pillado.

 Bien obviamente, la anterior instancia de Tomcat se ha quedado por ahi.  La forma obvia de arreglarlo es ir a Servicios, y intentar parar alli el Tomcat, pero y si no encontramos el ‘bloody’ servicio?

Solucion facil. En %tomcatdir%\bin ejecutar shutdown.bat

Tachan!

El Tomcat ya arrancara sin problemas en Eclipse.

 Lo dicho, una tonteria…

La captación de personal especializado (si tienen una Wii) mejor será

Posteado por Javier Echeverría Usua en January 23rd, 2007

En Viavansi llevamos mucho tiempo comprobando lo complicado que es captar personal verdaderamente preparado y especializado, sobre todo cuando trabajas con tecnologías Java EE y derivados. Es muy fácil encontrar personas que han programado Java, e incluso que se autodefinen expertas pero verdaderamente complicado encontrar aquellas que son expertas de verdad.

Uno de los problemas es cómo captar la atención del personal. Hoy por hoy, aparte de los contactos personales que cada uno va haciendo, el mecanismo claro son las ofertas de trabajo. Nosotros trabajamos con Infojobs, probablemente la web de búsqueda de empleo más visitada en España. El 1 de diciembre de 2006 (es decir, ¡hace nada!) colgamos dos ofertas en Infojobs:

El resultado fue aterrador. 10 CVs inscritos en la primera oferta y 32 en la segunda, y la mayoría no se ajustaban ni de lejos al perfil. A priori se pueden detectar varias causas:

  • Estas ofertas cierran mucho el espectro de candidatos. Al poner tantos requisitos técnicos y funcionales, poca gente se ajustará al perfil. Muchas veces obviamos que la gente puede aprender y creamos un filtro que les aleja de nosotros.
  • No tiene sentido poner salarios en una oferta de este tipo. Cuando pones un “anuncio” en Infojobs no hay más remedio, y al final pones algo por ponerlo aunque realmente, el salario depende de la experiencia y conocimientos del candidato. No hay un salario para un perfil, hay una salario para un profesional y sus circunstancias.
  • La oferta no llama la atención, es una más entre tanto “AP Java”.
  • Si la persona que lee la oferta cumple el perfil que buscamos, probablemente ya tendrá una mala impresión de nosotros: ¡ya no es J2EE, ahora es Java EE!

Inspirados en este más que recomendable artículo, decidimos ponernos manos a la obra y hacer un poco de ingeniería social. ¿Por qué no innovar, dar una vuelta de tuerca, llamar la atención? La gente puede aprender (!). Así que pusimos una oferta diferente: “Buscamos Informáticos Java como nosotros ;-) “. Queríamos ver qué pasaba si te sales de las normas tradicionales y tratas de captar a personas con intereses parecidos a los nuestros. Mostrar un “estilo de trabajo”, poner un porrón de siglas de las nuestras del día a día (Java EE, JSF, AJAX, Hibernate, Groovy, Maven, JPA, Spring, UML, XML, XSLt, Annotations, JBoss, OpenCMS, con el objetivo de localizar gente a la que le guste estar al día), y a publicar la oferta. Intentábamos dar un resumen rápido de quiénes somos, para interesar a los buenos profesionales. La empresa tradicional se cree que ella entrevista al candidato. Realmente, es una entrevista mutua: la empresa debe conocer si el candidato le interesa, y el candidato debe conocer si la empresa le interesa.
El resultado ha sido abrumador, y de hecho bastante difícil de controlar: más de 180 Cvs (a día 20 de enero) recibidos por Infojobs, más de 30-40 Cvs recibidos por la web… y una gran frustración, porque estamos convencidos de que entre tanto CV seguro que se nos escapan unos cuantos cracks! Por el camino, un montón de enlaces y referencias a Viavansi. Aunque no fuese el objetivo, se enlazó a la oferta desde un montón de sitios web: portada de Meneame, bitácoras de Barrapunto… Me he fijado que sorprendentemente, a mucha gente le siguen extrañando algunos conceptos (la rentabilidad es secundaria, el horario, etc.), a pesar de que empresas archifamosas como Google, IBM, etc. llevan tiempo aplicando este tipo de fórmulas. Algún día explicaré la fundamentación de todo esto. Mientras tanto, Be water my friend.

Nike+iPod: primeras impresiones

Posteado por Javier Echeverría Usua en January 22nd, 2007

Como buena promesa de principios de año, decidí (como un 40% de españoles arrepentidos de las ingestas navideñas) volver a correr regularmente en 2007. Principalmente había dos motivos:

  • El arrepentimiento mencionado
  • El descubrimiento de que, por cuatro perras, podía convertir mi flamante iPod Nano regalo navideño de la empresa en un peaso de podómetro gracias a Nike+iPod. Si hay que correr, se corre, pero mejor con algún cacharrito tecnológico. Uno es un tecnópata fiel a sus ideales.

No voy a entrar a copiar como un cenutrio todas las características del Nike+iPod, para eso ya está la web de Apple. Voy a intentar describir las características del cacharrito, que la verdad es altamente recomendable, sobre todo para geeks.

El caso es que,tras buscar en muchas tiendas, y también en la sección de accesorios iPod de El Corte Inglés, me encontré el Nike+iPod, a su precio oficial de 29,95€, en la sección de Zapatillas Deportivas… lógico pero poco intuitivo. Y además (un chollo para quien busque unas zapatillas majas), tienen unas zapatillas especiales para el Nike+iPod al precio de 70€ (valían 100, pero tienen en Rebajas un 30% de descuento). Os pongo una foto:

Zapatillas

El paquetito del Nike+iPod es pequeño, porque hay poca cosa: el sensor que va en la zapatilla izquierda, y un pequeño conector que va en el iPod. Aparte de eso, un pequeñísimo manual de instrucciones. Y la verdad es que, en favor del medio ambiente, se lo podían haber ahorrado, porque hay que reconocer que la gente de Apple cuida la usabilidad: es fácil fácil de poner en marcha. Os dejo una foto de los componentes del Nike+iPod:

Componentes

La pieza roja y blanca es lo que debe ir en las zapatillas. Las zapatillas Nike+ vienen que ni pintado para esto, ya que tienen un hueco apropiado para ello debajo de la plantilla (la verdad es que no se nota nada). Fijaos en la figura:

Sensor debajo de la plantilla

En todo caso, lo importante es que esta pieza vaya estable en las zapatillas. Hay múltiples enlaces y posts de gente que explican diversos mecanismos para fijarla a las zapatillas preferidas de cada uno. No voy a ponerme a enlazarlos aquí, pero si alguien tiene curiosidad, he guardado unos cuantos en mi perfil de del.icio.us

A lo que íbamos. La usabilidad del Nike+iPod es excelente. En cuanto se conecta al iPod, aparece un nuevo menú llamado, como no, Nike+iPod. Y al sincronizar con el iTunes, te ofrece actualizar todo lo necesario, e incluso crear una cuenta en nike.com. Ahora explicaré para qué.

El menú de Nike+iPod te permite una serie de configuraciones básicas, quizás lo más interesante es la música que quieres escuchar al correr, la canción “favorita” para los momentos de flaqueo, etc. Para empezar a correr, puedes escoger un entrenamiento Básico (sin parámetros predefinidos, tú échate a correr y él almacena lo que haces), un entrenamiento con un Tiempo determinado (por ejemplo, 30 minutos) o uno fijando la Distancia (por ejemplo, 5 kilómetros).

Lo bueno empieza cuando comienzas a correr (mmm… creo que debería reflexionar sobre esta frase). Empiezas a escuchar la música deseada (yo me he creado una sublista específica con música “cañera”, mucho Linkin’Park y similar). Tienes una amable señorita que te dice de todo: cuánto tiempo llevas corriendo (siempre es menos del que creías), la distancia realizada (idem) y el tiempo por kilómetro (justo lo contrario, eso sube como la espuma). El iPod va registrando tu ritmo de carrera y el resultado global de los entrenamientos, pudiendo compararte con los mismos entrenamientos de otros días. Al sincronizarte con el iTunes, si dispones de la cuenta de NikePlus te permite subir los resultados ahí, y se te crea un gráfico Flash con la evolución de tus tiempos. Hay gente que incluso se reta a carreras (!). Os adjunto un ejemplo:

Gráfico de un Calentamiento

Parece que la clave está en la exactitud de la distancia recorrida por el Nike+iPod. No me pregunteis por qué, ni cómo, pero parece bastante exacto. En mi primer recorrido el Nike+iPod registró 2650m, y repasándolo con el coche calculé 2,7 km, esto es, lo mismo. Magia potagia.

En definitiva, un cacharro la mar de majo…

VENTAJAS

  • En comparación con soluciones parecidas, es muy barato: 30€
  • Funciona muy bien, parece muy exacto
  • Es muy fácil de utilizar

INCONVENIENTES

  • Hay que correr, y no veas lo que cansa

Metafisica tetradimensional

Posteado por dbejar en January 20th, 2007

Quizas sea que en las maravillosas playas de Queensland, o en los sobrecogedores paisajes del outback, o navegando por la bahia de Sydney, resulta mas perceptible que las cosas tienen una estructura que no es creada por nosotros, los humanos, que las verdades necesitan creadores de verdades, que las cosas existen en el mundo independientemente de nuestras teorias sobre ellas. Quizas sea por eso que en las ultimas decadas la metafisica denostada por los filosofos del siglo XX, ha recobrado fuerza, y encontrado su sitio en las facultades de filosofia australianas.

Un tal Samuel Alexander, escribio un libro titulado: “Space, Time and Deity” (Espacio, Tiempo y Deidad). Un capitulo del libro era: ‘Time is de “mind” of Space’ (El Tiempo es la “mente” del Espacio). Subscribo lo que dice el profesor Alan Bigelow en referencia al citado capitulo: “no se muy bien lo que significa, pero sea lo que sea, es claramente metafisica”.

Samuel Alexander defiende una metafisica segun la cual, todo lo que es, existe en el espacio y en el tiempo. No hay un mundo sobrenatural fuera del espacio y el tiempo. No hay un Dios que transcienda el espacio-tiempo, no hay un mundo platonico de las ideas, o pitagorico de las matematicas. Solo hay cosas que existen antes o despues que nosotros en un lugar determinado de este mundo en el que vivimos, nos movemos, y, bueno, somos. Ademas, dice, cuando atomos de oxigeno e hidrogeno se juntan en determinadas condiciones, emerge algo que no existia antes y cuyas propiedades y caracteristicas son diferentes de aquellas de lo que esta compuesto. Y asi, de la union de atomos, moleculas, de moleculas, emerge la vida, y en la forma correcta la mente… Si alguien tiene interes puede leerse la obra del Alexander para entender como llega de ahi al concepto de Deidad, aun sin admitir la existencia un Dios que trascienda al espacio y el tiempo.

Numerosos seguidores de esta linea de pensamiento, rompen con la tradicional dicotomia entre cuerpo y mente, llegando mas lejos que Alexander, para romper la dicotomia entre tiempo y espacio; basicamente, el tiempo es una cuarta dimension que es mucho mas parecida a las espaciales de lo que nuestro sentido comun nos hace pensar. Asi, Frank Jackson, australiano, escribe un influyente libro: From Metaphysiscs to Ethics (De la metafisica a la etica). La metafisica de la que parte Jackson, es muy similar a la de Alexander y muchos otros australianos, todo lo que es, lo es en el espacio y el tiempo, no hay trascendencia, no hay terreno a lo sobrenatural. Cuando la gente a la que amamos esta lejos en el espacio, suele ser un consuelo que apesar de la distancia esta persona existe, es cierto que no existe aqui, en nuestra localizacion espacial, pero es cierto, y es cierto aqui y ahora que esta persona existe en su particular localizacion o coordenada espacial.

Los, atencion: palabro!, los ‘tetradimensionalistas’, dicen que las relaciones temporales son en ese sentido iguales a las relaciones espaciales. Volviendo al ejemplo anterior, pongamos que la persona a la que amamos esta lejos en el tiempo, en vez de estarlo en el espacio. Imaginemos que no existe ahora, pero que existio hace mucho tiempo, entonces, segun los ‘tetradimensionalistas’ puedes consolarte en el hecho de que aunque esta persona esta lejos de nosotros, y nosotros de ella, al menos, ambos existimos.

Esa persona no existe ahora, en nuestras coordenadas temporales, pero aun asi, es cierto y es cierto ahora, que esa persona existe en su particular localizacion temporal. Cualquier cosa que fue, es, o sera, es cierto, y es cierto ahora, que existe -con su particular coordenada, en este caso temporal-. No hay diferencia entre espacio y tiempo.

Si esto es asi, los ‘tetradimensionalistas’ podrian, y deberian afectar a algunas de las cosas que pensamos sobre el mundo, y a la manera en como nos sentimos con respecto a el.

Los Buddhistas dicen que si mirasemos mas alla de nuestro sentido comun.y adoptasemos una metafisica diferente, una metafisica de instantes, nos ayudara a alcanzar paz interior. La escuela Epicurea de la antigua grecia usaba argumentos muy similares a los de estos australianos, para deducir que si encontramos la metafisica adecuada, esto nos podra ayudar a librarnos de la anxiedad, y alcanzar un estado de tranquilidad duradera.

Por otra parte. un kiwi, un neozelandes, resistente a las corrientes de pensamiento del pais vecino, Arthur Prior, escribio un critico articulo titulado: “Thank Googness That’s Over” (”Gracias a Dios que se ha acabado”). Para Prior, nada que existio en el pasado, existe en el presente. Pensar que una situacion angustiosa ha pasado, y que ya no existe, es sin duda un consuelo.

Pero de la misma forma, un ‘tetradimensionalista’ podria argumentar que uno encuentra consuelo en haberse ido de, digamos, Irak, a pongamos Polinesia, y, asi, aun sabiendo que el sufrimiento existe aun Irak, encontrar alivio en no coincidir en las coordenadas espaciales con el dolor; y asi mismo nos consuela dejar en otras coordenadas temporales (el pasado) aquel dolor.

Quizas una critica mas severa a la metafisica tetradimensional es la de aquellos que destacan su cercania al reduccionismo tipico de la grecia clasica.

En cualquier caso, viva la metafisica, sea n-dimensional, sea reduccionista, o sea la Critica de la Razon Practica…o incluso la de la Pura….Â