<?xml version="1.0"?>
<News hasArchived="true" page="8204" pageCount="10735" pageSize="10" timestamp="Wed, 29 Jul 2026 10:29:04 -0400" url="https://my3.my.umbc.edu/posts.xml?page=8204">
<NewsItem contentIssues="true" id="36797" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36797">
<Title>Are you better than kittens?</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="thumbnail" src="http://netdna.webdesignerdepot.com/uploads/2013/10/thumbnail8.jpg" width="200" height="160" style="max-width: 100%; height: auto;">So, you think you’re a good designer? You went to a good school? You’ve got a portfolio filled to the brim with cutting-edge design?</p> <p>Well, think again. Because buddy, you ain’t got the chops if you can’t beat a kitten.</p> <p>And no, obviously I don’t mean literally <em>beat a kitten.</em> I mean put your work next to photo of a cute kitten and have it voted the more popular of the two. That’s the challenge laid down by <a href="http://www.betterthankittens.com/" rel="nofollow external" class="bo">betterthankittens.com</a></p> <p>We all know that the Web was basically invented so we could look at pictures of kittens — at least it feels that way sometimes — so what better way to gauge the Web-worthiness of your designs than to compare them to the internet’s favorite way to waste time?</p> <p>If you’re up for the challenge, it’s better than the typical round of designers patting each other’s backs on Dribbble or Behance.</p> <p>If you’re anything like me you’ll find it pretty hard to click on anything but the kitten, which is why it’s so impressive that some pieces of work are ‘Better than Kittens’; check out the hall of fame to see who beat the kittens.</p> <p>It’s a great fun idea, but there’s also a hidden prize: beat the kittens, make it to the Hall of Fame, and the site links to your work. That’s got to be worth the challenge.</p> <p><a href="http://www.betterthankittens.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/kittens_001.jpg" width="650" alt="Are you better than kittens?" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.betterthankittens.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/kittens_002.jpg" width="650" alt="Are you better than kittens?" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.betterthankittens.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/kittens_003.jpg" width="650" alt="Are you better than kittens?" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.betterthankittens.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2013/10/kittens_004.jpg" width="650" alt="Are you better than kittens?" style="max-width: 100%; height: auto;"></a></p> <p> </p> <p><em><strong>Is your work better than kittens? Have you submitted to the site? Let us know in the comments.</strong></em></p> <p><br><br> </p>
    <table width="100%"> <tbody>
    <tr> <td> <a href="http://www.mightydeals.com/deal/teslathemes.html?ref=inwidget" rel="nofollow external" class="bo"><strong>TeslaThemes: 14 Gorgeous WP Themes – only $19!</strong></a> </td> <td> <a href="http://www.mightydeals.com/?ref=inwidget" rel="nofollow external" class="bo"><br> <img src="http://mightydeals.com/web/images/widget-logo.png" height="40" width="90" alt="Are you better than kittens?" style="max-width: 100%; height: auto;"><br> </a> </td> </tr> </tbody>
    </table> <p><br> </p> <a href="http://www.webdesignerdepot.com/2013/10/are-you-better-than-kittens/" rel="nofollow external" class="bo">Source</a> <br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fare-you-better-than-kittens%2F&amp;t=Are+you+better+than+kittens%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fare-you-better-than-kittens%2F&amp;t=Are+you+better+than+kittens%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fare-you-better-than-kittens%2F&amp;t=Are+you+better+than+kittens%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fare-you-better-than-kittens%2F&amp;t=Are+you+better+than+kittens%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fare-you-better-than-kittens%2F&amp;t=Are+you+better+than+kittens%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/176965686514/u/49/f/661066/c/35285/s/32420ff4/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965686514/u/49/f/661066/c/35285/s/32420ff4/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>So, you think you’re a good designer? You went to a good school? You’ve got a portfolio filled to the brim with cutting-edge design?   Well, think again. Because buddy, you ain’t got the chops if...</Summary>
<Website>http://rss.feedsportal.com/c/35285/f/661066/s/32420ff4/sc/4/l/0L0Swebdesignerdepot0N0C20A130C10A0Care0Eyou0Ebetter0Ethan0Ekittens0C/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36797/guest@my.umbc.edu/71fbc756fcbfce8355dedd1c75b26bbf/api/pixel</TrackingUrl>
<Tag>art</Tag>
<Tag>betterthankittens-com</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>funny</Tag>
<Tag>good-designers</Tag>
<Tag>how-to-judge-design</Tag>
<Tag>html</Tag>
<Tag>html5</Tag>
<Tag>illustrator</Tag>
<Tag>javascript</Tag>
<Tag>kitten-images</Tag>
<Tag>kittens</Tag>
<Tag>mysql</Tag>
<Tag>oracle</Tag>
<Tag>photoshop</Tag>
<Tag>php</Tag>
<Tag>sql</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>Wed, 09 Oct 2013 14:15:02 -0400</PostedAt>
<EditAt>Wed, 09 Oct 2013 14:15:02 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="36795" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36795">
<Title>Data Discrimination Means the Poor May Experience a Different Internet</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>A Microsoft researcher proposes “big data due process” so citizens can learn how data analytics were used against them.</p>
    <p>Data analytics are being used to implement a subtle form of discrimination, while anonymous data sets can be mined to reveal health data and other private information, a Microsoft researcher warned this morning at <em>MIT Technology Review</em>’s <a href="http://www2.technologyreview.com/emtech/13/" rel="nofollow external" class="bo">EmTech</a> conference.</p>
    </div>
]]>
</Body>
<Summary>A Microsoft researcher proposes “big data due process” so citizens can learn how data analytics were used against them.  Data analytics are being used to implement a subtle form of discrimination,...</Summary>
<Website>http://www.technologyreview.com/news/520131/data-discrimination-means-the-poor-may-experience-a-different-internet/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36795/guest@my.umbc.edu/b8399b67a16bb20e582fbb2fe71820c4/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 09 Oct 2013 14:02:11 -0400</PostedAt>
<EditAt>Wed, 09 Oct 2013 14:02:00 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="36785" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36785">
<Title>Maintainable Automated UI Tests</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=35089&amp;c=495946257" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=35089&amp;c=495946257" alt="" style="max-width: 100%; height: auto;"></a><p>A few years ago I was very skeptical about automated UI testing and this skepticism was born out of a few failed attempts. I would write some automated UI tests for desktop or web applications and a few weeks later I would rip them out of the codebase because the cost of maintaining them was too high. So I thought that UI testing was hard and that, while it provided a lot of benefit, it was best to keep it to a minimum and only test the most complex workflows in a system through UI testing and leave the rest to unit tests. I remember telling my team about <a href="http://www.mountaingoatsoftware.com/blog/the-forgotten-layer-of-the-test-automation-pyramid" rel="nofollow external" class="bo">Mike Cohn’s testing pyramid</a>, and that in a typical system over 70% of the tests should be unit tests, around 5% UI tests and the rest integration tests.</p>
    <p></p>
    <blockquote><p>So I thought that UI testing was hard and that, while it provided a lot of benefit, it was best to keep it to a minimum…</p></blockquote>
    <p>I was wrong! Sure, UI testing can be hard. It takes a fair bit of time to write UI tests properly. They are much slower and more brittle than unit tests because they cross class and process boundaries, they hit the browser, they involve UI elements (e.g. HTML, JavaScript) which are constantly changing, they hit the database, file system and potentially network services. If any of these moving parts don’t play nicely you have a broken test; but that’s also the beauty of UI tests: they test your system end-to-end. No other test gives you as much or as thorough coverage. Automated UI tests, if done right, could be the best elements in your regression suite.</p>
    <p>So in the past few projects my UI tests have formed over 80% of my tests! I should also mention that these projects have mostly been CRUD applications with not much business logic and let’s face it – the vast majority of software projects fall into this category. The business logic should still be unit tested; but the rest of the application can be thoroughly tested through UI automation.</p>
    <hr>
    <h2>UI Testing Gone Wrong</h2>
    <p>I would like to touch on what I did wrong, which also seems to be very typical amongst developers and testers starting with UI automation.</p>
    <p>So what goes wrong and why? A lot of teams start UI automation with screen recorders. If you are doing web automation with Selenium you have most likely used <a href="http://docs.seleniumhq.org/docs/02_selenium_ide.jsp" rel="nofollow external" class="bo">Selenium IDE</a>. From the Selenium IDE home page:</p>
    <blockquote><p>The Selenium-IDE (Integrated Development Environment) is the tool you use to develop your Selenium test cases.</p></blockquote>
    <p>This is actually one of the reasons UI testing turns into a horrible experience: you download and fire up a screen recorder and navigate to your website and go click, click, type, click, type, tab, type, tab, type, click and assert. Then you replay the recording and it works. Sweet!! So you export the actions as a test script, put it into your code, wrap it in a test and execute the test and see the browser come alive before your eyes and your tests run very smoothly. You get very excited, share your findings with your colleagues and show it off to your boss and they get very excited and go: “<a href="http://qkme.me/3vg2h6" rel="nofollow external" class="bo">Automate ALL THE THINGS</a>“</p>
    <p>A week later and you have 10 automated UI tests and everything seems great. Then the business asks you to replace the username with email address as it has caused some confusion amongst users, and so you do. Then like any other great programmer you run your UI test suite, only to find 90% of your tests are broken because for each test you are logging the user in with username and the field name has changed and it takes you two hours to replace all the references to <code>username</code> in your tests with <code>email</code> and to get the tests green again. The same thing happens over and over again and at some point you find yourself spending hours a day fixing broken tests: tests that didn’t break because something went wrong with your code; but because you changed a field name in your database/model or you restructured your page slightly. A few weeks later you stop running your tests because of this huge maintenance cost, and you conclude that UI testing sucks.</p>
    <p>You should NOT use Selenium IDE or any other screen recorder to develop your test cases. That said, it’s not the screen recorder itself that leads to a brittle test suite; it’s the code they generate that has inherent maintainability issues. Many developers still end up with a brittle UI test suite even without using screen recorders just because their tests exhibit the same attributes.</p>
    <blockquote><p>All the tests in this article are written against the <a href="http://mvcmusicstore.codeplex.com/" rel="nofollow external" class="bo">Mvc Music Store</a> website. The website as is has some issues that makes UI testing rather hard so I ported the code and fixed the issues. You can find the actual code I am writing these tests against on the GitHub repo for this article <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore" rel="nofollow external" class="bo">here</a></p></blockquote>
    <p>So what does a brittle test look like? It looks something like this:</p>
    <pre>class BrittleTest&#x000A;    {&#x000A;        [Test]&#x000A;        public void Can_buy_an_Album_when_registered()&#x000A;        {&#x000A;            var driver = Host.Instance.Application.Browser;&#x000A;            driver.Navigate().GoToUrl(driver.Url);&#x000A;            driver.FindElement(By.LinkText("Admin")).Click();&#x000A;            driver.FindElement(By.LinkText("Register")).Click();&#x000A;            driver.FindElement(By.Id("UserName")).Clear();&#x000A;            driver.FindElement(By.Id("UserName")).SendKeys("HJSimpson");&#x000A;            driver.FindElement(By.Id("Password")).Clear();&#x000A;            driver.FindElement(By.Id("Password")).SendKeys("!2345Qwert");&#x000A;            driver.FindElement(By.Id("ConfirmPassword")).Clear();&#x000A;            driver.FindElement(By.Id("ConfirmPassword")).SendKeys("!2345Qwert");&#x000A;            driver.FindElement(By.CssSelector("input[type=\"submit\"]")).Click();&#x000A;            driver.FindElement(By.LinkText("Disco")).Click();&#x000A;            driver.FindElement(By.CssSelector("img[alt=\"Le Freak\"]")).Click();&#x000A;            driver.FindElement(By.LinkText("Add to cart")).Click();&#x000A;            driver.FindElement(By.LinkText("Checkout &gt;&gt;")).Click();&#x000A;            driver.FindElement(By.Id("FirstName")).Clear();&#x000A;            driver.FindElement(By.Id("FirstName")).SendKeys("Homer");&#x000A;            driver.FindElement(By.Id("LastName")).Clear();&#x000A;            driver.FindElement(By.Id("LastName")).SendKeys("Simpson");&#x000A;            driver.FindElement(By.Id("Address")).Clear();&#x000A;            driver.FindElement(By.Id("Address")).SendKeys("742 Evergreen Terrace");&#x000A;            driver.FindElement(By.Id("City")).Clear();&#x000A;            driver.FindElement(By.Id("City")).SendKeys("Springfield");&#x000A;            driver.FindElement(By.Id("State")).Clear();&#x000A;            driver.FindElement(By.Id("State")).SendKeys("Kentucky");&#x000A;            driver.FindElement(By.Id("PostalCode")).Clear();&#x000A;            driver.FindElement(By.Id("PostalCode")).SendKeys("123456");&#x000A;            driver.FindElement(By.Id("Country")).Clear();&#x000A;            driver.FindElement(By.Id("Country")).SendKeys("United States");&#x000A;            driver.FindElement(By.Id("Phone")).Clear();&#x000A;            driver.FindElement(By.Id("Phone")).SendKeys("2341231241");&#x000A;            driver.FindElement(By.Id("Email")).Clear();&#x000A;            driver.FindElement(By.Id("Email")).SendKeys("<a href="mailto:chunkylover53@aol.com">chunkylover53@aol.com</a>");&#x000A;            driver.FindElement(By.Id("PromoCode")).Clear();&#x000A;            driver.FindElement(By.Id("PromoCode")).SendKeys("FREE");&#x000A;            driver.FindElement(By.CssSelector("input[type=\"submit\"]")).Click();&#x000A;    &#x000A;            Assert.IsTrue(driver.PageSource.Contains("Checkout Complete"));&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>You can find the <code>BrittleTest</code> class <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/BrittleTest.cs" rel="nofollow external" class="bo">here</a>.</p>
    <p><a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/Framework/Host.cs" rel="nofollow external" class="bo">Host</a> is a static class, with a single static property: <code>Instance</code>, which upon instantiation fires up IIS Express on the website under test and binds Firefox WebDriver to the browser instance. When the test is finished, it then closes the browser and IIS Express automatically.</p>
    <p>This test fires up a web browser, goes to the home page of the Mvc Music Store website, registers a new user, browses to an album, adds it to the cart, and checks out.</p>
    <p>One might argue this test is doing too much and that’s why it’s brittle; but the size of this test is not the reason it’s brittle – it’s how it’s written that makes it a nightmare to maintain.</p>
    <blockquote><p>There are different schools of thought on UI testing and how much each test should cover. Some believe this test is doing too much and some think a test should cover a real scenario, end to end, and consider this a perfect test (maintainability aside).</p></blockquote>
    <p>So what is wrong with this test?</p>
    <ul>
    <li>This is procedural code. One of the main issues of this style of coding is readability, or lack thereof. If you want to change the test, or if it breaks because one of the involved pages has changed, you will have a hard time figuring out what to change and to draw a line between functionality sections; because it’s all a big pile of code where we get the ‘driver’ to find an element on the page and to do something with it. No modularity.</li>
    <li>This one test by itself might not have much duplication but a few more tests like this and you will have a lot of duplicated selector and logic to interact with web pages from different tests. For example <code>By.Id("UserName")</code> selector will be duplicated in all tests that require registration, and <code>driver.FindElement(By.Id("UserName")).Clear()</code> and <code>driver.FindElement(By.Id("UserName")).SendKeys("")</code> are duplicated anywhere you want to interact with UserName textbox. Then there is the whole registration form, and checkout form etc. that will be repeated in all tests needing to interact with them! Duplicated code leads to maintainability nightmares.</li>
    <li>There is a lot of magic strings everywhere, which again is a maintainability issue.</li>
    </ul>
    <hr>
    <h2>Test Code Is Code!</h2>
    <blockquote><p>There are also patterns that allow you to write more maintainable UI tests.</p></blockquote>
    <p>Much like your actual code, you are going to have to maintain your tests. So give them the same treatment.</p>
    <p>What is it about tests that makes us think we can forego quality in them? If anything, a bad test suite in my opinion is a lot harder to maintain than bad code. I have had bad pieces of working code in production for years which never broke and I never had to touch them. Sure it was ugly and hard to read and maintain but it worked and it didn’t need change so the real maintenance cost was zero. The situation is not quite the same for bad tests though: because bad tests are going to break and fixing them is going to be hard. I cannot count the number of times I have seen developers avoid testing because they think writing tests is a huge waste of time because it takes too much time to maintain.</p>
    <p>Test code is code: Do you apply <a href="http://www.objectmentor.com/resources/articles/srp.pdf" rel="nofollow external" class="bo">SRP</a> on your code? Then you should apply it on your tests too. Is your code <a href="http://c2.com/cgi/wiki?DontRepeatYourself" rel="nofollow external" class="bo">DRY</a>? Then DRY up your tests too. If you don’t write good tests (UI or otherwise) you will waste a lot of time maintaining them.</p>
    <p>There are also patterns that allow you to write more maintainable UI tests. These patterns are platform agnostic: I have used these very same ideas and patterns to write UI tests for WPF applications and web applications written in ASP.Net and Ruby on Rails. So regardless of your technology stack you should be able to make your UI tests a lot more maintainable by following a few simple steps.</p>
    <h3>Introducing the Page Object Pattern</h3>
    <p>A lot of the above mentioned issues are rooted in the procedural nature of the test script and the solution is easy: Object Orientation.</p>
    <p>Page Object is a pattern used to apply object orientation to UI tests. From the <a href="https://code.google.com/p/selenium/wiki/PageObjects" rel="nofollow external" class="bo">Selenium wiki</a>:</p>
    <blockquote><p>Within your web app’s UI there are areas that your tests interact with. A Page Object simply models these as objects within the test code. This reduces the amount of duplicated code and means that if the UI changes, the fix need only be applied in one place.</p></blockquote>
    <p>The idea is that for each page in your application/website you want to create one Page Object. Page Objects are basically the UI automation equivalent of your web pages.</p>
    <p>I have gone ahead and refactored the logic and interactions out of the BrittleTest into a few page objects and created a new test that uses them instead of hitting the web driver directly. You can find the new test <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/PageObjectTest.cs" rel="nofollow external" class="bo">here</a>. The code is copied here for your reference:</p>
    <pre>public class TestWithPageObject&#x000A;    {&#x000A;        [Test]&#x000A;        public void Can_buy_an_Album_when_registered()&#x000A;        {&#x000A;            var registerPage = HomePage.Initiate()&#x000A;                .GoToAdminForAnonymousUser()&#x000A;                .GoToRegisterPage();&#x000A;    &#x000A;            registerPage.Username = "HJSimpson";&#x000A;            registerPage.Email = "<a href="mailto:chunkylover53@aol.com">chunkylover53@aol.com</a>";&#x000A;            registerPage.Password = "!2345Qwert";&#x000A;            registerPage.ConfirmPassword = "!2345Qwert";&#x000A;    &#x000A;            var shippingPage = registerPage&#x000A;                .SubmitRegistration()&#x000A;                .SelectGenreByName("Disco")&#x000A;                .SelectAlbumByName("Le Freak")&#x000A;                .AddToCart()&#x000A;                .Checkout();&#x000A;    &#x000A;            shippingPage.FirstName = "Homer";&#x000A;            shippingPage.LastName = "Simpson";&#x000A;            shippingPage.Address = "742 Evergreen Terrace";&#x000A;            shippingPage.City = "Springfield";&#x000A;            shippingPage.State = "Kentucky";&#x000A;            shippingPage.PostalCode = "123456";&#x000A;            shippingPage.Country = "United States";&#x000A;            shippingPage.Phone = "2341231241";&#x000A;            shippingPage.Email = "<a href="mailto:chunkylover53@aol.com">chunkylover53@aol.com</a>";&#x000A;            shippingPage.PromoCode = "FREE";&#x000A;            var orderPage = shippingPage.SubmitOrder();&#x000A;            Assert.AreEqual(orderPage.Title, "Checkout Complete");&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>Admittedly, the test body hasn’t decreased much in size and in fact I had to create seven new classes to support this test. Despite the more lines of code required, we just fixed a lot of issues the original brittle test had (more on this further down). For now, let’s dive a bit deeper into the page object pattern and what we did here.</p>
    <p>With the Page Object pattern you typically create a page object class per web page under test where the class models and encapsulates interactions with the page. So a textbox in your web page becomes a string property on the Page Object and to fill that textbox you just set that text property to the desired value, instead of:</p>
    <pre>driver.FindElement(By.Id("Email")).Clear();&#x000A;    driver.FindElement(By.Id("Email")).SendKeys("<a href="mailto:chunkylover53@aol.com">chunkylover53@aol.com</a>");&#x000A;    </pre>
    <p>we can write:</p>
    <pre>registerPage.Email = "<a href="mailto:chunkylover53@aol.com">chunkylover53@aol.com</a>";&#x000A;    </pre>
    <p>where <code>registerPage</code> is an instance of the <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/PageObjects/RegisterPage.cs" rel="nofollow external" class="bo">RegisterPage</a> class. A checkbox on the page becomes a bool property on the Page Object and ticking and unticking the checkbox is just a matter of setting that boolean property to true or false. Likewise, a link on the web page becomes a method on the Page Object and clicking the link turns into calling the method on the Page Object. So instead of:</p>
    <pre>driver.FindElement(By.LinkText("Admin")).Click();&#x000A;    </pre>
    <p>we can write:</p>
    <pre>homepage.GoToAdminForAnonymousUser();&#x000A;    </pre>
    <p>In fact, any action on our web page becomes a method in our page object and in response to taking that action (i.e. calling the method on the page object) you get an instance of another page object back that points at the web page you just navigated to by taking the action (e.g. submitting a form or clicking a link). This way you can easily chain your view interactions in your test script:</p>
    <pre>var shippingPage = registerPage&#x000A;                .SubmitRegistration()&#x000A;                .SelectGenreByName("Disco")&#x000A;                .SelectAlbumByName("Le Freak")&#x000A;                .AddToCart()&#x000A;                .Checkout();&#x000A;    </pre>
    <p>Here, after registering the user I get taken to the home page (an instance of its page object is returned by <code>SubmitRegistration</code> method). So on the <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/PageObjects/HomePage.cs" rel="nofollow external" class="bo">HomePage</a> instance I call <code>SelectGenreByName</code> which clicks on a ‘Disco’ link on the page which returns an instance of <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/PageObjects/AlbumBrowsePage.cs" rel="nofollow external" class="bo">AlbumBrowsePage</a> and then on that page I call <code>SelectAlbumByName</code> which clicks on the ‘Le Freak’ album and returns an instance of <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/PageObjects/AlbumDetailPage.cs" rel="nofollow external" class="bo">AlbumDetailsPage</a> and so on and so forth.</p>
    <p>I admit it: it is a lot of classes for what used to be no class at all; but we gained a lot of benefits from this practice. Firstly the code is no longer procedural. We have a well contained testing model where each object provides nice encapsulation of interaction with a page. So for example if something changes in your registration logic the only place you have to change is your RegisterPage class instead of having to go through your entire test suite and change every single interaction with the registration view. This modularity also provides for nice reusability: you can reuse your <code>ShoppingCartPage</code> everywhere you need to interact with the shopping cart. So in a simple practice of moving from procedural to object oriented test code we almost eliminated three of the four issues with the initial brittle test which were procedural code, and logic and selector duplication. We still have a little bit of duplication though which we will fix shortly.</p>
    <p>How did we actually implement those page objects? A page object in its root is nothing but a wrapper around the interactions you have with the page. Here I just extracted UI interactions our of the brittle tests and put them into their own page objects. For example the registration logic was extracted into its own class called <code>RegisterPage</code> that looked like this:</p>
    <pre>public class RegisterPage : Page&#x000A;    {&#x000A;        public HomePage SubmitRegistration()&#x000A;        {&#x000A;            return NavigateTo&lt;HomePage&gt;(By.CssSelector("input[type='submit']"));&#x000A;        }&#x000A;    &#x000A;        public string Username          { set { Execute(By.Name("UserName"), e =&gt; { e.Clear(); e.SendKeys(value);}); } }&#x000A;        public string Email             { set { Execute(By.Name("Email"), e =&gt; { e.Clear(); e.SendKeys(value);}); } }&#x000A;        public string ConfirmPassword   { set { Execute(By.Name("ConfirmPassword"), e =&gt; { e.Clear(); e.SendKeys(value);}); } }&#x000A;        public string Password          { set { Execute(By.Name("Password"), e =&gt; { e.Clear(); e.SendKeys(value);}); } }&#x000A;    }&#x000A;    </pre>
    <p>I have created a <code>Page</code> superclass that takes care of a few things, like <code>NavigateTo</code> which helps navigate to a new page by taking an action and <code>Execute</code> that executes some actions on an element. The <code>Page</code> class looked like:</p>
    <pre>public class Page&#x000A;    {&#x000A;        protected RemoteWebDriver WebDriver&#x000A;        {&#x000A;            get { return Host.Instance.WebDriver; }&#x000A;        }&#x000A;    &#x000A;        public string Title { get { return WebDriver.Title; }}&#x000A;    &#x000A;        public TPage NavigateTo&lt;TPage&gt;(By by) where TPage:Page, new()&#x000A;        {&#x000A;            WebDriver.FindElement(by).Click();&#x000A;            return Activator.CreateInstance&lt;TPage&gt;();&#x000A;        }&#x000A;    &#x000A;        public void Execute(By by, Action&lt;IWebElement&gt; action)&#x000A;        {&#x000A;            var element = WebDriver.FindElement(by);&#x000A;            action(element);&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>In the <code>BrittleTest</code>, to interact with an element we did <code>FindElement</code> once per action. The <code>Execute</code> method, apart from abstracting web driver’s interaction, has an added benefit that allows selecting an element, which could be an expensive action, once and taking multiple actions on it:</p>
    <pre>driver.FindElement(By.Id("Password")).Clear();&#x000A;    driver.FindElement(By.Id("Password")).SendKeys("!2345Qwert");&#x000A;    </pre>
    <p>was replaced with:</p>
    <pre>Execute(By.Name("Password"), e =&gt; { e.Clear(); e.SendKeys("!2345Qwert");})&#x000A;    </pre>
    <p>Taking a second look at the <code>RegisterPage</code> page object above we still have a bit of duplication in there. Test code is code and we don’t want duplication in our code; so let’s refactor that. We can extract the code required to fill in a textbox into a method on the <code>Page</code> class and just call that from page objects. The method could be implemented as:</p>
    <pre>public void SetText(string elementName, string newText)&#x000A;    {&#x000A;        Execute(By.Name(elementName), e =&gt;&#x000A;            {&#x000A;                e.Clear();&#x000A;                e.SendKeys(newText);&#x000A;            } );&#x000A;    }&#x000A;    </pre>
    <p>And now the properties on <code>RegisterPage</code> can be shrunk to:</p>
    <pre>public string Username { set { SetText("UserName", value); } }&#x000A;    </pre>
    <p>You could also make a fluent API for it to make the setter read better (e.g. <code>Fill("UserName").With(value)</code>) but I’ll leave that to you.</p>
    <p>We’re not doing anything extraordinary here. Just simple refactoring on our test code like we’ve always done for our, errrr, “other” code!!</p>
    <p>You can see the complete code for <code>Page</code> and <code>RegisterPage</code> classes <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/Framework/Page.cs" rel="nofollow external" class="bo">here</a> and <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/PageObjects/RegisterPage.cs" rel="nofollow external" class="bo">here</a>.</p>
    <h3>Strongly Typed Page Object</h3>
    <p>We resolved procedural issues with the brittle test which made the test more readable, modular, DRYer and effectively maintainable. There is one last issue we didn’t fix: there are still a lot of magic strings everywhere. Not quite a nightmare but still an issue we could fix. Enter strongly typed Page Objects!</p>
    <p>This approach is practical if you’re using an MV* framework for your UI. In our case we are using ASP.Net MVC.</p>
    <p>Let’s take another look at the <code>RegisterPage</code>:</p>
    <pre>public class RegisterPage : Page&#x000A;    {&#x000A;        public HomePage SubmitRegistration()&#x000A;        {&#x000A;            return NavigateTo&lt;HomePage&gt;(By.CssSelector("input[type='submit']"));&#x000A;        }&#x000A;    &#x000A;        public string Username          { set { SetText("UserName", value); } }&#x000A;        public string Email             { set { SetText("Email", value); } }&#x000A;        public string ConfirmPassword   { set { SetText("ConfirmPassword", value); } }&#x000A;        public string Password          { set { SetText("Password", value); } }&#x000A;    }&#x000A;    </pre>
    <p>This page models the <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore/Views/Account/Register.cshtml" rel="nofollow external" class="bo">Register</a> view in our web app (just copying the top bit here for your convenience):</p>
    <pre>@model MvcMusicStore.Models.RegisterModel&#x000A;    &#x000A;    @{&#x000A;        ViewBag.Title = "Register";&#x000A;    }&#x000A;    </pre>
    <p>Hmmm, what’s that <code>RegisterModel</code> there? It’s the View Model for the page: the <code>M</code> in the <code>MVC</code>. <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore/Models/AccountModels.cs#L41" rel="nofollow external" class="bo">Here</a> is the code (I removed the attributes to reduce the noise):</p>
    <pre>public class RegisterModel&#x000A;    {&#x000A;        public string UserName { get; set; }&#x000A;        public string Email { get; set; }&#x000A;        public string Password { get; set; }&#x000A;        public string ConfirmPassword { get; set; }&#x000A;    }&#x000A;    </pre>
    <p>That looks very familiar, doesn’t it? It has the same properties as the <code>RegisterPage</code> class which is not surprising considering <code>RegisterPage</code> was created based on this view and view model. Let’s see if we can take advantage of view models to simplify our page objects.</p>
    <p>I have created a new <code>Page</code> superclass; but a generic one. You can see the code <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/Framework/Page%601.cs" rel="nofollow external" class="bo">here</a>:</p>
    <pre>public class Page&lt;TViewModel&gt; : Page where TViewModel: class, new()&#x000A;    {&#x000A;        public void FillWith(TViewModel viewModel, IDictionary&lt;Type, Func&lt;object, string&gt;&gt; propertyTypeHandling = null)&#x000A;        {   &#x000A;          // removed for brevity&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>The <code>Page&lt;TViewModel&gt;</code> class subclasses the old <code>Page</code> class and provides all its functionality; but it also has one extra method called <code>FillWith</code> which fills in the page with provided view model instance! So now my <code>RegisterPage</code> class looks like:</p>
    <pre>public class RegisterPage : Page&lt;RegisterModel&gt;&#x000A;    {&#x000A;        public HomePage CreateValidUser(RegisterModel model)&#x000A;        {&#x000A;            FillWith(model);&#x000A;            return NavigateTo&lt;HomePage&gt;(By.CssSelector("input[type='submit']"));&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>I duplicated all page objects to show both variations and also to make the codebase easier to follow for you; but in reality you will need one class for each page object.</p>
    <p>After converting my page objects to <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/StronglyTypedPageObjects" rel="nofollow external" class="bo">generic ones</a> now <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/StronglyTypedPageObjectTest.cs" rel="nofollow external" class="bo">the test</a> looks like:</p>
    <pre>public class StronglyTypedPageObjectWithComponent&#x000A;    {&#x000A;        [Test]&#x000A;        public void Can_buy_an_Album_when_registered()&#x000A;        {&#x000A;            var orderedPage = HomePage.Initiate()&#x000A;                .GoToAdminForAnonymousUser()&#x000A;                .GoToRegisterPage()&#x000A;                .CreateValidUser(ObjectMother.CreateRegisterModel())&#x000A;                .SelectGenreByName("Disco")&#x000A;                .SelectAlbumByName("Le Freak")&#x000A;                .AddAlbumToCart()&#x000A;                .Checkout()&#x000A;                .SubmitShippingInfo(ObjectMother.CreateShippingInfo(), "Free");&#x000A;    &#x000A;            Assert.AreEqual("Checkout Complete", orderedPage.Title);&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>That’s it – the entire test! A lot more readable, DRY and maintainable, isn’t it?</p>
    <p>The <code>ObjectMother</code> class that I am using in the test is an <a href="http://martinfowler.com/bliki/ObjectMother.html" rel="nofollow external" class="bo">Object Mother</a> that provides test data (code can be found <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/StronglyTypedPageObjectTest.cs#L26" rel="nofollow external" class="bo">here</a>), nothing fancy:</p>
    <pre>public class ObjectMother&#x000A;    {&#x000A;        public static Order CreateShippingInfo()&#x000A;        {&#x000A;            var shippingInfo = new Order&#x000A;            {&#x000A;                FirstName = "Homer",&#x000A;                LastName = "Simpson",&#x000A;                Address = "742 Evergreen Terrace",&#x000A;                City = "Springfield",&#x000A;                State = "Kentucky",&#x000A;                PostalCode = "123456",&#x000A;                Country = "United States",&#x000A;                Phone = "2341231241",&#x000A;                Email = "<a href="mailto:chunkylover53@aol.com">chunkylover53@aol.com</a>"&#x000A;            };&#x000A;    &#x000A;            return shippingInfo;&#x000A;        }&#x000A;    &#x000A;        public static RegisterModel CreateRegisterModel()&#x000A;        {&#x000A;            var model = new RegisterModel&#x000A;            {&#x000A;                UserName = "HJSimpson",&#x000A;                Email = "<a href="mailto:chunkylover53@aol.com">chunkylover53@aol.com</a>",&#x000A;                Password = "!2345Qwert",&#x000A;                ConfirmPassword = "!2345Qwert"&#x000A;            };&#x000A;    &#x000A;            return model;&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <h3>Don’t Stop at the Page Object</h3>
    <p>Some web pages are very big and complex. Earlier I said test code is code and we should treat it as such. We normally break big and complex web pages into smaller and, in some cases, reusable (partial) components. This allows us to compose a web page from smaller, more manageable components. We should do the same for our tests. To do this we can use Page Components.</p>
    <p>A Page Component is pretty much like a Page Object: it’s a class that encapsulates interaction with some elements on a page. The difference is that it interacts with a small part of a web page: it models a user control or a partial view, if you will. A good example for a page component is a menu bar. A menu bar usually appears on all pages of a web application. You don’t really want to keep repeating the code required to interact with the menu in every single page object. Instead you can create a menu page component and use it from your page objects. You could also use page components to deal with grids of data on your pages, and to take it a step further the grid page component itself could be composed of grid row page components. In the case of Mvc Music Store we could have a <code>TopMenuComponent</code> and a <code>SideMenuComponent</code> and use them from our <code>HomePage</code>.</p>
    <p>Like in your web application, you could also create a, say, <code>LayoutPage</code> page object which models your layout/master page and use that as a superclass for all your other page objects. The layout page would then be composed of menu page components so all pages can hit the menus. I guess a good rule of thumb would be to have a page component per partial view, a layout page object per layout and a page object per web page. That way you know your test code is as granualar and well composed as your code.</p>
    <h2>Some Frameworks for UI Testing</h2>
    <p>What I showed above was a very simple and contrived sample with a few <a href="https://github.com/tutsplus/maintainable-automated-ui-tests/tree/master/src/MvcMusicStore.FunctionalTests/Framework" rel="nofollow external" class="bo">supporting classes</a> as infrastructure for tests. In reality the requirements for UI testing are a lot more complex than that: there are complex controls and interactions, you have to write to and read from your pages, you have to deal with network latencies and have control over AJAX and other Javascript interactions, need to fire off different browsers and so on which I didn’t explain in this article. Although it’s possible to code around all these, using some frameworks could save you a lot of time. Here are the frameworks that I highly recommend:</p>
    <p>Frameworks for .Net:</p>
    <ul>
    <li>
    <a href="https://github.com/TestStack/TestStack.Seleno" rel="nofollow external" class="bo">Seleno</a> is an open source project from <a href="http://teststack.net/" rel="nofollow external" class="bo">TestStack</a> which helps you write automated UI tests with Selenium. It focuses on the use of Page Objects and Page Components and by reading from and writing to web pages using strongly typed view models. If you liked what I did in this article, then you will also like Seleno as most of the code shown here was borrowed from the Seleno codebase.</li>
    <li> <a href="https://github.com/TestStack/White" rel="nofollow external" class="bo">White</a> is an open source framework from <a href="http://teststack.net/" rel="nofollow external" class="bo">TestStack</a> for automating rich client applications based on Win32, WinForms, WPF, Silverlight and SWT (Java) platforms.</li>
    </ul>
    <p>Disclosure: I am a co-founder and a member of the development team in the TestStack organization.</p>
    <p>Frameworks for Ruby:</p>
    <ul>
    <li>
    <a href="https://github.com/jnicklas/capybara" rel="nofollow external" class="bo">Capybara</a> is an acceptance test framework for web applications that helps you test web applications by simulating how a real user would interact with your app.</li>
    <li>
    <a href="https://github.com/jonleighton/poltergeist" rel="nofollow external" class="bo">Poltergeist</a> is a driver for Capybara. It allows you to run your Capybara tests on a headless WebKit browser, provided by <a href="http://www.phantomjs.org/" rel="nofollow external" class="bo">PhantomJS</a>.</li>
    <li>
    <a href="https://github.com/cheezy/page-object" rel="nofollow external" class="bo">page-object</a> (I haven’t personally used this gem) is a simple gem that assists in creating flexible page objects for testing browser based applications. The goal is to facilitate creating abstraction layers in your tests to decouple the tests from the item they are testing and to provide a simple interface to the elements on a page. It works with both watir-webdriver and selenium-webdriver.</li>
    </ul>
    <hr>
    <h2>Conclusion</h2>
    <p>We started with a typical UI automation experience, explained why UI testing fails, provided an example of a brittle test and discussed its issues and resolved them using a few ideas and patterns.</p>
    <p>If you want to take one point from this article it should be: Test Code Is Code. If you think about it, all I did in this article was to apply the good coding and object oriented practices you already know to a UI test.</p>
    <p>There is still a lot to learn about UI testing and I will try to discuss some of the more advanced tips in a future article.</p>
    <p>Happy Testing!</p>
    </div>
]]>
</Body>
<Summary>A few years ago I was very skeptical about automated UI testing and this skepticism was born out of a few failed attempts. I would write some automated UI tests for desktop or web applications and...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/ipSg4YckWTQ/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36785/guest@my.umbc.edu/8793c0ef44c6e82a80523296a0cbff42/api/pixel</TrackingUrl>
<Tag>asp-net</Tag>
<Tag>automated-ui-tests</Tag>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</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>Wed, 09 Oct 2013 13:30:56 -0400</PostedAt>
<EditAt>Wed, 09 Oct 2013 13:30:56 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="36784" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36784">
<Title>Reminder- Stevenson Visit</Title>
<Body>
<![CDATA[
    <div class="html-content">Stevenson University will be on hand this Friday, October 11th in SOND 111 to discuss their nursing program and application process.  We hope to see you there!</div>
]]>
</Body>
<Summary>Stevenson University will be on hand this Friday, October 11th in SOND 111 to discuss their nursing program and application process.  We hope to see you there!</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36784/guest@my.umbc.edu/9ffab462eb25787a68472b05f2447f2b/api/pixel</TrackingUrl>
<Group token="retired-109">Pre-Nursing Society</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-109</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/xsmall.png?1318440980</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/original.jpg?1318440980</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/xxlarge.png?1318440980</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/xlarge.png?1318440980</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/large.png?1318440980</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/medium.png?1318440980</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/small.png?1318440980</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/xsmall.png?1318440980</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/109/90e715513174fd117c8f87c3c61d7d5d/xxsmall.png?1318440980</AvatarUrl>
<Sponsor>Pre-Nursing Society</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 09 Oct 2013 13:18:08 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36778" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36778">
<Title>Seeking Alternative School Break Leaders</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <h5>by Mark Zachar</h5>
    <div>As a first year undergrad at the Illinois Institute of Technology I took a risk and decided to participate in our Alternative Spring Break (ASB) trip to the Dominican Republic, and ever since I’ve been trying to recreate that life-changing experience for myself and others. The challenge I am posing to UMBC undergraduates this week is to not only to think ahead about your Spring Break week plans, but to consider putting work into those plans now in order to have a meaningful, productive, and fun vacation from school next March. Will you work with me to create unique, powerful social change experiences for yourself and your peers? ... <a href="http://umbcbreakingground.wordpress.com/2013/10/09/seeking-alternative-school-break-leaders/" rel="nofollow external" class="bo">(continue reading)</a> </div>
    </div>
]]>
</Body>
<Summary>by Mark Zachar  As a first year undergrad at the Illinois Institute of Technology I took a risk and decided to participate in our Alternative Spring Break (ASB) trip to the Dominican Republic, and...</Summary>
<Website>http://umbcbreakingground.wordpress.com/2013/10/09/seeking-alternative-school-break-leaders/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36778/guest@my.umbc.edu/40185696f37a538a958e119a028e7b69/api/pixel</TrackingUrl>
<Group token="bg">UMBC BreakingGround</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/bg</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xsmall.png?1360169927</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/original.png?1360169927</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xxlarge.png?1360169927</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xlarge.png?1360169927</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/large.png?1360169927</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/medium.png?1360169927</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/small.png?1360169927</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xsmall.png?1360169927</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/493/e0dc61eceffa1a7dff9d396b4b7c5011/xxsmall.png?1360169927</AvatarUrl>
<Sponsor>UMBC BreakingGround</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/036/778/1f539e92146eac32306bcb0f8ba374ec/xxlarge.jpg?1381335827</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/036/778/1f539e92146eac32306bcb0f8ba374ec/xlarge.jpg?1381335827</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/036/778/1f539e92146eac32306bcb0f8ba374ec/large.jpg?1381335827</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/036/778/1f539e92146eac32306bcb0f8ba374ec/medium.jpg?1381335827</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/036/778/1f539e92146eac32306bcb0f8ba374ec/small.jpg?1381335827</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/036/778/1f539e92146eac32306bcb0f8ba374ec/xsmall.jpg?1381335827</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/036/778/1f539e92146eac32306bcb0f8ba374ec/xxsmall.jpg?1381335827</ThumbnailUrl>
<PawCount>20</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 09 Oct 2013 12:24:36 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36780" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36780">
<Title>App Smart: Cheat Sheets for Your Walk in the Woods</Title>
<Body>
<![CDATA[
    <div class="html-content">An array of smartphone apps help users identify trees, flowers, birds, animals and rocks, whether along nature trails or in their own backyards.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F10%2Ftechnology%2Fpersonaltech%2Fcheat-sheets-for-your-walk-in-the-woods.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Cheat+Sheets+for+Your+Walk+in+the+Woods" 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%2F10%2F10%2Ftechnology%2Fpersonaltech%2Fcheat-sheets-for-your-walk-in-the-woods.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Cheat+Sheets+for+Your+Walk+in+the+Woods" 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%2F10%2F10%2Ftechnology%2Fpersonaltech%2Fcheat-sheets-for-your-walk-in-the-woods.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Cheat+Sheets+for+Your+Walk+in+the+Woods" 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%2F10%2F10%2Ftechnology%2Fpersonaltech%2Fcheat-sheets-for-your-walk-in-the-woods.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Cheat+Sheets+for+Your+Walk+in+the+Woods" 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%2F10%2F10%2Ftechnology%2Fpersonaltech%2Fcheat-sheets-for-your-walk-in-the-woods.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Cheat+Sheets+for+Your+Walk+in+the+Woods" 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/176965729102/u/0/f/640387/c/34625/s/3240492c/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965729102/u/0/f/640387/c/34625/s/3240492c/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176965729102/u/0/f/640387/c/34625/s/3240492c/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965729102/u/0/f/640387/c/34625/s/3240492c/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176965729102/u/0/f/640387/c/34625/s/3240492c/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965729102/u/0/f/640387/c/34625/s/3240492c/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/176965729102/u/0/f/640387/c/34625/s/3240492c/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965729102/u/0/f/640387/c/34625/s/3240492c/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>An array of smartphone apps help users identify trees, flowers, birds, animals and rocks, whether along nature trails or in their own backyards.      </Summary>
<Website>http://www.nytimes.com/2013/10/10/technology/personaltech/cheat-sheets-for-your-walk-in-the-woods.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36780/guest@my.umbc.edu/f9f55754226443355be132cc3b789e1d/api/pixel</TrackingUrl>
<Tag>android-operating-system</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>mobile-applications</Tag>
<Tag>new</Tag>
<Tag>smartphones</Tag>
<Tag>technology</Tag>
<Tag>trees-and-shrubs</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>Wed, 09 Oct 2013 12:18:24 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36805" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36805">
<Title>Without Test Tubes, 3 Win Nobel in Chemistry</Title>
<Body>
<![CDATA[
    <div class="html-content">Martin Karplus, Michael Levitt and Arieh Warshel were recognized for computer simulations that enable closer study of complex reactions like photosynthesis and the design of new drugs.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F10%2Fscience%2Fthree-researchers-win-nobel-prize-in-chemistry.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Without+Test+Tubes%2C+3+Win+Nobel+in+Chemistry" 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%2F10%2F10%2Fscience%2Fthree-researchers-win-nobel-prize-in-chemistry.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Without+Test+Tubes%2C+3+Win+Nobel+in+Chemistry" 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%2F10%2F10%2Fscience%2Fthree-researchers-win-nobel-prize-in-chemistry.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Without+Test+Tubes%2C+3+Win+Nobel+in+Chemistry" 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%2F10%2F10%2Fscience%2Fthree-researchers-win-nobel-prize-in-chemistry.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Without+Test+Tubes%2C+3+Win+Nobel+in+Chemistry" 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%2F10%2F10%2Fscience%2Fthree-researchers-win-nobel-prize-in-chemistry.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Without+Test+Tubes%2C+3+Win+Nobel+in+Chemistry" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    </div>
]]>
</Body>
<Summary>Martin Karplus, Michael Levitt and Arieh Warshel were recognized for computer simulations that enable closer study of complex reactions like photosynthesis and the design of new drugs.      </Summary>
<Website>http://www.nytimes.com/2013/10/10/science/three-researchers-win-nobel-prize-in-chemistry.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36805/guest@my.umbc.edu/cd6b75496b9fed07629da1e6f90f02ba/api/pixel</TrackingUrl>
<Tag>chemistry</Tag>
<Tag>google-inc-goog-nasdaq</Tag>
<Tag>karplus-martin</Tag>
<Tag>levitt-michael-1947</Tag>
<Tag>new</Tag>
<Tag>nobel-prizes</Tag>
<Tag>technology</Tag>
<Tag>warshel-arieh</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>Wed, 09 Oct 2013 12:16:52 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="36776" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36776">
<Title>How to Project Manage Part-time People</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>A little backstory: I began learning to program in early 2012 to build my new startup. In starting my company, I took two atypical approaches: </p>
    <ol>
    <li>I wanted to learn to program to build the first version and</li>
    <li>I decided to continue my tradition of bootstrapping instead of raising money.</li>
    </ol>
    <p>Having had a couple of financial successes with my previous companies, I was able to work full-time on <a href="https://www.uncover.com/" rel="nofollow external" class="bo">Uncover</a> without taking a salary whereas my co-founder and the other people I work with would only be able to work part-time, during their off hours. The differences in our time commitments have left me to take on a lot of different roles, and I wanted to share my experience with project managing part-time people. Because of our unique situation, I’ve come up with a way to project manage Uncover that may also help you with planning out your <a href="http://blog.teamtreehouse.com/the-value-of-side-projects" rel="nofollow external" class="bo">Side Projects</a>.</p>
    <h2>The Milestones and Project Roadmap</h2>
    <p>Because I work with four people who have a very small amount of time each week (anywhere between 2-10 hours), I do not want to waste their valuable hours with putting any of the project management burden on their shoulders. I want them to be able to see exactly what to do next without messing about in an elaborate system.</p>
    <p>That’s why we use <a href="http://www.google.com/drive/apps.html" rel="nofollow external" class="bo">Google Drive’s Spreadsheet</a> for our milestones. While a spreadsheet may not be practical for full-time teams with a lot of moving pieces, the scope of our work is small, and a well-designed spreadsheet is easy to navigate. Our spreadsheet has six columns:</p>
    <ul>
    <li>Title of the piece of work (e.g. “welcome flow”)</li>
    <li>Design time</li>
    <li>Frontend dev time</li>
    <li>Backend dev time</li>
    <li>Total hours</li>
    <li>Notes</li>
    </ul>
    <p>Here’s a screenshot of the header:</p>
    <p><img src="http://blog.teamtreehouse.com/wp-content/uploads/2013/10/part-time.png" alt="The Milestone Spreadsheet" width="1180" height="88" style="max-width: 100%; height: auto;"></p>
    <p>Our team consists of three builders other than myself: two backend engineers and one visual designer. Together we get together regularly to estimate the amount of time each piece of work will take across design, frontend and backend. These phases together make up the total hours for that feature, allowing us to plan our work accordingly.</p>
    <p>Under the heading “Notes,” we link off to our project’s <a href="https://github.com/" rel="nofollow external" class="bo">GitHub Issues</a> (more on that later). Instead of including elaborate notes in the spreadsheet as some do, I prefer to keep all specifications, comments, images and brainstorming confined to a GitHub Issue. Our spreadsheet is only for seeing our Milestones and Project Roadmap.</p>
    <p>The only other feature of our spreadsheet is a color-coded priority list. Our priority system is oriented mostly toward what needs to be done first so that no one gets held up waiting for another person to complete their work. Anything left off the priority list is a “nice to have” and not required for our launch.</p>
    <h2>The To Do List</h2>
    <p>As I briefly mentioned above, [GitHub Issues] is where we keep our notes for each piece of work on our spreadsheet. The GitHub Issue contains the specifications for the feature and any discussion. Each Issue is linked to our Hipchat, which we use to keep in touch during the day. That is where any comment will appear in the chat feed for everyone to see.</p>
    <p>The reason we have chosen to use GitHub Issues is because it’s how we deploy updates to our application. It’s easiest for everyone involved if our engineers can click into an Issue from our spreadsheet, see the specs, and get to work. Then any deployment they accomplish will close the Issue and we’ll be on to the next thing. If we kept our notes in other Google Drive files, Basecamp, or any other project management tool, that’d slow down our development time. While in other files the notes may be subdivided and more logically organized, they wouldn’t be faster for us.</p>
    <h2>The Check Ups</h2>
    <p>While 90% of our work is done remotely, we stay in touch every day through Hipchat, and we do get together once every week to two weeks. Even though people are busy at their day jobs and cannot immediately respond to the chat in Hipchat, when they do get a free moment they can join the conversation. An occasional Skype call at night can help clear up anything that wasn’t clear from the day’s messages.</p>
    <p>Nothing beats meeting in person, and we try to get together for an hour or two over beers and pretzels once every week to two weeks. During those meetings, we discuss any outstanding topics and revisit our upcoming roadmap. These times are less for getting work done and more for making sure that everyone is up-to-date with what’s going on. Oftentimes, our visual designer and I will present the latest mockups to the team for feedback. He and I get together more often that the rest of the team, as we prefer to work together on Uncover’s user experience and product features. We wireframe together and then he takes that work home to complete the UI late at night.</p>
    <p>While nothing beats in-person meetings for making sure that everyone is on the same page, I send frequent (2-3x a week) emails updating the progress of Uncover. While those updates are primarily filled with recently completed product work and what’s upcoming, I also mention more general things like new sales, new business development accomplishments, new revenue milestones, and any informative support emails we’ve received. I don’t want to burn people out by allowing them to forget that we’re not building product just to build it: the update emails remind them that we build product to touch the lives of employers and their employees and to build long-lasting companies. Part-time people can easily be burned out if your only interactions with them are product related. Don’t forget to emphasize the bigger picture and to have fun.</p>
    <p>The post <a href="http://blog.teamtreehouse.com/how-to-project-manage-part-time-people" rel="nofollow external" class="bo">How to Project Manage Part-time People</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>A little backstory: I began learning to program in early 2012 to build my new startup. In starting my company, I took two atypical approaches:      I wanted to learn to program to build the first...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/VNDHGQbMpFw/how-to-project-manage-part-time-people</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36776/guest@my.umbc.edu/e2acb4e2efc2bfc37950d4a3f042bae8/api/pixel</TrackingUrl>
<Tag>android</Tag>
<Tag>business</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>ios</Tag>
<Tag>javascript</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>Wed, 09 Oct 2013 12:00:44 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="36790" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36790">
<Title>Free Software Ties the Internet of Things Together</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>OpenRemote is an open-source Internet of Things platform that could help spur smarter homes and cities.</p>
    <p>If you buy several Internet-connected home gadgets—say, a “smart” thermostat, “smart” door lock, and “smart” window blinds—you’ll likely have to control each one with a separate app, meaning it exists in its own little silo.</p>
    </div>
]]>
</Body>
<Summary>OpenRemote is an open-source Internet of Things platform that could help spur smarter homes and cities.  If you buy several Internet-connected home gadgets—say, a “smart” thermostat, “smart” door...</Summary>
<Website>http://www.technologyreview.com/news/519666/free-software-ties-the-internet-of-things-together/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36790/guest@my.umbc.edu/7336934b3b07ced65471a6bd59e0de5f/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 09 Oct 2013 11:40:42 -0400</PostedAt>
<EditAt>Wed, 09 Oct 2013 11:40:00 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="36775" important="false" status="posted" url="https://my3.my.umbc.edu/posts/36775">
<Title>Comcast Hopes to Promote TV Shows in Twitter Deal</Title>
<Body>
<![CDATA[
    <div class="html-content">A new feature, See It, is meant to make it easy to move from reading comments about a show to watching that show.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F10%2Fbusiness%2Fmedia%2Fthrough-twitter-partnership-comcast-hopes-to-encourage-tv-viewing.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Comcast+Hopes+to+Promote+TV+Shows+in+Twitter+Deal" 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%2F10%2F10%2Fbusiness%2Fmedia%2Fthrough-twitter-partnership-comcast-hopes-to-encourage-tv-viewing.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Comcast+Hopes+to+Promote+TV+Shows+in+Twitter+Deal" 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%2F10%2F10%2Fbusiness%2Fmedia%2Fthrough-twitter-partnership-comcast-hopes-to-encourage-tv-viewing.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Comcast+Hopes+to+Promote+TV+Shows+in+Twitter+Deal" 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%2F10%2F10%2Fbusiness%2Fmedia%2Fthrough-twitter-partnership-comcast-hopes-to-encourage-tv-viewing.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Comcast+Hopes+to+Promote+TV+Shows+in+Twitter+Deal" 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%2F10%2F10%2Fbusiness%2Fmedia%2Fthrough-twitter-partnership-comcast-hopes-to-encourage-tv-viewing.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Comcast+Hopes+to+Promote+TV+Shows+in+Twitter+Deal" 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/176965686436/u/0/f/640387/c/34625/s/32401269/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965686436/u/0/f/640387/c/34625/s/32401269/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176965686436/u/0/f/640387/c/34625/s/32401269/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965686436/u/0/f/640387/c/34625/s/32401269/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176965686436/u/0/f/640387/c/34625/s/32401269/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965686436/u/0/f/640387/c/34625/s/32401269/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/176965686436/u/0/f/640387/c/34625/s/32401269/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176965686436/u/0/f/640387/c/34625/s/32401269/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>A new feature, See It, is meant to make it easy to move from reading comments about a show to watching that show.      </Summary>
<Website>http://www.nytimes.com/2013/10/10/business/media/through-twitter-partnership-comcast-hopes-to-encourage-tv-viewing.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/36775/guest@my.umbc.edu/8cc5ea4f94af1208f7ff574d4148b8ad/api/pixel</TrackingUrl>
<Tag>cbs-corporation-cbs-nyse</Tag>
<Tag>comcast-corporation-cmcsa-nasdaq</Tag>
<Tag>costolo-dick</Tag>
<Tag>new</Tag>
<Tag>schwartz-sam</Tag>
<Tag>social-media</Tag>
<Tag>technology</Tag>
<Tag>twitter</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>Wed, 09 Oct 2013 11:14:32 -0400</PostedAt>
<EditAt>Wed, 09 Oct 2013 11:14:32 -0400</EditAt>
</NewsItem>

</News>
