Sie sind auf Seite 1von 31

Introducci

on
Acercamientos
Ejemplo
Conclusiones

Programacion Web con Haskell


Federico Builes

28 de junio de 2007

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

Introducci
on
Motivaci
on

Introduccion

Algo de Wikipedia para empezar:


In software engineering, a Web application or webapp is an
application that is accessed via web over a network such as the
Internet or an intranet
.
Por aplicaciones web para esta presentaci
on nos referimos a
aplicaciones accesibles a traves de un browser.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

Introducci
on
Motivaci
on

Introduccion
Las aplicaciones web son populares gracias a:
La posibilidad de tener el cliente en todos lados, en cualquier
momento.
La posibilidad de poder actualizar y modificar aplicaciones al
instante, sin depender de una cadena de distribucion para el
producto.
Ejecucion multi-plataforma desde el comienzo, sin
requerimientos en el lado del cliente (s
olo se necesita un
browser medianamente moderno).

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

Introducci
on
Motivaci
on

La web como plataforma

335 millones de usuarios solo en el continente Americano.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

Introducci
on
Motivaci
on

La web como plataforma

335 millones de usuarios solo en el continente Americano.


Servicios, nada de software empaquetado.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

Introducci
on
Motivaci
on

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

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

Introducci
on
Motivaci
on

Federico Builes

Programaci
on Web con Haskell

Por que Haskell?

Comodidad
Productividad
Correctitud

Introducci
on
Acercamientos
Ejemplo
Conclusiones

Introducci
on
Motivaci
on

Por que Haskell?

Comodidad
Productividad
Correctitud
ACID, STM, Paralelismo, Concurrencia, Unit Testing, y una
lista gigantesca de cosas horribles.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

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, memoria
compartida, sistemas de archivos virtuales.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

HAppS

Haskell Application Server, un framework para desarrollar servicios


web rapidamente, sin preocuparse por el pegante de las capas
inferiores (servidores web, de correo, bases de datos, etc).

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

ACID
Atomicity: Garantiza que cada una de las transacciones sea
exitosa (o en caso de fallo, que ninguna se realice).
Consistency: Garantiza que el sistema este en un estado valido
antes y despues de la transacci
on.
Isolation: Garantiza que todas las operaciones se ejecuten
isoladas del resto.
Durability: Garantiza que despues de una operacion exitosa, su
valor se quedara en el sistema por tanto tiempo como
sea necesario (no desaparecera del sistema en caso de
fallos). Esto es manejado por MACID (Monad ACID)
que se encarga de mantener un log de todas las
operaciones, desde donde puede reconstruir el estado
del sistema).
Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Persistencia, Concurrencia y ACID

HAppS garantiza estas tres caractersticas, integradas de base,


as que el desarrollador no debe preocuparse por esto.
HAppS trata todas las operaciones como transacciones
at
omicas, y a traves de MACID guarda un registro de estas.
Se encarga de ordenarlas para hacer el manejo de concurrencia
automatico y garantiza la persistencia a traves de
checkpoints, de nuevo, usando MACID.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Un ejemplo de HAppS

import HAppS
helloWorld = respond "Hello World"
main = stdHTTP (debugFilter : noState : [h () GET $
ok hello ])

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Network.CGI

CGI (Common Gateway Interface) es una forma de comunicacion


entre aplicaciones y servidores web. Esta interfaz permite que
cuando un usuario intente acceder a un sitio web, el servidor se
encargue de ejecutar un programa, tomar la salida y devolverla al
usuario a traves de su browser como un archivo HTML estatico.
Todos los cambios dinamicos se hacen dentro del ejecutable.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Network.CGI
Esta librera permite acceder a las variables usando los
metodos GET y POST, y al unirla con HaskellDB o HDBC se
puede lograr una aplicaci
on completa de tier-3.
El transformador para la m
onada CGI permite mantener una
separacion entre los datos que recibe la aplicacion ( a traves
de IO()) y el programa en s.
Soporta cookies, headers, ByteStrings, y FastCGI.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Network.CGI
Esta librera permite acceder a las variables usando los
metodos GET y POST, y al unirla con HaskellDB o HDBC se
puede lograr una aplicaci
on completa de tier-3.
El transformador para la m
onada CGI permite mantener una
separacion entre los datos que recibe la aplicacion ( a traves
de IO()) y el programa en s.
Soporta cookies, headers, ByteStrings, y FastCGI.
Sigue el modelo tradicional de desarrollo para aplicaciones
web, sin usar nada novedoso pero a la vez proporcionando
todo lo que necesita un desarrollador experimentado con web
para poder crear una aplicaci
on de manera rapida y eficaz.
Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Ejemplo CGI
import Network.NewCGI
import Text.XHtml
page :: Html
page = body << h1 << "Hello World!"
cgiMain :: CGI CGIResult
cgiMain = output $ renderHtml page
main :: IO ()
main = runCGI $ handleErrors cgiMain
Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

HSP

HSP (Haskell Server Pages) es una extensi


on al Haskell regular
donde, haciendo uso de XML y un DSL (Domain Specific
Language) se puede incrustar c
odigo Haskell dentro de paginas
HTML.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Inconvenientes
Para empezar, la u
ltima modificaci
on al proyecto se hizo en
mayo 2005. Este proyecto fue empezado por Niklas Broberg
como tesis de Maestra en Chalmers, as que toda la
documentacion y ejemplos solamente se encuentran en su
tesis.
Para poder ejecutar un proyecto en HSP se necesitan plugins
para un servidor web actual (no existen) o un servidor web
modificado (como HWS). Aunque este u
ltimo existe en el
codigo de la tesis, no soporta imagenes u otro tipo de
contenido web.
No tiene soporte para metodos POST, sesiones o una
documentacion completa.
Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Traduccion

En espa
nol, el proyecto no es medianamente u
til, y sin que nadie lo
tome y se encargue de trabajarlo, no lo sera nunca. De todas
formas, de los tres ejemplos, puede ser el mas eficaz a la hora de
convertir adeptos a Haskell usando aplicaciones web.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

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

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

HAppS
Network.CGI
HSP

Bases de Datos
La persistencia de los datos es tal vez la parte mas importante de
todo este proceso, Haskell ofrece las siguientes posibilidades:
HDBC : Capa de abstracci
on entre programas y la base de
datos por medio de una librera, tiene drivers para
MySQL, PostreSQL, SQLite y muchos mas.
HaskellDB : Librera para expresar querys y otras operaciones
relacionales de manera declarativa, todo es procesado
por medio de Haskell y no son necesarios querys SQL
(poco mantenimiento).

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

hPaste
pass.net
Hope
HWS
Flippi
HaXR

Donde se esta usando?

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

hPaste
pass.net
Hope
HWS
Flippi
HaXR

Federico Builes

Programaci
on Web con Haskell

hPaste

Introducci
on
Acercamientos
Ejemplo
Conclusiones

hPaste
pass.net
Hope
HWS
Flippi
HaXR

Federico Builes

Programaci
on Web con Haskell

pass.net

Introducci
on
Acercamientos
Ejemplo
Conclusiones

hPaste
pass.net
Hope
HWS
Flippi
HaXR

Federico Builes

Programaci
on Web con Haskell

Hope

Introducci
on
Acercamientos
Ejemplo
Conclusiones

hPaste
pass.net
Hope
HWS
Flippi
HaXR

Federico Builes

Programaci
on Web con Haskell

HWS

Introducci
on
Acercamientos
Ejemplo
Conclusiones

hPaste
pass.net
Hope
HWS
Flippi
HaXR

Federico Builes

Programaci
on Web con Haskell

Flippi

Introducci
on
Acercamientos
Ejemplo
Conclusiones

hPaste
pass.net
Hope
HWS
Flippi
HaXR

HaXR

HaXR es una librera para escribir aplicaciones XML-RPC en


Haskell. RPC (Remote Procedure Call) es una tecnologa que
permite llamar una funci
on a traves de la red, y usando XML se
puede interactuar entre dos espacios de direcciones (memoria)
totalmente diferentes.
Esto permite la creacion muy facil de APIs para aplicaciones en
Internet, sin tener que recurrir a SOAP o REST. Es la base de
muchos de los servicios de Internet.

Federico Builes

Programaci
on Web con Haskell

Introducci
on
Acercamientos
Ejemplo
Conclusiones

D
onde est
an?
Qu
e hace falta?

Federico Builes

Programaci
on Web con Haskell

Donde estan?

Introducci
on
Acercamientos
Ejemplo
Conclusiones

D
onde est
an?
Qu
e hace falta?

Federico Builes

Programaci
on Web con Haskell

Que hace falta?

Das könnte Ihnen auch gefallen