Office Hours

Do you have a specific question about your website that you’ve been wanting to ask? Maybe you want to optimize the way your site runs, or maybe you’d like to become more comfortable updating your site content in WordPress.

Our team is holding online office hours on Wednesday, December 14th at 4 p.m. ET (1 p.m. PT). We’ll be available to answer questions for a full hour. If the room is full, hang tight or come back later in the hour.

Whether it’s increasing your site speed or writing more effective meta and title tags, we look forward to helping you.

Join Office Hours!
(GoToMeeting link will be active during Office Hours)

December 7, 2016

Interview with a Developer: What is JavaScript?

Drew Barton: I’m here with Byron Johnson who is one of our developers here at Southern Web. Our topics today that we’re discussing is JavaScript, so what is JavaScript?

Byron Johnson: JavaScript is a scripting language that was created to provide various functionality that you could implement within a browser. But, recently, it goes into broader uses such as service side and desktop side programming. So that’s what it is in its basic form.

Drew: Oftentimes you’ll hear people say “JavaScript” or “Java”. Are they the same things?

Byron: No. JavaScript is based on Java but it’s a more simple scripting language as opposed to Java, but was created for the use within a browser, whereas Java is used strictly for application development. Most of your apps on your phones, particularly Android, those are created in Java. Also, desktop applications, or programs like we used to call them, can be built in Java. You wouldn’t find Java in the browser.

Drew: Okay. When you know JavaScript, what can you do with it?

Byron: You can do tons with JavaScript. JavaScript was originally created to build interactions within the browser, and it’s still used for that purpose today, but it’s taken on a lot broader perspective as well. For instance, whenever you click a button on a site, JavaScript can allow that click to perform all kinds of different tasks or interactions with other elements on the page. If you have ever browsed a site, clicked a button on the page, and had a screen pop up, that’s usually a JavaScript implemented interaction. That’s a standard use of JavaScript and it’s been used for since the 90s.

Today, it’s being used to send and retrieve data from servers so that it’s starting to tie a little bit more into the back end. You can also now use JavaScript to run tasks on your machine. So what a lot of programmers are doing these days is utilizing JavaScript to automate redundant tasks such as compiling SASS. That’s an example of a more current usage of JavaScript that we see it evolve in to.

Drew: When you’re doing development, do you choose to build it in JavaScript or HTML? Do you pick one or the other? Do you use them both together? Can you tell me more?

Byron: Yeah. HTML is your structure, whereas JavaScript is used more for the interaction. You can’t have one without the other per say. You can’t just build a JavaScript website; there’s always going to be HTML involved because that’s going to be your structure and your foundation, much like a house. Your walls would be the equivalent of your HTML, whereas the lights would be turning on and off, the electrical system, would be more like the JavaScript implementation. You’ll never really have just JavaScripts completely. There will always be HTML involved.

Drew: Earlier you mentioned server-side JavaScript and client-side JavaScript. What’s the difference between those two things?

Byron: Client side is referring strictly to browser interaction. These interactions can include showing or hiding data, parallax scrolling, interactive drop down menus, etc. You, as a client, are interacting with that website, and these interactions are controlled by client side JavaScript. The server side, which includes some newer JavaScript technologies, is the stuff that you don’t necessarily see happening on the front end. JavaScript is now being utilized to store data in a databases and can even control the whole entire database. Where you’ll see the server side and the client side working together, for instance, is searching on a website for a person. When you click “go” or “search”, that clicking is a client side event, then the person’s information would be returned from the server. That returned data would be controlled by the JavaScript database. This would be an example of the client side and the server side working together.

Drew: So, if you’re intrigued by JavaScript, and you wanted to learn some more about it, what would you tell them to do, where would you tell them to start to find out more about it?

Byron: The best sources that I’ve used thus far, and I’ve used a few different sources, is Code School’s JavaScript courses. They have a series of three JavaScript lessons, but they’re very good and they’re very detailed. If you’re looking for a free source, the best one I’ve found is Code Academy. Code Academy has a pretty good walk-through on JavaScript, I just don’t think it’s as structured as well as Code School’s is, but that’s another great option. Then, from the books that I’ve read, a really great source was the book JavaScript and jQuery: Interactive Front-End Web Development by Jon Duckett. It’s a really great book, especially for someone that learns more from a visual aid. The way it lays everything out and the flow of the book is really great. It also has jQuery in there, but that’s more of an added bonus. I’d highly recommend it as a starting point for JavaScript.

Drew: Great. Where do you see JavaScript going in the future?

Byron: Well, it used to be something that was used for basic interactions, and a lot of people even kind of shunned it in the early 2000s. In web development, it wasn’t something that was too big of a thing, but you needed it sometimes. Now, JavaScript, since it’s taken on this broader perspective of going more into the server side and being used on the desktop side for developers to automate tasks, it’s stretching out everywhere. Due to it’s newly emerged prevalence, I think it’s just going to keep flourishing from here.

If you can learn JavaScript just on the front end side, you now have that understanding of how JavaScript works and can begin to apply that same knowledge towards back end JavaScrip development. No longer do you have to learn multiple languages to interact with the front end and back end. For instance, with PHP you would learn PHP for the front end, but then learn MySQL to handle the server side of things. The same thing with Microsoft. You would need to learn .net for front end development, but then you’d also then have to use SQL to control the database back end side. Now with JavaScript, you can streamline your knowledge. If you know JavaScript, you can now create a whole website or an application just by knowing just one language. You can now bring those two worlds together with one scripting language. That makes it very powerful.

Another thing about JavaScript is it’s very fast, it’s a lot quicker than these older technologies. I think you’re just going to see it become more encompassing over the web development world as a whole. We also have two different frameworks created by two of the biggest web companies out there. Google has created a JavaScript framework called Angular and we also have React.js which is popular right now and was created by Facebook. When you see companies like that set up their own frameworks with JavaScript, you can only imagine how this is going to continue with leaders within the web industry. I think it’s going to keep flourishing from here.

Drew: That’s a lot of great information Byron. Thanks.

Byron: Awesome. No problem.

October 17, 2016

Interview with a Developer: What’s a Taxonomy?

Drew Barton: I’m here with Jeremiah Bratton, who is our lead developer here at Southern Web. Today we’re going to be talking about post types, taxonomies, and metadata, the need for them, where they apply, what you can do with them, and why they’re important.

Jeremiah:  Thanks!

Drew: Jeremiah, can you tell us what is taxonomy?

Jeremiah: Taxonomy is a broad term. In the sense that it is used in WordPress or in any other CMS, it is a way of categorizing and organizing content into consistent terms. Basically it’s a consistent system of adjectives for the content you’re putting into your site. It is also a useful tool for managing specific content views for your users. A good example that I could give that’s easy is a car. Every car would have a manufacturer, and a car would also have an engine, so you would have Ford or Audi inside of your car manufacturer taxonomy. An engine would be 6 cylinders or 4 cylinders, and so you could classify a single car as an Audi with a 4 cylinder engine, or a Ford with a 6 cylinder engine, and you could do this for multiple cars. It’s a consistent way to classify and organize your content.

Drew: Got you. You mentioned the word “term” earlier, can you explain what that is?

Jeremiah: Term is a description or an adjective that sits inside of a taxonomy, the taxonomy is like a binder. The binder is the taxonomy itself, and then all of the pages that you have inside of it, your terms, like engine type, or car type, tire type, those would be the titles on the top of every page, and then underneath that then you’d say Ford Focus or Audi A3. The binder, taxonomy, is how you keep your descriptors, terms, together and organized.

Drew: Are there any other types of terms? How do you further define things?

Jeremiah: Term is pretty much just a term. You can have a hierarchy with terms if you feel that a term on its own does not go deep enough or if a term is a broad category that has more categories below it. If you had a taxonomy for beverages, coffee could be a term. Coffee is a broad term that can have more classifications. Black, Espresso, Latte, and so on would be good child terms for the term coffee

Drew: You mentioned a post type, can you explain what that is?

Jeremiah: A post type … The funny thing about a post type is that in a way it is a form of taxonomy. A post type doesn’t operate the same way as taxonomy but it does essentially set a top level term in a way. A post type named animals expects everything entered as an animal to be an animal, so animal becomes the root level descriptor for that content. A post type in WordPress is also a way to store content that is specific to your needs or your businesses needs that are different from the default post type that WordPress provides.

To not talk about cars anymore, if your site were a bookstore, you wouldn’t put everything underneath the ‘post’ type, because that’s for a blog. It has the workflow for a blog, the fields for a blog post, so you would create a post type called books. With the books post type, you now have the ability to create a specific workflow for the way that books are entered into your site. It is also easier to tell WordPress directly that you want books from the database. The books post type also opens up the ability for you to have a specific taxonomy for books because blog posts and books have different adjectives, and the same would go for any metadata that you would want to save for a book as well because there’s different data that describes a single book versus a single blog post.

Drew: Got you. I remember a couple of years ago there was a lot of talk about security and telephone conversations and AT&T providing metadata. Can you explain what metadata is?

Jeremiah: Metadata is information that is relevant to a single item. This is where it can get a little tricky, metadata and taxonomy can be very similar, but to make it easier, the best way to think about it is … the definition of the word meta is to be self-referential. Metadata would be … You, Drew, are the person, or the human being, that’s your post type, your sex is male, that’s your taxonomy, but your name, Drew, is metadata. Everybody has a name, but everybody’s name is different. It’s too broad and too inconsistent for you to categorize everyone’s name

Drew: Got you, got you. Okay, so then are you categorizing via metadata or are you doing it by post types? How do you know when to use which?

Jeremiah: It can get a little muddy. That’s kind of an upfront warning for that. Personally, for me, concrete, consistent adjectives are what become taxonomies and terms. To make it simple, if you were describing any particular object that you might, shape is a taxonomy because there is a finite amount of shapes that could be consistently applied to an object. It’s round, square, rectangular, oblong, so forth. Metadata is good for variation. I’m going to have to use the car example again, but all vehicles have VIN numbers. VIN numbers are expected to be there. Every car ideally should have one, but if you were to try and create a term for every VIN that existed you would end up with a huge taxonomy full of one use terms. That consistent but unique data like someone’s age of their name is perfect for metadata.

Drew: Got you, okay. Those are some good examples. When you’re looking at websites does every site need post types, metadata, or taxonomy? Can you just build a site without it?

Jeremiah: You can definitely build a site without it, but unless your content is either very flat in terms of genre or type the site would become an unorganized mess. WordPress has a default out of the box taxonomy for posts called Categories. From the moment you start using it WordPress assumes you will need and use taxonomy.  Again no, Not every site needs it, but I would say unless the site that you’re running is very specific, meaning that the single type of content that you create pretty much encapsulates all of the adjectives, like you only do Olive Garden reviews on Thursdays for a specific dish on the menu … and that’s all you do, then you are going to want to do something to organize your content. If you have reviews or if you have a blog, you might have a broad range of review types, reviews for a restaurants, movie reviews, reviews for video games or books, and each one of those gets a separate category or term. That way you can filter out what’s not necessary at any given moment or build views for your users to see exactly what they came to your site for. I have primarily talked about taxonomy and post types purely for organization. However, there is a big theming benefit. Taxonomies, terms, and post types call all have custom appearances in your theme. If you need to supply different sidebars, graphics, or layouts for your different types of content then using Taxonomies, terms and post types is the way to do that.

Drew: Would you give some examples of how you would filter content using taxonomy, post types or metadata on a site?

Jeremiah: Yeah. In a WordPress query, if you have taxonomy available to you, if you have a post type available to you or metadata, you can adjust your query to match some of all of your information. WordPress allows you to do a query for taxonomy, where you can ask for any post of any type in the system, “Hey, look into this taxonomy for me, and I need all of the posts in the database that match this or these terms” This would allow you to have a list of Science Fiction books or cars with 6 cylinder engines.

You can do that with metadata as well, and that’s kind of where the taxonomy metadata thing can get a little gray, because you can approach them in the same way, but metadata typically you’re looking for something that’s like another thing. If I’m looking for the name that’s like Drew, perhaps a feminine offshoot of Drew would be – “Drewina” I could get both Drew and Drewina back using a meta query. Post types, simply that’s the top level one where if you’re only looking for people and that’s all you want, then you would tell WordPress, “I only want people,” and then you could go further to say, “I only want people with the sex of female, with names like Drew,” to get really specific.

Drew: Any words of warning for someone that’s starting to learn taxonomy, like your big a-ha lesson that you’ve learned when you first started becoming acquainted with them?

Jeremiah: Probably the worst thing that I ever did with taxonomy was not use it, and early on I was kind of scared of it. Most of my original CMS experience was with Drupal, which is very similar to WordPress, but it made taxonomy maybe a bit less friendly than WordPress does, and it’s easy to look at taxonomy, which can be kind of broad and tough to wrap your head around, and I think it scares most people away at first. The biggest mistake that you can make is to not organize your content, be 2 to 3 years down the road, and all of a sudden need better filtering, better sorting, different displays, or just better search tools for your site. Organized content will make those revisions and updates so much easier.

I guess the more practical answer to your question would be not being mindful and really thinking about what your content is and how to describe it. There have been plenty of times where I would jump in and start creating my taxonomies, and getting metadata ready without taking the time to study my content. This ended in me having to backtrack and re-plan my content when suddenly post number 7 didn’t fit the plan. Measure twice cut once I guess…

Drew: Right, right. Excellent. I think we’re a little bit clearer now on taxonomy, and do you have any final thoughts?

Jeremiah: Organize your content, keep your house clean.

Drew: Excellent. We’ll leave it there.

September 21, 2016

JavaScript Frameworks and Libraries for 2016 and Beyond

Less than ten years ago it seemed the usage of JavaScript (JS) was limited to click functionality, form validation, and those annoying pop-windows that IE was constantly throwing at you. Today, the JS world has changed drastically. Once a language that was only client-interaction driven, is now being used for desktop applications, server-side language, content management systems, dependency management, entire web applications, CSS processing, database management and much much more.

If you haven’t started learning a programming language and are looking for a good place to start, I believe JS is a great choice with it’s almost endless potential. If you are also wondering if JS will help land you a job in 2016 and beyond, here is a small list of companies currently running a JS framework and/or library:

  • 37Signals

  • LinkedIn

  • PayPal

  • Dow Jones

  • Spotify

  • YouTube

  • Google

  • Twitch

  • Netflix

  • Kickstarter

Today I would like to share some of the more prominent frameworks and libraries that are in use to day, their purpose, and why they are worth learning for 2016 and beyond. This list is not an attempt to define the “best” JS frameworks, but is more geared towards a solid foundation of what is currently possible with JS.


jQuery is a fast, small, and feature-rich JavaScript library that makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler to use than writing pure JS. Jquery’s tagline is “write less, do more” and it does just that. Jquery adds a “$” object to your global scope that contains a bunch of methods within it. These methods contain common application functionality thus preventing you from having to write these functions yourself. For instance if you wanted to add a CSS class to an element just use the addClass() method. Want to remove a CSS class? The removeClass() is available that allows you to do just that!

jQuery really broke the doors wide open for making JS a preferred language to manipulate and animate DOM elements at a time when browser limitations held developers back from achieving this functionality with other resources. Today, jQuery is used on 54,451,485 live sites according to With such widespread usage and vast company of developers, it is safe to say jQuery is here to stay.

Node brings the JS language to server-side development with an event-driven, non-blocking I/O (input/output) model that makes it lightweight and efficient. Node is an asynchronous event driven framework that allows all operations to run in a single thread, instead of many different threads, as is the case with Apache running PHP. Since all operations are running asynchronously (non-blocking), your application runs extremely fast without consuming tons of memory. This also allows a Node server to become easily scalable since it can handle many I/O operations simultaneously without a huge load on the server.

Another great benefit of using a JS based server is that you no longer have to transcribe data from one language to another. For instance, if you are pulling object data from a MySQL database with PHP that you need to use in a JS function, you have to find an elegant way to translate that data so that it can be easily used between both languages. This process always results in convoluted code that can be avoided completely if the server-side and client-side of your app are both running JS.

Beyond allowing you to create a server environment, Node also contains a package manager accurately named “npm” for Node Package Manager. Npm allows you to quickly install JS libraries to your Node project through your CLI with easy to use commands. Npm also does a great job at setting up dependencies for your project so if someone installs your module in their project, npm will grab all of the necessary packages that you have defined for your project.

npm can be used for other projects than just a Node application. At Southern Web, we use npm packages within our WordPress projects to handle SASS processing, file minification, image compression, and development environment browser testing.

Keystone is a an open source framework for developing database-driven websites, applications and APIs in Node.js built on Express.js and MongoDB. This framework is one of a few that are pushing JS into the content management system sector.

As you can see in their demo, the CMS even includes a full-fledged admin UI. While this currently does not compare to the community that WordPress or Drupal has, it is interesting to see that a JS independent application can even handle a CMS on its own.

Angular is a Model-View-Controller framework that extends the HTML vocabulary in your application, thus resulting in an environment that is expressive, readable, and quick to develop. Angular allows you to implement intense JS functionality with a very minimal amount of code on the front-end and back-end of your application.

Angular also allows for Two Way Data-Binding which allows the developer to implement complex Ajax functionality by simply adding tags to your HTML. An example of this would be updating an H2 tag by typing within a input field. Simply add an attribute to the input element such as “ng-model=””enterName” and add the tag “{{enterName}}” within your H2 tag. Now when a user enters a name in the input field, the H2 tag updates instantly to the text that was entered. This type of functionality would otherwise require the developer to tediously write out the code to handle this interaction and code to store the text that was entered. Instead, Angular handles all of the code with the example above.

When it comes to JS MVC frameworks, I would suggest taking a look at backbone.js, emberjs, and react.js. All are widely used and there is much debate as to which framework will be the most prominent going forward.

It is stated that underscore.js is the “tie to go along with jQuery’s tux”. Underscore provides over 100 prebuilt functions that allow the devleoper to manipulate data whereas jQuery is mainly used to manipulate the DOM.

Underscore is quite popular and is currently used on many of the web’s top websites, including the list below:







The framework is even required for Backbone.js, another JS MVC client and competitor to Angular.js. To make this framework even more attractive, the minified version of the library comes in at 5.7kb…pretty awesome!

Meteor is a JS web application framework written using Node.js. Meteor allows for rapid prototyping and produces cross-platform (web, Android, iOS) code. It utilizes a few of the frameworks mentioned above (Node, jQuery, backbone) as a publish–subscribe pattern to automatically propagate data changes to clients without requiring the developer to write any synchronization code.

Meteor is a complete foundation for all of client and server side code to be handled by JS. Josh Owens summed it nicely with this:

Here is a list of what it would take to not rely on Meteor.js:

  • Node.js

  • Express

  • Grunt or Gulp

  • Mongoose mongo driver

  • A pub/sub driver (I hear there is a decent redis one)

  • Websocket (which one?)

  • Angular

  • Karma

  • account/oAuth libraries

  • A pot of fresh coffee

As you can see, it Meteor js takes advatage of many JS libraries and packages thus showing the script’s strong prominence in the future of development.


The tools listed above are just a small handful of frameworks and libraries being built for the JS community. Besides jQuery, all of the tools mentioned above are six years old or younger! To watch a language come so far in such little time, it is intriguing to see where JS will be in the next five years.

With all of it’s current potential, there has never been a better time to start learning JS. With core language under your belt, jumping into these new technologies will be much easier. If you are interested, a great place to get started is with the courses in Javascript at Code School and Codecademy. I also believe owning a copy of Javascript: The Definitive Guide is a must have resource for all JS developers.

With frameworks and libraries discussed above, hopefully you too will find a career path with JS or even create one of your own.

October 27, 2015

The Importance of Clean Code

If you are a professional web developer, it’s likely that at some point you’ve had to maintain a block of code or script written by another developer. Did you spend hours try to deduce the purpose? Was your initial response, “This is crazy!”? If you’ve ever heard another team member’s name used as a verb or adjective in describing bad code–and you don’t want to be that person at some point–you already understand the importance of writing clean code.

As a developer, you are not only responsible for the end result of your code, but also the integrity of the underlying components. It is possible (and often faster) to create a block of code that meets the goal, but which is otherwise unintelligible. Meeting deadlines with bad code works–that is, until you or another developer has to return to the stew of code to update it or correct an error. While creating code that is clean and readable does add a bit of time and consideration on the front end, the benefits will definitely save you time later down the road. Here are some simple things to keep in mind when you’re hammering out your next theme or plugin.

Focus and Intent

When you’re clear in your own mind about what you are developing and why, it can go a long way toward helping you organize and maintain clean code. Try organizing large pieces of code that serve many functions into smaller chunks that are easier to understand and maintain. Smaller logical chunks that can function independently of one another will narrow the margin for errors versus one large interlocking document.

To illustrate, think about an automobile. A car is one large machine made up of separate systems working together to operate the whole. If you were writing an application that mimicked a car, you could theoretically put every line of code into a single file and a single function named “car,” but this approach doesn’t consider that a car consists of an engine, transmission, wheels, headlights, etc. Should you ever need to work on the engine, you wouldn’t be working on the transmission at the same time, so it would be ludicrous and confusing to have a file named car.php inside which was a function named car() that described every operation the car performed (engine, transmission, wheels, headlights, and so on). A much better approach would be to break down the car function into smaller more focused functions such as engine(), headlights(), or wheels(). To further organize car.php, you could move focused functions into separate files: engine.php, headlights.php, etc. In the end, you’d have smaller chunks of code whose intent is more immediately clear. You wouldn’t have to dig through the entire car to just fix the wheels.

Clarity and Self-Documenting Code

I have heard many developers defend their sloppy illegible code by claiming that they can save time by limiting the number of characters they type. Such time-saving measures come in the form of vague one or two letter variable names, function names that do not communicate their purpose, or a complete absence of comments. The code was likely understood by the developer when it was written, but no one else is going to have any context for it. When it comes time to revise or refactor this code a week or a month later, someone’s going to have to untangle the mess. So much for saving time.

Because variables and functions can be declared many lines or files away from where they are used, vague names for these variables and functions can (and will) lose context if they do not describe their purpose–so when writing a function or variable name, try using descriptive text to keep it in context. A function named “myFunction” only communicates that you (or someone else) wrote a function. By contrast, “myFunctionThatAddsTwoNumbers” is a function name that explains what it does. Without digging any further into the code, you know that the function will add two numbers. This extends to variables as well; if you were saving the latitude of the Eiffel Tower to a variable, a good name would be something like “latitudeOfTheEiffelTower”. or something similar to describe what the variable contains.

Another way to improve clarity in your code is to document it directly using comments. Complex code with great self-documenting naming can still be difficult to read and understand, so even a small comment can go a long way to helping other developers understand. If code consists of nested conditional statements or loops, familiarity with the programming language won’t always be enough deduce the solution applied to the problem. A short comment to explain when a statement ends, or to describe how one part relates to another, can go a long way toward guiding others through your code is important. Think of it as writing it down so you don’t have to explain yourself later.

Coding Standards

If you’re having trouble figuring out how to clean up your code, or if you’re having a semantic argument about formatting with a co-worker, there may be some documented coding standards available depending on the technology you’re using. WordPress, for example, has guidelines for HTML, PHP, CSS, and Javascript. Completely integrating or including the coding standards from technologies like WordPress not only cleans up the code you are writing but also aligns it with the standards of the community–a community that you may be asking for help, hiring from, or working in. Keeping things clean and consistent with any current coding standards helps you understand one another.

A Cleaner Future

If you found yourself guilty of any of the sloppy code-writing described above, I’d encourage you to use some of the suggestions above as a starting point for cleaning up your code. It will require some effort and a small investment of time, but in doing so, you’ll not only gain more pride in your work, but you’ll save yourself and others a lot of time and headaches later on.  For even more helpful information, you might look at the book Clean Code: A Handbook of Agile Software Craftsmanship for further reading.

October 21, 2015

WordPress Custom Taxonomies: Making Archives Titles Work

So, we’ve already gone over the basics WordPress Custom Taxonomies. We also know taxonomies are powerful and convenient when used correctly. This time we’re going to dive into the code that actually makes them work – specifically, being able to display what you want as the title of your custom taxonomy page as opposed to the standard “Archives” heading.

Read More »

January 9, 2014

Web Development Tools: Browserstack

In a perfect, fantastical world web developers could create their websites and applications using the most progressive code and techniques, check their work in modern browsers and call it a day. But, that is so far from actually being the case. While older browsers in general are usually the culprits, Internet Explorer is the bane of many a web developers existence — as is clearly illustrated by this Flickr photo.

Read More »

December 12, 2013
Emmet plugin

Getting Started with Coding Plugin Emmet

I’ve seen people raving about HTML & CSS tool Emmet for a while, but I’ve always been partial to hands-on and coding from scratch. I’ve always felt that if you craft a site from the ground up, you know exactly what’s going on. Now that I’ve been at this for a few years, I understand what’s going on even without crafting the code keystroke by keystroke, so why not give this Emmet thing a test?

Read More »

December 12, 2013