<?xml version="1.0"?>
<News hasArchived="true" page="7988" pageCount="10748" pageSize="10" timestamp="Wed, 12 Aug 2026 21:25:33 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7988">
<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>

<NewsItem contentIssues="true" id="39264" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39264">
<Title>Tickets on Sale at the CIC!</Title>
<Tagline>Event Tickets Remaining on December 9th, 2013</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <div><strong>Stop by the Campus Information Center in The Commons to purchase the tickets listed below!</strong></div>
    <div><br></div>
    <div><strong><a href="http://my.umbc.edu/events/18902" rel="nofollow external" class="bo">Midnight Premiere: The Hobbit</a></strong></div>
    <div><em>     Thursday, December 12th</em></div>
    <div><em>     Bus Departs: Commons Loop @10:45pm</em></div>
    <div><em>     All Guests = $5.00</em></div>
    <div><em><strong>     We are on Ticket 186 of 259</strong></em></div>
    <div><em><strong><br></strong></em></div>
    <div><span><span><div><strong>Also, don't forget to check out these events happening this week!</strong></div>
    <div><strong><br></strong></div>
    <div>
    <strong><a href="http://my.umbc.edu/events/18899" rel="nofollow external" class="bo">Cocoa, Cannolis, &amp; Trivia (seb)</a> - </strong><span>Monday, December 9th 4pm-6pm in Upper Flat Tuesdays. </span><span>Join us as we collaborate with the</span><span> </span><a href="https://www.facebook.com/pages/UMBC-SGA-Health-Wellness/220664508099960?directed_target_id=0" rel="nofollow external" class="bo">UMBC SGA Health &amp; Wellness</a><span> </span><span>department for free cocoa, cannoli's, and trivia!</span><span> </span><span>There will be awesome prizes to win and good times to be had!</span>
    </div>
    <div><span><br></span></div>
    <div>
    <span><strong><a href="http://my.umbc.edu/events/18900" rel="nofollow external" class="bo">UEFA Champions League (seb)</a></strong> - Tuesday, December 10th 2:30pm-5:30pm. </span><span>Come out to the sports zone to watch a soccer game and eat some free food!</span><span> </span>
    </div></span></span></div>
    </div>
]]>
</Body>
<Summary>Stop by the Campus Information Center in The Commons to purchase the tickets listed below!     Midnight Premiere: The Hobbit       Thursday, December 12th       Bus Departs: Commons Loop @10:45pm...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39264/guest@my.umbc.edu/0f0f99afcf26e266663a3ab43c4a89fb/api/pixel</TrackingUrl>
<Group token="cic">Campus Information Center (CIC)</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/cic</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xsmall.png?1318518699</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/original.png?1318518699</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xxlarge.png?1318518699</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xlarge.png?1318518699</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/large.png?1318518699</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/medium.png?1318518699</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/small.png?1318518699</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xsmall.png?1318518699</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xxsmall.png?1318518699</AvatarUrl>
<Sponsor>Campus Information Center (CIC)</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/039/264/45ea7a74693f661f47516842014b1f76/xxlarge.jpg?1386619499</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/039/264/45ea7a74693f661f47516842014b1f76/xlarge.jpg?1386619499</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/039/264/45ea7a74693f661f47516842014b1f76/large.jpg?1386619499</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/039/264/45ea7a74693f661f47516842014b1f76/medium.jpg?1386619499</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/039/264/45ea7a74693f661f47516842014b1f76/small.jpg?1386619499</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/039/264/45ea7a74693f661f47516842014b1f76/xsmall.jpg?1386619499</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/039/264/45ea7a74693f661f47516842014b1f76/xxsmall.jpg?1386619499</ThumbnailUrl>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 09 Dec 2013 15:05:34 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39265" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39265">
<Title>Q&amp;A: Backing Up a Book With Gmail, and Another Screen for a Mac Laptop</Title>
<Body>
<![CDATA[
    <div class="html-content">You can save a novel you are writing with either Gmail or Google Drive, and there are several ways to use an external display with an Apple laptop.<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%2F12%2Ftechnology%2Fpersonaltech%2Fbacking-up-a-book-with-gmail-and-another-screen-for-a-mac-laptop.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Backing+Up+a+Book+With+Gmail%2C+and+Another+Screen+for+a+Mac+Laptop" 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%2F12%2Ftechnology%2Fpersonaltech%2Fbacking-up-a-book-with-gmail-and-another-screen-for-a-mac-laptop.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Backing+Up+a+Book+With+Gmail%2C+and+Another+Screen+for+a+Mac+Laptop" 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%2F12%2Ftechnology%2Fpersonaltech%2Fbacking-up-a-book-with-gmail-and-another-screen-for-a-mac-laptop.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Backing+Up+a+Book+With+Gmail%2C+and+Another+Screen+for+a+Mac+Laptop" 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%2F12%2Ftechnology%2Fpersonaltech%2Fbacking-up-a-book-with-gmail-and-another-screen-for-a-mac-laptop.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Backing+Up+a+Book+With+Gmail%2C+and+Another+Screen+for+a+Mac+Laptop" 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%2F12%2Ftechnology%2Fpersonaltech%2Fbacking-up-a-book-with-gmail-and-another-screen-for-a-mac-laptop.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Backing+Up+a+Book+With+Gmail%2C+and+Another+Screen+for+a+Mac+Laptop" 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/183025922359/u/0/f/640387/c/34625/s/349e7d3c/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/183025922359/u/0/f/640387/c/34625/s/349e7d3c/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/183025922359/u/0/f/640387/c/34625/s/349e7d3c/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/183025922359/u/0/f/640387/c/34625/s/349e7d3c/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/183025922359/u/0/f/640387/c/34625/s/349e7d3c/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/183025922359/u/0/f/640387/c/34625/s/349e7d3c/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/183025922359/u/0/f/640387/c/34625/s/349e7d3c/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/183025922359/u/0/f/640387/c/34625/s/349e7d3c/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>You can save a novel you are writing with either Gmail or Google Drive, and there are several ways to use an external display with an Apple laptop.      </Summary>
<Website>http://www.nytimes.com/2013/12/12/technology/personaltech/backing-up-a-book-with-gmail-and-another-screen-for-a-mac-laptop.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39265/guest@my.umbc.edu/136c6ccebd51b7df98308d6279421df7/api/pixel</TrackingUrl>
<Tag>apple-inc-aapl-nasdaq</Tag>
<Tag>computers-and-the-internet</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 09 Dec 2013 14:59:00 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39259" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39259">
<Title>Improving Code Quality with JSHint</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>JSHint is a tool that can help you to write more reliable and consistent JavaScript code. The tool works by checking your code for a number of common errors. If you’ve ever spent half an hour trying to debug your code only to find that you missed a comma somewhere, you’ll understand how useful JSHint can be.</p>
    <p>As well as catching errors in your code, JSHint can be used to enforce coding conventions and <a href="https://github.com/styleguide" rel="nofollow external" class="bo">style guides</a>. This is really useful if you work on a team as it helps to keep your codebase consistent and easily readable.</p>
    <p>In this post you’re going to learn how to set up and use JSHint. You’ll be taking a look at some plugins that are available for popular text editors, as well as some example JSHint configurations.</p>
    <h2>Installing JSHint</h2>
    <p>JSHint is available through the node package manager (npm). If you don’t have npm installed, go to the <a href="http://nodejs.org/" rel="nofollow external" class="bo">node.js website</a> and download a copy of node for your OS. This will install both node.js and npm.</p>
    <p>Once you have npm installed, open up terminal and type:</p>
    <pre><code>npm install -g jshint</code></pre>
    <p>The <code>-g</code> flag means that <code>jshint</code> will be installed globally on your system. This allows you to access the executable from any directory.</p>
    <h2>Using JSHint on The Command Line</h2>
    <p>Now that you have JSHint installed let’s test a file. You can either <a href="http://cl.ly/code/3G190Q0t3Q1Y" rel="nofollow external" class="bo">download the demo file</a> or test a file that you already have on your hard drive.</p>
    <p>Open up terminal and navigate to the folder that contains your JavaScript file. Then run the following command to test the file:</p>
    <pre><code>jshint demo.js</code></pre>
    <p>If you used the <code>demo.js</code> file you should see two errors as shown below.</p>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/jshint-terminal.png" rel="nofollow external" class="bo"><img alt="JSHint Errors" src="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/jshint-terminal.png" width="570" height="76" style="max-width: 100%; height: auto;"></a><p>JSHint Errors</p>
    </div>
    <p>If JSHint doesn’t find any problems with your code nothing will be output into the terminal window. Open up the <code>demo.js</code> file in your favorite text editor and add the two missing semi-colons. Running JSHint again should now return no errors.</p>
    <h2>Configuring JSHint</h2>
    <p>One of the best things about JSHint is that it can be configured to meet the needs of you or your team. This configuration can also be easily shared amongst everyone working on a project, ensuring that all the developers are working against the same conventions.</p>
    <p>You can define your configuration in two ways. Either by adding <a href="http://www.jshint.com/docs/" rel="nofollow external" class="bo">special comments</a> to your code or by storing your configuration in a <code>.jshintrc</code> file. I prefer to keep my configuration separate from the code whenever possible, so in this section we’re going to focus on setting up a <code>.jshintrc</code> file.</p>
    <p>An added advantage of using a dedicated configuration file is that you can use the same configuration to check all of the JavaScript files in your project. For this to work the <code>.jshintrc</code> file should be placed at the root of your project.</p>
    <p>Lets take a look at a simple example:</p>
    <pre><code>{&#x000A;      "curly": true,&#x000A;      "eqeqeq": true,&#x000A;      "undef": true,&#x000A;      "globals": {&#x000A;        "jQuery": true&#x000A;      }&#x000A;    }</code></pre>
    <p>A number of configuration options have been used here to specify coding conventions.</p>
    <ul>
    <li>
    <code>curly</code> enforces that all code blocks should be surrounded with curly braces.</li>
    <li>
    <code>eqeqeq</code> prohibits the use of <code>==</code> and <code>!=</code>, instead developers should use <code>===</code> and <code>!===</code>.</li>
    <li>
    <code>undef</code> specifies that an error should be thrown if a variable has been used the was not declared.</li>
    <li>
    <code>globals</code> allows you to specify global variables that are defined outside the file being tested (<code>document</code>, <code>window</code>, <code>jQuery</code>…). The boolean value specifies if the variable is writeable. Setting the value to <code>false</code> (default) means the variable is read-only. The <code>globals</code> option should be used when the <code>undef</code> option is set to <code>true</code>.</li>
    </ul>
    <p>You can find a full list of configuration options in the <a href="http://www.jshint.com/docs/options/" rel="nofollow external" class="bo">documentation</a>.</p>
    <hr>
    <p><strong>Note</strong>: Notice that the configuration options are specified using JSON. This is a requirement for all <code>.jshintrc</code> files.</p>
    <hr>
    <p>If you’re curious, here are some links to JSHint configurations for popular projects:</p>
    <ul>
    <li><a href="https://github.com/h5bp/html5boilerplate.com/blob/master/.jshintrc" rel="nofollow external" class="bo">HTML5 Boilerplate</a></li>
    <li><a href="https://github.com/yeoman/generator-ember/blob/master/.jshintrc" rel="nofollow external" class="bo">Yeoman Ember.js Generator</a></li>
    <li><a href="https://github.com/twbs/bootstrap/blob/master/js/.jshintrc" rel="nofollow external" class="bo">Twitter Bootstrap</a></li>
    </ul>
    <h2>Plugins for Popular Text Editors</h2>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/sublime-jshint.png" rel="nofollow external" class="bo"><img alt="The SublimeLinter JSHint plugin for Sublime Text" src="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/sublime-jshint.png" width="578" height="312" style="max-width: 100%; height: auto;"></a><p>The SublimeLinter JSHint plugin for Sublime Text</p>
    </div>
    <p>Running JSHint from the command line can become a bit tedious. Ideally you want to get real-time feedback about any errors as you write your code. There are a whole bunch of plugins available that can bring the goodness of JSHint directly into your favorite text editor. I’ve listed some of the most popular below.</p>
    <ul>
    <li>SublimeText: <a href="https://github.com/SublimeLinter/SublimeLinter" rel="nofollow external" class="bo">SublimeLinter</a>
    </li>
    <li>Vim: <a href="https://github.com/Shutnik/jshint2.vim" rel="nofollow external" class="bo">jshint2.vim</a>
    </li>
    <li>Textmate: <a href="https://github.com/bodnaristvan/JSHint.tmbundle" rel="nofollow external" class="bo">JSHint.tmbundle</a>
    </li>
    <li>Visual Studio: <a href="https://github.com/jamietre/SharpLinter" rel="nofollow external" class="bo">SharpLinter</a>
    </li>
    <li>Brackets / Edge Code: <a href="https://github.com/cfjedimaster/brackets-jshint/" rel="nofollow external" class="bo">Brackets JSHint</a>
    </li>
    <li>Notepad++: <a href="http://sourceforge.net/projects/jslintnpp/" rel="nofollow external" class="bo">jslintnpp</a>
    </li>
    <li>gEdit: <a href="https://github.com/Kilian/gedit-jshint" rel="nofollow external" class="bo">gEdit JSHint</a>
    </li>
    </ul>
    <p>Refer to the documentation for each of these plugins for install and configuration instructions.</p>
    <hr>
    <p><strong>Bonus</strong>: There’s a <a href="https://github.com/gruntjs/grunt-contrib-jshint" rel="nofollow external" class="bo">JSHint plugin</a> available for grunt too!</p>
    <hr>
    <h2>Final Thoughts</h2>
    <p>JSHint has become a crucial tool in my development process. It’s saved me so much time by pointing out errors as I make them. I’ve also found that being able to enforce styling conventions has helped me to write much cleaner code.</p>
    <p>I hope that this post has given you an insight into how JSHint can fit into your own development process. Take a minute to set up and configure this simple tool and you will never be caught out by trivial errors again.</p>
    <h2>Useful Links</h2>
    <ul>
    <li><a href="http://www.jshint.com/docs/" rel="nofollow external" class="bo">JSHint Documentation</a></li>
    <li><a href="http://www.jshint.com/docs/options/" rel="nofollow external" class="bo">JSHint Configuration Options</a></li>
    <li><a href="https://github.com/gruntjs/grunt-contrib-jshint" rel="nofollow external" class="bo">JSHint Grunt Pluign</a></li>
    </ul>
    <p>The post <a href="http://blog.teamtreehouse.com/improving-code-quality-jshint" rel="nofollow external" class="bo">Improving Code Quality with JSHint</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>JSHint is a tool that can help you to write more reliable and consistent JavaScript code. The tool works by checking your code for a number of common errors. If you’ve ever spent half an hour...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/gUDbn8qM8ek/improving-code-quality-jshint</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39259/guest@my.umbc.edu/bc6bc9b1298dc9e738eb850f4d34762a/api/pixel</TrackingUrl>
<Tag>android</Tag>
<Tag>code</Tag>
<Tag>code-quality</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>ios</Tag>
<Tag>javascript</Tag>
<Tag>jshint</Tag>
<Tag>learn-to-code</Tag>
<Tag>linter</Tag>
<Tag>responsive</Tag>
<Tag>web</Tag>
<Tag>web-apps</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 14:25:06 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39260" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39260">
<Title>DealBook: Verizon to Buy Content Delivery Network Start-Up</Title>
<Body>
<![CDATA[
    <div class="html-content">Verizon announced on Monday that it had agreed to acquire EdgeCast, a fast-growing content delivery network start-up.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F09%2Fverizon-to-buy-content-delivery-network-start-up%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Verizon+to+Buy+Content+Delivery+Network+Start-Up" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F09%2Fverizon-to-buy-content-delivery-network-start-up%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Verizon+to+Buy+Content+Delivery+Network+Start-Up" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F09%2Fverizon-to-buy-content-delivery-network-start-up%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Verizon+to+Buy+Content+Delivery+Network+Start-Up" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F09%2Fverizon-to-buy-content-delivery-network-start-up%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Verizon+to+Buy+Content+Delivery+Network+Start-Up" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F12%2F09%2Fverizon-to-buy-content-delivery-network-start-up%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Verizon+to+Buy+Content+Delivery+Network+Start-Up" 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/180265930466/u/0/f/640387/c/34625/s/349e232c/sc/5/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180265930466/u/0/f/640387/c/34625/s/349e232c/sc/5/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/180265930466/u/0/f/640387/c/34625/s/349e232c/sc/5/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180265930466/u/0/f/640387/c/34625/s/349e232c/sc/5/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/180265930466/u/0/f/640387/c/34625/s/349e232c/sc/5/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180265930466/u/0/f/640387/c/34625/s/349e232c/sc/5/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/180265930466/u/0/f/640387/c/34625/s/349e232c/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/180265930466/u/0/f/640387/c/34625/s/349e232c/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Verizon announced on Monday that it had agreed to acquire EdgeCast, a fast-growing content delivery network start-up.      </Summary>
<Website>http://dealbook.nytimes.com/2013/12/09/verizon-to-buy-content-delivery-network-start-up/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39260/guest@my.umbc.edu/eaf1b05cb9e6f52f10b0bdcef5cc037b/api/pixel</TrackingUrl>
<Tag>computers-and-the-internet</Tag>
<Tag>edgecast-networks-inc</Tag>
<Tag>mergers-acquisitions-and-divestitures</Tag>
<Tag>mergers-and-acquisitions</Tag>
<Tag>new</Tag>
<Tag>start-ups</Tag>
<Tag>technology</Tag>
<Tag>telecommunications</Tag>
<Tag>venture-capital</Tag>
<Tag>verizon-communications-inc</Tag>
<Tag>verizon-communications-inc-vz-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 14:24:29 -0500</PostedAt>
<EditAt>Mon, 09 Dec 2013 17:56:34 -0500</EditAt>
</NewsItem>

</News>
