<?xml version="1.0"?>
<News hasArchived="true" page="8803" pageCount="10777" pageSize="10" timestamp="Sun, 30 Aug 2026 23:01:20 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=recent&amp;page=8803">
<NewsItem contentIssues="false" id="32774" important="false" status="posted" url="https://my3.my.umbc.edu/posts/32774">
<Title>Psychology Teachers Earn APA TOPSS Award for Excellence in Teaching</Title>
<Body>
<![CDATA[
    <div class="html-content">Award recipients recognized for commitment to psychology education</div>
]]>
</Body>
<Summary>Award recipients recognized for commitment to psychology education</Summary>
<Website>http://www.apa.org/news/press/releases/2013/05/topss-award.aspx</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/32774/guest@my.umbc.edu/0435c41a539ae3bd968bc31a3c2b73e0/api/pixel</TrackingUrl>
<Group token="retired-230">Psychology Student Association @ USG</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-230</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/xsmall.png?1359246046</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/original.jpg?1359246046</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/xxlarge.png?1359246046</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/xlarge.png?1359246046</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/large.png?1359246046</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/medium.png?1359246046</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/small.png?1359246046</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/xsmall.png?1359246046</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/230/b64bd4b2d025a7635eabf84b086f65fe/xxsmall.png?1359246046</AvatarUrl>
<Sponsor>Psychology Student Association @ USG</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 08 May 2013 01:00:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="29190" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29190">
<Title>Retriever Student-Athletes and Director of Athletics Honored at Annual Varsity Awards Ceremony</Title>
<Body>
<![CDATA[
    <div class="html-content">More than 400 student-athletes, faculty, staff and family members were in attendance on Monday, May 6 at the RAC Arena as UMBC honored its student-athletes for another successful year both on the playing surface and in the classroom. Junior Pete Caringi III (Perry Hall, Md./Calvert Hall) joined second-year honorees, sophomore Mercedes Jackson (Huntingtown, Md./Huntingtown) and junior Mohamed Hussein (Cairo, Egypt/Victory College), as the Retrievers' Most Outstanding Athletes for the 2012-13 academic year, an honor that was renamed the Dr. Charles R. Brown Outstanding Athlete Award to recognize the Athletic Director, who will retire in June, for his 24 years of dedication to the department and school.</div>
]]>
</Body>
<Summary>More than 400 student-athletes, faculty, staff and family members were in attendance on Monday, May 6 at the RAC Arena as UMBC honored its student-athletes for another successful year both on the...</Summary>
<Website>http://www.umbcretrievers.com/release.asp?RELEASE_ID=7993</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29190/guest@my.umbc.edu/5eb90c5240c80bccaa6be6d3b2c0d03f/api/pixel</TrackingUrl>
<Group token="athletics">UMBC Athletics</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/athletics</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/original.jpg?1709304849</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/large.png?1709304849</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/medium.png?1709304849</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/small.png?1709304849</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxsmall.png?1709304849</AvatarUrl>
<Sponsor>UMBC Athletics</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 08 May 2013 01:00:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="29200" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29200">
<Title>UMBC Baseball Finishes Season Sweep of UMES with 8-5 Home Win</Title>
<Body>
<![CDATA[
    <div class="html-content">BALTIMORE � UMBC scored five runs in the fourth inning to break open a 2-2 game and held off UMES to sweep the season series with an 8-5 win, Wednesday evening at Alumni Field.</div>
]]>
</Body>
<Summary>BALTIMORE � UMBC scored five runs in the fourth inning to break open a 2-2 game and held off UMES to sweep the season series with an 8-5 win, Wednesday evening at Alumni Field.</Summary>
<Website>http://www.umbcretrievers.com/release.asp?RELEASE_ID=7995</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29200/guest@my.umbc.edu/ff076b930da55a523fd87230c43cc63d/api/pixel</TrackingUrl>
<Group token="athletics">UMBC Athletics</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/athletics</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/original.jpg?1709304849</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xlarge.png?1709304849</AvatarUrl>
<AvatarUrl size="large">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/large.png?1709304849</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/medium.png?1709304849</AvatarUrl>
<AvatarUrl size="small">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/small.png?1709304849</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xsmall.png?1709304849</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/009/69595c9b99f609d75fbb8232d9bd73d3/xxsmall.png?1709304849</AvatarUrl>
<Sponsor>UMBC Athletics</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 08 May 2013 01:00:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="29157" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29157">
<Title>Line Clampin&#8217;</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>You want X lines of text. Anything after that, gracefully cut off. That's "line clamping" and it is a perfectly legit desire. When you can count on text being a certain number of lines, you can create stronger and more reliable grids from the elements that contain that text, as well as achieve some symmetric aesthetic harmony. </p>
    <p>There are a couple of ways to get it done, none of them spectacular.</p>
    <p></p>
    <p>In case that explanation wasn't clean, imagine you have some HTML like this:</p>
    <pre><code>&lt;div class="module"&gt;&#x000A;      &lt;p&gt;Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.&lt;/p&gt;&#x000A;    &lt;/div&gt;</code></pre>
    <p>And you want to limit it to exactly three lines in a container. Like this:</p>
    <img src="http://cdn.css-tricks.com/wp-content/uploads/2013/05/clamped.png" alt="" style="max-width: 100%; height: auto;">
    <p>In all these examples, let's assume we have a "module".</p>
    <pre><code>.module {&#x000A;      width: 250px;&#x000A;      overflow: hidden;&#x000A;    }</code></pre>
    <h3>Weird WebKit Flexbox Way</h3>
    <p>David DeSandro showed us <a href="http://dropshado.ws/post/1015351370/webkit-line-clamp" rel="nofollow external" class="bo">this little ditty</a> a few years ago. </p>
    <pre><code>.line-clamp {&#x000A;      display: -webkit-box;&#x000A;      -webkit-line-clamp: 3;&#x000A;      -webkit-box-orient: vertical;  &#x000A;    }</code></pre>
    <p>One one hand, this is awesome and exactly what we need. CSS the perfect place for this. It's a real need and it should be this simple. </p>
    <p>On the other hand... it's weird. why does it need to be a flexbox thing (the old version at that)? It doesn't work without that. And it's extremely fragile. Let's say you want the module (or the paragraph) to have some padding. You can't, because the padding will expose extra lines. That's what we get with half-baked non-standardized properties.</p>
    <h3>The Fade Out Way</h3>
    <p>The root of this technique is just setting the height of the module in a predictable way. Let's say you set the <code>line-height</code> to <code>1.2em</code>. If we want to expose three lines of text, we can just make the height of the container <code>3.6em</code> (1.2em × 3). The hidden overflow will hide the rest. </p>
    <p>But it can be a bit awkward to just the text off like that. Ideally we would add ellipsis, but we can't reliably position them. So instead we'll fade out the text achieving the same kind of communication ("there is more...").</p>
    <p>To fade out the last line, we make a box (a pseudo element will work great) and overlay a transparent-to-background-color gradient over the top. Making it nearly as wide as the container is best in case the last line is short. Because we know the line-height, we can make the pseudo element box exactly one line tall.</p>
    <pre><code>.fade {&#x000A;      position: relative;&#x000A;      height: 3.6em; /* exactly three lines */&#x000A;    }&#x000A;    .fade:after {&#x000A;      content: "";&#x000A;      text-align: right;&#x000A;      position: absolute;&#x000A;      bottom: 0;&#x000A;      right: 0;&#x000A;      width: 70%;&#x000A;      height: 1.2em;&#x000A;      background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%);&#x000A;    }</code></pre>
    <h3>The Opera Overflow Way</h3>
    <p>Like WebKit, Opera has their own way to handle this. They apply ellipsis on the line you wish to. Of course the clock is ticking for Presto (Opera's rendering engine pre-Blink) so this isn't particularly useful. Perhaps it can still inform a future implementation though.</p>
    <pre><code>.last-line {&#x000A;      height: 3.6em; /* exactly three lines */&#x000A;      text-overflow: -o-ellipsis-lastline;&#x000A;    }</code></pre>
    <h3>The Clamp.js Way</h3>
    <p>Where there is a will there is a way (with JavaScript). I think that's a saying. Joseph J. Schmitt has an excellent library-free JavaScript thingy called <a href="http://github.com/josephschmitt/Clamp.js" rel="nofollow external" class="bo">Clamp.js</a> for making this happen in a cross-browser way.</p>
    <pre><code>var module = document.getElementById("clamp-this-module");&#x000A;    &#x000A;    $clamp(module, {clamp: 3});</code></pre>
    <p>Make sure you target the element with the text directly inside of it. Originally I tried putting the ID on the module, which worked in Chrome/Safari, but failed in Firefox. Putting it on the <code>&lt;p&gt;</code> made it work in both (Thx <a href="http://css-tricks.com/line-clampin/#comment-436850" rel="nofollow external" class="bo">Merri</a>).</p>
    <h3>The Demos</h3>
    <pre><a href="http://codepen.io/chriscoyier/pen/iBtep" rel="nofollow external" class="bo">Check out this Pen!</a></pre>
    <h3>Updates</h3>
    <p>Vesa Piittinen created <a href="http://codepen.io/Merri/pen/Dsuim" rel="nofollow external" class="bo">an alternative method to Clamp.js</a>.</p>
    <blockquote><p>Unlike Clamp.js it retains all the text within the clamped element and uses text-overflow to do the magic.</p></blockquote>
    <p>FT Labs also <a href="https://github.com/ftlabs/ftellipsis" rel="nofollow external" class="bo">has created a JavaScript plugin</a> to do the job. It's nice in that you don't have to specify the number of lines, it just happens when the text overflows the container, so the design decision stay in the CSS.</p>
    <p>Both of these examples have been added to <a href="http://codepen.io/chriscoyier/pen/iBtep" rel="nofollow external" class="bo">the main Pen</a>.</p>
    <hr>
    
    <p><a href="http://events.jquery.org/2013/portland/" rel="nofollow external" class="bo"><img src="http://cdn.css-tricks.com/images/jquery-portland.jpg" style="max-width: 100%; height: auto;"></a></p>
    
    <p><a href="http://events.jquery.org/2013/portland/" rel="nofollow external" class="bo">jQuery Conference Portland 2013</a> has a limited number of regular tickets still available. Two days. Two tracks. Fresh speakers. Jun 13-14. $50 off for members of the jQuery Foundation. <a href="https://jquery.org/join/" rel="nofollow external" class="bo">Join today</a> and get your first year of fan dues paid for with purchase of both a training and conference ticket. Training provided by Bocoup on Jun 12. Use coupon code <strong>CSSTricks25off</strong> for $25 off.</p>
    
    <hr>
    
    <p><small><a href="http://css-tricks.com/line-clampin/" rel="nofollow external" class="bo">Line Clampin’</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>You want X lines of text. Anything after that, gracefully cut off. That's "line clamping" and it is a perfectly legit desire. When you can count on text being a certain number of lines, you can...</Summary>
<Website>http://css-tricks.com/line-clampin/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29157/guest@my.umbc.edu/997c9ee0e8f2932cdfd6ee7b6dc1e23a/api/pixel</TrackingUrl>
<Tag>article</Tag>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tricks</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 07 May 2013 21:48:04 -0400</PostedAt>
<EditAt>Tue, 07 May 2013 21:48:04 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="29158" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29158">
<Title>How the "Be the Thief" Experience Was Created</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>Our goal with the Thief of Thieves Experience is to deliver an immersive experience through Internet Explorer 10 equal to one you’d typically find in a native application. We do this by using the latest in HTML5, CSS3, touch, and related technologies. This article will explore the techniques used to develop the app.</p></div>
]]>
</Body>
<Summary>Our goal with the Thief of Thieves Experience is to deliver an immersive experience through Internet Explorer 10 equal to one you’d typically find in a native application. We do this by using the...</Summary>
<Website>http://www.htmlgoodies.com/HTML5/client/how-the-be-the-thief-experience-was-created.html</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29158/guest@my.umbc.edu/5d58eb915e1c2bc6407f75d091c97e87/api/pixel</TrackingUrl>
<Tag>html</Tag>
<Tag>htmlgoodies</Tag>
<Tag>learning</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>Tue, 07 May 2013 21:03:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="29159" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29159">
<Title>Microsoft Expands Windows 8 Management Features for MDOP</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>Microsoft’s MDOP for IT management also known as Microsoft’s Desktop Optimization Pack receives a list of new IT administration capabilities for Windows 8.</p></div>
]]>
</Body>
<Summary>Microsoft’s MDOP for IT management also known as Microsoft’s Desktop Optimization Pack receives a list of new IT administration capabilities for Windows 8.</Summary>
<Website>http://www.htmlgoodies.com/daily_news/microsoft-expands-windows-8-management-features-for-mdop.html</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29159/guest@my.umbc.edu/a30fd0d55756b3ca9d363b4080a8c628/api/pixel</TrackingUrl>
<Tag>html</Tag>
<Tag>htmlgoodies</Tag>
<Tag>learning</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>Tue, 07 May 2013 20:36:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="29160" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29160">
<Title>Adobe Flash Professional Receives Improved Support For HTML5 Publishing</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>Adobe has re-engineered Flash Professional as a 64-bit application including real-time mobile testing and a new code editor for HTML5.</p></div>
]]>
</Body>
<Summary>Adobe has re-engineered Flash Professional as a 64-bit application including real-time mobile testing and a new code editor for HTML5.</Summary>
<Website>http://www.htmlgoodies.com/daily_news/adobe-flash-professional-receives-improved-support-for-html5-publishing.html</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29160/guest@my.umbc.edu/5c072cbbd4b0aea91001a765b1075852/api/pixel</TrackingUrl>
<Tag>html</Tag>
<Tag>htmlgoodies</Tag>
<Tag>learning</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>Tue, 07 May 2013 20:14:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="123316" important="false" status="posted" url="https://my3.my.umbc.edu/posts/123316">
<Title>Carlyn Thomas &#8217;13, Visual Arts, Speaks at Gallery 788</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><a href="http://g788.org/2013/04/out-of-mind-art-show/" rel="nofollow external" class="bo"><em>Out of Mind</em></a>, an exhibition curated by 2013 Visual Arts senior, Carlyn Thomas, opened last week in Baltimore’s Gallery 788. Coverage of the exhibition and video of a curatorial talk by Thomas, appeared Sunday <a href="http://baltimorepostexaminer.com/out-of-mind-exhibition-opens/2013/05/05" rel="nofollow external" class="bo">in the </a><em><a href="http://baltimorepostexaminer.com/out-of-mind-exhibition-opens/2013/05/05" rel="nofollow external" class="bo">Baltimore Post-Examiner</a>.</em></p>
    <p>The curatorial project is part of Thomas’ senior thesis as an art history &amp; museum studies student, and continues through the 11th.</p>
    <p>Learn more about the project <a href="http://umbcinsights.wordpress.com/2013/04/22/carlyn-thomas-13-visual-arts-first-umbc-art-history-student-to-curate-exhibition-for-thesis/" rel="nofollow external" class="bo">here</a>.</p>
    </div>
]]>
</Body>
<Summary>Out of Mind, an exhibition curated by 2013 Visual Arts senior, Carlyn Thomas, opened last week in Baltimore’s Gallery 788. Coverage of the exhibition and video of a curatorial talk by Thomas,...</Summary>
<Website>https://umbc.edu/stories/carlyn-thomas-13-visual-arts-speaks-at-gallery-788/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/123316/guest@my.umbc.edu/1e5683e923e863f2fb32e41824e1b81d/api/pixel</TrackingUrl>
<Tag>cahss</Tag>
<Tag>policy-and-society</Tag>
<Tag>visualarts</Tag>
<Group token="umbc-news-magazine">UMBC News &amp;amp; Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news-magazine</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/original.png?1748556657</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xlarge.png?1748556657</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/large.png?1748556657</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/medium.png?1748556657</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/small.png?1748556657</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xsmall.png?1748556657</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/943/24435aa6207c452e7bc15cc74b42c7bb/xxsmall.png?1748556657</AvatarUrl>
<Sponsor>UMBC News &amp; Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Tue, 07 May 2013 18:55:36 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="29149" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29149">
<Title>CSS Zen Garden</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>It's back.</p>
    <p><a href="http://mezzoblue.com/archives/2013/05/07/10_years/" title="Direct link to featured article" rel="nofollow external" class="bo">Direct Link to Article</a> — <a href="http://css-tricks.com/css-zen-garden/" rel="nofollow external" class="bo">Permalink</a></p>
    <hr>
    
    <p><a href="http://events.jquery.org/2013/portland/" rel="nofollow external" class="bo"><img src="http://cdn.css-tricks.com/images/jquery-portland.jpg" style="max-width: 100%; height: auto;"></a></p>
    
    <p><a href="http://events.jquery.org/2013/portland/" rel="nofollow external" class="bo">jQuery Conference Portland 2013</a> has a limited number of regular tickets still available. Two days. Two tracks. Fresh speakers. Jun 13-14. $50 off for members of the jQuery Foundation. <a href="https://jquery.org/join/" rel="nofollow external" class="bo">Join today</a> and get your first year of fan dues paid for with purchase of both a training and conference ticket. Training provided by Bocoup on Jun 12. Use coupon code <strong>CSSTricks25off</strong> for $25 off.</p>
    
    <hr>
    
    <p><small><a href="http://css-tricks.com/css-zen-garden/" rel="nofollow external" class="bo">CSS Zen Garden</a> is a post from <a href="http://css-tricks.com" rel="nofollow external" class="bo">CSS-Tricks</a></small></p>
    </div>
]]>
</Body>
<Summary>It's back.   Direct Link to Article — Permalink         jQuery Conference Portland 2013 has a limited number of regular tickets still available. Two days. Two tracks. Fresh speakers. Jun 13-14....</Summary>
<Website>http://mezzoblue.com/archives/2013/05/07/10_years/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29149/guest@my.umbc.edu/08d84eeadc896a1132fcd9ff76eabc5f/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>link</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tricks</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 07 May 2013 16:32:45 -0400</PostedAt>
<EditAt>Tue, 07 May 2013 16:32:45 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="29147" important="false" status="posted" url="https://my3.my.umbc.edu/posts/29147">
<Title>Use ECMAScript 6 Today</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=31582&amp;c=1517432851" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=31582&amp;c=1517432851" alt="" style="max-width: 100%; height: auto;"></a><p>Today, ECMAScript 6 is in the process of being finalized. ECMAScript is the foundation of JavaScript and, hence, exploring the proposed features today also means that we get a sneak peak at how we will be writing JavaScript in the near future! In this article, we’ll explore ten new features, with a significant focus on tools, browsers and transpilers.</p>
    <p></p>
    <hr>
    <h2>A Brief History: ECMA, ECMAScript and JavaScript</h2>
    <p><strong>JavaScript</strong> was originally developed by <a href="https://twitter.com/BrendanEich" rel="nofollow external" class="bo">Brendan Eich</a> of Netscape, and officially released as part of <a href="http://en.wikipedia.org/wiki/Netscape_Navigator" rel="nofollow external" class="bo">Netscape Navigator</a> 2.0 in 1995. A year later, JavaScript was submitted to <a href="http://www.ecma-international.org/" rel="nofollow external" class="bo">ECMA International</a>, a body that facilitates the standardization of information and communication technology and consumer electronics, so that it can be formalized industry-wise. <strong>ECMAScript</strong>, thus, became the name of the scripting language standardized in <a href="http://www.ecma-international.org/publications/standards/Ecma-262.htm" rel="nofollow external" class="bo">ECMA-262</a>.</p>
    <p>The ECMAScript standard forms the backbone of many other derived languages, including <a href="http://www.adobe.com/devnet/actionscript.html" rel="nofollow external" class="bo">ActionScript</a> and <a href="http://msdn.microsoft.com/en-us/library/vstudio/72bd815a(v=vs.100).aspx" rel="nofollow external" class="bo">JScript</a>. Through the years, ECMAScript has gone through four versions, with the discussions today very much revolving around version six, which has also been code-named, <strong>ECMAScript Harmony</strong>.</p>
    <h3>Version correspondence</h3>
    <p>Before we dive into these new features, it’s important to note that the ECMAScript standard forms the foundation of JavaScript. There are numerical differences between each of the JavaScript versions and the corresponding ECMAScript editions. This is to say that JavaScript is compatible with the ECMAScript standard, while providing more features. The table below summarizes the <a href="https://developer.mozilla.org/en-US/docs/JavaScript/Guide/JavaScript_Overview#Relationship_between_JavaScript_Versions_and_ECMAScript_Editions" rel="nofollow external" class="bo">relationship</a> between <a href="http://en.wikipedia.org/wiki/Ecmascript#Version_correspondence" rel="nofollow external" class="bo">JavaScript and ECMAScript</a>:</p>
    <table border="1"><tbody>
    <tr>
    <td><strong>JavaScript Version</strong></td>
    <td><strong>ECMAScript Edition</strong></td>
    <td><strong>Year</strong></td>
    </tr>
    <tr>
    <td>JavaScript 1.1</td>
    <td>ECMAScript edition 1</td>
    <td>1997</td>
    </tr>
    <tr>
    <td>JavaScript 1.5</td>
    <td>ECMAScript edition 3</td>
    <td>1999</td>
    </tr>
    <tr>
    <td>JavaScript 2.0</td>
    <td>ECMAScript Harmony</td>
    <td>Work in progress</td>
    </tr>
    </tbody></table>
    <hr>
    <h2>ES6 Overview</h2>
    <h3>Goals</h3>
    <p>JavaScript has come a long way since its humble beginnings nearly twenty years ago. Today, developers are writing thousands of lines of code creating complex JavaScript applications. Before we dive into the detailed features of ES6, you may want to look at the big picture that is defined in the specification drafts, in terms of <a href="http://wiki.ecmascript.org/doku.php?id=harmony:harmony#requirements" rel="nofollow external" class="bo">requirements</a>, <a href="http://wiki.ecmascript.org/doku.php?id=harmony:harmony#goals" rel="nofollow external" class="bo">goals</a>, <a href="http://wiki.ecmascript.org/doku.php?id=harmony:harmony#means" rel="nofollow external" class="bo">means</a> and <a href="http://wiki.ecmascript.org/doku.php?id=harmony:harmony#themes" rel="nofollow external" class="bo">themes</a>. One of the <a href="http://wiki.ecmascript.org/doku.php?id=harmony:harmony#goals" rel="nofollow external" class="bo">goals for ES6</a> is to be a better language for creating:</p>
    <ul>
    <li>complex applications</li>
    <li>libraries</li>
    <li>code generators</li>
    </ul>
    <h3>Compatibility</h3>
    <p>The <a href="http://kangax.github.io/es5-compat-table/es6/" rel="nofollow external" class="bo">ES6 compatibility table</a> is very useful, as it tells us the ES6 features that are supported in the current browser. It also gives us a handy link to the specifications for each of the features listed. Do note that some of the features’ existence might not mean full compliance with specifications. When working with Chrome, be sure to enable the “Experimental JavaScript” flags.</p>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-compatibility.png" style="max-width: 100%; height: auto;"></div>
    <h3>Features</h3>
    <p>Now that the big picture is defined, let’s explore how we can implement them. In the following sections, we will discuss ten features of ES6, using various tools so that we can understand ES6 both in theory and practice. Prior knowledge of JavaScript is a pre-requisite, so feel free to check out <a href="http://net.tutsplus.com/tutorials/javascript-ajax/the-best-way-to-learn-javascript/" rel="nofollow external" class="bo">many resources on JavaScript</a>.</p>
    <p>Listed below are the features that we’ll go through with a different tool. Try them out one by one, or jump to the specific feature that you’d like to explore:</p>
    <ol>
    <li>
    <a href="#let" rel="nofollow external" class="bo">Block scoping with <code>let</code></a> [ using <a href="http://www.mozilla.org/en-US/firefox/20.0.1/releasenotes/" rel="nofollow external" class="bo">Firefox browser</a> ]</li>
    <li>
    <a href="#const" rel="nofollow external" class="bo">Block scoping with <code>const</code></a> [ using <a href="https://www.google.com/intl/en/chrome/browser/beta.html" rel="nofollow external" class="bo">Chrome browser</a> ]</li>
    <li>
    <a href="#class" rel="nofollow external" class="bo">Classes</a> [ using <a href="https://code.google.com/p/traceur-compiler/" rel="nofollow external" class="bo">Traceur</a> ]</li>
    <li>
    <a href="#params" rel="nofollow external" class="bo">Default function parameters</a> [ using <a href="http://www.typescriptlang.org/" rel="nofollow external" class="bo">TypeScript</a> ]</li>
    <li>
    <a href="#collections" rel="nofollow external" class="bo">Collections</a> [ using <a href="http://nodejs.org/" rel="nofollow external" class="bo">NodeJS</a> ]</li>
    <li>
    <a href="#destructuring" rel="nofollow external" class="bo">Destructuring</a> [ using <a href="http://www.mozilla.org/en-US/firefox/20.0.1/releasenotes/" rel="nofollow external" class="bo">Firefox browser</a> ]</li>
    <li>
    <a href="#rest-spread" rel="nofollow external" class="bo">Rest parameters &amp; Spread operator</a> [ using <a href="https://github.com/aaronfrost/grunt-traceur" rel="nofollow external" class="bo">Grunt plugin Traceur</a> ]</li>
    <li>
    <a href="#for" rel="nofollow external" class="bo">Iterators</a> [ using <a href="http://www.mozilla.org/en-US/firefox/20.0.1/releasenotes/" rel="nofollow external" class="bo">Firefox browser</a> ]</li>
    <li>
    <a href="#comprehension" rel="nofollow external" class="bo">Array comprehension</a> [ using <a href="http://www.mozilla.org/en-US/firefox/20.0.1/releasenotes/" rel="nofollow external" class="bo">Firefox browser</a> ]</li>
    <li>
    <a href="#modules" rel="nofollow external" class="bo">Modules</a> (using <a href="http://square.github.io/es6-module-transpiler/" rel="nofollow external" class="bo">ES6 Module Transpiler</a>)</li>
    </ol>
    <hr>
    <h2> <span>Feature 1 -</span> Block Scoping with <code>let</code>
    </h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <code><a href="http://wiki.ecmascript.org/doku.php?id=harmony:let" rel="nofollow external" class="bo">let</a></code>
    </li>
    <li>
    <strong>Tool: </strong> <a href="http://www.mozilla.org/en-US/firefox/20.0.1/releasenotes/" rel="nofollow external" class="bo">Firefox browser 20.0</a>: Menu &gt; Tools &gt; Web developer &gt; Web Console</li>
    </ul>
    <p>JavaScript variables are function-scoped. This means that, even if there are variables declared in a nested block, they are available throughout the function. Let’s review a short example below; we’ll simply use the web console in Firefox or Chrome to run them. What do you think will be the value of <code>jsFuture</code>?</p>
    <pre>var jsFuture = "es6";&#x000A;    (function () {&#x000A;      if (!jsFuture) { var jsFuture = "es5"; }&#x000A;      console.log(jsFuture);&#x000A;    }());&#x000A;    </pre>
    <p>In the above example, the value of <code>jsFuture</code> in the <code>console.log</code> statement will be “es5″. Crucial to your understanding is the fact that, in JavaScript, <a href="http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/" rel="nofollow external" class="bo">variable declarations are hoisted to the top</a>, but variable initializations, on the other hand, are not. Hence, regardless of where the variables are initialized and declared, within the function scope, they will always be hoisted. The snippet below is exactly the same – with comments to illustrate this feature of variable hoisting.</p>
    <pre>var jsFuture = "es6";&#x000A;    (function () {&#x000A;      // var jsFuture = undefined;&#x000A;      // variable hoisting&#x000A;      if (!jsFuture) { var jsFuture = "es5"; }&#x000A;      console.log(jsFuture); // "es5"&#x000A;    }());&#x000A;    </pre>
    <p>ES6 tackles this issue with <code>let</code>, which is like <code>var</code>, except for the fact that it is block scoped instead of function scoped. Let’s consider another example with <code>var</code> below. Calling the function <code>es[6]() </code>will give us the value of <code>i = 10</code>. Notice that, even though <code>var i = 0;</code> is declared in the <code>for</code> loop, the scope of <code>var i</code> defaults to global. Hence, when the function <code>es[6]()</code> is executed, the value of <code>i</code> is <code>10</code>.</p>
    <pre>var es = [];&#x000A;    for (var i = 0; i &lt; 10; i++) {&#x000A;      es[i] = function () {&#x000A;        console.log("Upcoming edition of ECMAScript is ES" + i);&#x000A;      };&#x000A;    }&#x000A;    es[6](); // Upcoming edition of ECMAScript is ES10&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-var-es5.png" style="max-width: 100%; height: auto;"></div>
    <p>Let’s now use <code>let</code>. To code this out, we’ll use Firefox and open up the web console through the menu (Tools &gt; Web developer &gt; Web Console). Creating a block-scoped variable within the <code>for</code> loop, <code>let c = i;</code> made it block scoped.</p>
    <pre>var es = [];&#x000A;    for (var i = 0; i &lt; 10; i++) {&#x000A;      let c = i;&#x000A;      es[i] = function () {&#x000A;        console.log("Upcoming edition of ECMAScript is ES" + c);&#x000A;      };&#x000A;    }&#x000A;    es[6](); // Upcoming edition of ECMAScript is ES6&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-let.png" style="max-width: 100%; height: auto;"></div>
    <p>Firefox already supports many upcoming ES6 features. Refer to the <a href="https://developer.mozilla.org/en-US/docs/JavaScript/ECMAScript_6_support_in_Mozilla" rel="nofollow external" class="bo">compliance table for Firefox</a> to keep updated on which features are supported, and which ones are also compliant with the current specification.</p>
    <hr>
    <h2> <span>Feature 2 -</span> Block Scoping with <code>const</code>
    </h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <code><a href="http://wiki.ecmascript.org/doku.php?id=harmony:const" rel="nofollow external" class="bo">const</a></code>
    </li>
    <li>
    <strong>Tool: </strong> <a href="https://www.google.com/intl/en/chrome/browser/beta.html" rel="nofollow external" class="bo">Chrome Browser</a> &gt; View &gt; Developer &gt; JavaScript Console</li>
    </ul>
    <p>Constant definitions are now possible with <code>const</code>. <code>let</code> and <code>const</code> behave similarly in the sense that both are block scoped, but with <code>const</code>, the values are read-only and cannot be re-declared later on. Let’s review a simple code example in Chrome:</p>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-const.png" style="max-width: 100%; height: auto;"></div>
    <hr>
    <h2> <span>Feature 3 -</span> Classes</h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <code><a href="http://wiki.ecmascript.org/doku.php?id=strawman:maximally_minimal_classes" rel="nofollow external" class="bo">class</a></code>
    </li>
    <li>
    <strong>Tool: </strong> <a href="" rel="nofollow external" class="bo">Traceur</a> with <a href="https://www.google.com/intl/en/chrome/browser/beta.html" rel="nofollow external" class="bo">Chrome Browser</a> &gt; View &gt; Developer &gt; JavaScript Console</li>
    </ul>
    <p>In object-oriented programming languages, a <code>class</code> is a representation of an object. It forms the blueprint, while an object is an instance of a class. With regard to JavaScript, it is a class-less programming language and everything is an object. Traditionally, we’ve used functions and prototypes to implement classes. Let’s explore one common way of <a href="http://www.phpied.com/3-ways-to-define-a-javascript-class/" rel="nofollow external" class="bo">implementing class in ES5</a>.</p>
    <pre>var Language = function(config) {&#x000A;      this.name = config.name;&#x000A;      this.founder = config.founder;&#x000A;      this.year = config.year;&#x000A;    };&#x000A;    &#x000A;    Language.prototype.summary = function() {&#x000A;      return this.name + " was created by " + this.founder + " in " + this.year;&#x000A;    };&#x000A;    </pre>
    <p>Next, let’s see how ES6 implements classes with minimal class declaration syntax that can be extremely important to distinguish classes and functions. To code out <code>class</code> using the ES6 syntax, we will use Google’s <a href="https://code.google.com/p/traceur-compiler/" rel="nofollow external" class="bo">Traceur</a>, which is a <a href="http://en.wikipedia.org/wiki/Source-to-source_compiler" rel="nofollow external" class="bo">transpiler</a> that compiles ES6 code into ES5. First, let’s create the <code>html</code> file structure within which we will insert the ES6 syntax for classes. In order to compile the Traceur code, we require both <code>traceur.js</code> to compile Traceur to JavaScript, as well as <code>bootstrap.js</code> to <a href="https://code.google.com/p/traceur-compiler/wiki/GettingStarted#Pulling_Yourself_Up_By_Your_Bootstraps" rel="nofollow external" class="bo">bind them all</a>. Finally, Traceur will look for <code>script type="text/traceur"</code> tags to compile the relevant code inside the tags into vanilla JavaScript.</p>
    <pre>&lt;!DOCTYPE html&gt;&#x000A;    &lt;html&gt;&#x000A;    &lt;head&gt;&#x000A;      &lt;title&gt;ES6 Classes&lt;/title&gt;&#x000A;      &lt;script src="<a href="https://traceur-compiler.googlecode.com/git/bin/traceur.js%22&gt;&lt;/script&amp;gt">https://traceur-compiler.googlecode.com/git/bin/traceur.js"&gt;&lt;/script&amp;gt</a>;&#x000A;      &lt;script src="<a href="https://traceur-compiler.googlecode.com/git/src/bootstrap.js%22&gt;&lt;/script&amp;gt">https://traceur-compiler.googlecode.com/git/src/bootstrap.js"&gt;&lt;/script&amp;gt</a>;&#x000A;    &lt;/head&gt;&#x000A;    &lt;body&gt;&#x000A;      &lt;script type="text/traceur"&gt;&#x000A;        // insert ES6 code&#x000A;      &lt;/script&gt;&#x000A;    &lt;/body&gt;&#x000A;    &lt;/html&gt;&#x000A;    </pre>
    <p>Next, within the <code>script type="text/traceur"</code> tags, let’s use the ES6 syntax to implement the same class that we previously did for <code>Language</code>.</p>
    <pre>class Language {&#x000A;      constructor(name, founder, year) {&#x000A;        this.name = name;&#x000A;        this.founder = founder;&#x000A;        this.year = year;&#x000A;      }&#x000A;      summary() {&#x000A;        return this.name + " was created by " + this.founder + " in " + this.year;&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <p>We can now create an instance of the <code>class Language</code> by opening the HTML file in the Chrome browser as <code>var js = new Language</code>. In the console, we’ll see the prompts for other properties of the language as well!</p>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-class.png" style="max-width: 100%; height: auto;"></div>
    <p>With such a clear syntax declaration, we can also move on to extend the class to implement a sub-class <code>MetaLanguage</code> that will inherit all the properties from the parent class <code>Language</code>. Inside the constructor function, we will require the function <code>super</code> that will call the constructor of the parent class so that it is able to inherit all of its properties. Lastly, we can also add on extra properties, such as <code>version</code>, as illustrated in the code below. Let’s review the ES6 syntax and run it in the Chrome browser:</p>
    <pre>class MetaLanguage extends Language {&#x000A;      constructor(x, y, z, version) {&#x000A;        super(x, y, z);&#x000A;        this.version = version;&#x000A;      }&#x000A;    }&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-subclass.png" style="max-width: 100%; height: auto;"></div>
    <p>Traceur is a useful transpiler that allows us to code using the ES6 syntax, while doing the heavy-lifting for us to compile it back to the current JavaScript version. Do try out <a href="https://code.google.com/p/traceur-compiler/wiki/LanguageFeatures" rel="nofollow external" class="bo">other ES6 features in Traceur</a> as well!</p>
    <hr>
    <h2> <span>Feature 4 -</span> Default Function Parameters</h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <code><a href="http://wiki.ecmascript.org/doku.php?id=harmony:parameter_default_values" rel="nofollow external" class="bo">default function parameters</a></code>
    </li>
    <li>
    <strong>Tool: </strong> <a href="http://www.typescriptlang.org/" rel="nofollow external" class="bo">TypeScript 0.8.3</a>
    </li>
    </ul>
    <p>With default function parameters, we can always have function parameters as an option by setting some defaults. The syntax for this feature in ES6 is extremely intuitive. The default parameters are defined when the functions are defined. Let’s have a look at the ES6 syntax below in a new <a href="http://www.typescriptlang.org/" rel="nofollow external" class="bo">TypeScript</a> file with an extension of <code>*.ts</code>.</p>
    <pre>function history(lang = "C", year = 1972) {&#x000A;      return lang + " was created around the year " + year;&#x000A;    }&#x000A;    </pre>
    <p>Next, we will <a href="https://npmjs.org/package/typescript" rel="nofollow external" class="bo">install TypeScript as an npm module</a> and run the file <code>.*ts</code> and compile it to vanilla JavaScript. Here are the installation and then compilation commands in the command line:</p>
    <pre>$ npm install -g typescript&#x000A;    $ npm view typescript version&#x000A;    0.8.3&#x000A;    $ tsc 4-default-params.ts&#x000A;    </pre>
    <p>The command above will create a vanilla JavaScript file, called <code>4-default-params.js</code>, which can then be called from an HTML file. Here’s the simple HTML file that will call the external JavaScript file that is created by the TypeScript compiler:</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;title&gt;ES6 Default Parameters&lt;/title&gt;&#x000A;    &lt;/head&gt;&#x000A;    &lt;body&gt;&#x000A;      &lt;script src="4-default-params.js"&gt;&lt;/script&gt;&#x000A;    &lt;/body&gt;&#x000A;    &lt;/html&gt;&#x000A;    </pre>
    <p>Finally, we will open the HTML file in Chrome/Firefox and call the function <code>history()</code> two times, with and without the function parameters. Notice that not passing in any function parameters will fall back to the default parameters:</p>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-params.png" style="max-width: 100%; height: auto;"></div>
    <p>Do check out <a href="http://www.typescriptlang.org/Tutorial/" rel="nofollow external" class="bo">other TypeScript features</a>, including <code>class</code> or <a href="http://net.tutsplus.com/tutorials/javascript-ajax/getting-started-with-typescript/" rel="nofollow external" class="bo">go through a TypeScript tutorial</a> for more in-depth usage.</p>
    <hr>
    <h2> <span>Feature 5 -</span> Collections</h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <a href="http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets" rel="nofollow external" class="bo">Sets and Maps</a>
    </li>
    <li>
    <strong>Tool: </strong> <a href="http://nodejs.org/" rel="nofollow external" class="bo">NodeJS v0.10.4</a>
    </li>
    </ul>
    <p>ES6 offers new data structures previously not available in JavaScript. Before we jump into exploring two such data structure (Sets and Maps), let’s see how we can run ES6 syntax with NodeJS. <a href="http://nodejs.org/" rel="nofollow external" class="bo">Install NodeJS</a>; from here on, we will work in the command line. Firstly, we will check the NodeJS version installed, and then check which options will enable ES6 features with the command <code>node --v8-options | grep harmony</code>.</p>
    <pre>$ node --version&#x000A;    v0.10.4&#x000A;    &#x000A;    $ node --v8-options | grep harmony&#x000A;    --harmony_typeof (enable harmony semantics for typeof)&#x000A;    --harmony_scoping (enable harmony block scoping)&#x000A;    --harmony_modules (enable harmony modules (implies block scoping))&#x000A;    --harmony_proxies (enable harmony proxies)&#x000A;    --harmony_collections (enable harmony collections (sets, maps, and weak maps))&#x000A;    --harmony (enable all harmony features (except typeof))&#x000A;    </pre>
    <p>Next, start the NodeJS <a href="http://en.wikipedia.org/wiki/REPL" rel="nofollow external" class="bo">repl</a> and query which properties are available for Set and Maps. We will start the NodeJS repl with <code>node --harmony</code> to enable all ES6 features.</p>
    <pre>$ node --harmony&#x000A;    &gt; Object.getOwnPropertyNames(Set.prototype)&#x000A;    [ 'constructor',&#x000A;      'add',&#x000A;      'has',&#x000A;      'delete' ]&#x000A;    &gt; Object.getOwnPropertyNames(Map.prototype)&#x000A;    [ 'constructor',&#x000A;      'get',&#x000A;      'set',&#x000A;      'has',&#x000A;      'delete' ]&#x000A;    &gt; .exit&#x000A;    $&#x000A;    </pre>
    <h3>Sets</h3>
    <p>Sets are simple data structures that are similar to arrays, but each value is unique. Let’s create a new file, called <code>5-sets.js</code>, and insert some code to create, add, delete and query the new set that we will create. Also, note that we will add “Hippo” data twice, but in the set, it will be registered only once!</p>
    <pre>var engines = new Set(); // create new Set&#x000A;    &#x000A;    engines.add("Gecko"); // add to Set&#x000A;    engines.add("Trident");&#x000A;    engines.add("Webkit");&#x000A;    engines.add("Hippo");&#x000A;    engines.add("Hippo"); // note that Hippo is added twice&#x000A;    &#x000A;    console.log("Browser engines include Gecko? " + engines.has("Gecko"));    // true&#x000A;    console.log("Browser engines include Hippo? " + engines.has("Hippo"));    // true&#x000A;    console.log("Browser engines include Indigo? " + engines.has("Indigo"));   // false&#x000A;    &#x000A;    engines.delete("Hippo"); // delete item&#x000A;    console.log("Hippo is deleted. Browser engines include Hippo? " + engines.has("Hippo"));    // false&#x000A;    </pre>
    <p>Run the file in the node repl with the command <code>node --harmony 5-set.js</code>. Note that, even though “Hippo” was added twice to the set, upon deleting it, the set didn’t include it anymore. This once again illustrates that a set is a data structure that can only contain unique values.</p>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-set.png" style="max-width: 100%; height: auto;"></div>
    <h3>Maps</h3>
    <p>Maps are quite similar to JavaScript object key-value pairs. Using a unique key, we can retrieve the value. In ES6, the key can be any JavaScript data type and not just strings. That’s the interesting part! Let’s create a new file, called <code>5-map.js</code>, to try out the create, get and delete features:</p>
    <pre>var es6 = new Map(); // create new Map&#x000A;    &#x000A;    es6.set("edition", 6);        // key is string&#x000A;    es6.set(262, "standard");     // key is number&#x000A;    es6.set(undefined, "nah");    // key is undefined&#x000A;    &#x000A;    var hello = function() {console.log("hello");};&#x000A;    es6.set(hello, "Hello ES6!"); // key is function&#x000A;    &#x000A;    console.log( "Value of 'edition' exits? " + es6.has("edition") );     // true&#x000A;    console.log( "Value of 'year' exits? " + es6.has("years") );          // false&#x000A;    console.log( "Value of 262 exits? " + es6.has(262) );                 // true&#x000A;    console.log( "Value of undefined exits? " + es6.has(undefined) );     // true&#x000A;    console.log( "Value of hello() exits? " + es6.has(hello) );           // true&#x000A;    &#x000A;    es6.delete(undefined); // delete map&#x000A;    console.log( "Value of undefined exits? " + es6.has(undefined) );      // false&#x000A;    &#x000A;    console.log( es6.get(hello) ); // Hello ES6!&#x000A;    console.log( "Work is in progress for ES" + es6.get("edition") ); // Work is in progress for ES6&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-map.png" style="max-width: 100%; height: auto;"></div>
    <p>As shown with the ES6 collections features, NodeJS harmony option already supports others ES6 features such as block scoping, proxies and modules. Do try them out in NodeJS as well!</p>
    <hr>
    <h2> <span>Feature 6 -</span> Destructuring</h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <a href="http://wiki.ecmascript.org/doku.php?id=harmony:destructuring" rel="nofollow external" class="bo">Destructuring</a>
    </li>
    <li>
    <strong>Tool: </strong> <a href="http://www.mozilla.org/en-US/firefox/20.0.1/releasenotes/" rel="nofollow external" class="bo">Firefox browser 20.0</a>: Menu &gt; Tools &gt; Web developer &gt; Web Console</li>
    </ul>
    <p>In programming languages, the term “destructuring” denotes pattern matching. In ES6, we can do some pretty nifty pattern matching in arrays and objects that previously would have taken us more than one step. Let’s explore some of them by coding it out in Firefox web console.</p>
    <h3>Array destructuring</h3>
    <p>With array destructing, we can initialize variables at once, or even swap them instead of having the conventional way of creating a <code>var temp;</code> temporary variable.</p>
    <pre>var [ start, end ] = ["earth", "moon"] // initialize&#x000A;    console.log(start + " calling " + end); // earth calling moon&#x000A;    &#x000A;    [start, end] = [end, start] // variable swapping&#x000A;    console.log(start + " calling " + end); // moon calling earth&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-swap.png" style="max-width: 100%; height: auto;"></div>
    <p>Destructuring also becomes a useful shorthand when returning multiple values from a function, as we do not need to wrap around an object anymore. Also, to skip certain variables, just leave the array element empty:</p>
    <pre>function equinox() {&#x000A;      return [20, "March", 2013, 11, 02];&#x000A;    }&#x000A;    var [date, month, , ,] = equinox();&#x000A;    console.log("This year's equinox was on " + date + month); // This year's equinox was on 20March&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-destructure.png" style="max-width: 100%; height: auto;"></div>
    <h3>Object destructuring</h3>
    <p>Due to destructuring, variables can also be initialized from an object that is returned from a function even with deeply nested objects. Also, just like the array patterns, we can skip the ones not needed. Here’s the snippet of code that illustrates just this:</p>
    <pre>function equinox2() {&#x000A;      return {&#x000A;        date: 20,&#x000A;        month: "March",&#x000A;        year: 2013,&#x000A;        time: {&#x000A;          hour: 11, // nested&#x000A;          minute: 2&#x000A;        }&#x000A;      };&#x000A;    }&#x000A;    &#x000A;    var { date: d, month: m, time : { hour: h} } = equinox2();&#x000A;    // h has the value of the nested property while "year" and "minute" are skipped totally&#x000A;    &#x000A;    console.log("This year's equinox was on " + d + m + " at " + h); // This year's equinox was on 20March at 11&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-destructure-object.png" style="max-width: 100%; height: auto;"></div>
    <hr>
    <h2> <span>Feature 7 -</span> Rest Parameters and Spread Operators</h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <a href="http://wiki.ecmascript.org/doku.php?id=harmony:rest_parameters" rel="nofollow external" class="bo">Rest parameters</a> &amp; <a href="http://wiki.ecmascript.org/doku.php?id=harmony:spread" rel="nofollow external" class="bo">Spread operator</a>
    </li>
    <li>
    <strong>Tool: </strong> <a href="https://github.com/aaronfrost/grunt-traceur" rel="nofollow external" class="bo">Grunt plugin Traceur</a>
    </li>
    </ul>
    <h3>Rest parameters</h3>
    <p>In ES6, rest parameters allows us to easily use a few fixed parameters in a function, along with the rest of the trailing and variable number of parameters. We <a href="https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Functions_and_function_scope/arguments" rel="nofollow external" class="bo">already use <code>arguments</code></a>, which is an array-like object that defines the arguments passed to a function, but clearly we cannot use the array function to manipulate these arguments. With a clear syntax in ES6, it also moves the intent of the developer into the syntax level with three dots <code>...</code> to denote a variable number of arguments.</p>
    <p>Let’s try to use rest parameters in the ES6 syntax with <a href="http://gruntjs.com/getting-started" rel="nofollow external" class="bo">gruntjs</a> and its <a href="https://github.com/aaronfrost/grunt-traceur" rel="nofollow external" class="bo">plugin for the traceur transpiler</a>, which we used in the <a href="#class" rel="nofollow external" class="bo">previous section</a>.</p>
    <ol>
    <li>
    <p><a href="http://gruntjs.com/getting-started" rel="nofollow external" class="bo">Install grunt command line utility</a>:</p>
    <pre>    $ npm uninstall -g grunt&#x000A;        $ npm install -g grunt-cli&#x000A;        </pre>
    </li>
    <li>
    <p>Create a file, called <code>package.json</code>, which will define the various modules needed to run Grunt. Note that this list of dependencies includes the traceur plugin:</p>
    <pre>    {&#x000A;          "name": "rest-params",&#x000A;          "version": "0.1.0",&#x000A;          "devDependencies": {&#x000A;            "grunt": "0.4.1",&#x000A;            "grunt-traceur": "0.0.1"&#x000A;          }&#x000A;        }&#x000A;        </pre>
    </li>
    <li>
    <p>Create the <code>Gruntfile.js</code> which will contain just one task <code>traceur</code> that will convert ES6 syntax to today’s JavaScript. With this, we will be able to try out ES6 rest parameters.</p>
    <pre>    module.exports = function(grunt) {&#x000A;    &#x000A;          grunt.initConfig({&#x000A;            pkg: grunt.file.readJSON('package.json'),&#x000A;            traceur: {&#x000A;              custom: {&#x000A;                files:{&#x000A;                'js/': ['rest-spread.js']  // dest : 1&#x000A;                }&#x000A;              }&#x000A;            }&#x000A;          });&#x000A;    &#x000A;          grunt.loadNpmTasks('grunt-traceur');&#x000A;          grunt.registerTask('default', ['traceur']);&#x000A;    &#x000A;        };&#x000A;    &#x000A;        </pre>
    </li>
    <li>
    <p>Create a simple <code>index.html</code> to call the traceur-compiled JavaScript file, <code>js/rest-spread.js</code>:</p>
    <pre>    &lt;!DOCTYPE html&gt;&#x000A;        &lt;html&gt;&#x000A;        &lt;head&gt;&#x000A;          &lt;title&gt;ES6 Rest parameters&lt;/title&gt;&#x000A;        &lt;/head&gt;&#x000A;        &lt;body&gt;&#x000A;          &lt;script src="js/rest-spread.js"&gt;&lt;/script&gt;&#x000A;        &lt;/body&gt;&#x000A;        &lt;/html&gt;&#x000A;        </pre>
    </li>
    <li>
    <p>Most importantly, we’ll create the file <code>rest-spread.js</code>, which will contain the rest parameter syntax:</p>
    <pre>    function push(array, ...items) { // defining rest parameters with 3 dot syntax&#x000A;          items.forEach(function(item) {&#x000A;            array.push(item);&#x000A;            console.log( item );&#x000A;          });&#x000A;        }&#x000A;    &#x000A;        // 1 fixed + 4 variable parameters&#x000A;        var planets = [];&#x000A;        console.log("Inner planets of our Solar system are: " );&#x000A;        push(planets, "Mercury", "Venus", "Earth", "Mars"); // rest parameters&#x000A;        </pre>
    </li>
    <li>
    <p>Finally, we will run <code>grunt</code> in the command line, which will, by default, run the traceur task and create the file, <code>js/5-rest-spread.js</code>. Next, just view the file <code>index.html</code> in the browser console:</p>
    <pre>    $ npm install&#x000A;        $ grunt&#x000A;        ╰─$ grunt&#x000A;        Running "traceur:custom" (traceur) task&#x000A;        js/ [ 'rest-spread.js' ]&#x000A;        Compiling... js/&#x000A;        Compilation successful - js/&#x000A;        Writing... js/&#x000A;        js/rest-spread.js successful.&#x000A;        Writing successful - [object Object]&#x000A;        </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-rest.png" style="max-width: 100%; height: auto;"></div>
    </li>
    </ol>
    <h3>Spread operator</h3>
    <p>A spread operator is the opposite of rest parameters. When calling a function, we can pass in the fixed argument that is needed along with an array of a variable size with the familiar three dot syntax, to indicate the variable number of arguments.</p>
    <p>We will use the same project as the rest parameters above and append in the spread operator code to the file <code>rest-spread.js</code>. In the example below, the function requires six separate arguments. When calling the function, the data is passed as an array with the spread operator. Let’s see how the syntax looks, when calling the function with fixed arguments as well as a variable number of arguments:</p>
    <ol>
    <li>
    <p>Append the spread operator code to <code>rest-spread.js</code>:</p>
    <pre>    // Spread operator "...weblink"&#x000A;        function createURL (comment, path, protocol, subdomain, domain, tld) {&#x000A;              var shoutout = comment&#x000A;                + ": "&#x000A;                + protocol&#x000A;                + "://"&#x000A;                + subdomain&#x000A;                + "."&#x000A;                + domain&#x000A;                + "."&#x000A;                + tld&#x000A;                + "/"&#x000A;                + path;&#x000A;    &#x000A;          console.log( shoutout );&#x000A;        }&#x000A;    &#x000A;        var weblink = ["hypertext/WWW/TheProject.html", "http", "info", "cern", "ch"],&#x000A;          comment = "World's first Website";&#x000A;    &#x000A;        createURL(comment, ...weblink ); // spread operator&#x000A;    &#x000A;        </pre>
    </li>
    <li>
    <p>Run the traceur compile through the Grunt task in the command line, and view the file, <code>index.html</code>, in the browser:</p>
    <pre>    $ grunt&#x000A;        Running "traceur:custom" (traceur) task&#x000A;        js/ [ 'rest-spread.js' ]&#x000A;        Compiling... js/&#x000A;        Compilation successful - js/&#x000A;        Writing... js/&#x000A;        js/rest-spread.js successful.&#x000A;        Writing successful - [object Object]&#x000A;    &#x000A;        Done, without errors.&#x000A;        </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-spread.png" style="max-width: 100%; height: auto;"></div>
    </li>
    </ol>
    <p>If you’re already using GruntJS as a build tool in your current project, it will be easy to integrate it with ES6 plugins. So do <a href="http://gruntjs.com/plugins/es6" rel="nofollow external" class="bo">try out other GruntJS ES6-related plugins</a> to compile ES6 syntax to current JavaScript.</p>
    <hr>
    <h2> <span>Feature 8 -</span> Iterators</h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <a href="http://wiki.ecmascript.org/doku.php?id=harmony:iterators" rel="nofollow external" class="bo">Iterator</a>
    </li>
    <li>
    <strong>Tool: </strong> <a href="http://www.mozilla.org/en-US/firefox/20.0.1/releasenotes/" rel="nofollow external" class="bo">Firefox browser 20.0</a>: Menu &gt; Tools &gt; Web developer &gt; Web Console</li>
    </ul>
    <p>JavaScript offers <code>for-in</code> for iteration, but it <a href="http://wiki.ecmascript.org/doku.php?id=harmony:iterators#overview" rel="nofollow external" class="bo">has some limitations</a>. For example, in an array iteration, the results with a <code>for-in</code> loop will give us the indexes and not the values. Let’s take a look at the code below to illustrate this:</p>
    <pre>var planets = ["Mercury", "Venus", "Earth", "Mars"];&#x000A;    for (p in planets) {&#x000A;      console.log(p); // 0,1,2,3&#x000A;    }&#x000A;    &#x000A;    var es6 = {&#x000A;      edition: 6,&#x000A;      committee: "TC39",&#x000A;      standard: "ECMA-262"&#x000A;    };&#x000A;    for (e in es6) {&#x000A;      console.log(e); // edition, committee, standard&#x000A;    }&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-forin.png" style="max-width: 100%; height: auto;"></div>
    <p>Let’s try the same concept, but, this time, with <code>for-of</code> with an array, a set and a map:</p>
    <pre>var planets = ["Mercury", "Venus", "Earth", "Mars"];&#x000A;    for (p of planets) {&#x000A;      console.log(p); // Mercury, Venus, Earth, Mars&#x000A;    }&#x000A;    &#x000A;    var engines = Set(["Gecko", "Trident", "Webkit", "Webkit"]);&#x000A;    for (var e of engines) {&#x000A;        console.log(e);&#x000A;        // Set only has unique values, hence Webkit shows only once&#x000A;    }&#x000A;    &#x000A;    var es6 = new Map();&#x000A;    es6.set("edition", 6);&#x000A;    es6.set("committee", "TC39");&#x000A;    es6.set("standard", "ECMA-262");&#x000A;    for (var [name, value] of es6) {&#x000A;      console.log(name + ": " + value);&#x000A;    }&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-forof.png" style="max-width: 100%; height: auto;"></div>
    <hr>
    <h2> <span>Feature 9 -</span> Array Comprehension</h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <a href="http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions" rel="nofollow external" class="bo">Array comprehension</a>
    </li>
    <li>
    <strong>Tool: </strong> <a href="http://www.mozilla.org/en-US/firefox/20.0.1/releasenotes/" rel="nofollow external" class="bo">Firefox browser 20.0</a>: Menu &gt; Tools &gt; Web developer &gt; Web Console</li>
    </ul>
    <p>Array comprehensions give us a shorthand syntax to manipulate each of the array contents in a certain pattern. It is very similar to the <code>map()</code> or <code>filter()</code> methods available in the Array object. Let’s examine how we are using <code>map()</code></p>
    <pre>var temperature = [0, 37, 100];&#x000A;    function degToKelvin(deg) {&#x000A;      return deg + 273;&#x000A;    }&#x000A;    temperature.map(degToKelvin); // [273, 310, 373]&#x000A;    </pre>
    <p>Let's run through the same feature in Firefox to see the shorthand syntax in ES6 to create arrays with as many as three loops to create possible solutions for the game, <a href="http://en.wikipedia.org/wiki/Cluedo" rel="nofollow external" class="bo">Cluedo</a>:</p>
    <pre>// Array created with 1 loop&#x000A;    var temperature = [0, 37, 100];&#x000A;    [t + 273 for (t of temperature)]; // [273, 310, 373]&#x000A;    &#x000A;    // Array created with 3 loops&#x000A;    var suspects = ["Miss Scarlet", "Colonel Mustard"],&#x000A;      weapons = ["Candlestick", "Dagger"],&#x000A;      rooms = ["Kitchen", "Ballroom"];&#x000A;    &#x000A;    [(console.log(s + " with a " + w + " in the " + r)) for (s of suspects) for (w of weapons) for (r of rooms)];&#x000A;    </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-array-comprehension.png" style="max-width: 100%; height: auto;"></div>
    <hr>
    <h2> <span>Feature 10 -</span> Modules</h2>
    <ul>
    <li>
    <strong>Documentation: </strong> <a href="http://wiki.ecmascript.org/doku.php?id=harmony:modules" rel="nofollow external" class="bo">Modules</a>, <a href="http://wiki.ecmascript.org/doku.php?id=harmony:modules_examples" rel="nofollow external" class="bo">Modules examples</a>, <a href="http://wiki.ecmascript.org/doku.php?id=harmony:module_loaders" rel="nofollow external" class="bo">Modules loaders</a>
    </li>
    <li>
    <strong>Tool: </strong> <a href="http://square.github.io/es6-module-transpiler/" rel="nofollow external" class="bo">ES6 Module transpiler</a>
    </li>
    </ul>
    <p>In programming languages, modules perform isolated discrete functions and are independent of one another. This helps to not only build reusable components across projects, but also keeps errors isolated to the parts related to the current project. We have been <a href="http://addyosmani.com/writing-modular-js/" rel="nofollow external" class="bo">creating modules in JavaScript typically with AMD or CommonJS</a>. Let's create a simple module using the ES6 syntax and <a href="http://square.github.io/es6-module-transpiler/" rel="nofollow external" class="bo">ES6 Module transpiler</a>.</p>
    <ol>
    <li>
    <p>First, let's create the HTML file, <code>index.html</code>, that will call the essential JavaScripts. We'll be using <a href="http://requirejs.org/" rel="nofollow external" class="bo">RequireJS</a> as an <a href="http://en.wikipedia.org/wiki/Asynchronous_module_definition" rel="nofollow external" class="bo">AMD</a> loader; hence, we refer to <a href="http://cdnjs.com/" rel="nofollow external" class="bo">a CDN copy</a> of the latest RequireJS file. Next, we also add the attribute, <code>data-main</code>, on the <code>script</code> tag to tell RequireJS to load the <code>js/init.js</code> file.</p>
    <pre>    &lt;!DOCTYPE html&gt;&#x000A;        &lt;!doctype html&gt;&#x000A;        &lt;html lang="en"&gt;&#x000A;        &lt;head&gt;&#x000A;          &lt;meta charset="UTF-8"&gt;&#x000A;          &lt;title&gt;ES6 Modules&lt;/title&gt;&#x000A;        &lt;/head&gt;&#x000A;        &lt;body&gt;&#x000A;          &lt;script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.5/require.min.js" data-main="js/init"&gt;&lt;/script&gt;&#x000A;        &lt;/body&gt;&#x000A;        &lt;/html&gt;&#x000A;        </pre>
    </li>
    <li>
    <p>Now, we will create the file, <code>js/init.js</code>, which will just invoke the <code>js/main.js</code> file:</p>
    <pre>    require(['main'],&#x000A;          function(){&#x000A;          });&#x000A;        </pre>
    </li>
    <li>
    <p>Create the module, <code>circle</code>, in the file, <code>in/circle.js</code>, in the ES6 syntax. This module exports two functions:</p>
    <pre>    export function area(radius) {&#x000A;          return Math.PI * radius * radius;&#x000A;        }&#x000A;    &#x000A;        export function circumference(radius) {&#x000A;          return 2 * Math.PI * radius;&#x000A;        }&#x000A;        </pre>
    </li>
    <li>
    <p>Create the file, <code>in/main.js</code>, that will import the module <code>circle</code> so that we can use the functions of that particular module. Notice the <code>import</code> syntax:</p>
    <pre>    import { area, circumference } from 'circle';&#x000A;    &#x000A;        console.log("Area of the circle: " + area(4) + " meter squared");&#x000A;        console.log("Circumference of the circle: " + circumference(14) + " meters");&#x000A;        </pre>
    </li>
    <li>
    <p>At this point, the folder structure is shown below. We'll use the ES6 Module transpiler to create ES5 compatible code with two newly created files: <code>js/circle.js</code> and <code>js/main.js</code>.</p>
    <pre>    $ tree&#x000A;        .&#x000A;        |-- in&#x000A;        |   |-- circle.js&#x000A;        |   `-- main.js&#x000A;        |-- index.html&#x000A;        `-- js&#x000A;            `-- init.js&#x000A;        </pre>
    </li>
    <li>
    <p><a href="https://github.com/square/es6-module-transpiler#executable" rel="nofollow external" class="bo">Install the ES6 Module Transpiler</a>:</p>
    <pre>    $ npm install <a href="https://github.com/square/es6-module-transpiler.git">https://github.com/square/es6-module-transpiler.git</a>&#x000A;        $ compile-modules --help&#x000A;        </pre>
    </li>
    <li>
    <p>Finally, we will transpile these two files. Navigate to the folder, <code>in</code>, from the command line:</p>
    <pre>    $ compile-modules circle.js --type amd --to ../js&#x000A;        $ compile-modules main.js --type amd --to ../js&#x000A;        $ cd ..&#x000A;        $ tree&#x000A;        .&#x000A;        |-- in&#x000A;        |   |-- circle.js&#x000A;        |   `-- main.js&#x000A;        |-- index.html&#x000A;        `-- js&#x000A;            |-- circle.js&#x000A;            |-- init.js&#x000A;            `-- main.js&#x000A;        </pre>
    </li>
    <li>
    <p>Do look at the transpiled code in the files <code>js/circle.js</code> and <code>js/main.js</code>. We will now open up the file, <code>index.html</code>, in the browser to see modules in action! We will need to use a web server to run this file. I'm using the <a href="http://www.linuxjournal.com/content/tech-tip-really-simple-http-server-python" rel="nofollow external" class="bo">Python SimpleHTTPServer</a>. Navigate to the command line in the root of the file, <code>index.html</code>:</p>
    <pre>    $ python -m SimpleHTTPServer 8000&#x000A;        </pre>
    <div><img src="http://cdn.tutsplus.com/net.tutsplus.com/uploads/2013/05/es6-modules.png" style="max-width: 100%; height: auto;"></div>
    </li>
    </ol>
    <hr>
    <h2>Resources</h2>
    <p>Many of our web development community members have openly shared about ES6 and what's coming up. I highly recommend going through their blog categories related to ES6:</p>
    <ul>
    <li><a href="https://brendaneich.com/?s=ecmascript" rel="nofollow external" class="bo">Brendan Eich</a></li>
    <li><a href="http://addyosmani.com/blog/?s=ecmascript" rel="nofollow external" class="bo">Addy Osmani</a></li>
    <li><a href="http://ariya.ofilabs.com/?s=ecmascript" rel="nofollow external" class="bo">Ariya Hidayat</a></li>
    <li><a href="http://www.nczonline.net/blog/?s=ecmascript" rel="nofollow external" class="bo">Nicholas Zakas</a></li>
    <li><a href="http://www.2ality.com/search/label/esnext" rel="nofollow external" class="bo">Axel Rauschmayer</a></li>
    <li><a href="http://bbenvie.com/" rel="nofollow external" class="bo">Brandon Benvie</a></li>
    </ul>
    <p>And, for some further reading:</p>
    <ul>
    <li><a href="https://developer.mozilla.org/en-US/docs/JavaScript/ECMAScript_6_support_in_Mozilla" rel="nofollow external" class="bo">ECMAScript 6 support in Mozilla</a></li>
    <li><a href="http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts" rel="nofollow external" class="bo">Draft specification for ES.next</a></li>
    <li>
    <a href="http://www.youtube.com/watch?v=u4IdoBU1uKE" rel="nofollow external" class="bo">The Future of JavaScript</a>, a video by Dave Herman</li>
    <li>ECMAScript 6 - The Refined Parts (<a href="https://www.youtube.com/watch?v=Dt0f2XdvriQ" rel="nofollow external" class="bo">video</a> and <a href="https://speakerdeck.com/kitcambridge/es-6-the-refined-parts" rel="nofollow external" class="bo">slides</a>) by Kit Cambridge</li>
    <li><a href="https://twitter.com/esdiscuss" rel="nofollow external" class="bo">Latest Tweets on ES mailing list</a></li>
    <li><a href="https://dl.dropboxusercontent.com/u/3531958/es6-favorite-parts/index.html#/" rel="nofollow external" class="bo">es6 - my fav parts</a></li>
    <li><a href="http://bbenvie.com/articles/2013-01-06/JavaScript-ES6-Has-Tail-Call-Optimization" rel="nofollow external" class="bo">ES6 has proper tail calls</a></li>
    <li><a href="http://webreflection.blogspot.de/2013/01/the-power-of-getters.html" rel="nofollow external" class="bo">Power of Getters</a></li>
    <li><a href="http://www.slideshare.net/dmitrysoshnikov/falsyvalues-dmitry-soshnikov-ecmascript-6" rel="nofollow external" class="bo">ECMAScript 6</a></li>
    <li>
    <a href="https://speakerdeck.com/dherman/es6-deep-dive" rel="nofollow external" class="bo">ES6 deep Dive</a> by Dave Herman</li>
    </ul>
    <hr>
    <h2>Play with ES6 Today</h2>
    <p>There you have it: ten features of ES6 with tools that allow us to code with the new syntax today. I hope this has made you more excited about what's to come! Please note that, since the standardization work is in progress, the syntax, features and compliances might change. Nonetheless, it's definitely worth the effort to dig in sooner than later.</p>
    </div>
]]>
</Body>
<Summary>Today, ECMAScript 6 is in the process of being finalized. ECMAScript is the foundation of JavaScript and, hence, exploring the proposed features today also means that we get a sneak peak at how we...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/U00r_iCrOQM/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/29147/guest@my.umbc.edu/965ad00269281c030388c22eb92e906c/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>news</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 07 May 2013 15:25:20 -0400</PostedAt>
<EditAt>Tue, 07 May 2013 15:25:20 -0400</EditAt>
</NewsItem>

</News>
