Configure player

Close

WWDC Index does not host video files

If you have access to video files, you can configure a URL pattern to be used in a video player.

URL pattern

preview

Use any of these variables in your URL pattern, the pattern is stored in your browsers' local storage.

$id
ID of session: wwdc2005-602
$eventId
ID of event: wwdc2005
$eventContentId
ID of session without event part: 602
$eventShortId
Shortened ID of event: wwdc05
$year
Year of session: 2005
$extension
Extension of original filename: mov
$filenameAlmostEvery
Filename from "(Almost) Every..." gist: ...

WWDC05 • Session 602

A.M.P. on Mac OS X

Enterprise IT • 43:57

Learn how to install, configure, and develop a web application using Apache, MySQL, and Perl, Python, or PHP on Mac OS X. Then learn how easy it is to deploy web applications to Mac OS X Server and other platforms with little or no modification.

Speakers: John Montbriand, Marc Liyanage

Unlisted on Apple Developer site

Transcript

This transcript was generated using Whisper, it has known transcription errors. We are working on an improved version.

Good morning, everybody. Welcome to AMP on Mac OS X. Thank you for coming to our session this morning. I'm John Montbriand. I work in the Developer Technical Support Division at Apple Computer. I take care of the technical notes, the sample code, the Q&A collections on our website, and a lot of these tools I get to use during my job, and I'll be talking to you about them today.

This is Nathan Dentonfast. He's graciously volunteered to come and run the demos along with you. There is going to be some typing involved in this session, and I'm going to watch Nathan as he goes through to give you appropriate time to do the things that you need to do to accomplish the things you need to do in this session. And I'll use that as a gauge for timing things. So we're going to talk about today. We're going to talk about Apache. We're going to talk about MySQL, PHP, and Tiger. We're going to talk about what we install by default.

On the client version of Tiger. We're not going to talk about the server version of Tiger today. We're going to talk about extras that you can install on your own, and we're going to talk about Apache, we're going to turn it on. We're going to show you how to do that. We're going to show you how to edit the configuration for Apache.

Then we're going to show you how to edit the configuration for PHP, how to enable that. And we have Marc Liyanage here. And many of you may be familiar with his website. He has a lot of downloads, installers, single clickable package installers for the latest versions of PHP, MySQL, and PostgreSQL.

He has some really exciting demos to show you that we'll be showing you later. And for the last hands-on part, we're going to show you how to set up several virtual hosts on your own laptop computer for local testing of websites and whatnot. And we'll end off with some Q&A.

So in this session, we're going to be using these applications. You don't have to be a real expert in using Xcode to follow along in this session. We're just going to be using it as a text editor. And the hands-on parts are going to be with these guided hands-on slide sections like shown here. And I'm going to step you through the different commands that we're going to do. For example, here we're saying open apple.com, and then click on the developer link in Safari.

Moving along, the next thing I want to point out is there are no downloadables for this session in particular. We don't have any sample code, but we are going to talk about a lot of different installers in this session. And you'll probably be tempted to download them right away, but please be aware that if you download them right away during this session, you'll probably crash the network and nobody will be able to use the network. So please wait until after before you download any installers. So, what's installed on Mac OS X? Apache 1.3.33. We have PHP 4.3.1. That's an older version, but Marc Liyanage has an updater for PHP 5.0 on his website. He'll be demoing that later.

We have mod.php installed, but it's not enabled in Apache. We're going to show you how to turn on mod.php later so you can have PHP running on your computer in your Apache. We have Perl 5.84. Mod Perl is installed, but you need to enable that specifically in your HTTP configuration to use it on your Apache on your local machine if you want to use that. Python 2.35 is installed.

Ruby is installed. We have 1.81. We have an update to 1.82 on Darwin Ports. I'll be showing these links later on, so don't worry about recording them now. Now, the extras that you can install on your machine. We have MySQL. Because we're talking about the client OS, we don't come with, on the client version of Mac OS Tiger with MySQL pre-installed. This is something you'd go and install.

There are some really good installer packages that you can just double-click and run on the MySQL website. There's one thing that you'd want to be aware of. If you want to try the latest MySQL with the installed version of PHP, it's not going to work. So what you should probably do, if you want to use the installed version of PHP, then use 4.0. Because 4.1, there's a password hash and compatibility issue. But if you want to use the latest version of PHP and the latest version of MySQL... Of course, you want to go to Mark's website and use his installers.

PostgreSQL is another option. There is an installer on Marc's site that we'll be talking about later, or he might mention. If you're interested in upgrading to a more complete version of SQL or you're just interested in Postgre, that's available for you. So, this is the first hands-on part. We're going to do Apache and Tiger, give you a taste of what our hands-on thing is going to be like.

First thing we're going to do is we're going to try it out. This is Apache's web server link, and they have a whole website set up there. And let's turn on Apache. First thing you need to do is go to your system preferences control panel and select the sharing icon.

So the first thing we do is we select sharing and we turn on personal web sharing. This here turns on Apache on your machine. You don't have to do anything else once you've done that. As soon as you've turned on Apache, you'll notice on the bottom of the screen here, it will show you your network address for your Apache. If you wanted to let somebody else on the same network as you access the web pages that you're hosting on your laptop, say, you can give them these addresses and they'll be able to browse your web pages on your local machine.

So we've turned on Apache, and Nathan's going to demo. Can we switch over to demo one? So here's turning on Apache and in the system preferences. So how's everybody doing with our hands-on session so far? Are we all okay? So here's turning on Apache and in the system preferences. We're not going to actually use the network during this session. So we can switch back to slides.

Oh, if you can't see the address on the bottom, that's okay. That's just because your machine doesn't have a network connection at the current time. And what that will mean is you can still use Apache on your machine. It's up and running, but you just can't use it on the network.

Once you're connected to a network, that address will show up and you can advertise that or email it to people if you like. So the next thing we're going to do is we're going to talk about the Apache Control. The Apache Control command line tool is the other way that you can control Apache on your machine.

The statements I'm showing here is Apache Control status. You can try that in your terminal program and that will show you the status of Apache. Or here's the man page. You don't have to use this command right now. We'll be using this command later in this presentation to show you how to use it to restart Apache.

So let's try out Apache. We just turned it on. You can run it on your laptop right now if you followed me in the System Preferences Control Panel. And we're going to switch over to Demo 1. And we're going to browse local host. So on your machine, you'll find that we've already preloaded Apache and we've preloaded the documentation for Apache in the local host address and the default address for Apache. So we can switch back to slides.

The next thing we're going to do is we're going to take a look at where the configuration files for Apache are on your machine. They're located in the directories etc.httpd.http.configuration and etc.httpd. We also have, there's a group of files that are browsed, and we're going to take advantage of this in the users directory in the http configuration folder. Now, if you wanted to take a look at these files, you could follow the hands-on instructions I provided up here. I'm not going to get Nathan to do that today. But you can open the etc.http directory. Maybe I'll follow you and you can do that.

[Transcript missing]

What did we do here? We went through, we turned on Apache, we located the configuration files, we let you see where they are. The next thing we're going to do is we're going to turn on PHP. So if you're browsing your local web files on your computer, you can use and run PHP programs in your web pages running on your computer. So the first thing we're going to do, it's not turned on by default, so we're going to have to go and edit the HTTP configuration file.

So the first thing we're going to do before we go and edit the HTTP configuration file is we're going to back it up. And the steps below show you how to do that. You need to run these in the terminal program. And if you're typing along, I'm following Nathan here, and he's doing these commands here. The first command will set the current execution directory for running commands to the HTTP configuration directory.

The second command here is a pseudo command. That means run this command as system user. And all we're going to do here is copy the configuration file to a backup. It's going to ask you for your system password the first time through, because this is a system user command. You need to have system permissions to run this command. The second last command is we're going to set the permissions so we can go in and edit our HTTP configuration file.

Okay, moving along. The next thing we're going to do is we're going to edit the HTTP configuration file. So the first thing you do is you type this command into the terminal. What that's... Okay, I'll slow down. Sorry about that. We can go back to that. How about I give, if I go too fast, just put up your hand please for the typing, and then I'll know. He'll type a little slower.

Okay, so the next thing we're going to do is we're going to edit the HTTP configuration file. The first thing we do is type this command into the terminal. What this is going to do is it's going to tell the finder, it's going to send an event over to the finder asking it to open the folder so we can look at all the icons in the HTTP configuration folder. The reason we're doing this in the terminal is because normally this folder is hidden from the user to prevent unnecessary editing.

The next thing we're going to do is we're going to switch over to the finder and we're going to look through the configuration directory that we just opened. And we're going to drag and drop the HTTP configuration file into Xcode. So everybody caught up with the typing there? We're going to use Xcode here, and we've got a demo set up for this part. So let's switch over to demo one. We're going to drag and drop. OK, let's go over to the Finder.

You can use any text editor you want here. The main thing is it shouldn't alter the line endings of the file. If you make a mistake here, it's okay. We've switched over to Xcode here. You can see that there's a lot of information in this file. There's a lot of really valuable comments that will explain different parts. What we're looking for in particular here is the lines starting with the module PHP. If you just search for the word PHP, you'll find these lines. We can switch back to slides.

So what we're going to do in that file is we're going to find these lines. And the first two lines here is load module PHP 4 and the add module PHP 4. All we're going to do here is remove the little hash marks from the beginning of those two lines. And I'll watch Nathan here as he goes through and scrolls through manually and changes those.

Okay, and then the last thing you do is save and close. Everybody caught up with me there? Go back here. We're looking for... What we're doing is we're turning on PHP. We're enabling PHP in this section. And all we're doing is we're uncommenting these lines. The first one, load module, PHP 4 module, what that will do is load the module into PHP.

You'll notice that there's separate load modules and add modules. The add module will actually activate the module. Once you've loaded the module, it doesn't actually become active. It's kind of inside of Apache until you run the add module command. So you can selectively turn it on and off for different websites on your machine if you like.

The next thing we're going to do is we're going to activate the changes. We just edited the configuration file, saved it to disk, and closed it. And the next thing we're going to do is activate the changes. So the first, the reason we need to, we need to do this to, we need to restart Apache. We've changed the configuration file, we need to force Apache to reload it. So the first thing we're going to do is we're going to set the, in the terminal, we're going to set the execution directory for our commands to the Apache configuration directory.

We can ask questions at the end. We'll have time for Q&A then. OK. The next thing we're going to want to do is we're going to set the permissions back on the configuration file to what they originally were.

[Transcript missing]

Okay, so what did we just do? We just turned on mod.php and we edited the Apache configuration file to enable that and we enabled PHP.

Our next section, we're going to explore and configure PHP in Tiger. We're going to take a look at what's installed. We have 4.3.1. They have their website on-- well, that's their address up there. Let's try it out. If you want to try PHP in Tiger, you can type in the commands above here. If you've followed along so far, we've turned on Apache, we've turned on PHP.

The commands up here will allow you to create your own document that we can try out our PHP on our machine. The first line here, we're setting the execution directory to the default configuration web server directory on our machine. The second line here, we're writing out a PHP file. It's a very simple program. As you can see there, we're just echoing to the PHP in the current directory. Our PHP program is actually this center little section in here.

The next thing we're going to do is we're going to go to Safari and we're going to open this link. If you set up everything correctly, we'll have the PHP info page that we can browse. I believe that's already pre-installed, isn't it? Then we're going to browse the PHP page. So everybody can probably see the PHP info page right now.

We're going to switch over for a demo here, but we don't have the password for this machine, so we can't do that right now. So we're going to switch ahead. To editing the configuration files for PHP. The configuration files for PHP are in the ETC directory. There's a file named phpini, and there's the phpini.default.

And if you want to take a look at where these files are, you can type openetc in the terminal, and then you can browse the etc directory. You want to locate the ini default file. You'll notice that the PHP ini file is not there. Basically, all the settings in the default file are the default settings that we've compiled into PHP.

If you want to make your own custom settings, what you'll do is you'll make a duplicate copy of the ini default file into PHP ini, and go and edit that. And we're going to do exactly that in the next part. First thing we're going to do is we're going to create a new PHP ini default file.

Oh, OK. Can we switch over to-- this is our earlier demo that we found the password. Can we switch over to demo one? So this is the PHP configuration file, or INI file, that we created. We're showing PHP info about the PHP installed on this machine here. Different packages, what's turned on, what's enabled, what's not enabled. So we can switch back to slides.

So we're going to create our own custom PHP configuration file. And the first thing we're going to do here, we're going to set our execution directory to etc. The next command we're going to make a duplicate copy of the PHP INI default file, and we're going to name it PHP INI.

What this command does is it has a "-p" option, so we're going to preserve all the options such as the ownership, the permissions, things like that. Then the very last statement here, we're going to open up the read/write permissions so we can go in and edit that file and make changes.

So the next thing we're going to do is we're going to go in and we're going to open to edit the PHP INI file. First thing we're going to do is type in the terminal openetc. That will open up a window in the finder so we can browse and locate.

We're going to look around in the finder window to locate our PHP INI file. And the next thing we're going to do is we're going to drop PHP INI into Xcode. We have a demo of that. Can we switch over to demo one? So here we've located INI default, or INI, and we're going to drop that into Xcode. Inside of this file there's a lot of comments, so you can learn a lot about what the different configuration options mean. We'll switch back over to slides, please.

Now, the ones I wanted to point out today are these options. They're ones that I've changed during my work, and they're probably ones that you might want to take a look at. The memory limit of 8 megabytes is, well, for some processing tasks, it might be kind of small.

You might want to bump that up, depending on what your requirements are. If you're finding your tasks are halting because they're running out of memory, then this is the one you want to go in and modify. The next ones, Magic Quotes, GPC. I like to turn this one off.

I think on a number of configurations, including ours, it's turned on by default. This can be a major source of confusion if you're just starting working with PHP. What it does is it will put little backslashes into all the data your script receives as from cookies and from post and get data. So you probably want to turn this off.

Some people, they get mistaken and they think, "Oh, this must be MySQL that's inserting these slashes," but actually it's happening because of this option being turned on. The next thing you might want to change is the maximum file size. If you're uploading files and your testing software allows you to upload files and they're larger than two megabytes, you'll probably want to adjust this limit to something larger.

And the last thing you want to do is save and close this file. So has everybody caught up with me here? You don't have to go change these settings, I just wanted to make you aware of them. So in case you're working with PHP or trying it out, you can go ahead and change those.

The next thing we want to do is we want to activate the changes. And basically to do that, the first thing we're going to do is we're going to set the execution directory to etc. Then we're going to set the permissions back to what they were before we started.

It will work otherwise. I like to just keep things the way they're supposed to be. I think it's also a security hole to leave the permissions open so others can go in and write to your files and configuration files on your machine. It's a personal preference of yours. I'm being a little bit fastidious here, but that's up to you. The last statement we're doing here is we're restarting Apache using the Apache control statement that I mentioned earlier. This does exactly the same thing as turning on and off the checkbox for personal web sharing. You're right.

So we're going to test it out. So earlier, you would have entered in the PHP info script in the local host, which we weren't able to do. Or no, we were able to do that, actually. And so to test this out and to look at our new PHP options, you can open that script again using this URL. And then you can browse the PHP page in Safari.

Now, what did we just do here? We located and showed you where the PHP file initialization files are, and we edited the configuration files. Now there are some PHP installers we wanted to show you. I have Marc Liyanage here. If you're familiar or you're a web developer working with PHP, you're probably familiar with his website. And he's going to show you some of the more recent installers that he has available. So here's Marc.

Thank you, John. Some of you might have used my PHP installer packages, the one I published on my website. And I basically, I maintain these so that PHP web developers don't have to mess with compiling, linking, make files, all of that stuff. The difference between my modules and the one that are included in Tiger is that mine are always tracking the official PHP releases.

So whenever the PHP group releases a new version of PHP 4.0, they're always tracking the official PHP releases. So whenever the PHP group releases a new version of PHP 4.0, they're always tracking the official PHP releases. So whenever the PHP group releases a new version of PHP 4.0 or PHP 5.0, I'm updating it as soon as possible, usually within a few days.

And these updates sometimes bring new features and sometimes they bring pretty important security fixes. Another difference of my modules is that they come with a lot of extensions. Extensions extend the PHP language with new features, for example, graphics processing, XML processing, databases, additional types of databases, things like that. So the website, if you could switch to Demo Machine 2, please.

This is what the website looks like. There are two things I want to show you here, the extensions that are added. The first thing I want to show you is the available PHP packages here. You can see that there is PHP 5 and PHP 4. Both modules are available for Apache 1 and Apache 2. So there is a big mix of modules, like a matrix, and you can choose whatever you want. Usually I say you should use PHP 5 for all new development, because PHP 5 added interesting object-oriented features. Use PHP 4 if you have to.

The other thing on a website that might be very interesting for you is the user support forums up here. If you go to these forums, There are lots of people in the PHP forum where you can get support, ask questions, and people are quite helpful there. So if you could switch back to slides, please.

As I said, you have to choose one of the modules. Just one of the things you might need to produce PDF files. My module includes the PDF lib extensions, which allows you to create PDF documents. And there you have two versions. You have a commercial version if you bought a license key, and you have a free version.

So that's another thing you need to choose. So I guess if you want to pick a module, just look through the instructions on the website, and you'll find out pretty quickly what's the right one for you. The installation packages when you download it. This is what you get. If you could switch back to demo 2, please.

This is what you get if you download an installation package. It's just the regular installation stuff you know from Apple and third-party companies. What this package does, it does two things. First, it installs all of the software onto your machine into a separate directory. What this also means is it doesn't mess with any of Apple's stuff. So there's always a way to cleanly remove these packages and revert to what Apple is shipping.

The second thing the installation package does, it enables the module in Apache configuration. So what John told you before, how to basically manipulate the Apache configuration file, that is what the package does on itself. Can we go back to slides, please?

[Transcript missing]

One is there's an extension in PHP called GD that allows you to create bitmap images. I created one that allows you to create Aqua buttons. Do some text here. Pick a color. And you see it renders the image. It's a regular PNG image at the end. You can open it up.

This is pretty useful, for example, if you have a website and you would like to create headings and you have to use a corporate font. It has to be exactly this font, so you can render it as bitmaps. You can just, by changing the image links in your HTML code, basically, you can change it, and a new bitmap image will be rendered on the fly. This can be pretty useful, and you can get pretty fancy with the graphic effects.

You see this one has like the glossy look, it has shadows and everything, which is pretty hard to reproduce using just HTML. The other thing I'm going to show you is also a graphic example. It's generating PDFs.

[Transcript missing]

and Zoom in a bit. You can see that it really is vector imagery, it's not bitmaps. And so this allows you to create high quality print output from your websites.

Thank you, John. So right about now, maybe everybody's thinking about going to his website. But please don't go down and load his installers just yet, so people can use the network. Can we switch back to slides, please? So we're going to go through now a hands-on session for setting up and configuring some virtual websites on your computer. We're just going to set up one virtual website and a default one. And what this will allow you to do is to do local testing on your computer rather than testing on your main server on the web. There's some great reasons for doing that.

You know, you get a fast turnaround time. You're running locally, so you don't have to run it across the network, copy files to a server. You can do your own testing on your own laptop. You don't even need to be connected to the network to do testing of Apache and your website on your computer.

So we're going to simulate a real-world server on your computer, and we're going to give it an address like WWDC. And we're going to put the documents for that into the library web server document slash WWDC folder. There's two parts to this whole thing. The first thing is setting up a name for the virtual host. And the second part is setting up the Apache servers so it knows how to recognize the names and map the requests over to the right directories.

I'm going to keep this little guide on the screen here so you can follow along and see where we are in this part. It's kind of a complicated part of this lecture. We'll go through it all pretty slowly. The first thing we're going to do is we're going to back up The first thing we're going to do is we're going to backup the host file. To do that, we're going to set the current directory to ETC.

And then we're going to run this command to make a duplicate of the host file on your machine. The host file is used, for the most part, on a Mac OS X machine to look up names and resolve names. But with NetInfo and other parts of the operating system, it works together with them to do that. So the first thing we're going to do is back it up. The next thing we're going to do is we're going to change the permissions so we can go in and edit that file.

Has everybody caught up with me? So the next thing we're going to do is we're going to open the host file. And to do that, we're going to type this command into the terminal, openetc. And that's going to open a window in the finder where we can go and fish around and find the hosts file. You'll find a whole bunch of other files in there. I'm not going to talk about those today. We're going to look through the file. We're going to find hosts and drag and drop that into Xcode.

and once you have that file open for editing, we're going to look for the line that has local host in it. And we're going to change that to

[Transcript missing]

No white space, just as shown up there. You can use spaces or tabs. Tabs or spaces, they'll both work. As long as it's all on the same line and it looks pretty much like what I have up there, you'll be fine.

Does anybody else need this for much longer? Is that okay? The next thing we're going to do is we're going to activate the changes. Now, here, we don't have to restart anything for these changes to come into place. What we do need to do is I just like to put the permissions back to the way they were before because of security reasons, and I just consider it a good practice. So the first thing we're going to do is set the execution directory to etc. We're going to change the permissions back to the way they were. We're basically going to exclude others from writing to this file.

The next thing we're going to do, and this is the long part. I'm very sorry it's very long. I thought it would be shorter. But this is the Apache configuration to add to virtual hosts. The first line here is going to write out a file. And we're using the sudo t command. I'm not going to get into specifics of why I'm doing that.

If you want to use bbedit to write out a file, all you have to do is save it in the same directory. If you know how to do that, great. Otherwise, you can just type along. What you need to do here is basically type in everything you see up here.

The first line is going to create the file, this part here. Name virtual host tells Apache, OK, we're using virtual hosting, and we're going to match any name with a star and use that for virtual host names. We're going to do lookup with that. The first section is a virtual host section. This is the default virtual host. If the name isn't recognized by the system, it's going to default and use this as the default virtual host. The second section is actually our WWDC example virtual host that we're going to be using.

Now, to go through the specifics here, the first virtual host is bracketed by very HTML-looking tags that contain all the configuration information about the host. If you read up on the Apache configuration tags, you can put almost anything for configuring Apache into that section, such as server-side includes statements, enabling PHP processing inside of HTML pages.

So the first part of this, this is the name of our local host and this is the directory

[Transcript missing]

The second virtual host block is the one that we're actually interested in here. This is going to be our configuration for our local host, or our WWDC example host.

And that's enclosed in a virtual host block. And just like before, you can add all the configuration statements that you normally would for a virtual host or for any web server in there. The first line is our name, WWDC, and the second line is our document directory where we're going to place our HTML files. Yeah, that's in the next part.

Is that all done? So if you're typing this into the terminal, the very last thing to do to save it is hold down the Control key or C-N-T-R-L, not the Apple key, and type the letter D or C. And that will basically end your input. Is everybody caught up with me or do I need to wait a little while longer? Okay, we'll give it another two minutes, I'll bet.

Now, you can come and talk to me later if you need details about this. I'm just going to move on. If that's OK, we've got most of everybody.

[Transcript missing]

I put the wrong directory in there. We're going to have to type library web server documents WWDC. I'm very sorry about that. And the next thing we're going to have to do is restart Apache.

[Transcript missing]

Thank you. Thank you. Okay. So, the first thing we're going to do is we're going to create the directory that we just made reference to. We're going to pair the name WWDC together with a directory on our machine. So, this is where we create the directory.

The next thing we're going to do is we're going to restart Apache so it reads in our configuration file. Now, if you made a typing mistake, you'll notice that Apache is going to give you an error message, and it's going to suggest that you run the config test. And that will give you more information about exactly where the error is. You can go and edit that. After the session, I have some slides showing you how to undo those changes if you need to.

Now we can test our local website. The first thing we're going to do is we're going to create a file to do the testing with inside of our folder that we just created. So what we're going to do there is we're going to go in the terminal and we're going to set the execution directory to web server WWDC. And then we're going to do the same command as before, basically, to save a small PHP script into a file called phpinfo.php.

The next thing we're going to do is we're going to switch over to Safari, and we're going to enter the address http://.

[Transcript missing]

And here we are. We're looking at WWDC. I'll go back in a second here. So there it is running on our machine, if nothing less, just to prove that it works. Can we go back to slides? This is the slide here. OK. I'll just review. What we're doing here is we're setting the execution directory for our commands that we're typing to the new directory that we just-- or to the new directory we just created for our host.

The next command, what we're doing is we're saving a new web page to that directory that we're going to display in Safari in the next command. This command here, we're displaying that in Safari, and we're just taking a look at that. So we already did the hands-on part, so I'm going to skip past that.

So what do we do? We created some virtual host aliases on our machine, and we edited the configuration file for that. That's the bare minimum that you'd want to have for doing local testing. I really like the idea. It's much better than trying to do your testing on a live server that many thousands of people are using.

So, M.P. on Mac OS X. Thank you very much for coming. We talked about MySQL, PHP. We talked about what's installed. We went over some configuration on Apache. We talked about setting up PHP. We talked about Marc Liyanage and his website. He has installers for the latest versions of his software. He does a good job of keeping that up. And we went over a configuration for a local website for doing testing on your machine. Here's some URLs that we talked about during this session.