Recent Articles
Posted on Jan 29, 2010 by Michelle to
Projects

THAT Agency was contracted to develop the website for Make A Change Today. In addition to website development, THAT Agency was also asked to perform an indepth analysis of the client competitor websites, and develop a strategy for on-site optimization.
The Make A Change Today website was built around a content management system (CMS), allowing the client complete control over their website’s content and imagery. Additionally, the website consists of three lenghtly videos, that THAT Agency converted into flash movies, that stream in, allowing for maximum page load, while the video begins playing.
Posted on Jan 25, 2010 by Rich to
Web Development
I think the more examples people post out there, the overwhelming some things might get. Google maps and the interaction between the code and the functionality behind it has for the most part, been something that some developers might might a little hard to deal with.
Well I am not trying to add to the confusion, but hopefully shed some light on this matter. I believe this example and straight to the point and pretty easy to understand.
Here we go.
What Does it do?
This example is pretty simple. It will render a map on a web page based on items that it sees in an XML file.
What Do I need?
You will need a couple of things.
1. First you are going to need a Google Map API Key. Dont worry this is way less complicated than you might think, but remember that an API key is based on a domain. So if you are testing everything on mysitedev.com you will need a new API key when you launch live to mysite.com.
2. You will need to get lattitude and longitude coordinates for the location(s) you wish to plot. I do it using google maps itself, but maybe there is something easier out there than you can share?

code for actual map file
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Google Map Example</title>
<style>
*{margin:0;padding:0;}
body{background-color:#d9d9d9;text-align:center;}
.mapBox{width:640px;height:480px;display:block;}
</style>
<script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2&key=YOUR_API_KEY"></script>
<script type="text/javascript">
//<![CDATA[
function load(lat, lng){
if (GBrowserIsCompatible())
{
var map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.setCenter(new GLatLng(lat, lng), 6);
function createMarker(point, name, address, index)
{
// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode("A".charCodeAt(0) + index);
var icon = new GIcon(baseIcon);
icon.image = "http://www.google.com/mapfiles/marker" + letter + ".png";
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml("<p><strong>" + name + "</strong><p><p>" + address + "</p>");
});
return marker;
}
// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon();
baseIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);
// Grab actual information from the properties xml to use.
GDownloadUrl("properties.xml", function(data, responseCode)
{
var xml = GXml.parse(data);
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
map.addOverlay(createMarker(point, markers[i].getAttribute("name"), markers[i].getAttribute("address"), i));
}
});
}
}
//]]>
</script>
</head>
<body onload="load(28.551957,-81.419678)" onunload="GUnload()">
<div id="map" class="mapBox"></div>
</body>
</html>
Please note that the line load(num,num) is the center of the map.
<body onload="load(28.551957,-81.419678)" onunload="GUnload()">
code for properties XML file.
<?xml version="1.0" encoding="utf-8"?>
<markers>
<marker name="Walt Disney World Resort" address="7100 Municipal Drive Orlando, FL 32819" lng="-81.419678" lat="28.551957" />
<marker name="Sea World Orlando" address="Orlando, FL 32821" lng="-81.458044" lat="28.420844" />
<marker name="THAT Agency" address="120 S. Dixie Hwy WPB, FL 33401" lng="-80.049219" lat="26.725144" />
<marker name="Art Deco Welcome Center" address="1200 Ocean Drive Miami Beach, FL 33139" lng="-80.125952" lat="25.795718" />
<marker name="Daytona International Speedway" address="1801 W Internatl Speedway Blvd Daytona Beach, FL 32114" lng="-81.058674" lat="29.215856" />
</markers>
Click Here View a Working example using the code noted here
Later on we can look at how to create the properties.xml file dynamically using php as well as some other goodies. Stay Tuned.
Posted on Jan 21, 2010 by Neil to
General
Using rounded corners in photoshop is a breeze with the new rounded corner tool. Before the rounded corner tool the only way to round images was to use either vector paths imported from illustrator or make a rounded selection path from artwork imported from other applications. The problem with this technique was that it left little room for minor adjustments since the rounded corner image or shape had to be created in a different application. To get it right you would need to import the image into illustrator, adjust the rounded corner shape to the right size then bring that shape back into photoshop. This complicated things and made customization a pain.
In photoshop CS the tool pallette now includes a shape tool. Select this tool and hold down…..a series of shape options including the Ellipse, Polygon, Line, custom shape and the rounded Rectangle Tool. Each of the shape tool options has its own set of properties you can customize.
heres a simple walkthrough of how you can add rounded corners to an image:
- First open an image file
- Now add a new layer in the layers panel
- On this layer using the shape tool draw a Rounded rectangle. Notice that once this tool is selected and the layer is active you can adjust the radius of the corner…..
- Using the Magic Wand or Direct Selection Tool select the rounded shape
- Choose the select drop down and save your selection
- Now in the layers panel chose your image and cut it from the canvas onto your clipboard
- Load the selection shape using select>load selection.
- You should now see a dotted “marquee” outline of your shape / saved path.
- With the dotted “marquee” path still showing chose Edit > paste Into. This will p[aste your image inside the selection shape creating a mask.
- There you go - you should now see your image masked by the shape of your saved path with rounded corners.
- Use the layers panel at any time to make minor adjustments, add shadows, glows or whatever you chose. You can also scale or fine tune the masked image untill its positioned perfectly.
- Export the file as a transparent background png to maintain your transparent background. this way you can overlay the file onto other images or designs seemlessly.
In photoshop theres so many tools and techniques - the possibilities are endless. A good approach is keep an open mind when photoshopping, since many paths can take you to the same goal. Dont be affraid of the tools. Drag layers around reorganize them adjust their transparency. experiment with the tools provided. Often your best designs will reveal themselves to you as a result of a layer interacting with another layer in a particular way that looks good. You may see things that improve the design or detract from it. If you like the way something looks duplicate it onto its own layer. You can then turn that layer on and off or toggle between the two and compare. Doing this allows your designs to evolve in ways that often exceed your initial expectations. With tools like Motion Blur or Zoom Blur combined with all the different layering possibilities...... there are no limits to what you can create using photoshop.

Here is the canvas with tools like layers, Selections, and Rounded Rectangle Shown.
try this site for more inspiration and maneuvers - http://psd.tutsplus.com/
Posted on Jan 18, 2010 by Rick to
SEO

It seems almost certain that local search will become more important as Google and other search engines improve their ability to accurately display local listings when they are relevant to search queries. One of the easiest and least time-consuming things that local businesses can do to drive targeted traffic to their website is to add or verify their local listing in Google. Here’s how it’s done:
1. Search for your business – Begin by going to Google Maps and searching for your business. A good way to search is to do “[business name] near [location]“. For example, I searched for THAT Agency near West Palm Beach. When your listing appears, click more info.

2. Click Business owner?

4. Click Edit my business information and then continue.

6. Now, you’ll be taken to you business listing management screen where you’ll be asked to fill in information about your business such as the location, description, website, email, business category, hours of operation, payment types accepted, photos, videos and more. Here are some quick tips for filling in this information:
- Name – Use the business name that most of your customers or potential customers will know you by. This seems pretty obvious by for businesses that have a different legal name than ‘marketing’ name, it can cause difficulties when customers are searching.
- Description – Use descriptive keyword phrases in your business description. For example, if you sell cars in Miami, FL, you may want to use phrases like Miami car dealer, car dealer in Miami, etc.
- Phone number – Make sure your local phone number is included (even if you also have an 800 number).
- Category – choose the most relevant and specific categories that match your business.
- Photos and video – Photos and videos can make your listing more appealing. A brief video outlining your business services can be a great way to set you apart from your competition. Likewise, photos of work you’ve done (if appropriate) can also help improve your conversion rates.
- Website – Don’t forget this one! Include your website address so users can click-through for more information.
- Coupons – Entice searchers to contact by including an appealing coupon offer within your Google Local listing. Coupons are also a great way to track the success of your Google Local marketing efforts.
When you’re finished entering your business information, click the Submit button at the bottom of the screen.
7. In the final step you’ll need to verify ownership of your listing. In this step, Google gives you the choice of verifying by phone or verifying by postcard. Both are easy to do although verifying by phone is much quicker.

That’s about all there is to adding and optimizing your listing in Google Local. As time passes, you’ll be able to track results through reports which can be found in your Google Local Listing Center. Best of luck!
Posted on Jan 13, 2010 by Michelle to
General
As a website design, development and marketing company, when a client first comes to us to request more information on creating a website for them, one of the first questions we ask is: Do you already own a domain?
While seemingly an innocent question, from our agency point of view, I have come to realize that the sheer terror this arises in some of our clients, requires a straight forward step-by-step guide to complete this task.
The domain name’s goal:
The domain name itself has one main goal. The main goal of a domain name is to give the public an idea of what information they might see when they land on your site. Some examples of this are: WebDesign.org, Hotels.com, SEO.com, etc. When performing a search within Google, if these sites were to appear within the results, based on their domain name, you would have a fairly good idea as to what you could find on their site.
Now that we have the domain name’s goal clarified…Ready to begin? Grab yourself a cup of coffee, sit back, deep breath and now we can get started…
For the sake of simplicity, I am going to setup a senario for you, and reference it throughout this how to.
Senario:
Tina is a small business owner. She has a friendship bracelet store in Key West, FL. Tina has decided to expand her market reach, by venturing online. She wants a website to feature pictures of her friendship bracelets, show her store’s location and allow her customers to purchase her friendship bracelets online.
Step 1: Research Domain Name Options
The best place to start your domain name research is with your companies brand name, or variations of that. Start by making a list of your companies brand name and variations of.
NOTE: it may be helpful to include addons such as LLC, INC, etc.
Tina’s Brand Name List:
- Tina’s Friendship Bracelets
- Tina’s Friendship Bracelets, Inc.
Once you have a list of brand name domain name options, start making a list of services/products your company offers, company location and any other relative terms you may come up with.
Tina’s Description List:
- Friendship Bracelets
- Friendship Braceletso Store
- Key West
- Florida
- Key West, FL
Step 2: Check Domain Name Availability
The next step is to check the domain name availability. Utilizing a few different websites, you can do this quickly and with little effort. Register.com is one of my personal favorites.
In a best case senario, your brand name is available and you can move right along to step 3; however sometimes that is not the case. If you are not that lucky as to have your brand name available, you can utilize these sites to type in different variations of the two lists you have made.
Tina’s Example Variation List:
- www.friendshipbracelets.com – taken
- www.tinasfriendshipbracelets.com – available
- www.tinasfriendshipbraceletsinc.com – available
- www.friendshipbraceletskeywest.com – available
- www.keywestfriendshipbracelets.com – available
- www.friendshipbraceletsflorida.com – available
- www.floridafriendshipbracelets.com – available
- www.friendshipbraceletsstore.com – available
- www.friendshipbraceletsstorekeywest.com – available
- www.keywestfriendshipbraceletsstore.com – available
- www.friendshipbraceletsstoreflorida.com – available
- www.floridafriendshipbraceletsstore.com – available
Step 3: Purchase / Register Domain Name

Once you have determined if your domain name is available, you can now move forward and actually purchase it! A common mis-conception is that you need to purchase a domain through your ISP; however it is just a mis-conception. There are many sites that will let you purchase your domain. Some examples are: www.register.com, www.godaddy.com, www.networksolutions.com, etc. So, my advice here is to shop around. Different sites will have different costs. Additionally, another great option is to purchase your domain when you sign up for your hosting account (how to on this to follow), because they will sometimes add on one domain for free when you sign up for hosting. Most all of these sites have a simple step-by-step process walking you through the purchase of your new domain. They usually run something like this:
- Enter domain
- Enter contact information
- Purchase domain
That’s it…you’re done!
Posted on Jan 11, 2010 by Bill to
Projects

The goal of the website for Aztec Acquisitions was to establish a professional and trustworthy appearance. During THAT Agency’s discovery process, Aztec Acquisitions was asked to deliver a list of adjectives for use during the design process. THAT Agency turned this exercise around, and utilized the powerful words as a design feature within the header of each page. THAT Agency took advantage of the primitive nature of the logo and term “Aztec”, to create a color palette that was simplistic, yet added variations and subtle graphical interests with the use of gradients. With a distinct call-to-action color, each visitor to the site is sure to know where they are, and where they need to go.
In addition to the creative design, the Ask Aztec website is backed by a full Content Management System (CMS) that allows Aztec Acquisitions to have full control of the site. An additional feature of the website is the system, THAT Agency created, in which a site visitor could elect to receive FREE information via email on a set daily, weekly or monthly interval.
Posted on Jan 11, 2010 by Neil to
General
So what is a tween? As defined by wikipedia:
“Inbetweening or tweening is the process of generating intermediate frames between two images to give the appearance that the first image evolves smoothly into the second image. Inbetweens are the drawings between the keyframes which help to create the illusion of motion. Inbetweening is a key process in all types of animation, including computer animation.”
In adobe flash, an easy way to tween is using the timeline. place an object on your stage add a keyframe then dupicate the keyframe, drag it across the timeline to the required location then select the two keyframes. now in the properties panel with both keyframes selected add a motion or shape tween. At this point the two keyframes are grouped and you can move the object in the first keyframe to one location then move the object in the next keyframe to another location. You can even change its color, rotate , scale, etc. since the two keyframes are tweened when you publish the movie you will see the object move in the whichever way you have defined. The tweening creates all the frames between the two keyframes.
At this point you can chose to make this animation its own movie clip then assign that clip to play when you hit a button or you can use the movie clip to add transitions to your flash presentation.
However using the timeline to tween has many limitations.
More advanced users use actionscript to create movement on the stage. Actionscript allows you to use math to create advanced forms of tweening with properties such as easing, elasticity, bouncing, and more precise color control. Additionally, actionscript tweening allows for sequencing of movements, delays, and even callbacks which tell the movie to execute the next action only after the previous event has taken place.
The best part of using actionscript is that it is non linear. Meaning that its timeline independent. With a timeline tween, once you define its movement it cant really change. You can tell it to stop then go again but its still linear. If the animation was done using actionscript I can at any point tell it to do something else. For example I could make a button that on press tells the logo to turn black and rotate 360 degrees while increasing to 250% of its original size. I can cause this action at anypoint during the previous animation and it will affect the animation seemlessly. In other words midway through an animation i can tell it to start doing something else and it will smoothly change its course and begin its new set of instructions. you cant do that with timeline tweening.

Using actionscript to create tweens also has its own limitations. For one thing its much harder to do. For basic tasks such as fading imgs or moving type its a good idea to stick with basic timeline tweens. In fact most animators use a combination of timeline and actionscript tweens. Since timeline animation is quite visual it can be a good starting point to make things look nice -then more advanced interactivity can be added using actionscript.

for more information on tweening and actionscript visit adobe.com
Posted on Jan 7, 2010 by Rich to
Web Development
There are characteristics that every web developer has. One of those things is the way a project is started. While some developers might use open source Content Management Systems / Blogging software like: Wordpress, Joomla, Movable Type or any of the other systems out there, some developers chose to have a foundation to their projects.
Here at THAT Agency, we write alot of custom code for our clients, but I personally still like building off of my own foundation. Here is my breakdown.
Note that we usually build in PHP.
- css/
- inc/
- js/
- img/
- template.php
Seems pretty simple right? well lets look inside the folders themselves.
css
This folder includes 2 files (which you can merge into 1, but i like the two files). We have been really utilizing the 960 Grid System for our development standards, so the first css file (reset-960.css) is pretty much what you expect. It contains the condensed versions of reset as well as the 960 grid. I opted not to use the text.css file that is included in the 960 grid download but wrote my own (this you can change to your own).
The next file site.css contains some regular standard css elements:
/* important */
html{background-color:#F9F9F9;}
body{font-family:Arial, Helvetica, sans-serif;font-size:14px;line-height:1.3em;}
*{margin:0;padding:0;}
/* headers */
h1{font-family:Georgia, "Times New Roman", Times, serif;font-size:24px;font-weight:normal;}
h2{font-family:Georgia, "Times New Roman", Times, serif;font-size:22px;font-weight:normal;}
h3{font-family:Georgia, "Times New Roman", Times, serif;font-size:20px;font-weight:normal;}
h4{font-family:Georgia, "Times New Roman", Times, serif;font-size:18px;font-weight:normal;}
h5{font-family:Arial, Helvetica, sans-serif;font-size:16px;font-weight:bold;}
h6{font-family:Arial, Helvetica, sans-serif;font-size:14px;font-weight:bold;}
h1,h2,h3,h4,h5,h6{margin:10px 0;padding:0;display:block;clear:both;}
/* Text and links */
p{font-family:Arial, Helvetica, sans-serif;line-height:1.5em;margin:0 0 10px 0;padding:0;}
blockquote{font-style:italic;display:block;margin:20px 0;padding:10px;background-color:#fff;border-top:1px solid #ccc;border-bottom:1px solid #ccc;}
a,a:link,a:visited{color:#21759B;}
a:hover{color:orange;}
ul{margin:0 0 0 10px;}
ul li{margin:0 0 0 10px;padding:0;}
/* clear pieces */
.clear5{height:5px;}
.clear10{height:10px;}
.clear15{height:15px;}
.clear20{height:20px;}
.clear25{height:25px;}
.clear50{height:50px;}
.clear100{height:100px;}
/* Text Classes */
.textRight{text-align:right;}
.textLeft{text-align:left;}
.textCenter{text-align:center;}
inc
The inc(ludes) folder for starters contains 3 files:
header.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>DEVELOPMENT TEMPLATE</title>
<link rel="stylesheet" media="all" type="text/css" href="/css/reset-960.css" />
<link rel="stylesheet" media="all" type="text/css" href="/css/site.css" />
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="/js/site.js"></script>
</head>
analytics.php
This file was created to house your analytics code for your website. I find it annoying to have to copy and past something as simple as that on every page of your website.
footer.php
Like the idea? Check it out for yourself and download the zip file. It contains 2 folders. 1 for HTML and the other PHP
Posted on Jan 7, 2010 by Rick to
Social Media
There are several applications (and misapplications) of social media marketing in the hotel and hospitality industry. Today, I want to talk about 2 easy-to-use social networks that almost any hotel can use to increase exposure and engage potential and past customers. While no cookie-cutter application of social media marketing will work for every hotel, I hope to cover 2 general applications that any hotel can try on their own.
Hotel Twitter Marketing

Twitter is perhaps the most blogged about social network and Twitter marketing is a hot topic that has been hyped-up by bloggers and media alike. While business in many industries have already tried or plan to try their luck at twitter marketing, I think that this channel makes more sense for hotels than it does most others. As a hotel, here are just a few easy ways you can get your message out there on Twitter. After creating a twitter page for your hotel, consider the following ideas for marketing your hotel on Twitter:
- Offers – Tweet about any and every special offer that you’re promoting through other channels. You’re followers are most-likely following you because they enjoyed their stay at your hotel and plan to come back. Give them a good reason to.
- Hotel events – Throwing a big New Year’s party? Hosting a conference, art show or other interesting event? Letting your fans know through Twitter can be a great way to generate bookings and daily visitors to your hotel. Tweet a brief event description and link to a page where your fans can get more details.
- Local Events – Tweeting about upcoming local festivals, concerts and other events in your area can help generate travel interest in your followers. Timing a strong promotion with an interesting local event can be a great way to encourage bookings.
- Past events – Using twitter to share photos and video of exciting events at your hotel can be a great way to update fans on exciting things that have happened at your hotel. Simply post your photos or video on your website or other social networks like YouTube or TwitPic and tweet a link to your followers.
- Daily specials – If you hotel is home to one or more bars or restaurants that aim to attract the local crowd, tweet your lunch and drink specials (include photos!) daily.
- Customer service – Encourage past, present and future guest to contact you though Twitter for assistance. When using Twitter for customer service, be prepared as customers will give honest feedback. It’s best to be open and responsive with any direct communications that you receive.
Marketing Hotels on Facebook

Consider your Facebook fan page as your hotel’s home away from home. On Facebook, creating a fan page gives you an opportunity to present your hotel to the community. Start a fan page and build it up with information about your hotel including photos, video and links to your website. Then, update the page on a regular basis with a lot of similar content that would on Twitter. Here are a few ideas for marketing hotels on Facebook:
- Offers – Post any special offers to your wall
- Upcoming events – Create an event through your fan page and update your fans
- Past events – Post any interesting photos or videos from past events to your page for fans to see
- Fans – Encourage your fans to post photos and reviews about your hotel. More fan interactions will make your efforts much more worthwhile
These are just a few ideas to think about when trying to engage your customers and future customers on social networks. Here are a few examples of hotels that seem to be doing a pretty good job with hotel social media marketing.
Hotels on Twitter
- The Iron Horse Hotel – The Iron Horse seems to do a good job with updating locals and distance travelers alike with interesting hotel activities.
- Ivy Hotel – The Ivy Hotel does a great job with keeping local followers up-to-date with weekly events for their club, Envy.
- The Charles Hotel – Another good example of an active hotel promoting to past and future customers, travel agents and bloggers.
Hotels on Facebook
- Loews Hotels -Loews does a good job updating fans with promotions from many of their different hotel locations.
Additionally, fans seem to be fairly active with posting comments on the Wall.
- Opus Hotel – Good job keeping content up-to-date and great job with media (videos and photos). I noticed that there wasn’t too much fan interaction on the wall but they still show quite a few fan-submitted photos.
Posted on Dec 31, 2009 by Neil to
General
Back in 1995 when I first hooked up to the internet things were different. Going online involved an annoying dial in period where your modem made its connection. Once online you could “surf ” the web for design ideas, news items, books, etc. However the content available was limited and it was hard to find quality material. Often your experience left you with little accomplished and much time wasted. This early stage of internet was at some poin labeled internet 1.0 – where the web was just starting to take shape.
Today, the internet and web design have gone to a whole new level. There are agencies THAT specialize strictly in social networking and/or search engine optimization. Most sites are updated in real time and with a few keystrokes into a google search field you will surely find pages of links holding your searched information. Without question the most significant advancement with the internet is the explosive growth of blogging and social networking. These new technologies take internet content to a whole new level allowing individuals connect with people of similar interests and share their personal or professional lives in real time. Posting information in the form of videos, photo albums and memos to certain friends, groups, or even to selected groups based on relevance. now the Internet is not only a resource full of information that can help you find answers, its progressed into an advanced form of global communication. This current phase of Internet use is commonly referred to as web 2.0.
So what does the future hold and when can we expect to be running web 3.0? Its hard to clearly define when that turning point will actually take place but surely its underway and perhaps we are in many ways already into web 3.0. The next phase of the web could be one that takes the existing ability of global communication to the next level. This phase could be marked by web applications able to do seemingly intelligent things. For example applications could extract relevant solutions or options based on your browsing history. The search engines may eventually take into consideration your income level and only post results that reflect that. It would be as if the computer anticipates your needs based on your viewing or buying habits. Without being a living entity a computer improves your web experience through using what could be described as artificial intelligence. Imagine the possibilities? voice recognition? Having a conversation with your digital assistant while getting ready for work? What if your digital assistant detected some stress through voice recognition? “Perhaps you had taken it to far the night before? Let me play some soothing norwegian death metal for you to help get you going this morning…”
What sounded like science fiction 20 years ago is now just around the corner.