I had to split up my posts to avoid my hiatus post from being an unreadable mess.

This post is a bit of a recap of some projects I've worked on or am working on. There are another two posts following this one covering some larger posts.

Startup weekend mentoring

I haven't participated in another Startup Weekend in Perth since my first one. I don't think I ever wrote it up in its full glory either, needless to say it was pretty intense and despite not having the experience I was after, I learnt a bunch and would recommend it to anyone who is interested in that kind of thing.

In preparation for the SWPerth7 event the organisers did a call out for mentors. This is something I'm interested in, but I honestly didn't expect to get accepted. Heh, suckers.

Mentoring was a great experience, and I genuinely hope I was able to help the teams with their planning and validation - my feedback seems to suggest so. I was a bit worried I'd commit a cardinal sin and be prescriptive about things "You should do this or that", but I was able keep it to leading questions and answering specific advice questions - so yay for that.

In the future, I'd love to do this again and aim to get some of the pitch coaching mentor timeslots. I think I might have more to help on this side of things.

Distillation automation

I managed to get most of the parts together to completely automate my still for the purposes of , uh.. extracting essential oils and distilled water.

The hardest part so far is the temperature probe which is an annoying 5mm in diameter in stainless steel. I was hoping to use a one wire digital probe, however the smallest package for these is 5mm in diameter - leaving no room for the stainless steel shroud.

I'll have to order some K-type sensors, and once they arrive and the shed is cleaned - I should have some updates on that particular project.

Video streaming

I've been pretty interested in getting involved in the video streaming project over at the Perth Linux Users Group for a while now.

They're looking to move from DV capture to HDMI over USB and have been waiting on some custom hardware to get made, which looks like a good path forwards.

But in the meantime my work has given me some budget to put together a solution with off the shelf parts. I've happily spent the entire budget and have a nice pile of bits ready to go.

Whilst I'm still keen on the open source solution, it's going to have to wait a while for me to play with these new toys.

Expect a post on this soon.

WACAN

I'm happy to be a founding member of this organisation. A bunch of guys involved in WAFreeNet incorporated an association to further the goals of building a community operated wireless network across the region.

The incorporation (or rather, some of the people involved on either side of the should-we-incorporate fence) has caused some division in the community, but has also achieved some really great stuff. Specifically, the organisation has a relationship with WAIA which has helped secure a tenancy for a great core node at QV1 as well as access to some CDN traffic over the network.

I've perpetually been unable to participate in these networks - since 2003(?) I've been testing line of sight to each house I've lived in with no luck. More recently I've had perfect LOS to QV1, but at the wrong angle for the sector panel - but it looks like our new house should be able to manage an ok connection.

My involvement in this group has primarily been as a member, I'm not really interested in committees any more - but I've organised a few public meetings (none of which I've been able to attend, heh).

I think I'll keep doing that for a while.

Pelican Modules

I promised a while back to put the code up for some of the pelican modules I wrote to support this site. As of sometime last year, they're now available on GitHub here and here.

... Oh, hello there. Hello? Hi. Is this thing on? Well, uhh.. welcome back. It's been a smidge over two years since I last posted on here, so I figure I should pop in an update - things have been busy but at the same time not really.

Along with the new content I've given the site a fresh lick of paint, I'm not going to spend ages getting it where I want because, frankly - the longer I spend on it, the less I'll be happy with it.

Real life things (tm)

I don't normally talk about real life stuff on here, but things have been busy and some pretty big and meaningful changes have been afoot so buckle up.

I quit my job. Twice. Without going into too much detail, I'm trying to sort out where my career is going. Being "on the tools" is making me feel like shit and killing what interest I do have, though part of this is environmental/situational and even more of it is a me problem.

Anyway, this is an ongoing thing and I need to sort things out still. At this point I'm considering moving to a whiteboard position (solutions architecture) or make a dramatic jump into something completely not IT related (book keeping seems reasonable at this point). Updates as they come, but we'll see where I land in the next 6-12.

Around two months after my last post, I proposed to my gal of 11 years. She said Yes! (thank god). Despite being stressful, I'm as happy about this as ever and it looks like it mightn't be anywhere near as stressful as planning a wedding :)

Oh, and we bought a house. And an adorable puppy named Frank(ie)!

So things in the real life department are pretty awesome. And expensive. So expensive. But mostly awesome :)

Projects

Nope! This post is getting too long already. You're going to have to check out the next three posts covering this section. Doing this big update makes me feel a little better, I don't feel like I've been so lazy for the last two years now.

Go me :)

Company

Last year I founded my second real company, Meta Technology (website coming soon, for now please enjoy the SSL warning and webmail links).

I've been doing some contract work on and off for a handful of tech startups here in Perth, and this company will house that. This is part of my longer term goal of having a legal entity to fund some of my projects, support any that become viable and provide me with some level of protection for those that might not go so well.

So far, this is a happy story - the company has paid back its loan to me and exceeded its goal of breaking even. So far. With some additional work lined up to pad out the rest of the financial year, things are looking good.

So if you know anyone looking for a solutions architect for hire (specialising in applications at scale and the clouuuud), feel free to refer them to me.

I'll have a website real soon, promise ;)

Hooray! I've finally updated my home file server. This is the first non-drive change made to the system since I built it back in 2010.

The original build allowed up to 20x SATA drives sitting on top of LSI 2068E cards and a motherboard with three 8x PCIe slots on an Intel X58 chipset. This design was to allow for enough bandwidth back to the CPU for full controller-speed (SATA II) for all 20 drives in the chassis.

The system has served me well to date, but as I expand the array I'd like to keep on top of disk density - and if the opportunity arises, I wouldn't mind something a bit quieter.

Also beyond a crazy growth rate of ~300+GiB/mo for the first year or so, my growth rate has calmed massively and I'm only sitting at around 11TiB of data all up spread over 8x 2TB disks. So maybe supporting up to 20 drives isn't necessary after all.

I had a bit long rant preparated about all the goals and issues, but honestly it boils down to:

  • The newer backplane on the Norco I had still wasn't passive, and doesn't support 4TB drives
  • The IBM ServeRAID 1015 controllers (LSI SAS2008) I bought have a buggy Option ROM that doesn't pass the extended memory map through during boot and causes GRUB to wig out

I ended up settling for a design with a chassis supporting 12x 3.5" + 2x 2.5", with passive backplanes and different card on the LSI SAS2008 chipset. Whilst the dollar-per-bay isn't as great on the new case, it's a much higher build quality and has better airflow/cabling.

And it runs great - I've rebuilt the array onto 6x 4T drives still using linux software RAID but now using btrfs as the filesystem (I'll redo this as raw disk btrfs raid when the code for that is a bit more mature).

Now that the data migration and deduplication run have completed, I can cross this off my TODO list - and decide what to do with the spare gear I have left over, enough to build 2 file servers.

Any takers?

image

image

image

I mentioned in a recent post that I've been working with a cool piece of technology called AngularJS recently. It's been a long, long time since I've done any regular web work - but since picking up Angular, I can honestly say that building web applications has never been more enjoyable.

As a developer, I found the documentation reasonably sucky - it has a quick tutorial and jumps straight into API documentation. There's no guide on overall architecture, which makes understanding how you should be building your app a bit difficult.

What follows is my quick and dirty list of notes for developers looking at using Angular in their app:

  • Everything is a module
    • Every piece of code in AngularJS is attached to a module.
    • Modules can express dependencies on other modules.
    • Your application is a module
    • Modules can contain Services, Controllers and Directives
  • Dependency Injection
    • Angular provide dependency injection for all prototypes
    • You have two options for specify a dependency:
      • Lazily, by ensuring the name of the variable name in the signature matches the name of a service; or
      • Explicitly, by providing an array of the service names followed by the function with arbitrary variable names
  • Services
    • Services are singletons and are lazily created - so you'll need to reference it in the app if you need them to be instantiated
  • Controllers
    • Controllers are exactly what they sound like, if you need logic to glue the view model to service actions - this is where that lives
  • Filters
    • Filters can exist locally to a controller or globally on a module
    • Be wary of the built-in filter module, if you use the string comparison this is actually a substring match (this has caught me out badly before). You probably want to make a global filter using angular.equals in these cases.
  • Directives
    • If you need a common Controller/Template to render the same object in your app, chances are you can bundle it together as a directive
    • Even if you're not at the point where you need to use directives, it's worth reading the AngularJS Directives Guide to understand how the Angular parser resolves directive names (and why the documentation shows directives in camelCase even though the examples you use dash-delimited).
  • You need the extras
    • Downloading AngularJS isn't enough for single-page development, you're likely going to need the following modules:
      • angular-route.js - Provides the ngRoute module providing page routing for a single-page application
      • angular-resource.js - Provides the ngResource module allowing you to easily create services backing onto REST interfaces
  • Understand that AngularJS is javascript
    • No, really. If you build your entire site it won't be indexable by search engines unless you prerender out a static copy. Read more here

I hope this is useful to other people starting out.

I got dragged into another philosophical argument the other day regarding white space in code. It's one of those quintessential tech discussions that does nothing more than rile people up over something that, for the most part, doesn't achieve anything of value.

Generally speaking, I try and stay out of these discussions - however given I was trolling the person in this situation, I feel entitled to claim at least some small victory - someone has to.

That being said, I do have an opinion - and in the interest of adding to the pile of spew on this site that feeds back into the greater slum that is the internet - let me tell you what I think.

Let's start with my personal preference:

  • DO use tabs at the beginning of a line to indent code
  • DO NOT use tabs after the first non-tab character in any line
  • DO try and avoid indentation/formatting after code has begun
  • DO NOT insert editor-aware comments in your source to set editor options

Easy! You're well on your way to coding nirvana. I think this scheme works particularly well because:

  • It doesn't matter what size indentation you prefer - No more of this "I like my indentation to be 2 characters, not 4 or 8". Please stop. That's a presentation issue. Use an editor that supports configurable indentation widths.
  • It's semantic - The number of tabs corresponds exactly to the number of levels of indentation. You don't have to worry about whether the author prefers their tabs at 2,4,8 or 19 characters wide - nor whether they prefer milk of cream in their tea.
  • It helps filesize - Okay this is a bit of a weak argument, but using tabs reduces file size by not representing redundant information. Put your solution into a version control system and this has a slight multiplier effect.

And to cap it off, here are some common arguments as to why we should avoid TABs, and why I think you're wrong.

  • Not all editors support TAB characters properly - This has nothing to do with the file you're editing. If the specification(grammar) for your programming language treats both space and tab as whitespace, then it's whitespace. Your editor is not supporting the language you're working with, and that's your problem.
  • I prefer my indentation at x characters - I've already addressed this above. Learn to configure your editor properly if it will let you, or find a new one that will. Vim, a terminal text editor from 1991 supports just about every possible combination of tabs and spaces, so I'm confident this is quite a lot easier than you might make out.
  • My Wyse TTY is only 80 characters wide! - Brilliant! I also spend the majority of my time in 25x80 or other weird-sized, resizable terminals. Wouldn't it be terrible to have to re-format the file every time your terminal changed size? That's your editors job, and again it can reflow the text and preserve indentation if you're using a good one.

Ultimately though, arguments like this are a zero-sum game - nobody is going to be 100% happy, and there's always going to be that guy who has invested their sense of identity in their position on tab-vs-space - but you're wasting your time dealing with them anyway, right?

Pick one that makes the leasy number of people cry, stick to it and move on - we've got interesting problems to solve.

This is the personal website of Will Dowling, a Solutions Architect hailing from Perth, Western Australia.

Twitter

I talk shit here sometimes.

GitHub

My terrible code. For free.

LinkedIn

Pay me to write bad code and talk shit for you.

Tumblr

Pretty pictures, rarely my own.

Flickr

Pretty pictures, actually mine.