InfoQ

InfoQ

Presentation

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

Recorded at:
Recorded at

Clojure and the Web

Presented by Glenn Vanderburg on Sep 07, 2011 Length 01:03:41     Download: MP3
     Slides
Sections
Architecture & Design,
Development
Topics
Web Frameworks ,
Clojure ,
WOA ,
Languages ,
Architecture ,
Programming ,
Web Applications
 

How would you like to view the presentation?

In case you are having issues watching this video, please follow these simple steps to help us investigate the issue:
1. Right click on the video player and select Copy log
2. Paste the copied information in an email to video-issue@infoq.com (clicking this link will fill in the default details in most email clients).
Note: in case your email client hasn't automatically picked up the email subject, please include in your email the URL of the video too.
3. Done.
We will investigate the issue and get back to you as soon as possible. Thanks for helping us improve our site!
Summary
Glenn Vanderburg discusses how Clojure helps creating web applications, focusing on Ring, Compojure, and how a functional language can be used to generate HTML and XML.

Bio
Glenn Vanderburg is a consultant at Relevance focusing on cutting-edge software development technologies and techniques, including Ruby, JavaScript, Ajax, and state-of-the-art development practices.

About the conference
QCon is a conference that is organized by the community, for the community.The result is a high quality conference experience where a tremendous amount of attention and investment has gone into having the best content on the most important topics presented by the leaders in our community.QCon is designed with the technical depth and enterprise focus of interest to technical team leads, architects, and project managers.
Clojure is not Lisp-2 by Dmitry Gutov Posted
Can't leave out the client by Faisal Waris Posted
Re: Can't leave out the client by Vladimir Tsvetkov Posted
Brian Marick's book on Ring from Pragmatic Programmer's by Shree Mulay Posted
Re: Brian Marick's book on Ring from Pragmatic Programmer's by Vincent Murphy Posted
Re: Brian Marick's book on Ring from Pragmatic Programmer's by Justin Forder Posted
Meat is at 19:30 by Vincent Murphy Posted
(request :uri) vs. (:uri request) by Howard Lewis Ship Posted
  1. Back to top

    Clojure is not Lisp-2

    by Dmitry Gutov

    Starting with 00:29:15, this guy says that Clojure follows Lisp-2 model of separate namespaces for values and functions.
    This is blatantly incorrect. Clojure is Lisp-1.

    The reason (:uri request) works is because clojure.lang.Keyword implements clojure.lang.IFn.

  2. Back to top

    Can't leave out the client

    by Faisal Waris

    Web frameworks are nice but the need today is to manage both the client and the server side computing in a coherent way.

    The earlier post about Opa is interesting in this regards and there are many frameworks such as Google Web Toolkit (Java); Script# (C#); WebSharper (F#); etc.; that allow client-side javascript to be generated from the language used on the server side.

    Additionally, integration with client frameworks such as Dojo, jQuery, etc. may be required.

    The old models of web don't work any more and I don't think we have a good story for the new model of the web, yet.

    Rich clients - like Silverlight, IOS, Android, Flash - are also on the rise putting different demands on the server side.

  3. Back to top

    Brian Marick's book on Ring from Pragmatic Programmer's

    by Shree Mulay

    Which book does Glenn Vanderburg talk about at the end of the talk? I'd like to look at it! THANKS!

  4. Back to top

    Meat is at 19:30

    by Vincent Murphy

    The Clojure introduction ends here, and the web specific stuff starts.

  5. Back to top

    Re: Brian Marick's book on Ring from Pragmatic Programmer's

    by Vincent Murphy

    I searched the Prag site and Marick's blog and couldn't find it. If anyone has more information please put a link here.

  6. Back to top

    (request :uri) vs. (:uri request)

    by Howard Lewis Ship

    I think the community is gravitating towards the second version: (:uri request)

    This handles cases where the map is nil correctly.

    In addition, when using (defrecord), the record type acts like a map but does not act like a function (it can't be in the first position). So if the request was actually a record, (:uri request) would work, but (request :uri) would fail with an exception that request is not a function.

    This is important, as for performance reasons, it can be nice to convert from pure maps, or (defstruct) to (defrecord).

    I haven't researched why a record acts like a map, but does not act like a function.

  7. Back to top

    Re: Brian Marick's book on Ring from Pragmatic Programmer's

    by Justin Forder

    Googling for "clojure ring book" led me to this message in the Clojure Google Group, asking for reviewers and giving a link to a PDF of the first two chapters.

  8. Back to top

    Re: Can't leave out the client

    by Vladimir Tsvetkov

    Totally agree with you!

    With Flex/Flash you build a something that's purely a Client, composed from data-driven components. Components can be self-contained and highly reusable. The key to this self-containment is that the Flex/Flash components are purely client stuff that just waits for data to be set. Such Client is using the server to request/modify data asynchronously. The server just returns data. To me personally the HTML-based web apps are harder to reason about, design and componentize, simply because the server is not obliged to just return data, but it can also give you portions of the client. So the client components aren't really components, because they are partly generated from the server, partly generated from the client - and it's very difficult to design them in a way that allows them to be self-contained. They rely on both server-side processing and client-side processing. All these web frameworks are simple request/response frameworks - they don't address component-based architectures and designs where you can create applications by composing reusable components.

    What do you think?

Educational Content

Evolution in Data Integration From EII to Big Data

Approaches to integrating data are changing with emergence of cloud computing.

Winning Hearts and Minds: How to Embed UX from Scratch in a Large Organization

Michele Ide-Smith presents the lessons learned in the process of introducing UX principles and techniques into a large organization through a series of small steps.

LMAX Disruptor: 100K TPS at Less than 1ms Latency

Dave Farley and Martin Thompson discuss solutions for doing low-latency high throughput transactions based on the Disruptor concurrency pattern.

Thoughts on Test Automation in Agile

Rajneesh Namta shares his thoughts, experiences, and some of the critical lessons learned while implementing software test automation on a recent Agile project.

Actor Interaction Patterns

Dale Schumacher presents several patterns of actor interaction that can be used in collaborative programs written in any language.

Scalaz: Functional Programming in Scala

Rúnar Bjarnason discusses Scalaz, a Scala library of pure data structures, type classes, highly generalized functions, and concurrency abstractions to perform functional programming in Scala.

Faster, Better, Higher – But How?

One of the main challenges when designing software architecture is considering quality attributes. Not only their design turns out to be difficult, but also the specification of these attributes.

Software Naturalism - Embracing the Real Behind the Ideal

Michael Feathers analyzes real code bases concluding that code is not nearly as beautiful as designers aspire to, discussing the everyday decisions that alter the code bit by bit.