Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Programacion Web con Haskell
1. Introducci´n
o
Acercamientos
Ejemplo
Conclusiones
Programaci´n Web con Haskell
o
Federico Builes
28 de junio de 2007
Federico Builes Programaci´n Web con Haskell
o
2. Introducci´n
o
Acercamientos Introducci´n
o
Ejemplo Motivaci´n
o
Conclusiones
Introducci´n
o
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´n nos referimos a
o
aplicaciones accesibles a trav´s de un browser.
e
Federico Builes Programaci´n Web con Haskell
o
3. Introducci´n
o
Acercamientos Introducci´n
o
Ejemplo Motivaci´n
o
Conclusiones
Introducci´n
o
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 distribuci´n para el
o
producto.
Ejecuci´n multi-plataforma desde el comienzo, sin
o
requerimientos en el lado del cliente (s´lo se necesita un
o
browser medianamente moderno).
Federico Builes Programaci´n Web con Haskell
o
4. Introducci´n
o
Acercamientos Introducci´n
o
Ejemplo Motivaci´n
o
Conclusiones
La web como plataforma
335 millones de usuarios solo en el continente Americano.
Federico Builes Programaci´n Web con Haskell
o
5. Introducci´n
o
Acercamientos Introducci´n
o
Ejemplo Motivaci´n
o
Conclusiones
La web como plataforma
335 millones de usuarios solo en el continente Americano.
Servicios, nada de software empaquetado.
Federico Builes Programaci´n Web con Haskell
o
6. Introducci´n
o
Acercamientos Introducci´n
o
Ejemplo Motivaci´n
o
Conclusiones
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´n Web con Haskell
o
7. Introducci´n
o
Acercamientos Introducci´n
o
Ejemplo Motivaci´n
o
Conclusiones
¿Por qu´ Haskell?
e
Comodidad
Productividad
Correctitud
Federico Builes Programaci´n Web con Haskell
o
8. Introducci´n
o
Acercamientos Introducci´n
o
Ejemplo Motivaci´n
o
Conclusiones
¿Por qu´ Haskell?
e
Comodidad
Productividad
Correctitud
ACID, STM, Paralelismo, Concurrencia, Unit Testing, y una
lista gigantesca de cosas horribles.
Federico Builes Programaci´n Web con Haskell
o
9. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Diferentes formas de pensar
Los ingenieros de software: Aplicaciones 3-tier, bases de datos,
MVC, escalabilidad horizontal y vertical.
Los acad´micos: Software Transactional Memory (STM),
e
aplicaciones como servidores web, memoria
compartida, sistemas de archivos virtuales.
Federico Builes Programaci´n Web con Haskell
o
10. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
HAppS
Haskell Application Server, un framework para desarrollar servicios
web r´pidamente, sin preocuparse por el pegante de las capas
a
inferiores (servidores web, de correo, bases de datos, etc).
Federico Builes Programaci´n Web con Haskell
o
11. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
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 est´ en un estado v´lido
e a
antes y despu´s de la transacci´n.
e o
Isolation: Garantiza que todas las operaciones se ejecuten
isoladas del resto.
Durability: Garantiza que despu´s de una operaci´n exitosa, su
e o
valor se quedar´ en el sistema por tanto tiempo como
a
sea necesario (no desaparecer´ del sistema en caso de
a
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´n Web con Haskell
o
12. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
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 transacciones
at´micas, y a trav´s de MACID guarda un registro de estas.
o e
Se encarga de ordenarlas para hacer el manejo de concurrencia
autom´tico y garantiza la persistencia a trav´s de
a e
checkpoints, de nuevo, usando MACID.
Federico Builes Programaci´n Web con Haskell
o
13. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Un ejemplo de HAppS
import HAppS
helloWorld = respond quot;Hello Worldquot;
main = stdHTTP (debugFilter : noState : [h () GET $
ok hello ])
Federico Builes Programaci´n Web con Haskell
o
14. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Network.CGI
CGI (Common Gateway Interface) es una forma de comunicaci´n o
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 trav´s de su browser como un archivo HTML est´tico.
e a
Todos los cambios din´micos se hacen dentro del ejecutable.
a
Federico Builes Programaci´n Web con Haskell
o
15. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Network.CGI
Esta librer´ permite acceder a las variables usando los
ıa
m´todos GET y POST, y al unirla con HaskellDB o HDBC se
e
puede lograr una aplicaci´n completa de tier-3.
o
El transformador para la m´nada CGI permite mantener una
o
separaci´n entre los datos que recibe la aplicaci´n ( a trav´s
o o e
de IO()) y el programa en s´ı.
Soporta cookies, headers, ByteStrings, y FastCGI.
Federico Builes Programaci´n Web con Haskell
o
16. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Network.CGI
Esta librer´ permite acceder a las variables usando los
ıa
m´todos GET y POST, y al unirla con HaskellDB o HDBC se
e
puede lograr una aplicaci´n completa de tier-3.
o
El transformador para la m´nada CGI permite mantener una
o
separaci´n entre los datos que recibe la aplicaci´n ( a trav´s
o o e
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´n de manera r´pida y eficaz.
o a
Federico Builes Programaci´n Web con Haskell
o
17. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Ejemplo CGI
import Network.NewCGI
import Text.XHtml
page :: Html
page = body << h1 << quot;Hello World!quot;
cgiMain :: CGI CGIResult
cgiMain = output $ renderHtml page
main :: IO ()
main = runCGI $ handleErrors cgiMain
Federico Builes Programaci´n Web con Haskell
o
18. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
HSP
HSP (Haskell Server Pages) es una extensi´n al Haskell regular
o
donde, haciendo uso de XML y un DSL (Domain Specific
Language) se puede incrustar c´digo Haskell dentro de p´ginas
o a
HTML.
Federico Builes Programaci´n Web con Haskell
o
19. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Inconvenientes
Para empezar, la ultima modificaci´n al proyecto se hizo en
´ o
mayo 2005. Este proyecto fue empezado por Niklas Broberg
como tesis de Maestr´ en Chalmers, as´ que toda la
ıa ı
documentaci´n y ejemplos solamente se encuentran en su
o
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 ultimo existe en el
´
c´digo de la tesis, no soporta im´genes u otro tipo de
o a
contenido web.
No tiene soporte para m´todos POST, sesiones o una
e
documentaci´n completa.
o
Federico Builes Programaci´n Web con Haskell
o
20. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Traducci´n
o
En espa˜ol, el proyecto no es medianamente util, y sin que nadie lo
n ´
tome y se encargue de trabajarlo, no lo ser´ nunca. De todas
a
formas, de los tres ejemplos, puede ser el mas eficaz a la hora de
convertir adeptos a Haskell usando aplicaciones web.
Federico Builes Programaci´n Web con Haskell
o
21. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
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´n Web con Haskell
o
22. Introducci´n
o
HAppS
Acercamientos
Network.CGI
Ejemplo
HSP
Conclusiones
Bases de Datos
La persistencia de los datos es tal vez la parte m´s importante de
a
todo este proceso, Haskell ofrece las siguientes posibilidades:
HDBC : Capa de abstracci´n entre programas y la base de
o
datos por medio de una librer´ tiene drivers para
ıa,
MySQL, PostreSQL, SQLite y muchos m´s. a
HaskellDB : Librer´ para expresar querys y otras operaciones
ıa
relacionales de manera declarativa, todo es procesado
por medio de Haskell y no son necesarios querys SQL
(poco mantenimiento).
Federico Builes Programaci´n Web con Haskell
o
23. hPaste
Introducci´n
o pass.net
Acercamientos Hope
Ejemplo HWS
Conclusiones Flippi
HaXR
¿D´nde se esta usando?
o
Federico Builes Programaci´n Web con Haskell
o
24. hPaste
Introducci´n
o pass.net
Acercamientos Hope
Ejemplo HWS
Conclusiones Flippi
HaXR
hPaste
Federico Builes Programaci´n Web con Haskell
o
25. hPaste
Introducci´n
o pass.net
Acercamientos Hope
Ejemplo HWS
Conclusiones Flippi
HaXR
pass.net
Federico Builes Programaci´n Web con Haskell
o
26. hPaste
Introducci´n
o pass.net
Acercamientos Hope
Ejemplo HWS
Conclusiones Flippi
HaXR
Hope
Federico Builes Programaci´n Web con Haskell
o
27. hPaste
Introducci´n
o pass.net
Acercamientos Hope
Ejemplo HWS
Conclusiones Flippi
HaXR
HWS
Federico Builes Programaci´n Web con Haskell
o
28. hPaste
Introducci´n
o pass.net
Acercamientos Hope
Ejemplo HWS
Conclusiones Flippi
HaXR
Flippi
Federico Builes Programaci´n Web con Haskell
o
29. hPaste
Introducci´n
o pass.net
Acercamientos Hope
Ejemplo HWS
Conclusiones Flippi
HaXR
HaXR
HaXR es una librer´ para escribir aplicaciones XML-RPC en
ıa
Haskell. RPC (Remote Procedure Call) es una tecnolog´ que
ıa
permite llamar una funci´n a trav´s de la red, y usando XML se
o e
puede interactuar entre dos espacios de direcciones (memoria)
totalmente diferentes.
Esto permite la creaci´n muy f´cil de APIs para aplicaciones en
o a
Internet, sin tener que recurrir a SOAP o REST. Es la base de
muchos de los servicios de Internet.
Federico Builes Programaci´n Web con Haskell
o
30. Introducci´n
o
Acercamientos ¿D´nde est´n?
o a
Ejemplo ¿Qu´ hace falta?
e
Conclusiones
¿D´nde est´n?
o a
Federico Builes Programaci´n Web con Haskell
o
31. Introducci´n
o
Acercamientos ¿D´nde est´n?
o a
Ejemplo ¿Qu´ hace falta?
e
Conclusiones
¿Qu´ hace falta?
e
Federico Builes Programaci´n Web con Haskell
o