I'd first like to thank everyone who has replied so far. Your feedback
has been invaluable.

I'm going to try and address some of the issues people have raised. If
I've missed any big ones, feel free to shout louder :)

@Joost
Could you send me an email with the i18n patches you had to make to
Compojure/Ring?

@Chas
I think we probably need a high-level way of exposing a type as a HTTP
resource. I haven't thought about this much, but it's certainly a hole
that isn't quite filled by currently available libraries.

@Chas, @Brian, @Brenton
Deployment is also an issue. Perhaps we need a Leiningen plugin that
would automatically generate an AOTed HttpServlet, given a :handler
key in defproject that designates the main handler function.

Another option is to bypass the whole idea of Java servlet containers
and devise some lightweight Clojure solution. I guess some people will
like that idea, whilst others will shudder at the idea of reinventing
a well-used wheel.

@Hugo
I agree that a standard authentication and authorization library would
be good. With OpenID, OpenAuth, etc. authentication is becoming quite
complex, and login pages are becoming quite uniform. It would be nice
to have some middleware that would automatically provide this sort of
thing.

Named routes may be something I could integrate into Compojure. I'd
have to think of a good way of doing it.

@Adrian
One thing Ring and Compojure are lacking are some good benchmarks.
I'll have to see about making some, unless anyone wants to volunteer?

@Jimmy, @Chas, @Sean
Websockets/Comet is something that has been mentioned to me a few
times. Websockets are a separate protocol to HTTP, and Comet is
essentially a separate protocol, even if it uses HTTP as a transport
layer. So in the past, my opinion is that normal HTTP should be
handled by Ring, and Websockets/Comet should be handled by something
different.

However, it occurs to me that whilst Websockets and Comet are arguably
not HTTP, they do start out with a normal-looking HTTP request. I
wonder if Ring could accept this initial request, but instead of
returning a standard response map, it returns a message-handling
function.

I'll think about this, then bring it up on the Ring group for further
discussion.

@Wilson, @Daniel, @Mark E
Clojure web development is shaping up to be made up of many small,
interchangeable parts. On the whole, I think this is a good thing. I
don't like the idea of monolithic web frameworks, continually
reinventing the same wheels (routes, templates, ORM). My goal for
Clojure web development is near total interoperability.

But at the same time, it's good to be able to pick something up that
integrates all these small parts together. I think eventually we'll
see larger frameworks emerging for Clojure that just tie a bunch of
low-level libraries together. But I think we're a little way off that
goal.

@Wilson, @Brenton, @j-g-faustus, @Brian, @pavelludiq
I've also started writing a Clojure Web Development book. One of the
problems of having lots of small libraries is that its hard to get an
overview of how one should proceed. The Clojure Web Development book
is an effort to take the reader through the Clojure web development
ecosystem, starting with Ring, but also later covering Compojure,
Hiccup, Enlive, Moustache, Sandbar and others.

I envision this as being similar to the Git community book
[http://book.git-scm.com/]. I've started a Google document for it,
which you can view here:

https://docs.google.com/Doc?docid=0AQqGP1CDN0uIZGhmZjJmcGZfMjNjNHIycGZu&hl=en

At the time of writing, it's in a ***very*** rough state. If anyone
wants to help me out, I'll send them a read-write link they can use to
contribute. When the book is more complete, I'll divide it up into web
pages and put it in a GitHub repository.

@Mark S
Logging is something I've been very interested in at various points in
the past, usually when an application goes wrong in production and I
have to figure out what went wrong!

I think we need to discard the notion that logs should be timestamped
strings outputted to a file. Instead, I think they should be hash-maps
we send to a logging server, which then stores them in a database.

You could then visit the database and say "Show me all exceptions that
occurred for user X". You could then select the field you wanted and
say "Show me all log messages that occurred within the context of the
same request as this exception". This is something that would have
saved me a lot of pain in the past.

You've gotten me thinking of writing something like this, perhaps
using MongoDB or Redis to store the documents, and Compojure to write
a nice web interface for searching/configuring.

@Martin
I've been thinking on and off about how to bind data to a set of
routes. I'll let you know if I come up with anything, and suggestions
are always welcome. I think Allen's "Turtles all the way down" post in
the Compojure group is thinking along the right lines.

@Howard
Exception reporting could be better, I think. Clojure in general tends
to have pretty tangled stacktraces, but perhaps that's just because
it's difficult to distinguish between my libraries and clojure.core
where the exception invariably bubbles up from.

Improvements to the Ring stacktrace middleware might help. Perhaps
also something that automatically logs stack traces.

@Mark E
Hosting facilities will probably improve in future, but I suspect
it'll be a while. I'd personally like something like Heroku, but I
don't think the demand is there to sustain a service like that.


I hope this reply was comprehensive enough. There are a lot of really
useful replies in this thread.

- James

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to