<?xml version="1.0"?>
<News hasArchived="true" page="7847" pageCount="10751" pageSize="10" timestamp="Sun, 16 Aug 2026 01:33:01 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7847">
<NewsItem contentIssues="false" id="40792" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40792">
<Title>Call for Review: XQueryX 3.0 Proposed Recommendation Published</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>The <a href="http://www.w3.org/XML/Query/" rel="nofollow external" class="bo">XML Query Working Group</a> has published a Proposed Recommendation of <a href="http://www.w3.org/TR/2014/PR-xqueryx-30-20140130/" rel="nofollow external" class="bo">XQueryX 3.0</a>. XQueryX is an XML representation of an XQuery. It was created by mapping the productions of the XQuery grammar into XML productions. The result is not particularly convenient for humans to read and write, but it is easy for programs to parse, and because XQueryX is represented in XML, standard XML tools can be used to create, interpret, or modify queries. Comments are welcome through <strong>25 February 2014</strong>. Learn more about the <a href="http://www.w3.org/XML/" rel="nofollow external" class="bo">Extensible Markup Language (XML) Activity</a>.</p></div>
]]>
</Body>
<Summary>The XML Query Working Group has published a Proposed Recommendation of XQueryX 3.0. XQueryX is an XML representation of an XQuery. It was created by mapping the productions of the XQuery grammar...</Summary>
<Website>http://www.w3.org/blog/news/archives/3619</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40792/guest@my.umbc.edu/d8b67eef1b0f4d0879b9c8522515071e/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>home-page-stories</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>publication</Tag>
<Tag>sql</Tag>
<Tag>w3</Tag>
<Tag>web</Tag>
<Tag>xml-core-technologies</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 10:02:29 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="40788" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40788">
<Title>Website Accessibility Conformance Evaluation Methodology (WCAG-EM): Final Review Draft</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>A complete Working Draft of <a href="http://www.w3.org/TR/WCAG-EM/" rel="nofollow external" class="bo">Website Accessibility Conformance Evaluation Methodology (WCAG-EM) 1.0</a> was published today by the Web Content Accessibility Guidelines Working Group (<a href="http://www.w3.org/WAI/GL/" rel="nofollow external" class="bo">WCAG WG</a>) and Evaluation and Repair Tools Working Group (<a href="http://www.w3.org/WAI/ER/" rel="nofollow external" class="bo">ERT WG</a>), through the joint <abbr>WCAG</abbr> 2.0 Evaluation Methodology Task Force (<a href="http://www.w3.org/WAI/ER/2011/eval/eval-tf" rel="nofollow external" class="bo">Eval TF</a>). WCAG-EM describes an approach for evaluating how websites, including Web applications and websites for mobile devices, conform to <a href="http://www.w3.org/WAI/intro/wcag" rel="nofollow external" class="bo">WCAG 2.0</a>. Comments are welcome through <strong>28 February 2014</strong>. After the comments from this review period are addressed, WAI expects to publish this as an informative (that is, non-normative) W3C Working Group Note. Learn more from the <a href="http://www.w3.org/WAI/eval/conformance" rel="nofollow external" class="bo">WCAG-EM Overview</a> and about the <a href="http://www.w3.org/WAI/" rel="nofollow external" class="bo">Web Accessibility Initiative (WAI)</a>.</p></div>
]]>
</Body>
<Summary>A complete Working Draft of Website Accessibility Conformance Evaluation Methodology (WCAG-EM) 1.0 was published today by the Web Content Accessibility Guidelines Working Group (WCAG WG) and...</Summary>
<Website>http://www.w3.org/blog/news/archives/3618</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40788/guest@my.umbc.edu/3d4f7e3eabff5bf8e500ca6f9e85306b/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>home-page-stories</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>publication</Tag>
<Tag>sql</Tag>
<Tag>w3</Tag>
<Tag>web</Tag>
<Tag>web-design-and-applications</Tag>
<Tag>web-of-services</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 09:48:19 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="40789" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40789">
<Title>XMLHttpRequest Level 1 Draft Published</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>The <a href="http://www.w3.org/2008/webapps/" rel="nofollow external" class="bo">Web Applications Working Group</a> has published a Working Draft of <a href="http://www.w3.org/TR/2014/WD-XMLHttpRequest-20140130/" rel="nofollow external" class="bo">XMLHttpRequest Level 1</a>. The XMLHttpRequest specification defines an API that provides scripted client functionality for transferring data between a client and a server. Learn more about the <a href="http://www.w3.org/2006/rwc/" rel="nofollow external" class="bo">Rich Web Client Activity</a>.</p></div>
]]>
</Body>
<Summary>The Web Applications Working Group has published a Working Draft of XMLHttpRequest Level 1. The XMLHttpRequest specification defines an API that provides scripted client functionality for...</Summary>
<Website>http://www.w3.org/blog/news/archives/3616</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40789/guest@my.umbc.edu/b1c29eec6aa2b46066ee593a585d761f/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>home-page-stories</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>publication</Tag>
<Tag>sql</Tag>
<Tag>w3</Tag>
<Tag>web</Tag>
<Tag>web-design-and-applications</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 09:36:47 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="40787" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40787">
<Title>The Mystery Is Resolved: The Rain That Never Stops, Cakes and Frightened Cats</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <table width="650">
    <tbody>
    <tr>
    <td>
    <div>
    <img src="http://statisches.auslieferung.commindo-media-ressourcen.de/advertisement.gif" alt="" style="max-width: 100%; height: auto;"><br><a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=1" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=1" alt="" style="max-width: 100%; height: auto;"></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=2" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=2" alt="" style="max-width: 100%; height: auto;"></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=3" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=3" alt="" style="max-width: 100%; height: auto;"></a>
    </div>
    </td>
    </tr>
    </tbody>
    </table>
    <p>Everybody loves a good riddle, but when you design one, you never know how it will be perceived until you try it out. The <a href="http://www.smashingmagazine.com/the-new-smashing-mystery-riddle-smashingconf-ny/" rel="nofollow external" class="bo">new Smashing Mystery Riddle</a> didn’t emerge over night, and after weeks of fine adjustments and many — <em>many</em> — test runs, we prepared some coffee, pressed that shiny “Publish” button and, you know, started waiting for tweets. And now, exactly two days later, it’s time to <strong>reveal the mystery and announce the winners</strong>. Oh, you want to <a href="http://www.smashingmagazine.com/the-new-smashing-mystery-riddle-smashingconf-ny/" rel="nofollow external" class="bo">figure it out</a> first? Well, then please close this tab since there are (obviously) spoilers in this post.</p>
    <h3>The Mystery Riddle</h3>
    <p>Admittedly, the new riddle turned out a bit harder than the previous one. Again, we didn’t want it to make it easy and we also didn’t want to make it <em>too</em> hard since most people would just drop it at some point. We <em>did</em> want to challenge you to be creative and think hard though, and finding this sweet spot of complexity took time and patience. So within the five weeks since the initial idea was conceived, <strong>we ran 17 various tests</strong> on various variations of various animated GIFs.</p>
    <p>Well, obviously we got some of the testers totally confused and disoriented, and probably also annoyed and frustrated, and perhaps even angry since they had to stare at the infinitely looped GIFs for quite some time. Over the first two weeks of testing, out of 14 people not even one single person could solve the riddle! Now, that did not make for happy testers for sure! <em>(Oh those poor, poor souls!).</em></p>
    <p>In fact, once you start running tests and introduce little variations of GIFs, and edit the hints and change file names, you start interpreting things that are just not there, and you start seeing animated GIFs all over the place. At some point we started thinking about running looped animated GIFs within looped animated GIFs within looped animated GIFs (<em>“Inception”</em>), and we even <a href="http://provide.smashingmagazine.com/mystery-riddle/inception.gif" rel="nofollow external" class="bo">created</a> <a href="http://provide.smashingmagazine.com/mystery-riddle/endless-inception.gif" rel="nofollow external" class="bo">prototypes</a> for that. (Seriously.)</p>
    <p><a href="http://media.smashingmagazine.com/wp-content/uploads/2014/01/inception.gif" rel="nofollow external" class="bo"><img alt="Inception" src="http://media.smashingmagazine.com/wp-content/uploads/2014/01/inception.gif" style="max-width: 100%; height: auto;"></a><br><em>The Inception idea was interesting to explore, but failed miserably in our tests, confusing testers. <a href="http://media.smashingmagazine.com/wp-content/uploads/2014/01/inception.gif" rel="nofollow external" class="bo">Large view.</a></em></p>
    <p><a href="http://guillaumekurkdjian.com/" rel="nofollow external" class="bo">Guillaume</a>, the designer of the GIFs, wasn’t happy with this idea, and we weren’t sure what the heck we were doing. Also, testers went insane and complained about massive headaches and eye strain. That’s not a feeling you want to explore. Well, most of you at least. Going back and forth in our prototypes and drawing boards, by the end we had something that we felt was just right, and on average took around <strong>38 minutes</strong> to solve.</p>
    <h3>Level 1: The Flying Voyage</h3>
    <p>Well, the rules were the same, and the game wasn’t much different either. We presented a <strong>mysterious animated GIF that contained a hidden message</strong> which had to be found. Once you resolved the mystery, you’d see a Twitter hashtag displayed in plain text. So again, just like last time, there wouldn’t be any room for vague interpretations. The solution would be displayed in <em>plain text</em>. And the only hint was to <em>watch out for the file name.</em> And just like the last time, the main difficulty was finding the right idea to pass level 1.</p>
    <p><img alt="Smashing Book Mystery" src="http://provide.smashingmagazine.com/mystery-riddle/catch-the-birds.gif" style="max-width: 100%; height: auto;"><br>
    <em>Level 1: The only hint was to watch out for the file name.</em></p>
    <p>So how does it work? Well, if you look very closely at the animation, you’ll notice a steaming cup of coffee on the table with a sign: “Do Not Drink Hot”. Is there a way to cool down the cup of coffee? Initially, we wanted to have something like a responsive animated GIF, which would change depending on the screen resolution, and which would kind of simulate the cooling down of the coffee with JavaScript and/or media queries. However, this would be a bit too easy to detect for our smart audience, so it was a no-go.</p>
    <p><a href="http://media.smashingmagazine.com/wp-content/uploads/2014/01/mystery-riddle-full-opt.png" rel="nofollow external" class="bo"><img alt="Smashing Mystery Heat Map" src="http://media.smashingmagazine.com/wp-content/uploads/2014/01/mystery-riddle-small-opt1.png" width="500" height="459" style="max-width: 100%; height: auto;"></a><br><em>Surprisingly, you can see many clicks <em>outside</em> the image on the right side — perhaps this is where the birds were supposed to fly out? We’ll never find out. <a href="http://media.smashingmagazine.com/wp-content/uploads/2014/01/mystery-riddle-full-opt.png" rel="nofollow external" class="bo">Large view.</a></em></p>
    <p>Now, if you watch out for the file name like you are asked to, you’ll discover that you are expected to <strong>catch the birds</strong>. Since it’s an animated GIF and it isn’t linked, clicking on any area of the image won’t help at all. Neither would an analysis of the color levels or frames lead you anywhere. Some readers noticed that a Twitter hashtag potentially could be a hex color code, so we started receiving lots of very… well, <em>interesting</em> tweets containing various hex values for the Twitter birds and surroundings in the room. It must have taken quite some time, but this was the wrong direction to take. Sorry about that!</p>
    <p>So, how can you catch the birds? Well, since nothing is clickable, you have to change something else. Ah! Right. Let’s try <strong>changing the file name</strong> of the image to something like… <code><a href="http://provide.smashingmagazine.com/mystery-riddle/open-the-window.gif" rel="nofollow external" class="bo">open-the-window.gif</a></code>?..</p>
    <p><a href="http://provide.smashingmagazine.com/mystery-riddle/still-catch-the-birds.gif" rel="nofollow external" class="bo"><img alt="Still catch the birds" src="http://provide.smashingmagazine.com/mystery-riddle/still-catch-the-birds.gif" style="max-width: 100%; height: auto;"></a><br><em>Changing the file names doesn’t really help. You still have to catch the birds.</em></p>
    <p>Aha! So that’s a blind alley. Well, there is a steaming coffee pot on the table. Are you getting closer? Or is it just a distraction? Well, there is a note at the bottom. Changing image URLs won’t get you anywhere. That’s a bummer. But you are now supposed to look outside the window and notice what kind of birds you see. Well, they look like… <strong>Twitter birds</strong>, right? And according to the file name, you still have to catch them.</p>
    <p>Okay, so you could just head over to Twitter and do a simple <a href="https://twitter.com/search?q=catch%20the%20birds&amp;src=typd" rel="nofollow external" class="bo">search for “Catch the birds”</a>. Well, it isn’t particularly helpful. (Except that there are quite a few frustrated readers like us, though, so that’s probably a good thing. Well, at least we aren’t alone out there!). But wait: could <a href="https://twitter.com/search?q=%23catchthebirds&amp;src=typd" rel="nofollow external" class="bo">#catchthebirds</a> be the hidden hashtag? Well, potentially, yes, but the riddle clearly says that the hashtag will be hidden in <em>plain text</em>, so probably not.</p>
    <p>But wait a second. If the hashtag doesn’t seem to be right, what about the Twitter handles? Let’s try to <a href="http://www.twitter.com/CatchTheBirds" rel="nofollow external" class="bo">@CatchTheBirds</a>. Bingo! </p>
    <p><a href="https://twitter.com/CatchTheBirds" rel="nofollow external" class="bo"><img alt="Smashing Book Mystery" src="http://media.smashingmagazine.com/wp-content/uploads/2014/01/catchthebirds.jpg" width="500" style="max-width: 100%; height: auto;"></a><br><a href="http://www.twitter.com/CatchTheBirds" rel="nofollow external" class="bo"><img src="http://media.smashingmagazine.com/wp-content/uploads/2014/01/tweets-level2-opt.png" alt="Level 2." style="max-width: 100%; height: auto;"></a><br><em><a href="https://twitter.com/CatchTheBirds" rel="nofollow external" class="bo">@CatchTheBirds</a> would help bring you to Level 2.</em></p>
    <p>Landing on “The Flying Voyage”, it looks like you are on the right path, and you’ve passed level 1. It wasn’t too easy, so a coffee break is probably well-deserved before we <a href="http://smashed.by/thunder" rel="nofollow external" class="bo">proceed to the next level</a>. Oh wait, the coffee — what about that sign on the table saying “Do Not Drink Hot”? Could it be a key as well? <a href="http://www.twitter.com/DoNotDrinkHot" rel="nofollow external" class="bo">@DoNotDrinkHot</a>. Right on! At this point you are supposed to start feeling pretty awesome.</p>
    <p>Indeed, the hints for each level are <strong>hidden somewhere on Twitter</strong>, so the question now is how to use the clues in animated GIFs and file names to pass the levels. Well, this will involve quite a bit of work.</p>
    <h3>Level 2: The Book Jungle</h3>
    <p>So, you are brought to another animated GIF, and it looks like the main character already got his coffee and is now reading the book. The file name says that “something is wrong here” but there’s nothing wrong with a cat being afraid of thunder… right? So what else could it be?</p>
    <p><img alt="Smashing Book Mystery" src="http://provide.smashingmagazine.com/mystery-riddle/something-is-wrong-here.gif" style="max-width: 100%; height: auto;"><br><em>Level 3: The file name says there’s “something wrong here”… but what could it be?</em></p>
    <p>The couch? Check. The window? Check. The tree? Check. The table? Check. The portraits on the wall? Check. The book? Wait a second. Isn’t the <a href="http://www.smashingmagazine.com/books/#the-smashing-book-4" rel="nofollow external" class="bo">Smashing Book</a> held upside down? The cover of the book is displayed on the right page so how can the character actually read it? Could it be that we have to flip the book somehow or turn it around? Perhaps with, well, <a href="https://twitter.com/FlipTheBook" rel="nofollow external" class="bo">@FlipTheBook</a>, <a href="https://twitter.com/TurnTheBook" rel="nofollow external" class="bo">@TurnTheBook</a>, <a href="https://twitter.com/TurnOverTheBook" rel="nofollow external" class="bo">@TurnOverTheBook</a> or <a href="https://twitter.com/RotateTheBook" rel="nofollow external" class="bo">@RotateTheBook</a>?</p>
    <p><a href="https://twitter.com/TurnTheBook" rel="nofollow external" class="bo"><img alt="Smashing Book Mystery" src="http://media.smashingmagazine.com/wp-content/uploads/2014/01/turnthebook.jpg" width="500" style="max-width: 100%; height: auto;"></a><br><em><a href="https://twitter.com/TurnTheBook" rel="nofollow external" class="bo">@TurnTheBook</a> would help bring you to Level 3.</em></p>
    <p>Excellent. You’ve reached level 3 and apparently you are halfway through! You deserve warm milk, cookies, and probably a donut as well. Apparently, that cat afraid of thunder was just a sneaky distraction—you better watch out for those! Let’s proceed to level 3.</p>
    <h3>Level 3: The Broadway</h3>
    <p>Okay, the book is now in order, and that mysterious person keeps drinking coffee and reading the book. The file name says that “these donuts are making me thirsty…” Now this sounds familiar. Isn’t it a <a href="https://www.youtube.com/watch?v=DRaLpHoZA8E" rel="nofollow external" class="bo">reference to Seinfeld</a>? Maybe that’s where you should look, or maybe it’s just yet another distraction. In fact, if you think about it, that character can’t be <em>that</em> thirsty since he keeps drinking all the time. Could it be that it’s the cat who is thirsty? Let’s try to <a href="http://www.twitter.com/FeedTheCat" rel="nofollow external" class="bo">@FeedTheCat</a>. Oh, well. It was worth a shot.</p>
    <p><img alt="Smashing Book Mystery" src="http://provide.smashingmagazine.com/mystery-riddle/these-donuts-are-making-me-thirsty.gif" style="max-width: 100%; height: auto;"><br><em>Level 3: These donuts are making me thirsty…</em></p>
    <p>But what do we know now? We know that <a href="http://www.twitter.com/CatWantsMilk" rel="nofollow external" class="bo">@CatWantsMilk</a>, so what if we <a href="http://www.twitter.com/GiveCatSomeMilk" rel="nofollow external" class="bo">@GiveCatSomeMilk</a>? Alternatively, we could <a href="https://twitter.com/FeedTheBlackCat" rel="nofollow external" class="bo">@FeedTheBlackCat</a> as well. But doesn’t the cat look a bit bored? And since it’s playing with the ball of wool, perhaps it just wants to be distracted? Indeed, that cat is a <a href="http://www.twitter.com/BoredBlackCat" rel="nofollow external" class="bo">@BoredBlackCat</a>, so we could also try <a href="http://www.twitter.com/PlayWithTheCat" rel="nofollow external" class="bo">@PlayWithTheCat</a>, right?</p>
    <p><a href="https://twitter.com/PlayWithTheCat" rel="nofollow external" class="bo"><img alt="Smashing Book Mystery" src="http://media.smashingmagazine.com/wp-content/uploads/2014/01/playwiththecat.jpg" width="500" style="max-width: 100%; height: auto;"></a><br><em><a href="https://twitter.com/PlayWithTheCat" rel="nofollow external" class="bo">@PlayWithTheCat</a> would help bring you to Level 4.</em></p>
    <p>Right! But wait a second. Different Twitter handles contain tweets leading to different URLs, and yes, it was intentional. Some handles lead to <code>smashed.by/map</code> while others lead to <code>smashed.by/journey</code>. However, both handles lead to the final level 4.</p>
    <p>Now that was a tough one. At this point you should start feeling proud of yourself. Time to get your donuts, and move to the final level.</p>
    <h3>Level 4: The Dome</h3>
    <p>So, we can see a similar scene, but it looks like it isn’t about the book any longer. The mysterious character seems to be busy examining the <strong>New York map</strong>, so he must be preparing for the trip already. Now there is something <em>really</em> weird about that clock making quick rounds on the wall. Could it be somehow connected with time travel, or time ticking too fast, or something like that? Or is it a just another distraction?</p>
    <p><a href="http://provide.smashingmagazine.com/mystery-riddle/where-are-you-going.gif" rel="nofollow external" class="bo"><img alt="Smashing Book Mystery" src="http://provide.smashingmagazine.com/mystery-riddle/where-are-you-going.gif" style="max-width: 100%; height: auto;"></a><br><em>The final round in the mystery wasn’t necessarily the most difficult one, but it took quite some time to get your head around.</em></p>
    <p>The clue in the file name is the question “Where are you going?”. Well, obviously you are going to New York, but there really is nothing you could do with “New York” alone. The main prize for solving the riddle is a trip to New York as well as a SmashingConf NY ticket.</p>
    <p>So where exactly will the conference take place? Oh, okay, the TimesCenter, right off Times Square. Wait a second. Times. Square. Could it be a hint? On the wall, we have a clock showing the time, and we have a square and something that looks like a map. Could <a href="http://www.twitter.com/TimeSquareMap" rel="nofollow external" class="bo">@TimeSquareMap</a> be a solution? It is indeed! Now obviously, <a href="http://www.twitter.com/TimeSquareMap" rel="nofollow external" class="bo">@TimesSquareMap</a> would be a solution as well (and so would <a href="http://www.twitter.com/TimeSquareLine" rel="nofollow external" class="bo">@TimeSquareLine</a> and <a href="http://www.twitter.com/TimesSquareLine" rel="nofollow external" class="bo">@TimesSquareLine</a>), but your path will probably cross Times Square as well, so you could just go <a href="http://www.twitter.com/TimeSquareMap" rel="nofollow external" class="bo">@ToTimesSquare</a> as well.</p>
    <p><a href="http://provide.smashingmagazine.com/mystery-riddle/nothing-like-a-good-old-cake.gif" rel="nofollow external" class="bo"><img alt="Smashing Book Mystery" src="http://provide.smashingmagazine.com/mystery-riddle/nothing-like-a-good-old-cake.gif" style="max-width: 100%; height: auto;"></a><br><em>“Nothing like a good ol’ cake”. But you know, cake is a lie, right? An alternative final GIF animation in the Smashing Mystery.</em></p>
    <p>If you followed another path, you’d land at a different URL with a different animated GIF. You won’t find a map on the wall but instead a chocolate cake with a cherry on top. But wait a moment. <a href="http://www.urbandictionary.com/define.php?term=the%20cake%20is%20a%20lie" rel="nofollow external" class="bo">The cake is a lie</a>, so is it another distraction or isn’t it? If you follow the same train of thought as with the alternative animated GIF, you probably will end up with <a href="http://www.twitter.com/TimeSquareCake" rel="nofollow external" class="bo">@TimeSquareCake</a> or <a href="http://www.twitter.com/TimeSquareCake" rel="nofollow external" class="bo">@TimesSquareCake</a>. Could it be…? Is it…?</p>
    <p><a href="https://twitter.com/TimesSquareMap" rel="nofollow external" class="bo"><img alt="Smashing Book Mystery" src="http://media.smashingmagazine.com/wp-content/uploads/2014/01/TimesSquareMap.jpg" width="500" style="max-width: 100%; height: auto;"></a><br><em>Phew! <a href="https://twitter.com/TimesSquareMap" rel="nofollow external" class="bo">@TimesSquareMap</a> revealed one of the final hashtags: #TimeSquareCircle.</em></p>
    <p>Yes! Now you solved the mystery, and as it turns out you really <em>are</em> awesome! The secret hashtag is now displayed in plain text in the tweets from these accounts. Now that was quite a journey, wasn’t it?</p>
    <h3>Mystery Solved! And The Winners Are…</h3>
    <p>You didn’t have to discover all the secret hashtags, but potentially you could find #TimeSquareLine, #TimeSquareCircle and #TimeSquareCenter. In fact, within two days over 400 readers found at least one of these hashtags which we didn’t really expect.</p>
    <p>Some of you were quicker than others. While the first riddle back in November was solved within four minutes (!), this one took more time to crack. The first correct hashtag was tweeted by <a href="http://www.twitter.com/typeform" rel="nofollow external" class="bo">@typeform</a> <strong>53 minutes</strong> after we hit that shiny “Publish” button, with more and more tweets containing the right answer shortly after that. In fact, it turned out that our dear readers are absolutely smashing indeed: <a href="https://twitter.com/search?q=%23TimeSquareCenter&amp;src=hash&amp;f=realtime" rel="nofollow external" class="bo">#TimeSquareCenter</a>, <a href="https://twitter.com/search?q=%23TimeSquareCircle&amp;src=typd&amp;f=realtime" rel="nofollow external" class="bo">#TimeSquareCircle</a> and <a href="https://twitter.com/search?q=%23TimeSquareLine&amp;src=hash&amp;f=realtime" rel="nofollow external" class="bo">#TimeSquareLine</a>.</p>
    <p>The first place was earned by the person who was the quickest to solve the riddle. We allocated prizes to the other lucky winners randomly, though the requirement was that at least one of the hashtags had to be found. The winners can select any prize of their choice (be it a bag, a Smashing Library account, printed books or anything else). And they all get the <a href="https://shop.smashingmagazine.com/smashing-cody-mascot.html" rel="nofollow external" class="bo">Smashing Cody Stress-Relief Ball</a>, too. All winners have been contacted. The winners are:</p>
    <ul>
    <li>
    <a href="https://twitter.com/typeform/status/428163049002782720" rel="nofollow external" class="bo">Typeform</a> has won a roundtrip to New York and the full Smashing package (took 53 mins to find the solution),</li>
    <li><a href="https://twitter.com/_indri_/status/428180968935919616" rel="nofollow external" class="bo">Indri Kenens</a></li>
    <li><a href="https://twitter.com/alecsandru/status/428316555621847040" rel="nofollow external" class="bo">Alecsandru</a></li>
    <li><a href="https://twitter.com/JoseLuisAlmagro/status/428652271765692417" rel="nofollow external" class="bo">José Luis Almagro</a></li>
    <li><a href="https://twitter.com/GregorTerrill/status/428182381804015618" rel="nofollow external" class="bo">Gregor Terrill</a></li>
    <li><a href="https://twitter.com/brassy/status/428171091597479938" rel="nofollow external" class="bo">Emanuela</a></li>
    <li><a href="https://twitter.com/inkterina/status/428824006586675200" rel="nofollow external" class="bo">inkterina</a></li>
    <li><a href="https://twitter.com/graveshow/status/428525877823930368" rel="nofollow external" class="bo">Chuck Moulton</a></li>
    <li><a href="https://twitter.com/veljoni/status/428568625859923968" rel="nofollow external" class="bo">Velja Matic</a></li>
    <li><a href="https://twitter.com/Senff/status/428192209876185089" rel="nofollow external" class="bo">Mark Senff</a></li>
    </ul>
    <p>Congratulations! And thanks to everyone who participated! We hope we didn’t waste too much of your productive work time (and didn’t cause too many headaches either).</p>
    <h3>Behind The Scenes</h3>
    
    <p><img alt="Guillaume Kurdjian" src="http://media.smashingmagazine.com/wp-content/uploads/2013/11/guillaume.jpg" style="max-width: 100%; height: auto;"><br>
    <em><a href="http://guillaumekurkdjian.com/" rel="nofollow external" class="bo">Guillaume Kurdjian</a> is a 22-year-old freelance illustrator and animator from Nantes, France. Guillaume likes to experiment with stuff on his computer and climb trees.</em></p>
    <p>Just like the last time, we worked with talented <a href="http://guillaumekurkdjian.com/" rel="nofollow external" class="bo">Guillaume Kurdjian</a> on a series of <a href="http://bisouslescopains.tumblr.com/" rel="nofollow external" class="bo">animated GIFs</a> for the riddle. This time the thread was a bit longer, and after thorough discussions and prototypes, we ended up with over 30 different GIFs, drafts, and ideas that were thrown away, as well as the ones that made it to the final stage.</p>
    <p>All designs were a <strong>series of iterations</strong> to make the overall riddle not necessarily perfect, but just right. So a big “thank you!” to Guillaume for following through and being so enthusiastic and kind about all the changes made.</p>
    <p>At almost every point throughout the design process we wondered if Twitter might suspend some of the accounts. With <strong>42 Twitter accounts</strong> registered over five weeks (we considered using different synonyms), we are still receiving lots of notification emails every single day. And, oh my, it <em>really</em> wasn’t easy to find meaningful Twitter handles that were still available.</p>
    <p><a href="http://provide.smashingmagazine.com/mystery-riddle/scenery.gif" rel="nofollow external" class="bo"><img src="http://provide.smashingmagazine.com/mystery-riddle/scenery.gif" alt="Scenery" style="max-width: 100%; height: auto;"></a><br><em>Guillaume designed the scenery first; it was a starting point for the mystery riddle.</em></p>
    <p>Besides, you have to work within Twitter restrictions on the accepted characters and the number of characters per Twitter handle (15 chars). It took quite a lot of testing and playing around on the Twitter registration page, and lots of alias emails to make it all work, and lots of CAPTCHAs to be filled in, and obviously, lots of coffee to stay sane! Since we had already played with file names for the first riddle, we had to be a bit more creative about how readers moved between the levels. The critical point was the clue given if the reader changed the image URL in the browser, and it took a lot of experimentation to get it right.</p>
    <p><a href="http://provide.smashingmagazine.com/mystery-riddle/where-are-you-heading.gif" rel="nofollow external" class="bo"><img src="http://provide.smashingmagazine.com/mystery-riddle/where-are-you-heading.gif" alt="Where are you heading?" style="max-width: 100%; height: auto;"></a><br><em>Actually, we wanted to use TimeSquareCircle as a final Twitter handle, but we couldn’t register it due to Twitter’s length restrictions. So we tried TimeSquareLine, TimeSquareMap and TimeSquareCake instead.</em></p>
    <p>Initially we wanted to use <code>Mystery: Level 1</code>, <code>Mystery: Level 2</code>, etc. as Twitter names, but that would make it searchable via Twitter, so we decided to use code names for each level, according to the King Kong storyline that we’ve used throughout Smashing Conference New York, so the user journey went from The Voyage, to the Book Jungle, to Broadway, to the Dome.</p>
    <p><a href="http://provide.smashingmagazine.com/mystery-riddle/waiting-for-round-3.gif" rel="nofollow external" class="bo"><img src="http://provide.smashingmagazine.com/mystery-riddle/waiting-for-round-3.gif" alt="Waiting for round 3 already?" style="max-width: 100%; height: auto;"></a><br><em>Are we waiting for round 3 already?</em></p>
    <p>So this is it! It was quite a journey, but we hope it was worth it. We are <em>really</em> sorry about all the unproductive hours that you spent solving the riddle. Well, <em>kind of</em>. Now, are you ready for the third round? ;-) <a href="http://www.smashingmagazine.com/the-smashing-newsletter/" rel="nofollow external" class="bo">Stay tuned!</a></p>
    <hr>
    <p><small>© Vitaly Friedman for <a href="http://www.smashingmagazine.com" rel="nofollow external" class="bo">Smashing Magazine</a>, 2014.</small></p>
    </div>
]]>
</Body>
<Summary>        Everybody loves a good riddle, but when you design one, you never know how it will be perceived until you try it out. The new Smashing Mystery Riddle didn’t emerge over night, and after...</Summary>
<Website>http://www.smashingmagazine.com/2014/01/30/the-mystery-is-resolved-the-rain-that-never-stops-cakes-frightened-cats/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40787/guest@my.umbc.edu/e1dfc5ee61f59644b56ae5ca36154733/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>events</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 09:01:52 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="41054" important="false" status="posted" url="https://my3.my.umbc.edu/posts/41054">
<Title>JavaScript Animation That Works (Part 2 of 4)</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>
    In the <a href="http://dev.tutsplus.com/tutorials/javascript-animation-that-works-part-1-of-4--net-35205" rel="nofollow external" class="bo">last post</a>, we introduced the idea of <em>spriting</em>, an easy way to animate in JavaScript that works in all browsers. We also walked through how to set up the sprite as a background image for a <code>div</code> and then use a line of JavaScript to change the background position to make it appear as if the image has moved.</p>
    <p></p>
    <p>
    In this post, we will use this technique to animate both running and jumping motions. In order to create the animation, we will need to quickly change the background position at a regular interval. Take a look again at the sprite we are using.</p>
    
    <img src="http://cdn.tutsplus.com/net/uploads/2013/10/javascript-spriting-j.png" alt="javascript-spriting-j" width="600" height="300" style="max-width: 100%; height: auto;"><br>
    
    <p>
    Meet J, the mascot for my company, Joust Multimedia.</p>
    <p>
    In our example, we have ten total images: one of J standing facing right, three of J running to the right and one of J jumping while facing right (with the same number of each frame facing left). Let's start with making him run to the right. In order to make our image look like it is running, we will need to do two things: change the sprite to a different image and move the <code>div</code> towards the right.</p>
    <hr>
    <h2>Running to the Right Animation</h2>
    <p>
    We certainly won't want to be stuck clicking different buttons to cycle through the sprites, so we will need to create some functions that do this automatically.</p>
    <p>
    For our running function, we want to:</p>
    <ol>
    <li> Move the <code>div</code> towards the right slightly </li>
    <li> Move to the next frame of animation </li>
    <li> Pause for a fraction of a second (to preserve the "persistence of vision" illusion) </li>
    <li> Loop the function again </li>
    </ol>
    <p>
    Fortunately, there is an easy way to loop with functions. A native command in JavaScript called <code>setTimeout</code> will allow us to create a timed delay, after which we will call the function again (from inside the function).</p>
    <pre>function run_right(){&#x000A;      // Move slightly to the right ...&#x000A;      // Change to the next frame of animation ...&#x000A;    &#x000A;      // this will call 'run_right' again after 200 milliseconds&#x000A;      setTimeout(function(){run_right();}, 200); &#x000A;    }</pre>
    <p>
    So now we have a function that will call itself again five times a second (which will be fast enough to create animation for our purposes). Remember here that browsers are not terribly accurate with their timers. You can specify timing to the millisecond, but that doesn't mean your script will run at that timing exactly!</p>
    <p>
    Our next problem to tackle is how is our function going to know which sprite to change to? In our example, we will need to cycle back and forth through our three images (to have four total frames of animation). To do this, we are going to pass our function a bit of information to tell it which slide to switch to. Once in the function, we will do a test that will check which slide we should be on, then switch the background position to the correct sprite. When we call the function again, we will pass the next slide as the argument.</p>
    <pre>function run_right(slide){&#x000A;      // Move slightly to the right ...&#x000A;      switch (slide){ // this switch statement checks for different possibilities for 'slide'&#x000A;        case 1: // if 'slide' equals '1' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-40px 0px";&#x000A;          setTimeout(function(){run_right(2);}, 200);&#x000A;          break;&#x000A;        case 2: // if 'slide' equals '2' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;          setTimeout(function(){run_right(3);}, 200);&#x000A;          break;&#x000A;        case 3: // if 'slide' equals '3' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-120px 0px";&#x000A;          setTimeout(function(){run_right(4);}, 200);&#x000A;          break;&#x000A;        case 4: // if 'slide' equals '4' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;          setTimeout(function(){run_right(1);}, 200);&#x000A;          break;&#x000A;      }&#x000A;    }</pre>
    <p>
    And now when we call the function for the first time, we will need to make sure we pass the starting slide.</p>
    <pre>&lt;input type="button" value="Run Right" onclick="run_right(1);" /&gt;</pre>
    <p>
    Similarly, to move our <code>div</code> to the right slightly, we can pass the initial left attribute of the <code>div</code>, then move the <code>div</code> slightly each time the function is called.</p>
    <pre>function run_right(slide, left){&#x000A;      &#x000A;      left = left + 15; // Increase his left attribute by 15px&#x000A;      document.getElementById('j').style.left = left+"px";&#x000A;      &#x000A;      switch (slide){ // this switch statement checks for different possibilities for 'slide'&#x000A;        case 1: // if 'slide' equals '1' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-40px 0px";&#x000A;          setTimeout(function(){run_right(2, left);}, 200);&#x000A;          break;&#x000A;        case 2: // if 'slide' equals '2' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;          setTimeout(function(){run_right(3, left);}, 200);&#x000A;          break;&#x000A;        case 3: // if 'slide' equals '3' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-120px 0px";&#x000A;          setTimeout(function(){run_right(4, left);}, 200);&#x000A;          break;&#x000A;        case 4: // if 'slide' equals '4' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;          setTimeout(function(){run_right(1, left);}, 200);&#x000A;          break;&#x000A;      }&#x000A;    }</pre>
    <p>
    And when we initially call the function, we need to make sure we pass the current left position of our <code>div</code>.</p>
    <pre>&lt;input type="button" value="Run Right" onclick="run_right(1, document.getElementById('j').offsetLeft);" /&gt;</pre>
    <hr>
    <h2>Stopping the Animation</h2>
    <p>
    So, now we have a function that, when called, will animate J to run to the right. Unfortunately, we have no way to stop it. First of all, we will need to make the function stop calling itself if J runs to the edge of our stage. To do that, every time the function runs, we will check an <code>if</code> statement to see if J has room to keep running. If so, we will run the function like normal. If not, we will stop calling the function and return him to the standing sprite.</p>
    <pre>function run_right(slide, left){&#x000A;      // If we can add 15 pixels to the left and have J's right edge not be at the stage's right edge ...&#x000A;      if ((left + 15) &lt; (document.getElementById('stage').offsetWidth - document.getElementById('j').offsetWidth)){&#x000A;        // We have room! Continue like normal here&#x000A;      } else { // if we are on the right edge, we need to stop calling the function and return to standing&#x000A;        document.getElementById('j').style.backgroundPosition = "0px 0px";&#x000A;      }&#x000A;    }</pre>
    <p>
    Finally, we will want to have a way to stop the function, when needed. We can set the <code>setTimeout()</code> command to a variable, then stop it with the <code>clearTimeout()</code> command. In order to do this, we will need to declare that variable outside of the function, so that we will be able to refer to it later. For now, we will declare it as a global variable. This is terrible coding practice, but we will correct this in the next post. This is what our function looks like.</p>
    <pre>var timer;&#x000A;    &#x000A;    function run_right(slide, left){&#x000A;      if ((left + 15) &lt; (document.getElementById('stage').offsetWidth - document.getElementById('j').offsetWidth)){&#x000A;        left = left + 15; // Increase his left attribute by 15px&#x000A;        document.getElementById('j').style.left = left+"px";&#x000A;      &#x000A;        switch (slide){ // this switch statement checks for different possibilities for 'slide'&#x000A;          case 1: // if 'slide' equals '1' ...&#x000A;            document.getElementById('j').style.backgroundPosition = "-40px 0px";&#x000A;            setTimeout(function(){run_right(2, left);}, 200);&#x000A;            break;&#x000A;          case 2: // if 'slide' equals '2' ...&#x000A;            document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;            setTimeout(function(){run_right(3, left);}, 200);&#x000A;            break;&#x000A;          case 3: // if 'slide' equals '3' ...&#x000A;            document.getElementById('j').style.backgroundPosition = "-120px 0px";&#x000A;            setTimeout(function(){run_right(4, left);}, 200);&#x000A;            break;&#x000A;          case 4: // if 'slide' equals '4' ...&#x000A;            document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;            setTimeout(function(){run_right(1, left);}, 200);&#x000A;            break;&#x000A;        }&#x000A;      } else {&#x000A;        document.getElementById('j').style.backgroundPosition = "0px 0px";&#x000A;      }&#x000A;    }</pre>
    <p>
    And we can create another function to stop the running timer and return the sprite to the standing image.</p>
    <pre>function stop_running(){&#x000A;      document.getElementById('j').style.backgroundPosition = "0px 0px";&#x000A;      clearTimeout(timer);&#x000A;    }</pre>
    <hr>
    <h2>Running to the Left Animation</h2>
    <p>
    Now by borrowing the code from our <code>run_right</code> function, we can create another function to make a <code>run_left</code> function, with just a few modifications.</p>
    <pre>function run_left(stage, left){&#x000A;      if ((left - 15) &gt; 0){&#x000A;        left = left - 15;&#x000A;        document.getElementById('j').style.left = left+"px";&#x000A;        switch (stage){&#x000A;          case 1:&#x000A;            document.getElementById('j').style.backgroundPosition = "-40px -50px";&#x000A;            timer = setTimeout(function(){run_left(2, left);}, 200);&#x000A;            break;&#x000A;          case 2:&#x000A;            document.getElementById('j').style.backgroundPosition = "-80px -50px";&#x000A;            timer = setTimeout(function(){run_left(3, left);}, 200);&#x000A;            break;&#x000A;          case 3:&#x000A;            document.getElementById('j').style.backgroundPosition = "-120px -50px";&#x000A;            timer = setTimeout(function(){run_left(4, left);}, 200);&#x000A;            break;&#x000A;          case 4:&#x000A;            document.getElementById('j').style.backgroundPosition = "-80px -50px";&#x000A;            timer = setTimeout(function(){run_left(1, left);}, 200);&#x000A;            break;&#x000A;        }&#x000A;      } else {&#x000A;        document.getElementById('j').style.backgroundPosition = "0px -50px";&#x000A;      }&#x000A;    }</pre>
    <hr>
    <h2>Jumping Animation</h2>
    <p>
    Finally, we need to create a jump function. We will pass two arguments to this function, one that will track whether the <code>div</code> is currently moving up or down and another that will track the current top attribute of the <code>div</code>. Between the two, we will determine which direction the <code>div</code> needs to move next, and how far (we will move the <code>div</code> less distance near the arc of the jump to simulate acceleration with gravity).</p>
    <pre>function jump(up, top){&#x000A;      /*&#x000A;       * We change J to his jumping sprite ...&#x000A;       */&#x000A;      document.getElementById('j').style.backgroundPosition = "-160px 0px";&#x000A;      /*&#x000A;       * Here, we need to decide whether he should be traveling up or down...&#x000A;       */&#x000A;      if (up &amp;&amp; (document.getElementById('j').offsetTop &gt; 20)){&#x000A;        // if he is currently moving up, and he is more than 20 pixels from the top of the stage ...&#x000A;        top = top - (top * .1); // This gives us a slight arc in the jump, rather than a constant movement like running&#x000A;        document.getElementById('j').style.top = top+"px"; // Change his position&#x000A;        timer = setTimeout(function(){jump(up, top);}, 60); // Then call the function again&#x000A;      } else if (up) {&#x000A;        // if he is currently moving up, but he is almost at the top of the stage and needs to come back down...&#x000A;        up = false; // we switch the 'up' variable so he will be falling in the next loop&#x000A;        timer = setTimeout(function(){jump(up, top);}, 60);&#x000A;      } else if (!up &amp;&amp; (document.getElementById('j').offsetTop &lt; 115)){&#x000A;        // if he is moving down, but is more than 5px from the ground, he will continue to fall...&#x000A;        top = top + (top * .1); // His fall will slightly accelerate&#x000A;        document.getElementById('j').style.top = top+"px";&#x000A;        timer = setTimeout(function(){jump(up, top);}, 60);&#x000A;      } else {&#x000A;        // If he is moving down, and he is within 5px of the ground...&#x000A;        document.getElementById('j').style.top = "120px"; // Place him on the ground&#x000A;        document.getElementById('j').style.backgroundPosition = "0px 0px"; // return to standing sprite&#x000A;        // We do not call the loop anymore since he is standing still at this point&#x000A;      }&#x000A;    }</pre>
    <p>
    Now we can put all four of our functions into buttons and have a working prototype of a running and jumping animation! Please check out the <a href="http://cdn.tutsplus.com/net/uploads/2013/10/spriting2.html" rel="nofollow external" class="bo">source code for this page</a> with comments and <a href="http://cdn.tutsplus.com/net/uploads/2013/10/javascript-spriting-j-sprite.png" rel="nofollow external" class="bo">download the sprite sheet</a> that I used, if you'd like.</p>
    <hr>
    <h2>Conclusion</h2>
    <p>
    Now, although we have a working prototype here, you may notice it is a little buggy. When you click on more than one button at a time, the script will try to run both at once. Or, if you click the jump button again on the way down, J will continue to fall forever. Also, as I mentioned earlier, we have global variables in our script, which means it might be difficult to add this code into an existing page without crashing other JavaScript (which is also why I didn't try to run this code within this blog page). In our next post, we will clean up all of these bugs and talk about the concept of <em>encapsulation</em> and why it is important to write good code in the real world.</p>
    </div>
]]>
</Body>
<Summary>In the last post, we introduced the idea of spriting, an easy way to animate in JavaScript that works in all browsers. We also walked through how to set up the sprite as a background image for a...</Summary>
<Website>http://code.tutsplus.com/tutorials/javascript-animation-that-works-part-2-of-4--net-35237</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/41054/guest@my.umbc.edu/e420beae747fb342291d9ed30c12576d/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 09:00:53 -0500</PostedAt>
<EditAt>Thu, 30 Jan 2014 09:00:52 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="40786" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40786">
<Title>JavaScript Animation That Works (Part 2 of 4)</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=35237&amp;c=209491791" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=35237&amp;c=209491791" alt="" style="max-width: 100%; height: auto;"></a><p> In the <a href="http://dev.tutsplus.com/tutorials/javascript-animation-that-works-part-1-of-4--net-35205" rel="nofollow external" class="bo">last post</a>, we introduced the idea of <em>spriting</em>, an easy way to animate in JavaScript that works in all browsers. We also walked through how to set up the sprite as a background image for a <code>div</code> and then use a line of JavaScript to change the background position to make it appear as if the image has moved.</p>
    <p></p>
    <p> In this post, we will use this technique to animate both running and jumping motions. In order to create the animation, we will need to quickly change the background position at a regular interval. Take a look again at the sprite we are using.</p>  <img src="http://cdn.tutsplus.com/net/uploads/2013/10/javascript-spriting-j.png" alt="javascript-spriting-j" width="600" height="300" style="max-width: 100%; height: auto;"><br> <p> Meet J, the mascot for my company, Joust Multimedia.</p>
    <p> In our example, we have ten total images: one of J standing facing right, three of J running to the right and one of J jumping while facing right (with the same number of each frame facing left). Let’s start with making him run to the right. In order to make our image look like it is running, we will need to do two things: change the sprite to a different image and move the <code>div</code> towards the right.</p>
    <hr>
    <h2>Running to the Right Animation</h2>
    <p> We certainly won’t want to be stuck clicking different buttons to cycle through the sprites, so we will need to create some functions that do this automatically.</p>
    <p> For our running function, we want to:</p>
    <ol>
    <li> Move the <code>div</code> towards the right slightly</li>
    <li> Move to the next frame of animation</li>
    <li> Pause for a fraction of a second (to preserve the “persistence of vision” illusion)</li>
    <li> Loop the function again</li>
    </ol>
    <p> Fortunately, there is an easy way to loop with functions. A native command in JavaScript called <code>setTimeout</code> will allow us to create a timed delay, after which we will call the function again (from inside the function).</p>
    <pre>function run_right(){&#x000A;      // Move slightly to the right ...&#x000A;      // Change to the next frame of animation ...&#x000A;    &#x000A;      // this will call 'run_right' again after 200 milliseconds&#x000A;      setTimeout(function(){run_right();}, 200); &#x000A;    }&#x000A;    </pre>
    <p> So now we have a function that will call itself again five times a second (which will be fast enough to create animation for our purposes). Remember here that browsers are not terribly accurate with their timers. You can specify timing to the millisecond, but that doesn’t mean your script will run at that timing exactly!</p>
    <p> Our next problem to tackle is how is our function going to know which sprite to change to? In our example, we will need to cycle back and forth through our three images (to have four total frames of animation). To do this, we are going to pass our function a bit of information to tell it which slide to switch to. Once in the function, we will do a test that will check which slide we should be on, then switch the background position to the correct sprite. When we call the function again, we will pass the next slide as the argument.</p>
    <pre>function run_right(slide){&#x000A;      // Move slightly to the right ...&#x000A;      switch (slide){ // this switch statement checks for different possibilities for 'slide'&#x000A;        case 1: // if 'slide' equals '1' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-40px 0px";&#x000A;          setTimeout(function(){run_right(2);}, 200);&#x000A;          break;&#x000A;        case 2: // if 'slide' equals '2' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;          setTimeout(function(){run_right(3);}, 200);&#x000A;          break;&#x000A;        case 3: // if 'slide' equals '3' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-120px 0px";&#x000A;          setTimeout(function(){run_right(4);}, 200);&#x000A;          break;&#x000A;        case 4: // if 'slide' equals '4' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;          setTimeout(function(){run_right(1);}, 200);&#x000A;          break;&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <p> And now when we call the function for the first time, we will need to make sure we pass the starting slide.</p>
    <pre>&lt;input type="button" value="Run Right" onclick="run_right(1);" /&gt;&#x000A;    </pre>
    <p> Similarly, to move our <code>div</code> to the right slightly, we can pass the initial left attribute of the <code>div</code>, then move the <code>div</code> slightly each time the function is called.</p>
    <pre>function run_right(slide, left){&#x000A;      &#x000A;      left = left + 15; // Increase his left attribute by 15px&#x000A;      document.getElementById('j').style.left = left+"px";&#x000A;      &#x000A;      switch (slide){ // this switch statement checks for different possibilities for 'slide'&#x000A;        case 1: // if 'slide' equals '1' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-40px 0px";&#x000A;          setTimeout(function(){run_right(2, left);}, 200);&#x000A;          break;&#x000A;        case 2: // if 'slide' equals '2' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;          setTimeout(function(){run_right(3, left);}, 200);&#x000A;          break;&#x000A;        case 3: // if 'slide' equals '3' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-120px 0px";&#x000A;          setTimeout(function(){run_right(4, left);}, 200);&#x000A;          break;&#x000A;        case 4: // if 'slide' equals '4' ...&#x000A;          document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;          setTimeout(function(){run_right(1, left);}, 200);&#x000A;          break;&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <p> And when we initially call the function, we need to make sure we pass the current left position of our <code>div</code>.</p>
    <pre>&lt;input type="button" value="Run Right" onclick="run_right(1, document.getElementById('j').offsetLeft);" /&gt;&#x000A;    </pre>
    <hr>
    <h2>Stopping the Animation</h2>
    <p> So, now we have a function that, when called, will animate J to run to the right. Unfortunately, we have no way to stop it. First of all, we will need to make the function stop calling itself if J runs to the edge of our stage. To do that, every time the function runs, we will check an <code>if</code> statement to see if J has room to keep running. If so, we will run the function like normal. If not, we will stop calling the function and return him to the standing sprite.</p>
    <pre>function run_right(slide, left){&#x000A;      // If we can add 15 pixels to the left and have J's right edge not be at the stage's right edge ...&#x000A;      if ((left + 15) &lt; (document.getElementById('stage').offsetWidth - document.getElementById('j').offsetWidth)){&#x000A;        // We have room! Continue like normal here&#x000A;      } else { // if we are on the right edge, we need to stop calling the function and return to standing&#x000A;        document.getElementById('j').style.backgroundPosition = "0px 0px";&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <p> Finally, we will want to have a way to stop the function, when needed. We can set the <code>setTimeout()</code> command to a variable, then stop it with the <code>clearTimeout()</code> command. In order to do this, we will need to declare that variable outside of the function, so that we will be able to refer to it later. For now, we will declare it as a global variable. This is terrible coding practice, but we will correct this in the next post. This is what our function looks like.</p>
    <pre>var timer;&#x000A;    &#x000A;    function run_right(slide, left){&#x000A;      if ((left + 15) &lt; (document.getElementById('stage').offsetWidth - document.getElementById('j').offsetWidth)){&#x000A;        left = left + 15; // Increase his left attribute by 15px&#x000A;        document.getElementById('j').style.left = left+"px";&#x000A;      &#x000A;        switch (slide){ // this switch statement checks for different possibilities for 'slide'&#x000A;          case 1: // if 'slide' equals '1' ...&#x000A;            document.getElementById('j').style.backgroundPosition = "-40px 0px";&#x000A;            setTimeout(function(){run_right(2, left);}, 200);&#x000A;            break;&#x000A;          case 2: // if 'slide' equals '2' ...&#x000A;            document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;            setTimeout(function(){run_right(3, left);}, 200);&#x000A;            break;&#x000A;          case 3: // if 'slide' equals '3' ...&#x000A;            document.getElementById('j').style.backgroundPosition = "-120px 0px";&#x000A;            setTimeout(function(){run_right(4, left);}, 200);&#x000A;            break;&#x000A;          case 4: // if 'slide' equals '4' ...&#x000A;            document.getElementById('j').style.backgroundPosition = "-80px 0px";&#x000A;            setTimeout(function(){run_right(1, left);}, 200);&#x000A;            break;&#x000A;        }&#x000A;      } else {&#x000A;        document.getElementById('j').style.backgroundPosition = "0px 0px";&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <p> And we can create another function to stop the running timer and return the sprite to the standing image.</p>
    <pre>function stop_running(){&#x000A;      document.getElementById('j').style.backgroundPosition = "0px 0px";&#x000A;      clearTimeout(timer);&#x000A;    }&#x000A;    </pre>
    <hr>
    <h2>Running to the Left Animation</h2>
    <p> Now by borrowing the code from our <code>run_right</code> function, we can create another function to make a <code>run_left</code> function, with just a few modifications.</p>
    <pre>function run_left(stage, left){&#x000A;      if ((left - 15) &gt; 0){&#x000A;        left = left - 15;&#x000A;        document.getElementById('j').style.left = left+"px";&#x000A;        switch (stage){&#x000A;          case 1:&#x000A;            document.getElementById('j').style.backgroundPosition = "-40px -50px";&#x000A;            timer = setTimeout(function(){run_left(2, left);}, 200);&#x000A;            break;&#x000A;          case 2:&#x000A;            document.getElementById('j').style.backgroundPosition = "-80px -50px";&#x000A;            timer = setTimeout(function(){run_left(3, left);}, 200);&#x000A;            break;&#x000A;          case 3:&#x000A;            document.getElementById('j').style.backgroundPosition = "-120px -50px";&#x000A;            timer = setTimeout(function(){run_left(4, left);}, 200);&#x000A;            break;&#x000A;          case 4:&#x000A;            document.getElementById('j').style.backgroundPosition = "-80px -50px";&#x000A;            timer = setTimeout(function(){run_left(1, left);}, 200);&#x000A;            break;&#x000A;        }&#x000A;      } else {&#x000A;        document.getElementById('j').style.backgroundPosition = "0px -50px";&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <hr>
    <h2>Jumping Animation</h2>
    <p> Finally, we need to create a jump function. We will pass two arguments to this function, one that will track whether the <code>div</code> is currently moving up or down and another that will track the current top attribute of the <code>div</code>. Between the two, we will determine which direction the <code>div</code> needs to move next, and how far (we will move the <code>div</code> less distance near the arc of the jump to simulate acceleration with gravity).</p>
    <pre>function jump(up, top){&#x000A;      /*&#x000A;       * We change J to his jumping sprite ...&#x000A;       */&#x000A;      document.getElementById('j').style.backgroundPosition = "-160px 0px";&#x000A;      /*&#x000A;       * Here, we need to decide whether he should be traveling up or down...&#x000A;       */&#x000A;      if (up &amp;&amp; (document.getElementById('j').offsetTop &gt; 20)){&#x000A;        // if he is currently moving up, and he is more than 20 pixels from the top of the stage ...&#x000A;        top = top - (top * .1); // This gives us a slight arc in the jump, rather than a constant movement like running&#x000A;        document.getElementById('j').style.top = top+"px"; // Change his position&#x000A;        timer = setTimeout(function(){jump(up, top);}, 60); // Then call the function again&#x000A;      } else if (up) {&#x000A;        // if he is currently moving up, but he is almost at the top of the stage and needs to come back down...&#x000A;        up = false; // we switch the 'up' variable so he will be falling in the next loop&#x000A;        timer = setTimeout(function(){jump(up, top);}, 60);&#x000A;      } else if (!up &amp;&amp; (document.getElementById('j').offsetTop &lt; 115)){&#x000A;        // if he is moving down, but is more than 5px from the ground, he will continue to fall...&#x000A;        top = top + (top * .1); // His fall will slightly accelerate&#x000A;        document.getElementById('j').style.top = top+"px";&#x000A;        timer = setTimeout(function(){jump(up, top);}, 60);&#x000A;      } else {&#x000A;        // If he is moving down, and he is within 5px of the ground...&#x000A;        document.getElementById('j').style.top = "120px"; // Place him on the ground&#x000A;        document.getElementById('j').style.backgroundPosition = "0px 0px"; // return to standing sprite&#x000A;        // We do not call the loop anymore since he is standing still at this point&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <p> Now we can put all four of our functions into buttons and have a working prototype of a running and jumping animation! Please check out the <a href="http://cdn.tutsplus.com/net/uploads/2013/10/spriting2.html" rel="nofollow external" class="bo">source code for this page</a> with comments and <a href="http://cdn.tutsplus.com/net/uploads/2013/10/javascript-spriting-j-sprite.png" rel="nofollow external" class="bo">download the sprite sheet</a> that I used, if you’d like.</p>
    <hr>
    <h2>Conclusion</h2>
    <p> Now, although we have a working prototype here, you may notice it is a little buggy. When you click on more than one button at a time, the script will try to run both at once. Or, if you click the jump button again on the way down, J will continue to fall forever. Also, as I mentioned earlier, we have global variables in our script, which means it might be difficult to add this code into an existing page without crashing other JavaScript (which is also why I didn’t try to run this code within this blog page). In our next post, we will clean up all of these bugs and talk about the concept of <em>encapsulation</em> and why it is important to write good code in the real world.</p>
    </div>
]]>
</Body>
<Summary>In the last post, we introduced the idea of spriting, an easy way to animate in JavaScript that works in all browsers. We also walked through how to set up the sprite as a background image for a...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/CELmwFSShnM/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40786/guest@my.umbc.edu/06eab8d2bb1a4e2d8de7c5d175362666/api/pixel</TrackingUrl>
<Tag>animation</Tag>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>javascript-and-ajax</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>spriting</Tag>
<Tag>sql</Tag>
<Tag>tutorials</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 09:00:52 -0500</PostedAt>
<EditAt>Thu, 30 Jan 2014 09:00:52 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="40785" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40785">
<Title>Bits Blog: A Case for Cheaper Broadband in Schools</Title>
<Body>
<![CDATA[
    <div class="html-content">A group of executives and venture capitalists is telling the F.C.C. that schools don’t have enough broadband to meet future educational needs, and they’re overpaying for what they get.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F01%2F30%2Fa-case-for-cheaper-broadband-in-schools%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Case+for+Cheaper+Broadband+in+Schools" 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%2F2014%2F01%2F30%2Fa-case-for-cheaper-broadband-in-schools%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Case+for+Cheaper+Broadband+in+Schools" 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%2F2014%2F01%2F30%2Fa-case-for-cheaper-broadband-in-schools%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Case+for+Cheaper+Broadband+in+Schools" 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%2F2014%2F01%2F30%2Fa-case-for-cheaper-broadband-in-schools%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Case+for+Cheaper+Broadband+in+Schools" 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%2F2014%2F01%2F30%2Fa-case-for-cheaper-broadband-in-schools%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+A+Case+for+Cheaper+Broadband+in+Schools" 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/186529909093/u/0/f/640387/c/34625/s/36885008/sc/1/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186529909093/u/0/f/640387/c/34625/s/36885008/sc/1/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/186529909093/u/0/f/640387/c/34625/s/36885008/sc/1/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186529909093/u/0/f/640387/c/34625/s/36885008/sc/1/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/186529909093/u/0/f/640387/c/34625/s/36885008/sc/1/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186529909093/u/0/f/640387/c/34625/s/36885008/sc/1/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/186529909093/u/0/f/640387/c/34625/s/36885008/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186529909093/u/0/f/640387/c/34625/s/36885008/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>A group of executives and venture capitalists is telling the F.C.C. that schools don’t have enough broadband to meet future educational needs, and they’re overpaying for what they get.      </Summary>
<Website>http://bits.blogs.nytimes.com/2014/01/30/a-case-for-cheaper-broadband-in-schools/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40785/guest@my.umbc.edu/070671710649417dbde428d9d1444b26/api/pixel</TrackingUrl>
<Tag>computers-and-the-internet</Tag>
<Tag>education-k-12</Tag>
<Tag>federal-communications-commission</Tag>
<Tag>gates-bill</Tag>
<Tag>internet</Tag>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Tag>zuckerberg-mark-e</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 08:32:48 -0500</PostedAt>
<EditAt>Thu, 30 Jan 2014 16:29:51 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="40790" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40790">
<Title>DealBook: Former Chief of Akamai Joins General Catalyst as Partner</Title>
<Body>
<![CDATA[
    <div class="html-content">Paul Sagan, who ran Akamai Technologies for eight years, will act as a hands-on adviser to young companies in which the venture capital firm is invested.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2014%2F01%2F30%2Fex-akamai-chief-joins-general-catalyst-as-partner%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Former+Chief+of+Akamai+Joins+General+Catalyst+as+Partner" 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%2F2014%2F01%2F30%2Fex-akamai-chief-joins-general-catalyst-as-partner%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Former+Chief+of+Akamai+Joins+General+Catalyst+as+Partner" 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%2F2014%2F01%2F30%2Fex-akamai-chief-joins-general-catalyst-as-partner%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Former+Chief+of+Akamai+Joins+General+Catalyst+as+Partner" 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%2F2014%2F01%2F30%2Fex-akamai-chief-joins-general-catalyst-as-partner%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Former+Chief+of+Akamai+Joins+General+Catalyst+as+Partner" 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%2F2014%2F01%2F30%2Fex-akamai-chief-joins-general-catalyst-as-partner%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+Former+Chief+of+Akamai+Joins+General+Catalyst+as+Partner" 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/186530012653/u/0/f/640387/c/34625/s/3688dc42/sc/25/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186530012653/u/0/f/640387/c/34625/s/3688dc42/sc/25/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/186530012653/u/0/f/640387/c/34625/s/3688dc42/sc/25/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186530012653/u/0/f/640387/c/34625/s/3688dc42/sc/25/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/186530012653/u/0/f/640387/c/34625/s/3688dc42/sc/25/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186530012653/u/0/f/640387/c/34625/s/3688dc42/sc/25/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/186530012653/u/0/f/640387/c/34625/s/3688dc42/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186530012653/u/0/f/640387/c/34625/s/3688dc42/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Paul Sagan, who ran Akamai Technologies for eight years, will act as a hands-on adviser to young companies in which the venture capital firm is invested.      </Summary>
<Website>http://dealbook.nytimes.com/2014/01/30/ex-akamai-chief-joins-general-catalyst-as-partner/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40790/guest@my.umbc.edu/770e51993d4d7b8e8af1ffddd4ccdf89/api/pixel</TrackingUrl>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>venture-capital</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 08:21:23 -0500</PostedAt>
<EditAt>Thu, 30 Jan 2014 10:52:37 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="40784" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40784">
<Title>In Motorola Purchase, Lenovo Gains Big Footprint in Smartphones</Title>
<Body>
<![CDATA[
    <div class="html-content">The Chinese PC giant’s purchase of Motorola Mobility from Google has vaulted it into the field’s top three, though it has a long way to go to catch Apple or Samsung.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F01%2F31%2Fbusiness%2Finternational%2Flenovo-gains-a-big-footprint-in-the-market-for-smartphones.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Motorola+Purchase%2C+Lenovo+Gains+Big+Footprint+in+Smartphones" 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%2F2014%2F01%2F31%2Fbusiness%2Finternational%2Flenovo-gains-a-big-footprint-in-the-market-for-smartphones.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Motorola+Purchase%2C+Lenovo+Gains+Big+Footprint+in+Smartphones" 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%2F2014%2F01%2F31%2Fbusiness%2Finternational%2Flenovo-gains-a-big-footprint-in-the-market-for-smartphones.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Motorola+Purchase%2C+Lenovo+Gains+Big+Footprint+in+Smartphones" 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%2F2014%2F01%2F31%2Fbusiness%2Finternational%2Flenovo-gains-a-big-footprint-in-the-market-for-smartphones.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Motorola+Purchase%2C+Lenovo+Gains+Big+Footprint+in+Smartphones" 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%2F2014%2F01%2F31%2Fbusiness%2Finternational%2Flenovo-gains-a-big-footprint-in-the-market-for-smartphones.html%3Fpartner%3Drss%26emc%3Drss&amp;t=In+Motorola+Purchase%2C+Lenovo+Gains+Big+Footprint+in+Smartphones" 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/187557194993/u/0/f/640387/c/34625/s/3687daf8/sc/15/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/187557194993/u/0/f/640387/c/34625/s/3687daf8/sc/15/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/187557194993/u/0/f/640387/c/34625/s/3687daf8/sc/15/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/187557194993/u/0/f/640387/c/34625/s/3687daf8/sc/15/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/187557194993/u/0/f/640387/c/34625/s/3687daf8/sc/15/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/187557194993/u/0/f/640387/c/34625/s/3687daf8/sc/15/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/187557194993/u/0/f/640387/c/34625/s/3687daf8/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/187557194993/u/0/f/640387/c/34625/s/3687daf8/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The Chinese PC giant’s purchase of Motorola Mobility from Google has vaulted it into the field’s top three, though it has a long way to go to catch Apple or Samsung.      </Summary>
<Website>http://www.nytimes.com/2014/01/31/business/international/lenovo-gains-a-big-footprint-in-the-market-for-smartphones.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40784/guest@my.umbc.edu/fdb22210eb4917c8b06b500b0ba72283/api/pixel</TrackingUrl>
<Tag>apple-inc</Tag>
<Tag>google-inc</Tag>
<Tag>lenovo-group</Tag>
<Tag>motorola-mobility-llc</Tag>
<Tag>new</Tag>
<Tag>samsung-group</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 07:35:14 -0500</PostedAt>
<EditAt>Thu, 30 Jan 2014 12:06:20 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="40783" important="false" status="posted" url="https://my3.my.umbc.edu/posts/40783">
<Title>Bits: Facebook Unveils New Tool to Read Posts and News</Title>
<Body>
<![CDATA[
    <div class="html-content">The social network is introducing Paper, a visually focused iPhone application that makes it easier for a user to scan a news feed and discover new content on the service.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F01%2F30%2Ffacebook-unveils-new-tool-to-read-posts-and-news%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Facebook+Unveils+New+Tool+to+Read+Posts+and+News" 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%2F2014%2F01%2F30%2Ffacebook-unveils-new-tool-to-read-posts-and-news%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Facebook+Unveils+New+Tool+to+Read+Posts+and+News" 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%2F2014%2F01%2F30%2Ffacebook-unveils-new-tool-to-read-posts-and-news%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Facebook+Unveils+New+Tool+to+Read+Posts+and+News" 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%2F2014%2F01%2F30%2Ffacebook-unveils-new-tool-to-read-posts-and-news%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Facebook+Unveils+New+Tool+to+Read+Posts+and+News" 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%2F2014%2F01%2F30%2Ffacebook-unveils-new-tool-to-read-posts-and-news%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Facebook+Unveils+New+Tool+to+Read+Posts+and+News" 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/186529905512/u/0/f/640387/c/34625/s/368734fd/sc/15/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186529905512/u/0/f/640387/c/34625/s/368734fd/sc/15/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/186529905512/u/0/f/640387/c/34625/s/368734fd/sc/15/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186529905512/u/0/f/640387/c/34625/s/368734fd/sc/15/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/186529905512/u/0/f/640387/c/34625/s/368734fd/sc/15/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186529905512/u/0/f/640387/c/34625/s/368734fd/sc/15/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/186529905512/u/0/f/640387/c/34625/s/368734fd/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/186529905512/u/0/f/640387/c/34625/s/368734fd/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The social network is introducing Paper, a visually focused iPhone application that makes it easier for a user to scan a news feed and discover new content on the service.      </Summary>
<Website>http://bits.blogs.nytimes.com/2014/01/30/facebook-unveils-new-tool-to-read-posts-and-news/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/40783/guest@my.umbc.edu/09a8e56a59cc6d05d9289c182613c9bf/api/pixel</TrackingUrl>
<Tag>facebook-inc</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>mobile</Tag>
<Tag>mobile-applications</Tag>
<Tag>new</Tag>
<Tag>social</Tag>
<Tag>social-media</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Thu, 30 Jan 2014 07:16:01 -0500</PostedAt>
<EditAt>Thu, 30 Jan 2014 13:09:25 -0500</EditAt>
</NewsItem>

</News>
