Mongrel2
mongrel2.org
mongrel2.org
Not with Zed, though.
But he's dead sincere when it comes to making things. He's like _why's evil twin.
That said, I'm not too worried considering his history with the Ruby community. I'd still have a better opinion of him if he didn't antagonize them though.
I'm absolutely certain he's a great guy in person. Asshole doesn't preclude you from being nice, personable, and even entertaining. Instead I take it to mean that when the bad side does come out it's nasty.
It's ridiculous, but it seems the best way to keep this in check is to be kind to the gentle people, and totally destroy the haters.
Also, it's pretty fun tearing into these guys because they're usually pretty bad at their rants. :-)
But if I out-rant a dude who compares me to Lady Gaga and tries to kick me when I'm down for no other reason than to drive traffic to his poorly written blog and sell more videos, then I'm an asshole?
You have the same double standard all geeks have. You let the blow hards, pundits, and bullies get away with treating other people poorly, lie, and hype themselves endlessly, but when someone calls them on it you call them an asshole or worse.
So I apologize for writing timidly previously. I apologize for standing behind your back and spreading my opinion in an unbalanced fashion. I made the classic mistake of forgetting I'm actually in public.
I'll say it to you directly. Zed, I'm glad you stand up for yourself, both against my clumsy commentary and all the other blowhards who strike at you. I'm even glad you do it so vocally because it is a damn good story: the wronged who doesn't go quietly into the night.
The only negative side is that your voice is corrosive and bitter and if it weren't I'd feel a lot more comfortable about agreeing with you. As it is I feel like I'm nodding along as the bully takes out that annoying kid who really just had it coming. It feels good, but society is built on not just sitting and watching that happen. Worse, I hate that I end up remembering that feeling whenever I read about any of the cool things you do.
So yeah, I still think you're an asshole. It's unfortunately not what's fair or what's owed but instead how it looks. I'm sure you're ready to tell me why I'm wrong, but don't worry because I've already got a truckload of cognitive dissonance going on. It doesn't help that I think Fret War and Shedding Bikes and Lamson and Mongrel are all great projects and am completely sure that you're a great friend to those who earn your respect.
I just see it as the image you've intentionally built for yourself. Starting with ZSFA and now eking into oppugn.us.
In this case, I felt like reprising Mongrel and finally that it would make sense, so I whipped up some code, got it working, and made a viable chat demo with it:
Based on that, seems folks get it and it'll work so I'll start hacking on it.
That said, its good that he is writing it. The more software is written, the higher the likelihood that _something_ will be great, and when Zed Shaw's writing it, it's probably pretty good.
And mongrel2 is not embedded. You connect to it. No linking. It's a server.
I could easily see Passenger or others providing a 0mq connector that Mongrel2 can talk to. Passenger is bad ass at running Ruby, so no point in trying to do that better.
Mongrel2 will let you effectively design part of your app to benefit from Rails (for example) and part to use 0mq and do a more evented style of design. All within one configuration / approach.
As mentioned in another post, Rails used to not be thread safe. Right now I'm running a Rails site in production with multithreading enabled, but I'm sure many libraries in Ruby are not thread safe.
I would think that by spinning up more workers than you can support, you slow down all responses. This increases the rate of backup, which increases the need for those extra workers, which slow things down, etc.
By keeping workers below the ceiling at all times, requests back up, but you don't degrade performance. I think this makes things much easier to recover.
Correct me if I'm wrong about your scenario, since I've never deployed it on a high traffic site.
All I'm saying is that I have N sites that get different amounts of traffic. If more people are hitting one, I want it to get allocated more passenger instances to handle the traffic. With mongrel, I'd have to, a priori, decide how many mongrels each site gets and hope for the best. With passenger, it dynamically allocates them to handle traffic on an ongoing basis.
The use of AGPL has some interesting ramifications. For example, I still don't understand why AGPL projects like MongoDB can be used as part of large networked systems and this not be a violation of the AGPL if the entire system's source is not released under AGPL also. AGPL is "networked viral."
"To say this another way: if you modify the core database source code, the goal is that you have to contribute those modifications back to the community.
Note however that it is NOT required that applications using mongo be published. The copyleft applies only to the mongod and mongos database programs. This is why Mongo DB drivers are all licensed under an Apache license. You application, even though it talks to the database, is a separate program and “work”."
With the AGPL, however, you do. Some people, though, interpret that to also mean that any of your code that connects to an AGPL server must also be open-sourced; eg, you web app, if it connects to mongodb, you must provide the source. As far as I know, there's been no legal opinion if thats the case, and the mongodb devs have stated thats not how they read it, and thats not what they intend.
Its when you modify the AGPL server code, and open that up, you have to release your modification.
So in you AGPL HTTP server example, the clients never are required to be open, but any changes you make to the server must have the source available.
I think Zed's approach is clever... to create a middleware layer that can intelligently (and without adding tons of config complexity) let people build fast, complex apps that fulfill requests using a variety of backends.
Mongrel2's advantage is its focus on apps. Combining HTTP, jssocket, and websockets seamlessly on one port means you can get the best of req/response and async operations in your GUIs.
I remember reading in his book teaching programming to beginners that the important thing is to build stuff, not to nerd out about language features.
Basically, I'm a linguistic secularist. :-)
1. a straw man. The Format is very generic, only sections and key-value-pairs. A fairer comparison would be against httpd.conf, or other languages actually used for web server config.
2. Easy to parse, because there are tony of implementations already.
3. Static, like a SQL database, although Zed[1] and others[2] argued we need Turing-complete extension and configuration languages like Ruby.
[1] http://vimeo.com/2723800 [2] http://lambda-the-ultimate.org/node/3606
insert into rules (rule) values('don\'t require auth for /, but do require auth for /foo/*.jpg')
The use of a db is more to create a standard networkable interface for other clients to read/modify the config than a statement about the semantics of the config syntax.
data = config_file.read()
"insert into config (config) values ('%s')" % data
Are you confusing offline representation with a runtime structure?
How can you tell if the config is changed? You either poll it every time with SELECT (SQL) or see if the timestamp of the database file has changed. (If SQLite works this way. I never had the need to check on the file status.) This costs time as well.
Other web servers have a config file and reload it after getting signalled.
But: It's a bit early to say what Zed intends with SQLite. Maybe mongrel2 gets a configuration interface like Cherokee and only reads the DB on startup and after getting signalled.
With a sqlite3 based "config file" you'll be able to use real, turing complete languages to configure it, create control pannels, distribute the config reliably, and you can run .schema to figure out how it's structured.
It's also incredibly reliable and has many great features for this kind of thing.
I guess running some programming script isn't that bad to configure the server - but right now, people do a lot of basic operations on configs via shell scripting which do the deployment. Using bash/sh to interact with sqlite doesn't sound very inviting.
There, ftfy
font-family: sans-serif;
Instead of "sans serif".
1) loves small software (do one thing do it right)
2) loves C + glue code (perf in C, everything else script)
3) loves solid code
Some examples: SQLite3, Fossil SCM, Mongrel1/2, Merb (hinted by him), etc.
Wouldn't be surprised if he uses the tools developed by Dr. Hipps. Perhaps he prefers tools written by like-minded people.
What can I say, UNIX philosophy at its best?
Note: I like Dr. Hipp's software too (and OpenBSD). These tools are strong, solid, high quality, and represents everything that's good about software product. Unfortunately they're not the most "popular" thing out there.
Looks like he renamed NoNoSQL to MulletDB: http://mulletdb.com/index
MulletDB uses ZeroMQ and sqlite, and communicates with JSON, so I thought maybe this was the same project heading in a new direction.