Monthly Archives: January 2008

You are browsing the site archives by month.

Lenguajes, estadísticas y tonterías

Hay muchas maneras de conocer la popularidad de un lenguaje de programación, o una tecnología en particular. Me encantan este tipo de historias a pesar de su dudosa fiabilidad, al menos cuando se toman sus valores absolutos, sin una interpretación detrás. Me entretengo más que un tonto con un lápiz con servicios de este tipo. Hay unos cuantos, comentaré los que conozco y más útiles pueden resultar:

  • El abusurdo índice Tiobe (que cada vez me lo creo menos).
  • Google Trends, el cual puede ser usado para cualquier cosa en general, aunque es difícil de usar pues muchas veces términos de lenguajes o tecnologías significan algo más en el mundo real (Java es una isla y un tipo de café, ruby es una piedra preciosa, python es una serpiente o una referencia a los Monty Python, etc…).
  • Indeed.com sitio web estadounidense de búsqueda de empleo que ofrece un servicio de tendencias en los trabajos, tanto por valores absolutos como relativos. El más simple y potente de usar.

Jugando un poco, me he encontrado con gráficos bastante curiosos. Nadie duda que en estos momentos Java es lo más usado, pero creo que tampoco nadie dudará en que estamos ante un auge de los lenguajes dinámicos. Veamos datos absolutos:
Java, perl, php, python, ruby chart absolutes values
La primera posición de Java no sorprende, la segunda de perl, a mi al menos, tampoco; luego tenemos php por encima de python y ruby. Los datos son bastante usuales. Recordemos que estamos antes tendencias de ofertas de trabajo, es decir el uso de lenguajes en el mundo empresarial. Pero ahora veamos sus valores relativos (es decir, su crecimiento y tendencia).

Por la gráfica anterior, podemos deducir que los valores de Java y Perl son prácticamente iguales en el tiempo, sinónimo de su madurez, pero ¿qué pasa con php, python y ruby?:
Java, perl, php, python, ruby chart relatives values
¿De quién es esa línea que va por el 550%? Ruby. Curiosa situación, quizá el apoyo de Sun tenga algo que ver en todo esto. Quizá…

Adios definitivo al spam en el blog

Últimamente el spam en el blog se estaba convirtiendo en algo alarmante. Se estaba incrementando de una forma continua y llegaba ya a tener 1000 al día (algo así como 2500% de las visitas). Akismet hacía su labor decentemente, pero siempre hay alguno que se colaba, y si eso lo vamos multiplicando por los días al final llega a convertirse en una pesadilla. Alguna solución había que poner.

La mayoría del spam, 90%, venía por trackbacks. Dado que no son, IMHO, algo muy útil, he decidido desactivarlos. Con esto iba a solucionar la mayor parte del problema (90% :D), pero si nos ponemos, ¡nos ponemos!. Queda eliminar todos los malditos bot comentaristas.

El principal problema en la lucha contra el spam, es que es una continua batalla entre los spammers y el resto del mundo. Si se comienza a utilizar la táctica ‘x’, los spammers pensarán en sobrepasar esa barrera en concreto, en definitiva, es mucho más fácil atacar (spammer) que ser atacado. Típico ejemplo sería de cómo empezaron los correos vendiéndote viagra con imágenes, hasta entonces los típicos filtros eran bayesianos analizando las palabras (e.g. si contiene la palabra “viagra”, ¡chungo!). Una imagen no la puedes procesar como texto (al menos en tiempo computacional factible como para gestionar miles de correos por segundo) por lo que se puede solucionar aplicando funciones hash a las imágenes, para identificarlas. Entonces una forma de saltar esto es usando imágenes ligeramente modificadas (un simple pixel es suficiente) que produciría diferente resultado al aplicar la función hash. Vamos, típico juego del gato y el ratón…

Por otro lado, si tratas una simple batalla contra el spam (por ejemplo este blog) es mucho más sencillo ganarla (que la guerra) pues puedes aplicar soluciones particulares al problema, por lo que garantizas tu victoria, ves que bien. Mi simple, pero efectiva, solución es forzar que los comentarios sean enviados desde un navegador con javascript activado, insertando un campo oculto en el formulario que será rellenado con un valor fijo mediante javascript al finalizar la carga de la página. Este valor se comprobará en el lado del servidor que existe, sino es el caso, rechazar comentario.

Algo así como añadir esto a la parte de los comentarios de tu theme (jQuery lo tengo debido a otros plugin de wordpress):

<input type="hidden" id="fuck" name="yeah" value="spam" />
(...)
<script>
jQuery(document).ready(function() {
      jQuery('#fuck').val('42');
}
</script>

Y esto en las primeras líneas de wp-comments-post.php de la carpeta raiz:

if($_POST['yeah'] !== '42')
    wp_die( __('U re a frakking spam bot') );

Desde que he puesto esta solución, mi contador de spam no se ha movido del 0. ¡Y que siga así! Por si alguno lo está pensando, el planteamiento todavía más simple de no usar javascript para rellenar el campo oculto (ponerlo fijo), lo probé y redujo la cifra de spam en cierta medida, pero no del todo. También se podría rellenar el campo usando javascript “simple” (sin jQuery) pero es algo bastante más sencillo de saltarse. Al usar jQuery (librería de terceros) fuerzas a que el bot que quiera spamearte a descargar javascripts de terceros, algo que puede resultar costoso para un bot (y que hasta ahora, parece que no hacen).

The Pragmatic Programmer

The pragmatic programmerThe Pragmatic Programmer es un conocido libro sobre ingeniería del software que dio comienzo a una serie de libros con planteamientos similares, para programadores pragmáticos.

El libro se mueve en torno a una serie de consejos, ideas y observaciones para desarrolladores. Toca prácticamente todos los puntos en el trabajo diario de un programador, desde las herramientas a usar a cómo implementar incuso cómo actuar y pensar. A decir verdad, muchos capítulos podrían aplicarse a cualquier otra labor y son bastante genéricos.

Al final del libro viene una chuleta con todos los tips que se han ido mencionando, muy curiosa. La mayoría de ellos son bastante razonables, como “Always design for concurrency“, otros son interesantes y sorprendentes, “English is just a programming language”; pero la mayoría son tópicos que cualquiera con un mínimo de experiencia conocerá, “DRY“, “Think about your work“, pero que no viene mal verlos en escrito una vez más.

En general es un libro realmente bueno, y que cualquiera que le guste leer libros técnicos, debería tener en su lista, pues además es muy corto (quitando anexos, poco más de 200pag., letra gorda y fácil lectura). No es un libro donde aprendas cosas concretas, lo definiría más bien como una forma de dialogar sobre el desarrollo y la programación, algo bastante divertido :), aunque en este caso el diálogo es unidireccional de los autores hacia ti, suficiente.

Su principal problema es su extensión, se queda corto, muy corto. No entra en profundidad en ningún aspecto, simplemente estamos dialogando sobre temas. Y en aquellos donde dominas puede resultar incluso molesto (el capítulo sobre herramientas estuve a punto de saltarlo y eso que odio no leer los libros linealmente) puesto que no puedes participar en dicho diálogo. Además la mayoría de temas que trata suelen ser cosas que ya conocerás, pero nunca está de más saber el punto de vista de otro, ¿no crees?.

Lo mejor del libro es que a pesar de que la mayoría de las cosas ya las sabrás, en determinados puntos el autor te sorprende con algo que no esperabas que dijera (seguramente estas “sorpresas” son bastante subjetivas y dependientes del lector), solo por esto, ya lo recomiendo.

Es, en definitiva, un libro sobre filosofía que toca, disimuladamente, temas de ingeniería del software.

Abstractions live longer than details

Tip #53

¿Crítico o artista?

Cuando los críticos de arte se juntan, hablan sobre la forma, la estructura y el significado. Cuando los artistas se juntan, hablan sobre dónde comprar trementina barata.

Pablo Picasso (Artista, 1881-1973)

(La trementina es un disolvente de pinturas y barnices)

MacBook Air, fino y seguro

¿Quién todavía no se ha enterado del nuevo portátil de Apple? Por fin podemos disfrutar de un portátil de tan solo 1,94 cm. de grosor en vez de los 2,95 cm. de mi Acer, además podré usar un multi-touchpad, que aunque sea lo más incómodo del mundo, queda chulo, chulo.

Pensando en tu seguridad no incorpora lector de cds/dvds ni tampoco conexión ethernet, y solo un usb, ¡para qué más! Los cables quedan feos, ¡fuera conexiones!. Todo por el módico precio de 1649€ en su versión básica.

Y tú, ¿cuántos te vas a comprar?.

wiki wiki wiki.


Aquí podemos observar una comparativa con uno de sus competidores directos.

Subversion en aplicaciones Java desde Ubuntu

Cualquiera que haya usado Java, tanto usuarios como desarrolladores, habrán tenido múltiples problemas debido al tipico problema del classpath y derivados. Es posiblemente uno de los (múltiples) principales problemas de Java. Y no será por soluciones adoptadas en otras ámbitos ampliamente usadas y aceptadas como válidas. Pero bueno, ese es otro debate.

Para poder interactuar con subversion desde aplicaciones Java necesitas la librería cliente JavaHL, ésta puede ser instalada fácilmente usando los paquetes de tu distro, en Ubuntu:

$ sudo aptitude install libsvn-java

Pero a pesar de esto, tus aplicaciones Java seguirán sin “encontrarla“, necesitas indicar en tu comando de ejecución de cientos de caracteres de tu aplicación el siguiente parámetro:

-Djava.library.path=/usr/lib/jni

Obviamente /usr/lib/jni es donde está la librería (el .so), quizá en otras distros no-ubuntu sea diferente.

En mi caso particular lo necesitaba para subclipse en Aptana, en cuyo caso hay que añadir esa opción al AptanaStudio.ini donde están los parámetros usados al arrancar Aptana.