programacion web con haskell

31
Introducci´ on Acercamientos Ejemplo Conclusiones Programaci´ on Web con Haskell Federico Builes 28 de junio de 2007 Federico Builes Programaci´ on Web con Haskell

Upload: febuiles

Post on 04-Jul-2015

3.612 views

Category:

Technology


1 download

DESCRIPTION

Programacion Web con Haskell para el grupo de Eafit en Programacion Funcional

TRANSCRIPT

Page 1: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

Programacion Web con Haskell

Federico Builes

28 de junio de 2007

Federico Builes Programacion Web con Haskell

Page 2: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

IntroduccionMotivacion

Introduccion

Algo de Wikipedia para empezar:“In software engineering, a Web application or webapp is anapplication that is accessed via web over a network such as theInternet or an intranet”.Por aplicaciones web para esta presentacion nos referimos aaplicaciones accesibles a traves de un browser.

Federico Builes Programacion Web con Haskell

Page 3: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

IntroduccionMotivacion

Introduccion

Las aplicaciones web son populares gracias a:

La posibilidad de tener el cliente en todos lados, en cualquiermomento.

La posibilidad de poder actualizar y modificar aplicaciones alinstante, sin depender de una cadena de distribucion para elproducto.

Ejecucion multi-plataforma desde el comienzo, sinrequerimientos en el lado del cliente (solo se necesita unbrowser medianamente moderno).

Federico Builes Programacion Web con Haskell

Page 4: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

IntroduccionMotivacion

La web como plataforma

335 millones de usuarios solo en el continente Americano.

Servicios, nada de software empaquetado.

Word of Mouth = Publicidad efectiva y gratis.

Federico Builes Programacion Web con Haskell

Page 5: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

IntroduccionMotivacion

La web como plataforma

335 millones de usuarios solo en el continente Americano.

Servicios, nada de software empaquetado.

Word of Mouth = Publicidad efectiva y gratis.

Federico Builes Programacion Web con Haskell

Page 6: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

IntroduccionMotivacion

La web como plataforma

335 millones de usuarios solo en el continente Americano.

Servicios, nada de software empaquetado.

Word of Mouth = Publicidad efectiva y gratis.

Federico Builes Programacion Web con Haskell

Page 7: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

IntroduccionMotivacion

¿Por que Haskell?

Comodidad

Productividad

Correctitud

ACID, STM, Paralelismo, Concurrencia, Unit Testing, y unalista gigantesca de cosas horribles.

Federico Builes Programacion Web con Haskell

Page 8: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

IntroduccionMotivacion

¿Por que Haskell?

Comodidad

Productividad

Correctitud

ACID, STM, Paralelismo, Concurrencia, Unit Testing, y unalista gigantesca de cosas horribles.

Federico Builes Programacion Web con Haskell

Page 9: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Diferentes formas de pensar

Los ingenieros de software: Aplicaciones 3-tier, bases de datos,MVC, escalabilidad horizontal y vertical.

Los academicos: Software Transactional Memory (STM),aplicaciones como servidores web, memoriacompartida, sistemas de archivos virtuales.

Federico Builes Programacion Web con Haskell

Page 10: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

HAppS

Haskell Application Server, un framework para desarrollar serviciosweb rapidamente, sin preocuparse por el pegante de las capasinferiores (servidores web, de correo, bases de datos, etc).

Federico Builes Programacion Web con Haskell

Page 11: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

ACID

Atomicity: Garantiza que cada una de las transacciones seaexitosa (o en caso de fallo, que ninguna se realice).

Consistency: Garantiza que el sistema este en un estado validoantes y despues de la transaccion.

Isolation: Garantiza que todas las operaciones se ejecutenisoladas del resto.

Durability: Garantiza que despues de una operacion exitosa, suvalor se quedara en el sistema por tanto tiempo comosea necesario (no desaparecera del sistema en caso defallos). Esto es manejado por MACID (Monad ACID)que se encarga de mantener un log de todas lasoperaciones, desde donde puede reconstruir el estadodel sistema).

Federico Builes Programacion Web con Haskell

Page 12: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Persistencia, Concurrencia y ACID

HAppS garantiza estas tres caracterısticas, integradas de base,ası que el desarrollador no debe preocuparse por esto.

HAppS trata todas las operaciones como transaccionesatomicas, y a traves de MACID guarda un registro de estas.Se encarga de ordenarlas para hacer el manejo de concurrenciaautomatico y garantiza la persistencia a traves decheckpoints, de nuevo, usando MACID.

Federico Builes Programacion Web con Haskell

Page 13: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Un ejemplo de HAppS

import HAppShelloWorld = respond "Hello World"main = stdHTTP (debugFilter : noState : [h () GET $

ok hello ])

Federico Builes Programacion Web con Haskell

Page 14: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Network.CGI

CGI (Common Gateway Interface) es una forma de comunicacionentre aplicaciones y servidores web. Esta interfaz permite quecuando un usuario intente acceder a un sitio web, el servidor seencargue de ejecutar un programa, tomar la salida y devolverla alusuario a traves de su browser como un archivo HTML estatico.Todos los cambios dinamicos se hacen dentro del ejecutable.

Federico Builes Programacion Web con Haskell

Page 15: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Network.CGI

Esta librerıa permite acceder a las variables usando losmetodos GET y POST, y al unirla con HaskellDB o HDBC sepuede lograr una aplicacion completa de tier-3.

El transformador para la monada CGI permite mantener unaseparacion entre los datos que recibe la aplicacion ( a travesde IO()) y el programa en sı.

Soporta cookies, headers, ByteStrings, y FastCGI.

Sigue el modelo tradicional de desarrollo para aplicacionesweb, sin usar nada novedoso pero a la vez proporcionandotodo lo que necesita un desarrollador experimentado con webpara poder crear una aplicacion de manera rapida y eficaz.

Federico Builes Programacion Web con Haskell

Page 16: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Network.CGI

Esta librerıa permite acceder a las variables usando losmetodos GET y POST, y al unirla con HaskellDB o HDBC sepuede lograr una aplicacion completa de tier-3.

El transformador para la monada CGI permite mantener unaseparacion entre los datos que recibe la aplicacion ( a travesde IO()) y el programa en sı.

Soporta cookies, headers, ByteStrings, y FastCGI.

Sigue el modelo tradicional de desarrollo para aplicacionesweb, sin usar nada novedoso pero a la vez proporcionandotodo lo que necesita un desarrollador experimentado con webpara poder crear una aplicacion de manera rapida y eficaz.

Federico Builes Programacion Web con Haskell

Page 17: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Ejemplo CGI

import Network.NewCGIimport Text.XHtml

page :: Htmlpage = body << h1 << "Hello World!"

cgiMain :: CGI CGIResultcgiMain = output $ renderHtml page

main :: IO ()main = runCGI $ handleErrors cgiMain

Federico Builes Programacion Web con Haskell

Page 18: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

HSP

HSP (Haskell Server Pages) es una extension al Haskell regulardonde, haciendo uso de XML y un DSL (Domain SpecificLanguage) se puede incrustar codigo Haskell dentro de paginasHTML.

Federico Builes Programacion Web con Haskell

Page 19: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Inconvenientes

Para empezar, la ultima modificacion al proyecto se hizo enmayo 2005. Este proyecto fue empezado por Niklas Brobergcomo tesis de Maestrıa en Chalmers, ası que toda ladocumentacion y ejemplos solamente se encuentran en sutesis.

Para poder ejecutar un proyecto en HSP se necesitan pluginspara un servidor web actual (no existen) o un servidor webmodificado (como HWS). Aunque este ultimo existe en elcodigo de la tesis, no soporta imagenes u otro tipo decontenido web.

No tiene soporte para metodos POST, sesiones o unadocumentacion completa.

Federico Builes Programacion Web con Haskell

Page 20: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Traduccion

En espanol, el proyecto no es medianamente util, y sin que nadie lotome y se encargue de trabajarlo, no lo sera nunca. De todasformas, de los tres ejemplos, puede ser el mas eficaz a la hora deconvertir adeptos a Haskell usando aplicaciones web.

Federico Builes Programacion Web con Haskell

Page 21: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Ejemplo HSP

<%import System.Time%><html><head><title>Pagina de Ejemplo</title></head><body>

<h1>Esto es HTML comun y corriente, nada magico.<br />Son las: <% getClockTime %>

</body></html>

Federico Builes Programacion Web con Haskell

Page 22: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

HAppSNetwork.CGIHSP

Bases de Datos

La persistencia de los datos es tal vez la parte mas importante detodo este proceso, Haskell ofrece las siguientes posibilidades:

HDBC : Capa de abstraccion entre programas y la base dedatos por medio de una librerıa, tiene drivers paraMySQL, PostreSQL, SQLite y muchos mas.

HaskellDB : Librerıa para expresar querys y otras operacionesrelacionales de manera declarativa, todo es procesadopor medio de Haskell y no son necesarios querys SQL(poco mantenimiento).

Federico Builes Programacion Web con Haskell

Page 23: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

hPastepass.netHopeHWSFlippiHaXR

¿Donde se esta usando?

Federico Builes Programacion Web con Haskell

Page 24: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

hPastepass.netHopeHWSFlippiHaXR

hPaste

Federico Builes Programacion Web con Haskell

Page 25: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

hPastepass.netHopeHWSFlippiHaXR

pass.net

Federico Builes Programacion Web con Haskell

Page 26: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

hPastepass.netHopeHWSFlippiHaXR

Hope

Federico Builes Programacion Web con Haskell

Page 27: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

hPastepass.netHopeHWSFlippiHaXR

HWS

Federico Builes Programacion Web con Haskell

Page 28: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

hPastepass.netHopeHWSFlippiHaXR

Flippi

Federico Builes Programacion Web con Haskell

Page 29: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

hPastepass.netHopeHWSFlippiHaXR

HaXR

HaXR es una librerıa para escribir aplicaciones XML-RPC enHaskell. RPC (Remote Procedure Call) es una tecnologıa quepermite llamar una funcion a traves de la red, y usando XML sepuede interactuar entre dos espacios de direcciones (memoria)totalmente diferentes.Esto permite la creacion muy facil de APIs para aplicaciones enInternet, sin tener que recurrir a SOAP o REST. Es la base demuchos de los servicios de Internet.

Federico Builes Programacion Web con Haskell

Page 30: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

¿Donde estan?¿Que hace falta?

¿Donde estan?

Federico Builes Programacion Web con Haskell

Page 31: Programacion Web con Haskell

IntroduccionAcercamientos

EjemploConclusiones

¿Donde estan?¿Que hace falta?

¿Que hace falta?

Federico Builes Programacion Web con Haskell