SlideShare a Scribd company logo
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
Personal context   Manos   Taking a tour: Apachaï   Closing note




Background




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




Background



¤ Doing HTML pages when I was young




 2 / 23
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
Personal context   Manos   Taking a tour: Apachaï   Closing note




Background



¤ Doing HTML pages when I was young

¤ Sprinkled ugly PHP to make it dynamic

¤ <Alarm sound ringing />




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




Background



¤ Doing HTML pages when I was young

¤ Sprinkled ugly PHP to make it dynamic

¤ <Alarm sound ringing />

¤ Moved on to C# / desktop coding




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




Background




                                       Disclaimer




 3 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




But wait, web has gotten better




 4 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




But wait, web has gotten better


¤ HTML 5, is that a title?




 4 / 23
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
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
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
Personal context   Manos   Taking a tour: Apachaï   Closing note




Once upon a time...


                   Someone was wrong on the Internet




 5 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




They created




 6 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




They created




                                                    ASP




 6 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




They created




                                                    ASP


                             (Hint: VBScript as a default language)




 6 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




Hmmm...




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




Tried to fix it



                                            ASP

  <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="true"
                IncludeStyleBlock="false" Orientation="Horizontal">
       <Items>
           <asp:MenuItem NavigateUrl="/Default.aspx" Text="Home" />
           <asp:MenuItem NavigateUrl="/About.aspx" Text="About" />
           <asp:MenuItem NavigateUrl="/Students.aspx" Text="Students">
                 <asp:MenuItem NavigateUrl="/StudentsAdd.aspx" Text="Add Students" />
           </asp:MenuItem>
       </Items>
  </asp:Menu>




 8 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




Hmmm...




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




Truth told


                                      It's apparently better today




 10 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




In real (hacker) life




                                All too bloated



 11 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




What I wanted




12 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




What I wanted


¤ KISS (Keep It Simple Stupid)




 12 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




What I wanted


¤ KISS (Keep It Simple Stupid)

¤ Let me code my way




 12 / 23
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
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
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
Personal context   Manos   Taking a tour: Apachaï   Closing note




But have no fear


                                                 A hero came




13 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




Often pictured as




14 / 23
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
Personal context   Manos   Taking a tour: Apachaï   Closing note




What's Manos in the end




16 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




What's Manos in the end


¤ Standalone HTTP server




16 / 23
Personal context   Manos   Taking a tour: Apachaï   Closing note




What's Manos in the end


¤ Standalone HTTP server

¤ Evented IO




16 / 23
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
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
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
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
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
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
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
Personal context   Manos   Taking a tour: Apachaï   Closing note




What's Apachaï

                     Picture uploading for the rest of us
                                              http://apch.fr




21 / 23
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
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
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
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
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
Personal context   Manos   Taking a tour: Apachaï   Closing note




Future driven processing




22 / 23
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
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

More Related Content

ODP
Search Engine Spiders
PDF
Tips & Tricks to spice up your Android app
PPT
Orbit global indian tour planners
PDF
Xwt, a cross-desktop UI library
PDF
Monomobile
PDF
2024 Trend Updates: What Really Works In SEO & Content Marketing
PDF
Storytelling For The Web: Integrate Storytelling in your Design Process
PDF
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...
Search Engine Spiders
Tips & Tricks to spice up your Android app
Orbit global indian tour planners
Xwt, a cross-desktop UI library
Monomobile
2024 Trend Updates: What Really Works In SEO & Content Marketing
Storytelling For The Web: Integrate Storytelling in your Design Process
Artificial Intelligence, Data and Competition – SCHREPEL – June 2024 OECD dis...

Recently uploaded (20)

PDF
Electronic commerce courselecture one. Pdf
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PPT
Teaching material agriculture food technology
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Spectroscopy.pptx food analysis technology
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Cloud computing and distributed systems.
Electronic commerce courselecture one. Pdf
NewMind AI Weekly Chronicles - August'25-Week II
Assigned Numbers - 2025 - Bluetooth® Document
Reach Out and Touch Someone: Haptics and Empathic Computing
20250228 LYD VKU AI Blended-Learning.pptx
Network Security Unit 5.pdf for BCA BBA.
Teaching material agriculture food technology
Dropbox Q2 2025 Financial Results & Investor Presentation
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Unlocking AI with Model Context Protocol (MCP)
Building Integrated photovoltaic BIPV_UPV.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Machine learning based COVID-19 study performance prediction
Spectroscopy.pptx food analysis technology
sap open course for s4hana steps from ECC to s4
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Cloud computing and distributed systems.

Manos: web apps for the lazy hacker

  • 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
  • 2. Personal context Manos Taking a tour: Apachaï Closing note Background 2 / 23
  • 3. Personal context Manos Taking a tour: Apachaï Closing note Background ¤ Doing HTML pages when I was young 2 / 23
  • 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
  • 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 ¤ <Alarm sound ringing /> 2 / 23
  • 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 ¤ <Alarm sound ringing /> ¤ Moved on to C# / desktop coding 2 / 23
  • 7. Personal context Manos Taking a tour: Apachaï Closing note Background Disclaimer 3 / 23
  • 8. Personal context Manos Taking a tour: Apachaï Closing note But wait, web has gotten better 4 / 23
  • 9. Personal context Manos Taking a tour: Apachaï Closing note But wait, web has gotten better ¤ HTML 5, is that a title? 4 / 23
  • 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
  • 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
  • 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
  • 13. Personal context Manos Taking a tour: Apachaï Closing note Once upon a time... Someone was wrong on the Internet 5 / 23
  • 14. Personal context Manos Taking a tour: Apachaï Closing note They created 6 / 23
  • 15. Personal context Manos Taking a tour: Apachaï Closing note They created ASP 6 / 23
  • 16. Personal context Manos Taking a tour: Apachaï Closing note They created ASP (Hint: VBScript as a default language) 6 / 23
  • 17. Personal context Manos Taking a tour: Apachaï Closing note Hmmm... 7 / 23
  • 18. Personal context Manos Taking a tour: Apachaï Closing note Tried to fix it ASP <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="true" IncludeStyleBlock="false" Orientation="Horizontal"> <Items> <asp:MenuItem NavigateUrl="/Default.aspx" Text="Home" /> <asp:MenuItem NavigateUrl="/About.aspx" Text="About" /> <asp:MenuItem NavigateUrl="/Students.aspx" Text="Students"> <asp:MenuItem NavigateUrl="/StudentsAdd.aspx" Text="Add Students" /> </asp:MenuItem> </Items> </asp:Menu> 8 / 23
  • 19. Personal context Manos Taking a tour: Apachaï Closing note Hmmm... 9 / 23
  • 20. Personal context Manos Taking a tour: Apachaï Closing note Truth told It's apparently better today 10 / 23
  • 21. Personal context Manos Taking a tour: Apachaï Closing note In real (hacker) life All too bloated 11 / 23
  • 22. Personal context Manos Taking a tour: Apachaï Closing note What I wanted 12 / 23
  • 23. Personal context Manos Taking a tour: Apachaï Closing note What I wanted ¤ KISS (Keep It Simple Stupid) 12 / 23
  • 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
  • 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
  • 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
  • 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
  • 28. Personal context Manos Taking a tour: Apachaï Closing note But have no fear A hero came 13 / 23
  • 29. Personal context Manos Taking a tour: Apachaï Closing note Often pictured as 14 / 23
  • 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
  • 31. Personal context Manos Taking a tour: Apachaï Closing note What's Manos in the end 16 / 23
  • 32. Personal context Manos Taking a tour: Apachaï Closing note What's Manos in the end ¤ Standalone HTTP server 16 / 23
  • 33. Personal context Manos Taking a tour: Apachaï Closing note What's Manos in the end ¤ Standalone HTTP server ¤ Evented IO 16 / 23
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 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
  • 47. Personal context Manos Taking a tour: Apachaï Closing note Future driven processing 22 / 23
  • 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
  • 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