<?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>Coffee on the Keyboard &#187; workflow</title>
	<atom:link href="http://coffeeonthekeyboard.com/tag/workflow/feed/" rel="self" type="application/rss+xml" />
	<link>http://coffeeonthekeyboard.com</link>
	<description>by James Socol</description>
	<lastBuildDate>Mon, 06 Feb 2012 23:33:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/>		<item>
		<title>So You Wanna Help Mozilla?</title>
		<link>http://coffeeonthekeyboard.com/so-you-wanna-help-mozilla-316/</link>
		<comments>http://coffeeonthekeyboard.com/so-you-wanna-help-mozilla-316/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 00:45:22 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[amo]]></category>
		<category><![CDATA[mozilla]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[sumo]]></category>
		<category><![CDATA[support]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[web dev]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://coffeeonthekeyboard.com/?p=316</guid>
		<description><![CDATA[A common theme we heard in responses to our web developer survey was: &#8220;I wish I could help Mozilla, but I&#8217;m just a web developer.&#8221; Well, fellow web ninjas, you can put your skills to work with Mozilla and help make the web a better place. Our web projects are open, just like Firefox, and [...]]]></description>
			<content:encoded><![CDATA[<p>A common theme we heard in responses to our <a href="http://hacks.mozilla.org/2009/11/web-developer-survey-update/">web developer survey</a> was: &#8220;I wish I could help Mozilla, but I&#8217;m just a web developer.&#8221;</p>
<p>Well, fellow web ninjas, you <em>can</em> put your skills to work with Mozilla and help make the web a better place. Our web projects are open, just like Firefox, and we&#8217;d love your help!</p>
<p>If you&#8217;re a web developer and want to help Mozilla and Firefox users while working on sites that see millions of visitors every day, follow me through the jump and I&#8217;ll show you around our shop and introduce you to the tools we use.<span id="more-316"></span></p>
<h3>Our Projects</h3>
<p>Mozilla Web Dev is responsible for pretty much every web site at Mozilla, from <a href="https://addons.mozilla.org/">Addons</a> to <a href="http://support.mozilla.com/">Support</a> to <a href="http://www.mozilla.com/">Mozilla.com</a> to <a href="http://www.spreadfirefox.com/">Spread Firefox</a>. We also take care of web services like the <a href="https://wiki.mozilla.org/AUS">Application Update Service</a>, <a href="https://wiki.mozilla.org/PFS2">Plugin Finder Service</a> and the <a href="https://wiki.mozilla.org/Socorro">Crash Report Beacon</a>.</p>
<p>Almost all of our code (everything except Socorro—the crash report beacon—I think) is available on <a href="http://viewvc.svn.mozilla.org/vc/">svn.mozilla.org</a>. You can browse around the server and see the source right now. It will all basically run on the standard LAMP (where P is PHP or Python) stack.</p>
<h3>Our Tools</h3>
<p>The control center of web development at Mozilla is <a href="http://bugzilla.mozilla.org/">Bugzilla</a>. All our work takes the form of &#8220;bugs&#8221; here. A &#8220;bug&#8221; is not necessarily a problem with the software. A new feature or a software update would also be called a &#8220;bug.&#8221; I&#8217;ll talk about the life-cycle of a web development bug below.</p>
<p>IRC is just as important as Bugzilla. Both our staff and our contributors are geographically diverse, and IRC gives us a good way to coordinate and talk to each other around the globe. If you&#8217;re new to IRC, <a href="https://addons.mozilla.org/en-US/firefox/addon/16">ChatZilla</a> is an easy place to start. Most projects have their own channel on <a href="http://irc.mozilla.org/">irc.mozilla.org</a>, like <a href="irc://irc.mozilla.org/sumo">#sumo</a> for Support and <a href="irc://irc.mozilla.org/amo">#amo</a> for Addons. We&#8217;re also usually in <a href="irc://irc.mozilla.org/webdev">#webdev</a>.</p>
<p>As web developers, are chief weapon is HTML. HTML and CSS. HTML, CSS, and JavaScript. <em>No one expects the&#8230;</em> (Sorry.) On the front-end, we chiefly work in HTML, CSS, and JavaScript, and occasionally other technologies like XML. On the back-end, nearly all of our projects are in PHP or Python.</p>
<p>For version control we mostly use Subversion, though git (and git-svn) has gained a bunch of ground lately. (Addons will be <a href="http://micropipes.com/blog/2009/11/17/amo-development-changes-in-2010/">moving to git</a> sometime next year.)</p>
<p>To work on your own computer, you&#8217;ll probably need to set up Apache, MySQL, and PHP or Python. <a href="http://www.apachefriends.org/en/xampp.html">XAMPP</a> can be incredibly helpful here. Working on Linux (or Mac OS) is usually easier than Windows, and closer to our server environment. A tool like <a href="http://www.virtualbox.org/">VirtualBox</a> will let you run a Linux virtual machine on most other operating systems. It&#8217;s a little slower but switching back and forth is easy. I&#8217;ll try to write about my local development set up soon.</p>
<h3>Our Workflow</h3>
<p>Let&#8217;s go over the life of a bug. This is a little long-winded.</p>
<p>A bug is born either when someone describes a problem or when we decide to add a new feature. (Every project has its own way of doing the latter.) Sometimes our Web <abbr title="Quality Assurance">QA</abbr> team finds problems, sometimes community members do. Then the bug is created, or filed, usually by the person who discovers it—that could be you!</p>
<p>Once a bug has been filed, possibly after some discussion of the best way to fix it, a developer—and that could be you, too—will &#8220;take&#8221; the bug, accepting responsibility for fixing it. Fixing a bug means changing the application in some way: changing a behavior, adding a localization, etc.</p>
<p>When the developer believes they&#8217;ve fixed the problem in their copy, they generate a patch (Subversion&#8217;s &#8220;diff&#8221; command is useful). They then upload that patch as a new attachment, and request review (r?) from someone else. Who does the review will depend on the project and how busy everyone is. If you&#8217;re not sure who to ask, ask in IRC.</p>
<p>The patch will either get an r+ or an r-. An r+ means it&#8217;s good to go, and it can usually be checked in to Subversion (unless there are reasons to wait). An r- means there&#8217;s something wrong. This can range from a patch containing some extraneous data to a patch not solving the problem, and an r- almost always includes a description of the problem.</p>
<p>When a patch with a positive review (r+) gets checked in to Subversion, the developer will include the revision in the bug and change it from <em>new</em> to <em>resolved: fixed</em>. In a few minutes, the change will appear on a staging server that&#8217;s updated frequently with the latest code. Our Web QA staff and contributors will test the bug, compare expected to actual behavior, and with either <em>reopen</em> the bug, if it&#8217;s not fixed, or set the status to <em>verified</em>. Then the bug is considered done. Verified bugs rarely reopen.</p>
<p>Once all the bugs for a milestone are done, we &#8220;freeze&#8221; the source against new commits while Web QA does a final check that everything is in good shape. When QA signs off on the current code, we push the new version onto our production web servers.</p>
<p>So that&#8217;s the life of a bug, from filed to production. When it gets to production, your code can be seen or used by millions of people every day.</p>
<h3>Join Us</h3>
<p>So if you&#8217;re a web developer and want to help Mozilla and Firefox, head over to Bugzilla or IRC and get started. We hope to see you soon!</p>
]]></content:encoded>
			<wfw:commentRss>http://coffeeonthekeyboard.com/so-you-wanna-help-mozilla-316/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Work Pattern: Designing Web Sites</title>
		<link>http://coffeeonthekeyboard.com/work-pattern-designing-web-sites-93/</link>
		<comments>http://coffeeonthekeyboard.com/work-pattern-designing-web-sites-93/#comments</comments>
		<pubDate>Mon, 26 May 2008 15:40:02 +0000</pubDate>
		<dc:creator>James</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Accessibility]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[work pattern]]></category>
		<category><![CDATA[workflow]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://coffeeonthekeyboard.com/work-pattern-designing-web-sites-93/</guid>
		<description><![CDATA[The premise of Design Patterns is that similar problems have similar solutions. In the same vein, I propose this Work Pattern a set of common steps I use when I create a web site, and maybe you can use, too. Elements and Outline My first step is usually to create an un-styled outline of a [...]]]></description>
			<content:encoded><![CDATA[<p>The premise of <a href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)">Design Patterns</a> is that similar problems have similar solutions. In the same vein, I propose this <strong>Work Pattern</strong> a set of common steps I use when I create a web site, and maybe you can use, too.</p>
<h4>Elements and Outline</h4>
<p>My first step is usually to create an un-styled outline of a &#8220;typical&#8221; page. I fire up my editor, fill in the basic <abbr title="eXtensible HyperText Markup Language">XHTML</abbr>, and then go to work inside the <code>&lt;body&gt;</code> tag.</p>
<p>Most sites have this fairly common structure: header, content, footer. And just for fun, let&#8217;s throw in navigation between the header and the content. It&#8217;s pretty easy to represent this in XHTML:</p>
<pre>&lt;div id="header"&gt;
&lt;/div&gt;

&lt;div id="navigation"&gt;
&lt;/div&gt;

&lt;div id="content"&gt;
&lt;/div&gt;

&lt;div id="footer"&gt;
&lt;/div&gt;</pre>
<p>This is my first skeleton for &gt;90% of the sites I design. It&#8217;s a very standard document. Sometimes navigation will be inside the header, but most often it goes like this.</p>
<p>Now you have to start thinking about what elements will be on the page. On this site, a blog, I used &#8220;articles&#8221; instead of &#8220;content&#8221; for the main div. I also added two side bars, and I knew that inside the articles div I&#8217;d want, well, articles.</p>
<pre>&lt;div id="header"&gt;
  &lt;h1&gt;Page Title&lt;/h1&gt;
&lt;/div&gt;

&lt;div id="navigation"&gt;
  &lt;ul&gt;
    &lt;li&gt;Link 1&lt;/li&gt;
    &lt;li&gt;Link 2&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div id="articles"&gt;
  &lt;h2&gt;Recent Articles&lt;/h2&gt;
  &lt;div class="article"&gt;
    &lt;h3&gt;Article Title&lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div id="theblog"&gt;
  &lt;h2&gt;Sidebar heading&lt;/h2&gt;
  &lt;p&gt;Sidebar paragraph&lt;/p&gt;
&lt;/div&gt;

&lt;div id="theworld"&gt;
  &lt;h2&gt;Sidebar heading&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;Sidebar&lt;/li&gt;
    &lt;li&gt;list&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div id="footer"&gt;
&lt;/div&gt;</pre>
<p class="image right"><img src="http://coffeeonthekeyboard.com/wp-content/uploads/2008/05/skeleton.png" alt="An Un-Styled Skeleton" /></p>
<p>I won&#8217;t bore you with more code examples; I think you get the idea. I <a href="http://coffeeonthekeyboard.com/building-accessible-sites-part-three-in-a-trilogy-69/" title="make an outline">make an outline</a>. I know at this point that my source is nice and valid, and that it will make sense when I <a href="http://coffeeonthekeyboard.com/assessing-accessibility-part-two-in-a-trilogy-67/" title="turn off the stylesheet">turn off the stylesheet</a>. I use <a href="http://coffeeonthekeyboard.com/use-semantics-to-guide-design-53/" title="semantic names">semantic names</a> for everything.</p>
<p>It&#8217;s not very pretty, but I now have a workable XHTML document, with a properly-nested outline, and most of the important elements. Good for me, because now I can start to style them.</p>
<h4>Layout and Style</h4>
<p>Now, I know what visual elements will need to go on the page. I know what page elements I need to style. Now I&#8217;ll start creating a style sheet.</p>
<p>My first style sheet will contain a few basic <abbr>HTML tags and the elements of my document. I could probably write an XML</abbr>-to-<abbr title="Cascading Style Sheets">CSS</abbr> generator with how strict I am with this step.</p>
<p>Ok, one more code example:</p>
<pre>body {}

h1,
h2,
h3,
h4,
h5,
h6 {}

a:link {}
a:visited {}
a:hover {}

#header {}
#header h1 {}

#navigation {}
#navigation ul {}
#navigation ul li {}

#articles {}
#articles h2 {}
#articles div.article {}
#articles div.article h2 {}

#theblog {}
#theblog h2 {}

#theworld {}
#theworld h2 {}
#theworld ul {}
#theworld ul li {}

#footer {}</pre>
<p>One of my favorite things about this is it&#8217;s almost impossible for a mistake in one section to mess up anything else.</p>
<p>But obviously there&#8217;s a lot in there I can combine, can shorten. Almost anything that&#8217;s true for <code>#theblog</code> will also be true for <code>#theworld</code> in this case, so <abbr title="Don't Repeat Yourself">DRY</abbr>, and keep things together as much as you can. But, when you&#8217;re just starting the style sheet, this is a good place to start.</p>
<p>As I&#8217;m going, I add a lot to the style sheet. I also add a lot to the XHTML template. Pixels get tweaked left and right and I swear at <abbr title="Internet Explorer 6">IE6</abbr>, of course.</p>
<h4>Building Templates</h4>
<p>Once I have a complete, or near-complete, <a href="http://coffeeonthekeyboard.com/wp-content/themes/mock.htm">mock up</a>,  it&#8217;s time to start building templates for your <abbr title="Content Management System">CMS</abbr> of choice. This is mostly copy-and-paste work at this point. Your <code>#header</code> and <code>#navigation</code> go into the header template. <code>#footer</code> goes into footer. <code>#content</code> goes in the content template.</p>
<p>See how easy that is?</p>
<p>Then you get to go through and actually add the template mark up. Whether it&#8217;s Smarty or PHP or ASP doesn&#8217;t really matter, you just replace your dummy text with the right tags.</p>
<h4>Starting Out</h4>
<p>I love this process, but there is one thing you really need for it to go smoothly:</p>
<p>You need to know what kind of content you&#8217;ll have. When you&#8217;re redesigning your blog, or building an in-house site, it&#8217;s pretty easy to know. When you&#8217;re working for a client, you may need to twist some arms to get this information. (I love <a href="http://www.alistapart.com/articles/designbymetaphor">this A List Apart article</a> for advice on communicating with clients.)</p>
<p>One final thought: use comments. Any time I create a div, I wrap it in comments like this:</p>
<pre>&lt;!--begin #articles --&gt;
&lt;div id="articles"&gt;
&lt;/div&gt;
&lt;!-- end #articles --&gt;</pre>
<p>I usually use the CSS selector because it&#8217;s specific, so <code>#articles</code>, <code>.article</code>, and so on. These comments—which I left out here to save space—have saved me so much time and effort compared to relying on indentation that I can&#8217;t imagine working without them.</p>
<p>I didn&#8217;t set out this process as a way to streamline my work, but rather, as I started noticing patterns that worked well, I started thinking about the process. Much like <a href="http://rubyonrails.org/">Rails</a>, which was already running <a href="http://www.basecamphq.com/">Basecamp</a> before it was a framework, I&#8217;ve been using more-and-more-polished versions of this work flow for months.</p>
<p>Maybe you&#8217;ll find it helpful, maybe not. Maybe you already have a &#8220;system&#8221; in place. If you do, what is it?</p>
]]></content:encoded>
			<wfw:commentRss>http://coffeeonthekeyboard.com/work-pattern-designing-web-sites-93/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

