<?xml version="1.0"?>
<News hasArchived="true" page="8698" pageCount="10720" pageSize="10" timestamp="Thu, 09 Jul 2026 08:48:58 -0400" url="https://my3.my.umbc.edu/posts.xml?page=8698">
<NewsItem contentIssues="false" id="110154" important="false" status="posted" url="https://my3.my.umbc.edu/posts/110154">
<Title>Sunil Dasgupta, Political Science, in the Gazette</Title>
<Body>
<![CDATA[
    <div class="html-content">“The lesson we’ve learned over these last 10, 15 years is no matter how good your [crisis management] plan is, it’s always going to fall short,” says Sunil Dasgupta in today’s Gazette. Dasgupta, director of UMBC’s political science program at the Universities at Shady Grove (USG) and non-resident Senior Fellow at the Brookings Institution, is co-teaching a crisis management class at USG. The point of the course, he explains, is not to prepare for specific disasters, but to get students thinking about how to build resilience and make decisions in catastrophic situations that they cannot fully plan for or predict. …</div>
]]>
</Body>
<Summary>“The lesson we’ve learned over these last 10, 15 years is no matter how good your [crisis management] plan is, it’s always going to fall short,” says Sunil Dasgupta in today’s Gazette. Dasgupta,...</Summary>
<Website>https://news.umbc.edu/sunil-dasgupta-political-science-in-the-gazette/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/110154/guest@my.umbc.edu/5eb7ad14ac489573d934d4de356d6a80/api/pixel</TrackingUrl>
<Tag>cahss</Tag>
<Tag>policy-and-society</Tag>
<Tag>politicalscience</Tag>
<Group token="umbc-news">UMBC News</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/umbc-news</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/original.png?1632921809</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="xlarge">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xlarge.png?1632921809</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/large.png?1632921809</AvatarUrl>
<AvatarUrl size="medium">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/medium.png?1632921809</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/small.png?1632921809</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xsmall.png?1632921809</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/001/944/2c79aeea85b1abb37f8cf9fbcdc382b0/xxsmall.png?1632921809</AvatarUrl>
<Sponsor>UMBC News</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Wed, 22 May 2013 13:38:06 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="30187" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30187">
<Title>Laravel 4: A Start at a RESTful API (Updated)</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <a href="http://rss.buysellads.com/click.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=29785&amp;c=1535581393" rel="nofollow external" class="bo"><img src="http://rss.buysellads.com/img.php?z=1260013&amp;k=d754f1e9ba63a736ba8ff5ece958f7dd&amp;a=29785&amp;c=1535581393" alt="" style="max-width: 100%; height: auto;"></a><p>RESTful API's are hard! There are a lot of aspects to designing and writing a successful one. For instance, some of the topics that you may find yourself handling include authentication, hypermedia/HATEOS, versioning, rate limits, and content negotiation. Rather than tackling all of these concepts, however, let's instead focus on the basics of REST. We'll make some JSON endpoints behind a basic authentication system, and learn a few Laravel 4 tricks in the process.</p>
    <p></p>
    <hr>
    <h2>The App</h2>
    <p>Let's build an API for a simple Read-It-Later app. Users will be able to create, read, update and delete URLs that they wish to read later.<br> Ready to dive in and get started?</p>
    <h3>Install Laravel 4</h3>
    <p>Create a new <a href="http://four.laravel.com/#install-laravel" title="install laravel" rel="nofollow external" class="bo">install of Laravel 4</a>. If you're handy with CLI, try this <a href="http://fideloper.com/laravel-4-uber-quick-start-with-auth-guide?utm_source=nettuts&amp;utm_medium=article&amp;utm_content=api&amp;utm_campaign=guest_author" title="laravel quick start" rel="nofollow external" class="bo">quickstart guide</a>. Otherwise, we have a <a href="http://net.tutsplus.com/tutorials/php/how-to-setup-laravel-4/" title="install laravel video" rel="nofollow external" class="bo">video tutorial here on Nettuts+</a> that covers the process.</p>
    <p>We're going to first create an encryption key for secure password hashing. You can do this easily by running this command from your project root:</p>
    <pre>$ php artisan key:generate&#x000A;    </pre>
    <p>Alternatively, you can simple edit your <code>app/config/app.php</code> encryption key:</p>
    <pre>/*&#x000A;    |--------------------------------------------------------------------------&#x000A;    | Encryption Key&#x000A;    |--------------------------------------------------------------------------&#x000A;    |&#x000A;    | This key is used by the Illuminate encrypter service and should be set&#x000A;    | to a random, long string, otherwise these encrypted values will not&#x000A;    | be safe. Make sure to change it before deploying any application!&#x000A;    |&#x000A;    */&#x000A;    &#x000A;    'key' =&gt; md5('this is one way to get an encryption key set'),&#x000A;    </pre>
    <h3>Database</h3>
    <p>Once you have a working install of Laravel 4, we can get started with the fun. We'll begin by creating the app's database.</p>
    <p>This will only require two database tables:</p>
    <ol>
    <li>
    <strong>Users</strong>, including a username and password</li>
    <li>
    <strong>URLs</strong>, including a url and description</li>
    </ol>
    <p>We'll use Laravel's <a href="http://four.laravel.com/docs/migrations" title="create Laravel migrations" rel="nofollow external" class="bo">migrations</a> to create and populate the database.</p>
    <h3>Configure Your Database</h3>
    <p>Edit <code>app/config/database.php</code> and fill it with your database settings. Note: this means creating a database for this application to use. This article assumes a MySQL database.</p>
    <pre>'connections' =&gt; array(&#x000A;    &#x000A;        'mysql' =&gt; array(&#x000A;            'driver'    =&gt; 'mysql',&#x000A;            'host'      =&gt; 'localhost',&#x000A;            'database'  =&gt; 'read_it_later',&#x000A;            'username'  =&gt; 'your_username',&#x000A;            'password'  =&gt; 'your_password',&#x000A;            'charset'   =&gt; 'utf8',&#x000A;            'collation' =&gt; 'utf8_unicode_ci',&#x000A;            'prefix'    =&gt; '',&#x000A;        ),&#x000A;    ),&#x000A;    </pre>
    <h3>Create Migration Files</h3>
    <pre>$ php artisan migrate:make create_users_table --table=users --create&#x000A;    $ php artisan migrate:make create_urls_table --table=urls --create&#x000A;    </pre>
    <p>These commands set up the basic migration scripts that we'll be using to create the database tables. Our job now is to fill them with the correct table columns.</p>
    <p>Edit <code>app/database/migrations/SOME_DATE_create_users_table.php</code> and add to the <code>up()</code> method:</p>
    <pre>public function up()&#x000A;    {&#x000A;        Schema::create('users', function(Blueprint $table)&#x000A;        {&#x000A;            $table-&gt;increments('id');&#x000A;            $table-&gt;string('username')-&gt;unique();&#x000A;            $table-&gt;string('password');&#x000A;            $table-&gt;timestamps();&#x000A;        });&#x000A;    }&#x000A;    </pre>
    <p>Above, we're setting a username (which should be unique), a password, as well as the timestamps. Save that, and now edit <code>app/database/migrations/SOME_DATE_create_urls_table.php</code>, and add to the <code>up()</code> method:</p>
    <pre>public function up()&#x000A;    {&#x000A;        Schema::create('urls', function(Blueprint $table)&#x000A;        {&#x000A;            $table-&gt;increments('id');&#x000A;            $table-&gt;integer('user_id');&#x000A;            $table-&gt;string('url');&#x000A;            $table-&gt;string('description');&#x000A;            $table-&gt;timestamps();&#x000A;        });&#x000A;    }&#x000A;    </pre>
    <p>The only important note in this snippet is that we're creating a link between the <code>url</code> and <code>users</code> table, via the <code>user_id</code> field.</p>
    <h3>Add Sample Users</h3>
    <p>We can use Laravel's <a href="http://four.laravel.com/docs/migrations#database-seeding" title="laravel seed database" rel="nofollow external" class="bo">seeds</a> to create a few sample users.</p>
    <p>Create a file within the <code>app/database/seeds</code> folder that has the same name as the table that it corresponds to; in our case, <code>UserTableSeeder.php</code>. Add:</p>
    <pre>&lt;?php&#x000A;    &#x000A;    class UserTableSeeder extends Seeder {&#x000A;    &#x000A;        public function run()&#x000A;        {&#x000A;            DB::table('users')-&gt;delete();&#x000A;    &#x000A;            User::create(array(&#x000A;                'username' =&gt; 'firstuser',&#x000A;                'password' =&gt; Hash::make('first_password')&#x000A;            ));&#x000A;    &#x000A;            User::create(array(&#x000A;                'username' =&gt; 'seconduser',&#x000A;                'password' =&gt; Hash::make('second_password')&#x000A;            ));&#x000A;        }&#x000A;    &#x000A;    }&#x000A;    </pre>
    <p>Next, make sure that seeder class gets run when the database is seeded. Edit <code>app/database/seeds/DatabaseSeeder.php</code>:</p>
    <pre>public function run()&#x000A;    {&#x000A;        Eloquent::unguard();&#x000A;    &#x000A;        // Add or Uncomment this line&#x000A;        $this-&gt;call('UserTableSeeder');&#x000A;    }&#x000A;    </pre>
    <h3>Run the Migrations</h3>
    <p>Here’s how to create those two tables, and insert our sample users.</p>
    <pre>// Create the two tables&#x000A;    $ php artisan migrate&#x000A;    &#x000A;    // Create the sample users&#x000A;    $ php artisan db:seed&#x000A;    </pre>
    <hr>
    <h2>Models</h2>
    <p>Laravel 4 continues to use the excellent Eloquent ORM. This will make the process of handling database calls a snap. We'll require one model per table.</p>
    <p>Luckily, Laravel comes with a User model setup, so let's create a model for our urls table.</p>
    <p>Create and edit file <code>app/models/Url.php</code>.</p>
    <pre>&lt;?php&#x000A;    &#x000A;    class Url extends Eloquent {&#x000A;    &#x000A;        protected $table = 'urls';&#x000A;    &#x000A;    }&#x000A;    </pre>
    <hr>
    <h2>Authentication</h2>
    <p>Laravel's <a href="http://four.laravel.com/docs/routing#route-filters" title="laravel filters" rel="nofollow external" class="bo">filters</a> can handle authentication for us. In particular, Laravel now comes with a Basic Authentication filter, which we can use as a quick authentication model to be used with our API requests.</p>
    <p>If you open <code>app/filters.php</code>, you'll see what it looks like:</p>
    <pre>Route::filter('auth.basic', function()&#x000A;    {&#x000A;        return Auth::basic();&#x000A;    });&#x000A;    </pre>
    <p>We just need to make one adjustment. By default, this filter looks for an "email" field to identify the user. Since we're using usernames instead of emails, we just need to adjust that preference. Change the <code>Auth::basic()</code> call by giving it our username field as a parameter:</p>
    <pre>Route::filter('auth.basic', function()&#x000A;    {&#x000A;        return Auth::basic("username");&#x000A;    });&#x000A;    </pre>
    <h3>Routes</h3>
    <p>Let's test this out. Create a route, called <code>testauth</code>, and make sure that our <code>auth.basic</code> filter runs before it.</p>
    <p>Edit <code>app/routes.php</code>:</p>
    <pre>Route::get('/authtest', array('before' =&gt; 'auth.basic', function()&#x000A;    {&#x000A;        return View::make('hello');&#x000A;    }));&#x000A;    </pre>
    <p>We can test this with a curl request. From your terminal, try pointing to your build of Laravel. In mine, it looks like this (Your URL will likely be different!):</p>
    <pre>$ curl -i localhost/l4api/public/index.php/authtest&#x000A;    HTTP/1.1 401 Unauthorized&#x000A;    Date: Tue, 21 May 2013 18:47:59 GMT&#x000A;    WWW-Authenticate: Basic&#x000A;    Vary: Accept-Encoding&#x000A;    Content-Type: text/html; charset=UTF-8&#x000A;    &#x000A;    Invalid credentials&#x000A;    </pre>
    <p>As you can see, an unauthorized request is detected and a "Invalid Credentials" message is returned with a 401 status code. Next, try including basic authentication.</p>
    <pre>$ curl --user firstuser:first_password localhost/l4api/public/index.php/authtest&#x000A;    HTTP/1.1 200 OK&#x000A;    Date: Tue, 21 May 2013 18:50:51 GMT&#x000A;    Vary: Accept-Encoding&#x000A;    Content-Type: text/html; charset=UTF-8&#x000A;    &#x000A;    &lt;h1&gt;Hello World!&lt;/h1&gt;&#x000A;    </pre>
    <p>It worked!</p>
    <p>At this point, the baseline work of our API is done. We have:</p>
    <ul>
    <li>Installed Laravel 4</li>
    <li>Created our database</li>
    <li>Created our models</li>
    <li>Created an authentication model</li>
    </ul>
    <hr>
    <h2>Creating Functional Requests</h2>
    <p>You may be familiar with Laravel's <a href="http://four.laravel.com/docs/controllers#restful-controllers" title="laravel restful controller" rel="nofollow external" class="bo">RESTful controllers</a>. They still exist in Laravel 4; however, we can also use Laravel's <a href="http://four.laravel.com/docs/controllers#resource-controllers" title="laravel resourceful controller" rel="nofollow external" class="bo">Resourceful Controllers</a>, which set up some paradigms that we can use to make a consistent API interface. We'll be using a Resourceful controller.</p>
    <blockquote><p><a href="http://four.laravel.com/docs/controllers#resource-controllers" rel="nofollow external" class="bo">Here's a breakdown</a> of what each method in the resourceful controller will handle. Please note that you can remove the /resource/create and /resource/{id}/edit routes, since we won't be needing to show 'create' or 'edit' forms in an API.</p></blockquote>
    <h3>Create a Resourceful Controller</h3>
    <pre>$ php artisan controller:make UrlController&#x000A;    </pre>
    <p>Next, setup a route to use the controller, and require each route to be authenticated.</p>
    <p>Edit <code>app/routes.php</code> and add:</p>
    <pre>// Route group for API versioning&#x000A;    Route::group(array('prefix' =&gt; 'api/v1', 'before' =&gt; 'auth.basic'), function()&#x000A;    {&#x000A;        Route::resource('url', 'UrlController');&#x000A;    });&#x000A;    </pre>
    <p>A few things are happening there.</p>
    <ol>
    <li>This is going to respond to requests made to <code><a href="http://example.com/api/v1/url">http://example.com/api/v1/url</a></code>.</li>
    <li>This allows us to add extra routes, if we need to expand our API. For instance, if you add a user end-point, such as <code>/api/v1/user</code>.</li>
    <li>There is also a naming mechanism in place for versioning our API. This gives us the opportunity to roll out new API versions without breaking older versions – We can simply create a <strong>v2</strong> route group, and point it to a new controller!</li>
    </ol>
    <p>Note: You may want to consider more advanced API versioning techniques, such as using an <code>Accept</code> header or subdomain which can help you point different API versions separate code bases.</p>
    <h3>Add the Functionality</h3>
    <p>Edit the new <code>app/controllers/UrlController.php</code> file:</p>
    <pre>// Edit this:&#x000A;    public function index()&#x000A;    {&#x000A;        return 'Hello, API';&#x000A;    }&#x000A;    </pre>
    <p>Let’s test it:</p>
    <pre>$ curl -i localhost/l4api/public/index.php/api/v1/url&#x000A;    HTTP/1.1 401 Unauthorized&#x000A;    Date: Tue, 21 May 2013 19:02:59 GMT&#x000A;    WWW-Authenticate: Basic&#x000A;    Vary: Accept-Encoding&#x000A;    Content-Type: text/html; charset=UTF-8&#x000A;    &#x000A;    Invalid credentials.&#x000A;    &#x000A;    $ curl --user firstuser:first_password localhost/l4api/public/index.php/api/v1/url&#x000A;    HTTP/1.1 200 OK&#x000A;    Date: Tue, 21 May 2013 19:04:19 GMT&#x000A;    Vary: Accept-Encoding&#x000A;    Content-Type: text/html; charset=UTF-8&#x000A;    &#x000A;    Hello, API&#x000A;    </pre>
    <p>We now have a resourceful controller with authentication working, and are ready to add functionality.</p>
    <h3>Create a URL</h3>
    <p>Edit <code>app/controllers/UrlController.php</code>:</p>
    <pre>/**&#x000A;     * Store a newly created resource in storage.&#x000A;     *&#x000A;     * @return Response&#x000A;     */&#x000A;    public function store()&#x000A;    {&#x000A;        $url = new Url;&#x000A;        $url-&gt;url = Request::get('url');&#x000A;        $url-&gt;description = Request::get('description');&#x000A;        $url-&gt;user_id = Auth::user()-&gt;id;&#x000A;    &#x000A;        // Validation and Filtering is sorely needed!!&#x000A;        // Seriously, I'm a bad person for leaving that out.&#x000A;    &#x000A;        $url-&gt;save();&#x000A;    &#x000A;        return Response::json(array(&#x000A;            'error' =&gt; false,&#x000A;            'urls' =&gt; $urls-&gt;toArray()),&#x000A;            200&#x000A;        );&#x000A;    }&#x000A;    </pre>
    <p>It's time to test this with another curl request. This one will send a POST request, which will correspond to the <code>store()</code> method created above.</p>
    <pre>$ curl -i --user firstuser:first_password -d 'url=<a href="http://google.com&amp;description=A">http://google.com&amp;description=A</a> Search Engine' localhost/l4api/public/index.php/api/v1/url&#x000A;    HTTP/1.1 201 Created&#x000A;    Date: Tue, 21 May 2013 19:10:52 GMT&#x000A;    Content-Type: application/json&#x000A;    &#x000A;    {"error":false,"message":"URL created"}&#x000A;    </pre>
    <p>Cool! Let's create a few more, for both of our users.</p>
    <pre>$ curl --user firstuser:first_password -d 'url=<a href="http://fideloper.com&amp;description=A">http://fideloper.com&amp;description=A</a> Great Blog' localhost/l4api/public/index.php/api/v1/url&#x000A;    &#x000A;    $ curl --user seconduser:second_password -d 'url=<a href="http://digitalsurgeons.com&amp;description=A">http://digitalsurgeons.com&amp;description=A</a> Marketing Agency' localhost/l4api/public/index.php/api/v1/url&#x000A;    &#x000A;    $ curl --user seconduser:second_password -d 'url=<a href="http://www.poppstrong.com/&amp;description=I">http://www.poppstrong.com/&amp;description=I</a> feel for him' localhost/l4api/public/index.php/api/v1/url&#x000A;    </pre>
    <p>Next, let's create methods for retrieving URLs.</p>
    <pre>/**&#x000A;     * Display a listing of the resource.&#x000A;     *&#x000A;     * @return Response&#x000A;     */&#x000A;    public function index()&#x000A;    {&#x000A;        //Formerly: return 'Hello, API';&#x000A;    &#x000A;        $urls = Url::where('user_id', Auth::user()-&gt;id)-&gt;get();&#x000A;    &#x000A;        return Response::json(array(&#x000A;            'error' =&gt; false,&#x000A;            'urls' =&gt; $urls-&gt;toArray()),&#x000A;            200&#x000A;        );&#x000A;    }&#x000A;    &#x000A;    /**&#x000A;     * Display the specified resource.&#x000A;     *&#x000A;     * @param  int  $id&#x000A;     * @return Response&#x000A;     */&#x000A;    public function show($id)&#x000A;    {&#x000A;        // Make sure current user owns the requested resource&#x000A;        $url = Url::where('user_id', Auth::user()-&gt;id)&#x000A;                -&gt;where('id', $id)&#x000A;                -&gt;take(1)&#x000A;                -&gt;get();&#x000A;    &#x000A;        return Response::json(array(&#x000A;            'error' =&gt; false,&#x000A;            'urls' =&gt; $url-&gt;toArray()),&#x000A;            200&#x000A;        );&#x000A;    }&#x000A;    </pre>
    <p>Let's test them out:</p>
    <pre>$ curl --user firstuser:first_password localhost/l4api/public/index.php/api/v1/url&#x000A;    {&#x000A;        "error": false,&#x000A;        "urls": [&#x000A;           {&#x000A;                "created_at": "2013-02-01 02:39:10",&#x000A;                "description": "A Search Engine",&#x000A;                "id": "2",&#x000A;                "updated_at": "2013-02-01 02:39:10",&#x000A;                "url": "<a href="http://google.com">http://google.com</a>",&#x000A;                "user_id": "1"&#x000A;            },&#x000A;            {&#x000A;                "created_at": "2013-02-01 02:44:34",&#x000A;                "description": "A Great Blog",&#x000A;                "id": "3",&#x000A;                "updated_at": "2013-02-01 02:44:34",&#x000A;                "url": "<a href="http://fideloper.com">http://fideloper.com</a>",&#x000A;                "user_id": "1"&#x000A;            }&#x000A;        ]&#x000A;    }&#x000A;    &#x000A;    $ curl --user firstuser:first_password localhost/l4api/public/index.php/api/v1/url/1&#x000A;    {&#x000A;        "error": false,&#x000A;        "urls": [&#x000A;            {&#x000A;                "created_at": "2013-02-01 02:39:10",&#x000A;                "description": "A Search Engine",&#x000A;                "id": "2",&#x000A;                "updated_at": "2013-02-01 02:39:10",&#x000A;                "url": "<a href="http://google.com">http://google.com</a>",&#x000A;                "user_id": "1"&#x000A;            }&#x000A;        ]&#x000A;    }&#x000A;    </pre>
    <p>Almost done. Let's now allow users to delete a url.</p>
    <pre>/**&#x000A;     * Remove the specified resource from storage.&#x000A;     *&#x000A;     * @param  int  $id&#x000A;     * @return Response&#x000A;     */&#x000A;    public function destroy($id)&#x000A;    {&#x000A;        $url = Url::where('user_id', Auth::user()-&gt;id)-&gt;find($id);&#x000A;    &#x000A;        $url-&gt;delete();&#x000A;    &#x000A;        return Response::json(array(&#x000A;            'error' =&gt; false,&#x000A;            'message' =&gt; 'url deleted'),&#x000A;            200&#x000A;            );&#x000A;    }&#x000A;    </pre>
    <p>Now, we can delete a URL by using a DELETE request:</p>
    <pre>$ curl -i -X DELETE --user firstuser:first_password localhost/l4api/public/index.php/api/v1/url/1&#x000A;    HTTP/1.1 200 OK&#x000A;    Date: Tue, 21 May 2013 19:24:19 GMT&#x000A;    Content-Type: application/json&#x000A;    &#x000A;    {"error":false,"message":"url deleted"}&#x000A;    </pre>
    <p>Lastly, let's allow users to update a url.</p>
    <pre>/**&#x000A;     * Update the specified resource in storage.&#x000A;     *&#x000A;     * @param  int  $id&#x000A;     * @return Response&#x000A;     */&#x000A;    public function update($id)&#x000A;    {&#x000A;        $url = Url::where('user_id', Auth::user()-&gt;id)-&gt;find($id);&#x000A;    &#x000A;        if ( Request::get('url') )&#x000A;        {&#x000A;            $url-&gt;url = Request::get('url');&#x000A;        }&#x000A;    &#x000A;        if ( Request::get('description') )&#x000A;        {&#x000A;            $url-&gt;description = Request::get('description');&#x000A;        }&#x000A;    &#x000A;        $url-&gt;save();&#x000A;    &#x000A;        return Response::json(array(&#x000A;            'error' =&gt; false,&#x000A;            'message' =&gt; 'url updated'),&#x000A;            200&#x000A;        );&#x000A;    }&#x000A;    </pre>
    <p>To test URL updates, run:</p>
    <pre>$ curl -i -X PUT --user seconduser:second_password -d 'url=<a href="http://yahoo.com">http://yahoo.com</a>' localhost/l4api/public/index.php/api/v1/url/4&#x000A;    HTTP/1.1 200 OK&#x000A;    Date: Tue, 21 May 2013 19:34:21 GMT&#x000A;    Content-Type: application/json&#x000A;    &#x000A;    {"error":false,"message":"url updated"}&#x000A;    &#x000A;    // View our changes&#x000A;    $ curl --user seconduser:second_password localhost/l4api/public/index.php/api/v1/url/4&#x000A;    {&#x000A;        "error": false,&#x000A;        "urls": [&#x000A;            {&#x000A;                "created_at": "2013-02-01 02:44:34",&#x000A;                "description": "I feel for him",&#x000A;                "id": "3",&#x000A;                "updated_at": "2013-02-02 18:44:18",&#x000A;                "url": "<a href="http://yahoo.com">http://yahoo.com</a>",&#x000A;                "user_id": "1"&#x000A;            }&#x000A;        ]&#x000A;    }&#x000A;    </pre>
    <hr>
    <h2>And That’s It</h2>
    <p>We now have the beginnings of a fully-functioning API. I hope that you've learned a lot about how to get an API underway with Laravel 4.</p>
    <p>To recap, we achieved the following in this lesson:</p>
    <ol>
    <li>Install Laravel</li>
    <li>Create the database, using migrations and seeding</li>
    <li>Use Eloquent ORM models</li>
    <li>Authenticate with Basic Auth</li>
    <li>Set up Routes, including versioning the API</li>
    <li>Create the API functionality using Resourceful Controllers</li>
    </ol>
    <h3>The Next Steps</h3>
    <p>If you’d like to push your API up a notch, you might consider any of the following as a next step.</p>
    <ol>
    <li>Validation (Hint: Laravel has a <a href="http://four.laravel.com/docs/validation" rel="nofollow external" class="bo">Validation library</a>).</li>
    <li>API-request error handling – It's still possible to receive HTML response on API requests (Hint: <a href="http://fideloper.com/laravel4-error-handling" title="laravel error handling" rel="nofollow external" class="bo">Laravel Error Handling</a>, plus Content Negotiation.)</li>
    <li>Content Negotiation – listening for the Accept header. (Hint: <a href="http://four.laravel.com/docs/requests#request-information" title="Laravel request class" rel="nofollow external" class="bo">Laravel's Request Class</a> will give you the request headers).</li>
    <li>Check out the <a href="http://groups.google.com/group/api-craft/" rel="nofollow external" class="bo">API Craft Google Group</a>
    </li>
    <li>Learn about the <a href="http://fideloper.com/quick-caching-explanation?utm_source=nettuts&amp;utm_medium=article&amp;utm_content=api&amp;utm_campaign=guest_author" title="http cache" rel="nofollow external" class="bo">different types caching</a> and how Validation Caching can improve your API</li>
    <li><a href="leanpub.com/laravel-testing-decoded" rel="nofollow external" class="bo">Unit test your code</a></li>
    <li>Check out <a href="http://apigee.com/about/api-best-practices" rel="nofollow external" class="bo">Apigee's great API resources</a>
    </li>
    </ol>
    </div>
]]>
</Body>
<Summary>RESTful API's are hard! There are a lot of aspects to designing and writing a successful one. For instance, some of the topics that you may find yourself handling include authentication,...</Summary>
<Website>http://feedproxy.google.com/~r/nettuts/~3/iseZmkJPwRw/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30187/guest@my.umbc.edu/66758d3fa814da7b65bef50634d05454/api/pixel</TrackingUrl>
<Tag>api</Tag>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>laravel</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>rest</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, 22 May 2013 12:00:07 -0400</PostedAt>
<EditAt>Wed, 22 May 2013 12:00:07 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="30170" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30170">
<Title>Gadgetwise Blog: A Fitting Screen Protector for the iPhone 5</Title>
<Body>
<![CDATA[
    <div class="html-content">Trü Protection is trying to simplify the process for applying screen protectors to the iPhone 4 and 5 with a mounting system intended to automatically align a phone and a screen protector.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fgadgetwise.blogs.nytimes.com%2F2013%2F05%2F22%2Fa-fitting-screen-protector-for-the-iphone-5%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise+Blog%3A+A+Fitting+Screen+Protector+for+the+iPhone+5" 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%2Fgadgetwise.blogs.nytimes.com%2F2013%2F05%2F22%2Fa-fitting-screen-protector-for-the-iphone-5%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise+Blog%3A+A+Fitting+Screen+Protector+for+the+iPhone+5" 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%2Fgadgetwise.blogs.nytimes.com%2F2013%2F05%2F22%2Fa-fitting-screen-protector-for-the-iphone-5%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise+Blog%3A+A+Fitting+Screen+Protector+for+the+iPhone+5" 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%2Fgadgetwise.blogs.nytimes.com%2F2013%2F05%2F22%2Fa-fitting-screen-protector-for-the-iphone-5%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise+Blog%3A+A+Fitting+Screen+Protector+for+the+iPhone+5" 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%2Fgadgetwise.blogs.nytimes.com%2F2013%2F05%2F22%2Fa-fitting-screen-protector-for-the-iphone-5%2F%3Fpartner%3Drss%26emc%3Drss&amp;t=Gadgetwise+Blog%3A+A+Fitting+Screen+Protector+for+the+iPhone+5" 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/165664225512/u/0/f/640387/c/34625/s/2c436179/kg/355/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165664225512/u/0/f/640387/c/34625/s/2c436179/kg/355/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Trü Protection is trying to simplify the process for applying screen protectors to the iPhone 4 and 5 with a mounting system intended to automatically align a phone and a screen protector.     </Summary>
<Website>http://gadgetwise.blogs.nytimes.com/2013/05/22/a-fitting-screen-protector-for-the-iphone-5/?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30170/guest@my.umbc.edu/2084ad6888b6ff6ef5b9596cb6a7b541/api/pixel</TrackingUrl>
<Tag>headsets-and-accessories</Tag>
<Tag>mobile-tech</Tag>
<Tag>new</Tag>
<Tag>products</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, 22 May 2013 11:20:53 -0400</PostedAt>
<EditAt>Wed, 22 May 2013 14:22:03 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="false" id="30168" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30168">
<Title>In a Data Deluge, Companies Seek to Fill a New Role</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>A job invented in Silicon Valley is going mainstream as more industries try to gain an edge from big data.</p>
    <p>The job description “data scientist” didn’t exist five years ago. No one advertised for an expert in data science, and you couldn’t go to school to specialize in the field. Today, companies are fighting to recruit these specialists, courses on how to become one are popping up at many universities, and the <em>Harvard Business Review</em> even proclaimed that data scientist is <a href="http://hbr.org/2012/10/data-scientist-the-sexiest-job-of-the-21st-century/" rel="nofollow external" class="bo">the “sexiest</a>” job of the 21st century.</p>
    </div>
]]>
</Body>
<Summary>A job invented in Silicon Valley is going mainstream as more industries try to gain an edge from big data.  The job description “data scientist” didn’t exist five years ago. No one advertised for...</Summary>
<Website>http://www.technologyreview.com/news/513866/in-a-data-deluge-companies-seek-to-fill-a-new-role/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30168/guest@my.umbc.edu/e4f916e5a6dfdef817447ee7866a927d/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</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, 22 May 2013 11:05:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="30169" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30169">
<Title>What 5G Will Be: Crazy-Fast Wireless Tested in New York City</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>Samsung’s technology for ultrafast data speeds currently requires a truckload of equipment.</p>
    <p>The world’s biggest cell-phone maker, Samsung, caused a stir last week by announcing an ultrafast wireless technology that it unofficially dubbed “5G.” And the technology has, in fact, been tested on the streets of New York.</p>
    </div>
]]>
</Body>
<Summary>Samsung’s technology for ultrafast data speeds currently requires a truckload of equipment.  The world’s biggest cell-phone maker, Samsung, caused a stir last week by announcing an ultrafast...</Summary>
<Website>http://www.technologyreview.com/news/514931/what-5g-will-be-crazy-fast-wireless-tested-in-new-york-city/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30169/guest@my.umbc.edu/90cbde8a8ed3485528ccb0e06788ccfe/api/pixel</TrackingUrl>
<Tag>development</Tag>
<Tag>internet</Tag>
<Tag>mit</Tag>
<Tag>technology</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, 22 May 2013 11:00:00 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="30164" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30164">
<Title>Clearwire Recommends Approval of Sweetened Sprint Bid</Title>
<Body>
<![CDATA[
    <div class="html-content">Clearwire announced the decision a day after Sprint raised its offer for the almost 50 percent of the company it does not own to $3.40 per share from $2.97 per share.<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.nytimes.com%2Freuters%2F2013%2F05%2F22%2Fbusiness%2F22reuters-clearwire-sprint.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Clearwire+Recommends+Approval+of+Sweetened+Sprint+Bid" 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%2Freuters%2F2013%2F05%2F22%2Fbusiness%2F22reuters-clearwire-sprint.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Clearwire+Recommends+Approval+of+Sweetened+Sprint+Bid" 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%2Freuters%2F2013%2F05%2F22%2Fbusiness%2F22reuters-clearwire-sprint.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Clearwire+Recommends+Approval+of+Sweetened+Sprint+Bid" 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%2Freuters%2F2013%2F05%2F22%2Fbusiness%2F22reuters-clearwire-sprint.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Clearwire+Recommends+Approval+of+Sweetened+Sprint+Bid" 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%2Freuters%2F2013%2F05%2F22%2Fbusiness%2F22reuters-clearwire-sprint.html%3Fpartner%3Drss%26emc%3Drss&amp;t=Clearwire+Recommends+Approval+of+Sweetened+Sprint+Bid" 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/165664224632/u/0/f/640387/c/34625/s/2c42bd0b/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165664224632/u/0/f/640387/c/34625/s/2c42bd0b/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Clearwire announced the decision a day after Sprint raised its offer for the almost 50 percent of the company it does not own to $3.40 per share from $2.97 per share.     </Summary>
<Website>http://www.nytimes.com/reuters/2013/05/22/business/22reuters-clearwire-sprint.html?partner=rss&amp;emc=rss</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30164/guest@my.umbc.edu/628f7d983c4329f4996a0897e62fbc19/api/pixel</TrackingUrl>
<Tag>clearwire-corporation-clwr-nasdaq</Tag>
<Tag>new</Tag>
<Tag>sprint-nextel-corporation-s-nyse</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, 22 May 2013 10:59:57 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="30178" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30178">
<Title>Designers respond to Flickr revamp</Title>
<Body>
<![CDATA[
    <div class="html-content">It’s a massive improvement, they say, except when they don’t<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.netmagazine.com%2Fnews%2Fdesigners-respond-flickr-revamp-132763&amp;t=Designers+respond+to+Flickr+revamp" 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.netmagazine.com%2Fnews%2Fdesigners-respond-flickr-revamp-132763&amp;t=Designers+respond+to+Flickr+revamp" 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.netmagazine.com%2Fnews%2Fdesigners-respond-flickr-revamp-132763&amp;t=Designers+respond+to+Flickr+revamp" 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.netmagazine.com%2Fnews%2Fdesigners-respond-flickr-revamp-132763&amp;t=Designers+respond+to+Flickr+revamp" 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.netmagazine.com%2Fnews%2Fdesigners-respond-flickr-revamp-132763&amp;t=Designers+respond+to+Flickr+revamp" 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/165664320826/u/49/f/502346/c/32632/s/2c4446cc/kg/342-363/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165664320826/u/49/f/502346/c/32632/s/2c4446cc/kg/342-363/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>It’s a massive improvement, they say, except when they don’t     </Summary>
<Website>http://feedproxy.google.com/~r/net/topstories/~3/yDLYy_xp_pM/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30178/guest@my.umbc.edu/6f7f0ed3f50453637c4fc5e33ac29253/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>net</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 22 May 2013 10:57:23 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="30160" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30160">
<Title>RDF Validation Workshop - Practical Assurances for Quality RDF Data</Title>
<Body>
<![CDATA[
    <div class="html-content"><p>W3C announced today a <a href="https://www.w3.org/2012/12/rdf-val/" rel="nofollow external" class="bo">RDF Validation Workshop - Practical Assurances for Quality RDF Data</a>, 10-11 September 2013, in Cambridge, USA. The Semantic Web has demonstrated considerable value for collaborative contributions to data. Adoption in many mission-critical environments requires data to conform to specified patterns. Validation in a banking context shares many requirements with quality assurance of linked clinical data. Systems like Linked Open Data, which don't have formal interface specifications, share these validation needs. Most data representation languages used in conventional settings offer some sort of input validation, ranging from parsing grammars for domain-specific languages to XML Schema or RelaxNG for XML structures. While the distributed nature of RDF affects the notions of "validity", tool chains need to be established to ensure data integrity. The goal of this workshop is to discuss use cases for data validation on the Semantic Web with development of technologies to enable those use cases. W3C membership is not required to participate. The event is open to all. All participants are required to submit a position paper by 30 June 2013.</p></div>
]]>
</Body>
<Summary>W3C announced today a RDF Validation Workshop - Practical Assurances for Quality RDF Data, 10-11 September 2013, in Cambridge, USA. The Semantic Web has demonstrated considerable value for...</Summary>
<Website>http://www.w3.org/News/2013.html#entry-9834</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30160/guest@my.umbc.edu/b7c962d3ba53155679c5213b6d1b767b/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>home-page-stories</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>semantic-web</Tag>
<Tag>sql</Tag>
<Tag>top-story</Tag>
<Tag>w3</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, 22 May 2013 10:54:58 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="30172" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30172">
<Title>The top 10 most-used PHP features</Title>
<Body>
<![CDATA[
    <div class="html-content">Carl Glaysher of Ecce Media rounds up his top 10 most useful PHP functions, classes and features<div><table border="0"><tbody><tr><td>
    <a href="http://share.feedsportal.com/share/twitter/?u=http%3A%2F%2Fwww.netmagazine.com%2Ffeatures%2Ftop-10-most-used-php-features&amp;t=The+top+10+most-used+PHP+features" 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.netmagazine.com%2Ffeatures%2Ftop-10-most-used-php-features&amp;t=The+top+10+most-used+PHP+features" 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.netmagazine.com%2Ffeatures%2Ftop-10-most-used-php-features&amp;t=The+top+10+most-used+PHP+features" 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.netmagazine.com%2Ffeatures%2Ftop-10-most-used-php-features&amp;t=The+top+10+most-used+PHP+features" 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.netmagazine.com%2Ffeatures%2Ftop-10-most-used-php-features&amp;t=The+top+10+most-used+PHP+features" 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/165664412183/u/49/f/502346/c/32632/s/2c43521b/a2.htm" rel="nofollow external" class="bo"><img src="http://da.feedsportal.com/r/165664412183/u/49/f/502346/c/32632/s/2c43521b/a2.img" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>Carl Glaysher of Ecce Media rounds up his top 10 most useful PHP functions, classes and features     </Summary>
<Website>http://feedproxy.google.com/~r/net/topstories/~3/U3NRHsKBVxs/story01.htm</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30172/guest@my.umbc.edu/0d91807c51f68b6c43242ebf11aa8727/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>net</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>web</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Wed, 22 May 2013 10:45:15 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="30143" important="false" status="posted" url="https://my3.my.umbc.edu/posts/30143">
<Title>Do&#8217;s and don&#8217;ts of typography</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><img alt="Do's and don'ts of – Typography" src="http://netdna.webdesignerdepot.com/uploads/2013/05/thumbnail11.jpg" width="200" height="160" style="max-width: 100%; height: auto;">As so much of the content available on the web is text it’s essential for web designers to understand the basic principles of good typography. Having such knowledge allows designers to communicate more effectively, enabling them to create better designs and websites that are easier to use.</p>
    <p>For more experienced designers setting text may come naturally but for those who are just starting out I’ve decided to put together a list of the basic do’s and don’ts. Not only will this list teach you the fundamentals but you can also use it as a check list to work through on future projects. Here goes:</p>
    <h1>DO establish a typographic hierarchy</h1>
    <p>A typographic hierarchy can be established by using a variety of methods such as size, weight, color, and contrast. Its purpose is to give pages structure and guide the user through the content. Without a clear hierarchy the text becomes much harder to scan and therefore generally harder to read. Just take a look at the examples below. On the left the text is one size and one weight so it’s hard to differentiate between headings and body text. Meanwhile, on the right, we have the same content but with a clear typographic hierarchy, so it’s much easier to distinguish between the different elements.</p>
    <p>Here I’ve only used size and weight to establish my hierarchy but for even better results you can try to experiment with color and contrast as well.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/hierarchy.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <h1>DON’T make the text too small</h1>
    <p>Not everybody has 20-20 vision so it’s important to make sure that your body text is big enough for people to read comfortably. Personally I would recommend no smaller than a size of 14pt.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/text_size.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <h1>DO choose an appropriate font for the body text</h1>
    <p>Another important factor when it comes to your body text is legibility. Although a typeface like Satisfy might suit a design with a hand-made aesthetic, using a typeface such as this for your body text will have a negative impact on your users. This is because it’s much harder to read than your average serif or sans-serif. Look at the examples below and you will notice how much harder your brain has to work in order to make out the words on the left compared to those on the right.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/font_choice.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <h1>DON’T use too many different fonts on one page</h1>
    <p>Services like Typekit and Google Fonts may give you access to thousands of fonts but it doesn’t mean that you have to use them all. As you can see from the example below, unless it’s done really well, using multiple fonts can be very distracting. This is why I usually recommend using no more than 2 or 3.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/too_many_fonts.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <h1>DO give your text room to breathe</h1>
    <p>A lack of white space between each line can affect readability because it makes it difficult for the eye to track from one line to the next. However, this problem can easily be solved by increasing your line-heights, but be careful not to overdo it, too much space can also affect readability in a negative way.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/line_height.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <h1>DON’T make continuous use of all caps</h1>
    <p>People aren’t used to reading large chunks of text set in all caps and because of this it’s actually harder for people to read. Not only that but people often associate all caps with shouting or aggression and when it comes to marketing copy it can come across quite spammy. Due to this it’s important to think about how and when you’re going to use all caps and to make sure that you use it in moderation.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/all_caps.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <h1>DO try and limit paragraphs to 40-60 characters per line</h1>
    <p>If a line is too long the reader gradually begins to lose focus and can often have trouble reading from one line to the next. If a line is too short it causes the reader’s eye to travel back too often, which disrupts their rhythm. This can also make them start reading the next line too soon, causing them to miss words from the previous line. This is why the optimal line length for body text is said to be around 40-60 characters per line.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/charactersperline.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <h1>DON’T use large amounts of centered text</h1>
    <p>Centered text is difficult to read because the edges of the text block are uneven which makes it harder to scan because each line has a different starting point. Centered text blocks are also difficult to align to other objects on the page and are often considered to look quite amateurish. This is why, like all caps, it’s best to use centered text in moderation, opting for left aligned text as standard instead.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/centered_text.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <h1>DO make sure there is enough contrast between your text and the background</h1>
    <p>Contrast is another aspect of typography that can affect readability. If there’s not enough contrast between the text and the background, the content can become illegible.</p>
    <p><img src="http://netdna.webdesignerdepot.com/uploads/2013/05/contrast.jpg" width="650" alt="Dos and donts of typography" style="max-width: 100%; height: auto;"></p>
    <p> </p>
    <p><em><strong>Do you have anything to add? What tips would you give new designers just starting out? Let us know in the comments.</strong></em></p>
    <p><br><br>
    </p>
    <table width="100%">
    <tbody>
    <tr>
    <td>
          <a href="http://www.mightydeals.com/deal/rockable-themes.html?ref=inwidget" rel="nofollow external" class="bo"><strong>Gorgeous Premium WordPress Theme Bundle – only $19!</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="Dos and donts of typography" style="max-width: 100%; height: auto;"><br>
          </a>
        </td>
    </tr>
    </tbody>
    </table>
    <p><br> </p>
    <a href="http://www.webdesignerdepot.com/2013/05/dos-and-donts-of-typography/" rel="nofollow external" class="bo">Source</a>
    </div>
]]>
</Body>
<Summary>As so much of the content available on the web is text it’s essential for web designers to understand the basic principles of good typography. Having such knowledge allows designers to communicate...</Summary>
<Website>http://www.webdesignerdepot.com/2013/05/dos-and-donts-of-typography/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/30143/guest@my.umbc.edu/f5932d9c4099d033249903f0750da489/api/pixel</TrackingUrl>
<Tag>appropriate-font</Tag>
<Tag>art</Tag>
<Tag>basic-typography</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>graphic-design</Tag>
<Tag>html</Tag>
<Tag>html5</Tag>
<Tag>illustrator</Tag>
<Tag>javascript</Tag>
<Tag>learning-typography</Tag>
<Tag>mysql</Tag>
<Tag>number-of-fonts-on-a-page</Tag>
<Tag>oracle</Tag>
<Tag>photoshop</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>starting-out-with-typography</Tag>
<Tag>text-size-on-websites</Tag>
<Tag>typographic-hierarchy</Tag>
<Tag>typography</Tag>
<Tag>web-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, 22 May 2013 10:15:12 -0400</PostedAt>
<EditAt>Wed, 22 May 2013 10:15:12 -0400</EditAt>
</NewsItem>

</News>
