<?xml version="1.0"?>
<News hasArchived="true" page="7699" pageCount="10787" pageSize="10" timestamp="Wed, 02 Sep 2026 21:31:58 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7699&amp;range=30">
<NewsItem contentIssues="false" id="42727" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42727">
<Title>New Poll: Sharing Buttons</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Throughout the life of this site, I've flipflopped (<a href="http://css-tricks.com/quick-thoughts-on-sharing-buttons/" rel="nofollow external" class="bo">nope</a>, <a href="http://css-tricks.com/sharing/" rel="nofollow external" class="bo">yep</a>) on whether or not I show social sharing buttons on articles. As anything, there are arguments in either direction. We can cover that briefly, but I also want to gather a bit of data on the subject, so that will be our next poll.</p>
    <p></p>
    <p>The impetus for this poll is the comments I get from people during times where there are no sharing buttons present on my articles. Like:</p>
    <blockquote><p>Hey Chris, I wanted to share an article from CSS-Tricks but there were no sharing buttons. Why?</p></blockquote>
    <p>Sometimes that will come in the form of the tweet, which is sometimes just someone wanting to know if I have any specific thoughts on that, but sometimes someone who legitimately thinks they can't share pages that don't have sharing buttons. Leading me to wonder:</p>
    <blockquote>
    <p>I wonder how many people assume that an article is un-shareable if it doesn’t have sharing buttons. And if that’s any significant loss.</p>
    <p>— Chris Coyier (@chriscoyier) <a href="https://twitter.com/chriscoyier/statuses/443836163946582016" rel="nofollow external" class="bo">March 12, 2014</a></p>
    </blockquote>
    <p></p>
    <p>Luke Wroblewski <a href="http://www.lukew.com/ff/entry.asp?1852" rel="nofollow external" class="bo">collected some data</a> indicating 0.25% of pageviews will share the page (from great studies <a href="https://insidegovuk.blog.gov.uk/2014/02/20/gov-uk-social-sharing-buttons-the-first-10-weeks/" rel="nofollow external" class="bo">like this</a>). That is with sharing buttons present. Make me wonder what that number would be without sharing buttons. Presumably lower, but just to be clear, people can share any link they want, they don't need a button to do it, and certainly some people prefer doing it that way. </p>
    <p>There is also the issue of how much an individual share <em>matters</em>. One share from a trusted and highly followed source is better than 1,000 spambot shares. My unscientific guess is that shares you miss out on by not having buttons present aren't worth much anyway. And in fact having sharing buttons can be a turnoff to the same type of people you <em>want</em> sharing the page. I'm not sure how we could get data on that, so let's just go with:</p>
    <blockquote><p>This best describes how I share links on my social media site(s) of choice:</p></blockquote>
    <ul>
    <li>I typically only share pages that have sharing buttons.</li>
    <li>I don't use ever use sharing buttons. I share my own way.</li>
    <li>I can go either way.</li>
    </ul>
    <p>Actual poll is embedded on the site.</p>
    <p>I'm not sure if we'll land on any perfect answer, but it will be interesting to think about. </p>
    <p>General positives about sharing buttons:</p>
    <ul>
    <li>They can make sharing easier, more sharing means more traffic</li>
    <li>They remind people to share</li>
    <li>You might get more sharing</li>
    </ul>
    <p>General negatives about sharing buttons:</p>
    <ul>
    <li>They can negatively affect page performance</li>
    <li>They can look garish</li>
    <li>Low numbers can look embarrassing</li>
    </ul>
    <p>At the time of this writing, I have social sharing buttons on this site in the form of simple anchor links that link to those services dedicated sharing pages (rather than the JavaScript powered sharing buttons with all the extra functionality). <a href="http://cferdinandi.github.io/social-sharing/" rel="nofollow external" class="bo">Like these.</a></p>
    <hr>
    <p><small><a href="http://css-tricks.com/new-poll-sharing-buttons/" rel="nofollow external" class="bo">New Poll: Sharing Buttons</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>Throughout the life of this site, I've flipflopped (nope, yep) on whether or not I show social sharing buttons on articles. As anything, there are arguments in either direction. We can cover that...</Summary>
<Website>http://css-tricks.com/new-poll-sharing-buttons/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42727/guest@my.umbc.edu/41ef6ba7555a442df146ab9de602470f/api/pixel</TrackingUrl>
<Tag>article</Tag>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tricks</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>Fri, 21 Mar 2014 11:57:40 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42722" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42722">
<Title>AAUW Scholarship for Interrupted Studies</Title>
<Tagline>Attn: Junior and Senior Women!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">Have you completed two years of study (junior standing) toward your baccalaureate degree? Have your studies been interrupted at some point for at least 6 months? If you answered YES to the above questions, there may be a $1,000 scholarship available for you.<br><br>This scholarship is sponsored by the Baltimore Branch of the American Association of University Women (AAUW). <em>This scholarship is not administered by UMBC or the Women's Center.  </em><div><br></div>
    <div><strong>COMPLETED scholarship applications and all required materials must be received by Thursday, May 15, 2014. Award will be for Fall 2014 semester.</strong></div>
    </div>
]]>
</Body>
<Summary>Have you completed two years of study (junior standing) toward your baccalaureate degree? Have your studies been interrupted at some point for at least 6 months? If you answered YES to the above...</Summary>
<AttachmentKind>Document</AttachmentKind>
<AttachmentUrl>https://assets1-my.umbc.edu/system/shared/attachments/1cccea45691abf8b265fe692ca5afeae/6a98ce0e/news/000/042/722/5eed2924bb4dd16357ee68f6c160befa/AAUW Scholarship for Interrupted Studies 2014.pdf?1395417428</AttachmentUrl>
<Attachments>
<Attachment kind="Document" url="https://my3.my.umbc.edu/posts/42722/attachments/12894"></Attachment>
</Attachments>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42722/guest@my.umbc.edu/6e4ee28c6f3541205e0e6d39fb71c2ac/api/pixel</TrackingUrl>
<Group token="womenscenter">Women's, Gender, &amp;amp; Equity Center</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/womenscenter</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/xsmall.png?1750974263</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/original.png?1750974263</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/xxlarge.png?1750974263</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/xlarge.png?1750974263</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/large.png?1750974263</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/medium.png?1750974263</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/small.png?1750974263</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/xsmall.png?1750974263</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/125/78272a4842689b30dbf74672182b78f8/xxsmall.png?1750974263</AvatarUrl>
<Sponsor>Women's Center</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/042/722/299aa828c75040d475c1e9f31c6e5939/xxlarge.jpg?1395417598</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/042/722/299aa828c75040d475c1e9f31c6e5939/xlarge.jpg?1395417598</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/042/722/299aa828c75040d475c1e9f31c6e5939/large.jpg?1395417598</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/042/722/299aa828c75040d475c1e9f31c6e5939/medium.jpg?1395417598</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/042/722/299aa828c75040d475c1e9f31c6e5939/small.jpg?1395417598</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/042/722/299aa828c75040d475c1e9f31c6e5939/xsmall.jpg?1395417598</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/042/722/299aa828c75040d475c1e9f31c6e5939/xxsmall.jpg?1395417598</ThumbnailUrl>
<PawCount>10</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 21 Mar 2014 11:57:08 -0400</PostedAt>
<EditAt>Tue, 01 Apr 2014 15:24:49 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42723" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42723">
<Title>Obama and Tech Executives to Meet Again on Privacy Issues</Title>
<Body>
<![CDATA[
    <div class="html-content">The president held a similar meeting in December and later announced he was taking steps to re-evaluate the breadth of the National Security Agency’s electronic surveillance programs.<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%2F22%2Ftechnology%2Fobama-and-tech-executives-to-meet-again-on-privacy-issues.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Obama+and+Tech+Executives+to+Meet+Again+on+Privacy+Issues" 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%2F22%2Ftechnology%2Fobama-and-tech-executives-to-meet-again-on-privacy-issues.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Obama+and+Tech+Executives+to+Meet+Again+on+Privacy+Issues" 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%2F22%2Ftechnology%2Fobama-and-tech-executives-to-meet-again-on-privacy-issues.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Obama+and+Tech+Executives+to+Meet+Again+on+Privacy+Issues" 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%2F22%2Ftechnology%2Fobama-and-tech-executives-to-meet-again-on-privacy-issues.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Obama+and+Tech+Executives+to+Meet+Again+on+Privacy+Issues" 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%2F22%2Ftechnology%2Fobama-and-tech-executives-to-meet-again-on-privacy-issues.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Obama+and+Tech+Executives+to+Meet+Again+on+Privacy+Issues" 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/191801593608/u/0/f/640387/c/34625/s/387538a0/sc/1/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801593608/u/0/f/640387/c/34625/s/387538a0/sc/1/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801593608/u/0/f/640387/c/34625/s/387538a0/sc/1/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801593608/u/0/f/640387/c/34625/s/387538a0/sc/1/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801593608/u/0/f/640387/c/34625/s/387538a0/sc/1/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801593608/u/0/f/640387/c/34625/s/387538a0/sc/1/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801593608/u/0/f/640387/c/34625/s/387538a0/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801593608/u/0/f/640387/c/34625/s/387538a0/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The president held a similar meeting in December and later announced he was taking steps to re-evaluate the breadth of the National Security Agency’s electronic surveillance programs.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/387538a0/sc/1/l/0L0Snytimes0N0C20A140C0A30C220Ctechnology0Cobama0Eand0Etech0Eexecutives0Eto0Emeet0Eagain0Eon0Eprivacy0Eissues0Bhtml0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42723/guest@my.umbc.edu/73e390458c1474713f9817dbdb9f7f68/api/pixel</TrackingUrl>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>national-security-agency</Tag>
<Tag>new</Tag>
<Tag>obama-barack</Tag>
<Tag>surveillance-of-citizens-by-government</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Tag>zuckerberg-mark-e</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>Fri, 21 Mar 2014 11:50:16 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42724" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42724">
<Title>In Turkey, Twitter Roars After Effort to Block It</Title>
<Body>
<![CDATA[
    <div class="html-content">Prime Minister Recep Tayyip Erdogan’s ban drew international outrage and was defied by thousands of Turks, including President Abdullah Gul, who protested — using Twitter.<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%2F22%2Fworld%2Feurope%2Fturks-seek-to-challenge-twitter-ban.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Turkey%2C+Twitter+Roars+After+Effort+to+Block+It" 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%2F22%2Fworld%2Feurope%2Fturks-seek-to-challenge-twitter-ban.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Turkey%2C+Twitter+Roars+After+Effort+to+Block+It" 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%2F22%2Fworld%2Feurope%2Fturks-seek-to-challenge-twitter-ban.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Turkey%2C+Twitter+Roars+After+Effort+to+Block+It" 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%2F22%2Fworld%2Feurope%2Fturks-seek-to-challenge-twitter-ban.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Turkey%2C+Twitter+Roars+After+Effort+to+Block+It" 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%2F22%2Fworld%2Feurope%2Fturks-seek-to-challenge-twitter-ban.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Turkey%2C+Twitter+Roars+After+Effort+to+Block+It" 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/191801593606/u/0/f/640387/c/34625/s/387538aa/sc/11/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801593606/u/0/f/640387/c/34625/s/387538aa/sc/11/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801593606/u/0/f/640387/c/34625/s/387538aa/sc/11/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801593606/u/0/f/640387/c/34625/s/387538aa/sc/11/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801593606/u/0/f/640387/c/34625/s/387538aa/sc/11/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801593606/u/0/f/640387/c/34625/s/387538aa/sc/11/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801593606/u/0/f/640387/c/34625/s/387538aa/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801593606/u/0/f/640387/c/34625/s/387538aa/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Prime Minister Recep Tayyip Erdogan’s ban drew international outrage and was defied by thousands of Turks, including President Abdullah Gul, who protested — using Twitter.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/387538aa/sc/11/l/0L0Snytimes0N0C20A140C0A30C220Cworld0Ceurope0Cturks0Eseek0Eto0Echallenge0Etwitter0Eban0Bhtml0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42724/guest@my.umbc.edu/ed2cb8f8b7a0e171acab0712cba3c7cb/api/pixel</TrackingUrl>
<Tag>censorship</Tag>
<Tag>erdogan-recep-tayyip</Tag>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>turkey</Tag>
<Tag>twitter-twtr-nyse</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>Fri, 21 Mar 2014 11:45:55 -0400</PostedAt>
<EditAt>Fri, 21 Mar 2014 22:26:56 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42728" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42728">
<Title>Shortcuts: Third-Party Hotel Booking Sites Can Mislead Consumers</Title>
<Body>
<![CDATA[
    <div class="html-content">Instead of finding a good deal, many travelers wind up feeling duped when reserving a room on a website that only looks as if it is owned by a hotel.<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%2F22%2Fyour-money%2Fthird-party-hotel-booking-sites-can-mislead-consumers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Shortcuts%3A+Third-Party+Hotel+Booking+Sites+Can+Mislead+Consumers" 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%2F22%2Fyour-money%2Fthird-party-hotel-booking-sites-can-mislead-consumers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Shortcuts%3A+Third-Party+Hotel+Booking+Sites+Can+Mislead+Consumers" 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%2F22%2Fyour-money%2Fthird-party-hotel-booking-sites-can-mislead-consumers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Shortcuts%3A+Third-Party+Hotel+Booking+Sites+Can+Mislead+Consumers" 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%2F22%2Fyour-money%2Fthird-party-hotel-booking-sites-can-mislead-consumers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Shortcuts%3A+Third-Party+Hotel+Booking+Sites+Can+Mislead+Consumers" 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%2F22%2Fyour-money%2Fthird-party-hotel-booking-sites-can-mislead-consumers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Shortcuts%3A+Third-Party+Hotel+Booking+Sites+Can+Mislead+Consumers" 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>
    </div>
]]>
</Body>
<Summary>Instead of finding a good deal, many travelers wind up feeling duped when reserving a room on a website that only looks as if it is owned by a hotel.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/38754d93/sc/10/l/0L0Snytimes0N0C20A140C0A30C220Cyour0Emoney0Cthird0Eparty0Ehotel0Ebooking0Esites0Ecan0Emislead0Econsumers0Bhtml0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42728/guest@my.umbc.edu/9def815ea5971bd005ef1a8dd9d00d00/api/pixel</TrackingUrl>
<Tag>expedia-inc-expe-nasdaq</Tag>
<Tag>hotels-and-travel-lodgings</Tag>
<Tag>marriott-international-inc-mar-nasdaq</Tag>
<Tag>new</Tag>
<Tag>orbitz-worldwide-inc-oww-nyse</Tag>
<Tag>personal-finances</Tag>
<Tag>technology</Tag>
<Tag>travel-and-vacations</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>Fri, 21 Mar 2014 11:45:34 -0400</PostedAt>
<EditAt>Fri, 21 Mar 2014 15:14:29 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="42720" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42720">
<Title>Our Project Management Professional (PMP&amp;#xae;) Certification Preparation course is a...</Title>
<Body>
<![CDATA[
    <div class="html-content">Our Project Management Professional (PMP®) Certification Preparation course is available online! Class starts April 7th, so register to secure your seat today.<br><br><br><a href="http://l.facebook.com/l.php?u=http%3A%2F%2Fwww.umbctraining.com%2FCourses%2Fcatalog%2FBU-2192B&amp;h=yAQGuUlBW&amp;s=1" rel="nofollow external" class="bo">Project Management Professional (PMP) Certification Preparation</a><br><a href="http://www.umbctraining.com">www.umbctraining.com</a><br>Project Management Professional (PMP) Certification Preparation. UMBC Training Centers delivers Project Management Professional (PMP) Certification Preparation to individuals and organizations.</div>
]]>
</Body>
<Summary>Our Project Management Professional (PMP®) Certification Preparation course is available online! Class starts April 7th, so register to secure your seat today.   Project Management Professional...</Summary>
<Website>http://www.facebook.com/umbctraining/posts/10100617962964213</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42720/guest@my.umbc.edu/3cd42294fdab75d55d6bccf0b127855f/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>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 21 Mar 2014 11:23:06 -0400</PostedAt>
<EditAt>Fri, 21 Mar 2014 11:23:06 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42716" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42716">
<Title>Q&amp;A: Digitizing Those Customer Loyalty Cards</Title>
<Body>
<![CDATA[
    <div class="html-content">Plus, printing multiple documents on a Mac without opening each one.<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%2F21%2Ftechnology%2Fpersonaltech%2Fdigitizing-those-customer-loyalty-cards.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Digitizing+Those+Customer+Loyalty+Cards" 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%2F21%2Ftechnology%2Fpersonaltech%2Fdigitizing-those-customer-loyalty-cards.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Digitizing+Those+Customer+Loyalty+Cards" 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%2F21%2Ftechnology%2Fpersonaltech%2Fdigitizing-those-customer-loyalty-cards.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Digitizing+Those+Customer+Loyalty+Cards" 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%2F21%2Ftechnology%2Fpersonaltech%2Fdigitizing-those-customer-loyalty-cards.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Digitizing+Those+Customer+Loyalty+Cards" 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%2F21%2Ftechnology%2Fpersonaltech%2Fdigitizing-those-customer-loyalty-cards.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Digitizing+Those+Customer+Loyalty+Cards" 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/191801800576/u/0/f/640387/c/34625/s/38755235/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801800576/u/0/f/640387/c/34625/s/38755235/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801800576/u/0/f/640387/c/34625/s/38755235/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801800576/u/0/f/640387/c/34625/s/38755235/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801800576/u/0/f/640387/c/34625/s/38755235/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801800576/u/0/f/640387/c/34625/s/38755235/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801800576/u/0/f/640387/c/34625/s/38755235/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801800576/u/0/f/640387/c/34625/s/38755235/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Plus, printing multiple documents on a Mac without opening each one.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/38755235/sc/4/l/0L0Snytimes0N0C20A140C0A30C210Ctechnology0Cpersonaltech0Cdigitizing0Ethose0Ecustomer0Eloyalty0Ecards0Bhtml0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42716/guest@my.umbc.edu/6faf7096675afaeab0f5e0d2daf7929f/api/pixel</TrackingUrl>
<Tag>android-operating-system</Tag>
<Tag>apple-inc-aapl-nasdaq</Tag>
<Tag>cvs-caremark-corporation-cvs-nyse</Tag>
<Tag>drugstores</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>mobile-applications</Tag>
<Tag>new</Tag>
<Tag>rite-aid-corporation-rad-nyse</Tag>
<Tag>technology</Tag>
<Tag>walgreen-company-wag-nyse</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>Fri, 21 Mar 2014 11:11:46 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42714" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42714">
<Title>Round-Up: UMBC in the News, 3/21</Title>
<Body>
<![CDATA[
    <div class="html-content">One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of these amazing people, UMBC often finds itself “in the news,” so each week, we’ll be sharing with you a round-up … <a href="http://umbcalumni.wordpress.com/2014/03/21/round-up-umbc-in-the-news-321/" rel="nofollow external" class="bo">Continue reading <span>→</span></a>
    </div>
]]>
</Body>
<Summary>One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of these amazing people, UMBC often finds itself “in the news,” so each week, we’ll be...</Summary>
<Website>http://umbcalumni.wordpress.com/2014/03/21/round-up-umbc-in-the-news-321/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42714/guest@my.umbc.edu/3d220017d95d6fcea09cc831adc14935/api/pixel</TrackingUrl>
<Tag>interdisciplinary-studies</Tag>
<Tag>kimberly-moffitt</Tag>
<Tag>matthew-baker</Tag>
<Tag>social-sciences</Tag>
<Tag>the-daily-beast</Tag>
<Tag>the-marc-steiner-show</Tag>
<Tag>the-washington-post</Tag>
<Tag>thomas-schaller</Tag>
<Tag>umbc</Tag>
<Tag>umbc-news</Tag>
<Tag>uncategorized</Tag>
<Tag>university-of-maryland-baltimore-county</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>Fri, 21 Mar 2014 11:11:41 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="106840" important="false" status="posted" url="https://my3.my.umbc.edu/posts/106840">
<Title>Round-Up: UMBC in the News, 3/21</Title>
<Body>
<![CDATA[
    <div class="html-content">One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of …</div>
]]>
</Body>
<Summary>One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of …</Summary>
<Website>https://magazine.umbc.edu/round-up-umbc-in-the-news-321/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/106840/guest@my.umbc.edu/22f56ebf8d5ce06cea7ac3361788b38e/api/pixel</TrackingUrl>
<Tag>alumni</Tag>
<Tag>kimberly-moffitt</Tag>
<Tag>matthew-baker</Tag>
<Tag>the-daily-beast</Tag>
<Tag>the-marc-steiner-show</Tag>
<Tag>the-washington-post</Tag>
<Tag>thomas-schaller</Tag>
<Tag>umbc</Tag>
<Tag>university-of-maryland-baltimore-county</Tag>
<Group token="retired-1945">UMBC Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-1945</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/images/avatars/group/8/xsmall.png?1787842820</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/images/avatars/group/8/original.png?1787842820</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/images/avatars/group/8/xxlarge.png?1787842820</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/images/avatars/group/8/xlarge.png?1787842820</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/images/avatars/group/8/large.png?1787842820</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/images/avatars/group/8/medium.png?1787842820</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/images/avatars/group/8/small.png?1787842820</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/images/avatars/group/8/xsmall.png?1787842820</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/images/avatars/group/8/xxsmall.png?1787842820</AvatarUrl>
<Sponsor>UMBC Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 21 Mar 2014 11:11:41 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42715" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42715">
<Title>Refactoring Legacy Code: Part 1 - The Golden Master</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Old code. Ugly code. Complicated code. Spaghetti code. Jibberish nonsense. In two words, <em>Legacy Code</em>. This is a series that will help you work and deal with it.</p>
    
    <p>In an ideal world, you would write only new code. You would write it beautiful and perfect. You would never have to revisit your code and you will never have to maintain projects ten years old. In an ideal world...</p>
    
    <p>Unfortunately, we live in a reality that is not ideal. We have to understand, modify and enhance ages-old code. We have to work with legacy code. So what are you waiting for? Let's get our heads into this first tutorial, get the code, understand it a little bit and create a safety net for our future modifications.</p>
    
    <h2>Definition of Legacy Code</h2>
    
    <p>Legacy code was defined in so many ways it is impossible to find a single, commonly accepted definition for it. The few examples at the start of this tutorial are just the tip of the iceberg. So I won't give you any official definition. Instead, I will quote you my favorite one.</p>
    
    <blockquote>To me, <em>legacy code</em> is simply code without tests. ~ Michael Feathers</blockquote>
    
    <p>Well, that is the first formal definition of the expression <em>legacy code</em>, published by Michael Feathers in his book <a href="http://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code?from_search=true" rel="nofollow external" class="bo">Working Effectively with Legacy Code</a>. Of course, the industry used the expression for ages, basically for any code that is difficult to change. However this definition has something different to tell. It explains the problem very clearly, so that the solution becomes obvious. "Difficult to change" is so vague. What should we do to make it easy to change? We have no idea! "Code without tests" on the other hand is very concrete. And the answer to our previous question is simple, make code testable and test it. So let's get started.</p>
    
    <h2>Getting Our Legacy Code</h2>
    
    <p>This series will be based on the exceptional Trivia Game by <a href="http://www.jbrains.ca/" rel="nofollow external" class="bo">J.B. Rainsberger</a> designed for <a href="http://legacycoderetreat.typepad.com/" rel="nofollow external" class="bo">Legacy Code Retreat</a> events. It is made to be like real legacy code and to also offer opportunities for a wide variety of refactoring, at a decent level of difficulty.</p>
    
    <h3>Check Out the Source Code</h3>
    
    <p>The Trivia Game is hosted on GitHub and it is GPLv3 licensed, so you can play around with it freely. We will start this series by checking out the official repository. The code is also attached to this tutorial with all the modifications we will make, so if you get confused at some point, you can take a sneak peek at the end result.</p>
    
    <pre> $ git clone <a href="https://github.com/jbrains/trivia.git">https://github.com/jbrains/trivia.git</a>&#x000A;    Cloning into 'trivia'...&#x000A;    remote: Counting objects: 429, done.&#x000A;    remote: Compressing objects: 100% (262/262), done.&#x000A;    remote: Total 429 (delta 100), reused 419 (delta 93)&#x000A;    Receiving objects: 100% (429/429), 848.33 KiB | 305.00 KiB/s, done.&#x000A;    Resolving deltas: 100% (100/100), done.&#x000A;    Checking connectivity... done.</pre>
    
    <p>When you open the <code>trivia</code> directory you will see our code in several programming languages. We will work in PHP, but you are free to choose your favorite one and apply the techniques presented here.</p>
    
    <h2>Understanding the Code</h2>
    
    <p>By definition, legacy code is difficult to understand, especially if we don't even know what it's supposed to do. So the first step is to run the code and make some kind of reasoning, what it is about.</p>
    
    <p>We have two files in our directory.</p>
    
    <pre>$ cd php/&#x000A;    $ ls -al&#x000A;    total 20&#x000A;    drwxr-xr-x  2 csaba csaba 4096 Mar 10 21:05 .&#x000A;    drwxr-xr-x 26 csaba csaba 4096 Mar 10 21:05 ..&#x000A;    -rw-r--r--  1 csaba csaba 5568 Mar 10 21:05 Game.php&#x000A;    -rw-r--r--  1 csaba csaba  410 Mar 10 21:05 GameRunner.php</pre>
    
    <p><code>GameRunner.php</code> seems to be a good candidate for our attempt to run the code.</p>
    
    <pre>$ php ./GameRunner.php&#x000A;    Chet was added&#x000A;    They are player number 1&#x000A;    Pat was added&#x000A;    They are player number 2&#x000A;    Sue was added&#x000A;    They are player number 3&#x000A;    Chet is the current player&#x000A;    They have rolled a 4&#x000A;    Chet's new location is 4&#x000A;    The category is Pop&#x000A;    Pop Question 0&#x000A;    Answer was corrent!!!!&#x000A;    Chet now has 1 Gold Coins.&#x000A;    Pat is the current player&#x000A;    They have rolled a 2&#x000A;    Pat's new location is 2&#x000A;    The category is Sports&#x000A;    Sports Question 0&#x000A;    Answer was corrent!!!!&#x000A;    Pat now has 1 Gold Coins.&#x000A;    Sue is the current player&#x000A;    They have rolled a 1&#x000A;    Sue's new location is 1&#x000A;    The category is Science&#x000A;    Science Question 0&#x000A;    Answer was corrent!!!!&#x000A;    Sue now has 1 Gold Coins.&#x000A;    Chet is the current player&#x000A;    They have rolled a 4&#x000A;    &#x000A;    ## Some lines removed to keep&#x000A;    ## the tutorial at a reasonable size&#x000A;    &#x000A;    Answer was corrent!!!!&#x000A;    Sue now has 5 Gold Coins.&#x000A;    Chet is the current player&#x000A;    They have rolled a 3&#x000A;    Chet is getting out of the penalty box&#x000A;    Chet's new location is 11&#x000A;    The category is Rock&#x000A;    Rock Question 5&#x000A;    Answer was correct!!!!&#x000A;    Chet now has 5 Gold Coins.&#x000A;    Pat is the current player&#x000A;    They have rolled a 1&#x000A;    Pat's new location is 10&#x000A;    The category is Sports&#x000A;    Sports Question 1&#x000A;    Answer was corrent!!!!&#x000A;    Pat now has 6 Gold Coins.</pre>
    
    <p>OK. Our guess was correct. Our code ran and produced some output. Analyzing this output will help us deduce some basic idea about what the code does.</p>
    
    <ol>
    	<li>We know it's a Trivia game. We knew it when we checked out the source code.</li>
    	<li>Our example has three players: Chet, Pat and Sue.</li>
    	<li>There is some kind of rolling of a dice or similar concept.</li>
    	<li>There is a current location for a player. Possibly on some kind of board?</li>
    	<li>There are various categories from which questions are asked.</li>
    	<li>Users answer questions.</li>
    	<li>Correct answers give players gold.</li>
    	<li>Wrong answers send players to the penalty box.</li>
    	<li>Players can get out of penalty box, based on some not quite clear logic.</li>
    	<li>It seems like the user that first reaches six gold coins wins.</li>
    </ol>
    
    <p>Now that is a lot of knowledge. We could figure out most of the basic behavior of the application by just looking at the output. In real life applications, the output may not be text on the screen, but it can be a web page, an error log, a database, a network communication, a dump file and so on. In other cases, the module you need to modify can not be run isolated. If so, you will need to run it through other modules of the bigger application. Just try to add the minimum, to get some reasonable output from your legacy code.</p>
    
    <h2>Scanning the Code</h2>
    
    <p>Now that we have an idea about what the code outputs, we can start looking at it. We will start with the runner.</p>
    
    <h3>The Game Runner</h3>
    
    <p>I like to start with running all the code through the formatter of my IDE. This greatly improves readability by making the code's form familiar with what I am used to. So this:</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gamerunner-form-before.png" style="max-width: 100%; height: auto;"><p>... will become this:<br></p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gamerunner-form-after.png" style="max-width: 100%; height: auto;"><p>... which is somewhat better. It may not be a huge difference with this small amount of code, but it will be on our next file.<br></p>
    
    <p>Looking at our <code>GameRunner.php</code> file, we can easily identify some key aspects we observed in the output. We can see the lines that add the users (9-11), that a roll() method is called and a winner is selected. Of course, these are far from the inner secrets of the logic of the game, but at least we could start by identifying key methods that will help us discover the rest of the code.</p>
    
    <h3>The Game File</h3>
    
    <p>We should do the same formatting on the <code>Game.php</code> file also.</p>
    
    <p>This file is much larger; About 200 lines of code. Most of the methods are appropriately sized, but some of them are quite large and after the formatting, we can see that in two places the code indentation goes beyond four levels. High levels of indentation usually means lots of complex decisions, so for now, we can assume that those points in our code will be more complex and more sensible to change. </p>
    
    <h2>The Golden Master</h2>
    
    <p>And the thought of change leads us to our lack of tests. The methods we saw in <code>Game.php</code> are quite complex. Don't worry if you don't understand them. At this point, they are a mystery for me also. Legacy code is a mystery that we need to solve and understand. We made our first step to understand it and it is now time for our second one.</p>
    
    <h3>So What Is This Golden Master?</h3>
    
    <p>When working with legacy code, it is almost impossible to understand it and to write code that will surely exercise all the logical paths through the code. For that kind of testing, we would need to understand the code, but we do not yet. So we need to take another approach.</p>
    
    <p>Instead of trying to figure out what to test, we can test everything, a lot of times, so that we end up with a huge amount of output, about which we can almost certainly assume that it was produced by exercising all parts of our legacy code. It is recommended to run the code at least 10,000 (ten thousand) times. We will write a test to run it twice as much and save the output.</p>
    
    <h3>Writing the Golden Master Generator</h3>
    
    <p>We can think ahead and start by creating a generator and a test as separate files for future testing, but is it really necessary? We don't know that yet for certain. So why not just start with a basic test file that will run our code once and build our logic up from there.</p>
    
    <p>You will find in the attached code archive, inside the <code>source</code> folder but outside the <code>trivia</code> folder our <code>Test</code> folder. In this folder, we create a file: <code>GoldenMasterTest.php</code>.</p>
    
    <pre>class GoldenMasterTest extends PHPUnit_Framework_TestCase {&#x000A;    &#x000A;    	function testGenerateOutput() {&#x000A;    		ob_start();&#x000A;    		require_once __DIR__ . '/../trivia/php/GameRunner.php';&#x000A;    		$output = ob_get_contents();&#x000A;    		ob_end_clean();&#x000A;    &#x000A;    		var_dump($output);&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    
    <p>We could do this in many ways. We could, for example, run our code from the console and redirect its output to a file. However, having it in a test that is easily run inside our IDE is an advantage we should not ignore.</p>
    
    <p>The code is quite simple, it buffers the output and puts it into the <code>$output</code> variable. The <code>require_once()</code> will also run all the code inside the the included file. In our var dump we will see some already familiar output.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-first-run.png" style="max-width: 100%; height: auto;"><p>However on a second run, we can observe something odd:<br></p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-second-run.png" style="max-width: 100%; height: auto;"><p>... the outputs differ. Even though we ran the same code, the output is different. The rolled numbers are different, the players' positions are different.<br></p>
    
    
    <h3>Seeding the Random Generator</h3>
    
    <pre>do {&#x000A;    &#x000A;    	$aGame-&gt;roll(rand(0, 5) + 1);&#x000A;    &#x000A;    	if (rand(0, 9) == 7) {&#x000A;    		$notAWinner = $aGame-&gt;wrongAnswer();&#x000A;    	} else {&#x000A;    		$notAWinner = $aGame-&gt;wasCorrectlyAnswered();&#x000A;    	}&#x000A;    &#x000A;    } while ($notAWinner);</pre>
    
    <p>By analyzing the essential code from the runner, we can see that it uses a the function <code>rand()</code> to generate random numbers. Our next stop is the official PHP documentation to research this <code>rand()</code> function.</p>
    
    <blockquote>The random number generator is seeded automatically.</blockquote>
    
    <p>The documentation tells us that seeding happens automatically. Now we have another task. We need to find a way to control the seed. The <code>srand()</code> function can help with that. Here is its definition from the documentation.</p>
    
    <blockquote>Seeds the random number generator with seed or with a random value if no seed is given.</blockquote>
    
    <p>It tells us, that if we run this before any call to <code>rand()</code>, we should always end up with the same results.</p>
    
    <pre>function testGenerateOutput() {&#x000A;    	ob_start();&#x000A;    	srand(1);&#x000A;    	require_once __DIR__ . '/../trivia/php/GameRunner.php';&#x000A;    	$output = ob_get_contents();&#x000A;    	ob_end_clean();&#x000A;    &#x000A;    	var_dump($output);&#x000A;    }</pre>
    
    <p>We put <code>srand(1)</code> before our <code>require_once()</code>. Now the output is always the same.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded.png" style="max-width: 100%; height: auto;"><h3>Put the Output in a File<br>
    </h3>
    
    <pre>class GoldenMasterTest extends PHPUnit_Framework_TestCase {&#x000A;    &#x000A;    	function testGenerateOutput() {&#x000A;    		file_put_contents('/tmp/gm.txt', $this-&gt;generateOutput());&#x000A;    		$file_content = file_get_contents('/tmp/gm.txt');&#x000A;    		$this-&gt;assertEquals($file_content, $this-&gt;generateOutput());&#x000A;    	}&#x000A;    &#x000A;    	private function generateOutput() {&#x000A;    		ob_start();&#x000A;    		srand(1);&#x000A;    		require_once __DIR__ . '/../trivia/php/GameRunner.php';&#x000A;    		$output = ob_get_contents();&#x000A;    		ob_end_clean();&#x000A;    		return $output;&#x000A;    	}&#x000A;    &#x000A;    }</pre>
    
    <p>This change looks reasonable. Right? We extracted the code generation into a method, run it twice, and expected the output to be equal. However they won't be.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-runonce.png" style="max-width: 100%; height: auto;"><p>The reason is that <code>require_once()</code> will not require the same file twice. The second call to the <code>generateOutput()</code> method will produce an empty string. So, what could we do? What if we simply <code>require()</code>? That should be run each time.<br></p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-cannotredecalre.png" style="max-width: 100%; height: auto;"><p>Well, that leads to another problem: <code>"Cannot redeclare echoln()"</code>. But where is that coming from? It is right at the beginning of the <code>Game.php</code> file. The reason why this error is occurring is because in <code>GameRunner.php</code> we have <code>include  __DIR__ . '/Game.php';</code>, which tries to include the Game file twice, each time when we call the <code>generateOutput()</code> method.<br></p>
    
    <pre>include_once __DIR__ . '/Game.php';</pre>
    
    <p>Using <code>include_once</code> in <code>GameRunner.php</code> will solve our problem. Yes, we needed to modify <code>GameRunner.php</code> without having tests for it, yet! However, we can be 99% sure that our change will not break the code itself. It is a small and simple enough change to not scare us very much. And most importantly, it makes the tests pass.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-onerung-working.png" style="max-width: 100%; height: auto;">
    
    <h3>Run It Several Times</h3>
    
    <p>Now that we have code we can run many times, it's time to generate some output.</p>
    
    <pre>function testGenerateOutput() {&#x000A;    	$this-&gt;generateMany(20, '/tmp/gm.txt');&#x000A;    	$this-&gt;generateMany(20, '/tmp/gm2.txt');&#x000A;    	$file_content_gm = file_get_contents('/tmp/gm.txt');&#x000A;    	$file_content_gm2 = file_get_contents('/tmp/gm2.txt');&#x000A;    	$this-&gt;assertEquals($file_content_gm, $file_content_gm2);&#x000A;    }&#x000A;    &#x000A;    private function generateMany($times, $fileName) {&#x000A;    	$first = true;&#x000A;    	while ($times) {&#x000A;    		if ($first) {&#x000A;    			file_put_contents($fileName, $this-&gt;generateOutput());&#x000A;    			$first = false;&#x000A;    		} else {&#x000A;    			file_put_contents($fileName, $this-&gt;generateOutput(), FILE_APPEND);&#x000A;    		}&#x000A;    		$times--;&#x000A;    	}&#x000A;    }</pre>
    
    <p>We extracted another method here: <code>generateMany()</code>. It has two parameters. One for the number of times we want to run our generator, the other is a destination file. It will put the generated output in the files. On the first run it empties the files, and for the rest of the iterations, it appends the data. You can look into the file to see the generated output 20 times.</p>
    
    <p>But wait! The same player wins every time? Is that possible?</p>
    
    <pre>cat /tmp/gm.txt | grep "has 6 Gold Coins."&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.</pre>
    
    <p>Yes! It is possible! It is more than possible. It is a sure thing. We have the same seed for our random function. We play the same game over and over again.</p>
    
    <h3>Run It Differently Each Time</h3>
    
    <p>We need to play different games, otherwise it is almost certain that only a small part of our legacy code is actually exercised over and over again. The scope of the golden master is to exercise as much as possible. We need to re-seed the random generator each time, but in a controlled way. One option is to use our counter as the seed value.</p>
    
    <pre>private function generateMany($times, $fileName) {&#x000A;    	$first = true;&#x000A;    	while ($times) {&#x000A;    		if ($first) {&#x000A;    			file_put_contents($fileName, $this-&gt;generateOutput($times));&#x000A;    			$first = false;&#x000A;    		} else {&#x000A;    			file_put_contents($fileName, $this-&gt;generateOutput($times), FILE_APPEND);&#x000A;    		}&#x000A;    		$times--;&#x000A;    	}&#x000A;    }&#x000A;    &#x000A;    private function generateOutput($seed) {&#x000A;    	ob_start();&#x000A;    	srand($seed);&#x000A;    	require __DIR__ . '/../trivia/php/GameRunner.php';&#x000A;    	$output = ob_get_contents();&#x000A;    	ob_end_clean();&#x000A;    	return $output;&#x000A;    }</pre>
    
    <p>This still keeps our test passing, so we are sure we generate the same complete output each time, while the output plays a different game for each iteration. </p>
    
    <pre>cat /tmp/gm.txt | grep "has 6 Gold Coins."&#x000A;    Sue now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Pat now has 6 Gold Coins.&#x000A;    Pat now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Sue now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Sue now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Sue now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Pat now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.&#x000A;    Chet now has 6 Gold Coins.</pre>
    
    <p>There are various winners for the game in a random fashion. This looks good.</p>
    
    <h3>Getting to 20,000</h3>
    
    <p>The first thing you may try is to run our code for 20,000 game iterations.</p>
    
    <pre>function testGenerateOutput() {&#x000A;    	$times = 20000;&#x000A;    	$this-&gt;generateMany($times, '/tmp/gm.txt');&#x000A;    	$this-&gt;generateMany($times, '/tmp/gm2.txt');&#x000A;    	$file_content_gm = file_get_contents('/tmp/gm.txt');&#x000A;    	$file_content_gm2 = file_get_contents('/tmp/gm2.txt');&#x000A;    	$this-&gt;assertEquals($file_content_gm, $file_content_gm2);&#x000A;    }</pre>
    
    <p>This will almost work. Two 55MB files will be generated.</p>
    
    <pre>ls -alh /tmp/gm*&#x000A;    -rw-r--r-- 1 csaba csaba 55M Mar 14 20:38 /tmp/gm2.txt&#x000A;    -rw-r--r-- 1 csaba csaba 55M Mar 14 20:38 /tmp/gm.txt</pre>
    
    <p>On the other hand, the test will fail with an insufficient memory error. It doesn't matter how much RAM you have, this will fail. I have 8GB plus a 4GB swap and it fails. The two strings are just too big to be compared in our assertion.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-20000runs-memoryexhausted.png" style="max-width: 100%; height: auto;"><p>In other words, we generate good files, but PHPUnit cannot compare them. We need a work-around.<br></p>
    
    <pre>$this-&gt;assertFileEquals('/tmp/gm.txt', '/tmp/gm2.txt');</pre>
    
    <p>That seems to be a good candidate, but it still fails. What a shame. We need to research the situation further.</p>
    
    <pre>$this-&gt;assertTrue($file_content_gm == $file_content_gm2);</pre>
    
    <p>This however, is working.</p>
    <img alt="" src="https://s3.amazonaws.com/cms-assets.tutsplus.com/uploads/users/45/posts/20331/image/gm-seeded-into-file-20001runs-ok.png" style="max-width: 100%; height: auto;"><div>
    
    <p>It can compare the two strings and fail if they are different. It has however, a small price. It won't be able to exactly tell what is wrong when the strings differ. It will just simply say <code>"Failed asserting that false is true."</code>. But we will deal with that in an upcoming tutorial.</p>
    
    <h2>Final Thoughts</h2>
    
    <p>We are done for this tutorial. We have learned quite a lot for our first lesson and we are on a good start for our future work. We met the code, we analyzed it in different ways and we mostly understood its essential logic. Then we created a set of tests to ensure it is exercised as much as possible. Yes. The tests are very slow. It takes them 24 seconds on my Core i7 CPU to generate the output twice. Fortunately in our future development, we will keep the <code>gm.txt</code> file untouched and generate another one only once per run. But 12 seconds is still a huge amount of time for such a small code base. </p>
    
    <p>By the time we finish this series, our tests should run in less than a second and test all the code properly. So, stay tuned for our next tutorial when we will tackle problems like magic constants, magic strings and complex conditionals. Thanks for reading.</p>
    
    </div>
    </div>
]]>
</Body>
<Summary>Old code. Ugly code. Complicated code. Spaghetti code. Jibberish nonsense. In two words, Legacy Code. This is a series that will help you work and deal with it.    In an ideal world, you would...</Summary>
<Website>http://code.tutsplus.com/tutorials/refactoring-legacy-code-part-1-the-golden-master--cms-20331</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42715/guest@my.umbc.edu/0149b927b4e66049a924113bd9e052e9/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>Fri, 21 Mar 2014 11:00:02 -0400</PostedAt>
<EditAt>Fri, 21 Mar 2014 11:00:02 -0400</EditAt>
</NewsItem>

</News>
