<?xml version="1.0"?>
<News hasArchived="true" page="8672" pageCount="10825" pageSize="10" timestamp="Fri, 18 Sep 2026 20:47:15 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=8672&amp;range=2">
<NewsItem contentIssues="true" id="31976" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31976">
<Title>IE11 supports WebGL, gains better debug tools</Title>
<Body>
<![CDATA[
    <div class="html-content">Microsoft unveils its new touchscreen browser preview<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.netmagazine.com%2Fnews%2Fie11-supports-webgl-gains-better-debug-tools-132846&amp;t=IE11+supports+WebGL%2C+gains+better+debug+tools" 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.netmagazine.com%2Fnews%2Fie11-supports-webgl-gains-better-debug-tools-132846&amp;t=IE11+supports+WebGL%2C+gains+better+debug+tools" 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.netmagazine.com%2Fnews%2Fie11-supports-webgl-gains-better-debug-tools-132846&amp;t=IE11+supports+WebGL%2C+gains+better+debug+tools" 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.netmagazine.com%2Fnews%2Fie11-supports-webgl-gains-better-debug-tools-132846&amp;t=IE11+supports+WebGL%2C+gains+better+debug+tools" 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.netmagazine.com%2Fnews%2Fie11-supports-webgl-gains-better-debug-tools-132846&amp;t=IE11+supports+WebGL%2C+gains+better+debug+tools" 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/165666574701/u/49/f/502346/c/32632/s/2deafc92/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165666574701/u/49/f/502346/c/32632/s/2deafc92/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Microsoft unveils its new touchscreen browser preview     </Summary>
<Website>http://feedproxy.google.com/~r/net/topstories/~3/OLW93lrkPy0/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31976/guest@my.umbc.edu/1dd925cebdbfa82435342a377e099898/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>net</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</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, 28 Jun 2013 05:04:37 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31981" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31981">
<Title>Retired U.S. General Is Focus of Inquiry Over Iran Leak</Title>
<Body>
<![CDATA[
    <div class="html-content">Retired Gen. James E. Cartwright is being investigated in the leak of information about cyberattacks using the Stuxnet virus targeting Iran’s nuclear program.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F28%2Fus%2Fretired-us-general-is-focus-of-inquiry-over-iran-leak.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Retired+U.S.+General+Is+Focus+of+Inquiry+Over+Iran+Leak" 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%2F28%2Fus%2Fretired-us-general-is-focus-of-inquiry-over-iran-leak.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Retired+U.S.+General+Is+Focus+of+Inquiry+Over+Iran+Leak" 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%2F28%2Fus%2Fretired-us-general-is-focus-of-inquiry-over-iran-leak.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Retired+U.S.+General+Is+Focus+of+Inquiry+Over+Iran+Leak" 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%2F28%2Fus%2Fretired-us-general-is-focus-of-inquiry-over-iran-leak.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Retired+U.S.+General+Is+Focus+of+Inquiry+Over+Iran+Leak" 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%2F28%2Fus%2Fretired-us-general-is-focus-of-inquiry-over-iran-leak.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Retired+U.S.+General+Is+Focus+of+Inquiry+Over+Iran+Leak" 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/165665486328/u/0/f/640387/c/34625/s/2dec7672/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665486328/u/0/f/640387/c/34625/s/2dec7672/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Retired Gen. James E. Cartwright is being investigated in the leak of information about cyberattacks using the Stuxnet virus targeting Iran’s nuclear program.     </Summary>
<Website>http://www.nytimes.com/2013/06/28/us/retired-us-general-is-focus-of-inquiry-over-iran-leak.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31981/guest@my.umbc.edu/e408c450493fce4022634d7b5bd6a0de/api/pixel</TrackingUrl>
<Tag>cartwright-james-e</Tag>
<Tag>classified-information-and-state-secrets</Tag>
<Tag>cyberwarfare</Tag>
<Tag>holder-eric-h-jr</Tag>
<Tag>joint-chiefs-of-staff</Tag>
<Tag>new</Tag>
<Tag>new-york-times</Tag>
<Tag>news-sources-confidential-status-of</Tag>
<Tag>technology</Tag>
<Tag>united-states-defense-and-military-forces</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, 28 Jun 2013 00:03:12 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31973" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31973">
<Title>Chinese Firm Is Charged in Theft of Turbine Software</Title>
<Body>
<![CDATA[
    <div class="html-content">China’s biggest wind turbine company and two of its executives are accused of conspiring to steal an American firm’s software for controlling the flow of electricity.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F28%2Fbusiness%2Fenergy-environment%2Fchinese-firm-is-charged-in-theft-of-turbine-software.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Chinese+Firm+Is+Charged+in+Theft+of+Turbine+Software" 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%2F28%2Fbusiness%2Fenergy-environment%2Fchinese-firm-is-charged-in-theft-of-turbine-software.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Chinese+Firm+Is+Charged+in+Theft+of+Turbine+Software" 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%2F28%2Fbusiness%2Fenergy-environment%2Fchinese-firm-is-charged-in-theft-of-turbine-software.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Chinese+Firm+Is+Charged+in+Theft+of+Turbine+Software" 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%2F28%2Fbusiness%2Fenergy-environment%2Fchinese-firm-is-charged-in-theft-of-turbine-software.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Chinese+Firm+Is+Charged+in+Theft+of+Turbine+Software" 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%2F28%2Fbusiness%2Fenergy-environment%2Fchinese-firm-is-charged-in-theft-of-turbine-software.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Chinese+Firm+Is+Charged+in+Theft+of+Turbine+Software" 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/165666563210/u/0/f/640387/c/34625/s/2de77574/kg/342-363/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165666563210/u/0/f/640387/c/34625/s/2de77574/kg/342-363/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>China’s biggest wind turbine company and two of its executives are accused of conspiring to steal an American firm’s software for controlling the flow of electricity.     </Summary>
<Website>http://www.nytimes.com/2013/06/28/business/energy-environment/chinese-firm-is-charged-in-theft-of-turbine-software.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31973/guest@my.umbc.edu/143eb5b088499dd4be4e76ec8d2a67d1/api/pixel</TrackingUrl>
<Tag>alternative-and-renewable-energy</Tag>
<Tag>american-superconductor-corp-amsc-nasdaq</Tag>
<Tag>china</Tag>
<Tag>international-trade-and-world-market</Tag>
<Tag>new</Tag>
<Tag>robberies-and-thefts</Tag>
<Tag>sinovel</Tag>
<Tag>technology</Tag>
<Tag>united-states</Tag>
<Tag>wind-power</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>Thu, 27 Jun 2013 22:11:30 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31971" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31971">
<Title>A Bill Allowing More Foreign Workers Stirs a Tech Debate</Title>
<Body>
<![CDATA[
    <div class="html-content">As the Senate voted on an immigration bill that would let Silicon Valley companies import engineers from abroad, the labor lobby said eligible workers in the United States were being passed over.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F06%2F28%2Ftechnology%2Fa-bill-allowing-more-foreign-workers-stirs-a-tech-debate.html%3Fpartner%3Drss%26emc%3Drss&amp;t=A+Bill+Allowing+More+Foreign+Workers+Stirs+a+Tech+Debate" 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%2F28%2Ftechnology%2Fa-bill-allowing-more-foreign-workers-stirs-a-tech-debate.html%3Fpartner%3Drss%26emc%3Drss&amp;t=A+Bill+Allowing+More+Foreign+Workers+Stirs+a+Tech+Debate" 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%2F28%2Ftechnology%2Fa-bill-allowing-more-foreign-workers-stirs-a-tech-debate.html%3Fpartner%3Drss%26emc%3Drss&amp;t=A+Bill+Allowing+More+Foreign+Workers+Stirs+a+Tech+Debate" 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%2F28%2Ftechnology%2Fa-bill-allowing-more-foreign-workers-stirs-a-tech-debate.html%3Fpartner%3Drss%26emc%3Drss&amp;t=A+Bill+Allowing+More+Foreign+Workers+Stirs+a+Tech+Debate" 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%2F28%2Ftechnology%2Fa-bill-allowing-more-foreign-workers-stirs-a-tech-debate.html%3Fpartner%3Drss%26emc%3Drss&amp;t=A+Bill+Allowing+More+Foreign+Workers+Stirs+a+Tech+Debate" 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/165665540204/u/0/f/640387/c/34625/s/2de70d61/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665540204/u/0/f/640387/c/34625/s/2de70d61/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>As the Senate voted on an immigration bill that would let Silicon Valley companies import engineers from abroad, the labor lobby said eligible workers in the United States were being passed over....</Summary>
<Website>http://www.nytimes.com/2013/06/28/technology/a-bill-allowing-more-foreign-workers-stirs-a-tech-debate.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31971/guest@my.umbc.edu/e01f60bf0f2ea5ac0e4133eedd6a30a8/api/pixel</TrackingUrl>
<Tag>engineering-and-engineers</Tag>
<Tag>foreign-workers</Tag>
<Tag>hiring-and-promotion</Tag>
<Tag>immigration-and-emigration</Tag>
<Tag>intel-corporation-intc-nasdaq</Tag>
<Tag>labor-and-jobs</Tag>
<Tag>lobbying-and-lobbyists</Tag>
<Tag>motorola-solutions-inc-msi-nyse</Tag>
<Tag>new</Tag>
<Tag>science-and-technology</Tag>
<Tag>silicon-valley-calif</Tag>
<Tag>technology</Tag>
<Tag>united-states-economy</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>Thu, 27 Jun 2013 21:58:16 -0400</PostedAt>
<EditAt>Thu, 27 Jun 2013 21:58:16 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="31968" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31968">
<Title>Bits Blog: A Software Feud Ends, at Least for Today</Title>
<Body>
<![CDATA[
    <div class="html-content">Oracle’s Larry Ellison and Salesforce.com’s Marc Benioff explained how their companies are better off working together rather than fighting.<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%2F27%2Fa-software-feud-ends-at-least-for-today%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Software+Feud+Ends%2C+at+Least+for+Today" 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%2F27%2Fa-software-feud-ends-at-least-for-today%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Software+Feud+Ends%2C+at+Least+for+Today" 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%2F27%2Fa-software-feud-ends-at-least-for-today%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Software+Feud+Ends%2C+at+Least+for+Today" 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%2F27%2Fa-software-feud-ends-at-least-for-today%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Software+Feud+Ends%2C+at+Least+for+Today" 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%2F27%2Fa-software-feud-ends-at-least-for-today%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Software+Feud+Ends%2C+at+Least+for+Today" 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/165665649350/u/0/f/640387/c/34625/s/2de69983/kg/342-363/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165665649350/u/0/f/640387/c/34625/s/2de69983/kg/342-363/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Oracle’s Larry Ellison and Salesforce.com’s Marc Benioff explained how their companies are better off working together rather than fighting.     </Summary>
<Website>http://bits.blogs.nytimes.com/2013/06/27/a-software-feud-ends-at-least-for-today/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31968/guest@my.umbc.edu/37b9eafbbec9611bc94bd8102dc89714/api/pixel</TrackingUrl>
<Tag>amazon-com-inc</Tag>
<Tag>benioff-marc</Tag>
<Tag>cloud-computing</Tag>
<Tag>computers-and-the-internet</Tag>
<Tag>ellison-lawrence-j</Tag>
<Tag>enterprise-computing</Tag>
<Tag>international-business-machines-corporation</Tag>
<Tag>new</Tag>
<Tag>oracle-corporation</Tag>
<Tag>salesforce-com-inc</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>Thu, 27 Jun 2013 20:49:38 -0400</PostedAt>
<EditAt>Fri, 28 Jun 2013 09:07:29 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="31970" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31970">
<Title>Email Marketing: The Key to eCommerce Success</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>In this article you'll find out why you need an email marketing list for your business and how it can serve you over the course of time. You'll also learn about five methods of list building.</p></div>
]]>
</Body>
<Summary>In this article you'll find out why you need an email marketing list for your business and how it can serve you over the course of time. You'll also learn about five methods of list building.</Summary>
<Website>http://www.htmlgoodies.com/beyond/reference/email-marketing-the-key-to-ecommerce-success.html</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31970/guest@my.umbc.edu/12bbe4f4870b1a00ce43665fb3fded2b/api/pixel</TrackingUrl>
<Tag>html</Tag>
<Tag>htmlgoodies</Tag>
<Tag>learning</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 27 Jun 2013 19:23:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="123209" important="false" status="posted" url="https://my3.my.umbc.edu/posts/123209">
<Title>Stephen Freeland selected as new director of Interdisciplinary Studies</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Interdisciplinary Studies (INDS) is pleased to welcome Dr. Stephen Freeland as its new Director. Dr. Freeland succeeds Patricia La Noue, praised for building a solid foundation during her time in the position.</p>
    <p>In his new role, Dr. Freeland will extend the strengths of INDS. He has particular interests in the interface of science and religion and in using the full spectrum of creative arts to visualize and communicate social science, natural science and engineering. In this capacity, Dr. Freeland initiated activities by presenting a public lecture in Washington D.C. for the American Association for the Advancement of Science (AAAS) dialogue on science, ethics, and religion.</p>
    <p>As Dr. Freeland begins to build new bridges, he would be delighted to hear from members of the campus community. Feel free to reach out to him directly at <a title="freeland@umbc.edu" href="mailto:freeland@umbc.edu" rel="nofollow external" class="bo">freeland@umbc.edu</a>.</p>
    </div>
]]>
</Body>
<Summary>Interdisciplinary Studies (INDS) is pleased to welcome Dr. Stephen Freeland as its new Director. Dr. Freeland succeeds Patricia La Noue, praised for building a solid foundation during her time in...</Summary>
<Website>https://umbc.edu/stories/stephen-freeland-selected-as-new-director-of-interdisciplinary-studies/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/123209/guest@my.umbc.edu/d1a0cb3c4b3031ac84c04299e0c1783b/api/pixel</TrackingUrl>
<Tag>cahss</Tag>
<Tag>cnms</Tag>
<Tag>community</Tag>
<Group token="umbc-news-magazine">UMBC News &amp;amp; Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news-magazine</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/original.png?1748556657</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/large.png?1748556657</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/medium.png?1748556657</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/small.png?1748556657</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxsmall.png?1748556657</AvatarUrl>
<Sponsor>UMBC News &amp; Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Thu, 27 Jun 2013 19:15:55 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="123210" important="false" status="posted" url="https://my3.my.umbc.edu/posts/123210">
<Title>UMBC video documentaries in The Baltimore Sun capture voice, history of Sparrows Point steelworkers</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>In a gripping <em>Baltimore Sun</em> <a title="Sparrows Point: A year after collapse, unsettled lives" href="http://data.baltimoresun.com/stories/sparrows-point-a-year-after-bankruptcy-unsettled-lives/#millstories" rel="nofollow external" class="bo">feature story</a> on the lives of former steel mill workers after the closing of Sparrows Point, video documentaries from the UMBC project “Documenting Cultural Heritage in Partnership with Communities” (supported by <a title="BreakingGround Spring 2013" href="http://umbcbreakingground.wordpress.com/get-involved/learn/spring-2013-courses/" rel="nofollow external" class="bo">BreakingGround)</a> offer important first-person perspectives on life and work in the community.</p>
    <p>UMBC students interviewed former mill employees while learning about oral and audiovisual storytelling and documentation. The steelworkers shared their stories of working at the mill, the impact the Sparrows Point closure has had on the community, and the future of the industry locally and nationally. Bill Shewbridge (New Media Studio) and Michelle Stefano (American Studies) collaborated to bring to life a project that introduced students to the ideas, techniques and ethical considerations that underpin qualitative research, particularly from a community-based, out-in-the-field perspective.</p>
    </div>
]]>
</Body>
<Summary>In a gripping Baltimore Sun feature story on the lives of former steel mill workers after the closing of Sparrows Point, video documentaries from the UMBC project “Documenting Cultural Heritage in...</Summary>
<Website>https://umbc.edu/stories/umbc-video-documentaries-in-the-baltimore-sun-capture-voice-history-of-sparrows-point-steelworkers/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/123210/guest@my.umbc.edu/6bf7869dbe2bd88a524b22c0deac93ac/api/pixel</TrackingUrl>
<Tag>breakingground</Tag>
<Tag>cahss</Tag>
<Tag>policy-and-society</Tag>
<Group token="umbc-news-magazine">UMBC News &amp;amp; Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news-magazine</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/original.png?1748556657</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/large.png?1748556657</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/medium.png?1748556657</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/small.png?1748556657</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxsmall.png?1748556657</AvatarUrl>
<Sponsor>UMBC News &amp; Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Thu, 27 Jun 2013 17:16:23 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="31966" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31966">
<Title>Building a Web App From Scratch in AngularJS</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=32944&amp;c=1568178682" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=32944&amp;c=1568178682" alt="" style="max-width: 100%; height: auto;"></a><p>In a previous <a href="http://www.revillwebdesign.com/angularjs-tutorial/" rel="nofollow external" class="bo">AngularJS tutorial</a> I covered all the basics of how to get up and running with <a href="http://angularjs.org/" rel="nofollow external" class="bo">Angular</a> in around 30 minutes. This tutorial will expand on what was covered there by creating a simple real world web application.</p>
    <p></p>
    <p>This simple web application will allow its users to view, search and filter TV Show Premieres for the next 30 days. As a keen series viewer, I am always looking for something new to watch when my favorite shows are off air, so I thought I would create an app to help me find what I am looking for.</p>
    <p>Before we get started, you may want to take a look at the demo from above, to see what we will be creating in this tutorial.</p>
    <hr>
    <h2>Getting Started</h2>
    <p>To begin, we need a skeleton AngularJS application which already has all the required JavaScript and CSS to create the TV Show Premieres app. Go ahead and download this skeleton from the “download source files” button above.</p>
    <p>Once you have downloaded the files you should have a directory structure as shown below:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/figure1-skeleton-directory-structure.jpg" alt="figure1-skeleton-directory-structure" width="236" height="289" style="max-width: 100%; height: auto;"><br> <p>Looking at the directory structure and the included files you will see that we will be using Twitter Bootstrap to make our web app a little prettier, but this tutorial will not look at Twitter Bootstrap in any detail (learn more about <a href="http://www.revillwebdesign.com/twitter-bootstrap-tutorial/" rel="nofollow external" class="bo">Twitter Bootstrap</a>). Additionally, this tutorial will not be covering how to setup a new AngularJS application as the aforementioned AngularJS tutorial already covers this in detail.</p>
    <p>Upon opening <code>index.html</code>, with your browser of choice, you should see a very simple web page with just a title and some basic formatting as seen below:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/figure2-basic-web-page.jpg" alt="figure2-basic-web-page" width="600" height="179" style="max-width: 100%; height: auto;"><br> <hr>
    <h2>Loading In Our Data</h2>
    <p>The first thing we are going to need to create our TV Show app, is information about TV shows. We are going to use an API provided by Trakt.tv. Before we can get started you are going to need an API key, you can register for one <a href="http://trakt.tv/api-docs/authentication" rel="nofollow external" class="bo">on their website</a>.</p>
    <p><strong>Why use this API? Do I really have to register?</strong> We are using this API so our app will use real data and will actually provide some use once completed. Also, by using this API we do not need to go over any server side implementations within this tutorial and can focus completely on AngularJS. An extra couple of minutes to register for the API will be well worth it.</p>
    <p>Now that you have your own API key, we can utilize the Trakt API to get some information on TV shows. We are going to use one of the available API calls for this tutorial, more information on this is available <a href="http://trakt.tv/api-docs/calendar-premieres" rel="nofollow external" class="bo">in the api docs</a>. This API call will provide us with all the TV Show Premieres within a specified time frame.</p>
    <p>Open <code>mainController.js</code> and modify it to match the below code:</p>
    <pre>    app.controller("mainController", function($scope, $http){&#x000A;    &#x000A;            $scope.apiKey = "[YOUR API KEY HERE]";&#x000A;            $scope.init = function() {&#x000A;                //API requires a start date&#x000A;                var today = new Date();&#x000A;                //Create the date string and ensure leading zeros if required&#x000A;                var apiDate = today.getFullYear() + ("0" + (today.getMonth() + 1)).slice(-2) + "" + ("0" + today.getDate()).slice(-2);&#x000A;                $http.jsonp('<a href="http://api.trakt.tv/calendar/premieres.json/">http://api.trakt.tv/calendar/premieres.json/</a>' + $scope.apiKey + '/' + apiDate + '/' + 30 + '/?callback=JSON_CALLBACK').success(function(data) {&#x000A;                    console.log(data);&#x000A;                }).error(function(error) {&#x000A;    &#x000A;                });&#x000A;            };&#x000A;    &#x000A;        });&#x000A;    </pre>
    <p>If you look within the <code>index.html</code> file, for the following line:</p>
    <pre>    &lt;div class="container main-frame" ng-app="TVPremieresApp" ng-controller="mainController" ng-init="init()"&gt;&#x000A;    </pre>
    <p>You will see that the <code>ng-init</code> method is calling the <code>init</code> function, this means that the <code>init()</code> function within our <code>mainController</code> will be called after the page has been loaded.</p>
    <p>If you read the API <a href="http://trakt.tv/api-docs/calendar-premieres" rel="nofollow external" class="bo">documentation</a> for the <code>calendar/premieres</code> method you will have seen that it takes three parameters, your API key, the start date (e.g. 20130616) and the number of days.</p>
    <p>To provide all three parameters, we first need to get today’s date using JavaScripts <code>Date()</code> method and format it to the API specified date format to create the <code>apiDate</code> string. Now that we have everything we need, we can create an <code>$http.jsonp</code> call to the API method. This will allow our web app to call a URL that is not within our own domain and receive some JSON data. Ensure that <code>?callback=JSON_CALLBACK</code> is prepended onto the request URI so that our attached <code>.success</code> callback function is called on response.</p>
    <p>Within our <code>.success</code> function we then simply output the received data to the console. Open <code>index.html</code> within your browser and open the JavaScript console, you should see something like the following:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/figure3-javascript-console.jpg" alt="figure3-javascript-console" width="582" height="351" style="max-width: 100%; height: auto;"><br> <p>This demonstrates that we are successfully performing a call to the Trakt API, authenticating with our API key and receiving some JSON data. Now that we have our TV show data, we can move on to the step.</p>
    <hr>
    <h2>Displaying Our Data</h2>
    <h3>Processing the JSON Objects</h3>
    <p>Before we can display our data, we need to process and store it. As the API returns the premiere episodes grouped by date, we want to remove this grouping and just create a single array with all the premiere episodes and their associated data. Modify <code>mainController.js</code> to be as follows:</p>
    <pre>    app.controller("mainController", function($scope, $http){&#x000A;            $scope.apiKey = "[YOUR API KEY]";&#x000A;            $scope.results = [];&#x000A;            $scope.init = function() {&#x000A;                //API requires a start date&#x000A;                var today = new Date();&#x000A;                //Create the date string and ensure leading zeros if required&#x000A;                var apiDate = today.getFullYear() + ("0" + (today.getMonth() + 1)).slice(-2) + "" + ("0" + today.getDate()).slice(-2);&#x000A;                $http.jsonp('<a href="http://api.trakt.tv/calendar/premieres.json/">http://api.trakt.tv/calendar/premieres.json/</a>' + $scope.apiKey + '/' + apiDate + '/' + 30 + '/?callback=JSON_CALLBACK').success(function(data) {&#x000A;                    //As we are getting our data from an external source, we need to format the data so we can use it to our desired effect&#x000A;                    //For each day, get all the episodes&#x000A;                    angular.forEach(data, function(value, index){&#x000A;                        //The API stores the full date separately from each episode. Save it so we can use it later&#x000A;                        var date = value.date;&#x000A;                        //For each episodes, add it to the results array&#x000A;                        angular.forEach(value.episodes, function(tvshow, index){&#x000A;                            //Create a date string from the timestamp so we can filter on it based on user text input&#x000A;                            tvshow.date = date; //Attach the full date to each episode&#x000A;                            $scope.results.push(tvshow);&#x000A;                        });&#x000A;                    });&#x000A;                }).error(function(error) {&#x000A;    &#x000A;                });&#x000A;            };&#x000A;        });&#x000A;    </pre>
    <p>The above code is well commented and should be easy to follow, lets take a look at these changes. First, we declare a scope variable <code>$scope.results</code> as an array which will hold our processed results. We then use <code>angular.forEach</code> (which is similar to jQuery’s <code>$.each</code> method for those who know it) to loop through each date group and store the date in a local <code>date</code> variable.</p>
    <p>We then create another loop which loops through each of the TV shows within that date group, adds the locally stored date to the <code>tvshow</code> object and then finally adds each <code>tvshow</code> object to the <code>$scope.results</code> array. With all of this done, our <code>$scope.results</code> array will look like the following:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/figure4-formatted-tvshow-json-objects.jpg" alt="figure4-formatted-tvshow-json-objects" width="599" height="416" style="max-width: 100%; height: auto;"><br> <h3>Creating the List HTML</h3>
    <p>We now have some data we wish to display within a list, on our page. We can create some HTML with <code>ng-repeat</code> to dynamically create the list elements based on the data within <code>$scope.results</code>. Add the following HTML code within the unordered list that has the <code>episode-list</code> class in <code>index.html</code>:</p>
    <pre>    &lt;li ng-repeat="tvshow in results"&gt;&#x000A;            &lt;div class="row-fluid"&gt;&#x000A;                &lt;div class="span3"&gt;&#x000A;                    &lt;img src="{{tvshow.episode.images.screen}}" /&gt;&#x000A;                    &lt;div class="ratings"&gt;&lt;strong&gt;Ratings:&lt;/strong&gt; &lt;span class="label"&gt;&lt;i class="icon-thumbs-up"&gt;&lt;/i&gt; {{tvshow.episode.ratings.loved}}&lt;/span&gt; &lt;span class="label"&gt;&lt;i class="icon-thumbs-down"&gt;&lt;/i&gt; {{tvshow.episode.ratings.hated}}&lt;/span&gt; &lt;span class="label label-important" ng-class="{'label-success': tvshow.episode.ratings.percentage &gt;= 50}"&gt;&lt;strong&gt;%&lt;/strong&gt; {{tvshow.episode.ratings.percentage}}&lt;/div&gt;&#x000A;                &lt;/div&gt;&#x000A;                &lt;div class="span6"&gt;&#x000A;                    &lt;h3&gt;{{tvshow.show.title}}: {{tvshow.episode.title}}&lt;/h3&gt;&#x000A;                    &lt;p&gt;{{tvshow.episode.overview}}&lt;/p&gt;&#x000A;                &lt;/div&gt;&#x000A;                &lt;div class="span3"&gt;&#x000A;                    &lt;div class="fulldate pull-right label label-info"&gt;{{tvshow.date}}&lt;/div&gt;&#x000A;                    &lt;ul class="show-info"&gt;&#x000A;                        &lt;li&gt;&lt;strong&gt;On Air:&lt;/strong&gt; {{tvshow.show.air_day}} {{tvshow.show.air_time}}&lt;/li&gt;&#x000A;                        &lt;li&gt;&lt;strong&gt;Network:&lt;/strong&gt; {{tvshow.show.network}}&lt;/li&gt;&#x000A;                        &lt;li&gt;&lt;strong&gt;Season #:&lt;/strong&gt; {{tvshow.episode.season}}&lt;/li&gt;&#x000A;                        &lt;li&gt;&lt;strong&gt;Genres:&lt;/strong&gt; &lt;span class="label label-inverse genre" ng-repeat="genre in tvshow.show.genres"&gt;{{genre}}&lt;/span&gt;&lt;/li&gt;&#x000A;                    &lt;/ul&gt;&#x000A;                &lt;/div&gt;&#x000A;            &lt;/div&gt;&#x000A;        &lt;/li&gt;&#x000A;    </pre>
    <p>This HTML is simply creating a single list element with <code>ng-repeat</code>. <code>ng-repeat="tvshow in results"</code> is telling angular to repeat this list element for each object within the <code>$scope.results</code> array. Remember that we do not need to include the <code>$scope</code>, as we are within an element with a specified controller (refer to the previous tutorial for more on this).</p>
    <p>Inside the <code>li</code> element we can then reference <code>tvshow</code> as a variable which will hold all of the objects data for each of the TV shows within <code>$scope.results</code>. Below is an example of one of the objects within <code>$scope.results</code> so you can easily see how to reference each slice of data:</p>
    <pre>    {&#x000A;        "show":{&#x000A;            "title":"Agatha Christie's Marple",&#x000A;            "year":2004,&#x000A;            "url":"<a href="http://trakt.tv/show/agatha-christies-marple">http://trakt.tv/show/agatha-christies-marple</a>",&#x000A;            "first_aired":1102838400,&#x000A;            "country":"United Kingdom",&#x000A;            "overview":"Miss Marple is an elderly spinster who lives in the village of St. Mary Mead and acts as an amateur detective. Due to her long and eventful life crimes often remind her of other incidents. Although Miss Marple looks sweet, frail, and old, she fears nothing; either dead or living.",&#x000A;            "runtime":120,&#x000A;            "network":"ITV",&#x000A;            "air_day":"Monday",&#x000A;            "air_time":"9:00pm",&#x000A;            "certification":"TV-14",&#x000A;            "imdb_id":"tt1734537",&#x000A;            "tvdb_id":"78895",&#x000A;            "tvrage_id":"2515",&#x000A;            "images":{&#x000A;                "poster":"<a href="http://slurm.trakt.us/images/posters/606.jpg">http://slurm.trakt.us/images/posters/606.jpg</a>",&#x000A;                "fanart":"<a href="http://slurm.trakt.us/images/fanart/606.jpg">http://slurm.trakt.us/images/fanart/606.jpg</a>",&#x000A;                "banner":"<a href="http://slurm.trakt.us/images/banners/606.jpg">http://slurm.trakt.us/images/banners/606.jpg</a>"&#x000A;            },&#x000A;            "ratings":{&#x000A;                "percentage":91,&#x000A;                "votes":18,&#x000A;                "loved":18,&#x000A;                "hated":0&#x000A;            },&#x000A;            "genres":[&#x000A;                "Drama",&#x000A;                "Crime",&#x000A;                "Adventure"&#x000A;            ]&#x000A;        },&#x000A;        "episode":{&#x000A;            "season":6,&#x000A;            "number":1,&#x000A;            "title":"A Caribbean Mystery",&#x000A;            "overview":"\"Would you like to see a picture of a murderer?\", Jane Marple is asked by Major Palgrave whilst on a luxurious holiday in the West Indies. When she replies that she would like to hear the story, he explains. There once was a man who had a wife who tried to hang herself, but failed. Then she tried again later, and succeeded in killing herself. The man remarried to a woman who then tried to gas herself to death. She failed, but then tried again later and succeeded. Just as Major Palgrave is about to show the picture to her, he looks over her shoulder, appears startled, and changes the subject. The next morning, a servant, Victoria Johnson, finds him dead in his room. Doctor Graham concludes that the man died of heart failure; he showed all the symptoms, and had a bottle of serenite (a drug for high blood pressure) on his table.",&#x000A;            "url":"<a href="http://trakt.tv/show/agatha-christies-marple/season/6/episode/1">http://trakt.tv/show/agatha-christies-marple/season/6/episode/1</a>",&#x000A;            "first_aired":1371366000,&#x000A;            "images":{&#x000A;                "screen":"<a href="http://slurm.trakt.us/images/fanart/606-940.jpg">http://slurm.trakt.us/images/fanart/606-940.jpg</a>"&#x000A;            },&#x000A;            "ratings":{&#x000A;                "percentage":0,&#x000A;                "votes":0,&#x000A;                "loved":0,&#x000A;                "hated":0&#x000A;            }&#x000A;        },&#x000A;        "date":"2013-06-16"&#x000A;        }&#x000A;    </pre>
    <p>As an example, within the <code>li</code> element, we can get the show title by referencing <code>tvshow.show.title</code> and wrapping it in double curly brackets:<code>{{ }}</code>. With this understanding, it should be easy to see what information will be displayed for each list element. Thanks to the CSS bundled with the skeleton structure, if you save these changes and open <code>index.html</code> within your browser, you should see a nicely formatted list of TV shows with the associated information and images. This is shown in the figure below:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/figure5-formatted-show-list.jpg" alt="figure5-formatted-show-list" width="500" height="395" style="max-width: 100%; height: auto;"><br> <h3>Conditional Classes</h3>
    <p>You may or may not have noticed:</p>
    <pre>ng-class="{'label-success': tvshow.episode.ratings.percentage &gt;= 50}"</pre>
    <p>…which is attached to one of the span elements, within the ratings section, in the above HTML. <code>ng-class</code> allows us to conditionally apply classes to HTML elements. This is particularly useful here, as we can then apply a different style to the percentage <code>span</code> element depending on whether the TV show rating percentage is high or not.</p>
    <p>In the above HTML example, we want to apply the class <code>label-success</code>, which is a Twitter Bootstrap class, which will style the span to have a green background and white text. We only want to apply this class to the element if the rating percentage is greater than or equal to 50. We can do this as simply as <code>tvshow.episode.ratings.percentage &gt;= 50</code>. Take a look down the list of formatted TV shows in your browser, if any of the percentages meet this condition, they should be displayed green.</p>
    <hr>
    <h2>Creating a Search Filter</h2>
    <p>We now have a list of upcoming TV show premieres, which is great, but it doesn’t offer much in the way of functionality. We are now going to add a simple text search which will filter all of the objects within the results array.</p>
    <h3>Binding HTML Elements to Scope Variables</h3>
    <p>Firstly we need to declare a <code>$scope.filterText</code> variable within <code>mainController.js</code> as follows:</p>
    <pre>    app.controller("mainController", function($scope, $http){&#x000A;            $scope.apiKey = "[YOUR API KEY]";&#x000A;            $scope.results = [];&#x000A;            $scope.filterText = null;&#x000A;            $scope.init = function() {&#x000A;                //API requires a start date&#x000A;                var today = new Date();&#x000A;                //Create the date string and ensure leading zeros if required&#x000A;                var apiDate = today.getFullYear() + ("0" + (today.getMonth() + 1)).slice(-2) + "" + ("0" + today.getDate()).slice(-2);&#x000A;                $http.jsonp('<a href="http://api.trakt.tv/calendar/premieres.json/">http://api.trakt.tv/calendar/premieres.json/</a>' + $scope.apiKey + '/' + apiDate + '/' + 30 + '/?callback=JSON_CALLBACK').success(function(data) {&#x000A;                    //As we are getting our data from an external source, we need to format the data so we can use it to our desired affect&#x000A;                    //For each day get all the episodes&#x000A;                    angular.forEach(data, function(value, index){&#x000A;                        //The API stores the full date separately from each episode. Save it so we can use it later&#x000A;                        var date = value.date;&#x000A;                        //For each episodes add it to the results array&#x000A;                        angular.forEach(value.episodes, function(tvshow, index){&#x000A;                            //Create a date string from the timestamp so we can filter on it based on user text input&#x000A;                            tvshow.date = date; //Attach the full date to each episode&#x000A;                            $scope.results.push(tvshow);&#x000A;                        });&#x000A;                    });&#x000A;                }).error(function(error) {&#x000A;    &#x000A;                });&#x000A;            };&#x000A;        });&#x000A;    </pre>
    <p>Now we need to add a text input so that the user can actually input a search term. We then need to bind this input to the newly declared variable. Add the following HTML within the <code>div</code> which has the <code>search-box</code> class in <code>index.html</code>.</p>
    <pre>    &lt;label&gt;Filter: &lt;/label&gt;&#x000A;        &lt;input type="text" ng-model="filterText"/&gt;&#x000A;    </pre>
    <p>Here we have used <code>ng-model</code> to bind this input to the <code>$scope.filterText</code> variable we declared within our scope. Now this variable will always equal what is inputted into this search input.</p>
    <h3>Enforcing Filtering On <code>ng-repeat</code> Output</h3>
    <p>Now that we have the text to filter on, we need to add the filtering functionality to <code>ng-repeat</code>. Thanks to the built-in filter functionality of AngularJS, we do not need to write any JavaScript to do this, just modify your <code>ng-repeat</code> as follows:</p>
    <pre>    &lt;li ng-repeat="tvshow in results | filter: filterText"&gt;&#x000A;    </pre>
    <p>It’s as simple as that! We are telling AngularJS – before we output the data using <code>ng-repeat</code>, we need to apply the filter based on the filterText variable. Open <code>index.html</code> in a browser and perform a search. Assuming you searched for something that exists, you should see a selection of the results.</p>
    <hr>
    <h2>Creating a Genre Custom Filter</h2>
    <p>So, our users can now search for whatever they are wanting to watch, which is better than just a static list of TV shows. But we can take our filter functionality a little further and create a custom filter that will allow the user to select a specific genre. Once a specific genre has been selected, the <code>ng-repeat</code> should only display TV shows with the chosen genre attached.</p>
    <p>First of all, add the following HTML under the <code>filterText</code> input in <code>index.html</code> that we added previously.</p>
    <pre>    &lt;label&gt;Genre: &lt;/label&gt;&#x000A;        &lt;select ng-model="genreFilter" ng-options="label for label in availableGenres"&gt;&#x000A;            &lt;option value=""&gt;All&lt;/option&gt;&#x000A;        &lt;/select&gt;&#x000A;    </pre>
    <p>You can see from the above HTML that we have created a select input bound to a model variable called <code>genreFilter</code>. Using <code>ng-options</code> we are able to dynamically populate this select input using an array called <code>availableGenres</code>.</p>
    <p>First of all, we need to declare these scope variables. Update your <code>mainController.js</code> file to be as follows:</p>
    <pre>    app.controller("mainController", function($scope, $http){&#x000A;            $scope.apiKey = "[YOUR API KEY HERE]";&#x000A;            $scope.results = [];&#x000A;            $scope.filterText = null;&#x000A;            $scope.availableGenres = [];&#x000A;            $scope.genreFilter = null;&#x000A;            $scope.init = function() {&#x000A;                //API requires a start date&#x000A;                var today = new Date();&#x000A;                //Create the date string and ensure leading zeros if required&#x000A;                var apiDate = today.getFullYear() + ("0" + (today.getMonth() + 1)).slice(-2) + "" + ("0" + today.getDate()).slice(-2);&#x000A;                $http.jsonp('<a href="http://api.trakt.tv/calendar/premieres.json/">http://api.trakt.tv/calendar/premieres.json/</a>' + $scope.apiKey + '/' + apiDate + '/' + 30 + '/?callback=JSON_CALLBACK').success(function(data) {&#x000A;                    //As we are getting our data from an external source, we need to format the data so we can use it to our desired affect&#x000A;                    //For each day get all the episodes&#x000A;                    angular.forEach(data, function(value, index){&#x000A;                        //The API stores the full date separately from each episode. Save it so we can use it later&#x000A;                        var date = value.date;&#x000A;                        //For each episodes add it to the results array&#x000A;                        angular.forEach(value.episodes, function(tvshow, index){&#x000A;                            //Create a date string from the timestamp so we can filter on it based on user text input&#x000A;                            tvshow.date = date; //Attach the full date to each episode&#x000A;                            $scope.results.push(tvshow);&#x000A;                            //Loop through each genre for this episode&#x000A;                            angular.forEach(tvshow.show.genres, function(genre, index){&#x000A;                                //Only add to the availableGenres array if it doesn't already exist&#x000A;                                var exists = false;&#x000A;                                angular.forEach($scope.availableGenres, function(avGenre, index){&#x000A;                                    if (avGenre == genre) {&#x000A;                                        exists = true;&#x000A;                                    }&#x000A;                                });&#x000A;                                if (exists === false) {&#x000A;                                    $scope.availableGenres.push(genre);&#x000A;                                }&#x000A;                            });&#x000A;                        });&#x000A;                    });&#x000A;                }).error(function(error) {&#x000A;    &#x000A;                });&#x000A;            };&#x000A;        });&#x000A;    </pre>
    <p>It is obvious that we have now declared both <code>genreFilter</code> and <code>availableGenres</code> which we saw referenced within our HTML. We have also added some JavaScript which will populate our <code>availableGenres</code> array. Within the <code>init()</code> function, while we are processing the JSON data returned from the API, we are now doing some additional processing and adding any genres that are not already within the <code>availableGenres</code> array to this array. This will then populate the select input with any available genres.</p>
    <p>If you open <code>index.html</code> within your browser, you should see the genre select drop down populate as illustrated below:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/figure6-genre-select-drop-down.jpg" alt="figure6-genre-select-drop-down" width="600" height="216" style="max-width: 100%; height: auto;"><br> <p>When the user chooses a genre, the <code>$scope.genreFilter</code> variable will be updated to equal the selected value.</p>
    <h3>Creating the Custom Filter</h3>
    <p>As we are wanting to filter on a specific part of the TV show objects, we are going to create a custom filter function and apply it alongside the AngularJS filter within the <code>ng-repeat</code>.</p>
    <p>At the very bottom of <code>mainController.js</code>, after all of the other code, add the following JavaScript:</p>
    <pre>    app.filter('isGenre', function() {&#x000A;            return function(input, genre) {&#x000A;                if (typeof genre == 'undefined' || genre == null) {&#x000A;                    return input;&#x000A;                } else {&#x000A;                    var out = [];&#x000A;                    for (var a = 0; a &lt; input.length; a++){&#x000A;                        for (var b = 0; b &lt; input[a].show.genres.length; b++){&#x000A;                            if(input[a].show.genres[b] == genre) {&#x000A;                                out.push(input[a]);&#x000A;                            }&#x000A;                        }&#x000A;                    }&#x000A;                    return out;&#x000A;                }&#x000A;            };&#x000A;        });&#x000A;    </pre>
    <p>The above JavaScript declares a custom filter to our app called <code>isGenre</code>. The function within the filter takes two parameters, <code>input</code> and <code>genre</code>. <code>input</code> is provided by default (which we will see in a moment) and is all the data that the <code>ng-repeat</code> is processing. <code>genre</code> is a value we need to pass in. All this filter does, is take the specified genre and checks to see if each of the TV show objects within <code>input</code> have the specified genre attached to them. If an object has the specified genre, it adds it to the <code>out</code> array, which will then be returned to the <code>ng-repeat</code>. If this doesn’t quite make sense, don’t worry! It should shortly.</p>
    <h3>Applying the Custom Filter</h3>
    <p>Now that we have our customer filter available, we can add this additional filter to our ng-repeat. Modify your <code>ng-repeat</code> in <code>index.html</code> as follows:</p>
    <pre>    &lt;li ng-repeat="tvshow in results | filter: filterText | isGenre:genreFilter"&gt;&#x000A;    </pre>
    <p>This simply chains another filter onto the <code>ng-repeat</code> output. Now the output will be processed by both filters before it is displayed on the screen. As you can see we have specified our custom filter as <code>isGenre:</code> and then we are passing the scope variable <code>genreFilter</code> as a parameter, which is how we provide our customer filter with the <code>genre</code> variable we talked about earlier. Remember that AngularJS is also providing our filter with the data that the <code>ng-repeat</code> is processing as the <code>input</code> variable.</p>
    <p>OK, our custom genre filter is complete. Open <code>index.html</code> in a browser and test out the new functionality. With this filter in place, a user can easily filter out genres they are not interested in.</p>
    <hr>
    <h2>Calling Scope Functions</h2>
    <p>You may have noticed that each TV show listing also shows the genre itself. For some additional functionality, we are going to allow the user to click these genres, which will then automatically apply the genre filter for the genre they have clicked on. First of all, we need to create a scope function that the <code>ng-click</code> can call. Add the following code within the <code>mainController</code> on <code>mainController.js</code>:</p>
    <pre>    $scope.setGenreFilter = function(genre) {&#x000A;            $scope.genreFilter = genre;&#x000A;        }&#x000A;    </pre>
    <p>In the above code, this function takes a genre value and then sets the <code>$scope.genreFilter</code> to the specified value. When this happens, the genre filter select box’s value will update and the filter will be applied to the <code>ng-repeat</code> output. To trigger this function when the genre span elements are clicked, add an <code>ng-click</code> to the genre span elements within <code>index.html</code> as follows:</p>
    <pre>    &lt;span class="label label-inverse genre" ng-repeat="genre in tvshow.show.genres" ng-click="setGenreFilter(genre)"&gt;{{genre}}&lt;/span&gt;&#x000A;    </pre>
    <p>The <code>ng-click</code> calls our previously created <code>setGenreFilter</code> function and specifies a genre. Open <code>index.html</code> and try it out!</p>
    <hr>
    <h2>Custom Ordering With AngularJS</h2>
    <p>Our TV show premiere app is looking pretty good, users can easily refine the results displayed using a series of intuitive filters. To enhance this experience we are going to add some custom ordering functionality so our users will be able to choose a range of ordering options.</p>
    <p>Add the following HTML under the genre select drop down:</p>
    <pre>    &lt;label&gt;Order by: &lt;/label&gt;&#x000A;        &lt;select ng-model="orderField" ng-options="label for label in orderFields" class="input-medium"&gt;&lt;/select&gt;&#x000A;        &lt;select ng-model="orderReverse"class="input-medium"&gt;&#x000A;            &lt;option value="true"&gt;Descending&lt;/option&gt;&#x000A;            &lt;option value="false"&gt;Ascending&lt;/option&gt;&#x000A;        &lt;/select&gt;&#x000A;    </pre>
    <p>With this code added, we have two more drop downs. One to select how to order the data and another to choose the direction in which to order the data. We now need to create a function within our controller to make the order comparison. Add the following JavaScript under our <code>setGenreFilter</code> function:</p>
    <pre>    $scope.customOrder = function(tvshow) {&#x000A;            switch ($scope.orderField) {&#x000A;                case "Air Date":&#x000A;                    return tvshow.episode.first_aired;&#x000A;                    break;&#x000A;                case "Rating":&#x000A;                    return tvshow.episode.ratings.percentage;&#x000A;                    break;&#x000A;            }&#x000A;        };&#x000A;    </pre>
    <p>We also need to declare some additional scope variables:</p>
    <pre>    $scope.orderFields = ["Air Date", "Rating"];&#x000A;        $scope.orderDirections = ["Descending", "Ascending"];&#x000A;        $scope.orderField = "Air Date"; //Default order field&#x000A;        $scope.orderReverse = false;&#x000A;    </pre>
    <p>If you now open <code>index.html</code> within your browser, you should see the added drop downs populated with <strong>Air Date</strong> already selected as the default order field. This is shown in the figure below:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/06/figure7-order-drop-downs.jpg" alt="figure7-order-drop-downs" width="600" height="218" style="max-width: 100%; height: auto;"><br> <p>Finally, as we have done with our other filters, we are going to need to append this to our <code>ng-repeat</code>, update this as follows:</p>
    <pre>    &lt;li ng-repeat="tvshow in results | filter: filterText | isGenre:genreFilter | orderBy:customOrder:orderReverse"&gt;&#x000A;    </pre>
    <p>We are now applying an order-by-filter on our data in addition to the other filters. We are telling the order by to use our <code>customOrder</code> function and we are passing our <code>orderReverse</code> scope variable through as well. Open <code>index.html</code> in a browser and see the ordering in action.</p>
    <hr>
    <h2>Conclusion</h2>
    <p>AngularJS has allowed us to quickly create a detailed and functional web application with minimum effort. Utilizing AngularJS’s built-in filter functions, alongside some of our own custom code, our web application allows our users to easily filter and search through the TV show premieres.</p>
    <p>After reading this tutorial you should now be able to understand and use the following principles:</p>
    <ul>
    <li>Using <code>ng-repeat</code> to display information on screen.</li>
    <li>Binding to inputs, allowing users to search and filter <code>ng-repeat</code> output.</li>
    <li>Chaining filters on <code>ng-repeat</code> to perform multiple filtering functions.</li>
    <li>Custom ordering of data.</li>
    <li>Using events such as <code>ng-click</code> to respond to user interaction.</li>
    <li>Using <code>ng-class</code> to conditionally apply styling to page elements.</li>
    </ul>
    <p>So in conclusion, the topics covered in this tutorial should give you a strong foundation and understanding of what you can achieve when creating rich web applications in AngularJS.</p>
    </div>
]]>
</Body>
<Summary>In a previous AngularJS tutorial I covered all the basics of how to get up and running with Angular in around 30 minutes. This tutorial will expand on what was covered there by creating a simple...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/HgWFSGgF4fA/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31966/guest@my.umbc.edu/3cae869d79a6129fa2ce027820eac130/api/pixel</TrackingUrl>
<Tag>angularjs</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>Thu, 27 Jun 2013 17:01:53 -0400</PostedAt>
<EditAt>Thu, 27 Jun 2013 17:01:53 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="31964" important="false" status="posted" url="https://my3.my.umbc.edu/posts/31964">
<Title>Mobile Web Problems and How to Avoid Them</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Lessons learned from two years of collecting screenshots of poor experiences on mobile websites.</p>
    <p><a href="http://bradfrostweb.com/blog/post/mobile-web-problems/" title="Direct link to featured article" rel="nofollow external" class="bo">Direct Link to Article</a> — <a href="http://css-tricks.com/mobile-web-problems-and-how-to-avoid-them/" rel="nofollow external" class="bo">Permalink</a></p>
    <hr>
    
    <p><small><a href="http://css-tricks.com/mobile-web-problems-and-how-to-avoid-them/" rel="nofollow external" class="bo">Mobile Web Problems and How to Avoid Them</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>Lessons learned from two years of collecting screenshots of poor experiences on mobile websites.   Direct Link to Article — Permalink     Mobile Web Problems and How to Avoid Them is a post from...</Summary>
<Website>http://bradfrostweb.com/blog/post/mobile-web-problems/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/31964/guest@my.umbc.edu/760902bcdc55a81e2fdd17c9381dd830/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>link</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tricks</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 27 Jun 2013 16:56:37 -0400</PostedAt>
</NewsItem>

</News>
