<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>Loud Dog Blog</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/" />
<modified>2010-06-04T18:32:32Z</modified>
<tagline>News, Articles and Errata</tagline>
<id>tag:www.louddog.com,2010://1</id>
<generator url="http://www.movabletype.org/" version="4.1">Movable Type</generator>
<copyright>Copyright (c) 2010, mdeclaire</copyright>

<entry>
<title>Google Analytics Event Tracking in Flash</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2010/06/google-analytics-event-trackin.php" />
<modified>2010-06-04T18:32:32Z</modified>
<issued>2010-06-04T16:57:15Z</issued>
<id>tag:www.louddog.com,2010://1.140</id>
<created>2010-06-04T16:57:15Z</created>
<summary type="text/plain">In which I hurdled a gotcha inherent in tracking Google Analytics events within a Flash banner.</summary>
<author>
<name>Matt DeClaire</name>
<url>http://mattdeclaire.com</url>
<email>matt@louddog.com</email>
</author>
<dc:subject>Tutorials</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>So, I needed to add some <a href="http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html">Google Analytics even tracking</a> to a Flash banner today.  So, I think to myself, &#8220;It&#8217;s just a simple JavaScript call.  No problem.&#8221;</p>

<pre><code>pageTracker._trackEvent(
    'flashBanner',
    'changeTab',
    'newTabName'
);
</code></pre>

<p>In ActionScript, you can use the getURL() function to make JavaScript calls, like so:</p>

<pre><code>getURL("javascript:alert('Where are my pants!?!');")
</code></pre>

<p>So, it would follow that I could do this:</p>

<pre><code>getURL("javascript:
    pageTracker._trackEvent(
        'flashBanner',
        'changeTab',
        'newTabName'
    );
");
</code></pre>

<p>Well, as an Action Script novice-to-intermediate, I didn&#8217;t realize there would be a problem.  Turns out that the _trackEvent() returns a boolean value.  It also turns out that getURL() will take any value it&#8217;s given and run with it.  So, when I installed the banner and switched tabs, my browser left the page.  In the address bar, was the JavaScript call I made, and the page just said, &#8220;true&#8221;.</p>

<p>I needed to muffle the return value from _trackEvent() so that getURL() would sit quietly.  So, I wrapped the _trackEvent() call in an <a href="http://blog.themeforest.net/tutorials/ask-jw-decoding-self-invoking-anonymous-functions/">self-invoking anonymous JavaScript function</a>.</p>

<pre><code>getURL("javascript:
    (function() {
        pageTracker._trackEvent(
            'flashBanner',
            'changeTab', 
            'newTabName'
        );
    })();
");
</code></pre>

<p>This created a new function, that did not have a return value to hand to getURL(). Inside, it calls _trackEvent() for me, and throws away that pesky boolean.  I put this all in the ActionScript of my tab button, to be called on mouse press.</p>

<pre><code>on(press) {
    getURL("javascript:
        (function() {
            pageTracker._trackEvent(
                'flashBanner',
                'changeTab', 
                'newTabName'
            );
        })();
    ");
}
</code></pre>

<p>Now I can track events all day in peace.</p>

<p>P.S. - I&#8217;ve put all my example code above across several lines, and added indentation to make the more readable.  But in my ActionScript, it&#8217;s done all on one line.</p>
]]>


</content>
</entry>

<entry>
<title>How to save to Delicious from your iPhone</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2010/04/how-to-save-to-delicious-from.php" />
<modified>2010-04-06T16:14:13Z</modified>
<issued>2010-04-05T21:54:03Z</issued>
<id>tag:www.louddog.com,2010://1.139</id>
<created>2010-04-05T21:54:03Z</created>
<summary type="text/plain">Learn the easy way to use Delicious to tag your web surfing on your iPhone right from Safari.</summary>
<author>
<name>Matt DeClaire</name>
<url>http://mattdeclaire.com</url>
<email>matt@louddog.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>One of my core web browsing requirements is to be able to tag pages using <a href="http://delicious.com">Delicious</a>.  As a <a href="http://www.triplecrownofsurfing.com">Triple Crown</a> level web surfer, it&#8217;s my duty to share with the world my content discoveries.  Modern desktop browsers make this easy with browser <a href="https://addons.mozilla.org/en-US/firefox/addon/3615">add-ons</a> or <a href="http://code.google.com/p/delicious-chrome-extension/">extensions</a>, and <a href="http://en.wikipedia.org/wiki/Bookmarklet">bookmarklets</a>.  But there isn&#8217;t a straightforward answer for the iPhone.</p>

<p>Turns out that Safari on the iPhone will handle bookmarklets just fine.  The problem is getting bookmarklets into your Bookmarks.  You can&#8217;t drag and drop a link from a page to a toolbar, and there isn&#8217;t an &#8220;Add to Bookmarks&#8221; in the &#8220;context menu&#8221; (tap and hold on a link for three seconds to get the context menu).  You can only add bookmarks by using the <img alt="plus" src="/delicious-on-iphone/plus.jpg" /> button at the bottom of the browser.  It&#8217;s not hard to find solutions out there on the <a href="http://www.google.com/search?q=delicious+iphone+bookmarklet">Internet</a> explaining how to get around this, but most solutions use syncing with a computer to do so. </p>

<p>We need an easier way.  <a href="http://www.youtube.com/watch?v=0hiUuL5uTKc">This is how we do it.</a></p>

<p>Go to this page on your iPhone (the one you are currently reading), and <a href="http://www.youtube.com/watch?v=N4hkSQrQOLM">copy</a> the bit of JavaScript below.</p>

<blockquote>javascript:(function(){location.href=&#8217;http://m.delicious.com/save?url=&#8217;+encodeURIComponent(window.location.href)+&#8217;&title=&#8217;+encodeURIComponent(document.title)+&#8217;&v=5&jump=yes&#8217;})()</blockquote>

<p>Bookmark the page with the <img alt="plus" src="/delicious-on-iphone/plus.jpg" /> button.</p>

<p>Rename your new bookmark &#8220;Tag with Delicious&#8221; (or &#8220;Save this here page&#8221;), and save this bookmark.  (Don&#8217;t worry that you can&#8217;t change the address.)</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="save" src="http://www.louddog.com/delicious-on-iphone/save.jpg" width="320" height="480" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p>Open up your bookmarks with the <img alt="book" src="http://www.louddog.com/delicious-on-iphone/book.jpg"  /> button, enter editing mode by tapping the &#8220;Edit&#8221; button in the lower left, and edit your &#8220;Tag&#8230;&#8221; bookmark.  (If you decide to tap the delete button, go back to step one.)</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="edit.jpg" src="http://www.louddog.com/delicious-on-iphone/edit.jpg" width="320" height="480" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p>Replace everything in the address field (under the bookmark title) with the JavaScript you copied previously, and then save it up.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="js.jpg" src="http://www.louddog.com/delicious-on-iphone/js.jpg" width="320" height="480" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p>Now you can browse around the web, and when you come to something you <a href="http://lifehacker.com/5451765/ditch-the-granny-knot-to-tie-your-shoes-more-efficiently">would like to save</a>, just open this bookmark.  It will send you to a Delicious tagging page with the address and title filled in for you.  Add your tags and save it away.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="rad.jpg" src="http://www.louddog.com/delicious-on-iphone/rad.jpg" width="320" height="480" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p><strong>Update:</strong> Patrick Caldwell wrote a nice <a href="http://dpatrickcaldwell.blogspot.com/2009/08/iphone-bookmarklet-to-install-iphone_06.html">bookmarklet installation helper bookmarklet</a>.  Handy.</p>
]]>


</content>
</entry>

<entry>
<title>Loud Dog Brings the Dapper</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2010/02/loud-dog-brings-the-dapper.php" />
<modified>2010-02-05T18:52:37Z</modified>
<issued>2010-02-05T16:29:21Z</issued>
<id>tag:www.louddog.com,2010://1.138</id>
<created>2010-02-05T16:29:21Z</created>
<summary type="text/plain">At Loud Dog, we are a casual group.  But every year we engage in our annual proof that we clean up well.  We held our 2009 Holiday Dinner at [Spruce](http://www.sprucesf.com), where we sauntered through a six course parade of wonders.</summary>
<author>
<name>Matt DeClaire</name>
<url>http://mattdeclaire.com</url>
<email>matt@louddog.com</email>
</author>
<dc:subject>Loud Dog Culture</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>At Loud Dog, we are a casual group.  But every year we engage in our annual proof that we clean up well.  We held our 2009 Holiday Dinner at <a href="http://www.sprucesf.com">Spruce</a>, where we sauntered through a six course parade of wonders.  I will now rate them for you.</p>

<ul>
<li>French Red Pumpkin Soup - 10</li>
<li>Seared and Preserved Foie Gras - 11</li>
<li>Escarole Salad with Olio Nuovo - 35</li>
<li>Roasted Striped Bass and Dungeness Crab in Champagne Butter - 124</li>
<li>28 Day Dry Aged Rib Eye with Duck Fat Potatoes - 395</li>
<li>Trio of Desserts - a billion</li>
</ul>

<p>Al together, that is a rating of 1,000,000,575 out of 60.</p>

<p>Each course was paired with the perfect wine, which partially (but not entirely) accounted for the upward trend in scores.  We finished the night off with an exchange of gifts and our group photo.</p>

<p>Enjoy the following glimpse into another of a series of good times at Loud Dog.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="spruce.jpg" src="http://www.louddog.com/pictures/spruce.jpg" width="500" height="334" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="louddog.jpg" src="http://www.louddog.com/pictures/louddog.jpg" width="500" height="454" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="bowtie.jpg" src="http://www.louddog.com/pictures/bowtie.jpg" width="500" height="285" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="food.jpg" src="http://www.louddog.com/pictures/food.jpg" width="500" height="176" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="group.jpg" src="http://www.louddog.com/group/group.jpg" width="500" height="270" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span></p>
]]>


</content>
</entry>

<entry>
<title>Refreshing Mark Logic&apos;s Website</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/11/mark-logic-website-refresh.php" />
<modified>2009-11-30T22:12:39Z</modified>
<issued>2009-11-30T22:54:28Z</issued>
<id>tag:www.louddog.com,2009://1.136</id>
<created>2009-11-30T22:54:28Z</created>
<summary type="text/plain">With innovative products and services, extensible capabilities, and A-list customers, all Mark Logic needed was a website refresh. But what did that mean?</summary>
<author>
<name>Jodi Wing</name>
<url>http://www.louddog.com</url>
<email>jodi@louddog.com</email>
</author>
<dc:subject>Loud Dog News</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>Mark Logic offers a suite of infrastructure software for information applications. Using the innovative <a href="http://www.marklogic.com/product/marklogic-server.html">MarkLogic Server</a>, customers like Harvard Business Press can quickly create new online content products to meet market needs, and content providers like JetBlue’s training organization can use applications they already know to push information out in formats that exactly meet the needs of specific employee groups. </p>

<p>So, the company rocks. And its savvy marketing team wanted the website to reflect that fact. Loud Dog partnered with the team to evaluate the site and provide a fresh design. </p>

<h2>Here’s how we did it:</h2>

<ol>
<li><strong>We started the project by analyzing current site activity.</strong> We used heatmaps to find out what people were interested in, what they were looking for, and how they navigated the site. Discovering what people really used informed the design direction. </li>
<li><strong>We changed the homepage to make it simpler and cleaner.</strong> We highlighted the customer stories, testimonials, and case studies and gave <a href="http://marklogic.blogspot.com/">CEO Dave Kellogg’s blog</a> more prominence. (Dave is an avid blogger with a devoted following.) We also introduced imagery that added a human element to the site.  </li>
<li><strong>We worked with their team to identify other opportunities for improvement.</strong> We lightened the look and feel, brightened the background, and gave the pages a classier corporate feel befitting the brand.  </li>
<li><strong>Finally, we made it all happen with minimal structural programming</strong> (and minimal cost) by focusing on adjusting images and the CSS.</li>
</ol>

<h2>Check it out!</h2>

<h3>Before</h3>

<div style="text-align: center;" class="screenshots">
<img src="/images/blog/Old_ML_home_thumb.jpg" alt="Old Mark Logic Homepage" title="Old Mark Logic Homepage" />
</div>

<h3>After</h3>

<div style="text-align: center;" class="screenshots">
<img src="/images/blog/New_ML_home_thumb.jpg" alt="Redesigned Mark Logic Homepage" title="Redesigned Mark Logic Homepage" />
</div>
]]>


</content>
</entry>

<entry>
<title>Put down that tagline!</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/11/put-down-that-tagline.php" />
<modified>2009-12-01T17:05:27Z</modified>
<issued>2009-11-19T22:45:13Z</issued>
<id>tag:www.louddog.com,2009://1.137</id>
<created>2009-11-19T22:45:13Z</created>
<summary type="text/plain">If your tagline isn&apos;t incredibly awesome, stop using it now! Create a great one, or don&apos;t use one at all.</summary>
<author>
<name>Josh Orum</name>
<url>http://www.louddog.com</url>
<email>josh@louddog.com</email>
</author>
<dc:subject>Brand and Identity Design</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>Is your company&#8217;s tagline awesome? Does it sing from the hills and inspire your customers? Does it tell the world something really great?</p>

<p>Or is it vague, meaningless, and mediocre? Do you forget it as soon as you say it?</p>

<p>If it doesn&#8217;t kick butt, put it down! <strong>Stop using it right now.</strong> Don&#8217;t use a tagline unless it&#8217;s really awesome.</p>

<h2>Taglines are optional, so only use one if it&#8217;s great.</h2>

<p>Some branding elements aren&#8217;t optional. Every company has a name, logo, and visual style, even if it&#8217;s not formally defined. A company name in the <a href="http://online.wsj.com/article/SB123992364819927171.html">Comic Sans</a> typeface and a visual style that&#8217;s &#8220;all over the map&#8221; may not be very good, but they&#8217;re still a logo and visual style.</p>

<p><strong>A tagline is completely optional.</strong> You don&#8217;t need it. </p>

<p>Maybe you think you need one because no one knows what you do. That&#8217;s a separate problem, and a tagline is not the only solution. Moreover, a bad tagline doesn&#8217;t tell anyone what you do. It will detract from any other branding you have in place.</p>

<p>A tagline can be an incredibly powerful marketing tool &#8212; and it&#8217;s a very prominent branding element. If you have an awesome tagline, use it!  </p>

<p>But if you have a lame tagline, ditch it. It&#8217;s dragging your brand down. </p>
]]>


</content>
</entry>

<entry>
<title>Being smart with dumb programs</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/07/dumb-programs-are-smart.php" />
<modified>2009-08-03T18:56:32Z</modified>
<issued>2009-08-01T00:54:58Z</issued>
<id>tag:www.louddog.com,2009://1.135</id>
<created>2009-08-01T00:54:58Z</created>
<summary type="text/plain">Two of Loud Dog&apos;s guiding principles are a focus on developing long-term relationships and a focus on design and technology as business solutions. How is this reflected in our engineering practice?</summary>
<author>
<name>Josh Orum</name>
<url>http://www.louddog.com</url>
<email>josh@louddog.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>Two of Loud Dog&#8217;s guiding principles are a focus on developing long-term strategic relationships with our clients and a focus on design and technology as business solutions. </p>

<p>These affect everything we do, including how we approach engineering problems.</p>

<h2>What these principles mean in practical terms.</h2>

<p><strong>First, we&#8217;re going to have to deal with this code down the road.</strong> Since we&#8217;re trying to establish a relationship with the client, not just complete a one-off project, we expect that we&#8217;ll have to work with the code again. Even if we don&#8217;t, we should deliver code that we wouldn&#8217;t mind working with - after all, someone else is going to have to work with it and I&#8217;d like them to think that it&#8217;s easy to work with rather than difficult.</p>

<p><strong>Second, business requirements and designs will change. We know and expect this.</strong> This is the fundamental assumption of Agile programming methodologies; only in rare projects do requirements stay consistent, and these are usually very large projects in very stable industries. In web-oriented project, requirements change all the time, during the project, after the project, even before the project.</p>

<p>This means that we make sure our code is: </p>

<ul>
<li><strong>clean,</strong></li>
<li><strong>well-documented</strong> and </li>
<li><strong>very flexible.</strong> (this is the most important one!)</li>
</ul>

<h2>Client-side error validation as an example.</h2>

<p>Our client-side error validation code is a great example of these principals in action.</p>

<p>When I first programmed our error validation code back in 2000 or so, it was fully customized to every page. Although it enabled me to custom-make every page, it was tedious and difficult to maintain; whenever I wanted to duplicate the functionality, I had to recreate the function.</p>

<p>In the second iteration, I re-factored the code and included it in an external file. This way I just needed to include the file and submit the form to the function. It still wasn&#8217;t pretty because I included a bunch of javascript-generated text in the HTML to tell people what was required and to spit out error messages.</p>

<p>In the third iteration, Amelia extracted the inline stuff and put it in the function. Now, we could easily create new forms with a minimal amount of special HTML (we had to have an empty div for the error messages, but that&#8217;s all). While this method made programming new forms easy, if we wanted to change the forms down the road in response to changing business requirements (say a field is required in one but not another), we had to go edit the master function, and ended up introducing all sorts of hacky things to make up for the differences in forms. This was easy to program, but <strong>brittle.</strong></p>

<p>In the fourth iteration, Matt completely refactored it to make it both <strong>elegant</strong> and <strong>flexible</strong>. The new version contained a set of tests and validation scripts for popular fields (e-mail, telephone, etc.), and general instructions and responses (it auto-formats stuff, for example), but they aren&#8217;t required, but are called when the function is called.</p>

<p>So it&#8217;s very smart, but it&#8217;s also &#8220;dumb&#8221;: <strong>it doesn&#8217;t make assumptions about what will be needed.</strong> Instead, you have to specify which fields are required with each form. This makes programming new forms slightly more difficult, but in the end maintenance is much easier and the main code remains clean.</p>

<h2>&#8220;Dumb Programs&#8221; are Smart.</h2>

<p>My take-away is that we should make programs and code dumb. Making &#8220;smart programs,&#8221; based on assumptions about future designs, will only lead to lots of pain and suffering. By keeping only the most basic stuff on a high level, we maximize our ability to change while still taking advantage of standard libraries.</p>
]]>


</content>
</entry>

<entry>
<title>Painting the town redHOT*</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/06/painting-the-town-redhot.php" />
<modified>2009-06-17T01:49:57Z</modified>
<issued>2009-06-17T00:28:42Z</issued>
<id>tag:www.louddog.com,2009://1.134</id>
<created>2009-06-17T00:28:42Z</created>
<summary type="text/plain">We&apos;ve been working on a community project this summer to create an event theme and identity for [La Casa de las Madres&apos;](http://www.lacasadelasmadres.org) fall fundraiser. Want to see the results?</summary>
<author>
<name>Jodi Wing</name>
<url>http://www.louddog.com</url>
<email>jodi@louddog.com</email>
</author>
<dc:subject>Brand and Identity Design</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>Recently, we&#8217;ve had the privilege of working with a wonderful group of people at <a href="http://www.lacasadelasmadres.org">La Casa de las Madres</a>, San Francisco’s leading voice against domestic violence. You may be familiar with La Casa’s work, or if you live in San Francisco, you may have seen their logo roll by on a Muni bus this month. Their identity is bold and smart, just like the women and men we&#8217;ve worked with on this project. </p>

<p>La Casa has been gearing up for their 3rd annual fundraiser this fall and asked if we would be willing to help them design their event’s identity. The event is planned to be a fun after-work affair in downtown San Francisco, and the identity needed to reflect this, without completely brushing aside the serious work that the event will support. </p>

<p>We worked through some brainstorm sessions with La Casa’s team to come up with a theme that would resonate with a wide audience, attract people to attend a fun party in support of a local organization, and hopefully to connect some new friends to La Casa and the work that they do.</p>

<p>Since La Casa&#8217;s brand color is a bold red, and domestic violence has been a hot topic in the media recently, we settled on the theme of a redHOT party – celebrating 33 outspoken years against domestic violence. </p>

<p>To complement the La Casa brand, we developed a simple, modern look for the event that engages the audience with bright color and typography, using an oversized asterisk to denote the cause that the redHOT party supports. The final event identity below has brought us many thanks from the folks at La Casa and we’ve had so much fun working with them on the project to date.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><a href="http://www.louddog.com/redHOT-logo-tagline-rev-red-LG1.php" onclick="window.open('http://www.louddog.com/redHOT-logo-tagline-rev-red-LG1.php','popup','width=665,height=479,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://www.louddog.com/assets_c/2009/06/redHOT-logo-tagline-rev-red-LG-thumb-665x479.gif" width="500" height="360" alt="redHOT-logo-tagline-rev-red-LG.gif" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a></span></p>

<p>La Casa is just sending out their save-the-date emails this week and we look forward to supporting them throughout the summer with their event marketing. The <a href="http://www.facebook.com/event.php?eid=91754147486&amp;ref=nf">redHOT party</a> is sure to be THE event to attend this fall - so set aside Thursday, October 1 for a celebration of 33 outspoken years against domestic violence. We&#8217;ll be there.</p>

<p>Special thanks to our mutual friend for connecting us with La Casa de las Madres and the work that they do.</p>
]]>


</content>
</entry>

<entry>
<title>The Importance of Namespace (and a JavaScript solution)</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/04/the-importance-of-namespace.php" />
<modified>2009-04-28T18:13:30Z</modified>
<issued>2009-04-28T17:00:00Z</issued>
<id>tag:www.louddog.com,2009://1.105</id>
<created>2009-04-28T17:00:00Z</created>
<summary type="text/plain">As industry use of JavaScript matures, employing powerful and universal programming best practices, such as *namespacing*, becomes essential.  Come find out what exactly namespacing is, and then how to use it properly in JavaScript.</summary>
<author>
<name>Matt DeClaire</name>
<url>http://mattdeclaire.com</url>
<email>matt@louddog.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>Many programs are written to use several smaller programs that all running at the same time.  Sometimes this little programs share variables.  Sometimes they don&#8217;t mean to. This is where the problems start.</p>

<p>When you write some code, it needs to know that no one was messing with its variables while it was out running errands.  When your code is all by itself, this isn&#8217;t a danger, but when it starts hanging out with other programs, it&#8217;s time to watch out.</p>

<p><em>Namespacing</em> is a programming technique that protects your variables from other programs.  Let&#8217;s check out an example.  I&#8217;m going to use JavaScript because I like the Internet, but the concept of namespacing is universal in the world of programming languages.</p>

<h3>Your script</h3>

<pre><code>var count = 0;

...

&lt;a href="#" onclick="count++;"&gt;More, please.&lt;/a&gt;
&lt;a href="#" onclick="alert(count);"&gt;Where are we?&lt;/a&gt;
</code></pre>

<h3>Some other unrelated and oblivious code</h3>

<pre><code>var count = 0;
var numbers = [1, 2, 3, 4, 5];
for (i = 0; i &lt; numbers.length; i++) {
    if (numbers[i] % 2 == 0) count++;
}
alert("There are " + count + " even numbers in there!");
</code></pre>

<p>This example does not use any namespacing.  Your script sets up a <strong>count</strong> variable, and let&#8217;s you add to it by clicking on a link.  When you get bored of that, you can check out how many times you clicked.  The second script takes an array of numbers, figures out how many even numbers are in it, then proudly reports its findings when it&#8217;s done.</p>

<p>As you can see, the second script assumes it can create a variable named <strong>count</strong> and does with it whatever it pleases.  (And why not?  It&#8217;s a free country!)  The problem is that your script didn&#8217;t protect itself. When the second code runs, it will stomp all over the <strong>count</strong> variable you&#8217;ve been furiously clicking to increase.  When you get around to clicking on, &#8220;Where are we?&#8221; you&#8217;re going to want to see several significant digits for your effort, not the measly &#8220;2&#8221; that you are going to get.  Your program&#8217;s count is not safe from being overwritten by the second program.</p>

<p>While we&#8217;re at it, the second program is not safe either.  It won&#8217;t take long for the second script to run, but if you click on the increment link during that time, the second program will not get the result it was looking for either.  I&#8217;m guessing, at the rate that you may be hammering on the, &#8220;More, please&#8221;, it becomes likely.</p>

<h2>What are you going to do?</h2>

<p>Really, each program needs its own separate <strong>count</strong> variable, instead of accidentally sharing the same one.  This is what <em>namespacing</em> does.  Many programming languages have special ways of implementing namespacing.  Frequently, it&#8217;s as simple as writing your name at the top of your program (naming your space).  Not so simple with JavaScript, though.  But don&#8217;t fret.  We aren&#8217;t powerless.</p>

<h3>Use a different name</h3>

<p>The two example scripts bumped heads when they chose the same variable name, &#8220;count&#8221;.  Makes sense.  They are both counting after all.  Although, if they had been more specific, there would have been less risk involved.</p>

<p>Your script could have used, &#8220;numberOfTimesYouWereInclinedToClickTheLink&#8221;.</p>

<p>And the other program could have gone with, &#8220;lookyHereWhatIFound&#8221;.</p>

<p>Less risky, but of course, also ridiculous.</p>

<p>A more realistic solution would be to use a prefix: &#8220;mkd_count&#8221;.  Those are my initials.  This technique would help, but you&#8217;d end up having to do that to all your variables.  What a pain, and just not pretty.</p>

<h3>Scope</h3>

<p>Coming to your rescue is another attribute of the JavaScript language (and most other languages), Scope.  Within functions, variables retain local scope.  This means that variables inside of functions are unknown to code on the outside.  Check this out:</p>

<pre><code>var count = 100;
count++;

function makeItCount() {
    var count = 0;
    count++;
    count++;
    alert("Made it count: " + count);
}

makeItCount();
alert("What was that old count anyway?  " + count);
</code></pre>

<p>Execute this code, and you&#8217;ll find that the two uses of <strong>count</strong> are actually different variables.  One is &#8220;the count on the outside of the function&#8221;, and the other is &#8220;the count on the inside of the function&#8221;.  The output here ought be:</p>

<pre><code>Made it count: 2
What was that old count anyway: 101
</code></pre>

<p>That is cool.  It means that you can wrap all your code up in a function.  Of course, then you run into the same problem again.  What are you going to name your function?  When I write code, I like to use function names like &#8220;hide&#8221; and &#8220;addClass&#8221; and &#8220;getDownWithIt&#8221;.  How do I protect my <strong>getDownWithIt</strong> from all the other <strong>getDownWithIt</strong>s out there?</p>

<h3>Using Objects</h3>

<p>In JavaScript, you can wrap anything up in an object.  Check this out:</p>

<pre><code>var MattDeClaire = {
    count: 0,
    add: function() {
        this.count++;
        alert("I'll have " + this.count + " scoops of ice cream.");
    }
};

MattDeClaire.add();
</code></pre>

<p>This code is a little more advanced.  Let me do some explaining.  <strong>MattDeClaire</strong> is one big variable, called an object.  Inside it (wrapped in curly braces) is a variable count and a function <strong>add</strong>.  To access a variable or function inside another variable, you use a dot (.).  That is how I called the function <strong>add</strong> at the bottom of the script.  Inside the <strong>add</strong> function I used a <strong>this</strong>.  The <strong>this</strong> is a reference to the functions parent variable, which is <strong>MattDeClaire</strong>.  this.count is the same as <strong>MattDeClaire.count</strong>.</p>

<p>Check out <a href="http://alexander.kirk.at/2006/03/02/a-better-understanding-of-javascript/">this</a> article for some more object explanation.  <a href="http://trephine.org/t/index.php?title=Understanding_JavaScript%27s_this_keyword">Here</a> is an article delving deeper into the <strong>this</strong> operator.</p>

<p>This method allows me to only have to come up with one unique name, <strong>MattDeClaire</strong>.  I used my name because it&#8217;s <a href="http://englishplus.com/grammar/00000269.htm">fairly</a> <a href="http://www.google.com/search?q=%22Matthew+DeClaire%22">unique</a>, but you could use your name combined with your company name, or the project name, to get more specific.</p>

<p>But, after all that, the code is still not pretty.  My name may be pretty, but it doesn&#8217;t need to be littered all over the code like that.  There has to be a better way.</p>

<h2>The Better Way</h2>

<p>JavaScript in particular has a very clean, but technical solution.  You can create a function, without a name, and then run it right there on the spot.  &#8220;Let&#8217;s see it,&#8221; you say?</p>

<pre><code>(function() {
    alert("Boo-yah!");
})();
</code></pre>

<p>There sure are a lot of parentheses in there.  Let&#8217;s break it down.</p>

<p>Simple action: <strong>alert(&#8220;Boo-yah!&#8221;)</strong>;</p>

<p>Wrap in a function: <strong>function() {</strong> alert(&#8220;Boo-yah!&#8221;); <strong>}</strong></p>

<p>Wrap in parentheses: <strong>(</strong> function() { alert(&#8220;Boo-yah!&#8221;); } <strong>)</strong></p>

<p>Execute the whole thing: (function() { alert(&#8220;Boo-yah!&#8221;); })<strong>();</strong></p>

<p>This new method creates a magic little garden of protection, where you can do anything you want without fear of variable collision.  Let&#8217;s see the first example using this new strategy</p>

<h3>Your script</h3>

<pre><code>&lt;a href="#" id="morePlease"&gt;More, please.&lt;/a&gt;
&lt;a href="#" id="whereAreWe"&gt;Where are we?&lt;/a&gt;

...

(function() {
    var count = 0;

    document.getElementById('morePlease').onclick = function() {
        count++;
    }

    document.getElementById('whereAreWe').onclick = function() {
        alert(count);
    }
})();
</code></pre>

<h3>Some other not so oblivious code</h3>

<pre><code>(function() {
    var count = 0;
    var numbers = [1, 2, 3, 4, 5];

    for (i = 0; i &lt; numbers.length; i++) {
        if (numbers[i] % 2 == 0) count++;
    }

    alert("There are " + count + " even numbers in there!");
})();
</code></pre>

<p>Now both pieces of code are safe from each other, and can go about using whatever variables they want.</p>

<p>One caveat: Be sure to use the <strong>var</strong> declaration statement.  This is what actually creates the special copy of the variable for you.  If you use <strong>count</strong> without the <strong>var</strong> declaration, you are using the same <strong>count</strong> available to scripts outside your garden.  Look back at the oblivious code above, and you&#8217;ll find they are potentially stomping on someone&#8217;s <strong>i</strong> variable.  JavaScript will let you by without using the <strong>var</strong> statement, so it will be very important to remember to use it.</p>

<h2>The Big Picture</h2>

<p>Really, namespacing is not primarily a defensive strategy.  Yes, it is nice to protect your code from others, but really, you should think of this as protecting others against your code.  If you plan on writing some really handy code and then giving it away to people, you don&#8217;t want it to stomp all over the place.</p>

<p>In particular, Namespace has been recently becoming more important in the land of JavaScript.  Previously, code used was only written by the page author, without intermingling in foreign code.  Now with the rise of JavaScript frameworks such as <a href="http://www.prototypejs.org/">Prototype</a>, <a href="http://mootools.net/">MooTools</a>, <a href="http://jquery.com/">jQuery</a>, and <a href="http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks">many others</a>, the bulk of the code on a page is from somewhere else.  You might hear about <em>unobtrusive</em> JavaScript.  Namespacing plays a key part in writing code that does not intrude on the code of others.</p>

<p>So go out there and right some code that plays nice.</p>

<h2>Other Resources</h2>

<ul>
<li><a href="http://www.freenetpages.co.uk/hp/alan.gauld/tutname.htm">Namespace Explanation</a></li>
<li><a href="http://www.codeproject.com/KB/scripting/jsnamespaces.aspx">Namespaces in JavaScript</a></li>
<li><a href="http://jeffreysambells.com/posts/2006/11/22/play-nice-with-others-javascript-namespace/">Play Nice With Others</a></li>
<li><a href="http://www.snook.ca/archives/javascript/javascript_name/">JavaScript Namespaces</a></li>
</ul>
]]>


</content>
</entry>

<entry>
<title>Getting started as a Web Designer, Part Two </title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/04/getting-started-as-a-web-designer-part-two.php" />
<modified>2009-04-20T18:32:00Z</modified>
<issued>2009-04-20T17:05:19Z</issued>
<id>tag:www.louddog.com,2009://1.131</id>
<created>2009-04-20T17:05:19Z</created>
<summary type="text/plain">In [part one](http://www.louddog.com/bloggity/2009/03/getting-started-as-a-web-desig.php) of this article, I focused on sharing resources for getting started in design for the web. Here, I&apos;ll review how I learned the basics about code in order to enrich my designs and share the resources I recommend to learn about coding on your own.</summary>
<author>
<name>Jodi Wing</name>
<url>http://www.louddog.com</url>
<email>jodi@louddog.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>To round out my education as web designer, I decided to program a website I had designed myself. I&#8217;ve been designing for 15 years, so I have confidence in my skills on the design side. I’ve worked with our programmers quite a bit, and have looked at enough code to have a decent understanding of HTML and web technologies. However, I didn’t have the slightest idea where to start when it comes to coding a site from scratch in order to make the “magic” happen on the “interwebs.” </p>

<p>The engineers at Loud Dog have always encouraged me to build my own site to get a better understanding of what challenges they face when programming a site. And although I’ve always agreed with them that this would help, it has always been so easy to depend on the experts that I work with, that I never got around to it. After all, most successful websites are built with teams of experts, and not by a single talent. Why should I learn to program when there are dozens of other experienced engineers out there to do it for me, right?  Wrong. I wanted to see into their world. I thought to myself, if I could do this, maybe someday those guys would think design was as cool as the latest jQuery techniques.  </p>

<p>We work as an integrated team at Loud Dog so that our designs and engineering deliverables are seamless. However, there is still an invisible cultural barrier that sometimes lies between designers and engineers. (i.e. we make fun of each other for certain quirks which we don’t understand about each other’s respective passion). I did a study abroad program years ago in college and learned that sometimes the best way to enrich your existing knowledge is to get outside of your comfort zone and experience some culture shock. </p>

<p>After putting myself through this exercise, I realize now that my designs can only improve with what I have learned. I won’t be programming the websites we create for our clients yet, but my understanding of what goes into them will improve our designs, as well as help my team communicate with our engineers. For those of you out there like myself, who like to design but don’t know how to program – there’s never a better time than now to pick it up and teach yourself some basics. You might be amazed what you learn about yourself as a designer.</p>

<h2>Web design as craft</h2>

<p>There are many ways to execute designs for the web. With the introduction of drag-and-drop programs like Adobe Go Live and <a href="http://www.adobe.com/products/dreamweaver/?promoid=BPDEC">Dreamweaver</a>, and the constant development of popular content management systems (CMSs) like <a href="http://www.movabletype.org/">MoveableType</a> and <a href="http://wordpress.org/">WordPress</a>, designing and building a website has become a much less daunting task than it was for me in 1998, learning basic HTML in a text editor and testing it in Netscape. However, as my favorite Foundation Drawing teacher always used to say, you won&#8217;t be able to achieve the gestalt of Picasso in his <a href="http://en.wikipedia.org/wiki/File:Le_guitariste.jpg">cubist</a> period until you learn to draw the figure as it appears in life. In other words, you must know the building blocks of your area of expertise in order to be a true craftsman. </p>

<p>I happen to be lucky enough to work with a small team of craftsmen that build websites the old fashioned way – or the &#8220;only way&#8221; as they might tell you – with a text editor and their keyboard – type, type, type. They hand code all of the sites we build. And they do it with an elegance and efficiency that no application ever could. This is a little intimidating to a designer like myself, but the team was very nice about helping me get started.</p>

<h2>How I got started</h2>

<p>I began this side of the process by becoming acquainted with the language – XHTML and CSS. I wanted to be able to answer the question: what does the code mean when I&#8217;m staring blankly at it in view source mode? So our Lead Engineer pointed me to <a href="http://htmldog.com/">HTMLdog.com</a>, where I walked through the tutorials and created my very first web page. It was not pretty, but it was an .html file with embedded CSS styles and it worked in my browser! Learning the basic building blocks has helped me identify problems in our websites during the testing phase of our process and effectively communicate with engineering in a way that was clear to us both.</p>

<p>Then, I had an opportunity to design a small website for a close friend. I started in our usual way, by creating site mockups in Adobe Fireworks. Once I had a layered mockup complete that she liked, I wondered – what is the best practice for getting started? Literally, what do I do first to start coding? And so I sat down with our engineers and had them walk me through setting up my index.html file to get started. I was amazed at how quickly I was addicted to writing code and instantly seeing my changes in the browser. I love instant gratification! </p>

<p>I really only needed two resources and a few essential tools to get down to coding my own website. I hope you’ll find them as useful as I did.</p>

<h3>My favorite resources and tools for learning how to code:</h3>

<ul>
<li><p><a href="http://htmldog.com/">HTMLdog.com</a><br>
This site was instrumental to me in terms of learning the basics about HTML and CSS. It provided hands on tutorials and put the mystery into a context I could understand.</p></li>
<li><p><a href="http://www.learningwebdesign.com/links.html">Learning Web Design</a><br>
by Jennifer Niederst Robbins<br>
Throughout the build of my first site, I used most of this book to understand the concepts of building a website from scratch. This book was extremely easy to understand – I could jump around in the book to things that were relevant to what I wanted to do. And it has great exercises and tutorials for you to practice as you are learning.</p></li>
<li><p><a href="http://macromates.com/">TextMate</a><br>
I used this Mac application to write my .html and .css files. It formats the code nicely for me and keeps it easy to read.</p></li>
<li><p><a href="http://www.mozilla.com/en-US/firefox/firefox.html">Firefox</a><br>
I used version 3.0.1 of this browser to review my initial code while working locally on my machine to see my progress with the website layout and styles. The beautiful thing about working in Firefox is that it has so many great <a href="https://addons.mozilla.org/en-US/firefox/browse/type:1/cat:4">plug-ins</a> for web developers. </p></li>
<li><p><a href="http://getfirebug.com/">Firebug</a><br>
I can’t imagine how web development was done before the invention of Firebug – an essential tool in my mind – it allows you to inspect your code in your browser and modify it real-time to see how tweaks to bugs might perform… and that’s just the beginning of what it can do. Unfortunately, it can’t fix bugs in IE6 – arrgh!</p></li>
</ul>

<p>Of course, I couldn’t have done things quite as easily without constant access to the well-trained minds we have in-house. I have been somewhat spoiled to work with a great development team that has supported my efforts to learn just the tip of <a href="http://www.louddog.com/bloggity/2008/03/css-best-practices.php">what they know</a>. </p>

<p>The biggest thing I learned from this experience is that you don’t have to do it right the first time, but you do have to do it. And I’m so glad I did!</p>

<p>When the website launches later this year, you’ll be the first to hear more details on how I did it, from design to deployment.</p>
]]>


</content>
</entry>

<entry>
<title>Artwork Semantics: Sensible and Fun for Everyone!</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/04/making-artwork-semantics-sensible.php" />
<modified>2009-04-14T19:22:09Z</modified>
<issued>2009-04-10T18:11:48Z</issued>
<id>tag:www.louddog.com,2009://1.130</id>
<created>2009-04-10T18:11:48Z</created>
<summary type="text/plain">When building websites, things like background gradients, tabs, and buttons often must be extracted from the design file and engineered in their own right in order to work correctly. In this article, Marty explains how to prepare your graphics file to make this easier.</summary>
<author>
<name>Marty Ferrini</name>

<email>martin@louddog.com</email>
</author>
<dc:subject>Loud Dog Projects</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>When designing for the web, it’s important to remember that your .psd or .png will inevitably have elements that require some tweaking to be reproduced accurately. </p>

<p>Things like background gradients, tabs, and buttons especially often must be extracted from the overall design and engineered in their own right. These graphical widgets often need to be as flexible, or “stretchy” as possible to account for an increase in <a href="http://www.alistapart.com/articles/howtosizetextincss/">text size</a> or browser “<a href="http://alastairc.ac/2006/11/browser-zoom-comparison/">zoom</a>”. </p>

<p>With this in mind it&#8217;s always helpful to the engineering team if your Photoshop or Fireworks artwork is layered and named sensibly. It&#8217;s much easier to take the time up front to name your design elements <a href="http://en.wikipedia.org/wiki/Semantic_Web">semantically</a> (named what they mean) rather than end up with a document full of elements named &#8220;Bitmap,&#8221; &#8220;Group: 8 Objects,&#8221; or &#8220;Layer 1.&#8221; </p>

<p>Here are some screenshots of the layers that make up a graphic used in a <a href="http://louddog.com/bloggity/2009/04/deconstructing_a_css_hover_sta.php">related article</a> as I named them in Fireworks on the left and the same layers as they’d appear with their default, generic names:</p>

<p><img src="/bloggity/files/LayersSemanticAndNon-Semantic.png" alt="LayersSemanticAndNon-Semantic.png" /></p>

<p>The only layers I didn’t rename were the default “Rounded Rectangle” names that Fireworks inserted, as they’re pretty much self-evident.</p>

<p>Not only does semantic naming make production easier for me as a front-end engineer, but it makes sense for designers (web and print) as well. Much like the programming admonition to always use verbose, intelligent code comments to ensure your code is understandable to others and to its author in the future, think of yourself three to six months from now and how much nicer it’ll be when you need to open that layered graphics document and get reacquainted. </p>

<p>Rather than spending time trying to decipher what the hell everything means, you’ll recognize your own handiwork, simply read the layer names, and be able to pick up right where you left off. </p>

<p>See? Naming semantically is sensible and although maybe not “fun” per sé, it’ll certainly result in your engineer’s deployment of your vision being far closer to the opposite of “not fun”. Yay semantics!</p>
]]>


</content>
</entry>

<entry>
<title>Deconstructing a CSS Hover State</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/04/deconstructing-a-css-hover-state.php" />
<modified>2009-04-14T19:25:36Z</modified>
<issued>2009-04-10T17:17:36Z</issued>
<id>tag:www.louddog.com,2009://1.129</id>
<created>2009-04-10T17:17:36Z</created>
<summary type="text/plain">It’s often more efficient to use CSS and a customized graphic rather than javascript for common effects like button rollovers. Here, we break down how to design and build them.</summary>
<author>
<name>Marty Ferrini</name>

<email>martin@louddog.com</email>
</author>
<dc:subject>Web Design</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>Designers, when producing your web designs, it’s important to remember that it’s often more efficient to use CSS and a customized graphic rather than javascript for common effects like button rollovers. </p>

<p>Javascript based rollovers require more overhead because the browser must download two images (rather than one) and must process javascript to trigger the effect every time, whereas with the pure CSS approach, one image is stored in the browser’s cache as well as the style/behavior. This shaves time off of the overall download speed of your website and in this game every second counts!</p>

<p>As I’ll illustrate here, your original artwork will likely need to be broken out into a discrete and customizable graphic to take advantage of the CSS rollover. </p>

<p>As my example, I chose the hover effect of the “Register Now” buttons on this site: <a href="http://www.marklogic.com/UserConference2009/">http://www.marklogic.com/UserConference2009/</a></p>

<p>Rather than use two separate images with some javascript to swap in the “over” state image on a mouse event (the mouse rolling over the button), I instead used one image and CSS positioning to “slide” the over state into place. This works because the anchor tag is defined in CSS as only as wide (via padding) as one button and therefore the over state is visible only when it slides into view. Imagine looking into your camera viewfinder as a train goes by directly in front of you. Only the train cars that fit into the width of the viewfinder would become visible as they “slide” into view. Make sense?</p>

<p>Here is a screenshot of the discrete button image document I made to achieve the desired rollover:</p>

<p><img src="/bloggity/files/hoverButtons.png" alt="hoverButtons.png" /></p>

<p>Here is the html for this button:</p>

<pre><code>&lt;div class="registerNowButton"&gt;
&lt;a href="#"&gt;&lt;/a&gt;
&lt;/div&gt;
</code></pre>

<p>Here is the CSS that controls the over state behavior:</p>

<pre><code>.registerNowButton a {
    padding: 16px 99px 18px 79px;
    background: url(images/buttonRegisterNow2009.gif) no-repeat 0 0;
    float: left;
    position: relative;
    left: 100px;
    bottom: 14px;
}</code></pre>

<pre><code>.registerNowButton a:hover {
    background-position: -178px 0;
 }</code></pre>

<p>Fortunately for me, the layered button graphic was <a href="http://louddog.com/bloggity/2009/04/artwork_semantics_sensible_and.php">semantically named</a>, so the whole process was made that much simpler. No guesswork whatsoever. I looked at the layers, knew what they all meant and therefore knew what to make visible to achieve the desired look for each state. Yay CSS! Yay semantics!</p>
]]>


</content>
</entry>

<entry>
<title>Getting started as a web designer, Part One</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/03/getting-started-as-a-web-desig.php" />
<modified>2009-04-14T19:44:22Z</modified>
<issued>2009-03-18T18:38:59Z</issued>
<id>tag:www.louddog.com,2009://1.128</id>
<created>2009-03-18T18:38:59Z</created>
<summary type="text/plain">Recently, a friend asked me where she could take classes on how to become a great web designer. I’m often asked this question, and I don&apos;t have a concise answer.  I do, however, have some recommendations for how to get started on your own.</summary>
<author>
<name>Jodi Wing</name>
<url>http://www.louddog.com</url>
<email>jodi@louddog.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>Most traditional art schools often fall short in teaching best practices for web design, where technology is always changing. Don&#8217;t get me wrong – I do love academia, and art school is a great environment for building a strong foundation. I attended an art school for graphic design and found the education to be a perfect stepping stone for me on my way to a career in design. However, my education was focused on design for print.</p>

<p>Having refocused my career three years ago to include web design, I’ve found that to learn to design effectively for the web, the best place to learn is on the web. I reconfirmed my finding when I read  <a href="http://www.alistapart.com/articles/elevatewebdesignattheuniversitylevel">A List Apart&#8217;s</a> article on this subject. I do hope that Leslie&#8217;s article has inspired the many web experts across the globe to be more involved with their local universities, helping them to stay current. This is surely going to take some time to develop.</p>

<p>So what do we recommend in the meantime? As Leslie&#8217;s article mentions, many web designers are self-taught. You can learn how to design and build a website on your own with some great resources – most of which are free! I can&#8217;t guarantee that your designs will be award winning on the first attempt, but one of the great things about designing for the web is that nothing is permanent – you can always make changes. Plus, there is an endless amount of <a href="http://www.smashingmagazine.com/2009/01/14/web-design-trends-for-2009/">examples of great web design</a> for you to study online. This abundance of knowledge is often overwhelming when you&#8217;re just looking for a starting point. To narrow the field for you a bit, here are some of my favorite resources to help you get started with your studies of design for web:</p>

<ul>
<li><p><a href="http://www.amazon.com/Think-Common-Sense-Approach-Usability/dp/0789723107">Don&#8217;t Make Me Think: A Common Sense Approach to Web Usability</a><br>
by Steve Krug<br>
Read this book! It is the quintessential place to start when studying usability design.</p></li>
<li><p><a href="http://psd.tutsplus.com/designing-tutorials/9-essential-principles-for-good-web-design/">psd.tutsplus.com</a><br>
Lay a foundation. Read this article on principles for good web design.</p></li>
<li><p><a href="http://www.andyrutledge.com/gestalt-principles-1-figure-ground-relationship.php">Design View, Andy Rutlege&#8217;s blog</a><br>
Improve your foundation. I love reading Andy&#8217;s articles on design. He&#8217;s able to articulate concepts so clearly and simply. I&#8217;ve been following his series, the Gestalt Principles of Perception – great principles to apply to your designs as you are learning.</p></li>
<li><p><a href="http://ilovetypography.com/2008/02/28/a-guide-to-web-typography/">ilovetypography.com</a><br>
Learn about typography! And love it. It is a powerful thing to understand how to make the most of your web friendly fonts in your designs. </p></li>
<li><p><a href="http://www.bittbox.com/">bittbox.com</a><br>
Teach yourself. This site has great tutorials and free downloads to help you understand how you can create graphics for the web that look and feel current.</p></li>
<li><p><a href="http://bestwebgallery.com/">bestwebgallery.com</a><br>
Get inspired! I use this site as well as [http://www.smashingmagazine.com/ smashingmagazine.com] to stay current about what other web designers are up to.</p></li>
</ul>

<p>For some of you, the idea of teaching yourself a new skill probably sounds about as good as a root canal, but for those of you DIYers out there, dive in and start learning all about it. Maybe we&#8217;ll need to hire you someday!</p>

<p>Stay tuned for part two of this article, where I&#8217;ll share my favorite resources for learning how to build out a website design.</p>
]]>


</content>
</entry>

<entry>
<title>Release early and often and achieve success</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/03/releasing-early-and-often-wont.php" />
<modified>2009-03-26T19:07:18Z</modified>
<issued>2009-03-12T20:49:33Z</issued>
<id>tag:www.louddog.com,2009://1.127</id>
<created>2009-03-12T20:49:33Z</created>
<summary type="text/plain">Popular wisdom claims that if you&apos;re building a web app, you should &quot;release early and release often.&quot; This is good advice, and what I&apos;ve told clients before, but it&apos;s not risk free, as some have discovered. Read on to see what I&apos;m talking about.</summary>
<author>
<name>Josh Orum</name>
<url>http://www.louddog.com</url>
<email>josh@louddog.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>The founder of Timmy on Time, a web app that helps freelancers and teams track time via IM (pretty sweet from a quick look), recently wrote a post on his blog titled, &#8220;<a href="http://behindtheclock.timmyontime.com/post/85858089/releasing-early-and-often-how-it-failed-for-us">Releasing early and often&#8230; how it failed for us</a>.&#8221; Provocative title, but is releasing early actually bad advice?</p>

<h2>Why release early and often?</h2>

<p>There are a few reasons to release early and often. It allows you to:</p>

<ul>
<li>Quickly assess your app&#8217;s chances without investing a ton of time (and money).</li>
<li>Keep your app&#8217;s feature set limited and realistic.</li>
<li>Get rapid feedback from the market.</li>
</ul>

<p>Dan Simard, the author, writes that the main reasons are &#8220;to start making money as early as possible and to avoid discouraging development team.&#8221; These are happy side-effects. If these are your main reasons, you&#8217;re relying on luck and setting yourself up for failure. </p>

<p>Releasing early and often is about acknowledging that you don’t know how the market will respond to your product, and reducing the time you sink into something that might not work out. It’s about taking a shortcut to a feasibility study. </p>

<p>Your product may be an abysmal failure, your target market may need features that you didn’t anticipate, and you may have to go back to the drawing board. If you find these out after releasing early, before you’ve sunk a ton of time and resources into the product, it was a success. It won’t make you much money, and it won’t be encouraging, but it will have reduced your risk and kept you on the right path.</p>

<p>Let’s take a look at the three main reasons to release early and often.</p>

<h3>Assessing your app&#8217;s chances.</h3>

<p>Because web app development is relatively inexpensive, it often doesn&#8217;t make a lot of sense to invest heavily in market research. Instead, it can be cheaper (and always faster) to just build the thing and see if people respond. Of course, this isn&#8217;t categorical, and complex applications that require significant investment warrant more upfront research.</p>

<p>But if you have a simple idea and want to see how the market responds, release early. Call it beta. You&#8217;re basically making your prototype public.</p>

<h3>Keeping your app&#8217;s feature set limited and realistic.</h3>

<p>This addresses a problem I&#8217;ve seen over and over. The tendency of most startup founders is to fixate on a minor aspect of their overall idea that they think is especially cool. By committing to releasing early, you&#8217;re committing to a bare-bones feature set. </p>

<p>Which features are absolutely necessary for your application and business model? If it&#8217;s not essential, it&#8217;s out. This will give you time to focus on making those features rock-solid and really good. Releasing early isn&#8217;t an excuse to release a buggy, ugly, unusable product. Make sure each feature is simple and works as expected, every time. The more features you have, the harder it is to do this.</p>

<h3>Getting rapid feedback.</h3>

<p>The market&#8217;s going to give you feedback almost immediately, and this is when you&#8217;ll see the real advantage of the first two reasons. You&#8217;ve released a super-limited version of the product. People have started using it, so you know it&#8217;s viable. Now the market will help you decide which features come next. </p>

<p>In my experience (ten years of web app design and development), it&#8217;s next to impossible for people to correctly anticipate how people will use a product. Unless you&#8217;ve done a lot of customer research, it&#8217;s highly likely that the feature you&#8217;re in love with is not the feature your customers really want. (And even if you have done a bunch of research, it&#8217;s still 50/50.)</p>

<p>The more you focus on developing &#8220;down-the-road&#8221; features before release, the more likely it is that you&#8217;re wasting time and money, and the more likely it is that you&#8217;ll hide the real value of your product.</p>

<p>Shortly after launching, it&#8217;ll become clear which features are needed and which aren&#8217;t. These might be driven externally, by your customers, or internally, by your staff.</p>

<p>I remember one website we launched that had a very rudimentary user admin system. Three days after we launched, we started receiving hundreds of e-mails with questions about user accounts (the registration process was a little more complicated than your typical site). Thankfully, we had cut features before launch, so we had resources available to upgrade both the internal support features and refine the registration process. If we had focused on some random, unneeded feature, we wouldn&#8217;t have been able to address this core problem.</p>

<h2>Guidelines for releasing early and often.</h2>

<p>There&#8217;s not much to releasing early and often, but to get the most advantages, there are a few simple guidelines.</p>

<ul>
<li><p><strong>Don&#8217;t rush.</strong> Releasing early doesn&#8217;t mean rushing it. It doesn&#8217;t mean you should foist buggy, incomplete software on your customers. To release earlier, you can either cut features or cut testing time. Don&#8217;t cut testing time. Cut features (this will cut testing time as well).</p></li>
<li><p><strong>Release quality.</strong> Since you&#8217;re releasing less, what you release needs to be <strong>awesome</strong>. There&#8217;s no excuse for releasing something riddled with bugs, and there&#8217;s nothing that will turn off your customer base faster or more permanently than a messed-up website.</p></li>
<li><p><strong>Prioritize anticipated features and create a plan.</strong> Because you&#8217;re releasing a product with a bare bones feature set, you&#8217;ll have a long list of features you want to add. Make sure this list is prioritized, and that your attention is focused on second-order features only. </p></li>
<li><p><strong>Gracefully handle feedback.</strong> You&#8217;ll receive two types of feedback: massive bugs that need immediate action and everything else. Most massive bugs will be caught in testing, but occasionally one will sneak through. When this happens, you need to fix it. Put everything else aside. Otherwise, accept the feedback and put it aside to review later. It&#8217;s tempting to think that every customer request requires immediate action, but this isn&#8217;t a tenable long-term strategy. Fire-fighting is lazy. Success requires discipline.</p></li>
<li><p><strong>Plan for your next release.</strong> Your next release should come soon, and you need to follow the same guidelines you followed for the first release. The next release should either be a simple bug fixing release, or introduce one or two new features. But don&#8217;t start yet! You&#8217;re still <strong>planning</strong> for it. Make sure not to rush it, and make sure it&#8217;s solid. It&#8217;s tempting to rush out a bunch of fixes or new features. Don&#8217;t! Consider all the feedback you&#8217;ve received and make decisions for the next release. </p></li>
<li><p><strong>Frequent, controlled releases.</strong> Make sure to test each release completely. As you add features, your application will become increasingly complex, will have more edge cases, and will require more testing. You can keep this manageable by controlling your feature set.</p></li>
</ul>

<h2>Effectively evaluating feedback and planning the next release.</h2>

<p>When customers are clamoring for features, it can be hard to ignore them. Yet, this is exactly what you must do in the short term - don&#8217;t respond willy-nilly. Carefully evaluate requested features within the larger context of your business goals. What ROI will you receive on the feature? Is it absolutely necessary? Limiting yourself to one or two features per release really helps focus this conversation.</p>

<p>Often, you&#8217;ll receive all sorts of random feature requests. It&#8217;s especially important to take these with a grain of salt - every person uses the web (and your application) for slightly different things, and what&#8217;s vitally important to one user may go completely unnoticed to others. Oftentimes, the people with the most quixotic needs are the loudest. Don&#8217;t let them derail you!</p>

<p>Sometimes, you&#8217;ll receive a ton of requests for a feature that&#8217;s just way out in left field. Don&#8217;t ignore these! It&#8217;s quite possible that you completely misread the market and you need to be taking your product in a completely different direction. Obviously this isn&#8217;t a decision to be made lightly, but be open to it.</p>

<p>In the end, releasing early and often is a generally good strategy for a startup. It has risks, but they are often less than a longer process that doesn&#8217;t solicit market feedback until it&#8217;s too late. By staying focused and relaxed, you&#8217;ll reap the benefits.</p>

<h2>More Resources</h2>

<p><a href="http://blog.mixpanel.com/2009/03/stop-guessing-a-guide-towards-deciding-your-next-feature/">Stop guessing: A guide towards deciding your next feature</a>. I don&#8217;t agree completely (see above), but some good points.</p>

<p><a href="http://startuplessonslearned.blogspot.com/2009/03/dont-launch.html">Don&#8217;t Launch: why to avoid a big splash</a></p>
]]>


</content>
</entry>

<entry>
<title>Adobe has a message for me</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/03/adobe-has-a-message-for-me.php" />
<modified>2009-03-11T23:28:02Z</modified>
<issued>2009-03-11T23:27:22Z</issued>
<id>tag:www.louddog.com,2009://1.126</id>
<created>2009-03-11T23:27:22Z</created>
<summary type="text/plain">Every once in a while my computer tells me something that just reinforces the fact that it isn&apos;t a human being. </summary>
<author>
<name>Jodi Wing</name>
<url>http://www.louddog.com</url>
<email>jodi@louddog.com</email>
</author>
<dc:subject>Loud Dog Culture</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>Of course I know this, but for years as a mac user, I&#8217;ve gotten used to the idea that every mac has its own personality and they all need to be treated like people if they are going to work properly. So, when I received this message the other day I saved it to share. I hope you enjoy its ridiculousness as much as I did. It may not be quite as good as the phrases on <a href="http://engrish.com/">this site</a>, but I got a good laugh out of it.</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="adobe-updater.jpg" src="http://www.louddog.com/jobs/adobe-updater.jpg" width="504" height="180" class="mt-image-none" style="" /></span></p>
]]>


</content>
</entry>

<entry>
<title>What&apos;s RSS, and why should I care?</title>
<link rel="alternate" type="text/html" href="http://www.louddog.com/bloggity/2009/03/whats-rss.php" />
<modified>2009-11-23T21:37:43Z</modified>
<issued>2009-03-09T21:43:30Z</issued>
<id>tag:www.louddog.com,2009://1.124</id>
<created>2009-03-09T21:43:30Z</created>
<summary type="text/plain">RSS is all over the web these days. If you read content on the web, it’s probably good to be familiar with it.</summary>
<author>
<name>Josh Orum</name>
<url>http://www.louddog.com</url>
<email>josh@louddog.com</email>
</author>
<dc:subject>Articles</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://www.louddog.com/">
<![CDATA[<p>RSS is all over the web these days. You may have heard of it, or seen the RSS icon (<img alt="RSS-icon.jpg" src="http://www.louddog.com/assets_c/rss-article/RSS-icon.jpg" width="16" height="16" />). You may be using it already without even knowing it. If you read content on the web, it’s probably good to be familiar with it.</p>

<h2>The basics</h2>

<p><strong>RSS</strong> is simply a special format for content on the Internet. Most things you read on the web are in web pages - that is, they are surrounded by graphics, HTML formatting, and the “skin” of the website. An RSS-formatted file contains the content without any of the skin, as well as some “metadata” - information about the content - including the title of the content, when it was published, and a link to the original content on the web. </p>

<p>An <strong>RSS</strong> feed is a series of content pieces in a single RSS-formatted file. A news site, for example, will add new articles to its RSS feed when they are published.</p>

<h2>So why is this useful?</h2>

<p>If you read stuff online - news, articles, or blogs - you probably visit a number of different sites each day. Many (if not all) of these sites will have RSS feeds, and you can use an <strong>RSS reader</strong> to automatically collect the different RSS feeds and aggregate all the articles into a single place - basically creating your own custom website, with the articles you want from the websites you want to visit, all in one place. </p>

<p>I like this because it makes me more efficient. Here’s how:</p>

<ul>
<li>I save time by seeing all my reading material in one place instead of loading different websites.</li>
<li>The reader tells me if a site is updated, so I don’t visit websites with stale content.</li>
<li>All my reading material is available in a consistent, easy-to-read format, without extra ads, graphics, or other distractions. Because I don’t need to navigate different websites and graphics, I can read faster.</li>
<li>While many websites are tough to deal with on my iPhone, they are super easy to deal with in my RSS reader. I’m able to read most things just as easily on the road as I do at my desk.</li>
<li>Once I’ve read an article, it’s marked as read (and I can save articles for later).</li>
<li>Because it&#8217;s on Google, it&#8217;s super easy to search old articles.</li>
</ul>

<h2>It’s easy to get started.</h2>

<p>There are a bunch of RSS readers out there. I prefer <strong><a href="http://www.google.com/reader">Google Reader</a></strong> because it’s web-based, relatively easy to use, and it has a great mobile interface. After I’ve read an article, it’s marked as read, and it won’t be downloaded to my iPhone (or my computer, if I read it on my iPhone). </p>

<p>To get started:</p>

<ol>
<li>Go to <a href="http://www.google.com/reader">http://www.google.com/reader</a>. If you don’t already have a Google account, create one.</li>
<li>If you are using Firefox, you should see a little RSS icon in your browser window when you visit a website. Click it and you should be given the opportunity to add it to Google. Do this. <img alt="The RSS Icon in a browser window" src="http://www.louddog.com/assets_c/rss-article/RSS-click-a-feed.gif" width="450" height="36" /></li>
<li>If you&#8217;re using Internet Explorer, of if clicking the RSS icon doesn&#8217;t work (in some cases, it won&#8217;t), you can add the website directly from Google Reader. Just click the “Add Subscription” in the upper right corner and enter the website’s URL. <img alt="Add a Subscription in Google Reader" src="http://www.louddog.com/assets_c/rss-article/RSS-add-a-subscription.gif" width="202" height="136" style="border: 1px solid #666" /></li>
</ol>

<p>I hope that you find Google Reader easy to use. I won&#8217;t go into detail about using Google Reader now (perhaps in a later article), but if you have any specific questions, please feel free to e-mail me.</p>

<h2>A few extra notes.</h2>

<ul>
<li><p>Often times, a site won&#8217;t include an entire article in their RSS feed, especially if they are ad-based and want to drive more visits to their site. So, you might just get excerpts.</p></li>
<li><p>While RSS is the most widespread standard, and the defacto name for this sort of thing, a different standard, Atom, offers more functionality and is a rapidly growing number of sites (including Loud Dog). This shouldn&#8217;t matter to readers, though.</p></li>
<li><p>Though there are advantages to web-based readers (you&#8217;re accessing the same file regardless of which computer you&#8217;re using), there are disadvantages as well (you can&#8217;t access it without an Internet connection). If you install Google Gears, you can download all your unread articles and read them at your leisure. I haven&#8217;t tried this yet, but the next time I take a long flight, I will.</p></li>
</ul>
]]>


</content>
</entry>

</feed>