<?xml version="1.0"?>
<News hasArchived="true" page="7878" pageCount="10930" pageSize="10" timestamp="Fri, 06 Nov 2026 19:58:32 -0500" url="https://my3.my.umbc.edu/posts.xml?mode=recent&amp;page=7878">
<NewsItem contentIssues="true" id="42309" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42309">
<Title>N.S.A. Nominee Promotes Cyberwar Units</Title>
<Body>
<![CDATA[
    <div class="html-content">Citing cyberattacks on the new Ukrainian government, President Obama’s nominee to run the National Security Agency, Vice Adm. Michael S. Rogers, said “cyber will be an element of every crisis.”<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F12%2Fworld%2Feurope%2Fnsa-nominee-reports-cyberattacks-on-ukraine-government.html%3Fpartner%3Drss%26emc%3Drss&amp;t=N.S.A.+Nominee+Promotes+Cyberwar+Units" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F12%2Fworld%2Feurope%2Fnsa-nominee-reports-cyberattacks-on-ukraine-government.html%3Fpartner%3Drss%26emc%3Drss&amp;t=N.S.A.+Nominee+Promotes+Cyberwar+Units" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F12%2Fworld%2Feurope%2Fnsa-nominee-reports-cyberattacks-on-ukraine-government.html%3Fpartner%3Drss%26emc%3Drss&amp;t=N.S.A.+Nominee+Promotes+Cyberwar+Units" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F12%2Fworld%2Feurope%2Fnsa-nominee-reports-cyberattacks-on-ukraine-government.html%3Fpartner%3Drss%26emc%3Drss&amp;t=N.S.A.+Nominee+Promotes+Cyberwar+Units" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F12%2Fworld%2Feurope%2Fnsa-nominee-reports-cyberattacks-on-ukraine-government.html%3Fpartner%3Drss%26emc%3Drss&amp;t=N.S.A.+Nominee+Promotes+Cyberwar+Units" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/191801445394/u/0/f/640387/c/34625/s/380e5851/sc/1/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801445394/u/0/f/640387/c/34625/s/380e5851/sc/1/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801445394/u/0/f/640387/c/34625/s/380e5851/sc/1/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801445394/u/0/f/640387/c/34625/s/380e5851/sc/1/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801445394/u/0/f/640387/c/34625/s/380e5851/sc/1/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801445394/u/0/f/640387/c/34625/s/380e5851/sc/1/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801445394/u/0/f/640387/c/34625/s/380e5851/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801445394/u/0/f/640387/c/34625/s/380e5851/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Citing cyberattacks on the new Ukrainian government, President Obama’s nominee to run the National Security Agency, Vice Adm. Michael S. Rogers, said “cyber will be an element of every crisis.”      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/380e5851/sc/1/l/0L0Snytimes0N0C20A140C0A30C120Cworld0Ceurope0Cnsa0Enominee0Ereports0Ecyberattacks0Eon0Eukraine0Egovernment0Bhtml0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42309/guest@my.umbc.edu/a1467f927e53b18d4f02c372514471a0/api/pixel</TrackingUrl>
<Tag>cyberwarfare</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>microsoft-corporation-msft-nasdaq</Tag>
<Tag>national-security-agency</Tag>
<Tag>new</Tag>
<Tag>rogers-michael-s</Tag>
<Tag>technology</Tag>
<Tag>ukraine</Tag>
<Tag>united-states-defense-and-military-forces</Tag>
<Tag>yahoo-inc-yhoo-nasdaq</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 12:17:51 -0400</PostedAt>
<EditAt>Tue, 11 Mar 2014 18:58:59 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="39895" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39895">
<Title>Office hours - Harbor Hall</Title>
<Tagline>Smart Students at UMBC Use Study Groups - join one today!!!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <div>Attention Team Study Groups!</div>
    <div><br></div>I will be holding office hours tomorrow,<strong> Wednesday, 3/12,</strong> in the <strong>Harbor H</strong><strong>all lobby from 11am-1pm</strong>. Stop by to register your current study groups, receive help finding study groups, or give me updates.  <div>
    <div><br></div>
    <div>Hope to see you there!</div>
    <div><br></div>
    <div>Dr. Felix</div>
    </div>
    </div>
]]>
</Body>
<Summary>Attention Team Study Groups!    I will be holding office hours tomorrow, Wednesday, 3/12, in the Harbor Hall lobby from 11am-1pm. Stop by to register your current study groups, receive help...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39895/guest@my.umbc.edu/6aa0b91570a8dea153e77c532460f91f/api/pixel</TrackingUrl>
<Group token="retired-635">iCubed Cohort 3: Team Study Groups</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-635</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/xsmall.png?1375732423</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/original.png?1375732423</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/xxlarge.png?1375732423</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/xlarge.png?1375732423</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/large.png?1375732423</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/medium.png?1375732423</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/small.png?1375732423</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/xsmall.png?1375732423</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/635/8e47b6819f70d10722612702859d8ae2/xxsmall.png?1375732423</AvatarUrl>
<Sponsor>iCubed Cohort 3: Team Study Groups</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 12:08:23 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42306" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42306">
<Title>Creating Autocomplete Dropdowns with the Datalist Element</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>The <code>&lt;datalist&gt;</code> element, a new addition in the HTML5 specification, allows developers to create native autocomplete dropdowns for their web applications. This type of user interface component is commonly used on form fields and search boxes as it helps the user input data faster. In the past, autocomplete dropdowns could only be achieved using JavaScript.</p>
    <p>In this blog post, you’re going to learn how to use the <code>&lt;datalist&gt;</code> element to create native autocomplete dropdowns for your applications.</p>
    <p>Let’s get started.</p>
    <h2>The <code>&lt;datalist&gt;</code> Element</h2>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2014/02/datalist-default.gif" rel="nofollow external" class="bo"><img alt="A datalist autocomplete dropdown in Google Chrome." src="http://blog.teamtreehouse.com/wp-content/uploads/2014/02/datalist-default.gif" width="640" height="178" style="max-width: 100%; height: auto;"></a><p>A datalist autocomplete dropdown in Google Chrome.</p>
    </div>
    <p>The <code>&lt;datalist&gt;</code> element is used to specify all of the possible values for the autocomplete list. Each of these values is defined using an <code>&lt;option&gt;</code> element, as shown in the example below.</p>
    <pre><code>&lt;datalist id="languages"&gt;&#x000A;      &lt;option value="HTML"&gt;&#x000A;      &lt;option value="CSS"&gt;&#x000A;      &lt;option value="JavaScript"&gt;&#x000A;      &lt;option value="Java"&gt;&#x000A;      &lt;option value="Ruby"&gt;&#x000A;      &lt;option value="PHP"&gt;&#x000A;      &lt;option value="Go"&gt;&#x000A;      &lt;option value="Erlang"&gt;&#x000A;      &lt;option value="Python"&gt;&#x000A;      &lt;option value="C"&gt;&#x000A;      &lt;option value="C#"&gt;&#x000A;      &lt;option value="C++"&gt;&#x000A;    &lt;/datalist&gt;</code></pre>
    <p>The <code>&lt;datalist&gt;</code> element should have an <code>id</code> attribute. To link your datalist to an <code>&lt;input&gt;</code> element, you need to specify a <code>list</code> attribute on the input and set its value to the <code>id</code> of your datalist.</p>
    <pre><code>&lt;input type="text" list="languages"&gt;</code></pre>
    <p>That is all you need to add auto-complete functionality to an <code>&lt;input&gt;</code> element. The browser will take care of searching the datalist options for matching values and then displaying those to the user.</p>
    <h2>Loading Options via AJAX</h2>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2014/02/datalist-ajax.gif" rel="nofollow external" class="bo"><img alt="A datalist autocomplete dropdown with options loaded via AJAX." src="http://blog.teamtreehouse.com/wp-content/uploads/2014/02/datalist-ajax.gif" width="639" height="160" style="max-width: 100%; height: auto;"></a><p>A datalist autocomplete dropdown with options loaded via AJAX.</p>
    </div>
    <p>If you want to add a large number of options to your <code>&lt;datalist&gt;</code>, you may want to store those values in an external JSON file. You can then fetch this file via AJAX and populate the <code>&lt;datalist&gt;</code> options once the page has loaded. Let’s look at an example of how to do this.</p>
    <p>Like before, we start with <code>&lt;input&gt;</code> and <code>&lt;datalist&gt;</code> elements. Ensure that you link the two using the <code>id</code> and <code>list</code> attributes.</p>
    <pre><code>&lt;input type="text" id="ajax" list="json-datalist" placeholder="e.g. datalist"&gt;&#x000A;    &lt;datalist id="json-datalist"&gt;&lt;/datalist&gt;</code></pre>
    <p>We then need to get references to these two elements in the JavaScript code.</p>
    <pre><code>// Get the &lt;datalist&gt; and &lt;input&gt; elements.&#x000A;    var dataList = document.getElementById('json-datalist');&#x000A;    var input = document.getElementById('ajax');</code></pre>
    <p>Next, we need to load the JSON file (<code>html-elements.json</code>) and populate the options for the <code>&lt;datalist&gt;</code> element. For this example, we’re just using an array of strings, but it’s also possible to use a more complex data structure.</p>
    <pre><code>// Create a new XMLHttpRequest.&#x000A;    var request = new XMLHttpRequest();&#x000A;    &#x000A;    // Handle state changes for the request.&#x000A;    request.onreadystatechange = function(response) {&#x000A;      if (request.readyState === 4) {&#x000A;        if (request.status === 200) {&#x000A;          // Parse the JSON&#x000A;          var jsonOptions = JSON.parse(request.responseText);&#x000A;    &#x000A;          // Loop over the JSON array.&#x000A;          jsonOptions.forEach(function(item) {&#x000A;            // Create a new &lt;option&gt; element.&#x000A;            var option = document.createElement('option');&#x000A;            // Set the value using the item in the JSON array.&#x000A;            option.value = item;&#x000A;            // Add the &lt;option&gt; element to the &lt;datalist&gt;.&#x000A;            dataList.appendChild(option);&#x000A;          });&#x000A;    &#x000A;          // Update the placeholder text.&#x000A;          input.placeholder = "e.g. datalist";&#x000A;        } else {&#x000A;          // An error occured :(&#x000A;          input.placeholder = "Couldn't load datalist options :(";&#x000A;        }&#x000A;      }&#x000A;    };&#x000A;    &#x000A;    // Update the placeholder text.&#x000A;    input.placeholder = "Loading options...";&#x000A;    &#x000A;    // Set up and make the request.&#x000A;    request.open('GET', 'html-elements.json', true);&#x000A;    request.send();</code></pre>
    <p>This code will load the <code>html-elements.json</code> file using an <code>XMLHttpRequest</code>. Once the file has been fetched, we parse the raw JSON data so that we have a JavaScript array to work with. We then loop over each of the items in this array. Each time we create a new <code>&lt;option&gt;</code> element, set the <code>value</code> attribute to the current item in the array, and then add this <code>&lt;option&gt;</code> element to the <code>&lt;datalist&gt;</code>.</p>
    <p>In this example we’re also using the <code>&lt;input&gt;</code> element’s <code>placeholder</code> property to display the loading status for the datalist options.</p>
    <p><a href="http://codepen.io/matt-west/full/jKnzG" rel="nofollow external" class="bo">See the Demo</a> <a href="http://codepen.io/matt-west/pen/jKnzG" rel="nofollow external" class="bo">View on CodePen</a></p>
    <h2>Browser Support</h2>
    <p>Support for the <code>&lt;datalist&gt;</code> element among browsers is pretty good. Safari is the only modern web browser not to include support for <code>&lt;datalist&gt;</code>. It’s worth noting that the implementation of this element in IE10 is known to be <a href="http://playground.onereason.eu/2013/04/ie10s-lousy-support-for-datalists/" rel="nofollow external" class="bo">buggy</a>.</p>
    <table>
    <thead>
    <tr>
    <th>IE</th>
    <th>Firefox</th>
    <th>Chrome</th>
    <th>Safari</th>
    <th>Opera</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>10.0+</td>
    <td>4.0+</td>
    <td>20.0+</td>
    <td>-</td>
    <td>9.0+</td>
    </tr>
    </tbody>
    </table>
    <p>Source: <a href="http://caniuse.com/#feat=datalist" rel="nofollow external" class="bo">http://caniuse.com/#feat=datalist</a></p>
    <h2>Final Thoughts</h2>
    <p>In this post, you’ve learned how to use the <code>&lt;datalist&gt;</code> element to create native autocomplete dropdowns for your web applications. You’ve also learned how to use AJAX to populate datalist options from an external JSON file.</p>
    <p>The <code>&lt;datalist&gt;</code> element is just one of a number of new elements that provide native implementations of commonly used UI components. By making these elements really simple to use, browser vendors are removing the need for developers to rely on JavaScript libraries in these areas. Standardizing the behavior of UI components also has the added benefit of creating a more consistent experience for users across the web.</p>
    <h2>Useful Links</h2>
    <ul>
    <li><a href="http://caniuse.com/#feat=datalist" rel="nofollow external" class="bo">Can I use… datalist</a></li>
    <li><a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-datalist-element" rel="nofollow external" class="bo">WHATWG Spec</a></li>
    </ul>
    <p>The post <a href="http://blog.teamtreehouse.com/creating-autocomplete-dropdowns-datalist-element" rel="nofollow external" class="bo">Creating Autocomplete Dropdowns with the Datalist Element</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>The &lt;datalist&gt; element, a new addition in the HTML5 specification, allows developers to create native autocomplete dropdowns for their web applications. This type of user interface component...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/A3dm7lVdkb4/creating-autocomplete-dropdowns-datalist-element</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42306/guest@my.umbc.edu/3121f838364b9bceba2e38efd49ac44f/api/pixel</TrackingUrl>
<Tag>android</Tag>
<Tag>autocomplete</Tag>
<Tag>code</Tag>
<Tag>css</Tag>
<Tag>datalist</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>dropdown</Tag>
<Tag>html</Tag>
<Tag>html5</Tag>
<Tag>ios</Tag>
<Tag>javascript</Tag>
<Tag>learn-to-code</Tag>
<Tag>make-a-website</Tag>
<Tag>responsive</Tag>
<Tag>user-interface</Tag>
<Tag>web</Tag>
<Tag>web-apps</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 12:00:39 -0400</PostedAt>
<EditAt>Tue, 11 Mar 2014 12:00:39 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="42305" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42305">
<Title>News on Susan Hoban's STEM Program</Title>
<Body>
<![CDATA[
    <div class="html-content"><a href="http://umbcbreakingground.wordpress.com/2014/03/10/nasa-needs-engineers-transforming-education-through-stem/" rel="nofollow external" class="bo">Click here for the full story.</a></div>
]]>
</Body>
<Summary>Click here for the full story.</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42305/guest@my.umbc.edu/b9bcb0281a6583746a247f48bf0f218d/api/pixel</TrackingUrl>
<Group token="jcet">Joint Center for Earth Systems Technology</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/jcet</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/xsmall.png?1524593851</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/original.JPG?1524593851</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/xxlarge.png?1524593851</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/xlarge.png?1524593851</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/large.png?1524593851</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/medium.png?1524593851</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/small.png?1524593851</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/xsmall.png?1524593851</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/429/5f87a3fcca7c117d0f4186749a5c6c59/xxsmall.png?1524593851</AvatarUrl>
<Sponsor>Joint Center for Earth Systems Technology</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 11:51:18 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="42304" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42304">
<Title>Secured Sciences Group Featured in DC I-Corps Showcase</Title>
<Body>
<![CDATA[
    <div class="html-content">See the video at <a href="http://www.dcicorps.org/showcase/surveillant/">http://www.dcicorps.org/showcase/surveillant/</a><br>
    </div>
]]>
</Body>
<Summary>See the video at http://www.dcicorps.org/showcase/surveillant/</Summary>
<Website>http://www.dcicorps.org/showcase/surveillant/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42304/guest@my.umbc.edu/5093e287faa9acf86dc97b03b3b9d9a4/api/pixel</TrackingUrl>
<Group token="bwtech">bwtech@UMBC Research and Technology Park</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/bwtech</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/xsmall.png?1760034935</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/original.png?1760034935</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/xxlarge.png?1760034935</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/xlarge.png?1760034935</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/large.png?1760034935</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/medium.png?1760034935</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/small.png?1760034935</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/xsmall.png?1760034935</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/410/afff9420ec03574fa84c6bb85b54a3e3/xxsmall.png?1760034935</AvatarUrl>
<Sponsor>bwtech@UMBC</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 11:47:27 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="109798" important="false" status="posted" url="https://my3.my.umbc.edu/posts/109798">
<Title>Tom Beck, Library Gallery, Interviewed for WYPR&#8217;s Maryland Morning</Title>
<Body>
<![CDATA[
    <div class="html-content">An interview with Tom Beck, Chief Curator of the Albin O. Kuhn Library Gallery, aired on WYPR’s Maryland Morning this week, in which he discusses the works currently on display in the Library Gallery exhibition, N. Jay Jaffee Photographs from Public to Personal, 1947-1997. Beck talks about the artist’s personal life and work in relation to the photography of his peers, as well as the historical importance of Jaffee’s photographs. Listen to the interview, “Photographer N. Jay Jaffee Captured the Spontaneous” at WYPR.org. More information about the exhibition is available at our Arts and Culture Calendar. N. Jay Jaffee Photographs from …</div>
]]>
</Body>
<Summary>An interview with Tom Beck, Chief Curator of the Albin O. Kuhn Library Gallery, aired on WYPR’s Maryland Morning this week, in which he discusses the works currently on display in the Library...</Summary>
<Website>https://news.umbc.edu/tom-beck-library-gallery-interviewed-for-wyprs-maryland-morning/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/109798/guest@my.umbc.edu/9a4fc0cd10e9d298cb1e18e3ca49bfb5/api/pixel</TrackingUrl>
<Tag>arts-and-culture</Tag>
<Tag>engage</Tag>
<Tag>library</Tag>
<Tag>visualarts</Tag>
<Group token="umbc-news">UMBC News</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/original.png?1632921809</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/large.png?1632921809</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/medium.png?1632921809</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/small.png?1632921809</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxsmall.png?1632921809</AvatarUrl>
<Sponsor>UMBC News</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 11:46:25 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="109799" important="false" status="posted" url="https://my3.my.umbc.edu/posts/109799">
<Title>Marie desJardins, Computer Science and Electrical Engineering, on Voice of America</Title>
<Body>
<![CDATA[
    <div class="html-content">Voice of America’s International Women’s Day coverage highlights the efforts of leading women in science, technology, engineering and math (STEM) to encourage girls to pursue those fields. In a video posted on the news site, Marie desJardins, professor of computer science and electrical engineering, says, “Make sure your kids are getting [exposure to STEM] from an early age so they think of themselves as creators of technology and new ideas, not just following the rules.” See the video and article on Voice of America by clicking here.</div>
]]>
</Body>
<Summary>Voice of America’s International Women’s Day coverage highlights the efforts of leading women in science, technology, engineering and math (STEM) to encourage girls to pursue those fields. In a...</Summary>
<Website>https://news.umbc.edu/marie-desjardins-computer-science-and-electrical-engineering-on-voice-of-america/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/109799/guest@my.umbc.edu/d27d8d0b1c3285a66a97653a76f45baa/api/pixel</TrackingUrl>
<Tag>csee</Tag>
<Tag>science-and-technology</Tag>
<Group token="umbc-news">UMBC News</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/original.png?1632921809</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/large.png?1632921809</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/medium.png?1632921809</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/small.png?1632921809</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxsmall.png?1632921809</AvatarUrl>
<Sponsor>UMBC News</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 11:43:55 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="42302" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42302">
<Title>PhD Scholarship (The Economy of Mobile Phones)</Title>
<Tagline>Apply by March 30th!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <h1><span>PhD Scholarship: The Moral and Cultural Economy of Mobile Phones in the Pacific</span></h1>
    <h1><span> </span></h1>
    <h1><span>closing date: <span><span>30 March 2014</span></span></span></h1>
    <h1></h1>
    <p><span>This three-year scholarship is for a PhD candidate who will conduct ethnographic field research for a study of the moral and cultural economy of the mobile phone in Fiji. S/he will spend at least 12 months over the three years of candidature in Fiji documenting and analysing the relationships between consumers, companies, and state agents that take shape around mobile phones, digital media and infrastructures. The candidate will carry out research based on his or her specific expertise and research interests while also contributing a key component to a broader comparative study with Papua New Guinea funded by the Australian Research Council (ARC) Discovery Grant The Moral and Cultural Economy of the Mobile Phone in the Pacific. The candidate will also become a Postgraduate Member of the <a href="http://www.digital-ethnography.net/" rel="nofollow external" class="bo">Digital Ethnography Research Centre.</a></span></p>
    <p><span>Eligible candidates will have a BA with Honours or MA/MsC (Research) in Anthropology, Sociology, Media, Communication, Science and Technology Studies, Informatics/Information or other related discipline. Candidates must be willing to undertake ethnographic fieldwork in Fiji and be willing to learn the language of their fieldwork site. Pending final approval, the Scholarship will include a tax-free stipend of $24,653 per year for three years (July 2014 to June 2016) and project-related research expenses. Please note that all applicants will need to apply for and be accepted to the PhD program in Media and Communication at RMIT University to be eligible for the scholarship. Application details, including details and deadlines for RTS placement for Australian and New Zealand citizens and possible tuition fees for International candidates, can be found here.</span></p>
    <p><span>Initial expressions of interest, including a CV and 500-word initial project proposal should be sent before <span><span>30 March 2014</span></span> to Dr. Heather Horst with the subject line PHD Scholarship EOI</span></p>
    <p><br></p>
    <h1><span>More information can be found on the Digital Ethnography Research Centre website (<a href="http://www.digital-ethnography.net/newsevents/#Scholarship" rel="nofollow external" class="bo">http://www.digital-ethnography.net/newsevents/#Scholarship</a>).</span></h1>
    </div>
]]>
</Body>
<Summary>PhD Scholarship: The Moral and Cultural Economy of Mobile Phones in the Pacific     closing date: 30 March 2014   This three-year scholarship is for a PhD candidate who will conduct ethnographic...</Summary>
<Website>http://www.materialworldblog.com/2014/03/phd-scholarship-the-moral-and-cultural-economy-of-mobile-phones-in-the-pacific/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42302/guest@my.umbc.edu/393ef6bccf0a262bba6a6a0a6817bc30/api/pixel</TrackingUrl>
<Group token="retired-279">Anthropology Council of Majors</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-279</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/xsmall.png?1315754011</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/original.png?1315754011</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/xxlarge.png?1315754011</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/xlarge.png?1315754011</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/large.png?1315754011</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/medium.png?1315754011</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/small.png?1315754011</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/xsmall.png?1315754011</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/279/56786bbe51b83ae53c89e68efb23425a/xxsmall.png?1315754011</AvatarUrl>
<Sponsor>Anthropology Council of Majors</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 11:17:25 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42301" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42301">
<Title>Testing Your Ruby Code With Guard, RSpec &amp; Pry</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>My recent work has been on a cloud based Ruby project for the BBC News, upcoming 2014 elections. It requires fast I/O, scalability and needs to be well tested. The "be well tested" requirement, is what I want to focus on in this tutorial.</p>
    <h2>Introduction</h2>
    
    <p>This project utilizes a few different Amazon services such as:</p>
    
    <ul>
    <li>SQS (Simple Queue Service)</li>
    <li>DynamoDB (key/value store)</li>
    <li>S3 (Simple Storage Service)</li>
    </ul>
    
    <p>We need to be able to write tests that are fast and give us instant feedback on problems with our code. </p>
    
    <p>Although, we won't be using Amazon services in this tutorial, I mention them because for us to have tests that are fast, it requires us to fake these external objects (for example, we shouldn't need a network connection to run our tests, because that dependency can result in slow running tests).</p>
    
    <p>Alongside tech lead <a href="http://twitter.com/kenturamon" rel="nofollow external" class="bo">Robert Kenny</a> (who is very well versed in writing <a href="http://en.wikipedia.org/wiki/Test-driven_development" rel="nofollow external" class="bo">TDD (test-driven development)</a> based Ruby applications) we've been utilizing different tools that have made this process and our programming work a lot easier.</p>
    
    <p>I want to share some information about these tools with you.</p>
    
    <p>The tools I'll be covering are:</p>
    
    <ul>
    <li>
    <a href="http://rspec.info/" rel="nofollow external" class="bo">RSpec</a> (testing framework)</li>
    <li>
    <a href="http://guardgem.org/" rel="nofollow external" class="bo">Guard</a> (task runner)</li>
    <li>
    <a href="http://pryrepl.org/" rel="nofollow external" class="bo">Pry</a> (REPL and debugging)</li>
    </ul>
    
    <h2>What Do I Need to Know Upfront?</h2>
    
    <p>I'm going to make an assumption that you are familiar with Ruby code and the Ruby eco-system. For example, I shouldn't need to explain to you what 'gems' are or how certain Ruby syntax/concepts work. </p>
    
    <p>If you're unsure, then before you move, on I would recommend reading one of my other posts on Ruby to get yourself up to speed.</p>
    
    <h2>Guard</h2>
    
    <p>You might not be familiar with Guard, but in essence it's a command line tool that utilizes Ruby to handle different events. </p>
    
    <p>For example, Guard can notify you whenever specific files have been edited and you can carry out some action based on the type of file or event that was fired.</p>
    
    <p>This is known as a 'task runner', you may have heard the phrase before, as they are getting a lot of usage in the front-end/client-side world at the moment (<a href="http://gruntjs.com/" rel="nofollow external" class="bo">Grunt</a> and <a href="http://gulpjs.com/" rel="nofollow external" class="bo">Gulp</a> are two popular examples).</p>
    
    <p>The reason we'll be using Guard is because it helps make the feedback loop (when doing TDD) a lot tighter. It allows us to edit our test files, see a failing test, update and save our code and immediately see if it passes or fails (depending on what we wrote).</p>
    
    <p>You could use something like Grunt or Gulp instead, but we prefer to use those types of task runners for handling front-end/client-side stuff. For back-end/server-side code, we use Rake and Guard.</p>
    
    <h2>RSpec</h2>
    
    <p>RSpec, if you weren't already aware, is a testing tool for the <a href="https://www.ruby-lang.org/en/" rel="nofollow external" class="bo">Ruby</a> programming language.</p>
    
    <p>You run your tests (using RSpec) via the command line and I'll demonstrate how you can make this process easier via the use of Ruby's build program, <a href="http://rake.rubyforge.org/" rel="nofollow external" class="bo">Rake</a>.</p>
    
    <h2>Pry</h2>
    
    <p>Lastly, we'll be using another Ruby gem called <a href="http://pryrepl.org/" rel="nofollow external" class="bo">Pry</a> which is an extremely powerful Ruby debugging tool which injects itself into your application, while it is running, to allow you to inspect your code and figure out why something isn't working.</p>
    
    <h2>TDD (Test-Driven Development)</h2>
    
    <p>Although not necessary for demonstrating the use of RSpec and Guard, it's worth noting that I fully endorse the use of TDD as a means to ensure every line of code you write has a purpose and has been designed in a testable and reliable manner.</p>
    
    <p>I'll be detailing how we would do TDD with a simple application, so at least you'll get a feel for how the process works.</p>
    
    <h2>Creating an Example Project</h2>
    
    <p>I've created a basic example on GitHub to save you from having to type everything out yourself. Feel free to <a href="https://github.com/Integralist/Guard-and-RSpec" rel="nofollow external" class="bo">download the code</a>. </p>
    
    <p>Let's now go ahead and review this project, step-by-step.</p>
    
    <h3>Primary Files</h3>
    
    <p>There are three primary files required for our example application to work, these are: </p>
    
    <ol>
    <li><code>Gemfile</code></li>
    <li><code>Guardfile</code></li>
    <li><code>Rakefile</code></li>
    </ol>
    
    <p>We'll go over the content of each file shortly, but the first thing we need to do is get our directory structure in place.</p>
    
    <h3>Directory Structure</h3>
    
    <p>For our example project, we'll need two folders created:</p>
    
    <ul>
    <li>
    <code>lib</code> (this will hold our application code)</li>
    <li>
    <code>spec</code> (this will hold our test code)</li>
    </ul>
    
    <p>This isn't a requirement for your application, you can easily tweak the code within our other files to work with whatever structure suits you.</p>
    
    <h3>Installation</h3>
    
    <p>Open up your terminal and run the following command: </p>
    
    <pre>gem install bundler</pre>
    
    <p><a href="http://bundler.io/" rel="nofollow external" class="bo">Bundler</a> is a tool that makes installing other gems easier.</p>
    
    <p>Once you've run that command, create the above three files (<code>Gemfile</code>, <code>Guardfile</code> and <code>Rakefile</code>).</p>
    
    <h3>Gemfile</h3>
    
    <p>The <code>Gemfile</code> is responsible for defining a list of dependencies for our
    application.</p>
    
    <p>Here is what it looks like:</p>
    
    <pre>source "<a href="https://rubygems.org">https://rubygems.org</a>"&#x000A;    &#x000A;    gem 'rspec'&#x000A;    &#x000A;    group :development do&#x000A;      gem 'guard'&#x000A;      gem 'guard-rspec'&#x000A;      gem 'pry'&#x000A;    end&#x000A;    </pre>
    
    <p>Once this file is saved, run the command <code>bundle install</code>.</p>
    <p>This will install all of our gems for us (including those gems specified within the <code>development</code> group).</p>
    
    <p>The purpose of the <code>development</code> group (which is a <a href="http://bundler.io/v1.3/groups.html" rel="nofollow external" class="bo">bundler specific feature</a>) is so when you deploy your application, you can tell your production environment to install only the gems that are required for your application to function properly.</p>
    
    <p>So for example, all the gems inside the <code>development</code> group, aren't required for the application to function properly. They are used solely to aid us while we're developing and testing our code.</p>
    
    <p>To install the appropriate gems on your production server, you would need to run something like:</p>
    
    <pre>bundle install --without development</pre>
    
    <h3>Rakefile</h3>
    
    <p>The <code>Rakefile</code> will allow us to run our RSpec tests from the command line.</p>
    
    <p>Here is what it looks like:</p>
    
    <pre>require 'rspec/core/rake_task'&#x000A;    &#x000A;    RSpec::Core::RakeTask.new do |task|&#x000A;      task.rspec_opts = ['--color', '--format', 'doc']&#x000A;    end&#x000A;    </pre>
    
    <p><em>Note</em>: you don't need Guard to be able to run your RSpec tests. We use Guard to make it easier to do TDD.</p>
    
    <p>When you install RSpec, it gives you access to a built in Rake task and that's what we're using here.</p>
    
    <p>We create a new instance of <code>RakeTask</code> which by default creates a task called <code>spec</code> that will look for a folder called <code>spec</code> and will run all the test files within that folder, using the configuration options we've defined.</p>
    
    <p>In this instance, we want our shell output to have color and we want to format the output to the <code>doc</code> style (you could change the format to be <code>nested</code> as an example).</p>
    
    <p>You can configure the Rake task to work any way you want and to look into different directories, if that's what you have. But the default settings work great for our application and so that's what we'll be using.</p>
    
    <p>Now if I want to run the tests in my example GitHub repository, then I need to open up my terminal and run the command:</p>
    
    <pre>rake spec</pre>
    
    <p>This gives us the following output:</p>
    
    <pre>rake spec&#x000A;    /bin/ruby -S rspec ./spec/example_spec.rb --color --format doc&#x000A;    &#x000A;    RSpecGreeter&#x000A;      RSpecGreeter#greet()&#x000A;    &#x000A;    Finished in 0.0006 seconds&#x000A;    1 example, 0 failures&#x000A;    </pre>
    
    <p>As you can see there are zero failures. That's because although we have no application code written, we also don't have any test code written yet either.</p>
    
    <h3>Guardfile</h3>
    
    <p>The contents of this file tells Guard what to do when we run the <code>guard</code> command:</p>
    
    <pre>guard 'rspec' do&#x000A;      # watch /lib/ files&#x000A;      watch(%r{^lib/(.+).rb$}) do |m|&#x000A;        "spec/#{m[1]}_spec.rb"&#x000A;      end&#x000A;    &#x000A;    # watch /spec/ files&#x000A;      watch(%r{^spec/(.+).rb$}) do |m|&#x000A;        "spec/#{m[1]}.rb"&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>You'll have noticed within our <code>Gemfile</code> we specified the gem: <code>guard-rspec</code>. We need that gem to allow Guard to understand how to handle changes to RSpec related files.</p>
    
    <p>If we look again at the content, we can see that if we ran <code>guard rspec</code> then Guard would watch the specified files and execute the specified commands once any changes to those files had occurred.</p>
    
    <p><em>Note</em>: because we only have one guard task, <code>rspec</code>, then that is run by default if we ran the command <code>guard</code>.</p>
    
    <p>You can see Guard provides us with a <code>watch</code> function which we pass a <a href="http://www.regular-expressions.info/" rel="nofollow external" class="bo">Regular Expression</a> to allow us to define what files we're interested in Guard watching.</p>
    
    <p>In this instance, we're telling Guard to watch all the files within our <code>lib</code> and <code>spec</code> folders and if any changes occur to any of those files then to execute the test files within our <code>spec</code> folder to make sure no changes we made broke our tests (and subsequently didn't break our code).</p>
    
    <p>If you have all the files downloaded from the <a href="https://github.com/Integralist/Guard-and-RSpec" rel="nofollow external" class="bo">GitHub repo</a> then you can try out the command for yourself. </p>
    
    <p>Run <code>guard</code> and then save one of the files to see it run the tests.</p>
    
    <h2>Test Code</h2>
    
    <p>Before we start looking at some test and application code, let me explain what our application is going to do. Our application is a single class that will return a greeting message to whoever is running the code. </p>
    
    <p>Our requirements are purposely simplified, as it'll make the process we're about to undertake easier to understand.</p>
    
    <p>Let's now take a look at an example specification (for example, our test file) which will describe our requirements. After that, we'll start to step through the code defined in the specification and see how we can use TDD to aid us in writing our application.</p>
    
    <h3>Our First Test</h3>
    
    <p>We're going to create a file titled <code>example_spec.rb</code>. The purpose of this file
    is to become our specification file (in other words, this is going to be our
    test code and will represent the expected functionality).</p>
    
    <p>The reason we write our test code before writing our actual application code is because it ultimately means that any application code we do produce will exist because it
    was actually used. </p>
    
    <p>That's an important point I'm making and so let me take a moment to clarify it in more detail.</p>
    <h4>Writing Test Code Before Application Code</h4>
    
    <p>Typically, if you write your application code first (so you're not doing TDD), then you will find yourself writing code that at some point in the future is over engineered and potentially obsolete. Through the process of refactoring or changing requirements, you may find that some functions will fail to ever be called. </p>
    
    <p>This is why TDD is considered the better practice and the preferred development method to use, because every line of code you produce will has been produced for a reason: to get a failing specification (your actual business requirement) to pass. That's a very powerful thing to keep in mind.</p>
    
    <p>Here is our test code:</p>
    
    <pre>require 'spec_helper'&#x000A;    &#x000A;    describe 'RSpecGreeter' do&#x000A;      it 'RSpecGreeter#greet()' do&#x000A;        greeter  = RSpecGreeter.new         # Given&#x000A;        greeting = greeter.greet            # When&#x000A;        greeting.should eq('Hello RSpec!')  # Then&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>You may notice the code comments at the end of each line:</p>
    
    <ul>
    <li><code>Given</code></li>
    <li><code>When</code></li>
    <li><code>Then</code></li>
    </ul>
    
    <p>These are a form of BDD (Behaviour-Driven Development) terminology. I included them for readers who are more familiar with <a href="http://en.wikipedia.org/wiki/Behavior-driven_development" rel="nofollow external" class="bo">BDD (Behavior-Driven Development)</a> and who were interested in how they can equate these statements with TDD.</p>
    
    <p>The first thing we do inside this file is load <code>spec_helper.rb</code> (which is found in the same directory as our spec file). We'll come back and look at the contents of that file in a moment.</p>
    
    <p>Next we have two code blocks that are specific to RSpec:</p>
    
    <ul>
    <li><code>describe 'x' do</code></li>
    <li><code>it 'y' do</code></li>
    </ul>
    
    <p>The first <code>describe</code> block should adequately describe the specific class/module we're working on and providing tests for. You could very well have multiple <code>describe</code> blocks within a single specification file.</p>
    
    <p>There are many different theories on how to use <code>describe</code> and <code>it</code> description blocks. I personally prefer simplicity and so I'll use the identifiers for the Class/Modules/Methods that we'll be testing. But you often find some people who prefer to use full sentences for their descriptions. Neither is right or wrong, just personal preference.</p>
    
    <p>The <code>it</code> block is different and should always be placed inside a <code>describe</code> block. It should explain <em>how</em> we want our application to work. </p>
    
    <p>Again, you could use a normal sentence to describe the requirements, but I've found that sometimes doing so can cause the descriptions to be too explicit, when they should really be more <em>implicit</em>. Being less explicit reduces the chances of changes to your functionality, causing your description to become outdated (having to update your description every time minor functionality changes occur is more of a burden than a help). By using the identifier of the method we're testing (for example, the name of the method we're executing) we can avoid that issue.</p>
    
    <p>The contents of the <code>it</code> block is the code we're going to test. </p>
    
    <p>In the above example, we create a new instance of the class <code>RSpecGreeter</code> (which doesn't exist yet). We send the message <code>greet</code> (which also doesn't exist yet) to the instantiated object created (<em>note</em>: these two lines are standard Ruby code at this point). </p>
    
    <p>Finally, we tell the testing framework that we expect the outcome of calling the <code>greet</code> method to be the text "<code>Hello RSpec!</code>", by using the RSpec syntax: <code>eq(something)</code>. </p>
    
    <p>Notice how the syntax allows it to be easily read (even by a non-technical person). These are known as <em>assertions</em>.</p>
    
    <p>There's a lot of different RSpec assertions and we won't go into the details, but feel free to review the <a href="https://relishapp.com/rspec" rel="nofollow external" class="bo">documentation</a> to see all the features RSpec provides.</p>
    
    <h3>Creating a Helper for Our Test</h3>
    
    <p>There is a certain amount of boilerplate required for our tests to run. In this project, we only have one specification file but in a real project you're likely to have dozens (depending on the size of your application).</p>
    
    <p>To help us reduce the boilerplate code, we'll place it inside of a special helper file that we'll load from our specification files. This file will be titled <code>spec_helper.rb</code>.</p>
    
    <p>This file will do a couple of things:</p>
    
    <ul>
    <li>tell Ruby where our main application code is located</li>
    <li>load our application code (for the tests to run against)</li>
    <li>load the <code>pry</code> gem (helps us debug our code; if we need to).</li>
    </ul>
    
    <p>Here is the code:</p>
    
    <pre>$ &lt;&lt; File.join(File.dirname(FILE), '..', 'lib')&#x000A;    &#x000A;    require 'pry'&#x000A;    require 'example'&#x000A;    </pre>
    
    <p><em>Note</em>: the first line may look a bit cryptic, so let me explain how it works. Here we're saying we want to add the <code>/lib/</code> folder to Ruby's <code>$LOAD_PATH</code> system variable. Whenever Ruby evaluates <code>require 'some_file'</code> it has a list of directories it will try and locate that file. In this instance, we're making sure that if we have the code <code>require 'example'</code> that Ruby will be able to locate it because it'll check our <code>/lib/</code> directory and there, it'll find the file specified. This is a clever trick you will see used in a lot of Ruby gems, but it can be quite confusing if you've never seen it before.</p>
    
    <h3>Application Code</h3>
    
    <p>Our application code is going to be inside a file titled <code>example.rb</code>.</p>
    
    <p>Before we begin writing any application code, remember that we're doing this project TDD. So we're going to let the tests in our specification file guide us on what to do first.</p>
    
    <p>Let's begin by assuming you're using <code>guard</code> to run your tests (so every time we make a change to <code>example.rb</code>, Guard will notice the change and proceed to run <code>example_spec.rb</code> to make sure our tests pass).</p>
    
    <p>For us to do TDD properly, our <code>example.rb</code> file will be empty and so if we open the file and 'save' it in its current state, then Guard will run and we'll discover (unsurprisingly) that our test will fail:</p>
    
    <pre>Failures:&#x000A;      1) RSpecGreeter RSpecGreeter#greet()&#x000A;         Failure/Error: greeter  = RSpecGreeter.new         # Given&#x000A;         NameError:&#x000A;           uninitialized constant RSpecGreeter&#x000A;         # ./spec/example_spec.rb:5:in&lt;/code&gt;block (2 levels) in '&#x000A;     &#x000A;    Finished in 0.00059 seconds&#x000A;    1 example, 1 failure&#x000A;     &#x000A;    Failed examples:&#x000A;     &#x000A;    rspec ./spec/example_spec.rb:4 # RSpecGreeter RSpecGreeter#greet()</pre>
    
    <hr>
    
    <p>Now before we go any further, let me clarify again that TDD is based on the premise that every line of code has a reason to exist, so <em>don't</em> start racing ahead and writing out more code than you need. Only write the minimum amount of code required for the test to pass. Even if the code is ugly or doesn't fulfill the full functionality.</p>
    
    <p>The point of TDD is to have a tight <em>feedback loop</em>, also known as 'red, green,
    refactor'). What this means in practice is:</p>
    
    <ul>
    <li>write a failing test</li>
    <li>write the least amount of code to get it to pass</li>
    <li>refactor the code</li>
    </ul>
    
    <p>You'll see in a moment that because our requirements are so simple, there is no need for us to refactor. But in a real project with much more complex requirements, you'll likely need to take the third step and refactor the code you entered, to get the test to pass.</p>
    
    <hr>
    
    <p>Coming back to our failing test, as you can see in the error, there is no <code>RSpecGreeter</code> class defined. Let's fix that and add the following code and save the file so our tests run:</p>
    
    <pre>class RSpecGreeter&#x000A;      # code will eventually go here&#x000A;    end&#x000A;    </pre>
    
    <p>This will result in the following error:</p>
    
    <pre>Failures:&#x000A;      1) RSpecGreeter RSpecGreeter#greet()&#x000A;         Failure/Error: greeter  = greeter.greet            # When&#x000A;         NoMethodError:&#x000A;           undefined methodgreet' for #&#x000A;         # ./spec/example_spec.rb:6:in `block (2 levels) in '&#x000A;    &#x000A;    Finished in 0.00036 seconds&#x000A;    1 example, 1 failure&#x000A;    </pre>
    
    <p>Now we can see that this error is telling us the method <code>greet</code> doesn't exist, so let's add it and then again save our file to run our tests:</p>
    
    <pre>class RSpecGreeter&#x000A;      def greet&#x000A;        # code will eventually go here&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>OK, we're almost there. The error we get now is:</p>
    
    <pre>Failures:&#x000A;      1) RSpecGreeter RSpecGreeter#greet()&#x000A;         Failure/Error: greeter  = greeting.should eq('Hello RSpec!')  # Then&#x000A;    &#x000A;           expected: "Hello RSpec!"&#x000A;                got: nil&#x000A;    &#x000A;           (compared using ==)&#x000A;         # ./spec/example_spec.rb:7:in `block (2 levels) in '&#x000A;    &#x000A;    Finished in 0.00067 seconds&#x000A;    1 example, 1 failure&#x000A;    </pre>
    
    <p>RSpec is telling us that it was expecting to see <code>Hello RSpec!</code> but instead it got <code>nil</code> (because we defined the <code>greet</code> method but didn't actually define anything inside the method and so it returns <code>nil</code>).</p>
    
    <p>We'll add the remaining piece of code that would get our test to pass:</p>
    
    <pre>class RSpecGreeter&#x000A;      def greet&#x000A;        "Hello RSpec!"&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>There we have it, a passing test:</p>
    
    <pre>Finished in 0.00061 seconds&#x000A;    1 example, 0 failures&#x000A;    </pre>
    
    <p>We're done here. Our test is written and the code is passing.</p>
    
    <h2>Conclusion</h2>
    
    <p>So far we've applied a Test-Driven Development process to building our application, alongside utilizing the popular RSpec testing framework.</p>
    
    <p>We're going to leave it here for now. Come back and join us for part two where we'll look at more RSpec specific features as well as using the Pry gem to help you debug and write your code.</p>
    </div>
]]>
</Body>
<Summary>My recent work has been on a cloud based Ruby project for the BBC News, upcoming 2014 elections. It requires fast I/O, scalability and needs to be well tested. The "be well tested" requirement, is...</Summary>
<Website>http://code.tutsplus.com/tutorials/testing-your-ruby-code-with-guard-rspec-pry--cms-19974</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42301/guest@my.umbc.edu/6314fc5b892291926ce64b851788ede2/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 11:00:00 -0400</PostedAt>
<EditAt>Tue, 11 Mar 2014 11:00:00 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42297" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42297">
<Title>Google Launches Interactive Online Education Tool  (via The Next Web) http://ow....</Title>
<Body>
<![CDATA[
    <div class="html-content">Google Launches Interactive Online Education Tool  (via The Next Web) <a href="http://l.facebook.com/l.php?u=http%3A%2F%2Fow.ly%2FusTBu&amp;h=6AQEcC5IL&amp;s=1" rel="nofollow external" class="bo">http://ow.ly/usTBu</a><br><br><a href="http://l.facebook.com/l.php?u=http%3A%2F%2Fow.ly%2FusTBu&amp;h=CAQEU3vYQ&amp;s=1" title="" rel="nofollow external" class="bo"><img src="https://fbexternal-a.akamaihd.net/safe_image.php?d=AQC443N1-3ZpTWxV&amp;w=154&amp;h=154&amp;url=http%3A%2F%2Fcdn2.tnwcdn.com%2Fwp-content%2Fblogs.dir%2F1%2Ffiles%2F2014%2F01%2F95920158.jpg" alt="" style="max-width: 100%; height: auto;"></a><br><a href="http://l.facebook.com/l.php?u=http%3A%2F%2Fow.ly%2FusTBu&amp;h=bAQGfs_L5&amp;s=1" rel="nofollow external" class="bo">Google Debuts Education Tool Oppia for Teaching Others</a><br>thenextweb.com<br>Google today launched a new online education tool called Oppia, currently an open source project with the goal of making it easy for anyone to...</div>
]]>
</Body>
<Summary>Google Launches Interactive Online Education Tool  (via The Next Web) http://ow.ly/usTBu   Google Debuts Education Tool Oppia for Teaching Others thenextweb.com Google today launched a new online...</Summary>
<Website>http://www.facebook.com/umbctraining/posts/10100609635223073</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42297/guest@my.umbc.edu/e0423a517ccfc6e1ac05a3e787a7d725/api/pixel</TrackingUrl>
<Tag>ccna</Tag>
<Tag>ceh</Tag>
<Tag>centers</Tag>
<Tag>cisco</Tag>
<Tag>cyber</Tag>
<Tag>cybersecurity</Tag>
<Tag>information</Tag>
<Tag>it</Tag>
<Tag>leadership</Tag>
<Tag>management</Tag>
<Tag>microsoft</Tag>
<Tag>project</Tag>
<Tag>security</Tag>
<Tag>technology</Tag>
<Tag>training</Tag>
<Tag>umbc</Tag>
<Group token="retired-575">UMBC Training Centers</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-575</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/original.jpg?1361981335</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/large.png?1361981335</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/medium.png?1361981335</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/small.png?1361981335</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxsmall.png?1361981335</AvatarUrl>
<Sponsor>UMBC Training Centers</Sponsor>
<PawCount>0</PawCount>
<CommentCount>1</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 11 Mar 2014 10:25:38 -0400</PostedAt>
<EditAt>Tue, 11 Mar 2014 10:25:38 -0400</EditAt>
</NewsItem>

</News>
