<?xml version="1.0"?>
<News hasArchived="true" page="8617" pageCount="10722" pageSize="10" timestamp="Sat, 11 Jul 2026 04:21:11 -0400" url="https://my3.my.umbc.edu/posts.xml?page=8617">
<NewsItem contentIssues="true" id="31353" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31353">
<Title>Comics of the week #187</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><a href="http://netdna.webdesignerdepot.com/uploads/2013/05/thumb6.jpg" rel="nofollow external" class="bo"><img alt="thumb" src="http://netdna.webdesignerdepot.com/uploads/2013/05/thumb6.jpg" width="200" height="160" style="max-width: 100%; height: auto;"></a>Every week we feature a set of comics created exclusively for WDD.</p> <p>The content revolves around web design, blogging and funny situations that we encounter in our daily lives as designers.</p> <p>These great cartoons are created by Jerry King, an award-winning cartoonist who’s one of the most published, prolific and versatile cartoonists in the world today.</p> <p>So for a few moments, take a break from your daily routine, have a laugh and enjoy these funny cartoons.</p> <p>Feel free to leave your comments and suggestions below as well as any related stories of your own…</p> <h1>A slow death</h1> <p><a href="http://netdna.webdesignerdepot.com/uploads/2013/05/9.jpg" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/9.jpg" width="650" alt="Comics of the week #187" style="max-width: 100%; height: auto;"></a></p> <p> </p> <h1>Nothing but love</h1> <p><a href="http://netdna.webdesignerdepot.com/uploads/2013/05/10.jpg" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/10.jpg" width="650" alt="Comics of the week #187" style="max-width: 100%; height: auto;"></a></p> <p> </p> <h1>Rear compression</h1> <p><a href="http://netdna.webdesignerdepot.com/uploads/2013/05/11.jpg" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/11.jpg" width="650" alt="Comics of the week #187" style="max-width: 100%; height: auto;"></a></p> <p><em><strong>Can you relate to these situations</strong><strong>? Please share your funny stories and comments below…</strong></em></p> <p><br><br> </p>
    <table width="100%"> <tbody>
    <tr> <td> <a href="http://www.mightydeals.com/deal/notifysnack.html?ref=inwidget" rel="nofollow external" class="bo"><strong>Stylish Notification Bars for your Website – 51% off!</strong></a> </td> <td> <a href="http://www.mightydeals.com/?ref=inwidget" rel="nofollow external" class="bo"><br> <img src="http://mightydeals.com/web/images/widget-logo.png" height="40" width="90" alt="Comics of the week #187" style="max-width: 100%; height: auto;"><br> </a> </td> </tr> </tbody>
    </table> <p><br> </p> <a href="http://www.webdesignerdepot.com/2013/06/comics-of-the-week-187/" rel="nofollow external" class="bo">Source</a> <div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F06%2Fcomics-of-the-week-187%2F&amp;t=Comics+of+the+week+%23187" 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.webdesignerdepot.com%2F2013%2F06%2Fcomics-of-the-week-187%2F&amp;t=Comics+of+the+week+%23187" 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.webdesignerdepot.com%2F2013%2F06%2Fcomics-of-the-week-187%2F&amp;t=Comics+of+the+week+%23187" 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.webdesignerdepot.com%2F2013%2F06%2Fcomics-of-the-week-187%2F&amp;t=Comics+of+the+week+%23187" 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.webdesignerdepot.com%2F2013%2F06%2Fcomics-of-the-week-187%2F&amp;t=Comics+of+the+week+%23187" 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/165665024100/u/49/f/661066/c/35285/s/2d523056/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665024100/u/49/f/661066/c/35285/s/2d523056/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Every week we feature a set of comics created exclusively for WDD.   The content revolves around web design, blogging and funny situations that we encounter in our daily lives as designers....</Summary>
<Website>http://rss.feedsportal.com/c/35285/f/661066/s/2d523056/l/0L0Swebdesignerdepot0N0C20A130C0A60Ccomics0Eof0Ethe0Eweek0E1870C/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31353/guest@my.umbc.edu/4da15746c796f4808e4a333b70a69a2d/api/pixel</TrackingUrl>
<Tag>art</Tag>
<Tag>cartoons</Tag>
<Tag>comics</Tag>
<Tag>comics-for-designers</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>funny</Tag>
<Tag>html</Tag>
<Tag>html5</Tag>
<Tag>humor</Tag>
<Tag>illustrator</Tag>
<Tag>javascript</Tag>
<Tag>jerry-king</Tag>
<Tag>mysql</Tag>
<Tag>oracle</Tag>
<Tag>photoshop</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web-design</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>Sat, 15 Jun 2013 05:26:19 -0400</PostedAt>
<EditAt>Sat, 15 Jun 2013 05:26:19 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31352" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31352">
<Title>Bits Blog: Google Calls U.S. Data Request Disclosures a Step Backward for Users</Title>
<Body>
<![CDATA[
    <div class="html-content">Google sought permission to publish more granular data on national security requests than Facebook or Microsoft published, and said anything less didn’t provide enough transparency.<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%2F15%2Fgoogle-calls-u-s-data-request-disclosures-a-step-backward-for-users%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Calls+U.S.+Data+Request+Disclosures+a+Step+Backward+for+Users" 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%2F15%2Fgoogle-calls-u-s-data-request-disclosures-a-step-backward-for-users%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Calls+U.S.+Data+Request+Disclosures+a+Step+Backward+for+Users" 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%2F15%2Fgoogle-calls-u-s-data-request-disclosures-a-step-backward-for-users%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Calls+U.S.+Data+Request+Disclosures+a+Step+Backward+for+Users" 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%2F15%2Fgoogle-calls-u-s-data-request-disclosures-a-step-backward-for-users%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Calls+U.S.+Data+Request+Disclosures+a+Step+Backward+for+Users" 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%2F15%2Fgoogle-calls-u-s-data-request-disclosures-a-step-backward-for-users%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Google+Calls+U.S.+Data+Request+Disclosures+a+Step+Backward+for+Users" 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/165665194446/u/0/f/640387/c/34625/s/2d50bd7a/kg/342-363/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665194446/u/0/f/640387/c/34625/s/2d50bd7a/kg/342-363/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Google sought permission to publish more granular data on national security requests than Facebook or Microsoft published, and said anything less didn’t provide enough transparency.     </Summary>
<Website>http://bits.blogs.nytimes.com/2013/06/15/google-calls-u-s-data-request-disclosures-a-step-backward-for-users/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31352/guest@my.umbc.edu/c915119ccb48f878694406d3d2f3f557/api/pixel</TrackingUrl>
<Tag>computers-and-the-internet</Tag>
<Tag>data</Tag>
<Tag>espionage-and-intelligence-services</Tag>
<Tag>facebook-inc</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>foreign-intelligence-surveillance-act-fisa</Tag>
<Tag>frank-john</Tag>
<Tag>google-inc</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>industrial-espionage</Tag>
<Tag>internet</Tag>
<Tag>microsoft-corporation</Tag>
<Tag>microsoft-corporation-msft-nasdaq</Tag>
<Tag>new</Tag>
<Tag>policy</Tag>
<Tag>privacy</Tag>
<Tag>social-networking-internet</Tag>
<Tag>surveillance-of-citizens-by-government</Tag>
<Tag>technology</Tag>
<Tag>twitter</Tag>
<Tag>ullyot-ted</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>Sat, 15 Jun 2013 01:54:59 -0400</PostedAt>
<EditAt>Mon, 17 Jun 2013 18:11:49 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31351" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31351">
<Title>Bits Blog: Facebook Discloses Basic Data on Law-Enforcement Requests</Title>
<Body>
<![CDATA[
    <div class="html-content">The social network said it received 9,000 to 10,000 requests for data from American law enforcement authorities in the second half of 2012.<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%2F14%2Ffacebook-discloses-basic-data-on-law-enforcement-requests%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Facebook+Discloses+Basic+Data+on+Law-Enforcement+Requests" 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%2F14%2Ffacebook-discloses-basic-data-on-law-enforcement-requests%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Facebook+Discloses+Basic+Data+on+Law-Enforcement+Requests" 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%2F14%2Ffacebook-discloses-basic-data-on-law-enforcement-requests%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Facebook+Discloses+Basic+Data+on+Law-Enforcement+Requests" 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%2F14%2Ffacebook-discloses-basic-data-on-law-enforcement-requests%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Facebook+Discloses+Basic+Data+on+Law-Enforcement+Requests" 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%2F14%2Ffacebook-discloses-basic-data-on-law-enforcement-requests%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Facebook+Discloses+Basic+Data+on+Law-Enforcement+Requests" 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/165666101678/u/0/f/640387/c/34625/s/2d507299/kg/342-363/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165666101678/u/0/f/640387/c/34625/s/2d507299/kg/342-363/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The social network said it received 9,000 to 10,000 requests for data from American law enforcement authorities in the second half of 2012.     </Summary>
<Website>http://bits.blogs.nytimes.com/2013/06/14/facebook-discloses-basic-data-on-law-enforcement-requests/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31351/guest@my.umbc.edu/a7ab09232367d33d2bffe096aa3962da/api/pixel</TrackingUrl>
<Tag>data</Tag>
<Tag>facebook-inc</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>federal-bureau-of-investigation</Tag>
<Tag>foreign-intelligence-surveillance-act-fisa</Tag>
<Tag>national-security-agency</Tag>
<Tag>new</Tag>
<Tag>policy</Tag>
<Tag>social</Tag>
<Tag>surveillance-of-citizens-by-government</Tag>
<Tag>technology</Tag>
<Tag>ullyot-ted</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, 14 Jun 2013 22:54:54 -0400</PostedAt>
<EditAt>Mon, 17 Jun 2013 08:19:37 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31350" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31350">
<Title>Building Ribbit in Meteor</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=32709&amp;c=867322119" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=32709&amp;c=867322119" alt="" style="max-width: 100%; height: auto;"></a><p>This is a continuation of the Twitter clone series with building Ribbit from scratch, this time using Meteor.</p>
    <p></p>
    <p>For this tutorial, please do not expect an in depth explanation of the Meteor framework. You should already have some Meteor experience so that you’ll understand some of the important concepts that will be presented. In order to get a basic understanding of Meteor I recommend Andrew Burgesses <a href="https://tutsplus.com/course/building-single-page-web-application-with-meteor-js/" rel="nofollow external" class="bo">course</a> on Tutsplus Premium.</p>
    <p>So, let’s get started.</p>
    <hr>
    <h2>
    <span>Step 0</span>: Creating and Configuring the Meteor Application</h2>
    <p>We begin by generating a new Meteor application. Open a command line prompt and navigate to the folder where you want the application to be stored. Then run:</p>
    <pre>meteor create ribbit</pre>
    <p>Meteor will create a folder named <code>ribbit</code> containing some files and will ask you to change directory into <code>ribbit</code> and run meteor commands in that folder.</p>
    <p>If you step into the <code>ribbit</code> folder and issue a <code>ls -la</code> command in order to see what was generated by Meteor, you will find a hidden folder named <code>.meteor</code> and three files named <code>ribbit.html</code>, <code>ribbit.css</code> and <code>ribbit.js</code>. The <code>.meteor</code> folder contains only one file named <code>packages</code>. The content of the <code>.meteor/packages</code> file informs Meteor about what smart packages are used by the application.</p>
    <p>Since we will start developing Ribbit from scratch we will keep only the <code>.meteor</code> folder and delete all the rest.</p>
    <p>Let’s see what packages Meteor uses by default: at the command prompt enter</p>
    <pre>cat .meteor/packages&#x000A;    </pre>
    <p>The output of this command should list the autopublish, insecure, and preserve-inputs packages.</p>
    <p>We will discuss the concept of publishing data from the server later, for the moment let’s note that the autopublish package is used on the server side to automatically make data available to the client. Usually this packet is not used in a production environment, so we can remove it by issuing the following command:</p>
    <pre>meteor remove autopublish&#x000A;    </pre>
    <p>Next, the insecure package allows database writes by default, which can be dangerous, since this allows any user to do any database operations, including deleting data. We will remove this package before deploying the app and add all the necessary code to protect writing to the database.</p>
    <p>And lastly, the preserve-inputs package keeps data from all of the form fields with a unique id.</p>
    <p>After all of that, we should now have a folder containing just a <code>.meteor</code> sub-folder and this should be the base of our app.</p>
    <hr>
    <h2>
    <span>Step 1</span>: Creating the Necessary Folder Structure</h2>
    <p>There are several rules Meteor uses to serve files and data which we will not being covering in detail here (see Andrew’s course for details). What is important to note, is that Meteor considers all files present in a server folder as being server code. All files in the client and public folders as being client code, which should be served to the client. And lastly, the files outside of these folders are served to both the client and the server. So let’s create the following folders:</p>
    <ul>
    <li>
    <strong>client</strong> – to store all the client side code.</li>
    <li>
    <strong>server</strong> – to store all the server side code.</li>
    <li>
    <strong>public</strong> – containing all the assets such as graphic files, robots.txt<br> files, favicons etc.</li>
    </ul>
    <p>Also, it’s important to know that Meteor considers JavaScript and CSS files as part of the client/server code and not as assets, which should be served from the public folder.</p>
    <p>So, we end up with the following folder structure:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/folders1.jpeg" alt="Our Folder Structure" width="191" height="110" style="max-width: 100%; height: auto;"><br> <hr>
    <h2>
    <span>Step 2</span>: The Static Version of the Login Page</h2>
    <p>Now it’s time to download the static version of the <a href="http://d2o0t5hpnwv4c1.cloudfront.net/2170_ribbit/layout.zip" rel="nofollow external" class="bo">Ribbit app</a>.</p>
    <p>After unpacking the files, copy the <code>gfx</code> folder into the <code>public</code> folder of our Ribbit app.</p>
    <p>Also, copy the <code>home.html</code> and <code>style.less</code> files into the <code>client</code> folder of our app. Now if you would try to start the server by issuing <code>meteor</code> from the command line, in the root of our application, you will see the server crashing and complaining about setting the <code>DOCTYPE</code> in our file.</p>
    <p>Meteor expects our HTML files to be composed from only three base elements: <em>the head</em>, <em>the body</em> and <em>the template</em> tags.</p>
    <p>So in order to fix the error, we should edit the <code>home.html</code> file and remove the <code>DOCTYPE</code> and <code>html</code> tags, which will be added by Meteor when serving the files.</p>
    <p>Now if you refresh the page, you should see its content, but it won’t have any styling since the package we downloaded uses LESS for styling the page.</p>
    <p>This is easy to fix by installing Meteor’s LESS smart package. So issue:</p>
    <pre>meteor add less&#x000A;    </pre>
    <p>then restart the server and reload the page and things should look a little bit better now.</p>
    <p>We still have to do some adjustments in the LESS file since not everything looks as it should. Search for all occurrences of <code>gfx</code> in the <code>style.less</code> file and change them by adding a trailing slash before each. This should be done in order to allow files to be loaded from the root of the project.</p>
    <p>The next step is to adjust the <code>home.html</code> and <code>style.less</code> files to add in a login button and have everything on one line in the header. The files should look like following:</p>
    <pre>// client/style.less&#x000A;    input {&#x000A;      width: 236px;&#x000A;      height: 26px;&#x000A;      border: 1px solid @border-color;&#x000A;      padding: 0 10px;&#x000A;      outline: none;&#x000A;      font-size: 17px;&#x000A;      &amp;amp;:focus {&#x000A;        background: #FFFDF2;&#x000A;      }&#x000A;    }&#x000A;    &#x000A;    input[type="submit"] {&#x000A;      height: 26px;&#x000A;      width: auto;&#x000A;      border: 1px solid #7BC574;&#x000A;      border-radius: 2px;&#x000A;      color: white;&#x000A;      font-size: 12px;&#x000A;      font-weight: bold;&#x000A;      padding: 0 20px;&#x000A;      cursor: pointer;&#x000A;      .gradient4f(0%, #8CD585, 23%, #82CD7A, 86%, #55AD4C, 100%, #4FA945);&#x000A;    }&#x000A;    &#x000A;    header {&#x000A;      background: url(/gfx/bg-header.png);&#x000A;      height: 85px;&#x000A;      width: 100%;&#x000A;      div.wrapper {&#x000A;        padding: 11px 0;&#x000A;        img {&#x000A;          position: relative;&#x000A;          top: 10px;&#x000A;          margin: 0 15px 0 0;&#x000A;        }&#x000A;        span {&#x000A;          font-size: 18px;&#x000A;          margin: 0 42px 0 0;&#x000A;        }&#x000A;        p {&#x000A;          display: inline;&#x000A;          input {&#x000A;            margin: 0 0 0 14px;&#x000A;            width: 180px;&#x000A;            height: 28px;&#x000A;          }&#x000A;        }&#x000A;        #btnLogOut {&#x000A;          float: right;&#x000A;          width: auto;&#x000A;          height: 28px;&#x000A;          margin: 19px 0 0 0;&#x000A;        }&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <p>And here’s what the <code>home.html</code> file should look like:</p>
    <pre>&lt;!-- client/home.html --&gt;&#x000A;    &lt;head&gt;&#x000A;    &lt;/head&gt;&#x000A;    &lt;body&gt;&#x000A;      &lt;header&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          &lt;img src="gfx/logo.png"&gt;&#x000A;          &lt;span&gt;Twitter Clone&lt;/span&gt;&#x000A;          &lt;p&gt;&#x000A;            &lt;input name="username" placeholder="username" type="text"&gt;&#x000A;            &lt;input name="password" placeholder="password"  type="password"&gt;&#x000A;            &lt;input type="submit" id="btnLogOut" value="Log In"&gt;&#x000A;          &lt;/p&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/header&gt;&#x000A;      &lt;div id="content"&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          &lt;img src="gfx/frog.jpg"&gt;&#x000A;          &lt;div class="panel right"&gt;&#x000A;            &lt;h1&gt;New to Ribbit?&lt;/h1&gt;&#x000A;            &lt;p&gt;&#x000A;              &lt;input name="email" placeholder="email" type="text"&gt;&#x000A;              &lt;input name="username" placeholder="username" type="text"&gt;&#x000A;              &lt;input name="fullname" placeholder="fullname" type="text"&gt;&#x000A;              &lt;input name="password" placeholder="password" type="text"&gt;&#x000A;              &lt;input name="password2" placeholder="retype password" type="password"&gt;&#x000A;              &lt;input type="submit" value="Create Account"&gt;&#x000A;            &lt;/p&gt;&#x000A;          &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/div&gt;&#x000A;      &lt;footer&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          Ribbit - A Twitter Clone Tutorial&lt;img src="gfx/logo-nettuts.png"&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/footer&gt;&#x000A;    &lt;/body&gt;&#x000A;    </pre>
    <p>Now take a look at the page in the browser. It should look like the image below:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/home_small.jpg" alt="Our Home page." width="600" height="297" style="max-width: 100%; height: auto;"><br> <p>Well that was pretty easy, wasn’t it? But, what we’ve done up to now is not what we really desired and it’s definitely far from following the Meteor style of doing things. Let’s fix this up!</p>
    <hr>
    <h2>
    <span>Step 3</span>: Meteor-ize the Home Page</h2>
    <p>Meteor constructs the HTML page that is sent to the browser based on three elements, it expects the following to be found: the head element, the body element, and the template element. Since the head and the body are already well known, special attention should be given to the template element.</p>
    <p>A template is declared with <code>&lt;template name="foo"&gt;...&lt;/template&gt;</code> and its content is rendered in the HTML content that is sent to the browser. On the other hand, in the JavaScript file, the template can be accessed using <code>Template.foo</code>, which returns a string of HTML when called.</p>
    <p>Now Meteor uses Handlebars as the template framework, but others can be used if needed, such as Jade.</p>
    <p>So, let’s see what should be done in order to transform the <code>home.html</code> file into a Meteor compatible page. Let’s take a look at the modified code:</p>
    <pre>&lt;!-- client/home.html --&gt;&#x000A;    &lt;head&gt;&#x000A;    &#x000A;    &lt;/head&gt;&#x000A;    &#x000A;    &lt;body&gt;&#x000A;      &lt;header&gt;&#x000A;        {{&gt; header}}&#x000A;      &lt;/header&gt;&#x000A;      {{&gt; content}}&#x000A;      &lt;footer&gt;&#x000A;        {{&gt; footer}}&#x000A;      &lt;/footer&gt;&#x000A;    &lt;/body&gt;&#x000A;    &#x000A;    &lt;template name="header"&gt;&#x000A;      &lt;div class="wrapper"&gt;&#x000A;        &lt;img src="gfx/logo.png"&gt;&#x000A;        &lt;span&gt;Twitter Clone&lt;/span&gt;&#x000A;        &lt;p&gt;&#x000A;          &lt;input id="username" name="username" placeholder="username" type="text"&gt;&#x000A;          &lt;input id="password" name="password" placeholder="password"  type="password"&gt;&#x000A;          &lt;input id="btnLogOut" type="submit" value="Log In"&gt;&#x000A;        &lt;/p&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    &#x000A;    &lt;template name="content"&gt;&#x000A;      &lt;div id="content"&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          &lt;img src="gfx/frog.jpg"&gt;&#x000A;          &lt;div class="panel right"&gt;&#x000A;            &lt;h1&gt;New to Ribbit?&lt;/h1&gt;&#x000A;            &lt;p&gt;&#x000A;              &lt;input id="email" name="email" placeholder="email" type="text"&gt;&#x000A;              &lt;input id="newusername" name="username" placeholder="username" type="text"&gt;&#x000A;              &lt;input id="fullname" name="fullname" placeholder="fullname" type="text"&gt;&#x000A;              &lt;input id="newpassword" name="password" placeholder="password" type="text"&gt;&#x000A;              &lt;input id="password2" name="password2" placeholder="retype password" type="password"&gt;&#x000A;              &lt;input id= "btnCreateAccount" type="submit" value="Create Account"&gt;&#x000A;            &lt;/p&gt;&#x000A;          &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    &#x000A;    &lt;template name="footer"&gt;&#x000A;      &lt;div class="wrapper"&gt;&#x000A;        Ribbit - A Twitter Clone Tutorial&lt;img src="gfx/logo-nettuts.png"&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>As you can see, we start with an empty head element. Since Meteor loads all the necessary files for us, we can use the head element to establish the page’s title, but for the moment, it’s blank.</p>
    <p>Inside the body element, we render three templates: the header template, which we place in the header tag, the content template, which is placed right after the header, and finally the footer template, inside a footer tag.</p>
    <p>What I’ve done for these templates, was to simply copy the old code and place it into the appropriate template. So what was in the header tag, is now in the header template and so on.</p>
    <p>I’ve also added some ids to the edit boxes and the buttons, so that later, I’m able to access these from the JavaScript code.</p>
    <p>And that’s it. Now our page is finished and works well with the Meteor framework.</p>
    <p>The next step will be to create the buddies page which should be displayed when a user logs into the system. We also need to allow the user to sign up and log in to our application.</p>
    <hr>
    <h2>
    <span>Step 4</span>: Log Into the Buddies Page</h2>
    <p>If we follow the same steps from in the previous section, to transform the <code>buddies.html</code> page into a Meteor one, we end with the following code:</p>
    <pre>&lt;!-- client/buddies.html --&gt;&#x000A;    &lt;head&gt;&#x000A;    &#x000A;    &lt;/head&gt;&#x000A;    &lt;body&gt;&#x000A;      &lt;header&gt;&#x000A;        {{&gt; header}}&#x000A;      &lt;/header&gt;&#x000A;      {{&gt; content}}&#x000A;      &lt;footer&gt;&#x000A;        {{&gt; footer}}&#x000A;      &lt;/footer&gt;&#x000A;    &lt;/body&gt;&#x000A;    &#x000A;    &lt;template name="header"&gt;&#x000A;      &lt;div class="wrapper"&gt;&#x000A;        &lt;img src="gfx/logo.png"&gt;&#x000A;        &lt;span&gt;Twitter Clone&lt;/span&gt;&#x000A;        &lt;p&gt;&#x000A;          &lt;input type="submit" id="btnLogOut" value="Log Out"&gt;&#x000A;        &lt;/p&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    &#x000A;    &lt;template name="content"&gt;&#x000A;      &lt;div id="content"&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          &lt;div id="createRibbit" class="panel right"&gt;&#x000A;            &lt;h1&gt;Create a Ribbit&lt;/h1&gt;&#x000A;            &lt;p&gt;&#x000A;              &lt;textarea name="text" class="ribbitText"&gt;&lt;/textarea&gt;&#x000A;              &lt;input type="submit" value="Ribbit!"&gt;&#x000A;            &lt;/p&gt;&#x000A;          &lt;/div&gt;&#x000A;          &lt;div id="ribbits" class="panel left"&gt;&#x000A;            &lt;h1&gt;Your Ribbit Profile&lt;/h1&gt;&#x000A;            &lt;div class="ribbitWrapper"&gt;&#x000A;              &lt;img class="avatar" src="gfx/user1.png"&gt;&#x000A;              &lt;span class="name"&gt;Frogger&lt;/span&gt; @username&#x000A;              &lt;p&gt;&#x000A;                567 Ribbits&lt;span class="spacing"&gt;45 Followers&lt;/span&gt;&lt;span class="spacing"&gt;32 Following&lt;/span&gt;&lt;br&gt;&#x000A;                Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. &lt;a href="#"&gt;<a href="http://net.tutsplus.com/tutorials/php/">http://net.tutsplus.com/tutorials/php/</a> ...&lt;/a&gt;&#x000A;              &lt;/p&gt;&#x000A;            &lt;/div&gt;&#x000A;          &lt;/div&gt;&#x000A;          &lt;div class="panel left"&gt;&#x000A;            &lt;h1&gt;Your Ribbit Buddies&lt;/h1&gt;&#x000A;            &lt;div class="ribbitWrapper"&gt;&#x000A;              &lt;img class="avatar" src="gfx/user2.png"&gt;&#x000A;              &lt;span class="name"&gt;Kermit&lt;/span&gt; @username &lt;span class="time"&gt;15m&lt;/span&gt;&#x000A;              &lt;p&gt;&#x000A;                Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. &lt;a href="#"&gt;<a href="http://net.tutsplus.com/tutorials/php/">http://net.tutsplus.com/tutorials/php/</a> ...&lt;/a&gt;&#x000A;              &lt;/p&gt;&#x000A;            &lt;/div&gt;&#x000A;          &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    &#x000A;    &lt;template name="footer"&gt;&#x000A;      &lt;div class="wrapper"&gt;&#x000A;        Ribbit - A Twitter Clone Tutorial&lt;img src="gfx/logo-nettuts.png"&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>As you can see, I took out the long list of ribbits, but other than that, there’s nothing else too impressive about the above code.</p>
    <p>However, there are two problems with it:</p>
    <ul>
    <li>If you try viewing it in the browser, you will find it’s being displayed twice. There are two reasons for this: Meteor sends files to the browser in alphabetical order, so <code>buddies.html</code> is sent first. We also have a lot of duplication in the code, even the name of the templates are duplicated. So when Meteor wants to display the content template, it displays the first defined one, which is the one in the <code>buddies.html</code> file.</li>
    <li>The second problem is also code duplication, which needs to be fixed.</li>
    </ul>
    <p>The issues above can be resolved by doing the following: we will create an <code>index.html</code> file containing only the code that will trigger the needed templates: one for the header, one for the footer, one for the home page, and one for the buddies page.</p>
    <p>Let’s take a look of each of them:</p>
    <pre>&lt;!-- client/index.html --&gt;&#x000A;    &lt;head&gt;&#x000A;    &#x000A;    &lt;/head&gt;&#x000A;    &#x000A;    &lt;body&gt;&#x000A;      &lt;header&gt;&#x000A;        {{&gt; header}}&#x000A;      &lt;/header&gt;&#x000A;      {{#if currentUser}}&#x000A;        {{&gt; buddiescontent}}&#x000A;      {{else}}&#x000A;        {{&gt; homecontent}}&#x000A;      {{/if}}&#x000A;      &lt;footer&gt;&#x000A;        {{&gt; footer}}&#x000A;      &lt;/footer&gt;&#x000A;    &lt;/body&gt;&#x000A;    </pre>
    <p>This is the main file in which all of the templates are loaded. A very interesting thing can be found when the content template is displayed. We check with a Handlebars <code>if</code> clause whether a user is logged in or not. The Meteor <code>currentUser</code> variable contains the logged in user’s data, if a user is logged in (so we display the buddies template) and is null if no user is logged in (so we display the home template).</p>
    <pre>&lt;!-- client/header.html --&gt;&#x000A;    &lt;template name="header"&gt;&#x000A;      &lt;div class="wrapper"&gt;&#x000A;        &lt;img src="gfx/logo.png"&gt;&#x000A;        &lt;span&gt;Twitter Clone&lt;/span&gt;&#x000A;        {{#if currentUser}}&#x000A;          &lt;nav&gt;&#x000A;            &lt;a id="buddies" href="#"&gt;Your Buddies&lt;/a&gt;&#x000A;            &lt;a href="#"&gt;Public Ribbits&lt;/a&gt;&#x000A;            &lt;a id='profiles' href="#"&gt;Profiles&lt;/a&gt;&#x000A;          &lt;/nav&gt;&#x000A;          &lt;input type="submit" id="btnLogOut" value="Log Out" /&gt;&#x000A;        {{else}}&#x000A;          &lt;p&gt;&#x000A;            &lt;input id="username" name="username" placeholder="username" type="text"&gt;&#x000A;            &lt;input id="password" name="password" placeholder="password"  type="password"&gt;&#x000A;            &lt;input id="btnLogOut" type="submit" value="Log In"&gt;&#x000A;          &lt;/p&gt;&#x000A;        {{/if}}&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>Here we render the header for our pages, and as above, if a user is logged in, we display a navigation bar, otherwise we display a log in form.</p>
    <pre>&lt;!-- client/footer.html --&gt;&#x000A;    &lt;template name="footer"&gt;&#x000A;      &lt;div class="wrapper"&gt;&#x000A;        Ribbit - A Twitter Clone Tutorial&lt;img src="gfx/logo-nettuts.png"&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>Then we create the footer template, which only renders the content in the footer.</p>
    <pre>&lt;!-- client/home.html --&gt;&#x000A;    &lt;template name="homecontent"&gt;&#x000A;      &lt;div id="content"&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          &lt;img src="gfx/frog.jpg"&gt;&#x000A;          &lt;div class="panel right"&gt;&#x000A;            &lt;h1&gt;New to Ribbit?&lt;/h1&gt;&#x000A;            &lt;p&gt;&#x000A;              &lt;input id="email" name="email" placeholder="email" type="text"&gt;&#x000A;              &lt;input id="newusername" name="username" placeholder="username" type="text"&gt;&#x000A;              &lt;input id="fullname" name="fullname" placeholder="fullname" type="text"&gt;&#x000A;              &lt;input id="newpassword" name="password" placeholder="password" type="password"&gt;&#x000A;              &lt;input id="password2" name="password2" placeholder="retype password" type="password"&gt;&#x000A;              &lt;input id= "btnCreateAccount" type="submit" value="Create Account"&gt;&#x000A;            &lt;/p&gt;&#x000A;          &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>Now we’ve already saw this template before, it just contains a form to allow the users to register for the application.</p>
    <pre>&lt;!-- client/buddies.html --&gt;&#x000A;    &lt;template name="buddiescontent"&gt;&#x000A;      &lt;div id="content"&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          &lt;div id="createRibbit" class="panel right"&gt;&#x000A;            &lt;h1&gt;Create a Ribbit&lt;/h1&gt;&#x000A;            &lt;p&gt;&#x000A;              &lt;textarea name="text" class="ribbitText"&gt;&lt;/textarea&gt;&#x000A;              &lt;input type="submit" value="Ribbit!"&gt;&#x000A;            &lt;/p&gt;&#x000A;          &lt;/div&gt;&#x000A;          &lt;div id="ribbits" class="panel left"&gt;&#x000A;            &lt;h1&gt;Your Ribbit Profile&lt;/h1&gt;&#x000A;            &lt;div class="ribbitWrapper"&gt;&#x000A;              &lt;img class="avatar" src="gfx/user1.png"&gt;&#x000A;              &lt;span class="name"&gt;Frogger&lt;/span&gt; @username&#x000A;              &lt;p&gt;&#x000A;                567 Ribbits&lt;span class="spacing"&gt;45 Followers&lt;/span&gt;&lt;span class="spacing"&gt;32 Following&lt;/span&gt;&lt;br&gt;&#x000A;                Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. &lt;a href="#"&gt;<a href="http://net.tutsplus.com/tutorials/php/">http://net.tutsplus.com/tutorials/php/</a> ...&lt;/a&gt;&#x000A;              &lt;/p&gt;&#x000A;            &lt;/div&gt;&#x000A;          &lt;/div&gt;&#x000A;          &lt;div class="panel left"&gt;&#x000A;            &lt;h1&gt;Your Ribbit Buddies&lt;/h1&gt;&#x000A;            &lt;div class="ribbitWrapper"&gt;&#x000A;              &lt;img class="avatar" src="gfx/user2.png"&gt;&#x000A;              &lt;span class="name"&gt;Kermit&lt;/span&gt; @username &lt;span class="time"&gt;15m&lt;/span&gt;&#x000A;              &lt;p&gt;&#x000A;                Cras justo odio, dapibus ac facilisis in, egestas Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. &lt;a href="#"&gt;<a href="http://net.tutsplus.com/tutorials/php/">http://net.tutsplus.com/tutorials/php/</a> ...&lt;/a&gt;&#x000A;              &lt;/p&gt;&#x000A;            &lt;/div&gt;&#x000A;          &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>And then the last template, containing information about the current user, that user’s ribbits, and the people the current user is following.</p>
    <p>Up until now, we have two pages of our application which can be displayed, but both are static and we can display only one at a time. So next, let’s add some JavaScript to our application to make it more dynamic.</p>
    <h3>Registering and Logging In</h3>
    <p>Meteor gives us several smart packages to handle the process of registering and logging in to an application. For our Ribbit app, we will use following packages: accounts-base for basic support for accounting and accounts-password for getting password support for accounting. To install these packages, run the following commands:</p>
    <pre>meteor add accounts-base&#x000A;    meteor add accounts-password&#x000A;    </pre>
    <p>Now, let’s create a <code>client.js</code> file in the <code>client</code> folder to hold our client side code. For the home page, we need to handle events for clicking on the <code>Log In</code> button and <code>Create Account</code> button.</p>
    <p>Events in Meteor are associated with a specific template, so in order to handle clicking on the <code>Log In</code> button we will add an event handler for the header template. To handle the click event for the <code>Create Account</code> button, we have to add an event handler associated with the homecontent template.</p>
    <p>Let’s take a look at the code:</p>
    <h5>Clicking on the Log In Button</h5>
    <pre>// client/client.js&#x000A;    // handling click event on the Log In button&#x000A;    Template.header.events({&#x000A;      'click #btnLogOut': function (event, template) {&#x000A;        if (Meteor.userId()) {&#x000A;          Meteor.logout();&#x000A;        } else {&#x000A;          var userName     = template.find('#username').value,&#x000A;            userPassword = template.find('#password').value;&#x000A;          Meteor.loginWithPassword(userName, userPassword, function (error) {&#x000A;            if (error) {&#x000A;              console.log(error);&#x000A;            }&#x000A;          });&#x000A;        }&#x000A;      }&#x000A;    });&#x000A;    </pre>
    <p>On the first line, we attach an events object to the header template. Then we handle the click event on the button with an id of <code>btnLogOut</code> (which we’ve created in our HTML template). Then if a user is logged in, simply log the user out. If <code>Meteor.userId</code> returns null, that means no user is logged in, so we perform a log in with the supplied username and password. Also, notice the values that are inserted in the edit boxes: the template object has a find function which takes as a parameter, the ID of the edit box for which we want to get the value of. If there is an error during logging in, we just display it in the console. For now, this is a temporary approach since we will implement displaying information to the user a little bit later.</p>
    <h5>Clicking on the Create Account Button</h5>
    <pre>// client/client.js&#x000A;    // hnadling click event on the Create Accounts button&#x000A;    Template.homecontent.events({&#x000A;      'click #btnCreateAccount': function (event, template) {&#x000A;        var userEmail = template.find('#email').value,&#x000A;          userName  = template.find('#newusername').value,&#x000A;          password  = template.find('#newpassword').value,&#x000A;          password2 = template.find('#password2').value,&#x000A;          name      = template.find('#fullname').value;&#x000A;    &#x000A;        Accounts.createUser({&#x000A;          username: userName,&#x000A;          email:    userEmail,&#x000A;          password: password,&#x000A;          profile: {&#x000A;            name: name&#x000A;          }&#x000A;        }, function (error) {&#x000A;          if (error) {&#x000A;            console.log("Cannot create user");&#x000A;          }&#x000A;        });&#x000A;      }&#x000A;    });&#x000A;    </pre>
    <p>Just like before, we attach an events object to the <code>homecontent</code> template, then we get the values submitted by the user from the form fields. To create an account we simply use the <code>Accounts.createUser</code> function, which takes as a parameter an object with the username, password, email and profile components. In case of an error while adding the user, the error is displayed in the console.</p>
    <hr>
    <h2>
    <span>Step 5</span>: Making the Buddies Page Dynamic</h2>
    <p>The next step in developing our application is to make the buddies page dynamic. At the moment, everything displayed on our page is statically taken from the template files. We want to take the information from a database and also to allow the user to create ribbits and store them in a database on the server side.</p>
    <h3>Changing the Your Ribbit Profile Section</h3>
    <p>This section displays the full name of the user, their username, the number of ribbits the current logged in user has, the number of followers and following people, and the last ribbit posted by the user.</p>
    <p>We will store the code for this part in a <code>main.js</code> file. Note that Meteor loads files with the word <code>main</code> in their name, after the page is loaded.</p>
    <p>Let’s see how to display them in the template:</p>
    <pre>&lt;!-- client/buddies.html --&gt;&#x000A;    ...&#x000A;      &lt;div id="ribbits" class="panel left"&gt;&#x000A;    &lt;h1&gt;Your Ribbit Profile&lt;/h1&gt;&#x000A;    &lt;div class="ribbitWrapper"&gt;&#x000A;    &lt;img class="avatar" src="gfx/user1.png"&gt;&#x000A;    &lt;span class="name"&gt;{{fullName}}&lt;/span&gt; @{{userName}}&#x000A;    &lt;p&gt;&#x000A;    {{noOfRibbits}}&lt;span class="spacing"&gt;45 Followers&lt;/span&gt;&lt;span class="spacing"&gt;32 Following&lt;/span&gt;&lt;br&gt;&#x000A;    {{lastRibbit}}&#x000A;    &lt;/p&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/div&gt;&#x000A;    ...&#x000A;    </pre>
    <p>What we want to do in this template is to use Handlebars’ variables for the items we’d like to pull from the database. The <code>fullname</code> and the <code>username</code> are taken from the users collection and the <code>noOfRibbits</code> and <code>lastRibbit</code> should be taken from the ribbit collection.</p>
    <p>The above variables are returned to the template by the following JavaScript code in the <code>main.js</code> file:</p>
    <pre>// client/main.js&#x000A;    Ribbits = new Meteor.Collection('ribbits');&#x000A;    &#x000A;    Template.buddiescontent.helpers({&#x000A;      fullName: function () {&#x000A;        return Meteor.user().profile.name;&#x000A;      },&#x000A;    &#x000A;      userName: function () {&#x000A;        return Meteor.user().username;&#x000A;      },&#x000A;    &#x000A;      noOfRibbits: function () {&#x000A;        var ribbits = Ribbits.find({user_id: Meteor.userId()}),&#x000A;          retVal;&#x000A;        if (ribbits.count() === 1) {&#x000A;          retVal = "1 Ribbit";&#x000A;        } else {&#x000A;          retVal = ribbits.count() + " Ribbits";&#x000A;        }&#x000A;        return retVal;&#x000A;      },&#x000A;    &#x000A;      lastRibbit: function () {&#x000A;        var lastRibbit = Ribbits.findOne({user_id: Meteor.userId()}, {sort: {created_at: -1}}),&#x000A;          retVal;&#x000A;    &#x000A;        if (lastRibbit) {&#x000A;          retVal = lastRibbit.ribbit;&#x000A;        } else {&#x000A;          retVal = 'This user has no Ribbits';&#x000A;        }&#x000A;    &#x000A;        return retVal;&#x000A;      }&#x000A;    });&#x000A;    </pre>
    <p>Two of Meteor’s principles state that access to the database is done using the same API on both the server and the client and on the client side there is a model simulation, which should look like a zero-latency connection to the database (latency compensation). These principles can be seen in the above code, on line one. We create a Ribbits instance of a Meteor collection, which is the client side database. Since on the server side, we don’t have a ribbits collection, the one defined in our code will be empty.</p>
    <p>Next, a helpers function is defined, which takes as a parameter, an object with a function for each Handlebars variable in the template. As you can see, for each one, the appropriate data is returned.</p>
    <p>The <code>fullName</code> and <code>userName</code> are both taken from the users database profile object.</p>
    <p>The <code>noOfRibbits</code> and the <code>lastRibbit</code> should be taken from the Ribbits collection. Since this is empty at the moment, we expect the functions above to return zero as the number of ribbits and the message, ‘This user has no Ribbits’, instead of the last ribbit.</p>
    <h3>Changing the Your Ribbit Buddies Section</h3>
    <p>Let’s take a look at the code. First the template:</p>
    <pre>&lt;!-- client/buddies.html --&gt;&#x000A;    &lt;div class="panel left"&gt;&#x000A;    &lt;h1&gt;Your Ribbit Buddies&lt;/h1&gt;&#x000A;    {{#each ribbits}}&#x000A;    &lt;div class="ribbitWrapper"&gt;&#x000A;      &lt;img class="avatar" src="gfx/user2.png"&gt;&#x000A;      &lt;span class="name"&gt;{{buddyFullName}}&lt;/span&gt; @{{buddyUserName}} &lt;span class="time"&gt;15m&lt;/span&gt;&#x000A;      &lt;p&gt;&#x000A;      {{ribbit}}&#x000A;      &lt;/p&gt;&#x000A;    &lt;/div&gt;&#x000A;    {{/each}}&#x000A;    </pre>
    <p>The new thing here is that we use Handlebars’ <code>each</code> to loop through all the ribbits returned from the JavaScript function. The rest is pretty similar to the code inside of the profile section.</p>
    <p>Now for the JavaScript code:</p>
    <pre>// client/main.js&#x000A;    ...&#x000A;    buddyFullName: function () {&#x000A;      Ribbits.find().forEach(function (ribbit) {&#x000A;        var theUser = Meteor.users.findOne({_id: ribbit.user_id});&#x000A;    &#x000A;        return theUser.profile.name;&#x000A;      });&#x000A;    },&#x000A;    &#x000A;    buddyUserName: function () {&#x000A;      Ribbits.find().forEach(function (ribbit) {&#x000A;        var theUser = Meteor.users.findOne({_id: ribbit.user_id});&#x000A;    &#x000A;        return theUser.username;&#x000A;      });&#x000A;    },&#x000A;    &#x000A;    ribbits: function () {&#x000A;      return Ribbits.find();&#x000A;    }&#x000A;    </pre>
    <p>In this area we want to display all of the ribbits belonging to the current logged in user and all of the users which are followed by the current logged in user. We will implement on the server, a mechanism for returning only the ribbits to the client, that fulfill the above condition. In the client, the Ribbits collection is scanned and for each, a user with the same id as the one stored in the ribbit collection is searched. Then the full name and the username are returned to the template. As for the ribbits, since we already have the ones we are interested in, they can just be returned entirely to the template.</p>
    <h3>Creating a Ribbit</h3>
    <p>When adding a ribbit, there are two main tasks that should be completed:</p>
    <ul>
    <li>First we should insert a record into the ribbits collection.</li>
    <li>Next, update the buddies page with the following information: number of<br> ribbits, the last ribbit in the “Your Ribbit Profile” section, and the last<br> ribbit, which could have been posted by any user, along with its author and the time elapsed since it was posted.</li>
    </ul>
    <p>It’s now time to write a little bit of server code. Let’s start with the following:</p>
    <pre>// server/server.js&#x000A;    Ribbits = new Meteor.Collection('ribbits');&#x000A;    Meteor.publish('ribbits', function () {&#x000A;      return Ribbits.find({});&#x000A;    });&#x000A;    </pre>
    <p>For the above code, we create a Meteor collection instance for the ribbits collection and we publish all the ribbits data to the client.</p>
    <p>Now for the client side code:</p>
    <pre>// client/client.js&#x000A;    Ribbits = new Meteor.Collection('ribbits');&#x000A;    Meteor.subscribe('ribbits');&#x000A;    &#x000A;    ...&#x000A;    &#x000A;    // handling the click event on the Ribbit button&#x000A;    Template.buddiescontent.events({&#x000A;      'click #createTheRibbit': function (event, template) {&#x000A;        var ribbitContent= template.find('.ribbitText').value;&#x000A;    &#x000A;        Ribbits.insert({&#x000A;          user_id: Meteor.user()._id,&#x000A;          ribbit: ribbitContent,&#x000A;          created_at: new Date()&#x000A;        });&#x000A;        template.find('.ribbitText').value = "";&#x000A;      }&#x000A;    });&#x000A;    </pre>
    <p>Just like the server side, the client also holds a Ribbits instance of the ribbits collection, in order to support the concept of “Data everywhere”. Additionally, it must also subscribe to the data published by the server in order to make sure that modifications done on one instance of the application are replicated everywhere.</p>
    <p>After that, the click event for the Ribbit! button is handled like so: the data inserted into the text field is read and inserted into the ribbits collection. Afterwards, the content of the text field is set to an empty string.</p>
    <pre>// client/main.js&#x000A;    ribbits: function () {&#x000A;      return Ribbits.find({}, {sort: {created_at: -1}});&#x000A;    },&#x000A;    &#x000A;    buddyFullName: function (ribbitUserId) {&#x000A;      var theUser = Meteor.users.findOne({_id: ribbitUserId});&#x000A;      return theUser.profile.name;&#x000A;    },&#x000A;    &#x000A;    buddyUserName: function (ribbitUserId) {&#x000A;      var theUser = Meteor.users.findOne({_id: ribbitUserId});&#x000A;      return theUser.username;&#x000A;    },&#x000A;    &#x000A;    elapsedTime: function (text) {&#x000A;      var currentDate = new Date(),&#x000A;        ribbitDate,&#x000A;        minutes_elapsed,&#x000A;        hours_elapsed,&#x000A;        days_elapsed,&#x000A;        retVal,&#x000A;        record = Ribbits.findOne({ribbit: text});&#x000A;    &#x000A;      ribbitDate = new Date(record.created_at);&#x000A;      minutes_elapsed = (currentDate - ribbitDate) / 60000;&#x000A;      if (minutes_elapsed &gt; 60) {&#x000A;        hours_elapsed = minutes_elapsed / 60;&#x000A;        if (hours_elapsed &gt; 24) {&#x000A;          days_elapsed = hours_elapsed / 24;&#x000A;          retVal = parseInt(days_elapsed, 10) + "d";&#x000A;        } else {&#x000A;          retVal = parseInt(hours_elapsed, 10) + "h";&#x000A;        }&#x000A;      } else {&#x000A;        retVal = parseInt(minutes_elapsed, 10) + "m";&#x000A;      }&#x000A;      return retVal;&#x000A;    }&#x000A;    </pre>
    <p>Now the above code injects dynamic data into the Handlebars’ template variables. Allow me to explain:</p>
    <ul>
    <li>The <code>ribbits</code> value is replaced by a collection instance with all of the values stored in the database, in the reverse order of creation.</li>
    <li>The <code>buddyFullName</code> is returned by searching the users collection for a user with the same id as the current ribbit’s user. Notice that the ribbitUserId is a parameter received by the function from the template.</li>
    <li>The <code>buddyUserName</code> is obtained in a similar manner as the buddyFullName.</li>
    <li>The <code>elapsedTime</code> is calculated based on the current time and the time of when a ribbit was originally created.</li>
    </ul>
    <p>The <code>buddies</code> template now looks like the following:</p>
    <pre>&lt;!-- client/buddies.html --&gt;&#x000A;    &lt;div class="panel left"&gt;&#x000A;      &lt;h1&gt;Your Ribbit Buddies&lt;/h1&gt;&#x000A;      {{#each ribbits}}&#x000A;      &lt;div class="ribbitWrapper"&gt;&#x000A;        &lt;img class="avatar" src="gfx/user2.png"&gt;&#x000A;        &lt;span class="name"&gt;{{buddyFullName user_id}}&lt;/span&gt; @{{buddyUserName user_id}} &lt;span class="time"&gt;{{elapsedTime ribbit}}&lt;/span&gt;&#x000A;        &lt;p&gt;&#x000A;        {{ribbit}}&#x000A;        &lt;/p&gt;&#x000A;      &lt;/div&gt;&#x000A;      {{/each}}&#x000A;    &lt;/div&gt;&#x000A;    </pre>
    <p>What is interesting to notice here, is that the <code>buddyFullName</code> is followed by the <code>user_id</code> variable taken from the ribbits collection. This is the parameter from the function we described above.</p>
    <hr>
    <h2>
    <span>Step 6</span>: Creating the Public Ribbits Page</h2>
    <p>This task shouldn’t be a show stopper since we already did something similar with the buddies page. What needs to be done here is to take the <code>public.html</code> file from the downloaded assets and turn it into a template. We’ll then hook the data that we want displayed on the page, to some JavaScript functions, that will take that data from the database and return it to the template.</p>
    <p>First, let’s see the template file:</p>
    <pre>&lt;!-- client/public.html --&gt;&#x000A;    &lt;template name="public"&gt;&#x000A;      &lt;div id="content"&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          &lt;div class="panel right"&gt;&#x000A;            &lt;h1&gt;Create a Ribbit&lt;/h1&gt;&#x000A;            &lt;p&gt;&#x000A;              &lt;textarea name="text" class="ribbitText"&gt;&lt;/textarea&gt;&#x000A;              &lt;input type="submit" value="Ribbit!"&gt;&#x000A;            &lt;/p&gt;&#x000A;          &lt;/div&gt;&lt;!-- panel right --&gt;&#x000A;          &lt;div id="ribbits" class="panel left"&gt;&#x000A;            &lt;h1&gt;Public Ribbits&lt;/h1&gt;&#x000A;            {{#each ribbits}}&#x000A;              &lt;div class="ribbitWrapper"&gt;&#x000A;                &lt;img class="avatar" src="gfx/user2.png"&gt;&#x000A;                &lt;span class="name"&gt;{{publicUserFull user_id}}&lt;/span&gt; @{{publicUserName user_id}} &lt;span class="time"&gt;{{elapsedTime ribbit}}&lt;/span&gt;&#x000A;                &lt;p&gt;&#x000A;                  {{ribbit}}&#x000A;                &lt;/p&gt;&#x000A;              &lt;/div&gt;&lt;!-- ribbitWrapper --&gt;&#x000A;            {{/each}}&#x000A;          &lt;/div&gt;&lt;!-- panel left --&gt;&#x000A;        &lt;/div&gt;&lt;!-- wrapper --&gt;&#x000A;      &lt;/div&gt;&lt;!-- content --&gt;&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>Nothing spectacular here: in the Public Ribbits section there is the <code>publicUserFull</code> and <code>publicUserName</code> displayed as well as the ribbit <code>user_id</code> is sent to the function connected to these.</p>
    <p>The JavaScript code looks like following:</p>
    <pre>// client/client.js&#x000A;    ...&#x000A;    Template.public.helpers({&#x000A;      ribbits: function () {&#x000A;        return Ribbits.find({}, {sort: {created_at: -1}});&#x000A;      },&#x000A;    &#x000A;      publicUserFull: function (currentRibbitId) {&#x000A;        var theUser = Meteor.users.findOne({_id: currentRibbitId});&#x000A;    &#x000A;        return theUser.profile.name;&#x000A;      },&#x000A;    &#x000A;      publicUserName: function (currentRibbitId) {&#x000A;        var theUser = Meteor.users.findOne({_id: currentRibbitId});&#x000A;    &#x000A;        return theUser.username;&#x000A;      },&#x000A;    &#x000A;      elapsedTime: function (text) {&#x000A;        var currentDate = new Date(),&#x000A;          ribbitDate,&#x000A;          minutes_elapsed,&#x000A;          hours_elapsed,&#x000A;          days_elapsed,&#x000A;          retVal,&#x000A;          record = Ribbits.findOne({ribbit: text});&#x000A;    &#x000A;        ribbitDate = new Date(record.created_at);&#x000A;        minutes_elapsed = (currentDate - ribbitDate) / 60000;&#x000A;        if (minutes_elapsed &gt; 60) {&#x000A;          hours_elapsed = minutes_elapsed / 60;&#x000A;          if (hours_elapsed &gt; 24) {&#x000A;            days_elapsed = hours_elapsed / 24;&#x000A;            retVal = parseInt(days_elapsed, 10) + "d";&#x000A;          } else {&#x000A;            retVal = parseInt(hours_elapsed, 10) + "h";&#x000A;          }&#x000A;        } else {&#x000A;          retVal = parseInt(minutes_elapsed, 10) + "m";&#x000A;        }&#x000A;        return retVal;&#x000A;      }&#x000A;    });&#x000A;    ...&#x000A;    </pre>
    <p>Notice that all of the functions in this code fragment are similar to the ones defined in the buddies part of the file. You should see that we have massive code repetition going on here, which is not so good. But for the moment, let’s leave it as is, in order to see that it works and we’ll figure out how we can refactor this in a later step.</p>
    <hr>
    <h2>
    <span>Step 7</span>: Display the Public Ribbits Page</h2>
    <p>So we have a functional public Ribbits page, but there’s no way to display it. This is what we’ll fix in this step.</p>
    <p>In order to perform this task, we will use Meteor’s reactive data concept. We already saw this in action on the buddies page; when a new ribbit is added, it is automatically displayed on the page.</p>
    <p>What we want to achieve is that whenever a user clicks on the Public Ribbits link in the header, to change from the current page that is being displayed, to the Public Ribbits page. So we need a <code>currentPage</code> variable, that we can change periodically, so it points to the desired page.</p>
    <p>We will use the Meteor’s Session global object, which contains an arbitrary set of key-value pairs. We will store a string in a <code>currentPage</code> variable, which points to the name of the page that we want to display. Then when clicking on a link, we change the <code>currentPage</code> variable as appropriate to display the new page.</p>
    <p>Let’s get started on the code. First, the main template file, index.html:</p>
    <pre>&lt;!-- client/index.html --&gt;&#x000A;    &lt;head&gt;&#x000A;    &#x000A;    &lt;/head&gt;&#x000A;    &#x000A;    &lt;body&gt;&#x000A;      &lt;header&gt;&#x000A;        {{&gt; header}}&#x000A;      &lt;/header&gt;&#x000A;      {{&gt; content}}&#x000A;      &lt;footer&gt;&#x000A;        {{&gt; footer}}&#x000A;      &lt;/footer&gt;&#x000A;    &lt;/body&gt;&#x000A;    &#x000A;    &lt;template name="content"&gt;&#x000A;      {{#if currentUser}}&#x000A;        {{#if currentPage "buddies"}}&#x000A;          {{&gt; buddiescontent}}&#x000A;        {{/if}}&#x000A;    &#x000A;        {{#if currentPage "public"}}&#x000A;          {{&gt; public}}&#x000A;        {{/if}}&#x000A;    &#x000A;        {{#if currentPage "profile"}}&#x000A;          {{&gt; profile}}&#x000A;        {{/if}}&#x000A;      {{else}}&#x000A;        {{&gt; homecontent}}&#x000A;      {{/if}}&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>The changes in this file are small. A new template named <code>content</code> was added and in this template the value of the <code>currentPage</code> variable is checked and the appropriate sub-template is rendered.</p>
    <p>Let’s see how this reflects in the JavaScript code:</p>
    <pre>// client/main.js&#x000A;    Template.content.helpers({&#x000A;      currentPage: function (type) {&#x000A;        var thePage = Session.get("currentPage");&#x000A;        return thePage === type;&#x000A;      }&#x000A;    });&#x000A;    </pre>
    <p>A helper for the <code>content</code> template was added, containing a <code>currentPage</code> function, which returns a boolean by checking the parameter sent to this function against the value of the <code>currentPage</code>, stored in the Meteor’s Session. The function returns <code>true</code> if they are the same or <code>false</code> if they are not. This way its value can be checked in the template to decide which sub-template is rendered.</p>
    <pre>// client/client.js&#x000A;    Session.set("currentPage", "buddies");&#x000A;    </pre>
    <p>Now for the <code>client.js</code> file, the value of <code>currentPage</code> is initialized at the beginning of the application by storing it in <code>buddies</code>, so by default, if a user is logged in, the buddies page is displayed.</p>
    <pre>// client/client.js&#x000A;    ...&#x000A;    'click #public': function (event, template) {&#x000A;      Session.set("currentPage", "public");&#x000A;    },&#x000A;    &#x000A;    'click #buddies': function (event, template) {&#x000A;      Session.set("currentPage", "buddies");&#x000A;    },&#x000A;    ...&#x000A;    </pre>
    <p>Then, the header events object is updated by adding two click handlers, one for the <code>Public Ribbits</code> link and one for the <code>Your Buddies</code> link, so that the user can navigate to these pages:</p>
    <p>As you can see in this function, the only thing we do is set the Session value of <code>currentPage</code> to the desired value.</p>
    <p>And that’s it. Now it’s possible to switch between buddies and the public page using the links in the page’s header.</p>
    <hr>
    <h2>
    <span>Step 8</span>: Creating the Profiles Page</h2>
    <p>As you might have noticed, there is a pattern we’ve followed throughout this tutorial while creating each new page: we started with the implementation of the page template, then we added the necessary JavaScript code for making the page dynamic. Lastly, we add in some event handlers for the actions that the user may take on the page. Let’s follow this same pattern now for creating the <code>profiles</code> page.</p>
    <h3>The Profile Template</h3>
    <p>The <code>profile</code> template code should look like this:</p>
    <pre>&lt;template name="profile"&gt;&#x000A;      &lt;div id="content"&gt;&#x000A;        &lt;div class="wrapper"&gt;&#x000A;          &lt;div class="panel right"&gt;&#x000A;            &lt;h1&gt;Search for profiles&lt;/h1&gt;&#x000A;            &lt;p&gt;&#x000A;              &lt;input name="query" type="text"&gt;&#x000A;              &lt;input type="submit" value="Search!"&gt;&#x000A;            &lt;/p&gt;&#x000A;          &lt;/div&gt;&#x000A;          &lt;div id="ribbits" class="panel left"&gt;&#x000A;            &lt;h1&gt;Public Profiles&lt;/h1&gt;&#x000A;            {{#each users}}&#x000A;              &lt;div class="ribbitWrapper"&gt;&#x000A;                &lt;img class="avatar" src="{{gravatarLink _id}}"&gt;&#x000A;                &lt;span class="name"&gt;{{profile.name}}&lt;/span&gt; @{{username}} &lt;span class="time"&gt;{{noOfFollowers _id}}&lt;a href="#" id='{{_id}}' class='follow'&gt;{{followText _id}}&lt;/a&gt;&lt;/span&gt;&#x000A;                &lt;p id='last-ribbit'&gt;&#x000A;                  {{lastRibbit _id}}&#x000A;                &lt;/p&gt;&#x000A;              &lt;/div&gt;&#x000A;            {{/each}}&#x000A;          &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;      &lt;/div&gt;&#x000A;    &lt;/template&gt;&#x000A;    </pre>
    <p>For this template, our page is split into two panels: the right panel allows searching for a specific user profile and on the left panel we have a list of registered users. Also on the left panel, the logged in user has the possibility to follow or unfollow another user by clicking the follow/unfollow link.</p>
    <p>Since the left panel’s code looks more interesting, let’s start analyzing it first: after the header part, we iterate over the Meteor users collection using a Handlebars <code>#each</code> construction.</p>
    <p>For each user we display the following information:</p>
    <ul>
    <li>The user’s gravatar (retrieved just as we did on the buddies page).</li>
    <li>The user’s name, taken from the mongoDb database.</li>
    <li>The user’s username.</li>
    <li>The user’s number of follows.</li>
    <li>The follow/unfollow link.</li>
    <li>The user’s last ribbit.</li>
    </ul>
    <p>As for the right panel, this code contains a form that allows the user to search for a specific profile.</p>
    <p>Now, let’s move on to the second step of our pattern by adding in the JavaScript.</p>
    <h3>Getting the Profile Data</h3>
    <p>The first thing the template needs is the <code>users</code> collection. Let’s take a look at the code that returns this collection:</p>
    <pre>users: function () {&#x000A;      if (Session.get('searchedName') !== undefined) {&#x000A;        return Meteor.users.find({&#x000A;          $and: [&#x000A;            {_id: {$ne: Meteor.userId()}},&#x000A;            {username: Session.get('searchedName')}&#x000A;          ]&#x000A;        });&#x000A;      } else {&#x000A;        return Meteor.users.find({_id: {$ne: Meteor.userId()}});&#x000A;      }&#x000A;    },&#x000A;    </pre>
    <p>The above code takes care of the profile search functionality for our app. In short, the collection returned to the template is filtered to contain only the searched user and if no search was performed, all of the users are returned, except the current logged in user.</p>
    <p>Let me explain this in more detail: When a search for a specific user profile is performed, as we will see later, we set a profile variable named <code>searchedName</code>, which hold the name that the user is searching for. We then filter the users collection using the <code>$and</code> Mongo construction to meet the following criteria: It should only return users that are not the current logged in user and inside of <code>username</code> we’ll store the <code>searchedName</code>. I have to admit, that I am simplifying things a bit here, since I could implement a <code>like</code> clause instead to return all users with a username similar to the <code>searchedName</code>. But since this is not a Mongo tutorial, I’m going to leave this as an additional exercise for you to try out on your own.</p>
    <p>By default, this should display all of the users except the current<br> logged in user, which is done in the else clause.</p>
    <p>As for obtaining the gravatar image, the code is similar to what we used in the buddies template, so I won’t describe it again here.</p>
    <p>The same also applies for the name, username, and noOfFollowers.</p>
    <p>Now for the followText part, we are going to do things a little differently. The behavior we intend to have here is to display the ‘follow’ text if the current logged in user is not already following the displayed user. Otherwise, we want to allow the user to stop following the user by displaying the text ‘unfollow’.</p>
    <p>The code looks like following:</p>
    <pre>followText: function (userId) {&#x000A;      var followee = Follows.findOne({&#x000A;        $and: [&#x000A;          {followee_id: Meteor.userId()},&#x000A;          {user_id: userId}&#x000A;        ]&#x000A;      });&#x000A;      if (followee) {&#x000A;        return 'unfollow';&#x000A;      } else {&#x000A;        return 'follow';&#x000A;      }&#x000A;    },&#x000A;    </pre>
    <p>This function receives the <code>userId</code> parameter from the template and performs a search in the Follows table for a user that has a <code>followee_id</code> which matches the current user’s id and which also has a <code>user_id</code>, which matches the id of the user who was clicked on. If this criteria is met, that means the user is being followed by the current logged in user, so return the ‘unfollow’ string, otherwise return the ‘follow’ string.</p>
    <h3>Actions on the Profile Page</h3>
    <p>There are really only two actions users can make on the Profile page: clicking on the Search! button, to search for other user profiles. And the second action is to follow or unfollow another user by clicking the appropriate link.</p>
    <p>Let’s tackle them one by one:</p>
    <h4>Searching a User</h4>
    <pre>'click input[type="submit"]': function(event, template) {&#x000A;      var searchedUser = template.find('input[type="text"]').value;&#x000A;      if (searchedUser !== "") {&#x000A;        Session.set('searchedName', searchedUser);&#x000A;      } else {&#x000A;        Session.set('searchedName', undefined);&#x000A;      }&#x000A;      Template.profile();&#x000A;    }&#x000A;    </pre>
    <p>When the user clicks on our Search! button (the input field with a type of submit), we read the name entered into the text field and set a session variable named <code>searchedName</code> to hold this value. We’ve already saw from the previous step how this variable is used to perform a search in the database and return a subset of the users collection containing only users with that username.</p>
    <h4>Following a User</h4>
    <pre>'click .follow': function(event, template) {&#x000A;      var isFollowed, theClickedUserId = event.currentTarget.id,&#x000A;        theFollowees = Follows.find({user_id: theClickedUserId});&#x000A;    &#x000A;      theFollowees.forEach(function (theFollowee) {&#x000A;        if (theFollowee.followee_id === Meteor.userId()) {&#x000A;          isFollowed = true;&#x000A;        } else {&#x000A;          isFollowed = false;&#x000A;        }&#x000A;      });&#x000A;    &#x000A;      if (!isFollowed) {&#x000A;        Follows.insert({&#x000A;          user_id: theClickedUserId,&#x000A;          followee_id: Meteor.userId()&#x000A;        });&#x000A;      } else {&#x000A;        Follows.remove({&#x000A;         $and: [&#x000A;           {user_id: theClickedUserId},&#x000A;           {followee_id: Meteor.user()._id}&#x000A;          ]&#x000A;        });&#x000A;      }&#x000A;    },&#x000A;    </pre>
    <p>We start off with the <code>theClickedUserId</code> variable, which will store the id of the user who was clicked on. Then we search in the Follows collection for all of the users with that id and store the result in the <code>theFollowees</code> variable.</p>
    <p>The next step is to loop through the <code>theFollowees</code> collection and check if the current followee has the same <code>followee_id</code> as the current logged in user’s id. If so, the logged in user is following the clicked on user.</p>
    <p>Finally, if the user is not followed, just add it to the Follows collection, which will result in following that user, otherwise, remove it from the Follows collection, to unfollow that user.</p>
    <hr>
    <h2>Conclusion</h2>
    <p>This concludes the Profile page implementation and also this tutorial. I hope you will find it interesting and discover that working with Meteor indeed changes the way JavaScript applications are being developed. If you have any questions feel free to ask away in the comments below!</p>
    </div>
]]>
</Body>
<Summary>This is a continuation of the Twitter clone series with building Ribbit from scratch, this time using Meteor.   For this tutorial, please do not expect an in depth explanation of the Meteor...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/LnYKSqyanxU/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31350/guest@my.umbc.edu/54cd025af768daf2cc360a7785044d6a/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>javascript-and-ajax</Tag>
<Tag>meteor</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>ribbit</Tag>
<Tag>sql</Tag>
<Tag>tutorials</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, 14 Jun 2013 22:01:04 -0400</PostedAt>
<EditAt>Fri, 14 Jun 2013 22:01:04 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31348" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31348">
<Title>Bits Blog: Today&#8217;s Scuttlebot: Cyberwarlord for the U.S., and Power Strips on the Road</Title>
<Body>
<![CDATA[
    <div class="html-content">The technology reporters and editors of The New York Times scour the Web for important and peculiar items. Friday’s selections include the general who has been building our military cybercapabilities, and Volvo’s research into powering electric cars with strips in the road.<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%2F14%2Ftodays-scuttlebot-cyberwarlord-for-the-u-s-and-power-strips-on-the-road%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Cyberwarlord+for+the+U.S.%2C+and+Power+Strips+on+the+Road" 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%2F14%2Ftodays-scuttlebot-cyberwarlord-for-the-u-s-and-power-strips-on-the-road%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Cyberwarlord+for+the+U.S.%2C+and+Power+Strips+on+the+Road" 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%2F14%2Ftodays-scuttlebot-cyberwarlord-for-the-u-s-and-power-strips-on-the-road%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Cyberwarlord+for+the+U.S.%2C+and+Power+Strips+on+the+Road" 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%2F14%2Ftodays-scuttlebot-cyberwarlord-for-the-u-s-and-power-strips-on-the-road%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Cyberwarlord+for+the+U.S.%2C+and+Power+Strips+on+the+Road" 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%2F14%2Ftodays-scuttlebot-cyberwarlord-for-the-u-s-and-power-strips-on-the-road%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Cyberwarlord+for+the+U.S.%2C+and+Power+Strips+on+the+Road" 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/165665189855/u/0/f/640387/c/34625/s/2d4f7e0d/kg/342/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665189855/u/0/f/640387/c/34625/s/2d4f7e0d/kg/342/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The technology reporters and editors of The New York Times scour the Web for important and peculiar items. Friday’s selections include the general who has been building our military...</Summary>
<Website>http://bits.blogs.nytimes.com/2013/06/14/todays-scuttlebot-cyberwarlord-for-the-u-s-and-power-strips-on-the-road/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31348/guest@my.umbc.edu/7481c6b1d32b2676574c6482ef3df0f4/api/pixel</TrackingUrl>
<Tag>new</Tag>
<Tag>technology</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, 14 Jun 2013 19:19:14 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31349" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31349">
<Title>Critic&#8217;s Notebook: Unwelcome Innovation Earns Gamers&#8217; Jeers</Title>
<Body>
<![CDATA[
    <div class="html-content">At E3, a video game trade show where novelty is prized, Microsoft drew resentment for its plans to monitor gamers’ use of resold games.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F15%2Farts%2Fvideo-games%2Funwelcome-innovation-earns-gamers-jeers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Critic%E2%80%99s+Notebook%3A+Unwelcome+Innovation+Earns+Gamers%E2%80%99+Jeers" 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%2F2013%2F06%2F15%2Farts%2Fvideo-games%2Funwelcome-innovation-earns-gamers-jeers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Critic%E2%80%99s+Notebook%3A+Unwelcome+Innovation+Earns+Gamers%E2%80%99+Jeers" 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%2F2013%2F06%2F15%2Farts%2Fvideo-games%2Funwelcome-innovation-earns-gamers-jeers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Critic%E2%80%99s+Notebook%3A+Unwelcome+Innovation+Earns+Gamers%E2%80%99+Jeers" 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%2F2013%2F06%2F15%2Farts%2Fvideo-games%2Funwelcome-innovation-earns-gamers-jeers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Critic%E2%80%99s+Notebook%3A+Unwelcome+Innovation+Earns+Gamers%E2%80%99+Jeers" 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%2F2013%2F06%2F15%2Farts%2Fvideo-games%2Funwelcome-innovation-earns-gamers-jeers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Critic%E2%80%99s+Notebook%3A+Unwelcome+Innovation+Earns+Gamers%E2%80%99+Jeers" 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>At E3, a video game trade show where novelty is prized, Microsoft drew resentment for its plans to monitor gamers’ use of resold games.     </Summary>
<Website>http://www.nytimes.com/2013/06/15/arts/video-games/unwelcome-innovation-earns-gamers-jeers.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31349/guest@my.umbc.edu/cd6105182f5729e40589147d26a02085/api/pixel</TrackingUrl>
<Tag>amazon-com-inc-amzn-nasdaq</Tag>
<Tag>computer-and-video-games</Tag>
<Tag>e3-media-and-business-summit</Tag>
<Tag>microsoft-corporation-msft-nasdaq</Tag>
<Tag>netflix-inc-nflx-nasdaq</Tag>
<Tag>new</Tag>
<Tag>sony-corporation-sne-nyse</Tag>
<Tag>technology</Tag>
<Tag>xbox-video-game-system</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, 14 Jun 2013 18:23:07 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="31344" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31344">
<Title>ODK Executive Committee Elections</Title>
<Body>
<![CDATA[
    <div class="html-content"><h5><span><span>Vote for the 2013-2014 ODK Executive Committee by June 30th<br> <a href="https://docs.google.com/a/umbc.edu/forms/d/1f_UXGv9l0ckeBxicbHeyVYa7wXZ1oJBhbv2jbKfaOy8/viewform" rel="nofollow external" class="bo"><span>https://docs.google.com/a/</span><span>umbc.edu/forms/d/</span><span>1f_UXGv9l0ckeBxicbHeyVYa7wXZ1oJ</span>Bhbv2jbKfaOy8/viewform</a></span></span></h5></div>
]]>
</Body>
<Summary>Vote for the 2013-2014 ODK Executive Committee by June 30th  https://docs.google.com/a/umbc.edu/forms/d/1f_UXGv9l0ckeBxicbHeyVYa7wXZ1oJBhbv2jbKfaOy8/viewform</Summary>
<Website>https://docs.google.com/a/umbc.edu/forms/d/1f_UXGv9l0ckeBxicbHeyVYa7wXZ1oJBhbv2jbKfaOy8/viewform</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31344/guest@my.umbc.edu/c7c4b86fd21e8d6a3f924bfde453fe20/api/pixel</TrackingUrl>
<Group token="odk">Omicron Delta Kappa</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/odk</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/xsmall.png?1346330423</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/original.jpg?1346330423</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/xxlarge.png?1346330423</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/xlarge.png?1346330423</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/large.png?1346330423</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/medium.png?1346330423</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/small.png?1346330423</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/xsmall.png?1346330423</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/105/76f376382a50bd4859e50a81e701da10/xxsmall.png?1346330423</AvatarUrl>
<Sponsor>Omicron Delta Kappa</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 14 Jun 2013 16:33:46 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31339" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31339">
<Title>Bits Blog: Tech Pushes to Keep Its Spoils in Immigration Bill</Title>
<Body>
<![CDATA[
    <div class="html-content">The technology industry this week dispatched executives and entrepreneurs to buttonhole lawmakers and rallied people to mount a digital campaign on Congress.<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%2F14%2Ftech-pushes-to-keep-its-spoils-in-immigration-bill%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Tech+Pushes+to+Keep+Its+Spoils+in+Immigration+Bill" 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%2F14%2Ftech-pushes-to-keep-its-spoils-in-immigration-bill%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Tech+Pushes+to+Keep+Its+Spoils+in+Immigration+Bill" 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%2F14%2Ftech-pushes-to-keep-its-spoils-in-immigration-bill%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Tech+Pushes+to+Keep+Its+Spoils+in+Immigration+Bill" 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%2F14%2Ftech-pushes-to-keep-its-spoils-in-immigration-bill%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Tech+Pushes+to+Keep+Its+Spoils+in+Immigration+Bill" 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%2F14%2Ftech-pushes-to-keep-its-spoils-in-immigration-bill%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Tech+Pushes+to+Keep+Its+Spoils+in+Immigration+Bill" 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/165665091202/u/0/f/640387/c/34625/s/2d4cee2e/kg/342-363/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665091202/u/0/f/640387/c/34625/s/2d4cee2e/kg/342-363/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The technology industry this week dispatched executives and entrepreneurs to buttonhole lawmakers and rallied people to mount a digital campaign on Congress.     </Summary>
<Website>http://bits.blogs.nytimes.com/2013/06/14/tech-pushes-to-keep-its-spoils-in-immigration-bill/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31339/guest@my.umbc.edu/8359897677f17200d7ad2e26a170af03/api/pixel</TrackingUrl>
<Tag>bloomberg-michael-r</Tag>
<Tag>facebook-inc</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>foreign-workers</Tag>
<Tag>immigration-and-emigration</Tag>
<Tag>moran-jerry</Tag>
<Tag>new</Tag>
<Tag>policy</Tag>
<Tag>senate</Tag>
<Tag>silicon-valley-calif</Tag>
<Tag>start-ups</Tag>
<Tag>technology</Tag>
<Tag>visas</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, 14 Jun 2013 13:18:59 -0400</PostedAt>
<EditAt>Sun, 16 Jun 2013 23:29:23 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31333" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31333">
<Title>Hints for Finding Funding</Title>
<Tagline>How are you funding study abroad?</Tagline>
<Body>
<![CDATA[
    <div class="html-content"><div>The Learning Abroad Center at the University of Minnesota offers prospective study abroad scholarship applicants some useful advice.  Click <strong>VISIT WEBSITE</strong> below to see their tips.</div></div>
]]>
</Body>
<Summary>The Learning Abroad Center at the University of Minnesota offers prospective study abroad scholarship applicants some useful advice.  Click VISIT WEBSITE below to see their tips.</Summary>
<Website>http://www.umabroad.umn.edu/students/finances/scholarships/hints.php</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31333/guest@my.umbc.edu/0b2af808d4210c89fe1d4080af13e9d5/api/pixel</TrackingUrl>
<Group token="studyabroad">Education Abroad</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/studyabroad</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/xsmall.png?1714677094</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/original.png?1714677094</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/xxlarge.png?1714677094</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/xlarge.png?1714677094</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/large.png?1714677094</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/medium.png?1714677094</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/small.png?1714677094</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/xsmall.png?1714677094</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/572/2c3ac64a01925fe40a18386abf1e0dd8/xxsmall.png?1714677094</AvatarUrl>
<Sponsor>Study Abroad</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/031/333/469bb5102adac5e2e718d47cd346cb49/xxlarge.jpg?1371226015</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/031/333/469bb5102adac5e2e718d47cd346cb49/xlarge.jpg?1371226015</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/031/333/469bb5102adac5e2e718d47cd346cb49/large.jpg?1371226015</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/031/333/469bb5102adac5e2e718d47cd346cb49/medium.jpg?1371226015</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/031/333/469bb5102adac5e2e718d47cd346cb49/small.jpg?1371226015</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/031/333/469bb5102adac5e2e718d47cd346cb49/xsmall.jpg?1371226015</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/031/333/469bb5102adac5e2e718d47cd346cb49/xxsmall.jpg?1371226015</ThumbnailUrl>
<PawCount>9</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 14 Jun 2013 12:08:28 -0400</PostedAt>
<EditAt>Fri, 14 Jun 2013 12:09:29 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31340" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31340">
<Title>U.S. Pushes Agencies to Free Up Spectrum</Title>
<Body>
<![CDATA[
    <div class="html-content">The government said it would invest $40 million in the next year and $60 million more over the next five years to find ways to share lightly used airwaves.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F15%2Fus%2Fpolitics%2Fobama-seeks-to-expand-airwaves-for-wireless-use.html%3Fpartner%3Drss%26emc%3Drss&amp;t=U.S.+Pushes+Agencies+to+Free+Up+Spectrum" 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%2F2013%2F06%2F15%2Fus%2Fpolitics%2Fobama-seeks-to-expand-airwaves-for-wireless-use.html%3Fpartner%3Drss%26emc%3Drss&amp;t=U.S.+Pushes+Agencies+to+Free+Up+Spectrum" 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%2F2013%2F06%2F15%2Fus%2Fpolitics%2Fobama-seeks-to-expand-airwaves-for-wireless-use.html%3Fpartner%3Drss%26emc%3Drss&amp;t=U.S.+Pushes+Agencies+to+Free+Up+Spectrum" 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%2F2013%2F06%2F15%2Fus%2Fpolitics%2Fobama-seeks-to-expand-airwaves-for-wireless-use.html%3Fpartner%3Drss%26emc%3Drss&amp;t=U.S.+Pushes+Agencies+to+Free+Up+Spectrum" 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%2F2013%2F06%2F15%2Fus%2Fpolitics%2Fobama-seeks-to-expand-airwaves-for-wireless-use.html%3Fpartner%3Drss%26emc%3Drss&amp;t=U.S.+Pushes+Agencies+to+Free+Up+Spectrum" 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/165665009128/u/0/f/640387/c/34625/s/2d4d07c0/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665009128/u/0/f/640387/c/34625/s/2d4d07c0/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The government said it would invest $40 million in the next year and $60 million more over the next five years to find ways to share lightly used airwaves.     </Summary>
<Website>http://www.nytimes.com/2013/06/15/us/politics/obama-seeks-to-expand-airwaves-for-wireless-use.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31340/guest@my.umbc.edu/f2c271e6b222667bf40b453083c8809a/api/pixel</TrackingUrl>
<Tag>new</Tag>
<Tag>obama-barack</Tag>
<Tag>radio-spectrum</Tag>
<Tag>technology</Tag>
<Tag>telephones-and-telecommunications</Tag>
<Tag>wireless-communications</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, 14 Jun 2013 12:01:25 -0400</PostedAt>
<EditAt>Fri, 14 Jun 2013 20:32:08 -0400</EditAt>
</NewsItem>

</News>
