@madpilot makes

The next generation of web professionals

Being an active member of the local web community, I’m often speaking to students at Port80 meetups, about the best way of getting work, and it isn’t an easy question to answer – and it seems that I’m not the only one – both Alex and Gary have recently blogged about apprenticeships, graduate programmes and internships.

The problem we seem to have at the moment, in Perth anyway, is the number of companies large enough to be able to take on interns and run graduate programmes is pretty small. I’ve seen this in the software industry – I remember vividly the last 6 weeks of final year, where every soon-to-be graduate was sending resumes to the big three software companies that ran graduate programmes – the numbers didn’t add up as there was many more applications, than positions. Of course, there is more than three software companies here – however many of them looked for people with some industry experience.

So the problem is a chicken and egg one – no experience means no job, and no job means no experience. I think the education institutions need to get a bit creative with how they are teaching. A perfect example of this is the Centre for Software Research at UWA run by my old honours supervisor and mentor, Dr. David Glance. I was lucky enough to be the first student to go through this system, and not only has it given me some great contacts, it gave me  valuable experience. They take internal university projects, and get final year students and graduates to work on them. They also take on some external projects, the proceeds of which pay for the running of the centre – and the student wages. This is a win-win on so many levels.

  1. The students get practical experience working with a Project Manager, a client and deadlines. And they get paid to do it.
  2. The lecturers, who acts as the Project Manager gets to keep their fingers on the pulse of what is happening in the real world – which is invaluable in such a fast moving industry.
  3. The University can implement and experiment with adding systems to improve their work flow for little practical cost.

Of course these programs aren’t a silver bullet, and take resources, but in my opinion they a big step forward from handing someone a certificate and then throwing them in the deep end of the real world.

Ruby on Rails Meetup Perth Reloaded

Time for the second installment of Ruby on Rails Oceania – Perth Edition.

It’s once again at the Silicon Beach House:

I think we should have some presentations this month, so bring you laptop and your speaking shoes. Oh, and if someone wants to put their hand up to buy a carton, that would be much appreciated.

See you then.

Getting JoikuSpot to play nice with the EeePC

The EeePC is such a sweet little laptop, and it’s really handy when you are on the road, in a meeting or on the train – however being sans network can be pretty limiting. Now, I’ve got a Nokia N95 8Gb on Three, so I have a delicious 1Gb of traffic to burn each month. If only I could connect one to another…

I first tried with Bluetooth, but no dice – besides the obvious issue of the EeePC not having bluetooth, even with a dongle I couldn’t get a network connection. They chatted, but they couldn’t connect on that meta level that can push 1’s and 0’s around.  Besides, bluetooth is slow, I could probably only get 50% of my mobile broadband speed. FAIL.

Next I tried a USB cable. After installing 3egprs, and ith a minor tweak to a chat script, it actually worked, and at full speed! Having a cable hanging off kind of sucks though. PARTIAL CREDIT.

I downloaded JoikuSpot when I got my phone. It’s a cool little app that turns your phone into a mobile hotspot – the only caveat at the moment is the beta edition only supports HTTP, HTTPS and SSH (via tunnelling and only with version 1.2). NATing of more protocols are planned apparently, and I wait with baited breath. When I got my EeePC, I tried to connect, as this would be the ultimate solution, but no dice. After some Googling, I found a few suggestions, and success stories, but no full instructions – so here they are:

  1. Install JoikuSpot
  2. Start it up
  3. Find the Access Point on the EeePC
  4. Stop JoikuSpot, and close it
  5. Open “Configure Network Connections” on the EeePC, select the AP and hit Properties
  6. Click the “Wireless” tab.
  7. Set Mode to “Adhoc”
  8. Set Channel to “Auto”
  9. Select the “TCP/IP” tab. Select “Static” from the drop down
  10. IP Address: 192.168.2.2
  11. Subnet Mask: 255.255.255.0
  12. Gateway: 192.168.2.1
  13. Select the “DNS” tab
  14. Enter 192.168.2.1 as the primary server
  15. Hit the “OK” button
  16. Connect to the AP (Make sure JoikuSpot ISN’T running. Yes I said ISN’T) it should connect
  17. Start up JoikuSpot and connect to the net
  18. Browse somewhere on the EeePC – you should see the JoikuSpot splash screen

That’s it! I hope that makes sense…

Swing your hands from side to side – how to abuse JavaScript

What is a developer to do with all of that spare time between 1am and 3am? Write a JavaScript platform game of course!  I’ve been sitting on this for the last couple of months, waiting for a good time to release it, but as this guy just released his (freaking awesome) canvas element version, I didn’t want to be out done. So as a proof of concept of how far you can push semantic HTML, CSS and JavaScript, I present to you: JavaScript Mario Brothers!

  • The level is built using plain old HTML and CSS. Using absolute positioning and class names give each sprite a location and look (Yes, I know it should be in a separate CSS file – it was just easier for debugging at the time), so no cheating with the canvas element ;)
  • Sprite actions are determined by class names – so all divs with the class name koopa-sprite instantly start acting like koopas.
  • The collision engine and animation is all done via un-obtrusive JavaScript (Except for a few bits that I couldn’t get running after window.onload for various reasons).

The JavaScript is based on the Prototype JS library, and the level is a complete write from scratch (which is why it isn’t quite correct), but as a proof of concept in both game development and pushing the limits of JS, I think it’s pretty cool.

It’s a one fine day to be nude…

Hey Myles! Your site’s broken! Au contraire my good friend! Today is CSS naked day – a day to celebrate standards based web. Best practice says that a site should still be usable without all of the eye-candy, so today is the day to put you money where your mouth is (I hope you know where it’s been) and show your site in all of it’s nekkid glory.

A bit SUYS

The Port80 mini-talks have been really successful – there are lots of people that get very upset when we don’t have them. Unfortunately, it has been a bit difficult to find two speakers each month, so we are introducing a new component: Show us your Stuff (SUYS).

It is an opportunity to get up and show us something cool – maybe a new discovery or a new website for live feedback. You don’t need slides, or even any preparation – it’s basically a geek open-mic. We’ll try to keep it capped at 10 minutes.

We will still try to find one 10-minute formal talk each month, but if we can’t get one, there is just more time to show us your stuff!

You can’t do that on Twitter

Ok, I REALLY have to stop coming up with hare-brained ideas, and then listening to others when they convince me to implement them.

Spurred on my @cybner‘s new avatar, I thought it would be cool if you could slime people in Twitter if the say “I don’t know”.

So after a couple of hours of ruby hacking, I came up with: You can’t do that on twitter. Eveytime someone says the magic words, you should see their avatar get slimed! You can even try the public timeline or your own timeline (Click here and and change madpilot in the url to your username). Note though, that because this isn’t authenticated, your timeline will need to be public for it to work.

You can’t do that on Twitter

How it works

It is all very simple, using Ruby CGI, Mechanize and Hpricot. The steps are:

  1. Work out what page is requested (uses apache mod_rewrite for this)
  2. Build the twitter URL, and request it using Mechanize
  3. Parse the HTML using Hpricot
  4. Append a new JavaScript file, which inserts the slime image based on an inserted class name
  5. Iterate through the tweets, grepping for the term “I don’t know”. If it finds it, it inserts the “slime” class
  6. On window.load, the inserted JavaScript file finds all images with that class and dynamically inserts the slime.png image above it. Using the twitter prototype instance, it gets placed over the avatar image.

I started off using Mechanize, then realised I didn’t really need it, but left it in there as it does do the HTTP request thing quite well. Download the source. Enjoy!

Update: Some good old You can’t do that on television sliming:

Does your business have a godparent?

I’m not sure how well this metaphor is going to extend outside of people from Christan or Jewish backgrounds, but I can’t think of a decent non-denominational analogue, so bear with me.

As has been the tradition for many, many years, when a child is baptised, the parents select Godparents. Now originally, it was the Godparents responsibility to ensure the childs religious well-being – however, I (perhaps under some childish misconception) always thought of them as the next in line for guardianship if my folks died or disowned me.

Why don’t we do this for businesses? I’m a freelancer and if I got hit by the #66 on it’s way to Morley would there be anyone to notify my clients? It’s a bit morbid to think about, but we write wills for such an event – but how many people think about this for their business?

Even if you had the best documentation in the world, and kept your Outlook contact list up-to-date, it is all pretty worthless if nobody can access it, so they can contact the people that need to get contacted. So I’m proposing a system of Business Godparents – someone that can go in if the unimaginable happens and sort things out, to make sure your clients aren’t left high and dry.

Things to look for in a potential candidate:

  • Be someone you trust. You are basically giving them sensitive business information – if you think they will take your client list and start cold calling them , they may not be the best person.
  • They don’t have to be in the industry, but make sure they have a list of people that they can contact in-case of emergency. Having someone in the industry does have the advantage that they can start taking care of your clients right off the bat.
  • Your accountant might  be a good choice – they already knows your business intimately, so what is a few other bits and pieces?
  • Family members are probably good candidates as well.

What they will need to know and have access to? Well, that depends on the industry you are in – but if you are in the web industry you might include:

  • Your client list. They will obviously need to be able to contact your clients to let them know, as well as be able to do things like release source code, or graphics or whatever.
  • Usernames and passwords. This one is a bit tricky – obviously good password security states that no-one else should know your password, and that you should change it regularly. Maybe you could have a “needs to know” policy, where you spread the knowledge amongst a number of people. A non-industry person might be an advantage, here. If your accountant or a sibling has a “master password” (or a USB key with a private key certificate) that they can give to a nominated “person  (or persons) in the know”, there may be a smaller risk.
  • Names of services that you use, such as domain registrars, hosting companies etc
  • A list of other organisations that could potentially take over certain jobs, as well as a list of other stakeholders in the project. If the job was inherited from another firm, or if the job was a joint venture, it may be really easy to hand it over.

This is a bit of a brain dump, so feel free to leave comments on how this could work. What would you include in the list? How could you get around the security issues associated with password lists? I’d love to hear your thoughts.

Silicon Beach House: We need more housemates!!!

WANTED: Freelancers, startups, consultants or small businesses who need some office space.

If you are a small business, freelancer, consultant or a startup and you have out grown your back room but can’t quite afford a swish office of your own, the Silicon Beach house could be just what you need! Even though we seem to have attracted a number of developers and graphic designers, we are open to any body who is desk-bound by day.

One of the great things about having people with different skill sets is if you come across something that you can’t do, there is quite possibly someone there who can (Within reason – we don’t have any wood-workers, so asking questions about lathing may not get such a quick response). Personally, I would love to see an accountant and a lawyer join us, so I can pick their brains! We are all friendly, maybe a little talkative, but all in all it is a great place to work.

You can see the inside of the office below – but it is a second-floor open plan office with a small board-room table, kitchenette, a couple of couches and (obviously) some desks. It is fully furnished, so basically you just need to bring your computer. Whilst many of us just bring our laptops, a couple of us do leave desktopmachines there, and we all leave external monitors, so your stuff will be safe.

 

The beach house has a monitored alarm, ADSL connection, wireless, printer/copier/fax machine and water cooler all included in the rent (which is pretty darn reasonable), is REALLY close to the Perth train station (It’s across the road) and is basically slap-bang the middle of the city CBD. If you want more information regarding prices, please contact me, and I’ll put you on to the right person.

If you are interested in coming and having a look, we are at

Level 2, 90 King St

Perth WA 6000

[Google Map]

So what are you waiting for?

Why do open source web apps suck?

I’m a professional web developer, so it goes without saying that I’ve seen my fair share of off-the-shelf open source web applications. I’ve also seen my fair share of web design companies take these applications and modify them up the wazoo to fit with clients requirements… Well, sort of. It is probably more likely that the sales staff have managed to convince the client that their requirements should fit in with what the open source project does. On behalf of all the web application developers out there who get lumped cleaning up the mess: STOP IT.

Modifying open source software seems like a perfect solution to managers – the solution is almost done, so surely it is just a matter of a few tweaks here and there, a splash of paint and Bob’s you uncle. Yeah – nah.

Here is somethings to think about before modifying an off-the-shelf to your next client.

  1. You can’t guarantee the code. Unless your developers has spent A LOT of time working with the application, they aren’t going to know the code. For them to become familiar, they are going to have to spend a lot of time getting to know it. This doesn’t save time, it wastes it. “But they will know it for the next client!” I hear you cry. Don’t bet on it. Unless you are doing the same mods for another client, they are going to have to spend the same amount of time investigating it next time.

    • Making core changes to a system is just asking for trouble – I hope the time you saved by using the system is re-allocated to testing the FULL application – you have no idea what you will break.

    • Skinning pre-built applications sucks. Trying to modify some else’s CSS is worse than someone else PHP. Just like modifying core code libraries and hoping for the best, it is really hard to know what you will break. That is of course assuming the application isn’t a spaghetti of tables, and includes that have little structure (Xoops, osCommerce, Joomla – I’m looking at you).

    • Open source developers are very narrow minded – their contributions are to suit their specific need, which means every developer will try to include their feature, and unless the leads are ruthless, you end up with a application that has everything that opens and shuts, but that doesn’t really open or shut very well. Not only that, you end up with a situation where there are thousands of different modifications that do the same thing. osCommerce is the perfect example of the mess this creates – I had to find a gift voucher module – and found at least 12 different variations of the same plugin, none of which worked. If I see YMMV on the end of one of these modifications I’m going to hit someone.

      • As soon as you modify software, forget about updating it. If there is a security fix, or a new feature, you will basically have to spend a similar amount of time re-patching the new version with your changes. If you wrote your own application, you can add a feature much more easily.
      • “Modules” are a misnomer, I am yet to see a decent module system for anything but the most basic feature – they all involving modifying code to work, which is you ask me, isn’t a module.
      • The documentation will never be up to date. On of the selling points of open source software is that you have thousands of developers at your disposal to fix and add features quickly – unfortunately, the documentation never keeps up. You better get used to reading source code.
      • Open source apps are hacked not engineered. Design by committee never works, design by ad-hoc anarchy REALLY never works – if the project doesn’t have a clear leader who has a vision and is ruthless in implementing it, you are going to end up with a mess.
      • Support. You don’t get any. Budget time for your developer to scour the ‘net for an obsure german forum where someone has found a solution to the similar problem you have had that may or may-not actually work.

      So when is open source the right thing to use? If the system does exactly what you want, then go for it. Want a blog? WordPress is an excellent blogging system, but it isn’t a content management system, so don’t expect it to work like one.

      Let me state that I’m making a big differentiation between applications and frameworks or libraries. I encourage the use of frameworks and libraries, because you can still control your code. You are leveraging low-level code, which is the boring stuff (for some) and you are left with building a system that your client actually wants.

      So please, continue using Rails or PHP or Apache or MySQL, but leave osCommerce and Xoops at the door. If you still want to use the latter, make sure you give your developers enough time to work through the issues you will have – about the same amount of time that you would have quoted on a custom solution in the first place should suffice.

Previous Next