17 diciembre 2006

25 Killer Apps of All Time

Las 25 aplicaciones más importantes de la historia de la informática. Según el autor que ha hecho eso, seguro que cada uno haría su propia lista.

Creo que han exagerado un poco poniendo 3 navegadores en la lista: Netscape, Explorer y Firefox. Además pone 'Apps' pero han incluido el MacOS X que tengo entendido que es un sistema operativo. Si incluimos sistemas operativos yo añadiría BSD y Linux.

mmmmm..... está el Mathematica.... ufff.... que miedo....

16 diciembre 2006

Quine

La programación tienes cosas muy extrañas, pero la metaprogramación más aún.

La metaprogramación consiste en crear programar que cuando se ejecuten creen otros programas. Por ejemplo, tu puedes escribir una página PHP que cuando la ejecuta el servidor crea una web con un trozo de código Javascript, eso es metaprogramación muy básica.

Pero a lo que vamos hoy, algunos programadores cuando se aburren, se ponen a escribir programas que al ejecutarse, muestran por pantalla su propio código fuente. Pero ojo, muestran el código fuente sin abrir el fichero y leerlo, tiene que estar el código fuente implícito dentro del programa. Esto es lo que se conoce como quine en honor a Willard Van Orman Quine.

En la Wikipedia se pueden encontrar ejemplos que quines en muchos lenguajes. Yo por más que miro los quine de C, no consigo entender su funcionamiento.

Por otra parte, el de Basic es el más sencillo:


10 LIST


Pero creo que eso es trampa también.

12 diciembre 2006

HQ9+

He encontrado un nuevo lenguaje de programación HQ9+. No es tan conocido como el C o el Java, pero tiene una sintaxis muy sencilla y para cierto tipo de tareas es el lenguaje más rápido que existe. Su creador, después de años de investigaciones, estudiando todos los ejercicios que les ponen a los estudiantes de programación en 1º, ideó un lenguaje para hacerles la vida más fácil.

HQ9+ tiene 4 instrucciones:
H Imprime el mensaje "Hello, World!"
Q Imprime el código fuente del programa
9 Imprime la letra de "99 Bottles of Beer on the Wall".
+ Incrementa uno al acumulador

Lo del 99 Bottles ese, viene que ser como nuestra canción recursiva de "un elefante se balanceaba...".

Por si alguien se lo pregunta: efectivamente, la instrucción + no sirve para nada.

Hay un intérprete online de este lenguaje aquí.

Como se puede ver, facilita mucho los inicios en la programación.

06 diciembre 2006

El zoo de las bases de numeracion

Del blog matemático Tio Petros: El zoo de las bases de numeracion.

Todos (los informáticas) conocen las bases de numeración 2, 8, 10 y 16 ¿no? Pues este artículo viene a explicar bases curiosas como: 1/10, raiz cuadrada de 10, 2i, la base maya, etc.

¿Curioso pero inutil?

05 diciembre 2006

INTERCAL

He visto una noticia en barrapunto sobre lenguajes extraños y me he acordado de INTERCAL, así que voy a hablar un poco de él.

Es un lenguaje inventado por un loco, un lenguaje creado para locos, un lenguaje que genera locos. Una frikada más de la informática.

Las características básicas del lenguaje son:

- Es un puto caos
- Cuesta muchísimo tiempo programar cualquier cosa por sencilla que sea
- En vez de la instrucción GOTO # para indicar que hay que saltar hacia la instrucción #, tiene COME FROM #, que indica que cuando se ejecute la linea # se tiene que ejecutar lo que viene después del COME FROM.
- Hay que poner PLEASE en el programa cada pocas lineas porque si no el compilador lo considera una falta de respeto y da errores.
- Pero no hay que poner demasiados porque si no nos considera unos pesados y también falla la compilación.

En el manual oficial de INTERCAL, que es un festival de humor, viene a decir (lo pone con otras palabras):

INTERCAL es un lenguaje muy sencillo, con muy pocas instrucciones, por tanto es de esperar que sea un lenguaje ideal para los novatos que están aprendiendo a programar. Sorprendentemente, es un lenguaje ideal para conseguir que los que están aprendiendo a programar se planteen estudiar otra cosa.

El Hello World en INTERCAL, obtenido de la wikipedia:


DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #234
DO ,1 SUB #2 <- #112
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #214
PLEASE READ OUT ,1
PLEASE GIVE UP

04 diciembre 2006

Boost C++ Libraries

Todo el mundo sabe que C++ es como C pero orientado a objetos. Pero aparte de eso, C tiene una librería estándar muy muy simple, mientras que C++ incluye un montón de objetos como los flujos y la clase string y además tiene la librería de plantillas: la STL.

La STL es una librería de plantillas que incluye cosas tan útiles como las pilas, colas, diccionarios o conjuntos. Además de diversos algoritmos para trabajar con estos tipos de datos.

Hoy voy a hablar de Boost. Boost es una librería con montones de clases nuevas para C++, incluye más funciones matemáticas, grafos, soporte para concurrencia... etc.

Lo bueno que tiene Boost frente a las otras muchas librerías que se han creado para C++ es que será estándar algún día. La próxima versión del lenguaje C++ que se suele llamar C++0X incluirá bastantes clases de la librería Boost por lo que C++ contrará con una librería estándar mucho más amplia, aunque no tanto como la de Java o .Net.

Como curiosidad, el nuevo C++ se llama de momento C++0X, el 0X es por el año en que se publicará, se espera que sea en esta década pero no se sabe que año (por eso la X), los más puestos en el tema dicen que apurarán al máximo para sacarla y que X = 9.

28 noviembre 2006

La coliflor y otras frikadas

Yo sigo escribiendo en este blog aunque no lo lea nadie. Últimamente he estado dando la brasa con la programación y con linux en los artículos que escribía. Anuncio que seguirá siendo así de momento.

Me bajé el otro día el Knoppix 5.0 en DVD, necesitaba un liveCD para hacer pruebas y el de Kubuntu está bien, pero es un CD y no lleva casi aplicaciones. El Knoppix 5.0 lleva millones de cosas, entre ellas todos los programas necesarios para compilar.

Me he puesto esta tarde a instalar Linux From Scratch. No es una distribución propiamente dicha, es un libro (PDF o HTML) en el que explican paso a paso cómo instalarte un sistema linux propio a mano. Te indican donde bajarte el código fuente de los paquetes, las instrucciones para compilarlos y al final la explicación de cómo crear los distintos ficheros de configuración y de arranque.

Lo quería probar a instalar principalmente para conocer mejor el sistema Linux, aunque obviamente no me fiaría de un sistema operativo "creado" por mí.

He empezado después de merendar la instalación en una máquina virtual con 2.5 gigas de disco duro. He creado las particiones con fdisck y las he montado en el Knoppix. Me he puesto a bajar todos los paquetes necesarios (gcc, el kernel, bash y cosas de esas...), pero cuando he terminado de bajar los paquetes, la web de Linux From Scratch no funcionaba, se abria caido el servidor o algo, no lo había previsto y no me había bajado el PDF así que lo he dejado para otro día porque no podía continuar.

¿Alguién ha probado a instalar LFS o Gentoo (que también haces algunas cosas a mano)?

24 noviembre 2006

DSLinux

Ayer tenía mil cosas que hacer y para escaquearme de mis responsabilidades se me ocurrió meter Linux en la Nintendo DS. No sé si hay otros Linux para esta consola, yo probé DSLinux.

Me bajé un archivo de unos pocos megas. Dentro había un archivo .nds que es una rom para la consola y una estructura de directorios tipo UNIX. La instalación es fácil, copias la rom y la estructura dentro de la tarjeta SD tal cual.

Para iniciarlo simplemente hay que ir al menú de las roms, y elegir la que pone dslinux.nds. En cuestión de 5 segundos se carga todo y aperece la consola en la pantalla de arriba y un teclado en la de abajo. La letra es minúscula pero se puede leer.

Empiezo a probar comandos: ls, vi, los juegos que lleva... Tiene ssh y el navegador links pero no puedo conectarme porque no sé configurar el wifi...

PROS:
- ...........es linux...........

CONTRAS:
- no puedes meter comandos escribiendo, es pulsando en el teclado que hay en la pantalla de abajo
- utilizar vi pulsando en la pantalla es un infierno
- no sé configurar el wifi
- sin X
- no tiene las página de man, que podría ser útil tener un "man portátil"

Nota: estos contras, pueden ser culpa mía, tampoco lo he utilizado mucho el DSLinux

22 noviembre 2006

Estadísticas para la UVa

He encontrado en la página de Felix Halim una utilidad para ver mi progresión personal resolviendo problemas en el juez de la UVa. Símplemente hay que escribir el ID de la UVa (sin las 2 letras) y aparecerán un montón de datos sobre nuestra "carrera" como programadores.

Esta es la gráfica (en formato svg ¿funciona con IE?) con mi progresión a lo largo de los años. Me apunté a principios de 2002 y no hice absolutamente nada hasta el año pasado que me lo empecé a tomar mas en serio...

Creo que la práctica en la resolución de problemas (de programación, matemáticos o de otro tipo, eso da igual) activa el cerebro y nos ayuda a pensar mejor. Me regalaron hace un mes un libro del fallecido matemático espñola Miguel de Guzmán titulado Para pensar mejor. Parecía ser una recopilación de juegos de lógica, geometría y otras ramas de las matemáticas, pero al leerlo me he dado cuenta de que la parte de juegos en sólo el tercio final del libro, el resto es una explicación (bastante aburrida) sobre métodos de pensamiento, surcos y otras cosas.

21 noviembre 2006

Libro: BSD Hacks

Uno de los libros que he adquirido recientemente es BSD Hacks: 100 Industrial-Strength Tips & Tools (también está el libro en Amazon).

El libro consta de una serie de trucos, recomendaciones, explicaciones para mejorar nuestro sistema BSD. Hay 100 en total y aunque está basado principalmente en FreeBSD, se pueden aplicar la mayoría de hacks a los otros sistemas BSD. También los usuarios de otros sistema UNIX pueden encontrar algo útil en el libro porque bastantes hacks se realizan con aplicaciones estándar (como el shell, tcpdump o SaMBa) por lo que deberían poder aplicarse en estos sistemas.

Los hacks se dividen en:

  • El terminal y las X

  • Sistema de ficheros

  • Inicio de sesión

  • Copias de seguridad

  • Redes

  • Seguridad

  • Actualización del sistema

  • Cosas específicas de FreeBSD

  • Modificar y amplicar el sistema FreeBSD



Lo que he leido hasta ahora me ha gustado, porque te da un conocimiento más profundo del sistema FreeBSD. El único defecto que le encuentro al libro es que fue editado en 2004 y se refiere a una versión algo vieja del sistema operativo, pero casi todos los hacks deberían funcionar perfectamente.

Para complementar a este libro la autora, Dru Lavigne, escribe cada semana un artículo en el portal ONLamp en la sección FreeBSD Basics.

La editorial O'Reilly tiene toda una linea sobre hacks con libros como: Linux Desktop Hacks o Linux Server Hacks.

15 noviembre 2006

Libros baratos

El otro día hice un pedido de varios libros clásicos de la informática que me hacía ilusión tener. Los pedí en Urbano Libros, una librería de Granada.

Es una tienda de libros de ocasión o de segunda mano y me esperaba libros viejos y gastados, pero cuando me llegó el paquete vi que no estaban nada usados, simplemente que tenian pequeños defectos: uno tenia pelado lomo minimamente y los demás ni eso, tenian un poco de polvo.

De precios no están nada mal: entre 5 y 15 euros por libro, mientras que en Amazon cuestan entre 40 y 60 euros cada uno. Todos los libros que compré están en inglés.

La única pega es que la web que tienen es un desastre: no tienen los libros por secciones, están los 2800 en una sóla categoría, por lo que hay que usar todo el rato la opción de buscar.

31 octubre 2006

Algorithm Education in Python

Este texto explica las virtudes de enseñar algorítmica en un lenguaje sencillo como Python.

Algorithm Education in Python

Una prueba más de que Python mola.

Ataques de juanquers

He estado mirando el historial de conexiones fallidas a mi ordenador (/var/log/auth.*). Sólo son accesibles desde el exterior el puerto del ssh y el que necesita el aMSN para enviar ficheros.

En el fichero me aparece registradas varias líneas como estas:

auth.log.0:Oct 20 13:37:06 XXXX sshd[5164]: Failed password for root from 200.129.157.179 port 3400 ssh2

auth.log.0:Oct 20 13:38:32 XXXX sshd[5190]: Failed password for invalid user arthur from 200.129.157.179 port 1068 ssh2

¿Cuántos intentos aparecen? Pues 1764 desde el día 20 de Octubre. Y mi PC no está encendido las 24 horas, sólo durante el día.

Internet no es el país de las piruletas, recordad cambiaros la contraseña a menudo y que sea chunga.

28 octubre 2006

Kubuntu 6.10 Edgy

Algún que otro blog ya ha comentado la aparición de la nueva versión de Kubuntu. Yo sólo quería comentar unas cosillas para los que necesited programar en C con Kubuntu.

Kubuntu es tan "para seres humanos" que no tiene instalado ni el compilador GCC así que deberemos instalarlo nosotros.

Existe un paquete llamado build-essential que nos instalará la mayoría de cosas necesarias para programar en C.

Si además queremos la ayuda de la librería de C (las páginas de man de cada función) deberemos instalar el paquete manpages-dev.

Por cierto el pptpconfig no funciona con este nueva versión de Kubuntu, hay gente que lo ha conseguido haciéndose unos scripts y pasando del pptpconfig. Así que quien se suela llevar el portatil al a univesidad que lo tenga en cuenta.

08 octubre 2006

ACM

La ACM (Association for Computing Machinery) es la mayor asociación de informáticos del mundo. Han pertenecido a esta asociación muchas de las personas que se estudian en la carrera de informática y hoy en día tiene cientos de miles de socios.

Otras asociaciones interesantes son: IEEE (centrada más en el hardware y en los estándares) y USENIX (sobre sistemas operativos y UNIX).

¿Es recomendable suscribirse a alguna de estas asociaciones? Pues la suscripción es bastante cara, aunque hay algún descuento para estudiantes. Hay que pagar más de 60 euros al año y eso duele.

La ACM está dividida en grupos de interés (SIGs) de diferentes temáticas: gráficos por computador, bases de datos, algoritmos... etc. Apuntarse a estos SIGs cuesta más dinero aún (aparte de la inscripción básica).

Lo que quería comentar hoy son las publicaciones que tiene la ACM. Los SIGs publican revistas cada cierto tiempo con artículos ciéntificos sobre informática. Si miras la lista de publicaciones de la ACM verás cuántas revistas tienen.

Si te gusta la algorítmica puedes echarle un vistazo a "Transactions on Algorithms" o al "Journal of Experimental Algorithmics".

También tienen varias revistas "de propósito general" como "Queue" o "Communications". Estas revistas no son como PCWorld o similares, son revistas para profesionales y por supuesto son muy caras. ¿He dicho ya que todo es caro en la ACM?

Pero hay una salvación para tu economía: Si eres alumno de la UPV puedes utilizar el Polibuscador para acceder a todos los números de todas las revistas estas que comento. Para poder leerlas bajar los pdfs necesitas tener una dirección IP de la UPV, así que hay que conectar mediente VPN.

¿Cuánta pasta pagará la universidad para acceder a todas esas revistas caras?

Si a alguien le interesa el último grito en informática, esas revistas le pueden ser útiles, aunque tratan temas muy complejos (creo yo). Me bajé el último número de ACM Queue, cuando pueda leeré algún artículo a ver que tal.

04 octubre 2006

Juego

Tienes 12 monedas. Hay 2 opciones, son las 12 iguales o 11 son iguales y una que pesa más o menos que las otras.

Tienes una balanza y puedes colocar cualquier número de monedas en sus platos para ver hacia que lado se inclina la balanza.

¿Con sólo 3 pruebas en la balanza puedes descubrir cuál es la moneda anómala y si es más grande o más pequeña?

Obviamente para saber si son las 12 iguales pones 6 y 6 en la balanza y si se mantiene recta es que son iguales.

01 octubre 2006

Nuevas iniciativas tratan de evitar la patentes de 'software' en Europa

Han publicado un artículo en El Mundo sobre las Patentes de Software en el que enlazan a Polinux y aun documento de la Escuela enviado a los eurodiputados.

Vuelve el problema de las patentes de 'software' un año después de que el Parlamento Europeo rechazase una directiva que abría la puerta a la patentabilidad de los programas informáticos. Activistas y grupos de estudiantes se han movilizado y han solicitado a los eurodiputados su oposición a un nuevo intento de 'legitimar' las patentes de 'software' en la UE.


Hay que luchar.

26 septiembre 2006

Optimizar FreeBSD

Pongo dos artículos sobre cómo optimizar FreeBSD (el nucleo y el sistema base). Ponen los 2 más o menos lo mismo, aunque eligen distintas opciones de optimización.

Compilación y optimización del kernel en FreeBSD


Optimising FreeBSD and it's kernel

Pronto saldrá la versión 6.2. Si alguien quiere probar FreeBSD sin peligro, el sistema funciona "perfectamente" en VMware, detecta la tarjeta de red, el usb y todo eso, pero como no existen VMware Tools para FreeBSD no puedes obtener una resolución mayor de 800x600.

11 septiembre 2006

Bookmarklets

He hecho hace un momento un pequeño bookmarklet para acceder a los problemas de la UVa. Al pinchar en él te pregunta el número de problema en un cuadro de texto y cuando le das a aceptar te lleva directo.

UVa Bookmarklet


Los bookmarklets son pequeñas funciones javascript que se ponen en la barra de direcciones en una sóla línea y realizan tareas simples. Es muy útil ponerlas en el menú de favoritos y utilizarlas desde ahí. Para "instalarlas" simplemente coge con el cursor del ratón en enlace y arrastralo al menú de favoritos o a la barra de direcciones.

Un bookmarklet que utilizo de vez en cuando es este. Al pulsarlo convierte todo el texto de la página a minúsculas. Es útil en foros donde la gente escribe como quiere.

Además esta página tiene un montón de bookmarklets divididos por categorias.

10 septiembre 2006

Desafío

Encontrar la secuencia binaria (de 0 y 1) mínima que contiene todos los posibles números de 3 bits. Es decir, una cadena que contenga 000, 001, 010, 011, 100, 101, 110 y 111 y que tenga la longitud mínima.

Por ejemplo, para los números de 2 bits (00, 01, 10 y 11) la secuencia sería: 00110. Esta secuencia contiene en su interior los 4 números solapados.

A ver si alguien lo saca para 3, o para 4 o resuelve el problema para cualquier número de bits.

Otro día pondré la solución.

Nota: puede haber varias soluciones.

09 septiembre 2006

Curriculum

La mayoría de las personas necesitamos hacernos un curriculum vitae. La manera fácil y rápida de hacerlo es buscar un ejemplo en la web y copiarselo. En la página de la EUI hay ayudas y ejemplos para hacerse uno. También puedes coger el de un amigo y modificarlo, pero ten cuidado no sea que dejes algún dato suyo en tu curriculum y la líes.

Todo eso esta muy bien, pero ¿y si sabes LaTeX? ¿no se puede hacer un curriculum supermegaguay con LaTeX? Pues he estado buscando y he encontrado esta página que tiene consejos sobre cómo hacerte el curriculum y además tiene 3 plantillas para LaTeX. Hay ejemplos de cada una.

No las he podido probar aún por la sencilla razón que no sé meter plantillas y módulos nuevos en LaTeX. No lo he hecho nunca.

También he encontrado esta otra plantilla que está adaptada al curriculum estándar de la Unión Europea. Su característica principal es que los idiomas se tienen que codificar según niveles (C1, C2...). Además la plantilla incorpora automáticamente el logo de la UE y demás pijadas.

Probaré este último a ver como queda.

07 septiembre 2006

Automatix

Ayer instalé Kubuntu en mi PC. Lo primero que hice fue ir a internet y buscar el EasyUbuntu, es una pequeña aplicación que te instala automáticamente cosas que no vienen por defecto en Kubuntu como el Java o el Flash.

El único problema es que EasyUbuntu nunca me ha funcionado. Lo descargué, e intenté ejecutarlo. Necesitaba un paquete llamado Zenity para poder mostrar la aplicación y además como está pensado para Ubuntu necesitaba el gksudo para que el puñetero script se pudiera hacer root.

Al fin, conseguí iniciar el EasyUbuntu y ¡oh sorpresa! me recomienda que me instale el EasyKubuntu. Lo busco por ahí y sólo lo encuentro en una web en francés. Al iniciar el EasyKubuntu me cuenta algo en francés que no entiendo y me da alegir entre 2 botones, pulso el "Sí". Me comienza a hacer cosas y a actualizar cientos de paquetes, al cabo de bastante rato da error y se queda a mitad. Vuelvo a iniciar y tras el mensaje en francés le doy a "No". Ahora la aplicación ya está en inglés y me aparece un menú de aplicaciones.

Pero es extraño que haya fallado. Así que para no calentarme la cabeza arreglando miles de dependencias que no sé de qué son, reinstalo el Kubuntu de nuevo en un momento.

Esta vez paso de Easys y voy a por otro programa similar que ya usé en el portatil: Automatix. En un blog ponía: "Automatix, un EasyUbuntu que funciona". Y es verdad. Al iniciarlo él mismo se instaló todos los paquetes que necesitaba y luego me preguntó que es lo que quería instalar. Lo típico: flash, java, codecs para el video y que me configure el vlc y el firefox para utilizar todo esto. Tarda bastante rato en instalar todo, pero finalmente termina. Y todo funciona.

Al final instalo la última opción de la lista: los drivers oficiales de NVIDIA. Con un click me instala y me configura las X para la aceleración 3D.

En resumen: si utilizas Ubuntu o derivadas, instala Automatix y pasa de EasyUbuntu.

06 septiembre 2006

Precios del Windows Vista

He leido en OSNEWS el precio que tendrá el nuevo Windows Vista. Se habla de entre 199 y 399 dólares.

Se dice que saldrá en varias versiones distintas: para usuarios domésticos, para multimedia, para empresas, etc. Las versiones más sencillas seguramente no tendrán practicamente nada y será necesario adquirir las más avanzadas (y caras) para ver las super novedosas características del Windows este.

Hoy en día que puedes comprar un PC decente por unos 400 o 500 euros sin sistema operativo, no encuentro sentido a tener que pagar 150 o 200 más por el Windows. Eso encarece mucho el precio del ordenador completo.

Ubuntu para creyentes

Hay gente que encuetra difícil instalar e utilizar Linux. No es que se requieran muchos conocimientos informáticos para usarlo, lo que se requiere es fe en Dios. Los más creyentes puede utilizar la nueva versión de Linux bendecida por el señor: Ubuntu Christian Edition. El señor obrará el milagro de la configuración automática y no tendremos que hacer nada.

Está basada en Ubuntu e incorpora algunos paquetes extra como un buscador de la Biblia. Si ya tienes ubuntu o kubuntu instalada puedes utilizar el script de conversión (debe de ser como un exorcismo).

Yo sugiero agregar algún programa que nos ayude a ser mejor persona. Una aplicación que busque contenido pornográfico o inapropiado en el ordenador y nos obligue a recitar por el micrófono varios avemarias. Además utilizando Google Maps se podría crear un navegador que nos indique donde está la iglesia más cercana.

01 julio 2006

Java y Unicode

El lenguaje Java es un lenguaje muy moderno y con muchas pijerías. Una de ellas es que trabaja totalmente utilizando la codificación Unicode.

Al principio de los tiempos sólo se podía codificar caracteres con el ASCII y el EBCDIC. EBCDIC no tuvo mucho éxito y ASCII se impuso en el mercado de los ordenadores.

Pero ASCII sólo permitía escribir en lenguaje inglesa, los usuarios de otras partes del mundo necesitaban escribir acentos, o letras griegas o hiragana... Entonces surgieron "adaptaciones" de ASCII para cada región del mundo y comenzó el caos.

La organización que todo lo organiza, la ISO, comenzó a estandarizar las distintas codificaciones creando una serie de estándares ISO-8859 de forma que cada lengua o región tuviera el suyo. Europa occidental utilizaba el ISO-8859-1, pero ahora parece ser que se debe utilizar el ISO-8859-15 que añade el símbolo del euro... En fin, un caos.

Luego surgió el Unicode para acabar con todas las codificaciones existentes. Unicode es una codificación universal que incluye todos los símbolos de todas las escrituras actuales y pasadas, y aún tiene espacio para las que puedan ir llegando. Incluye todos los caracteres latinos, los japoneses, los chinos, hebreos, musulmanes, caracteres egipcios... TODOS.

Pero esto añade problemas: ¿quién va a currarse un tipo de letra con los miles y miles de caracteres que existen? Además, este sistema de codificación no puede utilizar un byte para cada caracter como el ASCII y sus hijitos.

Entonces han surgido diversas formas de representar el Unicode (es decir, ha vuelto el caos que se supone que iba a eliminar esta codificación). Los más importantes son UTF-8 y UTF-16. El primero codifica los caracteres occidentales como si fuera el estándar ISO-8859-1 pero si se incluye un símbolo que cae fuera de ese estándar se coloca una marca y a continuación se incorpora el carácter en Unicode. El UTF-16 hace los mismo pero utilizando 2 bytes por cada caracter en vez de uno. Con estos sistemas se reduce mucho el tamaño de los ficheros de texto Unicode y además permite a procesadores de texto antiguos editar los ficheros.

Si abres un fichero totalmente Unicode en el bloc de notas de Windows 98 verás muchísimos caracteres extraños, pero si abres uno codificado con UTF-8 sólo verás unos pocos caracteres raros en los acentos y otros símbolos que no son ingleses.

Java codifica los caracteres con UTF-16, así que cada variable de tipo char ocupa 2 bytes.

Además tiene Unicode totalmente integrado, de forma que puedes crear nombres de variables o de métodos utilizando cualquier cosa que Unicode considere letra. (Pulsa en la imagen para verla más grande)

Por ejemplo puedes crear una variable con la letra griega PI para guardarte el valor de pi. También he creado una variable con símbolo que no sé ni de que lenguaje es, pero Java dice que es una letra. Puedes escribir japonés directamente si tiene un teclado compatible (observa que el nombre de variable japonés lleva acento). Además, curiosamente, Java me ha permitido crear una variable de nombre $.

En resumen, Java es uno de los lenguaje más modernos que hay y eso lo hace que sea lento de ejecutar. Python también tiene mucho soporte para Unicode, pero no está tan integrado como Java.

PD: Escribir variables con esos nombres es lo peor que se le puede ocurrir a un programador que quiera hacer una aplicación portable.
PD2: Supongo que si creas un clase con el nombre en japonés por ejemplo, como al compilarse crea un fichero .class con el nombre de la clase, a lo mejor hay problemas luego a la hora de ejecutarla. Si alguien se aburre que lo pruebe por favor.

23 junio 2006

Algorítmica

La algorítmica es una de las ramas de la informática más divertidas, porque es una rama en la que se necesita (y se desarrolla) la creatividad. Consiste básicamente en crear programas, en enseñar al ordenador a hacer cosas.

Por ejemplo tu quieres saber cuanto es 111111111*111111111, si no cabe en tu calculadora puedes hacerlo a mano, pero es una cálculo aburrido ¿porqué no enseñar a un ordenador a hacerlo? Puedes escribir un algoritmo que resuelve ese problema.

Si tienes un mapa con 20 ciudades y quieres conocer cual es la forma más rápida de visitar todas las ciudades. ¿Cuál es la ruta con el mínimo número de kilómetros? Puedes ir probando a mano o dejarselo al ordenador.

A pesar de que puede resultar divertido o interesante, a mucha gente se le atraganta la programación y los algoritmos en la universidad. ¿Hay que ser superdotado para programar? NO. Pero hay que cambiar la forma de pensar cuando te pones a programar. La gente está acostumbrada a aprender "recetas" para resolver los problemas en los exámenes, la programación no es seguir unos pasos que dice el profesor y ya está, consiste en crear esos pasos.

Es necesario cambiar la mentalidad a la hora de enfrentarse a problemas de algorítmica. No es lo mismo hacer la declaración de la renta que hacer un programa que haga la declaración de la renta.

Pongo algunos enlaces sobre algorítmica para el que le puedan interesar:

Práctica de la Algorítmica de Miquel Gomila. Es un cursito introductorio a la resolución de problemas de programación. Tiene muchos problemas y sus soluciones.

Apuntes de Algoritímica de Emilio Sanchís. Apuntes de sus clases.

Apuntes de Estructuras de Datos y Algoritmos. Apuntes de las clases.

21 junio 2006

Sucesión de Fibonacci

La Sucesión de Fibonacci es una lista de número muy famosa en matemáticas:

1, 1, 2, 3, 5, 8, ...

Los 2 primeros números son 1, y luego cada números posterior es la suma de los 2 anteriores:

1, 1, 1+1, 1+2, 2+3, 3+5, ...

Si quieres saber el número de Fibonacci que está en la posición 1 millón, puedes calcularlos uno a uno hasta llegar a 999.998 y 999.999, al sumarlos tendrás el Fibonacci 1.000.000.

Pero hay una forma más rápida, encontré este algoritmo que permite calcular 3 números de Fibonacci en tiempo logarítmico. El truco está en que calculando la potencia de una cierta matriz se pueden obtener varios valores de la sucesión y cómo sí se conoce un algoritmo de coste logarítmico para exponenciar, se puede utilizar para calcular número de Fibonacci mucho más rápido que con el método simple.


// Fibonacci (Divide y vencerás)
// calcula el término f(n) utilizando en tiempo O(log n)
// Utiliza esta propiedad de las matrices y el algoritmo de
// exponenciación DyV
// | 0 1 |^n | f(n-2) f(n-1) |
// | 1 1 | = | f(n-1) f(n) |
// cuidado! sólo da el resultado correcto para n <= 93

unsigned long long fibDyV(unsigned int n) {
unsigned long long int i, h, j, k, t;
i = h = 1;
j = k = 0;
while (n > 0) {
if (n%2 == 1) {
t = j*h;
j = i*h + j*k + t;
i = i*k + t;
}
t = h*h;
h = 2*k*h + t;
k = k*k + t;
n /= 2;
}
return j;
}

19 junio 2006

Eclipse

He estado leyendo estos días en la biblioteca el libro Eclipse de Steve Holzner (ejemplares en la UPV).

Los primeros capítulos enseñan aspectos útiles de Eclipse, el resto he pasado de ellos porque explica cosas que no me interesan: SWT y SWING, Struts, Applets, programación para Apache Tomcat, desarrollo de plugins para Eclipse...

Me ha gustado especialmente estas cosas que no conocía:
- Con control+espacio aparece el autocompletado en cualquier momento
- Las jpages
- El manejo de Ant
- Los breakpoints con expresiones
- Las pruebas unitarias con Junit
- El control de versiones con CVS (aunque me gusta más Subversion, pero no conseguí instalar el plugin)

Eclipse es un gran entorno que ayuda muchísimo al desarrollo en Java, pero es lento lento lento. Estaría bien que se pudiera compilar con gcj para así tener un ejecutable nativo, quizá iría más suelto el Eclipse.

Prefiero el C/C++ o Python para programar, pero con Eclipse eso de programar en Java se lleva bastante bien...

13 junio 2006

Maths Challenge

El otro día encontré esta página Project Euler. Se trata de una página con problemas para resolver (cómo la UVa y la USACO) pero todos los problemas son matemáticos.

Se diferencia de los otros servidores con problemas en que no tienes que enviar el código fuente, sino escribir el resultado en un cuadro de texto. Puedes calcular el resultado utilizando el lenguaje que quieras, o con lápiz y papel.

He resuelto 4 problemas en unos minutos, los primeros son muy sencillos (sumar y multiplicar números), luego supongo que se irán complicando más y más.

Esta página te puede servir para practicar con problemas de tipo matemáticos o para aprender a programar desde cero porque los primeros ejercicios tienen un nivel muy básico.

07 junio 2006

The Algorithmist

He encontrado un wiki como la Wikipedia pero orientado a la programación y la algorítmica, se llama The Algorithmist y visualmente es igual que la Wikipedia.

Puedes encontrar información sobre los distintos temas relaciones con la programación. También hay información de las competiciones, y ayudas para resolver problemas.

Si por ejemplo no consigues resolver el problema 100 de la UVa, puedes leer las explicaciones que dan en este wiki, encontrar juegos de prueba y consejos.

He puesto un enlace a mi perfil en el servidor de la Universidad de Valladolid, por si alguien se aburre y quiere ver que problemas he hecho. El enlace está en la barra lateral.

06 junio 2006

666

Hoy es 6/6/06, en muchos medios de comunicaciones se comentan cosas sobre esta fecha: que si es el fin del mundo, que si el anticristo.

La historia del número 666 procede de una novela de ficción muy famosa que dice algo así:
...Y hacía que a todos, pequeños y grandes, ricos y pobres, libres y esclavos, se les pusiese una marca en la mano derecha, o en la frente; y que ninguno pudiese comprar ni vender, sino el que tuviese la marca o el nombre de la bestia, o el número de su nombre. Aquí hay sabiduría. El que tiene entendimiento, cuente el número de la bestia, pues es número de hombre. Y su número es seiscientos sesenta y seis. Apocalipsis 13:16-18
Entonces según esto, el número ha de aparecer en la mano o en la frente, no hay que preocuparse por la fecha ya que no se va a acabar el mundo hoy.

El número 666 es un número triangular (el 36º número triangular). Que quiere decir que se puede formar un triángulo con 666 puntos.

Aquí se ven los primeros números triangulares (1, 3, 6, 10... 666). Imagen extraída de aquí.

Pitágoras y sus seguidores estudiaron mucho los números triangulares y sus propiedades. También se han encontrado indicios de que el cristianismo es una fusión del judaísmo con algunas características de la religión pitagórica. Así que no es de extrañar que un número triangular tenga tanta importancia para la novela de ficción Biblia.


Nada más por hoy.

Este blog ha tenido ya más de 300 visitas y casi nadie comenta nada... que tristes sois todos.

05 junio 2006

Cómo comportarse en internet

NETIQUETA EN FOROS Y WEBLOGS

- Cuando te suscribas a una lista de discusión, guarda el mensaje de bienvenida. En él aparecen las instrucciones para borrarte. Así no tendrás que molestar a la gente, preguntando cómo, cuando quieras irte.

- Espera antes de intervenir por primera vez. Observa quiénes hablan, de qué, con qué registro.

- Cíñete al tema del foro.

- Aporta nueva información, no repitas lo que se ha dicho o respondas con un "Estoy de acuerdo", sin argumentos.

- No envíes archivos adjuntos.

- Respeta a los demás, no respondas con ira, perdona sus equivocaciones.

- Recuerda que nunca sabes dónde llegará el mensaje que envías a un foro. Puede leerlo tu jefe, tu futuro jefe, tu novia, tu familia.

- No mandes a un foro mensajes privados tuyos o de otra gente.

- No envíes publicidad.

- Sé breve y claro. No respondas a todo compulsivamente. Piensa antes de escribir y relee lo que has escrito antes de mandarlo.

- Las mayúsculas significan GRITAR


NETIQUETA EN EL CHAT Y MENSAJERÍA INSTANTÁNEA

- No molestes a los usuarios o al funcionamiento de la red atacándola, desconectando repentinamente a gente, enviando mensajes globales.

- Cuando se entra o se sale de un canal de chat, es de buena educación saludar, a no ser que sea un canal muy poblado, entonces mejor callar para no añadir ruido.

- No uses programas de chat que no sepas utilizar ya que pueden crear el caos en un canal.

- Si quieres hablar en privado con una persona, no lo hagas en la zona pública. Abre una conversación privada.

- Si quieres abrir una conversación privada con alguien y no te contesta, no insistas "ad infinitum". Hay gente que está en el chat y, a la vez, está trabajando. Responderá cuando pueda.

- No escribas frases demasiado largas en una sola línea, saturas el canal y tardan más en llegar que si las envías por fragmentos. Por ejemplo, no escribir de corrido "Hola ¿qué tal, cómo estáis? yo acabo de llegar de marcha esta noche". Escribir: "Hola, ¿qué tal?" y mandarlo. "¿Cómo estáis?" y mandarlo. Etcétera.

- En mensajería instantánea, no añadas una persona a tu lista de contactos sin su permiso.

- Recuerda que la mensajería instantánea no es un chat. Manda sólo los mensajes que sean necesarios y no bombardees a tu interlocutor.

- Si envías una dirección web o un archivo, explica qué es y revísala antes para asegurarte que es interesante y no contiene virus.

Extraído de un artículo de Mercè Molist llamado ¿Sabes cibercomunicarte?

01 junio 2006

Cuba impulsará el sistema operativo Linux

Segun informa Juventud Rebelde
Cuba impulsará el sistema operativo Linux

Amaury E. del Valle

Cuba está organizando la migración progresiva de las computadoras instaladas en los organismos de la Administración Central del Estado hacia el software libre, sobre la base del sistema operativo Linux, eliminando así la presencia casi exclusiva del Windows en las máquinas.

La noticia trascendió durante una conferencia ofrecida por Roberto del Puerto, director de la Oficina para la Informatización de la Sociedad, en el III Taller de Software Libre, el cual tuvo lugar durante la recién finalizada Convención Internacional Informática 2005.

El sistema operativo Linux, creado en la década de 1980 por Linus Torvalds, se diferencia de similares como Windows, de Microsoft, en que su código fuente es totalmente abierto, y por tanto puede ser modificado y distribuido por el usuario cuantas veces quiera.

La Isla, que posee actualmente más de 1 500 usuarios de Linux y una comunidad de desarrolladores fuerte en varias provincias del país, ya cuenta también con su propia distribución de Linux -un conjunto de programas agrupados de acuerdo a sus prestaciones y calidad- que fue presentada ayer.

Además, la Oficina para la Informatización ha diseñado una estrategia que comprende acciones de organización, técnicas, diseño de un marco legal, así como la capacitación y el cambio paulatino de los sistemas de Windows a Linux.

La política será rectoreada por un Grupo Nacional, que integran entre otros la propia Oficina, los ministerios de Justicia, del Interior, de Informática y las Comunicaciones, la Red Telemática de Salud (Infomed), la CUJAE, los Joven Club y la Universidad de las Ciencias Informáticas. Esta última, con más de 6 000 estudiantes, ya ha destinado una de sus facultades para el desarrollo de programas sobre Linux.

Extraído de laRepública.es

29 mayo 2006

Las 20 respuestas

.... Las 20 respuestas que más utilizan los programadores cuando sus programas no funcionan:

Pues es raro?

Nunca había pasado antes.

Pues ayer funcionaba?

¿Cómo es posible?

Tiene que ser un problema de tu hardware.

¿Qué hiciste mal para lograr que fallara?

Algo debe de estar mal en tus datos.

¡Si no he tocado ese módulo en meses!

Debes de estar usando una versión anterior.

Es sólo una desafortunada coincidencia.

¡Es que no lo puedo probar todo!

ESTO, no puede ser la causa de ESO.

Funciona, pero no lo he probado.

¡Alguien debe de haber cambiado mi código!

¿Has comprobado que no haya algún virus en tu sistema?

Ya se que no funciona, ¿pero te gusta?

No puedes utilizar esa versión en tu sistema

¿Por qué quieres hacer eso?

¿Y tú dónde estabas cuando se colgó el programa?

¡EN MI MÁQUINA SI FUNCIONA!

28 mayo 2006

El intérprete de comandos Tcsh


Tcsh es un intérprete de comandos para Unix compatible con el intérprete csh. Está disponible gratuitamente en aquí, se distribuye bajo licencia BSD y tiene una sintaxis similar a la de C. Es el intérprete por defecto en FreeBSD y de otros sistemas Unix, también está disponible en muchas distribuciones de Linux.

Voy a comentar algunos aspectos menos conocidos de Tcsh. El intérprete tiene muchas más posibilidades que no comento en el texto (historial, pila de directorios...), sólo voy a hablar de las características que más utilizo. Posiblemente muchas estas características están disponibles en otros intérpretes como GNU Bash o Zsh. Para conocer más a fondo todo lo referente a Tcsh, lo mejor es su página de man.

Autocompletar

Tcsh autocompleta los nombres de fichero y directorios con la tecla TAB. Por defecto no muestra la lista de posibles nombres de fichero como hace GNU Bash, para que se muestre la lista hay que definir la variable autolist.

% set autolist

% cd EDA/[TAB]
libJava/ progJava/
% cd EDA/li[TAB]
% cd EDA/libJava

Tcsh también completa nombres de variables del shell.

% echo $h[TAB]
history home
% echo $ho[TAB]
% echo $home

Y logins de usuarios del sistema:

% echo ~n[TAB]
news nfsnobody nobody nscd ntp
% echo ~ne[TAB]
% echo ~news

Las variables listmax y listmaxrows se pueden definir y limitan el nmero de posibilidades que autolist muestra.

% set listmax=10
% cd ~[TAB]
Existen 1024 ítems, listarlas de todos modos? [n/s]

Qué más se podría autocompletar? Tcsh también permite autocompletar parámetros en la líea de comandos.

Esta característica requiere que configuremos previamente cómo queremos que se autocomplete cada comando. Para ello utilizamos el comando complete.

En este ejemplo indicamos que complete el comando ssh con alguna linea del fichero .hosts.

% complete ssh 'p/1/`cat ~/.hosts`/'
% ssh [TAB]
192.168.1.100 alien3.dsic.upv.es localhost
% ssh

Ejemplo con el comando kill. Se definen 2 posibilidades de autocompletar: si se ha escrito un guión se autocompleta con nombres de señales y si no se autocompleta con PIDs.

% complete kill 'c/-/S/' 'p/*/`ps
| awk \{print\ \$1\}`/'
% kill [TAB]
15800 16005 16251 16252 PID

% kill -T[TAB]
TRAP TERM TSTP TTIN TTOU
% kill -T

Autocorrección

Tcsh puede detectar cuando hemos escrito mal un comando y sugerir el comando correcto. Para ctivar esta opción hay que definir la variable correct. Si le damos el valor cmd sólo corregirá el nombre del ejecutable, si ponemos all corregirá también nombres de archivo y de directorio.
% set correct=cmd
% lls
CORRECT>ls (y|n|e|a)? sí
Desktop EDA
% set correct=all
% ls /dv
CORRECT>ls /dev (y|n|e|a)?

Comodines en los nombres de archivo

El más conocido es el '*' que representa cualquier cadena de cualquier extensión.
% ls
1.c 1.h 2.c 2.h 3.c 3.h 4.c 4.h 5.c 6.c 7.c 78.c
% ls *.h
1.h 2.h 3.h 4.h

El símbolo '?' puede representar cualquier carácter, pero sólo uno por cada '?' que escribamos.

% ls ??.c
78.c
% ls ?.h

1.h 2.h 3.h 4.h

'?' se sustituye por cualquier carácter, si queremos que se sustituya por algunos caracteres en concreto hay q usar los corchetes '[]'. Le indicamos los caracteres que queramos entre '[' y ']'.

% ls [89].c
8.c 9.c

Se pueden indicar rangos de caracteres usando el símbolo '-'.

% ls [1-5].c
1.c 2.c 3.c 4.c 5.c
% echo 1.[a-z]
1.c 1.h

Se pueden invertir la sustitución de nombres con '^'. Si escribimos un nombre de ficheros con '^' se sustituiría por todos los ficheros que no cumplen esa condición.

% ls ^??.c
1.c 1.h 2.c 2.h 3.c 3.h 4.c 4.h 5.c 6.c 7.c 8.c
% ls ^*.c
1.h 2.h 3.h 4.h

Con los anteriores comodines podemos crear sustituciones para nombres de ficheros que existieran. Las llaves '{}' pueden usarse para crear sustituciones de ficheros inexistentes. Eso no sirve para nada en comandos como ls o rm, pero puede ser til en otros como touch o mail.

% touch prg.{c,h,txt}
% ls
prg.c prg.h prg.txt
% mail {root,webmaster}@lalala.com
Subject:
......
(envia un mail a root@lalala.com
y webmaster@lalala.com)
No es posible utilizar a la vez '^' y '{}'. Tcsh ignorará el carácter '^' en caso de encontrarlos juntos. Salvo esta excepción el resto de comodines se pueden utilizar juntos e incluso anidarse unos dentro de otros.

Scripting

Tcsh ejecuta scripts con la sintaxis de csh, que es parecida de la C (de ahí su nombre). Algunos textos que hay por ahí (por ejemplo este) recomiendan NO usar Tcsh y csh para ejecutar scripts precisamente por su sintaxis: no son capaces de ejecutar scrips estandar POSIX. Los sistemas que incluyen Tcsh por defecto también incluye un intérprete Sh que es el que debería ser usado para ejecutar scripts. Quien quiera aprender tcsh-scripting que lea la página del man.

Fin

Si quieres probar Tcsh sólo tienes que ejercutar tcsh en tu sistema operativo si lo tienes instalado. Si quieres que sea tu intérprete por defecto tendrá que usar chsh.

27 mayo 2006

Programas gratuitos para Windows

Todo el mundo tiene instalado en su ordenador programas como el MS Office, el WinRar, la mayoría sin haberlos pagado. ¿Porqué no utilizar otros programas similares pero gratuitos? Por ejemplo el Office cuesta en las tiendas más de 300 euros (la versión básica sólo con Word y Excel). ¿Quién pagaría ese dinero para escribir un trabajo del clase de vez en cuando o para ver los PowerPoints que te mandan por correo con chistes?

Aparte de los programas de pago, Windows XP viene con una serie de programas instalados que todo el mundo utiliza. Pero existen programas gratuitos que son mucho mejores que estos y que son los que deberían utilizarse. El Internet Explorer, el Outlook Express y el Windows Media Player en general son un peligro para la integridad de los ordenadores y hay que evitar su uso para no tener que estar reinstalando el Windows cada poco tiempo.

Pongo aquí una lista de programas gratuitos para Windows XP que están muy bien. Son los que yo gasto normalmente, si alguien conoce algún otro que lo diga y lo añadiré.

7zip: Programa que comprime y descomprime en muchos formatos (zip, rar, tar.gz...). Es parecido al WinRar y WinZip pero gratis. Bajatelo de aquí.

VLC media player: Un reproductor de videos y música muy bueno. No suele tener problemas para reproducir ningún video. Descargalo de aquí.

Mozilla Thunderbird: Si utilizas Outlook Express para leer el correo, te recomiendo instalar Mozilla Thunderbird, es mucho mejor y además Outlook tiene graves problemas de diseño y es un peligro para tu ordenador. Bajatelo de aquí.

Mozilla Firefox: Actualmente el mejor navegador que existe. Si lo utilizas estarás un poco más protegido de los virus, troyanos, spyware y demás. El Internet Explorer también tiene una larga de lista de problemas y utilizándolo se te llenará de basura el ordenador más rapidamente. Descárgatelo de esta página en el botón de Firefox que hay en el lateral.

OpenOffice.org: Conjunto de aplicaciones para sustituir al Microsoft Office. No es tan vistoso como el MS Office pero sirve perfectamente para abrir y crear documentos ofimáticas. Cualquiera que haya utilizado MS Office puede usar OpenOffice sin problemas. Bajar.

23 mayo 2006

Desarrollador Cinco estrellas (.NET)

Microsoft tiene una página para aprender a crear aplicaciones con Visual Studio .NET llamada Desarrollador Cinco Estrellas. Explico de que va por si a algún informático le interesa.

Esta página se divide en 5 niveles de dificultad (Estrellas), para pasar al siguiente nivel tienes que realizar algunos trabajos o examenes. Hay tutoriales y apuntes para poder realizar las tareas y conseguir las estrellas.

Esta página es similar a las certificaciones oficiales de Microsoft pero gratis. Creo que el contenido que se estudia es muy parecido porque, por ejemplo, si tienes cierta certificación te convalidan la Estrella 4. La Estrella 5 aún no tiene examen y (de momento) sólo puede obtenerse con un examen de certificación oficial (que vale bastante dinero).

Además, de vez en cuando dan algún premio a los que tengan cierto nivel como licencias de Visual Studio .NET y cosas así.

21 mayo 2006

La Creación

Al principio Dios creó el bit y el byte, y de ellos creó el registro. Y hubo dos bytes en un registro, y nada más existía.

Y Dios separó el uno del cero, y vio que esto era bueno.

Y Dios dijo: Hágase el dato. Y así sucedió.

Y Dios dijo: Que los datos vayan a su correspondiente lugar. Y creó los disquetes, discos duros y los CDs.

Y dijo Dios: Háganse los ordenadores, así habrá lugar para poner los disquetes, discos duros y CDs. Así Dios creó los ordenadores y los llamó hardware.

Y no había software aún. Pero Dios creó programas, pequeños y grandes... Y les dijo: Vayan y multiplíquense por sí mismos y llenen toda la memoria.

Y dijo Dios: Crearé al programador. Y el programador hará nuevos programas y gobernará sobre los ordenadores, programas y datos.

Y Dios creó al programador y lo puso en el centro de datos.

Y Dios le mostró al programador el árbol de directorios y le dijo: Puedes usarlo todo, pero NO USES Windows.

Y Dios dijo: No es bueno para el programador estar solo. Tomó un hueso del cuerpo del programador y creó una criatura que buscaría al programador, lo admiraría y amaría las cosas que hiciera. Y Dios llamó a la criatura el usuario.

Y el programador y el usuario fueron dejados bajo el DOS desnudo. Y fue bueno.

Pero Bill fue más listo que todas las otras criaturas de Dios. Y Bill le dijo al usuario: ¿Realmente Dios te dijo que no ejecutaras ningún programa?

Y respondió el usuario: Dios nos dijo que podíamos usar cualquier programa y cualquier dato, pero nos dijo que no ejecutáramos Windows o moriríamos.

Y Bill dijo al usuario: ¿Cómo puedes hablar sobre algo que no has probado? En el momento en que ejecutes Windows serás como Dios. Podrás crear cualquier cosa que desees con un simple clic del ratón.

Y el usuario vio que los frutos del Windows eran buenos y fáciles de usar.

Así que el usuario instaló Windows en su ordenador y le dijo al programador que era bueno.

Y el programador empezó a buscar nuevos drivers. Y Dios le preguntó: ¿Qué buscas?

Y el Programador respondió: Busco nuevos drivers porque no puedo hallarlos en el DOS.

Y Dios dijo: ¿Quién te dijo que necesitabas drivers? ¿Ejecutaste Windows?

Y el programador dijo: ¡Fue Bill quien nos lo dijo!

Y Dios dijo a Bill: Por lo que hiciste serás odiado por todas las criaturas, y el usuario estará siempre descontento contigo.

Y Dios dijo al usuario: Por lo que hiciste Windows te decepcionará y se comerá todos tus recursos y siempre confiarás en la ayuda del programador.

Y Dios dijo al programador: Porque oíste al usuario nunca serás feliz. Todos tus programas tendrán errores y tendrás que arreglarlos hasta el fin de los tiempos.

Y Dios los echó del centro de datos y cerró la puerta y la aseguró con una clave.

Moraleja: haz caso a tus padres
Because Micro$oft is for Capitalists running DOS

19 mayo 2006

Las Torres de Hanoi

Esta es una forma rápida y fácil de resolver el juego de las Torres de Hanoi. Simplemente hay que sustituir num_discos por la cantidad de discos que queramos que tenga el juego, por ejemplo 10.

max = 1 << num_discos;

for (x = 1; x < max; x++)
printf("mover disco de %d a %d\n", (x&x-1)%3, ((x|x-1)+1)%3);

El código está escrito en C, se puede utilizar en Java simplemente cambiando el printf por un System.out.println.

He probado el código con 20 discos y ha tardado casi 2 horas y media en ejecutar ese programa de 3 lineas.

18 mayo 2006

Lorem ipsum

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.