Welcome back. In this lesson, you're going to learn a powerful new programming construct, an indefinite loop. You'll also learn about another Iterable from the edu.duke library. You've already solved problems using the FileResource and URLResource classes from the edu.duke library. Using Iterables made it possible to repeatedly access data stored in a file on your computer or via a URL from the World Wide Web. You will use this concept of repetition to find all the genes in a strand of DNA, a problem that genome scientists do as part of their work, and a problem that models finding all links in a webpage, or all the YouTube videos you might want to watch about cats or dragons or anything else. The key idea here is that you'll use the algorithm from a previous lesson that found one gene in a strand of DNA, an algorithm you've tested and have confidence in. You'll repeatedly apply this algorithm over the entire strand of DNA to find all genes, not just one. You'll also learn about a new Iterable that lets you store intermediate results. Instead of printing all the genes you find, you'll be able to store them so that you can look for particular genes after you found strings that could be genes, for example. By storing the results of a gene search or other kinds of search, you can write separate methods to process the genes rather than including the processing with the finding. This separation of concerns find genes, process genes. Filter any of those genes that have specific characteristics, is a hallmark of good software engineering. Writing a method to do one thing rather than doing several things. This separation allows you to reuse code more easily and to develop a code more easily. The storage you use will be an Iterable you can add to, while the program you write is running. To be more concrete, you're going to solve a variation of a problem you solved once before. The problem of finding a gene in a strand of DNA. Genes are found in a strand of DNA at different sites within the DNA. In a previous lesson, you developed code for finding one gene like the region shown in red here. You found this gene by looking for particular markers called start codons and stop codons. These markers were used to identify the part of a string that could be a gene. You could have used a similar algorithm to find where a link occurs in the html text of a webpage. Looking for a href rather than ATG for example. DNA typically carries more than one gene, however. So, rather than finding this one gene that's marked in red, you'll use programming techniques to find all the regions in a strand of DNA that could code for a gene. Regions that begin with a start codon as shown here, but that also are indicated by one of three stop codons. In the next group of lessons, you'll learn many things about Java and programming as you practice solving this gene finding problem. You'll learn how to repeat a process many times even when you don't know how many times this is. You'll do this by using a while loop; a new kind of loop, that complements the for loop you've used with Iterables. You'll learn about the storage resource class, from the edu.duke library. Using a storage resource object will allow you to add selected values to the storage, and then access them in your code using the standard for loop with Iterables you've used before. This storage will also be a preview of future programming technique you'll learn about using arrays to store values. You will also practice with developing if statements, and Boolean expressions that use what's called short-circuit evaluation. This will be an important part of the practice and knowledge you'll gain as you move toward becoming a better programmer and problem solver. Thank you.