SlideShare a Scribd company logo
Functionality-Focused Code Organization
             Rebecca Murphey • @rmurphey • rebeccamurphey.com
             jQuery Boston 2010


Saturday, October 16, 2010
Saturday, October 16, 2010
Saturday, October 16, 2010
object laterals literals
                module pattern
                revealing module pattern
                etc.

Saturday, October 16, 2010
Saturday, October 16, 2010
$('#search').submit(function(e) {
                               e.preventDefault();
                               resultsContainer.empty();

                              var term = $(this).find('input').val();
                              if (!$.trim(term)) { return; }

                              $.each(['search.news', 'search.web'], function(i, svcName) {
                                $.getJSON(
                                  searchUrl,
                                  { q : buildQuery(term, svcName), format : 'json' },

                                   function(resp) {
                                     $('<li><h3>' + svcName + '</h3><ul></ul></li>')
                                       .appendTo(resultsContainer)
                                       .find('ul')
                                       .html(
                                         $.map(resp.query.results.result, function(r) {
                                           return Mustache.to_html(resultsTpl, r);
                                         }).join('')
                                       );
                                   }
                                 );
                               });
                             });




              a “traditional” jQuery way of solving the problem
Saturday, October 16, 2010
what happens when the spec evolves?




Saturday, October 16, 2010
Saturday, October 16, 2010
Saturday, October 16, 2010
is the codebase suitable for collaboration?




Saturday, October 16, 2010
$('#search').submit(function(e) {
                      e.preventDefault();
                      resultsContainer.empty();

                       var term = $(this).find('input').val();
                       if (!$.trim(term)) { return; }

                       $.each(['search.news', 'search.web'], function(i, svcName) {
                         $.getJSON(
                           searchUrl,
                           { q : buildQuery(term, svcName), format : 'json' },

                          function(resp) {
                             $('<li><h3>' + svcName + '</h3><ul></ul></li>')
                               .appendTo(resultsContainer)
                               .find('ul')
                               .html(
                                 $.map(resp.query.results.result, function(r) {
                                    return Mustache.to_html(resultsTpl, r);
                                  }).join('')
                               );
                           }
                        );
                      });
                    });




Saturday, October 16, 2010
is it testable?




Saturday, October 16, 2010
$('#search').submit(function(e) {
                      e.preventDefault();
                      resultsContainer.empty();

                       var term = $(this).find('input').val();
                       if (!$.trim(term)) { return; }

                       $.each(['search.news', 'search.web'], function(i, svcName) {
                         $.getJSON(
                           searchUrl,
                           { q : buildQuery(term, svcName), format : 'json' },

                          function(resp) {
                             $('<li><h3>' + svcName + '</h3><ul></ul></li>')
                               .appendTo(resultsContainer)
                               .find('ul')
                               .html(
                                 $.map(resp.query.results.result, function(r) {
                                    return Mustache.to_html(resultsTpl, r);
                                  }).join('')
                               );
                           }
                        );
                      });
                    });



              how to test all of the important pieces of this?
Saturday, October 16, 2010
is it readable & maintainable?




Saturday, October 16, 2010
“Writing to be read means writing code ... with
                the idea that someone else will read it. is fact
                alone will make you edit and think of better
                ways to solve the problem you have at hand.”
                                        Stoyan Stefanov, “JavaScript Patterns”



Saturday, October 16, 2010
maintainable code is ...
                             readable
                             consistent
                             predictable
                             looks like one person wrote it
                             documented



Saturday, October 16, 2010
$('#search').submit(function(e) {
                      e.preventDefault();
                      resultsContainer.empty();

                       var term = $(this).find('input').val();
                       if (!$.trim(term)) { return; }

                       $.each(['search.news', 'search.web'], function(i, svcName) {
                         $.getJSON(
                           searchUrl,
                           { q : buildQuery(term, svcName), format : 'json' },

                          function(resp) {
                             $('<li><h3>' + svcName + '</h3><ul></ul></li>')
                               .appendTo(resultsContainer)
                               .find('ul')
                               .html(
                                 $.map(resp.query.results.result, function(r) {
                                    return Mustache.to_html(resultsTpl, r);
                                  }).join('')
                               );
                           }
                        );
                      });
                    });




Saturday, October 16, 2010
// NAVIGATION
                 function togglePage(section) {
                   // if the clicked section is already the current section AND we're in full page mode
                   // minimize the current tab
                   if (jQuery('#md_tab_'+ section).hasClass('current') && jQuery('#md_tab_'+ section + ' a').hasClass('md_fullpage')) {
                     // alert('clicked section is current section AND fullpage mode is active; teaser should load');
                   // Minimize
                     jQuery('#md_tabs_navigation a').removeClass('md_fullpage');
                     jQuery('.md_body').hide();
                     jQuery('#md_feature').slideDown('normal',function(){
                       var bodyContent = jQuery('#md_body_'+ section);
                       bodyContent.fadeOut('normal',function(){
                         jQuery('#md_tabs_navigation a').each(function(){
                           var thisSection = jQuery(this).html().replace('<span<','').replace('</span<','');
                           var thisSection_comp = thisSection.toLowerCase().replace(' ','_');
                            jQuery('#md_body_'+ thisSection_comp).load(
                              '/app/modules/info/loadTeaser.php?sect='+ thisSection_comp,
                              function(){
                                  tb_init('.md_body a.thickbox, .md_body area.thickbox, .md_body input.thickbox');
                                  bodyContent.animate({ height: 'toggle', opacity: 'toggle' },"slow");
                               }
                            );
                         });
                       });
                     });
                     jQuery('#expandtabs span').empty().append('Expand Tabs');
                   } else {
                   // if the clicked section is NOT the current section OR we're NOT in full page mode
                   // then let's go to full page mode and show the whole tab
                   // Maximize
                     // alert('clicked section is not the current section OR full page mode is not active; full section should load');
                     jQuery('#md_tabs_navigation li').removeClass('current');
                     jQuery('#md_tab_'+ section).addClass('current');
                     jQuery('#md_tabs_navigation a').addClass('md_fullpage');
                     jQuery('.md_body').hide();
                     jQuery('#md_feature').slideUp('normal',function(){
                       var bodyContent = jQuery('#md_body_'+ section);
                       bodyContent.fadeOut('normal',function(){
                         bodyContent.empty();
                         var pageLoader = 'info/loadSection.php?sect='+ section;
                         if (section == 'contact_us') {
                             pageLoader = 'contact/loadContactForm.php?form_id=1';
                         }
                         bodyContent.load('/app/modules/'+ pageLoader,function(){
                           // ADD THICKBOXES
                            tb_init('.md_body a.thickbox, .md_body area.thickbox, .md_body input.thickbox');
                           $recent_news_links = jQuery('ul.md_news li a.recent_news_link');
                           $recent_news_links
                               .unbind('click')
                               .each(function(){
                                 var hrefMod = this.href;
                                  hrefMod = hrefMod.replace(/article/,'loadNews').replace(/storyid/,'id');
                                 this.href = hrefMod;
                               })
                               .click(function(){
                                 var t = this.title || this.name || null;
                                 var a = this.href || this.alt;
                                 var g = this.rel || false;
                                  tb_show(t,a,g);
                                 this.blur();
                                 return false;
Saturday, October 16, 2010 });
(By the way, buy this book.)




Saturday, October 16, 2010
Saturday, October 16, 2010
When the heavy lifting of manipulating,
                displaying, and interacting with data falls
                to the browser, it makes sense to reconsider
                the typical DOM-centric approach.




Saturday, October 16, 2010
there’s a better way*
                             *lots of them, in fact. this is one.




Saturday, October 16, 2010
Functionality-focused code organization
                means identifying the pieces of functionality in
                your application and teasing them apart.


Saturday, October 16, 2010
diversion: pubsub 101
                             like custom events, but without the overhead!




Saturday, October 16, 2010
$('input.magic').click(function(e) {
                   // publish a "topic" when something happens
                   $.publish('/something/interesting', [ e.target.value ]);
                 });

                 // register our interest in knowing when something happens
                 $.subscribe('/something/interesting', function(val) {
                   alert(val);
                 });




              a simple pubsub example
Saturday, October 16, 2010
$('input.magic').click(function(e) {
                   $(document).trigger('/something/interesting', [ this.value ]);
                 });

                 $(document).bind('/something/interesting', function(e, val) {
                   alert(val);
                 });




              pubsub with custom events works too
Saturday, October 16, 2010
In jQuery itself, $.fn.ajaxStart and
                $.fn.ajaxStop basically let you subscribe to
                topics published by jQuery’s underlying
                Ajax code.




Saturday, October 16, 2010
diversion: require.def
                                      possibly my new favorite thing
                             (also a great tool for this modularization stuff)




Saturday, October 16, 2010
require.def() De nes a function to be run
                when the module is included. e function can
                return a value, but it doesn’t have to. If
                dependencies are speci ed, they’re available to
                the function as arguments.




Saturday, October 16, 2010
pattern: object Returns an object, though
                the de nition function can close other
                variables that won’t be visible outside the
                function.




Saturday, October 16, 2010
require.def(function() {
                   var privateThing = 'myPrivateThing',

                             privateObj = {
                               maxLength : 5,

                               setPrivateThing : function(val) {
                                 if (val.length > this.maxLength) {
                                   console.log('TOO MUCH');
                                   return;
                                 }

                                 privateThing = val;
                               },

                               otherMethod : function() {
                                  console.log(privateThing);
                                }
                             };

                   return {
                      setPrivateThing : $.proxy(privateObj, 'setPrivateThing'),
                      publicMethod : $.proxy(privateObj, 'otherMethod')
                   };
                 });




              closes private vars, returns a public API
Saturday, October 16, 2010
pattern: factory Returns a function, that,
                when called, returns an instance of an object
                that is de ned inside the module. e factory
                function may optionally bake in instance
                property options or overrides. e base object
                is not exposed publicly.




Saturday, October 16, 2010
require.def(function(){
                   var Person = {
                     intro : 'My name is ',
                     outro : '. You killed my father. Prepare to die.',

                       speak : function() {
                          console.log(
                            this.intro,
                            this.firstName,
                            this.lastName,
                            this.outro
                          );
                        }
                     };

                   return function(config) {
                     return $.extend(Object.create(Person), {
                        firstName : config.firstName,
                        lastName : config.lastName
                      });
                   };
                 });



              returns a “factory” for creating Person instances
Saturday, October 16, 2010
Functionality-focused code organization
                means identifying the pieces of functionality in
                your application and teasing them apart.


Saturday, October 16, 2010
mediators
                views
                services




Saturday, October 16, 2010
Saturday, October 16, 2010
• user submits
                             search input   search form
                                            • user input is
                                            validated
                                            • if input is valid,
                                            the search service is
                              searcher
                                            contacted

                              searcher      • when the search
                                            service returns
                                            results, they are
                                            displayed in the
                                            results container

                               results




Saturday, October 16, 2010
• sets up views and services
         search input view                                  • brokers communication
                                                            between views and services
      • sets up search input form
      • listens for user to submit
      search form                                                 search page
      • verifies form data
                                                                   mediator
      • announces the user’s search
      if it is valid (non-empty)




               results view
      • provides an API for
      mediators to add results and
      clear the results container
      • listens for user interaction
      with results and broadcasts
                                          searcher service                            results service
      information about it to be
      handled by the mediator                                                     • provides an API for
                                          searcher service                        mediators to use to register
                                                                                  user interaction with results,
                                                                                  and to get information about
                                       • provides an API for                      those interactions later
                                       mediators to communicate
                                       with
                                       • performs searches and pre-
                                       processes results into a
                                       consistent format
                                       • accepts callback to allow
                                       results to be used by mediator


Saturday, October 16, 2010
mediators set up views and services, and
                broker communications between them,
                eliminating the need for direct communication




Saturday, October 16, 2010
views display data, observe user input, and
                broadcast messages that mediators can react
                to; may also provide an API for updating data




Saturday, October 16, 2010
views in our sample application
Saturday, October 16, 2010
services manage data & state, exposing a
                limited public API for mediators




Saturday, October 16, 2010
• sets up views and services
         search input view                                  • brokers communication
                                                            between views and services
      • sets up search input form
      • listens for user to submit
      search form                                                 search page
      • verifies form data
                                                                   mediator
      • announces the user’s search
      if it is valid (non-empty)




               results view
      • provides an API for
      mediators to add results and
      clear the results container
      • listens for user interaction
      with results and broadcasts
                                          searcher service                            results service
      information about it to be
      handled by the mediator                                                     • provides an API for
                                          searcher service                        mediators to use to register
                                                                                  user interaction with results,
                                                                                  and to get information about
                                       • provides an API for                      those interactions later
                                       mediators to communicate
                                       with
                                       • performs searches and pre-
                                       processes results into a
                                       consistent format
                                       • accepts callback to allow
                                       results to be used by mediator


Saturday, October 16, 2010
user requests page

                                                                                    app mediator

                                                                                             app mediator hands
                                                                                             request to appropriate
                                                                                             page mediator



                                 page mediator sets up                              page mediator
                             views that will be required
                                            for the page

                                                                                             page mediator sets up
                                                                                             services that will be required
                                                                                             for the page
                                                              views and services
                                                           DO NOT communicate
                                                                         directly




                         view                                                          service


                         view                                                          service


                         view                                                          service


Saturday, October 16, 2010
sample app
                             http://github.com/rmurphey/ffco




Saturday, October 16, 2010
Saturday, October 16, 2010
mediators
                app mediator, page mediator
                views
                message, recent searches, search input, results
                services
                searchers, results


Saturday, October 16, 2010
MOAR FEATURES PLZ?
                indicate search term in URL
                persist recent searches across page reloads
                tabbed search results view
                improve the code I didn’t show you




Saturday, October 16, 2010
rebeccamurphey.com

                             blog.rebeccamurphey.com

                             @rmurphey

                             http://github.com/rmurphey/ffco

                             http://spkr8.com/t/4650

                             http://pinboard.in/u:rmurphey/t:ffco/




Saturday, October 16, 2010
Ad

More Related Content

What's hot (20)

jQuery Data Manipulate API - A source code dissecting journey by Huiyi Yan, has 36 slides with 49 views.Represent major data manipulate API in jQuery 1.6; such as .data(), removeData(), index(), globalEval() and so no. Also, HTML5 data-* attributes. I will walk you through with diving into jQuery source code and find out the killing techniques used in jQuery.
jQuery Data Manipulate API - A source code dissecting journeyjQuery Data Manipulate API - A source code dissecting journey
jQuery Data Manipulate API - A source code dissecting journey
Huiyi Yan
36 slides49 views
Jquery Fundamentals by Rebecca Murphey, has 48 slides with 2444 views.This course will give you the knowledge you need to properly and effectively start integrating jQuery, the popular JavaScript library, into your web development projects. Over the course of two days, you'll learn the fundamental concepts of JavaScript and jQuery and tackle real-world exercises to solidify your understanding of the language and the library. This class is aimed at beginning jQuery users, although intermediate users may also benefit from the more formalized introduction to the library this class will offer.
Jquery FundamentalsJquery Fundamentals
Jquery Fundamentals
Rebecca Murphey
48 slides2.4K views
Using Objects to Organize your jQuery Code by Rebecca Murphey, has 23 slides with 20577 views.When you move beyond simple snippets of jQuery and start developing more complex interactions, your code can quickly become unwieldy and difficult to debug and maintain. In this presentation, I outline an object-based approach to organizing your jQuery.
Using Objects to Organize your jQuery CodeUsing Objects to Organize your jQuery Code
Using Objects to Organize your jQuery Code
Rebecca Murphey
23 slides20.6K views
Cleaner, Leaner, Meaner: Refactoring your jQuery by Rebecca Murphey, has 29 slides with 11859 views.The document discusses refactoring JavaScript code to improve its internal structure and quality without changing its external behavior. It covers reasons to refactor like increasing maintainability and performance. Common "code smells" that indicate needs for refactoring are presented, such as having HTML in JavaScript or duplicating jQuery methods. Advanced refactoring techniques like caching XHR responses and using jQuery widgets are also briefly mentioned. The presentation aims to provide techniques for writing cleaner, leaner and more maintainable JavaScript code.
Cleaner, Leaner, Meaner: Refactoring your jQueryCleaner, Leaner, Meaner: Refactoring your jQuery
Cleaner, Leaner, Meaner: Refactoring your jQuery
Rebecca Murphey
29 slides11.9K views
jQuery by Jay Poojara, has 23 slides with 5931 views.JQuery is a JavaScript library that simplifies HTML document manipulation, event handling, animations, and Ajax interactions. It works across browsers and makes tasks like DOM traversal and manipulation, event handling, animation, and Ajax much simpler. JQuery's versatility, extensibility, and cross-browser compatibility have made it popular, with millions of developers using it to write JavaScript.
jQueryjQuery
jQuery
Jay Poojara
23 slides5.9K views
Kick start with j query by Md. Ziaul Haq, has 38 slides with 994 views.This document provides an overview of jQuery, including what it is, its benefits, how to get started using it, common tasks like selecting elements and applying actions, and some example code. jQuery is a lightweight JavaScript library that simplifies HTML document traversing, event handling, animating, and Ajax interactions. It is small in size, works across browsers, and has a large community and ecosystem of plugins and resources.
Kick start with j queryKick start with j query
Kick start with j query
Md. Ziaul Haq
38 slides994 views
jQuery Fundamentals by Gil Fink, has 38 slides with 5434 views.This document outlines a presentation on jQuery fundamentals. The presentation introduces jQuery as a lightweight JavaScript library for DOM manipulation, event handling, Ajax, and animation. It covers jQuery syntax, selectors, DOM traversal and manipulation methods. It also discusses jQuery's event system, Ajax support, and plugins. The presentation includes demos of common jQuery tasks to demonstrate its usage and capabilities.
jQuery FundamentalsjQuery Fundamentals
jQuery Fundamentals
Gil Fink
38 slides5.4K views
Write Less Do More by Remy Sharp, has 136 slides with 4871 views.London and Cambridge jQuery DevDays talk introducing jQuery concepts, API overview, live examples and plugin design.
Write Less Do MoreWrite Less Do More
Write Less Do More
Remy Sharp
136 slides4.9K views
Learning jQuery in 30 minutes by Simon Willison, has 31 slides with 53529 views.- jQuery is a JavaScript library that simplifies HTML document traversal and manipulation, as well as event handling, animation, and Ajax. - It works by allowing the selection of HTML elements and running functions on those elements via a simple and consistent API. - Common uses of jQuery include modifying HTML content, CSS styling, handling user events, animating elements, and loading data from web servers via Ajax.
Learning jQuery in 30 minutesLearning jQuery in 30 minutes
Learning jQuery in 30 minutes
Simon Willison
31 slides53.5K views
Bacbkone js by Артём Курапов, has 32 slides with 485 views.Backbone.js is a JavaScript framework that aims to solve issues with messy JavaScript code by implementing an MVC pattern and object-oriented principles, providing structure through core concepts like Models for data storage, Collections for grouping Models, and Views for rendering display logic, as well as a Router for navigation. It is lightweight at only 6kb and supports RESTful JSON APIs and event-driven programming.
Bacbkone jsBacbkone js
Bacbkone js
Артём Курапов
32 slides485 views
Doctrine For Beginners by Jonathan Wage, has 69 slides with 1610 views.Come to this talk prepared to learn about the Doctrine PHP open source project. The Doctrine project has been around for over a decade and has evolved from database abstraction software that dates back to the PEAR days. The packages provided by the Doctrine project have been downloaded almost 500 million times from packagist. In this talk we will take you through how to get started with Doctrine and how to take advantage of some of the more advanced features.
Doctrine For BeginnersDoctrine For Beginners
Doctrine For Beginners
Jonathan Wage
69 slides1.6K views
How Kris Writes Symfony Apps by Kris Wallsmith, has 116 slides with 17104 views.You’ve seen Kris’ open source libraries, but how does he tackle coding out an application? Walk through green fields with a Symfony expert as he takes his latest “next big thing” idea from the first line of code to a functional prototype. Learn design patterns and principles to guide your way in organizing your own code and take home some practical examples to kickstart your next project.
How Kris Writes Symfony AppsHow Kris Writes Symfony Apps
How Kris Writes Symfony Apps
Kris Wallsmith
116 slides17.1K views
jQuery 1.7 Events by dmethvin, has 33 slides with 3937 views.The document summarizes new features and changes to the jQuery event system in version 1.7. Key points include: - The .on() and .off() methods were introduced to unify event binding, removing confusion from multiple older methods. This improves performance and reduces code size. - Event delegation was optimized through "quickIs()" to speed up selector matching, improving delegation performance by 2-4x in most browsers. - Existing event bugs were fixed and the system was overhauled to make events more "hookable" and extensible.
jQuery 1.7 EventsjQuery 1.7 Events
jQuery 1.7 Events
dmethvin
33 slides3.9K views
jQuery Namespace Pattern by Diego Fleury, has 16 slides with 11638 views.Presents the design pattern that improves the organization of plugins and helps reduce the chance of name conflict.
jQuery Namespace PatternjQuery Namespace Pattern
jQuery Namespace Pattern
Diego Fleury
16 slides11.6K views
Matters of State by Kris Wallsmith, has 87 slides with 17011 views.If you have used Facebook's React library, then you are familiar with the concept of application state. React components are, at their core (and as noted in the official documentation), simple state machines. This declarative approach to building a UI may take some adjusting to, but it ultimately simplifies kludgy imperative code into smaller, much more manageable pieces. This pattern of manipulating state and responding to those changes can be implemented to great effect using the Symfony Event Dispatcher. This talk will step through this state-based approach to building an easily maintained and testable PHP application, tease out a few gotchas, and share real-world applications.
Matters of StateMatters of State
Matters of State
Kris Wallsmith
87 slides17K views
Advanced jQuery by sergioafp, has 71 slides with 815 views.The document discusses jQuery features including: - The end() command which can be used to traverse back through filtered elements. - Computed values which allow setting CSS properties with a callback function. - The map() utility which can be used to project arrays and array-like objects. - Custom events which allow decoupling code by triggering named events. - Deferred objects which provide a cleaner way to handle asynchronous callbacks and queues.
Advanced jQueryAdvanced jQuery
Advanced jQuery
sergioafp
71 slides815 views
Prototype & jQuery by Remy Sharp, has 25 slides with 37036 views.A walk through process comparison between Prototype and jQuery to help developers go from one language to another.
Prototype & jQueryPrototype & jQuery
Prototype & jQuery
Remy Sharp
25 slides37K views
Design how your objects talk through mocking by Konstantin Kudryashov, has 103 slides with 6246 views.What should you test with your unit tests? Some people will say that unit behaviour is best tested through it's outcomes. But what if communication between units itself is more important than the results of it? This session will introduce you to two different ways of unit-testing and show you a way to assert your object behaviours through their communications.
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mocking
Konstantin Kudryashov
103 slides6.2K views
Writing Maintainable JavaScript by Andrew Dupont, has 74 slides with 3126 views.Is your web app drowning in a sea of JavaScript? Has your client-side codebase grown from "a snippet here and there" to "more JavaScript than HTML"? Do you find yourself writing one-off snippets instead of generalized components? You're not the only one. Learn about a handful of strategies you can use to keep your JavaScript codebase lean, modular, and flexible. We'll cover all the major pain points — MVC, templates, persisting state, namespacing, graceful error handling, client/server communication, and separation of concerns. And we'll cover how to do all this incrementally so that you don't have to redo everything from scratch.
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScript
Andrew Dupont
74 slides3.1K views
Intro to Advanced JavaScript by ryanstout, has 111 slides with 608 views.This document provides an introduction to advanced JavaScript concepts by Ryan Stout, including an overview of his background and experience, a history of JavaScript, explanations of core JavaScript concepts like types, objects, functions, closures, and prototypes, as well as discussions of tools for debugging, testing frameworks like Jasmine, and frameworks like jQuery, Underscore.js, and CoffeeScript.
Intro to Advanced JavaScriptIntro to Advanced JavaScript
Intro to Advanced JavaScript
ryanstout
111 slides608 views
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mocking
Konstantin Kudryashov
 
Writing Maintainable JavaScript
Writing Maintainable JavaScriptWriting Maintainable JavaScript
Writing Maintainable JavaScript
Andrew Dupont
 
Intro to Advanced JavaScript
Intro to Advanced JavaScriptIntro to Advanced JavaScript
Intro to Advanced JavaScript
ryanstout
 

Similar to Functionality Focused Code Organization (20)

The jQuery Divide
The jQuery DivideThe jQuery Divide
The jQuery Divide
Rebecca Murphey
 
Creating an Uber Clone - Part XVIII - Transcript.pdf
Creating an Uber Clone - Part XVIII - Transcript.pdfCreating an Uber Clone - Part XVIII - Transcript.pdf
Creating an Uber Clone - Part XVIII - Transcript.pdf
ShaiAlmog1
 
jQuery
jQueryjQuery
jQuery
Andrew Homeyer
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs
偉格 高
 
Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3
Carlos Brando
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.js
Jarod Ferguson
 
jQuery secrets
jQuery secretsjQuery secrets
jQuery secrets
Bastian Feder
 
jQuery secrets
jQuery secretsjQuery secrets
jQuery secrets
Bastian Feder
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
smueller_sandsmedia
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
HamletDRC
 
Php functions
Php functionsPhp functions
Php functions
JIGAR MAKHIJA
 
Working With JQuery Part1
Working With JQuery Part1Working With JQuery Part1
Working With JQuery Part1
saydin_soft
 
Security Challenges in Node.js
Security Challenges in Node.jsSecurity Challenges in Node.js
Security Challenges in Node.js
Websecurify
 
JQuery introduction
JQuery introductionJQuery introduction
JQuery introduction
Pradeep Saraswathi
 
Tuga IT 2017 - What's new in C# 7
Tuga IT 2017 - What's new in C# 7Tuga IT 2017 - What's new in C# 7
Tuga IT 2017 - What's new in C# 7
Paulo Morgado
 
Hw09 Hadoop + Clojure
Hw09   Hadoop + ClojureHw09   Hadoop + Clojure
Hw09 Hadoop + Clojure
Cloudera, Inc.
 
Hadoop + Clojure
Hadoop + ClojureHadoop + Clojure
Hadoop + Clojure
elliando dias
 
Monads in javascript
Monads in javascriptMonads in javascript
Monads in javascript
Jana Karceska
 
jQuery: out with the old, in with the new
jQuery: out with the old, in with the newjQuery: out with the old, in with the new
jQuery: out with the old, in with the new
Remy Sharp
 
Gta v savegame
Gta v savegameGta v savegame
Gta v savegame
hozayfa999
 
Creating an Uber Clone - Part XVIII - Transcript.pdf
Creating an Uber Clone - Part XVIII - Transcript.pdfCreating an Uber Clone - Part XVIII - Transcript.pdf
Creating an Uber Clone - Part XVIII - Transcript.pdf
ShaiAlmog1
 
Functional programming using underscorejs
Functional programming using underscorejsFunctional programming using underscorejs
Functional programming using underscorejs
偉格 高
 
Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3Desenvolvendo Aplicativos Sociais com Rails 3
Desenvolvendo Aplicativos Sociais com Rails 3
Carlos Brando
 
Taming that client side mess with Backbone.js
Taming that client side mess with Backbone.jsTaming that client side mess with Backbone.js
Taming that client side mess with Backbone.js
Jarod Ferguson
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
smueller_sandsmedia
 
Ast transformations
Ast transformationsAst transformations
Ast transformations
HamletDRC
 
Working With JQuery Part1
Working With JQuery Part1Working With JQuery Part1
Working With JQuery Part1
saydin_soft
 
Security Challenges in Node.js
Security Challenges in Node.jsSecurity Challenges in Node.js
Security Challenges in Node.js
Websecurify
 
Tuga IT 2017 - What's new in C# 7
Tuga IT 2017 - What's new in C# 7Tuga IT 2017 - What's new in C# 7
Tuga IT 2017 - What's new in C# 7
Paulo Morgado
 
Monads in javascript
Monads in javascriptMonads in javascript
Monads in javascript
Jana Karceska
 
jQuery: out with the old, in with the new
jQuery: out with the old, in with the newjQuery: out with the old, in with the new
jQuery: out with the old, in with the new
Remy Sharp
 
Gta v savegame
Gta v savegameGta v savegame
Gta v savegame
hozayfa999
 
Ad

More from Rebecca Murphey (6)

Getting Started with Mulberry
Getting Started with MulberryGetting Started with Mulberry
Getting Started with Mulberry
Rebecca Murphey
 
Introducing Mulberry
Introducing MulberryIntroducing Mulberry
Introducing Mulberry
Rebecca Murphey
 
DojoConf: Building Large Apps
DojoConf: Building Large AppsDojoConf: Building Large Apps
DojoConf: Building Large Apps
Rebecca Murphey
 
Lessons from-a-rewrite-gotham
Lessons from-a-rewrite-gothamLessons from-a-rewrite-gotham
Lessons from-a-rewrite-gotham
Rebecca Murphey
 
Lessons from a Rewrite
Lessons from a RewriteLessons from a Rewrite
Lessons from a Rewrite
Rebecca Murphey
 
Modern JavaScript
Modern JavaScriptModern JavaScript
Modern JavaScript
Rebecca Murphey
 
Getting Started with Mulberry
Getting Started with MulberryGetting Started with Mulberry
Getting Started with Mulberry
Rebecca Murphey
 
DojoConf: Building Large Apps
DojoConf: Building Large AppsDojoConf: Building Large Apps
DojoConf: Building Large Apps
Rebecca Murphey
 
Lessons from-a-rewrite-gotham
Lessons from-a-rewrite-gothamLessons from-a-rewrite-gotham
Lessons from-a-rewrite-gotham
Rebecca Murphey
 
Ad

Recently uploaded (20)

Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
Web and Graphics Designing Training in Rajpura
Web and Graphics Designing Training in RajpuraWeb and Graphics Designing Training in Rajpura
Web and Graphics Designing Training in Rajpura
Erginous Technology
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Top 10 IT Help Desk Outsourcing Services
Top 10 IT Help Desk Outsourcing ServicesTop 10 IT Help Desk Outsourcing Services
Top 10 IT Help Desk Outsourcing Services
Infrassist Technologies Pvt. Ltd.
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Mastering Advance Window Functions in SQL.pdf
Mastering Advance Window Functions in SQL.pdfMastering Advance Window Functions in SQL.pdf
Mastering Advance Window Functions in SQL.pdf
Spiral Mantra
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Vaibhav Gupta BAML: AI work flows without Hallucinations
Vaibhav Gupta BAML: AI work flows without HallucinationsVaibhav Gupta BAML: AI work flows without Hallucinations
Vaibhav Gupta BAML: AI work flows without Hallucinations
john409870
 
MINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PRMINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PR
MIND CTI
 
Build 3D Animated Safety Induction - Tech EHS
Build 3D Animated Safety Induction - Tech EHSBuild 3D Animated Safety Induction - Tech EHS
Build 3D Animated Safety Induction - Tech EHS
TECH EHS Solution
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 
Cybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure ADCybersecurity Identity and Access Solutions using Azure AD
Cybersecurity Identity and Access Solutions using Azure AD
VICTOR MAESTRE RAMIREZ
 
Linux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdfLinux Professional Institute LPIC-1 Exam.pdf
Linux Professional Institute LPIC-1 Exam.pdf
RHCSA Guru
 
Rusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond SparkRusty Waters: Elevating Lakehouses Beyond Spark
Rusty Waters: Elevating Lakehouses Beyond Spark
carlyakerly1
 
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxIncreasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptx
Anoop Ashok
 
Web and Graphics Designing Training in Rajpura
Web and Graphics Designing Training in RajpuraWeb and Graphics Designing Training in Rajpura
Web and Graphics Designing Training in Rajpura
Erginous Technology
 
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven InsightsAndrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell: Transforming Business Strategy Through Data-Driven Insights
Andrew Marnell
 
Big Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur MorganBig Data Analytics Quick Research Guide by Arthur Morgan
Big Data Analytics Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In FranceManifest Pre-Seed Update | A Humanoid OEM Deeptech In France
Manifest Pre-Seed Update | A Humanoid OEM Deeptech In France
chb3
 
Build Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For DevsBuild Your Own Copilot & Agents For Devs
Build Your Own Copilot & Agents For Devs
Brian McKeiver
 
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxSpecial Meetup Edition - TDX Bengaluru Meetup #52.pptx
Special Meetup Edition - TDX Bengaluru Meetup #52.pptx
shyamraj55
 
HCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser EnvironmentsHCL Nomad Web – Best Practices and Managing Multiuser Environments
HCL Nomad Web – Best Practices and Managing Multiuser Environments
panagenda
 
Mastering Advance Window Functions in SQL.pdf
Mastering Advance Window Functions in SQL.pdfMastering Advance Window Functions in SQL.pdf
Mastering Advance Window Functions in SQL.pdf
Spiral Mantra
 
Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.Greenhouse_Monitoring_Presentation.pptx.
Greenhouse_Monitoring_Presentation.pptx.
hpbmnnxrvb
 
Quantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur MorganQuantum Computing Quick Research Guide by Arthur Morgan
Quantum Computing Quick Research Guide by Arthur Morgan
Arthur Morgan
 
Vaibhav Gupta BAML: AI work flows without Hallucinations
Vaibhav Gupta BAML: AI work flows without HallucinationsVaibhav Gupta BAML: AI work flows without Hallucinations
Vaibhav Gupta BAML: AI work flows without Hallucinations
john409870
 
MINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PRMINDCTI revenue release Quarter 1 2025 PR
MINDCTI revenue release Quarter 1 2025 PR
MIND CTI
 
Build 3D Animated Safety Induction - Tech EHS
Build 3D Animated Safety Induction - Tech EHSBuild 3D Animated Safety Induction - Tech EHS
Build 3D Animated Safety Induction - Tech EHS
TECH EHS Solution
 
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...
TrustArc
 
How analogue intelligence complements AI
How analogue intelligence complements AIHow analogue intelligence complements AI
How analogue intelligence complements AI
Paul Rowe
 

Functionality Focused Code Organization