<?xml version="1.0"?>
<News hasArchived="true" page="8579" pageCount="10722" pageSize="10" timestamp="Sun, 12 Jul 2026 05:38:23 -0400" url="https://my3.my.umbc.edu/posts.xml?page=8579">
<NewsItem contentIssues="false" id="123221" important="false" status="posted" url="https://my3.my.umbc.edu/posts/123221">
<Title>Daphne Harrison, former chair of Africana studies, and Michelle Scott, history, on the Marc Steiner Show</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Dr. Daphne Harrison, former Chair of the Africana Studies, and Dr. Michelle Scott, Associate Professor of History, joined the Marc Steiner Show on Tuesday, June 19, for a segment called <em>Juneteenth: Holiday Commemorating the Abolition of Slavery in Texas</em>. The oldest known celebration of the abolition of slavery in the United States, Juneteenth commemorates African American freedom and emphasizes education and achievement.</p>
    <p>Dr. Harrison and Dr. Scott also discussed the history of classic female blues artists of the 1920s and 1930s with gospel singer Lea Gilmore. Dr. Harrison is author of <em>“Black Pearls: Blues Queens of the 1920s.”</em></p>
    <p><a title="Juneteenth on the Marc Steiner Show" href="http://www.steinershow.org/podcasts/juneteenth/" rel="nofollow external" class="bo">Listen to the full discussion »</a></p>
    </div>
]]>
</Body>
<Summary>Dr. Daphne Harrison, former Chair of the Africana Studies, and Dr. Michelle Scott, Associate Professor of History, joined the Marc Steiner Show on Tuesday, June 19, for a segment called...</Summary>
<Website>https://umbc.edu/stories/daphne-harrison-former-chair-of-africana-studies-and-michelle-scott-history-on-the-marc-steiner-show/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/123221/guest@my.umbc.edu/3bfafe1e3f3f0dcf4a30bc2768d278b2/api/pixel</TrackingUrl>
<Tag>africanastudies</Tag>
<Tag>cahss</Tag>
<Tag>history</Tag>
<Tag>policy-and-society</Tag>
<Group token="umbc-news-magazine">UMBC News &amp;amp; Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news-magazine</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/original.png?1748556657</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/large.png?1748556657</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/medium.png?1748556657</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/small.png?1748556657</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxsmall.png?1748556657</AvatarUrl>
<Sponsor>UMBC News &amp; Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Tue, 25 Jun 2013 18:57:41 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="31873" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31873">
<Title>Mobile Helix This Week Announced the Release of Link</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>Mobile Helix’s Link, described as the mobile device industry’s first pure HTML5 platform for application development and delivery.</p></div>
]]>
</Body>
<Summary>Mobile Helix’s Link, described as the mobile device industry’s first pure HTML5 platform for application development and delivery.</Summary>
<Website>http://www.htmlgoodies.com/daily_news/mobile-helix-this-week-announced-the-release-of-link.html</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31873/guest@my.umbc.edu/c2611adcac6f5fd2110835a48ce0f0ce/api/pixel</TrackingUrl>
<Tag>html</Tag>
<Tag>htmlgoodies</Tag>
<Tag>learning</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, 25 Jun 2013 18:55:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31870" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31870">
<Title>Bits Blog: A Different Approach at Google Ventures</Title>
<Body>
<![CDATA[
    <div class="html-content">Google Ventures does things differently from most venture capital firms, like seeking investment advice from all its staff and sharing carried interest with everyone in the firm, not just partners.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F06%2F25%2Fa-different-approach-at-google-ventures%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Different+Approach+at+Google+Ventures" 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%2Fbits.blogs.nytimes.com%2F2013%2F06%2F25%2Fa-different-approach-at-google-ventures%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Different+Approach+at+Google+Ventures" 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%2Fbits.blogs.nytimes.com%2F2013%2F06%2F25%2Fa-different-approach-at-google-ventures%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Different+Approach+at+Google+Ventures" 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%2Fbits.blogs.nytimes.com%2F2013%2F06%2F25%2Fa-different-approach-at-google-ventures%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Different+Approach+at+Google+Ventures" 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%2Fbits.blogs.nytimes.com%2F2013%2F06%2F25%2Fa-different-approach-at-google-ventures%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Different+Approach+at+Google+Ventures" 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/165665546353/u/0/f/640387/c/34625/s/2dca7d02/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665546353/u/0/f/640387/c/34625/s/2dca7d02/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Google Ventures does things differently from most venture capital firms, like seeking investment advice from all its staff and sharing carried interest with everyone in the firm, not just...</Summary>
<Website>http://bits.blogs.nytimes.com/2013/06/25/a-different-approach-at-google-ventures/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31870/guest@my.umbc.edu/0fe1d271c07fe853e3bf7ef86a765312/api/pixel</TrackingUrl>
<Tag>big-data-2013</Tag>
<Tag>data</Tag>
<Tag>google-ventures</Tag>
<Tag>new</Tag>
<Tag>start-ups</Tag>
<Tag>technology</Tag>
<Tag>venture-capital</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, 25 Jun 2013 18:31:03 -0400</PostedAt>
<EditAt>Wed, 26 Jun 2013 11:28:50 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="123222" important="false" status="posted" url="https://my3.my.umbc.edu/posts/123222">
<Title>Kupiec &#8217;89, INDS, Lives the Sweet Life</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <img width="150" height="150" src="https://umbc.edu/wp-content/uploads/2013/06/cupcake-3929-150x150.jpg" alt="" style="max-width: 100%; height: auto;"><p><a href="/wp-content/uploads/2013/06/cupcake-3929.jpg" rel="nofollow external" class="bo"><img alt="cupcake-3929" src="/wp-content/uploads/2013/06/cupcake-3929.jpg?w=300" width="240" height="159" style="max-width: 100%; height: auto;"></a>The moment you step into Kupcakes &amp; Co., you feel as though you’ve entered paradise–a paradise of bouffant icing, chic pink and black decor, and smiles. The smell of fresh-baked cupcakes permeates the air and friendly staff rush to fulfill your needs.</p>
    <p>This delightful ambiance is one that <strong>Michelle </strong><strong>Kupiec ’89, </strong><strong>independent studies</strong>, has poured her heart into creating, with the help of her family and friends. It all started in 2010, after an extended illness left Michelle’s daughter, Amanda, on bed rest. Amanda loved to watch the Food Network, and she fell in love with shows like Ace of Cakes (featuring yet another UMBC alumnus, <strong>Duff Goldman ’97</strong>) and, when she was feeling better, she tried her hand at making a fondant cake, which lead to cupcakes, which lead to Michelle and Amanda renting space in a commercial kitchen. And from there, the cupcakes took on a life of their own.</p>
    <p><a href="/wp-content/uploads/2013/06/cupcake-4090a.jpg" rel="nofollow external" class="bo"><img alt="cupcake-4090a" src="/wp-content/uploads/2013/06/cupcake-4090a.jpg?w=199" width="159" height="240" style="max-width: 100%; height: auto;"></a>“We started out baking for family and friends–it was easy to give away cupcakes,” says Michelle. ‘Then we started using higher quality ingredients and taking on wedding clients.”</p>
    <p>Business was booming, so Michelle and Amanda decided to open their retail space in Elkridge, MD, in 2011. The whole family got involved to make the business work.</p>
    <p>“My husband, Bill, is my best friend, business partner, web designer, and number 1 taste-tester,” explains Kupiec. “And my daughter Allison helped develop the space and select packaging and decoration for the store.”</p>
    <p>Now, Kupcakes &amp; Co. has 16 full- and part-time staffers who bake and decorate more than 10,000 cupcakes each week for walk-in customers and local restaurants, and they’ve recently expanded into even more space to make room for cooking classes and parties. In addition to their core cupcake lines, they also offer custom wedding cakes and an array of tasty treats like biscotti, biscuits, scones, and coffee. The recipe for success? Committed bakers and the best ingredients.</p>
    <p><a href="/wp-content/uploads/2013/06/cupcake-4013.jpg" rel="nofollow external" class="bo"><img alt="cupcake-4013" src="/wp-content/uploads/2013/06/cupcake-4013.jpg?w=199" width="159" height="240" style="max-width: 100%; height: auto;"></a>“We’re so proud of our kitchen and what we do,” says Michelle. “We only use the best ingredients, and everything here is done by hand.” The hard work has paid off; in addition to the growing numbers of local customers, Kupcakes &amp; Co. is also baking for celebrities like Gail King and Andrew Jenks.</p>
    <p>But the success is just a sweet side effect, says Michelle. For her, this business is about her family and community. So it’s natural that she and everyone at Kupcakes &amp; Co. are dedicated to giving back to the community, supporting projects and organizations like the <a href="http://www.visithowardcounty.com/blossoms-of-hope/mission" rel="nofollow external" class="bo">Blossoms of Hope tree-planting program</a>, the <a href="http://www.teamfight.org/" rel="nofollow external" class="bo">Ulman Cancer Fund’s Team Fight</a>, and Howard County General Hospital’s Cupcakes with Santa.</p>
    <p><a href="/wp-content/uploads/2013/06/cupcake-4036.jpg" rel="nofollow external" class="bo"><img alt="cupcake-4036" src="/wp-content/uploads/2013/06/cupcake-4036.jpg?w=300" width="240" height="159" style="max-width: 100%; height: auto;"></a>Michelle attributes the success of Kupcakes &amp; Co. to dedication and hard work.</p>
    <p>“I put my whole heart into what I do,” she says, “And we [family and staff] work so hard at what we do.”</p>
    <p><a href="http://umbcmagazine.wordpress.com/umbc-magazine-summer-2013/how-to-make-a-great-cupcake/" rel="nofollow external" class="bo"><strong>Want more? Get Michelle’s tips on how to Upgrade Your Cupcake in the Summer 2013 issue of <em>UMBC Magazine</em>.</strong> </a></p>
    </div>
]]>
</Body>
<Summary>The moment you step into Kupcakes &amp; Co., you feel as though you’ve entered paradise–a paradise of bouffant icing, chic pink and black decor, and smiles. The smell of fresh-baked cupcakes...</Summary>
<Website>https://umbc.edu/stories/kupiec-89-inds-lives-the-sweet-life/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/123222/guest@my.umbc.edu/fd23f1968192e56e06f3df5299377c2c/api/pixel</TrackingUrl>
<Tag>alumni</Tag>
<Tag>andrew-jenks</Tag>
<Tag>baking</Tag>
<Tag>cupcake</Tag>
<Tag>duff-goldman</Tag>
<Tag>family</Tag>
<Tag>food-network</Tag>
<Tag>kupcakes-and-co</Tag>
<Group token="umbc-news-magazine">UMBC News &amp;amp; Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news-magazine</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/original.png?1748556657</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/large.png?1748556657</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/medium.png?1748556657</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/small.png?1748556657</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxsmall.png?1748556657</AvatarUrl>
<Sponsor>UMBC News &amp; Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Tue, 25 Jun 2013 18:00:52 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31862" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31862">
<Title>Finding Their Voice: Mill Stories in the Baltimore Sun</Title>
<Tagline>by Dinah Winnick</Tagline>
<Body>
<![CDATA[
    <div class="html-content">Congratulations to UMBC's Mill Stories team on their tremendous work documenting the history of Baltimore's Sparrows Point Steel Mill community through the past semester. We were so proud to see their work highlighted in the powerful <em>Baltimore Sun </em>web feature on Sparrows Point earlier this month...(<a href="http://umbcbreakingground.wordpress.com/2013/06/25/finding-their-voice-mill-stories-in-the-baltimore-sun/" rel="nofollow external" class="bo">continue reading</a>)<br>
    </div>
]]>
</Body>
<Summary>Congratulations to UMBC's Mill Stories team on their tremendous work documenting the history of Baltimore's Sparrows Point Steel Mill community through the past semester. We were so proud to see...</Summary>
<Website>http://umbcbreakingground.wordpress.com/2013/06/25/finding-their-voice-mill-stories-in-the-baltimore-sun/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31862/guest@my.umbc.edu/ded5cff8b8a7859aa3ce3cdf3bc208fb/api/pixel</TrackingUrl>
<Group token="bg">UMBC BreakingGround</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/bg</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xsmall.png?1360169927</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/original.png?1360169927</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xxlarge.png?1360169927</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xlarge.png?1360169927</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/large.png?1360169927</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/medium.png?1360169927</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/small.png?1360169927</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xsmall.png?1360169927</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xxsmall.png?1360169927</AvatarUrl>
<Sponsor>UMBC BreakingGround</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/031/862/4ad5bd1af94a1c75f785d7262e7964f1/xxlarge.jpg?1372192970</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/031/862/4ad5bd1af94a1c75f785d7262e7964f1/xlarge.jpg?1372192970</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/031/862/4ad5bd1af94a1c75f785d7262e7964f1/large.jpg?1372192970</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/031/862/4ad5bd1af94a1c75f785d7262e7964f1/medium.jpg?1372192970</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/031/862/4ad5bd1af94a1c75f785d7262e7964f1/small.jpg?1372192970</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/031/862/4ad5bd1af94a1c75f785d7262e7964f1/xsmall.jpg?1372192970</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/031/862/4ad5bd1af94a1c75f785d7262e7964f1/xxsmall.jpg?1372192970</ThumbnailUrl>
<PawCount>8</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 25 Jun 2013 16:44:43 -0400</PostedAt>
<EditAt>Tue, 25 Jun 2013 16:45:53 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="110118" important="false" status="posted" url="https://my3.my.umbc.edu/posts/110118">
<Title>Smoke-Free Campus Policy</Title>
<Body>
<![CDATA[
    <div class="html-content">The USM Board of Regents has required all USM institutions, including UMBC, to provide a healthy, smoke-free environment for all faculty, staff, students, contractors, and visitors by July 1, 2013. In response, a Smoke-Free Campus Task Force was appointed – with representatives from UMBC’s shared governance organizations, including students, faculty, and staff members – to make recommendations about how best to implement this policy on our campus. After working throughout the spring semester, the task force has recommended that smoking be allowed in two designated areas removed from major pedestrian traffic, in order to provide a safe space for any students, faculty, or staff who may …</div>
]]>
</Body>
<Summary>The USM Board of Regents has required all USM institutions, including UMBC, to provide a healthy, smoke-free environment for all faculty, staff, students, contractors, and visitors by July 1,...</Summary>
<Website>https://news.umbc.edu/smoke-free-campus-policy/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/110118/guest@my.umbc.edu/c58fd0c52c6110effa70fd440aeab9b0/api/pixel</TrackingUrl>
<Tag>admin</Tag>
<Tag>community</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, 25 Jun 2013 16:40:47 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31866" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31866">
<Title>DealBook: The Intricate Endgame for Dell</Title>
<Body>
<![CDATA[
    <div class="html-content">The battle for Dell has become a giant game of chicken between Carl Icahn and Michael Dell, one that is tilted against the company’s shareholders.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F06%2F25%2Fthe-complicated-endgame-for-dell%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+The+Intricate+Endgame+for+Dell" 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%2Fdealbook.nytimes.com%2F2013%2F06%2F25%2Fthe-complicated-endgame-for-dell%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+The+Intricate+Endgame+for+Dell" 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%2Fdealbook.nytimes.com%2F2013%2F06%2F25%2Fthe-complicated-endgame-for-dell%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+The+Intricate+Endgame+for+Dell" 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%2Fdealbook.nytimes.com%2F2013%2F06%2F25%2Fthe-complicated-endgame-for-dell%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+The+Intricate+Endgame+for+Dell" 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%2Fdealbook.nytimes.com%2F2013%2F06%2F25%2Fthe-complicated-endgame-for-dell%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+The+Intricate+Endgame+for+Dell" 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/165665565970/u/0/f/640387/c/34625/s/2dc9ff34/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665565970/u/0/f/640387/c/34625/s/2dc9ff34/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The battle for Dell has become a giant game of chicken between Carl Icahn and Michael Dell, one that is tilted against the company’s shareholders.     </Summary>
<Website>http://dealbook.nytimes.com/2013/06/25/the-complicated-endgame-for-dell/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31866/guest@my.umbc.edu/14160bb03c0b01574b82ea0ad7b5350c/api/pixel</TrackingUrl>
<Tag>deal-professor</Tag>
<Tag>delaware</Tag>
<Tag>dell-michael-s</Tag>
<Tag>icahn-carl-c</Tag>
<Tag>institutional-shareholder-services-inc</Tag>
<Tag>mergers-acquisitions-and-divestitures</Tag>
<Tag>mergers-and-acquisitions</Tag>
<Tag>myers-minor-iii</Tag>
<Tag>new</Tag>
<Tag>shareholder-rights-and-activism</Tag>
<Tag>southeastern-asset-management</Tag>
<Tag>technology</Tag>
<Tag>top-headline-2</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, 25 Jun 2013 16:10:52 -0400</PostedAt>
<EditAt>Wed, 26 Jun 2013 07:50:42 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31861" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31861">
<Title>Advanced Unit Testing Techniques in JavaScript</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=32892&amp;c=1913421237" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=32892&amp;c=1913421237" alt="" style="max-width: 100%; height: auto;"></a><p>By now, everyone knows about Test-Driven Development and unit testing. But are you using the testing frameworks to their fullest?</p>
    <p></p>
    <hr>
    <h2>Introduction</h2>
    <p>In this tutorial, I’ll introduce you to some of the more advanced techniques available to you.</p>
    <p>As this tutorial will cover some advanced topics, I assume you’ve already created unit tests before and are familiar with the basics and its terminology. If not, here’s an excellent article to you get started: <a href="http://net.tutsplus.com/articles/tdd-terminology-simplified/" rel="nofollow external" class="bo">TDD Terminology Simplified</a>.</p>
    <p>We’ll be using <a href="http://sinonjs.org" rel="nofollow external" class="bo">SinonJS</a>. This is a standalone framework which provides an API for mocks, stubs, spies and more. You can use it with any testing framework of your choosing, but for this tutorial, we’ll be using <a href="http://busterjs.org" rel="nofollow external" class="bo">BusterJS</a>, as it ships with SinonJS built-in.</p>
    <hr>
    <h2>Up &amp; Running With BusterJS</h2>
    <p>To install BusterJS just run the following in a terminal: <code>npm install -g buster</code></p>
    <p>Note that you need <a href="http://nodejs.org/" rel="nofollow external" class="bo">Node v0.6.3</a> or newer.</p>
    <p>BusterJS requires a <code>buster.js</code> configuration file which tells Buster where your sources and tests files are.</p>
    <p>Create the <code>buster.js</code> file and paste in the following:</p>
    <pre>var config = module.exports;&#x000A;    &#x000A;    config["Nettuts Tests"] = {&#x000A;        rootPath: "./",&#x000A;        environment: "browser",&#x000A;        sources: [&#x000A;            "src/*.js"&#x000A;        ],&#x000A;        tests: [&#x000A;            "spec/*-test.js"&#x000A;        ]&#x000A;    }&#x000A;    </pre>
    <p>Now we’ve told Buster that our tests can be found in the <code>spec</code> folder, and our implementation code in the <code>src</code> folder. You can reference files by their filenames, or use wildcards as we have done here. Note that these are relative to the <code>rootPath</code> that we specified.</p>
    <p>You can have as many configurations as you want. This allows you to set up different test groups.</p>
    <p>To run a test with Buster you’ll first need to start its server and hook it up to a browser. You can do so by running <code>buster server</code> in your terminal. You should see the following:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/buster-server.png" alt="buster-server" width="424" height="121" style="max-width: 100%; height: auto;"><br> <p>Now open your favorite browser and point it to <a href="http://localhost:1111" rel="nofollow external" class="bo">http://localhost:1111</a>. You should see the following screen:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/capture-browser.png" alt="capture-browser" width="600" height="249" style="max-width: 100%; height: auto;"><br> <p>Click the big <strong>Capture Browser</strong> button to start capturing this browser. Your tests will now run in this browser as long as you leave it open. You can hook up as many browsers as you want, giving you the ability to test in multiple browsers <em>simultaneously</em> (yes, even good ol’ IE)!</p>
    <p>You can also hook up BusterJS with PhantomJS to execute your tests without a browser, but that’s outside the scope of this tutorial.</p>
    <p>Make sure to leave the server and the browser tab running for the remainder of this tutorial.</p>
    <p>To run your tests, simply type <code>buster test</code> in a new terminal tab/window. Once you’ve added some tests you will see an output similar to the following:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/test-output.png" alt="test-output" width="600" height="61" style="max-width: 100%; height: auto;"><br> <hr>
    <h2>Test Doubles</h2>
    <p>Before we dive into mocks and stubs, lets talk a bit about <strong>test doubles</strong>; A test double is an object which looks and behaves more or less like the real thing. They are used in a test when using the real object would be difficult or undesirable, and they make testing much easier.</p>
    <p>It’s commonly compared to using a <em>stunt double</em> instead of the real actor in a movie scene.</p>
    <p>In this tutorial we’ll cover the following types of test doubles:</p>
    <ul>
    <li>stubs</li>
    <li>spies</li>
    <li>mocks</li>
    </ul>
    <hr>
    <h2>Spies</h2>
    <p>A spy is a function that records all calls made to it. It will keep track of arguments, return values, the value of <code>this</code>, exceptions thrown (if any), etc. It can be an anonymous function or it can wrap an existing function. If used as a wrapper it will <em>not</em> modify the underlying function in any way; the original function will still be executed as usual.</p>
    <p>Here’s how you create a spy:</p>
    <pre>var spy = sinon.spy();</pre>
    <p>This creates an anonymous function that records arguments, the value of <code>this</code>, exceptions, and return values for all calls it receives.</p>
    <pre>var spy = sinon.spy(my_function);</pre>
    <p>This spies on the provided function.</p>
    <pre>var spy = sinon.spy(object, "method");</pre>
    <p>This creates a spy for <code>object.method</code> and replaces the original method with the spy. The spy still executes the original method, but will record all calls.<br> You can access this spy via the newly created <code>spy</code> variable or by calling <code>object.method</code> directly. <code>object.method</code> can be restored by calling <code>spy.restore()</code> or <code>object.method.restore()</code>.</p>
    <p>The returned spy object has the following methods and properties:</p>
    <pre>spy.withArgs(arg1[, arg2, ...]);</pre>
    <p>Creates a spy that <em>only</em> records calls when the received arguments match those passed to <code>withArgs</code>.</p>
    <pre>spy.callCount</pre>
    <p>Returns the number of recorded calls.</p>
    <pre>spy.called</pre>
    <p>Returns <code>true</code> if the spy was called at least once.</p>
    <pre>spy.calledOnce</pre>
    <p>Returns <code>true</code> if spy was called <em>exactly</em> one time.</p>
    <pre>spy.calledWith(arg1, arg2, ...);</pre>
    <p>Returns <code>true</code> if the spy was called <em>at least once</em> with the provided arguments. This can be used for partial matching. SinonJS will only check the provided arguments against actual arguments. So a call that receives the provided arguments (and possibly others) will return <code>true</code>.</p>
    <pre>spy.threw([exception]);</pre>
    <p>Returns <code>true</code> if the spy threw an exception at least once. If you want, you can pass in a string or an object to test for a specific exception type or object.</p>
    <pre>var spyCall = spy.getCall(n);</pre>
    <p>Returns the <code>n</code>th call made to the spy. Spy calls have their own API, which you can find here: <a href="http://sinonjs.org/docs/#spycall" rel="nofollow external" class="bo">Spy Call API</a></p>
    <pre>spy.args</pre>
    <p>An array of arguments received per call. <code>spy.args[0]</code> is an array of arguments received in the first call, <code>spy.args[1]</code> is an array of arguments received in the second call, etc.</p>
    <pre>spy.reset()</pre>
    <p>Resets the state of a spy.</p>
    <p>This was just a small excerpt of the methods available to you. For the full list of all available API methods check the documentation here: <a href="http://sinonjs.org/docs/#spies-api" rel="nofollow external" class="bo">Spy API</a></p>
    <h3>Spies Example</h3>
    <p>Now lets look at an example on how to use a spy. In the following test we’re checking if <code>jQuery.get()</code> is using <code>jQuery.ajax()</code>. We do this by <em>spy</em>ing on <code>jQuery.ajax()</code>.</p>
    <pre>buster.testCase("Spies", {&#x000A;    &#x000A;        tearDown: function() {&#x000A;            jQuery.ajax.restore();&#x000A;        },&#x000A;    &#x000A;        "should call jQuery.ajax when using jQuery.get": function() {&#x000A;    &#x000A;            sinon.spy(jQuery,"ajax");&#x000A;    &#x000A;            jQuery.get("/user");&#x000A;    &#x000A;            assert(jQuery.ajax.calledOnce);&#x000A;    &#x000A;        }&#x000A;    &#x000A;    });</pre>
    <p>The original method is unaffected, and is still being executed. We just wrapped it in a spy so we can record the calls to it.</p>
    <p>After the test has run, we remove the spy from <code>jQuery.ajax</code> by calling <code>.restore()</code>.</p>
    <hr>
    <h2>Stubs</h2>
    <p>A stub is a test double with preprogrammed behavior. Stubs are used to make a piece of code work without actually using the <em>real implementation</em> of it.</p>
    <p>It provides preprogrammed responses to calls, and it doesn’t care about how many times it’s called, in which order, or with which arguments.</p>
    <p>Stubs have their own API, but also implement the full Spy API. Just like spies they can be either anonymous or wrap an existing function. Unlike spies, they will <em>not</em> execute the wrapped function. Instead, you can specify what the stub should do when it is called.</p>
    <p>Because you can control exactly how a stub behaves, it allows you to easily test different flows in your code, or to prevent undesirable behavior to be executed.</p>
    <p>Here’s an excerpt from Sinon’s Stub API:</p>
    <pre>var stub = sinon.stub();</pre>
    <p>This creates an anonymous stub function.</p>
    <pre>var stub = sinon.stub(object, "method");</pre>
    <p>This replaces <code>object.method</code> with a stub function. When stubbing an existing method like this, the original method will <em>not</em> be executed whenever <code>object.method()</code> is called.</p>
    <p>The original function can be restored by calling <code>object.method.restore()</code> or <code>stub.restore()</code>.</p>
    <pre>var stub = sinon.stub(obj);</pre>
    <p>Stubs <em>all</em> the object’s methods. It’s usually considered a better practice to stub individual methods, which are less prone to unexpected behavior.</p>
    <pre>stub.withArgs(arg1[, arg2, ...]);</pre>
    <p>Stubs the method <em>only</em> for the provided arguments.</p>
    <pre>stub.returns(value);</pre>
    <p>Makes the stub return the provided <code>value</code>.</p>
    <pre>stub.returnsArg(index);</pre>
    <p>Causes the stub to return the argument at the provided index; <code>stub.returnsArg(0)</code> causes the stub to return the first argument.</p>
    <pre>stub.throws();</pre>
    <p>Causes the stub to throw an exception. Optionally, you can pass in the type of error to throw, e.g. <code>stub.throws("TypeError")</code>.</p>
    <p>You can find the full API reference here: <a href="http://sinonjs.org/docs/#stubs-api" rel="nofollow external" class="bo">Stubs API</a></p>
    <h3>Stubs Examples</h3>
    <p>The simplest way to use a stub is by creating an anonymous stub function:</p>
    <pre>buster.testCase("Stubs Example", {&#x000A;    &#x000A;        "should demonstrate anonymous stub usage": function() {&#x000A;    &#x000A;            var callback = sinon.stub();&#x000A;    &#x000A;            callback.returns("result");&#x000A;    &#x000A;            assert.equals(callback(), "result");&#x000A;    &#x000A;        }&#x000A;    &#x000A;    });&#x000A;    </pre>
    <p>Here’s a different example. It demonstrates how to stub methods to force the code flow down a certain path:</p>
    <pre>buster.testCase("User", {&#x000A;    &#x000A;        setUp : function() {&#x000A;    &#x000A;            this.user = new User({&#x000A;                name  : 'John',&#x000A;                age   : 24,&#x000A;                loves : 'coffee'&#x000A;            });&#x000A;    &#x000A;        },&#x000A;    &#x000A;        tearDown : function() {&#x000A;    &#x000A;            Database.saveRecord.restore();&#x000A;    &#x000A;        },&#x000A;    &#x000A;        "should return `User saved successfully` when save in database is successful": function() {&#x000A;    &#x000A;            sinon.stub(Database, 'saveRecord').returns(true);&#x000A;    &#x000A;            var result = this.user.save();&#x000A;    &#x000A;            assert.equals(result, 'User saved successfully');&#x000A;    &#x000A;        },&#x000A;    &#x000A;        "should return `Error saving user` when save in database fails": function() {&#x000A;    &#x000A;            sinon.stub(Database, 'saveRecord').returns(false);&#x000A;    &#x000A;            var result = this.user.save();&#x000A;    &#x000A;            assert.equals(result, 'Error saving user');&#x000A;    &#x000A;        }&#x000A;    &#x000A;    });&#x000A;    </pre>
    <p>In the above tests we have a <code>User</code> class which uses the <code>Database</code> class to save data. Our goal is to test if the <code>User</code> class responds with the correct message when the <code>Database</code> is done saving the user data. We want to test both the good and bad scenarios.</p>
    <p>In a production environment the <code>Database</code> class might do various things to save the data (connect to a real database, do some AJAX calls, etc.) which are not of interest for this test. It could even have a negative effect on our test results. If something in the <code>Database</code> class is broken, we want the <code>Database</code> class’s own unit tests to break and indicate the problem for us. Other classes which use the <code>Database</code> class as a dependency should still work as expected. Mocking or stubbing dependencies allows us to do this, which is a strong argument for using these in the first place.</p>
    <p>In the above test we use a stub to preprogram the <code>Database.saveRecord()</code> method behavior. This allows us to test both code paths we need for our test.</p>
    <p>After each test we call <code>.restore()</code> on the method we stubbed to restore the original method.</p>
    <p>In the above example we stub <em>all</em> calls to <code>Database.saveRecord()</code>. We can also limit our stub to calls which have a certain collection of arguments.</p>
    <p>Here’s a quick example of how to force different actions based on the passed arguments:</p>
    <pre>buster.testCase("Stubs", {&#x000A;    &#x000A;        "should stub different behaviour based on arguments": function() {&#x000A;    &#x000A;            var callback = sinon.stub();&#x000A;    &#x000A;            // Stub the same method in 3 different ways, based on the arguments&#x000A;            callback.withArgs('success').returns(true);&#x000A;            callback.withArgs('getOrder').returns(['pizza', 'icecream']);&#x000A;            callback.withArgs(false).throws("My Error");&#x000A;    &#x000A;            // Verify each stub&#x000A;            assert( callback('success') );&#x000A;            assert.equals( callback('getOrder'), ['pizza', 'icecream']);&#x000A;    &#x000A;            try {&#x000A;                callback(false)&#x000A;            } catch(e) {}&#x000A;    &#x000A;            assert( callback.threw("My Error"), "Exception 'My Error' was not thrown" );&#x000A;    &#x000A;        }&#x000A;    &#x000A;    });&#x000A;    </pre>
    <hr>
    <h2>Mocks</h2>
    <p>Mocks are stubs with <strong>preprogrammed expectations</strong>. They allow you to verify the <em>behavior</em> of a piece of software, as opposed to verifying the <em>state</em> of something, as you’d do with normal assertions.</p>
    <p>Here’s a list of Sinon’s Mock API:</p>
    <pre>var mock = sinon.mock(obj);</pre>
    <p>This creates a mock for the provided object. It does not modify the object, but returns a mock object to set expectations on the object’s methods.</p>
    <pre>var expectation = mock.expects("method");</pre>
    <p>This overrides <code>obj.method</code> with a mock function and returns it. Expectations come with their own API, which we’ll cover later.</p>
    <pre>mock.restore();</pre>
    <p>Restores all mocked methods to their original functions.</p>
    <pre>mock.verify();</pre>
    <p>Verifies all expectations on the mock. If any expectation is not met, an exception is thrown. This will also restore the mocked methods to their original functions.</p>
    <p>Mocks also implement the full Stub API.</p>
    <h3>Mocks Examples</h3>
    <p>Now lets see how we can implement this in the <code>User</code> example we used earlier when talking about stubs.</p>
    <p>Remember how it used the <code>Database.saveRecord</code> method? We never wrote a test to make sure the <code>User</code> class is actually calling this method correctly, we just <em>assumed</em> it would.</p>
    <p>We don’t have any tests to verify the communication between the two objects, but we can fix this easily by writing the following test:</p>
    <pre>buster.testCase("User", {&#x000A;    &#x000A;        setUp : function() {&#x000A;    &#x000A;            var userdata = this.userdata = {&#x000A;                name  : 'John',&#x000A;                age   : 24,&#x000A;                loves : 'coffee'&#x000A;            };&#x000A;    &#x000A;            this.user = new User(userdata);&#x000A;    &#x000A;        },&#x000A;    &#x000A;        "should use Database class to save userdata": function() {&#x000A;    &#x000A;            var mock = sinon.mock(Database);&#x000A;    &#x000A;            mock&#x000A;                .expects('saveRecord')&#x000A;                .withExactArgs(this.userdata)&#x000A;                .once();&#x000A;    &#x000A;            this.user.save();&#x000A;    &#x000A;            mock.verify();&#x000A;    &#x000A;        }&#x000A;    &#x000A;    });&#x000A;    </pre>
    <p>As you can see, we mocked the <code>Database</code> object and explicitly stated how we expect the <code>saveRecord</code> method to be called. In this test we expect the method to be called only once, with the <code>userdata</code> object as the only parameter.</p>
    <p>Because our expectations are already in our mock, we do not need to write any assertions, instead we just tell the mock to verify its expectations by using <code>mock.verify()</code>.</p>
    <p>If the mock was called more than once, or with parameters other than those we specified, it would throw an error which would make the test fail:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/mock-failed-verification.png" alt="mock-failed-verification" width="600" height="66" style="max-width: 100%; height: auto;"><br> <p>Lets look at an other example where mocks could come in handy.</p>
    <p>If you’ve worked with unit tests before in a PubSub system, you’ll probably have seen something similar to the following:</p>
    <pre>    "should execute subscribers with correct data": function() {&#x000A;    &#x000A;            var pubsub = new PubSub(),&#x000A;                called = false,&#x000A;                eventdata = { foo : 'bar' },&#x000A;                callback = function(data) { &#x000A;                    called = (data === eventdata);&#x000A;                };&#x000A;    &#x000A;            pubsub.subscribe("message", callback);&#x000A;            pubsub.publish("message", eventdata);&#x000A;    &#x000A;            assert(called);&#x000A;    &#x000A;        }&#x000A;    </pre>
    <p>This test verifies that the subscriber is called when an event is published.</p>
    <p>The <code>callback</code> function is acting more or less like a mock, as it’s verifying if it was called with the correct arguments. Lets improve the test by turning <code>callback</code> into a real mock:</p>
    <pre>    "should execute subscribers with correct data (using mocks)": function() {&#x000A;    &#x000A;            var pubsub = new PubSub(),&#x000A;                eventdata = { foo : 'bar' },&#x000A;                callback = sinon.mock().withExactArgs(eventdata).once();&#x000A;    &#x000A;            pubsub.subscribe("message", callback);&#x000A;            pubsub.publish("message", eventdata);&#x000A;    &#x000A;            callback.verify();&#x000A;    &#x000A;        }&#x000A;    </pre>
    <p>Easy as pie. And it also improved the readability of the test!</p>
    <h3>Expectations</h3>
    <p>The <code>.once()</code> and <code>.withExactArgs()</code> methods used above are <strong>expectations</strong>. Sinon offers a ton of different expectations that you can use for your mocks. Here are a few of my favorites:</p>
    <pre>expectation.atLeast(n)</pre>
    <p>Expect the method to be called a <em>minimum</em> of <code>n</code> times.</p>
    <pre>expectation.atMost(n)</pre>
    <p>Expect the method to be called a <em>maximum</em> of <code>n</code> times.</p>
    <pre>expectation.never()</pre>
    <p>Expect the method to never be called.</p>
    <pre>expectation.once()</pre>
    <p>Expect the method to be called <em>exactly</em> once.</p>
    <pre>expectation.exactly(n)</pre>
    <p>Expect the method to be called exactly <code>n</code> times.</p>
    <pre>expectation.withArgs(arg1, arg2, ...)</pre>
    <p>Expect the method to be called with the provided arguments, and possibly others.</p>
    <pre>expectation.withExactArgs(arg1, arg2, ...)</pre>
    <p>Expect the method to be called with the provided arguments, <em>and no others</em>.</p>
    <pre>expectation.verify()</pre>
    <p>Verifies the expectation and throws an exception if it’s not met.</p>
    <p>The full list of expectations can be found here: <a href="http://sinonjs.org/docs/#expectations" rel="nofollow external" class="bo">Expectations API</a></p>
    <h4>Expectations Examples</h4>
    <p>You can chain these expectations to your heart’s content. So this is totally valid:</p>
    <pre>sinon.mock(obj)&#x000A;         .expects('method')&#x000A;         .withExactArgs(data)&#x000A;         .atLeast(1)&#x000A;         .atMost(3);</pre>
    <p>Also, you can set expectations for multiple methods on the same mock simultaneously:</p>
    <pre>var mock = sinon.mock(obj);&#x000A;    &#x000A;    mock.expects('method1')&#x000A;        .atLeast(1)&#x000A;        .atMost(3);&#x000A;    &#x000A;    mock.expects('method2')&#x000A;        .withArgs(data)&#x000A;        .once();&#x000A;    </pre>
    <p>Or even set multiple expectations on the <em>same</em> method:</p>
    <pre>var mock = sinon.mock(obj);&#x000A;    &#x000A;    mock.expects('myMethod')&#x000A;        .withArgs('foo')&#x000A;        .atLeast(1)&#x000A;        .atMost(3);&#x000A;        &#x000A;    mock.expects('myMethod')&#x000A;        .withArgs('bar')&#x000A;        .exactly(4);&#x000A;    </pre>
    <p>Both expectations will have to be met for the test to pass.</p>
    <p>Now that we’ve covered test doubles, lets talk about something completely different, but equally awesome: <em>time travel</em>!</p>
    <hr>
    <h2>Time-Travel in Unit Tests</h2>
    <blockquote><p>I don’t always bend time and space in unit tests, but when I do, I use Buster.JS + Sinon.JS ~ <a href="https://twitter.com/briancavalier/status/225585750387863554" rel="nofollow external" class="bo">Brian Cavalier, Cujo.JS</a></p></blockquote>
    <p>Do you often use <code>setTimeout</code>, <code>clearTimeout</code>, <code>setInterval</code>, or <code>clearInterval</code> to delay execution of a piece of code? If so, then you’ve probably encountered tests like this:</p>
    <pre>buster.testCase("EggTimer", {&#x000A;    &#x000A;        "should execute callback method after 5000ms": function(done) {&#x000A;    &#x000A;            // Overwrite BusterJS default test timeout of 250ms&#x000A;            this.timeout = 6000;&#x000A;    &#x000A;            var mock = sinon.mock().once();&#x000A;    &#x000A;            EggTimer.start(5000, mock);&#x000A;    &#x000A;            setTimeout(function() {&#x000A;                mock.verify();&#x000A;    &#x000A;                // Because of the asynchronous nature of setTimeout,&#x000A;                // we need to tell BusterJS when our test is done:&#x000A;                done();&#x000A;            }, 5001);&#x000A;    &#x000A;        }&#x000A;    &#x000A;    });&#x000A;    </pre>
    <p>This test verifies if the <strong>EggTimer.start</strong> method executes the callback after a certain period of time. But by doing so, it forces you to wait for five plus seconds <em>every time you run the test</em>!</p>
    <p>Imagine having ten tests which rely on <code>setTimeout</code> in this way; Your test suite will quickly become so slow, you’ll start hating to run it.</p>
    <p>Fortunately, SinonJS provides <strong>fake timers</strong> which allow us to override the browser’s clock and travel forward in time — Great Scott!</p>
    <p>We can do this by using the <code>sinon.useFakeTimers()</code> method. By doing so, SinonJS will create a clock object and override the browser’s default timer functions with its own.</p>
    <p>The returned clock object has only two methods:</p>
    <pre>clock.tick(time)</pre>
    <p>Tick the clock ahead for <code>time</code> milliseconds. This causes all timers scheduled within the specified time period to be executed.</p>
    <pre>clock.restore()</pre>
    <p>This call is usually done in the <em>tearDown</em> step of a test(suite). It resets the timer functions back to the browser’s native ones.</p>
    <h3>Fake Timers Example</h3>
    <p>Now that we know about fake timers, lets see how we can use them to rewrite the above test:</p>
    <pre>buster.testCase("EggTimer (with fake timers)", {&#x000A;    &#x000A;        setUp: function () {&#x000A;            this.clock = sinon.useFakeTimers();&#x000A;        },&#x000A;    &#x000A;        tearDown: function () {&#x000A;            this.clock.restore();&#x000A;        },&#x000A;    &#x000A;        "should execute callback method after 5000ms": function() {&#x000A;    &#x000A;            var mock = sinon.mock().once();&#x000A;    &#x000A;            EggTimer.start(5000, mock);&#x000A;            this.clock.tick(5001);&#x000A;    &#x000A;            mock.verify();&#x000A;    &#x000A;        }&#x000A;    &#x000A;    });&#x000A;    </pre>
    <p>First we’ve added <code>setUp</code> and <code>tearDown</code> methods to override and restore the browser’s clock before and after each test.</p>
    <p>Then we used the <code>clock.tick()</code> method to travel forward in time. Because SinonJS’s fake timers are synchronous implementations, we no longer need the <code>done()</code> call. As an added benefit, our test is now much easier to read.</p>
    <p>Here’s a speed comparison:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/fake-timers-speed-comparison.png" alt="fake-timers-speed-comparison" width="600" height="147" style="max-width: 100%; height: auto;"><br> <p>Our rewritten test takes the total test execution time down from 5012ms to 12ms! We saved exactly 5000ms, which was the value we used in the first test’s <code>setTimeout()</code> call!</p>
    <p>By using fake timers, having ten of these tests is no big deal. It will only increase the total test execution time by a few milliseconds, as opposed to 5000ms per added test!</p>
    <p>More information on Sinon’s clock and timer functions can be found here: <a href="http://sinonjs.org/docs/#clock-api" rel="nofollow external" class="bo">Clock API</a></p>
    <hr>
    <h2>Conclusion</h2>
    <p>We’ve looked at various advanced techniques which you can use in your JavaScript unit tests. We discussed <strong>spies</strong>, <strong>stubs</strong>, <strong>mocks</strong>, and how to <strong>fake the browser’s timer functions</strong>.</p>
    <p>We used SinonJS for this, but most other testing frameworks (like Jasmine) have support for these functionalities (although with their own API).</p>
    <p>If you’re interested in more in-depth knowledge on unit testing in JavaScript, I highly recommend the <a href="http://tddjs.com" rel="nofollow external" class="bo">Test-Driven JavaScript Development</a> book by Christian Johansen (the creator of SinonJS.)</p>
    <p>I hope this article was helpful, and that you’ve learned some new techniques that you can use the next time you write a unit test. Thank you for reading.</p>
    </div>
]]>
</Body>
<Summary>By now, everyone knows about Test-Driven Development and unit testing. But are you using the testing frameworks to their fullest?    Introduction  In this tutorial, I’ll introduce you to some of...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/BIRTffwgUi0/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31861/guest@my.umbc.edu/fd2d898d6a72b0ea556a373eeb0785c4/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>javascript-and-ajax</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tutorials</Tag>
<Tag>unit-testing</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, 25 Jun 2013 16:02:05 -0400</PostedAt>
<EditAt>Tue, 25 Jun 2013 16:02:05 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31860" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31860">
<Title>UMBC Alumni on the VIP List</Title>
<Body>
<![CDATA[
    <div class="html-content">Each year, the Daily Record publishes the VIP List, or “Very Important Professionals, Successful by 40.” According to the Daily Record, VIP recognizes Maryland leaders based on their professional accomplishments, a commitment to inspiring change in their community, and their … <a href="https://umbcalumni.wordpress.com/2013/06/25/umbc-alumni-on-the-vip-list/" rel="nofollow external" class="bo">Continue reading <span>→</span></a>
    </div>
]]>
</Body>
<Summary>Each year, the Daily Record publishes the VIP List, or “Very Important Professionals, Successful by 40.” According to the Daily Record, VIP recognizes Maryland leaders based on their professional...</Summary>
<Website>https://umbcalumni.wordpress.com/2013/06/25/umbc-alumni-on-the-vip-list/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31860/guest@my.umbc.edu/f40e2d97bbc3e1624086613131fb02e2/api/pixel</TrackingUrl>
<Tag>10s-alums</Tag>
<Tag>90s-alums</Tag>
<Tag>interdisciplinary-studies</Tag>
<Tag>social-sciences</Tag>
<Group token="retired-20">UMBC Alumni</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-20</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/original.png?1280681147</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/large.png?1280681147</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/medium.png?1280681147</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/small.png?1280681147</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxsmall.png?1280681147</AvatarUrl>
<Sponsor>UMBC Alumni</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Tue, 25 Jun 2013 15:54:47 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31864" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31864">
<Title>UMBC Alumni on the VIP List</Title>
<Body>
<![CDATA[
    <div class="html-content">Each year, the Daily Record publishes the VIP List, or “Very Important Professionals, Successful by 40.” According to the Daily Record, VIP recognizes Maryland leaders based on their professional accomplishments, a commitment to inspiring change in their community, and their … <a href="http://umbcalumni.wordpress.com/2013/06/25/umbc-alumni-on-the-vip-list/" rel="nofollow external" class="bo">Continue reading <span>→</span></a>
    </div>
]]>
</Body>
<Summary>Each year, the Daily Record publishes the VIP List, or “Very Important Professionals, Successful by 40.” According to the Daily Record, VIP recognizes Maryland leaders based on their professional...</Summary>
<Website>http://umbcalumni.wordpress.com/2013/06/25/umbc-alumni-on-the-vip-list/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31864/guest@my.umbc.edu/a907714579d18487bed6c62140dc1ea9/api/pixel</TrackingUrl>
<Tag>10s-alums</Tag>
<Tag>90s-alums</Tag>
<Tag>interdisciplinary-studies</Tag>
<Tag>social-sciences</Tag>
<Group token="retired-20">UMBC Alumni</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-20</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/original.png?1280681147</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/large.png?1280681147</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/medium.png?1280681147</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/small.png?1280681147</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxsmall.png?1280681147</AvatarUrl>
<Sponsor>UMBC Alumni</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Tue, 25 Jun 2013 15:54:47 -0400</PostedAt>
</NewsItem>

</News>
