<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>State Of Flux &#187; australia</title>
	<atom:link href="http://stateofflux.com/tag/australia/feed/" rel="self" type="application/rss+xml" />
	<link>http://stateofflux.com</link>
	<description>always changing</description>
	<lastBuildDate>Fri, 29 Jan 2010 03:29:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Yellow Lab &#8211; Sensis innovates</title>
		<link>http://stateofflux.com/2008/10/28/yellow-lab-sensis-innovates/</link>
		<comments>http://stateofflux.com/2008/10/28/yellow-lab-sensis-innovates/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 10:55:00 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[searchengine]]></category>
		<category><![CDATA[sensis]]></category>
		<category><![CDATA[ugc]]></category>
		<category><![CDATA[yellow]]></category>
		<category><![CDATA[yellowpages]]></category>

		<guid isPermaLink="false">http://markmansour.wordpress.com//2008/10/28/yellow-lab-sensis-innovates</guid>
		<description><![CDATA[I’ve been at Sensis for a year now and my latest project is Yellow Lab . The Yellow Pages is a significant part of the Sensis and Telstra portfolio earning 1,273 million dollars in revenue (p34) during 2007/8 which includes both print and online revenue. Yellow Pages is a product that you only change when [...]]]></description>
			<content:encoded><![CDATA[<p>I’ve been at <a href="http://yellowlab.com.au/">Sensis</a> for a year now and my latest project is <a href="http://yellowlab.com.au/">Yellow Lab</a> .  The Yellow Pages is a significant part of the Sensis and Telstra portfolio earning <a href="http://www.asx.com.au/asx/statistics/showAnnouncementPDF.do?idsID=00890364">1,273 million dollars in revenue</a> (p34) during 2007/8 which includes both print and online revenue.  Yellow Pages is a product that you only change when you are absolutely sure you’re going to make it better.  <a href="http://yellowlab.com.au/">Labs</a> was created to trail ideas for Yellow Online and mitigate risk in delivering new features.  The ideas we trail are product, technical and user experience related.</p>
<h3>It’s built on Rails</h3>
<p>This is the first public site that Sensis has built in Rails.  The momentum has been building within Sensis for a while but nothing of this scale has made it out to the public.  Rails was chosen because it allowed Sensis to get to market quickly.  From development to deployment, Rails has been a win.  We’ve had many developers rotate through the project already, all of them have picked up Ruby and Rails very quickly with more experienced devs passing on their knowledge.  That’s a win for <a href="http://rubyonrails.com/">Ruby and Rails</a> .</p>
<h3>Microformats everywhere</h3>
<p>The Yellow Pages has a lot of data.  Every single search result, and listing, is microformatted.  I’ll be writing a separate post about this very soon, but it is really exciting stuff.</p>
<h3>Building a search engine</h3>
<p>We put a lot of time and effort into search.  It’s hard and it’s fun.  It also crosses all elements of the business from product management to user experience to technology.  It is certainly more complicated than performing <span class="caps">LIKE</span> queries on a database or installing <a href="http://www.sphinxsearch.com/">Sphinx</a> or <a href="http://lucene.apache.org/solr/">Solr</a> .  Business rules, physical locality, voting and tags all need to contribute towards getting a good result.</p>
<h3>Aggregated Listings</h3>
<p>Yellow Pages is a directory at it’s heart which lends itself to browsing rather than searching.  Let’s say you’re looking for hardware in Port Melbourne.  In a print world you’d flick open the book, look for the hardware category and then thumb your way through until you find a business that works for you.  Big businesses like Bunnings would list themselves under hardware, but they may also list themselves under Nurseries as they also sell plants.  That’s an awesome solution to the book because Bunnings can now be found in several places throughout the book.  That’s a win for the business advertising and its a win for the user as they can find what you are after more easily.</p>
<p>When directories put their info online you usually have a modified browse experience where you have to select a category and then you can search within a category.  For example, you say your looking for a Hardware store in Port Melbourne and find that Bunnings turns up.  This is the way the <a href="http://yellow.com.au/">core</a> site works.</p>
<p>We wanted change the experience of finding businesses from a directory browsing experience to an internet style search.  One hitch, if you put these listings online and search for <a href="http://yellowpages.com.au/search/listingsSearch.do?region=australia&amp;businessName=Bunnings&amp;sortByDetail=false&amp;sortByAlphabetical=false&amp;sortByClosestMatch=true&amp;areaId=1162&amp;sortByDistance=false&amp;sortBy=closestMatch&amp;rankWithTolls=true&amp;stateId=2&amp;safeLocationClue=Port%20Melbourne%20VIC&amp;serviceAreaModifiedByUser=true&amp;localityId=26959&amp;locationClue=Port%20Melbourne%20VIC&amp;serviceArea=false&amp;locationText=Port%20Melbourne%20VIC&amp;suburbPostcode=3207">Bunnings in Port Melbourne</a> you’ll now find two entries (actually 5 on the site), one for Hardware and one for Nurseries – and that sucks if you are looking online.  So we’ve <a href="http://yellowlab.com.au/search/results?q=bunnings&amp;l=port+melbourne">aggregated listings together</a> that are from the same businesses using some jiggery pokery to provide a single view of a business.  It’s not perfect but it makes a big difference – it definitely solves 80% of the problem.</p>
<h3>Sweet, sweet maps</h3>
<p>Whereis has freaking good maps, despite Google having customer mind-share on maps.  You can <a href="http://www.whereis.com/vic/melbourne/222-226-lonsdale-st?id=3B98F2AD419354">zoom in and see buildings with names</a> and they have map data that gets updated regularly.  You can send a location right to you <span class="caps">GPS</span> device, but in general, it is really well tailored to the Aussie market.  Besides they look much nicer than the current Yellow Pages maps and so we’ve put them on <a href="http://yellowlab.com.au/businesses/vic/port-melbourne/bunnings">Yellow Labs</a> .</p>
<h3>User generated content</h3>
<p>Dude… We are so Web 2.0 – finally.  We’ve got tagging (which we index immediately in our search engine so you can find em quickly) and user ratings in the form of “WOMming”.  The tech is straight forward, and the features may seem obvious but how does this fit in to being an innovation platform?  Finding out how things work in the real world is hard and the questions we are asking are more social.  So we’ll build it and test if and how people use it?  Do we moderate tagging contect?  How?  Does a ‘positive’ only recommendation work?  Let build something and find out.</p>
<h3>The future starts now</h3>
<p>We have just dropped the very first iteration of Yellow Lab.  It is rough and ready.  This is the beggining of the adventure, not the end.  We are going to put new features in and rip out features once we’ve finished learning from a feature.  Trying out a new idea, measuring its success and deciding to go forward – or to throw it away – helps the business make better decision.  There is some good stuff coming down the pike.  Keep coming back to the <a href="http://yellowlab.com.au/">Lab</a> on a regular basis to check out what is new as we update the site several times a month – and please send us feedback.</p>
]]></content:encoded>
			<wfw:commentRss>http://stateofflux.com/2008/10/28/yellow-lab-sensis-innovates/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Australian GeoSpatial Data &#8211; Free</title>
		<link>http://stateofflux.com/2008/10/19/australian-geospatial-data-free/</link>
		<comments>http://stateofflux.com/2008/10/19/australian-geospatial-data-free/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 09:44:00 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[centroid]]></category>
		<category><![CDATA[esri]]></category>
		<category><![CDATA[geocoding]]></category>
		<category><![CDATA[geospatial]]></category>
		<category><![CDATA[lambertconformalconic]]></category>
		<category><![CDATA[postgis]]></category>
		<category><![CDATA[postgres]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[projection]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[suburbs]]></category>
		<category><![CDATA[transform]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://markmansour.wordpress.com//2008/10/19/australian-geospatial-data-free</guid>
		<description><![CDATA[Edit: There are notes in the comments from Tim that explain the changes for PostgreSql 8.4.  Thanks Tim! I’ve built a couple of sites that needed geospatial data. One was a social networking site that needed a way to list people who were near other people, the other was a art web site that allowed [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">Edit: There are notes in the comments from Tim that explain the changes for PostgreSql 8.4.  Thanks Tim!</span></p>
<p>I’ve built a couple of sites that needed geospatial data.  One was a social networking site that needed a way to list people who were near other people, the other was a art web site that allowed users to upload steet art and show it on a map.  I thought it would be interesting to get the basics of an Australian suburb dataset up and running in a geospatial database and do some simple queries.</p>
<h3>Install PostgreSql and PostGIS</h3>
<p>First thing to do is setup PostgreSql and PostGIS.  I’m sure you can do this in MySQL but I haven’t done it, so leave a note in the comments if you get that up and running <img src='http://stateofflux.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .   There are a few article on how to do this and it is platform specific so go and do that.</p>
<h3>Get some Suburb data</h3>
<p>Now we need some data.  The <span class="caps">ABS</span> is kind enough to provide Australia broken down into suburbs and postcodes on their site.  I’m going to deal with suburbs so go ahead and download the <a href="http://www.abs.gov.au/AUSSTATS/abs@.nsf/DetailsPage/2923.0.30.0012006?OpenDocument">State Suburbs (SSC) 2006 Digital Boundaries in <span class="caps">ESRI</span> Shapefile format</a> data cube.  This data cube has every suburb in Australia defined as a Polygon (or a multipolygon) with each node defined as a latitude and longitude.</p>
<h3>Converting it to <span class="caps">SQL</span></h3>
<p>Unzip the downloaded shapefile and you’ll get 8 files but we are only concerned with the <code>SSC06aAUST_region.*</code> ones.  We are going to load the POA06aAUST_region data into the database but firstly we need to convert it into <span class="caps">SQL</span>.</p>
<pre lang="bash">shp2pgsql SSC06aAUST_region.shp suburbs -s 4283 -I -d &gt; suburbs.sql</pre>
<p>shp2pgsql converts the <span class="caps">ESRI</span> Shapefile into <span class="caps">SQL</span>.  -I adds an index (which is very important for speed) and the -d Drop and recreates the table.  The -s 4283 make sure the suburb data is defined in with the correct projection.  The earth isn’t a sphere and different parts of the earth are curved slighly differently so the geo-bods came up with a whole bunch of projections.  4283 is the standardized number for the <span class="caps">GDA 1994</span> projection which is the projection the suburb data comes in (you can just take a peek inside the POA06aAUST_region.prj file to see what the project is).</p>
<h3>Create a Geo-enabled DB and load the data</h3>
<pre lang="bash">createdb australia
createlang plpgsql australia
psql -f /opt/local/share/postgis/lwpostgis.sql -d australia
psql -f /opt/local/share/postgis/spatial_ref_sys.sql -d australia
psql australia &lt; suburbs.sql</pre>
<p>Note: The directories for the lwpostgis.sql and spatial_ref_sys will vary from system to system so you’ll have to find them on your own machine.</p>
<p>You will also want to create a reference table for the Australian States</p>
<pre lang="sql">create table aust_states (id integer primary key, state_name varchar, state_abbrev varchar);
insert into aust_states (id, state_name, state_abbrev) values (1, 'New South Wales', 'NSW');
insert into aust_states (id, state_name, state_abbrev) values (2, 'Victoria', 'VIC');
insert into aust_states (id, state_name, state_abbrev) values (3, 'Queensland', 'QLD');
insert into aust_states (id, state_name, state_abbrev) values (4, 'South Australia', 'SA');
insert into aust_states (id, state_name, state_abbrev) values (5, 'Western Australia', 'WA');
insert into aust_states (id, state_name, state_abbrev) values (6, 'Tasmania', 'TAS');
insert into aust_states (id, state_name, state_abbrev) values (7, 'Northern Territory', 'NT');
insert into aust_states (id, state_name, state_abbrev) values (8, 'Australian Captial Territory', 'ACT');
insert into aust_states (id, state_name, state_abbrev) values (9, 'Other Territories', 'OT');</pre>
<h3>Get some awesome answers!</h3>
<h4>Show me the polygon of Port Melbourne</h4>
<pre lang="sql">select name_2006, astext(the_geom)  from suburbs where name_2006 = 'Port Melbourne';</pre>
<p>This returns a whole bunch of lat and longs.  Pretty useless really.  Maybe having the center of a suburb would be more useful.</p>
<h4>Show me the center of Port Melbourne</h4>
<pre lang="sql">select name_2006, astext(centroid(the_geom))  from suburbs where name_2006 = 'Port Melbourne';

   name_2006    |                  astext
----------------+-------------------------------------------
 Port Melbourne | POINT(144.921987367191 -37.8328692507562)
(1 row)</pre>
<p>Much better!</p>
<h4>Show me the suburbs that surround Port Melbourne</h4>
<pre lang="sql">select surrounding.name_2006
    from suburbs source, suburbs surrounding
    where source.name_2006 = 'Port Melbourne'
        and touches(source.the_geom, surrounding.the_geom);

    name_2006
-----------------
 Albert Park
 Docklands
 South Melbourne
 Southbank
 Spotswood
 West Melbourne
 Yarraville
(7 rows)</pre>
<p>Here I select the suburb table twice, once to represent it as the source suburb, in this case Port Melbourne and as a destination or surrounding suburb.  I then restrict my matches to only show polygons that touch the source.</p>
<h4>Show me the suburbs that surround Port Melbourne with distances between suburbs</h4>
<pre lang="sql">select surrounding.name_2006,
       distance(transform(centroid(source.the_geom),3112),
                transform(centroid(surrounding.the_geom),3112))
    From suburbs source, suburbs surrounding
    where source.name_2006 = 'Port Melbourne'
        and touches(source.the_geom, surrounding.the_geom);

    name_2006    |     distance
-----------------+------------------
 Albert Park     | 3908.06472236311
 Docklands       | 2316.21021732757
 South Melbourne | 3106.68573231296
 Southbank       | 3492.93829708397
 Spotswood       |  3035.6283677131
 West Melbourne  | 2682.84381789969
 Yarraville      | 3914.04324956383
(7 rows)</pre>
<p>The interesting part here is getting the distance between suburbs.  The distance() method gets the distance between two points, which for us is the 2 center points of our suburbs.  Unfortunately if you measure the distance you’ll get an answer in degrees which isn’t that useful.  So you need to transform the projection from a degree (lat and long are in degrees) to a <a href="http://postgis.refractions.net/pipermail/postgis-users/2008-June/020182.html">meter based projection</a> .  Australia happens to have one called the Lambert Conformal Conic projection known as number 3112.  Hence:</p>
<pre lang="sql">distance(transform(centroid(source.the_geom),3112),
                transform(centroid(surrounding.the_geom),3112))</pre>
<p>will get the distance, in meters, betwwen two suburbs.</p>
<h4>Show me all the suburbs named Richmond</h4>
<pre lang="sql">select name_2006,
       state_name
    from suburbs
    inner join aust_states on suburbs.state_2006 = aust_states.id
    where name_2006 = 'Richmond';

 name_2006 |   state_name
-----------+-----------------
 Richmond  | Victoria
 Richmond  | South Australia
 Richmond  | Tasmania
(3 rows)</pre>
<h3>What’s next?</h3>
<p>This is all very nice, but when you start geocoding data and getting lat/longs of items you can store in the db then you can do some really fun stuff.  If this article generates enough interest I’ll follow up with some Ruby code and Google Maps integration.</p>
]]></content:encoded>
			<wfw:commentRss>http://stateofflux.com/2008/10/19/australian-geospatial-data-free/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Rubinius comes to Melbourne</title>
		<link>http://stateofflux.com/2008/03/24/rubinius-comes-to-melbourne/</link>
		<comments>http://stateofflux.com/2008/03/24/rubinius-comes-to-melbourne/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 00:43:00 +0000</pubDate>
		<dc:creator>mark</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[australia]]></category>
		<category><![CDATA[engineyard]]></category>
		<category><![CDATA[evanphoneix]]></category>
		<category><![CDATA[ezra]]></category>
		<category><![CDATA[melbourne]]></category>
		<category><![CDATA[rubinius]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://markmansour.wordpress.com//2008/03/24/rubinius-comes-to-melbourne</guid>
		<description><![CDATA[Rubinius is a reimplementation of the Ruby interpreter initiated by Evan Phoenix who has recently been hired by Engine Yard. Engine Yard is a hosting company that is positioning itself as the hosting provider of choice for Ruby applications by a variety of developer focused strategies. In an effort to raise their profile and gain [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubini.us/">Rubinius</a> is a reimplementation of the <a href="http://ruby-lang.org/en/">Ruby</a> interpreter initiated by <a href="http://blog.fallingsnow.net/">Evan Phoenix</a> who has recently been hired by <a href="http://engineyard.com/">Engine Yard</a>.  Engine Yard is a hosting company that is positioning itself as the hosting provider of choice for Ruby applications by a variety of developer focused strategies.  In an effort to raise their profile and gain credibility in the Ruby community they&#8217;ve hired Evan to work full-time on the development of Rubinius.  They&#8217;ve also hired the excellent <a href="http://brainspl.at/">Ezra Zygmuntowicz</a> of camping fame which gives them huge cred in the developer community.  Not only are they just latching onto established efforts, they are creating new markets by going after the shared hosting crew by developing <a href="http://brainspl.at/articles/2008/02/12/what-do-you-want-to-see-in-mod_rubinius">mod_rubinius</a> .   I would guess that the benefits are twofold &#8211; they look like nice guys by giving back to the community, but they also create a very easy path for them to upsell shared hosting into <span class="caps">VPS</span>.  Everyone wins when this kind of effort is put into a business model.</p>
<p>Evan and Eric Hodel are out in Australia for the Rubinius Sprint set up by <a href="http://redartisan.com/blog">Marcus Crafter</a> and fellow Engine Yarder <a href="http://dylanegan.com/">Dylan Egan</a> .  In a side trip Evan came to Melbourne and spent three hours explaining how Rubinius worked and answering a heap of really interesting technical questions from the <a href="http://groups.google.com/group/rails-oceania">Melbourne crew</a> before heading out for a few quiet (5am) drinks.</p>
]]></content:encoded>
			<wfw:commentRss>http://stateofflux.com/2008/03/24/rubinius-comes-to-melbourne/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
