Archivo de Abril 2006

David Blaine: siete bajo el agua y record de apnea

Viernes, 28 de Abril de 2006

Como habréis visto anunciado en muchos medios, David Blaine dice que va a estar una semana bajo el agua, comiendo y respirando por un tubito. Una vez terminado, va a batir el record de apnea aguantando la respiración durante 8 minutos y 58 segundos. Parece brutal, ?no?
Pues, como todo, tiene truco, aunque eso no le quita valor en absoluto. En Tempus Fungit nos lo cuentan.

Metodolodía: Xtreme Time-Wasting

Jueves, 27 de Abril de 2006

Increíble análisis que hace álvaro J. Iradier sobre esta novedosa metodología de desarrollo que utilizan las pymes (y no tan pymes) a la hora de afrontar nuevos proyectos.

Es muy importante que todos los recursos estén debidamente separados en capas bien diferenciadas, mínimo un número de 4, cuyos nexos de unión están vagamente definidos, permitiendo que la desinformación fluya casi desde cualquier punto hacia cualquier punto. De este modo el conocimiento se reparte de manera homogénea pero caótica, mientras que el dinero y el trabajo están perfectamente repartidos de manera heterogénea, determinista e inversamente proporcional. En las capas superiores debe concentrarse la mayor cantidad de dinero y la menor de trabajo, y en las capas inferiores donde se lleva a cabo el desarrollo el dinero se reparte en forma de limosnas.
Leelo entero aquí: Metodolodía: Xtreme Time-Wasting

Escribe Perl en Latin

Jueves, 27 de Abril de 2006

Si, si, pero Latin de verdad: la lengua muerta que solo usa en misa para dar bendiciones también sirve para programar en Perl. Con el módulo Lingua::Romana::Perligata puedes ofuscar el código a tope. Por ejemplo:


resulto damentum foundum atque defum.    # $result = $found && $def;
resulto damentum foundum defumque.       # $result = $found and $def;
resulto damentum foundum vel defum.      # $result = $found || $def;
resulto damentum foundum defumve.        # $result = $found or $def;

newere                                      # sub new
sic                                         # {
    meis datibus.                           #   my %data;
    counto intra Specimen
        postincresce.                       #   $Specimen::count++;
    datibus nullum horum benedictum.        #   bless %data, $_[0];
cis                                         # }

printere                                    # sub print
sic                                         # {
    modus tum indefinitus inquementum mori. #   die 'method undefined';
cis                                         # }

domus princeps.                             # package main;

meo objecto da                              # my $object =
        newementum apud Specimen.           #       Specimen->new;

printe apud objectum;                       # $object->print;

Inutil a tope. Por supuesto, por supuesto, via The Daily What The Fuck!?

?Quién puede nombrar el mayor número?

Miércoles, 26 de Abril de 2006

Gracias a Tio Petrus (estupenda página de divulgación matemática y científica), ví hace tiempo que publicaba una serie de 8 posts sobre números grandes, muy grandes.

Hay algunos… que piensan que el número de arenas es infinito en multitud… y hay algunos otros que, sin considerarlo infinito, todavía piensan que ningún número ha sido nombrado que sea suficientemente grande para exceder su multitud… Pero yo intentaré mostraros [números que] exceden no sólo el número de la masa de arena igual en magnitud a la Tierra… sino también en una masa igual en magnitud al universo.

No había tenido tiempo para leerlo con detenimiento, y ahora que lo he hecho, solo puedo decir que es impresionante (comentarios de los lectores incluidos). Os lo recomiendo, aquí tenéis los enlaces:

Y si queréis, aquí tenéis el artículo original de Scott Aaronson y la traducción al castellano por Jorge Alonso en formato PDF, de la que se han sacado los posts.

Aquí podéis ver la sucesión de castor atareado. Casi nada. Sacado de la Wikipedia: Busy Beaver

2-state 3-state 4-state 5-state 6-state
2-symbol 6 21 107 = 47,176,870 = 3.0 x 101730
3-symbol = 38 = 987,522,842,126  ???  ???  ???
4-symbol = 3,932,964  ???  ???  ???  ???
5-symbol = 924,180,005,181  ???  ???  ???  ???

De binario a byte y de byte a binario

Martes, 25 de Abril de 2006

Algunas veces nos podemos encontrar intentando convertir cadenas de caracteres en binario a su correspondiente byte.
Por ejemplo, tenemos un String con el siguiente texto “11000111″ y lo queremos convertir a un byte (que corresponde con 199 en decimal, si utilizamos una calculadora cualquiera que nos convierta de binario a decimal).
?Y qué sucede? Pues que no funciona y empezamos a pensar cosas raras sobre si los byte en Java son con signo o sin signo y demás suposiciones. Aclaremos todo esto viendo cómo falla y por qué.

Primer intento. Así, sin mirar la documentación ni nada, podemos probar con el método decode de Byte, que tiene toda la pinta de servir para esto.

String bb = "11000111";
Byte BB = Byte.decode(bb);

No funciona, ya que el método decode solo acepta cadenas en decimal, hexadecimal o en octal (ahora si nos leemos la documentación).
Y esto lo vemos claramente ya que la excepción que arroja:
java.lang.NumberFormatException: Value out of range. Value:”11000111″ Radix:10
nos indica que esta parseando el número en base 10 (radix:10), es decir, intenta convertir el 11000111 en decimal (11.000.111) y no en binario como queremos.

Segundo intento. Ahora probamos con el método parseByte, que admite como parámetro la base (radix) del número original a parsear. Como es un número binario, probamos con la base 2.

String bb = "11000111";
Byte BB = new Byte(Byte.parseByte(bb, 2));

Y nos devuelve un fantástico java.lang.NumberFormatException: Value out of range. Value:”11000111″ Radix:2.
?Cómo es posible esto, si ahora hemos utilizado el método correcto y hemos especificado explícitamente que es base 2?
El problema es que en Java, los byte (y los int) se guardan con signo, es decir, el bit de mayor peso (el situado en la primera posición empezando por la izquierda) indica 1 si el número es negativo y 0 si es positivo, por lo que no se guardan valores del 0 al 254, sino del -128 al 127 incluido. (Ver Java Language Specification: Integral Types and Values
Y nuestro número original que queremos convertir “11000111″ no respeta, ni tiene porqué respetar, esta especificación. Es un número binario positivo que puede tener cualquier longitud. Y, si fuera negativo, se especificaría directamente con un signo menos delante.
Por ejemplo, esta conversión si que funciona, ya que los dos números están dentro del límite -128/127

String positivo = "111";
String negativo = "-111";
Byte BBp = new Byte(Byte.parseByte(positivo, 2));
Byte BBm = new Byte(Byte.parseByte(negativo, 2));

Para solucionar esto solo tenemos que convertir nuestro número en binario temporalmente a un primitivo de tamaño superior (short o int) y luego hacemos un casting a byte.

String bb = "11000111";
short ss = Short.parseShort(bb, 2);
Byte BB = new Byte((byte)ss);

// O tambien sin dar tantas vueltas
byte bait = (byte)Short.parseShort(bb, 2);

Ahora nos falta el caso inverso. Tenemos nuestro byte y queremos pasarlo a su cadena binaria correspondiente. Pero resulta que la única clase que tiene un método que haga exactamente esto es la clase Integer, método toBinaryString.
Si utilizamos este método, obtenemos una cadena demasiado larga que no se corresponde con nuestra cadena original.

String bb = "11000111";
byte bait = (byte)Short.parseShort(bb, 2);
String s = Integer.toBinaryString(bait);
System.out.println(s);

Este código nos devuelve “11111111111111111111111111000111″. Esto sucede así al promocionar de byte a int (la explicación de esto la haremos otro dia). Así que tenemos que eliminar de nuestro byte los “1″ iniciales para quedarnos solo con las 8 últimas posiciones. Para esto utilizamos la máscara 0xFF (o lo que es lo mismo: 11111111 en binario o 255 en decimal) y hacemos un and binario con el operador &.

String bb = "11000111";
byte bait = (byte)Short.parseShort(bb, 2);
String s = Integer.toBinaryString(bait & 0xFF);
System.out.println(s);

Ahora si que obtenemos la cadena binaria original. Y con esto ya podemos resumir las operaciones a realizar para convertir una cadena en binario a byte y viceversa. Para lo primero, solo tenemos que utilizar el método parseShort de la clase Short (o el método parseInt de la clase Integer…) y hacer un casting a byte. Y para lo segundo, utilizaremos el método toBinaryString de la clase Integer pero haciendo un and binario con 0xFF.

Liberar memoria en Firefox al minimizar

Martes, 25 de Abril de 2006

Si tu Firefox con 26 pestañas abiertas empieza a consumir cantidades ingentes de memoria, con esta cambio en la configuración podrás liberarla con solo minimizar. Pruébalo (siempre puedes quitarlo si no te gusta)

  1. Ir a la url about:config
  2. Botón derecho del ratón: New -> Boolean
  3. Introducir nombre de preferencia: config.trim_on_minimize
  4. Introducir valor a true

No recuerdo donde lo ví por primera vez, quiza por algún lugar…

Conservar créditos en Emule

Martes, 25 de Abril de 2006

Sacado de Mundo Geek

Estos son algunos de los archivos importantes a conservar al actualizar o cambiar de cliente de eMule:

  • addresses.dat: Direcciones web desde las que actualizar la lista de servidores.
  • clients.met: Créditos acumulados por otros usuarios.
  • cryptkey.dat: Necesario para conservar los créditos que hemos acumulado, es una clave RSA que sirve para identificarnos.
  • known.met: Los hash de los archivos compartidos.
  • preferences.dat: Necesario para conservar los créditos que hemos acumulado, contiene el userhash o identificador de usuario.
  • preferences.ini: Almacena las opciones de configuración del eMule.
  • server.met: Servidores.
  • staticservers.dat: Lista con los servidores fijos.

Pues nada, ya sabes que teneis que conservar cuando cambiéis de versión o mod.

Anuncio para programadores

Martes, 25 de Abril de 2006

Anuncio EA

Preguntas en entrevista de trabajo

Lunes, 17 de Abril de 2006

Via 86400.es, me encuentro con una lista de posibles preguntas (algunas bastante complicadas) que te pueden hacer en una entrevista. Esperemos que nadie las pregunte todas, pero estad seguros que si que pueden caer algunas, asi que no viene mal estar preparados, sobre todo si el puesto realmente nos importa.
Personalmente, en casi todas las entrevistas que me han hecho me han preguntado cual era mi mejor y mi peor cualidad o como me definiria. Creo que en estas preguntas tan “especiales” se valora casi lo mismo lo que digas y como lo digas.. o quiza la capacidad que tienes para salir del paso en preguntas complicadas.
?Alguien tiene alguna anecdotas en entrevistas de trabajo?

1. Háblame de tí
2. ?Qué sabes de nuestra empresa?
3. ?Por qué quieres trabajar con nosotros?
4. ?Qué puedes hacer que no sepan otros?
5. ?Que te parece más atractivo de tu puesto? ?y qué menos?
6. ?Por qué deberíamos contratarte?
7. ?Qué buscas en un trabajo?
8. Por favor, defíname su puesto de trabajo
9. ?Cuánto tiempo tardaría en realizar una contribución considerable a nuestra empresa?
10. ?Cuánto tiempo estaría con nosotros?
11. Su currículum sugiere que puede estar sobrecualificado o con demasiada experiencia? ?qué opina?
12. ?Cual es su forma de trabajo?
13. ?Es Ud un buen encargado? Dénos algunos ejemplos. ?Siente que tiene un poder especial para dirigir?
14. ?Qué busca cuando contrata gente?
15. ?Ha tenido que despedir a alguien? Díganos las razones y cómo resolvió la situación
16. ?Qué cree que es lo más difícil de ser un buen encargado o ejecutivo?
17. ?Que tendencias ve en nuestra empresa?
18. ?Por qué dejó su último trabajo?
19. ?Cómo se siente dejando todo lo anterior para buscar un nuevo empleo?
20. En su actual posición, ?qué características le gustan más? ?y cuales menos?
21. ?Qué piensa de su jefe?
22. ?Por qué no está ganando más con su edad?
23. ?Cómo cree que debería ser remunerado su puesto?
24. ?Cuales son sus metas a largo plazo?
25. ?Cuánto éxito ha tenido hasta ahora?

Lista sql de paises

Jueves, 13 de Abril de 2006

Via meneame.
El autor de korsarios ha creado un script SQL para crear y cargar una tabla con todos los paises del mundo en inglés y en español a partir de la Wikipedia. Un buen trabajo y bastante útil.