<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Six Revisions &#187; Web Development</title>
	<atom:link href="http://sixrevisions.com/category/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://sixrevisions.com</link>
	<description></description>
	<lastBuildDate>Thu, 18 Mar 2010 17:21:23 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>10 Simple Tips for Launching a Website</title>
		<link>http://sixrevisions.com/web-development/10-simple-tips-for-launching-a-website/</link>
		<comments>http://sixrevisions.com/web-development/10-simple-tips-for-launching-a-website/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 13:00:29 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=2714</guid>
		<description><![CDATA[In this article, I'll share with you some tips for launching a website based on the experience of our own launch of Design Instruct.]]></description>
			<content:encoded><![CDATA[<p>The process of launching a website can be a daunting endeavor. There are many things you want to do, but not enough time and resources to do them. However, even though it might seem like a herculean task, as long as you keep some fundamental things in mind, you can ensure a hassle-free website launch.</p>
<p>In this article, I&#8217;ll share with you some tips for launching a website based on the experience of our own launch of <a href="http://designinstruct.com/">Design Instruct</a>.</p>
<p><a href="http://sixrevisions.com/web-development/10-simple-tips-for-launching-a-website/"><img src="http://images.sixrevisions.com/2010/03/05-01_tips_launch_lead_image.jpg" width="550" height="200" alt="10 Simple Tips for Launching a Website" /></a></p>
<p><span id="more-2714"></span></p>
<p class="about-author"><em>This article is part of <a href="http://sixrevisions.com/site-news/design-instruct-week/">Design Instruct Week</a>, a weeklong celebration of our newly launched site, <a href="http://designinstruct.com/">Design Instruct</a>. This week on Six Revisions covers topics that deal with running websites and design, written by the founders/editors of Design Instruct and Six Revisions. Be sure to check out the <a href="http://designinstruct.com/articles/site-news/design-instruct-twitter-giveaway/">Design Instruct Week Twitter Giveaway</a>, which gives out different prizes every day of Design Instruct Week.</em></p>
<h3>1. Have scalable web server resources</h3>
<p>With today&#8217;s high-availability and cost-effective content distribution solutions such as <a href="http://aws.amazon.com/s3/">Amazon S3</a>, and on-demand instant scalability offerings of hosting providers such as VPS.NET, you can affordably have web servers that can take a beating from high-burst traffic.</p>
<p>Not only will having scalable solutions prepare you for the high-traffic that a website launch can generate, but it also future-proof&#8217;s your set-up as your website grows. High-availability, metered set-ups give you the ability to pay for just the resources you need right now.</p>
<p><img src="http://images.sixrevisions.com/2010/03/05-02_scale_webservers.png" width="550" height="142" alt="Have scalable web server resources" /></p>
<p>For Design Instruct, we set up a CDN for distributing static files for our content-heavy pages, and scaled up our VPS resources temporarily on the day of the site launch because we were anticipating a huge burst of traffic.</p>
<p>Regardless of how big or small you think the traffic you&#8217;ll get is, it&#8217;s never a bad idea to get a web hosting solution that will scale—they&#8217;re tremendously affordable and you pay only for what you intend to use.</p>
<p>Don&#8217;t risk having your website crash and your launch day ruined because of a shoddy web server.</p>
<h3>2. Get all of your social media accounts beforehand</h3>
<p>Nowadays, social networking is integral to a website. Don&#8217;t wait the last minute to sign up and set up your social network accounts on Twitter, Facebook, MySpace, and any other site that you&#8217;re planning to engage in.</p>
<p>This guarantees that your preferred account name will be available before you become known and gives your visitors additional ways to communicate with as soon as they arrive at your website.</p>
<p><img src="http://images.sixrevisions.com/2010/03/05-03_social_media.png" width="550" height="233" alt="Get all of your social media accounts beforehand" /></p>
<p>On Design Instruct, our social media accounts were established well before the site&#8217;s launch date. For example, we had <a href="http://twitter.com/designinstruct">our Twitter account</a> set up close to a month ahead of our site launch.</p>
<h3>3. Have content ready to publish for at least a month</h3>
<p>The early stages of a website is filled with many tasks. One timesaving deed you can do is to have content ready to publish so that you can follow up your launch with great content. This also frees you up for the many other activities involved in this stage of your website&#8217;s growth.</p>
<p><img src="http://images.sixrevisions.com/2010/03/05-04_post_ahead.png" width="550" height="233" alt="Have content ready to publish for at least a month" /></p>
<p>For Design Instruct, we set out to have 10 tutorials ready to go before we launched the site. We didn&#8217;t quite make that goal before our launch date, though we had enough to comfortably go ahead with the launch. This enabled us to focus on tasks that needed to be tended to without fear that we wouldn&#8217;t have great content to publish.</p>
<h3>4. Drop hints about the upcoming launch to build anticipation</h3>
<p>Let people know that there&#8217;s an event that&#8217;s going to occur to help create some hype. If you want to keep the details undisclosed to the public—that&#8217;s fine—you can still let people know that <em>something</em> on <em>some date</em> is going to happen.</p>
<p><img src="http://images.sixrevisions.com/2010/03/05-05_drop_hints.png" width="550" height="157" alt="Drop hints about the upcoming launch to build anticipation" /></p>
<p>In Design Instruct&#8217;s case, we wanted to wait until the actual launch before revealing what the site was. That didn&#8217;t prevent us from dropping hints that there was <em>something</em> coming soon. We did it through <a href="http://feedgrids.com/originals/post/interview_with_web_developer_web_designer_and_blogger_jacob_gube_of_si/">interviews</a> and <a href="http://twitter.com/sixrevisions/status/7273388054">on Twitter</a> a month ahead of the actual launch date.</p>
<p>This type of subtle hinting can pique the interests of your long-time supporters and fans. And those are the people that count the most when your website launches.</p>
<h3>5. Plan your tasks for at least a month after the site launch</h3>
<p>The worst question to have after a site launch is, &quot;Now what?&quot; You need a clear goal and direction on how you intend to follow through your site&#8217;s launch. If you&#8217;ve planned for a big site launch, don&#8217;t let the initial interest fizzle out by not having a plan. Before you launch, you should know exactly how you want to proceed right after.</p>
<p>For example, on Design Instruct, we had a <a href="http://designinstruct.com/changelog-upcoming-features/">laundry list of things</a> we wanted to work on. Having content ready to publish, we were able to focus on growing the site and improving the user experience for our readers.</p>
<h3>6. Triple-check the technical details before going live</h3>
<p>Measure twice, cut once. Better yet, measure <em>thrice</em>. Making certain that your early visitors will have the best experience possible when first arriving at your site means that everything needs to be working correctly.</p>
<p>Check to make sure that all hyperlinks work. Make ultra-sure that contact forms, email accounts, commenting systems, and all the other things that your users will interface with, is working properly.<br />
One of the late quick fixes we had to implement just hours before Design Instruct&#8217;s launch had something to do with category pages.</p>
<p>Users visiting a category page from the sidebar links that didn&#8217;t have an associated tutorial under it simply said that the page could not be found. It gave the impression that there was something wrong.</p>
<p>We had to revise the message to say, &quot;There aren&#8217;t any posts in this category yet. We&#8217;re working on it though, so please check back soon!&quot; to let users know that the pages do work, just that there aren&#8217;t anything in them yet.</p>
<h3>7. Launch on schedule</h3>
<p>Whether you&#8217;ve announced your launch date or not, you should release your website to the public when you say you&#8217;re going to. This forces you to stay on point and work towards a goal. What can cripple and delay a website launch is the attitude of &quot;It&#8217;ll be ready when it&#8217;s ready.&quot;</p>
<p>When you&#8217;re nearing launch day and you think you won&#8217;t have the site fully completed, launch anyway (as long as it&#8217;s presentable and usable).</p>
<p>Websites aren&#8217;t like conventional consumer products—you can update and upgrade them any time you want.</p>
<p>At Design Instruct, we were delayed with some of the site features we wanted to implement, such as a comment rating system and a post rating system.</p>
<p>We still went ahead with the launch and created a malleable and constantly updated <a href="http://designinstruct.com/changelog-upcoming-features/">Upcoming Features</a> page that listed the things we wanted to do in the future. We would curate this list by adding and removing items based on what our users want.</p>
<h3>8. Contact your friends and family about the site launch</h3>
<p>The first thing to do after a site has launched is to contact your friends and family. Let them know that you&#8217;ve launched the site so that they can be the first to see it.</p>
<p>Our friends list is just a bit larger than most people just starting out. However, we still sent personal emails to our friends at Smashing Magazine, Abduzeedo, Envato and others. We <a href="http://sixrevisions.com/site-news/design-instruct-a-new-tutorial-web-magazine-for-designers/">announced the site launch here on Six Revisions</a> so that our regular readers would be the first to know about our new site.</p>
<p>It doesn&#8217;t matter how big your list of friends and family is, they should be the first to know about your site&#8217;s launch.</p>
<h3>9. Provide easy ways of contacting you</h3>
<p>When you first launch a site, you have to give visitors ways to communicate with you easily. Your initial visitors are early adopters, and as such, they&#8217;ll be critical and will help you find things that might be wrong with the site, as well as suggest ways you can improve the site for future users.</p>
<p><img src="http://images.sixrevisions.com/2010/03/05-06_contact_you.png" width="550" height="143" alt="Provide easy ways of contacting you" /></p>
<p>For Design Instruct, we had several modes of communication available: email, Twitter, the comments section in the announcement post on Six Revisions, and the comments section in the welcome post on Design Instruct.</p>
<p>This enabled us to find out what early adopters thought about the site, and what they wanted to see in the future.</p>
<p>We were also able to discover bugs via reports in comments and Twitter such as the <a href="http://twitter.com/spicypepper/status/8242463665">error in color profiles in our CSS sprite</a> and <a href="http://twitter.com/MikePerry/status/8269204036">forgetting to set up RSS auto-discovery</a>.</p>
<h3>10. Show site visitors a roadmap of what&#8217;s to come</h3>
<p>Perhaps the most important thing you can do when you launch a site is to show your initial users that there&#8217;s more to come.</p>
<p>No one gets a site right on the first day. Unless you release your website, anything you think your users will want and need is just a guess. The people who will best help you figure out what works for your users <strong>are</strong> your users.</p>
<p>So we&#8217;ve set up an <a href="http://designinstruct.com/changelog-upcoming-features/">Upcoming Features</a> page and asked our users to tell us what they want and what they don&#8217;t want.</p>
<p>We&#8217;ve <a href="http://twitter.com/designinstruct/status/9256333010">periodically polled</a> our supporters and fans through Twitter to determine what we should do next.</p>
<p>We also track all of our site changes publicly through our <a href="http://designinstruct.com/changelog-upcoming-features/#version-0-2-5">changelog and version history</a> to show our readers that we are indeed moving forward with their suggestions.</p>
<p>Let your users see that you have more tricks up your sleeve and that they should stay on for the ride as your website continues to grow.</p>
<p><strong>Share your own tips for launching a website in the comments.</strong></p>
<h3>Related Content</h3>
<ul>
<li><a href="http://sixrevisions.com/web_design/how-to-design-for-your-worst-client-you/">How to Design for Your Worst Client: You.</a></li>
<li><a href="http://sixrevisions.com/web_design/the-three-golden-rules-of-site-redesigns/">The Three Golden Rules of Site Redesigns</a></li>
<li><a href="http://sixrevisions.com/design-showcase-inspiration/25-beautiful-examples-of-coming-soon-pages/">25 Beautiful Examples of “Coming Soon” Pages</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/web-development/">Web Development</a> and <a href="http://sixrevisions.com/category/resources/">Resources</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/jacob_gube_small.jpg" alt="" width="80" height="80" /><span class="author-bio-text"><strong>Jacob Gube</strong> is the Founder and Chief Editor of <strong><a href="http://sixrevisions.com/">Six Revisions</a></strong>. He&#8217;s also a web developer/designer who specializes in front-end development (JavaScript, HTML, CSS) and PHP development, and a <a href="http://www.packtpub.com/mootools-1-2-beginners-guide/book/mid/280110lap89t?utm_source=sixrevisions.com&amp;utm_medium=affiliate&amp;utm_content=blog&amp;utm_campaign=mdb_002286"><strong>book author</strong></a>. If you&#8217;d like to connect with him, head on over to the <a href="http://sixrevisions.com/contact/">contact page</a> and follow him on Twitter: <strong>@<a href="http://twitter.com/sixrevisions">sixrevisions</a></strong>.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/10-simple-tips-for-launching-a-website/feed/</wfw:commentRss>
		<slash:comments>47</slash:comments>
		</item>
		<item>
		<title>Five Technologies That Will Keep Shaping the Web in 2010</title>
		<link>http://sixrevisions.com/web-development/five-technologies-that-will-keep-shaping-the-web-in-2010/</link>
		<comments>http://sixrevisions.com/web-development/five-technologies-that-will-keep-shaping-the-web-in-2010/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 14:22:16 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=2153</guid>
		<description><![CDATA[As we&#8217;re coming to the end of this year, everyone starts to look towards the next one and there will no doubt be an upsurge of articles predicting the web trends of 2010 in the next days to come. However, in this article, we&#8217;ll be talking about what&#8217;s actually driving these trends now, and what [...]]]></description>
			<content:encoded><![CDATA[<p>As we&#8217;re coming to the end of this year, everyone starts to look towards the next one and there will no doubt be an upsurge of articles predicting the web trends of 2010 in the next days to come. However, in this article, we&#8217;ll be talking about what&#8217;s actually <strong>driving these trends now</strong>, and what they mean for the future of the internet.</p>
<p><img src="http://images.sixrevisions.com/2009/12/12-01_technologies_shape_web_lead_image.jpg" width="550" height="250" alt="Five Technologies That Will Keep Shaping the Web in 2010" /></p>
<p><span id="more-2153"></span></p>
<h3>1. CSS3, HTML5 and Fonts as a Service</h3>
<p><img src="http://images.sixrevisions.com/2009/12/12-02_typekit_screenshot.jpg" width="550" height="210" alt="CSS3, HTML5 and Fonts as a Service" /></p>
<p>CSS3, HTML5, and Fonts as a Service such as <a href="http://typekit.com/">Typekit</a> that cater to web browsers that already support the <a href="http://www.w3.org/TR/css3-fonts/#the-font-face-rule">@font-face rule</a>, are giving web designers the creative freedom that they have been coveting for a long time.</p>
<p>CSS3 is opening up various new options for styling content on the web, from <a href="http://www.css3.info/preview/multiple-backgrounds/">multiple backgrounds</a> on page elements, better ability to select and style elements with greater specificity, and <a href="http://www.css3.info/webkit-provides-implementation-of-css-based-gradients/">color gradients</a> without reliance on static graphics, to simpler aesthetical improvements such as support for rounded corners without the need for complicated <a href="http://www.alistapart.com/articles/slidingdoors/">sliding doors techniques</a> or JavaScript. </p>
<p>HTML5 is slowly but surely changing the way we mark up our pages, bringing us closer to the holy grail of the semantic web, opening up native support for open format multimedia such as video and audio, and bringing us better ways to interoperate with the content of a website.</p>
<p>Another change that web designers have been wishing for is being able to use any font on a web page, without using static <a href="http://www.mezzoblue.com/tests/revised-image-replacement/">CSS background image replacement</a> or relying on JavaScript and Flash. The development of tools like Typekit and greater support for the @font-face rule are enabling site builders to use a much wider range of fonts in their design.</p>
<h4>So what will change?</h4>
<p>These are all web technologies that are guaranteed to make the web a more aesthetically pleasing place. Of course, expect these new things to be misused by Sunday driver designers; there will be some horrible font choices and misemployed color gradients that will produce unreadable and tacky page designs, but it&#8217;s the opportunities that they open up for capable and creative designers that will be most interesting.</p>
<p>Some reading for you:</p>
<ul>
<li><a href="http://www.typekit.com">Typekit</a></li>
<li><a href="http://www.css3.info">CSS3.info</a></li>
<li><a href="http://westciv.com/tools/gradients/">Play around with CSS3</a></li>
<li><a href="http://www.alistapart.com/articles/get-ready-for-html-5/">Get Ready for HTML 5</a></li>
<li><a href="http://www.readwriteweb.com/archives/5_exciting_things_in_html_5.php">5 Exciting Things to Look Forward to in HTML 5</a> written by Chief Editor of Six Revisions, Jacob Gube, for ReadWriteWeb</li>
</ul>
<h3>2. Ways we browse the web</h3>
<p><img src="http://images.sixrevisions.com/2009/12/12-03_chrome.jpg" width="550" height="210" alt="Ways we browse the web" /></p>
<p>The browser landscape is alive and well, with better and faster web browsers such as Google Chrome, Firefox, Safari, and Opera. Web users today are provided with many choices that will surely drive competition and one-upping from these companies &#8211; stressful for their developers, but great for consumers.</p>
<p>The browser wars is in full force, and unlike the preceding browser wars where Internet Explorer dethroned other browsers to take hold of a majority browser share, IE is shaping up to being the &quot;dethronee&quot; this time around.</p>
<p>And changes in browsing the web aren&#8217;t just limited to the web browser competition, the way we digest content from the web is increasingly becoming removed from the traditional &quot;sit in front of your desktop&quot; way. Smart phones are becoming more common, TV&#8217;s are becoming web-enabled&#8211;and as are gaming consoles such as the PS3 and <a href="http://en.wikipedia.org/wiki/Netbook">Netbooks</a> and mobile devices such as the iPhone and the Droid are giving users an experience on a smaller screen than a traditional laptop.</p>
<p>Moreover, browsers themselves are changing. The launch of Google Chrome brought the <a href="http://webkit.org/">WebKit</a> engine, a layout engine that has a big portion of CSS3 and HTML5 specifications already implemented, to Windows-based computers better than Apple&#8217;s Safari port to Windows, and it may yet be a bigger milestone than many first thought. With Google aiming for a <a href="http://www.maximumpc.com/article/news/google_expects_10_chrome_market_share_two_years">10% share of the market over the next couple of years</a>, a big push for users may well be coming. A large shift from the dominant web browser, Internet Explorer, is underway and may be successful next year. In Germany, Mozilla Firefox is close to <a href="http://www.spiegel.de/fotostrecke/fotostrecke-49335-4.html">overtaking IE&#8217;s market share</a> as we speak.</p>
<p>These factors are revising the way we think about web design and accessibility. Do you have a mobile version of your site? What does it look like on a small screen? What does it look like on a large screen? What does it look like in a WebKit versus Gecko versus Trident browser layout rendering engine?</p>
<p>Attitudes towards viewing of websites across different media is changing as well, designers are increasingly becoming of the opinion that designs <a href="http://shouldwebsiteslookthesameinallbrowsers.com/">do not need to render the same everywhere</a>, nor do they need to give the same user experience across all web browsers.</p>
<h4>So what will it change?</h4>
<p>There&#8217;s a good chance that you&#8217;ll start to see websites that don&#8217;t look the same in every browser. Techniques for <a href="http://en.wikipedia.org/wiki/Progressive_enhancement">progressive enhancement</a> are more commonplace than before, giving users of modern web browsers a better web experience than those who will not or cannot use them. Furthermore, there&#8217;s already widespread acceptance towards <a href="http://mashable.com/2009/07/16/ie6-must-die/">foregoing support for antiquated browsers</a>, putting the burden of getting users upgraded on the browser makers, and not the designers. This type of forward thinking will only grow in the upcoming year. What&#8217;s more, the changes in the way we view the web will shift focus to content, functionality and accessibility, but by no means at the expense of good, interesting and inspiring design.</p>
<h3>3. Social media</h3>
<p><img src="http://images.sixrevisions.com/2009/12/12-04_twitter.jpg" width="550" height="150" alt="Social media" /></p>
<p>No one can deny that 2009 has been a big year for social media: Twitter, for example, has become the buzzword in many a boardroom and office. It&#8217;s obvious that it will continue to a big part of the web in the future. </p>
<p>In many ways, the growth of platforms such as Twitter and Facebook has led the web to be much more community-oriented. Big changes could happen within social media and, no doubt, will be led by monetization of the media.</p>
<p>One of the big questions revolves around how you measure the impact and value of social media and how to get that value back. How valuable are 1,000 twitter followers? Do you start charging for the service? Answering all these questions will lead to significant changes over the next year in the social media arena. </p>
<p>Along with these changes will come increased focus in getting information in real-time. Google is already discussing <a href="http://googleblog.blogspot.com/2009/12/relevance-meets-real-time-web.html">real-time search</a> to leverage the immediate and breaking information that can be found on sites like Twitter. How these changes are integrated into the current web system, especially in terms of search engine technology, could precipitate into some interesting developments and innovation in the way we seek information online. </p>
<h4>So what will it change?</h4>
<p>With more people participating in the creation of information on the web, the way in which we obtain information will shift from being from a singular source, into a more community-created source. Looking for information about, say, a car repair shop will show you recent tweets and Facebook updates about that company instead of outdated and static information.</p>
<h3>4. JavaScript</h3>
<p><img src="http://images.sixrevisions.com/2009/12/12-05_jquery_mootools.jpg" width="550" height="150" alt="JavaScript" /></p>
<p>Whilst CSS3/HTML5 has started to step on the toes of JavaScript, JavaScript itself has started to inch into the territory of Flash. The growth of frameworks such as jQuery and has made rich client-side interaction and asynchronous/seamless user experiences a reality. This leads to easier deployments of web applications, which in turn, increases competition, which in turn, leads to innovation.</p>
<p>JavaScript is already stepping into what, in the past, we would associate as being Flash&#8217;s territory, such as interactive <a href="http://gamequery.onaluf.org/#demos">games</a> (which can be used for training and distance-learning applications) and complex and interactive <a href="http://www.highcharts.com/">data visualization</a>. It should also enable us to replicate rich interfaces and flash type experiences in a much more accessible way.</p>
<p>And very recently, 10 years after the last major revision, JavaScript (known as ECMAscript in web standards organizations) has just finished a <a href="http://blogs.msdn.com/jscript/archive/2009/04/09/a-major-milestone-in-javascript-standardization.aspx">major revision</a> of its specifications for the language. Once browser companies adopt these standards, web developers will be provided with more tools to improve their capabilities in creating web applications.</p>
<h4>So what will it change?</h4>
<p>Because CSS3 and HTML5 will replace a lot of what JavaScript is doing now (i.e. complex element selections, dynamic rounded corners, handling real-time editable web pages), we will see a surge in JavaScript developing into being focused solely on handling programming logic of webapps on the client-side. With the news of the major revision on JS specifications, we will see a progression towards better web applications that can interoperate much better with other web apps (for example, a major goal for the new set of specs is the <a href="http://en.wikipedia.org/wiki/ECMAScript#ECMAScript.2C_5th_Edition">security of JSON objects</a>).</p>
<h3>5. Software as a Service (SaaS)</h3>
<p>Software as a Service business models have been knocking around for years. Top-notch SaaS such as <a href="http://37signals.com/">37 Signals products</a> and <a href="http://www.google.com/enterprise/">Google Enterprise</a> are more commonplace now than ever before.</p>
<p>The competition is fierce; the technologies are becoming affordable and requiring little upfront costs, which gives the little guys a chance to compete with the bigger guys. In the next year, we&#8217;ll see this competition increase, and hopefully, the outcome is innovation in web apps.</p>
<h4>So what will it change?</h4>
<p>SaaS&#8217;s as a business model will continue to replace more traditional software that require you to install and run them on your desktop. With so much more people connected to the internet, the demand is on internet-enabled, interoperable applications. In 2010, we are in for some surprise improvements driven by a need to stand out from the crowd.</p>
<h3>What are your predictions for the next year?</h3>
<p>What do you think will be the catalysts for change over the next year? How do you think the web technologies we have now will evolve? Leave us a comment!</p>
<h3>Related Content</h3>
<ul>
<li><a href="http://sixrevisions.com/usabilityaccessibility/creating-a-timeless-user-experience/">Creating a Timeless User Experience</a></li>
<li><a href="http://sixrevisions.com/tools/useful_gadgets_mobile_computing/">10 Useful Gadgets for Mobile Computing</a></li>
<li><a href="http://sixrevisions.com/usabilityaccessibility/10-simple-web-accessibility-tips-you-can-do-today/">10 Simple Web Accessibility Tips You Can Do Today</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/web-development/">Web Development</a> and <a href="http://sixrevisions.com/category/user-interface/">User Interface</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/dave_sparks_small.jpg" alt="" width="80" height="80" /><span class="author-bio-text"><strong>Dave Sparks</strong> is a web designer and  developer working for <a href="http://www.armitageonline.co.uk" target="_blank"><strong>Armitage Online</strong></a> in the Lake District. He can be found writing  about various web topics on his blog at <a href="http://www.kamikazemusic.com" target="_blank"><strong>Kamikazemusic.com</strong></a>, twittering as <a href="http://www.twitter.com/dsparks83" target="_blank"><strong>twitter.com/dsparks83</strong></a> and working on his website  analytics project - <a href="http://www.statshare.net/" target="_blank"><strong>Stat Share</strong></a>.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/five-technologies-that-will-keep-shaping-the-web-in-2010/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>How to Evaluate What CMS to Use</title>
		<link>http://sixrevisions.com/web-development/how-to-evaluate-what-cms-to-use/</link>
		<comments>http://sixrevisions.com/web-development/how-to-evaluate-what-cms-to-use/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 23:00:03 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=2010</guid>
		<description><![CDATA[Content Management Systems (CMS) have evolved into more than just publishing content, but managing your workflow as well. This article will help you make an informed decision on what CMS is right for you.]]></description>
			<content:encoded><![CDATA[<p><strong>Content Management Systems (CMS)</strong> have evolved into more than just publishing content, but managing your workflow as well. CMS&#8217;s nowadays allow you to easily conceive, edit, index, and publish content, while giving designers and developers more flexibility in customizing their look and functionality. Although there are many that require advanced skills to operate successfully, this article is going to cover a select few that offer a balance between design, code, and end-user usability.</p>
<p><img src="http://images.sixrevisions.com/2009/11/18-01_evaluate_cms_lead_image.jpg" width="550" height="200" alt="How to Evaluate What CMS to Use" /></p>
<p><span id="more-2010"></span></p>
<p>This article will help you make an <strong>informed decision on what CMS is right for you</strong>.</p>
<h3>Evaluating Content Management Systems</h3>
<p>Evaluating content management systems can be an overwhelming task, not because it&#8217;s rocket science, but simply because there are tons of them to choose from. However, with a structured approach to your evaluation, things can be much easier and less intimidating. Let&#8217;s talk about the things you should look at when deciding what CMS to use; here are <strong>eight characteristics that a good CMS should have</strong>.</p>
<h3>1. Intuitiveness: easy to understand and use</h3>
<p>Your CMS should have a GUI (Graphical User Interface) that&#8217;s easy on the eyes, doesn&#8217;t have overly complicated options, and offers simplicity in its administration interface. A good interface means that tasks pertaining to creating and managing your content will be quicker, saving you a lot of time and increasing your productivity.</p>
<p>You should also look at it from an end user&#8217;s perspective: if you&#8217;re building a content management system for a client who&#8217;s not &quot;technology-savvy&quot; and you choose a solution that requires a Ph. D. in computer science, it&#8217;s less likely that they&#8217;ll be able to use the system (thus, defeating the whole purpose of a CMS, which is to empower its users).</p>
<h3>2. Flexibility and Ease of Customization</h3>
<p><img src="http://images.sixrevisions.com/2009/11/18-02_wordpress_theming.jpg" width="550" height="383" alt="Flexibility and Ease of Customization" /></p>
<p>When taking into consideration a content management system, make sure that you&#8217;re not obligated to use their design templates. A large quantity of CMS solutions allows you to customize your own design without major restrictions. If your CMS forces you to choose a fixed and unalterable design template, then you&#8217;re stripped of creative license and your website will look like everyone else&#8217;s.</p>
<p>CMS&#8217;s that offer customizations on templates are Expression Engine, WordPress, and Joomla just to name a few; these content management systems boast and promote their ability to be easily modified.</p>
<h3>3. Extensibility via Plugins and Modules</h3>
<p><img src="http://images.sixrevisions.com/2009/11/18-03_joomla_extensibility.jpg" width="550" height="398" alt="Extensibility via Plugins and Modules" /></p>
<p>A good CMS will allow you incorporate helpful site features into your site by letting you extend the default configuration with plugins.</p>
<p>Plugins/extensions/modules (their terminology varies between different platforms) make a difference in terms of enhancing your site&#8217;s ability to provide your site users with useful options for interfacing with your site.</p>
<p>Look for a CMS with a powerful Application Programming Interface (API) in case you need to write your own extensions. Make sure that the CMS you&#8217;re considering already has a huge list of plugins. Though you might not need plugins right away, it&#8217;s important that this is available to you, later down the road.</p>
<h3>4. No Need for Programming Knowledge</h3>
<p>If you&#8217;re more &quot;design-oriented&quot; than anything else, make sure you select a CMS where you won&#8217;t need to have extensive programming abilities to publish and maintain your site.</p>
<p>There is a wide selection of CMS&#8217;s that have WYSIWYG editors, letting you edit content without the need for code. Having to edit text through HTML markup can be time consuming and takes you away from other aspects of your managing and building your site.</p>
<p>Complex sites, however, can require a CMS that will let you type in some code, edit files with extensions such as .php, .css, .html, and make changes without that need for a third-party source code editor.</p>
<h3>5. Optimized for Performance and Speed</h3>
<p>Taking into consideration the speed your pages load on the browser, and how fast your site can make a connection to a server, is vital. Choosing a CMS that is bulky will drive away visitors rather then bring them in. By visiting examples of live sites, you&#8217;ll be able to gauge somewhat how fast pages load.</p>
<p>Keep in mind that you can increase the load time of your site by choosing a good host, and adding plugins that cache/compress/minify feeds, CSS, JS and also caches your database objects. A case study on this subject can be found <a href="http://www.noupe.com/spotlight/why-noupe-com-is-loading-pretty-fast.html">here</a>.</p>
<p>A simple and free tool that you can use to evaluate page response times of your CMS candidates is <a href="http://sixrevisions.com/web-development/five-ways-to-speed-up-page-response-times/">YSlow</a>. Install it and head on over to demo sites of your CMS&#8217;s to see how well it&#8217;s front-end performs. </p>
<h3>6. Security</h3>
<p><img src="http://images.sixrevisions.com/2009/11/18-04_wordpress_security.jpg" width="550" height="190" alt="Security" /></p>
<p>Adequate security for your site is very important and must be in place in order to protect your content. There are CMS&#8217;s that allow you to install specific plugins and edit files/permissions in order to increase security levels. Make sure you choose a management system that offers modules to protect the integrity of your site. You can also protect your site by selecting a CMS that allows you to easily assign a different username and password to each user. This will let you view and control what each user has access to.</p>
<p>For WordPress, be sure to read about <strong><a href="http://sixrevisions.com/wordpress/12-essential-security-tips-and-hacks-for-wordpress/">essential security tips and hacks for WordPress</a></strong>.</p>
<h3>7. Documentation and Community Support</h3>
<p>Nothing&#8217;s more frustrating than trying to figure out how to do something, and not have references online that you can take advantage of. One way to ensure that you won&#8217;t be running into this problem is by reading through the documentation of your candidate CMS&#8217;s. Also, a quick Google search will tell you how popular and well-documented a content management system is.</p>
<p>The availability (or lack thereof) of support from users of the system can be a deal maker or deal breaker. When users are active and proud of being part of the community, you not only have access to individuals that are more familiar with the system, but also, you can be assured that the project will be developed continually. Nothing&#8217;s worse than investing your resources and effort on a dead (or soon to be dead) project.</p>
<h3>8. Emphasis on Web Standards and Best Practices</h3>
<p>Content Management Systems developed under web standards guidelines and best practices will ensure that you won&#8217;t get burned later down the road. When applications are designed with best practices in mind, you can be assured ultimate cross-browser compatibility, lean-and-mean code, and ease of maintenance.</p>
<p>Look for content management systems that promote the use of web standards, and those that put it at the forefront of their development and design philosophy.</p>
<h3>Some Key Content Management Systems to Consider</h3>
<p>Now that you know the key characteristics of a good content management system, let&#8217;s take a look at a handful of major CMS&#8217;s that excel in most, if not all, of those areas.</p>
<h3><a href="http://expressionengine.com/">ExpressionEngine</a></h3>
<p><a href="http://expressionengine.com/"><img src="http://images.sixrevisions.com/2009/11/18-05_expression_engine.jpg" width="550" height="402" alt="ExpressionEngine" /></a></p>
<p><em>ExpressionEngine</em> (EE) is a flexible CMS for any scope of project. Within a few minutes, you&#8217;ll understand how to easily begin creating content. EE&#8217;s templating system lets you quickly see instant changes live. EE also has a multi-layered caching system to try and minimize the database usage. In addition, EE lets you embed and run PHP directly within its templates, very similar to WordPress.</p>
<p>ExpressionEngine has various features such as allowing you to have multiple sites with just one installation of their software. Just as we spoke in the above section dealing with connections and load times, EE has a unique template caching, query caching and tag caching keep the site running at a pretty quick pace by storing database queries in memory to reduce database connections when generating web pages.</p>
<h3><a href="http://wordpress.org/">WordPress</a></h3>
<p><a href="http://wordpress.org/"><img src="http://images.sixrevisions.com/2009/11/18-06_wordpress.jpg" width="550" height="402" alt="WordPress" /></a></p>
<p><em><a href="http://sixrevisions.com/category/wordpress/">WordPress</a></em> is one of the most popular publishing platforms currently available in the market, and it&#8217;s known for being an excellent blogging platform. WordPress is <a href="http://www.wordpress.org/">free</a> and open source, and it can be downloaded and installed as many times as you want.</p>
<p>WordPress installations are very quick and easy. It only takes a few minutes for your admin panel to be operational. If coding is not your strong suit, then no worries, WordPress offers its users a WYSIWYG editor (called Visual Editor).</p>
<h3><a href="http://businesscatalyst.com/">Business Catalyst/Goodbary</a></h3>
<p><a href="http://businesscatalyst.com/"><img src="http://images.sixrevisions.com/2009/11/18-07_businesscatalyst.jpg" width="550" height="402" alt="Business Catalyst/Goodbary" /></a></p>
<p><em>Business Catalyst/Goodbary</em> (owned by Adobe) is a powerful ecommerce CMS for developers. This content publishing platform has an array of useful features such as email marketing and in-depth <a href="http://sixrevisions.com/usabilityaccessibility/10-promising-free-web-analytics-tools/">site analytics</a>. Business Catalyst gives you an easy way for your business to gain an online presence in no time. GB allows you to easily keep track of a customer&#8217;s actions, build and manage a customer database of any size, and sell your products and services online. Business Catalyst integrates well with a lot of popular payment systems such as PayPal, Google Checkout and pre-integrated gateways.</p>
<h3><a href="http://www.joomla.org">Joomla!</a></h3>
<p><a href="http://www.joomla.org"><img src="http://images.sixrevisions.com/2009/11/18-08_joomla.jpg" width="550" height="402" alt="Joomla!" /></a></p>
<p><em>Joomla!</em> is an advanced CMS with excellent function and content management. The installation process is pretty quick and easy. Joomla! is a complete CMS allowing you to build simple to advanced sites. Joomla also has super support for access control protocols like LDAP and OpenID, and can interface with popular and open API&#8217;s such as <a href="http://code.google.com/">Google APIs</a>.</p>
<p>With Joomla!, you&#8217;ll have more then <a href="http://extensions.joomla.org/">3,500 extensions</a> at your disposal along with the support of an entire community. With a simple extension, you can add almost any needed functionality to your site.</p>
<p>One downside to Joomla! is that their heavy-artillery list of extensions often require you to purchase them. Hopefully, in the future, they will make their plugins free in order to aid users on a tight budget.</p>
<h3><a href="http://www.drupal.org">Drupal</a></h3>
<p><a href="http://www.drupal.org"><img src="http://images.sixrevisions.com/2009/11/18-09_drupal.jpg" width="550" height="402" alt="Drupal" /></a></p>
<p><em>Drupal</em>, a great open source CMS supported by a very active community, lets users publish content through any time with very little restrictions. Once the installation is finalized, you will discover features such as forums, user blogs, OpenID sign-ons, profiles and more. This CMS was written in PHP/MySQL for ease of customization and has one of the highest-regarded API&#8217;s in the open source content management system field.</p>
<h3><a href="http://www.cushycms.com/">Cushy CMS</a></h3>
<p><a href="http://www.cushycms.com/"><img src="http://images.sixrevisions.com/2009/11/18-10_cushy_cms.jpg" width="550" height="412" alt="Cushy CMS" /></a></p>
<p><em><a href="http://sixrevisions.com/contests/cushycms-pro-giveaway/">Cushy CMS</a></em> is a hosted and free content management system that&#8217;s lightweight, though powerful enough to jumpstart your site in a jiffy. With Cushy CMS, you have to add CSS styles to the sections that you will eventually change or edit. This CMS allows you to access and store content while it uploads this same data to server.</p>
<p>Cushy was built for content editors and designers and so it&#8217;s very simple and easy to manage. Being a <a href="http://en.wikipedia.org/wiki/Software_as_a_service">SaaS</a>, you don&#8217;t need to install or self-maintain the CMS.</p>
<h3><a href="http://www.typolight.org">TYPOlight</a></h3>
<p><a href="http://www.typolight.org"><img src="http://images.sixrevisions.com/2009/11/18-11_typolight.jpg" width="550" height="402" alt="TYPOlight" /></a></p>
<p><em>TYPOlight</em> is great for site builders that will be maintaining multiple sites and is an ideal solution for web developers. If you&#8217;re thinking about creating a simple or advanced site design with great functionality, then TYPOlight CMS can definitely get the job done for you.</p>
<h3><a href="http://radiantcms.org/">RadiantCMS</a></h3>
<p><a href="http://radiantcms.org/"><img src="http://images.sixrevisions.com/2009/11/18-12_radiantcms.jpg" width="550" height="410" alt="RadiantCMS" /></a></p>
<p><em>RadiantCMS</em> is a Ruby on Rails app. Radiant has a very active community for core support and updates. If you are a RoR developer, it&#8217;s right up your alley. Radiant has concentrated on making things much more user-friendly for end users and web designers. RadiantCMS also contains an innovative custom tagging language (called Radius) that&#8217;s easy to pick up.</p>
<h3><a href="http://www.silverstripe.org">SilverStripe</a></h3>
<p><a href="http://www.silverstripe.org"><img src="http://images.sixrevisions.com/2009/11/18-13_silverstripe.jpg" width="550" height="402" alt="SilverStripe" /></a></p>
<p><em>SilverStripe</em> is an open source application written on top of PHP and was designed with emphasis on flexibility. SilverStripe has many configurable options and is geared towards content-heavy websites.</p>
<p>This CMS was completely built on its own PHP framework, called <a href="http://silverstripe.org/sapphire">Saphire</a>. SS offers content version control and great SEO support. All users alike are welcome to customize the administration area for their clients or themselves.</p>
<p>The only downside with SS is that the default templates are garbage; however, that&#8217;s nothing a little elbow grease wouldn&#8217;t fix.</p>
<h3><a href="http://textpattern.com/">Textpattern CMS</a></h3>
<p><a href="http://textpattern.com/"><img src="http://images.sixrevisions.com/2009/11/18-14_textpattern.jpg" width="550" height="402" alt="Textpattern CMS" /></a></p>
<p><em>Textpattern CMS</em> is a very popular system for many designers due to its simplicity.</p>
<p>Textpattern strives to provide great content management that produces quick, easy, and desirable web standards-compliant pages. There is no WYSIWYG editor because Textpattern utilizes <a href="http://www.textism.com/tools/textile/">textile</a> markup for content generation.</p>
<p>The backend is very easy to use and follow. New users will learn the administration section with super speedy ease.</p>
<h3><a href="http://www.alfresco.com/">Alfresco</a></h3>
<p><a href="http://www.alfresco.com/"><img src="http://images.sixrevisions.com/2009/11/18-15_alfresco.jpg" width="550" height="412" alt="Alfresco" /></a></p>
<p><em>Alfresco</em> is a <a href="http://java.sun.com/products/jsp/">JSP</a> enterprise content management solution that&#8217;s quick and easy to install. Alfresco lets you drop files into folders and convert those files into interactive web documents. This CMS isn&#8217;t as easy to become familiar with when compared to others, however, with a little bit of time investment, you&#8217;ll definitely get the hang of it. Alfresco could be targeted more towards the intermediate developer, although its pure functionality allows it to become very usable. The administration GUI is very organized, well maintained, and easy to navigate through.</p>
<p><strong>Got tips on how to evaluate the right CMS?</strong> Do you have experiences (good or bad) with the content management systems shown here? <em>Talk to us about it in the comments</em>.</p>
<h3>Related Content</h3>
<ul>
<li><a href="http://sixrevisions.com/wordpress/16-wordpress-sites-to-help-you-build-a-better-blog/">16 WordPress Sites to Help You Build a Better Blog</a></li>
<li><a href="http://sixrevisions.com/web-applications/10-promising-content-management-systems/">10 Promising Content Management Systems</a></li>
<li><a href="http://sixrevisions.com/web_design/31-drupal-content-management-system-cms/">CMS Showcase: 31 Remarkable Drupal Powered Websites</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/joel_reyes_small.jpg" alt="" width="80" height="80" /><span class="author-bio-text"><strong>Joel Reyes</strong> is a web designer and web developer with years of experience in the industry. He runs a development studio called <strong><a href="http://www.looneydesigner.com/">Looney Designer</a></strong>. He works with standards-compliant HTML/CSS, PHP, JavaScript and WordPress development and design. Connect with the author <strong><a href="http://twitter.com/grindsmart">via Twitter</a></strong>.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/how-to-evaluate-what-cms-to-use/feed/</wfw:commentRss>
		<slash:comments>84</slash:comments>
		</item>
		<item>
		<title>The History of Web Browsers</title>
		<link>http://sixrevisions.com/web-development/the-history-of-web-browsers/</link>
		<comments>http://sixrevisions.com/web-development/the-history-of-web-browsers/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 01:02:18 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=1703</guid>
		<description><![CDATA[The tool that we use to browse our favorite websites has a (relatively) long and rich history rife with battles for
market shares and dominance. This is a look into the past major events  in the web browser industry.]]></description>
			<content:encoded><![CDATA[<p><img src="http://images.sixrevisions.com/2009/09/29-01_history_web_browser_lead.jpg" width="550" height="122" alt="The History of Web Browsers" /></p>
<p><span id="more-1703"></span></p>
<p><img src="http://images.sixrevisions.com/2009/09/29-02_history_web_browser_infographic.jpg" width="550" height="3146" alt="This History of Web Browsers" /></p>
<h3>Related Content</h3>
<ul>
<li><a href="http://sixrevisions.com/web-development/definitive-guide-to-taming-the-ie6-beast/">Definitive Guide to Taming the IE6 Beast</a></li>
<li><a href="http://sixrevisions.com/web-development/10-useful-firefox-extensions-to-supercharge-firebug/">10 Useful Firefox Extensions to Supercharge Firebug</a></li>
<li><a href="http://sixrevisions.com/web-development/10-ways-to-improve-your-web-page-performance/">10 Ways to Improve Your Web Page Performance</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/web-development/">Web Development</a> and <a href="http://sixrevisions.com/category/user-interface/">User Interface</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/jacob_gube_small.jpg" alt="" width="80" height="80" /><span class="author-bio-text"></span><strong>Jacob Gube</strong> is the Founder and Chief Editor of <strong><a href="http://sixrevisions.com/">Six Revisions</a></strong>. He&#8217;s also a web developer/designer who specializes in distance-learning education, front-end development, and web accessibility. If you&#8217;d like to connect with him, head on over to the <a href="http://sixrevisions.com/contact/">contact page</a> and follow him on Twitter: <strong>@<a href="http://twitter.com/sixrevisions">sixrevisions</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/the-history-of-web-browsers/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		</item>
		<item>
		<title>How to Design the Web in a High-Def World</title>
		<link>http://sixrevisions.com/web-development/how-to-design-the-web-in-a-high-def-world/</link>
		<comments>http://sixrevisions.com/web-development/how-to-design-the-web-in-a-high-def-world/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 10:00:27 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=1568</guid>
		<description><![CDATA[This article is going to show you a process for making your site work for multiple resolutions by using a real-world case study.]]></description>
			<content:encoded><![CDATA[<p>One of the first design considerations a web designer has to make is the resolution that the project is going to be built in. Will the site be optimized for 800&#215;600 systems? 1024? Will the width be fluid or fixed? Will it work for mobile devices? There are certainly a lot more screen resolutions to consider now than there were just a few years ago.</p>
<p>There are quite a lot of articles written about designing small for mobile devices, but what about the largest common resolution; <strong>High Definition</strong> (commonly referred to as HD or High-Def)?</p>
<p>This article is going to show you a process for making your site work for multiple resolutions by using a real-world case study: <a href="http://debutcreative.com/">Debut Creative</a>. Granted, you can use this without dealing with HD resolutions, <strong>but why not go extreme</strong>?</p>
<p><a href="http://debutcreative.com/"><img src="http://images.sixrevisions.com/2009/09/04-01_debutsite.jpg" width="550" height="433" alt="Debut Creative was recently designed to work in HD" /></a><span class="figure-caption"><a href="http://debutcreative.com/">Debut Creative</a> was recently designed to work in HD.</span></p>
<p><span id="more-1568"></span></p>
<h3>Introduction</h3>
<p>HD has been getting more consumer use over the last couple of years with the ever-decreasing price points of Hi-Def television sets. They are not only easy to hook up to HD-capable computers, but also, modern gaming devices like the Wii, Playstation 3, and Xbox 360 also have internet-enabled browsers which can be used to browse the web. The time has come to consider <strong>designing for this popular format</strong>.</p>
<p>As over-the-top as HD web design seems, I recently designed my site, <a href="http://debutcreative.com/">Debut Creative</a>, for 1920&#215;1080 viewing (currently the site layout is actually optimized for 1024, but the background frames it nicely for HD). There are a few serious considerations to make before building a site for 1920 screen resolutions, even if it is just the background.</p>
<h3>Some Issues with supporting HD</h3>
<p><strong>File sizes</strong> is a major consideration. By the very definition of an HD site, any background image that spans the full 1920&#215;1080 will be massive (two megapixels by definition). By extension, unless properly addressed, these large sizes could lead to needless bandwidth consumption for users who don&#8217;t need the full HD experience.</p>
<p>From a design perspective, I wanted my background gradient to frame the content nicely with the darkest edges coming in around the edge of the full-screen browser. Having one background that frames it in this way for HD would be inadequate for any smaller browser.</p>
<p><a href="http://images.sixrevisions.com/2009/09/04-04_gradient_full.jpg"><img src="http://images.sixrevisions.com/2009/09/04-03_gradient.jpg" width="550" height="429" alt="In Photoshop: All that is visible is the gradient layer that we want sized to the edges of different resolutions." /></a><span class="figure-caption"> In Photoshop, all that is visible is the gradient layer that we want sized to the edges of different resolutions. <em>Click on the image to <a href="http://images.sixrevisions.com/2009/09/04-04_gradient_full.jpg">see full-scale version</a>.</em></span></p>
<p>The solution is simple; a JavaScript resolution sniffer with dynamic background image calls. Before we get to that, let&#8217;s talk about preparing images for HD.</p>
<h3>The Image</h3>
<p>The first step is preparing your background image in Photoshop (or an equivalently capable image editor). I began with an HD background (1920&#215;1080px). In addition to my framing gradient, I added a layer of a heavily feathered brush stroke to make certain the background pattern faded to solid nicely so my pages background color can take over where this image ends. </p>
<p>When you have your background ready for HD: save it (and maybe make a backup copy). We&#8217;ll soon be cropping and removing lots from it!</p>
<p><a href="http://images.sixrevisions.com/2009/09/04-06_imgsize_full.jpg"><img src="http://images.sixrevisions.com/2009/09/04-05_imgsize.jpg" width="550" height="339" alt="caption HD Resolution 1920x1080px" /></a><span class="figure-caption">HD Resolution at 1920&#215;1080px. <em>Click on image to <a href="http://images.sixrevisions.com/2009/09/04-06_imgsize_full.jpg">see full-scale version</a></em>.</span></p>
<p>To save web and mobile device optimized images, Photoshop has a feature called <em>Save for Web &amp; Devices</em> (Ctrl+Alt+Shift+S). I played with the settings here to optimize this huge image as best as I can. I settled on saving it as an optimized JPG with quality at <strong>53%</strong>, and I was able to get the image down to 111KB. This would be a painful 21-second download for a typical dial-up connection (for just the background image), but a manageable 5 seconds for the average DSL user. I&#8217;m OK with that.  Give your file a meaningful name like <strong>bg1920.jpg</strong>.</p>
<p><a href="http://images.sixrevisions.com/2009/09/04-08_saveweb_full.jpg"><img src="http://images.sixrevisions.com/2009/09/04-07_saveweb.jpg" width="550" height="490" alt="Save for Web &amp; Devices optimization allows you to compare compression sizes" /></a><span class="figure-caption">Save for Web &amp; Devices optimization allows you to compare compression sizes. Click image to <a href="http://images.sixrevisions.com/2009/09/04-08_saveweb_full.jpg">see full-scale version</a>.</span></p>
<p>Now we&#8217;re going to repeat the steps for the other common resolutions. This is a great time to get into some keyboard shortcuts to blaze through the process. Here&#8217;s my play-by-play sequence for Photoshop for this example (some of the more ingenious designers out there may consider recording Photoshop Actions to streamline this process).</p>
<p>You&#8217;ll note I use <em>Canvas Size</em> to alter only the width. Changing the height as well would cause my navigation bar to become too short. Depending on your layout you maybe want to do <em>Image Size</em> which scales the image entirely (Ctrl+Alt+I).</p>
<p>First, I click on my gradient layer (the layer I&#8217;ll need to adjust with every resolution size). </p>
<p>Then it&#8217;s a simple process of:</p>
<p><strong>#1 &#8211; Ctrl+Alt+C</strong> to open the <em>Canvas Size</em> option box</p>
<p><strong>#2 &#8211; Tab twice</strong> to get into the <em>Width</em> field</p>
<p><strong>#3 &#8211; Enter the width</strong> (widths the resolution sniffer will use include 1920, 1600, 1440, 1280, 1152, 1024, 800, 640. For common mobile resolutions, check out the <a href="http://en.wikipedia.org/wiki/List_of_common_resolutions">List of common resolutions</a> on Wikipedia.</p>
<p><strong>#4 &#8211; Press the Enter key twice</strong> to confirm cropping and close the <em>Canvas</em> option box</p>
<p><strong>#5 &#8211; Ctrl+T</strong> to activate the <em>Free Transform</em> feature for the active layer. </p>
<p><strong>#6 &#8211; Hold down Alt and horizontally resize the edge of the gradient</strong> in to the new edge: Holding Alt makes the resize mirrored. It should snap to the edge of the document. </p>
<p><strong>#7 &#8211; Press the Enter key</strong> to finish and render the transformation.</p>
<p><strong>#8 &#8211; Ctrl+Alt+Shift+S</strong> to open the <em>Save for Web &amp; Devices</em> option</p>
<p><strong>#9 &#8211; Press the Enter key</strong> (the settings should be the same as last time) to save.</p>
<p><strong>#10 &#8211; Name the file</strong> in the same convention used for your first file.</p>
<p><strong>#11 &#8211; Press the Enter key</strong> to finish saving the file</p>
<p><strong>Repeat!</strong></p>
<p>You should now have a snazzy folder full of images. Since my web layout is set for 1024, I&#8217;m not going to use the smaller files; however, I am going to make a <strong>bg0.jpg</strong> that is a gradient-less and tile-ready version of my background that is a few hundred pixels square. This may be useful for mobile surfers.</p>
<p><img src="http://images.sixrevisions.com/2009/09/04-09_files.jpg" width="550" height="418" alt="When finished, you should have a folder of well named images of various size." /><span class="figure-caption">When finished, you should have a folder of well named images of various size.</span></p>
<h3>The JavaScript</h3>
<p>Now that we have all of our images, we are ready to call them dynamically into our site. The following script works well with multiple monitor systems as well. Usually when it gets the <code>screen.width</code> value, it is detecting the width of your primary browser, not the resolution of your entire desktop. Some browsers may detect the screen that it is in. </p>
<p>Place the following call to the JS file after the <code>&lt;body&gt;</code> tag (placing it in the head will call the background before your CSS which may cause it not to render).</p>
<pre>&lt;script src=&quot;http://yourdomain.com/scripts/<strong>sniffer.js</strong>&quot;
  type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Or if you&#8217;re using a theme like WordPress:</p>
<pre>&lt;script src=&quot;http://yourdomain.com/<strong>wp-content/themes/themename</strong>/sniffer.js&quot;
  type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Now, naturally you&#8217;ll need the JavaScript. What the JavaScript resolution sniffer does is detect the <code>screen.width</code> and apply the appropriate CSS image backgrounds.</p>
<h4>Some notes</h4>
<p>I use &quot;<em>greater than or equal to</em>&quot; (<code>&gt;=</code>) conditional operator to cover strange resolutions that might come across the site/</p>
<p>There is a &quot;<em>less than or equal to</em>&quot; (<code>&lt;=</code>) operator for resolutions less than 799px. This should cover some <a href="http://en.wikipedia.org/wiki/Netbook">netbooks</a> and mobiles with smaller resolution.</p>
<p>This example just switches the HD background for my 1024px ready site &#8211; however, you could modify the code to call completely different stylesheets to change even the layout to work in different resolutions.</p>
<h4>The code</h4>
<pre>/* Resolution Sniffer / Dynamic CSS Loader - HD |
via <strong>Arley McBlain http://debutcreative.com</strong> */

/* Common Computer Screens: 640,800,1024,1152,1280,1440,1600,and HD 1920 */

<strong>// File path to background images folder</strong>
var bgFolder = '<strong>http://yourdomain.com/wp-content/themes/yourtheme/images/</strong>';

if (screen.width&gt;=1920){
 document['body'].style.backgroundImage='url('+<strong>bgFolder</strong>+'<strong>bg1920.jpg</strong>)';
 document['body'].style.backgroundRepeat='repeat-x';
}
else if (screen.width&gt;=1600){
 document['body'].style.background='url('+bgFolder+'bg1600.jpg)';
 document['body'].style.backgroundRepeat='repeat-x';
}
else if (screen.width&gt;=1440){
 document['body'].style.background='url('+bgFolder+'bg1440.jpg)';
 document['body'].style.backgroundRepeat='repeat-x';
}
else if (screen.width&gt;=1280){
 document['body'].style.background='url('+bgFolder+'bg1280.jpg)';
 document['body'].style.backgroundRepeat='repeat-x';
}
else if (screen.width&gt;=1152){
 document['body'].style.background='url('+bgFolder+'bg1152.jpg)';
 document['body'].style.backgroundRepeat='repeat-x';
}
else if (screen.width&gt;=1024){
 document['body'].style.background='url('+bgFolder+'bg1024.jpg)';
 document['body'].style.backgroundRepeat='repeat-x';
}
<strong>// Optional</strong>
<strong>/*</strong> else if (screen.width&gt;=800){
 document['body'].style.background='url('+bgFolder+'bg800.jpg)';
 document['body'].style.backgroundRepeat='repeat-x';
} <strong>*/</strong>
else if (screen.width&lt;=799){
document['body'].style.backgroundImage='url('+bgFolder+'bg0.jpg)';
document['body'].style.backgroundRepeat='repeat';
}
else {
 document['body'].style.backgroundImage='url('+bgFolder+'bg1024.jpg)';
 document['body'].style.backgroundRepeat='repeat-x';
}
</pre>
<h3>The CSS</h3>
<p>Finally, you might need to tweak your CSS. Simply forcing the background image to change might make your background color change to white automatically. Adding <code>!important</code> to your background classes that you don&#8217;t want to include in your JS file will force them to work.</p>
<pre>body {
 background-color: #1a1c1c <strong>!important</strong>;
 background-position: center 0 <strong>!important</strong>;
}</pre>
<h3>Testing</h3>
<p>So is it working? Change your desktop resolution and refresh your site. If you have a multiple monitor system you&#8217;ll only have to change the resolution of the primary monitor to test, regardless of what monitor the browser is in. If you want to test it on an HD set that is hooked up to your computer you may have to set this as your primary monitor.</p>
<h3>Download</h3>
<p>Download the script used in this article below and feel free to use on your own sites (you&#8217;ll have to modify it).</p>
<ul>
<li><a href="http://downloads.sixrevisions.com/sniffer.zip">sniffer.zip</a> (1KB, ZIP)</li>
</ul>
<h3>Summary</h3>
<p>We certainly have some time before HD websites become something in demand. It&#8217;s kind of rewarding being on the bleeding edge though right?</p>
<h3>Related Content</h3>
<ul>
<li><a href="http://sixrevisions.com/web-development/definitive-guide-to-taming-the-ie6-beast/">Definitive Guide to Taming the IE6 Beast</a></li>
<li><a href="http://sixrevisions.com/web_design/how-to-stay-ahead-of-the-curve-as-a-designer/">How to Stay Ahead of the Curve as a Designer</a></li>
<li><a href="http://sixrevisions.com/web_design/essential-tips-for-designing-an-effective-homepage/">Essential Tips for Designing an Effective Homepage</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/web-development/">Web Development</a> and <a href="http://sixrevisions.com/category/web_design/">Web Design</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/arley_mcblain_small.jpg" alt="" width="80" height="80" /><span class="author-bio"><strong>Arley McBlain</strong> is a web designer, web developer, and Founder/Creative Director of <strong><a href="http://debutcreative.com/">Debut Creative</a></strong> based in Ontario,  Canada. If you&#8217;d like to keep in touch with the author, check out his personal site, <strong><a href="http://arleym.com/">ArleyM</a></strong>, and <a href="http://twitter.com/ArleyM">follow him on Twitter</a> as @<strong><a href="http://twitter.com/ArleyM">ArleyM</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/how-to-design-the-web-in-a-high-def-world/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>10 Drupal Modules You May Not Know About</title>
		<link>http://sixrevisions.com/web-development/10-drupal-modules-you-may-not-know-about/</link>
		<comments>http://sixrevisions.com/web-development/10-drupal-modules-you-may-not-know-about/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 13:00:46 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=1385</guid>
		<description><![CDATA[Most people know about popular modules such as CCK, Views2, Panels, and XML Sitemap. But there are some really great modules that fly under the radar as well.]]></description>
			<content:encoded><![CDATA[<p>One of the great things about <a href="http://www.drupal.org" target="_blank">Drupal</a> is its huge community of developers. <a href="http://www.drupal.org" target="_blank">Drupal.org</a> hosts many, many  modules to extend and enhance your website or application. Most people know  about popular modules such as CCK, Views2, Panels, and XML Sitemap. But there  are some really great modules that fly under the radar as well.</p>
<h3>1. <a href="http://drupal.org/project/securesite" target="_blank">Secure Site</a></h3>
<p><a href="http://drupal.org/project/securesite"><img src="http://images.sixrevisions.com/2009/08/06-01_secure_site.jpg" width="550" height="230" alt="Secure Site" /></a></p>
<p><span id="more-1385"></span></p>
<p>When developing a website, you occasionally show the client  progress. Depending on your setup, you use either an internal development  address, or a subdomain like development.company.com to make it accessible  outside for clients. What if you want to hide it away from prying eyes or  search engines? There have been times when curious people have stumbled across  sites I&#8217;ve worked on by trying subdomains, but this little module will put a  stop to that. <em>Secure Site</em> uses HTTP  authentication and prompts the user for a username and password before  proceeding. It can also be used to secure RSS feeds.</p>
<h3>2. <a href="http://drupal.org/project/ie6update" target="_blank">IE6  Update</a></h3>
<p><a href="http://drupal.org/project/ie6update"><img src="http://images.sixrevisions.com/2009/08/06-02_ie6_update.jpg" width="550" height="230" alt="IE6 Update" /></a></p>
<p>There is a huge push in the design community to wipe IE6 off  the face of the earth. While most believe they should not worry about IE6  compatibility, simply redirect them to Firefox, or block them from viewing the  site entirely, this module offers a more reasonable solution. When enabled,  anyone viewing in IE6 will have a status bar update across the top of the  browser that politely says that they should consider upgrading their browser.</p>
<h3>3. <a href="http://drupal.org/project/masquerade" target="_blank">Masquerade</a></h3>
<p><em>Masquerade</em> lets  you quickly switch between user accounts by entering their name without needing  to know their password. It&#8217;s very helpful for testing the functionality of  modules as different users and roles without using &#8216;test&#8217; accounts. It&#8217;s also  helpful to see what the user is seeing when they report issues with your site.</p>
<h3>4. <a href="http://drupal.org/project/addthis" target="_blank">AddThis</a></h3>
<p>If you have a site with lots of useful content, <em>AddThis</em> adds a button to the bottom of a  node. When you hover on it, it will pop up with options to share the content to  popular sites like Digg, Technorati, Fark, Twitter, or direct email to a  friend. </p>
<h3>5. <a href="http://drupal.org/project/htmlmail" target="_blank">HTML  Mail</a></h3>
<p><a href="http://drupal.org/project/htmlmail"><img src="http://images.sixrevisions.com/2009/08/06-03_html_email.jpg" width="550" height="230" alt="HTML Mail" /></a></p>
<p>By default, any email sent out of the Drupal application is  plain text. As of Drupal 6, there is no setting to change this. If you ever  tried sending an HTML email with Drupal, then you know that it would  effectively kill any style you tried to add. <em>HTML Mail</em> will change the outgoing header types to text/html, and  provide you with htmlmail.tpl.php so you can pretty up and personalize messages  from your system.</p>
<h3>6. <a href="http://drupal.org/project/themekey" target="_blank">ThemeKey</a></h3>
<p>Have you ever had a splash page or path in your website that  isn&#8217;t anything like your site theme? <em>ThemeKey</em> will let you load a different theme for pages or paths.</p>
<h3>7. <a href="http://drupal.org/project/username_check" target="_blank">Username AJAX Check</a></h3>
<p>Ever get tired of registering for a site only to find out the  username you want is already taken? <em>Username  AJAX Check</em> is simple: as you type in a name when registering, it will check  to see if that name is available before submitting the form.</p>
<h3>8. <a href="http://drupal.org/project/views_groupby" target="_blank">Views Group By</a></h3>
<p><a href="http://drupal.org/project/views_groupby"><img src="http://images.sixrevisions.com/2009/08/06-04_views_group_by.png" width="550" height="230" alt="Views Group By" /></a></p>
<p><a href="http://drupal.org/project/views">Views 2</a> is a  fantastic module, however, there are some things it can&#8217;t do such as grouping  using SQL on a field and using COUNT(). Suppose you had a custom view that  showed how many nodes you had of each type or how many users there are of a  particular role. This module will provide that functionality.</p>
<h3>9. <a href="http://drupal.org/project/smtp" target="_blank">SMTP</a></h3>
<p>This nifty module lets you send mail out through an SMTP  server instead of using PHP to send mail. It works with SSL and services like  Gmail. It&#8217;s great when used in conjunction with HTML Mail and other modules  like <a href="http://drupal.org/project/simplenews">Simplenews</a> if you run  newsletters on your Drupal website.</p>
<h3>10. <a href="http://drupal.org/project/job_queue" target="_blank">Job  Queue</a></h3>
<p><a href="http://drupal.org/project/job_queue"><img src="http://images.sixrevisions.com/2009/08/06-05_job_queue.png" width="550" height="230" alt="Job Queue" /></a></p>
<p><em>Job Queue</em> provides  functionality to queue up your cron jobs so they are executed in chunks instead  of all at once, lessening workload on the server. If you are experiencing PHP  timeouts when cron runs, or if you are having issues using Views Bulk Operations,  give Job Queue a try.</p>
<h3>Bonus module</h3>
<p><a href="http://drupal.org/project/multiple_node_menu"><strong>Multiple Node Menu</strong></a> is a newly released and nifty module for working with multiple menu links. Please note that this this module is still experimental, so use it at your own risk.</p>
<h3>Related Content</h3>
<ul>
<li><a href="http://sixrevisions.com/web_design/31-drupal-content-management-system-cms/">CMS  Showcase: 31 Remarkable Drupal Powered Websites</a></li>
<li><a href="http://sixrevisions.com/wordpress/12-essential-security-tips-and-hacks-for-wordpress/">12  Essential Security Tips and Hacks for WordPress</a></li>
<li><a href="http://sixrevisions.com/wordpress/10-wordpress-plugins-guaranteed-to-save-you-time/">10  WordPress Plugins Guaranteed to Save You Time</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/web-development/">Web Development</a>, <a href="http://sixrevisions.com/category/tools/">Tools</a>, and <a href="http://sixrevisions.com/category/wordpress/">WordPress</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/kevin_quillen_small.jpg" alt="" width="80" height="80" /><span class="author-bio-text"><strong>Kevin Quillen</strong> is a professional web designer located in Delaware. He works at <a href="http://www.inclind.com/">Inclind Inc.</a> where his official job title is Internet Architect. Check out his  site &#8211; <strong><a href="http://www.kevinquillen.com/">Kevin Quillen</a></strong> &#8211; where he blogs and hosts his <a href="http://www.kevinquillen.com/?page_id=4"><strong>portfolio</strong></a>. He works with Coldfusion, PHP, SQL, as well as web standards compliant CSS/XHTML.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/10-drupal-modules-you-may-not-know-about/feed/</wfw:commentRss>
		<slash:comments>32</slash:comments>
		</item>
		<item>
		<title>A Guide on Advanced Logging and Benchmarking with FirePHP</title>
		<link>http://sixrevisions.com/web-development/a-guide-on-advanced-logging-and-benchmarking-with-firephp/</link>
		<comments>http://sixrevisions.com/web-development/a-guide-on-advanced-logging-and-benchmarking-with-firephp/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 14:38:03 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=1405</guid>
		<description><![CDATA[In this article, I will introduce you to an old concept that seems to be forgotten by most web developers today: the importance of logging. Additionally, I'll walk you through some of functions designed to keep your logging more organized.]]></description>
			<content:encoded><![CDATA[<p><img src="http://images.sixrevisions.com/2009/08/01-01_advanced_logging_firephp_leading_image.jpg" width="550" height="250" alt="A Guide on Advanced Logging and Benchmarking with FirePHP" /></p>
<p>In <a href="http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/">a  previous article</a>, we discussed FirePHP&#8217;s basic logging functions for debugging  your PHP web applications. Although&#8211;as we have seen&#8211;it can be used for  debugging purposes, its main utility is to log information about your web apps,  and it does a terrific job in that regard.</p>
<p><span id="more-1405"></span></p>
<p>In this article, I will introduce you to an old concept that  seems to be forgotten by most web developers today: the importance of logging. Additionally,  I&#8217;ll walk you through some of functions designed to keep your logging more  organized.</p>
<p>We will talk about:</p>
<ul>
<li>Grouping messages</li>
<li>Tables</li>
<li>Benchmarking your code</li>
</ul>
<p>We&#8217;ll also learn how to redirect trappable PHP errors to  FirePHP, which is a neat and very convenient feature.</p>
<h3>The importance of logging</h3>
<p>While debugging is essential to ensure an application works,  it does not explain why, for example, a user is having trouble subscribing to your  newsletter when other users can.</p>
<p>Logging information will allow you to gather all available  information so that you can trace the user actions in great detail. The more  information you have, the easier it will be to recreate the user actions and  find out why he/she is having problems.</p>
<p>Unfortunately, many web developers tend to disregard logging,  making bug squashing a lot harder.</p>
<p>Taking the newsletter example that I mentioned earlier &#8211; if  you have logged the user input, you might find that he/she is using a new  6-character <a href="http://en.wikipedia.org/wiki/Top-level_domain">top-level  domain</a>, and therefore your email validation routine is failing because of  that. If you had fired up your debugger and fed it your own test data, you probably  would never find the problem without talking to the user and asking for the  data they used. That&#8217;s why it&#8217;s important to log, and the <em>more information</em> you log, <em>the  better</em>.</p>
<p>FirePHP is an excellent logging tool; its only problem is  that its logs are not persistent. It would be great if FirePHP logs could be  redirected to a file for later analysis (we&#8217;ll talk about this in a future  article), but for now we will explore some of the existing features of the FirePHP  library.</p>
<h3>Grouping messages</h3>
<p>There are many situations where it&#8217;s useful to group related  messages together, and FirePHP allows you to do just that.</p>
<p>Groups in FirePHP can be nested; this means that you can  have groups inside other groups and you can expand or contract these groups in  the Firebug console, making it easy to analyze related sets of information.</p>
<p>By default, groups are shown expanded, but that can be  easily changed. You can also change the color of the group label by specifying  a standard HTML color value.</p>
<h4>A hypothetical grouping example</h4>
<p>Groups are useful to keep your logging organized. Let&#8217;s take  a hypothetical site that has the basic four sections that most websites have: a  header, a navigation menu, a content area, and a footer area. You can group  your messages by area so that you can easily find, for example, the navigation  menu log or just the content area log. This way, your log is systematic and  easier to examine.</p>
<p>You have two functions to aid you in dealing with groups.</p>
<ul>
<li><code>Group($groupName)</code> &#8211; <em>starts  a group</em></li>
<li><code>groupEnd()</code> &#8211; <em>ends a  group</em></li>
</ul>
<p>You can customize the group appearance this way:</p>
<pre>Fb::<strong>group</strong>('collapsed blue group',array('Collapsed' =&gt; true, 'Color' =&gt; '#00f'));
</pre>
<p><strong>Note</strong>: Be sure to  use the latest <a href="https://addons.mozilla.org/en-US/firefox/addon/1843">Firebug  version</a> for this to work.</p>
<p>Let&#8217;s see a practical example of group nesting.</p>
<pre>
<strong>//creating a collapsed group named &quot;Navigation Menu&quot; colored green</strong>
fb::<strong>group</strong>('Navigation Menu', array( 'Collapsed' =&gt; true,  'Color' =&gt; '#0f0') );
  //and now a group to hold messages for the home menu
  fb::<strong>group</strong>('Home menu', array( 'Collapsed' =&gt; false,  'Color' =&gt; '#000'));
    //some bogus messages
    fb::info('current menu, added menu-on class');
    fb::warn('no url found for this menu');
  <strong>//closing home menu group</strong>
  fb::<strong>groupEnd()</strong>;
<strong>//closing navigation menu group</strong>
fb::<strong>groupEnd()</strong>;</pre>
<p>You end up with the following result after expanding the  first group.</p>
<p><img src="http://images.sixrevisions.com/2009/08/01-02_nested_groups.png" width="549" height="92" alt="Nested groups." /></p>
<h3>Simple benchmarking</h3>
<p>A functionality missing from FirePHP is the ability to count  elapsed time which can be helpful if you are checking performance issues or are  simply curious on how fast your PHP apps perform.</p>
<p>To help you with benchmarking, you can either extend the FirePHP  class with your own benchmarking scripts, or you can create a simple helper  class.</p>
<p>As we will not talk about extending FirePHP, we will build  the helper class.</p>
<pre>class <strong>fbTimer</strong>{
  protected static $timerStart = 0;
  protected static $timerEnd = 0;
  public static function start(){
    self::$timerStart = microtime();
    self::$timerEnd = 0;
  }

  public static <strong>function stop()</strong>{
    self::$timerEnd =microtime();
  }

  public static <strong>function get</strong>(){
    if(self::$timerEnd == 0) self::stop();
      return self::$timerEnd - self::$timerStart;
    }
  }
// this class is simple to use
<strong>fbTimer</strong>::<strong>start()</strong>;
// some code you want to benchmark
<strong>fbTimer</strong>::<strong>stop()</strong>;
fb::log(&quot;execution time :&quot; . <strong>fbTimer</strong>::<strong>get()</strong> . ' seconds' );
</pre>
<p>Here is the output from the above class and class calls showing the total execution time.</p>
<p><img src="http://images.sixrevisions.com/2009/08/01-03_execution_time.png" width="550" height="57" alt="output from the above class and class calls" /></p>
<h3>Tables</h3>
<p>Another nice way to group related data together are by using  tables.</p>
<p>For FirePHP, a table is an <em>array of arrays</em>. The first array row is automatically used as the  heading, and the number of columns is determined by the number of items in it.</p>
<p>Firebug will display the table label and allow you to show  or hide the table data.</p>
<p>This might sound confusing, but as soon as you see the code,  it will all make sense and you will then realize just how horrible I am with  explaining things.</p>
<p>Let&#8217;s say you want to see the execution time of some queries  &#8211; here&#8217;s an example to use.</p>
<pre>$table   = array();
$table[] = array('Sql query','execution time');
$table[] = array('Select bla from foo where bar =1','0.32');
$table[] = array('Select bla from foo where bar =1','1.76');
$table[] = array('Select bla from foo where bar =1', '0.23');
<strong>fb::table('executed queries', $table)</strong>;</pre>
<p>This will create a collapsible table with all the  information you provided.</p>
<p><img src="http://images.sixrevisions.com/2009/08/01-04_tables.png" width="550" height="117" alt="collapsible table with all the information" /></p>
<h3>Error handling</h3>
<p>Another feature that will help to keep your web pages  uncluttered and secure from accidentally leaking information to the public is  the ability to redirect non-fatal PHP errors to the Firebug console.</p>
<p>You can send Convert <code>E_WARNING</code>, <code>E_NOTICE</code>, <code>E_USER_ERROR</code>, <code>E_USER_WARNING</code>, <code>E_USER_NOTICE</code> and <code>E_RECOVERABLE_ERROR</code> to Firebug automatically.</p>
<pre>$p = new FirePHP();
<strong>// converts errors into exceptions</strong>
$p-&gt;registerErrorHandler();
<strong>// makes FirePHP handle exceptions and sends it to FirePHP</strong>
$p-&gt;registerExceptionHandler();</pre>
<p>Now you should start receiving errors in the Firebug console  instead of in your HTML source code.</p>
<p>Therefore, the following code will redirect errors to Firebug.</p>
<pre>$p = new FirePHP();
$p-&gt;registerErrorHandler();
$p-&gt;registerExceptionHandler();
<strong>// a forced error</strong>
echo &quot;-&quot; . <strong>asd</strong>;</pre>
<p>The above will output:</p>
<p><img src="http://images.sixrevisions.com/2009/08/01-05_user_errors.png" width="550" height="24" alt="output" /></p>
<h3>Conclusion</h3>
<p>I hope that with this article, I&#8217;ve broadened your view on FirePHP  logging features and showed you some tips and techniques on how to make your  logging processes more complete.</p>
<p>Don&#8217;t forget that&#8211;when solving problem &#8211;the more  information you have, the better, because typically error reports from users  and technology support are very broad and lacking information, such as: &quot;there  is a user that can&#8217;t subscribe our newsletter, fix it.&quot;</p>
<h3>What&#8217;s next?</h3>
<p>On a future article, we will discuss a method for filtering  your logs. We&#8217;ll also investigate a way for making logs persistent by storing  them in a file. To make sure you get notified when this article is published,  please <a href="http://feeds2.feedburner.com/SixRevisions">subscribe to the Six  Revisions RSS feed</a>.</p>
<h3>Do you have FirePHP tips?</h3>
<p>If you have tips, tricks, and effective techniques for  utilizing FirePHP, please share them in the comments. *<em>edited by Jacob Gube</em></p>
<h3>Related Content</h3>
<ul>
<li><a href="http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/">How  to Debug PHP Using Firefox with FirePHP</a></li>
<li><a href="http://sixrevisions.com/web-development/10-useful-firefox-extensions-to-supercharge-firebug/">10  Useful Firefox Extensions to Supercharge Firebug</a></li>
<li><a href="http://sixrevisions.com/tools/firefox_web_developer_extension_toolbar/">Awesome  Things That Firefox&#8217;s Web Developer Extension Can Do</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/web-development/">Web Development</a> and <a href="http://sixrevisions.com/category/tools/">Tools</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/nuno_francodacosta_small.jpg" alt="" width="80" height="80" /><span class="author-bio-text"><strong>Nuno  Franco da Costa</strong> is a  web developer and sys admin. By day, he works at a design agency  coordinating the development and sys admin teams where he developed a PHP MVC  framework and a WEB 2 CMS. He loves to code and has a &quot;<em>getting things done</em>&quot;  attitude. You can find over at his online presence <a href="http://www.francodacosta.com/"><strong>www.francodacosta.com</strong></a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/a-guide-on-advanced-logging-and-benchmarking-with-firephp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Definitive Guide to Taming the IE6 Beast</title>
		<link>http://sixrevisions.com/web-development/definitive-guide-to-taming-the-ie6-beast/</link>
		<comments>http://sixrevisions.com/web-development/definitive-guide-to-taming-the-ie6-beast/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 21:54:32 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=1323</guid>
		<description><![CDATA[In this article, we celebrate these last days of IE6 with this definitive guide to taming the IE6 beast.]]></description>
			<content:encoded><![CDATA[<p><img src="http://images.sixrevisions.com/2009/07/25-01_ie6_definitive_lead.jpg" width="550" height="250" alt="Definitive Guide to Taming the IE6 Beast" /></p>
<p>For years, Internet Explorer 6 (IE6) has been the bane of existence for web designers around the world. Designers and users alike have come to enjoy the increasingly predictable, standards-compliant behavior of great modern browsers like Firefox, Opera, and Safari. Meanwhile, IE6 continues to haunt our designs, lurking in dark places while dying a painfully slow, agonizing death. As we await that grand and glorious day when IE6 is as dead as Netscape 4, let us be mindful of the endagered species of users who, for whatever sad reason, continue to torture themselves with that terrible beast of a browser.</p>
<p>      <span id="more-1323"></span></p>
<p>So come now, let us celebrate these last days of IE6 with this definitive guide to taming the IE6 beast.</p>
<blockquote>
<p><em>In this comprehensive article, you&#8217;ll learn some of the best methods for supporting IE6, including proper targeting, specific hacks, image support, box models, floats, and everything in between.</em></p>
</blockquote>
<h3>Use conditional comments to target IE6</h3>
<p>Conditional comments play an important role in getting IE6 to behave. Conditional comments are basically snippets of code that are included in your (X)HTML markup that enable you to target or filter specific versions of Internet Explorer. Here is a conditional comment that targets IE6 with a special message:</p>
<pre>
<strong>&lt;!--[if IE6]&gt;</strong>
  &lt;p&gt;Oops! Looks like you're still using Internet Explorer 6!
     You deserve better!&lt;/p&gt;
<strong>&lt;![endif]--&gt;</strong></pre>
<p>This is an extremely useful method of delivering code and content only to IE6. Other browsers will see this conditional comment as an ordinary (X)HTML comment and simply ignore its contents. Thus, when adapting our web pages for IE6, conditional comments enable us to apply CSS styles directly, without interfering with other browsers. Although conditional comments are a proprietary Microsoft invention, they are arguably the best way to &#8220;hack&#8221; specific versions of Internet Explorer.</p>
<p>The easiest way to use conditional comments to target and apply styles only to IE6 is to include an &#8220;IE6-only&#8221; stylesheet in the <code>&lt;head&gt;</code> section of your web pages:</p>
<pre>
&lt;!--[if IE6]&gt;
  &lt;link rel="stylesheet" href="http://domain.tld/<strong>ie6.css</strong>"
    media="screen" /&gt;
&lt;![endif]--&gt;</pre>
<p>Then, in the <code>ie6.css</code> stylesheet, we place all of the IE6-specific hacks and other trickery that are needed in order to accomodate IE6. This enables us to consolidate our IE6 styles into a single stylesheet that is completely ignored by all other browsers. With this method of applying styles to IE6, there is no need for IE6-specific hacks such as the so-called &#8220;star-HTML&#8221; hack or the underscore hack. Selectors are simply targeted &#8220;as-is&#8221; from within the IE6-only stylesheet.</p>
<p>Of course, conditional comments can do much more than target IE6. By design, they are able to target or filter any version(s) of Internet Explorer for both HTML and XHTML. For more information on conditional comments, these fine articles are highly recommended:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ms537512(VS.85).aspx" title="Microsoft explains conditional comments">Microsoft explains conditional comments</a></li>
<li><a href="http://www.quirksmode.org/css/condcom.html" title="Learn about conditional comments at QuirksMode">Learn more about conditional comments at QuirksMode</a></li>
<li><a href="http://perishablepress.com/press/2007/07/18/wrapping-your-head-around-downlevel-conditional-comments/" title="Wrapping Your Head around Downlevel Conditional Comments">Wrapping Your Head around Conditional Comments</a></li>
</ul>
<h3>Target and filter IE6 with &#8220;in-CSS&#8221; hacks</h3>
<p>Despite the usefulness of conditional comments, there are situations in which you may decide to apply IE6-specific styles from <em>within</em> the stylesheet. A good example of this may happen during site development, when it is more expedient and practical to work with a single stylesheet, in which IE6 styles are located next to &#8220;normal&#8221; styles for easy comparison. Once development is complete, all &#8220;in-CSS&#8221; hacks may be consolidated to an IE6 stylesheet included via conditional comments.</p>
<p>Fortunately, when it comes to IE6, there is no shortage of these in-CSS targeting methods. Over the years, a few of these &#8220;hacks&#8221; have risen to the top of the pile, proving to be extremely useful and effective for targeting IE6. Perhaps the most widely used of these in-CSS techniques is known as the &#8220;star-HTML&#8221; hack:</p>
<pre>
<strong>/* target IE6 */</strong>
<strong>* html</strong> #selector { color: red; }</pre>
<p>While standards-compliant browsers ignore this illogical selector, IE6 treats it as legitimate, even though <code>&lt;html&gt;</code> is the highest element in the document tree. This enables us to apply CSS styles exclusively to IE6 without interfering with other browsers. Best of all, this method of targeting IE6 is completely valid.</p>
<p>There are also cases where we need to <em>hide</em> styles from IE6. The following hack is referred to as the &#8220;child-selector filter,&#8221; and it enables us to apply CSS styles to all browsers <em>except</em> IE6:</p>
<pre>
<strong>/* filter IE6 */</strong>
<strong>html>body</strong> #selector { color: red; }</pre>
<p>This selector is also completely valid, and readily applied by all standards-compliant browsers. It is effective because IE6 simply doesn&#8217;t understand its meaning.</p>
<p>Other useful methods of targeting and filtering IE6 include the <code>!important</code> hack, which is useful when you need to override a property value for IE6:</p>
<pre>
#selector {
  width: 200px <strong>!important</strong>; <strong>/* target other browsers */</strong>
  width: 100px;            <strong>/* target IE6 and lower */</strong>
}</code></pre>
<p>When there are two identical properties for a selctor, IE6 will apply the second property, even if the first property includes the <code>!important</code> directive. Other browsers will of course apply the <code>!important</code> declaration, enabling us to target IE6 with the subsequent rule.</p>
<h3>Enable alpha-transparent PNG support</h3>
<p>One of the most frustrating shortcomings of IE6 is its lack of 32-bit alpha-transparent PNG support. When displaying a 32-bit alpha-transparent PNG, IE6 replaces all transparency with an ugly grey background. Fortunately, this is a well-known and frequently addressed issue for which there are a wide variety of workarounds and solutions.</p>
<p>Apart from avoiding the use of alpha-transparent PNG images altogether, perhaps the simplest way to ensure visual compatibility with IE6 is to stick with fully transparent PNG images, which are fully supported and displayed properly in all browsers, including IE6.</p>
<p>A more practical approach is to apply alpha-transparency via <em>8-bit</em> PNG format rather than the usual 32-bit format. To do so, use a program such as Adobe Fireworks (Photoshop does not work for this purpose), save your alpha-tranparent PNG image in 8-bit format, and then include in your design as usual. 8-bit PNGs may not look quite as good as 32-bit versions, but their alpha-transparency degrades gracefully to full index transparency in IE6. This method enables you to employ alpha-transparency in all modern browsers without getting the ugly grey background in IE6.</p>
<p>Of course, it is also possible to enable IE6-support for 32-bit alpha-transparency. There are many different scripts that enable such functionality, but all of them ultimately rely on a proprietary Microsoft <code>AlphaImageLoader</code> filter that may be included in your CSS file as follows:</p>
<pre>
* html .iepngfix { <strong>behavior: url(iepngfix.htc)</strong>; }</pre>
<p>To make this work, you need to upload <a href="http://perishablepress.com/press/wp-content/online/code/png-fix-required-files.zip" title="Download PNG-fix files from Perishable Press">these two files</a> to the same directory as your CSS file. The first file is a blank <code>gif</code> image, and the second file is an HTC script that provides IE6 (and below) with the functionality required for 32-bit alpha-transparency. This is the most basic implementation of the <code>AlphaImageLoader</code> filter, but more advanced functionality is also possible using a wide variety of freely available scripts. Here are a few of my favorites:</p>
<ul>
<li><a href="http://www.dillerdesign.com/experiment/DD_belatedPNG/" title="Medicine for your IE6/PNG headache!">DD_belatedPNG</a></li>
<li><a href="http://labs.unitinteractive.com/unitpngfix.php" title="Unit PNG Fix">Unit PNG Fix</a></li>
<li><a href="http://www.twinhelix.com/css/iepngfix/" title="TwinHelix' IE PNG Fix">TwinHelix IE PNG Fix</a></li>
<li><a href="http://perishablepress.com/press/2008/05/28/css-hackz-series-png-fix-for-internet-explorer/" title="CSS Hackz Series: PNG Fix for Internet Explorer">Roundup of PNG Fixes for IE</a></li>
</ul>
<h3>Fix the broken box model</h3>
<p>Early versions of Internet Explorer incorrectly interpreted the box model to include borders and padding in the calculation of the content width. For example, consider the following case:</p>
<pre>
div {
  border: 10px solid black;
  padding: 10px;
  height: 100px;
  width: 100px;
}</pre>
<p>In modern browsers, the height and width of this division are each calculated according to W3C specifications as <code>100px + 20px + 20px = 140px</code>. In early versions of IE, however, the height and width are each calculated improperly as <code>100px</code>. This discrepency is responsible for many design inconsistencies between standards-compliant browsers and older versions of Internet Explorer.</p>
<p>Fortunately, the broken box model was addressed in IE6, which is capable of rendering proper widths for web pages that include a complete <code>&lt;!DOCTYPE&gt;</code>. When a complete <code>&lt;!DOCTYPE&gt;</code> is present, IE6 switches to either &#8220;standards-compliant mode&#8221; or &#8220;almost-standards-compliant mode,&#8221; both of which cause IE6 to correctly interpret the box model. Conversely, when a complete <code>&lt;!DOCTYPE&gt;</code> is not included in a web page, IE6 reverts to &#8220;quirks mode&#8221; and interprets the box model incorrectly.</p>
<p>Thus, the box-model problem is easily fixed in IE6 by including a complete <code>&lt;!DOCTYPE&gt;</code> and designing in standards-compliant mode. If you need to work in quirks mode, the next easiest fix is to avoid applying padding or borders on elements for which you have specified a width. You can always apply padding and/or margins to the enclosed elements.</p>
<p>Even with these solutions, there may be situations where it is necessary to control the height and width of specific elements. In these cases, we may use the &#8220;Tan Hack&#8221; to get the job done:</p>
<pre>
#selector {
  border: 10px solid black;
  padding: 10px;
  height: 100px;
  width: 100px;
}
* html #selector {
<strong>  \height</strong>: 140px; <strong>/* targets IE5 and IE6 in quirks mode */</strong>
<strong>  he\ight</strong>: 100px; <strong>/* targets IE6 in standards mode */</strong>
<strong>  \width</strong>: 140px;  <strong>/* targets IE5 and IE6 in quirks mode */</strong>
<strong>  w\idth</strong>: 100px;  <strong>/* targets IE6 in standards mode */</strong>
}</pre>
<p>In the first set of rules, we apply our width and height as normal for all standard-compliant browsers. Then, in the second set of rules, we account for the broken box model in IE5 and IE6 quirks mode by adjusting the values for height and width to include the additonal padding and border widths. That&#8217;s quite a mouthful, so hopefully the code and comments will clarify the technique.</p>
<h3>Fix min-width/max-width and min-height/max-height</h3>
<p>Out of the box, IE6 fails to understand maximum and minimum height and width. This is incredibly sad for designers, as many layout scenarios require these properties to function properly. In modern, standards-compliant browsers, we can use the following CSS to acheive our goals:</p>
<pre>div.max-height {
  max-height: 333px;
}
div.min-height {
  min-height: 333px;
}
div.max-width {
  max-width: 333px;
}
div.min-width {
  min-width: 333px;
}</pre>
<p>Of course, this is <em>waaay tooo</em> easy for Internet Explorer, which completely fails to understand these basic CSS properties. Fortunately, IE supports its own, proprietary <code>expression</code> attribute, which enables us to use JavaScript expressions to manipulate (X)HTML document properties such as max/min-width and max/min-height. For example, to specify a width property value via the <code>expression</code> attribute, we could use this:</p>
<pre>
div {
  width: <strong>expression</strong>(333 + "px");
}</pre>
<p>..Which is equivalent to this:</p>
<pre>
div {
  width: 333px;
}</pre>
<p>There are two downsides to using IE&#8217;s <code>expression</code> attribute. First, as expressions are essentially JavaScript, they fail when JavaScript is disabled (or otherwise missing) in the user&#8217;s browser. Second, use of CSS expressions for min/max properties is very resource intensive and may negatively impact browser performance. Nonetheless, the setting of max/min-widths/heights remains an important tool in the web designer&#8217;s toolbox. With that in mind, here are some useful CSS expressions enabling complete min/max functionality in IE6.</p>
<h4>max-width</h4>
<pre>
<strong>/* max-width for IE6 */</strong>
* html div.max-width {
  width: expression(document.body.clientWidth > 776 ? "777px" : "auto");
}
<strong>/* max-width for standards-compliant browsers */</strong>
div.max-width {
  max-width: 777px;
}</pre>
<h4>min-width</h4>
<pre>
<strong>/* min-width for IE6 */</strong>
* html div.min-width {
  width: expression(document.body.clientWidth < 334 ? "333px" : "auto");
}
<strong>/* min-width for standards-compliant browsers */</strong>
div.min-width {
  min-width: 333px;
}</pre>
<h4>max-height</h4>
<pre>
<strong>/* max-height for IE6 */</strong>
* html div.max-height {
  height: expression(this.scrollHeight > 332 ? "333px" : "auto");
}
<strong>/* max-height for standards-compliant browsers */</strong>
div.max-height {
  max-height: 333px;
}</pre>
<h4>min-height</h4>
<p>Fortunately, we can skip the crazy JavaScript/CSS expressions when applying minimum height in IE6. Thanks to <a href="http://www.dustindiaz.com/min-height-fast-hack/" title="Min-Height Fast Hack">Dustin Diaz</a>, we can set <code>min-height</code> in IE6 with this morsel of valid CSS:</p>
<pre>
<strong>/* min-height for IE6 */</strong>
div.min-height {
  min-height: 500px;
  height: auto <strong>!important</strong>;
  height: 500px;
}</pre>
<h3>Kill the double margin bug</h3>
<p>Most web designers who have been designing sites for awhile are familair with IE6&#8217;s &#8220;doubled floated-margin bug.&#8221; This nasty bug rears its ugly head whenever you float an element (such as a <code>&lt;div&gt;</code>) in one direction and then apply a margin in that same direction. For example, if we do this:</p>
<pre>
div {
  float: right;
  margin-right: 10px;
}</pre>
<p>..IE6 will (usually) <em>double</em> the size of the margin to <code>20px</code> for no apparent reason whatsoever. Needless to say, this double-margin bug has wrecked many a fine web design, causing much pain and distress along the way.</p>
<p>Fortunately, this bug is easy to kill. Simply change the display type of the floated element from <code>block</code> to <code>inline</code>, like so:</p>
<pre>
div#selector {
  float: right;
  margin-right: 10px;
}
* html div#selector {
  display: inline; <strong>/* kill double-margin bug */</strong>
}</pre>
<p>This solves the double-margin bug 99% of the time without issue. For those rare, unexplainable cases where this fix <em>doesn&#8217;t</em> work, you may need to workaround the issue by removing the margin and applying padding to either the parent element or to the floated element itself.</p>
<h3>Clear your floats</h3>
<p>Clearing floats is another common layout challenge, not only for IE6, but for many modern browsers. In a perfect world, an element that contains a floated element enlcoses that element entirely. In the imperfect world of web browsers, however, floats are frequently <em>not</em> entirely closed. When this happens, we say that the floated element has not been &#8220;cleared&#8221; by its parent element. Fortunately, there are several easy ways to clear your floats in IE6 and other browsers as well.</p>
<p>One of the oldest ways to clear your floats is to use the <a href="http://perishablepress.com/press/2008/02/05/lessons-learned-concerning-the-clearfix-css-hack/" title="Lessons Learned Concerning the Clearfix CSS Hack • Perishable Press">clearfix hack</a>. This CSS technique works by generating content after the parent element using the CSS <code>:after</code> pseudo-class. The generated content then serves to clear the floated element. Here is a typical example:</p>
<pre>
.clearfix<strong>:after</strong> {
  content: " ";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}

.clearfix { display: inline-table; }

<strong>/* Hides from IE-mac \*/</strong>
* html .clearfix {height: 1%;}
.clearfix { display: block; }
<strong>/* End hide from IE-mac */</strong></pre>
<p>To use this method to clear your floats, place it into your CSS file and change all instances of <code>.clearfix</code> to the selector of the element that needs to clear its floated ancestors.</p>
<p>Another CSS method of clearing your floats is to simply float the container element. For example, if you float an image within a container <code>&lt;div&gt;</code> that fails to enclose it, simply apply the following CSS:</p>
<pre>
div {
  float: left;
}</pre>
<p>Then, if the containing element needs to behave as a regular block element, apply a width of 100% to force a line-break before the next element:</p>
<pre>
div {
  float: left;
  width: 100%;
}</pre>
<p>So far so good, but there is an even <em>better</em> method of clearing your floats. By simply applying an <code>overflow</code> value to the container <code>&lt;div&gt;</code>, it will automatically expand vertically and clear its floated children. Here is an example:</p>
<pre>
div.container {
  overflow: hidden;
  width: 100%;
}</pre>
<p>The <code>width</code> declaration is required for Internet Explorer and Opera, but it doesn&#8217;t need to be set at <code>100%</code>; rather, you may use any width and unit of measure that is needed. If you don&#8217;t want to specify a <code>width</code>, you may specify a <code>height</code> instead. For the <code>overflow</code> property, you may use any of the following three values:</p>
<ul>
<li><code>auto</code> &#8211; display scrollbars if content exceeds specified width</li>
<li><code>hidden</code> &#8211; never display scrollbars even if content exceeds width</li>
<li><code>scroll</code> &#8211; always display scrollbars, even if they&#8217;re not necessary</li>
</ul>
<p>As well as this method works for clearing floated elements, there are cases where the <code>overflow</code> property can interfere with other aspects of the design. If this should occur, you may want to try limiting the scope of the overflow by using <code>overflow-x:hidden;</code> or <code>overflow-y:hidden;</code>. And remember, the <code>width</code> property may be replaced by <code>height</code>.</p>
<h3>Fix other common IE6 problems</h3>
<p>Wrapping things up, let&#8217;s run through a few other problems commonly experienced with IE6. These issues and their corresponding fixes are fairly straightforward, so I will spare you the lengthy diatribe and jump straight to the point. Keep in mind as you continue through this article that you should relocate and consolidate any IE6-specific hacks into an IE6-specific stylesheet, which should be included via conditional comments (see first section, above).</p>
<h4>Fix relative positioning</h4>
<p>Using <code>position:relative</code> in your designs is perhaps the easiest way to mess things up in IE6. Modern browsers display relatively positioned nested elements without issue, but IE6 frequently chokes up on even slightly complicated layouts. Fortunately, the solution is as easy as triggering <code>hasLayout</code> by adding <code>zoom:1;</code> to each relatively positioned element:</p>
<pre>
.selector {
  <strong>position: relative</strong>;
}
* html .selector {
  <strong>zoom: 1</strong>;
}</pre>
<p>Note that you should not apply <code>zoom:1;</code> to any inline elements. Doing so will cause IE6 to treat them as block elements. Keep this in mind for the following solutions as well.</p>
<h4>Fix negative margins</h4>
<p>Negative margins are useful in a variety of scenarios, and most browsers handle them with no problem whatsoever. Unfortunately, IE6 doesn&#8217;t like negative margins unless you apply relative positioning to the target element:</p>
<pre>
.selector {
  margin: <strong>-1.5em</strong>;
}
* html .selector {
  position: relative;
  zoom: 1;
}</pre>
<p>Note the addition of the <code>zoom:1;</code> declaration, which is required because of the relative positioning. Ain&#8217;t IE great?</p>
<h4>Fix overflow problems</h4>
<p>Using the <code>overflow</code> in IE6 will sometimes lead to unexpected, unexplainable display issues. Fortunately, we can resolve many <code>overflow</code>-related display problems by triggering <code>hasLayout</code> via &#8212; yep, you guessed it &#8212; <code>zoom:1;</code>. Here is an example:</p>
<pre>
.selector {
  overflow: hidden
}
* html .selector {
  <strong>zoom: 1</strong>;
}</pre>
<p>Another strange <code>overflow</code>-related issue is observed when <code>font-style:italic;</code> expands the width of its parent element. Thankfully, this nuance is easily resolved by applying the following CSS to the parent element:</p>
<pre>
* html .selector {
  overflow-x: hidden;
}</pre>
<h4>Line up floated elements</h4>
<p>When you float elements of a fixed width, they will align themselves horizontally to fit the width of the parent element. At least, that&#8217;s how it works in most browsers. In IE6, the floated items will not be displayed in a straight line, but rather will appear to <a href="http://css-tricks.com/prevent-menu-stepdown/" title="Prevent Menu 'Stepdown'">stepdown</a> in bizarre, staircase-like fashion. Fortunately, there are two ways to fix this issue. The first is to apply a <code>line-height:0;</code> declaration to the parent element:</p>
<pre>
.selector {
  float: left;
  width: 100px;
  clear: none;
}
* html .selector {
  <strong>line-height: 0</strong>;
}</pre>
<p>Alternately, you may prevent stepdown by applying a <code>display:inline;</code> declaration to the floated elements:</p>
<pre>
.selector {
  float: left;
  width: 100px;
  clear: none;
}
* html .selector {
  <strong>display: inline</strong>;
}</pre>
<h4>Fix your list items</h4>
<p>Lastly, if IE6 decides to add an extra set of list items (<code>&lt;li&gt;</code>) after your list (<code>&lt;ul&gt;</code>), adding an HTML comment has been known to magically resolve the issue. Here is what your source code will look like before and after applying the fix:</p>
<h4><em>Before:</em></h4>
<pre>
&lt;ul&gt;
  &lt;li&gt;Firefox&lt;/li&gt;
  &lt;li&gt;Opera&lt;/li&gt;
  &lt;li&gt;Safari&lt;/li&gt;
  &lt;li&gt;Internet Explorer&lt;/li&gt;
  &lt;/ul&gt;
&lt;li&gt;Internet Explorer&lt;/li&gt;
&lt;li&gt;Internet Explorer&lt;/li&gt;</pre>
<h4><em>After:</em></h4>
<pre>
&lt;ul&gt;
  &lt;li&gt;Firefox&lt;/li&gt;
  &lt;li&gt;Opera&lt;/li&gt;
  &lt;li&gt;Safari&lt;/li&gt;
  &lt;li&gt;Internet Explorer&lt;/li&gt;
  <strong>&lt;-- IE6 fix --&gt;</strong>
&lt;/ul&gt;</pre>
<h3>In Closing</h3>
<p>With the CSS tricks described in this article, you are well-equipped to tame the IE6 beast and get it to behave when displaying your web pages. When it&#8217;s time to make your next design compatible with IE6, refer to this definitive guide for clear explanations and solutions for the most common IE6 issues. And of course, if you&#8217;ve got more tricks, ideas, comments, or questions, be sure to sound off in the comments section!</p>
<h3>Related content</h3>
<ul>
<li><a href="http://sixrevisions.com/javascript/javascript-debugging-techniques-in-ie-6/">JavaScript Debugging Techniques in IE 6</a></li>
<li><a href="http://sixrevisions.com/project-management/adopting-a-does-it-really-matter-philosophy/">Adopting a &quot;Does It Really Matter?&quot; Philosophy</a></li>
<li><a href="http://sixrevisions.com/css/20-useful-resources-for-learning-about-css3/">20 Useful Resources for Learning about CSS3</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/css/">CSS</a> and <a href="http://sixrevisions.com/category/web-development/">Web Development</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/jeff-starr_small.jpg" alt="" width="80" height="80" /><span class="author-bio-text"><strong>Jeff Starr</strong> is a web-developing, graphic-designing alien from the distant planet <a href="http://perishablepress.com/" title="Perishable Press: Digital Design and Dialogue">Perishable Press</a>. When he&#8217;s not flying through hyperspace, Jeff uses his alien powers to write <a href="http://diggingintowordpress.com/" title="Digging into WordPress">amazing stuff about WordPress</a> and design <a href="http://monzilla.biz/" title="Monzilla Media: Obsessive Web and Graphic Design">awesome websites for humans</a>. Jeff comes in peace, so don&#8217;t be afraid to <a href="http://twitter.com/perishable" title="Jeff Starr (aka Perishable) on Twitter">follow him on Twitter</a>.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/definitive-guide-to-taming-the-ie6-beast/feed/</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>How to Debug PHP Using Firefox with FirePHP</title>
		<link>http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/</link>
		<comments>http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 10:20:21 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=1234</guid>
		<description><![CDATA[This article shares an elegant, simple, and more maintainable way of debugging Ajax apps via the web browser (more specifically for the Mozilla Firefox browser). You'll learn the basics of leveraging Firefox in conjunction with Firebug and FirePHP to implement FirePHP libraries on web apps and logging messages in the Firebug console.]]></description>
			<content:encoded><![CDATA[<p>Typically, there are two main ways of debugging server-side  code: you can utilize an Integrated Development Environment (IDE) with a built-in  debugger or log and perform your debugging processes in a web browser.</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-01_debug_firephp_leading_image.jpg" width="550" height="250" alt="How to Debug PHP Using Firefox with FirePHP" /></p>
<p><span id="more-1234"></span></p>
<p>This article shares an <strong>elegant,  simple, and more maintainable way of debugging Ajax apps</strong> via the web browser (more  specifically for the <strong>Mozilla Firefox</strong> browser). You&#8217;ll learn the basics of leveraging Firefox in conjunction with Firebug  and FirePHP to implement FirePHP libraries on web apps and logging messages in  the Firebug console.</p>
<h3>A Brief Introduction</h3>
<p>When Ajax techniques became popular,  developers faced a new problem: how can we debug Ajax requests and responses efficiently for  complex web applications? If using a debugger was hard enough with the RESTful  model, triggering an Ajax-specific request is a pain and a bit more difficult;  dumping logs and information pertaining to those Ajax operations had to be done using JSON or  XML.</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-02_preview.png" width="549" height="158" alt="A Brief Introduction" /></p>
<p>This is where <em>FirePHP helps</em>,  allowing you to log your debugging messages to the Firebug console. FirePHP  doesn&#8217;t mess with your code (and it doesn&#8217;t require you to modify anything to  trap errors): the messages you print are sent to the browser in the HTTP  response headers, which is great when you&#8217;re using JSON or XML since it won&#8217;t  break their encoding.</p>
<p>This makes FirePHP ideal not only for debugging your Ajax requests, but also  your entire PHP codebase.</p>
<h3>So, what is FirePHP?</h3>
<p><a href="http://www.firephp.org/">FirePHP</a> is an add-on  for an add-on: it extends the popular in-browser web development tool called <a href="http://getfirebug.com/">Firebug</a> with an API for PHP web application  developers. FirePHP is <em>free</em> and  easily attainable via the <a href="https://addons.mozilla.org/en-US/firefox/addon/6149">Mozilla Add-Ons</a> section on the official Mozilla site. The official FirePHP site can be found  via this web address: <a href="http://www.firephp.org/">www.firephp.org</a>. <a href="http://www.christophdorn.com/AboutMe/">Christoph Dorn</a> is the person  responsible for creating FirePHP.</p>
<h3>What Do I Need to Get Started?</h3>
<p>As you might have guessed, you need three things to get up  and running with FirePHP, they are:</p>
<ol>
<li><a href="http://www.mozilla.com/en-US/firefox/">Firefox</a></li>
<li><a href="http://getfirebug.com/">Firebug</a></li>
<li><a href="http://www.firephp.org/">FirePHP</a></li>
</ol>
<p>If you don&#8217;t have all of the above applications installed on  your machine, click on their link to learn about how to download them for your  particular system.</p>
<p>Installation of the three things above is a straightforward  process. FirePHP can be a little tricky to install if you&#8217;ve just recently  started learning about web development, but there&#8217;s <a href="http://www.firephp.org/HQ/Install.htm">good documentation out there</a> about it.</p>
<p>This article is about using FirePHP, so I&#8217;ll let you handle  the installation part (though feel free to ask in the comments &#8211; we&#8217;d be happy  to help if you encounter issues).</p>
<h3>A Couple of Tips</h3>
<p>Once you&#8217;ve installed FirePHP, and included it in your web  application, you are ready to debug and log data. But first, I&#8217;d like to share  two helpful tips I&#8217;ve learned:</p>
<h4>Tip #1: call ob_start()</h4>
<p>Because the information is sent to Firebug in the HTTP Headers,  you should activate the output buffering or you might get the &quot;headers  already sent error&quot;. It may sound complicated, but all you have to do is  write <a href="http://www.php.net/ob_start">ob_start()</a> on the first line of  your PHP script that you&#8217;re debugging.</p>
<h4>Tip #2: don&#8217;t forget to disable FirePHP Logging when you go live</h4>
<p>You have to disable FirePHP when the site goes live or you  will risk exposing sensitive information to anyone that has Firebug/FirePHP  installed (we&#8217;ll talk about how to do this later down the article).</p>
<p>And then just a general tip for Firebug/FirePHP users: it&#8217;s  also a good idea to disable or suspend Firebug and FirePHP when you&#8217;re just  browsing the web because they can really slow down some websites and web  applications (such as Gmail, for example).</p>
<h3>Getting Started with FirePHP Logging</h3>
<p>This is the fun part where we start logging messages and reviewing  the basic logging functions.</p>
<p>One thing to note is that, just like PHP, which (at least  for PHP4 and PHP5) is a &quot;<em>pseudo</em> object-oriented&quot; language, you can use FirePHP in a procedural or object-oriented  (abbreviated <strong>OO</strong> from now on) manner. </p>
<p>I prefer the object-oriented techniques and I encourage you  to use the same pattern as it is considered the most popular and most modern approach  to building apps.</p>
<p>The <em>OO API</em> allows  you to instantiate a Firebug object to use it or to call its static methods  directly. I’m a lazy guy and because static methods are more terse and require  less typing, that&#8217;s what I use.</p>
<h4>Instantiating the OO API Object</h4>
<p>In your script, you can use the following code block to  create the FirePHP object ($firephp).</p>
<pre>require_once('FirePHPCore/FirePHP.class.PHP');
$firephp = FirePHP::getInstance(true);
$firephp -&gt; <strong>[classmethod]</strong></pre>
<h4>OO API with Static Methods</h4>
<p>This is the format for calling static methods in your  scripts.</p>
<pre>require_once('FirePHPCore/fb.PHP');
FB::<strong>[nameofmethod]</strong>
</pre>
<h4>The Procedural API</h4>
<p>Here&#8217;s how to use FirePHP&#8217;s Procedural API:</p>
<pre>require_once('FirePHPCore/fb.PHP');
fb($var)
fb($var, 'Label')
fb($var, FirePHP::<strong>[nameofmethod]</strong>)</pre>
<p>We will not get into any detail about the benefits and  coding style of each API, I’ve included them here only so you see what options  are available for you. In other words, I don&#8217;t want to start a flame war about  which procedure is better &#8211; it&#8217;s up to you to decide and I&#8217;ve noted my  preference.</p>
<h3>Logging Messages and Information in the Firebug Console</h3>
<p>Let&#8217;s talk about logging messages in the Firebug console  (remember, this will only work if you&#8217;ve configured your app for FirePHP).</p>
<h4>Examples of Basic Logging Calls</h4>
<p>If you are ad-hoc debugging a bug, the following examples  are what you&#8217;ll be interested in utilizing. </p>
<pre>Fb::log(&quot;<strong>log message</strong>&quot;)</pre>
<p>This will print a string that you pass to it onto the  Firebug console. Using the above example results in the following message:</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-03_log-msg.png" width="548" height="25" alt="Log message." /></p>
<pre>Fb::log(<strong>$array</strong>, &quot;<strong>dumping an array</strong>&quot;)</pre>
<p>Passing an array (no more for loops or print_r() in your scripts) outputs the  content of your array. The above example will result in the following message in the Firebug console:</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-04_dump-msg.png" width="548" height="25" alt="Dump message array" /></p>
<p><strong>Tip</strong>: when you  hover your mouse on logged variables in the Firebug console, an info window  will appear in the web page containing all of its elements. It&#8217;s a nifty  feature, don&#8217;t you agree?</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-05_variable-viewer.png" width="500" height="277" alt="Variable Viewer" /></p>
<h4>Logging an Information Message</h4>
<p>Here is an example of logging information messages using the  info method.</p>
<pre>Fb::info(&quot;<strong>information</strong>&quot;)</pre>
<p>This is the message it logs in your Firebug console:</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-06_info-msg.png" width="548" height="25" alt="info message." /></p>
<h4>Logging a Warning Message</h4>
<p>Here is an example of logging a warning message.</p>
<pre>Fb::warn(&quot;<strong>this is a warning</strong>&quot;)</pre>
<p>This is the message it logs in your Firebug console:</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-07_warning-msg.png" width="548" height="25" alt="Warning message" /></p>
<h4>Logging an Error Message</h4>
<p>Here is an example of logging a warning message using the  info method.</p>
<pre>Fb::error(&quot;<strong>error message</strong>&quot;)
</pre>
<p>Here&#8217;s what an error message looks like in the Firebug console:</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-08_error-msg.png" width="548" height="25" alt="Error message." /></p>
<h3>Enabling or Disabling FirePHP Logging</h3>
<p>When your site goes live, you can (and should) disable  FirePHP logging. Call the following line of code on the first lines of your  script.</p>
<pre>FB::setEnabled(<strong>false</strong>);</pre>
<p>What&#8217;s great about this is that you can leave all of your  FirePHP code in your scripts for later use &#8211; just pass either <code>true</code> or <code>false</code>  when you want to turn logging on or off.</p>
<p>If your application uses a &quot;<a href="http://en.wikipedia.org/wiki/Configuration_file">config file</a>&quot; to  keep track of global settings, it is advisable to set a configuration option to  enable or disable it.</p>
<h3>Conclusion</h3>
<p>First, here&#8217;s a screen capture showing all of our messages  in Firebug all at once (I ran it sequentially).</p>
<p><img src="http://images.sixrevisions.com/2009/07/10-09_console-demo.png" width="285" height="125" alt="Conclusion: all together now" /></p>
<p>In this article, we covered the very basics of using FirePHP  to help you debug and gain information about your PHP/Ajax applications easier  and through the web browser. I hope that this results in you becoming convinced  that you should explore your debugging options outside of  &quot;old-school&quot; techniques such as using echo or print  on top of your web page layout to see what a variable or array contains. Using FirePHP  is so easy and convenient, and gives you much more options and data for  debugging purposes.</p>
<p>In a <em>future article</em>, I&#8217;ll be covering <strong>more complex features  of FirePHP and using Firebug</strong> to make this simple debugging tool a more <em>robust and fully-featured logging framework</em>.</p>
<p>So stick around, don&#8217;t forget to subscribe to the <strong><a href="http://feeds2.feedburner.com/SixRevisions">Six Revisions RSS feed</a></strong> so you get a note when that article is posted. * <em>Article edits by Jacob Gube</em></p>
<h3>Related content</h3>
<ul>
<li><a href="http://sixrevisions.com/web-development/four-ways-ruby-on-rails-can-help-you/">Four  Ways Ruby on Rails Can Help You</a></li>
<li><a href="http://sixrevisions.com/tutorials/web-development-tutorials/using-xampp-for-local-wordpress-theme-development/">Using  XAMPP for Local WordPress Theme Development</a></li>
<li><a href="http://sixrevisions.com/ajax/ajax_techniques/">25  Excellent Ajax Techniques and Examples</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/ajax/">Ajax</a>, <a href="http://sixrevisions.com/category/web-development/">Web Development</a>,  and <a href="http://sixrevisions.com/category/tools/">Tools</a></li>
</ul>
<h3>About the Author</h3>
<p class="about-author"><img src="http://images.sixrevisions.com/authors/nuno_francodacosta_small.jpg" alt="" width="80" height="80" /><span class="author-bio-text"><strong>Nuno  Franco da Costa</strong> is a  web developer and sys admin. By day, he works at a design agency  coordinating the development and sys admin teams where he developed a PHP MVC  framework and a WEB 2 CMS. He loves to code and has a &quot;<em>getting things done</em>&quot;  attitude. You can find over at his online presence <a href="http://www.francodacosta.com/"><strong>www.francodacosta.com</strong></a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/how-to-debug-php-using-firefox-with-firephp/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<item>
		<title>10 Useful Firefox Extensions to Supercharge Firebug</title>
		<link>http://sixrevisions.com/web-development/10-useful-firefox-extensions-to-supercharge-firebug/</link>
		<comments>http://sixrevisions.com/web-development/10-useful-firefox-extensions-to-supercharge-firebug/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 18:13:35 +0000</pubDate>
		<dc:creator>Jacob Gube</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://sixrevisions.com/?p=1117</guid>
		<description><![CDATA[Though Firebug is already fully packed with features out of the box, several extensions out there can enhance its utility. In this article, you will find the 10 best Firefox extensions for Firebug that will make your life, as a developer or designer, easier.]]></description>
			<content:encoded><![CDATA[<p><a href="http://getfirebug.com/">Firebug</a> is a  revolutionary Firefox extension that helps web developers and designers test  and inspect front-end code. It provides us with many useful features such as a  console panel for logging information, a DOM inspector, detailed information  about page elements, and much more.</p>
<p>Though Firebug is already fully packed with features out of  the box, several extensions out there can enhance its utility. In this article,  you will find <strong>the 10 best Firefox  extensions for Firebug</strong> that will make your life, as a developer or designer,  easier. </p>
<h3>1. <a href="http://www.pixelperfectplugin.com/">Pixel Perfect</a></h3>
<p><a href="http://www.pixelperfectplugin.com/"><img src="http://images.sixrevisions.com/2009/06/23-01_pixelperfect.png" width="550" height="270" alt="Pixel Perfect" /></a></p>
<p><span id="more-1117"></span></p>
<p><em>Pixel Perfect</em> allows you to overlay web layouts and other design compositions onto a web page  so that you can accurately (and easily) write your CSS and HTML. By being able  to toggle a web composition on or off, web developers and designers can have a  visual guide for pixel-perfect accuracy of the position and dimensions of web  page components. Check out the <a href="http://pixelperfectplugin.com/how-to-use/video/" title="Video: Pixel Perfect Firefox Extension">video demonstration</a> to Pixel  Perfect in action.</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/downloads/latest/7943">Install  Pixel Perfect</a></li>
</ul>
<h3>2. <a href="http://code.google.com/speed/page-speed/">Page  Speed</a></h3>
<p><a href="http://code.google.com/speed/page-speed/"><img src="http://images.sixrevisions.com/2009/06/23-02_pagespeed.png" width="550" height="270" alt="Page Speed" /></a></p>
<p><em>Page Speed</em> is an  open source Firebug add-on for evaluating web page performance, giving  developers suggestions on front-end performance optimizations they can carry  out. Tests and evaluations are based on Google&#8217;s <a href="http://code.google.com/speed/page-speed/docs/rules_intro.html">Web  Performance Best Practices</a> developed through <a href="http://www.amazon.com/gp/product/0596529309?ie=UTF8&amp;tag=stevsoud-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596529309">Steve  Sounder&#8217;s work</a>. Make sure to read the <a href="http://code.google.com/speed/page-speed/docs/using.html">Page Speed user  guide</a> for complete documentation of its many features.</p>
<ul>
<li><a href="https://dl-ssl.google.com/page-speed/current/page-speed.xpi">Install Page  Speed</a></li>
</ul>
<h3>3. <a href="http://tools.sitepoint.com/codeburner/">CodeBurner</a></h3>
<p><a href="http://tools.sitepoint.com/codeburner/"><img src="http://images.sixrevisions.com/2009/06/23-03_codeburner.png" width="550" height="270" alt="CodeBurner" /></a></p>
<p><em>CodeBurner</em>,  released by <a href="http://www.sitepoint.com/">SitePoint</a>, extends Firebug  to provide a built-in HTML and CSS reference. The extension also presents  contextual information based on what is currently in Firebug&#8217;s CSS and HTML  panels. The references are very helpful, showing you information about browser  compatibility and W3C Recommendation compliance of page elements, among many  other types of information.</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/downloads/latest/10273">Install  CodeBurner</a></li>
</ul>
<h3>4. <a href="http://firerainbow.binaryage.com/">FireRainbow</a></h3>
<p><a href="http://firerainbow.binaryage.com/"><img src="http://images.sixrevisions.com/2009/06/23-04_firerainbow.png" width="550" height="270" alt="FireRainbow" /></a></p>
<p><em>FireRainbow</em> is a  simple Firebug extension that fills in a sorely desired function: code syntax  highlighting. FireRainbow colorizes JavaScript, CSS, and HTML for improved  readability of code being reviewed or inspected in Firebug. There are currently  over 20 different <a href="http://github.com/darwin/firerainbow/tree/master/themes">FireRainbow  themes</a> that you can choose from, giving you some options for customization.</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/downloads/file/53758/firerainbow-1.0-fx.xpi?confirmed">Install  FireRainbow</a></li>
</ul>
<h3>5. <a href="http://robertnyman.com/inline-code-finder/">Inline  Code Finder</a></h3>
<p><a href="http://robertnyman.com/inline-code-finder/"><img src="http://images.sixrevisions.com/2009/06/23-05_inline_code.png" width="550" height="270" alt="Inline Code Finder" /></a></p>
<p><em>Inline Code Finder</em> is great for hunting down inline JavaScript and CSS and is perfect for  developers refactoring existing markup to separate structure (HTML) from style  (CSS) and function (JavaScript). The usage of the tool is simple: it searches  the entire web page for inline code and provides the developer with contextual  information about the inline code it finds. The <a href="http://robertnyman.com/2009/02/05/new-version-of-inline-code-finder-with-event-filtering-and-a-download-record/">newest  version</a> gives you the ability to filter certain groups of inline code.</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/downloads/latest/9641/addon-9641-latest.xpi">Install  Inline Code Finder</a></li>
</ul>
<h3>6. <a href="http://www.softwareishard.com/blog/firecookie/">Firecookie</a></h3>
<p><a href="http://www.softwareishard.com/blog/firecookie/"><img src="http://images.sixrevisions.com/2009/06/23-06_firecookie.png" width="550" height="270" alt="Firecookie" /></a></p>
<p>Developing web applications that utilize cookies can be  time-consuming. <em>Firecookie</em>, a Firebug  extension, gives you a host of options and features strictly for working with  cookies. The extension allows you to view, inspect, export, and manage cookies,  log cookie events (creation, deletion, etc.), and much more. The <a href="http://www.softwareishard.com/blog/firecookie/firecookie-05-beta/">latest  version</a> of Firecookie adds several improvements such as the ability to list  only cookies sourcing from a subdomain.</p>
<ul>
<li><a href="http://www.softwareishard.com/firecookie/archive/firecookie-0.8.xpi">Install  Firecookie</a></li>
</ul>
<h3>7. <a href="http://www.zachleat.com/web/2007/04/18/javascript-code-coverage-tool-for-firebug/">FirebugCodeCoverage</a></h3>
<p><a href="http://www.zachleat.com/web/2007/04/18/javascript-code-coverage-tool-for-firebug/"><img src="http://images.sixrevisions.com/2009/06/23-07_codecoverage.png" width="550" height="270" alt="FirebugCodeCoverage" /></a></p>
<p><em>FirebugCodeCoverage</em> is a benchmarking Firebug extension inspired by <a href="http://seleniumhq.org/projects/ide/">Selenium IDE</a> for determining the  percentage of your code being executed for time duration, known as <a href="http://en.wikipedia.org/wiki/Code_coverage">code coverage</a>. This is  typically measured during automated testing to see how well the test cases are  able to thoroughly test your code (with higher percentages being your goal).</p>
<ul>
<li><a href="http://www.zachleat.com/Projects/firebugCodeCoverage/FirebugCodeCoverage-0.1.xpi">Install  FirebugCodeCoverage</a></li>
</ul>
<h3>8. <a href="http://sensational-seo.com/">SenSEO</a></h3>
<p><a href="http://sensational-seo.com/"><img src="http://images.sixrevisions.com/2009/06/23-08_senseo.png" width="550" height="270" alt="SenSEO" /></a></p>
<p><em>SenSEO</em> is a  Firebug extension that analyzes a web page and indicates how well it is doing  for single-page whitehat search engine optimization. The extension checks for  correct use of meta tags, presence of a title, headings, and other relevant  criterions for optimal search engine optimization.</p>
<ul>
<li><a href="http://sensational-seo.com/download/senseo.xpi">Install SenSEO</a></li>
</ul>
<h3>9. <a href="http://developer.yahoo.com/yslow/">Yahoo! YSlow</a></h3>
<p><a href="http://developer.yahoo.com/yslow/"><img src="http://images.sixrevisions.com/2009/06/23-09_yslow.png" width="550" height="270" alt="Yahoo! YSlow" /></a></p>
<p><em>YSlow</em> evaluates a  web page for performance and suggests potential places for improvements. YSlow  is based on YDN&#8217;s <a href="http://developer.yahoo.com/performance/rules.html">Best  Practices for Speeding Up Your Web Site</a> and gives you letter grades on one  of the three predefined (or user-defined) rule sets. It has a handful of useful  features such as displaying information and statistics about web page  components, and integration of optimization tools such as <a href="http://jslint.com/">JSLint</a> and <a href="http://developer.yahoo.com/yslow/smushit/index.html">Smush.it</a>.</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/downloads/latest/5369/addon-5369-latest.xpi">Install  YSlow</a></li>
</ul>
<h3>10. <a href="http://robertnyman.com/firefinder/">Firefinder</a></h3>
<p><a href="http://robertnyman.com/firefinder/"><img src="http://images.sixrevisions.com/2009/06/23-10_firefinder.jpg" width="550" height="270" alt="Firefinder" /></a></p>
<p><em>Firefinder</em> is for  quickly finding web page elements that match CSS or Xpath selectors that you  input as your search criteria. Firefinder is great for testing which page  elements are affected by a CSS style rule as well as for highlighting and finding  elements that match your searches.</p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/downloads/latest/11905/addon-11905-latest.xpi">Install  Firefinder</a></li>
</ul>
<h3>Related content</h3>
<ul>
<li><a href="http://sixrevisions.com/web-development/five-ways-to-speed-up-page-response-times/">Five  Ways to Speed Up Page Response Times</a></li>
<li><a href="http://sixrevisions.com/tools/firefox_web_developer_extension_toolbar/">Awesome  Things That Firefox’s Web Developer Extension Can Do</a></li>
<li><a href="http://sixrevisions.com/css/css_code_optimization_formatting_validation/">Web-Based  Tools for Optimizing, Formatting and Checking CSS</a></li>
<li><em>Related categories</em>: <a href="http://sixrevisions.com/category/tools/">Tools</a>, <a href="http://sixrevisions.com/category/web-development/">Web Development</a>,  and <a href="http://sixrevisions.com/category/javascript/">JavaScript</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://sixrevisions.com/web-development/10-useful-firefox-extensions-to-supercharge-firebug/feed/</wfw:commentRss>
		<slash:comments>43</slash:comments>
		</item>
	</channel>
</rss>
