manos: web apps for the lazy hacker

Post on 16-May-2015

764 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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. But 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. Forget about MVC, forget about ASP.NET, we are here to bring the fun of hacking into web development.

TRANSCRIPT

ManosWeb 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

� 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

� 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

� 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

� 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

� 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

� 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

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

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

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

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

ASP

(Hint: VBScript as a default language)

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

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

� 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

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

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

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

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

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

� 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

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

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

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

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

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

� 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

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

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

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

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

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

� Apachaï 1.0 released!

� https://github.com/garuma/apachai/tarball/1.0

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

top related