Goodbye weekends hello house hunting – week 1

So the decision has been made to make the foray into the crazy realms of the Sydney real estate market, the objective to find a place to live in. So with that means a lot of spare time surfing domain.com.au and weekends spent looking at ‘open for inspections’. Highlights for this week:

  • House going under contract the night before were to check it out 🙁
  • Number 1’s still left in the kids potty in the bathroom
  • House’s that were in a terrible state – carpet that was frayed and separated, walls that were separating, paint jobs that looked like the person wasn’t even trying (it looked like outdoor paint too!)

Let’s say it’s easily noticeable whether a property being sold is a rental or an owner occupied…

When social media works

Kudos to the @Optus social media team for utilising social media channels effectively to help their customers. I’ve had this ongoing saga for a few years where my internet drops out when the weather is extremely hot (around 35+ degrees Celsius). And with this many horrible experiences of Optus customer support – being on hold for 1+ hour then dropped out of the phone queue, passed between many departments, technicians not turning up because tech support decided there wasn’t an issue and cancelling the booking yet the next support person could clearly see the issue was still there based on the modem logs. After 3 or so call outs a new modem was provided about a year ago but since then there hasn’t really been a bunch of extremely hot days in a row.

Until yesterday… and woah behold when I came home in the evening no internet. Just the same flashing light sequence I’m more than familiar with. Usual tricks didn’t work and I was dreading having to call Optus tech support… Have you even been asked if you’ve power cycled you’re modem 3 times after you’ve already said yes twice? Not to mention the stuff arounds last time as mentioned above. So when it still didn’t work this morning, it was time to take to Twitter as I knew Optus have an account they they respond to.

Posted on the way to work, and got a reply within a few hours, and after providing a bit more info a guy from the social media team rang me – yes a real person! Turns out there were some issues which they knew about but with no ETA (odd that there network status page didn’t say anything). Anyways he said he’d try to keep my in the loop either via Twitter or ring me, and I got a phone call with an update in the afternoon that the issue had been fixed but there was someone else on my street experiencing the same issue so if it wasn’t fixed when I got home to get in touch. As I don’t get home till after the social media team finish for the day the guy updated the account notes with details in case I had to ring tech support for further help (tech support is offshore). Got home and lucky for me the internet was working again. Was it heat related? Don’t know the real answer but I wouldn’t be surprised if it was. The cables running from the house have to tap to the main line, so extreme heat could cause connector issues with expansion and all of joins.

That all aside, I was very happy with the customer service and give a +1 to Optus for embracing social media. The internet has reinvented the way people work, communicate and share. Businesses need to recognise and embrace these changes/technologies as they’re not going to go away. Operating models change over time and Optus is proving that they can address customer service in ways different from traditional means. Will customer service/support by social media become mainstream? Probably not, but it’s a market they have to catch as increasingly more people turn to the web for their needs (e.g. the whole online shopping debacle).

Simple RegEx and Closure example in Groovy

I’ve been intermittently reading Groovy in Action for the last few nights and whilst it all seems pretty straight forward, for me the real grasping of an understanding comes by writing some code to affirm what was read. That posed the dilemma of what to write, as since leaving uni most of my learning experiences in Java (and development concepts in general) have been in relation to real world business style scenarios. I gave a thought back to my high school days where I learnt how to program. Why not just start with a somewhat simple/trivial problem – e.g. a factorial calculator, or sentence word reverser and go from there? Sure it’s not anything too swish, but it seems a good way to get an understanding of the language.

So here I present a simple solution in Groovy that uses RegEx and Closures to captalise the first letter of each word in a string. I’ll also show you an even neater solution after….

First up:

[groovy]

String testString = ‘the quick brown fox jumped over the lazy dog’
String regex = /bw*s?b/

testString.eachMatch(regex) { match ->
print match.capitalize()
}

[/groovy]

Lines 1 and 2 should be pretty self explanatory. We’ve based our regex of the basis that a word consists of word characters only, may have a space after the last word character and has a word boundary on either side.

Lines 4-6 is where the cool stuff happens, as for each word match we make we want to upper case the first letter and print it out. The method eachMatch takes two arguments a String regex and a closure. From the Groovy docs‘A Groovy Closure is like a “code block” or a method pointer. It is a piece of code that is defined and then executed at a later point.’ In the example above we have defined the closure inline with one parameter match – parameters are listed before the ->. The closure calls capitalize on the match and prints it out.

We could have easily defined the closure separatley and provided it to eachMethod as such:

[groovy]
Closure capitalize = { match -> print match.capitalize() }
testString.eachMatch(regex, capitalize)
[/groovy]

Seems pretty easy right? Not many lines of code and quite succinct about what is happening. Well as is often the case, I did a little Google and here’s an even easier solution:

[groovy]
String testString = ‘the quick brown fox jumped over the lazy dog’
print testString.split(‘ ‘).collect{ it.capitalize() }.join(‘ ‘)
[/groovy]

In the end my solution was a first attempt into using Groovy to solve a problem without having much exposure to the language whilst at the same time trying not to use my Java mindset. After seeing the alternative solution on the Internet it kind of shows that if you know what to use Groovy can make things even simpler as it’s definitely cleaner without using the RegEx.

Installing Groovy on a Mac

Having heard about Groovy and Grails for the last few years but not having actually had a look at it I installed Groovy on my Mac the other week for a bit of a play. It’s always good and fun to have a look at a different language even if if you’re not going to use it in your day to day job. Coming from predominantly a Java background Groovy seemed like a good choice as it runs on the Java platform and the language is similar. Having had the opportunity to use Objective-C for a few months last year and seeing how in some ways it was more powerful than Java (but also in other ways frustrating), I was curious to see what power Groovy gave to a developer.

The first step though was to get Groovy installed on my Mac. So I thought I’d put a post up mainly for anyone new to developing on a Mac. Whilst I’ve had my Mac for a year or so, I hadn’t really had it setup for anything other than Java until recently, and there were definitely some things that were a little different to what I was used to on Windows as well from my prior limited stint in Ubuntu land.

These instructions are based on a setup for OS X. I’d imagine the setup may be similar on any other version?

  1. Java should already be installed on your machine. Confirm this by opening up a Terminal and typing in ‘java -version‘.
  2. Download the binary Zip release of Groovy from the Groovy site.
  3. Extract the contents into /usr/local – e.g. my install location is /usr/local/groovy-1.7.6/. You will probably need to need to use the sudo command for the extract as you will need to be superuser to write to the location.
  4. Check if a file called environment.plist exists in the following location /Users/YOUR_USER_NAME/.MacOSX. If it doesn’t create it.
  5. Open environment.plist in the Property List Editor
  6. Add an entry for JAVA_HOME if not present, ensure the value is the location of your Java installation. This should be /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
  7. Add an entry for GROOVY_HOME if not present and ensure the value is the location Groovy is installed. E.g. /usr/local/groovy-1.7.6
  8. Add an entry for PATH if not present, and ensure the Groovy bin and Java bin directories are present by adding  $JAVA_HOME:$GROOVY_HOME/bin
  9. Log out and re log back in for the changes to take effect.
  10. Check that everything is all setup correctly by opening a Terminal and running groovy -version which should show you which version of Groovy is installed.

Online shopping, intentional GST loophole or convenience?

So over the last few weeks, there’s been a bit of an uproar over the fact that GST is not applicable for overseas online purchases under $1000. Some of the bigger sized retailers have even gone on a campaign saying that it is unfair to local retailers. But are we really shopping online intentionally to avoid the GST or are there other factors behind it?

Seemingly the internet is against what Mr Harvey is saying, the term ‘Dear Gerry Harvey‘ even making one of the top local trends for Twitter and I actually agree with the majority in this respect. Sure I do shop online (internationally and locally), but I also do shop in traditional bricks and mortar stores as well.

What makes me shop online? It’s definitely not because I don’t have to pay GST on my international purchases. In fact I couldn’t really care less if the GST was slapped onto my international purchases as it wouldn’t have played much of a difference in the end anyway. The reasons I shop online are pretty straightforward:

  • Price is significantly cheaper. And by this I mean an amount big enough to make it worthwhile. If this is the only factor in the purchase, GST plays little part, as tacking on 10% for the import is going to make little difference if anything. E.g. 10% of $1000 is $100, but if you’re saving 50%, you’re still $400 better off. If the end saving is only a small margin say $100 or less (in the case of international purchases), I often will just end up buying it from a local retailer, as it’s too much effort with shipping, delivery, extra charges etc.
  • Product range. Let’s face it most of the goods stocked by retailers in Australia don’t cover a wide range. E.g. walk into any brand name technology retailer and they most likely won’t have the most recent products on display/sale, or with clothing try finding petite sized clothing in Australia, again a limited range.
  • Customer service. I choose to avoid certain stores where I can because customer service is poor or missing. Lack of staff to help with purchases, staff who don’t know what they’re trying to sell, staff who just want their commission. E.g. I was in a major sport retailer in the past year needing to buy some soccer gear. I checked the product out myself, picked my size myself then a staff member comes over asking if I need help. I decline and let them know I’m okay as I’ve already worked out what size was right. They then proceed to stick their ‘sticker’ on the box, so when I purchase the sale gets credited to them (even though they clearly did not help me in deciding on my purchase).
  • Convenience. Why would I go to a physical store if I know exactly what I want and can buy it online and get it delivered in the next 1-2 days? This is especially true if any of the above listed factors also apply. And this is not just for international purchases, as I’ve purchased from local retailers online before mainly because of the price and product range factors. And let’s bear in mind that I do pay GST for these purchases.

And whilst I have listed the above factors for online shopping I do have experiences where I have chosen to go to a physical retailer/store because my past experiences were positive. Sure I may be paying a little more in the end, but I leave a happy customer and the experience was better than had I done it online.

I think the big retailers need to reassess their operating model and the market they are operating in today. It’s vastly different to 10 years ago with the uptake and advent of technology. And it’s not not possible as there are many local retailers out there (some even with physical stores), who are surviving and have got my business if I need to look for a certain product. They’ve served me well each time, so why would I change and spend my time hunting across Sydney for a particular product?

And let’s face it, it’s not just online shopping that is taking a chunk of the big retailers customer base. Pick any digital camera on sale at a big retailer in the Sydney CBD. Go to all the major retailers in the CBD area (between Town Hall and Circular Quay), and check their prices. Now go visit all the other stores in the same area that sell digital cameras. I guarantee you will find a better deal in an actual store for either a newer or the same model.