<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6848363863758874115</id><updated>2024-11-01T04:13:29.686-04:00</updated><category term="CSS"/><category term="HTML"/><category term="Javascript"/><category term="NASA"/><category term="Coldfusion"/><category term="PHP"/><category term="Accessibility"/><category term="Design"/><category term="MXUnit"/><category term="MySQL"/><category term="Objective-C"/><category term="SASS"/><category term="Selenium"/><category term="Testing"/><title type='text'>Line Comments</title><subtitle type='html'>From one web developer to another</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.linecomments.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.linecomments.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6848363863758874115.post-3672846120600318209</id><published>2017-08-09T17:49:00.000-04:00</published><updated>2017-08-09T18:31:16.222-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CSS"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="NASA"/><category scheme="http://www.blogger.com/atom/ns#" term="SASS"/><title type='text'>New NASA website launched using the U.S. Web Design Standards</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://www1.grc.nasa.gov/&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;910&quot; data-original-width=&quot;1089&quot; height=&quot;332&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOmHVCNOLYuQhVUjvp57LyR1UjMAn8GXOOHnMIjfPxW6xZjQqFcMA_WUYTo4U2z9IjgPMTucndCWg1REG6jTE6a9ta7rgFAVHZJ1tBNgz4SuwRm0KUzB4YeulBaadtIvKT-OwxeRqw2igE/s400/Screen+Shot+2017-08-09+at+6.27.25+PM.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;Our team just launched a &lt;a href=&quot;https://www1.grc.nasa.gov/&quot;&gt;new website for NASA Glenn&lt;/a&gt;. We used the &lt;a href=&quot;https://standards.usa.gov/&quot; target=&quot;_blank&quot;&gt;US Web Design Standards&lt;/a&gt;&amp;nbsp;that we&amp;nbsp;&lt;a href=&quot;https://bruffridge.github.io/web-design-standards-docs&quot; target=&quot;_blank&quot;&gt;tweaked slightly for NASA&lt;/a&gt; for the UI. Check it out, and let us know what you think by clicking the &quot;Provide feedback&quot; tab on the right.&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.linecomments.com/feeds/3672846120600318209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.linecomments.com/2017/08/new-nasa-website-launched-using-us-web.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/3672846120600318209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/3672846120600318209'/><link rel='alternate' type='text/html' href='http://www.linecomments.com/2017/08/new-nasa-website-launched-using-us-web.html' title='New NASA website launched using the U.S. Web Design Standards'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOmHVCNOLYuQhVUjvp57LyR1UjMAn8GXOOHnMIjfPxW6xZjQqFcMA_WUYTo4U2z9IjgPMTucndCWg1REG6jTE6a9ta7rgFAVHZJ1tBNgz4SuwRm0KUzB4YeulBaadtIvKT-OwxeRqw2igE/s72-c/Screen+Shot+2017-08-09+at+6.27.25+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6848363863758874115.post-8649489123048697562</id><published>2016-04-06T13:55:00.000-04:00</published><updated>2016-04-06T13:55:09.723-04:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CSS"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="MySQL"/><category scheme="http://www.blogger.com/atom/ns#" term="NASA"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>NASA Inventory System for Lab Equipment now available on GitHub!</title><content type='html'>The ISLE project I worked on for about a year has finally been released as open-source software on GitHub. &lt;a href=&quot;https://github.com/nasa/isle&quot;&gt;Head on over&lt;/a&gt; and check it out!</content><link rel='replies' type='application/atom+xml' href='http://www.linecomments.com/feeds/8649489123048697562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.linecomments.com/2016/04/nasa-inventory-system-for-lab-equipment.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/8649489123048697562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/8649489123048697562'/><link rel='alternate' type='text/html' href='http://www.linecomments.com/2016/04/nasa-inventory-system-for-lab-equipment.html' title='NASA Inventory System for Lab Equipment now available on GitHub!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6848363863758874115.post-4467304702783418151</id><published>2014-01-17T12:30:00.000-05:00</published><updated>2014-01-17T12:31:31.456-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="NASA"/><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><title type='text'>Set your eyes on space with this new app for Windows and Mac!</title><content type='html'>&lt;p&gt;I am excited to announce that we reached version 1.0 of &lt;a href=&quot;http://billcacy.github.io/NPOD/&quot;&gt;NPOD&lt;/a&gt;, an application for Windows and Mac that updates your wallpaper daily with the latest image from the &lt;a href=&quot;http://www.nasa.gov/multimedia/imagegallery/iotd.html&quot;&gt;NASA Image of the Day gallery&lt;/a&gt;! A detailed description about each breathtaking image is available through the app icon. NPOD, which is short for NASA Pic of the Day, was developed during the 2013 &lt;a href=&quot;http://spaceappschallenge.org/&quot;&gt;International Space Apps Challenge&lt;/a&gt;. The code is opensource and &lt;a href=&quot;https://github.com/BillCacy/NPOD&quot;&gt;available on Github&lt;/a&gt;. So please, &lt;a href=&quot;http://billcacy.github.io/NPOD/&quot;&gt;download and install&lt;/a&gt; it and let me know what you think in the comments!&lt;/p&gt;

&lt;p&gt;&lt;span style=&quot;font-size: large&quot;&gt;Additional Info&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;I developed the Mac version. This is the first Objective-C app I&#39;ve ever written, and the first desktop app I&#39;ve written since college. It was challenging and fun learning to program in Objective-C and the Cocoa framework. Fortunately, the API documentation by Apple is pretty exhaustive.&lt;/p&gt;

&lt;p&gt;The Windows version was written by Bill Cacy. We worked closely to make sure that both versions perform the same basic functionality although there are a couple of small differences between the two versions.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.linecomments.com/feeds/4467304702783418151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.linecomments.com/2014/01/npod.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/4467304702783418151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/4467304702783418151'/><link rel='alternate' type='text/html' href='http://www.linecomments.com/2014/01/npod.html' title='Set your eyes on space with this new app for Windows and Mac!'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6848363863758874115.post-6145979609147948687</id><published>2013-01-07T11:27:00.000-05:00</published><updated>2013-11-22T10:07:38.802-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="CSS"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><category scheme="http://www.blogger.com/atom/ns#" term="Javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="PHP"/><title type='text'>Feedback for Pivotal Tracker: Allow users to easily submit bugs, features, and chores to Pivotal Tracker.</title><content type='html'>&lt;p&gt;I just &lt;a href=&quot;https://github.com/bruffridge/PivotalFeedback&quot; target=&quot;_blank&quot;&gt;shared some code on GitHub&lt;/a&gt; from a project I am finishing up. I wanted to give my users a way to submit bug reports and feature requests quickly and easily. I also wanted to make sure I captured all the information I needed from them. I also needed to keep track of all the feedback and track it to completion.&lt;/p&gt;
&lt;p&gt;
I decided that the tool I was already using to manage the development of the project, &lt;a href=&quot;https://www.pivotaltracker.com/&quot; target=&quot;_blank&quot;&gt;Pivotal Tracker&lt;/a&gt;, would also be a great tool to store these requests since I was already familiar with it. So I added a &quot;Got Feedback?&quot; link in the footer of my app that when pressed displays a modal dialog where the user can select from bugs, features, or other. I automatically include the user&#39;s name, page they are on, time, and user agent to minimize the amount of data entry required. I validate the feedback on the server side via php and submit the http request using the &lt;a href=&quot;https://www.pivotaltracker.com/help/api&quot; target=&quot;_blank&quot;&gt;Pivotal REST API&lt;/a&gt; from php as well. It would have been easier to do this from jQuery on the client, but I liked the additional security of performing these functions server-side.&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://github.com/bruffridge/PivotalFeedback&quot; target=&quot;_blank&quot;&gt;Check out the code&lt;/a&gt; and &lt;a href=&quot;http://bruffridge.github.com/PivotalFeedback/&quot; target=&quot;_blank&quot;&gt;view the demo&lt;/a&gt; and let me know what you think. Constructive criticism is always welcome.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.linecomments.com/feeds/6145979609147948687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.linecomments.com/2013/01/pivotalfeedback.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/6145979609147948687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/6145979609147948687'/><link rel='alternate' type='text/html' href='http://www.linecomments.com/2013/01/pivotalfeedback.html' title='Feedback for Pivotal Tracker: Allow users to easily submit bugs, features, and chores to Pivotal Tracker.'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6848363863758874115.post-5181416453897687969</id><published>2012-01-24T16:19:00.000-05:00</published><updated>2012-01-24T16:19:06.883-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Coldfusion"/><category scheme="http://www.blogger.com/atom/ns#" term="MXUnit"/><category scheme="http://www.blogger.com/atom/ns#" term="Selenium"/><category scheme="http://www.blogger.com/atom/ns#" term="Testing"/><title type='text'>Web UI regression testing using CFSelenium, MXUnit, and ImageMagick</title><content type='html'>Regression testing&#39;s goal is to make sure that future changes do not produce new bugs. I went about applying this principle to the look and feel of a site. So that if a css or text change moves away from the baseline the differences can be seen.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Tools used&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Mac 10.6 Snow Leopard with built-in Apache server&lt;br /&gt;
Coldfusion 9 developer edition &lt;br /&gt;
MXUnit 2.1.1&lt;br /&gt;
CFSelenium 1.7&lt;br /&gt;
ImageMagick 6.7.4-6&lt;br /&gt;
Firefox 3.6.25&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Set up&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So first you need access to a ColdFusion server. Then install MXUnit. As of this posting, the &lt;a href=&quot;https://github.com/mxunit/mxunit/downloads&quot;&gt;latest stable version&lt;/a&gt; is 2.1.1. I followed the &lt;a href=&quot;http://wiki.mxunit.org/display/default/Install+MXUnit&quot;&gt;docs&lt;/a&gt; and installed it to my webroot so I wouldn&#39;t have to configure it. Next, I added a mapping to Coldfusion Administrator named &lt;i&gt;mxunit&lt;/i&gt; that points to the &lt;i&gt;mxunit&lt;/i&gt; folder.&lt;br /&gt;
&lt;br /&gt;
CFSelenium was just as easy to install. I downloaded the &lt;a href=&quot;https://github.com/bobsilverberg/CFSelenium/downloads&quot;&gt;latest version&lt;/a&gt; which at the time of this posting is 1.7. And extracted it to my webroot in a folder named &lt;i&gt;cfselenium&lt;/i&gt;. Then I added another mapping named &lt;i&gt;cfselenium&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
For ImageMagick I followed the &lt;a href=&quot;http://www.imagemagick.org/script/binary-releases.php?ImageMagick=fmor9a27vth68ev4h4p001h4l5#macosx&quot;&gt;instructions&lt;/a&gt; and installed it using MacPorts. It took about 10 minutes to finish installing as there were a lot of dependencies.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;The Test&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
My sample uses a simple registration form, &lt;i&gt;register.htm&lt;/i&gt;, with four fields for first, last, phone, and email.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1672026.js?file=register.htm&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
My sample site has the following file structure:&lt;br /&gt;
&lt;br /&gt;
register&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;tests&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testsuite&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RegisterTest.cfc&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;runTests.cfm&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;register.htm&lt;br /&gt;
&lt;br /&gt;
The component I use to test this form is &lt;i&gt;RegisterTest.cfc&lt;/i&gt;. It extends &lt;i&gt;cfselenium.CFSeleniumTestCase&lt;/i&gt; which extends &lt;i&gt;mxunit.framework.TestCase&lt;/i&gt;. The mappings I created earlier allow these prefixes to resolve correctly. It contains the test functions that run selenium commands and mxunit functions. You will need to replace &lt;i&gt;absolutePathToWebRoot&lt;/i&gt; with yours.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1672011.js?file=RegisterTest.cfc&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
In the &lt;i&gt;formPageLooksRight&lt;/i&gt; function are the lines that take and compare the screenshots.&lt;br /&gt;
&lt;br /&gt;
This &lt;i&gt;cfexecute&lt;/i&gt; tag executes the ImageMagick &lt;i&gt;compare&lt;/i&gt; command which compares &lt;i&gt;baseline.png&lt;/i&gt; and &lt;i&gt;screenshot.png&lt;/i&gt; and creates an image with the differences as &lt;i&gt;compare.png&lt;/i&gt;.&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;cfexecute name=&quot;/opt/local/bin/compare&quot; timeout=&quot;60&quot; arguments=&quot;&quot;&quot;/absolutePathToWebRoot/register/tests/baseline.png&quot;&quot; &quot;&quot;/absolutePathToWebRoot/register/tests/screenshot.png&quot;&quot; &quot;&quot;/absolutePathToWebRoot/register/tests/compare.png&quot;&quot;&quot; /&amp;gt;&lt;/pre&gt;&lt;br /&gt;
The next &lt;i&gt;cfexecute&lt;/i&gt; tag again runs the &lt;i&gt;compare&lt;/i&gt; command, but this time it outputs the number of pixels that differ between the two images. For some reason the &lt;i&gt;cfexecute&lt;/i&gt; tag thinks the output from this command is error output, so instead of storing it in the &lt;i&gt;variable&lt;/i&gt; attribute it puts it in the &lt;i&gt;errorvariable&lt;/i&gt; attribute.&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;cfexecute name=&quot;/opt/local/bin/compare&quot; timeout=&quot;60&quot; arguments=&quot;-metric AE &quot;&quot;/absolutePathToWebRoot/register/tests/baseline.png&quot;&quot; &quot;&quot;/absolutePathToWebRoot/register/tests/screenshot.png&quot;&quot; null: 2&amp;gt;&amp;amp;1&quot; errorvariable=&quot;diffVal&quot; /&amp;gt;&lt;/pre&gt;&lt;br /&gt;
You can read about comparing images using ImageMagick &lt;a href=&quot;http://www.imagemagick.org/Usage/compare/&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
To run the tests navigate to &lt;i&gt;runTests.cfm?debug=true&lt;/i&gt; in the browser. The &lt;i&gt;debug&lt;/i&gt; variable allows the debug messages to show in the test output. This page runs the test functions inside any cfc in the&lt;i&gt; testsuite&lt;/i&gt; folder that either starts or ends its name with &quot;Test&quot;. Our example only has one, &lt;i&gt;RegisterTest.cfc&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1672021.js?file=runTests.cfm&quot;&gt;
&lt;/script&gt;&lt;br /&gt;
When you run the tests CFSelenium starts the selenium RC server automatically for you. Sometimes you might get a timeout error when you try to run your tests. Killing any running instances of Selenium fixed this for me. &lt;i&gt;ps -A | grep &quot;selenium&quot;&lt;/i&gt;. Gives the process id (pid). &lt;i&gt;kill pid&lt;/i&gt;. To kill it.&lt;br /&gt;
&lt;br /&gt;
The first time you run the tests the &lt;i&gt;formPageLooksRight&lt;/i&gt; test fails because it is looking for a file &lt;i&gt;&quot;&lt;/i&gt;baseline.png&lt;i&gt;&quot;&lt;/i&gt; in the &lt;i&gt;tests&lt;/i&gt; folder that does not exist. It does create &lt;i&gt;screenshot.png&lt;/i&gt; of what the page looks like. So this will be used as the baseline so rename it to &quot;baseline.png&quot;.&lt;br /&gt;
&lt;br /&gt;
If you don&#39;t set the background color for the page the screenshot shows it as black. Specifying the &lt;i&gt;background-color&lt;/i&gt; of the body tag fixed this.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;prettyprint&quot;&gt;&amp;lt;body style=&quot;background-color: #ffffff&quot;&amp;gt;&lt;/pre&gt;&lt;br /&gt;
Run the tests again by refreshing the page. Now the test should pass. The links in the test output show the baseline (exp), the screenshot taken by the test (act), and any differences between the two (dif).&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/Screenshot2012-01-24at13733PM.png&quot;&gt;&lt;img alt=&quot;mxunit test results showing all tests passed&quot; border=&quot;0&quot; src=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/Screenshot2012-01-24at13733PM.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Now make a change to the UI in &lt;i&gt;register.htm&lt;/i&gt;. I removed the &quot;N&quot; from the &quot;First Name&quot; label.&lt;br /&gt;
&lt;br /&gt;
This time after you rerun the tests you will see that &lt;i&gt;formPageLooksRight&lt;/i&gt; has failed with a message that shows how many pixels differ between expected and actual screenshots. Clicking on the &lt;i&gt;dif&lt;/i&gt; link highlights the pixels that differ between the two images.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/Screenshot2012-01-24at14901PM.png&quot;&gt;&lt;img alt=&quot;mxunit test results showing failed test&quot; border=&quot;0&quot; src=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/Screenshot2012-01-24at14901PM.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Expected:&lt;br /&gt;
&lt;a href=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/baseline.png&quot;&gt;&lt;img alt=&quot;expected screenshot&quot; border=&quot;0&quot; src=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/baseline.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Actual:&lt;br /&gt;
&lt;a href=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/screenshot.png&quot;&gt;&lt;img alt=&quot;actual screenshot&quot; border=&quot;0&quot; src=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/screenshot.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Difference:&lt;br /&gt;
&lt;a href=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/compare2.png&quot;&gt;&lt;img alt=&quot;differences between two images&quot; border=&quot;0&quot; src=&quot;http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/compare2.png&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.linecomments.com/feeds/5181416453897687969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.linecomments.com/2012/01/web-ui-regression-testing-using.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/5181416453897687969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/5181416453897687969'/><link rel='alternate' type='text/html' href='http://www.linecomments.com/2012/01/web-ui-regression-testing-using.html' title='Web UI regression testing using CFSelenium, MXUnit, and ImageMagick'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://i1070.photobucket.com/albums/u490/bruffridge/Line%20Comments/th_Screenshot2012-01-24at13733PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6848363863758874115.post-1513058205633056317</id><published>2012-01-17T15:25:00.001-05:00</published><updated>2012-01-17T15:50:27.583-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Coldfusion"/><title type='text'>Application last modified date</title><content type='html'>Our web development team has a requirement that we include a date the site was last updated. Since we primarily develop three tier web applications and not static web pages our html pages don&#39;t change much as they are views for database data. Instead of a date on each page giving when it was last updated like &lt;a href=&quot;http://tutorial236.easycfm.com/&quot;&gt;this article&lt;/a&gt; shows how to do, our date shows when the last update was made to the entire application. To do this, I created a cfc function that uses cfdirectory to look at all the files in my application folder on the web server and get the last modified date.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1628703.js&quot;&gt; &lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Then I call this function in application.cfc&#39;s onSessionStart and store the result in a session variable:&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1628732.js&quot;&gt; &lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Then to display the result I put the following in my site&#39;s footer.&lt;br /&gt;
&lt;br /&gt;
&lt;script src=&quot;https://gist.github.com/1628740.js&quot;&gt; &lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.linecomments.com/feeds/1513058205633056317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.linecomments.com/2012/01/application-last-modified-date.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/1513058205633056317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/1513058205633056317'/><link rel='alternate' type='text/html' href='http://www.linecomments.com/2012/01/application-last-modified-date.html' title='Application last modified date'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6848363863758874115.post-5362507553445869568</id><published>2012-01-11T12:12:00.001-05:00</published><updated>2012-02-08T10:23:49.474-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Accessibility"/><category scheme="http://www.blogger.com/atom/ns#" term="CSS"/><category scheme="http://www.blogger.com/atom/ns#" term="Design"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML"/><title type='text'>AppLayout: A simple starting layout for a web application</title><content type='html'>OK, first post. I&#39;ve been delaying this for awhile, but it&#39;s a new year and I couldn&#39;t wait. I am starting this blog to contribute to the online web development community from which I&#39;ve received so much knowledge. I am often googling for a solution to a technical problem and quickly find someone has tackled it and posted it on their blog or website.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8WXPMqfKqGSK6xYj-u7yOoaDmineyhXKqGjjVs-c1GJpJVjsGONlr0ukS-oUK8twh1VVhjm9xhr1F7rEbJUrmqadjN7K38zSB_yYWVnEmrfGC-IL-c1YFMIfMUZocp4-1YNFniwtu5LcL/s1600/applayout.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img alt=&quot;AppLayout&quot; border=&quot;0&quot; height=&quot;159&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8WXPMqfKqGSK6xYj-u7yOoaDmineyhXKqGjjVs-c1GJpJVjsGONlr0ukS-oUK8twh1VVhjm9xhr1F7rEbJUrmqadjN7K38zSB_yYWVnEmrfGC-IL-c1YFMIfMUZocp4-1YNFniwtu5LcL/s320/applayout.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;AppLayout &lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
I&#39;ve been working on developing a fluid, lightweight application layout that is 508 compliant. The design of this blog is based on it. It uses percentage based widths to adjust to the user&#39;s viewport width (browser window). EM-based sizing keeps text and images within containers and correctly proportioned through font size changes. Other than a couple of optional images, it uses CSS entirely. The navigation is keyboard accessible &lt;strike&gt;even with javascript disabled (although not as visually sound)&lt;/strike&gt;&amp;nbsp;&lt;b&gt;Update: &lt;/b&gt;&lt;i&gt;I updated the submenus to use code from Twitter Bootstrap so they are not usable with javascript disabled anymore.&lt;/i&gt; The HTML is W3C validated and I tried to reduce the number of tags to make it as semantically accurate as possible. I used the WAVE toolbar to fix any accessibility concerns. The layout has been tested in a number of browsers and versions on both Mac and PC including Chrome, IE, Firefox, and Safari.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;https://github.com/bruffridge/AppLayout&quot;&gt;The code and documentation&lt;/a&gt; is available on GitHub and contains everything needed to put on a webserver and display. It is provided under the &lt;a href=&quot;http://www.opensource.org/licenses/MIT&quot;&gt;MIT license&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Any issues or bugs can go in the &lt;a href=&quot;https://github.com/bruffridge/AppLayout/issues&quot;&gt;issue tracker&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I couldn&#39;t have made this layout without help from the community. Here&#39;s a few that I can remember. If I forgot you, let me know and I&#39;ll add you to the list.&lt;br /&gt;
&lt;br /&gt;
&lt;strike&gt;Blake Haswell for &lt;/strike&gt;&lt;a href=&quot;http://blakehaswell.com/lab/dropdown/deux/&quot; style=&quot;text-decoration: line-through;&quot;&gt;keyboard accessible dropdowns&lt;/a&gt;&amp;nbsp;Replaced with Twitter Bootstrap dropdowns.&lt;br /&gt;
Matthew Tayler for &lt;a href=&quot;http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page&quot;&gt;keeping footers at the bottom of the page&lt;/a&gt; &lt;br /&gt;
Yahoo! developers for &lt;a href=&quot;http://developer.yahoo.com/yui/reset/&quot;&gt;YUI reset&lt;/a&gt; and &lt;a href=&quot;http://developer.yahoo.com/performance/rules.html&quot;&gt;other tips&lt;/a&gt;&lt;br /&gt;
Chris Coyier for &lt;a href=&quot;http://css-tricks.com/snippets/css/css-triangle/&quot;&gt;CSS triangles&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.linecomments.com/feeds/5362507553445869568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.linecomments.com/2012/01/applayout-simple-starting-layout-for.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/5362507553445869568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6848363863758874115/posts/default/5362507553445869568'/><link rel='alternate' type='text/html' href='http://www.linecomments.com/2012/01/applayout-simple-starting-layout-for.html' title='AppLayout: A simple starting layout for a web application'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8WXPMqfKqGSK6xYj-u7yOoaDmineyhXKqGjjVs-c1GJpJVjsGONlr0ukS-oUK8twh1VVhjm9xhr1F7rEbJUrmqadjN7K38zSB_yYWVnEmrfGC-IL-c1YFMIfMUZocp4-1YNFniwtu5LcL/s72-c/applayout.jpg" height="72" width="72"/><thr:total>0</thr:total></entry></feed>