<?xml version="1.0"?>
<News hasArchived="true" page="7986" pageCount="10746" pageSize="10" timestamp="Tue, 11 Aug 2026 15:52:56 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7986">
<NewsItem contentIssues="true" id="39280" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39280">
<Title>China Is Tied to Spying on European Diplomats</Title>
<Body>
<![CDATA[
    <div class="html-content">The foreign ministries of five countries were reportedly breached by Chinese hackers using emails as bait.<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%2F10%2Fworld%2Fasia%2Fchina-is-tied-to-spying-on-european-diplomats.html%3Fpartner%3Drss%26emc%3Drss&amp;t=China+Is+Tied+to+Spying+on+European+Diplomats" 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%2F10%2Fworld%2Fasia%2Fchina-is-tied-to-spying-on-european-diplomats.html%3Fpartner%3Drss%26emc%3Drss&amp;t=China+Is+Tied+to+Spying+on+European+Diplomats" 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%2F10%2Fworld%2Fasia%2Fchina-is-tied-to-spying-on-european-diplomats.html%3Fpartner%3Drss%26emc%3Drss&amp;t=China+Is+Tied+to+Spying+on+European+Diplomats" 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%2F10%2Fworld%2Fasia%2Fchina-is-tied-to-spying-on-european-diplomats.html%3Fpartner%3Drss%26emc%3Drss&amp;t=China+Is+Tied+to+Spying+on+European+Diplomats" 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%2F10%2Fworld%2Fasia%2Fchina-is-tied-to-spying-on-european-diplomats.html%3Fpartner%3Drss%26emc%3Drss&amp;t=China+Is+Tied+to+Spying+on+European+Diplomats" 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/180266081803/u/0/f/640387/c/34625/s/34a5e894/sc/39/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266081803/u/0/f/640387/c/34625/s/34a5e894/sc/39/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/180266081803/u/0/f/640387/c/34625/s/34a5e894/sc/39/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266081803/u/0/f/640387/c/34625/s/34a5e894/sc/39/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/180266081803/u/0/f/640387/c/34625/s/34a5e894/sc/39/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266081803/u/0/f/640387/c/34625/s/34a5e894/sc/39/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/180266081803/u/0/f/640387/c/34625/s/34a5e894/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266081803/u/0/f/640387/c/34625/s/34a5e894/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The foreign ministries of five countries were reportedly breached by Chinese hackers using emails as bait.      </Summary>
<Website>http://www.nytimes.com/2013/12/10/world/asia/china-is-tied-to-spying-on-european-diplomats.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39280/guest@my.umbc.edu/82c4721ef72cd402428b51a5ac742201/api/pixel</TrackingUrl>
<Tag>bulgaria</Tag>
<Tag>china</Tag>
<Tag>computer-security</Tag>
<Tag>cyberattacks-and-hackers</Tag>
<Tag>czech-republic</Tag>
<Tag>fireeye-inc</Tag>
<Tag>latvia</Tag>
<Tag>new</Tag>
<Tag>portugal</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, 10 Dec 2013 00:06:20 -0500</PostedAt>
<EditAt>Tue, 10 Dec 2013 00:06:20 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="39273" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39273">
<Title>The Many Tongues of Twitter</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>Twitter’s footprint is growing fast, although English speakers in the U.S. remain the largest demographic. The trick now is to turn its global presence into advertising dollars.</p></div>
]]>
</Body>
<Summary>Twitter’s footprint is growing fast, although English speakers in the U.S. remain the largest demographic. The trick now is to turn its global presence into advertising dollars.</Summary>
<Website>http://www.technologyreview.com/graphiti/522376/the-many-tongues-of-twitter/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39273/guest@my.umbc.edu/01146645d6aaf46b719281eb1795da23/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</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>Tue, 10 Dec 2013 00:00:00 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="39272" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39272">
<Title>Frozen Elephant Classic Registration</Title>
<Tagline>Get a head start on registration before the public!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">Hello everyone!<div><br></div>
    <div><ul><li><span>The semester is quickly coming to an end, but that means it's time to play indoor and start conditioning on your own. We are here to help facilitate! For those who aren't aware, Booya &amp; Shazam host an annual indoor tournament in the RAC. It'll be <strong>January 11th, 8:30am - 4:30pm.</strong></span></li></ul></div>
    <div><ul><li><span>We are opening registration to you guys early, so sign up asap because all spots will be full, no doubt. </span></li></ul></div>
    <div><ul><li><span>In addition, we are going to need a handful of guys &amp; girls (~6) who are event staff (and won't be playing). If you'd like to help out, please let us know in the comments below (join Thomas &amp; Dan doing admin stuff!).</span></li></ul></div>
    <div><ul><li>
    <span>To register,</span><a href="https://docs.google.com/a/umbc.edu/forms/d/1tgZLw3mFMDJn6YoB-VPxv8XXub7E0aLWEX7cqW2Ui2M/viewform" rel="nofollow external" class="bo"> fill out this survey</a><span>!!!!!</span>
    </li></ul></div>
    <div><br></div>
    <div>Good luck on finals,</div>
    <div><br></div>
    <div>- Your beautiful Booya admins</div>
    </div>
]]>
</Body>
<Summary>Hello everyone!      The semester is quickly coming to an end, but that means it's time to play indoor and start conditioning on your own. We are here to help facilitate! For those who aren't...</Summary>
<Website>https://docs.google.com/a/umbc.edu/forms/d/1tgZLw3mFMDJn6YoB-VPxv8XXub7E0aLWEX7cqW2Ui2M/viewform</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39272/guest@my.umbc.edu/c97efccaf678196fa41d11fd38ed0421/api/pixel</TrackingUrl>
<Group token="retired-70">UMBC Men's Ultimate</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-70</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/xsmall.png?1283625337</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/original.png?1283625337</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/xxlarge.png?1283625337</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/xlarge.png?1283625337</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/large.png?1283625337</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/medium.png?1283625337</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/small.png?1283625337</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/xsmall.png?1283625337</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/070/032dd17b77fab7d51a476c5ff2b5659c/xxsmall.png?1283625337</AvatarUrl>
<Sponsor>Booya Men's Ultimate</Sponsor>
<PawCount>0</PawCount>
<CommentCount>1</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 09 Dec 2013 23:09:51 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39281" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39281">
<Title>If a Story Is Viral, Truth May Be Taking a Beating</Title>
<Body>
<![CDATA[
    <div class="html-content">People post on Twitter or write stories for online news organizations like The Huffington Post or Gawker that spread quickly on the web as if factual, when they really aren’t.<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%2F10%2Fbusiness%2Fmedia%2Fif-a-story-is-viral-truth-may-be-taking-a-beating.html%3Fpartner%3Drss%26emc%3Drss&amp;t=If+a+Story+Is+Viral%2C+Truth+May+Be+Taking+a+Beating" 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%2F10%2Fbusiness%2Fmedia%2Fif-a-story-is-viral-truth-may-be-taking-a-beating.html%3Fpartner%3Drss%26emc%3Drss&amp;t=If+a+Story+Is+Viral%2C+Truth+May+Be+Taking+a+Beating" 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%2F10%2Fbusiness%2Fmedia%2Fif-a-story-is-viral-truth-may-be-taking-a-beating.html%3Fpartner%3Drss%26emc%3Drss&amp;t=If+a+Story+Is+Viral%2C+Truth+May+Be+Taking+a+Beating" 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%2F10%2Fbusiness%2Fmedia%2Fif-a-story-is-viral-truth-may-be-taking-a-beating.html%3Fpartner%3Drss%26emc%3Drss&amp;t=If+a+Story+Is+Viral%2C+Truth+May+Be+Taking+a+Beating" 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%2F10%2Fbusiness%2Fmedia%2Fif-a-story-is-viral-truth-may-be-taking-a-beating.html%3Fpartner%3Drss%26emc%3Drss&amp;t=If+a+Story+Is+Viral%2C+Truth+May+Be+Taking+a+Beating" 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/180266081801/u/0/f/640387/c/34625/s/34a5e8a4/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266081801/u/0/f/640387/c/34625/s/34a5e8a4/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/180266081801/u/0/f/640387/c/34625/s/34a5e8a4/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266081801/u/0/f/640387/c/34625/s/34a5e8a4/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/180266081801/u/0/f/640387/c/34625/s/34a5e8a4/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266081801/u/0/f/640387/c/34625/s/34a5e8a4/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/180266081801/u/0/f/640387/c/34625/s/34a5e8a4/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266081801/u/0/f/640387/c/34625/s/34a5e8a4/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>People post on Twitter or write stories for online news organizations like The Huffington Post or Gawker that spread quickly on the web as if factual, when they really aren’t.      </Summary>
<Website>http://www.nytimes.com/2013/12/10/business/media/if-a-story-is-viral-truth-may-be-taking-a-beating.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39281/guest@my.umbc.edu/8f72900f0c64548f3d2b8374ba9e7cad/api/pixel</TrackingUrl>
<Tag>amazon-com-inc-amzn-nasdaq</Tag>
<Tag>buzzfeed-inc</Tag>
<Tag>cbs-corporation-cbs-nyse</Tag>
<Tag>elan-corporation-plc-eln-nyse</Tag>
<Tag>gawker-com</Tag>
<Tag>mashable-inc</Tag>
<Tag>new</Tag>
<Tag>news-and-news-media</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>Mon, 09 Dec 2013 20:16:43 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39271" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39271">
<Title>Bits Blog: Today&#8217;s Scuttlebot: Protesting Google&#8217;s Shuttle, and Going Inside Samsung&#8217;s Testing Labs</Title>
<Body>
<![CDATA[
    <div class="html-content">Monday’s highlights from around the web include a protest over the technology industry’s impact on San Francisco, and the controversy surrounding a hoax altercation that ensued. Plus, an inside look at how Samsung tortures its devices.<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%2F09%2Ftodays-scuttlebot-protesting-googles-shuttle-and-going-inside-samsungs-testing-labs%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Protesting+Google%E2%80%99s+Shuttle%2C+and+Going+Inside+Samsung%E2%80%99s+Testing+Labs" 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%2F09%2Ftodays-scuttlebot-protesting-googles-shuttle-and-going-inside-samsungs-testing-labs%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Protesting+Google%E2%80%99s+Shuttle%2C+and+Going+Inside+Samsung%E2%80%99s+Testing+Labs" 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%2F09%2Ftodays-scuttlebot-protesting-googles-shuttle-and-going-inside-samsungs-testing-labs%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Protesting+Google%E2%80%99s+Shuttle%2C+and+Going+Inside+Samsung%E2%80%99s+Testing+Labs" 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%2F09%2Ftodays-scuttlebot-protesting-googles-shuttle-and-going-inside-samsungs-testing-labs%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Protesting+Google%E2%80%99s+Shuttle%2C+and+Going+Inside+Samsung%E2%80%99s+Testing+Labs" 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%2F09%2Ftodays-scuttlebot-protesting-googles-shuttle-and-going-inside-samsungs-testing-labs%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Today%E2%80%99s+Scuttlebot%3A+Protesting+Google%E2%80%99s+Shuttle%2C+and+Going+Inside+Samsung%E2%80%99s+Testing+Labs" 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/180266035989/u/0/f/640387/c/34625/s/349f939f/sc/21/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266035989/u/0/f/640387/c/34625/s/349f939f/sc/21/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/180266035989/u/0/f/640387/c/34625/s/349f939f/sc/21/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266035989/u/0/f/640387/c/34625/s/349f939f/sc/21/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/180266035989/u/0/f/640387/c/34625/s/349f939f/sc/21/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266035989/u/0/f/640387/c/34625/s/349f939f/sc/21/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/180266035989/u/0/f/640387/c/34625/s/349f939f/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180266035989/u/0/f/640387/c/34625/s/349f939f/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Monday’s highlights from around the web include a protest over the technology industry’s impact on San Francisco, and the controversy surrounding a hoax altercation that ensued. Plus, an inside...</Summary>
<Website>http://bits.blogs.nytimes.com/2013/12/09/todays-scuttlebot-protesting-googles-shuttle-and-going-inside-samsungs-testing-labs/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39271/guest@my.umbc.edu/57e1edf663c4743d37fb7758b656ae11/api/pixel</TrackingUrl>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 09 Dec 2013 18:15:43 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39269" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39269">
<Title>Learn CSS Frameworks on Treehouse</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Our new course on CSS frameworks was just released! In <a href="http://teamtreehouse.com/library/framework-basics" rel="nofollow external" class="bo">Framework Basics</a>, you’ll learn how to build websites using two of the most widely used Frameworks in the industry: Bootstrap and Foundation.</p>
    <p>First, you’ll build a prototype using each framework’s common CSS features, components, and JavaScript plugins. Then, put everything learned about Bootstrap and Foundation into practice by building a simple marketing website for the Ribbit iOS and Android app.</p>
    <p>By the end of the course, you’ll have all the tools necessary to build a website or app of any size using a CSS framework. You’ll also understand how frameworks can be useful when used properly, and which one might be best suited for your project.</p>
    <p><a href="http://teamtreehouse.com/library/framework-basics" rel="nofollow external" class="bo">Framework Basics</a></p>
    <hr>
    <p><strong>Edit:</strong> A new stage titled “What’s New in Foundation 5″ is set to be released early January!</p>
    <p>The post <a href="http://blog.teamtreehouse.com/learn-front-end-frameworks-treehouse" rel="nofollow external" class="bo">Learn CSS Frameworks on Treehouse</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>Our new course on CSS frameworks was just released! In Framework Basics, you’ll learn how to build websites using two of the most widely used Frameworks in the industry: Bootstrap and Foundation....</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/3YLTH-CEBiM/learn-front-end-frameworks-treehouse</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39269/guest@my.umbc.edu/761e11bf98f3d7352ad82d01aed4b222/api/pixel</TrackingUrl>
<Tag>android</Tag>
<Tag>bootstrap</Tag>
<Tag>css</Tag>
<Tag>css-frameworks</Tag>
<Tag>css3</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>foundation</Tag>
<Tag>front-end-framework</Tag>
<Tag>html</Tag>
<Tag>ios</Tag>
<Tag>javascript</Tag>
<Tag>learn-to-code</Tag>
<Tag>make-a-website</Tag>
<Tag>responsive</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>Mon, 09 Dec 2013 17:51:39 -0500</PostedAt>
<EditAt>Mon, 09 Dec 2013 17:51:39 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="39270" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39270">
<Title>Why You Should Use Continuous Integration and Continuous Deployment</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><em>The following is a guest post by Florian Motlik. Florian is CTO of <a href="https://www.codeship.io" rel="nofollow external" class="bo">Codeship</a>, a hosted Continuous Integration and Continuous Deployment platform. What the heck is that, you might ask? It's kind of a philosophy and toolset for working on websites. That is perhaps a bit too simplified, so I'll let Florian explain.</em></p>
    <p></p>
    <p>A great development workflow will make your good developers great, and your great developers exceptional. A bad workflow will take your best engineers productivity down to a junior level and make wish he worked elsewhere. </p>
    <p>It is critically important for every team and especially the leaders of those teams to get their development workflow in order. Two best practices that have gained a lot of traction over the last few years are Continuous Integration and Continuous Deployment. Here's some quick definitions.</p>
    <p><strong>Continuous Integration</strong> is the practice of testing each change done to your codebase automatically and as early as possible.</p>
    <p><strong>Continuous Deployment</strong> follows the testing that happens during Continuous Integration and pushes changes to a staging or production system. This makes sure a version of your code is accessible at all times.</p>
    <p>First, we will take a close look at Continuous Integration and show you how to get started with testing. Then we will move on to Continuous Deployment which is the next logical step. </p>
    <p>With both in place, your development team will be orders of magnitude more efficient.</p>
    <h3>Continuous Integration</h3>
    <p>Automation is a cornerstone of a great development workflow. Every task that can be done by a machine should be. Automation gives you the time to focus. Testing is one such task. </p>
    <p>Through testing, you can be sure that the most important steps your customers will take through your system are working, regardless of the changes you make. This gives you the <em>confidence</em> to experiment, implement new features, and ship updates quickly.</p>
    <h4>Start testing at the top</h4>
    <p>Good testing begins with viewing the app from a user’s perspective. What are the typical workflows? What features and steps do users go through often?</p>
    <p>Then start testing with those in mind. Use tools like <a href="http://www.seleniumhq.org/" rel="nofollow external" class="bo">Selenium</a> or <a href="http://phantomjs.org/" rel="nofollow external" class="bo">PhantomJS</a> to make sure those important workflows work.</p>
    <p>A great way to determine the most critical workflows is by getting everyone in your team to write down a list of them and then combine those lists. You can <a href="http://blog.codeship.io/2013/03/15/testing-top-to-bottom.html" rel="nofollow external" class="bo">read an in-depth guide</a> to this technique in one of our blog posts.</p>
    <p>Here is a list of tools that you can use to start testing UI:</p>
    <ul>
    <li>
    <a href="http://pivotal.github.io/jasmine/" rel="nofollow external" class="bo">Jasmine</a> (JavaScript)</li>
    <li>
    <a href="http://www.seleniumhq.org/" rel="nofollow external" class="bo">Selenium</a> (Frontend Testing)</li>
    <li>
    <a href="http://casperjs.org/" rel="nofollow external" class="bo">CasperJS</a> (Frontend Testing)</li>
    <li>
    <a href="http://cukes.info/" rel="nofollow external" class="bo">Cucumber</a> or <a href="https://github.com/gabrielfalcao/lettuce" rel="nofollow external" class="bo">Lettuce</a> (Behaviour Driven Testing for Ruby and Python)</li>
    </ul>
    <p>From this strong base of tests that make sure the workflows are working, you can go deeper and start unit testing different parts of your site. But beware: Your customers want your UI to work, so make sure it does with every change!</p>
    <p>With all those tools in hand, the single most important step you can take for testing is getting started. It pays off immediately, and not just from a tech perspective. You can read about the <a href="http://blog.codeship.io/2013/04/11/a-business-case-for-continuous-integration.html" rel="nofollow external" class="bo">business advantages of Continuous Integration</a> in this blog post by Joe Green.</p>
    <h4>Run your tests continuously</h4>
    <p>Humans make mistakes. Sometimes people consider a change so small it can’t possibly break the app, so they don’t run tests. Then your product goes down and nobody knows why.<br>
    Automated tests can only show their true power when you run them continuously and for <em>every</em> change. They have to be run on an automated and separate system to prevent the <em>‘It works on my machine’</em> syndrome. Only if the Continuous Integration infrastructure tells you the tests pass, the tests pass. </p>
    <p>The advantage of running all tests immediately for every change is that you know right away if something broke. Consider working on a 2 week sprint. On day two of the sprint, one of your developers changes something that breaks a test. If you don’t continually run all of your tests, there is a chance nobody detects the problem. People keep working, and at the end of the sprint, you run the whole test suite again. The test fails. It now has been 2 weeks since the breaking change was committed. Finding the change that broke the tests is incredibly hard, as there now have been a lot of commits since then.</p>
    <p>Lots of teams are on way longer cycles than 2 weeks. This is incredibly wasteful and can be easily prevented by running all your tests every time one of your developers pushes code to the repository. <strong>Any failures can be fixed right away.</strong></p>
    <p>Continuous Integration is the first, but very important step in Continuous Deployment.</p>
    <p>If you'd like to learn more about it, Martin Fowler has released a great and very in-depth article about Continuous Integration <a href="http://martinfowler.com/articles/continuousIntegration.html" rel="nofollow external" class="bo">on his blog</a></p>
    <h3>Continuous Deployment</h3>
    <p>Code rots if it doesn’t run somewhere. External dependencies are updated, server packages installed, API’s change or operating systems replaced. Often we do not have the ability to control every part of our infrastructure. We rely on other products and companies to maintain parts of our stack. All of these changes can break your app without you realizing it.</p>
    <p>This is why Continuous Deployment is incredibly important. Whenever the main development branch in your repository passes all the tests, you should push your code at least into a staging environment or in the best case into production. Your development or QA team can then review the latest version of your application and give feedback. Furthermore you can run tests against that staging system to make sure it works in a production-like environment.</p>
    <p>This helps you find problems early and fix them while it is still cheap. An important concept to understand when starting with Continuous Deployment are deployment pipelines.</p>
    <h4>Deployment Pipelines</h4>
    <p>A deployment pipeline defines all steps necessary to go from your codebase to the production website. Automating these steps is crucial to have fast deployments. But often, deployment pipelines also include manual steps, like a product manager signing off on a new release.</p>
    <p>Deployment pipelines have to be easy to follow and replicate. This allows you to push new changes regularly. Especially when you need to ship a fix, predefined steps can save you from bringing more harm to your site.</p>
    <p>Once you set up a Deployment Pipeline and automate the steps, you are in a position to ship small changes quickly, get feedback from your customers, and iterate on your product. This is a major competitive advantage to other companies who need a long time to react to customer feedback. Intercom did a <a href="http://insideintercom.io/shipping-is-your-companys-heartbeat/" rel="nofollow external" class="bo">great blog post about this.</a></p>
    <p>It’s amazing how much lower the cost of bringing a new software product to market has gotten in last couple of years. It has never been easier or cheaper to build great software. This levels the playing field between you and your competition. You need to ship new features faster than your competition while delivering better and stable long term quality. Continuous Deployment is one of the techniques that will help you to get there.</p>
    <h4>How can I get started?</h4>
    <p>After interviews with dozens of companies and the feedback from thousands of developers using our product we’ve identified several steps you can take to get started with Continuous Deployment.</p>
    <h5>Test test test, but be smart about it</h5>
    <p>Testing is the first step that needs to be taken. You need to get to a point where you can change almost any part of your system and be sure you didn’t break any other feature because your tests will catch those errors. Once you are at this point, it liberates you from having to think about impacts this change might have. You can now experiment with your product and iterate to build exactly what your customers want and pay for. </p>
    <p>Tests are not there to make your developers happy. They are there to build a stable and high quality product for your users. They are a tool to keep your users happy and introduce changes without destroying their experience. Building a product without properly and automatically testing (as your users would use it) means working with the hands tied behind your back. You might get new features out there, but you will never be as fast and good as you could be.</p>
    <p>Testing is the basis on which Continuous Deployment is built. <a href="http://blog.codeship.io/2013/04/16/tests-make-software.html" rel="nofollow external" class="bo">Tests make software</a> as Clemens, one of our developers, explained in his blog post.</p>
    <h5>Example</h5>
    <p><a href="https://gist.github.com/flomotlik/5113098#file-translatetest-coffee" rel="nofollow external" class="bo">This script</a> tests Google Translate to make sure it translates <strong>"good morning"</strong> from German to English:</p>
    <pre><code>#Run with casperjs test translate.coffee&#x000A;     &#x000A;    casper.start '<a href="http://translate.google.com/">http://translate.google.com/</a>', -&gt;&#x000A;      @.sendKeys('#source', 'Guten Tag');&#x000A;      @.then -&gt;&#x000A;        @.click '#gt-submit'&#x000A;      @.waitForText('Good day')&#x000A;      @.then -&gt;&#x000A;        @.test.assertSelectorHasText '#result_box', 'Good day'&#x000A;      @.then -&gt;&#x000A;        @.capture 'output.png'&#x000A;     &#x000A;    casper.run -&gt;&#x000A;      @.test.done(1)</code></pre>
    <p><a href="http://casperjs.org/" rel="nofollow external" class="bo">CasperJS</a> helps you to start testing your application quickly, and it will scale up to test more complex scenarios as you need.</p>
    <h5>Automate Deployment</h5>
    <p>Every step in your deployment should be automated. Once set up, you should never have to think about which steps need to be taken. Every choice and every manual task leads to possible mistakes, so you simply do it less often. By automating every part of your deployment you can push new features, but more importantly, push fixes very quickly. Continuous Deployment works because of automation, so don’t skip this step.</p>
    <h5>Automate Rollback</h5>
    <p>When pushing quickly you also want to be able to go back to an earlier state easily. Otherwise you won’t feel safe enough to do as regularly as you should be.</p>
    <p>Automated Rollback includes your codebase as well as your database. Make sure you regularly backup your database and use those backups to recreate your system on test machines. If you don’t regularly restore your backups you can’t be sure they will work when you desperately need them.</p>
    <h5>Deploy to Staging</h5>
    <p>Create a staging environment and push your master branch or main line of development into that Staging application any time changes are made. This Staging application is your first line of defense and helps to review all changes before going into production. You can even run automated tests against Staging to make sure it works as expected.</p>
    <h5>Use your staging environment</h5>
    <p>If you use your product in your daily work, use your Staging and not your Production server. As you push changes continuously to Staging, you will see first hand when something is broken as it immediately impacts your team. "Eating your own dog food" makes all of your developers aware when the quality drops.</p>
    <h5>Automatically deploy to Production</h5>
    <p>As a final step, continuously deploy to your Production environment. This will truly change the way your organization works. There will be no more fear in changing your site. This means you can iterate quickly on new features, but if you ship a bug, you can quickly ship a fix as well. You are not tied to arbitrary cycles that slow down your team.</p>
    <h3>Conclusions</h3>
    <p>Moving to Continuous Deployment will change your development dramatically. It will make you more productive and lead to a more stable and better product. There are steps like automated testing that you need to get started with first. Automated testing is not a tool to build better software, but a process to build a better product for your users. Once set up, you can then reap the benefits of deploying new versions several times a day. </p>
    <p>Please let us know if any questions come up or if there is anything else we can help with either here in the comments or send us a tweet to <a href="https://www.twitter.com/codeship" rel="nofollow external" class="bo">@codeship </a>. We’ve also recently released a free eBook that walks you through our development workflows and dives deeper into Continuous Deployment. <a href="http://ebooks.codeship.io/efficiency-in-development-workflows-by-codeship" rel="nofollow external" class="bo">You can grab the book here.</a></p>
    <p>Ship long and prosper!</p>
    <h3>More Information</h3>
    <ul>
    <li>
    <a href="http://martinfowler.com/articles/continuousIntegration.html" rel="nofollow external" class="bo">Introduction to Continuous Integration</a> by Martin Fowler</li>
    <li>
    <a href="http://www.startuplessonslearned.com/2009/06/why-continuous-deployment.html" rel="nofollow external" class="bo">Why Continuous Deployment</a> by Eric Ries</li>
    <li>
    <a href="http://continuousdelivery.com/" rel="nofollow external" class="bo">Continuous Delivery</a> by Jez Humble</li>
    <li><a href="http://blog.codeship.io/2013/04/11/a-business-case-for-continuous-integration.html" rel="nofollow external" class="bo">A Business Case for Continuous Integration</a></li>
    <li><a href="http://blog.codeship.io/2013/03/15/Testing-top-to-bottom.html" rel="nofollow external" class="bo">How To Start With Testing From Top To Bottom</a></li>
    <li><a href="http://blog.codeship.io/2013/03/07/Smoke-Testing-with-Casperjs.html" rel="nofollow external" class="bo">Start Testing Your Website With CasperJS</a></li>
    </ul>
    <hr>
    
    <p><small><a href="http://css-tricks.com/continuous-integration-continuous-deployment/" rel="nofollow external" class="bo">Why You Should Use Continuous Integration and Continuous Deployment</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>The following is a guest post by Florian Motlik. Florian is CTO of Codeship, a hosted Continuous Integration and Continuous Deployment platform. What the heck is that, you might ask? It's kind of...</Summary>
<Website>http://css-tricks.com/continuous-integration-continuous-deployment/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39270/guest@my.umbc.edu/0dbbae94292a88d91dcc49fb034ac29f/api/pixel</TrackingUrl>
<Tag>article</Tag>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tricks</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 09 Dec 2013 17:44:58 -0500</PostedAt>
<EditAt>Mon, 09 Dec 2013 17:44:58 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="39268" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39268">
<Title>Support Local Schools during Finals Week (12/16-12/19)</Title>
<Tagline>Share your passion for learning with others</Tagline>
<Body>
<![CDATA[
    <div class="html-content">A few local schools seek extra help during the week of finals to bring UMBC students' passion about learning and science to the classroom of some elementary and middle school students.   Consider the unique opportunities below.  <br><br><strong><u>OPTION #1</u></strong><br><br>The Thursday, 12/12 Game Day at Lakeland Elementary Middle School was cancelled.  However, extra help is needed the following week, Monday, Dec. 16th-Thursday, 12/19, 3:00-6:00pm for the UMBC STEM Initiative (USI) at Lakeland Elementary Middle School.  This is a partnership with the Sherman STEM Scholars Program to support out-of-school activities for 1st-4th graders.   Lakeland  is about 15 minutes from campus in South Baltimore.  UMBC students can volunteer for one day or the full four days.  The goal for this week is to build a satellite, supported by educational curriculum from NASA's BEST (<a href="http://www.nasa.gov/audience/foreducators/best/">http://www.nasa.gov/audience/foreducators/best/</a>).<br><br>If you are interested, email Lori Hardesty at <a href="lhardesty@umbc.edu" rel="nofollow external" class="bo">lhardesty@umbc.edu</a>.  Transportation may be provided.  <br><br><br><br><u><strong>OPTION #2 (From Ben Davis, a former Shriver Floor member and France &amp; Merrick Fellow)</strong></u><br><br>Hello All,<br><br>My name is Ben Davis, class of 2010 from UMBC and a Sherman Scholar. I am currently teaching 6th grade science at KIPP Middle school in Baltimore City. This past semester my students have been learning about the human body and their respective body systems. As their cumulative final, they will be performing a comparative anatomy dissection of a dogfish shark. I am seeking dedicated volunteers to assist the students with safety, dissection skills. and content based knowledge of anatomy and physiology. The dissection will take place on 12/19/2013 from 8am to 11am and/or 2:30-3:45pm.<br><br>Please email me at <a href="bdavis4@umbc.edu" rel="nofollow external" class="bo">bdavis4@umbc.edu</a> if you are interested. <br>
    </div>
]]>
</Body>
<Summary>A few local schools seek extra help during the week of finals to bring UMBC students' passion about learning and science to the classroom of some elementary and middle school students.   Consider...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39268/guest@my.umbc.edu/ce89896b435767ce2e83004bf0010924/api/pixel</TrackingUrl>
<Tag>learning</Tag>
<Tag>passion</Tag>
<Tag>school</Tag>
<Tag>students</Tag>
<Group token="shriver">The Shriver Center</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/shriver</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xsmall.png?1441293069</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/original.jpg?1441293069</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xxlarge.png?1441293069</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xlarge.png?1441293069</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/large.png?1441293069</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/medium.png?1441293069</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/small.png?1441293069</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xsmall.png?1441293069</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/008/0bfad113286cf6b1bc6dedbdbfc7e5ef/xxsmall.png?1441293069</AvatarUrl>
<Sponsor>Intern, Co-op, Research &amp; Service-Learning</Sponsor>
<PawCount>1</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Mon, 09 Dec 2013 16:20:33 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39266" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39266">
<Title>AbsurdJS or Why I Wrote My Own CSS Preprocessor</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=36003&amp;c=1451251244" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=36003&amp;c=1451251244" alt="" style="max-width: 100%; height: auto;"></a><p>As a front-end developer, I’m writing a lot of CSS and using pure CSS is not the most efficient way nowadays. CSS preprocessors are something which have helped me a lot. My first impression was that I finally found the perfect tool. These have a bunch of features, great support, free resources and so on. This is all true and it still applies, but after several projects, I realized that the world is not so perfect. There are two main CSS preprocessors – <a href="http://lesscss.org/" rel="nofollow external" class="bo">LESS</a> and <a href="http://sass-lang.com/" rel="nofollow external" class="bo">SASS</a>. There are some others, but I have experience with only these two. In the first part of this article I’ll share with you what I don’t like about preprocessors and then in the second part I’ll show you how I managed to solve most of the problems that I had.</p>
    <p></p>
    <hr>
    <h2>The Problems</h2>
    <h3>Setup</h3>
    <p>No matter which CSS preprocessor is involved, there is always setup required, like, you can’t just start typing <code>.less</code> or <code>.sass</code> files and expect to get the <code>.css</code> file. LESS requires <a href="http://nodejs.org/" rel="nofollow external" class="bo">NodeJS</a> and SASS Ruby. At the moment, I’m working mostly on HTML/CSS/JavaScript/NodeJS applications. So, LESS seems like a better option, because I don’t need to install additional software. You know, adding one more thing to your ecosystem means more time for maintenance. Also, not only do you need the required tool, but all of your colleagues should now integrate the new instrument as well.</p>
    <p>Firstly, I chose LESS because I already had NodeJS installed. It played well with <a href="http://gruntjs.com/" rel="nofollow external" class="bo">Grunt</a> and I successfully finished two projects with that setup. After that, I started reading about SASS. I was <a href="http://davidwalsh.name/starting-css" rel="nofollow external" class="bo">interested</a> in <a href="https://github.com/stubbornella/oocss/wiki" rel="nofollow external" class="bo">OOCSS</a>, <a href="http://bradfrostweb.com/blog/post/atomic-web-design/" rel="nofollow external" class="bo">Atomic design</a> and I wanted to build a solid CSS architecture. Very soon I switched to SASS, because it gave me better possibilities. Of course I (and my colleagues too) had to install Ruby.</p>
    <h3>Output</h3>
    <p>A lot of developers don’t check the produced CSS. I mean, you may have really good looking SASS files, but what’s used in the end is the compiled <code>.css</code> file. If it is not optimized and its file size is high, then you have a problem. There are few things which I don’t like in both preprocessors.</p>
    <p>Let’s say that we have the following code:</p>
    <pre>// LESS or SASS&#x000A;    p {&#x000A;        font-size: 20px;&#x000A;    }&#x000A;    p {&#x000A;        padding: 20px;&#x000A;    }&#x000A;    </pre>
    <p>Don’t you think that this should be compiled to:</p>
    <pre>p {&#x000A;        font-size: 20px;&#x000A;        padding: 20px;&#x000A;    }&#x000A;    </pre>
    <p>Neither LESS nor SASS works like that. They just leave your styles as you type them. This could lead to code duplication. What if I have complex architecture with several layers and every layer adds something to the paragraph. There will be several definitions, which are not exactly needed. You may even have the following situation:</p>
    <pre>p {&#x000A;        font-size: 20px;&#x000A;    }&#x000A;    p {&#x000A;        font-size: 30px;&#x000A;    }&#x000A;    </pre>
    <p>The correct code at the end should be only the following:</p>
    <pre>p {&#x000A;        font-size: 30px;&#x000A;    }&#x000A;    </pre>
    <p>I now know that the browser will take care and will find out the right font size. But, isn’t it better to save those operations. I’m not sure that this will affect the performance of your page, but it affects the readability for sure.</p>
    <p>Combining selectors which share the same styles is a good thing. As far as I know, LESS doesn’t do this. Let’s say that we have a mixin and we want to apply it to two classes.</p>
    <pre>.reset() {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;    }&#x000A;    .header {&#x000A;        .reset();&#x000A;    }&#x000A;    .footer {&#x000A;        .reset();&#x000A;    }&#x000A;    </pre>
    <p>And the result is:</p>
    <pre>.header {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;    }&#x000A;    .footer {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;    }&#x000A;    </pre>
    <p>So, these two classes have the same styles and they could be combined into one definition.</p>
    <pre>.header, .footer {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;    }&#x000A;    </pre>
    <p>I was <a href="http://stackoverflow.com/questions/18350373/few-css-properties-and-their-parsing-perfomance" rel="nofollow external" class="bo">wondering</a> if this is actual performance optimization, and I didn’t find an accurate answer, but it looks like a good thing. SASS has something called <code>place holders</code>. It’s used exactly for such situations. For example:</p>
    <pre>%reset {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;    }&#x000A;    .header {&#x000A;        @extend %reset;&#x000A;    }&#x000A;    .footer {&#x000A;        @extend %reset;&#x000A;    }&#x000A;    </pre>
    <p>The code above produces exactly what I wanted. The problem is that if I use too many place holders I may end up with a lot of style definitions, because the preprocessor thinks that I have something to combine.</p>
    <pre>%reset {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;    }&#x000A;    %bordered {&#x000A;        border: solid 1px #000;&#x000A;    }&#x000A;    %box {&#x000A;        display: block;&#x000A;        padding: 10px;&#x000A;    }&#x000A;    .header {&#x000A;        @extend %reset;&#x000A;        @extend %bordered;&#x000A;        @extend %box;&#x000A;    }&#x000A;    </pre>
    <p>There are three place holders. The <code>.header</code> class extends them all and the final compiled CSS looks like this:</p>
    <pre>.header {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;    }&#x000A;    .header {&#x000A;        border: solid 1px #000;&#x000A;    }&#x000A;    .header {&#x000A;        display: block;&#x000A;        padding: 10px;&#x000A;    }&#x000A;    </pre>
    <p>It looks wrong, doesn’t it? There should be only one style definition and only one <code>padding</code> property.</p>
    <pre>.header {&#x000A;        padding: 10px;&#x000A;        margin: 0;&#x000A;        border: solid 1px #000;&#x000A;        display: block;&#x000A;    }&#x000A;    </pre>
    <p>Of course, there are <a href="http://bem.info/tools/csso/" rel="nofollow external" class="bo">tools</a> which may solve this, having the compiled CSS. But as I said, I prefer to use as less libraries as possible.</p>
    <h3>Syntax Limitation</h3>
    <p>While I was working on <a href="http://davidwalsh.name/starting-css#organiccss" rel="nofollow external" class="bo">OrganicCSS</a>, I met a lot of limitations. In general, I wanted to write CSS as I write JavaScript. I mean, I had some ideas about complex architecture, but I wasn’t able to achieve them, because the language which I was working with was kinda primitive. For example, let’s say that I need a mixin which styles my elements. I want to pass a theme and border type. Here is how this should look in LESS:</p>
    <pre>.theme-dark() {&#x000A;       color: #FFF;&#x000A;       background: #000;&#x000A;    }&#x000A;    .theme-light() {&#x000A;       color: #000;&#x000A;       background: #FFF;&#x000A;    }&#x000A;    .component(@theme, @border) {&#x000A;       border: "@{border} 1px #F00";&#x000A;       .theme-@{theme}();&#x000A;    }&#x000A;    .header {&#x000A;       .component("dark", "dotted");&#x000A;    }&#x000A;    </pre>
    <p>Of course I’ll have a lot of themes and they should also be mixins. So, the variable interpolation works for the border property, but not for the mixin names. That’s a simple one, but it is currently not possible, or at least I don’t know if it is fixed. If you try to compile the above code you will get <code>Syntax Error on line 11</code>.</p>
    <p>SASS is one step further. The interpolation works with placeholders, which makes things a little bit better. The same idea looks like this:</p>
    <pre>@mixin theme-dark() {&#x000A;       color: #FFF;&#x000A;       background: #000;&#x000A;    }&#x000A;    @mixin theme-light() {&#x000A;       color: #000;&#x000A;       background: #FFF;&#x000A;    }&#x000A;    %border-dotted {&#x000A;       border: dotted 1px #000;&#x000A;    }&#x000A;    @mixin component($theme, $border) {&#x000A;       @extend %border-#{$border};&#x000A;       @include theme-#{$theme};&#x000A;    }&#x000A;    .header {&#x000A;       @include component("dark", "dotted");&#x000A;    }&#x000A;    </pre>
    <p>So, the border styling works, but the theme produces:</p>
    <pre>Sass Error: Invalid CSS after "   @include theme-": expected "}", was "#{$theme};"&#x000A;    </pre>
    <p>That’s because the interpolation in the names of the mixins and extends is not allowed. There is a long <a href="https://github.com/nex3/sass/issues/626" rel="nofollow external" class="bo">discussion</a> about that and will probably be fixed soon.</p>
    <p>Both LESS and SASS are great if you want to improve your writing speed, but they are far from perfect for building modular and flexible CSS. Mainly, they are missing things like encapsulation, polymorphism and abstraction. Or at least, they are not in the form which I needed.</p>
    <hr>
    <h2>A New Approach</h2>
    <p>I fought several days with those limitation. I invested a good amount of time reading documentation. In the end, I just gave up and started looking for other options. What I had wasn’t flexible enough and I started thinking about writing my own preprocessor. Of course, that’s a really complex task and there are a lot of things to think about, such as:</p>
    <ul>
    <li>
    <strong>the input</strong> – normally preprocessors take code which looks like CSS. I guess the idea is to complete the language, such as add in missing, yet necessary features. It is also easy to port pure CSS and the developers could start using it immediately, because in practice, it is almost the same language. However, from my point of view, this approach brings few difficulties, because I had to parse and analyze everything.</li>
    <li>
    <strong>the syntax</strong> – even if I write the parsing part, I had to invent my own syntax which is kind of a complex job.</li>
    <li>
    <strong>competitors</strong> – there are already two really popular preprocessors. They have good support and an active community. You know, most of the coolest things in our sphere are so useful, because of the contributers. If I write my own CSS preprocessor and I don’t get enough feedback and support from the people, I may be the only one which is actually using it.</li>
    </ul>
    <p>So, I thought about it a bit and found a solution. There is no need to invent a new language with a new syntax. It’s already there. I could use pure JavaScript. There is already a big community and a lot of people may start using my library immediately. Instead of reading external files, parsing and compiling them, I decided to use the NodeJS ecosystem. And of course, the most important thing – I completely removed the CSS part. Writing everything in JavaScript made my web application a lot cleaner, because I didn’t have to deal with the input format and all those processes which produces the actual CSS.</p>
    <p>(The name of the library is <a href="https://github.com/krasimir/absurd" rel="nofollow external" class="bo">AbsurdJS</a>. You may find this name funny and it is indeed. When I share my idea with some friends they all said, <em>writing your CSS in JavaScript – absurd</em>. So, that was the perfect title.)</p>
    <hr>
    <h2>AbsurdJS</h2>
    <h3>Installation</h3>
    <p>To use <a href="https://github.com/krasimir/absurd" rel="nofollow external" class="bo">AbsurdJS</a> you need NodeJS installed. If you still don’t have this little gem on your system go to <a href="http://nodejs.org/" rel="nofollow external" class="bo">nodejs.org</a> and click the <code>Install</code> button. Once everything finishes you could open a new console and type:</p>
    <pre>npm install -g absurd&#x000A;    </pre>
    <p>This will setup AbsurdJS globally. This means that wherever you are, you may run the <code>absurd</code> command.</p>
    <h3>Writing Your CSS</h3>
    <p>In the JavaScript world, the closest thing to CSS is JSON format. So, that’s what I decided to use. Let’s take a simple example:</p>
    <pre>.content {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;        font-size: 20px;&#x000A;    }&#x000A;    .content p {&#x000A;        line-height: 30px;&#x000A;    }&#x000A;    </pre>
    <p>This is pure CSS. Here is how it looks like in LESS and SASS:</p>
    <pre>.content {&#x000A;        padding: 0;&#x000A;        margin: 0;&#x000A;        font-size: 20px;&#x000A;        p {&#x000A;            line-height: 30px;&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>In the context of AbsurdJS the snippet should be written like this:</p>
    <pre>module.exports = function(api) {&#x000A;        api.add({&#x000A;            '.content': {&#x000A;                padding: 0,&#x000A;                margin: 0,&#x000A;                'font-size': '20px',&#x000A;                p: {&#x000A;                    'line-height': '30px'&#x000A;                }&#x000A;            }&#x000A;        });&#x000A;    }&#x000A;    </pre>
    <p>You may save this to a file called <code>styles.js</code> and run:</p>
    <pre>absurd -s .\styles.js&#x000A;    </pre>
    <p>It will compile the JavasSript to the same CSS. The idea is simple. You write a NodeJS package, which exports a function. The function is called with only one parameter – the AbsurdJS API. It has several methods and I’ll go through them later, but the most common one is <code>add</code>. It accepts valid JSON. Every object defines a selector. Every property of that object could be a CSS property and its value or another object.</p>
    <h3>Importing</h3>
    <p>Placing different parts of your CSS in different files is really important. This approach improves the readability of your styles. AbsurdJS has an <code>import</code> method, which acts as the <code>@import</code> directive in the CSS preprocessors.</p>
    <pre>var cwd = __dirname;&#x000A;    module.exports = function(api) {&#x000A;        api.import(cwd + '/config/main.js');&#x000A;        api.import(cwd + '/config/theme-a.js');&#x000A;        api.import([&#x000A;            cwd + '/layout/grid.js',&#x000A;            cwd + '/forms/login-form.js',&#x000A;            cwd + '/forms/feedback-form.js'&#x000A;        ]);&#x000A;    }&#x000A;    </pre>
    <p>What you have to do is write a <code>main.js</code> file which imports the rest of the styles. You should know that there is overwriting. What I mean is that if you define a style for the <code>body</code> tag inside <code>/config/main.js</code> and later in <code>/config/theme-a.js</code> use the same property, the final value will be the one used in the last imported file. For example:</p>
    <pre>module.exports = function(api) {&#x000A;        api.add({&#x000A;            body: { margin: '20px' }&#x000A;        });&#x000A;        api.add({&#x000A;            body: { margin: '30px' }&#x000A;        });&#x000A;    }&#x000A;    </pre>
    <p>Is compiled to</p>
    <pre>body {&#x000A;        margin: 30px;&#x000A;    }&#x000A;    </pre>
    <p>Notice that there is only one selector. While, if you do the same thing in LESS or SASS you will get</p>
    <pre>body {&#x000A;        margin: 20px;&#x000A;    }&#x000A;    body {&#x000A;        margin: 30px;&#x000A;    }&#x000A;    </pre>
    <h3>Variables and Mixins</h3>
    <p>One of the most valuable features in preprocessors are their variables. They give you the ability to configure your CSS, such as define a setting somewhere in the beginning of the stylesheet and use it later on. In JavaScript, variables are something normal. However, because you have modules placed in different files you need something that acts as a bridge between them. You may want to define your main brand color in one file, but later use it in another. AbsurdJS offers an API method for that, called <code>storage</code>. If you execute the function with two parameters, you create a pair: <code>key-value</code>. If you pass only a key, you actually get the stored value.</p>
    <pre>// config.js&#x000A;    module.exports = function(api) {&#x000A;        api.storage("brandColor", "#00F");&#x000A;    }&#x000A;    &#x000A;    // header.js&#x000A;    module.exports = function(api) {&#x000A;        api.add({&#x000A;            header: {&#x000A;                color: api.storage("brandColor")&#x000A;            }&#x000A;        })&#x000A;    }&#x000A;    </pre>
    <p>Every selector may accept not only an object, but also an array. So this is also valid:</p>
    <pre>module.exports = function(api) {&#x000A;        api.add({&#x000A;            header: [&#x000A;                { color: '#FF0' },&#x000A;                { 'font-size': '20px' }&#x000A;            ]&#x000A;        })&#x000A;    }&#x000A;    </pre>
    <p>This makes sending multiple objects to specific selectors possible. It plays very well with the idea of mixins. By definition, the mixin is a small piece of code which could be used multiple times. That’s the second feature of LESS and SASS, which makes them attractive for developers. In AbsurdJS the mixins are actually normal JavaScript functions. The ability to put things inside storage gives you the power to share mixins between the files. For example:</p>
    <pre>// A.js&#x000A;    module.exports = function(api) {&#x000A;        api.storage("button", function(color, thickness) {&#x000A;            return {&#x000A;                color: color,&#x000A;                display: "inline-block",&#x000A;                padding: "10px 20px",&#x000A;                border: "solid " + thickness + "px " + color,&#x000A;                'font-size': "10px"&#x000A;            }&#x000A;        });&#x000A;    }&#x000A;    &#x000A;    // B.js&#x000A;    module.exports = function(api) {&#x000A;        api.add({&#x000A;            '.header-button': [&#x000A;                api.storage("button")("#AAA", 10),&#x000A;                {&#x000A;                    color: '#F00',&#x000A;                    'font-size': '13px'&#x000A;                }&#x000A;            ]&#x000A;        });&#x000A;    }&#x000A;    </pre>
    <p>The result is:</p>
    <pre>.header-button {&#x000A;        color: #F00;&#x000A;        display: inline-block;&#x000A;        padding: 10px 20px;&#x000A;        border: solid 10px #AAA;&#x000A;        font-size: 13px;&#x000A;    }&#x000A;    </pre>
    <p>Notice, that there is only one selector defined and the <code>font-size</code> property has the value from the second object in the array (the mixin defines some basic styles, but later they are changed).</p>
    <h3>Plugins</h3>
    <p>Ok, mixins are cool, but I always wanted to define my own CSS properties. I mean using properties that don’t normally exist, but encapsulate valid CSS styles. For example:</p>
    <pre>.header {&#x000A;        text: medium;&#x000A;    }&#x000A;    </pre>
    <p>Let’s say that we have three types of text: <code>small</code>, <code>medium</code> and <code>big</code>. Each of them has a different <code>font-size</code> and different <code>line-height</code>. It’s obvious that I can achieve the same thing with mixins, but AbsurdJS offers something better – plugins. The creation of the plugin is again via the API:</p>
    <pre>api.plugin("text", function(api, type) {&#x000A;        switch(type) {&#x000A;            case "small":&#x000A;                return {&#x000A;                    'font-size': '12px',&#x000A;                    'line-height': '16px'&#x000A;                }&#x000A;            break;&#x000A;            case "medium":&#x000A;                return {&#x000A;                    'font-size': '20px',&#x000A;                    'line-height': '22px'&#x000A;                }&#x000A;            break;&#x000A;            case "big":&#x000A;                return {&#x000A;                    'font-size': '30px',&#x000A;                    'line-height': '32px'&#x000A;                }&#x000A;            break;&#x000A;        }&#x000A;    });&#x000A;    </pre>
    <p>This allows you to apply <code>text: medium</code> to your selectors. The above styling is compiled to:</p>
    <pre>.header {&#x000A;        font-size: 20px;&#x000A;        line-height: 22px;&#x000A;    }&#x000A;    </pre>
    <h3>Media Queries</h3>
    <p>Of course the library supports media queries. I also copied the idea of the <code>bubbling</code> feature (you are able to define breakpoints directly inside the elements and AbsurdJS will take care for the rest).</p>
    <pre>api.add({&#x000A;        '.footer': {&#x000A;            'font-size': '14px',&#x000A;            '@media all and (min-width: 320px) and (max-width: 550px)': {&#x000A;                'font-size': '24px'&#x000A;            }&#x000A;        },&#x000A;        '.content': {&#x000A;            '@media all and (min-width: 320px) and (max-width: 550px)': {&#x000A;                margin: '24px'&#x000A;            }&#x000A;        }&#x000A;    })&#x000A;    </pre>
    <p>The result is:</p>
    <pre>.footer {&#x000A;        font-size: 14px;&#x000A;    }&#x000A;    @media all and (min-width: 320px) and (max-width: 550px) {&#x000A;        .footer {&#x000A;            font-size: 24px;&#x000A;        }&#x000A;        .content {&#x000A;            margin: 24px;&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>Keep in mind that if you have the same media query used multiple times, the compiled file will contain only one definition. This actually saves a lot of bytes. Unfortunately LESS and SASS doesn’t do this.</p>
    <h3>Pseudo Classes</h3>
    <p>For these, you just need to pass in valid JSON. The following example demonstrates how to use pseudo CSS classes:</p>
    <pre>module.exports = function(api) {&#x000A;        api.add({&#x000A;            a: {&#x000A;                'text-decoration': 'none',&#x000A;                ':hover': {&#x000A;                    'text-decoration': 'underline'&#x000A;                }&#x000A;            }&#x000A;        });&#x000A;    }&#x000A;    </pre>
    <p>And it is compiled to:</p>
    <pre>a {&#x000A;        text-decoration: none;&#x000A;    }&#x000A;    a:hover {&#x000A;        text-decoration: underline;&#x000A;    }&#x000A;    </pre>
    <h3>Integration</h3>
    <p>AbsurdJS works as a command line tool, but it could be used inside a NodeJS application as well. For example:</p>
    <pre>var Absurd = require("absurd"),&#x000A;        absurd = Absurd(),&#x000A;        api = absurd.api,&#x000A;        output = "./css/styles.css";&#x000A;    &#x000A;    api.add({ ... }).import("...");&#x000A;    absurd.compileFile(output, function(err, css) {&#x000A;        // do something with the css&#x000A;    });&#x000A;    </pre>
    <p>Or if you have a file which acts as an entry point:</p>
    <pre>var Absurd = require("absurd");&#x000A;    Absurd("./css/styles.js").compileFile("./css/styles.css", function(err, css) {&#x000A;        // do something with the css&#x000A;    });&#x000A;    </pre>
    <p>The library also supports integration with Grunt. You can read more about that <a href="https://github.com/krasimir/absurd#using-with-grunt" rel="nofollow external" class="bo">on the following Github page</a>.</p>
    <h3>Command Line Interface Options</h3>
    <p>There are three parameters available:</p>
    <ul>
    <li>
    <strong>[-s]</strong> – main source file</li>
    <li>
    <strong>[-o]</strong> – output file</li>
    <li>
    <strong>[-w]</strong> – directory to watch</li>
    </ul>
    <p>For example, the following line will start a watcher for a <code>./css</code> directory, will grab <code>./css/main.js</code> as an entry point and will output the result to <code>./styles.css</code>:</p>
    <pre>absurd -s ./css/main.js -o ./styles.css -w ./css&#x000A;    </pre>
    <h2>Conclusion</h2>
    <p>Don’t get me wrong. The available CSS preprocessors are awesome, and I’m still using them. However, they came with their own set of problems. I managed to solve them by writing AbsurdJS. The truth is that I just replaced one tool with another. The usage of this library eliminates the usual writing of CSS and makes things really flexible, because everything is JavaScript. It could be used as a command line tool or it could be integrated directly into the application’s code. If you are interested in AbsurdJS, feel free to check out the full documentation at <a href="http://github.com/krasimir/absurd" rel="nofollow external" class="bo">github.com/krasimir/absurd</a> or fork the repo.</p>
    </div>
]]>
</Body>
<Summary>As a front-end developer, I’m writing a lot of CSS and using pure CSS is not the most efficient way nowadays. CSS preprocessors are something which have helped me a lot. My first impression was...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/6F57deuGi0c/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39266/guest@my.umbc.edu/768e4328c1b8ea5e5bf1a7c178db2b47/api/pixel</TrackingUrl>
<Tag>absurdjs</Tag>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>html-and-css</Tag>
<Tag>javascript</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>Mon, 09 Dec 2013 15:49:31 -0500</PostedAt>
<EditAt>Mon, 09 Dec 2013 15:49:31 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="122928" important="false" status="posted" url="https://my3.my.umbc.edu/posts/122928">
<Title>Student Curated Exhibition in City Paper, Bmore Art</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><em>Simple Stories: The Photography of Robert Houston</em>, <a href="http://umbcinsights.wordpress.com/2013/11/22/student-curated-exhibition-featured-at-creative-alliance/" rel="nofollow external" class="bo">a curatorial project of the Museum Practice class (Art 427)</a>, was mentioned this week in an interview with the artist in <em>City Paper</em> and in the contemporary art blog, Bmore Art, as “best Baltimore art opening.”</p>
    <p>Read the interview, <a href="http://citypaper.com/arts/stage/images-of-struggle-1.1594458" rel="nofollow external" class="bo">“Images of Struggle,” at <em>City Paper</em>‘s website</a>, or see which other exhibitions top the list of <a href="http://bmoreart.com/2013/12/bmorearts-picks-best-baltimore-art-openings-and-events-dec-3-8.html" rel="nofollow external" class="bo">Bmore Art picks</a>.</p>
    <p><em><a href="http://www.creativealliance.org/events/2013/starting-image-robert-houston" rel="nofollow external" class="bo">Simple Stories</a></em> explores the work of photographer, Robert Houston whose photographic career documents half a century of portraits and everyday life, including his work for LIFE magazine and images of Dr. Martin Luther King, Jr.</p>
    <p>Museum Practice is a course under the Art History/Museum Studies concentration in the Department of Visual Arts taught in the fall by Sandra Abbott, curator of collections &amp; outreach at the CADVC. The course addresses professional museum and gallery practice, includes several visits to area institutions — such as the BMA, Homewood Museum and the Archaeological Museum at Johns Hopkins University — and then culminates in a student-curated exhibit at a Baltimore institution.</p>
    <p><em>Simple Stories</em> opened at the Creative Alliance at the Patterson December 6, and continues through December 14. Starting at 8:30 pm on Thursday, December 12, the Marquee Lounge will host “A Night with the Storyteller,” in which the artist shares accounts from his career of visually chronicling those from all walks of life. The Amalie Rothschild Gallery is open Tuesday through Sunday, 11 a.m. — 7 p.m.</p>
    </div>
]]>
</Body>
<Summary>Simple Stories: The Photography of Robert Houston, a curatorial project of the Museum Practice class (Art 427), was mentioned this week in an interview with the artist in City Paper and in the...</Summary>
<Website>https://umbc.edu/stories/student-curated-exhibition-in-city-paper-bmore-art/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/122928/guest@my.umbc.edu/ea1adeef1a33b70f3ff205fa6c2e8b03/api/pixel</TrackingUrl>
<Tag>arts-and-culture</Tag>
<Tag>cahss</Tag>
<Tag>engage</Tag>
<Tag>visualarts</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>Mon, 09 Dec 2013 15:40:37 -0500</PostedAt>
</NewsItem>

</News>
