Archivo para junio de 2008

Campeones de Europa

España, campeona de Europa 2008

Como hice en su momento con la selección de baloncesto, este es mi pequeño homenaje a la selección española de fútbol por su victoria de la Eurocopa 2008.

Porque esta vez, y yo no es que entienda demasiado de fútbol, hemos jugado bien. Hemos jugado bien todos los partidos y, aunque ha costado un poco (sobre todo este último partido), hemos ganado. Y hemos ganado jugando al fútbol, no jugando un partidillo en el patio del colegio.

Y ya nos era hora también, cojones… Enhorabuena muchachos.

La validez de las teorías

La validez de las teorías científicas depende de su capacidad para dar cuenta de los fenómenos observados, y de la puesta a prueba experimental de sus hipótesis.

Desde Paleofreak comentando las trampas antidarwinistas.

Esto es una buena contestación para todos aquellos que dicen que sólo es una teoría. Y no sólo la Teoría de la Evolución de Darwin sino cualquier teoría científica.

Cosas del ANSI C

Revisando el código fuente de la implementación del compilador de Ruby (así, por aprender) he visto algo en C que no había visto nunca (di que tampoco es que tenga mucha experiencia en C) y es la diferencia entre la declaración de parámetros entre ANSI C (C89) e ISO C (C99):

#include <stdio.h>

// compila con cualquier tipo de parámetros en la llamada (ANSI C)
int
testFunction1(parm1,parm2)
int parm1;
int parm2;
{
printf(“1. Funciona? parm1 = %d, parm2 = %d\n”,parm1,parm2);
printf(“1. En serio? parm1 = %s, parm2 = %d\n”,parm1,parm2);
return 0;
}

// compila pero sólo se le pueden pasar parámetros de tipo entero (ISO C)
int
testFunction2(int param1,int param2) {
printf(“2. Functiona? param1 = %d, param2 = %d\n”,param1,param2);
return 0;
}

int
main(void) {
printf(” -> testFunction1()\n”);
// funciona con cualquier tipo de parámetros (ANSI C)
testFunction1(“vida”,42);
printf(” <- testFunction1\n”);

// funciona sólo con enteros, con otro tipo no compila (ISO C)
printf(” -> testFunction2()\n”);
testFunction2(‘vida’,42);
printf(” <- testFunction2\n”);
return 0;
}

Con la primera forma, el tipo de los parámetros fuera de la declaración de la función, cuando se llamada a dicha función se le le puede parasar cualquier tipo de parámetros e, internamente, los convertirá al tipo declarado posteriormente aunque, como se puede ver en el segundo printf, dependiendo de si le pasas un %d o un %s, imprimirá una cosa u otra aunque su tipo sea distinto.

En la segunda forma, es el propio compilador el que muestra un error cuando pasas un parámetro que no coincide con el tipo declarado.

La salida es más o menos la siguiente (se puede ver que nuestro parámetro, aunque posteriormente declarado como int, también contiene la cadena vida):

-> testFunction1()
1. Funciona? parm1 = 134514096, parm2 = 42
1. En serio? parm1 = vida, parm2 = 42
<- testFunction1
-> testFunction2()
2. Funciona? param1 = 1986618465, param2 = 42
<- testFunction2

Para que esto compile también hay un pequeño truco y es que la palabra «vida» como primer parámetro de la segunda función va entre comillas simples, esto es, en lugar de tomarse como una cadena (char[] para ser exactos) se toma como un caracter (char), sí, como un caracter de 32 bits en lugar de 8 (es una palabra con 4 letras, un byte por letra). Por supuesto, con el correspondiente warning, pero compila.

Y aunque esto teóricamente es del C antiguo, viene muy bien para pasar cualquier tipo de parámetro a una función en lugar del famoso void*. El problema es saber, dentro de la función, qué es lo que llega.

No se si esta anotación es útil, pero al menos es curioso. El saber nunca está demás.

Frase para ligar

Si te preguntara si te quieres acostar conmigo, ¿sería la misma respuesta que a esta pregunta?

La mejor frase para ligar que he visto.

Desde Testosterona.

Sois unos mierdas

Ya hace tiempo que lo vi pero al final (tampoco es que este blog lo lea mucha gente) pues no lo puse. Pero en realidad creo que sois unos mierdas por la bajada de pantalones ante una ¿asociación? de gente que no tiene ideología pero promueve la ¿ideología? del humanismo cristiano.

Porque, lo siento mucho, retirar una campaña publicitaria de un programa que dice verdades sobre la iglesia por las presiones y amenazas de una secta asociación es de… hipócritas, porque seguro que luego visteis el programa y pensábais lo mismo que yo y que mucha más gente.

Y como lo pienso, os lo digo.

Bonita historia

El mayor placer de una persona inteligente es aparentar ser idiota delante de un idiota que aparenta ser inteligente.

Sacado de una bonita historia. Me recuerda a las 5 lecciones básicas de hace un tiempo.

Firefox 3 y los plugins

Llevo escasos 5 minutos con el Firefox y ya echo de menos algo… ¡¡los plugins!!

No funcionan ni la mitad. Y algunos no es que sean útiles, es que son necesarios. Por suerte el Web Developer funciona, pero los que no funcionan son demasiados:

  • ColorZilla
  • Donwload Status Bar
  • Firebug
  • Greasemonkey
  • Html Validator
  • Locationbar2
  • Tab Mix Plus

Y eso que tengo pocos instalados… a ver si los que los desarrollan se ponen las pilas y nos dan un alegrón porque estoy seguro de que estos plugins los usa muuuuucha gente.

No soy impaciente pero… ¡¡los quiero yaaaaa!!

Actualización 27/06/2008: ¡¡Ya funcionan todos…!! Incluso el Tab Mix Plus que no está todavía en la página de complementos pero sí tienen una versión de desarrollo que funciona.

Firefox 3

Firefox 3 Download Day

Todo el mundo habla de Firefox 3. Yo ya lo he descargado ¿y tú?

Y, además, con certificado y todo:

Certificado de haber bajado el Firefox 3

Definición

geek (n.)
1. una persona que ha elegido la observación en lugar del conformismo; alguien que persigue la habilidad (especialmente la técnica) y la imaginación en lugar de la aceptación social de la mayoría.

Definición de geek en Mundo Geek.

Buscando andan… y llegan aquí

Todavía hay gente que busca sexo, así, sin más, en un buscador de los generales y pretende que le salgan cosas guarras. Porque ‘sexo’, así por aprender, no se busca con una sola palabra. De hecho la búsqueda anterior ha llegado hasta este blog (eso sí, bastante al fondo, en la página siete) y guarredidas no es que haya muchas, la verdad.

Si sois niños no debéis buscar eso. Al menos de momento. Que luego os creéis todo lo que veis y no, la realidad no es así.

Si ya sois mayorcitos, lo que necesitáis no es sexo, es un curso de búsquedas en Internet. ¿Cómo pretendéis buscar sexo así, sin más, con una sóla palabra en el buscador? Que no, que no…

Aunque parezca mentira, para ir empezando (uf, no sé como se puede ir empezando en esto del sexo en Internet… yo prefiero la realidad. Será que estoy chapado a la antigua ¿no?) pues quizás lo mejor sea buscar en la Wikipedia y ya, luego, a partir de ahí… bueno, seguro que ideas no os faltarán…

De todas formas, las búsquedas de sexo, a secas o no :) , en los buscadores generales mueven ingentes cantidades de datos… y sobre todo de dinero. Y, por supuesto que no me sorprende, las mayores búsquedas están en algunos países donde está, digamos,… mal visto.

¿Todos los personajes de Futurama?

Personajes de Futurama

¿Están todos los personajes de Futurama. Yo creo que no. Además, en los comentarios de aNieto2k comentan los que echan en falta.

Por cierto, tengo la película de Futurama, El gran golpe de Bender, ahí esperando a ser vista. ¡Y van a salir otras tres! A ver si tengo un rato…

Paga por algo que no te sirve

Y sigo con la revista de antes. Otro articulillo dice que le quites peso a tu Windows Vista. Qué bien…

Pero vayamos por partes. Lo primero que dice el artículo: «El nuevo sistema operativo de Microsoft es seguro, potente y completo».

Lo de seguro vamos a dejarlo de lado. Ningún sistema operativo es seguro del todo. Hay algunos que lo son más que otros y ya está. Aquí, lo que realmente llama la atención es cuando alguien encuentra un agujero de seguridad, los implicados los primero que hacen es negarlo. Cuando hay miles de sitios afectados por un ataque, no les queda otra que decir lo que hay. Pero aún así, tardan meses en dar una solución. Impresionante.

Respecto a potente… pues aquí digo que no. Y un no rotundo. Un Windows Vista no funciona en un ordenador de hace un par de años. Y eso no es ser potente. La máquina donde se ejecuta es potente. El sistema operativo es un consumidor de recursos. De potente ni el nombre.

Y completo. Hombre, muy completo no debe ser cuando la suite ofimática la tengo que comprar a parte, un sistema antivirus lo tengo que comprar a parte (uno bueno, quiero decir), un IDE lo tengo que comprar a parte… Más que completo yo diría que justito.

Después de contarnos tres mentiras, el susodicho artículo continúa diciendo que le quites peso a tu Windows Vista. Es decir, te acabas de comprar un ordenador, potente donde los haya, con tu flamante y recién instalado sistema operativo y ¿lo primero que tienes que hacer es quitarle peso instalando una aplicación que no es de ellos y que tienes que pagar a parte? Pues vaya sistema por el que he pagado (o me han hecho pagar, vamos), ¿no?

Yo, sinceramente, casi que prefiero otra cosa. Y no, no es que esté en contra de Microsoft, no, ni mucho menos. Si Microsoft hiciera sistemas operativos en condiciones, sistemas operativos que funcionasen realmente bien en hardware medianamente antiguo y que fuese menos márketing y más «hacer las cosas bien», te aseguro yo que lo usaría muchísima más gente y encima, muchísimo más contenta. Pero ellos se empeñan en ganar dinero como sea, invirtiendo en publicidad en lugar de invertir en hacerlo bien, y así les van las cosas.

Y ahora ya le están viendo las orejas al lobo. Por un lado, Internet, viendo como Google se lo está comiendo todo y les falla la estrategia. Por otro, sistemas operativos, como Linux gana terreno poco a poco pero día a día y sin descanso. Y por otro, la ofimática, como los estándares es lo que realmente quiere la gente y los gobiernos.

¿Después de ver todo esto les entrará en la cabeza que quizás su línea de negocio no sea la correcta en estos tiempos y que hay que darle un pequeño giro? Yo creo que no.

Carpetas Virtuales (o como una idea ajena pasa a ser propia)

Leyendo un artículo en una revista de informática me encuentro que en Windows Vista tenemos una «nueva» característica llamada Carpetas Virtuales. Además, el redactor la califica como un gran avance a la hora de trabajar con archivos.

Las carpetas virtuales son algo así como búsquedas que se pueden guardar, con lo que al abrirlas de nuevo, se vuelve a ejecutar la búsqueda y en esa carpeta virtual tienes todos los archivos que indica dicha búsqueda. Por ejemplo, buscas todos tus mp3, guardas la búsqueda y cada vez que abras esa carpeta vas a seguir teniendo tus mp3, incluso los nuevos.

A lo que voy: lo siento mucho pero esta característica ya lleva muchos años implementada y funcionando. Por desgracia, no en ningún sistema operativo de los más conocidos, sino que está en mi querido BeOS.

En BeOS, cuando se realiza una búsqueda, esta se puede guardar con un nombre, para luego, según le hagas doble click en su icono, pues vuelva a ejecutarla y tengas una carpeta virtual con todos los archivos encontrados.

Queries de búsqueda en BeOS

Esto no es nuevo señores de Windows Vista. Esto ya estaba implementado y lo único que han hecho ustedes ha sido fusilarlo copiarlo y hacerlo como suyo. Y no. Por ahí no paso.

Por desgracia, y ya sé que soy un quejica, BeOS ha desaparecido. Pero espero que Haiku siga sus pasos y, por fin, se convierta en el gran sistema operativo. Porque potencial tiene. Otra cosa será que los grandes le dejen, porque en esto de la informática, como en casi todo, lo que prima es el dinero, no las cosas bien hechas.

Gracias

Gracias por no tirar a la basura tu mente

Rendimiento de PHP

Cuantas veces habré oído que si PHP es lento, que si el código es churrigueresco, que si las aplicaciones con PHP no son buenas… Y todo son bobadas.

Para lo de mal código la respuesta es bien sencilla: es el programador el responsable del código bueno o malo, no el lenguaje. Yo, al menos de momento, en todas las aplicaciones serias (las páginas web para el amigo del amigo pues como que no) hago código en condiciones. Y con «en condiciones» me refiero a utilizando un framework MVC, creando objetos de negocio y utilizando, siempre que algún problema se pueda solucionar con alguno de ellos, los patrones de diseño.

Para lo del rendimiento tenemos una página, The PHP Benchmark, donde nos lo ponen un poco más claro. Incluso tenemos una traducción en Sentido Web:

  • Realizar un foreach es siempre más rápido y si no recuperamos la clave del array mejor aún.
  • Un for es más rápido si no calculamos previamente en una variable el tamaño del array que recorremos. Además, sizeof es más rápido que count.
  • Cuando vamos a asignar el valor de una posición de un array a una variable para tratar con ella, es conveniente hacerlo por referencia ($alias = & $array[$i]).
  • No es más rápido crear un objeto como referencia ($obj =& new SomeClass();).
  • if es más rápido que switch/case y ligeramente más rápido es usar === que == (en la referencia en español está equivocado).
  • Parece ser que el uso de comilla simple o doble en las últimas versiones se ha mejorado y no existe apenas diferencia.
  • Contrariamente a lo que ponía en el manual hace tiempo, un echo "aa"."aa"."aa"; (echo de una cadena concatenada) ahora es más rápido que el echo "aa","aa","aa"; (echo de varias cadenas separadas por coma). No sucede lo mismo para variables donde el tiempo viene siendo similar.

Además, si queremos acelerar un poquito más nuestro código PHP, tenemos lo que se llama un opcode cacher, que es un plugin que cachea el código PHP pero ya precompilado en su bytecode, con lo que en sucesivas llamadas al script, no es necesario recompilarlo y ejecutarlo sino sólo ejecutarlo ya que lo coge precompilado de la caché.

Dos ejemplos de estos plugins son eAccelerator y XCache. eAccelerator lo he probado y funciona bastante bien (no es la panacea pero sí que se nota a simple vista) y ahora quiero probar con XCache.

E independientemente de todo esto del rendimiento tengo que decir que PHP es un lenguaje más. Un lenguaje como otro cualquiera, con sus ventajas e inconvenientes y tan potente o útil como el partido que le pueda sacar el programador. Porque herramientas, plugins, frameworks y clases reusables son lo que sobra para hacer buen código. Ahora ya no hay excusa.