How to fix slow sendmail on a Digital Ocean Ubuntu droplet

I recently switched over to Digital Ocean for my main server thanks to Bryan Poetz‘s  suggestion, and was running into an issue where mail was sending but slowly. Turns out there were two problems.

First, I had named the droplet “main” (since it was, you know, the main server), but this really should be a Fully Qualified Domain Name (FQDN) instead. So I renamed the droplet to and restarted sendmail. However looking at the mail logs I saw lots of:

unable to qualify my own domain name (main) — using short name

Since it was still using “main” as the server name. Thanks to help from this thread I modified the /etc/hosts file from: localhost main main

to: localhost.localdomain localhost main

voila, fast sendmail.


Review on Attending EDMBiz 2014

I’ve been a fan of electronic dance music (EDM) for a long time. I decided to attend EDMBiz to learn more about how the industry worked behind the scenes, and if there was a way I could combine my love of the music with some kind of software related product or service.

Overall the conference was well run, and I got a lot out of the speakers and panels – from artists to agents and industry leaders. The expo was a new addition this year and was great to chat with companies developing new technology either specifically targeted at EDM or music and festivals in general. I’ve also since joined the newly formed Association for Electronic Music (AFEM) and looking forward to contributing wherever I can.

Last but not least attending the conference got you VIP access to events at Hakkasan, Surrender, XS and the Cosmopolitan pool with artists like Avicii, Dash Berlin, The Crystal Method and Dada Life. Though some nights I felt like I wanted to sleep from a busy day at the conference, I met even more conference attendees and enjoyed some excellent venues and music. And the conference was smart to start the next days events later (on the last day it didn’t start until 11:30am).

If you love EDM and want to see how it’s run, and enjoy some great events, definitely check out EDMBiz in 2015.

How to Protect Yourself When Having Custom Software Developed

I was recently brought in to assess a site that was developed.  Though it was supposed to have been custom written to fit the needs of the business, it turns out the local company simply purchased a pre-written (originally from 2004) piece of software but tried to pass it off as custom developed by changing the copyright.  Legal action likely pending.

Custom software rather than very old, off-the-shelf software can still suffer from poorly architected and difficult to maintain code, and regardless of how well architected the code might be it still needs to be maintained over time.  Even if you’re non-technical there are still steps you can and should take to mitigate the risk as much as possible and to maintain full control over the work you’re paying for.

Ensure They Can’t Subcontract The Work

Make sure the contract has a clause where the work cannot be subcontracted without your authorization.  You’re hiring that developer or firm not someone else of their choosing, yet still paying their rates.


These are difficult to verify, as you pretty much need to know them or they have a decent public presence to have earned trust through a referral.  But it doesn’t mean you shouldn’t try.

Ensure the Software Is Custom or Built on a Framework With an Appropriate License

There should be a clause that it’s custom in your contract, or based on an open source project with an appropriate license.  Software like WordPress is licensed under GPL, which means there’s technically no restrictions on sharing the code that’s developed on top of it.  If you have sensitive business processes you don’t want to expose, you’ll want to make sure you trust the developer or have another framework chosen.

Agile or Weekly Billing Instead of Fixed-Cost With a Large Deposit

Using a developer who offers weekly billing means you get to control how things are going and if you’re not happy with the direction, you can stop at any time.  Major components can and will take more than a week, but this is still much better than a large fixed-cost project where you’re locked in after giving a 50% deposit and cannot change the direction when you learn more about the needs of your business.

Weekly Meetings

Even if you’re not working with a developer that offers agile development or weekly billing, weekly meetings ensure you can review progress, verify priorities, and answer any questions they have.

3rd Party Audit

Bring in a 3rd party developer like myself who can audit the code at various stages of development, and even interview or work with your developer about their current and future plans to architect the system.  Tell the developer you’ll be doing this and if they have a problem with it, this may be a sign that they don’t want you finding something they’re trying to hide.

Ensure You Have Backups That the Developer Can’t Access

If you are paying for the software, you should have full control of hosting and backups.  In addition, some backups need to be set up that the developer can’t access in case of a dispute.  Keep incremental backups over a period of time of code and your data.

Though the hosting may not set something like this up for you as part of the package, they should be able to guide you through.  Before you sign up for hosting ask the hosting company if having separate backups is a possibility.  If not, you should find another hosting company, at least during development.  You may need to spring for more expensive but fully managed solutions where you can get the support you need by phone or email.

Paying Too Little

If you think you’ll get Etsy or Youtube custom created for the equivalent of a week’s worth of work, you’re mistaken.  If you’re getting the software developed on the cheap as an MVP with the realization you’ll likely need to throw it away later after you’ve proved there’s demand for your idea, this might work.  Otherwise you’re fooling yourself.

Ultimately you’re responsible for the outcome but I hope these tips can help prevent you from paying a lot of money for software that no one but the original developers will maintain.  If you have any questions feel free to leave a comment or get in touch, and I’ll be adding more detail on some of the points above in future posts.

Enter your email address to subscribe to this blog and receive notifications of new posts by email.


HackerNest Construct Hackathon 2014

The HackerNest Construct Hackathon took place a couple weeks back, and myself, Garth Gutenberg, Connie Leung and Tom Pepper competed as Team ISIS.  The whole event was super well organized, and we got a chance to play with the soon to be released Kiwi Move.

Our idea was to create a cookie aid app where with the Kiwi Move strapped to your arm would guide you through a recipe and alert you if you were doing things wrong.  After some technical hiccups we were able to get the data flowing from the device, and started training it to recognize when I was whisking, chopping, sifting, and even kneading, to eventually end up with some delicious Challah bread.

Screen Shot 2014-03-15 at 8.57.35 AM

The app detected how many of each motion was done and, if you stopped doing the motion, provided some gentle words of encouragement.

I like puns.
I like puns.

You also didn’t have to click the Next button to advance – since your hands might be messy whilst cooking, once you had done the motions for that step you simply shake your hand slightly to continue.

The user interface turned out amazing with the use of a jQuery knob and Zerb foundation as a base and Connie and Tom’s design skills.  The demo worked perfectly (live demos always work perfectly, right?) and nicely showed the difference between chopping and sifting.

Though our commit messages aren’t as amusing as Cat Burton’s and co’s Children’s Ward game created during a Game Jam hackathon, the code for our project can be found on Github.

All and all a great experience and was awesome to hack on a technology we normally wouldn’t have the chance to.  A big thank you to the Ryerson Digital Media Zone for hosting and all the work of the volunteers!  Check out the rest of the submissions from the event.

Issues Fetching calendar times from iCloud via CalDAV

Using the ‘root’ server will fetch calendar entries for a particular user, but the results will not always be complete. No errors are raised at all yet the results weren’t correct.

After a bit of experimentation it turns out using instead of the user’s “actual” server ( in my case) causes random calendar entries to not be fed back in the results.

Seems like something that should be fixed on Apple’s end. When you try to fetch the available calendars you get an explicit error if you use the wrong server, which makes total sense. But to return a 200 status but not return the full set of data?

How to access a FileValut 2 encrypted drive using Lion Recovery

After upgrading from 10.7.1 to 10.7.2 with the hard drive encrypted with FileVault 2, the system would not boot (displayed a circle with a line through it). After searching I found a thread that seemed to point to PGP still having some parts left around, even though I wasn’t using PGP Whole Disk Encryption (WDE) anymore thanks to FileValut 2.

Unfortunately I could not seem to access to the files because a) the system would not boot and b) the system was encrypted with FileValut 2. Calling Apple didn’t yield a solution except re-formatting the machine and losing all data, but stumbled upon a way to not have to do that:

1. Restart the machine and hold Cmd+R to restart in Recovery Mode
2. Under the Apple menu (top-left) select ‘Startup Disk…’
3. Click on your encrypted disk, then click ‘Unlock…’ (mine is labelled ‘Macintosh HD’)
4. Enter the password of a user who can normally start up the machine and click ‘Unlock’
5. Hit Cmd+Q or go to Startup Disk menu and choose Quit Startup Disk
6. Under the Utilities menu, choose Terminal
7. Type cd /Volumes/Macintosh\ HD (enter the name of your drive instead of Macintosh HD) and hit enter

Voila, now you have access to all of your files on the encrypted drive!

Programming and other bits.