Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Programación Web con Haskell (deprecated)

Programación Web con Haskell (deprecated)

Most if not all of the technologies mentioned here are irrelevant today, please don't pay attention.

febuiles

June 28, 2007
Tweet

More Decks by febuiles

Other Decks in Technology

Transcript

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

    View full-size slide

  2. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    Introducci´
    on
    Motivaci´
    on
    Introducci´
    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

    View full-size slide

  3. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    Introducci´
    on
    Motivaci´
    on
    Introducci´
    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

    View full-size slide

  4. 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

    View full-size slide

  5. 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

    View full-size slide

  6. 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

    View full-size slide

  7. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    Introducci´
    on
    Motivaci´
    on
    ¿Por qu´
    e Haskell?
    Comodidad
    Productividad
    Correctitud
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  8. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    Introducci´
    on
    Motivaci´
    on
    ¿Por 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

    View full-size slide

  9. 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 acad´
    emicos: Software Transactional Memory (STM),
    aplicaciones como servidores web, memoria
    compartida, sistemas de archivos virtuales.
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  10. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    HAppS
    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

    View full-size slide

  11. 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 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

    View full-size slide

  12. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    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´
    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

    View full-size slide

  13. 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

    View full-size slide

  14. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    Network.CGI
    CGI (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

    View full-size slide

  15. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    Network.CGI
    Esta librer´
    ıa permite acceder a las variables usando los

    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

    View full-size slide

  16. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    Network.CGI
    Esta librer´
    ıa permite acceder a las variables usando los

    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

    View full-size slide

  17. 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

    View full-size slide

  18. 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 p´
    aginas
    HTML.
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  19. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    Inconvenientes
    Para 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

    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

    View full-size slide

  20. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    Traducci´
    on
    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

    View full-size slide

  21. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    Ejemplo HSP
    <%
    import System.Time
    %>

    Pagina de Ejemplo

    Esto es HTML comun y corriente, nada magico.

    Son las: <% getClockTime %>


    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  22. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    HAppS
    Network.CGI
    HSP
    Bases de 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

    View full-size slide

  23. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    hPaste
    pass.net
    Hope
    HWS
    Flippi
    HaXR
    ¿D´
    onde se esta usando?
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  24. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    hPaste
    pass.net
    Hope
    HWS
    Flippi
    HaXR
    hPaste
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  25. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    hPaste
    pass.net
    Hope
    HWS
    Flippi
    HaXR
    pass.net
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  26. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    hPaste
    pass.net
    Hope
    HWS
    Flippi
    HaXR
    Hope
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  27. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    hPaste
    pass.net
    Hope
    HWS
    Flippi
    HaXR
    HWS
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  28. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    hPaste
    pass.net
    Hope
    HWS
    Flippi
    HaXR
    Flippi
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  29. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    hPaste
    pass.net
    Hope
    HWS
    Flippi
    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

    View full-size slide

  30. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    ¿D´
    onde est´
    an?
    ¿Qu´
    e hace falta?
    ¿D´
    onde est´
    an?
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide

  31. Introducci´
    on
    Acercamientos
    Ejemplo
    Conclusiones
    ¿D´
    onde est´
    an?
    ¿Qu´
    e hace falta?
    ¿Qu´
    e hace falta?
    Federico Builes Programaci´
    on Web con Haskell

    View full-size slide