<?xml version="1.0"?>
<News hasArchived="true" page="7713" pageCount="10780" pageSize="10" timestamp="Mon, 31 Aug 2026 17:55:12 -0400" url="https://my3.my.umbc.edu/posts.xml?mode=activity&amp;page=7713&amp;range=30">
<NewsItem contentIssues="true" id="42446" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42446">
<Title>We're more than halfway through our first ever ROWE-athon, where we've given fou...</Title>
<Body>
<![CDATA[
    <div class="html-content">We're more than halfway through our first ever ROWE-athon, where we've given four teams 24 hours to make their idea happen. Our teams have been up all night and are still going strong! <br> <br> Check out the scenes from last night.<br> <br> (What's ROWE? Results Only Work Environment).<br><br><a href="https://www.facebook.com/photo.php?fbid=10151904855696076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=9" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-c-a.akamaihd.net/hphotos-ak-ash3/t1.0-0/10001569_10151904855696076_1589022716_s.jpg" alt="" style="max-width: 100%; height: auto;"></a><a href="https://www.facebook.com/photo.php?fbid=10151904855656076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=8" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-g-a.akamaihd.net/hphotos-ak-prn1/t1.0-0/1926949_10151904855656076_611547549_s.jpg" alt="" style="max-width: 100%; height: auto;"></a><a href="https://www.facebook.com/photo.php?fbid=10151904855806076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=7" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-a-a.akamaihd.net/hphotos-ak-prn1/t1.0-0/1939822_10151904855806076_2034000050_s.jpg" alt="" style="max-width: 100%; height: auto;"></a><a href="https://www.facebook.com/photo.php?fbid=10151904855646076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=6" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-c-a.akamaihd.net/hphotos-ak-frc1/t1.0-0/1939784_10151904855646076_2037415351_s.jpg" alt="" style="max-width: 100%; height: auto;"></a><a href="https://www.facebook.com/photo.php?fbid=10151904855676076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=5" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-b-a.akamaihd.net/hphotos-ak-frc1/t1.0-0/1979539_10151904855676076_1225299125_s.jpg" alt="" style="max-width: 100%; height: auto;"></a><a href="https://www.facebook.com/photo.php?fbid=10151904855641076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=4" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-e-a.akamaihd.net/hphotos-ak-ash3/t1.0-0/1958474_10151904855641076_352541319_s.jpg" alt="" style="max-width: 100%; height: auto;"></a><a href="https://www.facebook.com/photo.php?fbid=10151904855651076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=3" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-a-a.akamaihd.net/hphotos-ak-ash3/t1.0-0/6982_10151904855651076_127311043_s.jpg" alt="" style="max-width: 100%; height: auto;"></a><a href="https://www.facebook.com/photo.php?fbid=10151904855661076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=2" title="" rel="nofollow external" class="bo"><img src="https://scontent-b.xx.fbcdn.net/hphotos-frc1/l/t1.0-0/1972442_10151904855661076_1399538761_s.jpg" alt="" style="max-width: 100%; height: auto;"></a><a href="https://www.facebook.com/photo.php?fbid=10151904855681076&amp;set=pcb.10151904856201076&amp;type=1&amp;relevant_count=1" title="" rel="nofollow external" class="bo"><img src="https://fbcdn-photos-e-a.akamaihd.net/hphotos-ak-ash3/t1.0-0/1975065_10151904855681076_475133852_s.jpg" alt="" style="max-width: 100%; height: auto;"></a>
    </div>
]]>
</Body>
<Summary>We're more than halfway through our first ever ROWE-athon, where we've given four teams 24 hours to make their idea happen. Our teams have been up all night and are still going strong!     Check...</Summary>
<Website>http://www.facebook.com/umbctraining/posts/10151904856201076</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42446/guest@my.umbc.edu/1c67ac4ad981071dddca36504332e3d8/api/pixel</TrackingUrl>
<Tag>ccna</Tag>
<Tag>ceh</Tag>
<Tag>centers</Tag>
<Tag>cisco</Tag>
<Tag>cyber</Tag>
<Tag>cybersecurity</Tag>
<Tag>information</Tag>
<Tag>it</Tag>
<Tag>leadership</Tag>
<Tag>management</Tag>
<Tag>microsoft</Tag>
<Tag>project</Tag>
<Tag>security</Tag>
<Tag>technology</Tag>
<Tag>training</Tag>
<Tag>umbc</Tag>
<Group token="retired-575">UMBC Training Centers</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-575</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/original.jpg?1361981335</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xlarge.png?1361981335</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/large.png?1361981335</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/medium.png?1361981335</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/small.png?1361981335</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xsmall.png?1361981335</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/575/83756b985266168d0d29c6c9a146db50/xxsmall.png?1361981335</AvatarUrl>
<Sponsor>UMBC Training Centers</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 14 Mar 2014 11:19:56 -0400</PostedAt>
<EditAt>Fri, 14 Mar 2014 11:19:56 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42447" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42447">
<Title>Should I Use WordPress to Create a Website?</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p>(Photo by <a href="http://www.flickr.com/photos/williamhook/2971294143/" rel="nofollow external" class="bo">William Hook</a>/Flickr)</p>
    <p>You can create powerful, polished sites with WordPress without learning a lot of coding. Once you’re comfortable with WordPress, you can do in a week or a weekend what could take you a month or more to code from scratch. The WordPress software, once installed on a server, provides a ton of tools for building and managing great websites.</p>
    <p>WordPress works best for certain types of sites. Personal portfolios, blogs, and brochure sites, for instance, are super-easy with WordPress. Thanks to well-developed WordPress plug-ins, you can also easily build e-commerce sites, job boards, social networks and other custom sites. More developers are even talking about using WordPress as an application framework; however, this is a less-developed use case for WordPress at the moment.</p>
    <h2>When Should I Use WordPress?</h2>
    <p>For super-simple websites, WordPress is an overkill.  It’s better to code from scratch by using a simpler CMS like Perch or a lightweight development tool like Jekyll.</p>
    <p>For complex sites that require too much bending, tweaking and hacking to make WordPress a viable solution, you should explore building the site from the ground up, likely relying on JavaScript and back-end programming languages like PHP or Ruby.</p>
    <p>Most website creators using WordPress today run basic sites, those with static pages, a blog or news section, some sort of custom content, and a variety of common features like slideshows, contact forms, and more. WordPress plug-ins handle those features with no problems. It has the ability to create custom content and assign them your own fields and options. This helps when your content doesn’t fit into the default title and content options that WordPress offers for blog posts and static pages. Unless your theme comes with custom content by default, you will have to activate a few plug-ins and do some template coding to include custom content on your WordPress site.</p>
    <h2>Using Themes in WordPress</h2>
    <p>Themes make it easy to pass as a professional designer from the start. Themes exists in the thousands upon thousands and so many of them are beautiful, well-supported and cover the gambit of common web industries and trends. In fact, working solely developing and selling WordPress themes is a common goal for Treehouse students taking the <a href="http://teamtreehouse.com/tracks/wordpress-development" rel="nofollow external" class="bo">WordPress Development Track</a>.</p>
    <p>When you start building websites with WordPress, you will likely start off customizing themes that you either download for free or purchase from a theme developer or theme marketplace. To properly customize a WordPress theme to suit you or your client, you will likely create a child theme, the preferred method for customizing themes. This involves setting up a new folder in your themes folder into which you copy and paste any files from the main theme you want to customize. This can include the main style.css file or one of the theme PHP files.</p>
    <p>When it gets to the point of creating child themes and customizing themes, someone learning to build websites with WordPress needs to come to terms with beginning to learn a little HTML, CSS and even some PHP. Luckily, unlike when building sites from scratch, knowing just a little bit of each of these languages will let you do much of what you will want to in terms of customizing a theme.  Since themes, plugins, and WordPress itself do most of the work for you, a little coding goes a long way.</p>
    <p>If you learn the basic skills that take you from being able to use WordPress to being able to make WordPress sites from start to finish, you will find yourself in a healthy, happy, and successful marketplace. Watch our trailer for <a href="http://teamtreehouse.com/library/how-to-make-a-website-with-wordpress" rel="nofollow external" class="bo">How to Make a Website with WordPress</a> to see how easy it is to get there.</p>
    <p>The post <a href="http://blog.teamtreehouse.com/introduction-making-websites-wordpress" rel="nofollow external" class="bo">Should I Use WordPress to Create a Website?</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>(Photo by William Hook/Flickr)   You can create powerful, polished sites with WordPress without learning a lot of coding. Once you’re comfortable with WordPress, you can do in a week or a weekend...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/_YmMu-yNXds/introduction-making-websites-wordpress</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42447/guest@my.umbc.edu/cd6ae78b67b2aab9c0b669658c9f6398/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>make-a-website</Tag>
<Tag>responsive</Tag>
<Tag>web</Tag>
<Tag>wordpress</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>Fri, 14 Mar 2014 11:17:12 -0400</PostedAt>
<EditAt>Fri, 14 Mar 2014 11:17:12 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42448" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42448">
<Title>Build Your Own Yeoman Generator</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <p><a href="http://yeoman.io/" rel="nofollow external" class="bo">Yeoman's</a> generators are what give its platform flexibility, allowing you to reuse the same tool for any kind of project you may be working on, JavaScript or otherwise, and that's before I mention the enormous library of over 400 <a href="http://yeoman.io/community-generators.html" rel="nofollow external" class="bo">community contributed generators</a>. Sometimes though, you may have some specific setup that you like to employ in your own projects and for situations like this, it makes sense to abstract all the boilerplate into your own generator.</p>
    
    <p>In this article, we will be building a Yeoman generator that will allow us to build a single page site, one row at a time, it's a fairly simple example but it will allow us to cover a lot of the more interesting features Yeoman provides.</p>
    
    
    
    <h2>Getting Set Up</h2>
    
    <p>I am going to assume you have <a href="http://nodejs.org/" rel="nofollow external" class="bo">Node.js</a> setup, if not, you can grab the installation from <a href="http://nodejs.org/download/" rel="nofollow external" class="bo">here</a>. Besides that, we will need to have Yeoman installed as well as the generator for creating generators. You can accomplish this via the following command to <code>npm</code>:</p>
    
    <pre>npm install -g yo generator-generator&#x000A;    </pre>
    
    <p>Finally, we need to create the actual project, so navigate to the folder of your choosing and run:</p>
    
    <pre>yeoman generator&#x000A;    </pre>
    
    <p>This will start the generator and ask you some questions like the project name and your GitHub account, for this article, I am going to name my generator <code>one page</code>.</p>
    
    <h2>The File Structure</h2>
    
    <p>Don't be alarmed by the large number of files generated by the command, it will all make sense in just a moment.</p>
    
    
    
    <img alt="File Tree for Yeoman Generator" src="https://cdn.tutsplus.com/net/uploads/2014/02/yeoman_generator_01.png" style="max-width: 100%; height: auto;">
    
    
    
    <p>The first couple files are dotfiles for various things like Git and Travis CI, we have a <code>package.json</code> file for the generator itself, a <code>readme </code>file and a folder for tests. Besides that, each command in our generator gets a folder with an <code>index.js</code> file and a folder for templates.</p>
    
    <p>The <code>index.js</code> file needs to export the actual generator object which will get run by Yeoman. I am going to clear everything inside the actual generator so we can start from scratch, here is what the file should look like after that:</p>
    
    <pre>'use strict';&#x000A;    var util = require('util');&#x000A;    var path = require('path');&#x000A;    var yeoman = require('yeoman-generator');&#x000A;    var chalk = require('chalk');&#x000A;    &#x000A;    var OnepageGenerator = yeoman.generators.Base.extend({&#x000A;    &#x000A;    });&#x000A;    &#x000A;    module.exports = OnepageGenerator;&#x000A;    </pre>
    
    <p>A Yeoman Generator can extend from two different pre-built options: the <code>Base</code> generator, which you can see this one inherits from, or the <code>NamedBase</code> generator, which is actually the same thing except it adds a single parameter that the user can set when they call your generator. It doesn't matter too much which one you choose, you can always add parameters manually if you need more.</p>
    
    <p>All that this code is doing is creating this generator object and exporting it out, Yeoman will actually retrieve the exported object and run it. The way it runs, is by first calling the constructor method to set the object up and then it will go through all the methods you create on this object (in the order you created them) and run them one at a time. This means it doesn't really matter what you call the functions and it gives you the flexibility to name them things that make sense to you.</p>
    
    <p>Now, the other thing you should know is that Yeoman has its own functions for dealing with the file system that really help you out with paths. All the functions you would normally use like <code>mkdir</code>, <code>read</code>, <code>write</code>, <code>copy</code>, etc, have been provided, but Yeoman will use the template directory in this command's folder as the path for reading data and the folder the user is running your generator as the root path for outputting files. This means you don't even need to think about the full paths when you work with files, you can merely run copy and yeoman will handle the two different locations for you.</p>
    
    <h2>Getting Input</h2>
    
    <p>Yeoman allows you to add questions to your generator so that you can receive input from the user and customize the behavior appropriately. We are going to have two questions in our generator. The first being the name of the project and the second being whether or not to include a dummy section as an example.</p>
    
    <p>To accomplish this, we will add a function that will prompt the user for these two pieces of info and then store the results on our object itself:</p>
    
    <pre>var OnepageGenerator = yeoman.generators.Base.extend({&#x000A;        promptUser: function() {&#x000A;            var done = this.async();&#x000A;    &#x000A;            // have Yeoman greet the user&#x000A;            console.log(this.yeoman);&#x000A;    &#x000A;            var prompts = [{&#x000A;                name: 'appName',&#x000A;                message: 'What is your app\'s name ?'&#x000A;            },{&#x000A;                type: 'confirm',&#x000A;                name: 'addDemoSection',&#x000A;                message: 'Would you like to generate a demo section ?',&#x000A;                default: true&#x000A;            }];&#x000A;    &#x000A;            this.prompt(prompts, function (props) {&#x000A;                this.appName = props.appName;&#x000A;                this.addDemoSection = props.addDemoSection;&#x000A;      &#x000A;                done();&#x000A;            }.bind(this));&#x000A;        }&#x000A;    });&#x000A;    </pre>
    
    <p>The first line inside the function sets a <code>done</code> variable from the object's <code>async</code> method. Yeoman tries to run your methods in the order that they are defined, but if you run any async code, the function will exit before the actual work gets completed and Yeoman will start the next function early. To get around this, you can call the <code>async</code> method, which will return a callback and then Yeoman will wait to go on to the next function until that callback gets executed, which you can see it does at the end, after prompting the user.</p>
    
    <p>The next line where we just log <code>yeoman</code>, that's the Yeoman logo which you saw when we ran the Yeoman generator just before. Next, we defined a list of prompts, each prompt has a type, a name and a message. If no type was specified, it will default to ‘input' which is for standard text entry. There are a lot of cool input types like lists, check boxes and passwords, you can view the full list <a href="https://github.com/SBoudrias/Inquirer.js#question" rel="nofollow external" class="bo">here</a>. In our application, we are using one text input and one ‘confirm' (yes/no) type of input.</p>
    
    <p>With the array of questions ready, we can pass it to the <code>prompt</code> method along with a callback function. The first parameter of the callback function is the list of answers received back from the user. We then attach those properties onto our main object and call the <code>done</code> method to go on to the next function.</p>
    
    <h2>Scaffolding Our Application</h2>
    
    <p>Our application has the outer skeleton, which will include the header, menu, footer and some CSS, and then we have the inner content which will go in its own directory along with a custom CSS file per section. This will allow you to set global properties in the main file and customize each row by itself.</p>
    
    <p>Let's start with the header file, just create a new file in the templates directory called <code>_header.html</code> with the following:</p>
    
    <pre>&lt;!DOCTYPE HTML&gt;&#x000A;    &lt;html&gt;&#x000A;    &lt;head&gt;&#x000A;        &lt;meta charset="utf-8"&gt;&#x000A;        &lt;title&gt;&lt;%= site_name %&gt;&lt;/title&gt;&#x000A;        &lt;link rel="stylesheet" href="<a href="http://cdnjs.cloudflare.com/ajax/libs/semantic-ui/0.12.0/css/semantic.min.css%22&amp;gt">http://cdnjs.cloudflare.com/ajax/libs/semantic-ui/0.12.0/css/semantic.min.css"&amp;gt</a>;&#x000A;        &lt;link rel="stylesheet" href="css/main.css"&gt;&#x000A;    &lt;/head&gt;&#x000A;    &lt;body&gt;</pre>
    
    <p>The file names don't need to start with an underscore, but it's a best practice to differentiate the name from the final output name so you can tell which one you are dealing with. Also, you can see that besides for including our main CSS file, I am also including the <a href="http://semantic-ui.com/" rel="nofollow external" class="bo">Semantic UI Library</a> as a grid for rows and for the menu (not to mention the great styling).</p>
    
    <p>Another thing you may have noticed, is I used an EJS-styled placeholder for the title and it will get filled in at runtime. Yeoman uses Underscore templates (well lO dash) and as such you can create your files like this and the data will be generated at runtime.</p>
    
    <p>Next, let's create the footer (put this in a file named <code>_footer.html</code> in the templates folder):</p>
    
    <pre>    &lt;/body&gt;&#x000A;    &lt;/html&gt;</pre>
    
    <p>It just closes the HTML document for us, as we won't be having any JavaScript in our application. The last HTML file required for the outer scaffold is the menu, we are going to generate the actual links at runtime, but we can write the outer container in a template file called <code>_menu.html</code>:</p>
    
    <pre>&lt;div class="ui fixed inverted menu"&gt;&#x000A;    &lt;/div&gt;</pre>
    
    <p>It's a plain div with some classes provided by Semantic UI. We will pull in the actual links based on the generated sections later. Next, let's make the <code>_main.css</code> file:</p>
    
    <pre>body{&#x000A;        margin: 0;&#x000A;        font-family: "Open Sans", "Helvetica Neue", "Helvetica", "Arial", sans-serif;&#x000A;    }&#x000A;    </pre>
    
    <p>Just some code to help with the menu positioning and change the font, but this is where you can put any default styles you want on the entire document. Now we have to make templates for the individual sections and their accompanying CSS files, these are pretty basic files as we will leave them pretty blank for the user to customize, so inside of <code>_section.html</code> add the following:</p>
    
    <pre>&lt;div id="&lt;%= id %&gt;" class="ui grid"&gt;&#x000A;        &lt;div class="sixteen column"&gt;&#x000A;            &lt;h1&gt;&lt;%= content %&gt;&lt;/h1&gt;&#x000A;        &lt;/div&gt;&#x000A;    &lt;/div&gt;</pre>
    
    <p>Just an outer div with a unique id which we will generate based on the section's name and a class for the Semantic grid system. Then inside, I just added an <code>H1</code> tag which again will just contain the section's name. Next, let's create the CSS file, so create a file called <code>section.css</code> with the following:</p>
    
    <pre>#&lt;%= id %&gt;{&#x000A;        background: #FFFFFF;&#x000A;        color: #000;&#x000A;    }&#x000A;    </pre>
    
    <p>This is more of a placeholder with the same ID as the outer container, but it's common to change the background of each row to separate the content, so I added that property in for convenience. Now, just for completion's sake, let's create a file called <code>_gruntfile.js</code> but we will populate it later and let's fill in the <code>_package.json</code> file that was provided:</p>
    
    <pre>{&#x000A;        "name": "appname",&#x000A;        "version": "0.0.0",&#x000A;        "devDependencies": {&#x000A;            "grunt": "~0.4.2",&#x000A;            "grunt-contrib-connect": "~0.6.0",&#x000A;            "grunt-contrib-concat": "~0.3.0",&#x000A;            "grunt-contrib-cssmin": "~0.7.0"&#x000A;        }&#x000A;    }&#x000A;    </pre>
    
    <p>It's a little bit of a spoiler as to what we will be doing later, but it's the dependencies we will need for our Grunt tasks.</p>
    
    <p>With all these files ready, let's go add the methods to scaffold a new project. So back in our <code>index.js</code> file, right after the <code>promptUser</code> method, let's add a function to create all the folders we will need:</p>
    
    <pre>scaffoldFolders: function(){&#x000A;        this.mkdir("app");&#x000A;        this.mkdir("app/css");&#x000A;        this.mkdir("app/sections");&#x000A;        this.mkdir("build");&#x000A;    },&#x000A;    </pre>
    
    <p>I added an <code>app</code> folder and inside, two more directories: <code>css</code> and <code>sections</code>, this is where the end-user would build there application. I also created a <code>build</code> folder which is where the different sections and CSS files will get compiled together and built into a single file.</p>
    
    <p>Next, let's add another method to copy over some of our templates:</p>
    
    <pre>copyMainFiles: function(){&#x000A;        this.copy("_footer.html", "app/footer.html");&#x000A;        this.copy("_gruntfile.js", "Gruntfile.js");&#x000A;        this.copy("_package.json", "package.json");&#x000A;        this.copy("_main.css", "app/css/main.css");    &#x000A;    &#x000A;        var context = { &#x000A;            site_name: this.appName &#x000A;        };&#x000A;    &#x000A;        this.template("_header.html", "app/header.html", context);&#x000A;    },&#x000A;    </pre>
    
    <p>Here we use two new methods, <code>copy</code> and <code>template</code>, which are pretty similar in function. <code>copy</code> will take the file from the templates directory and move it to the output folder, using the provided paths. <code>template</code> does the same thing, except before writing to the output folder it will run it through Underscore's tempting function along with the context in order to fill in the placeholders.</p>
    
    <p>I didn't copy the menu over yet because for that, we need to generate the links, but we can't really generate the links until we add the demo section. So the next method we create, will add the demo section:</p>
    
    <pre>generateDemoSection: function(){&#x000A;        if (this.addDemoSection) {&#x000A;            var context = {&#x000A;                content: "Demo Section",&#x000A;                id: this._.classify("Demo Section")&#x000A;            }&#x000A;      &#x000A;            var fileBase = Date.now() + "_" + this._.underscored("Demo Section");&#x000A;            var htmlFile = "app/sections/" + fileBase + ".html";&#x000A;            var cssFile  = "app/css/" + fileBase + ".css"; &#x000A;      &#x000A;            this.template("_section.html", htmlFile, context);&#x000A;            this.template("_section.css", cssFile, context);&#x000A;        }&#x000A;    },&#x000A;    </pre>
    
    <p>Another function that you may not be familiar with is the <code>classify</code> function, which is provided to you by <a href="https://github.com/epeli/underscore.string" rel="nofollow external" class="bo">Underscore Strings</a>. What it does is it takes a string and it creates a “class” version of it, it will remove things like spaces and create a camel-cased version, suitable for things like HTML classes and IDs; <code>underscored</code> does the same thing except instead of camel-casing it snake-cases them. Besides that, it's all stuff we have done in the previous function, the only other thing worth mentioning is that we are pre-pending a time-stamp, both to keep the files unique but also for ordering. When we load the files in, they are alphabetized so having the time as the prefix will keep them in order.</p>
    
    <p>The last file that needs to be copied over is the <code>menu.html</code> file but to do that, we need to generate the links. The problem is we don't really know at this stage which files were generated before or if the user added sections manually. So to build up the menu, we need to read from the output path and after reading the sections that exist there, we need to construct the menu links. There are a handful of new functions that we haven't used yet, so we will go through it line by line:</p>
    
    <pre>generateMenu: function(){&#x000A;        var menu = this.read("_menu.html");&#x000A;    &#x000A;        var t = '<a rel="nofollow external" class="bo">&lt;%= name %&gt;</a>';&#x000A;        var files = this.expand("app/sections/*.html");&#x000A;    &#x000A;        for (var i = 0; i &lt; files.length; i++) {&#x000A;            var name = this._.chain(files[i]).strRight("_").strLeftBack(".html").humanize().value();&#x000A;      &#x000A;            var context = {&#x000A;                name: name,&#x000A;                id: this._.classify(name)&#x000A;            };&#x000A;      &#x000A;            var link = this.engine(t, context);&#x000A;            menu = this.append(menu, "div.menu", link);&#x000A;        }&#x000A;    &#x000A;        this.write("app/menu.html", menu);&#x000A;    },&#x000A;    </pre>
    
    <p>The first line reads in the menu's outer HTML and then I created a template string that we can use for each link. After that, I used the <code>expand</code> function, which accepts a resource path, relative to the folder the generator was called in (the output path) and it returns an array of all the files that match the provided pattern, in our case this will return all the section HTML files.</p>
    
    <p>Then we cycle though the list of files and for each one, we use Underscore Strings to remove the timestamp and file extension so that we are left with just the name of the file. The <code>humanize</code> method will take things that are camel-cased or characters like underscores and dashes and convert them to spaces, so you get a human readable string. It will also capitalize the first letter of the string which will work out great for our menu. With the name separated, we create a context object along with the ID we used before, so that the links will actually take us to the correct sections.</p>
    
    <p>Now we have two new functions we haven't seen before, <code>engine</code> and <code>append</code>. <code>engine</code> takes a template string as the first parameter and a context object as the second and it will run it through the templating engine and returns the results. <code>append</code> accepts an HTML string as the first parameter, a selector as the second, and something to insert as the third parameter. What it will do is insert the provided content at the end of all the elements that match the selector. Here we are adding the link to the end of the <code>menu</code> div.</p>
    
    <p>Last, but not least, we have the <code>write</code> method which will take our computed HTML string and write it out to the file. Now, just to finish up here, let's add a method to run <code>npm</code>:</p>
    
    <pre>runNpm: function(){&#x000A;        var done = this.async();&#x000A;        this.npmInstall("", function(){&#x000A;            console.log("\nEverything Setup !!!\n");&#x000A;            done();&#x000A;        });&#x000A;    }&#x000A;    </pre>
    
    <p>The first parameter for <code>npmInstall</code> is the paths, but you can just leave this blank, besides that I am just printing out a message at the end, telling the user the app is ready.</p>
    
    <p>So as a quick recap, when our generator runs, it will ask the user for the project name and whether or not to include a demo section. After that, it will go on to create the folder structure and copy in all the files needed for our project. Once done, it will run <code>npm</code> to install the dependencies we defined and it will display the message we just put in.</p>
    
    <p>This is pretty much all the main generator needs to do, but it's not that useful without the Grunt tasks. Currently, it's just a bunch of separate files but in order to properly develop the sections, we need a way to preview them as a single file and we will also need to the ability to build the results. So open <code>_gruntfile.js</code> from the templates directory and let's get started:</p>
    
    <pre>module.exports = function(grunt) {&#x000A;      grunt.initConfig({&#x000A;        //task config&#x000A;      });&#x000A;    &#x000A;      grunt.loadNpmTasks('grunt-contrib-connect');&#x000A;      grunt.loadNpmTasks('grunt-contrib-cssmin');&#x000A;      grunt.loadNpmTasks('grunt-contrib-concat');&#x000A;    &#x000A;      grunt.registerTask('serve', ['connect']);&#x000A;      grunt.registerTask('build', ['concat', 'cssmin']);&#x000A;      grunt.registerTask('default', ['build']);&#x000A;    };&#x000A;    </pre>
    
    <p>So far, this is just the standard boilerplate, we need to export a function and inside we include the three dependencies we added to the <code>package.json</code> file, and then we register the tasks. We will have a <code>serve</code> task which will act like a server and let us view the separate files together while we develop our site and then we have the <code>build</code> command which will combine all the HTML and CSS in our app together for deployment. I also added the last line, so if you just run <code>grunt</code> by itself, it will assume you want to build.</p>
    
    <p>Now, let's start with the configuration for the <code>build</code> command as it's a lot shorter:</p>
    
    <pre>concat: {&#x000A;        dist: {&#x000A;            src: ["app/header.html", "app/menu.html", "app/sections/*.html", "app/footer.html"],&#x000A;            dest: "build/index.html"&#x000A;        }&#x000A;    },&#x000A;    cssmin: {&#x000A;        css: {&#x000A;            files: {&#x000A;                "build/css/main.css": ["app/css/*.css"]&#x000A;            }&#x000A;        }&#x000A;    }&#x000A;    </pre>
    
    <p>For the HTML, we are just going to concatenate all the HTML files together in the order specified into the build folder under the name <code>index.html</code>. With the CSS, we also want to minify it, so we are using the <code>cssmin</code> plugin and we are specifying that we want to output a file called <code>main.css</code> inside the <code>build/css</code> folder and we want it to include the minified versions of all the CSS files in our project.</p>
    <h3>Connect Server</h3>
    
    <p>Next, we need to add the configuration for the Connect server, connect provides a lot of great middleware for serving static files or directories, but here we need to combine all the files first, so we are going to have to create some custom handlers. To begin, let's put the base configuration in:</p>
    
    <pre>connect: {&#x000A;        server: {&#x000A;            options: {&#x000A;                keepalive: true,&#x000A;                open: true,&#x000A;                middleware: function(){&#x000A;                    //custom handlers here&#x000A;                }&#x000A;            }&#x000A;        }&#x000A;    },&#x000A;    </pre>
    
    <p>The <code>keepalive</code> option tells Grunt to keep the server running, the <code>open</code> option will tell Grunt to open the URL in your browser automatically when you start the server (it's more of a personal preference though) and the <code>middleware</code> function is meant to return an array of middleware handlers to process the requests.</p>
    
    <p>In our application, there are basically two resources we need to handle, the root resource (our “<code>index.html</code>”) in which case we need to combine all our HTML files and return them and then the “<code>main.css</code>” resource, in which case we would want to return all the CSS files combined together. As for anything else, we can just return a 404.</p>
    
    <p>So let's start by creating an array for the middleware and let's add the first one (this goes inside the <code>middleware</code> property's function, where I placed the comment):</p>
    
    <pre>  var middleware = [];&#x000A;      &#x000A;      middleware.push(function(req, res, next) {&#x000A;          if (req.url !== "/") return next();&#x000A;          &#x000A;          res.setHeader("Content-type", "text/html");&#x000A;          var html = grunt.file.read("app/header.html");&#x000A;          html += grunt.file.read("app/menu.html");&#x000A;      &#x000A;          var files = grunt.file.expand("app/sections/*.html");&#x000A;                  &#x000A;          for (var i = 0; i &lt; files.length; i++) {&#x000A;              html += grunt.file.read(files[i]);&#x000A;          }&#x000A;       &#x000A;          html += grunt.file.read("app/footer.html");&#x000A;          res.end(html);&#x000A;      });&#x000A;    </pre>
    
    <p>We have kind of shifted from Yeoman's API to Grunt's, but luckily the command names are almost identical, we are still using <code>read</code> to read files and <code>expand</code> to get the list of files. Besides that, all we are doing is setting the content-type and returning the concatenated version of all the HTML files. If you are unfamiliar with a middleware based server, basically it will run through the middleware stack until somewhere along the line, a function can handle the request.</p>
    
    <p>In the first line, we check if the request is for the root URL, if it is we handle the request, otherwise we call <code>next()</code> which will pass the request down the line onto the next middleware.</p>
    
    <p>Next, we need to hand the request to <code>/css/main.css</code> which, if you remember, is what we set up in the header:</p>
    
    <pre>  middleware.push(function(req, res, next){&#x000A;          if (req.url !== "/css/main.css") return next();&#x000A;          &#x000A;          res.setHeader("Content-type", "text/css");&#x000A;          var css = "";&#x000A;      &#x000A;          var files = grunt.file.expand("app/css/*.css");&#x000A;          for (var i = 0; i &lt; files.length; i++) {&#x000A;               css += grunt.file.read(files[i]);&#x000A;          }&#x000A;      &#x000A;          res.end(css);&#x000A;      });&#x000A;    </pre>
    
    <p>Basically, this is the same function as before except for the CSS files. Last, but not least, I will add a 404 message and return the middleware stack:</p>
    
    <pre>  middleware.push(function(req, res){&#x000A;          res.statusCode = 404;&#x000A;          res.end("Not Found");&#x000A;      });&#x000A;      &#x000A;      return middleware;&#x000A;    </pre>
    
    <p>This means if any requests don't get handled by the previous two functions, then we will send this 404 message. And that's all there is to it, we have the generator which will create the project and the Grunt tasks which will allow us to preview and build our app. The last topic I want to cover briefly, is sub generators.</p>
    
    <h2>Sub Generators</h2>
    
    <p>We have already created the main generator that builds out our application but Yeoman allows you to create as many sub-generators as you want to use after the initial scaffolding. In our application, we need one to generate new sections. To get started, we can actually use a sub generator from the <code>generator:generator</code> to scaffold the file, to do this, just run the following command from inside our <code>onepage</code> folder:</p>
    
    <pre>yo generator:subgenerator section&#x000A;    </pre>
    
    <p>This will create a new folder called <code>section</code> with an <code>index.js</code> file and a <code>templates</code> folder just like our main (app) generator. Let's empty out the generator like we did last time and you should be left with the following:</p>
    
    <pre>'use strict';&#x000A;    var util = require('util');&#x000A;    var yeoman = require('yeoman-generator');&#x000A;    &#x000A;    var SectionGenerator = yeoman.generators.NamedBase.extend({&#x000A;    &#x000A;    });&#x000A;    &#x000A;    module.exports = SectionGenerator;&#x000A;    </pre>
    
    <p>You may also notice we are extending from the <code>NamedBase</code> not the regular <code>Base</code>, that means you have to supply a name parameter when you call the generator and you can then access that name using <code>this.name</code>. Now this code is essentially the two functions we already wrote in the previous generator: <code>generateDemoSection</code> and <code>generateMenu</code>, so we can just copy those two functions here.  I will replace the name of the first one to something more appropriate:</p>
    
    <pre>generateSection: function(){&#x000A;        var context = {&#x000A;            content: this.name,&#x000A;            id: this._.classify(this.name)&#x000A;        }&#x000A;        &#x000A;        var fileBase = Date.now() + "_" + this._.underscored(this.name);&#x000A;        var htmlFile = "app/sections/" + fileBase + ".html";&#x000A;        var cssFile  = "app/css/" + fileBase + ".css"; &#x000A;        &#x000A;        this.template("_section.html", htmlFile, context);&#x000A;        this.template("_section.css", cssFile, context);&#x000A;    },&#x000A;    &#x000A;    generateMenu: function(){&#x000A;        var menu = this.read("_menu.html");&#x000A;        &#x000A;        var t = '<a rel="nofollow external" class="bo">&lt;%= name %&gt;</a>';&#x000A;        var files = this.expand("app/sections/*.html");&#x000A;        &#x000A;        for (var i = 0; i &lt; files.length; i++) {&#x000A;            var name = this._.chain(files[i]).strRight("_").strLeftBack(".html").humanize().value();&#x000A;            &#x000A;            var context = {&#x000A;                name: name,&#x000A;                id: this._.classify(name)&#x000A;            };&#x000A;            &#x000A;            var link = this.engine(t, context);&#x000A;            menu = this.append(menu, "div.menu", link);&#x000A;        }&#x000A;        &#x000A;        this.write("app/menu.html", menu);&#x000A;    }&#x000A;    </pre>
    
    <p>The only difference is instead of entering the name directly, I am using the <code>this.name</code> property. The only other thing is we need to move the template files <code>_sections.html</code>, <code>_section.css</code> and <code>_menu.html</code> from <code>app/templates</code> to <code>section/templates</code> as that is where the <code>template</code>/<code>read</code> commands will look.</p>
    <h3>Code Duplication</h3>
    
    <p>The problem now is code duplication. So back in the <code>app/index.js</code> file, instead of it having the same code as the sub generator, we can just call the sub generator and pass it the name argument.  You can remove <code>generateMenu</code> from <code>app/index.js</code> altogether and we will modify <code>generateDemoSection</code> to the following:</p>
    
    <pre>generateDemoSection: function() {&#x000A;          if (this.addDemoSection) {&#x000A;              var done = this.async();&#x000A;              this.invoke("onepage:section", {args: ["Demo Section"]}, function(){&#x000A;                  done();&#x000A;              });&#x000A;          } else {&#x000A;              this.write( "app/menu.html", "");&#x000A;          }&#x000A;    },&#x000A;    </pre>
    
    <p>So if the user wanted to create the demo section, then we <code>invoke</code> the sub generator passing in the first argument which is the name. If the user did not want the demo post, we still need to create something for the menu because our Grunt tasks will try and read it, so in the last section, we just write an empty string to the menu file.</p>
    
    <p>Our generator is finally complete and we can now test it out.</p>
    
    <h2>Testing It Out</h2>
    
    <p>The first thing we need to do is install our generator on your system. Instead of installing the gem regularly, we can use the <code>link</code> command to just link the folder into the gem path, that way we can continue to make changes here without needing to re-install it every time. From the project directory, simply run <code>nom link</code>.</p>
    
    <p>The last step is to actually run the generator. Just create a new folder and inside run <code>yo onepage</code> this will run our main generator and install the dependencies via <code>npm</code>. We can then use our Grunt tasks to view the page (<code>grunt serve</code>) or add some more sections with our generator using something like <code>yo onpage:section "Another section"</code> and the new files will be added.</p>
    
    <h2>Conclusion</h2>
    
    <p>In this article, we covered a lot of the common features but there are still <a href="http://yeoman.github.io/generator/" rel="nofollow external" class="bo">more interesting options</a> to check out. As you can probably tell, there is a bit of boilerplate required when building a generator, but that is kind of the point, you get it all done once and then you're able to use it throughout all your applications.</p>
    
    <p>I hope you enjoyed reading this article, if you have any questions or comments, feel free to leave them below.</p>
    </div>
]]>
</Body>
<Summary>Yeoman's generators are what give its platform flexibility, allowing you to reuse the same tool for any kind of project you may be working on, JavaScript or otherwise, and that's before I mention...</Summary>
<Website>http://code.tutsplus.com/tutorials/build-your-own-yeoman-generator--cms-20040</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42448/guest@my.umbc.edu/9715676bf217e2931fac6177a45ec7e7/api/pixel</TrackingUrl>
<Tag>css</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>wed</Tag>
<Group token="retired-583">Web Developer - Build Group</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-583</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/original.jpg?1363101197</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xlarge.png?1363101197</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/large.png?1363101197</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/medium.png?1363101197</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/small.png?1363101197</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xsmall.png?1363101197</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/583/fc60f5d7abc2e080599bb6dc465db54d/xxsmall.png?1363101197</AvatarUrl>
<Sponsor>Web Developer - Build Group</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 14 Mar 2014 11:00:14 -0400</PostedAt>
<EditAt>Fri, 14 Mar 2014 11:00:14 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42445" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42445">
<Title>New Tickets on Sale at the CIC!</Title>
<Tagline>FASA presents Pistahan!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <div><strong>Stop by the Campus Information Center in The Commons to purchase the tickets listed below!</strong></div>
    <div><em><strong><br></strong></em></div>
    <div><strong><a href="http://my.umbc.edu/events/22407" rel="nofollow external" class="bo">SEB DC Trip - Cherry Blossom Festival</a></strong></div>
    <div><em>     Saturday, March 29th</em></div>
    <div><em>     Bus Departs: Commons Loop @ 10am</em></div>
    <div><em>     All Guests = $10.00</em></div>
    <div><em><strong>     We are Sold Out!!!</strong></em></div>
    <div><em><strong><br></strong></em></div>
    <div>
    <div><strong>FASA Pistahan</strong></div>
    <div><em>     Saturday, March 29th</em></div>
    <div><em>     University Center Ballroom @ 7pm</em></div>
    <div><em>     UMBC ID = Free</em></div>
    <div><em>     General Admission = $10.00</em></div>
    <div><em>     Children Under 12 = $5.00</em></div>
    <div><em><strong>     We are on Ticket 3 of 300</strong></em></div>
    </div>
    <div><em>     </em></div>
    <div><span><span><div><span><a href="http://my.umbc.edu/events/22490" rel="nofollow external" class="bo"><strong>SEB Captain America Midnight Premiere</strong></a></span></div>
    <div><span><em>     Thursday, April 3rd</em></span></div>
    <div><span><em>     Bus Departs: Commons Loop @ 11pm</em></span></div>
    <div><span><em>     All Guests = $5.00</em></span></div>
    <div><span><span><em><strong>     We are on Ticket 55 of 250</strong></em></span></span></div>
    <div><em><strong><br></strong></em></div>
    <div><span><a href="http://my.umbc.edu/events/22491" rel="nofollow external" class="bo"><strong>SEB Sky Zone Trampoline Park</strong></a></span></div>
    <div><span><em>     Friday, April 4th</em></span></div>
    <div><span><em>     Bus Departs: Commons Loop @ 5pm</em></span></div>
    <div><span><em>     All Guests = $10.00</em></span></div>
    <div><span><span><em><strong>     We are Sold Out!!!</strong></em></span></span></div>
    <div><span><span><br></span></span></div>
    <div><span><span><span><span><div><span><span><div><span><strong><a href="http://my.umbc.edu/groups/seb/events/22482" rel="nofollow external" class="bo">SEB Orioles Game Bus Trip</a></strong></span></div>
    <div><span><em>     Friday, April 11th</em></span></div>
    <div><span><em>     Bus Departs: Commons Loop @ 6pm</em></span></div>
    <div><span><em>     All Guests = $10.00</em></span></div>
    <div><span><strong><em>     We are on Ticket 2 of 49</em></strong></span></div>
    <div><span><br></span></div>
    <div><span><strong><a href="http://my.umbc.edu/groups/seb/events/22998" rel="nofollow external" class="bo">SEB Hershey Park Bus Trip</a></strong></span></div>
    <div><span><em>     Saturday, April 19th</em></span></div>
    <div><em>     Bus Departs: Commons Loop @ 8am</em></div>
    <div><em>     All Guests = $35.00</em></div>
    <div><em><strong>     We are on Ticket 9 of 49</strong></em></div>
    <div><span><br></span></div>
    <div><span><strong><a href="http://my.umbc.edu/events/22530" rel="nofollow external" class="bo">SEB Quadmania: Capital Cities</a></strong></span></div>
    <div><span><em>     Sunday, April 27th</em></span></div>
    <div><span><em>     The RAC @ 8pm</em></span></div>
    <div><span><em>     All Guests = $12.00</em></span></div>
    <div><span><span><em><strong>     We are on Ticket 710 of 2500</strong></em></span></span></div>
    <div><span><span><br></span></span></div>
    <div><span><span><div><span><strong>SEB Individual Weekly Movie Tickets</strong></span></div>
    <div><span><span><em>     All Guests = $2.00</em></span></span></div>
    <div><span><span><br></span></span></div>
    <div><span><strong>SEB Semester Movie Pass</strong></span></div>
    <div><span><em>     All Guests = $10.00</em></span></div>
    <div><span><em><br></em></span></div>
    <div><span><em><div><strong>Also, don't forget to check out these events happening this week!</strong></div>
    <div><span><br></span></div>
    <div>
    <span><strong><a href="http://my.umbc.edu/events/22399" rel="nofollow external" class="bo">SEB Pi Day!</a></strong> - Friday, March 14th 12pm - 1pm on Mainstreet. </span><span>(seb) celebrates a very important holiday.</span>
    </div></em></span></div></span></span></div></span></span></div></span></span></span></span></div></span></span></div>
    </div>
]]>
</Body>
<Summary>Stop by the Campus Information Center in The Commons to purchase the tickets listed below!     SEB DC Trip - Cherry Blossom Festival       Saturday, March 29th       Bus Departs: Commons Loop @...</Summary>
<Website>https://www.facebook.com/UMBC.CIC</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42445/guest@my.umbc.edu/4b22335a81223f934b867511c1886b91/api/pixel</TrackingUrl>
<Group token="cic">Campus Information Center (CIC)</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/cic</GroupUrl>
<AvatarUrl>https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xsmall.png?1318518699</AvatarUrl>
<AvatarUrl size="original">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/original.png?1318518699</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xxlarge.png?1318518699</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xlarge.png?1318518699</AvatarUrl>
<AvatarUrl size="large">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/large.png?1318518699</AvatarUrl>
<AvatarUrl size="medium">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/medium.png?1318518699</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/small.png?1318518699</AvatarUrl>
<AvatarUrl size="xsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xsmall.png?1318518699</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/311/7180ee78abc8c4401d89f708582062e4/xxsmall.png?1318518699</AvatarUrl>
<Sponsor>Campus Information Center (CIC)</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/042/445/92f75eaab29dd31e16b4b88cff13c6fb/xxlarge.jpg?1394807912</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/042/445/92f75eaab29dd31e16b4b88cff13c6fb/xlarge.jpg?1394807912</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/042/445/92f75eaab29dd31e16b4b88cff13c6fb/large.jpg?1394807912</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/042/445/92f75eaab29dd31e16b4b88cff13c6fb/medium.jpg?1394807912</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/042/445/92f75eaab29dd31e16b4b88cff13c6fb/small.jpg?1394807912</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/042/445/92f75eaab29dd31e16b4b88cff13c6fb/xsmall.jpg?1394807912</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/042/445/92f75eaab29dd31e16b4b88cff13c6fb/xxsmall.jpg?1394807912</ThumbnailUrl>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>true</CommentsAllowed>
<PostedAt>Fri, 14 Mar 2014 10:49:47 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42443" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42443">
<Title>Are We Thinking About Digital All Wrong?</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <table width="650">
    <tbody>
    <tr>
    <td>
    <div>
    <img src="http://statisches.auslieferung.commindo-media-ressourcen.de/advertisement.gif" alt="" style="max-width: 100%; height: auto;"><br><a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=1" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=1" alt="" style="max-width: 100%; height: auto;"></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=2" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=2" alt="" style="max-width: 100%; height: auto;"></a> <a href="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=target&amp;collection=smashing-rss&amp;position=3" rel="nofollow external" class="bo"><img src="http://auslieferung.commindo-media-ressourcen.de/random.php?mode=image&amp;collection=smashing-rss&amp;position=3" alt="" style="max-width: 100%; height: auto;"></a>
    </div>
    </td>
    </tr>
    </tbody>
    </table>
    <p>I want to let you in on a secret — writing a book is a scary experience. You pour your heart into it and then wait for the reaction when it is published. You can be certain of only one thing: You will be criticized.</p>
    <p>My book <em><a href="http://www.smashingmagazine.com/books/#digital-adaptation" rel="nofollow external" class="bo">Digital Adaptation</a></em> will soon be officially released, and I know a lot of clever people are going to disagree with what I have written. They are going to argue that I focus too much on digital and its characteristics and its implications and its impact on business and on the way we work and organize teams, when ultimately digital is just a tool.</p>
    <h3>If Digital Is Just A Tool</h3>
    <p>If digital is just a tool in our business arsenal, then it fundamentally alters how we approach this new medium. It will even redefine what your job should be. If digital is just a tool, we might not even need Web professionals. I can tell you now that from a certain point of view they are right to criticize me.</p>
    <p>In fact, yes, at their most fundamental level, <strong>digital technologies such as the Web and mobile are just tools</strong> like any other we work with. Like electricity or the printing press, we can use these tools to achieve a business objective. For example, to persuade prospective customers to buy a product, you might get a brochure printed. This would require both the power of electricity and a printing press. Alternatively, you could build a website, send an email or create a Facebook page. Digital is just another tool in your arsenal.</p>
    <p><img src="http://media.smashingmagazine.com/wp-content/uploads/2014/03/digital-adaptation-1.png" width="500" height="298" alt="" style="max-width: 100%; height: auto;"><br><em>Is digital really just a tool? Digital challenges companies to rethink and adapt their existing practices, and usually it’s not enough to see it as a tool alone.</em></p>
    <p>Many argue that viewing digital in this way will shape a person’s thinking about how digital can be used and referred to. Suddenly, having a digital strategy or even a digital team sounds ridiculous. You wouldn’t have a brochure strategy or a team dedicated to managing electricity. Why, then, do you need a digital strategy or a digital team?</p>
    <p>They go on to argue the dangers associated with thinking of digital as more than a tool. If we treat digital as special in some way, then we risk isolating it from the broader business. The digital team ends up doing its own thing, rather than helping the entire company make use of the tool.</p>
    <p>If we create a separate digital strategy, they argue, then the danger is that, rather than helping to achieve the overall business strategy, we would distract or confuse it. Surely, the argument goes, devising a business strategy that draws on digital when appropriate makes more sense.</p>
    <p>These are all completely valid points, and I entirely understand their logic. However, I passionately argue that we do need separate digital strategies and that we also need empowered digital teams. I take this approach because I believe that <strong>digital is more than another tool in our business arsenal</strong>.</p>
    <h3>Digital Is More Than A Tool</h3>
    <p>I strongly believe that describing digital as a tool diminishes its profound impact on the world we live in. Digital has transformed society, government, culture, business, media and more. Barely an aspect of our lives has not been touched in some way.</p>
    <p>Therefore, when I write about forming a digital strategy, I am not referring to a strategy for using a tool. I am talking about forming a strategy to adapt to the fundamental changes that digital has brought upon society.</p>
    <p>Take, for example, the power that the Web has provided consumers to identify competitors, recommend products and services to friends, and share their dissatisfaction when things go wrong.</p>
    <p><img src="http://media.smashingmagazine.com/wp-content/uploads/2014/03/digital-adaptation-2.png" width="500" height="303" alt="" style="max-width: 100%; height: auto;"><br><em>Before the Web, if somebody was unhappy with a product or service, they could moan to their friends, but that was about it. Now, we live in a world where a dissatisfied customer has global reach!</em></p>
    <p>That single change in customer behavior has incredible ramifications on how we do business. When a “tool” has that kind of power, it warrants special attention.</p>
    <p>This isn’t the first time a tool has so radically transformed society. The printing press is another good example. The printing press enabled the Lutherans to spread their message and to challenge the dominance of the Catholic Church. As a result, the Vatican took the printing press very seriously. They understood that the key aspect was the <strong>impact of the tool</strong>, not the tool itself.</p>
    <p>Companies today need a digital strategy to help them adapt to the change that digital has brought to the world. They now operate in the context of this new world, and they need a clear vision of how to adapt to it.</p>
    <p>As long as companies think of digital as just another tool, they will fail to embrace the full potential of the Web and mobile. Many organizations are still trying to wrap their heads around the changes that these innovations have brought. They are still unsure of how to deal with them properly.</p>
    <h3>We Are Still Learning How To Use Digital</h3>
    <p>For a long time, the industrial revolution was driven by the power of steam and water. That required building factories near rivers. The mass availability of electricity did away with that need, and yet over a decade later companies were still building their factories next to water. The full potential of electricity had just not sunk in.</p>
    <p>We are in a similar situation today. Most organizations are carrying on with business as usual, even though the world has changed around them. For companies to adapt to this new world, somebody has to disrupt the status quo. Somebody has to demonstrate the full scope of how digital has changed business and show people how to harness this new technology.</p>
    <p><img src="http://media.smashingmagazine.com/wp-content/uploads/2014/03/digital-adaptation-3.png" width="500" height="250" alt="" style="max-width: 100%; height: auto;"><br><em>Most organizations are not aware of the full potential of digital. Mentally, they are still building their factories by the water.</em></p>
    <p>This is a problem that the industrialists tackled by appointing Chief Electricity Officers. To our eyes, this might seem ridiculous because electricity is now so ubiquitous, but at the time it was crucial for helping organizations to adapt to this revolutionary technology.</p>
    <p>For this same reason, we need digital teams and strong digital leaders today. Companies need expert help to adapt. They need fresh blood to disrupt the old ways of working and to encourage new thinking. In short, companies need digital leadership.</p>
    <p><a href="http://www.smashingmagazine.com/2013/11/25/making-yourself-redundant/" rel="nofollow external" class="bo">As I have written before</a>, this shouldn’t last forever. The digital team should exist primarily to educate, empower and support other business units. Companies will eventually adapt, and digital will become as ubiquitous as electricity. But until that day, we need digital champions to stop us from blindly building our factories next to water.</p>
    <p>This is not to say that senior managers believe they are building by the water. That brings me to my final point.</p>
    <h3>Digital Is A Catalyst For Change</h3>
    <p>I am often surprised at how resistant managers are to adapt their companies’ structure to accommodate the new reality of digital. They persist in trying to squeeze it into their existing mental model by making it an IT problem or a communications tool.</p>
    <p>Of course, as Web professionals, we know that digital does not fit comfortably in existing departmental silos. It requires a huge amount of cross-departmental collaboration.</p>
    <p>How, then, do we bring managers to realize that digital is a company-wide issue? How do we get them to grasp the ramifications of this cultural phenomena?</p>
    <p>Some would argue that we need to disabuse managers of their preconceptions, that the way to convince them that digital is a company-wide issue is to do away with separate digital strategies and digital teams. They argue that managers must understand that, one day, digital will be as ubiquitous as electricity is now to modern business life.</p>
    <p>However, company-wide change is a tough sell to senior management. We need to be more pragmatic. We need to meet them halfway. To their minds, digital is an isolated problem, and so we need to start there and slowly widen their view.</p>
    <p>By focusing initially on digital, we have a starting point to address their broader concerns. By appointing somebody as a digital lead and forming a digital team, we can highlight broader problems and work collaboratively with other units of the business.</p>
    <p><img src="http://media.smashingmagazine.com/wp-content/uploads/2014/03/digital-adaptation-4.jpg" width="500" height="261" alt="" style="max-width: 100%; height: auto;"><br><em>A strong digital team can instigate a program of education across the whole organization. It can also work collaboratively with other departments to increase the impact of digital.</em></p>
    <p>A strong digital lead with real authority can ensure that digital is included in all management discussions. They can disrupt out-of-date practices and encourage managers to consider digital options before falling back on traditional approaches.</p>
    <p>Finally, a digital strategy can be used to instigate broader discussions about a company’s overall business goals and road map.</p>
    <p>The key is to recognize that digital-focused thinking will not be required forever. One day, companies will not need Chief Digital Officers, the way we no longer have Chief Electricity Officers. We also need to recognize that the <strong>most important role of a digital team</strong> is not to own and implement a digital vision, but to facilitate company-wide change and to educate colleagues about the potential of digital in their areas of responsibility.</p>
    <p><em>(al, il)</em></p>
    <p><em>The illustrations in this article were thoroughly crafted by <a href="http://veerle.duoh.com/" rel="nofollow external" class="bo">Veerle Pieters</a>.</em></p>
    <hr>
    <p><small>© Paul Boag for <a href="http://www.smashingmagazine.com" rel="nofollow external" class="bo">Smashing Magazine</a>, 2014.</small></p>
    </div>
]]>
</Body>
<Summary>        I want to let you in on a secret — writing a book is a scary experience. You pour your heart into it and then wait for the reaction when it is published. You can be certain of only one...</Summary>
<Website>http://www.smashingmagazine.com/2014/03/14/are-we-thinking-about-digital-all-wrong/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42443/guest@my.umbc.edu/31879d7412520e7b3ae4dcbf2d794baf/api/pixel</TrackingUrl>
<Tag>business</Tag>
<Tag>css</Tag>
<Tag>design</Tag>
<Tag>development</Tag>
<Tag>html</Tag>
<Tag>javascript</Tag>
<Tag>mysql</Tag>
<Tag>opinion-column</Tag>
<Tag>php</Tag>
<Tag>sql</Tag>
<Tag>strategy</Tag>
<Tag>trends</Tag>
<Tag>useful</Tag>
<Tag>web</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>Fri, 14 Mar 2014 10:21:56 -0400</PostedAt>
<EditAt>Fri, 14 Mar 2014 10:21:56 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42444" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42444">
<Title>Beginner Web Design Mistakes You Should Avoid</Title>
<Body>
<![CDATA[
    <div class="html-content">
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2014/03/webmistakes1.jpg" rel="nofollow external" class="bo"><img alt="web design confusion and problems" src="http://blog.teamtreehouse.com/wp-content/uploads/2014/03/webmistakes1.jpg" width="514" height="600" style="max-width: 100%; height: auto;"></a><p>“Quo Vadis?” illustration by <a href="http://www.flickr.com/photos/tsevis/370357699/" rel="nofollow external" class="bo">Charis Tsevis</a>/Flickr</p>
    </div>
    <p><span>Web design can be tough for a lot of reasons. But the biggest challenge is probably that there are <em>so</em> many ways to approach a problem. Many websites set a bad example for beginners. Even big brands known for quality can often mess up. I could list a lot of things, but here are the top web design mistakes I see over and over again that need to stop.</span></p>
    <h2>Modals and Pop-Ups</h2>
    <p>You’ve seen this before. You click on a link to a news article or a blog post, and a gigantic modal pop-up window covers the content. This makes absolutely no sense. If you’re requesting a specific article, obviously that’s why you’re visiting the site.</p>
    <div>
    <img alt='Screenshot of a pop up modal window that says, "Annoying Modal Window: Oh, sorry. Were you trying to read this article? Too bad! Sign up for our newsletter first and make sure you tweet about us!"' src="http://blog.teamtreehouse.com/wp-content/uploads/2014/03/Screen-Shot-2014-03-02-at-11.05.15-PM.png" width="894" height="492" style="max-width: 100%; height: auto;"><p>Modal windows can ruin your mood.</p>
    </div>
    <p>Let them read and enjoy the experience you’re offering. No need to spoil the purity of their intent by redirecting them someplace else. If the visitor likes the site or they’re interested in the advertisements, they’ll click around and explore on their own. Modal windows aren’t bad by themselves, but putting it up as the very first thing that people see is lazy and desperate.</p>
    <h3>ExceptionS and Alternatives</h3>
    <p>Despite their potential for abuse, modal windows are useful in many scenarios where leaving the current page may not be the best option. For example, if your website has a contact button, it might not merit leaving the current page. Presenting a modal window with a simple contact form allows for the site visitor to fill it out and then return to the current task.</p>
    <h2>Walls of Text</h2>
    <p>Web design is a wonderful medium that allows you to combine text, images, and other multimedia into an interactive experience. To that end, it’s not a good idea to turn a website into something that it’s not, like a tri-fold brochure or an information pamphlet. If you’re marketing yourself or a business, don’t present the site visitor with a huge wall of text on the first page. Instead, make the home page something very simple that explains exactly what the site is about. If they want to know more, they’ll dig in. Treehouse is a good example of using a simple explanation:</p>
    <div>
    <img alt="Screenshot of the Treehouse homepage." src="http://blog.teamtreehouse.com/wp-content/uploads/2014/03/treehouse-homepage.jpg" width="1280" height="803" style="max-width: 100%; height: auto;"><p>Treehouse uses a simple line of text on the homepage that clearly states the site’s purpose.</p>
    </div>
    <p>A giant block of text is not only intimidating, it’s also not always pretty to look at. Text is an important part of web design, and when abstracted as a visual element (rather than something that’s meant to be read) it can add a lot of rough “<a href="http://blog.teamtreehouse.com/art-and-the-web-texture" rel="nofollow external" class="bo">texture</a>” to the page. When you’re trying to invite people inside a website to learn more, this can add a lot of undesirable visual friction.</p>
    <h3>EXCEPTIONS AND ALTERNATIVES</h3>
    <p>If you’re tempted to put a lot of text on a page, first try to cut it down and summarize portions. Then, break up each major idea into its own section, possibly including some pictures or illustrations. The page at <a href="http://teamtreehouse.com/features" rel="nofollow external" class="bo">teamtreehouse.com/features</a> is a good example. There’s lots of text on the page, but it’s presented in small chunks.</p>
    <h2>Not Enough Space</h2>
    <p>Every beginner web designer and developer has done this one (myself included). They feel compelled to fill the page with interesting information and stuff for people to look at and click on. Poor use of space around the elements just compounds the problem and the result is a cluttered mess with no clear purpose.</p>
    <div>
    <a href="http://blog.teamtreehouse.com/wp-content/uploads/2013/01/space.png" rel="nofollow external" class="bo"><img alt='Two examples of space. The first box reads "Do you ever feel like the walls are closing in on you?" The second box reads, "Space... The final frontier."' src="http://blog.teamtreehouse.com/wp-content/uploads/2013/01/space.png" width="479" height="414" style="max-width: 100%; height: auto;"></a><p>Don’t let text run up against the edge of an element. Give it space!</p>
    </div>
    <p>Humans crave simplicity, and it can be easier for you to provide that to them by presenting just a few things at a time <em>as they become relevant.</em> The web facilitates this through a number of mechanisms, but practically speaking, you should always make sure each piece of information is appropriately grouped with other related design elements and that there’s enough separation between each group.</p>
    <h3>EXCEPTIONS AND ALTERNATIVES</h3>
    <p>It can be hard to know when to use space if you’re just starting. Instead of inventing all the aesthetics yourself, I recommend you try a front-end framework like <a href="http://getbootstrap.com/" rel="nofollow external" class="bo">Bootstrap</a> or <a href="http://foundation.zurb.com/" rel="nofollow external" class="bo">Foundation</a>. The grid and typography frameworks contained within will help you space your elements appropriately.</p>
    <h2>Thinking Too Far Outside the Box</h2>
    <p>Every new web design project is filled with limitless possibilities, so it can be tempting to try things that have never been done before. Innovation is important, but too much can sometimes be a bad thing. You want to create experiences that feel familiar to site visitors so they can explore your site right away with no learning curve. Getting the basics right is difficult enough, so if you haven’t made too many websites yet, it’s a good idea to embrace common design patterns. Simplicity can be just as exciting as innovation if it’s done well.</p>
    <h3>EXCEPTIONS AND ALTERNATIVES</h3>
    <p>Even if you’re not very experienced, you can certainly experiment in the right context. It’s rarely a good idea to take a big risk on a big client project, but if you’ve executed something well already in a side project, then using it in production is the next step. Continuously building side projects and exploring new approaches will help evolve your professional work.</p>
    <h2>Mysterious and Complex Navigation</h2>
    <p>Navigation is probably one of the most difficult aspects of web design. In all my projects, I’ve spent quite a lot of time thinking about how all the screens flow together, how everything is labeled, what should be on its own page and what can be combined, and so on. If there’s any <em>single</em> word that can make a huge impact on your site’s usability, it’s probably something in the navigation.</p>
    <p>Massive sites like Wikipedia or Facebook have millions of pages, but they all flow together in a stream of consciousness without overwhelming visitors. It seems effortless because they do such a great job. But if you’re just starting out, try to make projects with just a few pages. Be clear and explicit about what each page contains, then label it accordingly in your navigation. Mixing intentions makes things feel confusing.</p>
    <h3>EXCEPTIONS AND ALTERNATIVES</h3>
    <p>It’s almost never a good idea to intentionally create confusing navigation, but there are some rare instances when it can be good. If you’re creating an experiential website (one that’s not necessarily meant to inform), some mystery might work to your advantage. For example, you might promote a highly anticipated movie or a new product by creating a game in which visitors solve riddles and clues, eventually leading them to the next part of the game. This is a special use case, so be careful with its execution.</p>
    <p>If you have any other common mistakes you’ve seen around the web, I’d love for you to share them in the comments!</p>
    <p>The post <a href="http://blog.teamtreehouse.com/beginner-web-design-mistakes-avoid" rel="nofollow external" class="bo">Beginner Web Design Mistakes You Should Avoid</a> appeared first on <a href="http://blog.teamtreehouse.com" rel="nofollow external" class="bo">Treehouse Blog</a>.</p>
    </div>
]]>
</Body>
<Summary>“Quo Vadis?” illustration by Charis Tsevis/Flickr    Web design can be tough for a lot of reasons. But the biggest challenge is probably that there are so many ways to approach a problem. Many...</Summary>
<Website>http://feedproxy.google.com/~r/teamtreehouse/~3/FR-RkKlgixc/beginner-web-design-mistakes-avoid</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42444/guest@my.umbc.edu/7135d5e711050993a9ddc7dca7927ca5/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>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>Fri, 14 Mar 2014 10:16:03 -0400</PostedAt>
<EditAt>Fri, 14 Mar 2014 10:16:03 -0400</EditAt>
</NewsItem>

<NewsItem contentIssues="true" id="42315" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42315">
<Title>No Walk-In Advising Hours During Registration Advising</Title>
<Tagline>Come sign up for an appointment to see an advisor</Tagline>
<Body>
<![CDATA[
    <div class="html-content">It's that time of year...registration advising season. This means that advisors are meeting with students to discuss their classes and plans for spring registration. As a result, walk-in hours are suspended for the time being.<br><br>If you would like to meet with an advisor, please come to the hallway outside offices ITE 202-206 to sign up for an advising appointment.<br><br><br>
    </div>
]]>
</Body>
<Summary>It's that time of year...registration advising season. This means that advisors are meeting with students to discuss their classes and plans for spring registration. As a result, walk-in hours are...</Summary>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42315/guest@my.umbc.edu/b3a537fe0c19be3f9c54a7b781bd261d/api/pixel</TrackingUrl>
<Group token="coeitadvising">College of Engineering &amp;amp; Information Technology Advising</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/coeitadvising</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xsmall.png?1778247417</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/original.png?1778247417</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xxlarge.png?1778247417</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xlarge.png?1778247417</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/large.png?1778247417</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/medium.png?1778247417</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/small.png?1778247417</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xsmall.png?1778247417</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xxsmall.png?1778247417</AvatarUrl>
<Sponsor>Engineering &amp; Computer Science Advising</Sponsor>
<ThumbnailUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/042/315/42999a62bd597f7f6fdc85c73e0daaf0/xxlarge.jpg?1394566663</ThumbnailUrl>
<ThumbnailUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/042/315/42999a62bd597f7f6fdc85c73e0daaf0/xlarge.jpg?1394566663</ThumbnailUrl>
<ThumbnailUrl size="large">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/042/315/42999a62bd597f7f6fdc85c73e0daaf0/large.jpg?1394566663</ThumbnailUrl>
<ThumbnailUrl size="medium">https://assets2-my.umbc.edu/system/shared/thumbnails/news/000/042/315/42999a62bd597f7f6fdc85c73e0daaf0/medium.jpg?1394566663</ThumbnailUrl>
<ThumbnailUrl size="small">https://assets4-my.umbc.edu/system/shared/thumbnails/news/000/042/315/42999a62bd597f7f6fdc85c73e0daaf0/small.jpg?1394566663</ThumbnailUrl>
<ThumbnailUrl size="xsmall">https://assets1-my.umbc.edu/system/shared/thumbnails/news/000/042/315/42999a62bd597f7f6fdc85c73e0daaf0/xsmall.jpg?1394566663</ThumbnailUrl>
<ThumbnailUrl size="xxsmall">https://assets3-my.umbc.edu/system/shared/thumbnails/news/000/042/315/42999a62bd597f7f6fdc85c73e0daaf0/xxsmall.jpg?1394566663</ThumbnailUrl>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 14 Mar 2014 09:40:51 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="true" id="42441" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42441">
<Title>Round-Up: UMBC in the News, 3/14</Title>
<Body>
<![CDATA[
    <div class="html-content">One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of these amazing people, UMBC often finds itself “in the news,” so each week, we’ll be sharing with you a round-up … <a href="http://umbcalumni.wordpress.com/2014/03/14/round-up-umbc-in-the-news-314/" rel="nofollow external" class="bo">Continue reading <span>→</span></a>
    </div>
]]>
</Body>
<Summary>One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of these amazing people, UMBC often finds itself “in the news,” so each week, we’ll be...</Summary>
<Website>http://umbcalumni.wordpress.com/2014/03/14/round-up-umbc-in-the-news-314/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42441/guest@my.umbc.edu/9ccf8ad894e7c0dcb1f600a07c7d4a97/api/pixel</TrackingUrl>
<Tag>evelyn-thomas</Tag>
<Tag>george-derek-musgrove</Tag>
<Tag>humanities-alums</Tag>
<Tag>marie-desjardins</Tag>
<Tag>math-and-sciences</Tag>
<Tag>news-and-updates</Tag>
<Tag>siam-news</Tag>
<Tag>tes-magazine</Tag>
<Tag>the-washington-post</Tag>
<Tag>tom-beck</Tag>
<Tag>umbc-news</Tag>
<Tag>umbc-psychology-research</Tag>
<Tag>university-of-maryland-baltimore-countycounty</Tag>
<Tag>voice-of-america</Tag>
<Tag>wypr</Tag>
<Tag>wyprs-maryland-morning</Tag>
<Group token="retired-20">UMBC Alumni</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-20</GroupUrl>
<AvatarUrl>https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/original.png?1280681147</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="xlarge">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xlarge.png?1280681147</AvatarUrl>
<AvatarUrl size="large">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/large.png?1280681147</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/medium.png?1280681147</AvatarUrl>
<AvatarUrl size="small">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/small.png?1280681147</AvatarUrl>
<AvatarUrl size="xsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xsmall.png?1280681147</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/020/08fe2621d8e716b02ec0da35256a998d/xxsmall.png?1280681147</AvatarUrl>
<Sponsor>UMBC Alumni</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 14 Mar 2014 09:30:30 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="106845" important="false" status="posted" url="https://my3.my.umbc.edu/posts/106845">
<Title>Round-Up: UMBC in the News, 3/14</Title>
<Body>
<![CDATA[
    <div class="html-content">One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of …</div>
]]>
</Body>
<Summary>One of the things that makes UMBC great is how wonderful our alumni, students, faculty and staff are. Because of …</Summary>
<Website>https://magazine.umbc.edu/round-up-umbc-in-the-news-314/</Website>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/106845/guest@my.umbc.edu/43cbc9749ad2ffc14e91e47269843629/api/pixel</TrackingUrl>
<Tag>alumni</Tag>
<Tag>evelyn-thomas</Tag>
<Tag>george-derek-musgrove</Tag>
<Tag>marie-desjardins</Tag>
<Tag>siam-news</Tag>
<Tag>tes-magazine</Tag>
<Tag>the-washington-post</Tag>
<Tag>tom-beck</Tag>
<Tag>umbc-psychology-research</Tag>
<Tag>university-of-maryland-baltimore-countycounty</Tag>
<Tag>voice-of-america</Tag>
<Tag>wypr</Tag>
<Tag>wyprs-maryland-morning</Tag>
<Group token="retired-1945">UMBC Magazine</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/retired-1945</GroupUrl>
<AvatarUrl>https://assets1-my.umbc.edu/images/avatars/group/8/xsmall.png?1787842820</AvatarUrl>
<AvatarUrl size="original">https://assets4-my.umbc.edu/images/avatars/group/8/original.png?1787842820</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/images/avatars/group/8/xxlarge.png?1787842820</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/images/avatars/group/8/xlarge.png?1787842820</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/images/avatars/group/8/large.png?1787842820</AvatarUrl>
<AvatarUrl size="medium">https://assets3-my.umbc.edu/images/avatars/group/8/medium.png?1787842820</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/images/avatars/group/8/small.png?1787842820</AvatarUrl>
<AvatarUrl size="xsmall">https://assets1-my.umbc.edu/images/avatars/group/8/xsmall.png?1787842820</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets4-my.umbc.edu/images/avatars/group/8/xxsmall.png?1787842820</AvatarUrl>
<Sponsor>UMBC Magazine</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 14 Mar 2014 09:30:30 -0400</PostedAt>
</NewsItem>

<NewsItem contentIssues="false" id="42439" important="false" status="posted" url="https://my3.my.umbc.edu/posts/42439">
<Title>Parenteral Drug Association (PDA) Scholarship Opportunity</Title>
<Tagline>Apply today!</Tagline>
<Body>
<![CDATA[
    <div class="html-content">
    <strong>Purpose</strong><br><br>The purpose of the PDA Capital Area Chapter Scholarship is to provide college scholarship awards to students who have shown a career interest in the sciences or engineering with an emphasis on entering scientific or technical careers within the pharmaceutical industry.<br><br><strong>Awards</strong><br><br>An undergraduate scholarship will be awarded. Awards are for one year only, but recipients may re-apply for a second year. All scholarship awards will be paid directly to the recipients.<br><br><strong>Eligibility</strong><br><br>1.     Applicants must be full-time undergraduate students attending a 4-year accredited college or university.<br><br>2.     Applicants must be majoring in a field of science or engineering, including life sciences and information technology.<br><br>3.     Applicants must be a rising junior or senior.<br><br>4.     Applicants must be US citizens. Students must demonstrate financial need as determined by FAFSA (free application for federal student aid)<br><br><br>          <strong>    Applications are due by March 28th, 2014.</strong><br><br><strong>Download the complete application for more information. </strong><br>
    </div>
]]>
</Body>
<Summary>Purpose  The purpose of the PDA Capital Area Chapter Scholarship is to provide college scholarship awards to students who have shown a career interest in the sciences or engineering with an...</Summary>
<AttachmentKind>Document</AttachmentKind>
<AttachmentUrl>https://assets3-my.umbc.edu/system/shared/attachments/0c973bf47c99716c4981787217371c9c/6a95f840/news/000/042/439/d17367b08356ccbdba2a5485b374c341/PDA Scholarship Application AY14-15.doc?1394798509</AttachmentUrl>
<Attachments>
<Attachment kind="Document" url="https://my3.my.umbc.edu/posts/42439/attachments/12857"></Attachment>
</Attachments>
<TrackingUrl>https://my3.my.umbc.edu/api/v0/pixel/news/42439/guest@my.umbc.edu/928d63d488158a83f251c30de92f9cda/api/pixel</TrackingUrl>
<Group token="coeitadvising">College of Engineering &amp;amp; Information Technology Advising</Group>
<GroupUrl>https://my3.my.umbc.edu/groups/coeitadvising</GroupUrl>
<AvatarUrl>https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xsmall.png?1778247417</AvatarUrl>
<AvatarUrl size="original">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/original.png?1778247417</AvatarUrl>
<AvatarUrl size="xxlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xxlarge.png?1778247417</AvatarUrl>
<AvatarUrl size="xlarge">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xlarge.png?1778247417</AvatarUrl>
<AvatarUrl size="large">https://assets2-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/large.png?1778247417</AvatarUrl>
<AvatarUrl size="medium">https://assets4-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/medium.png?1778247417</AvatarUrl>
<AvatarUrl size="small">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/small.png?1778247417</AvatarUrl>
<AvatarUrl size="xsmall">https://assets3-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xsmall.png?1778247417</AvatarUrl>
<AvatarUrl size="xxsmall">https://assets1-my.umbc.edu/system/shared/avatars/groups/000/000/564/6207e48bc2612a0b21c093b4a46a3be8/xxsmall.png?1778247417</AvatarUrl>
<Sponsor>Engineering &amp; Computer Science Advising</Sponsor>
<PawCount>0</PawCount>
<CommentCount>0</CommentCount>
<CommentsAllowed>false</CommentsAllowed>
<PostedAt>Fri, 14 Mar 2014 08:09:42 -0400</PostedAt>
</NewsItem>

</News>
