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

Manos: web apps for the lazy hacker

Manos: web apps for the lazy hacker

Web development is a world of its own and the old-school hacker within us tends to be mystified by all these Macbook people talking about weird stuff like Rails, RESTful or NodeJS.\r\n\r\nBut have no worries, this talk is for you (who always thought web development wasn't your cup of tea) and it will walk you through the steps of building a web application using Manos, the easy to use, high performance web application framework that stays out of your way and makes your life ridiculously simple.\r\n\r\nForget about MVC, forget about ASP.NET, we are here to bring the fun of hacking into web development.

Jérémie Laval

May 24, 2011
Tweet

More Decks by Jérémie Laval

Other Decks in Technology

Transcript

  1. Manos
    Web apps for the lazy hacker
    Jérémie Laval
    http://blog.neteril.org
    http://twitter.com/jeremie_laval
    IRC garuma on #manos @ GIMPNet.org

    View Slide

  2. Personal context Manos Taking a tour: Apachaï Closing note
    Background
    2 / 23

    View Slide

  3. Personal context Manos Taking a tour: Apachaï Closing note
    Background
    ¤ Doing HTML pages when I was young
    2 / 23

    View Slide

  4. Personal context Manos Taking a tour: Apachaï Closing note
    Background
    ¤ Doing HTML pages when I was young
    ¤ Sprinkled ugly PHP to make it dynamic
    2 / 23

    View Slide

  5. Personal context Manos Taking a tour: Apachaï Closing note
    Background
    ¤ Doing HTML pages when I was young
    ¤ Sprinkled ugly PHP to make it dynamic
    ¤
    2 / 23

    View Slide

  6. Personal context Manos Taking a tour: Apachaï Closing note
    Background
    ¤ Doing HTML pages when I was young
    ¤ Sprinkled ugly PHP to make it dynamic
    ¤
    ¤ Moved on to C# / desktop coding
    2 / 23

    View Slide

  7. Personal context Manos Taking a tour: Apachaï Closing note
    Background
    Disclaimer
    3 / 23

    View Slide

  8. Personal context Manos Taking a tour: Apachaï Closing note
    But wait, web has gotten better
    4 / 23

    View Slide

  9. Personal context Manos Taking a tour: Apachaï Closing note
    But wait, web has gotten better
    ¤ HTML 5, is that a title?
    4 / 23

    View Slide

  10. Personal context Manos Taking a tour: Apachaï Closing note
    But wait, web has gotten better
    ¤ HTML 5, is that a title?
    ¤ CSS 3, non-designer best friend
    4 / 23

    View Slide

  11. Personal context Manos Taking a tour: Apachaï Closing note
    But wait, web has gotten better
    ¤ HTML 5, is that a title?
    ¤ CSS 3, non-designer best friend
    ¤ Javascript, more than animated cursor
    4 / 23

    View Slide

  12. Personal context Manos Taking a tour: Apachaï Closing note
    But wait, web has gotten better
    ¤ HTML 5, is that a title?
    ¤ CSS 3, non-designer best friend
    ¤ Javascript, more than animated cursor
    What about .NET web application frameworks?
    4 / 23

    View Slide

  13. Personal context Manos Taking a tour: Apachaï Closing note
    Once upon a time...
    Someone was wrong on the Internet
    5 / 23

    View Slide

  14. Personal context Manos Taking a tour: Apachaï Closing note
    They created
    6 / 23

    View Slide

  15. Personal context Manos Taking a tour: Apachaï Closing note
    They created
    ASP
    6 / 23

    View Slide

  16. Personal context Manos Taking a tour: Apachaï Closing note
    They created
    ASP
    (Hint: VBScript as a default language)
    6 / 23

    View Slide

  17. Personal context Manos Taking a tour: Apachaï Closing note
    Hmmm...
    7 / 23

    View Slide

  18. Personal context Manos Taking a tour: Apachaï Closing note
    Tried to fix it
    ASP
    IncludeStyleBlock="false" Orientation="Horizontal">








    8 / 23

    View Slide

  19. Personal context Manos Taking a tour: Apachaï Closing note
    Hmmm...
    9 / 23

    View Slide

  20. Personal context Manos Taking a tour: Apachaï Closing note
    Truth told
    It's apparently better today
    10 / 23

    View Slide

  21. Personal context Manos Taking a tour: Apachaï Closing note
    In real (hacker) life
    All too bloated
    11 / 23

    View Slide

  22. Personal context Manos Taking a tour: Apachaï Closing note
    What I wanted
    12 / 23

    View Slide

  23. Personal context Manos Taking a tour: Apachaï Closing note
    What I wanted
    ¤ KISS (Keep It Simple Stupid)
    12 / 23

    View Slide

  24. Personal context Manos Taking a tour: Apachaï Closing note
    What I wanted
    ¤ KISS (Keep It Simple Stupid)
    ¤ Let me code my way
    12 / 23

    View Slide

  25. Personal context Manos Taking a tour: Apachaï Closing note
    What I wanted
    ¤ KISS (Keep It Simple Stupid)
    ¤ Let me code my way
    ¤ Integrate with existing stuff
    12 / 23

    View Slide

  26. Personal context Manos Taking a tour: Apachaï Closing note
    What I wanted
    ¤ KISS (Keep It Simple Stupid)
    ¤ Let me code my way
    ¤ Integrate with existing stuff
    What I really need is a lib that talks HTTP
    12 / 23

    View Slide

  27. Personal context Manos Taking a tour: Apachaï Closing note
    What I wanted
    ¤ KISS (Keep It Simple Stupid)
    ¤ Let me code my way
    ¤ Integrate with existing stuff
    What I really need is a lib that talks HTTP
    But a bit more sophisticated than HttpListener
    12 / 23

    View Slide

  28. Personal context Manos Taking a tour: Apachaï Closing note
    But have no fear
    A hero came
    13 / 23

    View Slide

  29. Personal context Manos Taking a tour: Apachaï Closing note
    Often pictured as
    14 / 23

    View Slide

  30. Personal context Manos Taking a tour: Apachaï Closing note
    But for real
    ( Jackson Harper, Manos creator and cartel manager during his free time
    )
    15 / 23

    View Slide

  31. Personal context Manos Taking a tour: Apachaï Closing note
    What's Manos in the end
    16 / 23

    View Slide

  32. Personal context Manos Taking a tour: Apachaï Closing note
    What's Manos in the end
    ¤ Standalone HTTP server
    16 / 23

    View Slide

  33. Personal context Manos Taking a tour: Apachaï Closing note
    What's Manos in the end
    ¤ Standalone HTTP server
    ¤ Evented IO
    16 / 23

    View Slide

  34. Personal context Manos Taking a tour: Apachaï Closing note
    What's Manos in the end
    ¤ Standalone HTTP server
    ¤ Evented IO
    ¤ Parse and produce plain old HTTP
    16 / 23

    View Slide

  35. Personal context Manos Taking a tour: Apachaï Closing note
    What's Manos in the end
    ¤ Standalone HTTP server
    ¤ Evented IO
    ¤ Parse and produce plain old HTTP
    ¤ Not tied to any content/template framework
    16 / 23

    View Slide

  36. Personal context Manos Taking a tour: Apachaï Closing note
    What's Manos in the end
    ¤ Standalone HTTP server
    ¤ Evented IO
    ¤ Parse and produce plain old HTTP
    ¤ Not tied to any content/template framework
    ¤ Code just with C# and a couple of attributes
    16 / 23

    View Slide

  37. Personal context Manos Taking a tour: Apachaï Closing note
    Bootstraping
    How it all begun
    $ manos -i apachai
    initing: apachai
    $ manos -b
    COMPILING SOLUTION: '0' '/home/jeremie/mono/manostest/apachai'
    /usr/local/lib/manos/Manos.dll
    $ cd apachai
    $ manos -s
    Running apachai.apachai on port 8080.
    17 / 23

    View Slide

  38. Personal context Manos Taking a tour: Apachaï Closing note
    Setting up handlers
    Simply getting a root page
    [Route ("/")]
    public void Index (IManosContext ctx)
    {
    Log.Info ("Woohoo, someone visited our website");
    ctx.Response.SendFile (Path.Combine ("Templates", "base.html"));
    ctx.Response.End ();
    }
    18 / 23

    View Slide

  39. Personal context Manos Taking a tour: Apachaï Closing note
    Setting up handlers
    Route handling delegated to external modules
    public Apachai ()
    {
    Route ("/Content/", (staticContent = new StaticContentModule ("Content")));
    Route ("/Pictures/", new PictureContentModule ());
    AddPipe (new Manos.Util.AccessLogger ("access.log"));
    }
    19 / 23

    View Slide

  40. Personal context Manos Taking a tour: Apachaï Closing note
    Giving back JSON
    Nothing special really
    [Route ("/visits")]
    public void Visits (IManosContext ctx)
    {
    var cookie = ctx.Request.Cookies.Get ("foobar-apachai");
    if (string.IsNullOrEmpty (cookie)) {
    ctx.Response.StatusCode = 404;
    ctx.Response.End ();
    } else {
    var counter = visits[cookie];
    ctx.Response.End (string.Format ("{{ \"count\" : {0} }}", counter));
    }
    }
    20 / 23

    View Slide

  41. Personal context Manos Taking a tour: Apachaï Closing note
    What's Apachaï
    Picture uploading for the rest of us
    http://apch.fr
    21 / 23

    View Slide

  42. Personal context Manos Taking a tour: Apachaï Closing note
    What's Apachaï
    Picture uploading for the rest of us
    http://apch.fr
    ¤ Leverage TrollStation (Twitter) and Pinta (Effects)
    21 / 23

    View Slide

  43. Personal context Manos Taking a tour: Apachaï Closing note
    What's Apachaï
    Picture uploading for the rest of us
    http://apch.fr
    ¤ Leverage TrollStation (Twitter) and Pinta (Effects)
    ¤ TagLib# for metadata handling
    21 / 23

    View Slide

  44. Personal context Manos Taking a tour: Apachaï Closing note
    What's Apachaï
    Picture uploading for the rest of us
    http://apch.fr
    ¤ Leverage TrollStation (Twitter) and Pinta (Effects)
    ¤ TagLib# for metadata handling
    ¤ JSON and AJAX driven
    21 / 23

    View Slide

  45. Personal context Manos Taking a tour: Apachaï Closing note
    What's Apachaï
    Picture uploading for the rest of us
    http://apch.fr
    ¤ Leverage TrollStation (Twitter) and Pinta (Effects)
    ¤ TagLib# for metadata handling
    ¤ JSON and AJAX driven
    ¤ Redis backed
    21 / 23

    View Slide

  46. Personal context Manos Taking a tour: Apachaï Closing note
    What's Apachaï
    Picture uploading for the rest of us
    http://apch.fr
    ¤ Leverage TrollStation (Twitter) and Pinta (Effects)
    ¤ TagLib# for metadata handling
    ¤ JSON and AJAX driven
    ¤ Redis backed
    ¤ https://github.com/garuma/apachai
    21 / 23

    View Slide

  47. Personal context Manos Taking a tour: Apachaï Closing note
    Future driven processing
    22 / 23

    View Slide

  48. Personal context Manos Taking a tour: Apachaï Closing note
    Releasing season
    ¤ Manos 0.1.2 released!
    £ https://github.com/jacksonh/manos/tarball/v0.1.2
    23 / 23

    View Slide

  49. Personal context Manos Taking a tour: Apachaï Closing note
    Releasing season
    ¤ Manos 0.1.2 released!
    £ https://github.com/jacksonh/manos/tarball/v0.1.2
    ¤ Apachaï 1.0 released!
    £ https://github.com/garuma/apachai/tarball/1.0
    23 / 23

    View Slide