[MUSIC] Now that we've talked about software application frameworks, I'd like to talk with you about web application frameworks. In other words, software frameworks that enable you to build full stack web applications. That's what's of interest to us in this course. An application framework is designed to support the development of web applications, so this is just a software framework for developing web applications. And it generally includes a number of tools that help you. For example, there's generally support for connecting the web app to a database back end. In addition, there might be support for updating the schema associated with this database whenever the data model associated with the web app changes. Often there's a templating framework for generating dynamic web content. And by providing a template, what you get is a consistent look and feel for every page in your web application that can be automatically created. In addition, by populating these web pages dynamically, that is, by reading data from the database at the time the page is being built, what is displayed in the browser can be kept consistent with what's in the database. There's generally HTTP session management and some middleware support. The most common way of tracking customers as they use a website is to assign them a unique session ID, and each user's browser then transmits this session ID back to the web server with every request that is made from the browser. This is how you'll keep track of who is who when you have multiple users interacting with your web application. Web application frameworks also generally include a default web server and other malware components that just work out of the box. In other words, you don't have to spend a lot of programmer time trying to set them up and configure them. Many web application frameworks provide code generators for creating the scaffolding of a web application. This often includes the creation of tests for testing the web application as well, to make sure it's performing the correct operations. We'll talk a lot more about testing in a later course. At this point, I just want to mention the importance of testing and the fact that modern web applications should support a continuous testing framework because that's how software is developed nowadays. In addition, a web application might include support for internationalizing your web app so that you can look at the browser a person is using and determine their language and deliver content accordingly. It might have support for securing your web app or for deploying it. I mentioned that many web applications frameworks include a scaffolding system that allows you to easily generate a model view controller framework that also includes something called a REST API. We'll talk more about the model view controller design pattern later in this lesson. And, I'll talk more about the REST API in a later module. Here's a quote from the inventor of Rails about programmer efficiency. It's David Heinemeier Hansson, and he says that the point is that the cost per request is plummeting, but the cost of programming is not. Thus, we find ways to trade efficiency in runtime for efficiency in thought time in order to make the development of applications cheaper. I believe we've long since entered an age where simplicity of development and maintenance is where the real value lies. So this is getting at something that I continue to bring up. The programmer's time is incredibly valuable. Programmers nowadays make a lot of money, so it's more important to save on their time than to squeeze out a little bit more efficiency In program running time. And this is the philosophy behind most agile web development processes nowadays and they're embedded throughout Rails. I'd like to talk about some other popular web application frameworks so you can get a sense of what's going on in this space in general, in this space of web application frameworks. All of the frameworks that I'll discuss are provided as open-source software. So to understand the specifics of how you can use this software, just take a look at the license. These licenses generally describe how you have to provide attribution notices with any software you might develop that's based upon the framework. Each of these frameworks, by the way, uses the model view controller design pattern that we'll discuss later in this lesson. Now Ruby on Rails is the one we're going to use. The Rails framework is based on Ruby. We've already discussed this when we discussed the background of Rails. The only other thing I want to mention is that most of the other frameworks that I'll talk about next took their inspiration from Rails. And by the way, in 2016, it was estimated that there were over 1.2 million websites that were using Rails. Another very popular framework is Play. And you can develop Play code using either Java or Scala. And you might be interested to know that this is the framework that Coursera is using. ASP.NET MVC was created by Microsoft and is provided as an extension to their ASP.NET development environment. And yes, it's also open-source. Django is a Python framework. They mention that Pinterest and Instagram and Bit Bucket have all used them. Another popular Ruby based framework is Sinatra. This is an extremely lightweight model view controller framework, and it has been used by LinkedIn, BBC, and a few others. In fact many people who use Ruby on Rails also use Sinatra. If you've got a system that you're trying to build that doesn't have a very intensive backend database, sometimes Sinatra's a popular choice. Indeed it's common for many companies to use multiple frameworks. They'll mix and match some of the frameworks that I'm showing you here. Another PHP-based framework is Symfony. And then the last one I want to mention is Sails.js. Now this framework is built using the Node.js framework and Node.js is a runtime environment for developing server side web applications. You write JavaScript applications that run within this environment. There are many frameworks currently being built up around this Node.js environment, and Sails.js is just one of them. You're likely to see many more of the Notde.js frameworks popping up over time. If you go to the websites for each of these frameworks, you'll find plenty of documentation and code examples and I encourage you to do that. Let's take a look. Here's the main Ruby on Rails website, and you'll see that they have guides and another things, blogs that you can look at. The Play framework again describes how to use it. In many cases these websites will talk about who's using their technology. This is Microsoft's ASP.NET MVC. Here's Django. Sinatra, again documentation if you want to figure out how to use it. Symfony framework. And here's the sails.js website, again with documentation and plenty of links to help you get started using the framework. I also wanted to mention WordPress, Drupal and Joomla! These are content management systems, so not really web application frameworks. You can use these to create websites. But generally it's through an application, you're not really creating the web application architecture per se. So they're a web application, not a web application framework. If you need to just display some simple webpages, they're good for that. But you can't use them to build the entire infrastructure behind a sophisticated web application.