<?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"
	>

<channel>
	<title>Web Mixed Grill</title>
	<atom:link href="http://mixedgrill.webindustry.asn.au/feed" rel="self" type="application/rss+xml" />
	<link>http://mixedgrill.webindustry.asn.au</link>
	<description>Australian Web Industry Association's Christmas Celebrations</description>
	<pubDate>Thu, 18 Dec 2008 05:04:06 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>A brief intro to the Google Maps reverse geocoder</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/a-brief-intro-to-the-google-maps-reverse-geocoder</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/a-brief-intro-to-the-google-maps-reverse-geocoder#comments</comments>
		<pubDate>Tue, 16 Dec 2008 15:00:07 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 17]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=53</guid>
		<description><![CDATA[Freelancer <a href="http://didcoe.id.au" title="Matt Didcoe">Matt Didcoe</a> intros the Google Maps API reverse geocoder today in his article <a href="http://mixedgrill.webindustry.asn.au/2008/a-brief-intro-to-the-google-maps-reverse-geocoder">A brief intro to the Google Maps reverse geocoder</a>]]></description>
			<content:encoded><![CDATA[<p>Maps are becoming common place on many &#8220;Web 2.0&#8243; websites and in some cases, you want user interaction relating to your maps. The following is just a brief overview of how to get the reverse geocoder working in your application, it does assume you get the basics of Javascript, the only things I explain are the geocoding functions (and establishing the base map for it to work off).</p>
<h4>What is Reverse Geocoding?</h4>
<p>Geocoding is the process of taking a human-readable address (eg. 123 Test Lane, Perth, Australia) and converting it into a set of latitude and longitude points, which can then be displayed on a map.</p>
<p>Reverse Geocoding, and this will come as a complete shock I know, is the opposite, taking a set of latitude and longitude points and converting them to a human-readable address.</p>
<p>It&#8217;s worth pointing out at this point that reverse geocoding is not 100% accurate! The Google system takes the points and tries to find the closest &#8220;addressable&#8221; location within a margin but it may not be the exact address you, or your user, asked for.</p>
<h4>Using it</h4>
<p>This is a just quick run through of the reverse geocoder, but I hope you get the idea of how to use it and the potential it has in applications you might be working on.</p>
<p>To start with, let&#8217;s get the Google Maps API:</p>
<pre><code>&lt;script type="text/javascript"
src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=YOUR API KEY"&gt;&lt;/script&gt;</code></pre>
<p>You can get your API key by hitting up this address <a href="http://code.google.com/apis/maps/signup.html" title="Get your API key">http://code.google.com/apis/maps/signup.html</a></p>
<p>Once you&#8217;ve got that, here&#8217;s the JS you&#8217;ll need, it&#8217;s in pieces and we&#8217;ll go through it function by function:</p>
<pre><code>var map;
var geocoder;
var location;

function initialise() {
  map = new GMap2(document.getElementById("map"));
  map.setCenter(new GLatLng(-31.884463,115.79246), 13);
  map.addControl(new GSmallMapControl);
  GEvent.addListener(map, "click", getAddress);
}
</code></pre>
<p>The first thing we&#8217;re doing here is establishing the variables we&#8217;ll need for the code we&#8217;re using. It&#8217;s important to establish them out of function to ensure the other functions later on can pick them up (or so I&#8217;ve found when I&#8217;ve been working with it).</p>
<p>The <code>initialise</code> function establishes the map by grabbing the div on the page with the id &#8220;map&#8221; and setting it as the Google Map container. We then set the centre of the map to Perth, add a small map control and probably the most important line and the one you&#8217;ll need to do the reverse geocode - <code>GEvent.addListener(map, "click", getAddress);</code> - this line sets a listener going, waiting for a click to occur within the &#8220;map&#8221; div and when the click happens sets the function <code>getAddress();</code> to work.</p>
<pre><code>function getAddress(overlay, latlng) {
  if (latlng != null) {
    location = latlng;
    geocoder.getLocations(latlng, showAddress);
  }
}
</code></pre>
<p>The <code>getAddress();</code> function takes the map layer and latitude/longitude of the click location from your map and passes it to the <code>geocoder.getLocations();</code> function which is built into the Google API. The reference to <code>showAddress</code> in there is the function that gets called next in the chain.</p>
<pre><code>function ShowAddress(response) {
  map.clearOverlays();
  if (!response || response.Status.code != 200) {
    alert("Couldn't find that location sorry :(");
  } else {
    place = response.Placemark[0];
    point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
    marker = new GMarker(point);
    map.addOverlay(marker);
    marker.openInfoWindowHtml(place.address);
  }
}
</code></pre>
<p>This code is the bit that does the frontend lifting. Here, if the status code returned by the API isn&#8217;t a 200 OK (see Myles article Response Code #FFFFF for more on Response Codes), or there is no response, we simply throw an alert with a sad face telling the user we failed to get a location from their request.</p>
<p>If it&#8217;s 200 OK, we start pulling apart the response, setting <code>place</code> to <code>response.Placemark[0]</code> which is the highest level of accuracy available for the request. Then we pull the latitude and longitude out by accessing <code>place.Point.coordintates[x]</code> where &#8216;x&#8217; is 1 for latitude and 0 is longitude, to this day I&#8217;m not sure why they aren&#8217;t ordered the other way around (but then again, I haven&#8217;t looked hard for an explanation)&#8230;</p>
<p>Using the latitude and longitude data we establish a marker and set it on the map, opening an info window with the full address.</p>
<p>So that as a complete code block so you can copy and paste easily is:</p>
<pre><code>var map;
var geocoder;
var location;

function initialise() {
  map = new GMap2(document.getElementById("map"));
  map.setCenter(new GLatLng(-31.884463,115.79246), 13);
  map.addControl(new GSmallMapControl);
  GEvent.addListener(map, "click", getAddress);
}

function getAddress(overlay, latlng) {
  if (latlng != null) {
    location = latlng;
    geocoder.getLocations(latlng, showAddress);
  }
}

function ShowAddress(response) {
  map.clearOverlays();
  if (!response || response.Status.code != 200) {
    alert("Couldn't find that location sorry :(");
  } else {
    place = response.Placemark[0];
    point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
    marker = new GMarker(point);
    map.addOverlay(marker);
    marker.openInfoWindowHtml(place.address);
  }
}
</code></pre>
<p>And that ladies and gentlemen is the Google Maps API Reverse Geocoding function in all it&#8217;s glory. I&#8217;m working on some stuff now that uses it in a more practical setting and I&#8217;ll show that off a bit later (perhaps in the new year). You can get more information from the following links:</p>
<ul>
<li><a href="http://code.google.com/apis/maps/documentation/services.html#ReverseGeocoding">Google Maps API documentation (Reverse Geocoding)</a></li>
<li><a href="http://googlegeodevelopers.blogspot.com/2008/10/geocoding-in-reverse.html">Google Geo Developers blog post announcing reverse geocoding</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/a-brief-intro-to-the-google-maps-reverse-geocoder/feed</wfw:commentRss>
		</item>
		<item>
		<title>Progressive enhancement with CSS3</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/progressive-enhancement-with-css3</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/progressive-enhancement-with-css3#comments</comments>
		<pubDate>Sun, 14 Dec 2008 15:00:07 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 15]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=48</guid>
		<description><![CDATA[<a href="http://nickcowie.com">Nick Cowie</a> shares more of his knowledge with us in <a href="http://mixedgrill.webindustry.asn.au/2008/progressive-enhancement-with-css3">Progressive enhancement with CSS3</a> on Day 15 of the Mixed Grill.]]></description>
			<content:encoded><![CDATA[<h4>aka how to make funky web2.0&trade; buttons from text just using CSS that does not break in older browsers.</h4>
<div style="float: left; margin: 50px 0 0 0;">
<div style="float: left; margin: 0 25px 0 0;">
<div style="width: 105px; height: 105px; padding:4px; border: 4px #000 solid;background-color: #ccc; position:relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid;  background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; text-indent: -5px;"><a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px;"></div>
</div>
<p>IE6, IE7, Safari 2,<br/>Firefox 2, Opera 8</p>
</div>
<div style="float: left; margin:0 25px 0 0;">
<div style="width: 105px;  height: 105px;  padding: 4px; border: 4px #000 solid;background-color: #ccc; position:relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid;  background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; text-indent: -5px;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px; background-color: rgba(255,255,255,0.25);"></div>
</p></div>
<p>IE8<br/>&nbsp;</p>
</div>
<div style="float: left; margin: 0 25px 0 0;">
<div style="width: 105px;  height: 105px; padding: 4px; border: 4px #000 solid;background-color: #ccc; position:relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid;  background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; text-indent: -5px; text-shadow: 0 0 2px #000, 0 0 75px #fff;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px;"></div>
</p></div>
<p>Opera 9.5<br/>&nbsp;</p>
</div>
<div style="float: left; margin: 0 25px 0 0;">
<div style="width: 105px;  height: 105px;  padding:4px; border: 4px #000 solid; background-color: #ccc; position:relative; -moz-border-radius: 61px; -webkit-border-radius: 57px;-o- border-radius: 57px; border-radius: 57px;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid; -moz-border-radius: 100px; -webkit-border-radius: 51px; background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; color: #fff; text-indent: -5px; "> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 100px; width: 100px; -moz-border-radius:100px; -webkit-border-radius: 50px; border-radius: 50px; background-color: rgba(255,255,255,0.25);"></div>
</p></div>
<p>Firefox 3<br/>&nbsp;</p>
</div>
<div style="float: left; margin: 0 25px 0 0;">
<div style="width: 105px;  height: 105px; padding:4px; border: 4px #000 solid; -moz-border-radius: 61px; -webkit-border-radius: 57px;-o- border-radius: 57px; border-radius: 57px; background-color: #ccc;<br />
position:relative; -webkit-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -o-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -moz-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); position: relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid; -moz-border-radius: 100px; -webkit-border-radius: 51px; background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; color: rgba(255,255,255,0.98); text-indent: -5px; text-shadow: 0 0 2px #000;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 100px; width: 100px;   -moz-border-radius:100px; -webkit-border-radius: 50px; border-radius: 50px; background-color: rgba(255,255,255,0.25); -moz-box-shadow: 0px 0px 20px rgba(255,255,255,0.2);"></div>
</p></div>
<p>Safari 3<br/>&nbsp;</p>
</div>
<div style="float: left; margin: 0 25px 0 0;">
<div style="width: 105px; height: 105px;  padding:4px; border: 4px #000 solid; -moz-border-radius: 61px; -webkit-border-radius: 57px;-o- border-radius: 57px; border-radius: 57px; background-color: #ccc;<br />
position:relative; -webkit-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -o-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -moz-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); position: relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid; -moz-border-radius: 100px; -webkit-border-radius: 51px; background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; color: rgba(255,255,255,0.98); text-indent: -5px; text-shadow: 0 0 2px #000;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 100px; width: 100px; -moz-border-radius:100px; -webkit-border-radius: 45px; border-radius: 45px; background-color: rgba(255,255,255,0.25); -webkit-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  -moz-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  -o-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  transform:translateY(20px) scaleX(0.65) scaleY(0.31);"></div>
</p></div>
<p>Firefox 3.1b<br/><br />
    Webkit nightly</p>
</div>
<p style="clear: both;">There will be two types of people viewing this article, roughly 50% of you will be using a modern browser with some CSS3 support like Firefox 3, Firefox 3.1b, Safari 3, Opera 10a or a recent Webkit nightly build and will see the progressive enhancement that is possible through CSS3, just turn off your images and check the results. The other 50% will be using browsers without a great deal of CSS3 support, like Internet Explorer 6 or 7, Firefox 2, Safari 2 or even Opera 9.5 and will wonder why there is a row of almost identical buttons above. If you are in that group and have access to a browser in the first list fire it up and look at this page again or <a href="#trustme">skip down</a> to the very bottom of the page to see the only image used and trust me.</p>
<h4>Basic button</h4>
<div style="width: 105px; height: 105px; padding:4px; border: 4px #000 solid;background-color: #ccc; position:relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid;  background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; text-indent: -5px;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px;"></div>
</div>
<p>Nothing fancy here, just a text link within a div with a background colour and border inside another div with a background colour and border. With a third transparent div doing nothing. Works in all browsers with proper CSS1 support. IE6 does not render this a perfectly as other browsers, it loses some of the height on the inner div, and has a larger grey bottom <em>border</em>. As this is a proof of concept I am not going IE6 bug hunting. </p>
<p><code><br />
&lt;div style=&quot;width: 105px;  height: 105px; padding:4px; border: 4px #000 solid;background-color: #ccc; position:relative;&quot;&gt;<br />
&lt;div style=&quot; height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid;  background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; text-indent: -5px;&quot;&gt; &lt;a href=&quot;#&quot; title=&quot;play&quot; style=&quot;text-decoration:none; color: #fff; font-weight: bold;&quot;&gt;&amp;gt;&lt;/a&gt;&lt;/div&gt;<br />
&lt;div style=&quot;position:absolute; top: -40px; left: 5px; height: 90px; width: 100px;&quot;&gt;&lt;/div&gt;<br />
&lt;/div&gt;</code></p>
<h3>Opacity</h3>
<div style="width: 105px;  height: 105px; padding:4px; border: 4px #000 solid;background-color: #ccc; position:relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid;  background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; text-indent: -5px;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px; background-color: #fff; opacity: 0.25; filter: alpha(opacity = 25);"></div>
</div>
<h4>Supported by Firefox 2+, Safari 2+, Opera 9+ &#038; IE8+ </h4>
<p><code>opacity: 0.25;</code><br />
<h4>Hack for IE5.5+</h4>
<p> <code>filter: alpha(opacity = 25);</code></p>
<p>I could of used a background colour and opacity to give the translucent effect, I did not for the simple reason that some browser do not support opacity, the result in these browser the extra div with be opaque and visually block the top of the text.</p>
<h4>RGBA</h4>
<div style=" width: 105px;  height: 105px; padding:4px; border: 4px #000 solid;background-color: #ccc; position:relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid;  background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; text-indent: -5px;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px; background-color: rgba(255,255,255,0.25);"></div>
</div>
<h4>Supported by Firefox 3+, Safari 3+, Opera 10+ &#038; IE8+ </h4>
<p><code>background-color: rgba(255,255,255,0.25);</code></p>
<p>I preferred to use RGBA over opacity to get the translucent effect on the top of the button, because even though it works in less browsers, browsers that do not understand it, ignore it reverting to the previous colour or default settings. Which in this case is transparent.</p>
<p>Unless you are sure what the colour will be, through either the default settings or set earlier in the CSS, you need to set the colour in a format all browsers understand.</p>
<h3>Type Shadow</h3>
<div style="width: 105px; height: 105px;  padding:4px; border: 4px #000 solid;background-color: #ccc; position:relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid;  background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; text-indent: -5px; text-shadow: 0 0 30px #c60; text-shadow: 0 0 2px #000, 0 0 75px #fff;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px; background-color: rgba(255,255,255,0.25);"></div>
</div>
<h4>Supported by Firefox 3.1+, Safari 3+, Opera 9.5+ </h4>
<p><code>text-shadow: 0 0 2px #000, 0 0 25px #fff;</code></p>
<p>Text shadow is responsible for the dark outline around the text in the example. Firefox 3 and Safari/Webkit support a single text shadow property. Opera and Firefox 3.1 supports multiple text shadow properties which can lead to interesting effects.</p>
<p>The first value is the vertical displacement (X-axis) of the shadow relative to the text. The second value is the horizontal displacement (Y-axis) relative to the text. The third value is blur radius, 0 is no blur. The larger the value the more the blurring occurs, it turns into a indistinguishing smudge around 20px and disappears around 50px depending on the size of the text being shadowed, The fourth value is colour, you can use RGBA to adjust the opacity of the shadow.</p>
<p>For this example only, I am using two text shadows and I had to make compromises. I really wanted the hard dark edge offered by text-shadow: 0 0 2px #000, for browsers that only support one text-shadow value, such as Firefox 3 &amp; Safari 3. Unfortunately, this mean the second text-shadow: 0 0 75px #fff,  , overlays the first. I would of liked to used rgba(255,255,255,0.67) instead of #fff. However, Opera 9.5 does not understand RGBA and was delivering a grey smudge, because it did not understand RGBA and used the previous text-shadow colour. </p>
<h3>Border Radius</h3>
<div style="width: 105px;  height: 105px; padding:4px; border: 4px #000 solid; background-color: #ccc; position: relative; -moz-border-radius: 61px; -webkit-border-radius: 57px;-o- border-radius: 57px; border-radius: 57px;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid; -moz-border-radius: 100px; -webkit-border-radius: 51px; background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; color: #fff; text-indent: -5px; "> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px; -moz-border-radius:212px; -webkit-border-radius: 45px; background-color: rgba(255,255,255,0.25);"></div>
</div>
<h4>Supported by Firefox 3+, Safari 3+ </h4>
<p><code> -moz-border-radius: 100px; -webkit-border-radius: 57px; border-radius: 57px;</code></p>
<p>Border radius rounds corners, while you can make a circle as long as the block element is a perfect square. You can not make an oval, you can only round corners. So with the maximum possible border radius value the shortest side is a perfect half circle.</p>
<p>For a circle the radius equals half the height + padding + border width. If you provide a value larger than that Safari treats it as a value of 0, leaving you with regular straight border. With a rectangular box, the maximum radius is half the smaller of height or width + padding + border width. Again, if you put a larger value, Safari treat it as 0. Firefox will accept a large border radius value, it will only apply the maximum radius.</p>
<p>You can also apply four different border radius values:</p>
<p><code>border-radius: 0 50px 20px 50px; -moz-border-radius: 0 50px 20px 50px; -webkit-border-radius: 0 50px 20px 50px; </code></p>
<p>Will deliver 0px radius top left corner, 50px radius top right corner, 20px radius bottom right corner and 50px radius bottom left corner.</p>
<h3>Box Shadow</h3>
<div style="width: 105px;  height: 105px; padding:4px; border: 4px #000 solid; -moz-border-radius: 61px; -webkit-border-radius: 57px;-o- border-radius: 57px; border-radius: 57px; background-color: #ccc;<br />
position:relative; -webkit-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -o-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -moz-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); position: relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid; -moz-border-radius: 100px; -webkit-border-radius: 51px; background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; color: #fff; text-indent: -5px; text-shadow: 0 0 2px #000, 0 0 75px #fff;"> <a href="#" title="play" style="text-decoration:none; color: #fff;); font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 90px; width: 100px; -moz-border-radius:212px; -webkit-border-radius: 45px; background-color: rgba(255,255,255,0.25);  -moz-box-shadow: 0px 0px 20px rgba(255,255,255,0.2);  -webkit-box-shadow: 0px 0px 20px rgba(255,255,255,0.2);  box-shadow: 0px 0px 20px rgba(255,255,255,0.2);"></div>
</div>
<h4>Supported by Firefox 3.1+ &amp; Safari 3+</h4>
<p> <code>box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -webkit-box-shadow: 3px 5px 12px rgba(102,102,102,0.5);  -moz-box-shadow: 3px 5px 12px rgba(102,102,102,0.5);</code></p>
<p>Shadow for block elements, exactly the same attributes as text shadow and works the same way. As with text shadow, Safari 3 only supports a single instance of text shadow, while Firefox 3.1+ and the Webkit nightly&#8217;s support multiple instances using:</p>
<p><code>box-shadow: 20px 0px 20px rgba(255,0,0,1), 0px 20px 20px rgba(0,255,0,1);-moz-box-shadow: 20px 0px 20px rgba(255,0,0,1), 0px 20px 20px rgba(0,255,0,1); -webkit-box-shadow: 20px 0px 20px rgba(255,0,0,1), 0px 20px 20px rgba(0,255,0,1); </code></p>
<p>You need to be aware of a problem with Safari 3 (fixed in the latest webkit) rendering a thin dark line outside of the border (if any, otherwise the element itself) of a block element with box shadow applied. So I choose not apply a box shadow to the translucent upper section, except for this example. </p>
<p>There is also a problem  with Google Chrome. If an element has a border-radius and box-shadow, the area revealed the border-radius is rendered as black, not the underlying element if a box shadow is applied to the elemnt with a border-radius. So if your visitors use Chrome you will have to make a choice border-radius or box-shadow. </p>
<h3>Transform</h3>
<div style="width: 105px; height: 105px;  padding:4px; border: 4px #000 solid; -moz-border-radius: 61px; -webkit-border-radius: 57px;-o- border-radius: 57px; border-radius: 57px; background-color: #ccc;<br />
position:relative; -webkit-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -o-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); -moz-box-shadow: 3px 5px 12px rgba(102,102,102,0.5); position: relative;">
<div style=" height: 50px; width: 50px; padding: 25px;  border: 2px #333 solid; -moz-border-radius: 100px; -webkit-border-radius: 51px; background-color: #f90; font-size:120px; font-family: arial; line-height: 50px; color: rgba(255,255,255,0.98); text-indent: -5px; text-shadow: 0 0 2px #000;"> <a href="#" title="play" style="text-decoration:none; color: #fff; font-weight: bold;">&gt;</a></div>
<div style="position:absolute; top: -40px; left: 5px; height: 100px; width: 100px; -moz-border-radius:100px; -webkit-border-radius: 45px; border-radius: 45px; background-color: rgba(255,255,255,0.25); -webkit-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  -moz-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  -o-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  transform:translateY(20px) scaleX(0.65) scaleY(0.31);"></div>
</p></div>
<h4>Supported by Firefox 3.1+ &amp; Webkit nightly </h4>
<p><code>-webkit-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  -moz-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  -o-transform:translateY(20px) scaleX(0.65) scaleY(0.31);  transform:translateY(20px) scaleX(0.65) scaleY(0.31);</code></p>
<p>To give the attention it deserves I will write another article just on transformation either here or at my <a href="http://nickcowie.com">blog</a>. It is a very powerful tool for manipulating element with CSS, that needs a detailed explanation. This just demonstrate what can be done for the bleeding edge browsers, which should become mainstream shortly, with Firefox3.1. </p>
<p>The existing transparent circular div is  moved down, and scaled down both on the X (horizontal) axis and more on the Y (vertical) axis to form an oval.</p>
<h3>Conclusion</h3>
<p>I hope you like what you saw and the possibilities of using CSS3 to progressively enhance web pages. You should not use CSS3 just because it is the latest and greatest toy. You should use it to enhance the experience of some of your visitors. At current that varies between 15% for your typical corporate site to well over 50% for sites used by web geeks.</p>
<p>More and more browsers are capable of supporting CSS2.1  &amp; CSS3, IE8 is just around the corner and hopefully IE9 will have CSS3 support. So now is the time to learn and experiment, otherwise you will have a steep learning curve later. A good place to start is <a href="http://CSS3.info">CSS3 Info</a>.</p>
<p>A couple of notes, I could of used any unit of measurement for this demo. I used px because it was the easiest to calculate and I did not have to worry about browser rounding errors. Also there is a semi-translucent area extending 45px or so above each button in this demo, which I could of hidden, either with a margin-top or fancy footwork and lots of z-indexes. I choose instead to make it obvious, the disadvantage of using curved block elements.  It was an interesting experiment, that I will refine and use later.</p>
<p><img id="trustme" src="/article/nick/screenshot-ff31b.png" alt="those links as seen in firefox3.1beta" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/progressive-enhancement-with-css3/feed</wfw:commentRss>
		</item>
		<item>
		<title>Illustration Workflow</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/illustration-workflow</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/illustration-workflow#comments</comments>
		<pubDate>Thu, 11 Dec 2008 15:00:59 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 12]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=45</guid>
		<description><![CDATA[<a href="http://www.chigarden.com/">Teresa Watts</a> steps through her <a href="http://mixedgrill.webindustry.asn.au/2008/illustration-workflow">Illustration workflow</a> on Day 12 of the <abbr title="Australian Web Industry Association">AWIA</a> Web Mixed Grill.]]></description>
			<content:encoded><![CDATA[<p>Ever wondered how artists come up with those illustrations that seem to be so fashionable on sites lately? Well I can&#8217;t teach you how to draw in a single tutorial, but I can give you a little insight into my own illustration process.</p>
<h3>Planning</h3>
<p>The first thing I do is think of the purpose of the piece. All art has a purpose (even if the purpose is solely to be aesthetic), and commercial illustration usually has quite specific purposes in what they need to communicate. In this case I&#8217;d like to do a character illustration celebrating Christmas to post on my blog and send to people as Christmas cards. The purpose is to wish people happy holidays as well as indirectly promoting my skills as an illustrator.</p>
<p>Next I think about constraints. In this case I don&#8217;t have a huge amount of time to spend on this picture, so it will have to be something simple and quick to draw rather than a complex and involved painting.</p>
<p>With all these things in mind I decided to draw a simple vector illustration of an abominable snowman. With a candy cane.</p>
<h3>Sketching</h3>
<p>Even though I&#8217;m planning to create this picture in a vector program on the computer, I like to start out with pencil and paper. Generally I find it much easier to quickly sketch out ideas on paper as I tend to not get as caught up in details as I would on the computer. First thing to do are some thumbnail sketches.</p>
<p>Thumbnail sketches are small, fast, loose sketches to figure out where you want to go with the final product. The idea is to experiment and get all your ideas onto paper as quickly as possible, without bothering about details, rather than jumping right into it and realising at the end that your composition doesn&#8217;t work. I apply the same concept to logos, website designs and even crafts, and have found that I always get a better result with proper planning and sketching.</p>
<p>Here&#8217;s what I came up with:</p>
<p><img class="aligncenter size-full wp-image-198" title="ill1" src="http://www.chigarden.com/wp-content/uploads/2008/12/ill1.jpg" alt="" width="500" height="121" /></p>
<p>Some people like to do heaps of sketches, but since this is quite a simple idea I just did the four on the left. I had a vague idea of how the snowman would look, but felt that even in sketch form it wasn&#8217;t really working (again, this is why sketches are important!). The fifth sketch you can see there is a further stylised look, which I decided I was more happy with. For the actual pose I decided to go with the first one, which is nice and dynamic.</p>
<p>With a pose and style in mind, I did a fairly clean and larger sketch to work with, and messed around with it until I was happy. It doesn&#8217;t have to be perfect at this stage, just clear enough so that you can recreate the shapes on the computer.</p>
<p><img class="aligncenter size-full wp-image-199" title="ill2" src="http://www.chigarden.com/wp-content/uploads/2008/12/ill2.jpg" alt="" width="500" height="445" /></p>
<h3>Vectoring</h3>
<p>Armed with a relatively clean sketch, I then scanned it in and brought it into Adobe Illustrator. I usually start by bringing down the transparency of the sketch so it&#8217;s visible but not so distracting, then lock that layer so it doesn&#8217;t get in the way.</p>
<p>I don&#8217;t want to go into the vectoring process too much as I&#8217;m still learning the best way to do things myself, but I basically create the basic shapes using the pen tool, add colour and then add shadows and details.</p>
<p><img class="aligncenter size-full wp-image-200" title="ill3" src="http://www.chigarden.com/wp-content/uploads/2008/12/ill3.jpg" alt="" width="500" height="272" /></p>
<p>Small details like shadows and speculars on the eyes can really bring a character to life, even with a character as simple as this one.</p>
<h3>Finished!</h3>
<p>Here he is, all ready to go!</p>
<p><img class="aligncenter size-full wp-image-201" title="ill4" src="http://www.chigarden.com/wp-content/uploads/2008/12/ill4.jpg" alt="" width="427" height="386" /></p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/illustration-workflow/feed</wfw:commentRss>
		</item>
		<item>
		<title>Haml and Sass: Wonder Twins Unite!</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/haml-and-sass-wonder-twins-unite</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/haml-and-sass-wonder-twins-unite#comments</comments>
		<pubDate>Wed, 10 Dec 2008 15:00:30 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 11]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=42</guid>
		<description><![CDATA[Sick of writing HTML and CSS but have a grasp of the Ruby language - <a href="http://jordanbrock.com">Jordan Brock</a> walks us through the basics of HAML and SASS on the grill today - <a href="http://mixedgrill.webindustry.asn.au/2008/haml-and-sass-wonder-twins-unite">Haml and Sass: Wonder Twins Unite!</a>]]></description>
			<content:encoded><![CDATA[<h3>Huh? What?</h3>
<p><span>HTML</span> (and its cousins/siblings/bastard children such as <span>XHTML</span>) is a markup language that is interpreted by the web browser to render a web page. A large amount of the actual code in <span>HTML</span> is taken up with closing off tags and general housekeeping. Having to repeatedly type “<code>&lt;/p&gt;</code> and <code>&lt;/div&gt;</code>” gets to be annoying. And large amounts of grief can be caused, particularly when you’re trying to debug an error in your code because the page isn’t working as intended.</p>
<h4>RubyOnRails and Templating Languages</h4>
<p><a href="http://www.rubyonrails.org" target="_blank">RubyOnRails</a> is based on the <a href="http://en.wikipedia.org/wiki/Model-view-controller" title="Model/View/Controller" target="_blank"><span>MVC</span></a> programming pattern. Basically this means that the various functional parts of the website are contained within designated parts (Model = Business logic, View = Presentation of data, Controller = Making it all work together). RubyOnRails has a templating language, ERb, which is used to embed programmatic functionality within an <span>HTML</span> template. Basically this means that you can include Rails code in a familiar environment, and have Rails generate your <span>HTML</span> for you.</p>
<p>Here’s an example.</p>
<pre>
  <code>
  &lt;div id=&quot;user_list&quot;&gt;
    &lt;ul&gt;

      &lt;% @users.each do |user|%&gt;
        &lt;li&gt;&lt;%= <a href="http://user.name" target="_blank">user.name</a> %&gt;&lt;/li&gt;
      &lt;%end %&gt;
    &lt;/ul&gt;

  &lt;/div&gt;
  </code>
</pre>
<p>OK, that’s a pretty basic example, but effectively what’s happening is that the Rails engine loops over a collection of users, and generates the <span>HTML</span> code to display a list of users. Doesn’t look too bad, but when you start getting a complicated page, it can start getting really difficult to work out what’s going on where.</p>
<h4>Surely we could do better? (AKA why do I have to type so much crap?)</h4>
<p>Thankfully, there’s a better way. <a href="http://hamptoncatlin.com/" target="_blank">Hampton Caitlin</a> is a developer who also got annoyed at having to write necessary, but pointless code all the time. He felt that it could be done much better by a computer. So, he created Haml.</p>
<p>Haml allows you to write legible, even beautiful, templates for your websites, and takes care of most of the heavy lifting for you.</p>
<h3>Crash Course in Haml</h3>
<p>The easiest way to explain Haml is to use an example. Here’s the code from above, rewritten in <span>HAML</span></p>
<pre>
  <code>
  #user_list
    %ul
      -@users.each do |user|
        %li= <a href="http://user.name" target="_blank">user.name</a>
  </code>
</pre>
<p>Not too bad. 5 lines to replace 7. And not an angle bracket to be seen! Of course, it’s a pretty simplistic example, but should give you an idea of what can be achieved.</p>
<p>So, how does it work? Haml makes great use of whitespace, and tabs. The indenting in your template code is used to determine the hierarchy of your code. For example:</p>
<pre>
  <code>
  #container
    %h1 Inside the container
    #box
      %h3 Inside the box
  </code>
</pre>
<p>will generate</p>
<pre>
  <code>
  &lt;div id=&quot;container&quot;&gt;
    &lt;h1&gt;Inside the container&lt;/h1&gt;

    &lt;div id=&quot;box&quot;&gt;
      &lt;h3&gt;Inside the box&lt;/h3&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  </code>
</pre>
<p>If you change the indenting like so</p>
<pre>
  <code>
  #container
    %h1 Inside the container
  #box
    %h3 Inside the box
  </code>
</pre>
<p>you get</p>
<pre>
  <code>
  &lt;div id=&quot;container&quot;&gt;
    &lt;h1&gt;Inside the container&lt;/h1&gt;
  &lt;/div&gt;

  &lt;div id=&quot;box&quot;&gt;
    &lt;h3&gt;Inside the box&lt;/h3&gt;
  &lt;/div&gt;
  </code>
</pre>
<p>This illustrates the power of Haml (and a potential source of bugs!). With the change of nothing more than an indent, it’s possible to greatly influence the generated code. The use of indenting also makes for legible, and beautiful code.</p>
<h4>Haml Shortcuts</h4>
<p>Haml also has some wonderful timesaving shortcuts that means you don’t need to sweat the details as much.</p>
<pre>
  <code>
  !!! XML
  !!!
  %html{html_attrs}
  </code>
</pre>
<p>will generate</p>
<pre>
  <code>
  &lt;?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39; ?&gt;

  &lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
&quot;<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" target="_blank">http://www.w3.org/TR/xhtml1/<WBR>DTD/xhtml1-transitional.dtd</a>&quot;&gt;
  &lt;html lang=&#39;en-US&#39; xml:lang=&#39;en-US&#39; xmlns=&#39;<a href="http://www.w3.org/1999/xhtml" target="_blank">http://www.w3.org/1999/<WBR>xhtml</a>&#39;&gt;

  </code>
</pre>
<p>Nice.</p>
<h3>Crash Course in Sass</h3>
<p>Not long after the initial versions of Haml were released, it became obvious that <span>CSS</span> needed some Haml-ification. Sass to the rescue.</p>
<p>Sass takes the approach of Haml, and applies it to the world of <span>CSS</span> selectors and attributes. It makes the creation of large stylesheets, with complex parent/child relationships, and makes it a simple thing.</p>
<p>Nothing like an example. To create the following:</p>
<pre>
  <code>

    #container{
      width : 100px;
      margin : 10px 2px 5px 0px;
      border : 1px solid #fff;
    }
    #container p{
      font-family : Helvetica, Arial, sans-serif;
      font-size : 1em;
      color : #000;
    }
  </code>
</pre>
<p>you would write</p>
<pre>
  <code>
    #container
      :width 100px
      :margin 10px 2px 5px 0px
      :border 1px solid #fff
      p
        :font-family Helvetica, Arial sans-serif
        :font-size 1em
        :color #000
  </code>
</pre>
<p>Once again, you can see the power of indenting being used to create parent/children relationships. And the Sass example is eminently more “readable”, which helps with debugging and maintenance of code.</p>
<h3>So, it’s only a Rails thing right?</h3>
<p>Well, sort of. It’s really a Ruby thing, as Haml has been included, or been made to work with, Merb and Sinatra, two other web development frameworks based on Ruby. I’m not aware of any attempts to get it working with other languages.</p>
<p>But all is not lost! Hampton has got a Haml Lab up and running, so you can test it all out, and <a href="http://lab.hamptoncatlin.com/" target="_blank">see how much time it could save you</a>.</p>
<h3>In Conclusion</h3>
<p>Go Team “Haml and Sass”!</p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/haml-and-sass-wonder-twins-unite/feed</wfw:commentRss>
		</item>
		<item>
		<title>7 Tips for Writing Content That Counts</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/7-tips-for-writing-content-that-counts</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/7-tips-for-writing-content-that-counts#comments</comments>
		<pubDate>Tue, 09 Dec 2008 15:00:19 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 10]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=39</guid>
		<description><![CDATA[Krissy Bradfield has a few tips on developing the content that fits into that design you've spent hours laboring over - <a href="http://mixedgrill.webindustry.asn.au/2008/7-tips-for-writing-content-that-counts">7 Tips for Writing Content That Counts</a>]]></description>
			<content:encoded><![CDATA[<p>As designers and developers we spend a lot of time (and client money) perfecting the form and function of websites. We slave over accessibility, standards compliance and cross browser compatibility but one of the most important aspects of a build, the site content, is often left to the last minute. Preparing content isn&#8217;t necessarily a hard task but like design and development there are some rules to remember if you&#8217;re going to do it well.</p>
<h4>1. Write for your audience</h4>
<p>When writing web content the most important thing to know is who your audience is. Spend some time researching who they are, what they like and dislike and what they&#8217;re looking for - you can then tailor your content to suit. Read what your visitors read - i.e. trade related publications and websites. Look at competitor&#8217;s sites to see what they do (or don&#8217;t do) well. Familiarise yourself with industry specific terminology to help with your credibility. Constantly revisit who it is you&#8217;re writing for to get the tone and style right.</p>
<h4>2. Have a purpose</h4>
<p>Not only is good web writing concise and to the point but it also gives clear direction as to what a visitor should do next. If a website is sales oriented, the copy should aim to bring visitors further along the sales cycle. If it&#8217;s marketing based it needs to provide relevant answers to questions visitors may have. The minute your copy starts to lack clarity and direction your visitors will go elsewhere. Good web copy always keeps the needs of visitors in mind.</p>
<h4>3. Don&#8217;t be wordy</h4>
<p>Web content needs to be brief and punchy - it also needs to be at least 50% shorter than print. Shorten sentences to 20 words or less and get rid of unnecessary words. Wordiness puts visitors off so say what you need to say quickly.</p>
<h4>4. Write scannable text</h4>
<p>79% of visitors only quickly scan content which means unless they find what they&#8217;re after quickly, they&#8217;re gone. Organise content into chunks, separating each with sub-headings or using lists helps to make content more scannable. Front-loading - where important or goal oriented info is placed at the beginning of a sentence - is another useful tool for helping people find what they need quickly.</p>
<h4>5. Watch your language</h4>
<p>Neutral language has no place on the web. The only way to quickly attract and hold the user&#8217;s attention is through active language. For example the following passive sentence, Daily updates can be found on the news page has less impact than the active, Find daily updates on the news page. Active language is generally shorter and takes less thought to process which is what you need to aim for.</p>
<h4>6. Always proofread</h4>
<p>Don&#8217;t ever let any content onto the web before it&#8217;s been proofread. There&#8217;s no excuse for typos, grammatical errors or general sloppiness. Any mistakes will damage your credibility so be vigilant.</p>
<h4>7. Team up with a designer</h4>
<p>The design of a site, and the content that appears on it, rely on each other to convey messages to visitors. Neither can exist or thrive without the other so it&#8217;s handy to sit down with a designer and plan out how things should flow. A designer might suggest that some text would be better represented as an image or a downloadable document, while you might have some ideas on pull quote placement and formatting. Working with a designer will invariably help the end product so be open to the experience.</p>
<p><em>Krissy Bradfield (the brains behind <a href="http://wordish.com/" target="_blank">wordish.com</a>) is a freelance writer focusing on productivity issues, psychology and corporate communications.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/7-tips-for-writing-content-that-counts/feed</wfw:commentRss>
		</item>
		<item>
		<title>Creating Order from Chaos</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/creating-order-from-chaos</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/creating-order-from-chaos#comments</comments>
		<pubDate>Mon, 08 Dec 2008 15:00:30 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 9]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=37</guid>
		<description><![CDATA[In <a href="http://mixedgrill.webindustry.asn.au/2008/creating-order-from-chaos">Creating Order from Chaos</a>, <a href="http://www.attitude-emedia.com">Cindy Prosser</a> shares her tips for getting a clean slate and fixing design chaos on your sites.]]></description>
			<content:encoded><![CDATA[<p>
Back in the 80&#8217;s you couldn&#8217;t go past a house that didn&#8217;t have one of those string arts on their wall.  You remember the ones.  Nails hammered into a board and string wrapped back and forward until pattern developed, and you were left with what you considered a masterpiece at the end.  While some did display a lot of talent, most fell flat and looked exactly what they were, pieces of string wrapped around nails.
</p>
<p>
Bad wireframing on websites can resemble these 80&#8217;s string atrocities.  Points placed all over the website in no order create an absolute chaos of pathways to follow.  Pathways going everywhere can leave a user thinking  &#8220;Of course the first place I would check on a website for repairs is to go into accessories.  Probably just as logical as finding the contact page as a tiny link under products.&#8221;  On a number of occassions I used to want to rip down those gastly string arts because they made my brain hurt.  Imagine how a user feels upon entering a website with the same schematics.
</p>
<p><em>def:  Website wireframes are a visual guide to suggest the layout of elements in the website interface.</em></p>
<p>
So once we have chaos, how do we create order from it.  Wireframing from concept is a lot easier than being given a board of nails and a kalaidescope of string going nowhere.  Or is it?
</p>
<h3>The Horror Website</h3>
<p>
We have been given the epitomy of all nightmares website.  Navigating around it makes you cringe.  We think they are missing many parts of a formal website structure, only to find them in the bowels of some obscure category.  So what do we do?  We strip the aesthetics and get the website down to raw html with no formatting, flash or javascript. Have it set up live, but obviously not the existing website (not if you want to retian your client anyway!).
</p>
<p>
We need to know what they &#8220;do&#8221; have, not what they &#8220;think&#8221; they have.  I have seen websites totally consisting of images, and the clients swore black and blue that they had lots of text to copy and paste into the new website.  The majority of clients don&#8217;t know what their website consists of.  The last thing we want to do is to include a whole section in the wireframe of what the client wants off the existing website, only to find out that we can&#8217;t access it, and that it&#8217;s going to add considerable charges to their website.  Clients can quickly blow out budgets by presuming they have more than what they have.
</p>
<h3>Starting Afresh</h3>
<p>
We now have a better idea of what we are working with.  Now to extract the required elements from the old rotting corpse.  Sometimes even on the most abominable website we can still tear shreds from it.  Don&#8217;t just throw them all in one folder to rummage through later.  Bring your planning into your folder system.  Thoughts of how it might be set up in its new live environment, should be adopted on testservers so crucial items aren&#8217;t ommitted. Don&#8217;t be confined by attrified sectioning on the old website. In each folder we decide on what photo or images we will be using again, and keep a spare folder for discarded items.  Planning how we dismantle is equally as important as it is to plan our construction.
</p>
<h3>Creating the New Wire Frame</h3>
<h4>Usabilty</h4>
<p>
One of the advantages of reconstructing an existing website, is that we come to the party already aware of how various sections have performed until now.  We have an idea of how many people hit the front page and run away at lightening speeds.  We are in a position to ask for error logs so we are aware of what parts of the website aren&#8217;t working to specs.
</p>
<h4>Optimisation</h4>
<p>
Where budgets permit, it is a good idea to consult a SEM (search engine marketer) to retain any PR or organic ranking that pages may have amassed.  Because we are recycling content, we have to be careful not to kill pre-existing layouts that worked.  Even the worst website can have pages that just simply worked.  They may have age factor, or just happen to hit on that x-factor.  So it&#8217;s important to recognize and accomodate these successes and check the ego at the door.</p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/creating-order-from-chaos/feed</wfw:commentRss>
		</item>
		<item>
		<title>Pass the Opened Source</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/pass-the-opened-source</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/pass-the-opened-source#comments</comments>
		<pubDate>Sun, 07 Dec 2008 23:05:11 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 8]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=34</guid>
		<description><![CDATA[Day 8 of the Mixed Grill brings Ben Thomson to us with a little piece of Open Source software - <a href="http://mixedgrill.webindustry.asn.au/2008/pass-the-opened-source">Pass the Opened Source</a>]]></description>
			<content:encoded><![CDATA[<p>				Open-source web software, or software whose code is freely available for people to use or modify, has become a big part of the web development industry over the years, easing the workload and cost on developers such as students trying to understand how the big players do it, to big companies wishing to save money on hefty license fees.
				</p>
<p>
					From forum software, allowing you to constantly argue about the latest episode of “Heroes”, to blog software where you bag out the declining writing of “Heroes” and even content management systems, allowing you to build a whole site about how much you hate “Heroes”, you are not limited in your choices of software.
				</p>
<p>
					But it is important to ask yourself the following questions when looking at any freely available open-source web software before downloading it and using it for your own projects, and doing so may save you a lot of stress and frustration.
				</p>
<h4>Does it do what I need it to do?</h4>
<p>
					All too often, people will download a piece of open-source software that comes highly recommended by peers or experts, and will spend large amounts of time trying to get the software to do what they needed it to do, and usually fail in doing so.
				</p>
<p>
					When on the hunt for software, grab a piece of paper (or open up a Notepad document if you don&#8217;t believe in writing) and just jot down the major pieces of functionality that you require. Then shop around Google, read review sites and compare software to each other to find the best software which covers all of the functionality that you require and nothing more.
				</p>
<p>
					It is always best to go for the software that does everything that you require &#8216;out-of-the-box&#8217;, instead of the software that does half of what you want and then requires add-ons or modules to do the rest. That way, you can be sure that the functionality you require is constantly supported by patches and updates.
				</p>
<h4>Is it well-supported?</h4>
<p>
					Support for open-source software usually comes in the form of a community. A core group of developers will create the software, then release it to the community to test for bugs and security errors.
				</p>
<p>
					In most cases, the software with large communities of developers and testers will mature quickly, bugs are squashed quicker and more people are on hand to help out with any issues you have, whereas a smaller community may mean bugs and issues are left undiscovered or un-patched for longer and questions you have may remain un-answered for longer.
				</p>
<h4>Is it safe to use?</h4>
<p>
					One of the disadvantages of open-source software is that because it is freely available to everyone, there will be those out there that would read each line of code thoroughly for vulnerabilities.
				</p>
<p>
					Before using any open-source software, it is always recommended to make sure you are using the latest version and check that there are no reported security issues. Some developers tend to hide discovered security issues to prevent malicious users from exploiting the vulnerabilities, so it is also recommended to check out 3rd-party security advisories such as ]Secunia for any vulnerabilities which may not have yet been revealed.
				</p>
<h4>Is it easily customisable?</h4>
<p>
					Open-source software is great for branching out in to new areas, like adding a gallery to your blog or a music player (please, no auto-playing music!). Most open-source software is built for extendibility, provided in the form of &#8216;add-ons&#8217; or &#8216;modules&#8217; that you simply download, install and use immediately.
				</p>
<p>
					If you must create your own new functionality, it is always good to check if the software developer provides good documentation on the functionality. This can come in the form of well-written comments in the code, or a &#8216;developers area&#8217; on the software developers website.
				</p>
<h4>Conclusion</h4>
<p>
					If you are very careful in selecting open-source software for use on your website, then you can set up a site fast and without hassle. There&#8217;s a lot of good and bad software out there, so always read up about the software and the community behind it and always test out the software before committing to it.
				</p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/pass-the-opened-source/feed</wfw:commentRss>
		</item>
		<item>
		<title>Overcoming Design Panic</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/overcoming-design-panic</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/overcoming-design-panic#comments</comments>
		<pubDate>Thu, 04 Dec 2008 23:13:58 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 5]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=31</guid>
		<description><![CDATA[<a href="http://manwithnoblog.com">Gary Barber</a> is letting us in on his design process today and guess what, you'll need no computer - <a href="/2008/overcoming-design-panic">Overcoming Design Panic</a>]]></description>
			<content:encoded><![CDATA[<p>Now I have no idea how other people design, I suppose we all have our own little tricks or cute little methods to kick off the design process.  So in a way design can be a very personal process.  Well I&#8217;m going out on a limb here, I&#8217;m going to let you into my world of the design process. </p>
<p>A few caveats first.  This process only really works if you are not being hemmed in by a restrictive wireframe.  Mind you it can also be used to create and document a formal wireframe.   It&#8217;s also really only any good I have found when you are totally against the clock and have to find that design, like yesterday. </p>
<p>You know what is the hardest thing for me design wise; the blank canvas. I&#8217;m sure it just stares back at me mocking me.   So how do I overcome this?  Well I make a list. </p>
<p>Often I will have a design of the logo and the corporate colour palette for the site already.  If you think about it you will also have the defined content areas, title types, number and types of menus you want to use, you will have got this from your client and user research. These all go on that list.</p>
<p>I&#8217;ll assume that you have the content or an idea of the content.   If you don&#8217;t, really I think you should stop and go bake some fruit mince pies or something, as design without knowing the content is a very bad idea, trust me it will end in tears. </p>
<p>From a blank canvas we now have the logo, colours, content type areas, menus, titles, forms, buttons and the like. Now we are ready. I usually go grind a few beans (coffee that is), make a nice cuppa and sit down with a large sketchpad and pencils.  </p>
<p>What NO computer!  Yes that&#8217;s right, step away from the computer.  </p>
<p>Okay now the blank canvas of the sketchpad is laughing at me.   </p>
<p>But not for long, draw up a series of rectangles about the same ratio as a screen, say 9 to 15 a page.  These are basic frames,  thumbnails of a screen design.   You can list the elements you need to put in design on the sketchpad page too if you wish, it does help you to remember them all.  </p>
<p><img src="/article/odp/figure01.jpg" alt="12 Pencil drawn thumbnail wireframes" width="450" height="309"/></p>
<p>Now you just drawn the basic outline of the content areas, menus , logos etc in the small frames.  Nothing detailed, as seen in figure 1, keep it simple it&#8217;s like you are drawing thumbnails of quick wireframe. However remember you can use curves and shading. </p>
<p>Go on go crazy, break all those conventions, put stuff where you know its not allowed in the sensible design world.  These thumbnails are your experimentation area.  Nothing you do here is wrong. You can&#8217;t make a mistake.   Even the things that are a little too wild may inspire that one killer design. </p>
<p>When I&#8217;m doing this I will often complete 20 to 30 of these thumbnails.  I usually stop when I feel that I&#8217;m starting to repeat myself. </p>
<p>Allowing ourselves to step away from the computer to the old medium of paper for me is liberating and using a sketchpad is even more so, as it makes me want to experiment and just play around.</p>
<p>Now I find that the grey lines of the lead pencil are a little restrictive on the design choice so I will photocopy the sketches. Then I get out the coloured pencils and set to work colouring them in as close to the corporate colours as I can get (see figure 2).  </p>
<p><img src="/article/odp/figure02.jpg" alt="12 Coloured thumbnail wireframes" width="450" height="326"/></p>
<p>The result is you can quickly see the major contrast and colour balance issues, and with your keen eye for design you can select a few of the choice thumbnails.  From here I usually sketch up a few larger, half page to full page wireframes (figure 3), these are more detailed with an base grid pattern.   If you like you can colour them in, as sometimes it helps.  Just stick to rendering the colour in blocks, nothing to high-resolution, at this point.   </p>
<p><img src="/article/odp/figure03.jpg" alt="rough full sized wireframes" width="450" height="397"/></p>
<p>Now with these few rough full sized wireframes we can now goto the client and let them select the main direction of the site design.  Of course from here we have a little user testing and maybe some prototyping, before we slide into the high-resolution designs and the final product. </p>
<p><img src="/article/odp/figure04.gif" alt="The Final Site" width="450" height="340"/></p>
<p>How are the mince pies coming by the way, nearly ready? </p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/overcoming-design-panic/feed</wfw:commentRss>
		</item>
		<item>
		<title>Opacity vs RGBA - Transparency with CSS</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/opacity-vs-rgba-transparency-with-css</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/opacity-vs-rgba-transparency-with-css#comments</comments>
		<pubDate>Wed, 03 Dec 2008 15:00:28 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 4]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=27</guid>
		<description><![CDATA[On day four of the mixed grill, we're chucking some vegan shrimp on the barbie and inviting up <a href="http://nickcowie.com">Nick Cowie</a> to talk about <a href="/2008/opacity-vs-rgba-transparency-with-css">Opacity vs RGBA</a> and his experiences with it.]]></description>
			<content:encoded><![CDATA[<p>With increasing support for CSS3 you now have two options for changing the opacity of elements with CSS. Opacity which has been round since 2004 and RGBA (red blue green alpha) has only been available this year, so lets have a look at the options:</p>
<h3>Opacity</h3>
<ul>
<li>Supported by Firefox 2+, Safari 2+, Chrome, Opera 8+, IE8</li>
<li>Hack for IE5.5, 6 &#038; 7</li>
<li>Inheritance (opacity is not inherited, but it effects all children of the element)</li>
<li>If the property is not supported by the browser the opacity of the element is 100% (solid)</li>
</ul>
<h3>RGBA</h3>
<ul>
<li>Supported by Firefox 3, Safari 3, Chrome</li>
<li>Not inherited, no effects on child elements</li>
<li>Can not be applied to images</li>
<li>If RGBA is not supported by the browser, uses previous colour values or defaults</li>
</ul>
<h3>In detail</h3>
<p><code>opacity: 0.5</code></p>
<p>Will make that element and all children of the element 50% opaque. To get the same results in IE:</p>
<p><code>filter:alpha(opacity=50);</code></p>
<p>This of course is not valid CSS, so use it and ignore the validator or hide it behind <a href="http://nickcowie.com/2005/conditional-comments/">conditional comments</a> (up to you, but you get the desired results). Also it looks like the element needs to <a href="http://www.satzansatz.de/cssd/onhavinglayout.html">HasLayout</a> for the filter to work.</p>
<p>The biggest problem is that opacity is affects the display of all children of the element (except for <a href="http://acidmartin.wordpress.com/2008/09/11/overriding-the-parent-propagation-of-alpha-transparency-filter-of-child-elements-in-internet-explorer/">IE</a>). So you have to be very cautious with it&#8217;s use. For example, you wanted to have a white translucent box over the bottom of an image with some opaque text.</p>
<p><code>&lt;div style=&quot;background-color: #fff; opacity: 0.30;&quot;&gt;&lt;p style=&quot;color: #000;&quot;&#8230;</code></p>
<p>Will result in a white translucent background of 30%, and equally translucent black text. Trying to rest opacity has no effect, and trying to set the transparency of the child to 70%, makes it even more transparent (30% * 70% = 21%). So you need to take the child element out of the flow, by example using position: absolute.</p>
<p>If opacity property is not supported by the browser, it render the element with an opacity of 100%.</p>
<p>RGBA is far simpler to apply</p>
<p><code>&lt;div style=&quot;background-color: rgba(255,255,255,0.3);&quot;&gt;</code></p>
<p>Delivers a white background with a 30% opacity without having to worry about the effects on it&#8217;s children.</p>
<p>For browsers that don&#8217;t support RGBA.</p>
<p><code>&lt;div style=&quot;background-color: #fff; background-color: rgba(255,255,255,0.3);&quot;&gt;</code></p>
<p>Supplies an opaque background, if that is your preference. Or</p>
<p><code>&lt;div style=&quot;background-color: transparent; background-color: rgba(255,255,255,0.3);&quot;&gt;</code></p>
<p>A transparent background, as transparent is the default you can leave it out.</p>
<h3>So which on to use?</h3>
<p>Well it depends: on what browsers you want to target and what you want browsers which do not support which method you choose. Lets go back to the example of wanting to put a translucent white section at the bottom of a slide show, with opaque buttons and caption and you need to get it to work in IE6 &amp; IE7. </p>
<h3>Using opacity</h3>
<p>The background element opacity is set to be translucent, the buttons and caption are taken out the flow by using position: absolute. Conditional comments feeds a stylesheet with filter:alpha(opacity=X) to IE7 and below.</p>
<h4>Advantages</h4>
<ul>
<li>Works in most common browsers</li>
</ul>
<h4>Disadvantages</h4>
<ul>
<li>Painful to code and maintain</li>
</ul>
<h3>Using RGBA</h3>
<p>The background element RGBA is set to be translucent, uses straight forward HTML. Conditional comments feeds a stylesheet to IE7 and below with filter:alpha(opacity=X) for the background element and to correct it&#8217;s children.</p>
<h4>Advantages</h4>
<ul>
<li>Easy to code and maintain</li>
<li>Forward compability</li>
</ul>
<h4>Disadvantages</h4>
<ul>
<li>Does not work in Opera, Firefox 2 or Safari</li>
</ul>
<h3>Using 24bit PNG as background image</h3>
<p>A translucent 24bit PNG is used as an background image. 24 bit PNGs are not supported by IE 6, so you can use conditional comments to feed a stylesheet to IE6 and below, with a new background image and filter:alpha(opacity=X) to get the right level of transparency and correct it&#8217;s children opacity with filter:alpha(opacity=X).</p>
<h4>Advantages</h4>
<ul>
<li>Easy to code and maintain</li>
<li>Works in most common browsers</li>
</ul>
<h4>Disadvantages</h4>
<ul>
<li>Requires a background image</li>
<li>IE6 support is painful</li>
</ul>
<h3>Conclusion</h3>
<p>I have been using the 24bit PNG background image, method for a few years now, however, I would consider using  the RGBA method now, with or without IE support depending on the task and whether it is a progressive enhancement or a required feature. The opacity property is just too difficult for complex project, but great for single element.</p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/opacity-vs-rgba-transparency-with-css/feed</wfw:commentRss>
		</item>
		<item>
		<title>Web Analytics for the little guy and the not-so little guy</title>
		<link>http://mixedgrill.webindustry.asn.au/2008/web-analytics-for-the-little-guy-and-the-not-so-little-guy</link>
		<comments>http://mixedgrill.webindustry.asn.au/2008/web-analytics-for-the-little-guy-and-the-not-so-little-guy#comments</comments>
		<pubDate>Tue, 02 Dec 2008 15:00:15 +0000</pubDate>
		<dc:creator>Matt Didcoe</dc:creator>
		
		<category><![CDATA[Day 3]]></category>

		<guid isPermaLink="false">http://mixedgrill.webindustry.asn.au/?p=15</guid>
		<description><![CDATA[<a href="http://juddexley.com">Judd Exley</a> wants to share a little on tracking the performance of your site today for the new comers who might not be so familiar with analytics in his post entitled <a href="http://mixedgrill.webindustry.asn.au/2008/web-analytics-for-the-little-guy-and-the-not-so-little-guy">Web Analytics for the little guy and the not-so little guy</a>.]]></description>
			<content:encoded><![CDATA[<p>Whether you’re a decent-sized shop churning out all your own custom code or a single humanoid unit, pasty-white from lack of daylight, dressed like your favourite Jedi and living in your mum’s spare room, hopefully you’d like to be able to show your clients anything resembling a success on the websites you build for them.</p>
<p>Web Analytics sadly plays a backseat role to flashy things like… well, Flash… and latest .NET platforms, and stylish and exotic designs and other wow-y items sure to help seal a sale, but wouldn’t you love to design and build a site, and then be able to tell that client that you kicked so much backside at it that you’re making them heaps of money?</p>
<h4>Get some analytics tools.</h4>
<p>If you’re small, start small. <a href="http://statcounter.com">StatCounter</a> is great for small.  And it’s FREE.  You slap it in your code and you can point to it and yell excitedly at your client, “SEE?  That guy that came in on that search term went here and here and here and then filled out the contact form and became a client…  Score.”  Details on a per-visitor level can sometimes tell you more about the mindset of your users than all the buzzwords like “Conversion Rates” and “KPIs” ever could.</p>
<p>If you’re bigger, <a href="http://google.com/analytics">Google Analytics</a>.  Its great for bigger companies/sites but its great for small ones too and did I mention it’s FREE!.  Slap it in your code, figure out what you think you want to know (and please &#8220;boofhead&#8221;, not just “hits”, there&#8217;s so much more to analytics and actually working out how your site is going than &#8220;hits&#8221;) - customise a report, get it sent to you daily and point to it and yell excitedly at your client, “SEE?  All those people that came in from that one place went here and here and here and filled out the contact form and 87.3% of them became clients… Mad Score.”  Reporting on what you actually want to know (“How many people clicked on that new button I insisted we make for the home page, and out of them, how many did magical and wondrous things on the website?”) can help determine your next steps in the website’s evolution.</p>
<p>If you’re Global Dominationally Huge, the Googs still does pretty good, but by that point you’ll spend so much time figuring it all out that you won’t be able to count all the money you’re making, so you’ll have to hire someone to explain how much your website rocks.</p>
<p>So go get some FREE analytics tools, there’s plenty out there, and learn how to use them, it’s not hard.  Find out what you’re doing right, then go tell everybody how awesome you are.  Don’t be afraid to learn a little at first and just go with that, we can’t all be experts, but there’s surely enough free information out there to make you sound a bit like one.</p>
]]></content:encoded>
			<wfw:commentRss>http://mixedgrill.webindustry.asn.au/2008/web-analytics-for-the-little-guy-and-the-not-so-little-guy/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
