Informática - Tienda de ultramarinos
logo Tienda de Ultramarinos
Categorías Informática

La absurda convalidación de asignaturas en Erasmus

Como sabe todo el que se ha enfrentado a ello, cuando te vas a otra universidad a cursar parte de tus estudios tienes que enfrentarte a una cantidad de papeleo impresionante, escribiendo lo mismo cien veces distintas para veinte sitios diferentes, con ayuda mínima. Pero no es de esto de lo que quiero hablar.

Una de las cosas que hay que hacer, obviamente, es seleccionar las asignaturas que cursarás en la universidad de destino, las cuales deben ser aprobadas por el coordinador Erasmus de tu carrera para comprobar que no vas a estar haciendo trivialidades o cosas que ya hayas estudiado sobradamente.

Para ello, por cada asignatura en que te matriculas en la nueva universidad, tienes que seleccionar una equivalente en la tuya (o varias si no coincide el número de créditos). Esto me parece completamente necesario para las obligatorias y troncales, pues son conocimientos que se consideran totalmente necesarios para alguien que estudia esa carrera.

Lo que ya no tiene sentido alguno es tener que hacer esto mismo con las optativas, especialmente teniendo en cuenta que son una decisión totalmente arbitraria de cada facultad. Las asignaturas obligatorias seguramente serán muy similares en todo el mundo para la misma carrera, pues componen el tronco de conocimiento común que cualquiera dedicado a ello debería conocer. Pero las optativas pueden ser cosas totalmente dispares; por supuesto que habrá varias que coincidan en casi todas las universidades, pero quizás sean la mitad.

Las optativas no sólo dependen de la idea que los coordinadores de la carrera tengan de qué puede ser útil y qué no, sino que también están totalmente sujetas al campo de investigació o especialidades de los diferentes profesores del claustro.

Así, se dan cosas tan ridículas como que Functional and Logic Programming la estoy convalidando en Zaragoza por Técnicas avanzadas de programación que, no tienen absolutamente nada que ver.

O que al ser Computer Security del doble de créditos que su equivalente Criptografía y seguridad en comunicaciones, la estoy convalidando también por Diseño y evaluación de redes. Y Theory of computation se ha convertido en Modelos estocásticos en ingeniería. Lo mismo, vaya.

Y la gota que colma el vaso es que luego, a efectos prácticos —expediente, título, etc.—, las únicas asignaturas que contarán para mí serán las matriculadas en la Universidad de Zaragoza, obviando por completo todo lo que haya hecho en la UCC.

Validación XHTML para WordPress

Si los estándares están para algo es para respetarlos. En la informática, donde cada cosa puede ser de su padre y de su madre (y generalmente lo son) el uso de estándares tiende a facilitar mucho las cosas, especialmente la compatibilidad. Que todavía sea necesario llenar las páginas webs de scripts detectando el navegador para utilizar un código u otro tendría que darnos vergüenza.

Y no sólo en la informática, los estándares facilitan la vida allá dónde van. Los tamaños de las camas son estándar: o son de 80, o son de 90, pero no vas a tener camas de 85; lo cual ayuda mucho al comprar sábanas y demás. El formato de etiquetado de las camisetas o zapatos es estándar: una M siempre es más pequeña que una L, y un 38 es más pequeño que un 42. Sin embargo no es estándar la medida de las mismas, por lo que dependiendo de la marca L y XL tienen tamaños completamente diferentes. Eso significa que en mi armario hay camisetas de varios tallajes, y cuando compras por internet tienes que buscar las especificaciones del fabricante de ese modelo y comparar con las de casa.

Otra cosa que no es estándar son los cargadores de los móviles, por lo que siempre has de andar con el tuyo a cuestas y ningún amigo puede dejarte el suyo, incluso de la misma marca. Sí, Nokia siempre ha seguido una muy buena política al respecto, hasta que los redujeron de tamaño hace poco y vuelta a empezar. Las tarjetas de crédito y los carnéts son estándar, y por eso todos caben perfectamente en tu cartera.

En internet, la organización encargada de la adopción de estándares es el World Wide Web Consortium (W3C), dirigido por Tim Berners-Lee, el padre de la web. El W3C se compone de un amplio número de expertos que velan por la compatibilidad de todos los estándares y por conseguir un consenso con la industria para que los navegadores y herramientas soporten un núcleo básico de funcionalidades con el que poder hacer cosas sin volverse loco por saber si lo que has hecho se verá igual en todas partes.

Como muchos saben y habrán cacharreado en algún momento de sus vidas, la base de las páginas web es el lenguaje HTML. Otro metalenguaje de marcado que puede parecer muy similar es XML, utilizado para organizar y etiquetar documentos de texto, funcionando mediante etiquetas de la misma forma que HTML. No puede considerarse un lenguaje directamente porque en realidad sólo consta de un conjunto de directrices y especificaciones sobre cómo utilizarse, por lo que cada uno puede utilizar las etiquetas y valores que le vengan en gana. Simplemente tiene que respetar la estructura y formato de XML. Este formato es muy práctico para procesar cualquier tipo de información con un ordenador y es ampliamente utilizado en múltiples áreas.

Como decía, HTML y XML son muy similares, pero el primero no respeta todas las especificaciones del segundo, por lo que se inventó XHTML, que es básicamente un fichero HTML con la estructura que dicta XML. Una de las principales características es que todas las etiquetas deben ser correctamente cerradas, cosa que no era necesaria con HTML, o la prohibición de anidar ciertas etiquetas en otras.

De XHTML 1.0 existen diferentes versiones, cada una más laxa que la anterior con respecto a las normas. Son Strict, Transitional y Frameset. Luego se creó XHTML 1.1, que es XHTML 1.0 Strict con alguna cosa más. La versión 2.0 lleva 10 años de borradores. Para saber si tu página cumple los estándares, W3C ofrece su validador.

Una de las principales motivaciones de la W3C detrás de todos estos estándares es separar la definición de la estructura de una página de la información mostrada por la misma. Un buen aliado para ello han sido las hojas de estilos CSS, una poderosa herramienta para definir el diseño de tu web, y que ha desplazado por completo a las famosas “tablas” tan utilizadas en los 90. En aquellos tiempos, si querías colocar varios elementos en distintos puntos tenías que llenar la página de tablas invisibles con infinitas filas y columnas para cada situación. Con CSS todo es un mundo maravilloso de orden y funcionalidad.

Afortunadamente, con el nuevo diseño he tenido bastante suerte y seguía los estándares bastante bien, salvo por algunas etiquetas mal cerradas aquí o haya, que incluso puede que hayan sido fallo mío con las modificaciones.

Otro pequeño problema ha venido con el plugin oficial de Statcounter, que te introduce tres líneas en el blog. Utiliza target=”_blank” en el vínculo (abrir en ventana nueva) lo cual está desaconsejado por el W3C. También olvidan cerrar la etiqueta de la imagen. Tienen los comentarios cerrados, por lo que he dejado nota en el repositorio de plugins de WordPress. Para arreglarlo tienes que ir al editor de plugins de tu WordPress y hacer los cambios en el fichero php. En mi caso es la línea 288.

Un problema “peor” viene con las galerías de imágenes que WordPress te permite insertar en las entradas. Casualmente ayer utilicé por primera vez la opción de galería para mostrar el viejo diseño; esto es básicamente como publicar un álbum de fotos de forma automática, sin necesidad de insertar las imágenes una a una. Si no llego a utilizarlo ni me hubiese dado cuenta.

Resulta que al insertar la galería puedes seleccionar varias opciones, con lo que dependiendo de cada una tendrá distintos formatos. Estos formatos están definidos por un CSS que se copia en el cuerpo de la entrada. Esto está tremendamente mal, porque a fin de cuentas estás mezclando la definición con el contenido. HTML está dividido en dos secciones: cabecera y cuerpo, head y body. Lo correcto es que en la cabecera estén todas las definiciones y en el cuerpo la información.

Realmente las CSS suelen estar en un fichero aparte, el cual indicas en la cabecera. Esto te permite utilizar la misma definición en cualquier página sin tener que copiar las definiciones en cada una, pero para cosas puntuales como ésta, es correcto ponerlas simplemente en la cabecera.

Tras barajar varias posibles soluciones a mano, me he decantado por googlear… y efectivamente es un problema que había inquietado a muchos otros antes. Está publicado desde hace trece meses en el trac de WordPress, pero no se se implementarán soluciones en la próxima versión. (Trac es una herramienta utilizada para la gestión de errores en un proyecto). Mientras tanto, se han publicado varios plugins solucionándolo (están enlazados en los comentarios del trac). Yo he instalado Cleaner WordPress Gallery, que simplemente crea un fichero CSS aparte y lo enlaza en la cabecera.

Así pues, finalmente he conseguido superar satisfactoriamente el test de XHTML 1.1.

Google peca de listo revelando información personal

Como muchas otras personas, para facilitarme la vida tengo agregadas todas mis cuentas de correo electrónico en una sola de Gmail, pudiendo recibir y enviar mensajes desde una única cuenta en lugar de andar entrando y saliendo en diversos servidores.

La única cuenta a la que accedo es a la que se ve aquí en la página de contacto y que se la que suelo utilizar de manera informal, y para todo lo relacionado con internet. Es con la que me registro en las páginas web, desde la que chateo en messenger/gtalk, la que tengo asociada a este blog, con la que tengo el Buzz/gReader, etc.

Esta semana utilizando mi cuenta de correo de la universidad desde GMail he enviado un mail a un profesor, a su dirección (at)unizar.

Al día siguiente, su dirección (at)gmail, con la que jamás había intercambiado mensajes, estaba entre mis contactos de gTalk, en mi cuenta “principal”. Resulta que mi profesor también utiliza el correo de Unizar a través de Gmail. De hecho, en la ficha del contacto me mostraba agregadas ambas direcciones.

Google a veces se pasa de listo.

¿Y si no nos interesaba compartir las direcciones? De hecho, a mí no me interesaba. Como he dicho antes, ésta es una dirección que utilizo de forma informal y con la que no acostumbro a escribir a los profesores.

Para esas situaciones tengo otra más formal con nombre y apellidos para uso “profesional”, así como la cuenta de Unizar. Porque desde luego no queda serio recibir un email de una absurda combinación de protagonistas de dos sagas de ciencia ficción que nada tienen que ver.

Si envío un email utilizando una dirección específica como remitente ¿Por qué tiene que revelar también otra? Para eso no me molesto en seleccionar una de las cuentas y lo mando directamente con la principal.

Creo que sería muy exagerado llamarlo “fallo de seguridad” o similares términos, pero desde luego un comportamiento erróneo ya lo creo que es.

Multilawyer Perceptron

multilawyer perceptron

Quizás es un poco dura y no para todos los públicos, pero esto demuestra que estudiar no es sano. Se me ocurrió un día o dos antes del último examen, pero hasta que no he tenido un rato de tiempo libre no he podido hacerla. Espero no haberla cagado con los personajes de Ally McBeal porque jamás vi esa serie, pero fue tan famosa que imagino que el resto los reconocerán. Y sí, Lincoln fue abogado antes que presidente. Lo he descubierto fortuitamente buscando caras de abogados.

Consejo para quienes organicen el grado de Informática

Sé que ya llego tarde pero…

  1. Eliminar todo el contenido relacionado con Ingeniería del Software.
  2. Mandar a los alumnos tres o cuatro años a trabajar.
  3. Ahora sí, meterse a fondo con metodologías, uml, diseños, planificaciones… Cuando realmente lo valoremos.

Porque mientras estás estudiando y el mundo es rosa, a todos nos parecen una completa pérdida de tiempo. Y ojo, que sé que son fundamentales, pero igual sólo uno de cada veinte estudiantes no piensa que son un montón de dibujitos y chorradas. Es como obligar a leer El Quijote en primero de la ESO.

Bueno, o eso, o enseñar a programar desde primero aplicando al 100% alguna metodología… No sé qué traería más problemas/soluciones.

Incremento y decremento

Hoy toca post para informáticos. Como bien sabréis, muchos lenguajes disponen de una forma abreviada de indicar incrementos y decrementos, que son ‘++‘ y ‘--‘. Esto, además de facilitar la vida a los programadores evitándoles escribir a=a+1, es también de utilidad para las optimizaciones que hace el compilador, puesto que en la mayoría de arquitecturas existen instrucciones de incremento y decremento que se ejecutan utilizando menos recursos que una suma convencional.

En algunos lenguajes, como en C y Java, se puede utilizar este operador delante y detrás de las variables, pero tiene un comportamiento distinto. Si el operador está delante, se hace primero la resta y se evalúa el resultado; mientras que si está detrás, primero se devuelve el valor, y después se realiza la resta.

Así, si b=10 y hacemos a=--b, a y b terminarán con valor 9, pero a=b-- terminará con a=10 y b=9.

Bien, recordado esto, en mis apuntes de compiladores se menciona como un código algo lioso a primera vista, la siguiente instrucción c=a---b--. A raíz de ello, he decidido pensar en  situaciones similares a ésta, que son:

c = --a---b;
c = --a-b--;
c = a-----b;
c = a---b--;
c = a---b;

Suponiendo que es ilegal --n--, y obviando la última (hay que acordar cómo se comporta) ¿Alguien se anima a hacer la traza? Es facilita, la hice ayer a mano en lugar de seguir estudiando :P.

Aunque todas salvo la última parezcan correctas y sin ambigüedades, curiosamente hay dos de ellas que ni C ni Java aceptan (con los compiladores GCC 2.8.1, Borlandc 3.0 y JDK 1.6). Son la primera y la tercera, y ocurre lo mismo si en lugar de ‘--‘ utilizamos ‘++‘. ¿Por qué? Pues imagino que por el tipo de análisis que hace el compilador.

Tal y como veo que se comporta (he hecho más pruebas aparte de esos 5 casos), cuando el analizador léxico lee el código carácter a carácter, siempre que encuentra dos ‘-‘ seguidos, los considera un único token ‘--‘ y así es como los envía al siguiente nivel.

Después, en el analizador sintáctico/semántico debe de existir algún tipo de precedencia asignada al operador ‘--‘ por encima de la resta y el opuesto, de modo que cuando se encuentra con --a, ó a--, hace directamente una reducción y pasa a considerar la expresión como una constante, a la que ya no tiene sentido volver a aplicar otro ‘--‘.

En el caso “especial” c=a---b, a mi juicio el único que es ambiguo y del que debería quejarse el compilador, se opta por aplicar el operador ‘--‘ a la variable a; siendo equivalente a ejecutar c=a-b y después a--.

También acepta correctamente c=-a--; // c = -a (y decrementar después a).

Otras asignaciones que dan error de compilación, y comentado a lo que debería corresponder:

c = ---a; //c = – (decremento de a)

c = --a--b; //c = (decremento de a) menos (-b)

c = a--b; // c = a menos (-b)

c = a----b; // c = a menos (-b) [y después decrementar a]

Por los errores que da el compilador, en el primer caso creo que intentar aplicar el operador ‘--‘ sobre ‘-‘, y en el tercer caso, evalua ‘a--‘, y después encuentra la b sin operadores entre ellos. En el segundo fallan dos cosas: primero aplica correctamente --a, pero al resultado no se le puede aplicar otra vez ‘--‘; el segundo fallo es que ha consumido el token ‘--‘ y se encuentra, de nuevo, con una b solitaria sin operadores entre la a. En el cuarto tenemos otros dos fallos similares al anterior.

¿Ocurrirá así en todos los compiladores de C, o habrán tenido esto en cuenta en algún caso? ¿O es algo definido directamente en el estándar? He echado un vistazo rápido al ANSI C buscando “decrement”, pero no he leído nada destacable.

Presentaciones

¿Por qué esa manía de llamar a las presentaciones por el nombre del programa con el que se hacen?

Es horrible comprobar cómo Steve Jobs hace keynotes y la mayoría de gente powerpoints. Yo no voy diciendo que hago beamers. A todo esto se les ha llamado presentaciones de toda la vida. ¿Por qué influye la herramienta para darles el nombre?

Me llama la atención porque con el resto de conceptos/programas no coexisten varios nombres populares al mismo tiempo, sino que se mantiene el que comenzó o se hizo más famoso (como ocurre con cualquier producto comercial: kleenex, nocilla, colacao, walkman…). Así, los documentos de texto son words, las hojas de cálculo son excel,  e Internet fue el explorer aunque ahora ya es el google.

Y el más flagrante: el ordenador es el windows.

(Reflexión/pataleta/lloriqueo pensado leyendo Por qué no uso Prezi).

Mostrar Buzz en tu blog

Lo mejor de utilizar WordPress es que hay una comunidad muy amplia de usuarios, de modo que tarde o temprano siempre terminan apareciendo plugins para hacer todo tipo de cosas. Uno en el que llevaba pensando hace tiempo era la integración del blog con Buzz.

Después del estrepitoso fracaso de Google Wave, Buzz es la última apuesta de Google por las redes sociales. Es más bien una especie de Twitter, pero sin la absurda limitación de 140 caracteres que impone este servicio.

No sé si está teniendo demasiado éxito, pero me gusta porque me sirve para compartir y publicar enlaces de artículos interesantes que leo y que no dan de sí para una entrada en este blog. Una foto suelta, una viñeta, o una noticia con una simple frase comentándola u opinando. Nada más.

El caso es que para escribir una entrada aquí suelo dedicar un tiempo del que con el final del curso no dispongo, pero para añadir un Buzz no hace falta más de cinco minutos, así que para darle algo de vida a este blog estos días pensé que sería buena idea que se visualizasen aquí mis “buzzeos“.

Para ello, buscando Google Buzz en el repositorio de plugins de WordPress aparecen varios resultados. Instalé tres distintos, y tras probarlos, el que más me convenció fue Google Buzz ER. Me decanté por éste porque no sólo se veía mejor que los otros plug-in’s sino que puedes insertarlo donde quieras simplemente llamando a < ?php GoogleBuzzEr(); ?>. El resto sólo podías agregarlos mediante widgets.

El principal inconveniente de Gooble Buzz ER (y del resto que probé) es que no muestra correctamente: fotos, reshares, actualizaciones del blog, ni los enlaces agregados a la entrada mediante el botón que ofrece Buzz. De esos, los tres primeros apenas me importaban, pero el del enlace sí, porque es como suelo compartir los links con Buzz.

Así que entre ayer y hoy he estado cacharreando con el código y al final he conseguido que se muestren estos links. Si a alguien le interesa, hay que añadir las siguientes líneas.

Primero buscamos function gb_getData(), donde encontraremos un bucle foreach($xml->entry as $data), y allí dentro, por la línea 110, estará $mediaAttr = $media->content->attributes();. Después de esta asignación tenemos que escribir:

$tmp['mediaurl'] = $mediaAttr['url'];
$tmp['mediaAttr'] = $mediaAttr;

Con eso ya hemos obtenido los datos del xml de nuestro perfil de buzz. Ahora vamos a la función que escribe esos datos function gb_printData($data). Allí tenemos cada Buzz representado de la siguiente forma:

<div class='gber_post'>
{$v['content']}
{$v['imgSrcCont']}
/** AQUÍ **/
<span class='gber_time'>{$this->gb_showTime(strtotime($v['updated']))}, </span>
<span class='gber_comment'><a href='{$v['href']}'>comment</a></span>
</div>";

La línea de /** AQUÍ **/ la he incluido yo y es dónde habría que añadir:

<a href='{$v['mediaurl']}'>{$v['mediatitle']}_link</a>

De esta forma se mostrarán correctamente los links incluidos en el Buzz mediante el botón correspondiente. Del resto de problemas sólo he intentado solucionar los reshares y las acualizaciones de sitios agregados como el blog, pero no he sido capaz de encontrar en el xml cómo demonios están enlazados estos datos.

Google Buzz ER está publicado por Ivan Lazarevic bajo licencia GNU, de modo que pongo a disposición de quien quiera la versión actual (1.4) con las modificaciones que he detallado anteriormente. Descargar Google Buzz ER modificado.