<?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://ryandoherty.net/category/webdev/feed/" rel="self" type="application/rss+xml" /><link>http://ryandoherty.net</link> <description>Web developer and performance engineer</description> <lastBuildDate>Fri, 16 Sep 2011 21:11:35 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.2.1</generator> <item><title>Startup checklist</title><link>http://ryandoherty.net/2010/12/09/startup-checklist/</link> <comments>http://ryandoherty.net/2010/12/09/startup-checklist/#comments</comments> <pubDate>Thu, 09 Dec 2010 21:07:15 +0000</pubDate> <dc:creator>Ryan</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[WebDev]]></category> <guid
isPermaLink="false">http://www.ryandoherty.net/?p=744</guid> <description><![CDATA[The past few months I&#8217;ve worked with a few startups and it&#8217;s made me realize that it&#8217;s super easy to forget very basic, but crucial things when developing web software. The following is a big brain dump of everything I could think of. Source code management (git, svn, mercurial) Branches in scm for development and [...]]]></description> <content:encoded><![CDATA[<p>The past few months I&#8217;ve worked with a few startups and it&#8217;s made me realize that it&#8217;s super easy to forget very basic, but crucial things when developing web software. The following is a big brain dump of everything I could think of.</p><ul><li>Source code management (git, svn, mercurial)</li><li>Branches in scm for development and production</li><li>Separate test and prod server</li><li>Deployment scripts/tools</li><li>DB upgrade scripts</li><li>Some sort of framework (Django, Rails, CodeIgniter, anything)</li><li>CSS reset</li><li>HTML5 doctype</li><li>Follow yslow rules</li><li>Bug tracking software</li><li>Specs!</li><li>Feature list</li><li>Roadmap</li><li>Schedule</li><li>QA</li><li>Code review</li><li>Monitoring &#8211; nagios, munin</li><li>Print out scm revision/changeset in comment at bottom of webpage</li><li>Print out server name in comment at bottom of webpages</li><li>Coding standards/guidelines</li><li>Automated benchmarking/profiling, SLAs</li></ul><p>What else?</p> ]]></content:encoded> <wfw:commentRss>http://ryandoherty.net/2010/12/09/startup-checklist/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>An invalid or illegal string was specified&#8221; code: &#8220;12</title><link>http://ryandoherty.net/2010/11/24/an-invalid-or-illegal-string-was-specified-code-12/</link> <comments>http://ryandoherty.net/2010/11/24/an-invalid-or-illegal-string-was-specified-code-12/#comments</comments> <pubDate>Thu, 25 Nov 2010 04:37:00 +0000</pubDate> <dc:creator>Ryan</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[WebDev]]></category> <guid
isPermaLink="false">http://www.ryandoherty.net/?p=701</guid> <description><![CDATA[If you&#8217;re working with the new window.postMessage functionality in HTML5 and get this JavaScript error: An invalid or illegal string was specified" code: "12 Make sure you specify a full URL in window.postMessage like so: parent.postMessage('hi there!', 'http://www.ryandoherty.net'); If you use a URL like: &#8216;ryandoherty.net&#8217; you&#8217;ll get a very obtuse and unintelligible error message. I [...]]]></description> <content:encoded><![CDATA[<p>If you&#8217;re working with the new window.postMessage functionality in HTML5 and get this JavaScript error:</p><p><code>An invalid or illegal string was specified" code: "12</code></p><p>Make sure you specify a <strong>full URL</strong> in window.postMessage like so:</p><p><code>parent.postMessage('hi there!', 'http://www.ryandoherty.net');</code></p><p>If you use a URL like: &#8216;ryandoherty.net&#8217; you&#8217;ll get a very obtuse and unintelligible error message. I searched the internet for about 20 minutes to no avail. The error message apparently pops up for a number of other reasons. I&#8217;m posting this to hopefully help other people out!</p> ]]></content:encoded> <wfw:commentRss>http://ryandoherty.net/2010/11/24/an-invalid-or-illegal-string-was-specified-code-12/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Why Cesium Failed</title><link>http://ryandoherty.net/2010/10/29/why-cesium-failed/</link> <comments>http://ryandoherty.net/2010/10/29/why-cesium-failed/#comments</comments> <pubDate>Fri, 29 Oct 2010 23:25:31 +0000</pubDate> <dc:creator>Ryan</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[WebDev]]></category> <guid
isPermaLink="false">http://www.ryandoherty.net/?p=694</guid> <description><![CDATA[I&#8217;ve wanted to write this for a while but mainly pride stopped me. I think now I can handle admitting my failures. So here&#8217;s a big one! Note: the following opinions are mine alone and do not in any way reflect my former employer Mozilla. A few of you may remember my project &#8216;Cesium&#8217; that [...]]]></description> <content:encoded><![CDATA[<p>I&#8217;ve wanted to write this for a while but mainly pride stopped me. I think now I can handle admitting my failures. So here&#8217;s a big one!</p><p>Note: the following opinions are mine alone and do not in any way reflect my former employer Mozilla.</p><p>A few of you may remember my project &#8216;Cesium&#8217; that started over a year ago. It was an idea I had to automatically record ySlow scores for websites. It was started by an intern under my direction and myself during the summer of 2009. Needless to say, it never launched. There are a few key reasons this happened (all directly my decisions/mistakes), and if you&#8217;re familiar with software development you won&#8217;t find any of this surprising.</p><h3>Not invented here syndrome</h3><p>This was my biggest mistake. When I announced my intentions, <a
href="http://www.sergeychernyshev.com/blog/">Sergey Chernyshev</a> emailed me about his project <a
href="http://www.showslow.com/">ShowSlow</a>, <strong>which was almost identical to what I envisioned for Cesium</strong>. Stupidly, I only saw ShowSlow for what it was instead of its potential. We could have worked together and added new features to ShowSlow that I wanted for Cesium. It certainly would have given us a huge head start, considering ShowSlow a) already worked and b) people were using it.</p><p>The next time I start any project I will seriously consider using/working on another project that meets 50% of my needs. Adding new features to an existing codebase is usually far easier than starting something from the ground up.</p><h3>Choosing an unknown language and platform</h3><p>Cesium&#8217;s codebase uses Django, which was picked by my intern (and approved by myself). Now, I don&#8217;t think Django is a bad framework or Python is a bad language, they simply were wrong for us. My intern had little experience with Django and I had none, which is certainly a bad situation when you need to get a project off the ground in a predictable time frame.</p><p>During the start of the project, I should have chosen at least a language and framework that I was familiar with.  Learning Django and Python was time-consuming and could have been avoided. Remember: <strong>if you need to get a project out the door fast, stick with what you know</strong>.</p><h3>Poor time estimates and priority</h3><p>Again, another bad decision on my part. After my intern left at the end of the summer, Cesium was about 50-60% complete. In my head I think I believed it was closer to 90%, therefore I didn&#8217;t give it as much priority compared to other projects. I continually thought &#8216;Almost done, just another week or so&#8217;. Maybe if I was a Python and Django expert and worked 60 hour weeks.</p><p>I&#8217;m actually kind of surprised that I convinced myself it was almost done. When I&#8217;ve worked on other projects I&#8217;m usually the person tallying up estimates, doubling them and providing more realistic estimates for when it will be done. I think I let hubris cloud my judgement.</p><p>What I should have done was realistically estimate how long it would take for each feature/bug, multiply that by two then take a look at my other priorities. It would have shown there was at least a few more months of development. I could have then asked for dedicated resources or pushed off other projects.</p><h3>In the end</h3><p>A few weeks went by, then months. Eventually my disappointment in being unable to complete Cesium turned into avoiding it. So it sat. And sat. I now (personally) consider it abandoned and there are plenty of other better tools just like it out now. In all, it&#8217;s a humbling experience but certainly an educational one. Nothing really revelatory about why it was never completed, nothing new. But at least I learned a few things in the process.</p> ]]></content:encoded> <wfw:commentRss>http://ryandoherty.net/2010/10/29/why-cesium-failed/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>A new graduate&#8217;s dilemma</title><link>http://ryandoherty.net/2010/10/06/a-new-graduates-dilemma/</link> <comments>http://ryandoherty.net/2010/10/06/a-new-graduates-dilemma/#comments</comments> <pubDate>Thu, 07 Oct 2010 01:10:42 +0000</pubDate> <dc:creator>Ryan</dc:creator> <category><![CDATA[Programming]]></category> <category><![CDATA[WebDev]]></category> <guid
isPermaLink="false">http://www.ryandoherty.net/?p=686</guid> <description><![CDATA[Yesterday I found this email in my inbox from a soon-to-be graduate named Chris: ok i will be graduating with a degree in MIS this spring. many companies what software or web developers who know multiple languages like (HTML, CSS, PHP, JS, VBscript) i heard it takes 10 years to become master in something. I [...]]]></description> <content:encoded><![CDATA[<p>Yesterday I found this email in my inbox from a soon-to-be graduate named Chris:</p><blockquote><p>ok i will be graduating with a degree in MIS this spring. many companies what software or web developers who know multiple languages like (HTML, CSS, PHP, JS, VBscript)</p><p>i heard it takes 10 years to become master in something. I know a little about each language but for someone to become fairly proficient in ALL of these languages i do not see how software engineers do it. Or do software engineers/web developers just having a fair working knowledge of each language? I hope you understand my question. Basically i want to apply for jobs but when companies ask for web developers that know multiple languages i cant say i am very efficient in ALL the languages. But i do have a little working knowledge and i can always improve.</p></blockquote><p>When I read this email I new exactly how Chris felt. Most job descriptions are daunting. So many technologies! It&#8217;s easy to feel inferior and not apply. Here&#8217;s my response:</p><p>Hi Chris,<br
/> I understand your frustration with job postings, many of them list<br
/> lots of technologies and decades of experience. I have a lot to say<br
/> about job descriptions, getting experience and how to learn. My email<br
/> will be long, but I think it will help you a lot.</p><p>First off, most job descriptions are about 50% exaggeration. Companies<br
/> describe their ideal, perfect candidate. Unfortunately those people<br
/> don&#8217;t exist. There&#8217;s no way anyone could be an expert in 5 programming<br
/> languages and frameworks for 10 years when some of those technologies<br
/> didn&#8217;t exist 5 years ago. Descriptions full of buzzwords are often<br
/> used to attract many different people. Usually what happens is if<br
/> someone doesn&#8217;t know a particular language or technology it&#8217;s ok as<br
/> long as the applicant can learn it on the job. If you know a language<br
/> a little bit it&#8217;s usually not to hard to pick up the rest.</p><p>Also, a good company will look at potential during an interview. If a<br
/> candidate seems smart and able to learn quickly, they are usually a<br
/> better option than someone who has only worked in one or two specific<br
/> technologies for a decade. It depends on the job, but in my opinion<br
/> brains and ability to learn is more important than knowing a language<br
/> or technology in and out.</p><p>In my opinion there are a few skills for programmers that are most important:</p><p>1) Ability to learn/teach themselves a new technology/language. This<br
/> is mandatory. Technology changes so fast you cannot rely upon what you<br
/> learned in school. By the time you graduate it will be antiquated. You<br
/> need to know how to read documentation, Google effectively and be<br
/> willing to dive and and make mistakes while learning. There is a<br
/> phenomenal amount of information on the web about anything you&#8217;d need<br
/> to learn. You just need to find it <img
src='http://ryandoherty.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Pick a technology or language<br
/> you don&#8217;t know and start building. Read tutorials, read books, build<br
/> something (doesn&#8217;t have to be fancy). Go to clubs or meetups about<br
/> technologies you&#8217;re interested in. Most of all, don&#8217;t stop learning.</p><p>2) Communication. This is #2, but probably should be #1. I cannot<br
/> stress this enough: If you can&#8217;t communicate effectively it doesn&#8217;t<br
/> matter how good a coder you are. Writing, speaking and negotiation.<br
/> I&#8217;m not a genius programmer, probably in the 60% or 70% percentile,<br
/> but I attribute my success to my communication skills. Write clearly<br
/> and succinctly. Talk professionally, be friendly. *Listen* to people<br
/> and understand their needs. Communicate your status regularly. Tell<br
/> people what you do.</p><p>With those two skills you will be ahead of probably 80% of all<br
/> programmers out there.</p><p>Regarding what you know now, apply to the jobs you want! What&#8217;s the<br
/> worst that can happen? You&#8217;ll get a lot of interviewing experience,<br
/> which is always good. And if you get a job, even better! Don&#8217;t sweat<br
/> not knowing everything, just focus on continual improvement and<br
/> learning.</p><p>Hope that helps,<br
/> Ryan</p><p>What do you think? Anything I missed or you&#8217;d like Chris to know?</p> ]]></content:encoded> <wfw:commentRss>http://ryandoherty.net/2010/10/06/a-new-graduates-dilemma/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>getpersonas.com 2.0 is live!</title><link>http://ryandoherty.net/2009/12/16/getpersonas-com-2-0-is-live/</link> <comments>http://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[phptvdb]]></category> <category><![CDATA[WebDev]]></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://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://ryandoherty.net/2009/06/28/review-web-form-design/</link> <comments>http://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://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://ryandoherty.net/2009/03/23/426/</link> <comments>http://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://ryandoherty.net/2009/03/23/426/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Optimizing openSpaceBook</title><link>http://ryandoherty.net/2008/10/12/optimizing-openspacebook/</link> <comments>http://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://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://ryandoherty.net/2008/08/18/want-some-real-world-web-development-experience/</link> <comments>http://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://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://ryandoherty.net/2008/07/13/unicorns-and-scalability/</link> <comments>http://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://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://ryandoherty.net/2008/05/15/6-great-web-development-mailing-lists/</link> <comments>http://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://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://ryandoherty.net/2008/05/10/yahoo-messenger-website-redesign/</link> <comments>http://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://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://ryandoherty.net/2008/05/07/front-end-engineering-interview-questions/</link> <comments>http://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://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://ryandoherty.net/2008/05/05/learn-to-be-a-front-end-engineer-from-the-best/</link> <comments>http://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://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://ryandoherty.net/2008/05/04/how-to-become-a-great-web-developer/</link> <comments>http://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://ryandoherty.net/2008/05/04/how-to-become-a-great-web-developer/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> </channel> </rss>
