Brian knew his assignment for Software Engineering class would be trouble when he was put in a group with That Guy.

That Guy, as anyone could attest, was the one who burned down the chemistry lab. . . twice. He was That Guy who dropped a brick on the Dean’s sandal-clad foot in a failed physics experiment. He was That Guy whose actions led to a complete ban of aluminum foil in the campus cafeteria.

The assignment, due in three weeks, was to build an Android application that chose a restaurant at random, given the user’s location. "I suppose you could use Yelp,"  the professor said, "but I’d look more favorably on more unique solutions."

Brian got together with his group. He said, "I think we should--"

"Oh, I totally got this!" That Guy shouted. "I learned how to scrape a webpage using PHP last semester. We’ll just use CityEats!" CityEats was a locally-run restaurant listing. "I can write the whole thing!"

Whatever, Brian thought. "Yeah, sure."

That Guy disappeared for three weeks. Brian heard nothing about lab specimens being mysteriously released, or zombie outbreaks among the college football team, so he assumed that That Guy was hard at work on the application.

The due date arrived. The night before, Brian got nervous that That Guy -- who couldn’t be reached by phone -- might not have finished the program, so he wrote a Perl script to perform the scrape. He went to class, bracing for a C- for the assignment when, as if heralded by trumpets, That Guy came through the classroom door, brandishing his flash drive.

"I got it, I got it!" That Guy jabbed the drive into the classroom computer. He flailed at the keyboard like a chimpanzee for a moment or two. Then, his face drained of color, and he slumped back. "Nooo," he wailed, "it worked last night, I swear. . ."

Brian glanced over his shoulder. "Let me debug it." He opened the principal php file.

<?php
foreach($file as $line)
{
     //rank pin for processing
     $regex='/<div class="rank pin">(.+?)<\/div>/';
     preg_match_all($regex,$line,$match);
     foreach($match[1] as $value){
           if($value == 1||2||3||4||5||6||7||8||9||10||11||12||13||14||15||16||17||18||19||20||21||22||23||24||25||26||27||28||29||30){
           $flag = 't';
           echo $value." ";}}
     if($flag == 't'){
           //name of restaurant
           $regex='/<a href="/mip\/(.+?)[0-9]/';
           preg_match_all($regex,$line,$match);
           foreach($match[1] as $value){
                $name=explode("-",$value);
                echo '"';
                foreach($name as $piece){
                     echo $piece." ";}
                echo '" ';
                $address_flag='t';}
           //address
           if(preg_match("/^[0-9]{4}/",$line)){
                if($address_flag=='t'){
                     echo '"'.$line.'" ';
                     $address_flag='f';}}
[... snip ...]
           //latitude code here
           $regex='/<span class="latitude">(.+?)<\/span>/';
           preg_match_all($regex,$line,$match);
           foreach($match[1] as $value){
                echo '"'.$value.'" ';}
           //longitude code here;
           $regex='/<span class="longitude">(.+?)<\/span>/';
           preg_match_all($regex,$line,$match);
           foreach($match[1] as $value){
                echo '"'.$value.'" ';
                echo "<br>";
                $flag = 'f';
                }
     }
}
?>

"Well, this is a lot of lines to debug," Brian began, when the professor, who was watching this scene with detached fascination, spoke. "Can anyone open the CityEats front page? I was going to use it to compare results, but it’s just showing an error message on my phone."

Brian took control of the college computer and went to CityEats. It displayed a 503 error header, with an additional message: This IP range has been banned (DDoS attacks).

"Hey," Brian said to That Guy, "how much did your script hit the CityEats site?"

"I had it on a cron script," That Guy replied. "It scraped all listings every five minutes!"

Years after graduation, Brian visited the college on alumni weekend. He tried to open CityEats from a computer in the library, but it was still serving the 503 error message. And that was how That Guy broke the college’s access to CityEats.

[Advertisement] BuildMaster allows you to create a self-service release management platform that allows different teams to manage their applications. Explore how!