<?xml version="1.0"?>
<News hasArchived="true" page="8311" pageCount="10733" pageSize="10" timestamp="Sat, 25 Jul 2026 23:36:13 -0400" url="https://my3.my.umbc.edu/posts.xml?page=8311">
<NewsItem contentIssues="true" id="35614" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35614">
<Title>Celebrate World Car Free Day</Title>
<Tagline>Learn about Transit Services with a Tour!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <p><strong><span>Celebrate
    World Car Free Day with OCSS!</span></strong></p>
    <span>Every year on or around September 22<sup>nd</sup> people around the world get out of their cars and onto the streets to celebrate World Car Free Day which is aimed at showcasing what the world would look like without private vehicles. <br><br></span><span>Beginning in 2009 Washington D.C. introduced car free days with special events in light of World Car Free Day. These events have included activities or services such as free bike repair and yoga classes. This year in Washington D.C., events will take place all weekend
    (September 20-22) and will include “Red Bull Flugtag”, a live performance by
    Steely Dan, prizes, and more. </span><span><br><br>From UMBC it is easy to reach D.C. without a car. Hop on UMBC’s BWI or Halethorpe shuttle lines to connect to the Marc train. From the Halethorpe or BWI Marc stations, take the
    Penn Line to D.C.’s Union Station and ride any D.C. metro line from this
    central hub. </span><span><br><br>Don’t have time to make it to D.C.? Don’t fret—you can still celebrate with OCSS on September 20<sup>th</sup>
    when we host a Transit shuttle tour from 1:00pm-1:51pm. Meet OCSS in the
    “Commuter Lounge” next to the bookstore at 1:00pm. We’ll hop on the 1:30pm
    Halethorpe shuttle at the Park Rd./Commons Dr. bus shelter and return to the
    same location at 1:51pm. Boarding Transit shuttles is always free for the UMBC
    campus community—just bring your red UMBC ID.</span><p><br><span>For one day, leave your car at home and try riding your bike, walking, or taking public
    transportation.</span></p>
    
    <p><span>AUTHOR: Karly Trinite, Sustainability Outreach Intern @ OCSS<br></span></p>
    
    <p><span><strong>For more info about D.C. events:</strong> <a href="http://www.carfreemetrodc.com/car-free-day-events.php" rel="nofollow external" class="bo">http://www.carfreemetrodc.com/car-free-day-events.php</a><u></u></span></p>
    
    <p><span><strong>For more info about the OCSS shuttle tour on Sept.
    20<sup>th</sup>: </strong><a href="http://my.umbc.edu/groups/casualcarpooling/events/19877" rel="nofollow external" class="bo">http://my.umbc.edu/groups/casualcarpooling/events/19877</a></span></p>
    
    <p><span><strong>For more info about Transit Services: </strong><a href="http://www.umbc.edu/transit" rel="nofollow external" class="bo">www.umbc.edu/transit</a> </span></p>
    
    </div>
]]>
</Body>
<Summary>Celebrate World Car Free Day with OCSS! Every year on or around September 22nd people around the world get out of their cars and onto the streets to celebrate World Car Free Day which is aimed at...</Summary>
<Website>http://my.umbc.edu/groups/casualcarpooling/events/19877</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35614/guest@my.umbc.edu/50b4194c48175fa00a7c198536d6097e/api/pixel</TrackingUrl>
<Group token="casualcarpooling">Casual Carpooling</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/casualcarpooling</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/xsmall.png?1396631520</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/original.jpg?1396631520</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/xxlarge.png?1396631520</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/xlarge.png?1396631520</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/large.png?1396631520</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/medium.png?1396631520</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/small.png?1396631520</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/xsmall.png?1396631520</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/633/a697ab0dcf803186970e7bb5ed0909fb/xxsmall.png?1396631520</AvatarUrl>
<Sponsor>Casual Carpooling</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/035/614/a3ce01b5f556cfeb6a1d2b6d2078063d/xxlarge.jpg?1379088623</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/614/a3ce01b5f556cfeb6a1d2b6d2078063d/xlarge.jpg?1379088623</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/614/a3ce01b5f556cfeb6a1d2b6d2078063d/large.jpg?1379088623</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/035/614/a3ce01b5f556cfeb6a1d2b6d2078063d/medium.jpg?1379088623</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/614/a3ce01b5f556cfeb6a1d2b6d2078063d/small.jpg?1379088623</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/614/a3ce01b5f556cfeb6a1d2b6d2078063d/xsmall.jpg?1379088623</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/035/614/a3ce01b5f556cfeb6a1d2b6d2078063d/xxsmall.jpg?1379088623</ThumbnailUrl>
<PawCount>2</PawCount>
<CommentCount>1</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 12:17:41 -0400</PostedAt>
<EditAt>Sat, 14 Sep 2013 00:23:24 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="35613" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35613">
<Title>Hispanic Heritage Month Calendar</Title>
<Tagline>So many ways to celebrate Latino culture this month!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">You will find attached to this message a calendar of events in Microsoft Word.  I will continue to update it as I find events and activities, so keep on the lookout for updates!!! <div><br></div>
    <div>Also please feel free to contact me if you know of an event that is not on this calendar!</div>
    </div>
]]>
</Body>
<Summary>You will find attached to this message a calendar of events in Microsoft Word.  I will continue to update it as I find events and activities, so keep on the lookout for updates!!!     Also please...</Summary>
<Website>http://www.facebook.com/oslmosaic</Website>
<AttachmentKind>Document</AttachmentKind>
<AttachmentUrl>https://assets1-my.umbc.edu/system/shared/attachments/ddd668ea9547ef1f1a28991a22e0b78e/6a6580ad/news/000/035/613/76b605730bd2606bbcb290f1244dac9a/Hispanic Calendar.docx?1379087864</AttachmentUrl>
<Attachments>
<Attachment kind="Document" url="https://my3.my.umbc.edu/posts/35613/attachments/10983"></Attachment>
</Attachments>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35613/guest@my.umbc.edu/e88159d08e013a1f69978102da49bc2b/api/pixel</TrackingUrl>
<Group token="themosaic">The Mosaic: Center for Cultural Diversity </Group>
<GroupUrl>https://my3.my.umbc.edu/groups/themosaic</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/xsmall.png?1755890395</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/original.png?1755890395</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/xxlarge.png?1755890395</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/xlarge.png?1755890395</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/large.png?1755890395</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/medium.png?1755890395</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/small.png?1755890395</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/xsmall.png?1755890395</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/079/8da8369525d899e6fa49decd5a80b73f/xxsmall.png?1755890395</AvatarUrl>
<Sponsor>Student Life's Mosaic and Interfaith Centers</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/035/613/0c681f4f716bd3551081d97b09bc034a/xxlarge.jpg?1379088980</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/035/613/0c681f4f716bd3551081d97b09bc034a/xlarge.jpg?1379088980</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/613/0c681f4f716bd3551081d97b09bc034a/large.jpg?1379088980</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/035/613/0c681f4f716bd3551081d97b09bc034a/medium.jpg?1379088980</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/035/613/0c681f4f716bd3551081d97b09bc034a/small.jpg?1379088980</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/613/0c681f4f716bd3551081d97b09bc034a/xsmall.jpg?1379088980</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/035/613/0c681f4f716bd3551081d97b09bc034a/xxsmall.jpg?1379088980</ThumbnailUrl>
<PawCount>9</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 12:17:12 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="35615" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35615">
<Title>At the movies, a step back in time</Title>
<Tagline>Movie theater in Arbutus sadly underrated</Tagline>
<Body>
<![CDATA[
    <div class="html-content"><span><p><span>Amid modern movie theaters throughout Baltimore County, the R/C Hollywood Cinema in Arbutus serves as a richly classic movie-going experience.</span></p>
    <p><span>Located along Oregon Avenue, the Hollywood Cinema is the last classic theater remaining in Baltimore County. Far from a shortcoming, the theater’s history is a source of pride among its staff. It also attracts moviegoers looking for a more traditional cinematic atmosphere.</span></p>
    <p><span>“We’re the only old theater in Baltimore County and the only one that still offers a great old-fashioned movie experience,” theater manager Larry Bell said. “Plus, we offer better bargains than practically any other theater in the area. $5 Tuesdays, $8 for Adults, $7 for students and $6 for kids and seniors. You can almost never find better bargains than that today.”</span></p>
    <p><span>The Hollywood Cinema was first built and founded in 1935. In the decades following, it became a mainstay in the Arbutus community. Larry Bell joined the theater as manager in 1985.</span></p>
    <p><span>In 1995, the building was destroyed in a fire. In 1998, the theater was rebuilt with the same specifications as the original. Bell rejoined as manager in 2004.</span></p>
    <p><span>Many students, including sophomore biochemistry major Shruti Gujaran, approve of the theater’s commitment to the past. Gujaran attended the midnight premiere of </span><span>The Hobbit </span><span>through (seb) last year and was impressed by the settings.</span></p>
    <p><span>“It was very classic. I remember the old-fashioned entrance to the theater and the old-fashioned screen when we went in,” Gujaran said. “It just reminds you of seeing movies way back when. It just had that cool feel to it.”</span></p>
    <p><span>Sophomore biology major Ankur Vaidya, who attended the theater’s midnight premiere of </span><span>Iron Man 3</span><span> via (seb) last spring, recalls that “they showed these cool old cartoons right before the movie.” He also said that the theater’s small size was far from a detriment to his enjoyment at the movie. “I liked the theater’s small size. I don’t think that took away from the experience at all.”</span></p>
    <p><span>Still, the Hollywood Cinema is by no means completely caught in the past. Bell prides the theater on its ability to incorporate modern technology into its nostalgic ambience in recent years. “We’ve brought in state-of-the-art digital technology, plus new stereo and surround-sound,” said Bell. That technology includes new digital sound and screens courtesy of Sony, Dolby and Digital Theater Systems (DTS). The theater also now offers 3-D showings.</span></p>
    <p><span>Students who have been have even expressed a desire for (seb) to offer more events there. “If the (seb) organized more midnight premieres or more events with the Hollywood Cinema I feel like more people would be really interested,” Vaidya said.</span></p>
    <p><span>Among students who have experienced the Hollywood Cinema, many have found that the classic environment adds to the theater’s attractiveness. Gujaran noted that the old-fashioned setting adds a level of charm to the experience. </span></p>
    <p><span>“I think blasts from the past such as the Hollywood are making a comeback. I think a lot of people appreciate that people are trying to keep the local history alive through places like this. If more theaters could retain that sense of history, then it would be great for movie events.”</span></p>
    <br></span></div>
]]>
</Body>
<Summary>Amid modern movie theaters throughout Baltimore County, the R/C Hollywood Cinema in Arbutus serves as a richly classic movie-going experience.  Located along Oregon Avenue, the Hollywood Cinema is...</Summary>
<Website>http://www.retrieverweekly.com/news/at-the-movies-a-step-back-in-time-1.3061006#.UjM6A2RNZa8</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35615/guest@my.umbc.edu/1f28301baa8ee6641afebdd8d26b7a07/api/pixel</TrackingUrl>
<Tag>arbutus</Tag>
<Tag>cinema</Tag>
<Tag>movie</Tag>
<Tag>theatre</Tag>
<Group token="retired-26">The Retriever Weekly</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-26</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/xsmall.png?1341372037</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/original.png?1341372037</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/xxlarge.png?1341372037</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/xlarge.png?1341372037</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/large.png?1341372037</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/medium.png?1341372037</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/small.png?1341372037</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/xsmall.png?1341372037</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/026/c51c55cec7054dd833f192a7895b378c/xxsmall.png?1341372037</AvatarUrl>
<Sponsor>The Retriever Weekly</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 12:16:12 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="35616" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35616">
<Title>Working With IndexedDB</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=34673&amp;c=988877547" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=34673&amp;c=988877547" alt="" style="max-width: 100%; height: auto;"></a><p>One of the more interesting developments in web standards lately is the Indexed Database (IndexedDB for short) specification. For a fun time you can read the <a href="http://www.w3.org/TR/IndexedDB/" title="Spec" rel="nofollow external" class="bo">spec</a> yourself. In this tutorial I’ll be explaining this feature and hopefully giving you some inspiration to use this powerful feature yourself.</p>
    <p></p>
    <hr>
    <h2>Overview</h2>
    <blockquote><p>As a specification, IndexedDB is currently a Candidate Recommendation.</p></blockquote>
    <p>In a nutshell, IndexedDB provides a way for you to store large amounts of data on your user’s browser. Any application that needs to send a lot of data over the wire could greatly benefit from being able to store that data on the client instead. Of course storage is only part of the equation. IndexedDB also provides a powerful indexed based searching API to retrieve the data you need.</p>
    <p>You may wonder how IndexedDB differs from other storage mechanisms?</p>
    <p>Cookies are extremely well supported, but have legal implications and limited storage space. Also – they are sent back and forth to the server with every request, completely negating the benefits of client-side storage.</p>
    <p>Local Storage is also very well supported, but limited in terms of the total amount of storage you can use. Local Storage doesn’t provide a true “search” API as data is only retrieved via key values. Local Storage is great for “specific” things you may want to store, for example, preferences, whereas IndexedDB is better suited for Ad Hoc data (much like a database).</p>
    <p>Before we go any further though, let’s have an honest talk about the state of IndexedDB in terms of browser support. As a specification, IndexedDB is currently a Candidate Recommendation. At this point the folks behind the specification are happy with it but are now looking for feedback from the developer community. The specification may change between now and the final stage, W3C Recommendation. In general, the browsers that support IndexedDB now all do in a fairly consistent manner, but developers should be prepared to deal with prefixes and take note of updates in the future.</p>
    <p>As for those browsers supporting IndexedDB, you’ve got a bit of a dilemma. Support is pretty darn good for the desktop, but virtually non-existent for mobile. Let’s see what the <em>excellent</em> site CanIUse.com says:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/09/s1.png" alt="CanIUse Report for IndexedDB" width="600" height="450" style="max-width: 100%; height: auto;"><br> <p>Chrome for Android does support the feature, but very few people are currently using that browser on Android devices. Does the lack of mobile support imply you shouldn’t use it? Of course not! Hopefully all our readers are familiar with the concept of progressive enhancement. Features like IndexedDB can be added to your application in a manner that won’t break in non-supported browsers. You could use wrapper libraries to switch to WebSQL on mobile, or simply skip storing data locally on your mobile clients. Personally I believe the ability to cache large blocks of data on the client is important enough to use now even without mobile support.</p>
    <hr>
    <h2>Let’s Get Started</h2>
    <p>We’ve covered the specification and support, now let’s look at using the feature. The very first thing we should do is check for IndexedDB support. While there are tools out there that provide generic ways to check for browser features, we can make this much simpler since we’re just checking for one particular thing.</p>
    <pre>document.addEventListener("DOMContentLoaded", function(){&#x000A;    &#x000A;        if("indexedDB" in window) {&#x000A;            console.log("YES!!! I CAN DO IT!!! WOOT!!!");&#x000A;        } else {&#x000A;            console.log("I has a sad.");&#x000A;        }&#x000A;    &#x000A;    },false);&#x000A;    </pre>
    <p>The code snippet above (available in <code>test1.html</code> if you download the zip file attached to this article) uses the <code>DOMContentLoaded</code> event to wait for the page to load. (Ok, that’s kind of obvious, but I recognize this may not be familiar to folks who have only used jQuery.) I then simply see if indexedDB exists in the <code>window</code> object and if so, we’re good to go. That’s the simplest example, but typically we would probably want to store this so we know later on if we can use the feature. Here’s a slightly more advanced example (<code>test2.html</code>).</p>
    <pre>var idbSupported = false;&#x000A;    &#x000A;    document.addEventListener("DOMContentLoaded", function(){&#x000A;    &#x000A;        if("indexedDB" in window) {&#x000A;            idbSupported = true;&#x000A;        }&#x000A;    &#x000A;    },false);&#x000A;    </pre>
    <p>All I’ve done is created a global variable, <code>idbSupported</code>, that can be used as a flag to see if the current browser can use IndexedDB.</p>
    <hr>
    <h2>Opening a Database</h2>
    <p>IndexedDB, as you can imagine, makes use of databases. To be clear, this isn’t a SQL Server implementation. This database is local to the browser and only available to the user. IndexedDB databases follow the same rules as cookies and local storage. A database is unique to the domain it was loaded from. So for example, a database called “Foo” created at foo.com will not conflict with a database of the same name at goo.com. Not only will it not conflict, it won’t be available to other domains as well. You can store data for your web site knowing that another web site will not be able to access it.</p>
    <p>Opening a database is done via the open command. In basic usage you provide a name and a version. The version is <em>very</em> important for reasons I’ll cover more later. Here’s a simple example:</p>
    <pre>var openRequest = indexedDB.open("test",1);&#x000A;    </pre>
    <p>Opening a database is an asynchronous operation. In order to handle the result of this operation you’ll need to add some event listeners. There’s four different types of events that can be fired:</p>
    <ul>
    <li>success</li>
    <li>error</li>
    <li>upgradeneeded</li>
    <li>blocked</li>
    </ul>
    <p>You can probably guess as to what success and error imply. The upgradeneeded event is used both when the user first opens the database as well as when you change the version. Blocked isn’t something that will happen usually, but can fire if a previous connection was never closed.</p>
    <p>Typically what should happen is that on the first hit to your site the upgradeneeded event will fire. After that – just the success handler. Let’s look at a simple example (<code>test3.html</code>).</p>
    <pre>var idbSupported = false;&#x000A;    var db;&#x000A;    &#x000A;    document.addEventListener("DOMContentLoaded", function(){&#x000A;    &#x000A;        if("indexedDB" in window) {&#x000A;            idbSupported = true;&#x000A;        }&#x000A;    &#x000A;        if(idbSupported) {&#x000A;            var openRequest = indexedDB.open("test",1);&#x000A;    &#x000A;            openRequest.onupgradeneeded = function(e) {&#x000A;                console.log("Upgrading...");&#x000A;            }&#x000A;    &#x000A;            openRequest.onsuccess = function(e) {&#x000A;                console.log("Success!");&#x000A;                db = e.target.result;&#x000A;            }&#x000A;    &#x000A;            openRequest.onerror = function(e) {&#x000A;                console.log("Error");&#x000A;                console.dir(e);&#x000A;            }&#x000A;    &#x000A;        }&#x000A;    &#x000A;    },false);&#x000A;    </pre>
    <p>Once again we check to see if IndexedDB is actually supported, and if it is, we open a database. We’ve covered three events here – the upgrade needed event, the success event, and the error event. For now focus on the success event. The event is passed a handler via <code>target.result</code>. We’ve copied that to a global variable called <code>db</code>. This is something we’ll use later to actually add data. If you run this in your browser (in one that supports IndexedDB of course!), you should see the upgrade and success message in your console the first time you run the script. The second, and so forth, times you run the script you should only see the success message.</p>
    <hr>
    <h2>Object Stores</h2>
    <p>So far we’ve checked for IndexedDB support, confirmed it, and opened a connection to a database. Now we need a place to store data. IndexedDB has a concept of “Object Stores.” You can think of this as a typical database table. (It is much more loose than a typical database table, but don’t worry about that now.) Object stores have data (obviously) but also a keypath and an optional set of indexes. Keypaths are basically unique identifiers for your data and come in a few different formats. Indexes will be covered later when we start talking about retrieving data.</p>
    <p>Now for something crucial. Remember the upgradeneeded event mentioned before? You can only create object stores during an upgradeneeded event. Now – by default – this will run automatically the first time a user hits your site. You can use this to create your object stores. The crucial thing to remember is that if you ever need to <em>modify</em> your object stores, you’re going to need to upgrade the version (back in that open event) and write code to handle your changes. Lets take a look at a simple example of this in action.</p>
    <pre>var idbSupported = false;&#x000A;    var db;&#x000A;    &#x000A;    document.addEventListener("DOMContentLoaded", function(){&#x000A;    &#x000A;        if("indexedDB" in window) {&#x000A;            idbSupported = true;&#x000A;        }&#x000A;    &#x000A;        if(idbSupported) {&#x000A;            var openRequest = indexedDB.open("test_v2",1);&#x000A;    &#x000A;            openRequest.onupgradeneeded = function(e) {&#x000A;                console.log("running onupgradeneeded");&#x000A;                var thisDB = e.target.result;&#x000A;    &#x000A;                if(!thisDB.objectStoreNames.contains("firstOS")) {&#x000A;                    thisDB.createObjectStore("firstOS");&#x000A;                }&#x000A;    &#x000A;            }&#x000A;    &#x000A;            openRequest.onsuccess = function(e) {&#x000A;                console.log("Success!");&#x000A;                db = e.target.result;&#x000A;            }&#x000A;    &#x000A;            openRequest.onerror = function(e) {&#x000A;                console.log("Error");&#x000A;                console.dir(e);&#x000A;            }&#x000A;    &#x000A;        }&#x000A;    &#x000A;    },false);&#x000A;    </pre>
    <p>This example (<code>test4.html</code>) builds upon the previous entries so I’ll just focus on what’s new. Within the upgradeneeded event, I’ve made use of the database variable passed to it (<code>thisDB</code>). One of the properties of this variable is a list of existing object stores called <code>objectStoreNames</code>. For folks curious, this is not a simple array but a “DOMStringList.” Don’t ask me – but there ya go. We can use the <code>contains</code> method to see if our object store exists, and if not, create it. This is one of the few synchronous functions in IndexedDB so we don’t have to listen for the result.</p>
    <p>To summarize then – this is what would happen when a user visits your site. The first time they are here, the upgradeneeded event fires. The code checks to see if an object store, “firstOS” exists. It will not. Therefore – it is created. Then the success handler runs. The second time they visit the site, the version number will be the same so the upgradeneeded event is <em>not</em> fired.</p>
    <p>Now imagine you wanted to add a second object store. All you need to do is increment the version number and basically duplicate the contains/createObjectStore code block you see above. The cool thing is that your upgradeneeded code will support both people who are brand new to the site as well as those who already had the first object store. Here is an example of this (<code>test5.html</code>):</p>
    <pre>var openRequest = indexedDB.open("test_v2",2);&#x000A;    &#x000A;    openRequest.onupgradeneeded = function(e) {&#x000A;        console.log("running onupgradeneeded");&#x000A;        var thisDB = e.target.result;&#x000A;    &#x000A;        if(!thisDB.objectStoreNames.contains("firstOS")) {&#x000A;            thisDB.createObjectStore("firstOS");&#x000A;        }&#x000A;    &#x000A;        if(!thisDB.objectStoreNames.contains("secondOS")) {&#x000A;            thisDB.createObjectStore("secondOS");&#x000A;        }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <hr>
    <h2>Adding Data</h2>
    <p>Once you’ve got your object stores ready you can begin adding data. This is – perhaps – one of the coolest aspects of IndexedDB. Unlike traditional table-based databases, IndexedDB lets you store an object as is. What that means is you can take a generic JavaScript object and just store it. Done. Obviously there’s some caveats here, but for the most part, that’s it.</p>
    <p>Working with data requires you to use a transaction. Transactions take two arguments. The first is an array of tables you’ll be working with. Most of the time this will be one table. The second argument is the type of transaction. There are two types of transactions: readonly and readwrite. Adding data will be a readwrite operation. Let’s start by creating the transaction:</p>
    <pre>//Assume db is a database variable opened earlier&#x000A;    var transaction = db.transaction(["people"],"readwrite");&#x000A;    </pre>
    <p>Note the object store, “people”, is just one we’ve made up in the example above. Our next full demo will make use of it. After getting the transaction, you then ask it for the object store you said you would be working with:</p>
    <pre>var store = transaction.objectStore("people");&#x000A;    </pre>
    <p>Now that you’ve got the store you can add data. This is done via the – wait for it – <code>add</code> method.</p>
    <pre>//Define a person&#x000A;    var person = {&#x000A;        name:name,&#x000A;        email:email,&#x000A;        created:new Date()&#x000A;    }&#x000A;    &#x000A;    //Perform the add&#x000A;    var request = store.add(person,1);&#x000A;    </pre>
    <p>Remember earlier we said that you can store any data you want (for the most part). So my person object above is completely arbitrary. I could have used firstName and lastName instead of just name. I could have used a gender property. You get the idea. The second argument is the key used to uniquely identify the data. In this case we’ve hard coded it to 1 which is going to cause a problem pretty quickly. That’s ok – we’ll learn how to correct it.</p>
    <p>The add operation is ascynchronous, so lets add two event handlers for the result.</p>
    <pre>request.onerror = function(e) {&#x000A;        console.log("Error",e.target.error.name);&#x000A;        //some type of error handler&#x000A;    }&#x000A;    &#x000A;    request.onsuccess = function(e) {&#x000A;        console.log("Woot! Did it");&#x000A;    }&#x000A;    </pre>
    <p>We’ve got an <code>onerror</code> handler for errors and <code>onsuccess</code> for good changes. Fairly obvious, but let’s see a complete example. You can find this in the file <code>test6.html</code>. &gt;</p>
    <pre>&lt;!doctype html&gt;&#x000A;    &lt;html&gt;&#x000A;    &lt;head&gt;&#x000A;    &lt;/head&gt;&#x000A;    &#x000A;    &lt;body&gt;&#x000A;    &#x000A;    &lt;script&gt;&#x000A;    var db;&#x000A;    &#x000A;    function indexedDBOk() {&#x000A;        return "indexedDB" in window;&#x000A;    }&#x000A;    &#x000A;    document.addEventListener("DOMContentLoaded", function() {&#x000A;    &#x000A;        //No support? Go in the corner and pout.&#x000A;        if(!indexedDBOk) return;&#x000A;    &#x000A;        var openRequest = indexedDB.open("idarticle_people",1);&#x000A;    &#x000A;        openRequest.onupgradeneeded = function(e) {&#x000A;            var thisDB = e.target.result;&#x000A;    &#x000A;            if(!thisDB.objectStoreNames.contains("people")) {&#x000A;                thisDB.createObjectStore("people");&#x000A;            }&#x000A;        }&#x000A;    &#x000A;        openRequest.onsuccess = function(e) {&#x000A;            console.log("running onsuccess");&#x000A;    &#x000A;            db = e.target.result;&#x000A;    &#x000A;            //Listen for add clicks&#x000A;            document.querySelector("#addButton").addEventListener("click", addPerson, false);&#x000A;        }&#x000A;    &#x000A;        openRequest.onerror = function(e) {&#x000A;            //Do something for the error&#x000A;        }&#x000A;    &#x000A;    },false);&#x000A;    &#x000A;    function addPerson(e) {&#x000A;        var name = document.querySelector("#name").value;&#x000A;        var email = document.querySelector("#email").value;&#x000A;    &#x000A;        console.log("About to add "+name+"/"+email);&#x000A;    &#x000A;        var transaction = db.transaction(["people"],"readwrite");&#x000A;        var store = transaction.objectStore("people");&#x000A;    &#x000A;        //Define a person&#x000A;        var person = {&#x000A;            name:name,&#x000A;            email:email,&#x000A;            created:new Date()&#x000A;        }&#x000A;    &#x000A;        //Perform the add&#x000A;        var request = store.add(person,1);&#x000A;    &#x000A;        request.onerror = function(e) {&#x000A;            console.log("Error",e.target.error.name);&#x000A;            //some type of error handler&#x000A;        }&#x000A;    &#x000A;        request.onsuccess = function(e) {&#x000A;            console.log("Woot! Did it");&#x000A;        }&#x000A;    }&#x000A;    &lt;/script&gt;&#x000A;    &#x000A;    &lt;input type="text" id="name" placeholder="Name"&gt;&lt;br/&gt;&#x000A;    &lt;input type="email" id="email" placeholder="Email"&gt;&lt;br/&gt;&#x000A;    &lt;button id="addButton"&gt;Add Data&lt;/button&gt;&#x000A;    &#x000A;    &lt;/body&gt;&#x000A;    &lt;/html&gt;&#x000A;    </pre>
    <p>The example above contains a small form with a button to fire off an event to store the data in IndexedDB. Run this in your browser, add something to the form fields, and click add. If you’ve got your browser dev tools open, you should see something like this.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/09/s2.png" alt="Data Entry Form" width="394" height="420" style="max-width: 100%; height: auto;"><br> <p>This is a great time to point out that Chrome has an excellent viewer for IndexedDB data. If you click on the Resources tab, expand the IndexedDB section, you can see the database created by this demo as well as the object just entered.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/09/s3.png" alt="Chrome Dev Tools and IndexedDB" width="600" height="132" style="max-width: 100%; height: auto;"><br> <p>For the heck of it, go ahead and hit that Add Data button again. You should see an error in the console:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/09/s4.png" alt="Error adding data again" width="492" height="268" style="max-width: 100%; height: auto;"><br> <p>The error message should be a clue. ConstraintError means we just tried to add data with the same key as one that already existed. If you remember, we hard coded that key and we <em>knew</em> that was going to be a problem. It’s time to talk keys.</p>
    <hr>
    <h2>Keys</h2>
    <p>Keys are IndexedDB’s version of primary keys. Traditional databases can have tables without keys, but every object store needs to have a key. IndexedDB allows for a couple different types of keys.</p>
    <p>The first option is to simply specify it yourself, like we did above. We could use logic to generate unique keys.</p>
    <p>Your second option is a keypath, where the key is based on a property of the data itself. Consider our people example – we could use an email address as a key.</p>
    <p>Your third option, and in my opinion, the simplest, is to use a key generator. This works much like an autonumber primary key and is the simplest method of specifying keys.</p>
    <p>Keys are defined when object stores are created. Here are two examples – one using a key path and one a generator.</p>
    <pre>thisDb.createObjectStore("test", { keyPath: "email" });  &#x000A;    thisDb.createObjectStore("test2", { autoIncrement: true });&#x000A;    </pre>
    <p>We can modify our previous demo by creating an object store with an autoIncrement key:</p>
    <pre>thisDB.createObjectStore("people", {autoIncrement:true});&#x000A;    </pre>
    <p>Finally, we can take the Add call we used before and remove the hard coded key:</p>
    <pre>var request = store.add(person);&#x000A;    </pre>
    <p>That’s it! Now you can add data all day long. You can find this version in <code>test7.html</code>.</p>
    <hr>
    <h2>Reading Data</h2>
    <p>Now let’s switch to reading individual pieces of data (we’ll cover reading larger sets of data later). Once again, this will be done in a transaction and will be asynchronous. Here’s a simple example:</p>
    <pre>var transaction = db.transaction(["test"], "readonly");&#x000A;    var objectStore = transaction.objectStore("test");&#x000A;    &#x000A;    //x is some value&#x000A;    var ob = objectStore.get(x);&#x000A;    &#x000A;    ob.onsuccess = function(e) {&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>Note that the transaction is read only. The API call is just a simple get call with the key passed in. As a quick aside, if you think using IndexedDB is a bit verbose, note you can chain many of those calls as well. Here’s the exact same code written much tighter:</p>
    <pre>db.transaction(["test"], "readonly").objectStore("test").get(X).onsuccess = function(e) {}&#x000A;    </pre>
    <p>Personally I still find IndexedDB a bit complex so I prefer the ‘broken out’ approach to help me keep track of what’s going on.</p>
    <p>The result of the get’s onsuccess handler is the object you stored before. Once you have that object you can do whatever you want. In our next demo (<code>test8.html</code>) we’ve added a simple form field to let you enter a key and print the result. Here is an example:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/09/s5.png" alt="Fetching data" width="600" height="571" style="max-width: 100%; height: auto;"><br> <p>The handler for the Get Data button is below:</p>
    <pre>function getPerson(e) {&#x000A;        var key = document.querySelector("#key").value;&#x000A;        if(key === "" || isNaN(key)) return;&#x000A;    &#x000A;        var transaction = db.transaction(["people"],"readonly");&#x000A;        var store = transaction.objectStore("people");&#x000A;    &#x000A;        var request = store.get(Number(key));&#x000A;    &#x000A;        request.onsuccess = function(e) {&#x000A;    &#x000A;            var result = e.target.result;&#x000A;            console.dir(result);&#x000A;            if(result) {&#x000A;                var s = "&amp;lt;h2&gt;Key "+key+"&amp;lt;/h2&gt;&amp;lt;p&gt;";&#x000A;                for(var field in result) {&#x000A;                    s+= field+"="+result[field]+"&amp;lt;br/&gt;";&#x000A;                }&#x000A;                document.querySelector("#status").innerHTML = s;&#x000A;            } else {&#x000A;                document.querySelector("#status").innerHTML = "&amp;lt;h2&gt;No match&amp;lt;/h2&gt;";&#x000A;            }   &#x000A;        }   &#x000A;    }&#x000A;    </pre>
    <p>For the most part, this should be self explanatory. Get the value from the field and run a get call on the object store obtained from a transaction. Notice that the display code simply gets <em>all</em> the fields and dumps them out. In a real application you would (hopefully) know what your data contains and work with specific fields.</p>
    <hr>
    <h2>Reading More Data</h2>
    <p>So that’s how you would get one piece of data. How about a <em>lot</em> of data? IndexedDB has support for what’s called a cursor. A cursor lets you iterate over data. You can create cursors with an optional range (a basic filter) and a direction.</p>
    <p>As an example, the following code block opens a cursor to fetch all the data from an object store. Like everything else we’ve done with data this is asynchronous and in a transaction.</p>
    <pre>var transaction = db.transaction(["test"], "readonly");&#x000A;    var objectStore = transaction.objectStore("test");&#x000A;    &#x000A;    var cursor = objectStore.openCursor();&#x000A;    &#x000A;    cursor.onsuccess = function(e) {&#x000A;        var res = e.target.result;&#x000A;        if(res) {&#x000A;            console.log("Key", res.key);&#x000A;            console.dir("Data", res.value);&#x000A;            res.continue();&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>The success handler is passed a result object (the variable res above). It contains the key, the object for the data (in the value key above), and a continue method that is used to iterate to the next piece of data.</p>
    <p>In the following function, we’ve used a cursor to iterate over all of the objectstore data. Since we’re working with “person” data we’ve called this getPeople:</p>
    <pre>function getPeople(e) {&#x000A;    &#x000A;        var s = "";&#x000A;    &#x000A;        db.transaction(["people"], "readonly").objectStore("people").openCursor().onsuccess = function(e) {&#x000A;            var cursor = e.target.result;&#x000A;            if(cursor) {&#x000A;                s += "&amp;lt;h2&gt;Key "+cursor.key+"&amp;lt;/h2&gt;&amp;lt;p&gt;";&#x000A;                for(var field in cursor.value) {&#x000A;                    s+= field+"="+cursor.value[field]+"&amp;lt;br/&gt;";&#x000A;                }&#x000A;                s+="&amp;lt;/p&gt;";&#x000A;                cursor.continue();&#x000A;            }&#x000A;            document.querySelector("#status2").innerHTML = s;&#x000A;        }&#x000A;    }&#x000A;    </pre>
    <p>You can see a full demo of this in your download as file <code>test9.html</code>. It has an Add Person logic as in the earlier examples, so simply create a few people and then hit the button to display all the data.</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/09/s7.png" alt="List of Data" width="450" height="318" style="max-width: 100%; height: auto;"><br> <p>So now you know how to get one piece of data as well as how to get all the data. Let’s now hit our final topic – working with indexes.</p>
    <hr>
    <h2>They Call This IndexedDB, Right?</h2>
    <p>We’ve been talking about IndexedDB for the entire article but haven’t yet actually done any – well – indexes. Indexes are a crucial part of IndexedDB object stores. They provide a way to fetch data based on their value as well as specifying if a value should be unique within a store. Later we’ll demonstrate how to use indexes to get a range of data.</p>
    <p>First – how do you create an index? Like everything else structural, they must be done in an upgrade event, basically at the same time you create your object store. Here is an example:</p>
    <pre>var objectStore = thisDb.createObjectStore("people", &#x000A;                    { autoIncrement:true });&#x000A;    //first arg is name of index, second is the path (col);&#x000A;    objectStore.createIndex("name","name", {unique:false});&#x000A;    objectStore.createIndex("email","email", {unique:true});&#x000A;    </pre>
    <p>In the first line we create the store. We take that result (an objectStore object) and run the <code>createIndex</code> method. The first argument is the name for the index and the second is the property that will be indexed. In most cases I think you will use the same name for both. The final argument is a set of options. For now, we’re just using one, unique. The first index for name is not unique. The second one for email is. When we store data, IndexedDB will check these indexes and ensure that the email property is unique. It will also do some data handling on the back end to ensure we can fetch data by these indexes.</p>
    <p>How does that work? Once you fetch an object store via a transaction, you can then ask for an index from that store. Using the code above, here is an example of that:</p>
    <pre>var transaction = db.transaction(["people"],"readonly");&#x000A;    var store = transaction.objectStore("people");&#x000A;    var index = store.index("name");&#x000A;    &#x000A;    //name is some value&#x000A;    var request = index.get(name);&#x000A;    </pre>
    <p>First we get the transaction, followed by the store, and then index. As we’ve said before, you could chain those first three lines to make it a bit more compact if you want.</p>
    <p>Once you’ve got an index you can then perform a <code>get</code> call on it to fetch data by name. We could do something similar for email as well. The result of that call is yet another asynchronous object you can bind an onsuccess handler to. Here is an example of that handler found in the file <code>test10.html</code>:</p>
    <pre>request.onsuccess = function(e) {&#x000A;    &#x000A;        var result = e.target.result;&#x000A;        if(result) {&#x000A;            var s = "&amp;lt;h2&gt;Name "+name+"&amp;lt;/h2&gt;&amp;lt;p&gt;";&#x000A;            for(var field in result) {&#x000A;                s+= field+"="+result[field]+"&amp;lt;br/&gt;";&#x000A;            }&#x000A;            document.querySelector("#status").innerHTML = s;&#x000A;        } else {&#x000A;            document.querySelector("#status").innerHTML = "&amp;lt;h2&gt;No match&amp;lt;/h2&gt;";&#x000A;        }   &#x000A;    }&#x000A;    </pre>
    <p>Note that an index <code>get</code> call may return multiple objects. Since our name is not unique we should probably modify the code to handle that, but it isn’t required.</p>
    <p>Now let’s kick it up a notch. You’ve seen using the get API on the index to get a value based on that property. What if you want to get a more broad set of data? The final term we’re going to learn today are Ranges. Ranges are a way to select a subset of an index. For example, given an index on a name property, we can use a range to find names that begin with A up to names that begin with C. Ranges come in a few different varieties. They can be “everything below some marker”, “everything above some marker”, and “something between a lower marker and a higher marker.” Finally, just to make things interesting, ranges can be inclusive or exclusive. Basically that means for a range going from A-C, we can specify if we want to include A and C in the range or just the values between them. Finally, you can also request both ascending and descending ranges.</p>
    <p>Ranges are created using a toplevel object called IDBKeyRange. It has three methods of interest: <code>lowerBound</code>, <code>upperBound</code>, and <code>bound</code>. <code>lowerBound</code> is used to create a range that starts at a lower value and returns all data “above” it. <code>upperBound</code> is the opposite. And – finally – <code>bound</code> is used to support a set of data with both a lower and upper bound. Let’s look at some examples:</p>
    <pre>//Values over 39&#x000A;    var oldRange = IDBKeyRange.lowerBound(39);&#x000A;    &#x000A;    //Values 40a dn over&#x000A;    var oldRange2 = IDBKeyRange.lowerBound(40,true);&#x000A;    &#x000A;    //39 and smaller...&#x000A;    var youngRange = IDBKeyRange.upperBound(40);&#x000A;    &#x000A;    //39 and smaller...&#x000A;    var youngRange2 = IDBKeyRange.upperBound(39,true);&#x000A;    &#x000A;    //not young or old... you can also specify inclusive/exclusive&#x000A;    var okRange = IDBKeyRange.bound(20,40)&#x000A;    </pre>
    <p>Once you have a range, you can pass it to an index’s openCursor method. This gives you an iterator to loop over the values that match that range. As a practical manner, this isn’t really a search per se. You can use this to search content based on the beginning of a string, but not the middle or end. Let’s look at a full example. First we’ll create a simple form to search people:</p>
    <pre>Starting with: &lt;input type="text" id="nameSearch" placeholder="Name"&gt;&lt;br/&gt;&#x000A;    Ending with: &lt;input type="text" id="nameSearchEnd" placeholder="Name"&gt;&lt;br/&gt;&#x000A;    &lt;button id="getButton"&gt;Get By Name Range&lt;/button&gt;&#x000A;    </pre>
    <p>We’re going to allow for searches that consist of any of the three types of ranges (again, a value and higher, a highest value, or the values within two inputs). Now let’s look at the event handler for this form.</p>
    <pre>function getPeople(e) {&#x000A;        var name = document.querySelector("#nameSearch").value;&#x000A;    &#x000A;        var endname = document.querySelector("#nameSearchEnd").value;&#x000A;    &#x000A;        if(name == "" &amp;amp;&amp;amp; endname == "") return;&#x000A;    &#x000A;        var transaction = db.transaction(["people"],"readonly");&#x000A;        var store = transaction.objectStore("people");&#x000A;        var index = store.index("name");&#x000A;    &#x000A;        //Make the range depending on what type we are doing&#x000A;        var range;&#x000A;        if(name != "" &amp;amp;&amp;amp; endname != "") {&#x000A;            range = IDBKeyRange.bound(name, endname);&#x000A;        } else if(name == "") {&#x000A;            range = IDBKeyRange.upperBound(endname);&#x000A;        } else {&#x000A;            range = IDBKeyRange.lowerBound(name);&#x000A;        }&#x000A;    &#x000A;        var s = "";&#x000A;    &#x000A;        index.openCursor(range).onsuccess = function(e) {&#x000A;            var cursor = e.target.result;&#x000A;            if(cursor) {&#x000A;                s += "&amp;lt;h2&gt;Key "+cursor.key+"&amp;lt;/h2&gt;&amp;lt;p&gt;";&#x000A;                for(var field in cursor.value) {&#x000A;                    s+= field+"="+cursor.value[field]+"&amp;lt;br/&gt;";&#x000A;                }&#x000A;                s+="&amp;lt;/p&gt;";&#x000A;                cursor.continue();&#x000A;            }&#x000A;            document.querySelector("#status").innerHTML = s;&#x000A;        }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>From top to bottom – we begin by grabbing the two form fields. Next we create a transaction and from that get the store and index. Now for the semi-complex part. Since we have three different types of ranges we need to support we have to do a bit of conditional logic to figure out which we’ll need. What range we create is based on what fields you fill in. What’s nice is that once we have the range, we then simply pass it to the index and open the cursor. That’s it! You can find this full example in <code>test11.html</code>. Be sure to enter some values first so you have data to search.</p>
    <hr>
    <h2>What’s Next?</h2>
    <p>Believe it or not – we’ve only begun our discussion on IndexedDB. In the next article, we’ll cover additional topics, including updates and deletes, array based values, and some general tips for working with IndexedDB.</p>
    </div>
]]>
</Body>
<Summary>One of the more interesting developments in web standards lately is the Indexed Database (IndexedDB for short) specification. For a fun time you can read the spec yourself. In this tutorial I’ll...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/5zzS2QrFCKw/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35616/guest@my.umbc.edu/4a274b4b8e11405a801206c949968d0f/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>indexeddb</Tag>
<Tag>javascript</Tag>
<Tag>javascript-and-ajax</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tutorials</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 12:07:30 -0400</PostedAt>
<EditAt>Fri, 13 Sep 2013 12:07:30 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="35610" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35610">
<Title>We're just 5 days away from our Fall Open House! Drop by next Wednesday from 4-6...</Title>
<Body>
<![CDATA[
    <div class="html-content">We're just 5 days away from our Fall Open House! Drop by next Wednesday from 4-6 to catch a LIVE hacking demo, info sessions, cupcakes from <a href="/profile.php?id=112386495452321" title="To tag someone, type @ and then the friend's name" rel="nofollow external" class="bo">icedgemsbaking</a>, &amp; music by <a href="/profile.php?id=273693032748752" title="To tag someone, type @ and then the friend's name" rel="nofollow external" class="bo">Last to Fire</a>. <br> <br> RSVP here: <a href="http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.umbctraining.com%2FAbout-Us%2FEvents%2FFall-Open-House&amp;h=LAQH9eoew&amp;s=1" rel="nofollow external" class="bo">http://www.umbctraining.com/About-Us/Events/Fall-Open-House</a><br><br><a href="https://www.facebook.com/photo.php?fbid=10151575014956076&amp;set=a.10150211271956076.315093.82137826075&amp;type=1&amp;relevant_count=1" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-h-a.akamaihd.net/hphotos-ak-prn1/1234145_10151575014956076_643618782_s.jpg" alt="" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>We're just 5 days away from our Fall Open House! Drop by next Wednesday from 4-6 to catch a LIVE hacking demo, info sessions, cupcakes from icedgemsbaking, &amp; music by Last to Fire.     RSVP...</Summary>
<Website>https://www.facebook.com/photo.php?fbid=10151575014956076&amp;set=a.10150211271956076.315093.82137826075&amp;type=1</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35610/guest@my.umbc.edu/ea90a9fbf8299c5965a0d2b37bd4d0b3/api/pixel</TrackingUrl>
<Tag>ccna</Tag>
<Tag>ceh</Tag>
<Tag>centers</Tag>
<Tag>cisco</Tag>
<Tag>cyber</Tag>
<Tag>cybersecurity</Tag>
<Tag>information</Tag>
<Tag>it</Tag>
<Tag>leadership</Tag>
<Tag>management</Tag>
<Tag>microsoft</Tag>
<Tag>project</Tag>
<Tag>security</Tag>
<Tag>technology</Tag>
<Tag>training</Tag>
<Tag>umbc</Tag>
<Group token="retired-575">UMBC Training Centers</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-575</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/original.jpg?1361981335</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/large.png?1361981335</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/medium.png?1361981335</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/small.png?1361981335</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxsmall.png?1361981335</AvatarUrl>
<Sponsor>UMBC Training Centers</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 11:19:05 -0400</PostedAt>
<EditAt>Fri, 13 Sep 2013 11:19:05 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="35628" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35628">
<Title>The Boy Genius of Ulan Bator</Title>
<Body>
<![CDATA[
    <div class="html-content">How a kid from Mongolia found his way to M.I.T.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F15%2Fmagazine%2Fthe-boy-genius-of-ulan-bator.html%3Fpartner%3Drss%26emc%3Drss&amp;t=The+Boy+Genius+of+Ulan+Bator" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F15%2Fmagazine%2Fthe-boy-genius-of-ulan-bator.html%3Fpartner%3Drss%26emc%3Drss&amp;t=The+Boy+Genius+of+Ulan+Bator" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F15%2Fmagazine%2Fthe-boy-genius-of-ulan-bator.html%3Fpartner%3Drss%26emc%3Drss&amp;t=The+Boy+Genius+of+Ulan+Bator" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F15%2Fmagazine%2Fthe-boy-genius-of-ulan-bator.html%3Fpartner%3Drss%26emc%3Drss&amp;t=The+Boy+Genius+of+Ulan+Bator" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F15%2Fmagazine%2Fthe-boy-genius-of-ulan-bator.html%3Fpartner%3Drss%26emc%3Drss&amp;t=The+Boy+Genius+of+Ulan+Bator" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    </div>
]]>
</Body>
<Summary>How a kid from Mongolia found his way to M.I.T.      </Summary>
<Website>http://www.nytimes.com/2013/09/15/magazine/the-boy-genius-of-ulan-bator.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35628/guest@my.umbc.edu/de867a66d0b6636f0379f988a7ebf8ff/api/pixel</TrackingUrl>
<Tag>admissions-standards</Tag>
<Tag>e-learning</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>massachusetts-institute-of-technology</Tag>
<Tag>mongolia</Tag>
<Tag>myanganbayar-battushig</Tag>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>ulan-bator-mongolia</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 10:38:01 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="35620" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35620">
<Title>Incredible voice control for the Web</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="thumbnail" src="http://netdna.webdesignerdepot.com/uploads/2013/09/thumbnail18.jpg" width="200" height="160" style="max-width: 100%; height: auto;">Browsing the Web is usually an endless round of clicks, taps and scrolling.</p> <p>That’s changed with <a href="https://www.talater.com/annyang/" rel="nofollow external" class="bo">Annyang,</a> an incredibly simple JavaScript library that enables voice commands for web sites.</p> <p>Maybe not the most user-friendly for brochure sites, it’s great for complex applications where giving the user a series of verbal shortcuts to different sections, such as ‘Open my account’ or ‘Save for later’, could potentially save a lot of frustration and visits to the site map.</p> <p>Any browser that supports SpeechRecognition is supported and any browser that doesn’t is left unaffected.</p> <p>A simple example would look something like this:</p> <pre>&lt;script src='annyang.min.js'&gt;&lt;/script&gt;<br>&lt;script&gt;<br> if(annyang)<br>{<br>        var commands = {<br>        'hello': function()<br>                {<br>                        console.log('world');<br>                }<br>        }<br>         annyang.init(commands);<br>         annyang.start();<br> }<br>&lt;/script&gt;</pre> <p><a href="https://www.talater.com/annyang/" rel="nofollow external" class="bo">Take a look at the demo.</a> It may not be the most responsive input method, and you’ll feel a bit foolish on your morning commute; but the possibilities are tantalizing.</p> <p> </p> <p><em><strong>Have you used voice control for a web interface? What difficulties did you encounter? Let us know in the comments.</strong></em></p> <p><br><br> </p>
    <table width="100%"> <tbody>
    <tr> <td> <a href="http://www.mightydeals.com/deal/chalkboard-fonts.html?ref=inwidget" rel="nofollow external" class="bo"><strong>Chalkboard-Style Fonts: 6 Fun Fonts for only $9!</strong></a> </td> <td> <a href="http://www.mightydeals.com/?ref=inwidget" rel="nofollow external" class="bo"><br> <img src="http://mightydeals.com/web/images/widget-logo.png" height="40" width="90" alt="Incredible voice control for the Web" style="max-width: 100%; height: auto;"><br> </a> </td> </tr> </tbody>
    </table> <p><br> </p> <a href="http://www.webdesignerdepot.com/2013/09/incredible-voice-control-for-the-web/" rel="nofollow external" class="bo">Source</a> <br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F09%2Fincredible-voice-control-for-the-web%2F&amp;t=Incredible+voice+control+for+the+Web" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F09%2Fincredible-voice-control-for-the-web%2F&amp;t=Incredible+voice+control+for+the+Web" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F09%2Fincredible-voice-control-for-the-web%2F&amp;t=Incredible+voice+control+for+the+Web" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F09%2Fincredible-voice-control-for-the-web%2F&amp;t=Incredible+voice+control+for+the+Web" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F09%2Fincredible-voice-control-for-the-web%2F&amp;t=Incredible+voice+control+for+the+Web" 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/174726918730/u/49/f/661066/c/35285/s/31323651/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/174726918730/u/49/f/661066/c/35285/s/31323651/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Browsing the Web is usually an endless round of clicks, taps and scrolling.   That’s changed with Annyang, an incredibly simple JavaScript library that enables voice commands for web sites....</Summary>
<Website>http://rss.feedsportal.com/c/35285/f/661066/s/31323651/sc/4/l/0L0Swebdesignerdepot0N0C20A130C0A90Cincredible0Evoice0Econtrol0Efor0Ethe0Eweb0C/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35620/guest@my.umbc.edu/81fc9c138c3b56601a6c097fd2d6f487/api/pixel</TrackingUrl>
<Tag>annyang</Tag>
<Tag>art</Tag>
<Tag>control-browser-with-voice</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>html5</Tag>
<Tag>illustrator</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>oracle</Tag>
<Tag>photoshop</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>user-interface-design</Tag>
<Tag>voice-command</Tag>
<Tag>voice-controls</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 10:15:15 -0400</PostedAt>
<EditAt>Fri, 13 Sep 2013 10:15:15 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="35607" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35607">
<Title>Q&amp;A: Adding the Right Amount of RAM</Title>
<Body>
<![CDATA[
    <div class="html-content">How to upgrade the memory on a MacBook pro laptop and other OS X computers, and resizing the tiles on the Windows 8 start screen.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F13%2Ftechnology%2Fpersonaltech%2Fadding-the-right-amount-of-ram.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Adding+the+Right+Amount+of+RAM" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F13%2Ftechnology%2Fpersonaltech%2Fadding-the-right-amount-of-ram.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Adding+the+Right+Amount+of+RAM" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F13%2Ftechnology%2Fpersonaltech%2Fadding-the-right-amount-of-ram.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Adding+the+Right+Amount+of+RAM" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F13%2Ftechnology%2Fpersonaltech%2Fadding-the-right-amount-of-ram.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Adding+the+Right+Amount+of+RAM" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F09%2F13%2Ftechnology%2Fpersonaltech%2Fadding-the-right-amount-of-ram.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Q%26A%3A+Adding+the+Right+Amount+of+RAM" 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/173608912490/u/0/f/640387/c/34625/s/31315154/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/173608912490/u/0/f/640387/c/34625/s/31315154/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/173608912490/u/0/f/640387/c/34625/s/31315154/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/173608912490/u/0/f/640387/c/34625/s/31315154/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/173608912490/u/0/f/640387/c/34625/s/31315154/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/173608912490/u/0/f/640387/c/34625/s/31315154/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/173608912490/u/0/f/640387/c/34625/s/31315154/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/173608912490/u/0/f/640387/c/34625/s/31315154/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>How to upgrade the memory on a MacBook pro laptop and other OS X computers, and resizing the tiles on the Windows 8 start screen.      </Summary>
<Website>http://www.nytimes.com/2013/09/13/technology/personaltech/adding-the-right-amount-of-ram.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35607/guest@my.umbc.edu/a9ab0b83f1d60a944495e9aa3babef20/api/pixel</TrackingUrl>
<Tag>computers-and-the-internet</Tag>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>windows-operating-system</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 10:12:11 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="35605" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35605">
<Title>IoF announced as Innovators of the Year</Title>
<Tagline>New discoveries</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Professor Chris D. Geddes and the Institute of Fluorescence have 
    recently been announced winners of the 2013 innovator of the year award 
    by the Daily Record. Dr Geddes and the IoF have won the award for their 
    development of a very rapid and low cost test for the determination of 
    Sexually Transmitted Infections (STIs). Typically clinical diagnostics 
    for STIs can take as long as 48 hrs, over which time the epidemiological
     transmission and infection spread can occur further. The IoFs 
    technology can detect the presence of an STI within 8 minutes, allowing a
     real-time point-of-care test to be realized, meaning that patients 
    presenting with STI-like symptoms in an emergency department / clinic 
    can be diagnosed and potentially treated on-site. The new test costs 
    less than $2 per swab, making the test attractive for downstream 
    commercialization and clinical use.</p>
    <p>In addition to Dr Geddes, IoF /
     Chemistry Graduate Student Johan Melendez has worked on the project as 
    part of his thesis, the clinical validation of the technology recently 
    being reported in the Journal of Clinical Microbiology.</p>
    <p>Further details of the award and other technology developments can be found on the <a href="http://theinstituteoffluorescence.com/" rel="nofollow external" class="bo">IoF (UMBC’s Institute of Fluorescence) website</a>.</p>
    <p>We congratulate Professor Geddes and the IoF team on this notable award.</p>
    </div>
]]>
</Body>
<Summary>Professor Chris D. Geddes and the Institute of Fluorescence have  recently been announced winners of the 2013 innovator of the year award  by the Daily Record. Dr Geddes and the IoF have won the...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35605/guest@my.umbc.edu/d154046479df62ecd01594e9737d9719/api/pixel</TrackingUrl>
<Group token="chem">Department of Chemistry &amp;amp; Biochemistry</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/chem</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/xsmall.png?1397743638</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/original.jpg?1397743638</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/xxlarge.png?1397743638</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/xlarge.png?1397743638</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/large.png?1397743638</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/medium.png?1397743638</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/small.png?1397743638</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/xsmall.png?1397743638</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/676/b0d3e132c23529b08ae2b24fba1f86f5/xxsmall.png?1397743638</AvatarUrl>
<Sponsor>Department of Chemistry &amp; Biochemistry</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/605/b9c849ba1538b82e3c2e72ebfc92f14e/xxlarge.jpg?1379356469</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/605/b9c849ba1538b82e3c2e72ebfc92f14e/xlarge.jpg?1379356469</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/035/605/b9c849ba1538b82e3c2e72ebfc92f14e/large.jpg?1379356469</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/035/605/b9c849ba1538b82e3c2e72ebfc92f14e/medium.jpg?1379356469</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/035/605/b9c849ba1538b82e3c2e72ebfc92f14e/small.jpg?1379356469</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/035/605/b9c849ba1538b82e3c2e72ebfc92f14e/xsmall.jpg?1379356469</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/035/605/b9c849ba1538b82e3c2e72ebfc92f14e/xxsmall.jpg?1379356469</ThumbnailUrl>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 10:00:25 -0400</PostedAt>
<EditAt>Mon, 16 Sep 2013 14:35:07 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="35604" important="false" status="posted" url="https://my3.my.umbc.edu/posts/35604">
<Title>Walk-in Advising Hours September 16th-20th</Title>
<Body>
<![CDATA[
    <div class="html-content">Monday, 9/16<br>10am-11:30am<br>1:30pm-3pm<br><br>Tuesday, 9/17<br>10am-11:30am<br>1:30pm-3pm<br><br>Wednesday, 9/18<br>10am-11:30am<br>1:30pm-3pm<br><br>Thursday, 9/19<br>10am-11:30am<br>1:30pm-3pm<br><br>Friday, 9/20<br>10am-11:30am<br>
    </div>
]]>
</Body>
<Summary>Monday, 9/16 10am-11:30am 1:30pm-3pm  Tuesday, 9/17 10am-11:30am 1:30pm-3pm  Wednesday, 9/18 10am-11:30am 1:30pm-3pm  Thursday, 9/19 10am-11:30am 1:30pm-3pm  Friday, 9/20 10am-11:30am</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/35604/guest@my.umbc.edu/2a59fad7dad13f5e1f9a64ea32b2cd00/api/pixel</TrackingUrl>
<Group token="coeitadvising">College of Engineering &amp;amp; Information Technology Advising</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/coeitadvising</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xsmall.png?1778247417</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/original.png?1778247417</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xxlarge.png?1778247417</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xlarge.png?1778247417</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/large.png?1778247417</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/medium.png?1778247417</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/small.png?1778247417</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xsmall.png?1778247417</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xxsmall.png?1778247417</AvatarUrl>
<Sponsor>Engineering &amp; Computer Science Advising</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 13 Sep 2013 09:54:52 -0400</PostedAt>
</NewsItem>

</News>
