Archivo de la categoría: AAP

Haciendo un planet en python

La práctica 5 de AAP consistía en crear un programa que recogiese las noticias de diferentes fuentes y las mostrase en un sólo documento HTML, lo que se viene a denominar un planet en la jerga bloguera.

En mi caso lo he programado en Python haciendo uso de la librería feedparser y genero una página HTML así como un feed usando la librería PyRSS2Gen.

He usado la codificación de caracteres utf-8 en todo momento, pero tengo un problema al generar el archivo html ya que no se guarda como utf-8 (si lo abrimos con un editor como geany podemos comprobar que está “sin codificación”), y luego al mostrarlo en el navegador no se ve bien. El caso es que en mi máquina sí se muestra correctamente, pero en el servidor donde lo he alojado no, como podéis ver en http://swecai.ugr.es/~planet_etsiit. Si en el navegador seleccionáis la codificación unicode, se ve bien, e incluso en el header está el meta indicando que es utf-8. ¿Alguna idea de cómo solucionar esto? Editado: blaxter ha dado con la tecla en este comentario. ¡Gracias!

Podéis descargar la aplicación libremente: planet.tgz. En el fichero index.html viene una descripción más detallada del trabajo realizado y en la carpeta scripts se encuentra el fichero actualizar.py que se encarga de generar los ficheros planet.html y feed.xml a partir de los feeds situados en sites.txt cada cierto tiempo, que podemos indicar usando una tarea cron.

AAP Práctica 3 – Script para Greasemonkey

Greasemonkey es un plugin para el navegador Firefox que nos permite modificar el comportamiento de la página web que estemos visitando gracias a los diferentes scripts que tengamos instalados. Estos scripts se programan en Javascript, de manera que tenemos una versatilidad increíble para cambiar el aspecto y dotar de más funcionalidad a una web.

Para mi práctica he hecho un script muy simple pero útil para los foros de Swad, la plataforma de apoyo a la docencia con más uso de la Universidad de Granada. La funcionalidad que he añadido es la de citar en tu respuesta el trozo de texto que selecciones de un mensaje anterior.

Los que tengáis cuenta en Swad podéis instalar el script simplemente pinchando en: replyswad.user.js (previamente has de tener instalado Greasemonkey).

Este sería el botón extra añadido:

boton citar texto swad

Y este el aspecto que presentaría nuestro mensaje:

mensaje con texto citado swad

AAP Práctica 1 – Recursos para la asignatura

Aquí os dejo con una serie de recursos que nos pueden ser útiles para la asignatura de AAP, junto con una valoración personal sobre 5 puntos.

  • Firebug: plugin de Firefox imprescindible para el desarrollo web e incluye un intérprete de Javascript así como un profiler y un debugger. 5/5 puntos
  • Visual jQuery: es una herramienta para la navegación por la documentación de jQuery, que nos permite encontrar fácilmente ayuda sobre un procedimiento que estemos buscando de este popular framework de Javascript. 4/5 puntos (debería estar actualizado a la última versión estable 1.3.1)
  • gotAPI: buscador vertical para distintos lenguajes de programación. Imprescindible para encontrar rapidamente ayuda sobre funciones de un determinado lenguaje (HTML, Javascript, PHP, Perl, Ruby, C++, etc.) 4/5 puntos
  • Javascript in Ten Minutes: un repaso rápido a la funcionalidad y sintaxis de Javascript. 3/5 puntos (viene bien para un vistazo rápido)
  • <WebDevResourceList />: listado de frameworks, cms, wikis, blogs, foros y demás herramientas que podemos filtrar por el lenguaje programación que utilizan (PHP, Python, Ruby, Perl, Java…). 2/5 puntos (algo tonto, pero curioso)
  • Visual Event: nos permite añadir una capa sobre la web para ver los eventos javascript que incorpora. Se puede ver un ejemplo aquí. 3/5 puntos (sólo funciona con algunas librerías)
  • XML Examples: algunos ejemplos sobre cómo trabajar con XML, aplicando CSS, XSLT, Ajax y Javascript. 5/5 puntos (ejemplos claros e ilustrativos)

V8, el intérprete de Javascript de Google Chrome en Linux

En clase de AAP vamos a aprender a usar JavaScript no sólo como complemento al diseño web, si no como el lenguaje de programación completo que es. Para ello usaremos un intérprete que funcione desde línea de comandos. Entre otros, podemos encontrar SpiderMonkey (paquete spidermonkey-bin en Ubuntu) que está implementado en C, o por ejemplo Rhino que está hecho en Java.

En este post pretendo mostrar cómo instalar V8, el motor de JavaScript que usa el navegador Google Chrome y que está implementado en C++.

Primero nos descargamos el código fuente:

svn checkout http://v8.googlecode.com/svn/trunk/ ./v8

Para compilarlo, necesitamos tener instalado scons:

sudo aptitude install scons

Una vez instalado, procedemos a compilarlo:

cd v8
scons sample=shell

Y con esto, ya tendremos un ejecutable con el que podemos interpretar nuestros programas en JavaScript. Para facilitar las cosas podemos crear un enlace simbólico:

sudo ln -s /home/draxus/v8/shell /usr/bin/v8

Otros motores de última generación son TraceMonkey (Firefox 3.1) o SquirrelFish (Safari 4). Es interesante estar al tanto del rendimiento de estos motores porque están continuamente mejorando para ser competitivos en aplicaciones muy ricas en JavaScript como puede ser Gmail.

AAP Bloque 1.2 Ejercicio 2 – Ejemplos de interfaces REST

Hacer un programa o buscar un ejemplo que use un interfaz REST para acceder a algún servicio Web, como del.icio.us.

Se denomina interfaz REST a una técnica para el acceso a recursos a través de una URI.

La mayoría de los servicios webs actuales ofrecen una API, que son un conjunto de funciones y procedimientos para desarrollar aplicaciones externas, generalmente mediante la técnica REST. Veamos un par de ejemplos.

Last.fm es el mayor portal de recomendación de música online y una de sus múltiples funciones de su API es geo.getEvents, que nos da los eventos cercanos a una posición. Por ejemplo, con http://ws.audioscrobbler.com/2.0/?method=geo.getevents&location=granada&api_key=b25b959554ed76058ac220b7b2e0a026 veremos los próximos conciertos que se van a celebrar en o cerca de Granada.

Podemos ver otro ejemplo en el caso de Flickr, la mayor red social de fotografía online. Si usamos la función flickr.favorites.getPublicList de su API, podemos obtener las fotografías públicas favoritas de un usuario de esta forma: http://api.flickr.com/services/rest/?method=flickr.favorites.getPublicList&api_key=a6a323fe1aa900e0c15211f28ffdc42c&user_id=92176591%40N00

Normalmente los resultados de estas peticiones se devuelven en formato XML o JSON, para que el procesador posterior de los datos resulte lo más cómodo posible.

En la mayoría de estos servicios es necesario solicitar una API Key para hacer las peticiones, de manera que en todo momento se sabe el uso que se hace de ella y te la pueden inhabilitar si sobrepasas los límites del servicio.

Nota: leer comentarios.

AAP Bloque 1.2 Ejercicio 1 – Escalabilidad en sistemas distribuidos

Discutir cuáles son los principales obstáculos a la escalabilidad en un sistema distribuido.

Se dice que un sistema es escalable si al expandirse es capaz de lograr un mejor rendimiento sin perder calidad de servicio.

Algunos ejemplos de escalabilidad:

  • Si tenemos un problema computacionalmente complejo que se está resolviendo en varias máquinas, si añadimos más máquinas, va a tardar menos en resolverse.
  • Si un servidor web que recibe 100 peticiones por minuto pasa a recibir 1000 peticiones por minuto y el tiempo de respuesta no se ve sacrificado.

Se tiende a pensar que un sistema distribuido es por definición escalable, pero esto no siempre es así ya que la parte de expansión sí se cumple, pero la de mejorar el rendimiento y no perder calidad de servicio no siempre se cumple. Esto sucede por diversas causas:

  • La latencia NO es nula: al añadir más nodos a una red distribuida, se van a introducir más retardos en la comunicación.
  • El ancho de banda NO es infinito: puede llegar a pasar que uno de los nodos de la red se sature por exceso de tráfico.
  • La red NO es homogénea: cada tramo de la red puede tener velocidades distintas, luego si tenemos a priori una red de alta velocidad y empezamos a añadir nodos cuya conexión es mucho más lenta, esto va a repercutir en el desempeño de la red. Asimismo puede ocurrir que se usen protocolos de red distintos, por lo que a más variedad, más latencia se tendrá.

AAP Bloque 1.1 Ejercicio 3 – Sistemas Grid

Identificar un producto para sistemas Grid, y diferentes instalaciones que lo usen.

Llamamos grid a un sistema de computación distribuido que permite compartir recursos no centrados geográficamente para resolver problemas de gran escala.

Las grid y las redes P2P tienen mucho en común y especialmente la idea básica de compartición de recursos. Entre las características diferentes podemos ver la P2P como mas anónima y generalizada en ordenadores de usuarios de Internet, mientras que las grids nacen de una estructura de nodos más controlada y jerarquizada en centros científicos.

Un caso particular de sistemas grid es la conocida como computación voluntaria. Ésta consiste en aprovechar los ciclos del procesador que nos estamos usando para realizar cálculos que son útiles para la ciencia. El más conocido es Seti@Home que utiliza estos ciclos ociosos para analizar señales buscando patrones inteligentes extraterrestres. Un proyecto similar nacido en España es Extremadura@Home. Ambos funcionan con el proyecto BOINC, un programa creado en la Universidad de Berkeley, y que permite a cualquiera crear su propio sistema de computacion grid.

Otro proyecto español es la iniciativa IRISgrid, donde diferentes universidades y centros de investigación comparten sus recursos de manera que todos se pueden aprovechar de una mayor potencia de cálculo. Uno de los nodos conectados es UGRGrid, el de la Universidad de Granada.

Arquitectura de Altas Prestaciones

Este cuatrimestre tengo una asignatura llamada Arquitectura de Altas Prestaciones que la imparte JJ Merelo en la ETSIIT de la Universidad de Granada.

El objetivo de la asignatura es tratar de sacar el máximo partido a los sistemas informáticos actuales, desde procesadores para sistemas embebidos a un supercomputador con miles de procesadores, pasando por sistemas grid como el de RedIRIS.

Como plataforma online vamos a utilizar un wiki para tomar apuntes y los blogs para hacer los ejercicios de autoevaluación, que se agregarán a un planet. Para ello he creado una categoría específica llamada AAP con el fin de tener un RSS específico para el planet, así además de aprender yo, también aprendéis vosotros un poquito :)