Re: [Mongrel] [ANN] Ebb Web Server

2008-01-22 Thread Andrew Stewart

On 21 Jan 2008, at 22:11, ry dahl wrote:
 G, you need a Y axis Ry.  What is that measuring.  Hell, shoot me
 the raw data and I'll do the graph with R (since I'm curious).

 The vertical axis is requests/sec (says at the top of the graph). I
 don't bother to give actual numbers because it's only to demonstrate
 the relative increase in speed. You can generate your own data with
 the script in ruby_bridge/benchmark/test_camping.rb

I see what you're saying but unfortunately without numbers on the  
ordinate -- specifically without knowing where zero is -- it's  
impossible to evaluate even the relative differences.

Anyway, I'll have a go and generating my own data with that script.   
Thanks.

Regards,
Andy Stewart

---
http://airbladesoftware.com



___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-22 Thread ry dahl
 I see what you're saying but unfortunately without numbers on the
 ordinate -- specifically without knowing where zero is -- it's
 impossible to evaluate even the relative differences.

Oh yeah, sorry, zero is at the the bottom. yes, the graph could be
clearer.. below is my data - each line is an average of multiple runs
of ab with -n 1000.
(in truth, i avoid exposing my numbers because i'm a bit embarrassed
of my ancient computer. i think if you run them on a modern computer,
these numbers will be in the thousands.)

ebb -c 1 = 113.5025
ebb -c 10 = 93.956
ebb -c 19 = 101.156
ebb -c 28 = 110.335
ebb -c 37 = 119.89
ebb -c 46 = 93.464
ebb -c 55 = 87.46
ebb -c 64 = 93.116
ebb -c 73 = 94.01
ebb -c 82 = 80.85667
ebb -c 91 = 92.064
ebb -c 100 = 98.666
evented mongrel -c 1 = 80.586
evented mongrel -c 10 = 82.418
evented mongrel -c 19 = 76.1075
evented mongrel -c 28 = 82.07667
evented mongrel -c 37 = 88.45
evented mongrel -c 46 = 69.486
evented mongrel -c 55 = 72.81
evented mongrel -c 64 = 67.07
evented mongrel -c 73 = 67.35667
evented mongrel -c 82 = 65.74
evented mongrel -c 91 = 65.666
evented mongrel -c 100 = 64.388
thin -c 1 = 92.1575
thin -c 10 = 74.284
thin -c 19 = 76.8
thin -c 28 = 91.85
thin -c 37 = 91.55
thin -c 46 = 74.802
thin -c 55 = 74.9
thin -c 64 = 69.886
thin -c 73 = 70.29333
thin -c 82 = 63.69333
thin -c 91 = 70.206
thin -c 100 = 70.262


ry
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-22 Thread Luis Lavena
On Jan 22, 2008 1:00 PM, ry dahl [EMAIL PROTECTED] wrote:
  I see what you're saying but unfortunately without numbers on the
  ordinate -- specifically without knowing where zero is -- it's
  impossible to evaluate even the relative differences.

 Oh yeah, sorry, zero is at the the bottom. yes, the graph could be
 clearer.. below is my data - each line is an average of multiple runs
 of ab with -n 1000.

Great data Ry, thanks for it.

For sake of completeness, can you compare it with plain mongrel?

 (in truth, i avoid exposing my numbers because i'm a bit embarrassed
 of my ancient computer. i think if you run them on a modern computer,
 these numbers will be in the thousands.)


You shouldn't!

I was doing the first test compatibility for mongrel back in 2006 from
a P3 800Mhz 512MB RAM computer!

Not mention that first version of mongrel_service was created on that computer!

So: don't be hard on you ;-)

-- 
Luis Lavena
Multimedia systems
-
A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-22 Thread ry dahl
 For sake of completeness, can you compare it with plain mongrel?

Yes, i'll do that in future benchmarks. The monkey patching that
swiftiply does makes it not so easy to run regular mongrel and evented
mongrel from the same script.

Speaking of future benchmarks, I will not make announcements to
mongrel-users about Ebb anymore. Instead I will post on my livejournal
under the tag 'ebb'
  http://four.livejournal.com/tag/ebb
If you would like to exclude my other livejournal dribble and only get
Ebb updates, use this feed:
  http://max.kanat.us/tag-syndicate/?user=fourtag=ebb
The git repo itself also has a feed, which I will try to make interesting
  http://repo.or.cz/w/ebb.git?a=rss

 I was doing the first test compatibility for mongrel back in 2006 from
 a P3 800Mhz 512MB RAM computer!

but that's what i'm running now (eep!)

ry
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread ry dahl
Hey All,

Just one more quick message to entice contributors to take a look at
Ebb. I was able to run some preliminary benchmarks for the first time
today against evented Mongrel and Thin. They're all running a small
Camping application through Rack.

http://s3.amazonaws.com/four.livejournal/20080121/ebb.png

The code for that benchmark (and chart generation) can be found in the Ebb repo:
http://repo.or.cz/w/ebb.git?a=commit;h=c2fecde0a04603727949ec0b05d694be89a464d2

ry

On Jan 14, 2008 5:43 PM, ry dahl [EMAIL PROTECTED] wrote:
 Hello Mongrel Users,

 I'm writing a web server called Ebb. It's written in C, makes use of
 the Mongrel HTTP parser, and uses libev its event loop. The goal is to
 be small, fast, and language independent server that can host web
 frameworks. I have written a small Ruby binding which provides a Rack
 handler - this will allow Ebb to host Rails, Merb, and other Ruby
 frameworks. In the future I will write a Python WSGI binding.

 The design is similar to the evented Mongrel web server. Connections
 are processed as follows:

 1. libev loops and waits for incoming connections.
 2. When Ebb can read from a client socket, it passes the buffer into the
mongrel state machine which parses the headers into name value pairs.
 3. Ebb starts a new thread and passes the request information and peer socket
to a user supplied callback. The thread lasts only for the length of that
callback.
 4. The included Ruby binding, supplying this callback transforms the request
into a Rack compatible env variable and passes it on a Rack adapter.

 The code measures in at less than 1000 lines of C code.

 There is much work to do; it is not ready for use. I am soliciting
 help from the community for testing and development. You may browse
 the git repository at http://repo.or.cz/w/ebb.git or check out the
 code with this command:
 git clone git://repo.or.cz/ebb.git
 I release Ebb under the MIT license.
 It is very fun to program Ebb so I suggest you do too :)


 Ry Dahl

___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Luis Lavena
On Jan 21, 2008 6:34 PM, ry dahl [EMAIL PROTECTED] wrote:
 Hey All,

 Just one more quick message to entice contributors to take a look at
 Ebb. I was able to run some preliminary benchmarks for the first time
 today against evented Mongrel and Thin. They're all running a small
 Camping application through Rack.

 http://s3.amazonaws.com/four.livejournal/20080121/ebb.png


Hey ry, did you tweaked the HttpParser like Thin guy did?

I was thinking about the modifications he did:

He removed all the if conditions evaluating http_field,
request_method, request_uri and others (most the ones that are
allocated/initialized in HttpParser_alloc).

But since I couldn't find time to ask it in a separate mail, is time
that boost the question using your thread ;-)

 The code for that benchmark (and chart generation) can be found in the Ebb 
 repo:
 http://repo.or.cz/w/ebb.git?a=commit;h=c2fecde0a04603727949ec0b05d694be89a464d2

svn mirror is coming, right? :-D

-- 
Luis Lavena
Multimedia systems
-
A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Kevin Williams
On Jan 21, 2008 1:55 PM, Luis Lavena [EMAIL PROTECTED] wrote:
 Hey ry, did you tweaked the HttpParser like Thin guy did?

 I was thinking about the modifications he did:

 He removed all the if conditions evaluating http_field,
 request_method, request_uri and others (most the ones that are
 allocated/initialized in HttpParser_alloc).

I don't think those conditions were *removed*, I think they were
*moved*, but I've only glanced at the C code and would barely know
what I was looking at anyway. :)


-- 
Cheers,

Kevin Williams
http://www.bantamtech.com/
http://www.almostserio.us/
http://kevwil.com/
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Luis Lavena
On Jan 21, 2008 7:00 PM, Kevin Williams [EMAIL PROTECTED] wrote:
 On Jan 21, 2008 1:55 PM, Luis Lavena [EMAIL PROTECTED] wrote:
  Hey ry, did you tweaked the HttpParser like Thin guy did?
 
  I was thinking about the modifications he did:
 
  He removed all the if conditions evaluating http_field,
  request_method, request_uri and others (most the ones that are
  allocated/initialized in HttpParser_alloc).

 I don't think those conditions were *removed*, I think they were
 *moved*, but I've only glanced at the C code and would barely know
 what I was looking at anyway. :)

No, he removed them:

http://pastie.caboo.se/141633

The ragel code will generate the http11_parser.c file, and http11.c
file defines all the functions pointers:

http11.c:207..225:

VALUE HttpParser_alloc(VALUE klass)
{
  VALUE obj;
  http_parser *hp = ALLOC_N(http_parser, 1);
  TRACE();
  hp-http_field = http_field;
  hp-request_method = request_method;
  hp-request_uri = request_uri;
  hp-fragment = fragment;
  hp-request_path = request_path;
  hp-query_string = query_string;
  hp-http_version = http_version;
  hp-header_done = header_done;
  http_parser_init(hp);

  obj = Data_Wrap_Struct(klass, NULL, HttpParser_free, hp);

  return obj;
}

Theory indicates that allocation happens way before the ragel code is
getting executed, so there is no need to evaluate the conditions all
the time, ending with a speed boost.

-- 
Luis Lavena
Multimedia systems
-
A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Marc-André Cournoyer
yes I removed those conditions and looks like Ry did the same (by  
looking quickly at his code).

On 21-Jan-08, at 4:12 PM, Luis Lavena wrote:

 On Jan 21, 2008 7:00 PM, Kevin Williams [EMAIL PROTECTED] wrote:
 On Jan 21, 2008 1:55 PM, Luis Lavena [EMAIL PROTECTED] wrote:
 Hey ry, did you tweaked the HttpParser like Thin guy did?

 I was thinking about the modifications he did:

 He removed all the if conditions evaluating http_field,
 request_method, request_uri and others (most the ones that are
 allocated/initialized in HttpParser_alloc).

 I don't think those conditions were *removed*, I think they were
 *moved*, but I've only glanced at the C code and would barely know
 what I was looking at anyway. :)

 No, he removed them:

 http://pastie.caboo.se/141633

 The ragel code will generate the http11_parser.c file, and http11.c
 file defines all the functions pointers:

 http11.c:207..225:

 VALUE HttpParser_alloc(VALUE klass)
 {
  VALUE obj;
  http_parser *hp = ALLOC_N(http_parser, 1);
  TRACE();
  hp-http_field = http_field;
  hp-request_method = request_method;
  hp-request_uri = request_uri;
  hp-fragment = fragment;
  hp-request_path = request_path;
  hp-query_string = query_string;
  hp-http_version = http_version;
  hp-header_done = header_done;
  http_parser_init(hp);

  obj = Data_Wrap_Struct(klass, NULL, HttpParser_free, hp);

  return obj;
 }

 Theory indicates that allocation happens way before the ragel code is
 getting executed, so there is no need to evaluate the conditions all
 the time, ending with a speed boost.

 -- 
 Luis Lavena
 Multimedia systems
 -
 A common mistake that people make when trying to design
 something completely foolproof is to underestimate
 the ingenuity of complete fools.
 Douglas Adams
 ___
 Mongrel-users mailing list
 Mongrel-users@rubyforge.org
 http://rubyforge.org/mailman/listinfo/mongrel-users

___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread ry dahl
 svn mirror is coming, right? :-D

Hi Luis,

I'll put it on github when they open (or another service?) Apparently
their svn bridge isn't fully functional yet.

ry
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Luis Lavena
On Jan 21, 2008 7:46 PM, ry dahl [EMAIL PROTECTED] wrote:
  svn mirror is coming, right? :-D

 Hi Luis,

 I'll put it on github when they open (or another service?) Apparently
 their svn bridge isn't fully functional yet.

What you can do is ask for a rubyforge project and use the svn
available there as mirror.

I'm still waiting to get bzr-git with write support so I can use
bazaar all the way :-)

-- 
Luis Lavena
Multimedia systems
-
A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Zed A. Shaw
On Mon, 21 Jan 2008 21:34:22 +0100
ry dahl [EMAIL PROTECTED] wrote:

 Hey All,
 
 Just one more quick message to entice contributors to take a look at
 Ebb. I was able to run some preliminary benchmarks for the first time
 today against evented Mongrel and Thin. They're all running a small
 Camping application through Rack.
 
 http://s3.amazonaws.com/four.livejournal/20080121/ebb.png
 
 The code for that benchmark (and chart generation) can be found in the Ebb 
 repo:
 http://repo.or.cz/w/ebb.git?a=commit;h=c2fecde0a04603727949ec0b05d694be89a464d2

G, you need a Y axis Ry.  What is that measuring.  Hell, shoot me
the raw data and I'll do the graph with R (since I'm curious).

-- 
Zed A. Shaw
- Hate: http://savingtheinternetwithhate.com/
- Good: http://www.zedshaw.com/
- Evil: http://yearofevil.com/
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Zed A. Shaw
On Mon, 21 Jan 2008 19:12:06 -0200
Luis Lavena [EMAIL PROTECTED] wrote:

 No, he removed them:
 
 http://pastie.caboo.se/141633
 
 The ragel code will generate the http11_parser.c file, and http11.c
 file defines all the functions pointers:
snip 
 Theory indicates that allocation happens way before the ragel code is
 getting executed, so there is no need to evaluate the conditions all
 the time, ending with a speed boost.

That's bullshit.  All of those tests are simple checks to make sure
that you aren't passing in NULL pointers (which happens when the lib is
used generally).  Removing those would be a tiny little impact on the
performance since they're written in raw C.  Only reason that'd speed
things up is if the compiler wasn't doing its job right (which is
possible).

It's also a performance *loss* in that a user of the library has to set
all callbacks always (or get a crash) and then every function is called
even if a user of the lib only cares about a particular piece.

Also, what's happened is now the safety checks against invalid input
are gone too.  Any of those actions could fire in the parser section
and if those variables are not set then the whole program will eat it
bad.

That's a very bad design change, and now I wish I'd gone to the dude's
demonstration so I could tell him.

If someone wanted to optimize this just for the case where every
function is used and always set, but not lose safety then they should
change the constructor to the library to require those functions always
be set.  Then you could remove the if-statements.

-- 
Zed A. Shaw
- Hate: http://savingtheinternetwithhate.com/
- Good: http://www.zedshaw.com/
- Evil: http://yearofevil.com/
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Luis Lavena
On Jan 21, 2008 8:06 PM, Zed A. Shaw [EMAIL PROTECTED] wrote:
 On Mon, 21 Jan 2008 19:12:06 -0200
 Luis Lavena [EMAIL PROTECTED] wrote:

  No, he removed them:
 
  http://pastie.caboo.se/141633
 
  The ragel code will generate the http11_parser.c file, and http11.c
  file defines all the functions pointers:
 snip
  Theory indicates that allocation happens way before the ragel code is
  getting executed, so there is no need to evaluate the conditions all
  the time, ending with a speed boost.

 That's bullshit.  All of those tests are simple checks to make sure
 that you aren't passing in NULL pointers (which happens when the lib is
 used generally).  Removing those would be a tiny little impact on the
 performance since they're written in raw C.  Only reason that'd speed
 things up is if the compiler wasn't doing its job right (which is
 possible).


Please Zed, I'm not validating nor arguing against that decision. I
just exposing that, the way I asked on #thin irc channel too a few
weeks back.

 It's also a performance *loss* in that a user of the library has to set
 all callbacks always (or get a crash) and then every function is called
 even if a user of the lib only cares about a particular piece.


That's why I was wondering, but still couldn't run my own series of
tests to see how that change impact on overall performance.

 Also, what's happened is now the safety checks against invalid input
 are gone too.  Any of those actions could fire in the parser section
 and if those variables are not set then the whole program will eat it
 bad.

 That's a very bad design change, and now I wish I'd gone to the dude's
 demonstration so I could tell him.

 If someone wanted to optimize this just for the case where every
 function is used and always set, but not lose safety then they should
 change the constructor to the library to require those functions always
 be set.  Then you could remove the if-statements.


Good point. Still, prove of performance improvement must me shown, but
there also corner cases that exposes situations like you mention.

Again: I'm just exposing the situation, that's why the in theory...
I'm not validating anything :-)

-- 
Luis Lavena
Multimedia systems
-
A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread ry dahl
 G, you need a Y axis Ry.  What is that measuring.  Hell, shoot me
 the raw data and I'll do the graph with R (since I'm curious).

The vertical axis is requests/sec (says at the top of the graph). I
don't bother to give actual numbers because it's only to demonstrate
the relative increase in speed. You can generate your own data with
the script in ruby_bridge/benchmark/test_camping.rb

ry
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Marc-André Cournoyer
thx for the pointer, I'll change the constructor then

On 21-Jan-08, at 5:06 PM, Zed A. Shaw wrote:

 On Mon, 21 Jan 2008 19:12:06 -0200
 Luis Lavena [EMAIL PROTECTED] wrote:

 No, he removed them:

 http://pastie.caboo.se/141633

 The ragel code will generate the http11_parser.c file, and http11.c
 file defines all the functions pointers:
 snip
 Theory indicates that allocation happens way before the ragel code is
 getting executed, so there is no need to evaluate the conditions all
 the time, ending with a speed boost.

 That's bullshit.  All of those tests are simple checks to make sure
 that you aren't passing in NULL pointers (which happens when the lib  
 is
 used generally).  Removing those would be a tiny little impact on the
 performance since they're written in raw C.  Only reason that'd speed
 things up is if the compiler wasn't doing its job right (which is
 possible).

 It's also a performance *loss* in that a user of the library has to  
 set
 all callbacks always (or get a crash) and then every function is  
 called
 even if a user of the lib only cares about a particular piece.

 Also, what's happened is now the safety checks against invalid input
 are gone too.  Any of those actions could fire in the parser section
 and if those variables are not set then the whole program will eat it
 bad.

 That's a very bad design change, and now I wish I'd gone to the dude's
 demonstration so I could tell him.

 If someone wanted to optimize this just for the case where every
 function is used and always set, but not lose safety then they should
 change the constructor to the library to require those functions  
 always
 be set.  Then you could remove the if-statements.

 -- 
 Zed A. Shaw
 - Hate: http://savingtheinternetwithhate.com/
 - Good: http://www.zedshaw.com/
 - Evil: http://yearofevil.com/
 ___
 Mongrel-users mailing list
 Mongrel-users@rubyforge.org
 http://rubyforge.org/mailman/listinfo/mongrel-users

___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Zed A. Shaw
On Mon, 21 Jan 2008 20:08:46 -0200
Luis Lavena [EMAIL PROTECTED] wrote:

  That's bullshit.  All of those tests are simple checks to make sure
  that you aren't passing in NULL pointers (which happens when the lib is
  used generally).  Removing those would be a tiny little impact on the
  performance since they're written in raw C.  Only reason that'd speed
  things up is if the compiler wasn't doing its job right (which is
  possible).
 
 
 Please Zed, I'm not validating nor arguing against that decision. I
 just exposing that, the way I asked on #thin irc channel too a few
 weeks back.

Sorry Luis, but I didn't say Luis, you're a bullshitter.  I said,
That's bullshit.  Meaning, the claim of a large performance increase
from just removing a series of if-statements isn't worth the loss in
security and safety.

You should know by now that if I *really* wanted to be mean to you I'd
say it directly to you.  I'm talking about the code, nobody directly or
their personalities.

-- 
Zed A. Shaw
- Hate: http://savingtheinternetwithhate.com/
- Good: http://www.zedshaw.com/
- Evil: http://yearofevil.com/
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-21 Thread Luis Lavena
On Jan 21, 2008 11:53 PM, Zed A. Shaw [EMAIL PROTECTED] wrote:
 On Mon, 21 Jan 2008 20:08:46 -0200
 Luis Lavena [EMAIL PROTECTED] wrote:

   That's bullshit.  All of those tests are simple checks to make sure
   that you aren't passing in NULL pointers (which happens when the lib is
   used generally).  Removing those would be a tiny little impact on the
   performance since they're written in raw C.  Only reason that'd speed
   things up is if the compiler wasn't doing its job right (which is
   possible).
  
 
  Please Zed, I'm not validating nor arguing against that decision. I
  just exposing that, the way I asked on #thin irc channel too a few
  weeks back.

 Sorry Luis, but I didn't say Luis, you're a bullshitter.  I said,
 That's bullshit.  Meaning, the claim of a large performance increase
 from just removing a series of if-statements isn't worth the loss in
 security and safety.


I know Zed, Monday was not a good day :-P
(so no personal offense, just bad wording from my side).

I was thinking sending an email with this thing I discovered on thin
code, but found the opportunity to ask here (on ry thread instead).

Don't you hate when you don't have enough time to do all the things you love?

 You should know by now that if I *really* wanted to be mean to you I'd
 say it directly to you.  I'm talking about the code, nobody directly or
 their personalities.

Yes Zed, thankfuly you wouldn't, right? :-D

I'm such a nice, lovely person, you couldn't be mean to me ;-)

Take care man,

-- 
Luis Lavena
Multimedia systems
-
A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-18 Thread Wayne E. Seguin
On Jan 14, 2008 11:43 AM, ry dahl [EMAIL PROTECTED] wrote:

 Hello Mongrel Users,

 I'm writing a web server called Ebb. It's written in C, makes use of
 the Mongrel HTTP parser, and uses libev its event loop. The goal is to
 be small, fast, and language independent server that can host web
 frameworks. I have written a small Ruby binding which provides a Rack
 handler - this will allow Ebb to host Rails, Merb, and other Ruby
 frameworks. In the future I will write a Python WSGI binding.

 The design is similar to the evented Mongrel web server. Connections
 are processed as follows:

 1. libev loops and waits for incoming connections.
 2. When Ebb can read from a client socket, it passes the buffer into the
   mongrel state machine which parses the headers into name value pairs.
 3. Ebb starts a new thread and passes the request information and peer
 socket
   to a user supplied callback. The thread lasts only for the length of
 that
   callback.
 4. The included Ruby binding, supplying this callback transforms the
 request
   into a Rack compatible env variable and passes it on a Rack adapter.

 The code measures in at less than 1000 lines of C code.

 There is much work to do; it is not ready for use. I am soliciting
 help from the community for testing and development. You may browse
 the git repository at http://repo.or.cz/w/ebb.git or check out the
 code with this command:
 git clone git://repo.or.cz/ebb.git
 I release Ebb under the MIT license.
 It is very fun to program Ebb so I suggest you do too :)


 Ry Dahl

Ry,

Awesome, great idea!

I will definitely be checking this out hopefully this weekend

  ~Wayne
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users

Re: [Mongrel] [ANN] Ebb Web Server

2008-01-16 Thread Brett Eisenberg
Ezra,

libev will be in MacPorts later tonight or tomorrow, and with glib2
installed, Ebb builds cleanly on Leopard.

best,
Brett

Ezra Zygmuntowicz wrote:
 On Jan 14, 2008, at 8:43 AM, ry dahl wrote:

 Hey Ry-
 
   Is glib-2.0 a dependency? It seems like 2.0 is an old version of
 glib. So ebb doesn't compile on leopard out of the box. What do I need
 to install to make it work?
 
 snip
 
 Thanks
 
 
 - Ezra Zygmuntowicz
 -- Founder  Software Architect
 -- [EMAIL PROTECTED]
 -- EngineYard.com
-- 
Posted via http://www.ruby-forum.com/.
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-14 Thread Luis Lavena
On Jan 14, 2008 2:43 PM, ry dahl [EMAIL PROTECTED] wrote:
 Hello Mongrel Users,

 I'm writing a web server called Ebb. It's written in C, makes use of
 the Mongrel HTTP parser, and uses libev its event loop. The goal is to
 be small, fast, and language independent server that can host web
 frameworks. I have written a small Ruby binding which provides a Rack
 handler - this will allow Ebb to host Rails, Merb, and other Ruby
 frameworks. In the future I will write a Python WSGI binding.


Nice ry!


 There is much work to do; it is not ready for use. I am soliciting
 help from the community for testing and development. You may browse
 the git repository at http://repo.or.cz/w/ebb.git or check out the
 code with this command:
 git clone git://repo.or.cz/ebb.git
 I release Ebb under the MIT license.
 It is very fun to program Ebb so I suggest you do too :)


A svn repo clone? (git-svn)? Not all jumped into the git bandwagon :-)

-- 
Luis Lavena
Multimedia systems
-
A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-14 Thread Ersin Er
Good luck with your new server! I also suggest looking at Thin which
has been developed very recently and seems quite promising:

http://code.macournoyer.com/thin/

According to the benchmarks it's the fastest Ruby web server currently.

On Jan 14, 2008 6:43 PM, ry dahl [EMAIL PROTECTED] wrote:
 Hello Mongrel Users,

 I'm writing a web server called Ebb. It's written in C, makes use of
 the Mongrel HTTP parser, and uses libev its event loop. The goal is to
 be small, fast, and language independent server that can host web
 frameworks. I have written a small Ruby binding which provides a Rack
 handler - this will allow Ebb to host Rails, Merb, and other Ruby
 frameworks. In the future I will write a Python WSGI binding.

 The design is similar to the evented Mongrel web server. Connections
 are processed as follows:

 1. libev loops and waits for incoming connections.
 2. When Ebb can read from a client socket, it passes the buffer into the
mongrel state machine which parses the headers into name value pairs.
 3. Ebb starts a new thread and passes the request information and peer socket
to a user supplied callback. The thread lasts only for the length of that
callback.
 4. The included Ruby binding, supplying this callback transforms the request
into a Rack compatible env variable and passes it on a Rack adapter.

 The code measures in at less than 1000 lines of C code.

 There is much work to do; it is not ready for use. I am soliciting
 help from the community for testing and development. You may browse
 the git repository at http://repo.or.cz/w/ebb.git or check out the
 code with this command:
 git clone git://repo.or.cz/ebb.git
 I release Ebb under the MIT license.
 It is very fun to program Ebb so I suggest you do too :)


 Ry Dahl
 ___
 Mongrel-users mailing list
 Mongrel-users@rubyforge.org
 http://rubyforge.org/mailman/listinfo/mongrel-users




-- 
Ersin Er
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-14 Thread ry dahl
 A svn repo clone? (git-svn)? Not all jumped into the git bandwagon :-)

Sorry - my hosting abilities are limited. I also find the multitude of
revision control software annoying (but git seems functional!)
apt-get install git


ry
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-14 Thread Marc-André Cournoyer
Hey Ry,

Your project looks amazing. I had a look at rev to use libev, but it  
seems to be Ruby 1.9 only and I'm far from a C expert. So right now  
Thin uses EventMachine.

I really like your idea and I think we could help each other in  
building something very cool.
If you'd like to participate in Thin and have some suggestions on how  
to make it better we should have a talk.
Send me an email if you're interested.

Marc

On 14-Jan-08, at 1:21 PM, Ersin Er wrote:

 Good luck with your new server! I also suggest looking at Thin which
 has been developed very recently and seems quite promising:

 http://code.macournoyer.com/thin/

 According to the benchmarks it's the fastest Ruby web server  
 currently.

 On Jan 14, 2008 6:43 PM, ry dahl [EMAIL PROTECTED] wrote:
 Hello Mongrel Users,

 I'm writing a web server called Ebb. It's written in C, makes use of
 the Mongrel HTTP parser, and uses libev its event loop. The goal is  
 to
 be small, fast, and language independent server that can host web
 frameworks. I have written a small Ruby binding which provides a Rack
 handler - this will allow Ebb to host Rails, Merb, and other Ruby
 frameworks. In the future I will write a Python WSGI binding.

 The design is similar to the evented Mongrel web server. Connections
 are processed as follows:

 1. libev loops and waits for incoming connections.
 2. When Ebb can read from a client socket, it passes the buffer  
 into the
   mongrel state machine which parses the headers into name value  
 pairs.
 3. Ebb starts a new thread and passes the request information and  
 peer socket
   to a user supplied callback. The thread lasts only for the length  
 of that
   callback.
 4. The included Ruby binding, supplying this callback transforms  
 the request
   into a Rack compatible env variable and passes it on a Rack  
 adapter.

 The code measures in at less than 1000 lines of C code.

 There is much work to do; it is not ready for use. I am soliciting
 help from the community for testing and development. You may browse
 the git repository at http://repo.or.cz/w/ebb.git or check out the
 code with this command:
 git clone git://repo.or.cz/ebb.git
 I release Ebb under the MIT license.
 It is very fun to program Ebb so I suggest you do too :)


 Ry Dahl
 ___
 Mongrel-users mailing list
 Mongrel-users@rubyforge.org
 http://rubyforge.org/mailman/listinfo/mongrel-users




 -- 
 Ersin Er
 ___
 Mongrel-users mailing list
 Mongrel-users@rubyforge.org
 http://rubyforge.org/mailman/listinfo/mongrel-users

___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-14 Thread Luis Lavena
On Jan 14, 2008 4:56 PM, ry dahl [EMAIL PROTECTED] wrote:
  A svn repo clone? (git-svn)? Not all jumped into the git bandwagon :-)

 Sorry - my hosting abilities are limited. I also find the multitude of
 revision control software annoying (but git seems functional!)
 apt-get install git


no apt-get on Windows. And git support on it is a bit flacky
(I hear another git versus *nix versus windows discussion starting).

I'm on Bazaar, which is the same used by Ubuntu :-)

http://bazaar-vcs.org/BzrVsGit

Anyway, have git but not on my Windows box.

Will check your code this weekend ;-)

-- 
Luis Lavena
Multimedia systems
-
A common mistake that people make when trying to design
something completely foolproof is to underestimate
the ingenuity of complete fools.
Douglas Adams
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users


Re: [Mongrel] [ANN] Ebb Web Server

2008-01-14 Thread ry dahl
Hi Erza,

I'm not sure if glib is installed by default on macs. (Seems like it
should be but I don't see it on mine.) If you use fink you can do
  apt-get install glib2-dev
The makefile is pretty hacky - make sure you have libev in your
LIBRARY_PATH and ev.h in your CPATH

ry

On Jan 14, 2008 10:03 PM, Ezra Zygmuntowicz [EMAIL PROTECTED] wrote:


 On Jan 14, 2008, at 8:43 AM, ry dahl wrote:

  Hello Mongrel Users,
 
  I'm writing a web server called Ebb. It's written in C, makes use of
  the Mongrel HTTP parser, and uses libev its event loop. The goal is to
  be small, fast, and language independent server that can host web
  frameworks. I have written a small Ruby binding which provides a Rack
  handler - this will allow Ebb to host Rails, Merb, and other Ruby
  frameworks. In the future I will write a Python WSGI binding.
 
  The design is similar to the evented Mongrel web server. Connections
  are processed as follows:
 
  1. libev loops and waits for incoming connections.
  2. When Ebb can read from a client socket, it passes the buffer into
  the
mongrel state machine which parses the headers into name value
  pairs.
  3. Ebb starts a new thread and passes the request information and
  peer socket
to a user supplied callback. The thread lasts only for the length
  of that
callback.
  4. The included Ruby binding, supplying this callback transforms the
  request
into a Rack compatible env variable and passes it on a Rack
  adapter.
 
  The code measures in at less than 1000 lines of C code.
 
  There is much work to do; it is not ready for use. I am soliciting
  help from the community for testing and development. You may browse
  the git repository at http://repo.or.cz/w/ebb.git or check out the
  code with this command:
  git clone git://repo.or.cz/ebb.git
  I release Ebb under the MIT license.
  It is very fun to program Ebb so I suggest you do too :)
 
 
  Ry Dahl

 Hey Ry-

 Is glib-2.0 a dependency? It seems like 2.0 is an old version of
 glib. So ebb doesn't compile on leopard out of the box. What do I need
 to install to make it work?

 ~/ebb  make
 gcc -g -Wall `pkg-config --cflags glib-2.0` -I/opt/libev-2.01/include -
 L/opt/libev-2.01/lib -c tcp.c -o tcp.o
 Package glib-2.0 was not found in the pkg-config search path.
 Perhaps you should add the directory containing `glib-2.0.pc'
 to the PKG_CONFIG_PATH environment variable
 No package 'glib-2.0' found
 tcp.c:18:16: error: ev.h: No such file or directory
 tcp.c:19:18: error: glib.h: No such file or directory
 In file included from tcp.c:23:
 tcp.h:48: error: syntax error before 'GQueue'
 tcp.h:48: warning: no semicolon at end of struct or union
 tcp.h:53: error: syntax error before '*' token
 tcp.h:53: warning: type defaults to 'int' in declaration of
 'accept_watcher'
 tcp.h:53: warning: data definition has no type or storage class
 tcp.h:55: error: syntax error before '}' token
 tcp.h:72: error: syntax error before 'ev_io'
 tcp.h:72: warning: no semicolon at end of struct or union
 tcp.c: In function 'tcp_client_write':
 tcp.c:33: error: dereferencing pointer to incomplete type
 tcp.c:34: error: dereferencing pointer to incomplete type
 tcp.c:36: warning: implicit declaration of function 'g_log'
 tcp.c:36: error: 'G_LOG_LEVEL_ERROR' undeclared (first use in this
 function)
 tcp.c:36: error: (Each undeclared identifier is reported only once
 tcp.c:36: error: for each function it appears in.)
 tcp.c: At top level:
 tcp.c:46: warning: 'struct ev_io' declared inside parameter list
 tcp.c:46: warning: its scope is only this definition or declaration,
 which is probably not what you want
 tcp.c: In function 'tcp_client_on_readable':
 tcp.c:48: error: dereferencing pointer to incomplete type
 tcp.c:52: error: 'EV_ERROR' undeclared (first use in this function)
 tcp.c:53: error: 'G_LOG_LEVEL_ERROR' undeclared (first use in this
 function)
 tcp.c:57: error: dereferencing pointer to incomplete type
 tcp.c:58: error: dereferencing pointer to incomplete type
 tcp.c:59: error: dereferencing pointer to incomplete type
 tcp.c:60: error: dereferencing pointer to incomplete type
 tcp.c:62: error: dereferencing pointer to incomplete type
 tcp.c:64: error: dereferencing pointer to incomplete type
 tcp.c:64: error: dereferencing pointer to incomplete type
 tcp.c:67: warning: implicit declaration of function 'g_debug'
 tcp.c:81: error: dereferencing pointer to incomplete type
 tcp.c:81: error: dereferencing pointer to incomplete type
 tcp.c:81: error: dereferencing pointer to incomplete type
 tcp.c: In function 'tcp_client_new':
 tcp.c:95: warning: implicit declaration of function 'g_new0'
 tcp.c:95: error: syntax error before 'tcp_client'
 tcp.c:97: error: dereferencing pointer to incomplete type
 tcp.c:99: error: dereferencing pointer to incomplete type
 tcp.c:99: error: dereferencing pointer to incomplete type
 tcp.c:99: error: dereferencing pointer to incomplete type
 tcp.c:100: error: dereferencing pointer to incomplete type
 

Re: [Mongrel] [ANN] Ebb Web Server

2008-01-14 Thread Ezra Zygmuntowicz

On Jan 14, 2008, at 8:43 AM, ry dahl wrote:

 Hello Mongrel Users,

 I'm writing a web server called Ebb. It's written in C, makes use of
 the Mongrel HTTP parser, and uses libev its event loop. The goal is to
 be small, fast, and language independent server that can host web
 frameworks. I have written a small Ruby binding which provides a Rack
 handler - this will allow Ebb to host Rails, Merb, and other Ruby
 frameworks. In the future I will write a Python WSGI binding.

 The design is similar to the evented Mongrel web server. Connections
 are processed as follows:

 1. libev loops and waits for incoming connections.
 2. When Ebb can read from a client socket, it passes the buffer into  
 the
   mongrel state machine which parses the headers into name value  
 pairs.
 3. Ebb starts a new thread and passes the request information and  
 peer socket
   to a user supplied callback. The thread lasts only for the length  
 of that
   callback.
 4. The included Ruby binding, supplying this callback transforms the  
 request
   into a Rack compatible env variable and passes it on a Rack  
 adapter.

 The code measures in at less than 1000 lines of C code.

 There is much work to do; it is not ready for use. I am soliciting
 help from the community for testing and development. You may browse
 the git repository at http://repo.or.cz/w/ebb.git or check out the
 code with this command:
 git clone git://repo.or.cz/ebb.git
 I release Ebb under the MIT license.
 It is very fun to program Ebb so I suggest you do too :)


 Ry Dahl

Hey Ry-

Is glib-2.0 a dependency? It seems like 2.0 is an old version of  
glib. So ebb doesn't compile on leopard out of the box. What do I need  
to install to make it work?

~/ebb  make
gcc -g -Wall `pkg-config --cflags glib-2.0` -I/opt/libev-2.01/include - 
L/opt/libev-2.01/lib -c tcp.c -o tcp.o
Package glib-2.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `glib-2.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'glib-2.0' found
tcp.c:18:16: error: ev.h: No such file or directory
tcp.c:19:18: error: glib.h: No such file or directory
In file included from tcp.c:23:
tcp.h:48: error: syntax error before ‘GQueue’
tcp.h:48: warning: no semicolon at end of struct or union
tcp.h:53: error: syntax error before ‘*’ token
tcp.h:53: warning: type defaults to ‘int’ in declaration of  
‘accept_watcher’
tcp.h:53: warning: data definition has no type or storage class
tcp.h:55: error: syntax error before ‘}’ token
tcp.h:72: error: syntax error before ‘ev_io’
tcp.h:72: warning: no semicolon at end of struct or union
tcp.c: In function ‘tcp_client_write’:
tcp.c:33: error: dereferencing pointer to incomplete type
tcp.c:34: error: dereferencing pointer to incomplete type
tcp.c:36: warning: implicit declaration of function ‘g_log’
tcp.c:36: error: ‘G_LOG_LEVEL_ERROR’ undeclared (first use in this  
function)
tcp.c:36: error: (Each undeclared identifier is reported only once
tcp.c:36: error: for each function it appears in.)
tcp.c: At top level:
tcp.c:46: warning: ‘struct ev_io’ declared inside parameter list
tcp.c:46: warning: its scope is only this definition or declaration,  
which is probably not what you want
tcp.c: In function ‘tcp_client_on_readable’:
tcp.c:48: error: dereferencing pointer to incomplete type
tcp.c:52: error: ‘EV_ERROR’ undeclared (first use in this function)
tcp.c:53: error: ‘G_LOG_LEVEL_ERROR’ undeclared (first use in this  
function)
tcp.c:57: error: dereferencing pointer to incomplete type
tcp.c:58: error: dereferencing pointer to incomplete type
tcp.c:59: error: dereferencing pointer to incomplete type
tcp.c:60: error: dereferencing pointer to incomplete type
tcp.c:62: error: dereferencing pointer to incomplete type
tcp.c:64: error: dereferencing pointer to incomplete type
tcp.c:64: error: dereferencing pointer to incomplete type
tcp.c:67: warning: implicit declaration of function ‘g_debug’
tcp.c:81: error: dereferencing pointer to incomplete type
tcp.c:81: error: dereferencing pointer to incomplete type
tcp.c:81: error: dereferencing pointer to incomplete type
tcp.c: In function ‘tcp_client_new’:
tcp.c:95: warning: implicit declaration of function ‘g_new0’
tcp.c:95: error: syntax error before ‘tcp_client’
tcp.c:97: error: dereferencing pointer to incomplete type
tcp.c:99: error: dereferencing pointer to incomplete type
tcp.c:99: error: dereferencing pointer to incomplete type
tcp.c:99: error: dereferencing pointer to incomplete type
tcp.c:100: error: dereferencing pointer to incomplete type
tcp.c:101: error: ‘G_LOG_LEVEL_ERROR’ undeclared (first use in this  
function)
tcp.c:105: error: dereferencing pointer to incomplete type
tcp.c:105: error: ‘TRUE’ undeclared (first use in this function)
tcp.c:107: error: dereferencing pointer to incomplete type
tcp.c:113: error: dereferencing pointer to incomplete type
tcp.c:115: error: dereferencing pointer to incomplete type
tcp.c:115: error: syntax error before ‘struct’

Re: [Mongrel] [ANN] Ebb Web Server

2008-01-14 Thread Kevin Williams
An alternative might be github.com. It looks like they provide svn
mirrors of your git repos.

On Jan 14, 2008 1:50 PM, Luis Lavena [EMAIL PROTECTED] wrote:
 On Jan 14, 2008 4:56 PM, ry dahl [EMAIL PROTECTED] wrote:
   A svn repo clone? (git-svn)? Not all jumped into the git bandwagon :-)
 
  Sorry - my hosting abilities are limited. I also find the multitude of
  revision control software annoying (but git seems functional!)
  apt-get install git
 

 no apt-get on Windows. And git support on it is a bit flacky
 (I hear another git versus *nix versus windows discussion starting).

 I'm on Bazaar, which is the same used by Ubuntu :-)

 http://bazaar-vcs.org/BzrVsGit

 Anyway, have git but not on my Windows box.

 Will check your code this weekend ;-)

 --
 Luis Lavena
 Multimedia systems
 -
 A common mistake that people make when trying to design
 something completely foolproof is to underestimate
 the ingenuity of complete fools.
 Douglas Adams
 ___

 Mongrel-users mailing list
 Mongrel-users@rubyforge.org
 http://rubyforge.org/mailman/listinfo/mongrel-users




-- 
Cheers,

Kevin Williams
http://www.bantamtech.com/
___
Mongrel-users mailing list
Mongrel-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/mongrel-users