<?xml version="1.0"?>
<News hasArchived="true" page="7942" pageCount="10749" pageSize="10" timestamp="Thu, 13 Aug 2026 13:29:54 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7942">
<NewsItem contentIssues="true" id="39750" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39750">
<Title>Managing the Asynchronous Nature of Node.js</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=36183&amp;c=736738239" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=36183&amp;c=736738239" alt="" style="max-width: 100%; height: auto;"></a><p><a href="http://nodejs.org/" rel="nofollow external" class="bo">Node.js</a> allows you to create apps fast and easily. But due to its asynchronous nature, it may be hard to write readable and manageable code. In this article I’ll show you a few tips on how to achieve that.</p>
    <p></p>
    <hr>
    <h2>Callback Hell or the Pyramid of Doom</h2>
    <p>Node.js is built in a way that forces you to use asynchronous functions. That means callbacks, callbacks and even more callbacks. You’ve probably seen or even written yourself pieces of code like this:</p>
    <pre>app.get('/login', function (req, res) {&#x000A;    	sql.query('SELECT 1 FROM users WHERE name = ?;', [ req.param('username') ], function (error, rows) {&#x000A;    		if (error) {&#x000A;    			res.writeHead(500);&#x000A;    			return res.end();&#x000A;    		}&#x000A;    		if (rows.length &amp;lt; 1) {&#x000A;    			res.end('Wrong username!');&#x000A;    		} else {&#x000A;    			sql.query('SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ req.param('username'), req.param('password') ], function (error, rows) {&#x000A;    				if (error) {&#x000A;    					res.writeHead(500);&#x000A;    					return res.end();&#x000A;    				}&#x000A;    				if (rows.length &amp;lt; 1) {&#x000A;    					res.end('Wrong password!');&#x000A;    				} else {&#x000A;    					sql.query('SELECT * FROM userdata WHERE name = ?;', [ req.param('username') ], function (error, rows) {&#x000A;    						if (error) {&#x000A;    							res.writeHead(500);&#x000A;    							return res.end();&#x000A;    						}&#x000A;    						req.session.username = req.param('username');&#x000A;    						req.session.data = rows[0];&#x000A;    						res.rediect('/userarea');&#x000A;    					});&#x000A;    				}&#x000A;    			});&#x000A;    		}&#x000A;    	});&#x000A;    });&#x000A;    </pre>
    <p>This is actually a snippet straight from one of my first Node.js apps. If you’ve done something more advanced in Node.js you probably understand everything, but the problem here is that the code is moving to the right every time you use some asynchronous function. It becomes harder to read and harder to debug. Luckily, there are a few solutions for this mess, so you can pick the right one for your project.</p>
    <hr>
    <h2>Solution 1: Callback Naming and Modularization</h2>
    <p>The simplest approach would be to name every callback (which will help you debug the code) and split all of your code into modules. The login example above can be turned into a module in a few simple steps.</p>
    <h3>The Structure</h3>
    <p>Let’s start with a simple module structure. To avoid the above situation, when you just split the mess into smaller messes, let’s have it be a class:</p>
    <pre>var util = require('util');&#x000A;    &#x000A;    function Login(username, password) {&#x000A;    	function _checkForErrors(error, rows, reason) {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	function _checkUsername(error, rows) {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	function _checkPassword(error, rows) {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	function _getData(error, rows) {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	function perform() {&#x000A;    		&#x000A;    	}&#x000A;    	&#x000A;    	this.perform = perform;&#x000A;    }&#x000A;    &#x000A;    util.inherits(Login, EventEmitter);&#x000A;    </pre>
    <p>The class is constructed with two parameters: <code>username</code> and <code>password</code>. Looking at the sample code, we need three functions: one to check if the username is correct (<code>_checkUsername</code>), another to check the password (<code>_checkPassword</code>) and one more to return the user-related data (<code>_getData</code>) and notify the app that the login was successful. There is also a <code>_checkForErrors</code> helper, which will handle all errors. Finally, there is a <code>perform</code> function, which will start the login procedure (and is the only public function in the class). Finally, we inherit from <code>EventEmitter</code> to simplify the usage of this class.</p>
    <h3>The Helper</h3>
    <p>The <code>_checkForErrors</code> function will check if any error occurred or if the SQL query returns no rows, and emit the appropriate error (with the reason that was supplied):</p>
    <pre>function _checkForErrors(error, rows, reason) {&#x000A;    	if (error) {&#x000A;    		this.emit('error', error);&#x000A;    		return true;&#x000A;    	}&#x000A;    	&#x000A;    	if (rows.length &amp;lt; 1) {&#x000A;    		this.emit('failure', reason);&#x000A;    		return true;&#x000A;    	}&#x000A;    	&#x000A;    	return false;&#x000A;    }&#x000A;    </pre>
    <p>It also returns <code>true</code> or <code>false</code>, depending on whether an error occurred or not.</p>
    <h3>Performing the Login</h3>
    <p>The <code>perform</code> function will have to do only one operation: perform the first SQL query (to check if the username exists) and assign the appropriate callback:</p>
    <pre>function perform() {&#x000A;    	sql.query('SELECT 1 FROM users WHERE name = ?;', [ username ], _checkUsername);&#x000A;    }&#x000A;    </pre>
    <p>I assume you have your SQL connection accessible globally in the <code>sql</code> variable (just to simplify, discussing if this is a good practice is beyond the scope of this article). And that’s it for this function.</p>
    <h3>Checking the Username</h3>
    <p>The next step is to check if the username is correct, and if so fire the second query – to check the password:</p>
    <pre>function _checkUsername(error, rows) {&#x000A;    	if (_checkForErrors(error, rows, 'username')) {&#x000A;    		return false;&#x000A;    	} else {&#x000A;    		sql.query('SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ username, password ], _checkPassword);&#x000A;    	}&#x000A;    }&#x000A;    </pre>
    <p>Pretty much the same code as in the messy sample, with the exception of error handling.</p>
    <h3>Checking the Password</h3>
    <p>This function is almost exactly the same as the previous one, the only difference being the query called:</p>
    <pre>function _checkPassword(error, rows) {&#x000A;    	if (_checkForErrors(error, rows, 'password')) {&#x000A;    		return false;&#x000A;    	} else {&#x000A;    		sql.query('SELECT * FROM userdata WHERE name = ?;', [ username ], _getData);&#x000A;    	}&#x000A;    }&#x000A;    </pre>
    <h3>Getting the User-Related Data</h3>
    <p>The last function in this class will get the data related to the user (the optional step) and fire a success event with it:</p>
    <pre>function _getData(error, rows) {&#x000A;    	if (_checkForErrors(error, rows)) {&#x000A;    		return false;&#x000A;    	} else {&#x000A;    		this.emit('success', rows[0]);&#x000A;    	}&#x000A;    }&#x000A;    </pre>
    <h3>Final Touches and Usage</h3>
    <p>The last thing to do is to export the class. Add this line after all of the code:</p>
    <pre>module.exports = Login;&#x000A;    </pre>
    <p>This will make the <code>Login</code> class the only thing that the module will export. It can be later used like this (assuming that you’ve named the module file <code>login.js</code> and it’s in the same directory as the main script):</p>
    <pre>var Login = require('./login.js');&#x000A;    &#x000A;    ...&#x000A;    &#x000A;    app.get('/login', function (req, res) {&#x000A;    	var login = new Login(req.param('username'), req.param('password));&#x000A;    	login.on('error', function (error) {&#x000A;    		res.writeHead(500);&#x000A;    		res.end();&#x000A;    	});&#x000A;    	login.on('failure', function (reason) {&#x000A;    		if (reason == 'username') {&#x000A;    			res.end('Wrong username!');&#x000A;    		} else if (reason == 'password') {&#x000A;    			res.end('Wrong password!');&#x000A;    		}&#x000A;    	});&#x000A;    	login.on('success', function (data) {&#x000A;    		req.session.username = req.param('username');&#x000A;    		req.session.data = data;&#x000A;    		res.redirect('/userarea');&#x000A;    	});&#x000A;    	login.perform();&#x000A;    });&#x000A;    </pre>
    <p>Here’s a few more lines of code, but the readability of the code has increased, quite noticeably. Also, this solution does not use any external libraries, which makes it perfect if someone new comes to your project.</p>
    <p>That was the first approach, let’s proceed to the second one.</p>
    <hr>
    <h2>Solution 2: Promises</h2>
    <p>Using <a href="http://wiki.commonjs.org/wiki/Promises/A" rel="nofollow external" class="bo">promises</a> is another way of solving this problem. A promise (as you can read in the link provided) “represents the eventual value returned from the single completion of an operation”. In practice, it means that you can chain the calls to flatten the pyramid and make the code easier to read.</p>
    <p>We will use the <a href="https://github.com/kriskowal/q" rel="nofollow external" class="bo">Q</a> module, available in the NPM repository.</p>
    <h3>Q in the Nutshell</h3>
    <p>Before we start, let me introduce you to the Q. For static classes (modules), we will primarily use the <code>Q.nfcall</code> function. It helps us in the conversion of every function following the Node.js’s callback pattern (where the parameters of the callback are the error and the result) to a promise. It’s used like this:</p>
    <pre>Q.nfcall(http.get, options);&#x000A;    </pre>
    <p>It’s pretty much like <code>Object.prototype.call</code>. You can also use the <code>Q.nfapply</code> which resembles <code>Object.prototype.apply</code>:</p>
    <pre>Q.nfapply(fs.readFile, [ 'filename.txt', 'utf-8' ]);&#x000A;    </pre>
    <p>Also, when we create the promise, we add each step with the <code>then(stepCallback)</code> method, catch the errors with <code>catch(errorCallback)</code> and finish with <code>done()</code>.</p>
    <p>In this case, since the <code>sql</code> object is an instance, not a static class, we have to use <code>Q.ninvoke</code> or <code>Q.npost</code>, which are similar to the above. The difference is that we pass the methods’ name as a string in the first argument, and the instance of the class that we want to work with as a second one, to avoid the method being <em>unbinded</em> from the instance.</p>
    <h3>Preparing the Promise</h3>
    <p>The first thing to do is to execute the first step, using <code>Q.nfcall</code> or <code>Q.nfapply</code> (use the one that you like more, there is no difference underneath):</p>
    <pre>var Q = require('q');&#x000A;    &#x000A;    ...&#x000A;    app.get('/login', function (req, res) {&#x000A;    	Q.ninvoke('query', sql, 'SELECT 1 FROM users WHERE name = ?;', [ req.param('username') ])&#x000A;    });&#x000A;    </pre>
    <p>Notice the lack of a semicolon at the end of the line – the function-calls will be chained so it cannot be there. We are just calling the <code>sql.query</code> as in the messy example, but we omit the callback parameter – it’s handled by the promise.</p>
    <h3>Checking the Username</h3>
    <p>Now we can create the callback for the SQL query, it will be almost identical to the one in the “pyramid of doom” example. Add this after the <code>Q.ninvoke</code> call:</p>
    <pre>.then(function (rows) {&#x000A;    	if (rows.length &amp;lt; 1) {&#x000A;    		res.end('Wrong username!');&#x000A;    	} else {&#x000A;    		return Q.ninvoke('query', sql, 'SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ req.param('username'), req.param('password') ]);&#x000A;    	}&#x000A;    })&#x000A;    </pre>
    <p>As you can see we are attaching the callback (the next step) using the <code>then</code> method. Also, in the callback we omit the <code>error</code> parameter, because we will catch all of the errors later. We are manually checking, if the query returned something, and if so we are returning the next promise to be executed (again, no semicolon because of the chaining).</p>
    <h3>Checking the Password</h3>
    <p>As with the modularization example, checking the password is almost identical to checking the username. This should go right after the last <code>then</code> call:</p>
    <pre>.then(function (rows) {&#x000A;    	if (rows.length &amp;lt; 1) {&#x000A;    		res.end('Wrong password!');&#x000A;    	} else {&#x000A;    		return Q.ninvoke('query', sql, 'SELECT * FROM userdata WHERE name = ?;', [ req.param('username') ]);&#x000A;    	}&#x000A;    })&#x000A;    </pre>
    <h3>Getting the User-Related Data</h3>
    <p>The last step will be the one where we’re putting the users’ data in the session. Once more, the callback is not much different from the messy example:</p>
    <pre>.then(function (rows) {&#x000A;    	req.session.username = req.param('username');&#x000A;    	req.session.data = rows[0];&#x000A;    	res.rediect('/userarea');&#x000A;    })&#x000A;    </pre>
    <h3>Checking for Errors</h3>
    <p>When using promises and the Q library, all of the errors are handled by the callback set using the <code>catch</code> method. Here, we are only sending the HTTP 500 no matter what the error is, like in the examples above:</p>
    <pre>.catch(function (error) {&#x000A;    	res.writeHead(500);&#x000A;    	res.end();&#x000A;    })&#x000A;    .done();&#x000A;    </pre>
    <p>After that, we must call the <code>done</code> method to “make sure that, if an error doesn’t get handled before the end, it will get rethrown and reported” (from the library’s README). Now our beautifully flattened code should look like this (and behave just like the messy one):</p>
    <pre>var Q = require('q');&#x000A;    &#x000A;    ...&#x000A;    app.get('/login', function (req, res) {&#x000A;    	Q.ninvoke('query', sql, 'SELECT 1 FROM users WHERE name = ?;', [ req.param('username') ])&#x000A;    	.then(function (rows) {&#x000A;    		if (rows.length &amp;lt; 1) {&#x000A;    			res.end('Wrong username!');&#x000A;    		} else {&#x000A;    			return Q.ninvoke('query', sql, 'SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ req.param('username'), req.param('password') ]);&#x000A;    		}&#x000A;    	})&#x000A;    	.then(function (rows) {&#x000A;    		if (rows.length &amp;lt; 1) {&#x000A;    			res.end('Wrong password!');&#x000A;    		} else {&#x000A;    			return Q.ninvoke('query', sql, 'SELECT * FROM userdata WHERE name = ?;', [ req.param('username') ]);&#x000A;    		}&#x000A;    	})&#x000A;    	.then(function (rows) {&#x000A;    		req.session.username = req.param('username');&#x000A;    		req.session.data = rows[0];&#x000A;    		res.rediect('/userarea');&#x000A;    	})&#x000A;    	.catch(function (error) {&#x000A;    		res.writeHead(500);&#x000A;    		res.end();&#x000A;    	})&#x000A;    	.done();&#x000A;    });&#x000A;    </pre>
    <p>The code is much cleaner, and it involved less rewriting than the modularization approach.</p>
    <hr>
    <h2>Solution 3: Step Library</h2>
    <p>This solution is similar to the previous one, but it’s simpler. Q is a bit heavy, because it implements the whole promises idea. The <a href="https://github.com/creationix/step" rel="nofollow external" class="bo">Step</a> library is there only for the purpose of flattening the callback hell. It’s also a bit simpler to use, because you just call the only function that is exported from the module, pass all your callbacks as the parameters and use <code>this</code> in place of every callback. So the messy example can be converted into this, using the Step module:</p>
    <pre>var step = require('step');&#x000A;    &#x000A;    ...&#x000A;    &#x000A;    app.get('/login', function (req, res) {&#x000A;    	step(&#x000A;    		function start() {&#x000A;    			sql.query('SELECT 1 FROM users WHERE name = ?;', [ req.param('username') ], this);&#x000A;    		},&#x000A;    		function checkUsername(error, rows) {&#x000A;    			if (error) {&#x000A;    				res.writeHead(500);&#x000A;    				return res.end();&#x000A;    			}&#x000A;    			if (rows.length &amp;lt; 1) {&#x000A;    				res.end('Wrong username!');&#x000A;    			} else {&#x000A;    				sql.query('SELECT 1 FROM users WHERE name = ? &amp;&amp; password = MD5(?);', [ req.param('username'), req.param('password') ], this);&#x000A;    			}&#x000A;    		},&#x000A;    		function checkPassword(error, rows) {&#x000A;    			if (error) {&#x000A;    				res.writeHead(500);&#x000A;    				return res.end();&#x000A;    			}&#x000A;    			if (rows.length &amp;lt; 1) {&#x000A;    				res.end('Wrong password!');&#x000A;    			} else {&#x000A;    				sql.query('SELECT * FROM userdata WHERE name = ?;', [ req.param('username') ], this);&#x000A;    			}&#x000A;    		},&#x000A;    		function (error, rows) {&#x000A;    			if (error) {&#x000A;    				res.writeHead(500);&#x000A;    				return res.end();&#x000A;    			}&#x000A;    			req.session.username = req.param('username');&#x000A;    			req.session.data = rows[0];&#x000A;    			res.rediect('/userarea');&#x000A;    		}&#x000A;    	);&#x000A;    });&#x000A;    </pre>
    <p>The drawback here is that there is no common error handler. Although any exceptions thrown in one callback are passed to the next one as the first parameter (so the script won’t go down because of the uncaught exception), having one handler for all errors is convenient most of the time.</p>
    <hr>
    <h2>Which One to Choose?</h2>
    <p>That’s pretty much a personal choice, but to help you pick the right one, here is a list of pros and cons of each approach:</p>
    <h3>Modularization:</h3>
    <p><strong>Pros:</strong></p>
    <ul>
    <li>No external libraries</li>
    <li>Helps to make the code more reusable</li>
    </ul>
    <p><strong>Cons:</strong></p>
    <ul>
    <li>More code</li>
    <li>A lot of rewriting if you’re converting an existing project</li>
    </ul>
    <h3>Promises (Q):</h3>
    <p><strong>Pros:</strong></p>
    <ul>
    <li>Less code</li>
    <li>Only a little rewriting if applied to an existing project</li>
    </ul>
    <p><strong>Cons:</strong></p>
    <ul>
    <li>You have to use an external library</li>
    <li>Requires a bit of learning</li>
    </ul>
    <h3>Step Library:</h3>
    <p><strong>Pros:</strong></p>
    <ul>
    <li>Easy to use, no learning required</li>
    <li>Pretty much copy-and-paste if converting an existing project</li>
    </ul>
    <p><strong>Cons:</strong></p>
    <ul>
    <li>No common error handler</li>
    <li>A bit harder to indent that <code>step</code> function properly</li>
    </ul>
    <hr>
    <h2>Conclusion</h2>
    <p>As you can see, the asynchronous nature of Node.js can be managed and the callback hell can be avoided. I’m personally using the modularization approach, because I like to have my code well structured. I hope these tips will help you to write your code more readable and debug your scripts easier.</p>
    </div>
]]>
</Body>
<Summary>Node.js allows you to create apps fast and easily. But due to its asynchronous nature, it may be hard to write readable and manageable code. In this article I’ll show you a few tips on how to...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/06Brf4_lHjI/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39750/guest@my.umbc.edu/e6a519b60f58a902209dab6587359296/api/pixel</TrackingUrl>
<Tag>asynchronous-node-js</Tag>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>javascript-and-ajax</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>tutorials</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 16:18:21 -0500</PostedAt>
<EditAt>Tue, 24 Dec 2013 16:18:21 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="39749" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39749">
<Title>How to Fix a Broken Image</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>If you’ve ever created a website using HTML and had an image not show up or a picture that you can’t see, you have what’s called a broken image. This can be caused by a couple of different problems, but fortunately, it’s easy to fix. If you’re not familiar with file systems, you may want to read my previous article about <a href="http://blog.teamtreehouse.com/working-with-files-and-folders" rel="nofollow external" class="bo">working with files and folders</a> before moving on.</p>
    <h2>What is a broken image?</h2>
    <p><img alt="Screenshot of the broken image icon in Chrome, which looks like a photograph ripped in half." src="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/Screen-Shot-2013-12-23-at-2.09.59-AM.png" width="562" height="376" style="max-width: 100%; height: auto;"></p>
    <p>In the Google Chrome web browser, the above picture shows what a broken image typically looks like on a web page. It’s usually an icon that looks like a photograph or a piece of paper that’s been ripped in half. A image could be broken for any number of reasons. For example, the image might not exist, it might not be named properly, or the file path in the code might be incorrect.</p>
    <p>In this article we’ll go over more advanced file system concepts, including absolute and relative file paths. We’ll also briefly touch on file permissions. If you have a CSS file or some other file that’s not being included into the page properly, these troubleshooting steps might help fix those problems as well, because in either case you’re really just fixing how the two files are linked together.</p>
    <p>I’m sure you’re anxious, so let’s fix that broken image!</p>
    <p><strong>Make Sure the Image Exists</strong></p>
    <p>The first thing to check is whether or not the image actually exists in the place that you think it should be. This might seem like a very basic step, but it’s actually a common mistake. If you’re writing a file path and you’re expecting there to be an image called “cupcake.jpg” inside of a folder called “img”, make sure that you actually open the img folder and see if the image is there or not. Sometimes you can accidentally move things or delete things by mistake!</p>
    <p><strong>Check the Filename and Extension</strong></p>
    <p>Next, check to make sure the image is named exactly the way you have it typed in your code. Little things like dashes instead of underscores (such as “featured-cupcake.jpg” versus “featured_cupcake.jpg”) can cause a broken image. You should also check the file extension. Sometimes you might type “cupcake.jpg” when the file is actually named “cupcake.jpeg” instead. If you didn’t spot the difference in that example, look again. This is very easy for a human to miss, but to the computer, these are two different files.</p>
    <p><strong>Don’t Link to Files from Your Computer</strong></p>
    <p>If your website works on your local computer but then it breaks when you upload it to the web, then chances are you’ve used a local file path that only your computer understands. When you upload files to the web, you can’t expect the website to know about files on your local computer. Unfortunately, it’s a common mistake to include local file paths in your HTML. Here’s an <strong>incorrect</strong> example:</p>
    <p><code>&lt;img src="<a href="file:///Desktop/website/img/cupcake.jpg">file:///Desktop/website/img/cupcake.jpg</a>" alt="Photograph of a chocolate cupcake."&gt;</code></p>
    <p>Here’s another <strong>incorrect</strong> example:</p>
    <p><code>&lt;img src="C:\Documents and Settings\My Documents\cupcake.jpg" alt="Photograph of a chocolate cupcake."&gt;</code></p>
    <p>If the src attributes contain words like “Desktop” or “My Documents” or it contains backslashes (like “\”) instead of forward slashes (like “/”), then chances are you’ve used a local file path. Instead, you’ll want to use a relative file path, which we discuss in the next section.</p>
    <h2>Check the File Path</h2>
    <p>Checking to make sure that the image exists and that you’re typing in the right filename will solve the problem in most cases. However, if you’re still stuck, then it’s probably because the file path is incorrect, which requires a bit more explanation. There are two types of file paths: relative and absolute. Let’s take a look at each one, starting with relative paths.</p>
    <h3>Relative File Paths</h3>
    <p>You add images to an HTML webpage using the &lt;img&gt; element and the src attribute. Here’s what the code for a typical image might look like on a website:</p>
    <p><code>&lt;img src="img/cupcake.jpg" alt="Photograph of a chocolate cupcake."&gt;</code></p>
    <p>The above example uses what’s called a <em>relative</em> file path. In other words, we’re referring to the image file in <em>relation</em> to the current location of the HTML file. In the <code>src</code> attribute, we’re telling the HTML page that there’s a folder called “img” and inside of that folder is a file called “cupcake.jpg” that we’d like to display. If the location of cupcake.jpg changes or if the location of the HTML file changes, you must update the image path in the <code>src</code> attribute to reflect those changes.</p>
    <p>This is an important concept to understand, so let’s look at this same example using a diagram. Consider the following directory structure:</p>
    <p><img alt="File directory with a folder called img and an index.html file at the root level. Inside the img folder is an image called cupcake.jpg" src="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/directory.png" width="600" height="280" style="max-width: 100%; height: auto;"></p>
    <p>In this screenshot, index.html and the img folder are at the same “level” in the directory tree, just like siblings on a family tree. That means index.html can freely refer to the img folder without being more specific about its location. However, if we want to use the cupcake.jpg image, we’ll need to tell the index.html file where that’s located. First we have to refer to the img folder and <em>then</em> cupcake.jpg – we can’t just put “cupcake.jpg” in the <code>src</code> attribute, because it’s hidden inside the img folder and index.html can’t magically find it without us specifying its location.</p>
    <p>Let’s look at a slightly more advanced example using CSS this time instead of HTML. We’ll also use a more complex directory structure:</p>
    <p><img alt="Directory with index.html and folders called css and img at the root level. Inside of css is a file called style.css and inside of img is a file called cupcake.jpg" src="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/directory2.png" width="602" height="430" style="max-width: 100%; height: auto;"></p>
    <p>Using the above screenshot as our guide, what if we wanted to use cupcake.jpg as a background image in the style.css file? We can’t just drop in “img/cupcake.jpg” because style.css is inside of the CSS folder and the img folder isn’t a sibling of style.css – they sit at different levels. That means we need to <em>step out of</em> the css folder and the <em>step into</em> the img folder. We can move up the directory tree using two periods at the beginning of a file path, like this:</p>
    <p><code>background-image: url('../img/cupcake.jpg');</code></p>
    <p>Here’s the same screenshot, but with a step-by-step visual aid that illustrates what each part of the file path is doing:</p>
    <p><img alt="Our code inside style.css looks like this: background-image: url('../img/cupcake.jpg');  1. We start in style.css inside the css folder. 2. The “..” goes up one directory. 3. The “/img” goes down into the img directory. 4. The “/cupcake.jpg” gets the image." src="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/directory-navigation.png" width="1053" height="795" style="max-width: 100%; height: auto;"></p>
    <p>We’ll get back to relative file paths later on, but let’s check out absolute file paths first.</p>
    <h3>Absolute File Paths</h3>
    <p>What if you need to use an image that’s located somewhere else on the Internet on a different domain? In that case, you can’t just say “img/cupcake.jpg” and expect to magically get an image of a cupcake (although that might be fun). Rather, you’ll need to specify where that image is located and on which website. For example, we <em>could</em> use the Treehouse logo like this:</p>
    <p><code><a href="https://teamtreehouse.com/images/treehouse-logo.png">https://teamtreehouse.com/images/treehouse-logo.png</a></code></p>
    <p>However, this is a <strong>bad</strong> idea. In fact, I’ve used a fake URL for the Treehouse logo here because you shouldn’t ever use it in an <code>src</code> attribute like this. Here’s why this is bad:</p>
    <ol>
    <li>First, using a logo or an image from someone else’s website is typically a copyright violation unless you have the express permission from the copyright owner. Copyright law varies from one locale to another, so make sure you have permission to use the image and that you’re complying with applicable laws. If you’d like to learn more about copyright, check out <a href="http://teamtreehouse.com/library/copyright-basics" rel="nofollow external" class="bo">Copyright Basics on Treehouse</a>.</li>
    <li>Second, this is what is known as “hot linking” and it’s typically <strong>not</strong> OK. When you link directly to an image on someone else’s server instead of hosting it on your own server, you’re using up someone else’s bandwidth and you’re costing them money instead of paying for it yourself.</li>
    <li>Finally, you have no control over this image, because you’re not the one hosting it! If the owner is nice about it, they might simply ask you to take the hot link down. If they’re not nice about it, they might change the location of the image and leave you with the broken path. That’s still not the worst thing they can do though: they <em>could</em> swap the image with a horrible or obscene image with the same filename and it will then be displayed on your website! This happens more often than you’d think, but it’s because some people decide to take revenge on others for hot linking their images. I’m not here to cast moral judgement, but if the hotlinker has repeatedly ignored requests to take down the image, they probably deserve whatever is coming to them.</li>
    </ol>
    <h3>Relative versus Absolute</h3>
    <p>If you’re still new to web design, you’ll almost always want to use a relative file path. As a general rule of thumb, only use an <em>absolute</em> file path if you <em>absolutely</em> have to and you have a very specific reason for doing so.</p>
    <p>So then, when is it ever OK to use an <em>absolute</em> URL? There are probably many website specific use cases, but a common one is if you’re using a CDN (content delivery network). In this case, you’re paying another company to use their infrastructure so that you can serve images faster. For example, to speed up the page load times on Treehouse, we use a CDN to host almost all of our images and in our code we use the full URL path to those images to retrieve them. We have to, because they’re not hosted on our domain. That’s OK to do though, because we’re not just hot linking the images off of some random website that we don’t have some degree of control over; rather, it’s a service that we pay for.</p>
    <h2>Fix File Permissions</h2>
    <p>If you <em>still</em> have a broken image and you’ve triple checked the file location, filename, file extension, and relative file path, then there might be something wrong with what are called <em>file permissions</em>. Usually these are set to the correct values automatically, but sometimes when you’re uploading your website to a server, the permissions can accidentally change for some reason. If you navigate to your web page and a file has the wrong permissions, it could cause a broken image.</p>
    <p>On Treehouse we sometimes use <a href="http://cyberduck.io/" rel="nofollow external" class="bo">Cyberduck</a> to demonstrate file uploads, so we’ll use that in our example here. Cyberduck is a free cross-platform FTP app that allows you to upload files. However, depending on how you upload your files, you might need to follow different steps to change the permissions. Still, the principles remains the same.</p>
    <p>In Cyberduck, connect to your server and then right click on the file that seems to be having problems. Then, select “Info” from the context menu.</p>
    <p><img alt="Screenshot of the context menu in the Cyberduck app." src="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/cyberduck-info.png" width="818" height="400" style="max-width: 100%; height: auto;"></p>
    <p>Once you’ve selected info, you should see a window pop up that looks something like the image below. Make sure the “Permissions” area is selected.</p>
    <p><img alt="Screenshot of the info window in the Cyberduck app." src="http://blog.teamtreehouse.com/wp-content/uploads/2013/12/cyberduck-permissions.png" width="1202" height="526" style="max-width: 100%; height: auto;"></p>
    <p>Any images or other assets need to be readable by everyone. In this particular example, the file “nickpettit.jpg” is able to be read by anyone accessing the website. In the case of HTML files, such as index.html, the “Execute” items are also checked, because the HTML file basically acts like a small program. If a file should be publicly accessible, make sure that it can be read by everyone!</p>
    <p><a href="http://teamtreehouse.com/library/console-foundations-2/users-and-permissions/file-permissions-2" rel="nofollow external" class="bo">To learn more about file permissions, check out this video in Console Foundations on Treehouse.</a></p>
    <h2>Additional Tips</h2>
    <p>If you’re still new to web design and development, a broken image can come up a lot. Always make sure to <em><strong>triple</strong></em> check all the things in this article. If an image is broken, odds are pretty good that you’ve simply overlooked something, even if you’ve already checked it once or twice and you thought it was correct. Check it, check it again, and then check it one more time.</p>
    <p>If you have any additional tips that you think should be added to this article, I’d love to hear about them in the comments!</p>
    <p>The post <a href="http://blog.teamtreehouse.com/how-to-fix-a-broken-image" rel="nofollow external" class="bo">How to Fix a Broken Image</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>If you’ve ever created a website using HTML and had an image not show up or a picture that you can’t see, you have what’s called a broken image. This can be caused by a couple of different...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/eOxF8DQQ8NY/how-to-fix-a-broken-image</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39749/guest@my.umbc.edu/0709055156245599975368201e5f6984/api/pixel</TrackingUrl>
<Tag>android</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>ios</Tag>
<Tag>javascript</Tag>
<Tag>learn-to-code</Tag>
<Tag>make-a-website</Tag>
<Tag>responsive</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>Tue, 24 Dec 2013 15:25:20 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39747" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39747">
<Title>Gadgetwise: A Video Chat App Called Spin Invites a Party</Title>
<Body>
<![CDATA[
    <div class="html-content">More fun than sterile video conferencing technology, Spin lets up to 10 people interact online.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Fa-video-chat-app-called-spin-invites-a-party.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+A+Video+Chat+App+Called+Spin+Invites+a+Party" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Fa-video-chat-app-called-spin-invites-a-party.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+A+Video+Chat+App+Called+Spin+Invites+a+Party" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Fa-video-chat-app-called-spin-invites-a-party.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+A+Video+Chat+App+Called+Spin+Invites+a+Party" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Fa-video-chat-app-called-spin-invites-a-party.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+A+Video+Chat+App+Called+Spin+Invites+a+Party" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Fa-video-chat-app-called-spin-invites-a-party.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+A+Video+Chat+App+Called+Spin+Invites+a+Party" 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/184842186208/u/0/f/640387/c/34625/s/352d8d5c/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842186208/u/0/f/640387/c/34625/s/352d8d5c/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842186208/u/0/f/640387/c/34625/s/352d8d5c/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842186208/u/0/f/640387/c/34625/s/352d8d5c/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842186208/u/0/f/640387/c/34625/s/352d8d5c/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842186208/u/0/f/640387/c/34625/s/352d8d5c/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842186208/u/0/f/640387/c/34625/s/352d8d5c/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842186208/u/0/f/640387/c/34625/s/352d8d5c/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>More fun than sterile video conferencing technology, Spin lets up to 10 people interact online.      </Summary>
<Website>http://www.nytimes.com/2013/12/26/technology/personaltech/a-video-chat-app-called-spin-invites-a-party.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39747/guest@my.umbc.edu/325e4c28b8ea923bfea2f1a7517d4ff2/api/pixel</TrackingUrl>
<Tag>apple-inc-aapl-nasdaq</Tag>
<Tag>facebook-inc-fb-nasdaq</Tag>
<Tag>mobile-applications</Tag>
<Tag>new</Tag>
<Tag>technology</Tag>
<Tag>videophones-and-videoconferencing</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>Tue, 24 Dec 2013 14:40:58 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39748" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39748">
<Title>Gadgetwise: Review: Kaleidescape Cinema One Media Server</Title>
<Body>
<![CDATA[
    <div class="html-content">Kaleidescape has created a novel device, the Cinema One server, that stores and plays Blu-ray, DVD and digital movies and TV shows.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-kaleidescape-cinema-one-media-server.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+Review%3A+Kaleidescape+Cinema+One+Media+Server" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-kaleidescape-cinema-one-media-server.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+Review%3A+Kaleidescape+Cinema+One+Media+Server" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-kaleidescape-cinema-one-media-server.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+Review%3A+Kaleidescape+Cinema+One+Media+Server" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-kaleidescape-cinema-one-media-server.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+Review%3A+Kaleidescape+Cinema+One+Media+Server" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-kaleidescape-cinema-one-media-server.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise%3A+Review%3A+Kaleidescape+Cinema+One+Media+Server" 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/184842172189/u/0/f/640387/c/34625/s/352d4ab0/sc/28/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842172189/u/0/f/640387/c/34625/s/352d4ab0/sc/28/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842172189/u/0/f/640387/c/34625/s/352d4ab0/sc/28/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842172189/u/0/f/640387/c/34625/s/352d4ab0/sc/28/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842172189/u/0/f/640387/c/34625/s/352d4ab0/sc/28/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842172189/u/0/f/640387/c/34625/s/352d4ab0/sc/28/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842172189/u/0/f/640387/c/34625/s/352d4ab0/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842172189/u/0/f/640387/c/34625/s/352d4ab0/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Kaleidescape has created a novel device, the Cinema One server, that stores and plays Blu-ray, DVD and digital movies and TV shows.      </Summary>
<Website>http://www.nytimes.com/2013/12/26/technology/personaltech/review-kaleidescape-cinema-one-media-server.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39748/guest@my.umbc.edu/ad2e692cc530c1ce6f4be0a39df03e34/api/pixel</TrackingUrl>
<Tag>best-buy-company-inc-bby-nyse</Tag>
<Tag>kaleidescape</Tag>
<Tag>lions-gate-entertainment-corporation-lgf-nyse</Tag>
<Tag>movies</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>Tue, 24 Dec 2013 14:37:30 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39745" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39745">
<Title>Can Machines Think? Humans Match Wits</Title>
<Body>
<![CDATA[
    <div class="html-content">A 1991 tournament was the first attempt to run a Turing Test, an experiment to cut through the philosophical debate about whether a machine could ever be built to mimic the human mind.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F1991%2F11%2F09%2Fus%2Fcan-machines-think-humans-match-wits.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Can+Machines+Think%3F+Humans+Match+Wits" 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%2F1991%2F11%2F09%2Fus%2Fcan-machines-think-humans-match-wits.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Can+Machines+Think%3F+Humans+Match+Wits" 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%2F1991%2F11%2F09%2Fus%2Fcan-machines-think-humans-match-wits.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Can+Machines+Think%3F+Humans+Match+Wits" 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%2F1991%2F11%2F09%2Fus%2Fcan-machines-think-humans-match-wits.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Can+Machines+Think%3F+Humans+Match+Wits" 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%2F1991%2F11%2F09%2Fus%2Fcan-machines-think-humans-match-wits.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Can+Machines+Think%3F+Humans+Match+Wits" 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/184842152035/u/0/f/640387/c/34625/s/352d5534/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842152035/u/0/f/640387/c/34625/s/352d5534/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842152035/u/0/f/640387/c/34625/s/352d5534/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842152035/u/0/f/640387/c/34625/s/352d5534/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842152035/u/0/f/640387/c/34625/s/352d5534/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842152035/u/0/f/640387/c/34625/s/352d5534/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842152035/u/0/f/640387/c/34625/s/352d5534/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842152035/u/0/f/640387/c/34625/s/352d5534/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>A 1991 tournament was the first attempt to run a Turing Test, an experiment to cut through the philosophical debate about whether a machine could ever be built to mimic the human mind.      </Summary>
<Website>http://www.nytimes.com/1991/11/09/us/can-machines-think-humans-match-wits.html?pagewanted=all&amp;partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39745/guest@my.umbc.edu/5c004274c5161d07458a324a53b358cd/api/pixel</TrackingUrl>
<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>Tue, 24 Dec 2013 14:03:13 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39744" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39744">
<Title>Human or Computer? Take This Test</Title>
<Body>
<![CDATA[
    <div class="html-content">As chief scientist of the Internet portal Yahoo in 2002, Dr. Udi Manber had a profound problem with roots in the Turing Test: how to differentiate human intelligence from that of a machine.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2002%2F12%2F10%2Fscience%2Fhuman-or-computer-take-this-test.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Human+or+Computer%3F+Take+This+Test" 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%2F2002%2F12%2F10%2Fscience%2Fhuman-or-computer-take-this-test.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Human+or+Computer%3F+Take+This+Test" 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%2F2002%2F12%2F10%2Fscience%2Fhuman-or-computer-take-this-test.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Human+or+Computer%3F+Take+This+Test" 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%2F2002%2F12%2F10%2Fscience%2Fhuman-or-computer-take-this-test.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Human+or+Computer%3F+Take+This+Test" 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%2F2002%2F12%2F10%2Fscience%2Fhuman-or-computer-take-this-test.html%3Fpagewanted%3Dall%26partner%3Drss%26emc%3Drss&amp;t=Human+or+Computer%3F+Take+This+Test" 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/184842152036/u/0/f/640387/c/34625/s/352d5535/sc/21/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842152036/u/0/f/640387/c/34625/s/352d5535/sc/21/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842152036/u/0/f/640387/c/34625/s/352d5535/sc/21/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842152036/u/0/f/640387/c/34625/s/352d5535/sc/21/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842152036/u/0/f/640387/c/34625/s/352d5535/sc/21/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842152036/u/0/f/640387/c/34625/s/352d5535/sc/21/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842152036/u/0/f/640387/c/34625/s/352d5535/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842152036/u/0/f/640387/c/34625/s/352d5535/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>As chief scientist of the Internet portal Yahoo in 2002, Dr. Udi Manber had a profound problem with roots in the Turing Test: how to differentiate human intelligence from that of a machine.      </Summary>
<Website>http://www.nytimes.com/2002/12/10/science/human-or-computer-take-this-test.html?pagewanted=all&amp;partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39744/guest@my.umbc.edu/9e7cde9b69634beb4ff3359b50bbc8ee/api/pixel</TrackingUrl>
<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>Tue, 24 Dec 2013 14:03:13 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39746" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39746">
<Title>Bits: Is the Internet a Mob Without Consequence?</Title>
<Body>
<![CDATA[
    <div class="html-content">How an Internet mob went after Justine Sacco, now the former communications director for InterActiveCorp, after a controversial tweet.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fbits.blogs.nytimes.com%2F2013%2F12%2F24%2Fis-the-internet-a-mob-without-consequence%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Is+the+Internet+a+Mob+Without+Consequence%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%2F2013%2F12%2F24%2Fis-the-internet-a-mob-without-consequence%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Is+the+Internet+a+Mob+Without+Consequence%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%2F2013%2F12%2F24%2Fis-the-internet-a-mob-without-consequence%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Is+the+Internet+a+Mob+Without+Consequence%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%2F2013%2F12%2F24%2Fis-the-internet-a-mob-without-consequence%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Is+the+Internet+a+Mob+Without+Consequence%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%2F2013%2F12%2F24%2Fis-the-internet-a-mob-without-consequence%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Bits%3A+Is+the+Internet+a+Mob+Without+Consequence%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/184842197501/u/0/f/640387/c/34625/s/352d26d8/sc/38/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842197501/u/0/f/640387/c/34625/s/352d26d8/sc/38/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842197501/u/0/f/640387/c/34625/s/352d26d8/sc/38/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842197501/u/0/f/640387/c/34625/s/352d26d8/sc/38/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842197501/u/0/f/640387/c/34625/s/352d26d8/sc/38/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842197501/u/0/f/640387/c/34625/s/352d26d8/sc/38/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842197501/u/0/f/640387/c/34625/s/352d26d8/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842197501/u/0/f/640387/c/34625/s/352d26d8/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>How an Internet mob went after Justine Sacco, now the former communications director for InterActiveCorp, after a controversial tweet.      </Summary>
<Website>http://bits.blogs.nytimes.com/2013/12/24/is-the-internet-a-mob-without-consequence/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39746/guest@my.umbc.edu/d345b4c1d2f75c48035c5a6b9cdeb740/api/pixel</TrackingUrl>
<Tag>africa</Tag>
<Tag>blogs-and-blogging-internet</Tag>
<Tag>ethics-institutional</Tag>
<Tag>internet</Tag>
<Tag>new</Tag>
<Tag>social-media</Tag>
<Tag>technology</Tag>
<Tag>twitter</Tag>
<Tag>twitter-twtr-nyse</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>Tue, 24 Dec 2013 14:00:34 -0500</PostedAt>
<EditAt>Thu, 26 Dec 2013 10:40:22 -0500</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="39742" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39742">
<Title>HTML5 Canvas Text</Title>
<Body>
<![CDATA[
    <div class="html-content">In HTML5, canvas element supports basic text rendering on a line-by-line basis. There are two methods fillText() and strokeText() to draw text on canvas.</div>
]]>
</Body>
<Summary>In HTML5, canvas element supports basic text rendering on a line-by-line basis. There are two methods fillText() and strokeText() to draw text on canvas.</Summary>
<Website>http://feedproxy.google.com/~r/w3resource/~3/aBqbMdSJ0qY/html5-canvas-text.php</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39742/guest@my.umbc.edu/d2031e92b160b0b9f58ebc1e19722a5c/api/pixel</TrackingUrl>
<Tag>backend</Tag>
<Tag>css</Tag>
<Tag>frontend</Tag>
<Tag>html</Tag>
<Tag>html5</Tag>
<Tag>javascript</Tag>
<Tag>nosql</Tag>
<Tag>sql</Tag>
<Tag>xhtml</Tag>
<Tag>xml</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 12:01:22 -0500</PostedAt>
<EditAt>Thu, 15 May 2014 09:16:23 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="39741" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39741">
<Title>Sourcing.io</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>For as long as I can remember I’ve wanted to run my own business in San Francisco. A few years after I moved to the city, after a lot of jumping through visa hoops, I finally have the opportunity. After four months of development and iteration, I’m excited to release <a href="https://sourcing.io" rel="nofollow external" class="bo">Sourcing.io</a>, a tool to help you find and hire talented software engineers.</p>
    
    <p>The idea stems from a problem that I had at both Twitter and Stripe: finding software engineers is a really hard and time consuming problem. There’s a shortage of good talent and the demand is incredibly high. It’s an incredibly inefficient process that can take months and cost you tens of thousands.</p>
    
    <p>To find engineers, I resorted to the process of manually going through my Twitter followers and reaching out to them one by one. Out of about a hundred people I contacted, we hired three. While I was happy with the conversion rate, I couldn’t help thinking that part of the process could be automated to save some time.</p>
    
    <p><a href="https://sourcing.io" rel="nofollow external" class="bo">Sourcing.io</a> aims to solve that problem. We’re a search engine for discovering engineers — we’ve indexed about four million developers on GitHub, StackOverflow and other places. You can search, cut and slice that data to find the exact talent you’re looking for. For example you can filter by location, skill, company and whether candidates have published any libraries like RubyGems. </p>
    
    <p><a href="https://sourcing.io" rel="nofollow external" class="bo"><img src="https://d23f6h5jpj26xu.cloudfront.net/r8pqekmiw0yfq_small.png" alt="placeholder.png" style="max-width: 100%; height: auto;"></a></p>
    
    <p>The key aspect to Sourcing.io is that we highlight any candidates that are connected to your team in some way, such as on Twitter or Facebook. Referral based recruiting is the most effective form bar none, and we intend to take full advantage of that.</p>
    
    <p>I won’t elaborate on the product too much, you can read more in the <a href="http://blog.sourcing.io/hello-world" rel="nofollow external" class="bo">introductory post</a> on Sourcing’s blog. Suffice to say I’m absolutely loving running my own startup, and working with my co-founder <a href="https://twitter.com/ricburton" rel="nofollow external" class="bo">Richard</a>. We’re already making money, and are lucky to have many of the top companies in the valley as customers. </p>
    
    <p>If you’re having trouble finding good engineers, then give <a href="https://sourcing.io" rel="nofollow external" class="bo">Sourcing.io</a> a spin.</p>
    </div>
]]>
</Body>
<Summary>For as long as I can remember I’ve wanted to run my own business in San Francisco. A few years after I moved to the city, after a lot of jumping through visa hoops, I finally have the opportunity....</Summary>
<Website>http://blog.alexmaccaw.com/sourcing</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39741/guest@my.umbc.edu/421039654a3f9ae7384c9e92fe5ab83a/api/pixel</TrackingUrl>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Tue, 24 Dec 2013 11:17:55 -0500</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="39739" important="false" status="posted" url="https://my3.my.umbc.edu/posts/39739">
<Title>State of the Art: Review: Apple&#8217;s New Mac Pro Computer</Title>
<Body>
<![CDATA[
    <div class="html-content">Apple’s new Mac Pro is aimed at the creative professionals who have always relied on Macs for video, graphics, music and photo manipulation.<br><div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-apples-new-mac-pro-computer.html%3Fpartner%3Drss%26emc%3Drss&amp;t=State+of+the+Art%3A+Review%3A+Apple%E2%80%99s+New+Mac+Pro+Computer" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/twitter.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/facebook/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-apples-new-mac-pro-computer.html%3Fpartner%3Drss%26emc%3Drss&amp;t=State+of+the+Art%3A+Review%3A+Apple%E2%80%99s+New+Mac+Pro+Computer" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/facebook.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/linkedin/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-apples-new-mac-pro-computer.html%3Fpartner%3Drss%26emc%3Drss&amp;t=State+of+the+Art%3A+Review%3A+Apple%E2%80%99s+New+Mac+Pro+Computer" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/linkedin.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/gplus/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-apples-new-mac-pro-computer.html%3Fpartner%3Drss%26emc%3Drss&amp;t=State+of+the+Art%3A+Review%3A+Apple%E2%80%99s+New+Mac+Pro+Computer" rel="nofollow external" class="bo"><img src="http://res3.feedsportal.com/social/googleplus.png" style="max-width: 100%; height: auto;"></a> <a href="http://share.feedsportal.com/share/email/?u=http%3A%2F%2Fwww.nytimes.com%2F2013%2F12%2F26%2Ftechnology%2Fpersonaltech%2Freview-apples-new-mac-pro-computer.html%3Fpartner%3Drss%26emc%3Drss&amp;t=State+of+the+Art%3A+Review%3A+Apple%E2%80%99s+New+Mac+Pro+Computer" 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/184842175408/u/0/f/640387/c/34625/s/352bd194/sc/4/rc/1/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842175408/u/0/f/640387/c/34625/s/352bd194/sc/4/rc/1/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842175408/u/0/f/640387/c/34625/s/352bd194/sc/4/rc/2/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842175408/u/0/f/640387/c/34625/s/352bd194/sc/4/rc/2/rc.img" style="max-width: 100%; height: auto;"></a><br><a href="http://da.feedsportal.com/r/184842175408/u/0/f/640387/c/34625/s/352bd194/sc/4/rc/3/rc.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842175408/u/0/f/640387/c/34625/s/352bd194/sc/4/rc/3/rc.img" style="max-width: 100%; height: auto;"></a><br><br><a href="http://da.feedsportal.com/r/184842175408/u/0/f/640387/c/34625/s/352bd194/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/184842175408/u/0/f/640387/c/34625/s/352bd194/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Apple’s new Mac Pro is aimed at the creative professionals who have always relied on Macs for video, graphics, music and photo manipulation.      </Summary>
<Website>http://www.nytimes.com/2013/12/26/technology/personaltech/review-apples-new-mac-pro-computer.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/39739/guest@my.umbc.edu/ad5087964940f022d94c4167083ccefe/api/pixel</TrackingUrl>
<Tag>advanced-micro-devices-inc-amd-nyse</Tag>
<Tag>apple-inc-aapl-nasdaq</Tag>
<Tag>desktop-computers</Tag>
<Tag>intel-corporation-intc-nasdaq</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>Tue, 24 Dec 2013 09:03:14 -0500</PostedAt>
</NewsItem>

</News>
