<?xml version="1.0"?>
<News hasArchived="true" page="8170" pageCount="10745" pageSize="10" timestamp="Mon, 10 Aug 2026 17:49:50 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=8170">
<NewsItem contentIssues="true" id="37288" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37288">
<Title>DealBook: U.S. Exchanges Set to Compete for Alibaba I.P.O.</Title>
<Body>
<![CDATA[
    <div class="html-content">The New York Stock Exchange and the Nasdaq both have said they would accept a structure in which Alibaba’s founders and top executives would nominate a majority of board members.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F10%2F21%2Fu-s-exchanges-set-to-compete-for-alibaba-i-p-o%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+U.S.+Exchanges+Set+to+Compete+for+Alibaba+I.P.O." rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F10%2F21%2Fu-s-exchanges-set-to-compete-for-alibaba-i-p-o%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+U.S.+Exchanges+Set+to+Compete+for+Alibaba+I.P.O." rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F10%2F21%2Fu-s-exchanges-set-to-compete-for-alibaba-i-p-o%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+U.S.+Exchanges+Set+to+Compete+for+Alibaba+I.P.O." rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F10%2F21%2Fu-s-exchanges-set-to-compete-for-alibaba-i-p-o%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+U.S.+Exchanges+Set+to+Compete+for+Alibaba+I.P.O." rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fdealbook.nytimes.com%2F2013%2F10%2F21%2Fu-s-exchanges-set-to-compete-for-alibaba-i-p-o%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=DealBook%3A+U.S.+Exchanges+Set+to+Compete+for+Alibaba+I.P.O." 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>The New York Stock Exchange and the Nasdaq both have said they would accept a structure in which Alibaba’s founders and top executives would nominate a majority of board members.      </Summary>
<Website>http://dealbook.nytimes.com/2013/10/21/u-s-exchanges-set-to-compete-for-alibaba-i-p-o/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37288/guest@my.umbc.edu/0a94d03a06487487bce71ccc69fef5e2/api/pixel</TrackingUrl>
<Tag>alibaba-com</Tag>
<Tag>corporate-governance</Tag>
<Tag>i-p-o-offerings</Tag>
<Tag>initial-public-offerings</Tag>
<Tag>nasdaq-stock-market</Tag>
<Tag>new</Tag>
<Tag>new-york-stock-exchange</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 21 Oct 2013 10:01:32 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="37265" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37265">
<Title>Working With IndexedDB &#8211; Part 2</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=35355&amp;c=1751448651" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=35355&amp;c=1751448651" alt="" style="max-width: 100%; height: auto;"></a><p>Welcome to the second part of my IndexedDB article. I <em>strongly</em> recommend reading the <a href="http://net.tutsplus.com/tutorials/javascript-ajax/working-with-indexeddb/" rel="nofollow external" class="bo">first article</a> in this series, as I’ll be assuming you are familiar with all the concepts covered so far. In this article, we’re going to wrap up the CRUD aspects we didn’t finish before (specifically updating and deleting content), and then demonstrate a real world application that we will use to demonstrate other concepts in the final article.</p>
    <p></p>
    <hr>
    <h2>Updating Records</h2>
    <p>Let’s start off by discussing how to update a record with IndexedDB. If you remember, adding data was pretty simple:</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);&#x000A;    </pre>
    <p>Updating a record is just as simple. Assuming that you have defined a property called <code>id</code> as your key for your object store, you can simply use the <code>put</code> method instead of <code>add</code>.</p>
    <pre>var person = {&#x000A;        name:name,&#x000A;        email:email,&#x000A;        created:new Date(),&#x000A;        id:someId&#x000A;    }&#x000A;    &#x000A;    //Perform the update&#x000A;    var request = store.put(person);&#x000A;    </pre>
    <p>Like the <code>add</code> method, you can assign methods to handle the asynchronous results of the operation.</p>
    <hr>
    <h2>Deleting Records</h2>
    <p>Deleting records is done via the delete method. (Big surprise there.) You simply pass in the unique identifer of the record you want to remove. Here is a simple example:</p>
    <pre>var t = db.transaction(["people"], "readwrite");&#x000A;    var request = t.objectStore("people").delete(thisId);&#x000A;    </pre>
    <p>And like every other aspect of IndexedDB, you can add your handles for the asynchronous results.</p>
    <p>So, as I said, not terribly exciting, which is probably good. You want your APIs simple, boring, and unsurprising. Now let’s take what we’ve learned and bring it together to create a real, if simple, application.</p>
    <hr>
    <h2>The Note App</h2>
    <p>Ok, finally we have all (well, most) of the parts we need to build a real application. Since it hasn’t been done before (<em>ahem</em>), we are going to build a simple note taking application. Let’s look at a few screen shots and then I’ll show you the code behind it. On launch, the application initializes an IndexedDB for the application and renders an empty table. Initially, all you can do with the application is add a new note. (We could make this a bit more user friendly perhaps.)</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/10/shot1.png" alt="Note App" width="600" height="383" style="max-width: 100%; height: auto;"><br> <p>Clicking the <strong>Add Note</strong> button opens a form:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/10/shot2.png" alt="Note App - Add Form" width="600" height="383" style="max-width: 100%; height: auto;"><br> <p>After entering some data in the form, you can then save the note:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/10/shot3.png" alt="Note App - Saved Note" width="600" height="383" style="max-width: 100%; height: auto;"><br> <p>As you can see, you have the option to edit and delete notes. Finally, if you click the row itself, you can read the note:</p>  <img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/10/shot4.png" alt="Note App - Note View" width="600" height="383" style="max-width: 100%; height: auto;"><br> <p>So not exactly rocket science, but a full working example of the IndexedDB specification. The notes written here will persist. You can close your browser, restart your machine, take a few years off to contemplate life and poetry, and when you open the browser again your data will still be there. Let’s take a look at the code now.</p>
    <p>First – a disclaimer. This application would have been a perfect candidate for one of the many JavaScript frameworks. I’m sure those of you who use Backbone or Angular can already imagine how you would set this up. However – I made the bold decision here to <em>not</em> use a framework. I was worried both about the people who may use a different framework and those who use none. I wanted our focus here to be on the IndexedDB aspects alone. I fully expect some people to disagree with that decision, but let’s hash it out in the comments.</p>
    <p>Our first template is the HTML file. We’ve only got one and most of it is boilerplate Bootstrap:</p>
    <pre>&lt;!DOCTYPE html&gt;&#x000A;    &lt;html lang="en"&gt;&#x000A;      &lt;head&gt;&#x000A;        &lt;meta charset="utf-8"&gt;&#x000A;        &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;&#x000A;    &#x000A;        &lt;title&gt;Note Database&lt;/title&gt;&#x000A;    &#x000A;        &lt;link href="bootstrap/css/bootstrap.css" rel="stylesheet"&gt;&#x000A;        &lt;link href="css/app.css" rel="stylesheet"&gt;&#x000A;    &#x000A;      &lt;/head&gt;&#x000A;    &#x000A;      &lt;body&gt;&#x000A;    &#x000A;        &lt;div class="navbar navbar-inverse navbar-fixed-top"&gt;&#x000A;          &lt;div class="container"&gt;&#x000A;            &lt;div class="navbar-header"&gt;&#x000A;              &lt;a class="navbar-brand" href="#"&gt;Note Database&lt;/a&gt;&#x000A;            &lt;/div&gt;&#x000A;          &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;    &#x000A;        &lt;div class="container"&gt;&#x000A;    &#x000A;            &lt;div id="noteList"&gt;&lt;/div&gt;&#x000A;            &lt;div class="pull-right"&gt;&lt;button id="addNoteButton" class="btn btn-success"&gt;Add Note&lt;/button&gt;&lt;/div&gt;&#x000A;            &lt;div id="noteDetail"&gt;&lt;/div&gt;&#x000A;    &#x000A;            &lt;div id="noteForm"&gt;&#x000A;                &lt;h2&gt;Edit Note&lt;/h2&gt;&#x000A;                &lt;form role="form" class="form-horizontal"&gt;&#x000A;                &lt;input type="hidden" id="key"&gt;&#x000A;                &lt;div class="form-group"&gt;&#x000A;                    &lt;label for="title" class="col-lg-2 control-label"&gt;Title&lt;/label&gt;&#x000A;                    &lt;div class="col-lg-10"&gt;&#x000A;                    &lt;input type="text" id="title" required class="form-control"&gt;&#x000A;                    &lt;/div&gt;&#x000A;                &lt;/div&gt;&#x000A;                &lt;div class="form-group"&gt;&#x000A;                    &lt;label for="body" class="col-lg-2 control-label"&gt;Body&lt;/label&gt;   &#x000A;                    &lt;div class="col-lg-10"&gt;&#x000A;                    &lt;textarea id="body" required class="form-control"&gt;&lt;/textarea&gt;&#x000A;                    &lt;/div&gt;&#x000A;                &lt;/div&gt;&#x000A;                &lt;div class="form-group"&gt;&#x000A;                    &lt;div class="col-lg-offset-2 col-lg-10"&gt;&#x000A;                        &lt;button id="saveNoteButton" class="btn btn-default"&gt;Save Note&lt;/button&gt;&#x000A;                    &lt;/div&gt;&#x000A;                &lt;/div&gt;&#x000A;                &lt;/form&gt;&#x000A;            &lt;/div&gt;&#x000A;    &#x000A;        &lt;/div&gt;&#x000A;    &#x000A;        &lt;script src="js/jquery-2.0.0.min.js"&gt;&lt;/script&gt;&#x000A;        &lt;script src="bootstrap/js/bootstrap.min.js"&gt;&lt;/script&gt;&#x000A;        &lt;script src="js/app.js"&gt;&lt;/script&gt;&#x000A;      &lt;/body&gt;&#x000A;    &lt;/html&gt;&#x000A;    </pre>
    <p>As mentioned above, a good size portion of this file is template code for Bootstrap. The parts we care about are the <code>noteList</code> div, the <code>noteDetail</code> div, and the <code>noteForm</code>. You can probably guess that these are the DIVs we’ll be updating as the user clicks around in the application.</p>
    <h3>Coding Our Core App File</h3>
    <p>Now let’s take a look at <code>app.js</code>, the core file that handles the logic for our application.</p>
    <pre>/* global console,$,document,window,alert */&#x000A;    var db;&#x000A;    &#x000A;    function dtFormat(input) {&#x000A;        if(!input) return "";&#x000A;        var res = (input.getMonth()+1) + "/" + input.getDate() + "/" + input.getFullYear() + " ";&#x000A;        var hour = input.getHours();&#x000A;        var ampm = "AM";&#x000A;        if(hour === 12) ampm = "PM";&#x000A;        if(hour &gt; 12){&#x000A;            hour-=12;&#x000A;            ampm = "PM";&#x000A;        }&#x000A;        var minute = input.getMinutes()+1;&#x000A;        if(minute &lt; 10) minute = "0" + minute;&#x000A;        res += hour + ":" + minute + " " + ampm;&#x000A;        return res;&#x000A;    }&#x000A;    </pre>
    <p>You can ignore the first function as it is simply a format utility for dates. Let’s skip ahead to the jQuery document ready block.</p>
    <h3>Checking for Browser Support</h3>
    <pre>$(document).ready(function() {&#x000A;    &#x000A;        if(!("indexedDB" in window)) {&#x000A;            alert("IndexedDB support required for this demo!");&#x000A;            return;&#x000A;        }&#x000A;    &#x000A;        var $noteDetail = $("#noteDetail");&#x000A;        var $noteForm = $("#noteForm");&#x000A;    &#x000A;        var openRequest = window.indexedDB.open("nettuts_notes_1",1);&#x000A;    &#x000A;        openRequest.onerror = function(e) {&#x000A;            console.log("Error opening db");&#x000A;            console.dir(e);&#x000A;        };&#x000A;    &#x000A;        openRequest.onupgradeneeded = function(e) {&#x000A;    &#x000A;            var thisDb = e.target.result;&#x000A;            var objectStore;&#x000A;    &#x000A;            //Create Note OS&#x000A;            if(!thisDb.objectStoreNames.contains("note")) {&#x000A;                console.log("I need to make the note objectstore");&#x000A;                objectStore = thisDb.createObjectStore("note", { keyPath: "id", autoIncrement:true });  &#x000A;            }&#x000A;    &#x000A;        };&#x000A;    &#x000A;        openRequest.onsuccess = function(e) {&#x000A;            db = e.target.result;&#x000A;    &#x000A;            db.onerror = function(event) {&#x000A;              // Generic error handler for all errors targeted at this database's&#x000A;              // requests!&#x000A;              alert("Database error: " + event.target.errorCode);&#x000A;              console.dir(event.target);&#x000A;            };&#x000A;    &#x000A;            displayNotes();&#x000A;    &#x000A;        };&#x000A;    </pre>
    <p>Our very first action is to check for IndexedDB support. If the user’s browser isn’t compatible, we use an alert and abort the function. It would probably be better to relocate them to a page that fully explains why they can’t use the application. (And to be clear, we could also build an application that made use of WebSQL as a backup. But again – my focus here is on simplicity.)</p>
    <p>After caching a few jQuery selectors, that we’ll use throughout the app, we then open up our IndexedDB database. The database is fairly simple. In the <code>onupgradeneeded</code> handler you can see one object store called <code>notes</code> being created. Once everything is done, the <code>onsuccess</code> handler will fire off a call to <code>displayNotes</code>.</p>
    <h3>The <code>displayNotes</code> Function</h3>
    <pre>    function displayNotes() {&#x000A;    &#x000A;            var transaction = db.transaction(["note"], "readonly");  &#x000A;            var content="&lt;table class='table table-bordered table-striped'&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Title&lt;/th&gt;&lt;th&gt;Updated&lt;/th&gt;&lt;th&gt;&amp;amp;nbsp;&lt;/td&gt;&lt;/thead&gt;&lt;tbody&gt;";&#x000A;    &#x000A;            transaction.oncomplete = function(event) {&#x000A;                $("#noteList").html(content);&#x000A;            };&#x000A;    &#x000A;            var handleResult = function(event) {  &#x000A;              var cursor = event.target.result;  &#x000A;              if (cursor) {  &#x000A;                content += "&lt;tr data-key=\""+cursor.key+"\"&gt;&lt;td class=\"notetitle\"&gt;"+cursor.value.title+"&lt;/td&gt;";&#x000A;                content += "&lt;td&gt;"+dtFormat(cursor.value.updated)+"&lt;/td&gt;";&#x000A;    &#x000A;                content += "&lt;td&gt;&lt;a class=\"btn btn-primary edit\"&gt;Edit&lt;/a&gt; &lt;a class=\"btn btn-danger delete\"&gt;Delete&lt;/a&gt;&lt;/td&gt;";&#x000A;                content +="&lt;/tr&gt;";&#x000A;                cursor.continue();  &#x000A;              }  &#x000A;              else {  &#x000A;                content += "&lt;/tbody&gt;&lt;/table&gt;";&#x000A;              }  &#x000A;            };&#x000A;    &#x000A;            var objectStore = transaction.objectStore("note");&#x000A;    &#x000A;            objectStore.openCursor().onsuccess = handleResult;&#x000A;    &#x000A;        }&#x000A;    </pre>
    <p>The <code>displayNotes</code> function does what you expect – get all the data and display it. We discussed how to get all rows of data in the previous entry, but I want to point out something slightly different about this example. Note that we have a new event handler, <code>oncomplete</code>, that we’ve tied to the transaction itself. Previously, we’ve used events just within the actions, <em>inside</em> the transaction, but IndexedDB lets us do it at the top level as well. This becomes especially useful in a case like this. We have a giant string, our HTML table, that we build up over each iteration of our data. We can use the transaction’s <code>oncomplete</code> handler to wrap up the display portion and write it out using a simple jQuery call.</p>
    <h3>The <code>Delete</code>, <code>Edit</code>, and <code>Add</code> Functions</h3>
    <pre>    $("#noteList").on("click", "a.delete", function(e) {&#x000A;            var thisId = $(this).parent().parent().data("key");&#x000A;    &#x000A;            var t = db.transaction(["note"], "readwrite");&#x000A;            var request = t.objectStore("note").delete(thisId);&#x000A;            t.oncomplete = function(event) {&#x000A;                displayNotes();&#x000A;                $noteDetail.hide();&#x000A;                $noteForm.hide();&#x000A;            };&#x000A;            return false;&#x000A;        });&#x000A;    &#x000A;        $("#noteList").on("click", "a.edit", function(e) {&#x000A;            var thisId = $(this).parent().parent().data("key");&#x000A;    &#x000A;            var request = db.transaction(["note"], "readwrite")  &#x000A;                            .objectStore("note")  &#x000A;                            .get(thisId);  &#x000A;            request.onsuccess = function(event) {  &#x000A;                var note = request.result;&#x000A;                $("#key").val(note.id);&#x000A;                $("#title").val(note.title);&#x000A;                $("#body").val(note.body);&#x000A;                $noteDetail.hide();&#x000A;                $noteForm.show();&#x000A;            };&#x000A;    &#x000A;            return false;&#x000A;        });&#x000A;    &#x000A;        $("#noteList").on("click", "td", function() {&#x000A;            var thisId = $(this).parent().data("key");&#x000A;            var transaction = db.transaction(["note"]);  &#x000A;            var objectStore = transaction.objectStore("note");  &#x000A;            var request = objectStore.get(thisId);&#x000A;    &#x000A;            request.onsuccess = function(event) {  &#x000A;                var note = request.result;&#x000A;                $noteDetail.html("&lt;h2&gt;"+note.title+"&lt;/h2&gt;&lt;p&gt;"+note.body+"&lt;/p&gt;").show();&#x000A;                $noteForm.hide();&#x000A;            };  &#x000A;        });&#x000A;    &#x000A;        $("#addNoteButton").on("click", function(e) {&#x000A;            $("#title").val("");&#x000A;            $("#body").val("");&#x000A;            $("#key").val("");&#x000A;            $noteDetail.hide();&#x000A;            $noteForm.show();       &#x000A;        });&#x000A;    </pre>
    <p>Our next two methods (<code>delete</code> and <code>edit</code>) is another example of this same principal. Since none of the IndexedDB calls here are new, we won’t bother going over them. Most of the “meat” here ends up being simple DOM manipulation to handle the particular actions. The handler for clicking the add button is exactly that, so we’ll skip over that as well.</p>
    <h3>The <code>Save</code> Function</h3>
    <pre>    $("#saveNoteButton").on("click",function() {&#x000A;    &#x000A;            var title = $("#title").val();&#x000A;            var body = $("#body").val();&#x000A;            var key = $("#key").val();&#x000A;    &#x000A;            var t = db.transaction(["note"], "readwrite");&#x000A;    &#x000A;            if(key === "") {&#x000A;                t.objectStore("note")&#x000A;                                .add({title:title,body:body,updated:new Date()});&#x000A;            } else {&#x000A;                t.objectStore("note")&#x000A;                                .put({title:title,body:body,updated:new Date(),id:Number(key)});&#x000A;            }&#x000A;    &#x000A;            t.oncomplete = function(event) {&#x000A;                $("#key").val("");&#x000A;                $("#title").val("");&#x000A;                $("#body").val("");&#x000A;                displayNotes();&#x000A;                $noteForm.hide();           &#x000A;            };&#x000A;    &#x000A;            return false;&#x000A;        });&#x000A;    &#x000A;    });&#x000A;    </pre>
    <p>The next interesting tidbit is the <code>save</code> method. It has to use a bit of logic to determine if we are adding or updating, but even that is rather simple. And that’s it! A complete, if simple, IndexedDB application. You can play around with this demo yourself by downloading the attached source code.</p>
    <hr>
    <h2>In Conclusion</h2>
    <p>That’s it for part two! The third article will take this application and begin adding additional features including search and array based properties.</p>
    </div>
]]>
</Body>
<Summary>Welcome to the second part of my IndexedDB article. I strongly recommend reading the first article in this series, as I’ll be assuming you are familiar with all the concepts covered so far. In...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/l0adVcF14qc/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37265/guest@my.umbc.edu/8750fb004f3dcb725a2112fc803e1562/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</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>Mon, 21 Oct 2013 10:00:49 -0400</PostedAt>
<EditAt>Mon, 21 Oct 2013 10:00:49 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="37255" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37255">
<Title>Change to some UMBC userpages permissions</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>As many of you know, UMBC has had a large number of phishing attacks in the past few weeks.  This has resulted in a number of compromised accounts which the attackers are using to setup fake web pages and send out large volumes of spam.  In an attempt to better protect accounts from fake web pages, DoIT will be removing permissions from user AFS web volumes for accounts not currently using their web space (<a href="http://userpages.umbc.edu/~username" rel="nofollow external" class="bo">http://userpages.umbc.edu/~username</a>).  </p>
    <p><br></p>
    <p>This will not affect anyone who currently has a web page or stop anyone from creating a web page, but will stop automated attacks and make it more difficult for attackers to setup web pages on people’s accounts.  The permission change is minor, and can be easily reversed by anyone wishing to use their web space moving forward.  </p>
    <p><br></p>
    <p>Directions for how to re-enable your web directory, as well as general information regarding using userpages, can be found at <a href="https://wiki.umbc.edu/pages/viewpage.action?pageId=31195980" rel="nofollow external" class="bo">https://wiki.umbc.edu/pages/viewpage.action?pageId=31195980</a>.  If you have questions or concerns please contact the Technology Support Center (x53838) and they will be happy to assist you.</p>
    <div><br></div>
    <div>Thanks!</div>
    <div>Tim Champ</div>
    <div>Coordinator of Unix Infrastructure</div>
    <div>UMBC - Division of Information Technology</div>
    </div>
]]>
</Body>
<Summary>As many of you know, UMBC has had a large number of phishing attacks in the past few weeks.  This has resulted in a number of compromised accounts which the attackers are using to setup fake web...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37255/guest@my.umbc.edu/7459b36bed2c7ca8e74235e7059cbbbc/api/pixel</TrackingUrl>
<Group token="doit">Division of Information Technology (DoIT)</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/doit</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xsmall.png?1727453227</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/original.JPG?1727453227</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xxlarge.png?1727453227</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xlarge.png?1727453227</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/large.png?1727453227</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/medium.png?1727453227</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/small.png?1727453227</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xsmall.png?1727453227</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/021/d27760c5de12c74b73faec8d0e631acf/xxsmall.png?1727453227</AvatarUrl>
<Sponsor>Division of Information Technology</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 21 Oct 2013 09:53:31 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="37257" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37257">
<Title>Real People Profile: Tarrin Morgan</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <em><span>We're asking some of the people you might encounter on the UMBC campus, including students, faculty, staff and alumni, to answer a few questions about themselves and their experiences. These are their responses.</span></em><br><span><strong><br></strong></span><div><a href="http://2.bp.blogspot.com/-BGdAHjtufzQ/UmUtF4iUpUI/AAAAAAAADUw/ckzW0MQUHhw/s1600/Tarrin+Morgan.PNG" rel="nofollow external" class="bo"><span><img src="http://2.bp.blogspot.com/-BGdAHjtufzQ/UmUtF4iUpUI/AAAAAAAADUw/ckzW0MQUHhw/s1600/Tarrin+Morgan.PNG" height="320" width="282" style="max-width: 100%; height: auto;"></span></a></div>
    <span><span><strong>Name: </strong></span>Tarrin Morgan</span><br><span><span><span><strong><br></strong></span></span><span><span><strong>Hometown: </strong></span></span>Neptune, New Jersey</span><br><span><br></span><strong><span>Q: How long have you been at UMBC?</span></strong><br><div>
    <div><div><div><div><div><div><div><div><div><span><br></span></div></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><div><span><span>A: </span>Since June 2013.</span></div></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><div><span><br></span></div></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><div><strong><span>Q: What is your current title (job or student organization position)?</span></strong></div></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><div><span><br></span></div></div></div></div></div></div></div></div></div>
    <div>
    <div><div><div><div><div><div><div><div><span><span>A: </span>Community Director of Walker Avenue Apartments.</span></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><span><br></span></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><span><strong>Q: In 12 words or less, what role(s) do you play on campus?</strong> </span></div></div></div></div></div></div></div></div>
    </div>
    <div><div><div><div><div><div><div><div><div><span><br></span></div></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div>
    <div><span><span>A: </span>I ensure that Walker residents have a safe and comfortable environment.</span></div>
    <div><span><span><br></span></span></div>
    </div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><div><strong><span>Q: What aspect of your UMBC role(s) do you enjoy most?</span></strong></div></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div>
    <div><span><br></span></div>
    <div><span><span>A: </span>I enjoy the chance to have candid interactions with students.  These moments are more genuine to me.</span></div>
    </div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><div><span><br></span></div></div></div></div></div></div></div></div></div>
    <div>
    <div><div><div><div><div><div><div><div>
    <strong><span>Q: What is the most important or memorable thing you learned in college/have learned at UMBC?</span></strong><br><div><strong></strong></div>
    </div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div>
    <div><span><br></span></div>
    <div><span><span>A: </span>I have learned that "paying it forward" is a crucial part of my life.</span></div>
    </div></div></div></div></div></div></div>
    </div>
    <div><div><div><div><div><div><div><div><div><span><br></span></div></div></div></div></div></div></div></div></div>
    <div>
    <div><div><div><div><div><div><div><div><strong><span>Q: Complete this sentence: "I am a big fan of __________"</span></strong></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div><div><span><br></span></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div><div>
    <div><span><span>A: </span>Reese's Peanut Butter Cups.</span></div>
    <div><span><br></span></div>
    </div></div></div></div></div></div></div>
    </div>
    <div><div><div><div><div><div><div><div><strong><span>Q: Do you have any UMBC stories, little-known facts about UMBC, favorite spots on campus, or anything else you’d like to share?</span></strong></div></div></div></div></div></div></div></div>
    <div><div><div><div><div><div>
    <div>
    <div><span><br></span></div>
    <span><span>A: </span>I'm always walking somewhere around campus so if you see me say hi, I surely will if you don't!</span>
    </div>
    <div>
    <span><br></span><div><div><em><span><a href="http://cocreateumbc.blogspot.com/" rel="nofollow external" class="bo">Co-Create UMBC</a> is a blog for and about UMBC, written by David Hoffman and Craig Berger from the Office of Student Life. Join the <a href="http://my.umbc.edu/groups/co-create" rel="nofollow external" class="bo">Co-Create UMBC group</a> on MyUMBC. Like <a href="https://www.facebook.com/cocreateumbc" rel="nofollow external" class="bo">Co-Create UMBC on Facebook</a>. And follow <a href="https://twitter.com/CoCreateUMBC" rel="nofollow external" class="bo">David</a> and <a href="https://twitter.com/CraigBerger" rel="nofollow external" class="bo">Craig</a> on Twitter.</span></em></div></div>
    </div>
    </div></div></div></div></div></div>
    </div>
    </div>
]]>
</Body>
<Summary>We're asking some of the people you might encounter on the UMBC campus, including students, faculty, staff and alumni, to answer a few questions about themselves and their experiences. These are...</Summary>
<Website>http://cocreateumbc.blogspot.com/2013/10/real-people-profile-tarrin-morgan.html</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37257/guest@my.umbc.edu/bfca1b2566e2f21493c1ad2719fcac25/api/pixel</TrackingUrl>
<Tag>real-people-profiles</Tag>
<Group token="co-create">Co-Create UMBC</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/co-create</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/xsmall.png?1499890363</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/original.jpg?1499890363</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/xxlarge.png?1499890363</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/xlarge.png?1499890363</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/large.png?1499890363</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/medium.png?1499890363</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/small.png?1499890363</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/xsmall.png?1499890363</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/002/5b8f025dafb56cb8d3088b7259aadcfb/xxsmall.png?1499890363</AvatarUrl>
<Sponsor>Co-Create UMBC</Sponsor>
<PawCount>17</PawCount>
<CommentCount>3</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 21 Oct 2013 09:35:00 -0400</PostedAt>
<EditAt>Mon, 21 Oct 2013 09:35:00 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="37253" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37253">
<Title>Bits Blog: Gaming the Future With EA&#8217;s Frank Gibeau</Title>
<Body>
<![CDATA[
    <div class="html-content">Frank Gibeau, an Electronic Arts gaming executive, talks about the challenge of repositioning gaming for mobile, and why devout gaming fans are like sailors on a ship.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fone-on-one-gaming-the-future-with-frank-gibeau%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Gaming+the+Future+With+EA%E2%80%99s+Frank+Gibeau" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fone-on-one-gaming-the-future-with-frank-gibeau%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Gaming+the+Future+With+EA%E2%80%99s+Frank+Gibeau" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fone-on-one-gaming-the-future-with-frank-gibeau%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Gaming+the+Future+With+EA%E2%80%99s+Frank+Gibeau" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fone-on-one-gaming-the-future-with-frank-gibeau%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Gaming+the+Future+With+EA%E2%80%99s+Frank+Gibeau" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fone-on-one-gaming-the-future-with-frank-gibeau%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Gaming+the+Future+With+EA%E2%80%99s+Frank+Gibeau" 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/176969098677/u/0/f/640387/c/34625/s/32b8272a/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176969098677/u/0/f/640387/c/34625/s/32b8272a/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176969098677/u/0/f/640387/c/34625/s/32b8272a/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176969098677/u/0/f/640387/c/34625/s/32b8272a/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176969098677/u/0/f/640387/c/34625/s/32b8272a/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176969098677/u/0/f/640387/c/34625/s/32b8272a/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/176969098677/u/0/f/640387/c/34625/s/32b8272a/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176969098677/u/0/f/640387/c/34625/s/32b8272a/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Frank Gibeau, an Electronic Arts gaming executive, talks about the challenge of repositioning gaming for mobile, and why devout gaming fans are like sailors on a ship.      </Summary>
<Website>http://bits.blogs.nytimes.com/2013/10/21/one-on-one-gaming-the-future-with-frank-gibeau/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37253/guest@my.umbc.edu/f53a9eaf68ac23118c868c27545022da/api/pixel</TrackingUrl>
<Tag>computer-and-video-games</Tag>
<Tag>electronic-arts-inc</Tag>
<Tag>electronic-arts-inc-erts-nasdaq</Tag>
<Tag>gaming</Tag>
<Tag>intellectual-property</Tag>
<Tag>new</Tag>
<Tag>pincus-mark</Tag>
<Tag>silicon-valley-calif</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Tag>zynga-inc</Tag>
<Tag>zynga-inc-znga-nasdaq</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 21 Oct 2013 09:05:08 -0400</PostedAt>
<EditAt>Mon, 21 Oct 2013 22:02:00 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="37250" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37250">
<Title>Bits Blog: Mark Zuckerberg Starts Spending His Billion-Dollar Charitable Fund</Title>
<Body>
<![CDATA[
    <div class="html-content">The Facebook co-founder is beginning to direct money to various causes, including a contribution to a group promoting computer science education in schools.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fmark-zuckerberg-starts-spending-his-billion-dollar-charitable-fund%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Mark+Zuckerberg+Starts+Spending+His+Billion-Dollar+Charitable+Fund" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fmark-zuckerberg-starts-spending-his-billion-dollar-charitable-fund%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Mark+Zuckerberg+Starts+Spending+His+Billion-Dollar+Charitable+Fund" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fmark-zuckerberg-starts-spending-his-billion-dollar-charitable-fund%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Mark+Zuckerberg+Starts+Spending+His+Billion-Dollar+Charitable+Fund" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fmark-zuckerberg-starts-spending-his-billion-dollar-charitable-fund%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Mark+Zuckerberg+Starts+Spending+His+Billion-Dollar+Charitable+Fund" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F10%2F21%2Fmark-zuckerberg-starts-spending-his-billion-dollar-charitable-fund%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Mark+Zuckerberg+Starts+Spending+His+Billion-Dollar+Charitable+Fund" 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/176968703022/u/0/f/640387/c/34625/s/32b75cb3/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176968703022/u/0/f/640387/c/34625/s/32b75cb3/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176968703022/u/0/f/640387/c/34625/s/32b75cb3/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176968703022/u/0/f/640387/c/34625/s/32b75cb3/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/176968703022/u/0/f/640387/c/34625/s/32b75cb3/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176968703022/u/0/f/640387/c/34625/s/32b75cb3/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/176968703022/u/0/f/640387/c/34625/s/32b75cb3/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176968703022/u/0/f/640387/c/34625/s/32b75cb3/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The Facebook co-founder is beginning to direct money to various causes, including a contribution to a group promoting computer science education in schools.      </Summary>
<Website>http://bits.blogs.nytimes.com/2013/10/21/mark-zuckerberg-starts-spending-his-billion-dollar-charitable-fund/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37250/guest@my.umbc.edu/53d8420cbfa907032ae1f2aaa0cb6031/api/pixel</TrackingUrl>
<Tag>chan-priscilla</Tag>
<Tag>code-org</Tag>
<Tag>computers-and-the-internet</Tag>
<Tag>education-k-12</Tag>
<Tag>facebook-inc</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>internet</Tag>
<Tag>new</Tag>
<Tag>philanthropy</Tag>
<Tag>silicon-valley-community-foundation</Tag>
<Tag>start-ups</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>Mon, 21 Oct 2013 07:30:48 -0400</PostedAt>
<EditAt>Mon, 21 Oct 2013 14:09:28 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="37249" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37249">
<Title>Twitter Bootstrap 3 CSS Overview</Title>
<Body>
<![CDATA[
    <div class="html-content">In this tutorial we have discussed salient points of the Twitter Bootstrap 3 CSS. This tutorial will help you to understand several key aspect of how Bootstrap 3 works.</div>
]]>
</Body>
<Summary>In this tutorial we have discussed salient points of the Twitter Bootstrap 3 CSS. This tutorial will help you to understand several key aspect of how Bootstrap 3 works.</Summary>
<Website>http://feedproxy.google.com/~r/w3resource/~3/wlv5KfBj_y4/CSS-overview.php</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37249/guest@my.umbc.edu/184d55a0f4adb67be7ec4d89a7b49ae1/api/pixel</TrackingUrl>
<Tag>backend</Tag>
<Tag>css</Tag>
<Tag>frontend</Tag>
<Tag>html</Tag>
<Tag>html5</Tag>
<Tag>javascript</Tag>
<Tag>nosql</Tag>
<Tag>sql</Tag>
<Tag>xhtml</Tag>
<Tag>xml</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 21 Oct 2013 07:16:43 -0400</PostedAt>
<EditAt>Thu, 15 May 2014 09:16:23 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="37248" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37248">
<Title>Master responsive design with Modernizr</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="thumbnail" src="http://netdna.webdesignerdepot.com/uploads/2013/10/thumbnail24.jpg" width="200" height="160" style="max-width: 100%; height: auto;">As you know, there is a lot more to building responsive websites than width. You need sensors that give you feedback to adjust sites based on other factors.</p> <p>The best way to improve our feedback from your user’s sensor, or browser, is by using a JavaScript library called <a href="http://modernizr.com/" rel="nofollow external" class="bo">Modernizr.</a> In this article I’ll explain why, when you go beyond width, Modernizr is such an invaluable tool.</p> <p>In front-end development, developers used to adjust a site to fit the constraints of the layout engine used by a particular browser. In 2003, there were only three browsers: Netscape, Internet Explorer, and Opera. Firefox, Safari, and the first mobile browser, Opera Mini, were released by 2005. Chrome wasn’t released until 2008.</p> <p>Currently there are five major browsers, each with its own mobile version. Across that array of browsers, there are also older versions that users haven’t upgraded. In the same way that creating multiple layouts for multiple screen sizes eventually becomes a zero sum game, so does building multiple front-ends for multiple browsers.</p> <p>We’re using responsive web design to accommodate new, cutting edge mobile browsers. But, while accommodating new browsers, it’s important not to do so at the expense of older browsers.</p> <p>Historically, optimization has come as a product of building a site for the most popular browsers and then tweaking to ensure the site looks the same on a set of popular browsers. Designs would have to accommodate the capabilities of all browsers.</p> <p>Progressive enhancement is one strategy to cope with browsers’ failure to support modern features. There is a temptation to build for the most up-to-date features, but, in a responsive web, the design of a site is contextual to the frame that it’s being viewed through. Responsive web design has become popular because it resolves the most obvious changing context — the size of the frame — but the context of a browser runs much deeper than it’s viewport size.</p> <p>SVG makes for a great solution for high-resolution displays, but what about its support in older browsers? It’s not supported in IE 8 or older, so you have to build in a fallback if you support that browser. You could identify the browser and serve alternative styles against that browser but then you would have to serve those same alternative styles for every browser that doesn’t support SVG.</p> <p>Wouldn’t it be easier if you could just write a style that would be used against every browser that didn’t support SVG? That way, you wouldn’t have to keep up with bug reports from the users of older versions. You could just set the fallback once and forget it.</p> <p>Traditionally, feature detection has been accomplished by detecting the browser’s user agent. This is done through JavaScript, using the navigator object. The navigator object dates back to the Netscape days and used to be a developer’s best tool in cross-browser compatibility.</p> <p>If you have Chrome and have enabled DevTools, open your browser’s web inspector by right-clicking on a page and selecting Inspect Element. Then, click on Console and, after the caret, type “navigator.userAgent” and hit Enter. This will return your current browser’s user-agent, which is a string of text used to identify the browser in use. Chrome returns the following:</p> <pre>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.35 (KHTML, like Gecko) Chrome/27.0.1443.2 Safari/537.35</pre> <p>In a lot of ways, the navigator object is the one of the best sensors we have available to us to inform our system about what our user is capable of; however, it’s not very future friendly. It bases your site’s actuators on a lot of assumptions about what the browser does and does not support. It also is unreliable because users can configure it to access sites that the browser might not be able to support.</p> <p> </p> <h1>What Modernizr does</h1> <p>Modernizr is a JavaScript library used to detect features in the browser. It’s loaded in the head of your page and runs during a page load. Adding it to your site is as simple as adding any other JavaScript library, such as jQuery, but, once added, Modernizer gives you an incredible amount of control in rendering your page and ensuring that every user is served a quality experience.</p> <p>Having been loaded, Modernizr runs a series of checks against the user’s browser to determine what features the browser supports and creates a JavaScript object that you can use to test against. Modernizr doesn’t create support for these features; it simply gives you a way to provide fallback support for modern features. For example, in the case of SVG, Modernizr enables us to provide a fallback image for browsers that lack SVG support.</p> <p>Modernizr also applies a set of classes to the HTML tag, giving you the ability to modify the page’s CSS using the corresponding CSS classes. These CSS classes allow you to use CSS systems to build actuators that will adjust your pages to allow the progressive enhancements available for a page.</p> <p>As opposed to using the User Agent, Modernizr detects features directly by running a series of JavaScript tests that return boolean (true or false) values. This dictates the classes that are set to the html tag and gives you the ability to use JavaScript to detect whether a feature is available.</p> <p> </p> <h1>Installing Modernizr</h1> <p>Installing Modernizr is as simple as linking to the JavaScript library in the head of your page, but where the installation process gets complicated is creating the version that you need. <a href="http://modernizr.com/" rel="nofollow external" class="bo">Modernizr is available for download in two versions,</a> the development version and the production version.</p> <p>The development version is a full 42 KB, uncompressed file. This version is great if you’re well versed in JavaScript and want to make some tweaks to the tests it performs. Because it’s uncompressed, it’s easy to read and augment but it’s best left to developers with a firm understanding of JavaScript.</p> <p>For those of you who might not be completely adept at JavaScript, or would like to quickly build a customized version of Modernizr, this is where the production version of the library comes into play. The production version building tool on the site gives you the ability to create a version with only the tests you require.</p> <p>This comes in handy when you know you only need a certain set of tests. For instance, your site might not take advantage of CSS box-shadows, but it might need to support CSS gradients. Using the build tool, you can include the tests you need and exclude the ones you don’t need, keeping the source code trim and your user’s total load time down.</p> <p>For our example, I’ll be working of the development version. I find that when I’m building a site, it’s best to work with the full version and then once you know what features you’ll be using in your site, trim the version down.</p> <p> </p> <h1>Using Modernizr for cross-browser CSS</h1> <p>Let’s do some simple feature detection with Modernizr. We’ll start with a raw sample site.</p> <pre>&lt;!doctype html&gt;<br>&lt;html lang="en"&gt;<br>&lt;head&gt;<br>&lt;meta charset="utf-8"&gt;<br>&lt;script type="text/javascript" src="js/modernizr.min.js"&gt;&lt;/script&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;</pre> <p>Let’s use this small test to detect whether or not our browser is capable of supporting SVG. For the sake of simplicity we’ll just add two span tags to the page to detect support.</p> <pre>&lt;!doctype html&gt;<br>&lt;html lang="en"&gt;<br>&lt;head&gt;<br>&lt;meta charset="utf-8"&gt;<br>&lt;script type="text/javascript" src="js/modernizr.min.js"&gt;&lt;/script&gt;<br>&lt;style type="text/css"&gt;<br>.yes{color:green;}<br>.no{color:red;}<br>span{display:none;}<br>.svg .yes{display:inline;}<br>.no-svg .no{display:inline;}<br>&lt;/style&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;div&gt;<br>&lt;span class='yes'&gt;Huzzah! You have SVG support.&lt;/span&gt;<br>&lt;span class='no'&gt;BOO! You don't have SVG support.&lt;/span&gt;<br>&lt;/div&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;</pre> <p>If you test this in a browser that supports SVG, you’ll see the message “Huzzah! You have SVG support.” whereas if you have a browser that fails to support SVG, you’ll find the “BOO! You don’t have SVG support.” message.</p> <p>This example is pretty rudimentary, but it displays the core idea of using Modernizr to fix cross browser issues. If we were doing this same fix using the old user agent method, we would have to have a style sheet for each browser that doesn’t support SVG and change our CSS for each one. (For anyone interested, the only major browsers lacking SVG support are Internet Explorer 7 and under.)</p> <p>By adding the svg/no-svg class to the html on the page, your CSS now has a selector that can be used to override existing CSS rules. Because it’s on the parent-most tag, it can used to override other classes on the page.</p> <p>So, in this case, both span tags are given display:none;. If there is no SVG support, the display:inline declaration on the span tag with the .no class overrides the display:hidden thanks to the no-svg rule on the html tag.</p> <p>Let’s try a more useful example of the same idea. We might want to have an SVG background image on the page, which falls back to a PNG if the browser doesn’t support SVG. By default we’ll use the PNG image. This way, the SVG isn’t served unless it’s needed and becomes a progressive enhancement.</p> <pre>&lt;!doctype html&gt;<br>&lt;html lang="en"&gt;<br>&lt;head&gt;<br>&lt;meta charset="utf-8"&gt;<br>&lt;script type="text/javascript" src="js/modernizr.min.js"&gt;&lt;/script&gt;<br>&lt;style type="text/css"&gt;<br>.skull{<br>width:300px;<br>height:300px;<br>background-image:url(images/skull.png);<br>background-size:100% auto;<br>background-repeat: no-repeat;<br>}<br>.svg .skull{background-image:url(images/skull.svg);}<br>&lt;/style&gt;<br>&lt;/head&gt;<br>&lt;body&gt;<br>&lt;div class='skull'&gt;&lt;/div&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;</pre> <p>Now we have an awesome SVG skull that will look awesome and crisp for users with high-resolution displays, and still look good for users with older browsers.</p> <p> </p> <h1>Summary</h1> <p>There is a great wealth of information to be learned about Modernizr. We showed you how it does the work of cross-browser capability without having to remember or maintain a running list of which browsers support SVG.</p> <p>It functions exceptionally as a system with which to serve your user actuators to create speedy and highly functional websites.</p> <p> </p> <p><em><strong>Do you use Modernizr in your projects? What other methods have you used for serving responsive content? Let us know in the comments.</strong></em></p> <p><em>Featured image/thumbnail, <a href="http://www.shutterstock.com/pic-72832432/stock-photo-acceleration-of-the-motion-on-the-night-road.html" rel="nofollow external" class="bo">divergent lines image</a> via Shutterstock.</em></p> <p><br><br> </p>
    <table width="100%"> <tbody>
    <tr> <td> <a href="http://www.mightydeals.com/deal/macdojo.html?ref=inwidget" rel="nofollow external" class="bo"><strong>MacDojo’s Mac Shortcuts Pro Course – only $27!</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="Master responsive design with Modernizr" style="max-width: 100%; height: auto;"><br> </a> </td> </tr> </tbody>
    </table> <p><br> </p> <a href="http://www.webdesignerdepot.com/2013/10/master-responsive-design-with-modernizr/" rel="nofollow external" class="bo">Source</a> <br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fmaster-responsive-design-with-modernizr%2F&amp;t=Master+responsive+design+with+Modernizr" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fmaster-responsive-design-with-modernizr%2F&amp;t=Master+responsive+design+with+Modernizr" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fmaster-responsive-design-with-modernizr%2F&amp;t=Master+responsive+design+with+Modernizr" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fmaster-responsive-design-with-modernizr%2F&amp;t=Master+responsive+design+with+Modernizr" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.webdesignerdepot.com%2F2013%2F10%2Fmaster-responsive-design-with-modernizr%2F&amp;t=Master+responsive+design+with+Modernizr" 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/176969087174/u/49/f/661066/c/35285/s/32b62fc2/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/176969087174/u/49/f/661066/c/35285/s/32b62fc2/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>As you know, there is a lot more to building responsive websites than width. You need sensors that give you feedback to adjust sites based on other factors.   The best way to improve our feedback...</Summary>
<Website>http://rss.feedsportal.com/c/35285/f/661066/s/32b62fc2/sc/4/l/0L0Swebdesignerdepot0N0C20A130C10A0Cmaster0Eresponsive0Edesign0Ewith0Emodernizr0C/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37248/guest@my.umbc.edu/c0d25690b1b58fcd77ddea972c357ede/api/pixel</TrackingUrl>
<Tag>art</Tag>
<Tag>browser-detection</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>responsive-content</Tag>
<Tag>responsive-design</Tag>
<Tag>responsive-web-design</Tag>
<Tag>sql</Tag>
<Tag>using-modernizr</Tag>
<Tag>using-svg</Tag>
<Tag>web-development</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 21 Oct 2013 06:15:37 -0400</PostedAt>
<EditAt>Mon, 21 Oct 2013 06:15:37 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="37261" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37261">
<Title>Coordinates: The Umbilical Link of Man to Robot</Title>
<Body>
<![CDATA[
    <div class="html-content">A December contest held by a Pentagon agency will show how far technology has come, and how far it has to go to catch up to sci-fi movie depictions.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F22%2Fscience%2Frobot-games-a-challenge-for-the-machines-and-the-controllers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Coordinates%3A+The+Umbilical+Link+of+Man+to+Robot" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F22%2Fscience%2Frobot-games-a-challenge-for-the-machines-and-the-controllers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Coordinates%3A+The+Umbilical+Link+of+Man+to+Robot" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F22%2Fscience%2Frobot-games-a-challenge-for-the-machines-and-the-controllers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Coordinates%3A+The+Umbilical+Link+of+Man+to+Robot" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F22%2Fscience%2Frobot-games-a-challenge-for-the-machines-and-the-controllers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Coordinates%3A+The+Umbilical+Link+of+Man+to+Robot" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F10%2F22%2Fscience%2Frobot-games-a-challenge-for-the-machines-and-the-controllers.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Coordinates%3A+The+Umbilical+Link+of+Man+to+Robot" 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>A December contest held by a Pentagon agency will show how far technology has come, and how far it has to go to catch up to sci-fi movie depictions.      </Summary>
<Website>http://www.nytimes.com/2013/10/22/science/robot-games-a-challenge-for-the-machines-and-the-controllers.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37261/guest@my.umbc.edu/c776645d94e1fbf027b8098ca0a25b08/api/pixel</TrackingUrl>
<Tag>atlas-robot</Tag>
<Tag>defense-advanced-research-projects-agency</Tag>
<Tag>honda-motor-co-ltd-hmc-nyse</Tag>
<Tag>new</Tag>
<Tag>research</Tag>
<Tag>robots-and-robotics</Tag>
<Tag>technology</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Mon, 21 Oct 2013 06:00:11 -0400</PostedAt>
<EditAt>Mon, 21 Oct 2013 06:00:11 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="37247" important="false" status="posted" url="https://my3.my.umbc.edu/posts/37247">
<Title>Challenging CSS Best Practices</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><em><strong>Editor’s Note</strong>: This article features techniques that are used in practice by Yahoo! and question coding techniques that we are used to today. You might be interested in reading <a href="http://coding.smashingmagazine.com/2012/04/20/decoupling-html-from-css/" rel="nofollow external" class="bo">Decoupling HTML From CSS</a> by Jonathan Snook, <a href="http://nefariousdesigns.co.uk/on-html-element-identifiers.html" rel="nofollow external" class="bo">On HTML Elements Identifiers</a> by Tim Huegdon and <a href="http://coding.smashingmagazine.com/2013/08/02/other-interface-atomic-design-sass/" rel="nofollow external" class="bo">Atomic Design With Sass</a> by Robin Rendle as well. Please keep in mind: some of the mentioned techniques are not considered to be best practices.</em></p>
    <p>When it comes to CSS, I believe that the sacred principle of “<a href="http://en.wikipedia.org/wiki/Separation_of_concerns" rel="nofollow external" class="bo">separation of concerns</a>” (SoC) has lead us to accept <strong>bloat, obsolescence, redundancy, poor caching</strong> and more. Now, I’m convinced that the only way to improve how we author style sheets is by moving away from this principle.</p>
    <p>For those of you who have never heard of the SoC principle in the context of Web design, it relates to something commonly known as the “separation of the three layers”:</p>
    <ul>
    <li>structure,</li>
    <li>presentation,</li>
    <li>behavior.</li>
    </ul>
    <p>It is about dividing these concerns into separate resources: an HTML document, one or more cascading style sheets and one or more JavaScript files.</p>
    <p>But when it comes to the presentational layer, “best practice” goes way beyond the separation of resources. CSS authors thrive on styling documents entirely through style sheets, an approach that has been sanctified by <a href="http://www.mezzoblue.com/" rel="nofollow external" class="bo">Dave Shea</a>’s excellent project <a href="http://www.csszengarden.com/" rel="nofollow external" class="bo">CSS Zen Garden</a>. CSS Zen Garden is what most — if not all — developers consider to be the <strong>standard</strong> for how to author style sheets.</p>
    <h3>The Standard</h3>
    <p>To help me illustrate issues related to today’s best practices, I’ll use a very common pattern: the <a href="http://www.stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code/" rel="nofollow external" class="bo">media object</a>. Its combination of markup and CSS will be our starting point.</p>
    <h4>Markup</h4>
    <p>In our markup, a wrapper (<code>div.media</code>) contains an image wrapped in a link (<code>a.img</code>), followed by a div (<code>div.bd</code>):</p>
    <pre><code>&#x000A;    &lt;div class="media"&gt;&#x000A;      &lt;a href="<a href="http://twitter.com/thierrykoblentz">http://twitter.com/thierrykoblentz</a>" class="img"&gt;&#x000A;            &lt;img src="thierry.jpg" alt="me" width="40" /&gt;&#x000A;      &lt;/a&gt;&#x000A;      &lt;div class="bd"&gt;&#x000A;        @thierrykoblentz 14 minutes ago&#x000A;      &lt;/div&gt;&#x000A;    &lt;/div&gt;&#x000A;    </code></pre>
    <h4>CSS</h4>
    <p>Let’s give a 10-pixel margin to the wrapper and style both the wrapper and <code>div.bd</code> as <a href="http://www.yuiblog.com/blog/2010/05/19/css-101-block-formatting-contexts/" rel="nofollow external" class="bo">block-formatting contexts</a> (BFC). In other words, <strong>the wrapper will contain the floated link</strong>, and the content of <code>div.bd</code> will not wrap around said link. A gutter between the image and text is created with a 10-pixel margin (on the float):</p>
    <pre><code>&#x000A;    .media {&#x000A;        margin: 10px;&#x000A;    }&#x000A;    .media,&#x000A;    .bd {&#x000A;        overflow: hidden;&#x000A;        _overflow: visible;&#x000A;        zoom: 1;&#x000A;    }&#x000A;    .media .img {&#x000A;        float: left;&#x000A;        margin-right: 10px;&#x000A;    }&#x000A;    .media .img img {&#x000A;        display: block;&#x000A;    }&#x000A;    </code></pre>
    <h4>Result</h4>
    <p>Here is the presentation of the wrapper, with the image in the link and the blob of text:</p>
    <div>
    <div>
          <a href="http://twitter.com/thierrykoblentz" rel="nofollow external" class="bo"><br>
            <img width="40" src="http://0.gravatar.com/avatar/a1c5c36dfde41ff8c4a92c94180b2dbf?s=78&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D78&amp;r=G" alt="me" style="max-width: 100%; height: auto;"><br>
          </a>
    <div>
            @thierrykoblentz 14 minutes ago
          </div>
    </div>
    </div>
    <h4>A New Requirement Comes In</h4>
    <p>Suppose we now need to be able to display the image on the other side of the text as well.</p>
    <h4>Markup</h4>
    <p>Thanks to the magic of BFC, all we need to do is change the styles of the link. For this, we use a new class, <code>imgExt</code>.</p>
    <pre><code>&#x000A;    &lt;div class="media"&gt;&#x000A;        &lt;a href="<a href="http://twitter.com/thierrykoblentz">http://twitter.com/thierrykoblentz</a>" class="imgExt"&gt;&#x000A;            &lt;img src="thierry.jpg" alt="me" width="40" /&gt;&#x000A;      &lt;/a&gt;&#x000A;      &lt;div class="bd"&gt;&#x000A;        @thierrykoblentz 14 minutes ago&#x000A;      &lt;/div&gt;&#x000A;    &lt;/div&gt;&#x000A;    </code></pre>
    <h4>CSS</h4>
    <p>We’ll add an extra rule to float the link to the right and change its margin:</p>
    <pre><code>&#x000A;    .media {&#x000A;        margin: 10px;&#x000A;    }&#x000A;    .media,&#x000A;    .bd {&#x000A;        overflow: hidden;&#x000A;        _overflow: visible;&#x000A;        zoom: 1;&#x000A;    }&#x000A;    .media .img {&#x000A;        float: left;&#x000A;        margin-right: 10px;&#x000A;    }&#x000A;    .media .img img {&#x000A;        display: block;&#x000A;    }&#x000A;    .media .imgExt {&#x000A;        float: right;&#x000A;        margin-left: 10px;&#x000A;    }&#x000A;    </code></pre>
    <h4>Result</h4>
    <p>The image is now displayed on the opposite side:</p>
    <div>
    <div>
            <a href="http://twitter.com/thierrykoblentz" rel="nofollow external" class="bo"><br>
                <img width="40" src="http://0.gravatar.com/avatar/a1c5c36dfde41ff8c4a92c94180b2dbf?s=78&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D78&amp;r=G" alt="me" style="max-width: 100%; height: auto;"><br>
            </a>
    <div>@thierrykoblentz 14 minutes ago</div>
    </div>
    </div>
    <h4>One More Requirement Comes In</h4>
    <p>Suppose we now need to make the text smaller when this module is inside the right rail of the page. To do that, we create a new rule, using <code>#rightRail</code> as a contextual selector:</p>
    <h4>Markup</h4>
    <p>Our module is now inside a <code>div#rightRail</code> container:</p>
    <pre><code>&#x000A;    &lt;div id="rightRail"&gt;&#x000A;        &lt;div class="media"&gt;&#x000A;            &lt;a href="<a href="http://twitter.com/thierrykoblentz">http://twitter.com/thierrykoblentz</a>" class="img"&gt;&#x000A;                &lt;img src="thierry.jpg" alt="me" width="40" /&gt;&#x000A;            &lt;/a&gt;&#x000A;            &lt;div class="bd"&gt;&#x000A;                @thierrykoblentz 14 minutes ago&#x000A;            &lt;/div&gt;&#x000A;        &lt;/div&gt;&#x000A;    &lt;/div&gt;&#x000A;    </code></pre>
    <h4>CSS</h4>
    <p>Again, we create an extra rule, this time using a descendant selector, <code>#rightRail .bd</code>.</p>
    <pre><code>&#x000A;    .media {&#x000A;        margin: 10px;&#x000A;    }&#x000A;    .media,&#x000A;    .bd {&#x000A;        overflow: hidden;&#x000A;        _overflow: visible;&#x000A;        zoom: 1;&#x000A;    }&#x000A;    .media .img {&#x000A;        float: left;&#x000A;        margin-right: 10px;&#x000A;    }&#x000A;    .media .img img {&#x000A;        display: block;&#x000A;    }&#x000A;    .media .imgExt {&#x000A;        float: right;&#x000A;        margin-left: 10px;&#x000A;    }&#x000A;    #rightRail .bd {&#x000A;        font-size: smaller;&#x000A;    }&#x000A;    </code></pre>
    <h4>Result</h4>
    <p>Here is our original module, showing inside <code>div#rightRail</code>:</p>
    <div>
    <div>
    <div>
              <a href="http://twitter.com/thierrykoblentz" rel="nofollow external" class="bo"><br>
                <img width="40" src="http://0.gravatar.com/avatar/a1c5c36dfde41ff8c4a92c94180b2dbf?s=78&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D78&amp;r=G" alt="me" style="max-width: 100%; height: auto;"><br>
              </a>
    <div>
                @thierrykoblentz 14 minutes ago
              </div>
    </div>
    </div>
    </div>
    <h3>What’s Wrong With This Model?</h3>
    <ul>
    <li>
    <strong>Simple changes to the style of our module have resulted in new rules in the style sheet.</strong><br>
    There must be a way to style things without <em>always</em> having to write more CSS rules.</li>
    <li>
    <strong>We are grouping selectors for common styles (<code>.media,.bd {}</code>).</strong><br>
    Grouping selectors, rather than using a class associated with these styles, will lead to more CSS.</li>
    <li>
    <strong>Of our six rules, four are context-based.</strong><br>
    Rules that are context-specific are hard to maintain. Styles related to such rules are not very reusable.</li>
    <li>
    <strong>RTL and LTR interfaces become complicated.</strong><br>
    To change direction, we’d need to overwrite some of our styles (i.e. write <em>more</em> rules). For example:</li>
    </ul>
    <pre><code>&#x000A;    .rtl .media .img {&#x000A;        margin-right: auto; /* reset */&#x000A;        float: right;&#x000A;        margin-left: 10px;&#x000A;    }&#x000A;    .rtl .media .imgExt {&#x000A;        margin-left: auto; /* reset */&#x000A;        float: left;&#x000A;        margin-right: 10px;&#x000A;    }&#x000A;    </code></pre>
    
    <h3>Meet Atomic Cascading Style Sheet</h3>
    <blockquote>
    <dl>
    <dt><a href="https://www.google.com/search?q=define%3A+atomic" rel="nofollow external" class="bo">a·tom·ic</a></dt>
    <dd>/ə’tämik/</dd>
    <dd><em>of or forming a single irreducible unit or component in a larger system.</em></dd>
    </dl>
    </blockquote>
    <p>As we all know, the smaller the unit, the more reusable it is.</p>
    <blockquote>
    <p>“Treat code like Lego. Break code into the smallest little blocks possible.” — <a href="https://twitter.com/csswizardry" rel="nofollow external" class="bo">@csswizardry</a> (via <a href="https://twitter.com/stubbornella" rel="nofollow external" class="bo">@stubbornella</a>) <a href="https://twitter.com/search?q=%23btconf&amp;src=hash" rel="nofollow external" class="bo">#btconf</a></p>
    <p>— Smashing Magazine (@smashingmag) <a href="https://twitter.com/smashingmag/statuses/339024926197559296" rel="nofollow external" class="bo">May 27, 2013</a></p>
    </blockquote>
    <p></p>
    <p>To break down styles into irreducible units, we can <strong>map classes to a single style</strong>, rather than many. This will result in a more granular palette of rules, which in turn improves reusability.</p>
    <p>Let’s revisit the media object using this new approach.</p>
    <h4>Markup</h4>
    <p>We are using five classes, none of which are related to content:</p>
    <pre><code>&#x000A;    &lt;div class="Bfc M-10"&gt;&#x000A;        &lt;a href="<a href="http://twitter.com/thierrykoblentz">http://twitter.com/thierrykoblentz</a>" class="Fl-start Mend-10"&gt;&#x000A;            &lt;img src="thierry.jpg" alt="me" width="40" /&gt;&#x000A;        &lt;/a&gt;&#x000A;        &lt;div class="Bfc Fz-s"&gt;&#x000A;            @thierrykoblentz 14 minutes ago&#x000A;        &lt;/div&gt;&#x000A;    &lt;/div&gt;&#x000A;    </code></pre>
    <h4>CSS</h4>
    <p>Each class is associated with one particular style. For the most part, this means we have one declaration per rule.</p>
    <pre><code>&#x000A;    .Bfc {&#x000A;        overflow: hidden;&#x000A;        zoom: 1;&#x000A;    }&#x000A;    .M-10 {&#x000A;        margin: 10px;&#x000A;    }&#x000A;    .Fl-start {&#x000A;        float: left;&#x000A;    }&#x000A;    .Mend-10 {&#x000A;        margin-right: 10px;&#x000A;    }&#x000A;    .Fz-s {&#x000A;        font-size: smaller;&#x000A;    }&#x000A;    </code></pre>
    <h4>Result</h4>
    <div>
    <div>
          <a href="http://twitter.com/thierrykoblentz" rel="nofollow external" class="bo"><br>
            <img src="http://0.gravatar.com/avatar/a1c5c36dfde41ff8c4a92c94180b2dbf?s=78&amp;d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D78&amp;r=G" alt="me" width="40" style="max-width: 100%; height: auto;"><br>
          </a>
    <div>
            @thierrykoblentz 14 minutes ago
          </div>
    </div>
    </div>
    <h4>What Is This about?</h4>
    <p>Let’s ignore the class names for now and focus on what this does (or does not):</p>
    <ul>
    <li>
    <strong>No contextual styling</strong><br>
    We do not use contextual or descendant selectors, which means that our style sheet has no dead weight.</li>
    <li>
    <strong>Directions (left and right) are “abstracted.”</strong><br>
    Rather than overwriting styles, we serve a RTL style sheet that contains rules such as these:</li>
    </ul>
    <pre><code>&#x000A;    .Fl-start {&#x000A;        float: right;&#x000A;    }&#x000A;    .Mend-10 {&#x000A;        margin-left: 10px;&#x000A;    }&#x000A;    </code></pre>
    <p>Same classes, same properties, different values.</p>
    <p>But the most important thing to notice here is that <strong>we are styling via markup</strong>. We have changed the context in which we style our modules. We are now editing HTML templates instead of style sheets.</p>
    <p>I believe that this approach is a game-changer because it <strong>narrows the scope dramatically</strong>. We are styling not in the global scope (the style sheet), but at the module and block level. We can change the style of a module without worrying about breaking something else on the page. And we can do this without adding any rule to the style sheet, let alone creating a new class and rule:</p>
    <pre><code>&#x000A;    .someBasicStyleForThisElementHere {...}&#x000A;    </code></pre>
    <p>We get no redundancy. Selectors are not duplicated, and styles belong to a single rule instead of being part of many. For example, the style sheets that this page links to contain 72 <code>float</code> declarations.</p>
    <p>Also, abandoning a style — for example, deciding to always keep the image on the left side of the module — does not make any of our rules obsolete.</p>
    <h4>Sound Good?</h4>
    <p>Not sold yet? I hear you saying, “This goes against every single rule in the book. This is no better than inline styling. And your class names are not only cryptic, but unsemantic, too!”</p>
    <p>Fair enough. Let’s address these concerns.</p>
    <h4>Regarding Unsemantic Class Names</h4>
    <p>If you check the W3C’s “<a href="http://www.w3.org/QA/Tips/goodclassnames" rel="nofollow external" class="bo">Tips for Webmasters</a>,” where it says “Good names don’t change,” you’ll see that the argument is about <em>maintenance</em>, not semantics per se. All it says is that changing styles is easier in a CSS file than in multiple HTML files. <code>.border4px</code> would be a bad name only if changing the style of an element required us to change the declaration that that class name is associated with. In other words:</p>
    <pre><code>&#x000A;    .border4px {border-width:2px;}&#x000A;    </code></pre>
    <h4>Regarding Cryptic Class Names</h4>
    <p>For the most part, these class names follow the syntax of Zen Coding — see the “<a title="Zen coding cheat sheet (PDF)" href="https://zen-coding.googlecode.com/files/ZenCodingCheatSheet.pdf" rel="nofollow external" class="bo">Zen Coding Cheat Sheet</a>” (PDF) — now renamed <a href="http://docs.emmet.io/cheat-sheet/" rel="nofollow external" class="bo">Emmet</a>. In other words, they are simple abbreviations.</p>
    <p>There are exceptions for styles associated with direction (left and right) and styles that involve a combination of declarations. For example, <code>Bfc</code> stands for “block-formatting context.”</p>
    <h4>Regarding Mimicking Inline Styles</h4>
    <p>Hopefully, the diagram below clears things up:</p>
    <p><a href="http://media.smashingmagazine.com/wp-content/uploads/2013/10/venn-diagram_mini.png" rel="nofollow external" class="bo"><img src="http://media.smashingmagazine.com/wp-content/uploads/2013/10/venn-diagram_500_mini.png" alt="Venn diagram that shows all possible logical relations between inline styles and styling via classes and markup." width="500" height="327" style="max-width: 100%; height: auto;"></a><br>
    <em>Inline styles versus Atomic CSS.</em></p>
    <ul>
    <li>
    <strong>Specificity</strong><br>
    The technique is not as specific as <code>@style</code>. It <strong>lowers style weight</strong> because rules rely on a single class, as opposed to rules like <code>.parent .bd {}</code>, which clocks in at 0.0.2.0 (see “<a href="http://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/" rel="nofollow external" class="bo">CSS Specificity: Things You Should Know</a>”).</li>
    <li>
    <strong>Verbosity</strong><br>
    Most classes are abbreviations of declarations (for example, <code>M-10</code> versus <code>margin: 10px</code>). Some classes, such as <code>Bfc</code>, refer to more than one style (see “Mapping” in the diagram above). Other classes use “start” and “end” keywords, rather than left and right values (see “Abstraction” in the diagram above).</li>
    </ul>
    <p>Here are the advantages of <code>@style</code>:</p>
    <ul>
    <li>
    <strong>Scope</strong><br>
    Styles are “sandboxed” to the nodes they are attached to.</li>
    <li>
    <strong>Portability</strong><br>
    Because the styles are “encapsulated,” you can move modules around without losing their styles. Of course, we still need the style sheet; however, because we are making context irrelevant, modules can live anywhere on a page, website or even network.</li>
    </ul>
    <h3>The Path To Bloat</h3>
    <p>Because the styles of our module are tied only to presentational class names, <strong>they can be anything we want them to be</strong>. For example, if we need to create a simple two-column layout, all we need to do is replace the link with a <code>div</code> in our template. That would look like this:</p>
    <pre><code>&#x000A;    &lt;div class="Bfc M-10"&gt;&#x000A;        &lt;div class="Fl-start Mend-10 W-25"&gt;&#x000A;            column 1&#x000A;        &lt;/div&gt;&#x000A;        &lt;div class="Bfc"&gt;&#x000A;            column 2&#x000A;        &lt;/div&gt;&#x000A;    &lt;/div&gt;&#x000A;    </code></pre>
    <p>And we would need only one extra rule in the style sheet:</p>
    <pre><code>&#x000A;    .Bfc {&#x000A;        overflow: hidden;&#x000A;        zoom: 1;&#x000A;    }&#x000A;    .M-10 {&#x000A;        margin: 10px;&#x000A;    }&#x000A;    .Fl-start {&#x000A;        float: left;&#x000A;    }&#x000A;    .Mend-10 {&#x000A;        margin-right: 10px;&#x000A;    }&#x000A;    .Fz-s {&#x000A;        font-size: smaller;&#x000A;    }&#x000A;    .W-50 {&#x000A;        width: 50%;&#x000A;    }&#x000A;    </code></pre>
    <p>Compare this to the traditional way:</p>
    <pre><code>&#x000A;    &lt;div class="wrapper"&gt;&#x000A;        &lt;div class="sidebar"&gt;&#x000A;            column 1&#x000A;        &lt;/div&gt;&#x000A;        &lt;div class="content"&gt;&#x000A;            sidebar&#x000A;        &lt;/div&gt;&#x000A;    &lt;/div&gt;&#x000A;    </code></pre>
    <p>This would require us to create three new classes, to add an extra rule and to group selectors.</p>
    <pre><code>&#x000A;    .wrapper,&#x000A;    .content,&#x000A;    .media,&#x000A;    .bd {&#x000A;        overflow: hidden;&#x000A;        _overflow: visible;&#x000A;        zoom: 1;&#x000A;    }&#x000A;    .sidebar {&#x000A;        width: 50%;&#x000A;    }&#x000A;    .sidebar,&#x000A;    .media .img {&#x000A;        float: left;&#x000A;        margin-right: 10px;&#x000A;    }&#x000A;    .media .img img {&#x000A;        display: block;&#x000A;    }&#x000A;    </code></pre>
    <p>I think the code above pretty well demonstrates the price we pay for following the SoC principle. In my experience, all it does is grow style sheets.</p>
    <p>Moreover, the larger the files, the more complex the rules and selectors become. And then no one would dare edit the existing rules:</p>
    <ul>
    <li>We leave alone rules that we suspect to be obsolete for fear of breaking something.</li>
    <li>We create new rules, rather than modify existing ones, because we are not sure the latter is 100% safe.</li>
    </ul>
    <p>In other words, we make things worse because <strong>we can get away with bloat</strong>.</p>
    <p>Nowadays, people are accustomed to very large style sheets, and many authors think they come with the territory. Rather than fighting bloat, they use tools (i.e. preprocessors) to help them deal with it. <a href="http://chriseppstein.github.io/blog/2013/04/22/joining-linkedin/" rel="nofollow external" class="bo">Chris Eppstein tells us</a>:</p>
    <blockquote>
    <p>“LinkedIn has over 1,100 Sass files (230k lines of SCSS) and over 90 web developers writing Sass every day.”</p>
    </blockquote>
    <h4>CSS Bloat vs. HTML Bloat</h4>
    <p>Let’s face it: the data has to live somewhere. Consider these two blocks:</p>
    <pre><code>&#x000A;    &lt;div class="sidebar"&gt;&#x000A;    </code></pre>
    <pre><code>&#x000A;    &lt;div class="Fl-start Mend-10 W-25"&gt;&#x000A;    </code></pre>
    <p>In many cases, the “semantic” class name makes up more bytes than the presentational class name (<code>.wrapper</code> versus <code>.Bfc</code>). But I do not think this is a real concern compared to what most apps onboard these days via <code>data-</code> attributes.</p>
    <p>This is where <a title="A compression utility" href="http://www.gzip.org/" rel="nofollow external" class="bo">gzip</a> comes into play, because the high redundancy in class names across a document would achieve better compression. And the same is true of style sheets, in which we have many redundant sequences:</p>
    <pre><code>&#x000A;    .M-1 {margin: 1px;}&#x000A;    .M-2 {margin: 2px;}&#x000A;    .M-4 {margin: 4px;}&#x000A;    .M-6 {margin: 6px;}&#x000A;    .M-8 {margin: 8px;}&#x000A;    etc.&#x000A;    </code></pre>
    <h3>Caching</h3>
    <p>Presentational rules <strong>do not change</strong>. Style sheets made from such rules mature into tool sets in which authors can find everything they need. By their nature, they stop growing and become <strong>immutable</strong>, and immutable is <strong>cache-friendly</strong>.</p>
    <h3>No More .button Class?</h3>
    <p>The technique I’m discussing here is not about banning “semantic” class names or rules that group many declarations. The idea is to reevaluate the benefits of the common approach, rather than adopting it as the <em>de facto</em> technique for styling Web pages. In other words, we are restricting the “component” approach to the few cases in which it makes the most sense.</p>
    <p>For example, you may find the following rules in our style sheets, rules that set styles for which we do not create simple classes or rules that ensure cross-browser support.</p>
    <pre><code>&#x000A;    .button {&#x000A;        display: inline-block;&#x000A;        *display: inline;&#x000A;        zoom: 1;&#x000A;        font-size: bold 16px/2em Arial;&#x000A;       	height: 2em;&#x000A;       	box-shadow: inset 1px 1px 2px 0px #fff;&#x000A;       	background: -webkit-gradient(linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf));&#x000A;       	background: linear-gradient(center top, #ededed 5%, #dfdfdf 100%);&#x000A;       	filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf');&#x000A;       	background-color: #ededed;&#x000A;        color: #777;&#x000A;        text-decoration: none;&#x000A;       	text-align: center;&#x000A;       	text-shadow: 1px 1px 2px #ffffff;&#x000A;       	border-radius: 4px;&#x000A;       	border: 2px solid #dcdcdc;&#x000A;    }&#x000A;    .modal {&#x000A;        position: fixed;&#x000A;        top: 50%;&#x000A;        left: 50%;&#x000A;        -webkit-transform: translate(-50%,-50%);&#x000A;        -ms-transform: translate(-50%,-50%);&#x000A;        transform: translate(-50%,-50%);&#x000A;        *width: 600px;&#x000A;        *margin-left: -300px;&#x000A;        *top: 50px;&#x000A;    }&#x000A;    @media \0screen {&#x000A;        .modal {&#x000A;            width: 600px;&#x000A;            margin-left: -300px;&#x000A;            top: 50px;&#x000A;        }&#x000A;    }&#x000A;    </code></pre>
    <p>On the other hand, you would not see rules like the ones below (i.e. styles bound to particular modules), because we prefer to apply these same styles using multiple classes: one for font size, one for color, one for floats, etc.</p>
    <pre><code>&#x000A;    .news-module {&#x000A;        font-size: 14px;&#x000A;        color: #555;&#x000A;        float: left;&#x000A;        width: 50%;&#x000A;        padding: 10px;&#x000A;        margin-right: 10px;&#x000A;    }&#x000A;    .testimonial {&#x000A;        font-size: 16px;&#x000A;        font-style: italic;&#x000A;        color: #222;&#x000A;        padding: 10px;&#x000A;    }&#x000A;    </code></pre>
    <h3>Do We Include Every Possible Style In Our Style Sheet?</h3>
    <p>The idea is to have a pool of rules that authors can choose from to style anything they want. Styles that are common enough across a website would become part of the style sheet. If a style is too specific, then we’d rely on <code>@style</code> (the style attribute). In other words, we’d prefer to <strong>pollute the markup rather than the style sheet</strong>. The primary goal is to create a sheet made of rules that address various design patterns, from a basic rule that floats an element to “helper” classes.</p>
    <pre><code>&#x000A;    /**&#x000A;     * one liner with ellipsis&#x000A;     * 1. we inherit hyphens:auto from body, which would break "Ell" in table cells&#x000A;     */&#x000A;    .Ell {&#x000A;        max-width: 100%;&#x000A;        white-space: nowrap;&#x000A;        overflow: hidden;&#x000A;        text-overflow: ellipsis;&#x000A;        -webkit-hyphens: none; /* 1 */&#x000A;        -ms-hyphens: none;&#x000A;        -o-hyphens: none;&#x000A;        hyphens: none;&#x000A;    }&#x000A;    /**&#x000A;     * kinda line-clamp&#x000A;     * two lines according to default font-size and line-height&#x000A;     */&#x000A;    .LineClamp {&#x000A;        display: -webkit-box;&#x000A;        -webkit-line-clamp: 2;&#x000A;        -webkit-box-orient: vertical;&#x000A;        font-size: 13px;&#x000A;        line-height: 1.25;&#x000A;        max-height: 32px;&#x000A;        _height: 32px;&#x000A;        overflow: hidden;&#x000A;    }&#x000A;    /**&#x000A;     * reveals an hidden element on :hover or :focus&#x000A;     * visibility can be forced by applying the class "RevealNested-on"&#x000A;     * IE8+&#x000A;     */&#x000A;    :root .NestedHidden {&#x000A;        opacity: 0;&#x000A;    }&#x000A;    :root .NestedHidden:focus,&#x000A;    :root .RevealNested:hover .NestedHidden,&#x000A;    :root .RevealNested-on .NestedHidden {&#x000A;        opacity: 1;&#x000A;    }&#x000A;    </code></pre>
    <h3>How Does This Scale?</h3>
    <p>We have just released a brand new <a href="http://my.yahoo.com" rel="nofollow external" class="bo">My Yahoo</a>, which relies heavily on this technique. This is how it compares to a few other Yahoo products (after gzip’ing):</p>
    <table>
    <tbody>
    <tr>
    
    <th><strong>CSS Assets</strong></th>
    </tr>
    <tr>
    <td>answers.yahoo.com</td>
    <td>30.1 KB</td>
    </tr>
    <tr>
    <td>sports.yahoo.com</td>
    <td>67.4 KB</td>
    </tr>
    <tr>
    <td>omg.yahoo.com</td>
    <td>46.2 KB</td>
    </tr>
    <tr>
    <td>yahoo.com</td>
    <td>45.9 KB</td>
    </tr>
    <tr>
    <td>my.yahoo.com</td>
    <td>21.3 KB</td>
    </tr>
    </tbody>
    </table>
    <p>Our style sheet weighs 17.9 KB (about 3 KB of which are property-specific), and it is shareable (unlike the style sheets of other properties). The reason for this is that none of the rules it contains relate to content.</p>
    <h3>Wrapping Up</h3>
    <p>Because <strong>presentational class names have always been deemed “out of bounds</strong>,” we — the community — have not really investigated what their use entails. In fact, in the name of best practice, we’ve dismissed every opportunity to explore their potential benefits.</p>
    <p>Here at Yahoo, <a href="https://twitter.com/renatoiwa" rel="nofollow external" class="bo">@renatoiwa</a>, <a href="https://twitter.com/StevenRCarlson" rel="nofollow external" class="bo">@StevenRCarlson</a> and <a href="https://twitter.com/thierrykoblentz" rel="nofollow external" class="bo">I</a> are developing projects with this new <a href="http://engineering.appfolio.com/2012/11/16/css-architecture/" rel="nofollow external" class="bo">CSS architecture</a>. The code appears to be predictable, reusable, maintainable and scalable. These are the results we’ve experienced so far:</p>
    <ul>
    <li>
    <strong>Less bloat</strong><br>
    We can build entire modules without adding a single line to the style sheets.</li>
    <li>
    <strong>Faster development</strong><br>
    Styles are driven by classes that are not related to content, so we can copy and paste existing modules to get started.</li>
    <li>
    <strong>RTL interface for free</strong><br>
    Using start and end keywords makes a lot of sense. It saves us from having to write extra rules for RTL context.</li>
    <li>
    <strong>Better caching</strong><br>
    A huge chunk of CSS can be shared across products and properties.</li>
    <li>
    <strong>Very little maintenance (on the CSS side)</strong><br>
    Only a small set of rules are meant to change over time.</li>
    <li>
    <strong>Less abstraction</strong><br>
    There is no need to look for rules in a style sheet to figure out the styling of a template. It’s all in the markup.</li>
    <li>
    <strong>Third-party development</strong><br>
    A third party can hand us a template without having to attach a style sheet (or a <code>style</code> block) to it. No custom rules from third parties means no risk of breakage due to rules that have not been properly namespaced.</li>
    </ul>
    <p>(Note that if maintenance is easier on the CSS side than on the HTML side, then the reason is simply that we can cheat on the CSS side by not cleaning up rules. But if we were required to keep things lean and clean, then the pain would be the same.)</p>
    <h4>Final Note</h4>
    <p>I was at a <a href="http://www.meetup.com/sfhtml5/events/131694202/" rel="nofollow external" class="bo">meetup</a> a couple of weeks ago, where I heard Colt McAnlis say, “<a href="https://www.youtube.com/watch?v=OPBvdsFi7Ss&amp;feature=player_detailpage#t=11041" rel="nofollow external" class="bo">Tools, not rules</a>.” A quick search for this idiom <a href="http://notrulestools.com/Main_Page" rel="nofollow external" class="bo">returned this</a>:</p>
    <blockquote>
    <p>“We all need to be open to new learnings, new approaches, new best practices and we need to be able to share them.”</p>
    </blockquote>
    <p><em>(al, ea)</em></p>
    
    <hr>
    <p><small>© Thierry Koblentz for <a href="http://www.smashingmagazine.com" rel="nofollow external" class="bo">Smashing Magazine</a>, 2013.</small></p>
    </div>
]]>
</Body>
<Summary>        Editor’s Note: This article features techniques that are used in practice by Yahoo! and question coding techniques that we are used to today. You might be interested in reading Decoupling...</Summary>
<Website>http://www.smashingmagazine.com/2013/10/21/challenging-css-best-practices-atomic-approach/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/37247/guest@my.umbc.edu/71ce32ffcfa89950fb3068533e93d7fb/api/pixel</TrackingUrl>
<Tag>coding</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</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>Mon, 21 Oct 2013 05:41:43 -0400</PostedAt>
<EditAt>Mon, 21 Oct 2013 05:41:43 -0400</EditAt>
</NewsItem>

</News>
