<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jbatty</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jbatty"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Jbatty"/>
	<updated>2026-05-12T06:21:11Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117081</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117081"/>
		<updated>2018-04-27T21:59:42Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* 3) Extend the page generation tool with a bunch of additional strategies, such as: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the previous work and the work to be done.  The previous work was finished as a part of the OSS project.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  [https://en.wikipedia.org/wiki/Servo_(layout_engine) Servo] is experimental web browser developed by Mozilla to &amp;quot;to create a new layout engine using a modern programming language&amp;quot;.  By automating servo (the web browser) we were able to quickly see if servo could render the randomly generated pages.  &lt;br /&gt;
&lt;br /&gt;
The goal of this final project was to build off the original project while adding more features.  The work we completed as a part of this project is split into a couple main parts.  First, we extended the program created in the OSS project to also control Firefox.  By also controlling Firefox, we then had 2 screenshots of the randomly generated content - Servo and Firefox .  After getting both screenshots, we then compared them using Python and OpenCV.  Finally, we were able to expand upon the page generation tool to allow the randomly generated web pages to have more properties/be more complex.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Lists of Tasks==&lt;br /&gt;
Below is a list of the tasks that were completed as a part of our final project.  Below each task we have described how exactly it was implemented with code examples.   &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL, just like task 5 in the previous work section, but for Firefox instead.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:-Generating elements trees of arbitrary depth&lt;br /&gt;
:-Generating sibling elements&lt;br /&gt;
:-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
:-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
:-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
&lt;br /&gt;
:'''UML Diagram of Tasks:'''&lt;br /&gt;
Below is a UML diagram of the tasks of the overall system.  As you can see, it covers all 3 tasks.  It starts with the code generation and then it splits and takes screenshots on both Firefox and Servo.  It then compares then screenshots and reports the distance.&lt;br /&gt;
:[[File:UMLDiag.jpg|border|]]&lt;br /&gt;
&lt;br /&gt;
==Implementation of Tasks==&lt;br /&gt;
====1) Extend the program that controls Servo to also control Firefox using geckodriver====&lt;br /&gt;
&lt;br /&gt;
====2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ====&lt;br /&gt;
:To actually make the comparisons we use [https://opencv.org/ OpenCV].  OpenCV allows us to not only make comparisons but will also mark where the differences in.  To actually do the comparisons we will first read in the images, convert the images to grayscale, and then call compare_ssim().  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
imageA = cv2.imread(image1)&lt;br /&gt;
imageB = cv2.imread(image2)&lt;br /&gt;
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)&lt;br /&gt;
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)&lt;br /&gt;
(score, diff) = compare_ssim(grayA, grayB, full=True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This gets us a ''score'' and diff ''values''.  The ''score'' variables represents how close the to images are to each other and the ''diff'' variables tells us where the differences are.  If the ''score'' indicates that the images are different we then use the ''diff'' value to findContours() and then draw a rectangle around the differences.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]&lt;br /&gt;
contours = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)&lt;br /&gt;
contours = contours[0] if imutils.is_cv2() else contours[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After getting contours, we get a rectangle for each contour by calling &amp;quot;(x, y, w, h) = cv2.boundingRect(c)&amp;quot;.  We then combine any rectangles that are inside each other or very close to each other.  After combining the rectangles, we then add the rectangles to each image.  Lastly we then save image A (with the rectangles to show the differences)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for rrr in rectangles:&lt;br /&gt;
    x = rrr[0]&lt;br /&gt;
    y = rrr[1]&lt;br /&gt;
    w = rrr[2]&lt;br /&gt;
    h = rrr[3]             &lt;br /&gt;
    cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)&lt;br /&gt;
    cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)&lt;br /&gt;
cv2.imwrite(filename,imageA)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====3) Extend the page generation tool with a bunch of additional strategies, such as:====&lt;br /&gt;
:For task 3 there are several different parts, but the main goal was to increase the complexity of our randomly generated pages. The code_generation.py file was adapted to provide these functions.  The implementation of each subtask is explained below.  &lt;br /&gt;
&lt;br /&gt;
'''Generating elements trees of arbitrary depth and Generating sibling elements&lt;br /&gt;
:We understood a tree of elements to mean divs inside of each other.  By using this definition, it was quite simple to create a tree of elements.  When RandomDiv is called we don't just return a div with a random section.  We also recursively call RandomDiv a random amount of times.  We also may call RandomDiv several time on the same level of the tree.  This effectively creates sibling elements.  Below is the code for RandomDiv.   &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
numDivs = random.randint(1,num_sibling_divs)&lt;br /&gt;
for i in range(0, numDivs):&lt;br /&gt;
    yield '&amp;lt;div id=&amp;quot;a'+str(random.randrange(0,count[0]))+'&amp;quot;&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection(count, max_depth, num_sibling_divs, tree_height, max_headers, min_headers)&lt;br /&gt;
    if tree_height &amp;gt; 0:&lt;br /&gt;
        treeHeight = random.randint(0, tree_height)&lt;br /&gt;
        if treeHeight &amp;gt; 0:&lt;br /&gt;
            yield RandomDiv(treeHeight - 1, count, max_depth, num_sibling_divs, max_headers, min_headers)          &lt;br /&gt;
    yield '&amp;lt;/div&amp;gt;'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
:Implementing this was relatively simple.  We just did the same thing we did before but with more CSS properties.  Below is the code we used to do this.  It does not include creating the arrays with different property values but shows us accessing the different arrays.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
string_css += 'display: ' + displayTypes[random.randint(0, 3)] + ';\r\n'&lt;br /&gt;
string_css += 'background-color: rgb(' + str(random.randint(0, 255)) + ',' + str(random.randint(0, 255)) + ',' + str(random.randint(0, 255)) +');\r\n'&lt;br /&gt;
string_css += 'float: ' + floatTypes[random.randint(0, 3)] + ';\r\n'&lt;br /&gt;
string_css += 'padding: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'margin: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'border-width: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'border-style: ' + borderTypes[random.randint(0, 4)] + ';\r\n'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
:Separate functions were added to create a span, div, table, ordered list, unordered list, and table. Because a span element is in-line and used typically to label a small chunk of text, the RandomSpan function is called at random within the RandomSentence function. Previously, the RandomSentence function simply called RandomWord a random number of times to create a sentence. To add in a span a small percentage of the time, a variable was given a random integer value between 0-99. If the variable was less than 5, RandomSpan was called, else RandomWord was called. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield RandomWord()&lt;br /&gt;
    for _ in range(num_of_words-1):&lt;br /&gt;
        #1 in 20 words will be within a span&lt;br /&gt;
        z= random.randrange(0,99)&lt;br /&gt;
        if z&amp;lt;5:&lt;br /&gt;
            yield ' '&lt;br /&gt;
            yield ''.join(RandomSpan())&lt;br /&gt;
        else:&lt;br /&gt;
            yield ' '&lt;br /&gt;
            yield ''.join(RandomWord())&lt;br /&gt;
    yield '. '&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The other newly added element types- divs, tables, lists- are called at random within the NestedElement function discussed above. These functions utilize the RandomWord and RandomSentence functions to create their elements. For example, see the RandomTable function below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def RandomTable():&lt;br /&gt;
    column_count = random.randrange(1,10)&lt;br /&gt;
    row_count = random.randrange(2,20)&lt;br /&gt;
    yield '&amp;lt;table&amp;gt;\r\n'&lt;br /&gt;
    #generate table head&lt;br /&gt;
    yield '\t&amp;lt;tr&amp;gt;\r\n\t\t'&lt;br /&gt;
    for _ in range(column_count):&lt;br /&gt;
        yield '&amp;lt;th&amp;gt;'&lt;br /&gt;
        yield RandomWord()&lt;br /&gt;
        yield '&amp;lt;/th&amp;gt;\r\n'&lt;br /&gt;
    yield '\t&amp;lt;/tr&amp;gt;'&lt;br /&gt;
    #fill in rows&lt;br /&gt;
    for _ in range(row_count-1):&lt;br /&gt;
        yield '\t&amp;lt;tr&amp;gt;\r\n\t\t'&lt;br /&gt;
        for _ in range(column_count):&lt;br /&gt;
            yield '&amp;lt;td&amp;gt;'&lt;br /&gt;
            yield str(random.randrange(0,1000))&lt;br /&gt;
            yield '&amp;lt;/td&amp;gt;'&lt;br /&gt;
        yield '\r\n\t&amp;lt;/tr&amp;gt;\r\n'&lt;br /&gt;
    yield '&amp;lt;/table&amp;gt;\r\n'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:Quirks mode is enable whenever an HTML document does not have a DOCTYPE.  To randomly enable Quirks mode we only added a DOCTYPE 50% of the time.  Below is the code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
quirksMode = random.randint(0,1)&lt;br /&gt;
if quirksMode == 1 or quirks_mode_possible == False:&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. &lt;br /&gt;
: * For task 1, once we are actually controlling Firefox using geckodriver we know its working (by getting a resulting screenshot).  &lt;br /&gt;
: * Task 2 actually involves us comparing screenshots.  By running the code with images that are the same and images that are different, we have proven that this comparison works.   &lt;br /&gt;
: * Additionally, we have visually tested that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 2 and 3 (to test all possible scenarios) it is out of the scope of this project.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. This project furthered this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two.  This project also expanded on the random content generator.  This work will now allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117068</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117068"/>
		<updated>2018-04-27T21:24:51Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Implementation of Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the previous work and the work to be done.  The previous work was finished as a part of the OSS project.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  [https://en.wikipedia.org/wiki/Servo_(layout_engine) Servo] is experimental web browser developed by Mozilla to &amp;quot;to create a new layout engine using a modern programming language&amp;quot;.  By automating servo (the web browser) we were able to quickly see if servo could render the randomly generated pages.  &lt;br /&gt;
&lt;br /&gt;
The goal of this final project was to build off the original project while adding more features.  The work we completed as a part of this project is split into a couple main parts.  First, we extended the program created in the OSS project to also control Firefox.  By also controlling Firefox, we then had 2 screenshots of the randomly generated content - Servo and Firefox .  After getting both screenshots, we then compared them using Python and OpenCV.  Finally, we were able to expand upon the page generation tool to allow the randomly generated web pages to have more properties/be more complex.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Lists of Tasks==&lt;br /&gt;
Below is a list of the tasks that were completed as a part of our final project.  Below each task we have described how exactly it was implemented with code examples.   &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL, just like task 5 in the previous work section, but for Firefox instead.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:-Generating elements trees of arbitrary depth&lt;br /&gt;
:-Generating sibling elements&lt;br /&gt;
:-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
:-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
:-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
&lt;br /&gt;
:'''UML Diagram of Tasks:'''&lt;br /&gt;
Below is a UML diagram of the tasks of the overall system.  As you can see, it covers all 3 tasks.  It starts with the code generation and then it splits and takes screenshots on both Firefox and Servo.  It then compares then screenshots and reports the distance.&lt;br /&gt;
:[[File:UMLDiag.jpg|border|]]&lt;br /&gt;
&lt;br /&gt;
==Implementation of Tasks==&lt;br /&gt;
====1) Extend the program that controls Servo to also control Firefox using geckodriver====&lt;br /&gt;
&lt;br /&gt;
====2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ====&lt;br /&gt;
:To actually make the comparisons we use [https://opencv.org/ OpenCV].  OpenCV allows us to not only make comparisons but will also mark where the differences in.  To actually do the comparisons we will first read in the images, convert the images to grayscale, and then call compare_ssim().  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
imageA = cv2.imread(image1)&lt;br /&gt;
imageB = cv2.imread(image2)&lt;br /&gt;
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)&lt;br /&gt;
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)&lt;br /&gt;
(score, diff) = compare_ssim(grayA, grayB, full=True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This gets us a ''score'' and diff ''values''.  The ''score'' variables represents how close the to images are to each other and the ''diff'' variables tells us where the differences are.  If the ''score'' indicates that the images are different we then use the ''diff'' value to findContours() and then draw a rectangle around the differences.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]&lt;br /&gt;
contours = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)&lt;br /&gt;
contours = contours[0] if imutils.is_cv2() else contours[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After getting contours, we get a rectangle for each contour by calling &amp;quot;(x, y, w, h) = cv2.boundingRect(c)&amp;quot;.  We then combine any rectangles that are inside each other or very close to each other.  After combining the rectangles, we then add the rectangles to each image.  Lastly we then save image A (with the rectangles to show the differences)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for rrr in rectangles:&lt;br /&gt;
    x = rrr[0]&lt;br /&gt;
    y = rrr[1]&lt;br /&gt;
    w = rrr[2]&lt;br /&gt;
    h = rrr[3]             &lt;br /&gt;
    cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)&lt;br /&gt;
    cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)&lt;br /&gt;
cv2.imwrite(filename,imageA)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====3) Extend the page generation tool with a bunch of additional strategies, such as:====&lt;br /&gt;
:For task 3 there are several different parts, but the main goal was to increase the complexity of our randomly generated pages. The code_generation.py file was adapted to provide these functions.  The implementation of each subtask is explained below.  &lt;br /&gt;
&lt;br /&gt;
'''Generating elements trees of arbitrary depth&lt;br /&gt;
:this&lt;br /&gt;
&lt;br /&gt;
'''Generating sibling elements&lt;br /&gt;
:&lt;br /&gt;
'''Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
:Implementing this was relatively simple.  We just did the same thing we did before but with more CSS properties.  Below is the code we used to do this.  It does not include creating the arrays with different property values but shows us accessing the different arrays.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
string_css += 'display: ' + displayTypes[random.randint(0, 3)] + ';\r\n'&lt;br /&gt;
string_css += 'background-color: rgb(' + str(random.randint(0, 255)) + ',' + str(random.randint(0, 255)) + ',' + str(random.randint(0, 255)) +');\r\n'&lt;br /&gt;
string_css += 'float: ' + floatTypes[random.randint(0, 3)] + ';\r\n'&lt;br /&gt;
string_css += 'padding: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'margin: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'border-width: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'border-style: ' + borderTypes[random.randint(0, 4)] + ';\r\n'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
:&lt;br /&gt;
'''Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:Quirks mode is enable whenever an HTML document does not have a DOCTYPE.  To randomly enable Quirks mode we only added a DOCTYPE 50% of the time.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. &lt;br /&gt;
: * For task 1, once we are actually controlling Firefox using geckodriver we know its working (by getting a resulting screenshot).  &lt;br /&gt;
: * Task 2 actually involves us comparing screenshots.  By running the code with images that are the same and images that are different, we have proven that this comparison works.   &lt;br /&gt;
: * Additionally, we have visually tested that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 2 and 3 (to test all possible scenarios) it is out of the scope of this project.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. This project furthered this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two.  This project also expanded on the random content generator.  This work will now allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117065</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117065"/>
		<updated>2018-04-27T21:22:01Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Lists of Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the previous work and the work to be done.  The previous work was finished as a part of the OSS project.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  [https://en.wikipedia.org/wiki/Servo_(layout_engine) Servo] is experimental web browser developed by Mozilla to &amp;quot;to create a new layout engine using a modern programming language&amp;quot;.  By automating servo (the web browser) we were able to quickly see if servo could render the randomly generated pages.  &lt;br /&gt;
&lt;br /&gt;
The goal of this final project was to build off the original project while adding more features.  The work we completed as a part of this project is split into a couple main parts.  First, we extended the program created in the OSS project to also control Firefox.  By also controlling Firefox, we then had 2 screenshots of the randomly generated content - Servo and Firefox .  After getting both screenshots, we then compared them using Python and OpenCV.  Finally, we were able to expand upon the page generation tool to allow the randomly generated web pages to have more properties/be more complex.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Lists of Tasks==&lt;br /&gt;
Below is a list of the tasks that were completed as a part of our final project.  Below each task we have described how exactly it was implemented with code examples.   &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL, just like task 5 in the previous work section, but for Firefox instead.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:-Generating elements trees of arbitrary depth&lt;br /&gt;
:-Generating sibling elements&lt;br /&gt;
:-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
:-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
:-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
&lt;br /&gt;
:'''UML Diagram of Tasks:'''&lt;br /&gt;
Below is a UML diagram of the tasks of the overall system.  As you can see, it covers all 3 tasks.  It starts with the code generation and then it splits and takes screenshots on both Firefox and Servo.  It then compares then screenshots and reports the distance.&lt;br /&gt;
:[[File:UMLDiag.jpg|border|]]&lt;br /&gt;
&lt;br /&gt;
==Implementation of Tasks==&lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:To actually make the comparisons we use [https://opencv.org/ OpenCV].  OpenCV allows us to not only make comparisons but will also mark where the differences in.  To actually do the comparisons we will first read in the images, convert the images to grayscale, and then call compare_ssim().  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
imageA = cv2.imread(image1)&lt;br /&gt;
imageB = cv2.imread(image2)&lt;br /&gt;
grayA = cv2.cvtColor(imageA, cv2.COLOR_BGR2GRAY)&lt;br /&gt;
grayB = cv2.cvtColor(imageB, cv2.COLOR_BGR2GRAY)&lt;br /&gt;
(score, diff) = compare_ssim(grayA, grayB, full=True)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This gets us a ''score'' and diff ''values''.  The ''score'' variables represents how close the to images are to each other and the ''diff'' variables tells us where the differences are.  If the ''score'' indicates that the images are different we then use the ''diff'' value to findContours() and then draw a rectangle around the differences.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thresh = cv2.threshold(diff, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]&lt;br /&gt;
contours = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)&lt;br /&gt;
contours = contours[0] if imutils.is_cv2() else contours[1]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After getting contours, we get a rectangle for each contour by calling &amp;quot;(x, y, w, h) = cv2.boundingRect(c)&amp;quot;.  We then combine any rectangles that are inside each other or very close to each other.  After combining the rectangles, we then add the rectangles to each image.  Lastly we then save image A (with the rectangles to show the differences)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for rrr in rectangles:&lt;br /&gt;
    x = rrr[0]&lt;br /&gt;
    y = rrr[1]&lt;br /&gt;
    w = rrr[2]&lt;br /&gt;
    h = rrr[3]             &lt;br /&gt;
    cv2.rectangle(imageA, (x, y), (x + w, y + h), (0, 0, 255), 2)&lt;br /&gt;
    cv2.rectangle(imageB, (x, y), (x + w, y + h), (0, 0, 255), 2)&lt;br /&gt;
cv2.imwrite(filename,imageA)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:For task 3 there are several different parts, but the main goal was to increase the complexity of our randomly generated pages. The code_generation.py file was adapted to provide these functions.  The implementation of each subtask is explained below.  &lt;br /&gt;
&lt;br /&gt;
'''Generating elements trees of arbitrary depth&lt;br /&gt;
:this&lt;br /&gt;
&lt;br /&gt;
'''Generating sibling elements&lt;br /&gt;
:&lt;br /&gt;
'''Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
:Implementing this was relatively simple.  We just did the same thing we did before but with more CSS properties.  Below is the code we used to do this.  It does not include creating the arrays with different property values but shows us accessing the different arrays.  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
string_css += 'display: ' + displayTypes[random.randint(0, 3)] + ';\r\n'&lt;br /&gt;
string_css += 'background-color: rgb(' + str(random.randint(0, 255)) + ',' + str(random.randint(0, 255)) + ',' + str(random.randint(0, 255)) +');\r\n'&lt;br /&gt;
string_css += 'float: ' + floatTypes[random.randint(0, 3)] + ';\r\n'&lt;br /&gt;
string_css += 'padding: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'margin: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'border-width: ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px ' + str(random.randint(0, 20)) + 'px;\r\n'&lt;br /&gt;
string_css += 'border-style: ' + borderTypes[random.randint(0, 4)] + ';\r\n'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
:&lt;br /&gt;
'''Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. &lt;br /&gt;
: * For task 1, once we are actually controlling Firefox using geckodriver we know its working (by getting a resulting screenshot).  &lt;br /&gt;
: * Task 2 actually involves us comparing screenshots.  By running the code with images that are the same and images that are different, we have proven that this comparison works.   &lt;br /&gt;
: * Additionally, we have visually tested that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 2 and 3 (to test all possible scenarios) it is out of the scope of this project.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. This project furthered this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two.  This project also expanded on the random content generator.  This work will now allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117047</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117047"/>
		<updated>2018-04-27T20:54:38Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* 3) Extend the page generation tool with a bunch of additional strategies, such as: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the previous work and the work to be done.  The previous work was finished as a part of the OSS project.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  [https://en.wikipedia.org/wiki/Servo_(layout_engine) Servo] is experimental web browser developed by Mozilla to &amp;quot;to create a new layout engine using a modern programming language&amp;quot;.  By automating servo (the web browser) we were able to quickly see if servo could render the randomly generated pages.  &lt;br /&gt;
&lt;br /&gt;
The goal of this final project was to build off the original project while adding more features.  The work we completed as a part of this project is split into a couple main parts.  First, we extended the program created in the OSS project to also control Firefox.  By also controlling Firefox, we then had 2 screenshots of the randomly generated content - Servo and Firefox .  After getting both screenshots, we then compared them using Python and OpenCV.  Finally, we were able to expand upon the page generation tool to allow the randomly generated web pages to have more properties/be more complex.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Lists of Tasks==&lt;br /&gt;
Below is a list of the tasks that were completed as a part of our final project.  Below each task we have described how exactly it was implemented with code examples.   &lt;br /&gt;
 &lt;br /&gt;
===1) Extend the program that controls Servo to also control Firefox using geckodriver===&lt;br /&gt;
Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL, just like task 5 in the previous work section, but for Firefox instead.  &lt;br /&gt;
&lt;br /&gt;
===2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ===&lt;br /&gt;
This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
===3) Extend the page generation tool with a bunch of additional strategies, such as:===&lt;br /&gt;
====Generating elements trees of arbitrary depth====&lt;br /&gt;
====Generating sibling elements====&lt;br /&gt;
====Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)====&lt;br /&gt;
====Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)====&lt;br /&gt;
====Randomly choose whether to generate a document in quirks mode or not====&lt;br /&gt;
&lt;br /&gt;
:'''UML Diagram of Tasks:'''&lt;br /&gt;
Below is a UML diagram of the tasks of the overall system.  As you can see, it covers all 3 tasks.  It starts with the code generation and then it splits and takes screenshots on both Firefox and Servo.  It then compares then screenshots and reports the distance.&lt;br /&gt;
:[[File:UMLDiag.jpg|border|]]&lt;br /&gt;
&lt;br /&gt;
==Implementation of Tasks==&lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:To actually make the comparisons we use [https://opencv.org/ OpenCV].  OpenCV allows us to not only make comparisons but will also mark where the differences in.  To actually do the comparisons we will first convert the images to grayscale and then call compare_ssim().  &lt;br /&gt;
:::imageA = cv2.imread(image1)&lt;br /&gt;
:::imageB = cv2.imread(image2)&lt;br /&gt;
This will get us a ''score'' and diff ''values''.  The ''score'' variables represents how close the to images are to each other and the ''diff'' variables tells us where the differences are.  If the ''score'' indicates that the images are different we will use the ''diff'' value to findContours() and then draw a rectangle around the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages. The code_generation.py file will be adapted to provide these functions. The function used to add random sections will have recursion added to generate elements within elements, resulting in a tree of html elements. The amounting of nesting will be random but limited. Within the sections, tables, lists, spans, and divs may potentially be created. This will involve writing new functions for creating each element, and allowing them to be chosen at random by the function that creates sections of the HTML document. Additionally, the function which provides randomized CSS styling will be extended to generate additional properties.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. &lt;br /&gt;
: * For task 1, once we are actually controlling Firefox using geckodriver we will know it is working.  &lt;br /&gt;
: * Task 2 actually involves us comparing screenshots.  By running the code with images that are the same and images that are different, we will be able to test to see if the comparisons work.  &lt;br /&gt;
: * Additionally, we will be able to visually test that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 2 and 3 (to test all possible scenarios) it is out of the scope of this project.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117046</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117046"/>
		<updated>2018-04-27T20:52:39Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* 3) Extend the page generation tool with a bunch of additional strategies, such as: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the previous work and the work to be done.  The previous work was finished as a part of the OSS project.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  [https://en.wikipedia.org/wiki/Servo_(layout_engine) Servo] is experimental web browser developed by Mozilla to &amp;quot;to create a new layout engine using a modern programming language&amp;quot;.  By automating servo (the web browser) we were able to quickly see if servo could render the randomly generated pages.  &lt;br /&gt;
&lt;br /&gt;
The goal of this final project was to build off the original project while adding more features.  The work we completed as a part of this project is split into a couple main parts.  First, we extended the program created in the OSS project to also control Firefox.  By also controlling Firefox, we then had 2 screenshots of the randomly generated content - Servo and Firefox .  After getting both screenshots, we then compared them using Python and OpenCV.  Finally, we were able to expand upon the page generation tool to allow the randomly generated web pages to have more properties/be more complex.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Lists of Tasks==&lt;br /&gt;
Below is a list of the tasks that were completed as a part of our final project.  Below each task we have described how exactly it was implemented with code examples.   &lt;br /&gt;
 &lt;br /&gt;
===1) Extend the program that controls Servo to also control Firefox using geckodriver===&lt;br /&gt;
Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL, just like task 5 in the previous work section, but for Firefox instead.  &lt;br /&gt;
&lt;br /&gt;
===2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ===&lt;br /&gt;
This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
===3) Extend the page generation tool with a bunch of additional strategies, such as:===&lt;br /&gt;
-Generating elements trees of arbitrary depth&amp;lt;br&amp;gt;&lt;br /&gt;
-Generating sibling elements&amp;lt;br&amp;gt;&lt;br /&gt;
-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&amp;lt;br&amp;gt;&lt;br /&gt;
-Randomly choose whether to generate a document in quirks mode or not&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:'''UML Diagram of Tasks:'''&lt;br /&gt;
Below is a UML diagram of the tasks of the overall system.  As you can see, it covers all 3 tasks.  It starts with the code generation and then it splits and takes screenshots on both Firefox and Servo.  It then compares then screenshots and reports the distance.&lt;br /&gt;
:[[File:UMLDiag.jpg|border|]]&lt;br /&gt;
&lt;br /&gt;
==Implementation of Tasks==&lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:To actually make the comparisons we use [https://opencv.org/ OpenCV].  OpenCV allows us to not only make comparisons but will also mark where the differences in.  To actually do the comparisons we will first convert the images to grayscale and then call compare_ssim().  &lt;br /&gt;
:::imageA = cv2.imread(image1)&lt;br /&gt;
:::imageB = cv2.imread(image2)&lt;br /&gt;
This will get us a ''score'' and diff ''values''.  The ''score'' variables represents how close the to images are to each other and the ''diff'' variables tells us where the differences are.  If the ''score'' indicates that the images are different we will use the ''diff'' value to findContours() and then draw a rectangle around the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages. The code_generation.py file will be adapted to provide these functions. The function used to add random sections will have recursion added to generate elements within elements, resulting in a tree of html elements. The amounting of nesting will be random but limited. Within the sections, tables, lists, spans, and divs may potentially be created. This will involve writing new functions for creating each element, and allowing them to be chosen at random by the function that creates sections of the HTML document. Additionally, the function which provides randomized CSS styling will be extended to generate additional properties.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. &lt;br /&gt;
: * For task 1, once we are actually controlling Firefox using geckodriver we will know it is working.  &lt;br /&gt;
: * Task 2 actually involves us comparing screenshots.  By running the code with images that are the same and images that are different, we will be able to test to see if the comparisons work.  &lt;br /&gt;
: * Additionally, we will be able to visually test that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 2 and 3 (to test all possible scenarios) it is out of the scope of this project.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117044</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117044"/>
		<updated>2018-04-27T20:50:47Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Lists of Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the previous work and the work to be done.  The previous work was finished as a part of the OSS project.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  [https://en.wikipedia.org/wiki/Servo_(layout_engine) Servo] is experimental web browser developed by Mozilla to &amp;quot;to create a new layout engine using a modern programming language&amp;quot;.  By automating servo (the web browser) we were able to quickly see if servo could render the randomly generated pages.  &lt;br /&gt;
&lt;br /&gt;
The goal of this final project was to build off the original project while adding more features.  The work we completed as a part of this project is split into a couple main parts.  First, we extended the program created in the OSS project to also control Firefox.  By also controlling Firefox, we then had 2 screenshots of the randomly generated content - Servo and Firefox .  After getting both screenshots, we then compared them using Python and OpenCV.  Finally, we were able to expand upon the page generation tool to allow the randomly generated web pages to have more properties/be more complex.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Lists of Tasks==&lt;br /&gt;
Below is a list of the tasks that were completed as a part of our final project.  Below each task we have described how exactly it was implemented with code examples.   &lt;br /&gt;
 &lt;br /&gt;
===1) Extend the program that controls Servo to also control Firefox using geckodriver===&lt;br /&gt;
Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL, just like task 5 in the previous work section, but for Firefox instead.  &lt;br /&gt;
&lt;br /&gt;
===2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ===&lt;br /&gt;
This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
===3) Extend the page generation tool with a bunch of additional strategies, such as:===&lt;br /&gt;
-Generating elements trees of arbitrary depth&lt;br /&gt;
-Generating sibling elements&lt;br /&gt;
-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
&lt;br /&gt;
:'''UML Diagram of Tasks:'''&lt;br /&gt;
Below is a UML diagram of the tasks of the overall system.  As you can see, it covers all 3 tasks.  It starts with the code generation and then it splits and takes screenshots on both Firefox and Servo.  It then compares then screenshots and reports the distance.&lt;br /&gt;
:[[File:UMLDiag.jpg|border|]]&lt;br /&gt;
&lt;br /&gt;
==Implementation of Tasks==&lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:To actually make the comparisons we use [https://opencv.org/ OpenCV].  OpenCV allows us to not only make comparisons but will also mark where the differences in.  To actually do the comparisons we will first convert the images to grayscale and then call compare_ssim().  &lt;br /&gt;
:::imageA = cv2.imread(image1)&lt;br /&gt;
:::imageB = cv2.imread(image2)&lt;br /&gt;
This will get us a ''score'' and diff ''values''.  The ''score'' variables represents how close the to images are to each other and the ''diff'' variables tells us where the differences are.  If the ''score'' indicates that the images are different we will use the ''diff'' value to findContours() and then draw a rectangle around the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages. The code_generation.py file will be adapted to provide these functions. The function used to add random sections will have recursion added to generate elements within elements, resulting in a tree of html elements. The amounting of nesting will be random but limited. Within the sections, tables, lists, spans, and divs may potentially be created. This will involve writing new functions for creating each element, and allowing them to be chosen at random by the function that creates sections of the HTML document. Additionally, the function which provides randomized CSS styling will be extended to generate additional properties.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. &lt;br /&gt;
: * For task 1, once we are actually controlling Firefox using geckodriver we will know it is working.  &lt;br /&gt;
: * Task 2 actually involves us comparing screenshots.  By running the code with images that are the same and images that are different, we will be able to test to see if the comparisons work.  &lt;br /&gt;
: * Additionally, we will be able to visually test that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 2 and 3 (to test all possible scenarios) it is out of the scope of this project.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117042</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=117042"/>
		<updated>2018-04-27T20:49:33Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Lists of Tasks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the previous work and the work to be done.  The previous work was finished as a part of the OSS project.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  [https://en.wikipedia.org/wiki/Servo_(layout_engine) Servo] is experimental web browser developed by Mozilla to &amp;quot;to create a new layout engine using a modern programming language&amp;quot;.  By automating servo (the web browser) we were able to quickly see if servo could render the randomly generated pages.  &lt;br /&gt;
&lt;br /&gt;
The goal of this final project was to build off the original project while adding more features.  The work we completed as a part of this project is split into a couple main parts.  First, we extended the program created in the OSS project to also control Firefox.  By also controlling Firefox, we then had 2 screenshots of the randomly generated content - Servo and Firefox .  After getting both screenshots, we then compared them using Python and OpenCV.  Finally, we were able to expand upon the page generation tool to allow the randomly generated web pages to have more properties/be more complex.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Lists of Tasks==&lt;br /&gt;
Below is a list of the tasks that were completed as a part of our final project.  Below each task we have described how exactly it was implemented with code examples.   &lt;br /&gt;
 &lt;br /&gt;
==='''1) Extend the program that controls Servo to also control Firefox using geckodriver'''===&lt;br /&gt;
Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL, just like task 5 in the previous work section, but for Firefox instead.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
&lt;br /&gt;
:'''UML Diagram of Tasks:'''&lt;br /&gt;
Below is a UML diagram of the tasks of the overall system.  As you can see, it covers all 3 tasks.  It starts with the code generation and then it splits and takes screenshots on both Firefox and Servo.  It then compares then screenshots and reports the distance.&lt;br /&gt;
:[[File:UMLDiag.jpg|border|]]&lt;br /&gt;
&lt;br /&gt;
==Implementation of Tasks==&lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:To actually make the comparisons we will use [https://opencv.org/ OpenCV].  OpenCV will allow us to not only make comparisons but will also mark where the differences in.  To actually do the comparisons we will first convert the images to grayscale and then call compare_ssim().  This will get us a ''score'' and diff ''values''.  The ''score'' variables represents how close the to images are to each other and the ''diff'' variables tells us where the differences are.  If the ''score'' indicates that the images are different we will use the ''diff'' value to findContours() and then draw a rectangle around the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages. The code_generation.py file will be adapted to provide these functions. The function used to add random sections will have recursion added to generate elements within elements, resulting in a tree of html elements. The amounting of nesting will be random but limited. Within the sections, tables, lists, spans, and divs may potentially be created. This will involve writing new functions for creating each element, and allowing them to be chosen at random by the function that creates sections of the HTML document. Additionally, the function which provides randomized CSS styling will be extended to generate additional properties.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. &lt;br /&gt;
: * For task 1, once we are actually controlling Firefox using geckodriver we will know it is working.  &lt;br /&gt;
: * Task 2 actually involves us comparing screenshots.  By running the code with images that are the same and images that are different, we will be able to test to see if the comparisons work.  &lt;br /&gt;
: * Additionally, we will be able to visually test that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 2 and 3 (to test all possible scenarios) it is out of the scope of this project.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116696</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116696"/>
		<updated>2018-04-15T20:37:06Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Work to be done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the initial and subsequent steps.  The initial steps were finished as a part of the OSS project.  The goal of this final project is to complete the subsequent steps.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  Now, as a part of this project we are supposed to extend the program to also control Firefox, compare the resulting screenshots, and expand upon the page generation tool.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
TODO: explain servo&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
:To actually make the comparisons we will use [https://opencv.org/ OpenCV].  OpenCV will allow us to not only make comparisons but will also mark where the differences in.  To actually do the comparisons we will first convert the images to grayscale and then call compare_ssim().  This will get us a ''score'' and diff ''values''.  The ''score'' variables represents how close the to images are to each other and the ''diff'' variables tells us where the differences are.  If the ''score'' indicates that the images are different we will use the ''diff'' value to findContours() and then draw a rectangle around the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages. The code_generation.py file will be adapted to provide these functions. The function used to add random sections will have recursion added to generate elements within elements, resulting in a tree of html elements. The amounting of nesting will be random but limited. Within the sections, tables, lists, spans, and divs may potentially be created. This will involve writing new functions for creating each element, and allowing them to be chosen at random by the function that creates sections of the HTML document. Additionally, the function which provides randomized CSS styling will be extended to generate additional properties.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. For task 1, once we are actually controlling Firefox using geckodriver we will know it is working.  Task 2 actually involves us comparing screenshots.  By running the code with images that are the same and images that are different, we will be able to test to see if the comparisons work.  Additionally, we will be able to visually test that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 2 and 3 (to test all possible scenarios) it is out of the scope of this project.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116688</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116688"/>
		<updated>2018-04-15T20:26:23Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Work to be done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This Mozilla project was broken in to 2 main parts: the initial and subsequent steps.  The initial steps were finished as a part of the OSS project.  The goal of this final project is to complete the subsequent steps.  As a part of the OSS project (explained more below) we created a tool which generates random valid HTML files and automated servo.  Now, as a part of this project we are supposed to extend the program to also control Firefox, compare the resulting screenshots, and expand upon the page generation tool.&lt;br /&gt;
&lt;br /&gt;
==Background==&lt;br /&gt;
TODO: explain servo&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
:The code_generation.py file will be adapted to provide these functions. The function used to add random sections will have recursion added to generate elements within elements, resulting in a tree of html elements. The amounting of nesting will be random but limited. Within the sections, tables, lists, spans, and divs may potentially be created. This will involve writing new functions for creating each element, and allowing them to be chosen at random by the function that creates sections of the HTML document.&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
Because of the nature of this project, testing the newly added features will be very simple. Task 2 actually involves us comparing screenshots.  By comparing the actual screenshots we will test that things work.  Additionally, we will be able to visually test that task 3 is complete (seeing that the new page generation features work).  While we could probably automate some of the testing for task 3 (to test all possible scenarios) it is out of the scope of this project.  &lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116463</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116463"/>
		<updated>2018-04-09T21:51:21Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
:Sample Screenshot:&lt;br /&gt;
:[[File:Servoscreenshot.png|border]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116462</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116462"/>
		<updated>2018-04-09T21:50:51Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
&lt;br /&gt;
[[File:Servoscreenshot.png|border|Screenshot Sample]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116461</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116461"/>
		<updated>2018-04-09T21:50:25Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
&lt;br /&gt;
[[File:Servoscreenshot.png|Screenshot Sample]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116460</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116460"/>
		<updated>2018-04-09T21:50:15Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
&lt;br /&gt;
[[File:Servoscreenshot.png|frameless|Screenshot Sample]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116459</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116459"/>
		<updated>2018-04-09T21:50:02Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
&lt;br /&gt;
[[File:Servoscreenshot.png|thumb|Screenshot Sample]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116458</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116458"/>
		<updated>2018-04-09T21:49:03Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
&lt;br /&gt;
[[File:Servoscreenshot.png|frame|Screenshot Sample]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Servoscreenshot.png&amp;diff=116457</id>
		<title>File:Servoscreenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Servoscreenshot.png&amp;diff=116457"/>
		<updated>2018-04-09T21:47:29Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: uploaded a new version of &amp;amp;quot;File:Servoscreenshot.png&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116456</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116456"/>
		<updated>2018-04-09T21:46:30Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
&lt;br /&gt;
[[File:Servoscreenshot.png]]&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Servoscreenshot.png&amp;diff=116455</id>
		<title>File:Servoscreenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Servoscreenshot.png&amp;diff=116455"/>
		<updated>2018-04-09T21:45:56Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116333</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116333"/>
		<updated>2018-04-08T21:31:27Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116332</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116332"/>
		<updated>2018-04-08T21:30:58Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it. As seen in this code, after generating random content to the file, we will add CSS elements on top of this content. We have established a list of commonly used styles, weights, fonts, font_styles, and alignments which will be used at random. For practical purposes, we are limiting the number of options.&lt;br /&gt;
:3) Add a module to the program that enables generating random content specific to the &amp;lt;body&amp;gt; element (such as a &amp;lt;p&amp;gt; block that contains randomly generated text) and add it to the generated output&lt;br /&gt;
:4) Generate simple random CSS that affects randomly generated content (ie. if there is an element with an id foo, generate a CSS selector like #foo that applies a style like colorto it)&lt;br /&gt;
:5) Create a program under Servo's etc/ that launches Servo and causes it to [https://github.com/servo/servo/wiki/Control-Servo-using-WebDriver take a screenshot] of a particular URL - use this to take screenshots of pages randomly generated by the previous program&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116327</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116327"/>
		<updated>2018-04-08T21:25:49Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- The file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], contains the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116326</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116326"/>
		<updated>2018-04-08T21:23:16Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Work to be done */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:'''1) Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:'''2) Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:'''3) Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
::-Generating elements trees of arbitrary depth&lt;br /&gt;
::-Generating sibling elements&lt;br /&gt;
::-Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
::-Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
::-Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116325</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116325"/>
		<updated>2018-04-08T21:21:27Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&lt;br /&gt;
==Work to be done==&lt;br /&gt;
Below is a list of the tasks to be done as a part of our final project.  Below each task we have described what we think it will take to complete the respective task.  &lt;br /&gt;
 &lt;br /&gt;
:1)'''Extend the program that controls Servo to also control Firefox using geckodriver'''&lt;br /&gt;
:Task 1 is relatively simple.  It just involves downloading geckodriver and running it.  Geckodriver is an open source software engine that allows us to render marked content on a web browser.  It should allow us to take screenshots of a particular URL just like task 5 in the previous work section.  &lt;br /&gt;
&lt;br /&gt;
:2)'''Compare the resulting screenshots and report the contents of the generated page if the screenshots differ'''&lt;br /&gt;
:This task involves automating Firefox to use geckodriver and the current servo program.  They both will create 2 different screenshots.  If servo and Firefox render it differently, we will report that file and mark the differences.  &lt;br /&gt;
&lt;br /&gt;
:3)'''Extend the page generation tool with a bunch of additional strategies, such as:'''&lt;br /&gt;
:Generating elements trees of arbitrary depth&lt;br /&gt;
:Generating sibling elements&lt;br /&gt;
:Extending the set of CSS properties that can be generated (display, background, float, padding, margin, border, etc.)&lt;br /&gt;
:Extending the set of elements that can be generated (span, div, header elements, table (and associated table contents), etc.)&lt;br /&gt;
:Randomly choose whether to generate a document in quirks mode or not&lt;br /&gt;
:For task 3 there are several different parts, but the main goal is to increase the complexity of our randomly generated pages.  First we will increase the tree depth to an arbitrary depth.  We will then generate sibling elements and increase the CSS styling options.  Finally, we will increase the amount of HTML elements that can be generated and randomly choose whether to generate a document in quirks mode or not. &lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
The previously completed work allows us to generate simple html documents with a randomized structure, render the page in Servo, and take a screenshot of the page. We plan on furthering this work by rendering the pages in both Servo and Firefox, taking screenshots of the pages within both browsers, and reporting differences between the two. Doing so will allow users to evaluate Servo’s ability to load web pages. To make this testing even more informative, we plan to increase the complexity of the structure and styling of the randomly generated html documents.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116323</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116323"/>
		<updated>2018-04-08T21:18:10Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
:yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
:yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
:yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
:yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
:yield RandomSection()&lt;br /&gt;
:yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
:RandomCSS()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116322</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116322"/>
		<updated>2018-04-08T21:17:05Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116321</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116321"/>
		<updated>2018-04-08T21:16:09Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116320</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116320"/>
		<updated>2018-04-08T21:14:17Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;py&amp;quot;&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116319</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116319"/>
		<updated>2018-04-08T21:13:15Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;source lang='py3'&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116318</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116318"/>
		<updated>2018-04-08T21:12:33Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;py&amp;quot;&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116314</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116314"/>
		<updated>2018-04-08T21:11:06Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116312</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116312"/>
		<updated>2018-04-08T21:07:18Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116311</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116311"/>
		<updated>2018-04-08T21:06:58Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;source lang python&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116310</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116310"/>
		<updated>2018-04-08T21:06:37Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;sourcelang python&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116308</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116308"/>
		<updated>2018-04-08T21:03:14Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116306</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116306"/>
		<updated>2018-04-08T21:01:37Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;code&amp;gt;#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&lt;br /&gt;
def RandomHtml():&lt;br /&gt;
    yield '&amp;lt;!DOCTYPE html&amp;gt;'&lt;br /&gt;
    yield '&amp;lt;html&amp;gt;\r\n'&lt;br /&gt;
    yield ' RANDOMCSSCONTENTHERETOBEPLACED '&lt;br /&gt;
    yield '&amp;lt;body&amp;gt;\r\n'&lt;br /&gt;
    yield RandomSection()&lt;br /&gt;
    yield '&amp;lt;/body&amp;gt;\r\n&amp;lt;/html&amp;gt;\r\n'&lt;br /&gt;
    RandomCSS()&lt;br /&gt;
&lt;br /&gt;
#generate a random section&lt;br /&gt;
def RandomSection():&lt;br /&gt;
    global css&lt;br /&gt;
    global count&lt;br /&gt;
    for x in range(0,random.randrange(5,10)):&lt;br /&gt;
        random_header_number = random.randrange(3,5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Since there are headers of six different sizes in HTML, we generate a random header size between range 3 to 5.&lt;br /&gt;
        if not '&amp;lt;h'+str(random_header_number)+' id=a&amp;quot;'+str(count)+'&amp;quot;&amp;gt;' in css_contents:&lt;br /&gt;
            css_contents[count] = '&amp;lt;h'+str(random_header_number)+'&amp;gt;'&lt;br /&gt;
            count+=1&lt;br /&gt;
&lt;br /&gt;
        yield '&amp;lt;p id=&amp;quot;a'+str(count)+'&amp;quot;&amp;gt;'&lt;br /&gt;
        count+=1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#For a paragraph, we choose to keep it's size in between the range of 2 to 15 sentences.&lt;br /&gt;
        num_of_sentences = random.randrange(2, 15)&lt;br /&gt;
        for _ in range(num_of_sentences):&lt;br /&gt;
             yield RandomSentence()&lt;br /&gt;
        yield '&amp;lt;/p&amp;gt;\r'&lt;br /&gt;
        yield ('\n')&lt;br /&gt;
&lt;br /&gt;
#generate a random sentence using random range function&lt;br /&gt;
def RandomSentence():&lt;br /&gt;
    global count&lt;br /&gt;
    num_of_words = random.randrange(5, 20)&lt;br /&gt;
    yield (' '.join(RandomWord() for _ in range(num_of_words)) + '.')&lt;br /&gt;
#A random word of 2 to 10 characters length is generated which is used above to create a random sentence and which is later used to generate a paragraph&lt;br /&gt;
def RandomWord():&lt;br /&gt;
    chars = random.randrange(2, 10)&lt;br /&gt;
    return ''.join(random.choice(string.ascii_lowercase) for _ in range(chars))&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116305</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116305"/>
		<updated>2018-04-08T21:00:57Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;br /&gt;
&amp;lt;code&amp;gt;#generate a skeleton HTML file with a doctype, head element, and body element and adds CSS to it&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116303</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116303"/>
		<updated>2018-04-08T20:59:48Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project/blob/master/code_generation.py code_generation.py], here is the code which generates random content specific to the head element and adds style on top of it.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116302</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116302"/>
		<updated>2018-04-08T20:59:10Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1) In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2) Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file code_generation.py, here is the code which generates random content specific to the head element and adds style on top of it.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116301</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116301"/>
		<updated>2018-04-08T20:58:56Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1. In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::- Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2 Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::- As per the file code_generation.py, here is the code which generates random content specific to the head element and adds style on top of it.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116300</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116300"/>
		<updated>2018-04-08T20:58:38Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Previous Work (Part of the OSS Project) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
:1. In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
::Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
:2 Add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
::As per the file code_generation.py, here is the code which generates random content specific to the head element and adds style on top of it.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116299</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116299"/>
		<updated>2018-04-08T20:57:12Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;br /&gt;
&lt;br /&gt;
==Previous Work (Part of the OSS Project)==&lt;br /&gt;
&lt;br /&gt;
As per the [https://github.com/servo/servo/wiki/Random-web-content-project project description], we were expected to complete the initial steps. The implementation is explained below for each of these steps.&lt;br /&gt;
&lt;br /&gt;
In a new repository, create a program that can generate a skeleton HTML file with a doctype, head element, and body element, print the result to stdout&lt;br /&gt;
Here is the [https://github.com/asoni3/Random-web-content-generator---CSC-517-OSS-Project link] to the repository which contains code_generation.py file which will be used to generate random valid HTML files.&lt;br /&gt;
add a module to the program that enable generating random content specific to the &amp;lt;head&amp;gt; element (such as inline CSS content inside of a &amp;lt;style&amp;gt; element) and add it to the generated output&lt;br /&gt;
As per the file code_generation.py, here is the code which generates random content specific to the head element and adds style on top of it.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116298</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116298"/>
		<updated>2018-04-08T20:54:55Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the [https://w3c.github.io/webdriver/webdriver-spec.html WebDriver protocol] and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116297</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116297"/>
		<updated>2018-04-08T20:52:22Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* M1803: Implement a web page fuzzer to find rendering mismatches (Part 2) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the WebDriver protocol and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116296</id>
		<title>CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_M1803:_Implement_a_web_page_fuzzer_to_find_rendering_mismatches_(Part_2)&amp;diff=116296"/>
		<updated>2018-04-08T20:51:58Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: Created page with &amp;quot;=M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)= By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)  =...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)=&lt;br /&gt;
By Alexander Simpson(adsimps3), Abhay Soni (asoni3), Dileep badveli (dbadvel) and Jake Batty(jbatty)&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
This goal of this project is to create a tool that can randomly generate valid HTML pages, then automatically load them in both Firefox and Servo using the WebDriver protocol and report if both engines render the content identically. As a part of the OSS project we created a tool which generates random valid HTML files and automated servo. Now, as a part of this project we are supposed to finish the subsequent steps in the project which is explained below.&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=MainPage&amp;diff=116295</id>
		<title>MainPage</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=MainPage&amp;diff=116295"/>
		<updated>2018-04-08T20:49:39Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Expertiza */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Expertiza==&lt;br /&gt;
* [[Expertiza documentation]]&lt;br /&gt;
&lt;br /&gt;
* [[CSC/ECE 517 Summer 2008]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2010]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2011]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2012]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2013]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2014]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2015]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2016]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2014]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2015]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2016]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2017]]&lt;br /&gt;
* [[CSC/ECE 517 Fall 2017]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project Juniper:Bookmark Enhancements]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1803: Introducing a Student View for Instructors]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1804: OSS project Yellow: Topic management]]&lt;br /&gt;
* [[CSC/ECE_517_Spring_2018- Project E1805: Convolutional data extraction from Github]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1808: Refactor review_mapping_controller.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1810: Show sample submissions and reviews]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018/E1814 Write unit tests for collusion cycle.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project M1802: 2D Canvas Rendering]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018 - E1800: Add past-due assignments to task list]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1812: on the fly calc.rb]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project M1803: Implement a web page buzzer to find rendering mismatches ]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project M1803: Implement a web page fuzzer to find rendering mismatches (Part 2)]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018/E1813 Test Menu Items Model]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1816: Visualization for Instructors]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1817: Adding Student-generated Questions to Rubric]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1822: Extend the functionality of badging]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1815: Improvements to review grader]]&lt;br /&gt;
* [[CSC/ECE 517 Spring 2018- Project E1824: Let course staff as well as students do reviews]]&lt;br /&gt;
* [[CSC 456 Spring 2011|CSC 456 Spring 2012]]&lt;br /&gt;
* [[ECE 633]]&lt;br /&gt;
* [[KCU]]&lt;br /&gt;
* [[Progress reports]]&lt;br /&gt;
&lt;br /&gt;
==Application Behavior==&lt;br /&gt;
* [[Grading]]&lt;br /&gt;
&lt;br /&gt;
==Metaprogramming==&lt;br /&gt;
* [[CSC/ECE_517_Spring_2013/ch1b_1k_hf|Lecture on Metaprogramming]]&lt;br /&gt;
&lt;br /&gt;
==Development==&lt;br /&gt;
&lt;br /&gt;
''Expertiza now has a Java dependency, so the machine you are using to develop Expertiza on should have the JVM installed.''&lt;br /&gt;
&lt;br /&gt;
* [[Setting Up a Development Machine]]&lt;br /&gt;
* [[Creating a Linux Development Environment for Expertiza - Installation Guide]]&lt;br /&gt;
* [[Using git and github for projects]]&lt;br /&gt;
* [[Using heroku to deploy your projects]]&lt;br /&gt;
* [[How to Begin a Project from the Current Expertiza Repository]]&lt;br /&gt;
* [[Git]]&lt;br /&gt;
* [[How to Change a User's Password on a Development Machine]]&lt;br /&gt;
* [[Debugging Rails]]&lt;br /&gt;
* [http://rajanalwan.com/ui_guidelines/ Design Template]&lt;br /&gt;
&lt;br /&gt;
==Production==&lt;br /&gt;
* [[Deploying to Production]]&lt;br /&gt;
* [[Downloading Production Data]]&lt;br /&gt;
* [[Accessing the Production Server]]&lt;br /&gt;
&lt;br /&gt;
==Testing==&lt;br /&gt;
* [[Using Cucumber with Expertiza]]&lt;br /&gt;
* [[Rails Testing Overview]]&lt;br /&gt;
* [[Expertiza Continuous Integration]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* [[Object-Oriented Design and Programming]]&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115423</id>
		<title>CSC/ECE 517 Spring 2018- Project Juniper:Bookmark Enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115423"/>
		<updated>2018-03-27T15:25:41Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Files modified in current project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
====Expertiza Background====&lt;br /&gt;
Best stated in the project documentation, “The Expertiza project is software to create reusable learning objects through peer review. It also supports team projects, and the submission of almost any document type, including URLs and wiki pages.” The system makes it easy for instructors to post assignments and manage students. Students are able to work in teams, submit assignments, receive feedback on their work and review their teammates.&lt;br /&gt;
&lt;br /&gt;
====Description of Current Project====&lt;br /&gt;
&lt;br /&gt;
The project aims at enhancing the usability of the bookmarks feature for any topic. Basic functionality already exists to add bookmarks to topics. When a student logs in to his expertiza account,he/she can sign-up for a particular topic from the list of topics in an assignment. On the sign-up sheet, there is a column for Bookmarks. &lt;br /&gt;
&lt;br /&gt;
[[File:Bookmark.png]]&lt;br /&gt;
&lt;br /&gt;
Users can either view a Bookmark or add a new Bookmark for a particular topic. Users can submit links via add Bookmark to provide helpful sources for the author to complete their work. Users can also view Bookmarks already added for the particular topics. Authors can rank the usefulness of these bookmarks as 1-5 with a drop down menu next to the bookmark. Our project aims to implement this. Also, we want to provide a way for the users who have submitted useful bookmarks to be given credit for it. This can be based on the rating provided by the Author. &lt;br /&gt;
&lt;br /&gt;
This project intends to build on the bookmark functionality by allowing instructors to access the bookmark ratings rubric, and designing a way to assess if these bookmarks are being utilized by the author.&lt;br /&gt;
&lt;br /&gt;
==Issues==&lt;br /&gt;
====Problem 1:====&lt;br /&gt;
When an instructor is logged in, they can manage rubrics under the Manage &amp;gt; Questionnaires tab. However, bookmark ratings are not available to be selected.&lt;br /&gt;
&lt;br /&gt;
[[File:Problem1.jpg]]&lt;br /&gt;
&lt;br /&gt;
====Proposed Enhancements to the problem:====&lt;br /&gt;
After going through the migrations we observed that there have been migrations to add the Questionnaire nodes to the Menu Bar. In these migrations we did not find any code which specifies that the &amp;quot;Bookmark Rating&amp;quot; Questionnaire Node has been added to the Menu Bar. We believe that a migration has to be added which will add the Bookmark Rating Node to the Menu Bar thereby enabling the user to see &amp;quot;Bookmark Rating&amp;quot; as a type of rubric when they go to Manage &amp;gt; Questionnaires.&lt;br /&gt;
&lt;br /&gt;
====Problem 2:====&lt;br /&gt;
When a user logs in as an instructor and selects Manage &amp;gt; Questionnaires, the links associated with the Bookmark Rating rubric are broken. When a user clicks on Bookmark Rating link, it should link to a page to create a new Bookmark rating Questionnaire. However, the link does not redirect to the required page, rather an error message is thrown.&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink1.png]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem====&lt;br /&gt;
Previously, the Folder node was named &amp;quot;Bookmarkrating&amp;quot; because of which, after clicking on &amp;quot;New Public Item&amp;quot; or &amp;quot;New Private Item&amp;quot; we get an Error message. &lt;br /&gt;
New migrations have been written in which the node has been renamed to &amp;quot;Bookmark Rating&amp;quot; because this is how it has been defined in the Questionnaire Model. Now the links for &amp;quot;New Public Item&amp;quot; and &amp;quot;New Private Item&amp;quot; works properly resulting in the screens shown below.&lt;br /&gt;
&lt;br /&gt;
'''Page that shows the links for &amp;quot;New Public Item&amp;quot; and &amp;quot;New Private Item&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Page that is redirected to after we click &amp;quot;New Public Item&amp;quot; or &amp;quot;New Private Item&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink2.png]]&lt;br /&gt;
&lt;br /&gt;
====Problem 3:====&lt;br /&gt;
The current functionality only allows for the author to review the bookmark, and the reviewer is not able to assess the usefulness of a bookmark.&lt;br /&gt;
&lt;br /&gt;
====Proposed design to address the problem:====&lt;br /&gt;
The design below could be implemented to allow for input from reviewers on bookmarks. This would involve modification to the existing classes to add “karma points,” which are points a user acquires for submitting helpful bookmarks. Both the reviewer and the author can submit a 1-5 rating on a bookmark- the author does so based on how helpful they found the link, and the reviewer based on how impactful the bookmark appeared to be on the author’s work. &lt;br /&gt;
These ratings translate directly into karma points, making a user who submits a bookmark eligible to earn up to 10 karma points for that bookmark. This would require a field for karma points in the user database, where points would be stored and accumulated. Only the instructor would be authorised to view a students karma points, and the instructor would be able to list, sort, and filter users by karma points. How the karma points are utilized is at the discretion of the instructor; two examples of usage could be for recognition of helpful students and awarding participation grades based on a baseline of karma points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: UML2.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Files modified in current project==&lt;br /&gt;
&lt;br /&gt;
* db/migrate/20180326223032_update_bookmark_rating_tree_folder_rating.rb&lt;br /&gt;
&lt;br /&gt;
*db/migrate/20121127013927_add_bookmarkrating_folder_nodes.rb&lt;br /&gt;
&lt;br /&gt;
* expertiza/app/models/tree_display_controller.rb &lt;br /&gt;
&lt;br /&gt;
* expertiza/app/models/questionnaire.rb&lt;br /&gt;
&lt;br /&gt;
* config/routes.rb&lt;br /&gt;
&lt;br /&gt;
==UI Testing==&lt;br /&gt;
&lt;br /&gt;
*'''Creating a Bookmark Rating Questionnaire'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and select ‘Bookmark ratings’ &lt;br /&gt;
**Choose either new public item or new private item&lt;br /&gt;
**Enter a name, min score, max score, and choose whether the bookmark questionnaire is private from the drop down menu&lt;br /&gt;
**Select &amp;quot;Create&amp;quot;&lt;br /&gt;
**You will now see a confirmation message stating that the bookmark was successfully created&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*In addition to building the feature designed above, karma points could be extended to other parts of Expertiza to reinforce positive user interactions.&lt;br /&gt;
*Build on the current 0-5 rating system by adding criteria for a bookmark ratings. For example, rather than a simple ask for a 0-5 rating with no rubric, ask the user “How informative was the bookmark?” and “How much did the bookmark influence your submission?”&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*Expertiza YouTube channel: https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg/videos&lt;br /&gt;
*Expertiza Documentation: http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
*Expertiza on Github: https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115327</id>
		<title>CSC/ECE 517 Spring 2018- Project Juniper:Bookmark Enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115327"/>
		<updated>2018-03-27T01:31:33Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Files modified in current project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
====Expertiza Background====&lt;br /&gt;
Best stated in the project documentation, “The Expertiza project is software to create reusable learning objects through peer review. It also supports team projects, and the submission of almost any document type, including URLs and wiki pages.” The system makes it easy for instructors to post assignments and manage students. Students are able to work in teams, submit assignments, review feedback, and review their teammates.&lt;br /&gt;
&lt;br /&gt;
====Description of Current Project====&lt;br /&gt;
&lt;br /&gt;
Basic functionality already exists to add bookmarks to topics. Users can submit links via a bookmark to provide helpful sources for the author to complete their work. Authors can rank the usefulness of these bookmarks as 1-5 with a drop down menu next to the bookmark.&lt;br /&gt;
&lt;br /&gt;
This project intends to build on the bookmark functionality by allowing instructors to access the bookmark ratings rubric, and designing a way to assess if these bookmarks are being utilized by the author.&lt;br /&gt;
&lt;br /&gt;
==Issues==&lt;br /&gt;
====Problem 1:====&lt;br /&gt;
When an instructor is logged in, they can manage rubrics under the Manage &amp;gt; Questionnaires tab. However, bookmark ratings are not available to be selected.&lt;br /&gt;
&lt;br /&gt;
[[File:Problem1.jpg]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem:====&lt;br /&gt;
An instructor can now see ‘Bookmark reviews’ in the Manage &amp;gt; Questionnaires drop down menu.&lt;br /&gt;
&lt;br /&gt;
====Problem 2:====&lt;br /&gt;
When a user logs in as an instructor and selects Manage &amp;gt; Questionnaires, the links associated with the Bookmark Rating rubric do not link to another page, rather an error message is provided.&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink1.png]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem====&lt;br /&gt;
Issues with the migration files have been corrected so that the links now take users to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink2.png]]&lt;br /&gt;
&lt;br /&gt;
====Problem 3:====&lt;br /&gt;
The current functionality only allows for the author to review the bookmark, and the reviewer is not able to assess the usefulness of a bookmark.&lt;br /&gt;
&lt;br /&gt;
====Proposed design to address the problem:====&lt;br /&gt;
The design below could be implemented to allow for input from reviewers on bookmarks. This would involve modification to the existing classes to add “karma points,” which are points a user acquires for submitting helpful bookmarks. Both the reviewer and the author can submit a 1-5 rating on a bookmark- the author does so based on how helpful they found the link, and the reviewer based on how impactful the bookmark appeared to be on the author’s work. These ratings translate directly into karma points, making a user who submits a bookmark eligible to earn up to 10 karma points for that bookmark. This would require a field for karma points in the user database, where points would be stored and accumulated. Only the instructor would be permissioned to view a students karma points, and the instructor would be able to list, sort, and filter users by karma points. How the karma points are utilized is at the discretion of the instructor; two examples of usage could be for recognition of helpful students and awarding participation grades based on a baseline of karma points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: UML2.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Files modified in current project==&lt;br /&gt;
*20180326223032_update_bookmark_rating_tree_folder_rating.rb&lt;br /&gt;
&lt;br /&gt;
==UI Testing==&lt;br /&gt;
&lt;br /&gt;
*'''Adding bookmark rating to Manage menu'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and find ‘Bookmark ratings’ now among the options&lt;br /&gt;
**Select Bookmark ratings &lt;br /&gt;
**You will land on the Bookmark ratings page&lt;br /&gt;
&lt;br /&gt;
*'''Creating a Bookmark Rating Questionnaire'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and select ‘Bookmark ratings’ &lt;br /&gt;
**Choose either new public item or new private item&lt;br /&gt;
**Enter a name, min score, max score, and choose whether the bookmark questionnaire is private from the drop down menu&lt;br /&gt;
**Select &amp;quot;Create&amp;quot;&lt;br /&gt;
**You will now see a confirmation message stating that the bookmark was successfully created&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*In addition to building the feature designed above, karma points could be extended to other parts of Expertiza to reinforce positive user interactions.&lt;br /&gt;
*Build on the current 0-5 rating system by adding criteria for a bookmark ratings. For example, rather than a simple ask for a 0-5 rating with no rubric, ask the user “How informative was the bookmark?” and “How much did the bookmark influence your submission?”&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*Expertiza YouTube channel: https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg/videos&lt;br /&gt;
*Expertiza Documentation: http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
*Expertiza on Github: https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115326</id>
		<title>CSC/ECE 517 Spring 2018- Project Juniper:Bookmark Enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115326"/>
		<updated>2018-03-27T01:30:22Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* Files modified in current project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
====Expertiza Background====&lt;br /&gt;
Best stated in the project documentation, “The Expertiza project is software to create reusable learning objects through peer review. It also supports team projects, and the submission of almost any document type, including URLs and wiki pages.” The system makes it easy for instructors to post assignments and manage students. Students are able to work in teams, submit assignments, review feedback, and review their teammates.&lt;br /&gt;
&lt;br /&gt;
====Description of Current Project====&lt;br /&gt;
&lt;br /&gt;
Basic functionality already exists to add bookmarks to topics. Users can submit links via a bookmark to provide helpful sources for the author to complete their work. Authors can rank the usefulness of these bookmarks as 1-5 with a drop down menu next to the bookmark.&lt;br /&gt;
&lt;br /&gt;
This project intends to build on the bookmark functionality by allowing instructors to access the bookmark ratings rubric, and designing a way to assess if these bookmarks are being utilized by the author.&lt;br /&gt;
&lt;br /&gt;
==Issues==&lt;br /&gt;
====Problem 1:====&lt;br /&gt;
When an instructor is logged in, they can manage rubrics under the Manage &amp;gt; Questionnaires tab. However, bookmark ratings are not available to be selected.&lt;br /&gt;
&lt;br /&gt;
[[File:Problem1.jpg]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem:====&lt;br /&gt;
An instructor can now see ‘Bookmark reviews’ in the Manage &amp;gt; Questionnaires drop down menu.&lt;br /&gt;
&lt;br /&gt;
====Problem 2:====&lt;br /&gt;
When a user logs in as an instructor and selects Manage &amp;gt; Questionnaires, the links associated with the Bookmark Rating rubric do not link to another page, rather an error message is provided.&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink1.png]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem====&lt;br /&gt;
Issues with the migration files have been corrected so that the links now take users to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink2.png]]&lt;br /&gt;
&lt;br /&gt;
====Problem 3:====&lt;br /&gt;
The current functionality only allows for the author to review the bookmark, and the reviewer is not able to assess the usefulness of a bookmark.&lt;br /&gt;
&lt;br /&gt;
====Proposed design to address the problem:====&lt;br /&gt;
The design below could be implemented to allow for input from reviewers on bookmarks. This would involve modification to the existing classes to add “karma points,” which are points a user acquires for submitting helpful bookmarks. Both the reviewer and the author can submit a 1-5 rating on a bookmark- the author does so based on how helpful they found the link, and the reviewer based on how impactful the bookmark appeared to be on the author’s work. These ratings translate directly into karma points, making a user who submits a bookmark eligible to earn up to 10 karma points for that bookmark. This would require a field for karma points in the user database, where points would be stored and accumulated. Only the instructor would be permissioned to view a students karma points, and the instructor would be able to list, sort, and filter users by karma points. How the karma points are utilized is at the discretion of the instructor; two examples of usage could be for recognition of helpful students and awarding participation grades based on a baseline of karma points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: UML2.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Files modified in current project==&lt;br /&gt;
*20180326223032_update_bookmark_rating_tree_folder_rating.rb&lt;br /&gt;
*20180326223032_update_bookmark_rating_tree_folder_rating.rb&lt;br /&gt;
&lt;br /&gt;
==UI Testing==&lt;br /&gt;
&lt;br /&gt;
*'''Adding bookmark rating to Manage menu'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and find ‘Bookmark ratings’ now among the options&lt;br /&gt;
**Select Bookmark ratings &lt;br /&gt;
**You will land on the Bookmark ratings page&lt;br /&gt;
&lt;br /&gt;
*'''Creating a Bookmark Rating Questionnaire'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and select ‘Bookmark ratings’ &lt;br /&gt;
**Choose either new public item or new private item&lt;br /&gt;
**Enter a name, min score, max score, and choose whether the bookmark questionnaire is private from the drop down menu&lt;br /&gt;
**Select &amp;quot;Create&amp;quot;&lt;br /&gt;
**You will now see a confirmation message stating that the bookmark was successfully created&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*In addition to building the feature designed above, karma points could be extended to other parts of Expertiza to reinforce positive user interactions.&lt;br /&gt;
*Build on the current 0-5 rating system by adding criteria for a bookmark ratings. For example, rather than a simple ask for a 0-5 rating with no rubric, ask the user “How informative was the bookmark?” and “How much did the bookmark influence your submission?”&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*Expertiza YouTube channel: https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg/videos&lt;br /&gt;
*Expertiza Documentation: http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
*Expertiza on Github: https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115289</id>
		<title>CSC/ECE 517 Spring 2018- Project Juniper:Bookmark Enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115289"/>
		<updated>2018-03-27T00:49:39Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
====Expertiza Background====&lt;br /&gt;
Best stated in the project documentation, “The Expertiza project is software to create reusable learning objects through peer review. It also supports team projects, and the submission of almost any document type, including URLs and wiki pages.” The system makes it easy for instructors to post assignments and manage students. Students are able to work in teams, submit assignments, review feedback, and review their teammates.&lt;br /&gt;
&lt;br /&gt;
====Description of Current Project====&lt;br /&gt;
&lt;br /&gt;
Basic functionality already exists to add bookmarks to topics. Users can submit links via a bookmark to provide helpful sources for the author to complete their work. Authors can rank the usefulness of these bookmarks as 1-5 with a drop down menu next to the bookmark.&lt;br /&gt;
&lt;br /&gt;
This project intends to build on the bookmark functionality by allowing instructors to access the bookmark ratings rubric, and designing a way to assess if these bookmarks are being utilized by the author.&lt;br /&gt;
&lt;br /&gt;
==Issues==&lt;br /&gt;
====Problem 1:====&lt;br /&gt;
When an instructor is logged in, they can manage rubrics under the Manage &amp;gt; Questionnaires tab. However, bookmark ratings are not available to be selected.&lt;br /&gt;
&lt;br /&gt;
[[File:Problem1.jpg]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem:====&lt;br /&gt;
An instructor can now see ‘Bookmark reviews’ in the Manage &amp;gt; Questionnaires drop down menu.&lt;br /&gt;
&lt;br /&gt;
====Problem 2:====&lt;br /&gt;
When a user logs in as an instructor and selects Manage &amp;gt; Questionnaires, the links associated with the Bookmark Rating rubric do not link to another page, rather an error message is provided.&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink1.png]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem====&lt;br /&gt;
Issues with the migration files have been corrected so that the links now take users to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink2.png]]&lt;br /&gt;
&lt;br /&gt;
====Problem 3:====&lt;br /&gt;
The current functionality only allows for the author to review the bookmark, and the reviewer is not able to assess the usefulness of a bookmark.&lt;br /&gt;
&lt;br /&gt;
====Proposed design to address the problem:====&lt;br /&gt;
The design below could be implemented to allow for input from reviewers on bookmarks. This would involve modification to the existing classes to add “karma points,” which are points a user acquires for submitting helpful bookmarks. Both the reviewer and the author can submit a 1-5 rating on a bookmark- the author does so based on how helpful they found the link, and the reviewer based on how impactful the bookmark appeared to be on the author’s work. These ratings translate directly into karma points, making a user who submits a bookmark eligible to earn up to 10 karma points for that bookmark. This would require a field for karma points in the user database, where points would be stored and accumulated. Only the instructor would be permissioned to view a students karma points, and the instructor would be able to list, sort, and filter users by karma points. How the karma points are utilized is at the discretion of the instructor; two examples of usage could be for recognition of helpful students and awarding participation grades based on a baseline of karma points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: UML2.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Files modified in current project==&lt;br /&gt;
&lt;br /&gt;
==UI Testing==&lt;br /&gt;
&lt;br /&gt;
*'''Adding bookmark rating to Manage menu'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and find ‘Bookmark ratings’ now among the options&lt;br /&gt;
**Select Bookmark ratings &lt;br /&gt;
**You will land on the Bookmark ratings page&lt;br /&gt;
&lt;br /&gt;
*'''Creating a Bookmark Rating Questionnaire'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and select ‘Bookmark ratings’ &lt;br /&gt;
**Choose either new public item or new private item&lt;br /&gt;
**Enter a name, min score, max score, and choose whether the bookmark questionnaire is private from the drop down menu&lt;br /&gt;
**Select &amp;quot;Create&amp;quot;&lt;br /&gt;
**You will now see a confirmation message stating that the bookmark was successfully created&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*In addition to building the feature designed above, karma points could be extended to other parts of Expertiza to reinforce positive user interactions.&lt;br /&gt;
*Build on the current 0-5 rating system by adding criteria for a bookmark ratings. For example, rather than a simple ask for a 0-5 rating with no rubric, ask the user “How informative was the bookmark?” and “How much did the bookmark influence your submission?”&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*Expertiza YouTube channel: https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg/videos&lt;br /&gt;
*Expertiza Documentation: http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
*Expertiza on Github: https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115286</id>
		<title>CSC/ECE 517 Spring 2018- Project Juniper:Bookmark Enhancements</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Spring_2018-_Project_Juniper:Bookmark_Enhancements&amp;diff=115286"/>
		<updated>2018-03-27T00:45:01Z</updated>

		<summary type="html">&lt;p&gt;Jbatty: /* UI Testing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
====Expertiza Background====&lt;br /&gt;
Best stated in the project documentation, “The Expertiza project is software to create reusable learning objects through peer review. It also supports team projects, and the submission of almost any document type, including URLs and wiki pages.” The system makes it easy for instructors to post assignments and manage students. Students are able to work in teams, submit assignments, review feedback, and review their teammates.&lt;br /&gt;
&lt;br /&gt;
====Description of Current Project====&lt;br /&gt;
&lt;br /&gt;
Basic functionality already exists to add bookmarks to topics. Users can submit links via a bookmark to provide helpful sources for the author to complete their work. Authors can rank the usefulness of these bookmarks as 1-5 with a drop down menu next to the bookmark.&lt;br /&gt;
&lt;br /&gt;
This project intends to build on the bookmark functionality by allowing instructors to access the bookmark ratings rubric, and designing a way to assess if these bookmarks are being utilized by the author.&lt;br /&gt;
&lt;br /&gt;
==Issues==&lt;br /&gt;
====Problem 1:====&lt;br /&gt;
When an instructor is logged in, they can manage rubrics under the Manage &amp;gt; Questionnaires tab. However, bookmark ratings are not available to be selected.&lt;br /&gt;
&lt;br /&gt;
[[File:Problem1.jpg]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem:====&lt;br /&gt;
An instructor can now see ‘Bookmark reviews’ in the Manage &amp;gt; Questionnaires drop down menu.&lt;br /&gt;
&lt;br /&gt;
====Problem 2:====&lt;br /&gt;
When a user logs in as an instructor and selects Manage &amp;gt; Questionnaires, the links associated with the Bookmark Rating rubric do not link to another page, rather an error message is provided.&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: brokenlink1.png]]&lt;br /&gt;
&lt;br /&gt;
====Enhancements to the problem====&lt;br /&gt;
Issues with the migration files have been corrected so that the links now take users to the appropriate page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink1.png]]&lt;br /&gt;
&lt;br /&gt;
[[File: Correctedlink2.png]]&lt;br /&gt;
&lt;br /&gt;
====Problem 3:====&lt;br /&gt;
The current functionality only allows for the author to review the bookmark, and the reviewer is not able to assess the usefulness of a bookmark.&lt;br /&gt;
&lt;br /&gt;
====Proposed design to address the problem:====&lt;br /&gt;
The design below could be implemented to allow for input from reviewers on bookmarks. This would involve modification to the existing classes to add “karma points,” which are points a user acquires for submitting helpful bookmarks. Both the reviewer and the author can submit a 1-5 rating on a bookmark- the author does so based on how helpful they found the link, and the reviewer based on how impactful the bookmark appeared to be on the author’s work. These ratings translate directly into karma points, making a user who submits a bookmark eligible to earn up to 10 karma points for that bookmark. This would require a field for karma points in the user database, where points would be stored and accumulated. Only the instructor would be permissioned to view a students karma points, and the instructor would be able to list, sort, and filter users by karma points. How the karma points are utilized is at the discretion of the instructor; two examples of usage could be for recognition of helpful students and awarding participation grades based on a baseline of karma points.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File: UML2.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Files modified in current project==&lt;br /&gt;
&lt;br /&gt;
==UI Testing==&lt;br /&gt;
&lt;br /&gt;
*'''Adding bookmark rating to Manage menu'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and find ‘Bookmark ratings’ now among the options&lt;br /&gt;
**Select Bookmark ratings &lt;br /&gt;
**You will land on the Bookmark ratings page&lt;br /&gt;
&lt;br /&gt;
*'''Creating a Bookmark Rating Questionnaire'''&lt;br /&gt;
**Login to Expertiza as an instructor&lt;br /&gt;
**Navigate to the Manage &amp;gt; Questionnaires menu and select ‘Bookmark ratings’ &lt;br /&gt;
**You will land on the Bookmark ratings page&lt;br /&gt;
&lt;br /&gt;
==Future Work==&lt;br /&gt;
*In addition to building the feature designed above, karma points could be extended to other parts of Expertiza to reinforce positive user interactions.&lt;br /&gt;
*Build on the current 0-5 rating system by adding criteria for a bookmark ratings. For example, rather than a simple ask for a 0-5 rating with no rubric, ask the user “How informative was the bookmark?” and “How much did the bookmark influence your submission?”&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
*Expertiza YouTube channel: https://www.youtube.com/channel/UCdKXzox7hrWjfOMML6FzTWg/videos&lt;br /&gt;
*Expertiza Documentation: http://wiki.expertiza.ncsu.edu/index.php/Expertiza_documentation&lt;br /&gt;
*Expertiza on Github: https://github.com/expertiza/expertiza&lt;/div&gt;</summary>
		<author><name>Jbatty</name></author>
	</entry>
</feed>