<?xml version="1.0"?>
<News hasArchived="true" page="8037" pageCount="10844" pageSize="10" timestamp="Wed, 30 Sep 2026 23:11:59 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=8037&amp;range=2">
<NewsItem contentIssues="true" id="39752" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39752">
<Title>As New Services Track Habits, the E-Books Are Reading You</Title>
<Body>
<![CDATA[
    <div class="html-content">Several new e-book subscription services are analyzing the data of readers and providing it free.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F25%2Ftechnology%2Fas-new-services-track-habits-the-e-books-are-reading-you.html%3Fpartner%3Drss%26emc%3Drss&amp;t=As+New+Services+Track+Habits%2C+the+E-Books+Are+Reading+You" 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%2F12%2F25%2Ftechnology%2Fas-new-services-track-habits-the-e-books-are-reading-you.html%3Fpartner%3Drss%26emc%3Drss&amp;t=As+New+Services+Track+Habits%2C+the+E-Books+Are+Reading+You" 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%2F12%2F25%2Ftechnology%2Fas-new-services-track-habits-the-e-books-are-reading-you.html%3Fpartner%3Drss%26emc%3Drss&amp;t=As+New+Services+Track+Habits%2C+the+E-Books+Are+Reading+You" 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%2F12%2F25%2Ftechnology%2Fas-new-services-track-habits-the-e-books-are-reading-you.html%3Fpartner%3Drss%26emc%3Drss&amp;t=As+New+Services+Track+Habits%2C+the+E-Books+Are+Reading+You" 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%2F12%2F25%2Ftechnology%2Fas-new-services-track-habits-the-e-books-are-reading-you.html%3Fpartner%3Drss%26emc%3Drss&amp;t=As+New+Services+Track+Habits%2C+the+E-Books+Are+Reading+You" 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/184842195934/u/0/f/640387/c/34625/s/352ea892/sc/15/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842195934/u/0/f/640387/c/34625/s/352ea892/sc/15/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842195934/u/0/f/640387/c/34625/s/352ea892/sc/15/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842195934/u/0/f/640387/c/34625/s/352ea892/sc/15/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842195934/u/0/f/640387/c/34625/s/352ea892/sc/15/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842195934/u/0/f/640387/c/34625/s/352ea892/sc/15/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842195934/u/0/f/640387/c/34625/s/352ea892/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842195934/u/0/f/640387/c/34625/s/352ea892/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Several new e-book subscription services are analyzing the data of readers and providing it free.      </Summary>
<Website>http://www.nytimes.com/2013/12/25/technology/as-new-services-track-habits-the-e-books-are-reading-you.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39752/guest@my.umbc.edu/64e09ffd3fbd57012e1cfdfb232eac9e/api/pixel</TrackingUrl>
<Tag>amazon-com-inc-amzn-nasdaq</Tag>
<Tag>barnes-and-noble-inc-bks-nyse</Tag>
<Tag>book-trade-and-publishing</Tag>
<Tag>books-and-literature</Tag>
<Tag>computers-and-the-internet</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>netflix-inc-nflx-nasdaq</Tag>
<Tag>new</Tag>
<Tag>scribd</Tag>
<Tag>spotify</Tag>
<Tag>technology</Tag>
<Tag>twitter-twtr-nyse</Tag>
<Tag>writing-and-writers</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 21:14:15 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39753" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39753">
<Title>DealBook: BlackBerry Co-Founder Cuts Stake</Title>
<Body>
<![CDATA[
    <div class="html-content">Mike Lazaridis, the troubled smartphone maker’s former co-chairman, sold about $27 million worth of stock from his holdings after increases in the stock’s price.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F24%2Fblackberry-co-founder-cuts-stake%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+BlackBerry+Co-Founder+Cuts+Stake" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F24%2Fblackberry-co-founder-cuts-stake%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+BlackBerry+Co-Founder+Cuts+Stake" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F24%2Fblackberry-co-founder-cuts-stake%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+BlackBerry+Co-Founder+Cuts+Stake" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F24%2Fblackberry-co-founder-cuts-stake%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+BlackBerry+Co-Founder+Cuts+Stake" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F24%2Fblackberry-co-founder-cuts-stake%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+BlackBerry+Co-Founder+Cuts+Stake" 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>Mike Lazaridis, the troubled smartphone maker’s former co-chairman, sold about $27 million worth of stock from his holdings after increases in the stock’s price.      </Summary>
<Website>http://dealbook.nytimes.com/2013/12/24/blackberry-co-founder-cuts-stake/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39753/guest@my.umbc.edu/46ddbaa24f0d2b337de3a476a87357a3/api/pixel</TrackingUrl>
<Tag>blackberry</Tag>
<Tag>blackberry-bbry-nasdaq</Tag>
<Tag>blackberry-handheld-device</Tag>
<Tag>foxconn-technology</Tag>
<Tag>lazaridis-michael</Tag>
<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>Tue, 24 Dec 2013 20:46:41 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39788" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39788">
<Title>Square Feet: Companies, Shifting Production, Expand to Accommodate Robots</Title>
<Body>
<![CDATA[
    <div class="html-content">Many companies are extending their commercial footprint with a new addition or in some cases, excavating for a lower floor.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F25%2Fbusiness%2Fcompanies-shifting-production-expand-to-accommodate-robots.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Square+Feet%3A+Companies%2C+Shifting+Production%2C+Expand+to+Accommodate+Robots" 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%2F12%2F25%2Fbusiness%2Fcompanies-shifting-production-expand-to-accommodate-robots.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Square+Feet%3A+Companies%2C+Shifting+Production%2C+Expand+to+Accommodate+Robots" 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%2F12%2F25%2Fbusiness%2Fcompanies-shifting-production-expand-to-accommodate-robots.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Square+Feet%3A+Companies%2C+Shifting+Production%2C+Expand+to+Accommodate+Robots" 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%2F12%2F25%2Fbusiness%2Fcompanies-shifting-production-expand-to-accommodate-robots.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Square+Feet%3A+Companies%2C+Shifting+Production%2C+Expand+to+Accommodate+Robots" 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%2F12%2F25%2Fbusiness%2Fcompanies-shifting-production-expand-to-accommodate-robots.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Square+Feet%3A+Companies%2C+Shifting+Production%2C+Expand+to+Accommodate+Robots" 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>Many companies are extending their commercial footprint with a new addition or in some cases, excavating for a lower floor.      </Summary>
<Website>http://www.nytimes.com/2013/12/25/business/companies-shifting-production-expand-to-accommodate-robots.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39788/guest@my.umbc.edu/fea06aefb3a749669d41cd02ac8bf155/api/pixel</TrackingUrl>
<Tag>cbre-group-inc-cbg-nyse</Tag>
<Tag>eastman-kodak-company-ekdkq-other-otc</Tag>
<Tag>factories-and-manufacturing</Tag>
<Tag>ford-motor-co-f-nyse</Tag>
<Tag>new</Tag>
<Tag>real-estate-commercial</Tag>
<Tag>robots-and-robotics</Tag>
<Tag>rochester-ny</Tag>
<Tag>sentrysafe</Tag>
<Tag>technology</Tag>
<Tag>weber-stephen-products</Tag>
<Tag>xerox-corporation-xrx-nyse</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 20:40:29 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39783" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39783">
<Title>Bits: Who Is Selling Target&#8217;s Data?</Title>
<Body>
<![CDATA[
    <div class="html-content">The security blogger Brian Krebs said he had identified a Ukrainian man who he believed is connected to a website that is selling Target customers’ credit and debit card numbers online.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F12%2F24%2Fwho-is-selling-targets-data%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Who+Is+Selling+Target%E2%80%99s+Data%3F" 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%2F12%2F24%2Fwho-is-selling-targets-data%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Who+Is+Selling+Target%E2%80%99s+Data%3F" 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%2F12%2F24%2Fwho-is-selling-targets-data%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Who+Is+Selling+Target%E2%80%99s+Data%3F" 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%2F12%2F24%2Fwho-is-selling-targets-data%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Who+Is+Selling+Target%E2%80%99s+Data%3F" 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%2F12%2F24%2Fwho-is-selling-targets-data%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Who+Is+Selling+Target%E2%80%99s+Data%3F" 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/184842279549/u/0/f/640387/c/34625/s/353809fc/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842279549/u/0/f/640387/c/34625/s/353809fc/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842279549/u/0/f/640387/c/34625/s/353809fc/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842279549/u/0/f/640387/c/34625/s/353809fc/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842279549/u/0/f/640387/c/34625/s/353809fc/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842279549/u/0/f/640387/c/34625/s/353809fc/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842279549/u/0/f/640387/c/34625/s/353809fc/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842279549/u/0/f/640387/c/34625/s/353809fc/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The security blogger Brian Krebs said he had identified a Ukrainian man who he believed is connected to a website that is selling Target customers’ credit and debit card numbers online.      </Summary>
<Website>http://bits.blogs.nytimes.com/2013/12/24/who-is-selling-targets-data/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39783/guest@my.umbc.edu/3659754939c7a20111bc44551b33e367/api/pixel</TrackingUrl>
<Tag>blogs-and-blogging-internet</Tag>
<Tag>computer-security</Tag>
<Tag>computers-and-the-internet</Tag>
<Tag>debit-cards</Tag>
<Tag>identity-theft</Tag>
<Tag>justice-department</Tag>
<Tag>new</Tag>
<Tag>odessa-ukraine</Tag>
<Tag>technology</Tag>
<Tag>ukraine</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 20:37:18 -0500</PostedAt>
<EditAt>Thu, 26 Dec 2013 12:23:37 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="39784" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39784">
<Title>Bits: Free Facebook, Common Globally, Finally Comes to American Mobile Phones</Title>
<Body>
<![CDATA[
    <div class="html-content">The social network has struck a deal with GoSmart Mobile, a budget brand owned by T-Mobile US, to offer Facebook access without a mobile data plan.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F12%2F24%2Ffree-facebook-common-globally-finally-comes-to-american-mobile-phones%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Free+Facebook%2C+Common+Globally%2C+Finally+Comes+to+American+Mobile+Phones" 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%2F12%2F24%2Ffree-facebook-common-globally-finally-comes-to-american-mobile-phones%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Free+Facebook%2C+Common+Globally%2C+Finally+Comes+to+American+Mobile+Phones" 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%2F12%2F24%2Ffree-facebook-common-globally-finally-comes-to-american-mobile-phones%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Free+Facebook%2C+Common+Globally%2C+Finally+Comes+to+American+Mobile+Phones" 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%2F12%2F24%2Ffree-facebook-common-globally-finally-comes-to-american-mobile-phones%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Free+Facebook%2C+Common+Globally%2C+Finally+Comes+to+American+Mobile+Phones" 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%2F12%2F24%2Ffree-facebook-common-globally-finally-comes-to-american-mobile-phones%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Free+Facebook%2C+Common+Globally%2C+Finally+Comes+to+American+Mobile+Phones" 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/184842279550/u/0/f/640387/c/34625/s/353809f2/sc/15/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842279550/u/0/f/640387/c/34625/s/353809f2/sc/15/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842279550/u/0/f/640387/c/34625/s/353809f2/sc/15/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842279550/u/0/f/640387/c/34625/s/353809f2/sc/15/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842279550/u/0/f/640387/c/34625/s/353809f2/sc/15/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842279550/u/0/f/640387/c/34625/s/353809f2/sc/15/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842279550/u/0/f/640387/c/34625/s/353809f2/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842279550/u/0/f/640387/c/34625/s/353809f2/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The social network has struck a deal with GoSmart Mobile, a budget brand owned by T-Mobile US, to offer Facebook access without a mobile data plan.      </Summary>
<Website>http://bits.blogs.nytimes.com/2013/12/24/free-facebook-common-globally-finally-comes-to-american-mobile-phones/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39784/guest@my.umbc.edu/53e756e8332927d9968ce5d1a2410bb6/api/pixel</TrackingUrl>
<Tag>facebook-inc</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>mobile</Tag>
<Tag>new</Tag>
<Tag>social</Tag>
<Tag>social-media</Tag>
<Tag>t-mobile-us-inc</Tag>
<Tag>t-mobile-us-inc-tmus-nyse</Tag>
<Tag>technology</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>Tue, 24 Dec 2013 19:10:21 -0500</PostedAt>
<EditAt>Thu, 26 Dec 2013 12:26:32 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="39785" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39785">
<Title>Bits Blog: The Syrian Electronic Army Is at It Again</Title>
<Body>
<![CDATA[
    <div class="html-content">On Tuesday, the Federal Bureau of Investigation warned companies that hackers favoring Syria’s government in the country’s civil war were trying once again to hack into media organizations.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F12%2F24%2Fthe-syrian-electronic-army-is-at-it-again%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+The+Syrian+Electronic+Army+Is+at+It+Again" 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%2F12%2F24%2Fthe-syrian-electronic-army-is-at-it-again%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+The+Syrian+Electronic+Army+Is+at+It+Again" 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%2F12%2F24%2Fthe-syrian-electronic-army-is-at-it-again%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+The+Syrian+Electronic+Army+Is+at+It+Again" 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%2F12%2F24%2Fthe-syrian-electronic-army-is-at-it-again%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+The+Syrian+Electronic+Army+Is+at+It+Again" 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%2F12%2F24%2Fthe-syrian-electronic-army-is-at-it-again%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+The+Syrian+Electronic+Army+Is+at+It+Again" 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/184842282870/u/0/f/640387/c/34625/s/353809f7/sc/1/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842282870/u/0/f/640387/c/34625/s/353809f7/sc/1/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842282870/u/0/f/640387/c/34625/s/353809f7/sc/1/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842282870/u/0/f/640387/c/34625/s/353809f7/sc/1/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842282870/u/0/f/640387/c/34625/s/353809f7/sc/1/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842282870/u/0/f/640387/c/34625/s/353809f7/sc/1/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842282870/u/0/f/640387/c/34625/s/353809f7/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842282870/u/0/f/640387/c/34625/s/353809f7/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>On Tuesday, the Federal Bureau of Investigation warned companies that hackers favoring Syria’s government in the country’s civil war were trying once again to hack into media organizations.      </Summary>
<Website>http://bits.blogs.nytimes.com/2013/12/24/the-syrian-electronic-army-is-at-it-again/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39785/guest@my.umbc.edu/e376b293a0707daddac948e9aab394a0/api/pixel</TrackingUrl>
<Tag>cyberattacks-and-hackers</Tag>
<Tag>federal-bureau-of-investigation</Tag>
<Tag>new</Tag>
<Tag>security</Tag>
<Tag>syria</Tag>
<Tag>syrian-electronic-army</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>Tue, 24 Dec 2013 18:51:02 -0500</PostedAt>
<EditAt>Thu, 26 Dec 2013 10:45:08 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="39789" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39789">
<Title>Currents | Q+A: His Refuge from the Digital Din</Title>
<Body>
<![CDATA[
    <div class="html-content">Brian Faherty, founder of a Portland, Ore., home décor company, has a special room with axes and a wood stove but not a single computer chip.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Fgarden%2Fhis-refuge-from-the-digital-din.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Currents+%7C+Q%2BA%3A+His+Refuge+from+the+Digital+Din" 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%2F12%2F26%2Fgarden%2Fhis-refuge-from-the-digital-din.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Currents+%7C+Q%2BA%3A+His+Refuge+from+the+Digital+Din" 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%2F12%2F26%2Fgarden%2Fhis-refuge-from-the-digital-din.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Currents+%7C+Q%2BA%3A+His+Refuge+from+the+Digital+Din" 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%2F12%2F26%2Fgarden%2Fhis-refuge-from-the-digital-din.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Currents+%7C+Q%2BA%3A+His+Refuge+from+the+Digital+Din" 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%2F12%2F26%2Fgarden%2Fhis-refuge-from-the-digital-din.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Currents+%7C+Q%2BA%3A+His+Refuge+from+the+Digital+Din" 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>Brian Faherty, founder of a Portland, Ore., home décor company, has a special room with axes and a wood stove but not a single computer chip.      </Summary>
<Website>http://www.nytimes.com/2013/12/26/garden/his-refuge-from-the-digital-din.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39789/guest@my.umbc.edu/1457a07379154700c8e68a2f564c464d/api/pixel</TrackingUrl>
<Tag>brian-faherty</Tag>
<Tag>computers-and-the-internet</Tag>
<Tag>interior-design-and-furnishings</Tag>
<Tag>new</Tag>
<Tag>schoolhouse-electric-and-supply</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>Tue, 24 Dec 2013 18:36:16 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39777" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39777">
<Title>Sex Toys and Cybersex Are Enhanced by New Technology</Title>
<Body>
<![CDATA[
    <div class="html-content">The next generation in sex toys — in the vein of “Her,” starring Joaquin Phoenix — is taking high-tech high jinks to a futuristic level, at warp speed.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ffashion%2FSex-toys-cybersex-high-tech.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Sex+Toys+and+Cybersex+Are+Enhanced+by+New+Technology" 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%2F12%2F26%2Ffashion%2FSex-toys-cybersex-high-tech.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Sex+Toys+and+Cybersex+Are+Enhanced+by+New+Technology" 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%2F12%2F26%2Ffashion%2FSex-toys-cybersex-high-tech.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Sex+Toys+and+Cybersex+Are+Enhanced+by+New+Technology" 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%2F12%2F26%2Ffashion%2FSex-toys-cybersex-high-tech.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Sex+Toys+and+Cybersex+Are+Enhanced+by+New+Technology" 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%2F12%2F26%2Ffashion%2FSex-toys-cybersex-high-tech.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Sex+Toys+and+Cybersex+Are+Enhanced+by+New+Technology" 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>The next generation in sex toys — in the vein of “Her,” starring Joaquin Phoenix — is taking high-tech high jinks to a futuristic level, at warp speed.      </Summary>
<Website>http://www.nytimes.com/2013/12/26/fashion/Sex-toys-cybersex-high-tech.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39777/guest@my.umbc.edu/cd963d4efbaab99b402ee3100f1a0b43/api/pixel</TrackingUrl>
<Tag>apple-inc-aapl-nasdaq</Tag>
<Tag>computers-and-the-internet</Tag>
<Tag>her-movie</Tag>
<Tag>new</Tag>
<Tag>sex</Tag>
<Tag>technology</Tag>
<Tag>virtual-reality-computers</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 17:57:24 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39778" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39778">
<Title>Noted: BlackBerry Phone Users Are a Dying, but Not Dead, Breed</Title>
<Body>
<![CDATA[
    <div class="html-content">The company may have seen better times, but its product is still favored by many.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ffashion%2FBlackBerry-phone-users.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Noted%3A+BlackBerry+Phone+Users+Are+a+Dying%2C+but+Not+Dead%2C+Breed" 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%2F12%2F26%2Ffashion%2FBlackBerry-phone-users.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Noted%3A+BlackBerry+Phone+Users+Are+a+Dying%2C+but+Not+Dead%2C+Breed" 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%2F12%2F26%2Ffashion%2FBlackBerry-phone-users.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Noted%3A+BlackBerry+Phone+Users+Are+a+Dying%2C+but+Not+Dead%2C+Breed" 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%2F12%2F26%2Ffashion%2FBlackBerry-phone-users.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Noted%3A+BlackBerry+Phone+Users+Are+a+Dying%2C+but+Not+Dead%2C+Breed" 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%2F12%2F26%2Ffashion%2FBlackBerry-phone-users.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Noted%3A+BlackBerry+Phone+Users+Are+a+Dying%2C+but+Not+Dead%2C+Breed" 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>The company may have seen better times, but its product is still favored by many.      </Summary>
<Website>http://www.nytimes.com/2013/12/26/fashion/BlackBerry-phone-users.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39778/guest@my.umbc.edu/deb8e7e1eb7962e63e07d7d080c276f4/api/pixel</TrackingUrl>
<Tag>blackberry-bbry-nasdaq</Tag>
<Tag>ebay-inc-ebay-nasdaq</Tag>
<Tag>goldman-sachs-group-inc-gs-nyse</Tag>
<Tag>new</Tag>
<Tag>smartphones</Tag>
<Tag>technology</Tag>
<Tag>twitter-twtr-nyse</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 16:22:10 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39750" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39750">
<Title>Managing the Asynchronous Nature of Node.js</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=36183&amp;c=736738239" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=36183&amp;c=736738239" alt="" style="max-width: 100%; height: auto;"></a><p><a href="http://nodejs.org/" rel="nofollow external" class="bo">Node.js</a> allows you to create apps fast and easily. But due to its asynchronous nature, it may be hard to write readable and manageable code. In this article I’ll show you a few tips on how to achieve that.</p>
    <p></p>
    <hr>
    <h2>Callback Hell or the Pyramid of Doom</h2>
    <p>Node.js is built in a way that forces you to use asynchronous functions. That means callbacks, callbacks and even more callbacks. You’ve probably seen or even written yourself pieces of code like this:</p>
    <pre>app.get('/login', function (req, res) {&#x000A;    	sql.query('SELECT 1 FROM users WHERE name = ?;', [ req.param('username') ], function (error, rows) {&#x000A;    		if (error) {&#x000A;    			res.writeHead(500);&#x000A;    			return res.end();&#x000A;    		}&#x000A;    		if (rows.length &amp;lt; 1) {&#x000A;    			res.end('Wrong username!');&#x000A;    		} else {&#x000A;    			sql.query('SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ req.param('username'), req.param('password') ], function (error, rows) {&#x000A;    				if (error) {&#x000A;    					res.writeHead(500);&#x000A;    					return res.end();&#x000A;    				}&#x000A;    				if (rows.length &amp;lt; 1) {&#x000A;    					res.end('Wrong password!');&#x000A;    				} else {&#x000A;    					sql.query('SELECT * FROM userdata WHERE name = ?;', [ req.param('username') ], function (error, rows) {&#x000A;    						if (error) {&#x000A;    							res.writeHead(500);&#x000A;    							return res.end();&#x000A;    						}&#x000A;    						req.session.username = req.param('username');&#x000A;    						req.session.data = rows[0];&#x000A;    						res.rediect('/userarea');&#x000A;    					});&#x000A;    				}&#x000A;    			});&#x000A;    		}&#x000A;    	});&#x000A;    });&#x000A;    </pre>
    <p>This is actually a snippet straight from one of my first Node.js apps. If you’ve done something more advanced in Node.js you probably understand everything, but the problem here is that the code is moving to the right every time you use some asynchronous function. It becomes harder to read and harder to debug. Luckily, there are a few solutions for this mess, so you can pick the right one for your project.</p>
    <hr>
    <h2>Solution 1: Callback Naming and Modularization</h2>
    <p>The simplest approach would be to name every callback (which will help you debug the code) and split all of your code into modules. The login example above can be turned into a module in a few simple steps.</p>
    <h3>The Structure</h3>
    <p>Let’s start with a simple module structure. To avoid the above situation, when you just split the mess into smaller messes, let’s have it be a class:</p>
    <pre>var util = require('util');&#x000A;    &#x000A;    function Login(username, password) {&#x000A;    	function _checkForErrors(error, rows, reason) {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	function _checkUsername(error, rows) {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	function _checkPassword(error, rows) {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	function _getData(error, rows) {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	function perform() {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	this.perform = perform;&#x000A;    }&#x000A;    &#x000A;    util.inherits(Login, EventEmitter);&#x000A;    </pre>
    <p>The class is constructed with two parameters: <code>username</code> and <code>password</code>. Looking at the sample code, we need three functions: one to check if the username is correct (<code>_checkUsername</code>), another to check the password (<code>_checkPassword</code>) and one more to return the user-related data (<code>_getData</code>) and notify the app that the login was successful. There is also a <code>_checkForErrors</code> helper, which will handle all errors. Finally, there is a <code>perform</code> function, which will start the login procedure (and is the only public function in the class). Finally, we inherit from <code>EventEmitter</code> to simplify the usage of this class.</p>
    <h3>The Helper</h3>
    <p>The <code>_checkForErrors</code> function will check if any error occurred or if the SQL query returns no rows, and emit the appropriate error (with the reason that was supplied):</p>
    <pre>function _checkForErrors(error, rows, reason) {&#x000A;    	if (error) {&#x000A;    		this.emit('error', error);&#x000A;    		return true;&#x000A;    	}&#x000A;    	&#x000A;    	if (rows.length &amp;lt; 1) {&#x000A;    		this.emit('failure', reason);&#x000A;    		return true;&#x000A;    	}&#x000A;    	&#x000A;    	return false;&#x000A;    }&#x000A;    </pre>
    <p>It also returns <code>true</code> or <code>false</code>, depending on whether an error occurred or not.</p>
    <h3>Performing the Login</h3>
    <p>The <code>perform</code> function will have to do only one operation: perform the first SQL query (to check if the username exists) and assign the appropriate callback:</p>
    <pre>function perform() {&#x000A;    	sql.query('SELECT 1 FROM users WHERE name = ?;', [ username ], _checkUsername);&#x000A;    }&#x000A;    </pre>
    <p>I assume you have your SQL connection accessible globally in the <code>sql</code> variable (just to simplify, discussing if this is a good practice is beyond the scope of this article). And that’s it for this function.</p>
    <h3>Checking the Username</h3>
    <p>The next step is to check if the username is correct, and if so fire the second query – to check the password:</p>
    <pre>function _checkUsername(error, rows) {&#x000A;    	if (_checkForErrors(error, rows, 'username')) {&#x000A;    		return false;&#x000A;    	} else {&#x000A;    		sql.query('SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ username, password ], _checkPassword);&#x000A;    	}&#x000A;    }&#x000A;    </pre>
    <p>Pretty much the same code as in the messy sample, with the exception of error handling.</p>
    <h3>Checking the Password</h3>
    <p>This function is almost exactly the same as the previous one, the only difference being the query called:</p>
    <pre>function _checkPassword(error, rows) {&#x000A;    	if (_checkForErrors(error, rows, 'password')) {&#x000A;    		return false;&#x000A;    	} else {&#x000A;    		sql.query('SELECT * FROM userdata WHERE name = ?;', [ username ], _getData);&#x000A;    	}&#x000A;    }&#x000A;    </pre>
    <h3>Getting the User-Related Data</h3>
    <p>The last function in this class will get the data related to the user (the optional step) and fire a success event with it:</p>
    <pre>function _getData(error, rows) {&#x000A;    	if (_checkForErrors(error, rows)) {&#x000A;    		return false;&#x000A;    	} else {&#x000A;    		this.emit('success', rows[0]);&#x000A;    	}&#x000A;    }&#x000A;    </pre>
    <h3>Final Touches and Usage</h3>
    <p>The last thing to do is to export the class. Add this line after all of the code:</p>
    <pre>module.exports = Login;&#x000A;    </pre>
    <p>This will make the <code>Login</code> class the only thing that the module will export. It can be later used like this (assuming that you’ve named the module file <code>login.js</code> and it’s in the same directory as the main script):</p>
    <pre>var Login = require('./login.js');&#x000A;    &#x000A;    ...&#x000A;    &#x000A;    app.get('/login', function (req, res) {&#x000A;    	var login = new Login(req.param('username'), req.param('password));&#x000A;    	login.on('error', function (error) {&#x000A;    		res.writeHead(500);&#x000A;    		res.end();&#x000A;    	});&#x000A;    	login.on('failure', function (reason) {&#x000A;    		if (reason == 'username') {&#x000A;    			res.end('Wrong username!');&#x000A;    		} else if (reason == 'password') {&#x000A;    			res.end('Wrong password!');&#x000A;    		}&#x000A;    	});&#x000A;    	login.on('success', function (data) {&#x000A;    		req.session.username = req.param('username');&#x000A;    		req.session.data = data;&#x000A;    		res.redirect('/userarea');&#x000A;    	});&#x000A;    	login.perform();&#x000A;    });&#x000A;    </pre>
    <p>Here’s a few more lines of code, but the readability of the code has increased, quite noticeably. Also, this solution does not use any external libraries, which makes it perfect if someone new comes to your project.</p>
    <p>That was the first approach, let’s proceed to the second one.</p>
    <hr>
    <h2>Solution 2: Promises</h2>
    <p>Using <a href="http://wiki.commonjs.org/wiki/Promises/A" rel="nofollow external" class="bo">promises</a> is another way of solving this problem. A promise (as you can read in the link provided) “represents the eventual value returned from the single completion of an operation”. In practice, it means that you can chain the calls to flatten the pyramid and make the code easier to read.</p>
    <p>We will use the <a href="https://github.com/kriskowal/q" rel="nofollow external" class="bo">Q</a> module, available in the NPM repository.</p>
    <h3>Q in the Nutshell</h3>
    <p>Before we start, let me introduce you to the Q. For static classes (modules), we will primarily use the <code>Q.nfcall</code> function. It helps us in the conversion of every function following the Node.js’s callback pattern (where the parameters of the callback are the error and the result) to a promise. It’s used like this:</p>
    <pre>Q.nfcall(http.get, options);&#x000A;    </pre>
    <p>It’s pretty much like <code>Object.prototype.call</code>. You can also use the <code>Q.nfapply</code> which resembles <code>Object.prototype.apply</code>:</p>
    <pre>Q.nfapply(fs.readFile, [ 'filename.txt', 'utf-8' ]);&#x000A;    </pre>
    <p>Also, when we create the promise, we add each step with the <code>then(stepCallback)</code> method, catch the errors with <code>catch(errorCallback)</code> and finish with <code>done()</code>.</p>
    <p>In this case, since the <code>sql</code> object is an instance, not a static class, we have to use <code>Q.ninvoke</code> or <code>Q.npost</code>, which are similar to the above. The difference is that we pass the methods’ name as a string in the first argument, and the instance of the class that we want to work with as a second one, to avoid the method being <em>unbinded</em> from the instance.</p>
    <h3>Preparing the Promise</h3>
    <p>The first thing to do is to execute the first step, using <code>Q.nfcall</code> or <code>Q.nfapply</code> (use the one that you like more, there is no difference underneath):</p>
    <pre>var Q = require('q');&#x000A;    &#x000A;    ...&#x000A;    app.get('/login', function (req, res) {&#x000A;    	Q.ninvoke('query', sql, 'SELECT 1 FROM users WHERE name = ?;', [ req.param('username') ])&#x000A;    });&#x000A;    </pre>
    <p>Notice the lack of a semicolon at the end of the line – the function-calls will be chained so it cannot be there. We are just calling the <code>sql.query</code> as in the messy example, but we omit the callback parameter – it’s handled by the promise.</p>
    <h3>Checking the Username</h3>
    <p>Now we can create the callback for the SQL query, it will be almost identical to the one in the “pyramid of doom” example. Add this after the <code>Q.ninvoke</code> call:</p>
    <pre>.then(function (rows) {&#x000A;    	if (rows.length &amp;lt; 1) {&#x000A;    		res.end('Wrong username!');&#x000A;    	} else {&#x000A;    		return Q.ninvoke('query', sql, 'SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ req.param('username'), req.param('password') ]);&#x000A;    	}&#x000A;    })&#x000A;    </pre>
    <p>As you can see we are attaching the callback (the next step) using the <code>then</code> method. Also, in the callback we omit the <code>error</code> parameter, because we will catch all of the errors later. We are manually checking, if the query returned something, and if so we are returning the next promise to be executed (again, no semicolon because of the chaining).</p>
    <h3>Checking the Password</h3>
    <p>As with the modularization example, checking the password is almost identical to checking the username. This should go right after the last <code>then</code> call:</p>
    <pre>.then(function (rows) {&#x000A;    	if (rows.length &amp;lt; 1) {&#x000A;    		res.end('Wrong password!');&#x000A;    	} else {&#x000A;    		return Q.ninvoke('query', sql, 'SELECT * FROM userdata WHERE name = ?;', [ req.param('username') ]);&#x000A;    	}&#x000A;    })&#x000A;    </pre>
    <h3>Getting the User-Related Data</h3>
    <p>The last step will be the one where we’re putting the users’ data in the session. Once more, the callback is not much different from the messy example:</p>
    <pre>.then(function (rows) {&#x000A;    	req.session.username = req.param('username');&#x000A;    	req.session.data = rows[0];&#x000A;    	res.rediect('/userarea');&#x000A;    })&#x000A;    </pre>
    <h3>Checking for Errors</h3>
    <p>When using promises and the Q library, all of the errors are handled by the callback set using the <code>catch</code> method. Here, we are only sending the HTTP 500 no matter what the error is, like in the examples above:</p>
    <pre>.catch(function (error) {&#x000A;    	res.writeHead(500);&#x000A;    	res.end();&#x000A;    })&#x000A;    .done();&#x000A;    </pre>
    <p>After that, we must call the <code>done</code> method to “make sure that, if an error doesn’t get handled before the end, it will get rethrown and reported” (from the library’s README). Now our beautifully flattened code should look like this (and behave just like the messy one):</p>
    <pre>var Q = require('q');&#x000A;    &#x000A;    ...&#x000A;    app.get('/login', function (req, res) {&#x000A;    	Q.ninvoke('query', sql, 'SELECT 1 FROM users WHERE name = ?;', [ req.param('username') ])&#x000A;    	.then(function (rows) {&#x000A;    		if (rows.length &amp;lt; 1) {&#x000A;    			res.end('Wrong username!');&#x000A;    		} else {&#x000A;    			return Q.ninvoke('query', sql, 'SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ req.param('username'), req.param('password') ]);&#x000A;    		}&#x000A;    	})&#x000A;    	.then(function (rows) {&#x000A;    		if (rows.length &amp;lt; 1) {&#x000A;    			res.end('Wrong password!');&#x000A;    		} else {&#x000A;    			return Q.ninvoke('query', sql, 'SELECT * FROM userdata WHERE name = ?;', [ req.param('username') ]);&#x000A;    		}&#x000A;    	})&#x000A;    	.then(function (rows) {&#x000A;    		req.session.username = req.param('username');&#x000A;    		req.session.data = rows[0];&#x000A;    		res.rediect('/userarea');&#x000A;    	})&#x000A;    	.catch(function (error) {&#x000A;    		res.writeHead(500);&#x000A;    		res.end();&#x000A;    	})&#x000A;    	.done();&#x000A;    });&#x000A;    </pre>
    <p>The code is much cleaner, and it involved less rewriting than the modularization approach.</p>
    <hr>
    <h2>Solution 3: Step Library</h2>
    <p>This solution is similar to the previous one, but it’s simpler. Q is a bit heavy, because it implements the whole promises idea. The <a href="https://github.com/creationix/step" rel="nofollow external" class="bo">Step</a> library is there only for the purpose of flattening the callback hell. It’s also a bit simpler to use, because you just call the only function that is exported from the module, pass all your callbacks as the parameters and use <code>this</code> in place of every callback. So the messy example can be converted into this, using the Step module:</p>
    <pre>var step = require('step');&#x000A;    &#x000A;    ...&#x000A;    &#x000A;    app.get('/login', function (req, res) {&#x000A;    	step(&#x000A;    		function start() {&#x000A;    			sql.query('SELECT 1 FROM users WHERE name = ?;', [ req.param('username') ], this);&#x000A;    		},&#x000A;    		function checkUsername(error, rows) {&#x000A;    			if (error) {&#x000A;    				res.writeHead(500);&#x000A;    				return res.end();&#x000A;    			}&#x000A;    			if (rows.length &amp;lt; 1) {&#x000A;    				res.end('Wrong username!');&#x000A;    			} else {&#x000A;    				sql.query('SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ req.param('username'), req.param('password') ], this);&#x000A;    			}&#x000A;    		},&#x000A;    		function checkPassword(error, rows) {&#x000A;    			if (error) {&#x000A;    				res.writeHead(500);&#x000A;    				return res.end();&#x000A;    			}&#x000A;    			if (rows.length &amp;lt; 1) {&#x000A;    				res.end('Wrong password!');&#x000A;    			} else {&#x000A;    				sql.query('SELECT * FROM userdata WHERE name = ?;', [ req.param('username') ], this);&#x000A;    			}&#x000A;    		},&#x000A;    		function (error, rows) {&#x000A;    			if (error) {&#x000A;    				res.writeHead(500);&#x000A;    				return res.end();&#x000A;    			}&#x000A;    			req.session.username = req.param('username');&#x000A;    			req.session.data = rows[0];&#x000A;    			res.rediect('/userarea');&#x000A;    		}&#x000A;    	);&#x000A;    });&#x000A;    </pre>
    <p>The drawback here is that there is no common error handler. Although any exceptions thrown in one callback are passed to the next one as the first parameter (so the script won’t go down because of the uncaught exception), having one handler for all errors is convenient most of the time.</p>
    <hr>
    <h2>Which One to Choose?</h2>
    <p>That’s pretty much a personal choice, but to help you pick the right one, here is a list of pros and cons of each approach:</p>
    <h3>Modularization:</h3>
    <p><strong>Pros:</strong></p>
    <ul>
    <li>No external libraries</li>
    <li>Helps to make the code more reusable</li>
    </ul>
    <p><strong>Cons:</strong></p>
    <ul>
    <li>More code</li>
    <li>A lot of rewriting if you’re converting an existing project</li>
    </ul>
    <h3>Promises (Q):</h3>
    <p><strong>Pros:</strong></p>
    <ul>
    <li>Less code</li>
    <li>Only a little rewriting if applied to an existing project</li>
    </ul>
    <p><strong>Cons:</strong></p>
    <ul>
    <li>You have to use an external library</li>
    <li>Requires a bit of learning</li>
    </ul>
    <h3>Step Library:</h3>
    <p><strong>Pros:</strong></p>
    <ul>
    <li>Easy to use, no learning required</li>
    <li>Pretty much copy-and-paste if converting an existing project</li>
    </ul>
    <p><strong>Cons:</strong></p>
    <ul>
    <li>No common error handler</li>
    <li>A bit harder to indent that <code>step</code> function properly</li>
    </ul>
    <hr>
    <h2>Conclusion</h2>
    <p>As you can see, the asynchronous nature of Node.js can be managed and the callback hell can be avoided. I’m personally using the modularization approach, because I like to have my code well structured. I hope these tips will help you to write your code more readable and debug your scripts easier.</p>
    </div>
]]>
</Body>
<Summary>Node.js allows you to create apps fast and easily. But due to its asynchronous nature, it may be hard to write readable and manageable code. In this article I’ll show you a few tips on how to...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/06Brf4_lHjI/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39750/guest@my.umbc.edu/e6a519b60f58a902209dab6587359296/api/pixel</TrackingUrl>
<Tag>asynchronous-node-js</Tag>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>javascript-and-ajax</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tutorials</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 16:18:21 -0500</PostedAt>
<EditAt>Tue, 24 Dec 2013 16:18:21 -0500</EditAt>
</NewsItem>

</News>
