00:00:06.319
Video equipment rental costs were paid for by Peep Code Screencasts.
00:00:19.439
Well, first of all, thank you all for coming to learn a little bit about our humble little framework. I hope you find this information interesting.
00:00:33.280
Before I get into the details of my presentation, I want to share the big picture. The framework, Waves, attempts to leverage the fact that HTTP already defines a sort of functional protocol.
00:00:50.079
The idea is to define resources that implement the basic methods of HTTP, and that’s essentially what this talk is about. There are many other aspects of Waves that I won’t cover today, but I hope this presentation will spur your interest and motivate you to learn more about its features.
00:01:24.640
This isn't a tutorial on how to build a Waves app or how to create a simple blog in five minutes. It really focuses on the purpose of Waves. I often get asked how Waves differs from Merb, Rails, or other frameworks like Sinatra.
00:01:43.759
Answering that question is challenging because Waves is still exploratory, and we're figuring out what it really is. As Matthew King, one of our major contributors, often tells me, I keep breaking his specifications as we explore new ideas and re-implement features. Waves hasn’t fully found its identity yet, and that aligns with the spirit of the Ruby community, which is characterized by constant change.
00:02:35.440
We aim to explore new areas with Waves. Sometimes we stub our toes, and sometimes we discover interesting things. I'm going to touch on some of the coolest features we've been working on.
00:02:59.519
To provide a little background about myself, I work with YellowPages.com in Los Angeles. We're involved in many exciting projects and are currently hiring, so if you're interested in Ruby development, please see me or Kobe Randquist, who is filming here.
00:03:30.640
I've been programming in Ruby for about three years and have worked on several open-source projects. I have included a list for context about my experience.
00:03:55.760
Now, here are some quick facts about Waves to illustrate its current stage. The initial release occurred last February, and while we received early attention, it has been a mixed blessing, as we've had to deal with constant changes to the framework as we learn.
00:04:34.000
Despite these challenges, we’re looking for contributors to implement and improve on these ideas. We have a Git repository, a Google group, and a website at RubyWaves.com. I encourage you to check them out and join our discussions.
00:05:02.000
Now, let's quickly overview some major features of Waves. One aspect we will discuss is the resource-oriented nature of Waves. The web community has realized, albeit a bit belatedly, that HTTP is fundamentally resource-oriented, as defined by its methods for modifying and accessing resources.
00:05:56.000
However, many frameworks do not reflect this in their design, leading to an impedance mismatch. Waves embraces HTTP's nature and seeks to integrate its principles into the way web frameworks function.
00:06:23.520
Waves also features a heavy influence of functional programming, a layered architecture that explicitly supports Ruby modules, and aims to make its mechanisms less mysterious and more accessible.
00:06:56.960
Applications in Waves are encapsulated in modules, allowing multiple application components to coexist without clashing.
00:07:08.400
We put significant emphasis on the richness of Ruby as a language and continuously ask if we can express ideas naturally in Ruby rather than resorting to complex configuration files or constructs.
00:07:59.200
Our approach prioritizes the use of classes, modules, and methods while possibly generating a Domain Specific Language (DSL) to make coding easier without straying from Ruby.
00:08:43.120
Waves' class and module loader is more sophisticated than what's found in many other frameworks. Additionally, Waves might evolve into a meta-framework, somewhat like Rack, allowing for an architecture-agnostic layered approach.
00:09:01.680
In summary, the primary goal of Waves is to allow for functional programming styles, REST principles, and inheritable configurations. Ultimately, we are working on Waves because we find it interesting, and it allows us to express concepts naturally within Ruby's object model.
00:09:52.360
Now, diving into the core of the presentation, HTTP is a protocol that outlines methods for basic CRUD operations, which are commonly found in web applications. This realization should inspire us to implement HTTP's attributes in Ruby.
00:10:35.680
The goal of Waves is to allow developers to create resource objects that correspond to HTTP methods, enabling them to process requests and provide suitable responses.
00:11:13.760
However, as we delve deeper, implementation often leads to complexity and unmaintainable code.
00:11:30.560
This is where Functor comes into play. Functor introduces pattern-based argument matching, allowing us to determine which block of code to execute based on the arguments.
00:12:43.840
To illustrate Functor, let me show you a quick example of how it aids in functional programming.
00:13:06.480
In this example, I summarize the Fibonacci sequence using pattern matching to define the behavior based on input arguments.
00:13:26.680
This concept, while very familiar in languages like Haskell, may seem complex at first. Still, it revolves around dispatching methods based on the types of arguments.
00:13:52.320
Waves is built upon several principles and aims to use regular expressions and lambdas for more sophisticated matching within the framework.
00:14:33.680
One major aspect is how we pattern match on regular expressions alongside the functionalities provided by Functor. This flexibility leads to more powerful resource processing.
00:15:39.760
We are still developing our implementation of these concepts, but our goal is to provide unique resources for HTTP methods.
00:16:38.280
As we work through these ideas, functor also allows us to treat matching functional programming constructs, which can be implemented as ordinary Ruby methods.
00:17:18.000
As we progress, it's essential to ensure that our approach enables easy integration with existing frameworks without overcomplicating our designs.
00:17:46.160
While understanding that not all elements will become seamless at first, we are steadily improving the process of integrating classes and methods in a manner that retains simplicity.
00:18:21.440
I'll share some additional examples to illustrate how modularity and computation overlap in Waves applications.
00:19:14.240
We use various DSL constructs that allow us to modularly define methods in a clear manner.
00:19:44.000
Next, I'll show you some code snippets that encapsulate language-specific functionality while enabling flexibility in our routes.
00:20:43.680
I aim to show you how these concepts translate into tangible applications using simple examples.
00:21:05.920
Here’s a look at how to create mounts for resources and how they can be effectively organized.
00:21:53.120
This process not only enhances usability but also promotes organized code in the framework.
00:22:00.960
As we establish these mounts, we lay the groundwork for flexibility by defining acyclic dependencies among resources.
00:22:55.680
With each new example, we highlight how the integration works seamlessly without conflicts of definitions.
00:23:45.760
The process involves varying configurations that can be inherited based on the desired output, aligning with resource structure.
00:24:34.760
We've established a foundation for effective routing while ensuring Rooms can deploy consistent functionality.
00:25:24.480
Every layer of this framework aims to reduce redundancy in code and encourages a more maintainable structure.
00:26:01.680
I encourage you to explore how these foundational principles can apply broadly in building modular applications.
00:27:00.320
As we navigate these concepts, I hope to emphasize the importance of clarity and understanding in shaping the structure of our applications.
00:27:59.680
With demonstrated functionality and a strong foundation, we're ready to execute a variety of applications within this framework.
00:28:40.240
Lastly, let me share some of the advantages of modularity, including clearer abstractions and a focus on resource organization.
00:29:24.480
In conclusion, Waves provides powerful tools for designing web applications that embrace scalability and powerful integration principles.
00:30:12.960
As we continue to refine this model, your feedback and ideas will be invaluable in shaping its future.
00:30:46.720
Thank you for your attention, and I look forward to seeing how Waves evolves with your contributions.
00:31:49.920
I'm happy to take any questions now.
00:32:20.640
There’s a lot to discuss regarding how shared resources can function within each application. For now, we welcome you to dive in and explore what Waves has to offer. Thank you very much!
00:33:32.760
If you're interested in these topics, we'd love for you to contribute and provide your insights as we move forward.
00:34:05.560
Thank you for your time, and I look forward to collaborating with each of you.