PyConAU 2014

IMG_20140802_132246This weekend I attended PyConAU , a community-run conference for the Python programming language. Held this year in Brisbane, it was a good excuse to learn some new things, catch up with old friends, as well as make some new ones.

I have a soft spot for Brisbane. In addition to having family live here, I also love their public transport system: a well-integrated system of buses, trains and ferries run on a reliable and frequent schedule to all areas. Their AirTrain is hands down the easiest public transport solution from an airport to a city (miles ahead of Melbourne’s cramped buses). The conference was held at the Brisbane Conference and Exhibition Centre, which is the centre of the city’s cultural district, with museums, theatres and shopping and dining areas all around. It’s a wonderfully laid out modern city.
IMG_20140801_165033
The first keynote was by the director of the National Computer Science School (NCSS), and generally awesome guy, James Curran. My experiences at NCSS back in 2007 helped formed my programming abilities and gave me the knowledge that there was other life out there: an entire programming community, and being in IT was a good place to be.

A highlight of the talks on Saturday was a talk on caching for web services by Tom Eastman. He talked extensively of using HTTP protocol elements to control the cache in proxies and in web browsers. Whilst the examples used Django, the concepts will be useful for my work using ASP.NET.

An interesting part of the conference is talking to people outside talks, and this conference has been no exception. I’ve met many new people, including some stars of the Python world. I’ve also learned that many of the things I do in my daily programming life are wrong, and it’s great to learn more about best practices.

A traditional part of PyCon AU (as well as linux.conf.au, to an extent) is the end-of-day lightning talks. In particular, two talks in the Saturday session really appealed to me. First of all was Josh Deprez‘s talk on “node.hs”, where he talked about implemented Haskell in node.js, but instead wrote a lightning simulator within 5 minutes.

Secondly, and possibly of more long-term consequence, was Russell Keith-Magee‘s talk on Toga, a cross-platform UI toolkit that displays widgets using the operating system’s native widgets. So instead of your cross-platform app looking great on GNU/Linux (where GTK+ is native) and crap on Windows or OS X, it will look good on all three platforms (and possibly more in the future).

The final event of Saturday was the conference dinner, a traditional three-course sit down event with a lovely speaker named Paul Gampe (who worked in ISPs during the early nineties, making me very jealous). He gave a few lessons he learned working with the early FOSS and Perl communities, and why Python should make efforts to avoid these problems.

IMG_20140803_104959After dinner I retreated to my hotel room (I have made the mistake before of staying up with people all night and missing most of the talks on Sunday). However, I didn’t go straight to bed. I instead checked out Toga in more detail, and tried to get it running on Windows (it’s a very new piece of software). After a bit of code wrangling, I managed to get a blank window appearing on the screen (as my excited tweet about this shows). My patched code is now in the Toga repository, which is pretty cool.

Sunday morning’s keynote was given by Katie Cunningham on the topic of accessibility. I’ve heard more and more about this recently (especially through a talk at WebDev42 recently). The gist of her talk was that the tools and support and standards are there, and the only reason developers aren’t building accessible sites is because they’re lazy or don’t know better (her point was a bit more complex than that, but that was roughly it).

Two talks I really enjoyed during the rest of Sunday were Russell Keith-Maggee’s talk on building Python wheel packages (basic information that, being a very junior Python developer, I didn’t know) as well as Josh Hesketh’s talk on database migration testing. While Josh’s talk targeted Python projects and OpenStack in particular, the concepts are useful across basically all programming platforms. I’m lucky in that managing database migrations is something that Entity Framework (my C# ORM of choice) does for me.

After the conference finished, I completed my trip by visiting family for dinner and dropping in on a few Brisbane-based clients, before flying home (via Melbourne, of course, to earn maximal status credits).

As always, attending PyCon AU was a great experience, and I can’t wait for next year (it will be held in Brisbane again next year). In my mind PyCon AU is a very similar conference to linux.conf.au. I go for the same reasons: great community, great people, great content, and great fun!

How to run a small company in Australia

I’ve been the director/manager/shareholder (pretty much everything) of a small company in Australia called The Foo Project Pty Ltd for around two years now. We develop software, but this post isn’t about that. Today I want to talk about the ‘boring’ stuff (though I find it fascinating): accounting, legal issues, dealing with the federal government, etc.

Please note I’m not a lawyer or an accountant. If you need one, you should get one, not read blog posts by some guy on the Internet (that’s called procrastinating and it probably won’t help you). Handy hint: if you’re reading this for advice rather than entertainment value, you probably want an accountant or a lawyer.

So the things I’m going to cover are: why you might want a company instead of being a sole trader, how to get set up, what documents and so on you’ll need to keep, and some handy things I’ve learned along the way.

Why might a company structure be helpful?

The benefits and drawbacks of a company structure become more obvious once you consider what exactly a company is and what a sole trader isn’t.

A sole trader runs a business ‘as themselves’, that is, the business is the same legal entity as the person running it. Any income the business makes is personal income for the person running it, the same with expenses. A child running a lemonade stand in their front garden is a sole trader: any profit they make is theirs personally, and that’s as complex as it gets (well, technically they need to register for an ABN, but what the government doesn’t know won’t hurt them). Another thing to note is that any debts the business have belong to the person running it, so the business going bust is the same as the person going bust.

Image courtesy of j_regan

Image courtesy of j_regan

A company, on the other hand, is a different legal entity. Any income the company makes belongs to the company, not to the person (or people) who own the company. Any debts the company has belong to the company itself (though it is common for a company director to personally guarantee some large loans for small businesses). The profits flow to the owners (called shareholders) through dividends. Being different legal entities, if one of the shareholders (to whom the profits eventually flow anyway) takes cash out of the company without the company itself authorising it, then this is fraud.

There is also another structure for businesses known as the partnership. It combines all the worst parts of being a sole trader with the worst parts of a company structure. Just avoid it.

The benefits of being a sole trader:

  • Account keeping is greatly simplified (add up all your invoices from the year, subtract all the bills, that is your profit and put that on your tax return).
  • Tax is much simpler and you’ll probably pay less of it.

The benefits of having a company:

  • Limited liability. As a shareholder, you cannot be liable for debts the company incurs unless you have promised the company money you haven’t given it yet. Note that directors can be personally liable if they do something really stupid (best consult a lawyer for what ‘really stupid’ entails, it’s a bit complex).
  • If the business will ever be sold, it’s much simpler to hand over the keys to a separate entity than try and separate the business assets from your personal assets like a sole trader would do.
  • A company structure provides a nice wrapper for owning intellectual property (and other property I guess, but I use mine for intellectual property).

How to get set up:

This is actually much easier than you think. The hardest part will be opening a bank account!

  1. Figure out how many shareholders (owners) and directors (top-tier management) the company will have, and who they will be. If anybody else will be shareholding or directing with you, remember the following:
    1. It’s easier to introduce more directors and shareholders later on than it is to remove them. Pick carefully.
    2. Being a director does involve legally mandated responsibilities, so make sure directors will be up to the job required.
  2. Go to Register A Company (or a similar company registration service, they are all over Google) and fill out the form. It’s well explained and pretty simple. Note that they will ask you for an account password, choose something unique and never used before, as they will email it to you in plain text (*sobs*).
  3. After the form is processed, which will only take a few minutes, you’ll be sent emails with a whole heap of PDFs. Print out all these PDFs and stick them in a binder. These are the company’s registers of members and officers, and it’s a legal requirement to have a paper copy of them at the company’s registered address.
  4. Go to the Australian Business Register to register for an ABN and a TFN. This will allow you to do fun things like send tax invoices and register Australian domain names, and other less fun things like paying company income tax. The process is pretty simple, but unfortunately (in my experience, anyway) it takes several weeks for them to get the details posted back to you. If you might be employing people make sure to register for PAYG withholding. If you think turnover will be more than $75,000 in the first year register for GST, otherwise avoid it as it makes accounting much more annoying (you can register later if needed).

You now have a company, but there are a few more things to do to make things run smoothly and safely.

  • Open a bank account for the company. You can do it online, but you’ll probably need to take documents into the bank anyway, so it’s easiest to just go and talk to somebody. Take in the binder of company documents, you’ll need to prove the company exists (using the ACN) and that you are a director.
  • Set up your accounting program. I use Xero, which is cloud-based, very popular, and highly recommended. I did the setup myself, but I would recommend finding a good accountant and getting their help.
  • Buying insurance is highly recommended. I have worker’s compensation insurance (which you’ll need if you’re employing people) and professional indemnity insurance (which you’ll need if you give advice to people). Any business with actual premises will need public liability insurance and contents insurance. Insurance is like leftovers from a tasty meal, better to have too much than too little. Make sure you have enough.

Keeping documents:

There are two broad categories of things to keep: legal documents and accounting documents.

Pretty much everything you will need from a legal perspective is in the binder you printed out when you registered the company. In paper form, at least.

From an accounting perspective, keep everything in Xero (or other accounting software). Every invoice, every receipt, every transfer, every everything; it should all be recorded. Your accountant can help you (though it’s pretty easy to do yourself).

I’ve formed the practice, and I think it’s a very good practice, of scanning every single document that comes my way and backing it up to the cloud (encrypted, of course). I’ll probably never need it, but damn it will be handy if I do.

Some handy hints I’ve learned the hard way:
20140318_191428

  •  Never get behind in the accounting, it’ll just take even longer to catch up as things aren’t in memory any more. I sit down every night during the week and quickly scan in receipts and update any draft invoices (takes me about five minutes, sometimes less) and then on Friday night or over the weekend I sit down and do bank reconciliations, send invoices, deal with any paperwork, and so on (takes me about 15 minutes max, usually less).
  • Find a good accountant. They will save you money. The same goes for lawyers.
  • If you’re doing consulting work, get a lawyer to draw up a template for a contract. Contracts are good, again they will save you money. If you’re too cheap for a lawyer get a template off the Internet (though using a lawyer is better).
  • Every time you change address, or add or remove a shareholder or director (or some other scenarios), you’ll need to fill out Form 484 (“Change to company details”). Do this on time, the fees for submitting it late are horrendous.

 

Well, that’s all my advise. Hopefully it’s helpful. And again, I recommend finding a good accountant and a good lawyer. They will help you.

linux.conf.au 2014 – January 7

I’m (sporadically and with much delay) blogging my yearly pilgrimage to linux.conf.au 2014, this year being held at the University of Western Australia in Perth.

Tuesday Keynote

20140107_085514Today’s keynote was given by Kate Chapman from the Humaritarian Openstreetmap Team. It was awesome. I’d heard of OpenStreetMap previously but not really paid much attention to it either as a technology or as a community. I was impressed by both. On the technical side it’s great to have a map that can be easily edited by anybody, Wikipedia style, and has as much information as you could want on it. On the community side, I was really impressed by how they went from a bare outline of Haiti just before the earthquake there to a complete map of pretty much everything only a few weeks later.

I immediately installed JSOM, the OpenStreetMap native editor and started adding points of interest I know exist around my suburb. It was surprisingly easy to use and the near-instant results proved satisfactorily addictive. I hope to get into this more in the future.

Open Programming Miniconf

I spent a large portion of the day in the open programming miniconf. There were several highlights:

  • Katie Miller’s talk on OpenShift was hilarious, mostly because of a moment involving two tissue boxes:

    (the people pulling tissues out of the box were racing the OpenShift setup process to see which was faster).
  • Adam Harvey’s talk where he wrote a PHP microframework in 15 minutes in front of the crowd, partly to prove it could be done and partly to prove that you shouldn’t bother. I’ve always been dubious of frameworks for small peices of code, simply because PHP provides most of what you need (which is Adam’s point). I guess the problem comes when this one-page script evolves into a full application before anybody realises, and using a framework from the beginning would have saved a lot of headaches down the track. It’s a tricky one to judge.
  • Tom Eastman’s talk on serialisation formats. I’d never considered some of the problems with these formats that means that even in formats such as YAML or JSON there are security vulnerabilities that are continuously overlooked. Unfortunately I had to leave in the closing minutes of this talk to attend to an emergency, so I missed some crucial information. I’ll definitely be revisiting this one when the talks are released for download.

Walking into Perth

20140107_182451For dinner tonight we decided to walk into Perth via King’s Park, which proved to be very pretty. We also ended up walking back via the foreshore along Mounts Bay Road, which was a bit of fun since (for some reason I can’t quite figure out) we decided to run part of the way back. Turns out running is fun if you’re in good company. Who knew. The total distance was just under 12km, so I probably even burned off the energy from tonight’s dessert, a sticky date pudding from the British pub in Murray St (good stuff, though a bit dry).

Now the miniconfs are over, and the conference proper starts tomorrow. For delegates it’s a fairly unnoticeable difference (only real difference being that the talks aren’t grouped into rooms by subject anymore), but it marks almost the halfway point. There’s also the penguin dinner to look forward to, which this year looks to be an upscale picnic on the Matilda Bay foreshore.

New OpenPGP Key

Over the new few months I will be slowly transitioning to a new OpenPGP (GPG) key. The reasons for this are as follows:

  1. In light of the recent information regarding the NSA, GCHQ, ASIO and other spying on citizens of the world, I believe a larger key size will increase security against attacks (even if the increase is small).
  2. I read about a patch to GnuPG to allow creation of larger key sizes and wanted to try it out.
  3. I wanted to have a clean slate with completely separate subkeys and good key hygiene (in regards to how the private key and revocation certificates were stored).

I have created a new 8K-length certification master key (0xB341C361CE04C603) with the following subkeys:

  • 4K Signing key (for signing documents and emails)
  • 4K Encryption key (for encrypting files)
  • 4K Authentication key (for logging in to systems, though in practise this isn’t really useful yet)

The reason for the 8K (for the uninitiated, this is a huge key that is overkill for current technology) separated certification key is so that I can keep that key safely on my home systems protected from the wild, whilst still being able to carry my signing, encrypting and authentication keys around on my laptop without too much trouble. Since the certification key is used for signing other keys and being signed by other keys (i.e., building the web of trust) it is a good thing if this key is both well protected and doesn’t change much.

The authentication key is interesting – in theory the underlying key data is such that you can use it for SSH logins, but it is such a pain in the arse to get the key data out and into a format that the SSH client can use that nobody bothers.

My old key (0xF3EABD1AAC83D520) no longer has a valid encryption key and I will be revoking the master key within the next few weeks.

You may also be interested to read my OpenPGP policies.

linux.conf.au 2014 – January 6

I’m (sporadically and with much delay) blogging my yearly pilgrimage to linux.conf.au 2014, this year being held at the University of Western Australia in Perth.

20140106_090002

Keynote

We begun the first day of the conference with the morning keynote, which was presented by Suelette Dreyfus. She talked about some of the statistics around people’s feelings towards privacy, whistle-blowing and government surveillance. The thing I found most interesting was that the ordinary citizen supports whistle-blowing and doesn’t support government surveillance. Which leads to one of two conclusions:

  1. The government will soon have to start actually listening to citizens and do something about all this.
  2. The government is actually entirely controlled by the spy agencies and we’re all screwed.

Yay for freedom and democracy! :/

Rocketry & Radios

The next talks I attended were from the open radio miniconf, where Bdale Garbee and Keith Packard talked about the hardware and software they are using for rocket to ground radio communications on their rockets, and which they are successfully selling through their fully open-source business. I found a few points interesting:

  • RF circuit board design is hard. There is some serious smarts going on with designing those boards to not have everything interfere with everything else (especially in such as a small package, with two radios within a centimetre of each other).
  • Here is yet another FOSS small business that is clearly surviving and not a complete drain on the pocket (one assumes, you can never be sure). That’s good news, as the world needs more businesses to cross that divide between open-source and the commercial world.
  • Rockets are fun!

The Sysadmin Miniconf

Between lunch and afternoon tea I sat in on the sysadmin miniconf (there’s a mantra at linux.conf.au: if you’re in doubt as to what to see, tend towards the left hand side of the schedule). The most interesting talk for me was from Elizabeta Sørensen on RatticDB, which looks a pretty cool password management tool that would have been amazingly useful in my last job (where I worked as a sysadmin rather than being a programmer like I am now). Despite being immature software, it has a lot of promise and I’ll definitely be trialing it for my own uses.

I also found the talk on Husk by Phillip Smith to be very interesting. Writing iptables rules is a pain, and writing them twice (once for IPv4 and again for IPv6) is a complete pain. So Husk looks great because it gives you extra power in simply being able to write-once for both network stacks and being able to re-use variables and rulesets. It’s basically SCSS for firewalls.

Modems

After afternoon tea I went to the talk given by David Rowe on modems and how they work in a basic sense. Unfortunately I was completely out of my depth and I had no idea how the modem algorithm fit into the stack of hardware and software. Is the mixer hardware or software? Where is forward error correction done? No idea. More reading for me to do!

Crash!

20140106_182003By this stage I was pretty exhausted, having not got much sleep the night before. I therefore retreated to the dorm room and had a quick nap, a cup of tea and a shower (Perth is hot!) before dinner. I went out with a few friends (new and old) to a great pub we’ve found nearby that does good pizza and amazing crème brûlée. Hopefully an early night tonight so I don’t get too exhausted before the week is out.