00:00:06.359
Video equipment rental cost paid for by PeepCode.
00:00:19.119
Hi everyone, my name is Yehuda. Just to let you know, I will be doing some live coding at the end of this presentation, but not the entire time. The live coding will be directed more by the audience's interests, focusing on showcasing various features rather than achieving a specific goal. Also, I need to adjust my microphone because my audio is quite distorted right now.
00:00:39.840
Is this better? Alright, cool! So, as I mentioned earlier, my name is Yehuda, and I work at Engine Yard. My work primarily revolves around technologies that I will discuss today, primarily jQuery, Data Mapper, and Merb, which form a powerful stack.
00:01:18.320
Let me share some insights about Merb. Merb prioritizes speed; it is swift and efficient. When creating a framework, you typically have to choose between speed and elegance. Some claim that if you prioritize speed, you lose elegance and other features. However, I believe that choosing to be fast and elegant from the outset is entirely achievable, albeit requiring significant thought and effort. In Merb, slowness is not permitted. We often hear people dismissing slow code by suggesting to handle it elsewhere. However, within an open-source framework, it is challenging to ascertain in advance which code will impact performance, therefore our policy is to avoid allowing slow code across the framework.
00:02:11.959
This results in very efficient code in Merb. For instance, Merb achieves request handling times around 500 microseconds. Things like setting up cookies in controllers get completed in about 75 microseconds, which is impressive as it indicates that your application has significant performance headroom compared to others.
00:02:40.159
Merb is often utilized in high-traffic applications, like ad networks that receive millions of hits daily. This is feasible due to the capability of writing Merb actions that can render in under a millisecond; such performance is currently unattainable in Rails applications due to its heavier stack.
00:03:14.200
Another crucial aspect is the public API. When developing an application, you need to decide the public API to expose to users. Unlike Java, which provides strict controls over accessibility of code, Ruby allows for experimentation, letting developers interact with potentially private methods. Merb encourages this flexibility, allowing developers to create plugins and alter the framework as they see fit. However, we also maintain a robust public API that we expect our users to adhere to, ensuring it remains unchanged and trustworthy.
00:04:09.439
In practice, if users find limitations in the public API, we aim to address those, but we avoid exposing every internal method to them. This design philosophy ensures stability, unlike some older Rails practices, which are challenged by too much external modification. For example, an early assumption in Merb was that templates would always be loaded from files. However, when a developer proposed to load templates dynamically at the runtime, we adapted our API accordingly without significant alterations. Much of our design philosophy also centers on modularity, meaning Merb components typically do not rely on each other, fostering an environment where each module can be interchanged easily.
00:05:49.200
We strive to make Merb as hackable as possible. For example, 'Merb slices' allow encapsulating sections of your application, such as a blog, into distinct, distributable components, all while requiring minimal changes to our public API. These modifications signify our commitment to maintaining a flexible architecture without imposing unnecessary constraints on our users.
00:07:01.320
Furthermore, we embrace 'convention over configuration.' Unlike Rails, which integrates conventions into the framework, Merb promotes no encounters built-in by default. For instance, if someone installs Merb core today, there would be no predefined model structures; users must create their own as per their needs. We allow full configuration while still guiding common practices through layers on top of Merb, making it user-friendly without being restrictive.
00:08:31.560
Let’s discuss some new features coming with the next version of Merb. We have revamped the router, enabling fine-tuning of request matching through user agent strings, and support for optional segments. We also implemented 'deferred routes,' which allows routing logic to reside inside the route definitions instead of cluttering the top-level router configurations. This gives you greater control over routing conditions.
00:10:26.720
Moreover, we have acknowledged the relevance of effective session management in Merb. Sessions are the first-level object in the framework, enabling developers to add methods directly to session objects smoothly. This greatly enhances the functionality without burdening the controller with additional logic.
00:12:07.680
In Merb 1.0, we aim to enhance form-building capabilities. Merb will feature a robust form builder akin to Rails’ but with improved flexibility, allowing users to easily integrate third-party form builders without noticeable friction.
00:13:02.440
Additionally, we are focusing on creating a rigorous testing strategy to enhance the overall robustness of Merb applications. Community feedback and real-world experiences will allow us to formulate a clear direction regarding best practices for building and maintaining tests effectively.
00:14:34.080
Lastly, as we move forward, we'll be introducing a new meta gem called 'Merb Stack.' This gem streamlines setup, addressing concerns about lengthy configurations. It will bundle essential components together, significantly simplifying the initial setup when starting with Merb.
00:15:30.960
In conclusion, we've covered a wide array of features and improvements coming to the Merb framework. From emphasizing speed and modularity to enhancing the testing strategy and router improvements, we're committed to making Merb a powerful choice for developers looking for a flexible Ruby framework.
00:16:32.480
Now, let’s transition into live coding. The aim here is to illustrate Merb's functionality in an engaging manner, allowing you to see the potential in action as I create a simple application.
00:17:06.799
As we dive into the code, if there are any questions that arise, please feel free to interrupt. The goal is to ensure that everyone gains a good understanding of how to utilize the Merb framework while getting hands-on experience.
00:19:05.920
While developing this application, expect me to showcase different features and functionalities that come with Merb, thereby demonstrating how intuitive and effective this framework can be in delivering robust applications.
00:22:15.440
With that said, let's get started on building our simple app, and remember to interrupt with any questions you have along the way. I appreciate your interest and look forward to your feedback!
00:24:06.720
Alongside building the app, I will highlight common functionalities and additionally explore areas surrounding optimal practices within the framework. Thank you all for being here, and let's have some fun with the coding session!
00:54:02.640
Your active participation will enhance this experience, and I'm excited to share the magic of Merb with everyone today!