Jul 31

¿Qué lenguaje de programación eres?

Vía imMaster – Fight to Survive he descubierto un test para saber qué lenguaje de programación eres. A mí me ha salido "python". Curioso, es uno de esos lenguajes que nunca ha visto, ni siquiera de lejos y no sé ni qué pinta tiene. Tendré que echarle un ojo, a ver si tengo que pegar a alguien.

You are Python You are slower than others, but easier to understand. You are a minimalist, who doesn't like clutter.
Which Programming Language are You?

Jul 31

Un post ingenioso

Curiososo.

Un post en blanco

y la gente comenta.

Tiene su gracia, prueba a seleccionar el texto que no está.

Jul 30

Tirando correos a la basura

Con el dominio chuidiang.com me han dado una serie de cuentas de correo, de las cuales sólo tengo configurada una, la de defecto, con mi nombre de usuario en el hosting.

En esa cuenta, desde el principio, he recibido muchísimo correo basura, además, a direcciones que no existen, como no_existe@chuidiang.com. No le dí demasiada importancia, tampoco me molestaba excesivamente.

Sin embargo, este fin de semana, en el plazo de un par de horas recibí como 200 correos basura -lo habitual son unos 20 o 30 dirarios-. Además, vi que no paraba y mi cliente de correo recibiía un correo seguido detrás de otro.

Me puse a investigar y descubrí que el servidor se puede configurar de tres formas cuando llega un correo a una dirección que no existe: se puede reenviar a otra cuenta de correo que sí exista, se puede devolver el correo al remitente avisándole que esa dirección no existe o bien se puede tirar directamente a la basura.

En CPanel, que es el panel de control que tengo en el hosting, en la parte de e-mail hay una opción de menú que pone "Setting your default e-mail address". Ahí se puede cambiar esta configuración, que por defecto yo la tengo puesta a mi dirección de correo buena. Las otras dos opciones son :fail: y :blackhole:

Con :fail: el correo que venga a una dirección inexistente se devolverá al remitente. La ventaja de este método es por un lado avisar que el correo no ha llegado y por otra que el correo ni siquiera entra en el servidor. Se rechaza en cuanto se ve que el destinatario no es válido. La pega es que se indica a posibles spammers que direcciones son válidas y cuales no.

Con :blackhole: el correo se tira directamente a la basura. La pega es que nuestro servidor lo procesa, la ventaja es que no se da pistas al spammer de si la dirección existe o no. Tampoco a uno bienintencionado que envía un correo y se equivoca al poner la dirección.

Por ahí creo que lo que recomiendan es :fail:, así que es lo que he puesto. ¡¡ Oh maravilla de las maravillas !!, desde entonces no me ha llegado ni un solo correo basura.

Jul 28

¿Seré un “nerd”?

El otro día, por la tarde, fuí a una terraza a tomar algo. En un momento de aburrimiento, empecé a fijarme en las diferencias entre el resto de la gente que estaba en esa terraza y yo. Ahí van:

  • Todos tomaban cervezas y refrescos. Yo café con leche caliente. Estamos en Julio. Bueno, nada grave de momento, es cuestión de gustos, aunque el mio parece un poco raro para estas fechas.
  • Todos estaban acompañados. Parejas, familias, amigos. Yo era el único que estaba solo. Eso parece que empieza a ser grave. Como excusa, que estoy "de Rodriguez" y la familia ya está de vacaciones. De todas formas, suele ser habitual verme solo en las cafeterías, esté o no de Rodriguez.
  • Nadie estaba leyendo, salvo una señora que entre conversación y conversación ojeaba una revista … ¿del corazón?. Yo sí leía. Ni más ni menos que "The pragmatic programmer", encima en inglés. Esa sí es la gota que colma el vaso y la que me hace darme cuenta de lo raro que soy. Un tio solo, en una terraza de verano, leyendo un "libraco" de ordenadores en inglés. ¿seré un "nerd"?. Ojo, uso "nerd" aunque no me gusta el inglés porque el equivalente español "empollón" creo que me deprimiría más. 

De todas formas, he salido corriendo a una librería a comprarme una novela, al menos para leer algo menos "llamativo" en una terraza de verano.

¿Y vosotros? ¿Os encontrais es este tipo de situaciones a veces o sois gente normal? No me digais que soy yo el único raro.

Jul 26

Un pseudo polimorfismo en perl

Aunque perl admite programación orientada a objetos, me he encontrado por casulidad con una cosa que me ha llamado la atención. Aprovechando que perl es interpretado y que no hay que declarar nada previamente -ni funciones, ni variables-, se puede hacer una especie de "trampa" para conseguir algo que se parece al polimorfismo.

La idea es la siguiente. En un fichero funcion.pl ponemos una función cualquiera. Por ejemplo, una que sume los dos parámetros que se le pasen. Una vez que la función obtiene el resultado, llama a otra función toma_suma() que de momento no está declarada. El código del fichero funcion.pl podría ser así

sub suma
{
   $s1 = shift;
   $s2 = shift;
   toma_suma ($s1+$s2);
}
return true;

Ahora, en otro fichero separado main1.pl, hacemos un código que incluya este fichero -con require, por ejemplo-, y que defina la función toma_suma(). Puede ser esto

require "funcion.pl";
suma(1,2);

sub toma_suma
{
   $s = shift;
   print "suma = $s\n";
}

Pues bien, esto funciona. Se llama a suma(1,2) y cuando la función tiene el resultado, llama a toma_suma() de este fichero main1.pl. De la misma forma, si hacemos un segundo fichero main2.pl que define toma_suma de otra forma, también funciona

require "funcion.pl";
suma(11,3);

sub toma_suma
{
   $resultado = shift;
   print "el cuadrado de la suma = ".$resultado*$resultado;
}

Esto se asemeja mucho, mucho al polimorfismo. La función suma() llama a toma_suma() que está sin definir y es el que llama a suma() el que la define. No es exactamente polimorfismo porque posiblemente, dentro de un fichero main.pl no podemos redefinir toma_suma() de varias maneras, para que según nos interese se haga una cosa u otra.

Supongo que esta no es una forma correcta de programar, pero no deja de ser una curiosidad con la que me he tropezado que me ha llamado mucho la atención.

Jul 25

cruise control, maven, ant y perl todo junto

Bueno, he terminado mi conversor de ficheros .h a fichero .java

Tengo instalado Cruise Control, de forma que todas las noches saca el proyecto de CVS con los últimos cambios y los compila. El proyecto tiene formato de maven y se compila con maven. Cruise Control se lleva muy bien con maven y no hay problemas, todas las noches Cruise Control llama al mvn install y compila el proyecto.

Como cosa maravillosa se me ha ocurrido que Cruise Control podría sacar de CVS los fuentes .h que hayamos tocado, llamar al script de perl que convierte esos .h a .java y luego compilar los ficheros java para construir el jar correspondiente. Como Cruise Control llama a maven, debería ser maven el que haga todo esto. Así que a ello. Lo que hice fue lo siguiente:

  • Un proyecto maven con src/main/c con todos los .h y luego, sin fuentes, src/main/java y src/main/ada -el script de .h a ada aun está por hacer-. Puse también un src/main/perl con el fuente del script de perl c2java.pl
  • Luego, en el fichero pom.xml del proyecto, copie el plugin para llamar a tareas de ant de aquí.
  • Dentro del "ahí", entre <tasks> y </tasks> puse un <exec> de ant para llamar al script de perl.

En fin, todo estupendo. Mi mvn install ahora, antes de compilar, ejecuta la tarea de ant que se encarga de llamar a perl para generar los fuentes de java en src/main/java. Luego compila los fuentes de java y genera el jar.

De esta forma, si en el proyecto necesito cambiar uno de estos tipos, simplemente lo cambio en el .h, lo meto en CVS y todo listo. Cuando compile la parte de java, automáticamente se generán primero los fuentes de java y luego se compilan, generando el jar.

Jul 24

Perl en la Chuwiki

Sigo dándole al Perl, haciendo mi conversor de tipos C a Java.

Puesto que es cosa de trabajo y puedo dedicarle tiempo "oficial", ya prácticamente está terminado y estoy en la fase de comprobar que el código Java generado compila y que compila el resto de código Java que utiliza esos tipos.

Luego me falta el conversor de C a Ada y, aunque parezca una chorrada, haré el de C a C. ¿Por qué este último?. Mi intención es que el código inicial para definir tipos no sea C, sino un lenguaje inventado más simple. Por ello, una vez que tenga los tres conversores, incluido el de C a C, iré modificando poco a poco los ficheros .h iniciales, quitando cosas como typedef, obligando a un formato del texto más simple y estricto, etc, etc. Ire en paralelo retocando los scripts de perl, y se acabarán convirtiendo de c2java.pl, c2ada.pl y c2c.pl a lenguajeinventado2java.pl, lenguajeinventado2ada.pl y lenguajeinventado2c.pl

Aprovechando todo esto, he comenzado en la Chuwiki una serie de tutoriales sobre perl. Son muy sencillotes -y quizás no del todo correctos-, pero estoy empezando con el lenguaje y no se me pueden pedir demasiadas filigranas. Sin embargo, me gusta escribir lo que voy aprendiendo, me ayuda a aclarar ideas y espero, que al menos, le sirvan a alguien que esté también empezando.

Jul 22

Linux y Dreamweaver

Una de mis quejas para pasarme totalmente a linux es que no hay nada similar a dreamweaver. Sin embargo, la contestación de los fans de linux que oyen mi queja más o menos siempre es la misma. La mejor forma de hacer una página web es haciéndola con un editor plano, escribiendo directamente los tags. Los editores wysiswyg de html son un asco.

En general estoy de acuerdo, usé durante mucho tiempo netscape composer y mete demasiados tags inútiles e incluso alguno no estándar, que necesita él para sus cosas. Si no andas con cuidado, el código html generado es de lo más "guarro". No quiero ni pensar en los que meten las herramientas de microsoft.

Sin embargo, sigo echando de menos una herramienta con dreamweaver. ¿Por qué?. No por su modo wysiswyg, al que hay que vigilar qué tags mete continuamente -aunque si es útil, cuando escribes un artículo más o menos largo, no tener que escribir los tags html continuamente-.

Dreamweaver o una herramienta similar son muy necesarias cuando dedicas muchos años a un sitio web, haciéndolo crecer, modificándolo, añadiendo y borrando cosas, cambiando nombres a las páginas y organizando/moviendo páginas de unos subdirectorios a otros. Cuando en Dreamweaver renombras un fichero html -o php o lo que sea-, Dreamweaver busca en todo tu sitio web las referencias a esa página y las arregla. Si mueves una página de un subdirectorio a otro, lo mismo. Luego, es capaz de recordar qué páginas a tocado, de forma que es capaz de subir esas y sólo esas a donde tienes hospedado tu sitio web.

Y aunque insisto en que el wysiswyg es cómodo para escribir artículos largos, sobre todo si escribes muchos de esos, la principal característica que echo de menos en otras herramientas más simples es esa, que no rehace o revisa links internos cuando muevo/renombro una página.

Jul 19

Buscar en google cómo destripar cajas fuertes

Realmente curioso. Unos ladrones entran a robar en un centro comercial y como no saben abrir la caja fuerte, buscan allí mismo en google, con uno de los ordenadores del centro, cómo destripar la caja fuerte … y la destripan.

Vía PuntoGeek.

Jul 18

Sudoku en Perl

Hace tiempo que lo conocía, pero ahora que me he puesto con perl, lo he recordado y he ido a mirarlo, sólo para ver si entiendo algo.

Un programa para resolver sudokus, hecho en perl, con sólo tres líneas de código. Viene explicado.

Sigue siendo tan críptico como cuando lo miré la primera vez, pero al menos, una vez "sangrado", entiendo la sintaxis -más o menos, los map todavía se me escapan-.