<?xml version="1.0"?>
<News hasArchived="true" page="7700" pageCount="10779" pageSize="10" timestamp="Mon, 31 Aug 2026 12:09:24 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7700&amp;range=2">
<NewsItem contentIssues="true" id="42573" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42573">
<Title>Bits | Machine Learning: Can You Trust &#8216;Secure&#8217; Messaging Apps?</Title>
<Body>
<![CDATA[
    <div class="html-content">Messaging apps and security are two of the hottest topics in tech, though it’s not always easy to be sure you can trust the wave of supposedly secure messaging services out now.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fcan-you-trust-secure-messaging-apps%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+%7C+Machine+Learning%3A+Can+You+Trust+%E2%80%98Secure%E2%80%99+Messaging+Apps%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fcan-you-trust-secure-messaging-apps%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+%7C+Machine+Learning%3A+Can+You+Trust+%E2%80%98Secure%E2%80%99+Messaging+Apps%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fcan-you-trust-secure-messaging-apps%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+%7C+Machine+Learning%3A+Can+You+Trust+%E2%80%98Secure%E2%80%99+Messaging+Apps%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fcan-you-trust-secure-messaging-apps%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+%7C+Machine+Learning%3A+Can+You+Trust+%E2%80%98Secure%E2%80%99+Messaging+Apps%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fcan-you-trust-secure-messaging-apps%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+%7C+Machine+Learning%3A+Can+You+Trust+%E2%80%98Secure%E2%80%99+Messaging+Apps%3F" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/email.png" style="max-width: 100%; height: auto;"></a>
    </td></tr></tbody></table></div>
    <br><br><a href="http://da.feedsportal.com/r/191801503663/u/0/f/640387/c/34625/s/385efab0/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801503663/u/0/f/640387/c/34625/s/385efab0/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801503663/u/0/f/640387/c/34625/s/385efab0/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801503663/u/0/f/640387/c/34625/s/385efab0/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801503663/u/0/f/640387/c/34625/s/385efab0/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801503663/u/0/f/640387/c/34625/s/385efab0/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801503663/u/0/f/640387/c/34625/s/385efab0/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801503663/u/0/f/640387/c/34625/s/385efab0/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Messaging apps and security are two of the hottest topics in tech, though it’s not always easy to be sure you can trust the wave of supposedly secure messaging services out now.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/385efab0/sc/4/l/0Lbits0Bblogs0Bnytimes0N0C20A140C0A30C190Ccan0Eyou0Etrust0Esecure0Emessaging0Eapps0C0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42573/guest@my.umbc.edu/5ba63006f6c8437f47df3513c2849424/api/pixel</TrackingUrl>
<Tag>computer-security</Tag>
<Tag>cuban-mark</Tag>
<Tag>instant-messaging</Tag>
<Tag>machine-learning</Tag>
<Tag>new</Tag>
<Tag>nsa</Tag>
<Tag>schneier-bruce</Tag>
<Tag>security</Tag>
<Tag>security-and-warning-systems</Tag>
<Tag>snapchat-inc</Tag>
<Tag>technology</Tag>
<Tag>text-messaging</Tag>
<Tag>whatsapp-inc</Tag>
<Tag>wickr</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 12:22:06 -0400</PostedAt>
<EditAt>Thu, 20 Mar 2014 07:29:25 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42567" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42567">
<Title>Exploring the JavaScript Device APIs</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><em>Photograph by <a href="https://www.flickr.com/photos/adactio/6153481666/" rel="nofollow external" class="bo">Jeremy Keith (adactio)</a></em></p>
    <p>The mobile revolution has completely changed how people access the web. It’s only natural then that the web should evolve to better suit the plethora of devices on which it’s now accessed.</p>
    <p>When the web was first created 25 years ago, it was the child of the “workstation” computer. Over those 25 years, we’ve seen the web proliferate to desktop PCs, laptops, mobile phones, tablets, and now even fashion accessories like watches. There’s no questioning that the web is here to stay. But what will the future look like?</p>
    <p>In this blog post, I want to take you on a journey through some of the JavaScript device APIs that are extending the functionality of the web to better match the capabilities of modern devices.</p>
    <hr>
    <p><strong>Note</strong>: Some of the technologies you’ll learn about in this post are already implemented in browsers, but others are not. I’ve included examples of how to use each of the APIs, and done my best to provide up-to-date browser support information.</p>
    <hr>
    <h2>Geolocation</h2>
    <p>The Geolocation API allows you to pinpoint the user’s location using the positioning capabilities of their device. Most of the time this will be done using GPS, but less accurate methods, such as WiFi-based positioning, may also be used.</p>
    <pre><code>// Get the location.&#x000A;    navigator.geolocation.getCurrentPosition(function(position) {&#x000A;        // Get the positioning coordinates.&#x000A;        var lat = position.coords.latitude;&#x000A;        var lon = position.coords.longitude;&#x000A;    &#x000A;        // Do something interesting...&#x000A;    });</code></pre>
    <p><a href="http://www.w3.org/TR/geolocation-API/" rel="nofollow external" class="bo">W3C Specification</a> <a href="http://blog.teamtreehouse.com/getting-started-with-the-geolocation-api" rel="nofollow external" class="bo">Learn about the Geolocation API</a></p>
    <p>Specification Status: <a href="http://www.w3.org/2005/10/Process-20051014/tr.html#RecsW3C" rel="nofollow external" class="bo">W3C Recommendation</a></p>
    <h3>Browser Support For The Geolocation API</h3>
    <p>The geolocation specification has been around for quite a while now. All modern web browsers include support for the API (including on mobile).</p>
    <table>
    <thead>
    <tr>
    <th>IE</th>
    <th>Firefox</th>
    <th>Chrome</th>
    <th>Safari</th>
    <th>Opera</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>9+</td>
    <td>3.5+</td>
    <td>4.0+</td>
    <td>5.0+</td>
    <td>10.6+</td>
    </tr>
    </tbody>
    </table>
    <table>
    <thead>
    <tr>
    <th>Android Browser</th>
    <th>Blackberry</th>
    <th>Chrome for Android</th>
    <th>Firefox for Android</th>
    <th>IE Mobile</th>
    <th>Safari</th>
    <th>Opera Mobile</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>2.1</td>
    <td>7</td>
    <td>33</td>
    <td>26</td>
    <td>10</td>
    <td>3.2</td>
    <td>11</td>
    </tr>
    </tbody>
    </table>
    <p>Source: <a href="http://caniuse.com/#feat=geolocation" rel="nofollow external" class="bo">http://caniuse.com/#feat=geolocation</a></p>
    <h2>Device Orientation</h2>
    <p>The <a href="http://www.w3.org/TR/orientation-event/#deviceorientation" rel="nofollow external" class="bo">DeviceOrientation</a> and <a href="http://www.w3.org/TR/orientation-event/#devicemotion" rel="nofollow external" class="bo">DeviceMotion</a> events provide a way to create applications that are aware of the physical positioning of a device. This is especially useful when building HTML5 games.</p>
    <pre><code>// Check to make sure the browser supprots DeviceOrientationEvents&#x000A;    if (window.DeviceOrientationEvent) {&#x000A;      // Create an event listener&#x000A;      window.addEventListener('deviceorientation', function(event) {&#x000A;          // Get the left-to-right tilt (in degrees).&#x000A;        var tiltLR = event.gamma;&#x000A;    &#x000A;        // Get the front-to-back tilt (in degrees).&#x000A;        var titleFB = event.beta;&#x000A;    &#x000A;          // Get the direction of the device (in degrees).&#x000A;        var direction = event.alpha;&#x000A;      });&#x000A;    }</code></pre>
    <p><a href="http://www.w3.org/TR/orientation-event/" rel="nofollow external" class="bo">W3C Specification</a> <a href="http://www.html5rocks.com/en/tutorials/device/orientation/" rel="nofollow external" class="bo">Learn about the Device Orientation API</a></p>
    <p>Specification Status: <a href="http://www.w3.org/2005/10/Process-20051014/tr.html#RecsWD" rel="nofollow external" class="bo">Working Draft</a></p>
    <h3>Browser Support For The DeviceOrientation API</h3>
    <p>Browser support for the DeviceOrientation and DeviceMotion events is pretty good. Safari is the only desktop browser that doesn’t currently include support.</p>
    <table>
    <thead>
    <tr>
    <th>IE</th>
    <th>Firefox</th>
    <th>Chrome</th>
    <th>Safari</th>
    <th>Opera</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>11</td>
    <td>6+</td>
    <td>7+</td>
    <td>-</td>
    <td>15+</td>
    </tr>
    </tbody>
    </table>
    <p>IE is the only mobile browser without support for the DeviceOrientation and DeviceMotion events.</p>
    <table>
    <thead>
    <tr>
    <th>Android Browser</th>
    <th>Blackberry</th>
    <th>Chrome for Android</th>
    <th>Firefox for Android</th>
    <th>IE Mobile</th>
    <th>Safari</th>
    <th>Opera Mobile</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>3+</td>
    <td>10+</td>
    <td>33+</td>
    <td>26+</td>
    <td>-</td>
    <td>4.2+</td>
    <td>12+</td>
    </tr>
    </tbody>
    </table>
    <p>Source: <a href="http://caniuse.com/#feat=deviceorientation" rel="nofollow external" class="bo">http://caniuse.com/#feat=deviceorientation</a></p>
    <h2>Media Capture and Streams</h2>
    <p>Almost everything seems to have a camera on it these days: phones, tablets, glasses, and more. With the <a href="http://www.w3.org/TR/mediacapture-streams/#dom-navigator-getusermedia" rel="nofollow external" class="bo">Media Capture and Streams API</a> you can get access to the device camera using JavaScript.</p>
    <p>Coupled with the power of <a href="http://www.webrtc.org/" rel="nofollow external" class="bo">WebRTC</a>, this enables some pretty cool applications like real-time video conferencing without the need for third-party plugins.</p>
    <pre><code>// Request the camera.&#x000A;    navigator.getUserMedia(&#x000A;        // Constraints&#x000A;        {&#x000A;            video: true&#x000A;        },&#x000A;        // Success Callback&#x000A;        function(localMediaStream) {&#x000A;              // Get a reference to the video element on the page.&#x000A;            var vid = document.getElementById('camera-stream');&#x000A;    &#x000A;            // Create an object URL for the video stream and use this &#x000A;            // to set the video source.&#x000A;            vid.src = window.URL.createObjectURL(localMediaStream);&#x000A;        },&#x000A;        // Error Callback&#x000A;        function(err) {&#x000A;            // Log the error to the console.&#x000A;            console.log('The following error occurred when trying to use getUserMedia: ' + err);&#x000A;        }&#x000A;    );</code></pre>
    <p><a href="http://www.w3.org/TR/mediacapture-streams/" rel="nofollow external" class="bo">W3C Specification</a> <a href="http://blog.teamtreehouse.com/accessing-the-device-camera-with-getusermedia" rel="nofollow external" class="bo">Learn about the Media Capture</a></p>
    <p>Specification Status: <a href="http://www.w3.org/2005/10/Process-20051014/tr.html#RecsWD" rel="nofollow external" class="bo">Working Draft</a></p>
    <h3>Browser Support For Media Capture</h3>
    <p>Browser support for the Media Capture and Streams API is growing. Firefox, Chrome, and Opera currently include support in their desktop browsers.</p>
    <table>
    <thead>
    <tr>
    <th>IE</th>
    <th>Firefox</th>
    <th>Chrome</th>
    <th>Safari</th>
    <th>Opera</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>17+</td>
    <td>21+</td>
    <td>-</td>
    <td>12.0-12.1 / 18.0+</td>
    </tr>
    </tbody>
    </table>
    <p>On mobile, the Media Capture and Streams API is supported in the Blackberry browser, Chrome for Android, Firefox for Android, and Opera Mobile.</p>
    <table>
    <thead>
    <tr>
    <th>Android Browser</th>
    <th>Blackberry</th>
    <th>Chrome for Android</th>
    <th>Firefox for Android</th>
    <th>IE Mobile</th>
    <th>Safari</th>
    <th>Opera Mobile</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>10+</td>
    <td>33+</td>
    <td>26+</td>
    <td>-</td>
    <td>-</td>
    <td>12+</td>
    </tr>
    </tbody>
    </table>
    <p>Source: <a href="http://caniuse.com/#feat=stream" rel="nofollow external" class="bo">http://caniuse.com/#feat=stream</a></p>
    <h2>Vibration</h2>
    <p>The <a href="http://www.w3.org/TR/vibration/" rel="nofollow external" class="bo">Vibration API</a> allows developers to provide non-audible feedback to the user by harnessing the devices vibration motor.</p>
    <pre><code>// Vibrate for 1 second (1000 milliseconds).&#x000A;    navigator.vibrate(1000);&#x000A;    &#x000A;    // Vibrate in sequence.&#x000A;    navigator.vibrate([500, 250, 500]);</code></pre>
    <p>This API is useful when building HTML5 games, or for making applications accessible to users with hearing impairments.</p>
    <p><a href="http://www.w3.org/TR/vibration/" rel="nofollow external" class="bo">W3C Specification</a> <a href="http://davidwalsh.name/vibration-api" rel="nofollow external" class="bo">Learn about the Vibration API</a></p>
    <p>Specification Status: <a href="http://www.w3.org/2005/10/Process-20051014/tr.html#RecsWD" rel="nofollow external" class="bo">Last Call Working Draft</a></p>
    <h3>Browser Support for The Vibration API</h3>
    <p>The Vibration API is supported in Firefox, Chrome, and Opera on the desktop. (Although the device will, of course, need to have a vibration motor for this to work.)</p>
    <table>
    <thead>
    <tr>
    <th>IE</th>
    <th>Firefox</th>
    <th>Chrome</th>
    <th>Safari</th>
    <th>Opera</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>11+</td>
    <td>30+</td>
    <td>-</td>
    <td>17+</td>
    </tr>
    </tbody>
    </table>
    <p>On mobile, the Vibration API is supported in the Android and Blackberry browsers, as well as in Chrome and Firefox for Android, and Opera Mobile.</p>
    <table>
    <thead>
    <tr>
    <th>Android Browser</th>
    <th>Blackberry</th>
    <th>Chrome for Android</th>
    <th>Firefox for Android</th>
    <th>IE Mobile</th>
    <th>Safari</th>
    <th>Opera Mobile</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>4.4+</td>
    <td>10+</td>
    <td>33+</td>
    <td>26+</td>
    <td>-</td>
    <td>-</td>
    <td>16+</td>
    </tr>
    </tbody>
    </table>
    <p>Source: <a href="http://caniuse.com/#feat=vibration" rel="nofollow external" class="bo">http://caniuse.com/#feat=vibration</a></p>
    <h2>Ambient Light</h2>
    <p>The <a href="http://www.w3.org/TR/ambient-light/" rel="nofollow external" class="bo">Ambient Light API</a> allows developers to access the light sensor on the device.</p>
    <p>With the increasing popularity of bright, minimalist designs, many developers have added a “night mode” to their apps to make them easier to use in dark surroundings. You could use the data from the Ambient Light API to automatically switch between “day” and “night” modes.</p>
    <pre><code>window.addEventListener('devicelight', function(event) {&#x000A;        // Get the ambient light level in lux.&#x000A;        var lightLevel = event.value;&#x000A;    });</code></pre>
    <p><a href="http://www.w3.org/TR/ambient-light/" rel="nofollow external" class="bo">W3C Specification</a> <a href="https://developer.mozilla.org/en-US/docs/Web/API/DeviceLightEvent" rel="nofollow external" class="bo">Learn about the Ambient Light API</a></p>
    <p>Specification Status: <a href="http://www.w3.org/2005/10/Process-20051014/tr.html#RecsCR" rel="nofollow external" class="bo">Candidate Recommendation</a></p>
    <h3>Browser Support for The Ambient Light API</h3>
    <p>The Ambient Light API is currently only supported in Firefox 22+ on the Mac.</p>
    <table>
    <thead>
    <tr>
    <th>IE</th>
    <th>Firefox</th>
    <th>Chrome</th>
    <th>Safari</th>
    <th>Opera</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>22.0 (Mac only)</td>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    </tr>
    </tbody>
    </table>
    <p>Only Firefox for Android includes support on mobile.</p>
    <table>
    <thead>
    <tr>
    <th>Android Browser</th>
    <th>Blackberry</th>
    <th>Chrome for Android</th>
    <th>Firefox for Android</th>
    <th>IE Mobile</th>
    <th>Safari</th>
    <th>Opera Mobile</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    <td>15</td>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    </tr>
    </tbody>
    </table>
    <p>Source: <a href="https://developer.mozilla.org/en-US/docs/Web/API/DeviceLightEvent" rel="nofollow external" class="bo">https://developer.mozilla.org/en-US/docs/Web/API/DeviceLightEvent</a></p>
    <h2>Proximity Events</h2>
    <p>Many devices have proximity sensors that can feed back data about objects that are close to the device. Proximity events gives developers access to this data for use in their web applications.</p>
    <p>There are two different types of proximity events, <code>DeviceProximityEvent</code> and <code>UserProximityEvent</code>. <code>DeviceProximityEvent</code> is the more accurate of the two, providing data about the distance an object is from the device as well as the sensors field of view. The <code>UserProximityEvent</code> only provides a boolean attribute (<code>near</code>) to indicate if an object is close to the device or not.</p>
    <pre><code>// An event listener for a DeviceProximityEvent.&#x000A;    window.addEventListener('deviceproximity', function(event) {&#x000A;        // The maximum distance the sensor covers (in cm).&#x000A;        var max = event.max;&#x000A;    &#x000A;        // The minimum distance the sensor covers (in cm).&#x000A;        var min = event.min;&#x000A;    &#x000A;        // The device proximity (in cm).&#x000A;        var proximity = event.value;&#x000A;    });&#x000A;    &#x000A;    // An event listener for a UserProximityEvent.&#x000A;    window.addEventListener('userproximity', function(event) {&#x000A;        if (event.near) {&#x000A;            // Do something.&#x000A;        } else {&#x000A;            // Do something else.&#x000A;        }&#x000A;    });</code></pre>
    <p><a href="http://www.w3.org/TR/proximity/" rel="nofollow external" class="bo">W3C Specification</a> <a href="https://developer.mozilla.org/en-US/docs/WebAPI/Proximity" rel="nofollow external" class="bo">Learn about Proximity Events</a></p>
    <p>Specification Status: <a href="http://www.w3.org/2005/10/Process-20051014/tr.html#RecsCR" rel="nofollow external" class="bo">Candidate Recommendation</a></p>
    <h3>Browser Support for Proximity Events</h3>
    <p>Proximity events are currently only supported in Firefox (desktop) and Firefox for Android.</p>
    <table>
    <thead>
    <tr>
    <th>IE</th>
    <th>Firefox</th>
    <th>Chrome</th>
    <th>Safari</th>
    <th>Opera</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>Yes</td>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    </tr>
    </tbody>
    </table>
    <table>
    <thead>
    <tr>
    <th>Android Browser</th>
    <th>Blackberry</th>
    <th>Chrome for Android</th>
    <th>Firefox for Android</th>
    <th>IE Mobile</th>
    <th>Safari</th>
    <th>Opera Mobile</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    <td>15</td>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    </tr>
    </tbody>
    </table>
    <p>Source: <a href="https://developer.mozilla.org/en-US/docs/WebAPI/Proximity" rel="nofollow external" class="bo">https://developer.mozilla.org/en-US/docs/WebAPI/Proximity</a></p>
    <h2>Battery Status</h2>
    <p>The <a href="http://www.w3.org/TR/battery-status/" rel="nofollow external" class="bo">Battery Status API</a> gives developers information about the device’s current power status. The <code>BatteryManager</code> object offers information about the current charge level, whether the device is charging, and how much time is left until the device runs out of juice and powers down.</p>
    <pre><code>// Get the current power level.&#x000A;    navigator.battery.level;&#x000A;    &#x000A;    // Get the charging status (boolean).&#x000A;    navigator.battery.charging;&#x000A;    &#x000A;    // Find out how long until the battery is charged.&#x000A;    navigator.battery.chargingTime;&#x000A;    &#x000A;    // Find out how long until the battery is empty.&#x000A;    navigator.battery.dischargingTime;</code></pre>
    <p><a href="http://www.w3.org/TR/battery-status/" rel="nofollow external" class="bo">W3C Specification</a> <a href="http://blog.teamtreehouse.com/exploring-battery-status-api" rel="nofollow external" class="bo">Learn about the Battery API</a></p>
    <h3>Browser Support for The Battery Status API</h3>
    <p>Currently the Battery Status API is only supported in Firefox (desktop) and Firefox for Android. <a href="http://src.chromium.org/viewvc/blink?view=revision&amp;revision=168632" rel="nofollow external" class="bo">Work is being done</a> to add this functionality to blink, but there’s no indication of exactly when this will make it into Chrome or Opera.</p>
    <table>
    <thead>
    <tr>
    <th>IE</th>
    <th>Firefox</th>
    <th>Chrome</th>
    <th>Safari</th>
    <th>Opera</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>10+</td>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    </tr>
    </tbody>
    </table>
    <table>
    <thead>
    <tr>
    <th>Android Browser</th>
    <th>Blackberry</th>
    <th>Chrome for Android</th>
    <th>Firefox for Android</th>
    <th>IE Mobile</th>
    <th>Safari</th>
    <th>Opera Mobile</th>
    </tr>
    </thead>
    <tbody>
    <tr>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    <td>10</td>
    <td>-</td>
    <td>-</td>
    <td>-</td>
    </tr>
    </tbody>
    </table>
    <p>Source: <a href="https://developer.mozilla.org/en-US/docs/WebAPI/Battery_Status" rel="nofollow external" class="bo">https://developer.mozilla.org/en-US/docs/WebAPI/Battery_Status</a></p>
    <h2>Other Specifications in the Works</h2>
    <p>So far in this post we’ve looked at a number of different APIs that help to further the capabilities of web applications. In addition to the APIs I’ve already mentioned, there are also a number of specifications that are being worked on for other exciting technologies. I’ve listed some of these below.</p>
    <ul>
    <li><a href="http://www.w3.org/TR/contacts-manager-api/" rel="nofollow external" class="bo">ContactsManager</a></li>
    <li><a href="http://www.w3.org/TR/messaging/" rel="nofollow external" class="bo">Messaging</a></li>
    <li><a href="http://www.w3.org/TR/telephony/" rel="nofollow external" class="bo">Telephony</a></li>
    <li><a href="http://www.w3.org/TR/nfc/" rel="nofollow external" class="bo">WebNFC</a></li>
    </ul>
    <p>It’s worth noting that these specifications are all classed as <em>working drafts</em> and therefore are very early in development and likely to change. There’s no guarantee that these technologies will ever make it into browsers, or even through the spec development process. Nevertheless, I think they’re worth mentioning purely as a look into what the future may hold.</p>
    <h2>Final Thoughts</h2>
    <p>In this blog post you’ve explored some of the JavaScript device APIs that are helping to further the capabilities of web applications. I’m incredibly excited about the direction the web is going. Browsers are invading device hardware and offering up the loot through new APIs — data that web developers have been eager to get their hands on for years.</p>
    <p>The capabilities gap that has existed between native and web applications is closing fast, and that shows no signs of slowing down. The future looks ever brighter for web developers.</p>
    <h2>Useful Links</h2>
    <ul>
    <li><a href="http://www.w3.org/standards/techs/js#w3c_all" rel="nofollow external" class="bo">W3C JavaScript APIs</a></li>
    </ul>
    <p>The post <a href="http://blog.teamtreehouse.com/exploring-javascript-device-apis" rel="nofollow external" class="bo">Exploring the JavaScript Device APIs</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>Photograph by Jeremy Keith (adactio)   The mobile revolution has completely changed how people access the web. It’s only natural then that the web should evolve to better suit the plethora of...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/iMIQaQC0j_o/exploring-javascript-device-apis</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42567/guest@my.umbc.edu/5a24f55a40eb5b5ea311690ace0de84f/api/pixel</TrackingUrl>
<Tag>ambient-light</Tag>
<Tag>android</Tag>
<Tag>battery-status</Tag>
<Tag>code</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>device-api</Tag>
<Tag>geolocation</Tag>
<Tag>getusermedia</Tag>
<Tag>html</Tag>
<Tag>ios</Tag>
<Tag>javascript</Tag>
<Tag>learn-to-code</Tag>
<Tag>localstorage</Tag>
<Tag>media-capture</Tag>
<Tag>media-streams</Tag>
<Tag>proximity</Tag>
<Tag>responsive</Tag>
<Tag>sessionstorage</Tag>
<Tag>vibration</Tag>
<Tag>web</Tag>
<Tag>web-apps</Tag>
<Tag>web-storage</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 11:00:46 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42568" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42568">
<Title>Testing Your Ruby Code With Guard, RSpec &amp; Pry: Part 2</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Welcome back! If you missed the <a href="http://code.tutsplus.com/tutorials/testing-your-ruby-code-with-guard-rspec-pry--cms-19974" rel="nofollow external" class="bo">first part of our journey</a> so far, then you might want to go back and catch-up first.</p>
    
    <p>So far, we've applied a Test-Driven Development process to building our application, alongside utilizing the popular RSpec testing framework. From here, we're going to investigate some other RSpec features as well as look into using the Pry gem to help you debug and write your code.</p>
    
    <h2>Other RSpec Features</h2>
    
    <p>Let's take a moment to review some other RSpec features that we've not needed in
    this simple example application, but you may find useful working on your own
    project.</p>
    
    <h3>Pending Statement</h3>
    
    <p>Imagine you write a test but you're interrupted, or you need to leave for a meeting and haven't yet completed the code required to get the test to pass.</p>
    
    <p>You could delete the test and re-write it later when you're able to come back to your work. Or alternatively you could just comment the code out, but that's pretty ugly and definitely no good when using a version control system.</p>
    
    <p>The best thing to do in this situation is to define our test as 'pending' so whenever the tests are run, the test framework will ignore the test. To do this you need to use the <code>pending</code> keyword:</p>
    
    <pre>describe "some method" do&#x000A;      it "should do something"&#x000A;        pending&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <h3>Set-Up and Tear-Down</h3>
    
    <p>All good testing frameworks allow you to execute code before and after each test is run. RSpec is no different. </p>
    
    <p>It provides us <code>before</code> and <code>after</code> methods which allows us to set-up a specific state for our test to run, and to then clean up that state after the test has run (this is so the state doesn't leak and effect the outcome of subsequent tests).</p>
    
    <pre>describe "some method" do&#x000A;      before(:each) do&#x000A;        # some set-up code&#x000A;      end&#x000A;    &#x000A;      after(:each) do&#x000A;        # some tear-down code&#x000A;      end&#x000A;    &#x000A;      it "should do something"&#x000A;        pending&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <h3>Context Blocks</h3>
    
    <p>We've already seen the <code>describe</code> block; but there is another block which is functionally equivalent called <code>context</code>. You can use it every where you would use <code>describe</code>.</p>
    
    <p>The difference between them is subtle but important: <code>context</code> allows us to define a state for our test. Not explicitly though (we don't actually set the state by defining a <code>context</code> block - it instead is for readability purposes so the intent of the following code is clearer). </p>
    
    <p>Here is an example:</p>
    
    <pre>describe "Some method" do&#x000A;      context "block provided" do&#x000A;        it "yields to block" do&#x000A;          pending&#x000A;        end&#x000A;      end&#x000A;    &#x000A;      context "no block provided" do&#x000A;        it "calls a fallback method" do&#x000A;          pending&#x000A;        end&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <h3>Stubs</h3>
    
    <p>We can use the <code>stub</code> method to create a fake version of an existing object and to have it return a pre-determined value.</p>
    
    <p>This is useful in preventing our tests from touching live service APIs, and guiding our tests by giving predictable results from certain calls.</p>
    
    <p>Imagine we have a class called <code>Person</code> and that this class has a <code>speak</code> method. We want to test that method works how we expect it to. To do this we'll stub the <code>speak</code> method using the following code:</p>
    
    <pre>describe Person do&#x000A;      it "speak()" do&#x000A;        bob = stub()&#x000A;        bob.stub(:speak).and_return('hello')&#x000A;        Person.any_instance.stub(:initialize).and_return(bob)&#x000A;        &#x000A;        instance = Person.new&#x000A;        expect(instance.speak).to eq('hello')&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>In this example, we say that 'any instance' of the <code>Person</code> class should have
    its <code>initialize</code> method stubbed so it returns the object <code>bob</code>.</p>
    
    <p>You'll notice that <code>bob</code> is itself a stub which is set-up so that any time code
    tries to execute the <code>speak</code> method it will return "hello".</p>
    
    <p>We then proceed to create a new <code>Person</code> instance and pass the call of
    <code>instance.speak</code> into RSpec's <code>expect</code> syntax.</p>
    
    <p>We tell RSpec that we're expecting that call to result in the String "hello".</p>
    
    <h3>Consecutive Return Values</h3>
    
    <p>In the previous examples we've use the RSpec feature <code>and_return</code> to indicate what our stub should return when it's called.</p>
    
    <p>We can indicate a different return value each time the stub is called by specifying multiple arguments to the <code>and_return</code> method:</p>
    
    <pre>obj = stub()&#x000A;    obj.stub(:foo).and_return(1, 2, 3)&#x000A;    &#x000A;    expect(obj.foo()).to eq(1)&#x000A;    expect(obj.foo()).to eq(2)&#x000A;    expect(obj.foo()).to eq(3)&#x000A;    </pre>
    
    <h3>Mocks</h3>
    
    <p>Mocks are similar to Stubs in that we are creating fake versions of our objects but instead of returning a pre-defined value we're more specifically guiding the routes our objects <em>must</em> take for the test to be valid.</p>
    
    <p>To do that we use the <code>mock</code> method:</p>
    
    <pre>describe Obj do&#x000A;      it "testing()" do&#x000A;        bob = mock()&#x000A;        bob.should_receive(:testing).with('content')&#x000A;    &#x000A;        Obj.any_instance.stub(:initialize).and_return(bob)&#x000A;    &#x000A;        instance = Obj.new&#x000A;        instance.testing('some value')&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>In the above example we create a new <code>Object</code> instance and then call its <code>testing</code> method.</p>
    
    <p>Behind the scenes of that code we expect the <code>testing</code> method to be called with the value <code>'content'</code>. If it isn't called with that value (which in the above example it's not) then we know that some piece of our code hasn't functioned properly.</p>
    
    <h3>Subject Block</h3>
    
    <p>The <code>subject</code> keyword can be used in a couple of different ways. All of which are designed to reduce code duplication.</p>
    
    <p>You can use it implicitly (notice our <code>it</code> block doesn't reference <code>subject</code> at all):</p>
    
    <pre>describe Array do&#x000A;      describe "with 3 items" do&#x000A;        subject { [1,2,3] }&#x000A;        it { should_not be_empty }&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>You can use it explicitly (notice our <code>it</code> block refers to <code>subject</code> directly):</p>
    
    <pre>describe MyClass do&#x000A;      describe "initialization" do&#x000A;        subject { MyClass }&#x000A;        it "creates a new instance" do&#x000A;          instance = subject.new&#x000A;          expect(instance).to be_a(MyClass)&#x000A;        end&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>Rather than constantly referencing a subject within your code and passing in different values for instantiation, for example:</p>
    
    <pre>describe "Foo" do&#x000A;      context "A" do&#x000A;        it "Bar" do&#x000A;          baz = Baz.new('a')&#x000A;          expect(baz.type).to eq('a')&#x000A;        end&#x000A;      end&#x000A;    &#x000A;      context "B" do&#x000A;        it "Bar" do&#x000A;          baz = Baz.new('b')&#x000A;          expect(baz.type).to eq('b')&#x000A;        end&#x000A;      end&#x000A;    &#x000A;      context "C" do&#x000A;        it "Bar" do&#x000A;          baz = Baz.new('c')&#x000A;          expect(baz.type).to eq('c')&#x000A;        end&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>You can instead use <code>subject</code> along with <code>let</code> to reduce the duplication:</p>
    
    <pre>describe "Person" do&#x000A;      subject { Person.new(name) } # Person has a get_name method&#x000A;    &#x000A;      context "Bob" do&#x000A;        let(:name) { 'Bob' }&#x000A;        its(:get_name) { should == 'Bob' }&#x000A;      end&#x000A;    &#x000A;      context "Joe" do&#x000A;        let(:name) { 'Joe' }&#x000A;        its(:get_name) { should == 'Joe' }&#x000A;      end&#x000A;    &#x000A;      context "Smith" do&#x000A;        let(:name) { 'Smith' }&#x000A;        its(:get_name) { should == 'Smith' }&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>There are many more features available to RSpec but we've looked at the most
    important ones that you'll find yourself using a lot when writing tests using
    RSpec.</p>
    
    <h3>Randomized Tests</h3>
    
    <p>You can configure RSpec to run your tests in a random order. This allows you to ensure that none of your tests have any reliance or dependency on the other tests around it.</p>
    
    <pre>RSpec.configure do |config|&#x000A;      config.order = 'random'&#x000A;    end&#x000A;    </pre>
    
    <p>You can set this via the command using the <code>--order</code> flag/option. For example: <code>rspec --order random</code>.</p>
    
    <p>When you use the <code>--order random</code> option RSpec will display the random number it used to seed the algorithm. You can use this 'seed' value again when you think you've discovered a dependency issue within your tests. Once you've fixed what you think is the issue you can pass the seed value into RSpec (e.g. if the seed was <code>1234</code> then execute <code>--order random:1234</code>) and it will use that same randomized seed to see if it can replicate the original dependency bug.</p>
    
    <h3>Global Configuration</h3>
    
    <p>You've seen we've added a project specific set of configuration objects within our <code>Rakefile</code>. But you can set configuration options globally by added them to a <code>.rspec</code> file within your home directory.</p>
    
    <p>For example, inside <code>.rspec</code>:</p>
    
    <pre>--color --format nested&#x000A;    </pre>
    
    <h2>Debugging With Pry</h2>
    
    <p>Now we're ready to start looking into how we can debug our application and our
    test code using the Pry gem. </p>
    
    <p>It's important to understand that although Pry is really good for debugging your code, it is actually meant as an improved Ruby REPL tool (to replace <code>irb</code>) and not strictly debugging purposes; so for example there are no built-in functions such as: step into, step over or step out etc that you would typically find in a tool designed for debugging. </p>
    
    <p>But as a debugging tool, Pry is very focused and lean.</p>
    
    <p>We'll come back to debugging in a moment, but let's first review how we'll be using Pry initially.</p>
    
    <h3>Updated Code Example</h3>
    
    <p>For the purpose of demonstrating Pry I'm going to add more code to my example application (this extra code doesn't effect our test in any way)</p>
    
    <pre>class RSpecGreeter&#x000A;      attr_accessor :test&#x000A;    &#x000A;      @@class_property = "I'm a class property"&#x000A;    &#x000A;      def greet&#x000A;        binding.pry&#x000A;        @instance_property = "I'm an instance property"&#x000A;        pubs&#x000A;        privs&#x000A;        "Hello RSpec!"&#x000A;      end&#x000A;    &#x000A;      def pubs&#x000A;        test_var = "I'm a test variable"&#x000A;        test_var&#x000A;      end&#x000A;    &#x000A;      private&#x000A;    &#x000A;      def privs&#x000A;        puts "I'm private"&#x000A;      end&#x000A;    end&#x000A;    </pre>
    
    <p>You'll notice we've added some extra methods, instance and class properties. We also make calls to two of the new methods we've added from within our <code>greet</code> method.</p>
    
    <p>Lastly, you'll notice the use of <code>binding.pry</code>.</p>
    
    <h3>Setting Break-Points With <code>binding.pry</code>
    </h3>
    
    <p>A break-point is a place within your code where execution will stop.</p>
    
    <p>You can have multiple break-points set within your code and you create them
    using <code>binding.pry</code>.</p>
    <p>When you run your code you'll notice that the terminal will stop and place you inside your application's code at the exact spot your binding.pry was placed.</p>
    
    <p>Below is an example of how it might look...</p>
    
    <pre>    8: def greet&#x000A;    =&gt;  9:   binding.pry&#x000A;       10:   pubs&#x000A;       11:   privs&#x000A;       12:   "Hello RSpec!"&#x000A;       13: end&#x000A;    </pre>
    
    <p>From this point Pry has access to the local scope so you can use Pry much like
    you would in <code>irb</code> and start typing in for example variables to see what values they
    hold.</p>
    
    <p>You can run the <code>exit</code> command to exit Pry and for your code to continue
    executing.</p>
    
    <h3>Finding Where You Are: <code>whereami</code>
    </h3>
    
    <p>When using lots of <code>binding.pry</code> break points it can be difficult to understand where in the application you are. </p>
    
    <p>To get a better context of where you are at any point, you can use the <code>whereami</code> command. </p>
    
    <p>When run on its own you'll see something similar to when you used <code>binding.pry</code> (you'll see the line on which the break-point was set and a couple of lines above and below that). The difference being is if you pass an extra numerical argument like <code>whereami 5</code> you'll see five additional lines above where the <code>binding.pry</code> was placed. You could request to see 100 lines around the current break-point for example.</p>
    
    <p>This command can help orientate you within the current file.</p>
    
    <h3>Stack Trace: <code>wtf</code>
    </h3>
    
    <p>The <code>wtf</code> command stands for "what the f***" and it provides a full stack trace for the most recent exception that has been thrown. It can help you understand the steps leading up to the error that occurred.</p>
    
    <h3>Inspecting: <code>ls</code>
    </h3>
    
    <p>The <code>ls</code> command displays what methods and properties are available to Pry. </p>
    
    <p>When run it will show you something like...</p>
    
    <pre>RSpecGreeter#methods: greet  pubs  test  test=&#x000A;    class variables: @@class_property&#x000A;    locals: _  __  _dir_  _ex_  _file_  _in_  _out_  _pry_&#x000A;    </pre>
    
    <p>In the above example we can see that we have four public methods (remember we updated our code to include some additional methods and then <code>test</code> and <code>test=</code> were created when using Ruby's <code>attr_accessor</code> short hand).</p>
    
    <p>It also displays other class and local variables Pry can access.</p>
    
    <p>Another useful thing you can do is to grep (search) the results for only what you're interested in. You'll need to have an understanding of <a href="http://www.regular-expressions.info/" rel="nofollow external" class="bo">Regular Expressions</a> but it can be a handy technique. Here is an example...</p>
    
    <pre>ls -p -G ^p&#x000A;    =&gt; RSpecGreeter#methods: privs&#x000A;    </pre>
    
    <p>In the above example we're using the <code>-p</code> and <code>-G</code> options/flags which tell Pry we only want to see public and private methods and we use the regex <code>^p</code> (which means match anything starting with <code>p</code>) as our search pattern to filter the results.</p>
    
    <p>Running <code>ls --help</code> will also show you all available options.</p>
    
    <h3>Changing Scope: <code>cd</code>
    </h3>
    
    <p>You can change the current scope by using the <code>cd</code> command.</p>
    
    <p>In our example if we run <code>cd ../pubs</code> it'll take us to the result of that method call.</p>
    
    <p>If we now run <code>whereami</code> you'll see it will display <code>Inside "I'm a test variable"</code>.</p>
    
    <p>If we run <code>self</code> then you'll see we get <code>"I'm a test variable"</code> returned.</p>
    
    <p>If we run <code>self.class</code> we'll see <code>String</code> returned.</p>
    
    <p>You can move up the scope chain using <code>cd ..</code> or you can go back to the top level of the scope using <code>cd /</code>.</p>
    
    <p>Note: we could add another <code>binding.pry</code> inside the <code>pubs</code> method and then our scope would be inside that method rather than the result of the method.</p>
    
    <h3>Seeing How Deep You Are: <code>nesting</code>
    </h3>
    
    <p>Consider the previous example of running <code>cd pubs</code>. If we run the <code>nesting</code> command we'll get a top level look on the number of contexts/levels Pry currently has:</p>
    
    <pre>Nesting status:&#x000A;    --&#x000A;    0. # (Pry top level)&#x000A;    1. "I'm a test variable"&#x000A;    </pre>
    
    <p>From there we can run <code>exit</code> to move back to the earlier context (for example, inside the <code>greet</code> method)</p>
    
    <p>Running <code>exit</code> again will mean we're closing the last context Pry has and so Pry finishes and our code continues to run.</p>
    
    <h3>Locate Any Method: <code>find-method</code>
    </h3>
    
    <p>If you're not sure where to find a particular method then you can use the <code>find-method</code> command to show you all files within your code base that has a method that matches what you're searching for:</p>
    
    <pre>find-method priv&#x000A;    =&gt; Kernel&#x000A;       Kernel#private_methods&#x000A;       Module&#x000A;       Module#private_instance_methods&#x000A;       Module#private_constant&#x000A;       Module#private_method_defined?&#x000A;       Module#private_class_method&#x000A;       Module#private&#x000A;       RSpecGreeter&#x000A;       RSpecGreeter#privs&#x000A;    </pre>
    
    <p>You can also use the <code>-c</code> option/flag to search the content of files instead:</p>
    
    <pre>find-method -c greet&#x000A;    =&gt; RSpecGreeter&#x000A;       RSpecGreeter: def greet&#x000A;       RSpecGreeter#privs:   greet&#x000A;    </pre>
    
    <h3>Classic Debugging: <code>next</code>, <code>step</code>, <code>continue</code>
    </h3>
    
    <p>Although the above techniques are useful, it's not really 'debugging' in the same sense as what you're probably used to.</p>
    
    <p>For most developers their editor or browser will provide them with a built-in debugging tool that lets them actually step through their code line by line and follow the route the code takes until completion.</p>
    
    <p>As Pry is developed to be used as a REPL that's not to say it's not useful for debugging. </p>
    
    <p>A naive solution would be to set multiple <code>binding.pry</code> statements through out a method and use <strong>ctrl-d</strong> to move through each break-point set. But that' still not quite good enough.</p>
    
    <p>For step by step debugging you can load the gem <a href="https://github.com/nixme/pry-nav" rel="nofollow external" class="bo">pry-nav</a>...</p>
    
    <pre>source "<a href="https://rubygems.org">https://rubygems.org</a>"&#x000A;    &#x000A;    gem 'rspec'&#x000A;    &#x000A;    group :development do&#x000A;      gem 'guard'&#x000A;      gem 'guard-rspec'&#x000A;      gem 'pry'&#x000A;    &#x000A;      # Adds debugging steps to Pry&#x000A;      # continue, step, next&#x000A;      gem 'pry-remote'&#x000A;      gem 'pry-nav'&#x000A;    end&#x000A;    </pre>
    
    <p>This gem extends Pry so it understands the following commands:</p>
    
    <ul>
    <li>
    <code>Next</code> (move to the next line)</li>
    <li>
    <code>Step</code> (move to the next line and if it's a method, then move into that method)</li>
    <li>
    <code>Continue</code> (Ignore any further break-points in this file)</li>
    </ul>
    
    <h2>Continuous Integration With Travis-CI</h2>
    
    <p>As an added bonus let's integrate our tests with the online CI (continuous integration) service <a href="https://travis-ci.org/" rel="nofollow external" class="bo">Travis-CI</a>.</p>
    
    <p>The principle of CI is to commit/push early and often to avoid conflicts between your code and the master branch. When you do (in this case we're committing to GitHub) then that should kick off a 'build' on your CI server which runs the relevant tests to ensure all is working as it should be.</p>
    
    <p>Now with TDD as your primary development methodology you're less likely to incur bugs every time you push because your tests are an integral part of your development workflow and so before you push you'll already be aware of bugs or regressions. But this doesn't necessarily protect you from bugs that occur from integration tests (where all code across multiple systems are run together to ensure the system 'as a whole' is functioning correctly).</p>
    
    <p>Regardless, code should never be pushed directly to your live production server any way; it should always be pushed first to a CI server to help catch any potential bugs that arise from differences between your development environment and the production environment. </p>
    
    <p>A lot of companies have more environments still for their code to pass through before it reaches the live production server. </p>
    
    <p>For example, at BBC News we have:</p>
    
    <ul>
    <li>CI</li>
    <li>Test</li>
    <li>Stage</li>
    <li>Live</li>
    </ul>
    
    <p>Although each environment should be identical in set-up, the purpose is to implement different types of testing to ensure as many bugs are caught and resolved before the code reaches 'live'.</p>
    
    <h3>Travis-CI</h3>
    
    <p>Travis CI is a hosted continuous integration service for the open source community. It is integrated with GitHub and offers first class support for multiple languages</p>
    
    <p>What this means is that Travis-CI offers free CI services for open-source projects and also has a paid model for businesses and organizations who want to keep their CI integration private.</p>
    
    <p>We'll be using the free open-source model on our example GitHub repository.</p>
    
    <p>The process is this: </p>
    
    <ul>
    <li>Register an account with <a href="https://github.com/" rel="nofollow external" class="bo">GitHub</a>
    </li>
    <li>Sign into <a href="https://travis-ci.org/" rel="nofollow external" class="bo">Travis-CI</a> using your GitHub account</li>
    <li>Go to your "<a href="https://travis-ci.org/profile" rel="nofollow external" class="bo">Accounts</a>" page</li>
    <li>Turn "on" any repositories you want to run CI on</li>
    <li>Create a <code>.travis.yml</code> file within the root directory of your project and commit it to your GitHub repository</li>
    </ul>
    
    <p>The final step is the most important (creating a <code>.travis.yml</code> file) as this determines the configuration settings for Travis-CI so it knows how to handle running the tests for your project.</p>
    
    <p>Let's take a look at the <a href="https://github.com/Integralist/Guard-and-RSpec/blob/master/.travis.yml" rel="nofollow external" class="bo"><code>.travis.yml</code></a> file we're using for our example GitHub repository:</p>
    
    <pre>language: ruby&#x000A;    cache: bundler&#x000A;    &#x000A;    rvm:&#x000A;      - 2.0.0&#x000A;      - 1.9.3&#x000A;    &#x000A;    script: 'bundle exec rake spec'&#x000A;    &#x000A;    bundler_args: --without development&#x000A;    &#x000A;    branches:&#x000A;      only:&#x000A;        - master&#x000A;    &#x000A;    notifications:&#x000A;      email:&#x000A;        - <a href="mailto:you@example.com">you@example.com</a>&#x000A;    </pre>
    
    <p>Let's break this down piece by piece...</p>
    
    <p>First we specify what language we're using in our project. In this case we're using Ruby: <code>language: ruby</code>.</p>
    
    <p>Because running Bundler can be a bit slow and we know that our dependencies aren't going to change that often we can choose to cache the dependencies, so we set <code>cache: bundler</code>.</p>
    
    <p>Travis-CI uses <a href="http://rvm.io/" rel="nofollow external" class="bo">RVM (Ruby Version Manager)</a> for installing Rubies on their servers. So we need to specify what Ruby versions we want to run our tests against. In this instance we've chosen <code>2.0</code> and <code>1.9.3</code> which are two popular Ruby versions (technically our application uses Ruby 2 but it's good to know our code passes in other versions of Ruby as well):</p>
    
    <pre>rvm:&#x000A;      - 2.0.0&#x000A;      - 1.9.3&#x000A;    </pre>
    
    <p>To run our tests we know that we can use the command <code>rake</code> or <code>rake spec</code>. Travis-CI by default runs the command <code>rake</code> but because of how Gems are installed on Travis-CI using Bundler we need to change the default command: <code>script: 'bundle exec rake spec'</code>. If we didn't do this then Travis-CI would have an issue locating the <code>rspec/core/rake_task</code> file which is specified within our <code>Rakefile</code>.</p>
    
    <p>Note: if you have any issues regarding Travis-CI then you can join the #travis channel on IRC freenode to get help answering any questions you may have. That's where I discovered the solution to my issue with Travis-CI not being able to run my tests using its default <code>rake</code> command and the suggestion of overwriting the default with <code>bundle exec rake</code> resolved that issue.</p>
    
    <p>Next, because we're only interested in running our tests we can pass additional arguments to Travis-CI to filter gems we don't want to bother installing. So for us we want to exclude installing the gems grouped as development: <code>bundler_args: --without development</code> (this means we are excluding gems that are only really used for development and debugging such as Pry and Guard).</p>
    
    <p>It's important to note that originally I was loading Pry within our <code>spec_helper.rb</code> file. This caused a problem when running the code on Travis-CI, now that I was excluding 'development' gems. So I had to tweak the code like so:</p>
    
    <pre>require 'pry' if ENV['APP_ENV'] == 'debug'&#x000A;    </pre>
    
    <p>You can see that now the Pry gem is only <code>require</code>'ed if an environment variable of <code>APP_ENV</code> is set to debug. This way we can avoid Travis-CI from throwing any errors. This does mean that when running your code locally you'd need to set the environment variable if you wanted to debug your code using Pry. The following shows how this could be done in one line:</p>
    
    <pre>APP_ENV=debug &amp;&amp; ruby lib/example.rb</pre>
    
    <p>There were two other changes I made and that was to our <code>Gemfile</code>. One was to make it clearer what gems were required for testing and which were required for development, and the other was explicitly required by Travis-CI:</p>
    
    <pre>source "<a href="https://rubygems.org">https://rubygems.org</a>"&#x000A;    &#x000A;    group :test do&#x000A;      gem 'rake'&#x000A;      gem 'rspec'&#x000A;    end&#x000A;    &#x000A;    group :development do&#x000A;      gem 'guard'&#x000A;      gem 'guard-rspec'&#x000A;      gem 'pry'&#x000A;    &#x000A;      # Adds debugging steps to Pry&#x000A;      # continue, step, next&#x000A;      gem 'pry-remote'&#x000A;      gem 'pry-nav'&#x000A;    end&#x000A;    </pre>
    
    <p>Looking at the above updated <code>Gemfile</code> we can see we've moved the RSpec gem into a new <code>test</code> group, so now it should be clearer what purpose each gem has. We've also added a new <code>gem 'rake'</code>. The Travis-CI documentation states this needed to be specified explicitly.</p>
    
    <p>The next section is optional and it allows you to white list (or black list) certain branches on your repository. So by default Travis-CI will run tests against all your branches unless you tell it otherwise. In this example we're telling it we only want it to run against our <code>master</code> branch:</p>
    
    <pre>branches:&#x000A;      only:&#x000A;        - master&#x000A;    </pre>
    
    <p>We could tell it to run every branch 'except' a particular branch, like so:</p>
    
    <pre>branches:&#x000A;      except:&#x000A;        - some_branch_I_dont_want_run&#x000A;    </pre>
    
    <p>The final section tells Travis-CI where to send notifications to when a build fails or succeeds:</p>
    
    <pre>notifications:&#x000A;      email:&#x000A;        - <a href="mailto:you@example.com">you@example.com</a>&#x000A;    </pre>
    
    <p>You can specify multiple email addresses if you wish:</p>
    
    <pre>notifications:&#x000A;      email:&#x000A;        - <a href="mailto:you@example.com">you@example.com</a>&#x000A;        - <a href="mailto:them@example.com">them@example.com</a>&#x000A;        - <a href="mailto:others@example.com">others@example.com</a>&#x000A;    </pre>
    
    <p>You can be more specific and specify what you want to happen on either a failure or a success (for example, more people will only be interested if the tests fail rather than getting an email every time they pass):</p>
    
    <pre>notifications:&#x000A;      email:&#x000A;        recipients:&#x000A;          - <a href="mailto:you@example.com">you@example.com</a>&#x000A;        on_failure: change&#x000A;        on_success: never&#x000A;    </pre>
    
    <p>The above example shows that the recipient will never receive an email if the tests pass but will get notified if the failure status changes (the default value for both is <code>always</code> which means you'll always be notified regardless of what the status result).</p>
    
    <p>Note: when you explicitly specify a <code>on_failure</code> or <code>on_success</code> you need to move the email address(es) inside of <code>recipients</code> key.</p>
    
    <h2>Conclusion</h2>
    
    <p>This is the end of our two part look into RSpec, TDD and Pry. </p>
    
    <p>In part one we managed to write our application using the TDD process and the RSpec testing framework. In this second half we've also utilized Pry to show how we can more easily debug a running Ruby application. Finally we were able to get our tests set-up to run as part of a continuous integration server using the popular Travis-CI service.</p>
    
    <p>Hopefully this has given you enough of a taste so you are keen to investigate each of these techniques further.</p>
    </div>
]]>
</Body>
<Summary>Welcome back! If you missed the first part of our journey so far, then you might want to go back and catch-up first.    So far, we've applied a Test-Driven Development process to building our...</Summary>
<Website>http://code.tutsplus.com/tutorials/testing-your-ruby-code-with-guard-rspec-pry-part-2--cms-20290</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42568/guest@my.umbc.edu/5afc0549ce59679c1a20caf1f350bd92/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 11:00:07 -0400</PostedAt>
<EditAt>Wed, 19 Mar 2014 11:00:07 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42566" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42566">
<Title>talk: Large Scale Predictive Modeling with Electronic Health Records, 1pm Wed 3/26</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <h1><img alt="" src="http://www.csee.umbc.edu/wp-content/uploads/2014/03/Screen-Shot-2014-03-19-at-12.46.02-PM.png" width="700" height="308" style="max-width: 100%; height: auto;"></h1>
    <h1>Feature Engineering for Large Scale Predictive<br>
    Modeling with Electronic Health Records</h1>
    <h2>Dr. Fei Wang<br>
    Healthcare Analytics Research group<br>
    IBM T. J. Watson Research Center</h2>
    <h3>1:00pm Wednesday, 26 March 2014, ITE325b, UMBC</h3>
    <p>Predictive modeling lies in the heart of many medical informatics problems, such as early detection of some chronic diseases and patient hospitalization/readmission prediction. Typically those predictive models are built upon patient Electronic Health Records (EHR), which are systematic collection of patient information including demographics, diagnosis, medication, lab tests, etc. We refer those information as patient features. High quality features are of vital importance to building successful predictive models. In this talk, I will present two feature engineering technologies to improve the quality of the raw features extracted from original patient EHRs: (1) feature augmentation, which constructs more effective derived features from existing raw features by exploring the event sequentiality; (2) feature densification, which imputes the missing feature values via knowledge transfer across similar patients. Along with each technique we also developed a visual interface to facilitate the user exploring the derived features. Finally I will conclude the whole talk with some future research directions.</p>
    <p>Dr. Fei Wang is currently a research staff member in Healthcare Analytics Research group, IBM T. J. Watson Research Center. Before his current position he was a postdoc in Department of Statistical Science, Cornell University. He received his Ph.D. from Department of Automation, Tsinghua University in 2008. Dr. Wang’s major research interests include data mining, machine learning as well as their applications in social and health informatics. He actively publishes papers on the top venues of the relevant fields including AMIA, KDD, ICML and InfoVis, and he has filed over 20 patents (four issued). Dr. Wang has given seven tutorials on different topics at ICDM/SDM/ICDM, organized seven workshops on KDD/ICDM/SDM/WSDM, and edited three special issues on Journal of Data Mining and Knowledge Discovery. His Ph.D. thesis was awarded the National Excellent Doctoral Thesis in China. His research paper was selected as the recipient of the Honorable mention of the best research paper award in ICDM 2010, and best research paper finalist in SDM 2011. More information can be found on his <a href="https://sites.google.com/site/feiwang03/" rel="nofollow external" class="bo">homepage</a>.</p>
    <p>Host: Prof. Kostas Kalpakis, Sorry, you need javascript to view this email address. </p>
    </div>
]]>
</Body>
<Summary>Feature Engineering for Large Scale Predictive  Modeling with Electronic Health Records   Dr. Fei Wang  Healthcare Analytics Research group  IBM T. J. Watson Research Center   1:00pm Wednesday, 26...</Summary>
<Website>http://www.csee.umbc.edu/2014/03/talk-large-scale-predictive-modeling-with-electronic-health-records-1pm-wed-326/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42566/guest@my.umbc.edu/0c735328a68757b2eec2a407dea9f68d/api/pixel</TrackingUrl>
<Tag>news</Tag>
<Tag>research</Tag>
<Tag>talks</Tag>
<Group token="csee">Computer Science and Electrical Engineering</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/csee</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/original.png?1314043393</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/large.png?1314043393</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/medium.png?1314043393</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/small.png?1314043393</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxsmall.png?1314043393</AvatarUrl>
<Sponsor>Computer Science and Electrical Engineering</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 10:55:27 -0400</PostedAt>
<EditAt>Wed, 19 Mar 2014 10:55:27 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42608" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42608">
<Title>talk: Large Scale Predictive Modeling with Electronic Health Records, 1pm Wed 3/26</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <h1><img alt="" src="http://www.csee.umbc.edu/wp-content/uploads/2014/03/Screen-Shot-2014-03-19-at-12.46.02-PM.png" width="700" height="308" style="max-width: 100%; height: auto;"></h1>
    <h1>Feature Engineering for Large Scale Predictive<br>
    Modeling with Electronic Health Records</h1>
    <h2>Dr. Fei Wang<br>
    Healthcare Analytics Research group<br>
    IBM T. J. Watson Research Center</h2>
    <h3>1:00pm Wednesday, 26 March 2014, ITE325b, UMBC</h3>
    <p>Predictive modeling lies in the heart of many medical informatics problems, such as early detection of some chronic diseases and patient hospitalization/readmission prediction. Typically those predictive models are built upon patient Electronic Health Records (EHR), which are systematic collection of patient information including demographics, diagnosis, medication, lab tests, etc. We refer those information as patient features. High quality features are of vital importance to building successful predictive models. In this talk, I will present two feature engineering technologies to improve the quality of the raw features extracted from original patient EHRs: (1) feature augmentation, which constructs more effective derived features from existing raw features by exploring the event sequentiality; (2) feature densification, which imputes the missing feature values via knowledge transfer across similar patients. Along with each technique we also developed a visual interface to facilitate the user exploring the derived features. Finally I will conclude the whole talk with some future research directions.</p>
    <p>Dr. Fei Wang is currently a research staff member in Healthcare Analytics Research group, IBM T. J. Watson Research Center. Before his current position he was a postdoc in Department of Statistical Science, Cornell University. He received his Ph.D. from Department of Automation, Tsinghua University in 2008. Dr. Wang’s major research interests include data mining, machine learning as well as their applications in social and health informatics. He actively publishes papers on the top venues of the relevant fields including AMIA, KDD, ICML and InfoVis, and he has filed over 20 patents (four issued). Dr. Wang has given seven tutorials on different topics at ICDM/SDM/ICDM, organized seven workshops on KDD/ICDM/SDM/WSDM, and edited three special issues on Journal of Data Mining and Knowledge Discovery. His Ph.D. thesis was awarded the National Excellent Doctoral Thesis in China. His research paper was selected as the recipient of the Honorable mention of the best research paper award in ICDM 2010, and best research paper finalist in SDM 2011. More information can be found on his <a href="https://sites.google.com/site/feiwang03/" rel="nofollow external" class="bo">homepage</a>.</p>
    <p>Host: Prof. Kostas Kalpakis, Sorry, you need javascript to view this email address. </p>
    </div>
]]>
</Body>
<Summary>Feature Engineering for Large Scale Predictive  Modeling with Electronic Health Records   Dr. Fei Wang  Healthcare Analytics Research group  IBM T. J. Watson Research Center   1:00pm Wednesday, 26...</Summary>
<Website>http://www.csee.umbc.edu/2014/03/talk-large-scale-predictive-modeling-with-electronic-health-records-1pm-wed-326/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=talk-large-scale-predictive-modeling-with-electronic-health-records-1pm-wed-326</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42608/guest@my.umbc.edu/bb76a76bc9bb38aaff7779cc3f4af09f/api/pixel</TrackingUrl>
<Tag>news</Tag>
<Tag>research</Tag>
<Tag>talks</Tag>
<Group token="csee">Computer Science and Electrical Engineering</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/csee</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/original.png?1314043393</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/large.png?1314043393</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/medium.png?1314043393</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/small.png?1314043393</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxsmall.png?1314043393</AvatarUrl>
<Sponsor>Computer Science and Electrical Engineering</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 10:55:27 -0400</PostedAt>
<EditAt>Wed, 19 Mar 2014 10:55:27 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42565" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42565">
<Title>App Smart: Comic Books Zap to Life</Title>
<Body>
<![CDATA[
    <div class="html-content">The expanding universe of comics can be found in several apps that animate the process of reading story panels.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F20%2Ftechnology%2Fpersonaltech%2Fapps-to-bring-comic-books-to-life.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Comic+Books+Zap+to+Life" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F20%2Ftechnology%2Fpersonaltech%2Fapps-to-bring-comic-books-to-life.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Comic+Books+Zap+to+Life" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F20%2Ftechnology%2Fpersonaltech%2Fapps-to-bring-comic-books-to-life.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Comic+Books+Zap+to+Life" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F20%2Ftechnology%2Fpersonaltech%2Fapps-to-bring-comic-books-to-life.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Comic+Books+Zap+to+Life" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2014%2F03%2F20%2Ftechnology%2Fpersonaltech%2Fapps-to-bring-comic-books-to-life.html%3Fpartner%3Drss%26emc%3Drss&amp;t=App+Smart%3A+Comic+Books+Zap+to+Life" 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/191801393680/u/0/f/640387/c/34625/s/385c7467/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801393680/u/0/f/640387/c/34625/s/385c7467/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801393680/u/0/f/640387/c/34625/s/385c7467/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801393680/u/0/f/640387/c/34625/s/385c7467/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801393680/u/0/f/640387/c/34625/s/385c7467/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801393680/u/0/f/640387/c/34625/s/385c7467/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801393680/u/0/f/640387/c/34625/s/385c7467/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801393680/u/0/f/640387/c/34625/s/385c7467/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>The expanding universe of comics can be found in several apps that animate the process of reading story panels.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/385c7467/sc/4/l/0L0Snytimes0N0C20A140C0A30C20A0Ctechnology0Cpersonaltech0Capps0Eto0Ebring0Ecomic0Ebooks0Eto0Elife0Bhtml0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42565/guest@my.umbc.edu/23f36816dea74e8eb01e4c999e4ede67/api/pixel</TrackingUrl>
<Tag>amazon-com-inc-amzn-nasdaq</Tag>
<Tag>comic-books-and-strips</Tag>
<Tag>e-books-and-readers</Tag>
<Tag>marvel-entertainment-mvl-nyse</Tag>
<Tag>mobile-applications</Tag>
<Tag>new</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>Wed, 19 Mar 2014 08:26:19 -0400</PostedAt>
<EditAt>Wed, 19 Mar 2014 08:26:19 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42562" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42562">
<Title>Bits Blog: Sony Unveils Virtual Reality Headset</Title>
<Body>
<![CDATA[
    <div class="html-content">At a conference for game developers, Sony showed a sleek white prototype a virtual-reality headset. It will give players a high-definition, 3-D view of a digital world.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fsony-unveils-virtual-reality-headset%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Sony+Unveils+Virtual+Reality+Headset" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fsony-unveils-virtual-reality-headset%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Sony+Unveils+Virtual+Reality+Headset" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fsony-unveils-virtual-reality-headset%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Sony+Unveils+Virtual+Reality+Headset" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fsony-unveils-virtual-reality-headset%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Sony+Unveils+Virtual+Reality+Headset" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2014%2F03%2F19%2Fsony-unveils-virtual-reality-headset%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits+Blog%3A+Sony+Unveils+Virtual+Reality+Headset" 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/191801587702/u/0/f/640387/c/34625/s/385c01ae/sc/21/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801587702/u/0/f/640387/c/34625/s/385c01ae/sc/21/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801587702/u/0/f/640387/c/34625/s/385c01ae/sc/21/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801587702/u/0/f/640387/c/34625/s/385c01ae/sc/21/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801587702/u/0/f/640387/c/34625/s/385c01ae/sc/21/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801587702/u/0/f/640387/c/34625/s/385c01ae/sc/21/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801587702/u/0/f/640387/c/34625/s/385c01ae/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801587702/u/0/f/640387/c/34625/s/385c01ae/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>At a conference for game developers, Sony showed a sleek white prototype a virtual-reality headset. It will give players a high-definition, 3-D view of a digital world.      </Summary>
<Website>http://rss.nytimes.com/c/34625/f/640387/s/385c01ae/sc/21/l/0Lbits0Bblogs0Bnytimes0N0C20A140C0A30C190Csony0Eunveils0Evirtual0Ereality0Eheadset0C0Dpartner0Frss0Gemc0Frss/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42562/guest@my.umbc.edu/c8b1339e9512e6cce34cd47e1363c314/api/pixel</TrackingUrl>
<Tag>3-d-devices-and-effects</Tag>
<Tag>gaming</Tag>
<Tag>new</Tag>
<Tag>oculus-vr-inc</Tag>
<Tag>sony-computer-entertainment-inc</Tag>
<Tag>technology</Tag>
<Tag>virtual-reality-computers</Tag>
<Tag>york</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 07:44:04 -0400</PostedAt>
<EditAt>Wed, 19 Mar 2014 12:56:31 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42694" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42694">
<Title>Optimal Techniques for Strategically Displaying Web Forms</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Incorporating web forms into your website isn’t always the easiest thing to do; they often look very sales-driven, and don’t always flow well with your designs.</p>
    <p>But we need forms because they are the ultimate way to capture important user-contributed data.</p>
    <p></p>
    <p>At <a href="http://www.formstack.com/" rel="nofollow external" class="bo">Formstack</a> (a web app that allows you to create online forms) it’s no surprise we love talking about web form optimization and best practices. Users are more likely to see and complete your forms if they are easy to use and displayed strategically in your designs.</p>
    <p>Let’s explore a few strategic form-presentation techniques along with some examples.</p>
    <h3>Form Page</h3>
    <p>The most fundamental technique for displaying a web form is to have a dedicated web page for it. Examples of form pages are <a href="http://sixrevisions.com/wordpress/free-contact-form-plugins/" title="20 Free Contact Form Plugins for WordPress" rel="nofollow external" class="bo">contact forms</a> and <a href="http://sixrevisions.com/usabilityaccessibility/getting-users-to-sign-up-factors-in-design-and-content/" title="Getting Users to Sign Up: Factors in Design and Content" rel="nofollow external" class="bo">sign-up forms</a>.</p>
    <p>People who come to form pages are generally ready to act, or are more likely to do so. For instance, when a user clicks on a sign-up button, they already have the intent to use the form they will encounter because they have a task they wish to complete (i.e., sign up for an account).</p>
    <p>For long web forms (like online surveys or e-commerce checkout processes) it would be better to use a form page because they need more screen space. In addition, having a dedicated page will allow the user to focus at the task at hand without distraction.</p>
    <p>To be user-friendly and more successful at capturing information, form pages should be as short as possible. When we encounter unnecessarily long forms, there’s a higher likelihood we’ll choose to abandon it because there’s too much time and effort required from us.</p>
    <h4>Form Page Example</h4>
    <p>An example of a form page is <a href="https://www.healthtab.com/en/users/sign_up" rel="nofollow external" class="bo">HealthTab’s sign-up page</a>.</p>
    <p><img src="http://cdn.sixrevisions.com/0407-01_healthtab_form_example.jpg" width="550" height="438" style="max-width: 100%; height: auto;"></p>
    <p>We can see in this example:</p>
    <ul>
    <li>The form is the most prominent component on the page.</li>
    <li>There are no distracting, non-essential elements in close proximity of the web form (e.g. photos, links, other calls-to-action, social media buttons, etc.).</li>
    <li>Text content is limited only to useful information that might help or encourage the user to complete the form. In this case, a promise of a <strong>reward:</strong> If you complete the form, you will be able to track your blood pressure and BMI.</li>
    </ul>
    <h3>On-Page Forms</h3>
    <p>This technique of displaying web forms is good for forms that need to be usable and available on multiple or all pages of a site. Examples of these forms are email newsletter sign-up forms and site search forms.</p>
    <p>Unlike form pages where the user has explicitly decided to see the form, on-page forms are presented without the user’s permission. So we must make sure our on-page forms don’t drastically interrupt their experience.</p>
    <p>Since we know our users will see on-page forms without prior knowledge about them, we should be extremely transparent when describing the form. Being transparent will help <a href="http://sixrevisions.com/project-management/tips-build-trust-clients/" rel="nofollow external" class="bo">build trust</a> and encourage people to use the form.</p>
    <h4>On-Page Form Example</h4>
    <p>We can see an on-page form example by looking at the bottom of <a href="http://sachagreif.com/redesigning-the-folyo-landing-page/" rel="nofollow external" class="bo">Sacha Greif’s blog posts</a> where he has an email newsletter sign-up form strategically placed on the right-hand sidebar.</p>
    <p><img src="http://cdn.sixrevisions.com/0407-02_newsletter_signup_form.jpg" width="550" height="362" style="max-width: 100%; height: auto;"></p>
    <p>As we can see from this example:</p>
    <ul>
    <li>It respects the user’s reading experience by being located off to the right and at the bottom of each blog post, away from the content — at this point of the page, the user has already gotten value from the site (reading a blog post for free) and thus more likely to be motivated to sign up.</li>
    <li>The form is very short, it only has one input field. We often see email sign-ups asking for our first name, last name and other information, but this form only asks for one thing: A person’s email address.</li>
    <li>The form explicitly tells users what to expect: A newsletter every Sunday, and we won’t get spammed by providing our email address.</li>
    </ul>
    <h3>Modal Window Forms</h3>
    <p><a href="http://www.smashingmagazine.com/2009/05/27/modal-windows-in-modern-web-design/" rel="nofollow external" class="bo">Modal windows</a> are a way to display content on demand without requiring the user to leave the current page.</p>
    <p>Modal windows walk a fine line between being useful and being annoying (like popup windows), so using this technique should be used with utmost care.</p>
    <p>You can see many sites today automatically showing modal windows as soon as the page loads. While this method might guarantee that you get your message in the face of your visitor, it’s <a href="http://tabcloseddidntread.com/" rel="nofollow external" class="bo">frustratingly invasive</a>.</p>
    <p>Allow your users to naturally find what they need through good, honest and thoughtful design.</p>
    <h4>Bad Modal Window Form</h4>
    <p><a href="http://www.underarmour.com/" rel="nofollow external" class="bo">Under Armour</a>, for example, immediately prompts new site visitors with a modal window that contains an email sign-up form.</p>
    <p><img src="http://cdn.sixrevisions.com/0407-03_modal_window_intrusive.jpg" width="550" height="380" style="max-width: 100%; height: auto;"></p>
    <p>But is this effective?</p>
    <p>As a newcomer to the site, how willing are you to give away your email address to this sign-up form?</p>
    <p>While this strategy might gain some traction for your email list, you need to prioritize UX.</p>
    <h4>Good Modal Window Form</h4>
    <p>Using modal window forms is a good technique if doing so can provide UX improvements.</p>
    <p>For example, <a href="https://www.spotify.com/" rel="nofollow external" class="bo">Spotify</a> uses a modal window form to speed up their sign-up process.</p>
    <p><img src="http://cdn.sixrevisions.com/0407-04_good_modal_window_form.jpg" width="550" height="361" style="max-width: 100%; height: auto;"></p>
    <p>Instead of the user clicking on their sign-up button and then being directed to a form page, a modal window pops up near-instantly, saving her a few seconds and making the transition to the sign-up web form much smoother.</p>
    <p><img src="http://cdn.sixrevisions.com/0407-05_modal_vs_formcentered.png" width="550" height="225" style="max-width: 100%; height: auto;"></p>
    <p>In the Spotify example, we can see a good rule to follow when displaying modal window forms: Let the user request for the form, don’t force it onto them. This concept is called <a href="http://sixrevisions.com/user-interface/progressive-disclosure-in-user-interfaces/" rel="nofollow external" class="bo">progressive disclosure</a>.</p>
    <h3>Off-Canvas Forms</h3>
    <p><a href="http://jasonweaver.name/lab/offcanvas/" rel="nofollow external" class="bo">Off-canvas layouts</a> have become increasingly popular in mobile UI design. And for good reason: When a designer is only working with about 2-3 inches of screen space, she doesn’t want to cram the screen with too much stuff.</p>
    <p><img src="http://cdn.sixrevisions.com/0407-06_offcanvas_illustration.png" width="550" height="730" style="max-width: 100%; height: auto;"></p>
    <p>By placing elements such as navigation menus, auxiliary text and web forms off the screen until the user needs them, we can enhance UX and take advantage of progressive disclosure.</p>
    <p>In concept, it’s similar to modal window forms. Where they differ is in execution.</p>
    <h4>When to Use Off-Canvas Forms</h4>
    <p>Forms that are suitable for off-canvas placement are those that aren’t regularly used, but are nonetheless essential and critical when a situation calls for them.</p>
    <p>One type of form that is well-served by off-canvas placement are search forms.</p>
    <p>The common design pattern for search forms is to place them at the top of the layout. </p>
    <p>In other words, people expect search forms at the top-right or top-left of the screen when they need to search the site. But these locations are prime real estate that can be used more optimally for more critical elements. Not everyone that visits a web page needs to perform a search, so placing a big search form wastes valuable space in a vast majority of situations.</p>
    <p>A good solution that allows the designer to shrink the space a search form takes up is to put it off-canvas until the user asks to see it.</p>
    <p>We can see this in <a href="http://bellroy.com/" rel="nofollow external" class="bo">Bellroy’s</a> off-canvas navigation menu.</p>
    <p><img src="http://cdn.sixrevisions.com/0407-07_bellroy_offcanvas.jpg" width="550" height="536" style="max-width: 100%; height: auto;"></p>
    <p>Placing not-always-crucial forms off-canvas allows us to free up screen real estate for more important elements.</p>
    <p>When they become crucial — such as in the case when a user is having a hard time finding something specific on a site — that’s when we can show it to them.</p>
    <h3>Optimize Web Forms for People</h3>
    <p>Regardless of what design strategies you use to collect user information, make decisions based on your users’ needs.</p>
    <p>In business, it’s important to maximize leads or signups. But it’s even more important to keep your users happy.</p>
    <p>Where have you found success with form placement in your designs? What’s one of your biggest pet peeves when it comes to lead generation techniques in UX/UI design?</p>
    <h3>Related Content</h3>
    <ul>
    <li><a href="http://sixrevisions.com/user-interface/10-tips-for-optimizing-web-form-submission-usability/" rel="nofollow external" class="bo">10 Tips for Optimizing Web Form Submission Usability</a></li>
    <li><a href="http://sixrevisions.com/html5/new-html5-form-input-types/" rel="nofollow external" class="bo">A Guide to the New HTML5 Form Input Types</a></li>
    <li><a href="http://sixrevisions.com/user-interface/ux-design-mistakes/" rel="nofollow external" class="bo">Lessons We Learned from Our Biggest UX and Design Mistakes</a></li>
    <li>
    <em>Related categories:</em> <a href="http://sixrevisions.com/category/user-interface/" rel="nofollow external" class="bo">UI</a> and <a href="http://sixrevisions.com/category/usabilityaccessibility/" rel="nofollow external" class="bo">Usability</a>
    </li>
    </ul>
    <h3>About the Authors</h3>
    <p><img src="http://cdn.sixrevisions.com/authors/eva_mcknight_small.jpg" alt="" width="80" height="80" style="max-width: 100%; height: auto;"><strong>Eva McKnight</strong> is the PR Specialist at <a href="http://www.formstack.com/" rel="nofollow external" class="bo">Formstack</a>. When Eva’s not bragging about the awesome ways to use Formstack, you can find her taking too many pictures of her cat or trying to avoid cooking. She loves connecting with other PR professionals and digital marketers. Connect with Eva on <a href="https://twitter.com/evachristine09" rel="nofollow external" class="bo">Twitter</a>.</p>
    <p><img src="http://cdn.sixrevisions.com/authors/lance_padgett_small.jpg" alt="" width="80" height="80" style="max-width: 100%; height: auto;"><strong>Lance Padgett</strong> is the SEO Specialist at <a href="http://www.formstack.com/" rel="nofollow external" class="bo">Formstack</a> where he manages search strategy and strategic outreach campaigns. He also does design and development work too. He loves building things, makes a mean loaf of bread and can talk sports with you all day. Connect with Lance on <a href="https://twitter.com/lancepadgett" rel="nofollow external" class="bo">Twitter</a>.</p>
    <p>The post <a href="http://sixrevisions.com/user-interface/optimal-techniques-for-strategically-displaying-web-forms/" rel="nofollow external" class="bo">Optimal Techniques for Strategically Displaying Web Forms</a> appeared first on <a href="http://sixrevisions.com" rel="nofollow external" class="bo">Six Revisions</a>.</p>
    </div>
]]>
</Body>
<Summary>Incorporating web forms into your website isn’t always the easiest thing to do; they often look very sales-driven, and don’t always flow well with your designs.   But we need forms because they...</Summary>
<Website>http://feedproxy.google.com/~r/SixRevisions/~3/fuNj7Dla16Y/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42694/guest@my.umbc.edu/b4f38b54bef99870cb3978cbbce79987/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>database</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>sql</Tag>
<Tag>user-interface</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 06:00:49 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42561" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42561">
<Title>6 design essential ingredients for successful e-commerce</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="thumbnail" src="http://netdna.webdesignerdepot.com/uploads/2014/02/thumbnail9.jpg" width="200" height="160" style="max-width: 100%; height: auto;">With growing numbers of businesses taking their products and services to the web, offering greater reach and accessibility of their wares to their existing and potential clients, we as web designers need to be ready to deliver on their e-commerce web wants and needs. Across the Web we see numerous examples of both ends of this spectrum, e-commerce websites done extremely well and, unfortunately, some extremely poorly.</p> <p>Here we’ll shine a light on what makes an e-commerce website really work. We discuss the basics that are required for success and highlight them with some sites that exemplify the points in focus. Overall, much of the weight of a successful e-commerce site falls under the UX umbrella, with functionality being key.</p> <p>And while it is true that could be argued for every site on the Web, given the very nature of them, e-commerce sites’ success rely so heavily on usability and function, that any choice which would strain either of these aspects of the site should not ever be considered.</p> <p> </p> <h1>Searchability</h1> <p>Not only do you need at least one very prominant search box on the site, it also needs to work impecibly. Visitors are going to be searching for the items they wish to purchase from the site and if the search function is below par, and they have any kinds of issues whatsoever finding exactly what they’re looking for, it could cost users and potential buyers. In fact, chances are, with the high number of both local and national chains operating in the same markets the users will end up going to a competitor where they don’t have as many issues.</p> <p>So be clear not only with how they can search the products and services on offer, but also be sure that you give them a trail of breadcrumbs that highlight where in the shop the item they were searching for hides. This way they can easily browse related items in the same category. It is all about giving them as much flexibility to access the store items as possible, while doing it subtly enough as to not overwhelm them. It is a fine balance to strike indeed.</p> <p><a href="http://www.dsw.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/dsw1.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p> </p> <p><a href="https://www.shopsalus.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/salus.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p> </p> <h1>Shopping cart</h1> <p>Like the search box, visitors not only need an easy and apparent way to get to their shopping cart from any page on the site, the cart itself needs to be highly user friendly and functional. Users have expectations that need to be looked after if they are expected to stick around and spend their money at any particular site, and the shopping cart is one area where dropping the ball on meeting those expectations can be unneccessarily costly.</p> <p>Customers need to be able to easily delete items from their cart as well as change the quantities of items in there. Meeting these expectations is good, but exceeding them where you can is even better. Go above and beyond by offering an estimate on shipping based on the customer’s zip code and offering multiple shipping options when available. Make the entire check-out process completely intuitive, an absolute no-brainer, so as to remove any chance of customer confusion.</p> <p><a href="http://oakstreetbootmakers.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/oak.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.jonesandvandermeer.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/jandv.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a> </p> <p><a href="http://oakstreetbootmakers.com/" rel="nofollow external" class="bo"><span> </span></a></p> <h1>Product showcase</h1> <p>Naturally you want to showcase the product line in the most effective and attractive way possible. The photographs of the products is the last place any client needs to try and save some money, so you may need to convince them to hire the best photographer they can afford. Make sure the product images show them in their best light possible, and to do so, there needs to be a professional on the other end of the lens.</p> <p>A gorgeous image with just the right light and composition versus a dark fuzzy photo will make the difference between a sale and a customer lost to a lack of professionalism on display. Almost as important as the way the products look is the way they are described on the site. Give as detailed a description as possible, covering everything the customers could possibly have a question about. Color choices, exact dimensions, weight, and so on.</p> <p><a href="http://www.noonstyle.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/noon.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.hunters.co.nz/wine-shop/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/hunters.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p> </p> <h1>Calls to action</h1> <p>Though they are often vital to the mission at hand, the prettiest pictures and best descriptions in the world won’t make a bit of difference if the customer can’t find the button to actually purchase the item. The various calls to action throughout will be the proverbial bread and butter of any ecommerce site. Make sure you highlight them effectively enough to find the users’ eye as they’re lead through the design and visually commands them to click.</p> <p>Which also leads to the next point, be sure they all work properly. Again this is an area where lack of functionality can spell disaster for the site’s effectiveness and overall popularity. If the site is known to have issues with any of CTA’s, then what is the enticement for users to return in search of goods they possibly cannot access or procure. And it is always frustrating for a user when the design visually calls to them saying “Click Here”, and when they do, absolutely nothing occurs.</p> <p><a href="http://skinnyties.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/skinny.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.jenierteas.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/jenier.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p> </p> <h1>Security</h1> <p>If the potential customers are going to be giving their payment details through the site you want to make sure they feel as secure as possible in doing so. If there is anything on the site that gives them a less than comforting feeling, with regards to the security of the information required to complete their transactions, good luck getting this to be a successful ecommerce site. So site security has to be priority. Visably so.</p> <p>Make sure the site have an up-to-date SSL certificate to start with. Also be sure that the site uses an approved and reputable payment gateway to offer users a sense of comfort when they begin handing over their payment information. And speaking of said info, it is good practice to never save credit card information being transmitted via the site. Not only that, but be sure to encrypt all communications with the credit card processor.</p> <p><a href="http://www.nuts.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/nuts.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.pinkice.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/pink.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p> </p> <h1>Contact information</h1> <p>Hopefully, if all the other advice is followed, the customers coming to the site will be able to easily find what they are looking for and make their purchase without impedence, but with so many factors influencing all user interactions with the site this is not always a guarantee. Should the users end up with a question they need an answer to, before they buy from the site, giving them a simple way to contact someone who can help is a must.</p> <p>If someone cannot be on hand immediately to address the customer’s concerns, it becomes imperative to make sure and get back to them in as timely a manner as possible. Keeping them waiting around, is never any kind of solid plan. It can often backfire and cause them to seek out alternatives to your shop.</p> <p><a href="http://www.freepeople.com/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/free.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p><a href="http://www.zaino.be/" rel="nofollow external" class="bo"><img src="http://netdna.webdesignerdepot.com/uploads/2014/02/zaino.jpg" width="650" alt="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"></a></p> <p><br><br> </p>
    <table width="100%"> <tbody>
    <tr> <td> <a href="http://www.mightydeals.com/deal/typo-painter.html?ref=inwidget" rel="nofollow external" class="bo"><strong>Create Typographic Images with Typo-Painter – only $5!</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="6 design essential ingredients for successful e commerce" style="max-width: 100%; height: auto;"><br> </a> </td> </tr> </tbody>
    </table> <p><br> </p> <a href="http://www.webdesignerdepot.com/2014/03/6-design-essential-ingredients-for-successful-e-commerce/" rel="nofollow external" class="bo">Source</a> <br><br><br><a href="http://da.feedsportal.com/r/191801741852/u/49/f/661066/c/35285/s/38599c1e/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801741852/u/49/f/661066/c/35285/s/38599c1e/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801741852/u/49/f/661066/c/35285/s/38599c1e/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801741852/u/49/f/661066/c/35285/s/38599c1e/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/191801741852/u/49/f/661066/c/35285/s/38599c1e/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801741852/u/49/f/661066/c/35285/s/38599c1e/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/191801741852/u/49/f/661066/c/35285/s/38599c1e/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/191801741852/u/49/f/661066/c/35285/s/38599c1e/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>With growing numbers of businesses taking their products and services to the web, offering greater reach and accessibility of their wares to their existing and potential clients, we as web...</Summary>
<Website>http://rss.feedsportal.com/c/35285/f/661066/s/38599c1e/sc/4/l/0L0Swebdesignerdepot0N0C20A140C0A30C60Edesign0Eessential0Eingredients0Efor0Esuccessful0Ee0Ecommerce0C/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42561/guest@my.umbc.edu/06f0f1dc0511424c0d3f2cb23090290a/api/pixel</TrackingUrl>
<Tag>art</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>designing-shopping-sites</Tag>
<Tag>development</Tag>
<Tag>e-commerce-design</Tag>
<Tag>ecommerce</Tag>
<Tag>essential-ecommerce</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>selling-online</Tag>
<Tag>sql</Tag>
<Tag>ux-design</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 04:15:21 -0400</PostedAt>
<EditAt>Wed, 19 Mar 2014 04:15:21 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42553" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42553">
<Title>Earn $5500 in the 2014 Google Summer of Code program</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="" src="http://www.csee.umbc.edu/wp-content/uploads/2014/03/920x156xbanner-gsoc2014.jpg" width="700" height="118" style="max-width: 100%; height: auto;"></p>
    <p>If you have good software skills and are still looking for a summer internship, check out the 2014 <a href="http://bit.ly/14GSoC" rel="nofollow external" class="bo">Google Summer of Code</a> program. You can earn $5500 by coding for an open source software project this summer. You will probably work remotely, but in close collaboration with a mentor at one of over 100 participating organizations. To maximize your chances, explore the organizations and find one that needs your skills. Details <a href="http://bit.ly/14Gsoc" rel="nofollow external" class="bo">here</a>; apply by Friday, March 21.</p>
    </div>
]]>
</Body>
<Summary>If you have good software skills and are still looking for a summer internship, check out the 2014 Google Summer of Code program. You can earn $5500 by coding for an open source software project...</Summary>
<Website>http://www.csee.umbc.edu/2014/03/earn-5500-in-the-2014-google-summer-of-code-program/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42553/guest@my.umbc.edu/83e9077b5051d39c2a29242c4bee2ed1/api/pixel</TrackingUrl>
<Tag>graduate</Tag>
<Tag>jobs</Tag>
<Tag>news</Tag>
<Tag>students</Tag>
<Tag>undergraduate</Tag>
<Group token="csee">Computer Science and Electrical Engineering</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/csee</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="original">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/original.png?1314043393</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xlarge.png?1314043393</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/large.png?1314043393</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/medium.png?1314043393</AvatarUrl>
<AvatarUrl size="small">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/small.png?1314043393</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xsmall.png?1314043393</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/099/d117dca133c64bf78a4b7696dd007189/xxsmall.png?1314043393</AvatarUrl>
<Sponsor>Computer Science and Electrical Engineering</Sponsor>
<PawCount>4</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 19 Mar 2014 00:37:25 -0400</PostedAt>
<EditAt>Wed, 19 Mar 2014 00:37:25 -0400</EditAt>
</NewsItem>

</News>
