View
11
Download
0
Category
Tags:
Preview:
DESCRIPTION
Programacion Web Con Haskell
Citation preview
IntroduccionAcercamientos
EjemploConclusiones
Programacion Web con Haskell
Federico Builes
28 de junio de 2007
Federico Builes 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
IntroduccionAcercamientos
EjemploConclusiones
hPastepass.netHopeHWSFlippiHaXR
¿Donde se esta usando?
Federico Builes Programacion Web con Haskell
IntroduccionAcercamientos
EjemploConclusiones
hPastepass.netHopeHWSFlippiHaXR
hPaste
Federico Builes Programacion Web con Haskell
IntroduccionAcercamientos
EjemploConclusiones
hPastepass.netHopeHWSFlippiHaXR
pass.net
Federico Builes Programacion Web con Haskell
IntroduccionAcercamientos
EjemploConclusiones
hPastepass.netHopeHWSFlippiHaXR
Hope
Federico Builes Programacion Web con Haskell
IntroduccionAcercamientos
EjemploConclusiones
hPastepass.netHopeHWSFlippiHaXR
HWS
Federico Builes Programacion Web con Haskell
IntroduccionAcercamientos
EjemploConclusiones
hPastepass.netHopeHWSFlippiHaXR
Flippi
Federico Builes 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
IntroduccionAcercamientos
EjemploConclusiones
¿Donde estan?¿Que hace falta?
¿Donde estan?
Federico Builes Programacion Web con Haskell
IntroduccionAcercamientos
EjemploConclusiones
¿Donde estan?¿Que hace falta?
¿Que hace falta?
Federico Builes Programacion Web con Haskell
Recommended