<?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>RyanDoherty.net &#187; WebDev</title>
	<atom:link href="http://www.ryandoherty.net/category/webdev/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.ryandoherty.net</link>
	<description>Killer Kiwi</description>
	<lastBuildDate>Sat, 14 Aug 2010 07:10:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>getpersonas.com 2.0 is live!</title>
		<link>http://www.ryandoherty.net/2009/12/16/getpersonas-com-2-0-is-live/</link>
		<comments>http://www.ryandoherty.net/2009/12/16/getpersonas-com-2-0-is-live/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 21:17:22 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[phptvdb]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=539</guid>
		<description><![CDATA[For the past few months I&#8217;ve been working on a redesign with the Personas team on getpersonas.com. Last night we launched it and it&#8217;s looking awesome! Here&#8217;s a screencast of some of the new features: For more info, check out the Mozilla Labs blog post about it or visit the site!]]></description>
			<content:encoded><![CDATA[<p>For the past few months I&#8217;ve been working on a redesign with the Personas team on getpersonas.com. Last night we launched it and it&#8217;s looking awesome!</p>
<p>Here&#8217;s a screencast of some of the new features:</p>
<p><object width="400" height="300" style="display: block;"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=8222060&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=8222060&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object></p>
<p>For more info, check out the <a href="http://mozillalabs.com/personas/2009/12/16/introducing-personas-2-0/">Mozilla Labs blog post</a> about it or <a href="http://www.getpersonas.com">visit the site</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2009/12/16/getpersonas-com-2-0-is-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review: Web Form Design</title>
		<link>http://www.ryandoherty.net/2009/06/28/review-web-form-design/</link>
		<comments>http://www.ryandoherty.net/2009/06/28/review-web-form-design/#comments</comments>
		<pubDate>Sun, 28 Jun 2009 08:17:45 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=448</guid>
		<description><![CDATA[The short: if you design or build web forms, you must buy this book. Now. The long: An awesome book about web form design best practices that is backed up by real data and studies. The book oozes design from its glossy stock and full color images to the layout and typography. Overall you can [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.rosenfeldmedia.com/books/webforms/"><img src="http://farm3.static.flickr.com/2215/2456180445_223bf5342c_m.jpg" alt="Web Form Design Cover" width="160" height="240" /></a> The short: if you design or build web forms, you must buy this book. Now.</p>
<p>The long: An awesome book about web form design best practices that is backed up by <em>real data</em> and studies. The book oozes design from its glossy stock and full color images to the layout and typography. Overall you can tell that Luke is a great designer and has considerable experience with the usability of web forms. Luke covers just about every topic of web form design from from basic layout to help text to error conditions and about a dozen other topics. </p>
<p>Overall <a href="http://www.rosenfeldmedia.com/books/webforms/">Web Form Design</a> is one of my favorite design and usability books on my bookshelf for its breadth, beauty and usefulness.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2009/06/28/review-web-form-design/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Semantic Gmail</title>
		<link>http://www.ryandoherty.net/2009/03/23/426/</link>
		<comments>http://www.ryandoherty.net/2009/03/23/426/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 06:21:18 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=426</guid>
		<description><![CDATA[Gmail&#8217;s HTML sucks. It really sucks. Don&#8217;t believe me? So instead of just whining about it, I decided to rewrite Gmail in semantic, clean HTML: http://ryandoherty.net/semanticgmail/ Why did I do this? To challenge myself. To prove it could be done. To show people what clean, semantic markup looks like for a complicated app like Gmail. [...]]]></description>
			<content:encoded><![CDATA[<p>Gmail&#8217;s HTML sucks. It really sucks. Don&#8217;t believe me? </p>
<p><a href="http://www.flickr.com/photos/ryandoherty/3381641582/sizes/l/"><img src="http://farm4.static.flickr.com/3426/3381641582_dc0bbda510.jpg"></a></p>
<p>So instead of just whining about it, I decided to rewrite Gmail in semantic, clean HTML:</p>
<p><a href="http://ryandoherty.net/semanticgmail/">http://ryandoherty.net/semanticgmail/</a></p>
<p><a href="http://ryandoherty.net/semanticgmail/"><img src="http://farm4.static.flickr.com/3442/3381710212_512cd6d6b0.jpg" alt="Semantic Gmail"></a></p>
<h4 style="clear:both;">Why did I do this?</h4>
<p>To challenge myself. To prove it could be done. To show people what clean, semantic markup looks like for a complicated app like Gmail.</p>
<h4>What&#8217;s missing?</h4>
<p>A lot. Many of the select menus should be DHTML. It&#8217;s just a basic inbox view so far, nothing more than that.</p>
<h4>Why announce now?</h4>
<p>The big challenge is over for me, writing the HTML and CSS. If someone else wants to work more on it, fine by me. I&#8217;d rather get this out than have it sit on my computer any more.</p>
<p><a href="http://ryandoherty.net/semanticgmail/">http://ryandoherty.net/semanticgmail/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2009/03/23/426/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Optimizing openSpaceBook</title>
		<link>http://www.ryandoherty.net/2008/10/12/optimizing-openspacebook/</link>
		<comments>http://www.ryandoherty.net/2008/10/12/optimizing-openspacebook/#comments</comments>
		<pubDate>Sun, 12 Oct 2008 08:53:53 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=294</guid>
		<description><![CDATA[A few days ago I gave a presentation at San Jose State University on how to speed up your website&#8217;s frontend performance, which, according to many, is responsible for 80-90% of a page&#8217;s load time. Rather than throw up a bunch of slides and blab on about expires headers, gzipping and concatenating, I created an [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago I gave a presentation at San Jose State University on how to speed up your website&#8217;s frontend performance, which, <a href="http://stevesouders.com/hpws/">according to many</a>, is responsible for 80-90% of a page&#8217;s load time.</p>
<p>Rather than throw up a bunch of slides and blab on about expires headers, gzipping and concatenating, I created an awesome social networking website called <a href="http://people.mozilla.org/~rdoherty/performance/original/">openSpaceBook</a>. Go ahead and check it out, any login will work. </p>
<p>Now that you&#8217;ve realized you should cancel your Facebook account because this is going to be awesome, you can learn how it is pretty slow to load and how we can speed it up.</p>
<p>According to <a href="http://performance.webpagetest.org:8080/result/EJW/1/details/">webpagetest.org</a>, a handy-dandy webpage loading tool, it takes about <strong>12 seconds</strong> for openSpaceBook&#8217;s home.html page to load on DSL. 12 seconds! And that&#8217;s just for a static html page, nothing going on in the backend. WTF is taking so long?</p>
<p>This is what&#8217;s taking so long:</p>
<p><a href="http://performance.webpagetest.org:8080/result/EJW/1/details/"><img src="http://performance.webpagetest.org:8080/results/EJW/1_waterfall.png" width="500" alt="Waterfall view of requests" /></a></p>
<p>26 HTTP requests, 773KB! Rendering doesn&#8217;t start until 12 seconds into downloading the page! (Thin vertical <strike>blue</strike> green line.)</p>
<p>Don&#8217;t think this page is bloated compared to other websites. Facebook has 182 requests and has 500KB in assets (down from over 1MB a few months ago). YouTube has 42 requests, 356KB. And those sites have most likely been optimized, openSpaceBook is not.</p>
<p>So I have this bloated website, but I can&#8217;t remove any features because I&#8217;ll lose the &#8216;ooh shiny!&#8217; audience that I&#8217;m trying to attract. What should I do?</p>
<h4>Step 1: Reduce HTTP requests</h4>
<p>The first thing that can be done is reducing the number of HTTP requests. There are 3 reasons for this. One is every HTTP request has a small amount of network overhead, and the more requests you remove, the less overall network traffic. </p>
<p>The second reason is browsers have a limit to the # of HTTP requests they can make to a webserver (or hostname, specifically). Older browsers were limited to 2. Some newer browsers have upped that limit to 6 or 8, but they still have a limit. Therefore when a browser has reached its limit, it has to wait for requests to finish before starting up new ones. So the more requests necessary, the more queuing will occur.</p>
<p>The third reason is specific to JavaScript in that browsers will only download and execute 1 JavaScript file at a time. This is done because JavaScript can modify the DOM, redirect the page or do any number of things that may affect what resources need to be downloaded. So even if a browser can download 8 requests in parallel, JavaScript files will still be download sequentially. (There are efforts to improve this issue in Webkit and Gecko.)</p>
<p>So lets see how we fare after reducing our HTTP requests. I did this manually by copying and pasting all of my CSS files into 1 file and JS files into 1 file. I also took all my CSS background images and merged them into one. Then I can use CSS background positioning to only show the graphic I need.</p>
<h5>Results after combining files</h5>
<p><a href="http://performance.webpagetest.org:8080/result/FKS/1/details/"><img src="http://performance.webpagetest.org:8080/results/FKS/1_waterfall.png" width="500" alt="waterfall after combining files" /></a></p>
<p>Shazam! Down to 5.8s! That&#8217;s a 50% increase in speed for less than 30 minutes worth of work. And 8KB has been shaved off of the page. Sweet. On to our next step.</p>
<h4>Step 2: Set expires headers</h4>
<p>Another simple trick that requires a few lines of code is setting expires headers. Expires headers are a type of header that tells the browser when an asset &#8216;expires&#8217; from its cache. When you set it to years in the future, a browser will cache it and never ask the website again for it.</p>
<p>Expires headers look like this:<br />
<code><br />
Expires: Thu, 15 Apr 2020 20:00:00 GMT<br />
</code></p>
<p>The assets you want to set expires headers on are things that don&#8217;t change much. Like images, CSS and JavaScript. I know, CSS &#038; JavaScript might change every week or two and this can result in your users never seeing new content. The way around this is to change the filename of your assets whenever you update them. This can be done manually or with a build script of some sort. </p>
<p>You can set expires headers in Apache by adding this to your httpd.conf or .htaccess file:<br />
<code><br />
&lt;FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$"&gt;<br />
Header set Expires "Thu, 15 Apr 2020 20:00:00 GMT"<br />
&lt;/FilesMatch&gt;<br />
</code></p>
<p>So let&#8217;s see how we fare:<br />
<a href="http://performance.webpagetest.org:8080/result/FKT/"><img src="http://performance.webpagetest.org:8080/results/FKT/1_waterfall.png" width="500" alt="waterfall with expires headers" /></a></p>
<p>Hmm, 6 seconds. No improvement. Not surprising, we didn&#8217;t really change anything. In fact, we actually added an extra header per request. The extra 0.2 seconds could be due to this or due to varying network latency or utilization. </p>
<p>What was improved was repeat response time. Down from 1.3 seconds to 0.6 seconds. And this performance improvement is carried over to all other pages. Any previously cached assets will not be downloaded again or checked to see if there is a newer version (If-Modified-Since request). So a user&#8217;s multiple page view experience will be significantly faster.</p>
<p>So what else can be done to <strong>really</strong> improve performance?</p>
<h4>Step 3: Gzip your content</h4>
<p>Now we&#8217;re talking. Compressing your content is an easy way to significantly reduce the amount of data transmitted. HTML, CSS &#038; JS are all text, so they compress very well. So let&#8217;s see what kind of performance increase we get when we compress our content.</p>
<p><a href="http://performance.webpagetest.org:8080/result/FM4/"><img src="http://performance.webpagetest.org:8080/results/FM4/1_waterfall.png" width="500" alt="waterfall of compressed content" /></a></p>
<p>Yes! Down to 2.7 seconds! And we&#8217;ve cut the amount of data down to 223KB, which equates to $$$ saved when you pay for bandwidth.</p>
<p>To gzip your content in Apache, you can add this to your httpd.conf or .htaccess file:<br />
<code><br />
&lt;IfModule mod_deflate.c&gt;<br />
&lt;FilesMatch "\.(js|css|html)$"&gt;<br />
SetOutputFilter DEFLATE<br />
&lt;/FilesMatch&gt;<br />
&lt;/IfModule&gt;<br />
</code></p>
<h4>Step 4: Move JavaScript to the bottom</h4>
<p>Remember way back in step #1 when I said browsers only download 1 JavaScript file at a time? Well, they also block rendering of any content after them in the DOM. So when your JavaScript is referenced at the top of the page, like most webpages do, it blocks the rest of the page. The solution? Move them below all your content!</p>
<p>Here&#8217;s what happens when you move your JavaScript to the bottom of the page:</p>
<p><a href="http://performance.webpagetest.org:8080/result/FM3/1/details/"><img src="http://performance.webpagetest.org:8080/results/FM3/1_waterfall.png" width="500" alt="waterfall of JavaScript at the bottom of the page" /></a></p>
<p>So, down to 2.4 seconds (even though the amount of data is the same, discrepancy most likely due to network latency or bandwidth fluctuations between tests), <strong>but</strong> the rendering of the page starts at 0.9 seconds as opposed to 2.3 seconds in step 3. This makes the page <strong>appear</strong> to load faster because the browser will begin to show content before it has finished downloading the JavaScript file at the end of the page.</p>
<p>So, we&#8217;re down to 2.4 seconds, can we do any better? You&#8217;re darn tootin&#8217;!</p>
<h4>Step 5: Minify CSS &#038; JS</h4>
<p>Hang in there, we&#8217;re at the last step. Here&#8217;s another way to reduce the amount of content sent even more. Minify your CSS and JS. Basically this means removing all newlines, comments and unnecessary spaces. It can also include programmatically replacing variable names in JavaScript with shorter ones. </p>
<p>The easiest way to do this is to use a compressor like YUI Compressor. It&#8217;s a Java app that takes a CSS or JavaScript file and spits out a minified version.</p>
<p>So how well does openFaceBook do after minifying?</p>
<p><a href="http://performance.webpagetest.org:8080/result/EJX/"><img src="http://performance.webpagetest.org:8080/results/EJX/1_waterfall.png" width="500" alt="waterfall after minifying content" /></a></p>
<p>2.2 seconds, not bad. Down to 154KB too. So openFaceBook has gone from 12 seconds and 773KB of data to 2.2 seconds and 154KB. That&#8217;s a 81% improvement in load time and a 80% decrease in page weight. And all those steps took me about an hour or two to do. That&#8217;s a pretty good ROI for a few hours worth of work. </p>
<h4>Summary</h4>
<p>Speed is everything. It&#8217;s a feature that is often left out of PRDs and users&#8217; thoughts about websites, but it&#8217;s there. And they notice on a subliminal level when your site is slow. With all the hoopla about how browsers are getting faster and faster, <strong>how fast you can deliver content to your users</strong> becomes more and more important.</p>
<h4>Resources</h4>
<ul>
<li><a href="http://performance.webpagetest.org:8080/">WebpageTest</a></li>
<li><a href="http://developer.yahoo.com/performance/">Yahoo! Exceptional Performance</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/10/12/optimizing-openspacebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Want some real-world web development experience?</title>
		<link>http://www.ryandoherty.net/2008/08/18/want-some-real-world-web-development-experience/</link>
		<comments>http://www.ryandoherty.net/2008/08/18/want-some-real-world-web-development-experience/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 20:37:22 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=278</guid>
		<description><![CDATA[So in some of my previous posts about becoming/being a web developer, I say you should write code, lots of code. I also think the more varied real-world experience you get, the better developer you&#8217;d be. So how can you get more real-world experience when you are a student or have a full-time job? Easy, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm1.static.flickr.com/3/4288711_4285df9adf.jpg?v=0" width="500" height="375" /></p>
<p>So in some of my previous posts about becoming/being a web developer, I say you should write code, lots of code. I also think the more varied real-world experience you get, the better developer you&#8217;d be. </p>
<p>So how can you get more real-world experience when you are a student or have a full-time job? Easy, you can write code for <a href="https://wiki.mozilla.org/Webdev">Mozilla</a>!</p>
<p>Want some Python, Javascript and MySQL exeperience? Help us with our <a href="https://wiki.mozilla.org/Perfomatic">Graph Server</a>. Dying to show off your killer PHP skills? Help us with <a href="https://wiki.mozilla.org/Update">AMO</a>. Want to work on Drupal? Work on <a href="https://wiki.mozilla.org/Spreadfirefox">spreadfirefox.com</a>. Want to work on some crazy futuristic ideas? Check out <a href="https://wiki.mozilla.org/Labs">Mozilla Labs</a>.</p>
<p>All of our code is open source and available through <a href="http://svn.mozilla.org">svn.mozilla.org</a> or <a href="http://hg.mozilla.org">hg.mozilla.org</a>. You don&#8217;t even need an account to checkout the code! </p>
<p>The basic workflow would go something like this:</p>
<ul>
<li>Take a bug</li>
<li>Submit patch</li>
<li>Ask someone to review the patch</li>
<li>Once reviewed, submit the patch</li>
<li>Pad your resume</li>
</ul>
<p>Want more info? Check out the <a href="https://wiki.mozilla.org/Main_Page">wiki</a> and <a href="http://www.mozilla.org/contribute/">mozilla.org/contribute</a>.</p>
<p>Photo from <a href="http://flickr.com/photos/onthetower/4288711/">onthetower</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/08/18/want-some-real-world-web-development-experience/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Unicorns and Scalability</title>
		<link>http://www.ryandoherty.net/2008/07/13/unicorns-and-scalability/</link>
		<comments>http://www.ryandoherty.net/2008/07/13/unicorns-and-scalability/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 08:13:13 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=271</guid>
		<description><![CDATA[There&#8217;s been so much talk recently about performance and scaling thanks to Twitter and I really want everyone to shut up about it. &#8220;Language Foo can scale better than Bar!&#8221; &#8220;If only they had used language Baz!&#8221; Pay attention to this part because I&#8217;m only going to say it once: Your code doesn&#8217;t scale, your [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://farm1.static.flickr.com/188/423086866_7005ae1a8d.jpg?v=1189286024" width="500" height="500" alt="Unicorn road sign" /></p>
<p>There&#8217;s been so much talk recently about performance and scaling thanks to <a href="http://www.twitter.com">Twitter</a> and I really want everyone to shut up about it. </p>
<p>&#8220;Language <em>Foo</em> can scale better than <em>Bar</em>!&#8221;</p>
<p>&#8220;If only they had used language <em>Baz</em>!&#8221;</p>
<p>Pay attention to this part because I&#8217;m only going to say it once: </p>
<p><strong>Your code doesn&#8217;t scale, your architecture does.</strong></p>
<p>I&#8217;ve been reading about scalability for a while now and participated in a <a href="http://addons.mozilla.org">few</a> <a href="http://www.spreadfirefox.com/worldrecord">highly-trafficked</a> <a href="http://messenger.yahoo.com">websites</a> and I can say that the language that we used was the least of our concerns. And it would probably be trivial no matter what language we chose.</p>
<p>Every time I&#8217;ve ever heard someone talk about scaling issues, I don&#8217;t hear them talk about the raw execution time of their code. It&#8217;s always about disk I/O, database performance or network capacity. </p>
<p>When I interviewed at <a href="http://www.insiderpages.com">Insider Pages</a> a few years ago they never mentioned Ruby or Rails as a limiting factor, it was databases and their network. A nice <a href="http://blog.evanweaver.com/articles/2008/05/27/is-twitter-still-the-biggest-rails-site/#comment-029">blog comment</a> about Insider Pages mentions scalability tactics. </p>
<p>When <a href="http://www.scribd.com">Scribd</a> <a href="http://www.scribd.com/doc/49575/Scaling-Rails-Presentation">talks about scaling with Rails</a>, you don&#8217;t hear them mention Ruby. It&#8217;s all about adding databases and caching. (Please remember Rails is a framework (an architecture for your code) and Ruby is a language). </p>
<p>Flickr <a href="http://www.scribd.com/doc/21793/Scaling-PHPMySQL-Presentation-from-Flickr">talks about scaling</a> <a href="http://assets.en.oreilly.com/1/event/7/Capacity%20Management%20Presentation.ppt">a lot [PPT]</a> and they don&#8217;t mention PHP. They mention database sharding, caching and capacity planning. </p>
<p>Even Twitter&#8217;s <a href="http://status.twitter.com/">status blog</a> never mentions Ruby as their bottleneck. They mention <a href="http://status.twitter.com/post/37574325/testing-our-db-fail-over-practice">database</a> and <a href="http://status.twitter.com/post/36809036/sunday-sunday-sunday">database</a>, <a href="http://status.twitter.com/post/40069044/friday-morning">load balancing</a> and caching . Blaine Cook&#8217;s <a href="http://www.slideshare.net/Blaine/scaling-twitter">presentation about scaling Twitter</a> mentions databases and caching. (I know, I know, he left Twitter, but his comments are still spot-on with common scaling issues.)</p>
<p>Yahoo&#8217;s former engineer Jeremy Zawodny has an old presentation on scaling <a href="http://jeremy.zawodny.com/mysql/scaling-mysql-and-php.html">PHP and MySQL</a> and he never mentions PHP as the bottleneck. </p>
<p>So remember kids, when you are thinking about scaling, <strong>think about your architecture.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/07/13/unicorns-and-scalability/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>6 Great Web Development Mailing Lists</title>
		<link>http://www.ryandoherty.net/2008/05/15/6-great-web-development-mailing-lists/</link>
		<comments>http://www.ryandoherty.net/2008/05/15/6-great-web-development-mailing-lists/#comments</comments>
		<pubDate>Fri, 16 May 2008 06:24:58 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=256</guid>
		<description><![CDATA[About a month ago Sarah wrote a post about web development mailing lists, which I have an affinity for. I subscribed to most of them and a few others, and here&#8217;s my writeup of the ones I think are worthwhile: css-d http://www.css-discuss.org/ Very high traffic list. Beginner to intermediate questions about CSS. javascript-official http://tech.groups.yahoo.com/group/JavaScript_Official/ Medium [...]]]></description>
			<content:encoded><![CDATA[<p>About a month ago <a href="http://www.sarahfriedlander.com/blog/2008/04/04/advanced-web-development-mailing-lists/">Sarah</a> wrote a post about web development mailing lists, which I have an affinity for. </p>
<p>I subscribed to most of them and a few others, and here&#8217;s my writeup of the ones I think are worthwhile:</p>
<dl>
<dt>
<h5>css-d</h5>
</dt>
<dd><a href="http://www.css-discuss.org/">http://www.css-discuss.org/</a></dd>
<dd>Very high traffic list. Beginner to intermediate questions about CSS.</dd>
<dt>
<h5>javascript-official</h5>
</dt>
<dd><a href="http://tech.groups.yahoo.com/group/JavaScript_Official/">http://tech.groups.yahoo.com/group/JavaScript_Official/</a></dd>
<dd>Medium traffic Javascript list. Mostly beginner questions.</dd>
<dt>
<h5>yui-performance</h5>
</dt>
<dd><a href="http://tech.groups.yahoo.com/group/exceptional-performance/">http://tech.groups.yahoo.com/group/exceptional-performance/</a></dd>
<dd>Low traffic front-end performance mailing list. Very high quality questions and answers.</dd>
<dt>
<h5>public-webapi</h5>
</dt>
<dd><a href="http://www.mail-archive.com/public-webapi@w3.org/info.html">http://www.mail-archive.com/public-webapi@w3.org/info.html</a></dd>
<dd>High-quality mailing list about the next APIs in web browsers. Very technical and active.</dd>
<dt>
<h5>ydn-javascript</h5>
<dd><a href="http://tech.groups.yahoo.com/group/ydn-javascript/">http://tech.groups.yahoo.com/group/ydn-javascript/</a></dd>
<dd>High traffic and quality mailing list about the YUI JS library. I actually unsubscribed because it was so active. Great for developers using YUI.</dd>
<dt>
<h5>jQuery development</h5>
</dt>
<dd><a href="http://groups.google.com/group/jquery-dev">http://groups.google.com/group/jquery-dev</a></dd>
<dd>High quality mailing list about the development of the jQuery library. Medium traffic, very technical.</dd>
<dt>
</dl>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/05/15/6-great-web-development-mailing-lists/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo! Messenger Website Redesign!</title>
		<link>http://www.ryandoherty.net/2008/05/10/yahoo-messenger-website-redesign/</link>
		<comments>http://www.ryandoherty.net/2008/05/10/yahoo-messenger-website-redesign/#comments</comments>
		<pubDate>Sat, 10 May 2008 22:58:19 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=254</guid>
		<description><![CDATA[Even though I no longer work at Yahoo!, I had to blog about the Messenger website redesign (internally known as project Aurora). I started working on it around December 2007 on preliminary planning, scoping and design feedback. After we had the specs nailed down, we hired Ryan Parman as our main developer to build out [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.ryandoherty.net/images/messenger.jpg" alt="Messenger Site Redesign" /></p>
<p>Even though I no longer work at Yahoo!, I had to blog about the Messenger website redesign (internally known as project Aurora). </p>
<p>I started working on it around December 2007 on preliminary planning, scoping and design feedback. After we had the specs nailed down, we hired <a href="http://ryanparman.com/">Ryan Parman</a> as our main developer to build out the site. <a href="http://gaarf.info/">Adrien Cahen</a> worked on a new PHP framework for our site to run on and I worked as the project lead/architect/go-to guy for anything tricky.</p>
<h4>Awesome things about the site</h4>
<dl>
<dt>Shiny new CSS &#038; HTML</dt>
<dd>We scrapped everything we had and rewrote it all with YUI <a href="http://developer.yahoo.com/yui/fonts/">Fonts</a> and <a href="http://developer.yahoo.com/yui/reset/">Reset</a>. MUCH cleaner and more semantic. </dd>
<dt>Better Performance</dt>
<dd>The old Messenger website had gotten quite slow over time and I spent a few months cleaning it up to get a decent ySlow grade for the homepage and download page. The new site is blazin&#8217; fast, getting A grades on all pages except the Plugins page, primarily because the images are pulled from the Yahoo! Gallery website and they don&#8217;t set appropriate cache headers.</dd>
<dt>Fantastic Configuration</dt>
<dd>Building a site for nearly 30 localizations isn&#8217;t easy, and configuration is one of the hardest parts. Every locale has specific features and needs that increase the complexity of the site. Ryan, Adrien and I spent a lot of time figuring out the best way to do this and I think it&#8217;s much better than before. We have base configuration files for each locale and every page is locale agnostic, it simply loads the appropriate configuration file for the locale you are viewing.</dd>
<dt>Automagical Content Updates</dt>
<dd>In the old Messenger website, we had configuration for the IMV gallery in two locations, one of them remote. In order to display a page of IMVs, the data had to be merged, which ended up in lots of code and duplication of information. The new website fetches information for the IMV and Plugin galleries automatically and caches the content. No configuration resides on the webservers, so there&#8217;s a lot less work on our side to update and edit content. </dd>
</dl>
<p>Many thanks to Ryan, Adrien, Sarah, Lorraine and Tak at Yahoo!. Good work guys!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/05/10/yahoo-messenger-website-redesign/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Front-end Engineering Interview Questions</title>
		<link>http://www.ryandoherty.net/2008/05/07/front-end-engineering-interview-questions/</link>
		<comments>http://www.ryandoherty.net/2008/05/07/front-end-engineering-interview-questions/#comments</comments>
		<pubDate>Thu, 08 May 2008 05:43:37 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=252</guid>
		<description><![CDATA[Continuing on my topic of what makes a good front-end engineer, here&#8217;s a list of questions that I usually ask people when I&#8217;m interviewing them for a front-end engineering position. What does semantic markup mean? Semantic markup usually means using proper HTML tags for your content (p tags for paragraphs, divs for large content areas [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing on my topic of what makes a good front-end engineer, here&#8217;s a list of questions that I usually ask people when I&#8217;m interviewing them for a front-end engineering position.</p>
<dl class="questions">
<dt>What does semantic markup mean?</dt>
<dd>Semantic markup usually means using proper HTML tags for your content (p tags for paragraphs, divs for large content areas of your page, tables for tabular data, etc) and meaningful classes and id&#8217;s for your CSS. It also means not putting any inline CSS or Javascript in the body of your HTML page. There are exceptions to this rule, but for most of the time, this is how a properly coded webpage will be structured.</dd>
<dd>Knowing the answer to this question means the interviewee has been paying attention to web development for the past 5 years. It also means they understand the proper design and coding principles like separation of content (HTML), style (CSS) and behavior (JS).</dd>
<dt>Describe the box model</dt>
<dd>The box model describes rectangular boxes that are generated for elements in a web page. The properties of these boxes are margin, border, padding, width and height.</dd>
<dd>If an interviewee doesn&#8217;t know this, they probably haven&#8217;t read 1 book or website about the basics of CSS.</dd>
<dt>When would you use a table in a webpage?</dt>
<dd>For tabular data. Representing data in a database or a spreadsheet. NOT for layout</dd>
<dd>Tables for layout is definitely in the past, so if a developer talks about using them for layout, they&#8217;ve been out of the loop for a long time. CSS is for layout, it provides much finer control and allows for semantic markup of your content and data.</dd>
<dt>Is Javascript an object oriented language?</dt>
<dd>Yes, Javascript is an object oriented language. Base objects or classes are called prototypes. They allow for dynamically adding attributes and functions to the prototypes and they will immediately be available to all instances of the prototype. (There&#8217;s a lot more you can do with prototypes)</dd>
<dd>This question is actually a tough one. Lots of developers program in Javascript frequently and never learn more than the basics. Learning about Javascript prototypes is one of the first steps in understanding what makes Javascript different than most classical object oriented languages</dd>
<dt>Can you assign behavior (open a new window, show/hide an element in the page) to a link in a webpage without placing any Javascript in your html markup?</dt>
<dd>Yes, you can. 1) Include a Javascript file in your document 2) Search the DOM for the link by Id, class or tag. 3) Attach a function to the element&#8217;s onclick event via the addEventListener (W3C event specification) function or attachEvent (IE). 4) When the function is called, perform the required action and stop the event from continuing via event.stopPropagation or event.cancelBubble (IE), event.preventDefault or event.returnValue (IE).</dd>
<dd>Events are very tricky in browsers. I had to research a bit to figure out how to do it without a Javascript library. If a developer mentions adding javascript:foo() into the href or onlick=&#8221;foo()&#8221;, they most likely haven&#8217;t learned about proper separation of HTML and Javascript. They also most likely don&#8217;t know about graceful degradation/progressive enhancement. This allows for handling search engine crawlers, browsers with Javascript turned off, Javascript errors that stop execution and mobile browsers that don&#8217;t support Javascript.</dd>
<dt>What&#8217;s a closure and how/why would you use it in Javascript?</dt>
<dd>This one&#8217;s tough. I&#8217;m still learning how closures work in Javascript. In very simple terms, they are references to variables or functions inside a function <em>after</em> it has executed. (I think that&#8217;s a good explanation.)</dd>
<dd>A good use for them is to hide variables or functions from external code. This is similar to private variables and functions</dd>
<dd>Knowing at least the basics of Javascript closures means you know Javascript pretty well. Once you learn closures and how to use them, you can start doing really nifty things with Javascript.</dd>
<dt>How do you debug a webpage? </dt>
<dd>Lots of ways. Alert statements (basic debugging), Firebug, DebugBar, DragonFly, Web Inspector, and Developer Toolbar.</dd>
<dd>Knowledge of development tools is important and increases productivity immensely when you can inspect your website&#8217;s state without using alerts all over the place. Programming large websites becomes tedious and time-consuming if you don&#8217;t have tools like Firebug or the Developer Toolbar.</dd>
<dt>What are some ways to increase performance of a web(site, page)?</dt>
<dd><a href="http://developer.yahoo.com/performance/">Any number of these methods</a>.</dd>
<dd>With the current proliferation of AJAXy web apps and Web 2.0 designs, sites are getting much slower. Knowing how to take a site that loads in 5-10 seconds and cut it down to 1-2s is very important. Users do notice and care how fast sites load, and so should you.</dd>
</dl>
<p>Those are my questions, what are yours?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/05/07/front-end-engineering-interview-questions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Learn to be a front-end engineer from the best</title>
		<link>http://www.ryandoherty.net/2008/05/05/learn-to-be-a-front-end-engineer-from-the-best/</link>
		<comments>http://www.ryandoherty.net/2008/05/05/learn-to-be-a-front-end-engineer-from-the-best/#comments</comments>
		<pubDate>Tue, 06 May 2008 02:08:30 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>
		<category><![CDATA[frontend-engineering]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=251</guid>
		<description><![CDATA[If you want to learn from some of the best engineers in the web industry, check out Yahoo!&#8217;s Juku Program. Basically it&#8217;s a 10 week intensive front-end engineering course that ends with a full time job at Yahoo!. Despite all the bad things that have happened to Yahoo! in the past few months, it&#8217;s still [...]]]></description>
			<content:encoded><![CDATA[<p>If you want to learn from some of the best engineers in the web industry, check out <a href="https://yahoo.recruitmax.com/MAIN/careerportal/Job_Profile.cfm?szOrderID=14954&#038;szReturnToSearch=1&#038;szWordsToHighlight">Yahoo!&#8217;s Juku Program</a>.</p>
<p>Basically it&#8217;s a 10 week intensive front-end engineering course that ends with a full time job at Yahoo!. Despite all the bad things that have happened to Yahoo! in the past few months, it&#8217;s still a great place to work and you won&#8217;t get anything like this anywhere else. The front-end engineering discipline is taken extremely seriously at Yahoo! and you will learn more than you could ever think of.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/05/05/learn-to-be-a-front-end-engineer-from-the-best/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Become a Great Web Developer</title>
		<link>http://www.ryandoherty.net/2008/05/04/how-to-become-a-great-web-developer/</link>
		<comments>http://www.ryandoherty.net/2008/05/04/how-to-become-a-great-web-developer/#comments</comments>
		<pubDate>Mon, 05 May 2008 03:52:58 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=249</guid>
		<description><![CDATA[Update: Want some real-world web development experience? A few days ago a friend of mine asked me how he could improve his skills/knowledge of web application design and development. I had some recommendations for him, and it really got me thinking. How does one become a great web developer? It&#8217;s such a huge field that [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update:</strong> <a href="/2008/08/18/want-some-real-world-web-development-experience/">Want some real-world web development experience?</a></p>
<p>A few days ago a friend of mine asked me how he could improve his skills/knowledge of web application design and development. I had some recommendations for him, and it really got me thinking. <strong>How does one become a great web developer?</strong> It&#8217;s such a huge field that it&#8217;s hard to know where to start. Here&#8217;s what I&#8217;ve come up with so far:</p>
<h4>Experience</h4>
<p>I know many people are looking for a book, website or class that will make them a great web developer.  After a lot of thought about how I became a (semi) decent web developer, experience really seemed to be reason why. You simply cannot become proficient at <em>anything</em> without doing it. A lot. And web development is no different.</p>
<p>Don&#8217;t believe all those &#8220;Teach Yourself X in 24 Hours&#8221; or WYSIWYG tools, <strong>you need lots of varied experience to become a great web developer</strong>. It&#8217;s rare having 1 job will teach you every part of web development, it&#8217;s such a huge field. The basic technologies/skills that are involved are HTML, CSS, JS, 1 back-end language <em>minimum</em> (PHP, Ruby, Python, Java, Perl), interface design, semantics, information architecture, systems architecture, database design and scalability. And that&#8217;s just a start!</p>
<p>Odds are you need about 2-3 years of experience before you can call yourself &#8216;experienced&#8217;. You need to write code, <strong>lots of code</strong>. Bad code, good code, messy code. Doesn&#8217;t really matter as long as you can look back at it in a few weeks/months and say &#8220;This code is crap!&#8221; (I do this frequently).  You also need to break things, make mistakes and blow through a few deadlines before you can begin to understand the &#8216;soft&#8217; parts of software development.</p>
<h4>Continually learn</h4>
<p>I&#8217;ve heard this from lots of other bloggers and tech gurus. If you aren&#8217;t constantly learning and expanding your skill set, you will be left behind. Technology moves fast and keeping up is paramount. </p>
<p>Continually learning means everything from experimenting with new technologies, reading blogs and books to going to conferences and technology groups in your surrounding area. You need to expose yourself to as many new ideas as possible all the time. You are never &#8216;done&#8217; learning and can take a break.</p>
<p>Being a web developer/programmer is like being a shark, you have to keep moving to stay alive.</p>
<h4>Finally</h4>
<p>Actually, that&#8217;s it. A lot less things to follow than I thought. Add comments if you have more ideas, I&#8217;m always interested in new information!</p>
<h4>Things to read/check out</h4>
<p><span id="more-249"></span><br />
Don&#8217;t think that by reading these books and blogs you&#8217;ll instantly become a great web developer, I <em>still</em> consider myself average to above average.</p>
<h5><a id="books"></a>Books</h5>
<ul>
<li><a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209892621&#038;sr=8-1">The Pragmatic Programmer</a></li>
<li><a href="http://www.amazon.com/Becoming-Technical-Leader-Problem-Solving-Approach/dp/0932633021/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209892895&#038;sr=8-1">Becoming a Technical Leader</a></li>
<li><a href="http://www.amazon.com/Search-Stupidity-Twenty-Marketing-Disasters/dp/1590597214/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209892921&#038;sr=1-1">In Search of Stupidity</a></li>
<li><a href="http://www.amazon.com/Hackers-Painters-Big-Ideas-Computer/dp/0596006624/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209892941&#038;sr=1-1">Hackers &#038; Painters</a></li>
<li><a href="http://www.amazon.com/Blockbusters-Five-Developing-GREAT-Products/dp/006008474X/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1209893007&#038;sr=1-1">Blockbusters</a></li>
<li><a href="http://www.amazon.com/Joel-Software-Occasionally-Developers-Designers/dp/1590593898/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893025&#038;sr=1-1">Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity</a></li>
<li><a href="http://www.amazon.com/Best-Software-Writing-Selected-Introduced/dp/1590595009/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893056&#038;sr=1-1">The Best Software Writing I</a></li>
<li><a href="http://www.amazon.com/Behind-Closed-Doors-Management-Programmers/dp/0976694026/ref=pd_bbs_sr_2?ie=UTF8&#038;s=books&#038;qid=1209893093&#038;sr=1-2">Behind Closed Doors</a></li>
<li><a href="http://www.amazon.com/Managing-Humans-Humorous-Software-Engineering/dp/159059844X/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893111&#038;sr=1-1">Managing Humans</a></li>
<li><a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893131&#038;sr=1-1">The Mythical Man-Month</a></li>
<li><a href="http://www.amazon.com/Peopleware-Productive-Projects-Tom-DeMarco/dp/0932633439/ref=pd_bxgy_b_img_b">Peopleware: Productive Projects and Teams</a></li>
<li><a href="http://www.amazon.com/Non-Designers-Design-Book-Robin-Williams/dp/0321534042/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893191&#038;sr=1-1">The Non-Designers Design Book</a></li>
<li><a href="http://www.amazon.com/Founders-Work-Stories-Startups-Early/dp/1590597141/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893213&#038;sr=1-1">Founders at Work</a></li>
<li><a href="http://www.amazon.com/Good-Great-Companies-Leap-Others/dp/0066620996/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893230&#038;sr=1-1">Good to Great</a></li>
<li><a href="http://www.amazon.com/Dreaming-Code-Programmers-Transcendent-Software/dp/1400082471/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893252&#038;sr=1-1">Dreaming in Code</a></li>
<li><a href="http://www.amazon.com/Art-Start-Time-Tested-Battle-Hardened-Starting/dp/1591840562/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893296&#038;sr=1-1">The Art of the Start</a></li>
<li><a href="http://www.amazon.com/Maverick-Success-Behind-Unusual-Workplace/dp/0446670553/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893314&#038;sr=1-1">Maverick</a></li>
<li><a href="http://www.amazon.com/Design-Everyday-Things-Don-Norman/dp/0465067107/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893331&#038;sr=1-1">The Design of Everyday Things</a></li>
<li><a href="http://www.amazon.com/Project-Management-Theory-Practice-OReilly/dp/0596007868/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893349&#038;sr=1-1">The Art of Project Management</a></li>
<li><a href="http://www.amazon.com/Art-Innovation-Lessons-Creativity-Americas/dp/0385499841/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893370&#038;sr=1-1">The Art of Innovation</a></li>
<li><a href="http://www.amazon.com/Building-Scalable-Web-Sites-applications/dp/0596102356/ref=pd_bbs_1?ie=UTF8&#038;s=books&#038;qid=1209893393&#038;sr=1-1">Building Scalable Websites</a></li>
<li><a href="http://www.amazon.com/Designing-Web-Standards-Jeffrey-Zeldman/dp/0321385551/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893413&#038;sr=1-1">Designing with Web Standards</a></li>
<li><a href="http://www.amazon.com/Bulletproof-Web-Design-flexibility-protecting/dp/0321509021/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893433&#038;sr=1-1">Bulletproof Web Design</a></li>
<li><a href="http://www.amazon.com/Web-Standards-Solutions-Handbook-Pioneering/dp/1590593812/ref=pd_bbs_sr_1?ie=UTF8&#038;s=books&#038;qid=1209893453&#038;sr=1-1">Web Standards Solutions</a></li>
</ul>
<h5>Blogs</h5>
<ul>
<li><a href="http://thedailywtf.com/">The Daily WTF</a></li>
<li><a href="http://ajaxian.com/">Ajaxian</a></li>
<li><a href="http://ejohn.org/">ejohn.org</a></li>
<li><a href="http://highscalability.com/">High Scalability</a></li>
<li><a href="http://blogs.msdn.com/ie/">IEBlog</a></li>
<li><a href="http://my.opera.com/hallvors/blog/">miscoded</a></li>
<li><a href="http://nate.koechley.com/blog/">Nate Koechley</a></li>
<li><a href="http://www.nczonline.net/">NCZOnline</a></li>
<li><a href="http://www.quirksmode.org/bugreports/index.html">Quirks Mode Bug Report</a></li>
<li><a href="http://www.quirksmode.org/elsewhere/index.html">Quirks Mode Elsewhere</a></li>
<li><a href="http://www.readwriteweb.com/">ReadWriteWeb</a></li>
<li><a href="http://scruffylookingcatherder.com/">Scruffy-Looking Cat Herder</a></li>
<li><a href="http://www.realsoftwaredevelopment.com/">Software Development in the Real World</a></li>
<li><a href="http://developer.yahoo.net/blog/">Yahoo! Developer Network blog</a></li>
<li><a href="http://yuiblog.com/">Yahoo! User Interface Blog</a></li>
<li><a href="http://www.alistapart.com/">A List Apart</a></li>
<li><a href="http://blog.businessofsoftware.org/">Business of Software</a></li>
<li><a href="http://www.codinghorror.com/blog/">Coding Horror</a></li>
<li><a href="http://www.joelonsoftware.com/">Joel on Software</a></li>
<li><a href="http://www.scottberkun.com/blog/">Scott Berkun</a></li
<li><a href="http://blog.360.yahoo.com/douglascrockford">The Department of Style</a></li>
<li><a href="http://almaer.com/blog/">techno.blog</a></li>
<li><a href="http://brucefwebster.com/">Bruce F. Webster</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/05/04/how-to-become-a-great-web-developer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Maintaining Brand through RSS Readers?</title>
		<link>http://www.ryandoherty.net/2008/03/25/maintaining-brand-through-rss-readers/</link>
		<comments>http://www.ryandoherty.net/2008/03/25/maintaining-brand-through-rss-readers/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 05:45:47 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[WebDev]]></category>
		<category><![CDATA[pondering rss brand html]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/?p=225</guid>
		<description><![CDATA[Here&#8217;s something that I&#8217;ve been pondering today: RSS reader use is on the rise and a blog&#8217;s design has become an extension of the blogger&#8217;s &#8216;brand&#8217;. But RSS readers show every feed the same. Same font, colors, layout, everything. So how can bloggers maintain their brand inside an RSS reader? Here are my ideas: Add [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s something that I&#8217;ve been pondering today:</p>
<p>RSS reader use is on the rise and a blog&#8217;s design has become an extension of the blogger&#8217;s &#8216;brand&#8217;. But RSS readers show every feed the same. Same font, colors, layout, everything.</p>
<p>So how can bloggers maintain their brand inside an RSS reader?</p>
<p>Here are my ideas:</p>
<ul>
<li>Add a small header/logo image into every post</li>
<li>Use semantic markup so your headers, lists, etc will at least make it through</li>
<li>Send RSS readers different content with inline CSS?</li>
<li>Send RSS readers an extra, small module that links to other posts or sites?</li>
</ul>
<p>I&#8217;m having trouble thinking up more ways to do this. I think injecting extra content for RSS readers or adding different modules would be neat. You could &#8216;simulate&#8217; visiting your website by supplying design and content in the RSS reader.</p>
<p>Anyone have any other ideas?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/03/25/maintaining-brand-through-rss-readers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bookmark.js</title>
		<link>http://www.ryandoherty.net/2008/02/14/bookmarkjs/</link>
		<comments>http://www.ryandoherty.net/2008/02/14/bookmarkjs/#comments</comments>
		<pubDate>Thu, 14 Feb 2008 08:03:09 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/2008/02/14/bookmarkjs/</guid>
		<description><![CDATA[A while back I had to create a webpage that allowed users to bookmark a certain website. Turns out only IE supports bookmarking a webpage. And there&#8217;s a hell of a lot of bad code out there that says otherwise but doesn&#8217;t actually work for any other browsers. So now I&#8217;m adding Bookmark.js to the [...]]]></description>
			<content:encoded><![CDATA[<p>A while back I had to create a webpage that allowed users to bookmark a certain website. Turns out <strong>only IE</strong> supports bookmarking a webpage. And there&#8217;s a hell of a lot of bad code out there that says otherwise but doesn&#8217;t actually work for any other browsers. </p>
<p>So now I&#8217;m adding Bookmark.js to the mix. It is a teeny tiny JS object that insulates you from figuring out if the user&#8217;s browser can bookmark your page. It can also tell you the correct keystroke to bookmark your page, which you can then alert/show to your users.</p>
<p>Example:</p>
<pre>
&lt;script type="text/javascript" src="bookmark.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
    Bookmark.canBookmark(); //True if you can, false if not

    Bookmark.getKeystroke(); //"Command/Cmd + D" if Mac, "CTRL + D" if Win

    Bookmark.bookmarkPage('http://www.ryandoherty.net');
    //True if attempted to bookmark, false if not possible.
&lt;/script&gt;
</pre>
<p>Tested in IE 6 &#038; 7, FF 2 &#038; 3, Safari 2 &#038; 3 and Opera 9.</p>
<p class="buttons"><a href="/bookmark.js">Download it here</a></p>
<h4>More Info</h4>
<p>If you search around for bookmarking scripts, you&#8217;ll find a lot of code that describes how to do it in most browsers. As usual with lots of Javascript on the net, it&#8217;s bad code and wrong. </p>
<p>IE has the bookmark function, <strong>window.external.AddFavorite</strong>. Firefox has the function <strong>window.sidebar.addPanel</strong> which is very similar and will add an item to your bookmarks, <strong>but will open in a sidebar panel!</strong>. </p>
<p>For Opera, lots of people have written about dynamically creating a link, setting the &#8216;rel&#8217; attribute to &#8216;sidebar&#8217; and firing the click event. I&#8217;ve tested this and can&#8217;t get it to work in the latest version of Opera. Safari doesn&#8217;t have anything available either.</p>
<p>This is a simple feature that I&#8217;d like implemented in all major browsers. Shouldn&#8217;t be too hard, right?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/02/14/bookmarkjs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Review: Building Scalable Websites</title>
		<link>http://www.ryandoherty.net/2008/02/09/review-building-scalable-websites/</link>
		<comments>http://www.ryandoherty.net/2008/02/09/review-building-scalable-websites/#comments</comments>
		<pubDate>Sat, 09 Feb 2008 21:47:53 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[WebDev]]></category>

		<guid isPermaLink="false">http://www.ryandoherty.net/2008/02/09/review-building-scalable-websites/</guid>
		<description><![CDATA[I bought Building Scalable Websites (AKA everything you ever wanted to know about managing a large-scale website) a few months ago and read it twice in succession. It&#8217;s that good. The book is written by Cal Henderson, one of Flickr&#8217;s lead engineers. Most of the examples and experience he talks about is directly from working [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/Building-Scalable-Web-Sites-applications/dp/0596102356/ref=pd_bbs_1?ie=UTF8&#038;s=books&#038;qid=1202593017&#038;sr=8-1"><img src="/images/scalable_websites.jpg" align="right" /></a> I bought <a href="http://www.amazon.com/Building-Scalable-Web-Sites-applications/dp/0596102356/ref=pd_bbs_1?ie=UTF8&#038;s=books&#038;qid=1202593017&#038;sr=8-1">Building Scalable Websites</a> (AKA everything you ever wanted to know about managing a large-scale website) a few months ago and read it twice in succession. It&#8217;s that good.</p>
<p>The book is written by Cal Henderson, one of Flickr&#8217;s lead engineers. Most of the examples and experience he talks about is directly from working on Flickr. </p>
<p>Henderson covers virtually all topics and subject areas that you would ever have questions about when building a web app. What sort of development environments should I have? How do I deal with user input? How do I scale my database servers? How do I monitor my servers? It&#8217;s a very comprehensive book.</p>
<p>If you have any interest in scalability, best development practices, web security and/or monitoring, I highly recommend this book. It&#8217;s a fairly good read and great reference for any budding web developer. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.ryandoherty.net/2008/02/09/review-building-scalable-websites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
