<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
<channel>
	<title>New Media Campaigns</title>
	<link>http://www.newmediacampaigns.com</link>
	<description>New Media Campaigns is a full service web design, development and marketing firm specializing in high end web sites created at an affordable price.</description>
	<language>en-us</language>
	<copyright>Copyright 2005-2009, New Media Technology Group</copyright>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/NewMediaCampaigns" type="application/rss+xml" /><feedburner:emailServiceId>NewMediaCampaigns</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Following content management's core concepts with your CMS</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/3UIkS3dBnAI/content-managment-core-concepts</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/content-managment-core-concepts"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/content-managment-core-concepts" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;Content Management is nothing new, but it does have its fair share of growing pains as it relates to the web. With the number of options readily available, it is easy for designers, developers and clients to lose sight of content management's core principals:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Sorting 'Stuff' &amp;mdash; content defined by an end-user &amp;mdash; into a content repository.&lt;/li&gt;
&lt;li&gt;Support the workflow of the end-user.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The web community has the first principal down thanks to relational databases, but we really struggle with the second. Since the end-user can vary from an individual with varying skill sets to a large corporation with endless resources, demands on a Content Management Systems and its specific workflow have create countless options in the marketplace.&lt;/p&gt;
&lt;p&gt;With each options comes a list of pros and cons, fanboys and detractors which ends up creating some misconceptions. Here are some misconceptions I've read repeatedly in the last few weeks that neglect to take these core principals into account:&lt;/p&gt;
&lt;h2&gt;One type of system is better than other.&lt;/h2&gt;
&lt;p&gt;Is it better to go open source, third-party or proprietary system? Truthfully, there is no right answer because each option can meet your goal of publishing content to the web but could create a potential workflow nightmare.&lt;/p&gt;
&lt;p&gt;I use to advocate for using third-party software. I preferred working with a system that offered continuing support thanks to its customer base. If I was unable to continue to help client with maintenance there was always someone within the community. Now a client would never feel like they've wasted their investment on piece of technology.&lt;/p&gt;
&lt;p&gt;That philosophy helped me in large part but I'm not sure it was in my clients best interest. When I started using other technology that better suited their workflow needs, I found myself getting more projects in the long run. Just because a company can afford an expensive system doesn't mean Wordpress isn't the best solution for their needs.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;With the volume of clients and sites we work on, our proprietary system has proven the best option over time and I realized that within my first few days here.&lt;/p&gt;
&lt;h2&gt;CMSs should be more open to customization.&lt;/h2&gt;
&lt;p&gt;I think there is a false perceptions in the title 'Content Management System.' People seem to infer that they should have more control over the system itself and this can lead to people neglecting the content itself. Not all systems are created equal, so you can't be under the assumption any system will meet your needs.&lt;/p&gt;
&lt;p&gt;If you feel like your system can't be customized, you have either chosen a system that doesn't fit into your workflow or you didn't define your content before development began on your system (I'll discuss defining your content in a future post). By ignoring your content from the start, you won't have a clear understanding of the work needed to publish your content and you will feel limited by any system.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Buying into a system means that you are committing to a set of standards, like a fixed design, so that you can produce and manage content quickly be streamlining your workflow. If you can't conform to any set of standards, moving to a CMS isn't in your best option.&lt;/p&gt;
&lt;h2&gt;I don't need to learn HTML now that I have a CMS.&lt;/h2&gt;
&lt;p&gt;The point of moving to a CMS is to avoid coding and/or reduce the reliance of a developer to speed up your publishing process, creating a better workflow. So why would I have to learn HTML when I have a WYSWYG editor to do the work for me?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You don't.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;While there is no need to learn the syntax of a web language like HTML still you need to have an general understanding of how it works. You need to realize that pasting source code info your CMS from an e-mail newsletter is going to break your page in all likelihood. You need to realize when something is outside of the workflow of publishing content.&lt;/p&gt;
&lt;h2&gt;CMSs are bad for SEO&lt;/h2&gt;
&lt;p&gt;This goes back to the same ideas with customization: If you don't make SEO part of your workflow and create/use a system with it in mind early, it's going to make it harder to have good SEO. If that's the case, is it the systems' fault or yours?&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;The success of any CMS is tied to its ability to conform to your workflow. Most complaints with specific systems can be drawn to the fact they weren't developed with your particular workflow in mind. After all, the end goal of using a system is to publish and management content easily and quickly. Most systems can accomplish that, which is align with the first principal.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Having only worked with our in-house system for a few days, I can tell the team put careful thought into the workflow and it seems to be paying dividends. &amp;nbsp;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=3UIkS3dBnAI:IApbg9KDDL0:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=3UIkS3dBnAI:IApbg9KDDL0:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=3UIkS3dBnAI:IApbg9KDDL0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=3UIkS3dBnAI:IApbg9KDDL0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=3UIkS3dBnAI:IApbg9KDDL0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=3UIkS3dBnAI:IApbg9KDDL0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=3UIkS3dBnAI:IApbg9KDDL0:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=3UIkS3dBnAI:IApbg9KDDL0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/3UIkS3dBnAI" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/content-managment-core-concepts</guid>
		<pubDate>Tue, 10 Nov 2009 10:00:00 EST</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/content-managment-core-concepts</feedburner:origLink></item>
		<item>
		<title>Three Ways to Target Mobile Devices</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/sEvKrW8zMJU/three-ways-to-target-mobile-devices</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/three-ways-to-target-mobile-devices"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/three-ways-to-target-mobile-devices" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;&lt;img style="float: right; margin: 0 0 10px 10px;" src="/files/posts/mobile_site.jpg" alt="Webkit Mobile Site" width="200" height="320" /&gt;&lt;/p&gt;
&lt;p&gt;We recently launched a beta version of a New Media Campaigns mobile Webkit site.&amp;nbsp; If you're reading this post from an iPhone, iTouch, Palm Pre or Android based phone you're seeing it right now.&amp;nbsp; Josh Lockhart did the design and frontend code for the site, a topic he will be covering in a post later this week.&lt;/p&gt;
&lt;p&gt;This post discusses how to target mobile devices and show them either different content, different stylesheets or even redirect to a mobile URL. Ideally, the check would be done for ALL mobile webkit platforms, not just the iPhone.&amp;nbsp; It would be a shame to leave those Android/Palm out after developing a pretty mobile site. So without further ado, here are the methods:&lt;/p&gt;
&lt;h2&gt;1. Checking User Agent Serverside&lt;/h2&gt;
&lt;p&gt;When a browser visits a site, it sends a string describing who it is called the user-agent string.&amp;nbsp; It varies depending on the browser and platform.&amp;nbsp; The user-agent string for key mobile webkit browsers are:&lt;/p&gt;
&lt;pre&gt;iPhone - Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3
iTouch - Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A100a Safari/419.3 
Android - Mozilla/5.0 (Linux; U; Android 0.5; en-us) AppleWebKit/522+ (KHTML, like Gecko) Safari/419.3
Palm Pre - Mozilla/5.0 (webOS/1.0; U; en-US) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/1.0 Safari/525.27.1 Pre/1.0
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Unfortunately there is not a good way to check for mobile webkit in general.&amp;nbsp; So each of these needs to be checked for in a case by case manner.&amp;nbsp; Here is some rough php to do that:&lt;/p&gt;
&lt;pre class="brush:php"&gt;if( strstr($_SERVER['HTTP_USER_AGENT'],'Android') ||
	strstr($_SERVER['HTTP_USER_AGENT'],'webOS') ||
	strstr($_SERVER['HTTP_USER_AGENT'],'iPhone') ||
	strstr($_SERVER['HTTP_USER_AGENT'],'iPod')
	){
	// Send Mobile Site
}
&lt;/pre&gt;
&lt;p&gt;We did this type detection since we wanted to send completely new templates for pages at the same URL.&amp;nbsp; This worked nicely with our CMS since both the normal frontend and the mobile fronend were updated from the same database.&amp;nbsp; We could also use this technique to redirect to a mobile URL if that is how we wanted to present our mobile site.&lt;/p&gt;
&lt;h2&gt;2. Checking User Agent Clientside&lt;/h2&gt;
&lt;p&gt;This method simply uses javascript to check the User Agent after the page has loaded.&amp;nbsp; The obvious downside is that it first requires mobile visitors to load your standard site which might be fairly heavy.&amp;nbsp; It is fine to use in a pinch where you are not able to modify server-side code.&lt;/p&gt;
&lt;p&gt;Here is some javascript to detect the mobile webkit browsers:&lt;/p&gt;
&lt;pre class="brush:js"&gt;if( navigator.userAgent.match(/Android/i) ||
	navigator.userAgent.match(/webOS/i) ||
	navigator.userAgent.match(/iPhone/i) ||
	navigator.userAgent.match(/iPod/i) ||
	){
 // Send Mobile Site
}
&lt;/pre&gt;
&lt;p&gt;You can use this method to either redirect to a different site, send a different stylesheet or whatever else you may need to do for a mobile site.&lt;/p&gt;
&lt;h2&gt;3. Use CSS Media Type&lt;/h2&gt;
&lt;p&gt;If your HTML doesn't need to change between your mobile site and standard site, it may make more sense to send a different stylesheet just to mobile browsers.&amp;nbsp; There are a couple of ways to do this, but using the media type capabilities of CSS may be the way to go.&lt;/p&gt;
&lt;p&gt;To load an entirely different stylesheet, use the media attribute when loading the stylesheet:&lt;/p&gt;
&lt;pre class="brush:html"&gt;&amp;lt;link href="mobile.css" rel="stylesheet" type="text/css" media="only screen and (max-device-width: 480px)" /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Alternatively you can just add some declarations into your existing stylesheet:&lt;/p&gt;
&lt;pre class="brush:css"&gt;@media screen and (max-device-width: 480px) {
    /* mobile declarations */
}
&lt;/pre&gt;
&lt;p&gt;This method is a little dangerous since it depends on the screen resolution to send the stylesheet. A mobile site is generally not different from a typical site because of resolution alone; it is also different because of the physical screen size of the device.&amp;nbsp; For instance, the new Verizon Droid has roughly the same screen dimensions of the iPhone but a resolution of 854px by 440px!&amp;nbsp; Serving a mobile site to this device makes sense even though it has such high resolution.&lt;/p&gt;
&lt;p&gt;If you've done a mobile site and have a perferred method be sure to share the site and the method in the comments.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=sEvKrW8zMJU:W8DV-wRPxN8:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=sEvKrW8zMJU:W8DV-wRPxN8:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=sEvKrW8zMJU:W8DV-wRPxN8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=sEvKrW8zMJU:W8DV-wRPxN8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=sEvKrW8zMJU:W8DV-wRPxN8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=sEvKrW8zMJU:W8DV-wRPxN8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=sEvKrW8zMJU:W8DV-wRPxN8:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=sEvKrW8zMJU:W8DV-wRPxN8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/sEvKrW8zMJU" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/three-ways-to-target-mobile-devices</guid>
		<pubDate>Mon, 09 Nov 2009 11:05:00 EST</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/three-ways-to-target-mobile-devices</feedburner:origLink></item>
		<item>
		<title>Recap of Internet Summit 2009 in Raleigh</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/UWVj2yeBoJE/recap-of-internet-summit-in-raleigh</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/recap-of-internet-summit-in-raleigh"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/recap-of-internet-summit-in-raleigh" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;Yesterday was the second annual &lt;a href="http://www.internetsummitevent.com/index.html" target="_blank"&gt;Internet Summit in Raleigh&lt;/a&gt;.&amp;nbsp; We were excited about the event, so we sent three &lt;a href="http://twitter.com/nmcteam" target="_blank"&gt;NMC Team members&lt;/a&gt;, including myself.&amp;nbsp; The event boasted an impressive speaker list, including the founder of Technorati, president of Pandora, and the CEO of Lending Tree.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;With these big names on the roster and an imposing (maybe read: pretentious) event title like the Internet Summit, it was clear that the event was trying to reach national
&lt;script src="http://www.newmediacampaigns.com/control/media/scripts/tinymce/themes/advanced/langs/en.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="http://www.newmediacampaigns.com/control/media/scripts/tinymce/plugins/filemanager/language/index.php?type=fm&amp;amp;format=tinymce_3_x&amp;amp;group=tinymce&amp;amp;prefix=filemanager_" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="http://www.newmediacampaigns.com/control/media/scripts/tinymce/plugins/imagemanager/language/index.php?type=im&amp;amp;format=tinymce_3_x&amp;amp;group=tinymce&amp;amp;prefix=imagemanager_" type="text/javascript"&gt;&lt;/script&gt;
exposure and pull attendees from across the country.&amp;nbsp; I applaud the Triangle area for trying to cement our reputation as a hotbed of tech and startups by hosting the Summit.&lt;/p&gt;
&lt;p&gt;The panel topics ranged from the very technical (Cloud computing) to entrpreneurial (Growth &amp;amp; Liquidity) to buzzwords du jour (Social Media and Real Time).&amp;nbsp; While I enjoyed all of the different options, and we often found ourselves splitting up to see different panels because there were a couple good ones in the same time slot, I think it may have been overly ambitious to cram the whole Internet into a single day.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I would've preferred if they made one or two areas, say Search Marketing and Social media, the focus of the majority of panels and then sprinkled in other topics, rather than having such a broad focus and single panels covering entire industries.&amp;nbsp; The decision to stay broad caused for a lot of high level discussion didn'tplay well with the knowledgeable and inquisitive audience (at least the ones I spoke with) who would have preferred in depth case studies or a look into an industry's future, rather than hearing comments like "content is important in social media."&lt;/p&gt;
&lt;p&gt;That's a general overview of the conference: some good discussion, but could have used some more specifics and even to be spread over two days.&amp;nbsp; Now let's get to some specifics.&lt;/p&gt;
&lt;h2&gt;The Highs&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;There were several panels that provided some really great discussion.&lt;/strong&gt;&amp;nbsp; Through good moderation and interesting panelists, they managed to avoid the tendency to be broad and really focus on specifics.&amp;nbsp; The top few panels that I caught were Search Marketing, Online Advertising Strategies, and Email Marketing.&amp;nbsp; Email Marketing really stuck out as an awesome panel -- even though it's a common topic, the panel featured execs from industry leaders &lt;a href="http://bronto.com" target="_blank"&gt;Bronto&lt;/a&gt;, &lt;a href="http://icontact.com" target="_blank"&gt;iContact&lt;/a&gt;, and &lt;a href="http://emma.com" target="_blank"&gt;Emma&lt;/a&gt;.&amp;nbsp; The panelists were very open, interesting, and thoughful.&amp;nbsp; &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The overall setup and running of the conference.&lt;/strong&gt;&amp;nbsp; The conference was hosted at the &lt;a href="http://www.raleighconvention.com/" target="_blank"&gt;Raleigh Convention Center&lt;/a&gt;, which provided a lot of space to walk around, post up with your lap top, make phone calls, and host side meetings.&amp;nbsp; Furthermore, the wireless was flawless, and the conference had side areas for bloggers to craft posts and for media to gather.&amp;nbsp; The Demo showcase was a nice touch to highlight local startups doing exciting and interesting things in the space.&amp;nbsp; The food was great, the after party beer was quenching, and the overall aesthetics were well thought out.&amp;nbsp; Thank you to the convention center for doing such a great job!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Final keynotes from &lt;a href="http://www.internetsummitevent.com/speakers.html#joe_kennedy" target="_blank"&gt;Pandora president Joe Kennedy&lt;/a&gt; and &lt;a href="http://www.internetsummitevent.com/speakers.html#douglas_lebda" target="_blank"&gt;Lending Tree CEO Doug Lebda&lt;/a&gt;.&lt;/strong&gt;&amp;nbsp; Both of these guys gave really great speeches.&amp;nbsp; Kennedy spoke about the importance of "disruptive innovation" (I was a little worried at first) in entrepreneurship and drew a phenomenal extended metaphor to the birth of modern film with &lt;a href="http://en.wikipedia.org/wiki/The_Great_Train_Robbery_(film)" target="_blank"&gt;The Great Train Robbery&lt;/a&gt;.&amp;nbsp; Furthermore, he provided some really interesting facts about Pandora's business, including the stat they have 20,000 new iPhone app registrations every day!&amp;nbsp; Lebda was one of the most engaging speakers I've ever seen.&amp;nbsp; Period.&amp;nbsp; He did an unusual format for his keynote and structured it as a Q &amp;amp; A with the CEO of &lt;a href="http://www.peak10.com/" target="_blank"&gt;Peak10&lt;/a&gt;.&amp;nbsp; He was incredibly honest and interesting, and the majority of his answers were centered around his entrepreneurial journey, his failures, how his company has evolved, and what he's learned.&amp;nbsp; The committee hit it out of the park by choosing these two speakers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see there were several factors that made the conference a joy to attend.&lt;/p&gt;
&lt;h2&gt;The Lows&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Keynote by &lt;a href="http://www.internetsummitevent.com/speakers.html#richard_jalichandra" target="_blank"&gt;Richard Jalichandra&lt;/a&gt;, president of Technoratti.&lt;/strong&gt;&amp;nbsp; Everyone in the audience and in the &lt;a href="http://search.twitter.com/search?q=isum09" target="_blank"&gt;tweetstream&lt;/a&gt; agreed that this speech was horrendous.&amp;nbsp; He was pretentious, unprepared, and boring.&amp;nbsp; Other people informed me that he was the same at past conferences, such as BlogWorld.&amp;nbsp; IS09 should've done some research and realized that he should not have been put on the list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Many panels lacked specificity that was desired by a knowledgeable audience&lt;/strong&gt;.&amp;nbsp; This point was mentioned in my overview, but is worth coming back to.&amp;nbsp; A panel of four people, none of them especially notable, were given 60 minutes to cover social media.&amp;nbsp; That strategy will almost never work, as there's just far too much to cover and discuss.&amp;nbsp; The conference would've been better served to bring in a renowned expert on a specific area of social media and have them go to town on that specific element, rather than trying to cover the whole space.&amp;nbsp; Again, this could also be fixed by having a multiple day format.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since I enjoyed the experience overall, I don't want to be too negative and will just leave it with those two lows, as those were the two most glaring errors.&lt;/p&gt;
&lt;h2&gt;Bottom Line: Was it Worth the Price of a Ticket?&lt;/h2&gt;
&lt;p&gt;One of the best things about living, working, and playing in the triangle area is the low cost of living.&amp;nbsp; The conference maintained that theme by being a very cheap ticket, between $295 and $395 depending on day of registration, compared to other industry fairs like Web 2.0 that cost closer to $1,000.&lt;/p&gt;
&lt;p&gt;So, if you're a local and didn't have to worry about flying or booking a hotel and losing a day or two of work, then yes, it was definitely worth the cost of admission.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;However, if you traveled a good distance and had to tack on a flight, hotel room for a night, and missed work time for travel, then you probably didn't get your money's worth.&lt;/p&gt;
&lt;p&gt;With that being said, it's really important to remember that this was only the second year of the conference.&amp;nbsp; For a second year event, it was very polished, and it wouldn't surprise me if it is worth traveling to next year or the year after.&amp;nbsp; So, definitely keep your eye on this one, as it might be a deal in the coming years.&lt;/p&gt;
&lt;p&gt;Did you attend the conference?&amp;nbsp; What were your thoughts?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks again for all of the panelists, speakers (except Jalichandra), volunteers, staff, and to the city of Raleigh! &amp;nbsp;Also, if the conference folks need any talented panelists next year, our Nov 2010 looks pretty open right now ;).&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=UWVj2yeBoJE:UL5pt5cb4DA:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=UWVj2yeBoJE:UL5pt5cb4DA:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=UWVj2yeBoJE:UL5pt5cb4DA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=UWVj2yeBoJE:UL5pt5cb4DA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=UWVj2yeBoJE:UL5pt5cb4DA:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=UWVj2yeBoJE:UL5pt5cb4DA:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=UWVj2yeBoJE:UL5pt5cb4DA:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=UWVj2yeBoJE:UL5pt5cb4DA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/UWVj2yeBoJE" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/recap-of-internet-summit-in-raleigh</guid>
		<pubDate>Fri, 06 Nov 2009 09:50:00 EST</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/recap-of-internet-summit-in-raleigh</feedburner:origLink></item>
		<item>
		<title>Looking forward to Internet Summit 2009 in Raleigh</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/9b_uNg71LAk/looking-forward-to-internet-summit-2009-in-raleigh</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/looking-forward-to-internet-summit-2009-in-raleigh"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/looking-forward-to-internet-summit-2009-in-raleigh" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;&lt;a href="http://www.twitter.com/newmediaclay" target="_blank"&gt;Clay&lt;/a&gt;, &lt;a href="http://www.twitter.com/krisjordan" target="_blank"&gt;Kris&lt;/a&gt; and I are looking forward to spending today in &lt;a href="http://www.internetsummit.com/" target="_blank"&gt;Raleigh for The 2nd Annual Internet Summit&lt;/a&gt;! The Summit is designed to promote innovating thought on the Internet and surrounding technologies. As a &lt;a href="http://www.newmediacampaigns.com/page/raleigh-web-design" target="_blank"&gt;Raleigh web design firm&lt;/a&gt;, this is right up our alley. Some of the big-name speakers we're excited to hear from include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Richard Jalichandra, President and CEO of &lt;a href="http://technorati.com/" target="_blank"&gt;Technorati Media&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Joe Kennedy, President and CEO of &lt;a href="http://www.pandora.com/" target="_blank"&gt;Pandora&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;John Kosner, Senior VP and GM of Digital Media for &lt;a href="http://www.newmediacampaigns.com/page/top-5-improvements-of-espncom-redesign" target="_blank"&gt;ESPN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Matt Van Horn, the Business Development Manager from &lt;a href="http://digg.com/" target="_blank"&gt;Digg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Brian Williams, CEO &amp;amp; Co-Founder of &lt;a href="http://www.viget.com/" target="_blank"&gt;Viget&lt;/a&gt;. Viget is a local company that we especially enjoy hearing from. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Personally, I plan on attending panels on &lt;a href="http://www.newmediacampaigns.com/page/seo-vs-ppc---which-provides-you-the-better-value" target="_blank"&gt;Search Marketing&lt;/a&gt;, &lt;a href="http://www.newmediacampaigns.com/page/cloudswitch" target="_blank"&gt;Cloud Computing&lt;/a&gt;, &lt;a href="http://www.newmediacampaigns.com/page/social-media-is-not-a-strategy" target="_blank"&gt;Social Media&lt;/a&gt;, &lt;a href="http://www.newmediacampaigns.com/page/from-print-to-the-web-a-designers-guide" target="_blank"&gt;Design &amp;amp; Usability&lt;/a&gt;, &lt;a href="http://www.newmediacampaigns.com/page/building-a-mr-potato-head-website-of-parts" target="_blank"&gt;Email Marketing&lt;/a&gt; and &lt;a href="http://www.newmediacampaigns.com/page/twitter-for-business-monitoring-and-contributing-to-the-conversation" target="_blank"&gt;Real-Time/Twitter&lt;/a&gt;. I know Clay and Kris plan on going to more of the technological panels like Analytics, CIO/CTO Roundtable and Growth and Liquidity.&lt;/p&gt;
&lt;p&gt;Keeping in spirit with its purpose, the Summit emailed all attendees early in the week and established a Twitter hashtag for the event, &lt;a href="http://search.twitter.com/search?q=%23isum09" target="_blank"&gt;#isum09&lt;/a&gt;. So if you're interested in what's going on at this very minute of the Summit, be sure to search Twitter!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9b_uNg71LAk:E-WjnebipZo:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=9b_uNg71LAk:E-WjnebipZo:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9b_uNg71LAk:E-WjnebipZo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=9b_uNg71LAk:E-WjnebipZo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9b_uNg71LAk:E-WjnebipZo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=9b_uNg71LAk:E-WjnebipZo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9b_uNg71LAk:E-WjnebipZo:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9b_uNg71LAk:E-WjnebipZo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/9b_uNg71LAk" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/looking-forward-to-internet-summit-2009-in-raleigh</guid>
		<pubDate>Thu, 05 Nov 2009 07:05:00 EST</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/looking-forward-to-internet-summit-2009-in-raleigh</feedburner:origLink></item>
		<item>
		<title>NMC Goes 5-1 in Off-Year Online Campaigns</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/9wXGEvi-yQI/nmc-goes-5-1-in-off-year-online-campaigns</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/nmc-goes-5-1-in-off-year-online-campaigns"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/nmc-goes-5-1-in-off-year-online-campaigns" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;As a &lt;a href="http://www.newmediacampaigns.com/page/political-campaign-websites"&gt;political website design&lt;/a&gt; firm, New Media Campaigns is happy to report that in 2009, an off year for elections, the company went 5-1.&amp;nbsp; NMC built online efforts in 5 different states for city council, mayoral, and levy campaigns.&lt;/p&gt;
&lt;style type="text/css"&gt;&lt;!--
table td { padding: 1px; }



table td img { border: 1px solid #ccc; padding: 1px; }



table { margin: 10px 0; }
--&gt;&lt;/style&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://minerformayor.com/" target="_blank"&gt;&lt;img src="/files/posts/campaigns/miner.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://lukeformayor.com/" target="_blank"&gt;&lt;img src="/files/posts/campaigns/ravenstahl.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://bonnergaylord.com/" target="_blank"&gt;&lt;img src="/files/posts/campaigns/bonner.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://voteforourlibrary.com/" target="_blank"&gt;&lt;img src="/files/posts/campaigns/library.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://metroparks2009.org/" target="_blank"&gt;&lt;img src="/files/posts/campaigns/five-rivers.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a href="http://merrillformayor.com/" target="_blank"&gt;&lt;img src="/files/posts/campaigns/merill.jpg" alt="" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The five winners were &lt;a href="http://minerformayor.com/" target="_blank"&gt;Stephanie Miner for Mayor of Syracuse&lt;/a&gt;, &lt;a href="http://lukeformayor.com/" target="_blank"&gt;Luke Ravenstahl for Mayor of Pittsburgh&lt;/a&gt;, &lt;a href="http://bonnergaylord.com/" target="_blank"&gt;Bonner Gaylord for Raleigh City Council&lt;/a&gt;, the &lt;a href="http://voteforourlibrary.com/" target="_blank"&gt;Hamilton County Library levy&lt;/a&gt;, and the &lt;a href="http://metroparks2009.org/" target="_blank"&gt;Five Rivers Metroparks&lt;/a&gt; levy.&amp;nbsp; Unfortunately, the &lt;a href="http://merrillformayor.com/" target="_blank"&gt;Joe Merrill for Mayor&lt;/a&gt; campaign was unable to unseat Binghamton&amp;rsquo;s incumbent mayor, but he ran a spirited and professional campaign that we were happy to work with.&lt;/p&gt;
&lt;p&gt;Each campaign brought a unique set of challenges and goals to the table, and the NMC team was eager to assist them.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We were proud to assist &lt;a href="http://romanelli.com/" target="_blank"&gt;Romanelli Communications&lt;/a&gt; help Stephanie Miner become the first female mayor of Syracuse, and build an online fundraising infrastructure that helped raised tens of thousands of dollars online.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The Ravenstahl &lt;a href="../../../../../../page/ravenstahl-for-mayor"&gt;mayoral campaign website design&lt;/a&gt; was successfully launched in just &lt;a href="../../../../../../page/launching-a-political-campaign-website-in-just-one-week"&gt;one week&amp;rsquo;s time&lt;/a&gt; &amp;ndash; a very rare feat for a website of any kind, especially for such a high profile race.&amp;nbsp; This re-election helps the mayor continue his mission of moving Pittsburgh forward, which was &lt;a href="http://www.nytimes.com/2009/11/02/us/02pittsburgh.html?_r=1&amp;amp;scp=1&amp;amp;sq=Ravenstahl&amp;amp;st=cse"&gt;featured in the NY Times&lt;/a&gt; this week.&lt;/p&gt;
&lt;p&gt;Bonner Gaylord put together a sophisticated web effort that is rarely seen with local campaign websites.&amp;nbsp; He used his site to register and organize hundreds of supporters.&amp;nbsp; Furthermore, the fresh design and feel of the site helped differentiate the political newcomer from other candidates.&lt;/p&gt;
&lt;p&gt;The two levies had the unenviable task of asking voters for money in a tough economy.&amp;nbsp; They were able to both be victorious by building a strong coalition of supporters.&amp;nbsp; Both campaigns successfully used social&amp;nbsp; networks to broaden their message and engage younger voters.&amp;nbsp; Furthermore, the library levy was able to recruit dozens of donors through yard sign and bumper sticker promotions hosted on the campaign site.&lt;/p&gt;
&lt;p&gt;NMC has already began lining up clients for 2010 and will begin revealing its client list, including several statewide campaigns, over the coming weeks as the new campaign sites launch.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Thanks again to our partners and clients on a successful 2009 election and congratulations!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9wXGEvi-yQI:2yD9ZtBC8VQ:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=9wXGEvi-yQI:2yD9ZtBC8VQ:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9wXGEvi-yQI:2yD9ZtBC8VQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=9wXGEvi-yQI:2yD9ZtBC8VQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9wXGEvi-yQI:2yD9ZtBC8VQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=9wXGEvi-yQI:2yD9ZtBC8VQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9wXGEvi-yQI:2yD9ZtBC8VQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=9wXGEvi-yQI:2yD9ZtBC8VQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/9wXGEvi-yQI" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/nmc-goes-5-1-in-off-year-online-campaigns</guid>
		<pubDate>Wed, 04 Nov 2009 11:20:00 EST</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/nmc-goes-5-1-in-off-year-online-campaigns</feedburner:origLink></item>
		<item>
		<title>Verizon Droid: iDon't Understand Microsite Search Engine Optimization</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/JXMClNMWonY/microsite-search-engine-optimization</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/microsite-search-engine-optimization"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/microsite-search-engine-optimization" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;I've been waiting for Verizon to announce a competitive&amp;nbsp;smart phone for a quite some time. With a
&lt;script src="http://www.newmediacampaigns.com/control/media/scripts/tinymce/themes/advanced/langs/en.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="http://www.newmediacampaigns.com/control/media/scripts/tinymce/plugins/filemanager/language/index.php?type=fm&amp;amp;format=tinymce_3_x&amp;amp;group=tinymce&amp;amp;prefix=filemanager_" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="http://www.newmediacampaigns.com/control/media/scripts/tinymce/plugins/imagemanager/language/index.php?type=im&amp;amp;format=tinymce_3_x&amp;amp;group=tinymce&amp;amp;prefix=imagemanager_" type="text/javascript"&gt;&lt;/script&gt;
barely functional, 3 year old Motorola Q you better believe the first time I saw the much talked about "&lt;a href="http://www.youtube.com/watch?v=dPYM-XTqcec&amp;amp;feature=related"&gt;iDon't&lt;/a&gt;" commercial running during a ballgame I  to ran to grab my notebook to check out the campaign's microsite: &lt;a href="http://www.droiddoes.com/"&gt;DroidDoes.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/posts/droid/droid-does.png" alt="DroidDoes.com - A Flash Microsite" width="560" height="336" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.verizon.com/"&gt;Big Red&lt;/a&gt; is flexing its marketing muscle to hype its self-proclaimed iPhone killer on all major mediums: &lt;a href="http://www.youtube.com/watch?v=dPYM-XTqcec&amp;amp;feature=related"&gt;TV&lt;/a&gt;, &lt;a href="http://www.boygeniusreport.com/2009/10/20/motorola-droid-mailers-go-out-scare-children/"&gt;direct mail&lt;/a&gt;, &lt;a href="http://www.google.com/search?q=droid"&gt;Google ads&lt;/a&gt;, you name it. "Everything iDon't Droid does." Like the TV ad, these other pieces drive users to the microsite, too. With this big of an ad spend and a first-class partnership with Google you would think the microsite would be &lt;em&gt;out of this world good.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As far as microsites and marketing landing pages go, DroidDoes.com is &lt;em&gt;out of this world bad&lt;/em&gt;.&lt;/strong&gt; Google should be embarrassed of how their Android Experience phone is being marketed. Not only is DroidDoes.com 100% flash but the flash itself isn't being indexed by Google, the content behind the flash is embarrasingly bad (pictured below), and you can't link to features you've navigated to within the microsite.&lt;/p&gt;
&lt;p&gt;&lt;img title="What Google Sees" src="/files/posts/droid/google-goggles.jpg" alt="Don't you wish you had a robot sidekick?" width="560" height="300" /&gt;&lt;/p&gt;
&lt;p&gt;"Don't you wish you had a sidekick robot that moved at light speed?" &lt;a href="http://74.125.47.132/search?q=cache:_PxWRiFkr5oJ:phones.verizonwireless.com/motorola/droid/+verizon+droid&amp;amp;hl=en&amp;amp;client=firefox-a&amp;amp;gl=us&amp;amp;strip=1"&gt;This is what Google (via Google cache) sees when it visits DroidDoes.com&lt;/a&gt; and its indexing algorithm tries to figure out what the Droid is about. Google doesn't care about the fancy flash techniques or the robovoice saying "droid". &lt;strong&gt;Google cares about content, not flash.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;When Google has access to meagingful content it can read, i.e. plain old "semantic" HTML, Google does a lot of work on your behalf. Check out what you get when you search for 'iPhone':&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/posts/droid/iphone-result.png" alt="iPhone search result" width="550" height="179" /&gt;&lt;/p&gt;
&lt;p&gt;Not only do you get a link to the web site, but Google provides links to the other places on the iPhone website a visitor is likely to want to go and brings them directly there. This is possible because Apple's iPhone content is properly crafted using semantic HTML. Apple also used a meangingful meta description allowing Google to succinctly describe and position the iPhone.&lt;/p&gt;
&lt;p&gt;Contrast this with the official result on a search for 'Droid':&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/posts/droid/droid-result.png" alt="Droid Google Result" width="573" height="74" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Because subpages don't exist, Google can't do a better job linking you to the things a Droid-seeker is looking for: how to buy, features, support, apps, etc.&lt;/strong&gt; The DroidDoes microsite is one gigantic flash file Google can't link to. The DroidDoes.com website team should be even more embarrassed of their meta description which doesn't describe what Droid is, at all. Upon further inspection there is more to the meta description than meets the eye:&lt;/p&gt;
&lt;p style="padding-left: 30px;"&gt;"Get to know Droid a little better. Droid Does the Network. Droid is exclusive to Verizon Wireless, the most reliable network available. Droid Does Android 2.0. Droid contains a new exclusive version of the OS. Droid Does Multitasking. Make a call, answer an email and launch multiple apps simultaneously. Droid Does 10,000+ Apps. Gain power with every app. Droid runs multiple apps simultaneously. Droid Does 5 Megapixels. With a built in flash and 5 megapixels of detail - enhancing resolution, you can capture low light, fleeting moment in detail."&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What DroidDoes.com doesn't know is that Google caps meta descriptions at around 160 characters.&lt;/strong&gt; The DroidDoes microsite's description is 550 characters. No one will ever see the meat of their description because it is too long.&lt;/p&gt;
&lt;h2&gt;Everything DroidDoes.com uShouldn't on a Microsite&lt;/h2&gt;
&lt;p&gt;Most of us don't have multi-million dollar budgets to launch and hype advertising campaigns on the scale Verizon has taken its Droid campaign. For all the money&amp;nbsp; they are throwing at consumers they are losing valuable, targetted inbound traffic because of the many poor technical decisions making up DroidDoes.com. With tighter budgets the rest of us can't afford to make these microsite mistakes. Here are a few high-level lessons to take away:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Do not build 100% flash based microsites&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Especially&lt;/em&gt; if the flash file is not created carefully for Google to index&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Especially&lt;/em&gt; if you can't link directly to locations within the Flash file&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Always&lt;/em&gt; have meaningful HTML content for search engines to index&lt;ol&gt;
&lt;li&gt;Meta description should be less than 160 characters long  and descriptive&lt;/li&gt;
&lt;li&gt;Use language and keywords that people search for to find your microsite (i.e. &lt;em&gt;not&lt;/em&gt; 'always wanted a pocket robot?' when you're selling a phone)&lt;/li&gt;
&lt;li&gt;Content for all images and flash should also be in HTML&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The Droid is going to be Verizon's most compelling smart phone. It's Google's most complete Android phone and first in the Android 2.0 line. Yet the Droid's promotional microsite is underwhelming, clunky, and out-of-touch with the internet of 2009. &lt;strong&gt;If your marketing budget isn't that of a Fortune 500 company you can't afford to make the same &lt;a href="http://newmediacampaigns.com/page/what-is-inbound-marketing"&gt;inbound marketing&lt;/a&gt; mistakes with your microsite as the hotshots at Verizon who decided to promote an internet phone that can't play flash videos &lt;em&gt;using only flash video&lt;/em&gt;.&lt;/strong&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=JXMClNMWonY:wIBLB5AJlOg:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=JXMClNMWonY:wIBLB5AJlOg:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=JXMClNMWonY:wIBLB5AJlOg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=JXMClNMWonY:wIBLB5AJlOg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=JXMClNMWonY:wIBLB5AJlOg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=JXMClNMWonY:wIBLB5AJlOg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=JXMClNMWonY:wIBLB5AJlOg:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=JXMClNMWonY:wIBLB5AJlOg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/JXMClNMWonY" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/microsite-search-engine-optimization</guid>
		<pubDate>Mon, 02 Nov 2009 19:30:00 EST</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/microsite-search-engine-optimization</feedburner:origLink></item>
		<item>
		<title>Easy menus with nmcDropDown</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/P8PNBbYOwvI/easy-menus-with-nmcdropdown</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/easy-menus-with-nmcdropdown"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/easy-menus-with-nmcdropdown" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;&lt;img style="float:right;margin:0 0 1em 1em;" src="../files/images/nmcdropdown/nmcbowd.jpg" alt="nmcDropDown in use on ncbowd.com" /&gt;Since I released my &lt;a href="http://www.newmediacampaigns.com/page/nmcdropdown"&gt;nmcDropDown plugin for jQuery&lt;/a&gt; two weeks ago, several people have been asking for a simple example of how to use it. Althought the plugin takes care of all the behavior automatically, you still need to style and format the menu using CSS. In this post I will demonstrate &lt;a href="http://www.newmediacampaigns.com/files/nmcdropdown_example/"&gt;two simple menu styles&lt;/a&gt; that use nmcDropDown.&lt;/p&gt;
&lt;h2&gt;The bare minimum&lt;/h2&gt;
&lt;p&gt;The examples below have styling and effects to make them look nice, but first I will show you the minimum you need to get your menus running. First off, you need a set of nested lists and link to create the structure of your menus:&lt;/p&gt;
&lt;pre class="brush:html"&gt;&amp;lt;ul id="nav"&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Item One&amp;lt;/a&amp;gt;
    &amp;lt;ul&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
  &amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Item Two&amp;lt;/a&amp;gt;
    &amp;lt;ul&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
  &amp;lt;/li&amp;gt;
  &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Item Three&amp;lt;/a&amp;gt;
    &amp;lt;ul&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
      &amp;lt;li&amp;gt;&amp;lt;a href="#"&amp;gt;Sub-menu Item 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
  &amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Now you need a bit of CSS to put everything in its correct place. This menu isn't going to look nice, but it will give you a starting point from which you can match your site's overall aesthetic.&lt;/p&gt;
&lt;pre class="brush:css"&gt;#nav { float: right; height: 30px; }
#nav li { float: left; position: relative; }
#nav li a { display: block; padding: 5px 10px; line-height: 20px; }
#nav li ul { display: none; position: absolute; top: 30px; left: 0; width: 120px; background: #fff; }
#nav li:hover ul { display: block; }
#nav li ul li { float: none; }
#nav li ul li a { display: inline-block; }
#nav li ul li a { display: block; }
&lt;/pre&gt;
&lt;p&gt;The most important thing here is to set &lt;code&gt;#nav li&lt;/code&gt; to &lt;code&gt;position: relative;&lt;/code&gt; and &lt;code&gt;#nav li ul&lt;/code&gt; to &lt;code&gt;position: absolute;&lt;/code&gt; to the submenus are aligned with their parent item. In the interest of accessibility, we are also hiding the submenus in the CSS (&lt;code&gt;#nav li ul { display: none; }&lt;/code&gt;) and showing them with their parent &lt;code&gt;li&lt;/code&gt; is hovered over (&lt;code&gt;#nav li:hover ul { display: block; }&lt;/code&gt;. That way, if JavaScript is disabled, the menus will still work in every browser but Internet Explorer 6. JavaScript is always required for drop-downs to work in IE6, unfortunately. Speaking of which, did you notice the oddity at the end where we declare the links as &lt;code&gt;display: inline-block&lt;/code&gt; and then re-declare them at &lt;code&gt;display: block&lt;/code&gt;? That is the only concession we need to make to Internet Explorer bugs&amp;mdash;it removes the extra space IE6 inserts between list items, as discovered by &lt;a href="http://www.456bereastreet.com/archive/200610/closing_the_gap_between_list_items_in_ie/"&gt;Roger Johansson&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This CSS will create a horizontal menu with drop-downs, but by changing a few lines, you could just as easily make it a vertical menu with fly-outs.&lt;/p&gt;
&lt;p&gt;Finally, the JavaScript to hook up the nmcDropDown script. Make sure you also paste the &lt;a href="http://www.newmediacampaigns.com/files/media/nmcdropdown/jquery.nmcDropDown.min.js"&gt;nmcDropDown script&lt;/a&gt; itself (and the &lt;a href="http://cherne.net/brian/resources/jquery.hoverIntent.html"&gt;HoverIntent plugin&lt;/a&gt;, if you wish to use it) into the JavaScript file.&lt;/p&gt;
&lt;pre class="brush:js"&gt;$('#nav').nmcDropDown();
&lt;/pre&gt;
&lt;h2&gt;Makin' it Pretty&lt;/h2&gt;
&lt;p&gt;&lt;img style="float:right" src="/files/images/nmcdropdown/menuscreenshot.png" alt="Screenshot of sample page" /&gt;Now that we have a functioning menu, we can start styling it. I have created an &lt;a href="http://www.newmediacampaigns.com/files/nmcdropdown_example/"&gt;sample page&lt;/a&gt; with two different examples using nmcDropDown.&lt;/p&gt;
&lt;p&gt;The first&amp;mdash;in the top-right of the page&amp;mdash;is based on the simplified example above, just with additional CSS to style the menu bar and drop-downs. I also added an additional parameter to the call in JavaScript to make the menus slide down instead of fading in: &lt;code&gt;$('#nav').nmcDropDown({show: {height: 'show', opacity: 'show'}});&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The second example is a little more interesting, as it's actually not a menu at all. In the right-hand sidebar, I am using nmcDropDown to create an informational panel with four heading that, which clicked on, each reveal a bit of text. To do this, I replaced the second level of &lt;code&gt;&amp;lt;ul&amp;gt;&lt;/code&gt;s in my HTML with paragraphs. I then used the following CSS to line arrange everything vertically:&lt;/p&gt;
&lt;pre class="brush:css"&gt;#sidebarNav { padding: 10px 0; background: #ccc; border: 1px solid #bbb; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; }
#sidebarNav li { border-top: 0 solid #ccc; }
#sidebarNav li:hover, #sidebarNav li.open { background: #bbb; }
#sidebarNav li a { display: block; padding: 5px 10px; line-height: 20px; color: #444; font-weight: bold; text-decoration: none; }
#sidebarNav li p { display: none; padding: 5px 10px 10px; color: #444; border-top: 1px dashed #aaa; }
#sidebarNav li:hover p { display: block; }
&lt;/pre&gt;
&lt;p&gt;Finally, in the JavaScript I told nmcDropDown to activate on click rather than hover and to look for my paragraph instead of the unordered-list it usually expects:&lt;/p&gt;
&lt;pre class="brush:js"&gt;$('#sidebarNav').nmcDropDown({
  trigger: 'click',
  submenu_selector: 'p',
  show: {height: 'show'},
  hide: {height: 'hide'}
});
&lt;/pre&gt;
&lt;p&gt;Please look at the &lt;a href="http://www.newmediacampaigns.com/files/nmcdropdown_example/"&gt;sample page&lt;/a&gt; to try these out, and view source to examine the code in more detail. If you find another creative way to use nmcDropDown, please link to it in the comments.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=P8PNBbYOwvI:ZXFu3FRUI-w:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=P8PNBbYOwvI:ZXFu3FRUI-w:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=P8PNBbYOwvI:ZXFu3FRUI-w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=P8PNBbYOwvI:ZXFu3FRUI-w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=P8PNBbYOwvI:ZXFu3FRUI-w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=P8PNBbYOwvI:ZXFu3FRUI-w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=P8PNBbYOwvI:ZXFu3FRUI-w:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=P8PNBbYOwvI:ZXFu3FRUI-w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/P8PNBbYOwvI" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/easy-menus-with-nmcdropdown</guid>
		<pubDate>Mon, 02 Nov 2009 10:55:00 EST</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/easy-menus-with-nmcdropdown</feedburner:origLink></item>
		<item>
		<title>Judge an Ad Agency's Website On Content Not Creative</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/MNZXeNROOio/judge-an-ad-agencys-website-on-content-not-creative</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/judge-an-ad-agencys-website-on-content-not-creative"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/judge-an-ad-agencys-website-on-content-not-creative" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;&lt;img src="/files/ad_agency_websites_content.jpg" alt="ad agency website content creation" width="550" height="301" /&gt;&lt;/p&gt;
&lt;p&gt;As advertising has moved further online and into social media over the past few years, it&amp;rsquo;s no surprise that clients have expected their agencies to be able to help them navigate and leverage this unfamiliar territory.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;However, while virtually every agency claims to have the capabilities to help their clients in this space, few top agencies actually demonstrate that proficiency on their own site.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;When judging agencies, you should judge the site on its content rather than its creativity. &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just about everyone I know wants their website to serve as a source of leads and to bring in new business.&amp;nbsp; With that in mind, why would you hire a firm that has not even shown the ability to do that with their own web presence?&lt;/p&gt;
&lt;p&gt;As a &lt;a href="../../../../../../page/agency-partnership-program"&gt;technology partner for advertising agencies&lt;/a&gt;, we have worked with many agencies to build their own sites.&amp;nbsp; On each agency site, we place a premium on content and using the site as a lead generation tool.&amp;nbsp; However, looking through top agency sites, it&amp;rsquo;s impossible not to notice that most agencies ignore the very advice that they give to clients.&lt;/p&gt;
&lt;p&gt;This post looks at three very important content-oriented criteria on which to judge ad agency websites: blogging, optimization, and social media.&lt;/p&gt;
&lt;h2&gt;The Importance of An Ad Agency Blog&lt;/h2&gt;
&lt;p&gt;In today&amp;rsquo;s culture, no agency should have a website without a blog.&amp;nbsp; It&amp;rsquo;s a proven &lt;a href="http://www.newmediacampaigns.com/page/what-is-inbound-marketing"&gt;inbound marketing&lt;/a&gt; and lead generation tool, an opportunity to promote work and news, and an educational resource for clients and prospects.&amp;nbsp; Not to mention, they&amp;rsquo;re probably going to try and sell you one, so how can you trust them if they don&amp;rsquo;t eat their own dogfood?&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Not only is it important to check that they have a link to a blog, but it&amp;rsquo;s also essential that you read the content and hold the firm to it.&amp;nbsp; Is it thoughtful, helpful, and a priority?&amp;nbsp; It&amp;rsquo;s important to ensure the firm is actually using their blog to engage, educate, and attract an audience rather than just somewhere that they post company news.&lt;/p&gt;
&lt;p&gt;A great example of an ad agency blog is the &lt;a href="http://www.draftfcbblog.com/default.aspx" target="_blank"&gt;DraftFCB blog&lt;/a&gt;. &amp;nbsp;First, the firm demonstrates a rather rigorous posting schedule by adding new content nearly every day.&amp;nbsp; Furthermore, it instantly caught my attention that management is responsible for much of the content.&amp;nbsp; It&amp;rsquo;s not just a group of interns who had the summer job of writing posts.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;My only complaint about the DraftFCB blog is that they host it on a separate domain from their main site, which is a definite no-no when &lt;a href="http://www.newmediacampaigns.com/page/blogging-for-business-part-1-preparing-to-start-a-business-blog"&gt;setting up a blog for your business&lt;/a&gt;.&amp;nbsp; Overall though, the top to bottom commitment and great content demonstrate that this agency really believes in blogging and its benefits for the firm and its clients.&lt;/p&gt;
&lt;h2&gt;Is the Content Optimized?&lt;/h2&gt;
&lt;p&gt;It&amp;rsquo;s true that major agencies don&amp;rsquo;t need to be focused on optimizing their site and content to an obscene level, as local targeting isn&amp;rsquo;t too important to them if they already have a national reputation.&amp;nbsp; However, their site should still demonstrate the fact that they understand the basic tenets of optimization.&lt;/p&gt;
&lt;p&gt;Perhaps the most common mistake among agency websites is that the content is totally invisible to search engines.&amp;nbsp; If the site is built in Flash, then it is almost certain that its content is invisible to search engines.&lt;/p&gt;
&lt;p&gt;If their site is readable by search engines, you should browse through the rest of the site and ensure that they have a basic understanding of SEO.&amp;nbsp; Check to make sure they have clean URLs, place relevant title tags on pages, use web-safe fonts and not just images, and show an understanding of header stylings.&lt;/p&gt;
&lt;p&gt;Again, most ad agencies aren&amp;rsquo;t going to take their SEO efforts to an extreme, and that&amp;rsquo;s completely fine.&amp;nbsp; However, they should use their site to demonstrate that they understand how to make a content driven website in a way that&amp;rsquo;s easy for Google to index.&lt;/p&gt;
&lt;h2&gt;Social Media Usage&lt;/h2&gt;
&lt;p&gt;One surprisingly lacking element of top agency sites were their integration of social media into the site.&amp;nbsp; Very few allowed you to easily share their news, blog posts, and other content across media such as Twitter, Facebook, Delicous, and others.&lt;/p&gt;
&lt;p&gt;Furthermore, most agencies don&amp;rsquo;t have prominent links out to their social media presences.&amp;nbsp; If they don&amp;rsquo;t make an effort to integrate social media into their site, that should be concerning to you.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;However, that still shouldn&amp;rsquo;t stop you from actually making an effort to go scope out their presences on social networks.&amp;nbsp; I would recommend looking for the presences of the general agency, the managing partners, and the account reps for your brand.&lt;/p&gt;
&lt;p&gt;Look at how they use the medium. &amp;nbsp;Are they engaging others and making a genuine effort to connect?&amp;nbsp; Do they publish useful content?&amp;nbsp; Have they been in the medium for a meaningful amount of time?&amp;nbsp; These are all important things to analyze.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve seen agency execs set up a Twitter account literally the day before a presentation, because they were pitching Twitter in the project.&amp;nbsp; How can you trust them to advise you on using a medium if they hardly do it themselves?&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;An ad agencies site should be much more than a TV ad online &amp;ndash; they should prove that they understand the medium and the responsibilities that come with it.&amp;nbsp; If an agency is pitching you an overall online strategy, it&amp;rsquo;s essential that you take a hard look at theirs, too.&lt;/p&gt;
&lt;p&gt;Don&amp;rsquo;t be afraid to ask the hard questions and be willing to put some time into the research.&amp;nbsp; What has been your experience with agencies that talk the talk but don&amp;rsquo;t necessarily walk the walk?&amp;nbsp; Are there other things to look out for on agency sites?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=MNZXeNROOio:X1rEqyd9HAQ:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=MNZXeNROOio:X1rEqyd9HAQ:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=MNZXeNROOio:X1rEqyd9HAQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=MNZXeNROOio:X1rEqyd9HAQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=MNZXeNROOio:X1rEqyd9HAQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=MNZXeNROOio:X1rEqyd9HAQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=MNZXeNROOio:X1rEqyd9HAQ:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=MNZXeNROOio:X1rEqyd9HAQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/MNZXeNROOio" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/judge-an-ad-agencys-website-on-content-not-creative</guid>
		<pubDate>Thu, 29 Oct 2009 14:40:00 EDT</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/judge-an-ad-agencys-website-on-content-not-creative</feedburner:origLink></item>
		<item>
		<title>How to create a blog with the Recess PHP Framework, Part 3</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/D9JDRRdD5PU/how-to-create-a-blog-with-recess-php-framework-part3</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/how-to-create-a-blog-with-recess-php-framework-part3"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/how-to-create-a-blog-with-recess-php-framework-part3" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;This is the third article in my &lt;a href="http://www.recessframework.org"&gt;Recess Framework&lt;/a&gt; blog tutorial that will demonstrate how to create model relationships with the Recess PHP Framework. Previously in this tutorial, we learned &lt;a href="http://www.newmediacampaigns.com/page/how-to-create-a-blog-with-recess-php-framework-part1"&gt;how to list and display individual blog posts&lt;/a&gt;, and more recently, &lt;a href="http://www.newmediacampaigns.com/page/how-to-create-a-blog-with-recess-php-framework-part2"&gt;how to create, update and delete blog posts using Recess&amp;rsquo; &lt;span class="caps"&gt;ORM&lt;/span&gt; (object relational mapper)&lt;/a&gt;. This tutorial assumes you have completed the previous tutorials. If you have not completed the previous tutorials, you should &lt;a href="http://www.newmediacampaigns.com/files/posts/recess-blog-tutorial2/blog.zip"&gt;download the most current version of our blog application&lt;/a&gt; before reading further.&lt;/p&gt;
&lt;p&gt;As I explained in my previous tutorial, &lt;strong&gt;[BLOG_ROOT]&lt;/strong&gt; references the filesystem directory where you have installed the Recess &lt;span class="caps"&gt;PHP&lt;/span&gt; Framework; on my machine, &lt;strong&gt;[BLOG_ROOT]&lt;/strong&gt; is &lt;code&gt;~/Sites/recess/&lt;/code&gt;. &lt;strong&gt;[BLOG_URL]&lt;/strong&gt; references the &lt;span class="caps"&gt;URL&lt;/span&gt; with which you can access the blog application in a web browser; on my machine &lt;strong&gt;[BLOG_URL]&lt;/strong&gt; is &lt;code&gt;http://localhost/~joshlockhart/recess/&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;Authors&lt;/h2&gt;
&lt;p&gt;We will create a one-to-many model relationship between authors and blog posts. One author writes many blog posts, and each blog post belongs to only one author. If we were using a user authentication system, we could determine the author based on the logged-in user writing the post. We will explore user authentication with Recess later in this tutorial series. For now, we will display a combo-box on the Write Post and Edit Post forms that will display a list of available authors. Let&amp;rsquo;s get started. We first need to create the controller, models, and views for authors. Since this process was discussed in detail in the previous two two tutorials, I will move quickly through this process assuming you are familiar with these steps.&lt;/p&gt;
&lt;h3&gt;Creating the Author database table&lt;/h3&gt;
&lt;p&gt;Create the &lt;em&gt;authors&lt;/em&gt; table in your SQLite database with the following &lt;span class="caps"&gt;SQL&lt;/span&gt; commands:&lt;/p&gt;
&lt;pre class="brush:sql"&gt;CREATE TABLE `authors` (
    `id` INTEGER PRIMARY KEY,
    `name_first` TEXT,
    `name_last` TEXT
);
INSERT INTO `authors` VALUES (1,'John','Doe');
INSERT INTO `authors` VALUES (2,'Jane','Doe');
&lt;/pre&gt;
&lt;p&gt;Next, update the &lt;em&gt;posts&lt;/em&gt; database table and add an &amp;ldquo;author_id&amp;rdquo; foreign key:&lt;/p&gt;
&lt;pre class="brush:sql"&gt;ALTER TABLE `posts` ADD `author_id` INTEGER;    
&lt;/pre&gt;
&lt;p&gt;Last, let&amp;rsquo;s make sure all existing posts are assigned to the first author.&lt;/p&gt;
&lt;pre class="brush:sql"&gt;UPDATE `posts` SET `author_id` = 1;
&lt;/pre&gt;
&lt;h3&gt;Creating the Author model&lt;/h3&gt;
&lt;p&gt;Next, create the Author model at &lt;code&gt;[BLOG_ROOT]apps/blog/models/Author.class.php&lt;/code&gt; and insert the following code:&lt;/p&gt;
&lt;pre class="brush:php"&gt;&amp;lt;?php
/** 
 * !Table authors
 */
class Author extends Model {}
?&amp;gt;
&lt;/pre&gt;
&lt;h3&gt;Creating the Author controller&lt;/h3&gt;
&lt;p&gt;The Author controller is responsible for listing, creating, updating, and deleting blog authors. Create &lt;code&gt;[BLOG_ROOT]apps/blog/controllers/AuthorsController.class.php&lt;/code&gt; and insert the following code:&lt;/p&gt;
&lt;pre class="brush:php"&gt;&amp;lt;?php
Library::import('recess.framework.controllers.Controller');
Library::import('blog.models.Author');

/**
 * !RespondsWith Layouts
 * !Prefix Routes: /, Views: authors/
 */
class AuthorsController extends Controller {

    /** !Route GET, authors */
    public function listAuthors(){
        $author = new Author();
        $this-&amp;gt;authors = $author-&amp;gt;all();
    }

    /** !Route GET, authors/$id */
    public function show($id){
        $author = new Author($id);
        $this-&amp;gt;author = $author-&amp;gt;find()-&amp;gt;first();
    }

    /** !Route GET, authors/new */
    public function newAuthor(){
        $this-&amp;gt;author = new Author();
    }

    /** !Route POST, authors */
    public function create(){
        $author = new Author($this-&amp;gt;request-&amp;gt;post['author']);

        if( $author-&amp;gt;save() ){
            return $this-&amp;gt;redirect($this-&amp;gt;urlTo('listAuthors'));
        } else {
            return $this-&amp;gt;ok('newAuthor');
        }
    }

    /** !Route GET, authors/$id/edit */
    public function edit($id){
        $author = new Author($id);

        if( $author-&amp;gt;exists() ){
            $this-&amp;gt;author = $author-&amp;gt;find()-&amp;gt;first();
        } else {
            return $this-&amp;gt;redirect($this-&amp;gt;urlTo('listAuthors'));
        }
    }

    /** !Route PUT, authors/$id */
    public function update($id){
        $author = new Author($id);

        if( $author-&amp;gt;exists() ){
            $this-&amp;gt;author = $author-&amp;gt;find()-&amp;gt;first()-&amp;gt;copy($this-&amp;gt;request-&amp;gt;put['author']);
            if( $this-&amp;gt;author-&amp;gt;save() ){
                //set a success message if necessary
            }
            return $this-&amp;gt;redirect($this-&amp;gt;urlTo('edit',$id));
        } else {
            return $this-&amp;gt;redirect($this-&amp;gt;urlTo('listAuthors'));
        }
    }

    /**
     * !Route DELETE, authors/$id
     * !Route GET, authors/$id/delete
     */
    public function delete($id){
        $author = new Author($id);

        if( $author-&amp;gt;exists() ) $author-&amp;gt;delete();
        return $this-&amp;gt;redirect($this-&amp;gt;urlTo('listAuthors'));
    }

}

?&amp;gt;
&lt;/pre&gt;
&lt;h3&gt;Creating the Author view templates&lt;/h3&gt;
&lt;p&gt;Now, let&amp;rsquo;s quickly create the templates for the Author &lt;span class="caps"&gt;CRUD&lt;/span&gt; actions. Create &lt;code&gt;[BLOG_ROOT]apps/blog/views/authors/listAuthors.html.php&lt;/code&gt; and insert the following markup:&lt;/p&gt;
&lt;pre class="brush:html"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Authors&amp;lt;/h1&amp;gt;
        &amp;lt;ul&amp;gt;
            &amp;lt;?php foreach( $authors as $author ): ?&amp;gt;
            &amp;lt;li&amp;gt;
                &amp;lt;h2&amp;gt;&amp;lt;a href="&amp;lt;?php echo Url::action('AuthorsController::show',$author-&amp;gt;id); ?&amp;gt;"&amp;gt;&amp;lt;?php echo $author-&amp;gt;name_first . ' ' . $author-&amp;gt;name_last; ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;a href="&amp;lt;?php echo Url::action('AuthorsController::edit',$author-&amp;gt;id); ?&amp;gt;"&amp;gt;Edit&amp;lt;/a&amp;gt;
                    &amp;lt;a href="&amp;lt;?php echo Url::action('AuthorsController::delete',$author-&amp;gt;id); ?&amp;gt;" onclick="return confirm('Are you sure?');"&amp;gt;Delete&amp;lt;/a&amp;gt;
                &amp;lt;/p&amp;gt;
            &amp;lt;/li&amp;gt;
            &amp;lt;?php endforeach; ?&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;You can view the author list at &lt;code&gt;[BLOG_URL]index.php/blog/authors/&lt;/code&gt;. Next, create &lt;code&gt;[BLOG_ROOT]apps/blog/views/authors/show.html.php&lt;/code&gt; and insert the following markup:&lt;/p&gt;
&lt;pre class="brush:html"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;&amp;lt;?php echo $author-&amp;gt;name_first . ' ' . $author-&amp;gt;name_last; ?&amp;gt;&amp;lt;/h1&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;    
&lt;/pre&gt;
&lt;p&gt;You can view each author&amp;rsquo;s page at &lt;code&gt;[BLOG_URL]index.php/blog/authors/1&lt;/code&gt; (where &amp;lsquo;1&amp;rsquo; is the ID of a given author). Next, create &lt;code&gt;[BLOG_ROOT]apps/blog/views/authors/newAuthor.html.php&lt;/code&gt; and insert the following markup:&lt;/p&gt;
&lt;pre class="brush:html"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Add Author&amp;lt;/h1&amp;gt;
        &amp;lt;form action="&amp;lt;?php echo Url::action('AuthorsController::create'); ?&amp;gt;" method="POST"&amp;gt;
            &amp;lt;fieldset&amp;gt;
                &amp;lt;label for="firstName"&amp;gt;First Name&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="text" id="firstName" name="author[name_first]" value=""/&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;label for="lastName"&amp;gt;Last Name&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="text" id="lastName" name="author[name_last]" value=""/&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="submit" value="Add Author"/&amp;gt;
            &amp;lt;/fieldset&amp;gt;
        &amp;lt;/form&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;    
&lt;/pre&gt;
&lt;p&gt;You can view the Add Author form at &lt;code&gt;[BLOG_URL]index.php/blog/authors/new&lt;/code&gt;. Next, create &lt;code&gt;[BLOG_ROOT]apps/blog/views/authors/edit.html.php&lt;/code&gt; and insert the following markup:&lt;/p&gt;
&lt;pre class="brush:html"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Edit Author&amp;lt;/h1&amp;gt;
        &amp;lt;form action="&amp;lt;?php echo Url::action('AuthorsController::update',$author-&amp;gt;id); ?&amp;gt;" method="POST"&amp;gt;
            &amp;lt;fieldset&amp;gt;
                &amp;lt;label for="firstName"&amp;gt;First Name&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="text" id="firstName" name="author[name_first]" value="&amp;lt;?php echo $author-&amp;gt;name_first; ?&amp;gt;"/&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;label for="lastName"&amp;gt;Last Name&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="text" id="lastName" name="author[name_last]" value="&amp;lt;?php echo $author-&amp;gt;name_last; ?&amp;gt;"/&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="hidden" name="_METHOD" value="PUT"/&amp;gt;
                &amp;lt;input type="submit" value="Update Author"/&amp;gt;
            &amp;lt;/fieldset&amp;gt;
        &amp;lt;/form&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;    
&lt;/pre&gt;
&lt;p&gt;You can view the Edit Author form at &lt;code&gt;[BLOG_URL]index.php/blog/authors/1/edit&lt;/code&gt; (where &amp;lsquo;1&amp;rsquo; is the ID of a given author). Next, create blank template files at &lt;code&gt;[BLOG_ROOT]apps/blog/views/authors/create.html.php&lt;/code&gt; and &lt;code&gt;[BLOG_ROOT]apps/blog/views/authors/update.html.php&lt;/code&gt; and &lt;code&gt;[BLOG_ROOT]apps/blog/views/authors/delete.html.php&lt;/code&gt;. Although these templates are not necessary for our application, Recess requires a template for each public controller action to avoid throwing errors. The creators of Recess will remedy this behavior in a future framework update.&lt;/p&gt;
&lt;p&gt;We are now able to list, view, add, update, and delete blog authors. Now let&amp;rsquo;s relate authors to posts.&lt;/p&gt;
&lt;h2&gt;Associating Authors to Posts&lt;/h2&gt;
&lt;h3&gt;Updating the models&lt;/h3&gt;
&lt;p&gt;We need to tell Recess that each post belongs to one author. Open &lt;code&gt;[BLOG_ROOT]apps/blog/models/Author.class.php&lt;/code&gt; and update it&amp;rsquo;s contents to look like this:&lt;/p&gt;
&lt;pre class="brush:php"&gt;&amp;lt;?php
/** 
 * !Table authors
 * !HasMany posts, Key: author_id
 */
class Author extends Model {}
?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;We use a Recess &lt;em&gt;declarative annotation&lt;/em&gt; to describe our Author model. In this example, we say that an Author &lt;em&gt;!HasMany&lt;/em&gt; posts. We also specify the foreign key column used by the related model if the foreign key column name is different from convention; by default, Recess expects a foreign key column name of &amp;ldquo;authorId&amp;rdquo;. I like to suffix my foreign keys with "_id", so I needed to clarify this in the &lt;em&gt;!HasMany&lt;/em&gt; annotation. Let&amp;rsquo;s now update &lt;code&gt;[BLOG_ROOT]apps/blog/models/Post.class.php&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="brush:php"&gt;&amp;lt;?php
/**
 * !Table posts
 * !BelongsTo author, Key: author_id
 */
class Post extends Model {}
?&amp;gt;
&lt;/pre&gt;
&lt;p&gt;We use a Recess declarative annotation to describe our Post model; a Post &lt;em&gt;!BelongsTo&lt;/em&gt; one author. We also specify the foreign key column used by this relationship. The annotation on the Post model assumes the &lt;em&gt;posts&lt;/em&gt; database table has an &amp;ldquo;author_id&amp;rdquo; foreign key column that references an existing Author database record. We added this foreign key earlier in this tutorial.&lt;/p&gt;
&lt;h3&gt;Updating the views&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s now update our Write Post and Edit Post templates so that we may select an author when we write or edit a post. Before we edit the templates, we need to make sure we pass an array of available authors from the &lt;code&gt;PostsController::write()&lt;/code&gt; and &lt;code&gt;PostsController::edit()&lt;/code&gt; actions. Open &lt;code&gt;[BLOG_ROOT]apps/blog/controllers/PostsController.class.php&lt;/code&gt;. Edit the &lt;code&gt;PostsController::write()&lt;/code&gt; action to look like this:&lt;/p&gt;
&lt;pre class="brush:php"&gt;/** !Route GET, posts/write */
public function write(){
    $this-&amp;gt;post = new Post();
    $author = new Author();
    $this-&amp;gt;authors = $author-&amp;gt;all();
}
&lt;/pre&gt;
&lt;p&gt;And update the &lt;code&gt;PostsController::edit()&lt;/code&gt; action to look like this:&lt;/p&gt;
&lt;pre class="brush:php"&gt;/** !Route GET, posts/$id/edit */
public function edit($id){
    $post = new Post($id);

    if( $post-&amp;gt;exists() ){
        $this-&amp;gt;post = $post-&amp;gt;find()-&amp;gt;first();
        $author = new Author();
        $this-&amp;gt;authors = $author-&amp;gt;all();
    } else {
        return $this-&amp;gt;redirect($this-&amp;gt;urlTo('listPosts'));
    }
}
&lt;/pre&gt;
&lt;p&gt;Since we reference the Author model in the Posts controller, we need to import the Author model into our controller. Add this line to the existing import statements at the top of &lt;code&gt;PostsController.class.php&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="brush:php"&gt;Library::import('blog.models.Author');    
&lt;/pre&gt;
&lt;p&gt;Now we can update our templates. Open &lt;code&gt;[BLOG_ROOT]apps/blog/views/home/write.html.php&lt;/code&gt; and update it to look like this. I have highlighted the changes.&lt;/p&gt;
&lt;pre class="brush:html;highlight:[10,11,12,13,14,15]"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Write Post&amp;lt;/h1&amp;gt;
        &amp;lt;form action="&amp;lt;?php echo Url::action('PostsController::create'); ?&amp;gt;" method="POST"&amp;gt;
            &amp;lt;fieldset&amp;gt;
                &amp;lt;label for="title"&amp;gt;Title&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="text" id="title" name="post[title]" value=""/&amp;gt;&amp;lt;br/&amp;gt;    
                &amp;lt;label for="content"&amp;gt;Content&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;textarea id="content" name="post[content]" rows="20" cols="50"&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;label for="author"&amp;gt;Select an author:&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;select id="author" name="post[author_id]"&amp;gt;
                    &amp;lt;?php foreach( $authors as $author ): ?&amp;gt;
                    &amp;lt;option value="&amp;lt;?php echo $author-&amp;gt;id; ?&amp;gt;"&amp;gt;&amp;lt;?php echo $author-&amp;gt;name_first .' '.$author-&amp;gt;name_last; ?&amp;gt;&amp;lt;/option&amp;gt;
                    &amp;lt;?php endforeach; ?&amp;gt;
                &amp;lt;/select&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="submit" value="Create Post"/&amp;gt;
            &amp;lt;/fieldset&amp;gt;
        &amp;lt;/form&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Next, open &lt;code&gt;[BLOG_ROOT]apps/blog/views/home/edit.html.php&lt;/code&gt; and update the markup so it looks like this. I have highlighted the changes.&lt;/p&gt;
&lt;pre class="brush:html;highlight:[10,11,12,13,14,15]"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Update Post&amp;lt;/h1&amp;gt;
        &amp;lt;form action="&amp;lt;?php echo Url::action('PostsController::update',$post-&amp;gt;id); ?&amp;gt;" method="POST"&amp;gt;
            &amp;lt;fieldset&amp;gt;
                &amp;lt;label for="title"&amp;gt;Title&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="text" id="title" name="post[title]" value="&amp;lt;?php echo $post-&amp;gt;title; ?&amp;gt;"/&amp;gt;&amp;lt;br/&amp;gt;    
                &amp;lt;label for="content"&amp;gt;Content&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;textarea id="content" name="post[content]" rows="20" cols="50"&amp;gt;&amp;lt;?php echo $post-&amp;gt;content; ?&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;label for="author"&amp;gt;Select an author:&amp;lt;/label&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;select id="author" name="post[author_id]"&amp;gt;
                    &amp;lt;?php foreach( $authors as $author ): ?&amp;gt;
                    &amp;lt;option value="&amp;lt;?php echo $author-&amp;gt;id; ?&amp;gt;" &amp;lt;?php if($author-&amp;gt;id == $post-&amp;gt;author_id): ?&amp;gt;selected="selected"&amp;lt;?php endif; ?&amp;gt;&amp;gt;&amp;lt;?php echo $author-&amp;gt;name_first .' '.$author-&amp;gt;name_last; ?&amp;gt;&amp;lt;/option&amp;gt;
                    &amp;lt;?php endforeach; ?&amp;gt;
                &amp;lt;/select&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;
                &amp;lt;input type="hidden" name="_METHOD" value="PUT"/&amp;gt;
                &amp;lt;input type="submit" value="Update Post"/&amp;gt;
            &amp;lt;/fieldset&amp;gt;
        &amp;lt;/form&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;When we edit an existing post, the correct author will be pre-selected.&lt;/p&gt;
&lt;h2&gt;Relationships in Action&lt;/h2&gt;
&lt;p&gt;We have successfully related Authors to Posts. Let&amp;rsquo;s see an example of this relationship in action by displaying all posts written by an author on the Show Author page. Open &lt;code&gt;[BLOG_ROOT]apps/blog/views/authors/show.html.php&lt;/code&gt; and update its markup like this:&lt;/p&gt;
&lt;pre class="brush:html"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;&amp;lt;?php echo $author-&amp;gt;name_first . ' ' . $author-&amp;gt;name_last; ?&amp;gt;&amp;lt;/h1&amp;gt;
        &amp;lt;ul&amp;gt;
            &amp;lt;?php foreach( $author-&amp;gt;posts() as $post ): ?&amp;gt;
            &amp;lt;li&amp;gt;&amp;lt;a href="&amp;lt;?php echo Url::action('PostsController::show',$post-&amp;gt;id); ?&amp;gt;"&amp;gt;&amp;lt;?php echo $post-&amp;gt;title; ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
            &amp;lt;?php endforeach; ?&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Last, let&amp;rsquo;s place a link to the author&amp;rsquo;s page beneath each blog post&amp;rsquo;s title. Open &lt;code&gt;[BLOG_ROOT]apps/blog/views/home/listPosts.html.php&lt;/code&gt; and update the markup as shown below. The changes are highlighted.&lt;/p&gt;
&lt;pre class="brush:html;highlight:[8]"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;Posts&amp;lt;/h1&amp;gt;
        &amp;lt;ul&amp;gt;
            &amp;lt;?php foreach( $posts as $post ): ?&amp;gt;
            &amp;lt;li&amp;gt;
                &amp;lt;h2&amp;gt;&amp;lt;a href="&amp;lt;?php echo Url::action('PostsController::show',$post-&amp;gt;id); ?&amp;gt;"&amp;gt;&amp;lt;?php echo $post-&amp;gt;title; ?&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;
                &amp;lt;p&amp;gt;By &amp;lt;a href="&amp;lt;?php echo Url::action('AuthorsController::show',$post-&amp;gt;author()-&amp;gt;id); ?&amp;gt;"&amp;gt;&amp;lt;?php echo $post-&amp;gt;author()-&amp;gt;name_first . ' ' . $post-&amp;gt;author()-&amp;gt;name_last; ?&amp;gt;&amp;lt;/a&amp;gt; | Posted on &amp;lt;?php echo strftime("%B %e, %Y", $post-&amp;gt;created); ?&amp;gt;&amp;lt;/p&amp;gt;
                &amp;lt;p&amp;gt;&amp;lt;?php echo $post-&amp;gt;content; ?&amp;gt;&amp;lt;/p&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;a href="&amp;lt;?php echo Url::action('PostsController::edit',$post-&amp;gt;id); ?&amp;gt;"&amp;gt;Edit&amp;lt;/a&amp;gt;
                    &amp;lt;a href="&amp;lt;?php echo Url::action('PostsController::delete',$post-&amp;gt;id); ?&amp;gt;" onclick="return confirm('Are you sure?');"&amp;gt;Delete&amp;lt;/a&amp;gt;
                &amp;lt;/p&amp;gt;
            &amp;lt;/li&amp;gt;
            &amp;lt;?php endforeach; ?&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Also open &lt;code&gt;[BLOG_ROOT]apps/blog/views/home/show.html.php&lt;/code&gt; and update the markup as shown below. The changes are highlighted:&lt;/p&gt;
&lt;pre class="brush:html;highlight:[4]"&gt;&amp;lt;html&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;h1&amp;gt;&amp;lt;?php echo $post-&amp;gt;title; ?&amp;gt;&amp;lt;/h1&amp;gt;
        &amp;lt;p&amp;gt;By &amp;lt;a href="&amp;lt;?php echo Url::action('AuthorsController::show',$post-&amp;gt;author()-&amp;gt;id); ?&amp;gt;"&amp;gt;&amp;lt;?php echo $post-&amp;gt;author()-&amp;gt;name_first . ' ' . $post-&amp;gt;author()-&amp;gt;name_last; ?&amp;gt;&amp;lt;/a&amp;gt; | Posted on &amp;lt;?php echo strftime("%B %e, %Y", $post-&amp;gt;created); ?&amp;gt;&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;?php echo $post-&amp;gt;content; ?&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;This tutorial demonstrated how to relate the Author and Post models using &lt;em&gt;declarative annotations&lt;/em&gt;. We also learned how to declare a custom foreign key on model relationships if the foreign key column name does not adhere to the Recess Framework naming convention. And finally, we learned how to take advantage of model relationships with the Recess Framework &lt;span class="caps"&gt;ORM&lt;/span&gt; in our templates. The next tutorial in this series will explore RESTful routing in the Recess Framework. Stay tuned!&lt;/p&gt;
&lt;h2&gt;Download the final project&lt;/h2&gt;
&lt;p&gt;This file contains the Recess Framework and all controllers, models, and views for this tutorial.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.newmediacampaigns.com/files/posts/recess-blog-tutorial3/recess.zip"&gt;Download&lt;/a&gt; (ZIP, 356 KB)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=D9JDRRdD5PU:qqPlXZNcIzE:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=D9JDRRdD5PU:qqPlXZNcIzE:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=D9JDRRdD5PU:qqPlXZNcIzE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=D9JDRRdD5PU:qqPlXZNcIzE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=D9JDRRdD5PU:qqPlXZNcIzE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=D9JDRRdD5PU:qqPlXZNcIzE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=D9JDRRdD5PU:qqPlXZNcIzE:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=D9JDRRdD5PU:qqPlXZNcIzE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/D9JDRRdD5PU" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/how-to-create-a-blog-with-recess-php-framework-part3</guid>
		<pubDate>Wed, 28 Oct 2009 11:55:00 EDT</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/how-to-create-a-blog-with-recess-php-framework-part3</feedburner:origLink></item>
		<item>
		<title>AutoSprites - A jQuery Menu Plugin</title>
		<link>http://feedproxy.google.com/~r/NewMediaCampaigns/~3/xL_riXj6dXg/autosprites-jquery-menu-plugin</link>
		<description>&lt;a style="float: left; margin: 0 18px 18px 0;" href="http://api.tweetmeme.com/share?url=http://www.newmediacampaigns.com/page/autosprites-jquery-menu-plugin"&gt;&lt;img src="http://api.tweetmeme.com/imagebutton.gif?url=http://www.newmediacampaigns.com/page/autosprites-jquery-menu-plugin" height="61" width="51" /&gt;&lt;/a&gt;
			&lt;p&gt;&lt;img src="/files/posts/autosprites/menu-sprites.jpg" alt="AutoSprites jQuery Menu Plugin" width="560" height="67" /&gt;&lt;/p&gt;
&lt;p style="text-align: center;"&gt;&lt;a href="/files/posts/autosprites/autosprites.zip"&gt;Download the Files (Zip)&lt;/a&gt; | &lt;a href="/files/posts/autosprites/index.html"&gt;View a Demo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We have written and released a &lt;a href="/page/nmcdropdown"&gt;jquery dropdown menu plugin&lt;/a&gt; as well as a &lt;a href="/page/css-sprites2-refactored-building-an-unobtrusive-jquery-plugin"&gt;CSS Sprites2 Plugin&lt;/a&gt; -- this post is along the same lines. &amp;nbsp;Its purpose is to allow you to build an image-based menu with animated hover states as easily as possible and by using the most concise descriptions possible. &amp;nbsp;To see the results on both a horizontal and vertical menu, check out the demo.&lt;/p&gt;
&lt;h2&gt;Setting up the jQuery Menu Plugin&lt;/h2&gt;
&lt;p&gt;The first component when doing something with sprites is a combined image that contains all menu states. &amp;nbsp;For the menu above, this is the image below was used. &amp;nbsp;(This was designed by &lt;a href="http://www.liaisondesigngroup.com"&gt;Liaison Design Group&lt;/a&gt;, one of our Partners)&lt;/p&gt;
&lt;p&gt;&lt;img src="/files/posts/autosprites/horiz_sprites_post.jpg" alt="sprites" width="560" height="131" /&gt;&lt;/p&gt;
&lt;p&gt;The image contains both the normal state and the hover state. &amp;nbsp;The value to doing things this way is that it allows your site to load faster. &amp;nbsp;Rather than downloading an image for each nav item and its hoverstate, only a single image needs to be downloaded. &amp;nbsp;This minimizes the overhead of many http requests.&lt;/p&gt;
&lt;p&gt;The next thing to do, is set up the HTML for the nav bar:&lt;/p&gt;
&lt;pre class="brush:html"&gt;&amp;lt;ul id="hnav"&amp;gt; 
	&amp;lt;li id="hnavhome"&amp;gt;&amp;lt;a href="#"&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; 
	&amp;lt;li id="hnavlocal"&amp;gt;&amp;lt;a href="#"&amp;gt;Local Industry&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; 
	&amp;lt;li id="hnavhigher"&amp;gt;&amp;lt;a href="#"&amp;gt;Higher Education&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; 
	&amp;lt;li id="hnavcomm"&amp;gt;&amp;lt;a href="#"&amp;gt;Our Community&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; 
	&amp;lt;li id="hnavnews"&amp;gt;&amp;lt;a href="#"&amp;gt;News&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt; 
&amp;lt;/ul&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Then we need to set up the CSS. There are a couple of things to note here. We are applying the background image to the containing element so that we don't need to respecify background positioning. This also makes the menu usable if javascript is disabled. Each element needs to have its size defined specifically as well.&lt;/p&gt;
&lt;pre class="brush:css"&gt;#hnav { position: absolute; top: 0; left: 0; width: 615px; height: 72px; background: url('horiz_sprites.gif') no-repeat; }
#hnav li { position: absolute; left: 0; height: 72px; }
	#hnav #hnavhome { width: 82px; left: 0px; }
	#hnav #hnavlocal { width: 146px; left: 82px; }
	#hnav #hnavhigher{ width: 162px; left: 228px; }
	#hnav #hnavcomm { width: 143px; left: 390px; }
	#hnav #hnavnews { width: 82px; left: 533px; }
#hnav li a { display: block; position: absolute; top: 0; left: 0; width: 100%; height: 72px; text-indent: -9999em; }
&lt;/pre&gt;
&lt;p&gt;Notice how much less complicated the CSS is than what is typical with sprites.  There is no need to define background positioning for each element and its hover state.  The last piece you'll need to do is enable the autosprites plugin:&lt;/p&gt;
&lt;pre class="brush:js"&gt;$(document).ready(function(){
	$('#hnav').autosprites();
});
&lt;/pre&gt;
&lt;p&gt;There are no required options.  The plugin defaults to a horizontal menu and fading for the animation.  It infers everything else from the CSS.  If you would like to customize things, here are the options that are available:&lt;/p&gt;
&lt;pre class="brush:js"&gt;settings = $.extend({
	offset: '100%', //Can be specified in px as well. This tells the plugin the offset between the two sprites images
	orientation: 'horizontal', //'vertical' is the other option
	over: { opacity: 'show' },
	overSpeed: 500,
	out: { opacity: 'hide' },
	outSpeed: 500
}, settings);
&lt;/pre&gt;
&lt;p&gt;So that's it! You can specify the minimum amount of information about your menu and the sprites will be built automatically. Be sure to check out the &lt;a href="/files/posts/autosprites/index.html"&gt;demo&lt;/a&gt; and &lt;a href="/files/posts/autosprites/autosprites.zip"&gt;download the zip&lt;/a&gt; for your own projects.  As always leave a comment if you have any complements, insults, suggestions or questions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Special Note on Compiling Javascript&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The purpose of using sprites is to minimize HTTP requests. &amp;nbsp;It would be foolish to use this plugin by including jQuery, the minimized plugin, and a setup script. &amp;nbsp;Instead, it is best practice on a production site to bring all of your scripts together into one file, just as sprites bring your images into one file.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=xL_riXj6dXg:rGxNwwozXmI:IuXuQPol3sE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=xL_riXj6dXg:rGxNwwozXmI:IuXuQPol3sE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=xL_riXj6dXg:rGxNwwozXmI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=xL_riXj6dXg:rGxNwwozXmI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=xL_riXj6dXg:rGxNwwozXmI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?i=xL_riXj6dXg:rGxNwwozXmI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=xL_riXj6dXg:rGxNwwozXmI:cGdyc7Q-1BI"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=cGdyc7Q-1BI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/NewMediaCampaigns?a=xL_riXj6dXg:rGxNwwozXmI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/NewMediaCampaigns?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/NewMediaCampaigns/~4/xL_riXj6dXg" height="1" width="1"/&gt;</description>
		<guid isPermaLink="false">http://www.newmediacampaigns.com/page/autosprites-jquery-menu-plugin</guid>
		<pubDate>Wed, 28 Oct 2009 11:15:00 EDT</pubDate>
	<feedburner:origLink>http://www.newmediacampaigns.com/page/autosprites-jquery-menu-plugin</feedburner:origLink></item>
	</channel>
</rss>
