on 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 trav´ es de un browser. Federico Builes Programaci´ on Web con Haskell
on 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´ on para el producto. Ejecuci´ on 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
web como plataforma 335 millones de usuarios solo en el continente Americano. Servicios, nada de software empaquetado. Federico Builes Programaci´ on Web con Haskell
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
qu´ e Haskell? Comodidad Productividad Correctitud ACID, STM, Paralelismo, Concurrencia, Unit Testing, y una lista gigantesca de cosas horribles. Federico Builes Programaci´ on Web con Haskell
de pensar Los ingenieros de software: Aplicaciones 3-tier, bases de datos, MVC, escalabilidad horizontal y vertical. Los acad´ emicos: Software Transactional Memory (STM), aplicaciones como servidores web, memoria compartida, sistemas de archivos virtuales. Federico Builes Programaci´ on Web con Haskell
Application Server, un framework para desarrollar servicios web r´ apidamente, sin preocuparse por el pegante de las capas inferiores (servidores web, de correo, bases de datos, etc). Federico Builes Programaci´ on Web con Haskell
Garantiza que cada una de las transacciones sea exitosa (o en caso de fallo, que ninguna se realice). Consistency: Garantiza que el sistema est´ e en un estado v´ alido antes y despu´ es de la transacci´ on. Isolation: Garantiza que todas las operaciones se ejecuten isoladas del resto. Durability: Garantiza que despu´ es de una operaci´ on exitosa, su valor se quedar´ a en el sistema por tanto tiempo como sea necesario (no desaparecer´ a 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
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´ omicas, y a trav´ es de MACID guarda un registro de estas. Se encarga de ordenarlas para hacer el manejo de concurrencia autom´ atico y garantiza la persistencia a trav´ es de checkpoints, de nuevo, usando MACID. Federico Builes Programaci´ on Web con Haskell
de HAppS import HAppS helloWorld = respond "Hello World" main = stdHTTP (debugFilter : noState : [h () GET $ ok hello ]) Federico Builes Programaci´ on Web con Haskell
(Common Gateway Interface) es una forma de comunicaci´ on 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´ es de su browser como un archivo HTML est´ atico. Todos los cambios din´ amicos se hacen dentro del ejecutable. Federico Builes Programaci´ on Web con Haskell
librer´ ıa permite acceder a las variables usando los m´ etodos 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 separaci´ on entre los datos que recibe la aplicaci´ on ( a trav´ es de IO()) y el programa en s´ ı. Soporta cookies, headers, ByteStrings, y FastCGI. Federico Builes Programaci´ on Web con Haskell
librer´ ıa permite acceder a las variables usando los m´ etodos 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 separaci´ on entre los datos que recibe la aplicaci´ on ( a trav´ es 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 r´ apida y eficaz. Federico Builes Programaci´ on Web con Haskell
(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 p´ aginas HTML. Federico Builes Programaci´ on Web con Haskell
empezar, la ´ ultima modificaci´ on al proyecto se hizo en mayo 2005. Este proyecto fue empezado por Niklas Broberg como tesis de Maestr´ ıa en Chalmers, as´ ı que toda la documentaci´ on 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 ´ ultimo existe en el c´ odigo de la tesis, no soporta im´ agenes u otro tipo de contenido web. No tiene soporte para m´ etodos POST, sesiones o una documentaci´ on completa. Federico Builes Programaci´ on Web con Haskell
En espa˜ nol, el proyecto no es medianamente ´ util, y sin que nadie lo tome y se encargue de trabajarlo, no lo ser´ a 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
<% 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
Datos La persistencia de los datos es tal vez la parte m´ as 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 librer´ ıa, tiene drivers para MySQL, PostreSQL, SQLite y muchos m´ as. HaskellDB : Librer´ ıa 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
HaXR HaXR HaXR es una librer´ ıa para escribir aplicaciones XML-RPC en Haskell. RPC (Remote Procedure Call) es una tecnolog´ ıa que permite llamar una funci´ on a trav´ es de la red, y usando XML se puede interactuar entre dos espacios de direcciones (memoria) totalmente diferentes. Esto permite la creaci´ on muy f´ acil 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