The Engagement Story

A long long time ago in a galaxy far far away...

Actually I'm just kidding, the story that I'm about to tell you began in November 2009. To begin the story, I should say that Lauren (my fiancée) and I had been going out for almost five years and we had been discussing rings, and getting engaged for a couple of months.  Naturally I had been thinking about how I was going to propose for a while but I hadn't come up with the perfect way yet.

One night in mid November the idea hit me. It was the perfect idea, combining my geekery and my career (software development) into one glorious box. 

The Engagement Box

Instead of just presenting Lauren with the ring I wanted to build something special.  I finally came up with the idea to create a box that had a GPS device in it and gave clues based off the current position of the box.  Basically, it was digital breadcrumbs that would eventually lead to the box unlocking.

The box starts when you press the LED button on the box.  It turns on and displays the current clue.  Once the reader has had a chance to read the clue (10 seconds) the GPS launches and checks the current coordinates against a set of stored coordinates.  If the box is within 500 meters of the next clue the box will display the next clue and repeat until it's farther than 500 meters.

Once the box is farther than 500 meters away from the next clue it gives a message saying the distance to the next clue and turns off to save battery life.

Here's a list of parts I used for the box:

Once I had all of the parts together I went about putting everything together (lots of soldering and hot glue), staining the box and then writing the code.  The software part was rather easy since I do that for a living but I've never worked with a micro-controller before (nor had I ever soldered) so there was a bit of a learning curve.
After a many long nights (and a fried part or two) I finally had the finished box that was ready for a ring.  I already knew the ring I was going to get so I set off to Tiffany's and bought it.  

 

The Journey

While I was building the box I started thinking about the different places Lauren and I could go.  Places we'd gone together while going out flashed through my mind and old memories came back to me as if they'd just happened.

Once I had a list of 11 places that were important to Lauren and I, I gathered all of the Latitude, Longitude coordinates for the GPS box.  This was the easy part.

Once I had the places I had to think of the clues that would direct Lauren to through all of the clues and on to the final destination.  Now, my memory isn't the best in the world so trying to think of things that made each place unique to use was rather difficult.  Lauren on the other hand, has an amazing memory and flew through the clues in no time.

Now that the clues were ready, the box was finished and ready to be used.  I gave Lauren the box (with the ring inside) and we set off on a trip that took over a month to complete.

We traveled all across southern Ontario and northern New York going to each of the spots.  In total we drove over 4,000km.

The Proposal

With 10 clues down there was only one left to go.  Friday March 12th Lauren unlocked the final clue that read "Covers 840 acres, contains a zoo, a formal park and Cleopatra's Needle".  Some of you might know this off by heart, I had to research it online to find these details, but the final clue leads to Central Park, NYC.

The reason I chose Central Park was for a number of reasons.  The first reason was that Lauren and I had both been there, but never together.  The second (and most important) reason was Lauren had always said she wanted to get engaged in Central Park so I thought this was the perfect opportunity.

On Friday March 19th we drove down to New Jersey and took a train into New York City arriving around noon on the 20th.  We walked around, went into shops, had lunch and continued to walk closer and closer to Central Park.  The closer we got the more nervous I became since I knew what was going to happen soon.

We finally got to Central Park and started walking down the paths amidst thousands of people.  It was the first day of spring and one of the nicest days of the year.  We continued to walk until I found a small clearing with very few people near a patch of Daffodils (Lauren's favourite flower).

We sat down, pulled out the box, pressed the button and waited for the GPS to find our coordinates.  When the box finally found the coordinates it knew that it was the last clue and unlocked.  Lauren thought another clue was going to come on the screen because she didn't hear the servo unlocking and asked "Is the box broken?"

Nervously I told her to open the box and as she did I got on one knee and asked her to marry me.  The months of hard work and driving paid off because she said Yes.

 

The Aftermath

After proposing in Central Park, we continued to walk around, looking at the different attractions, people and places.  We finally drove home at the end of the day and told all of our friends and family on the Sunday (after a much needed rest).

 

We're still happily planning stuff for our wedding.

Headphones: A Developers Best Friend

I don't know about you but I personally work a lot better when I'm listening to music. I don't know what it is but I can concentrate a lot easier and work a lot quicker when I'm listneing to my favourite tunes. The problem with most devevelopment jobs is that, unless you work from home, you're constantly around co-workers and it would be rude to blast your music.

That is why it's important to invest in a decent pair of headphones. Here are a few things you should look for when picking out your headphones:

  • Comfortable Ear Pads
  • Because you're going to be wearing these headphones for long periods of time, you're going to want something that fits comfortably on your head. Now, if you prefer in-ear buds than you don't need to worry about this.

    Its always a good idea to try on the headphones before you buy them. That way you get an idea of what they'll feel like and whether or not you'll be able to wear them for hours upon hours.

  • Long Cord
  • If your computer is tucked away from your desk like mine is, you're going to want a fairly long cord. Most headphones come with at least a meter long cord and you can always buy extensions if its not long enoguh. You don't want to have an overly long cord though because it can get in the way and get annoying very quick.

  • Noise-Cancelling
  • Noice-cancelling headphones are great and the prices are coming down a lot, but they may not be right for your workplace. If you constantly have co-workers talking to you, having noise-cancelling headphones can be rude because you won't hear them talk. I would advise not getting a pair because you won't be able to hear people around you.

Here are a few tips on being polite while wearing your headphones:

  1. Only wear the headphones over one ear
  2. Play your music at a comfortable level to yourself and your co-workers
  3. Always take off your headphones when a co-worker talks to you

Those are just a few tips on buying and wearing headphones at work, but what are your thoughts? Do you wear headphones at work? If you do, what kind do you have? Feel free to drop us a line down below in our comment section

How to Deal with Programmer Procrastination

Have you ever thought to yourself “I haven’t coded in so long, I really need to” but then did something else instead? This is called programming procastination (PP), and every developer will face it at least once in their career.

I get programming procrastination a lot when I’m trying to finish up my pet projects or even something to do with work. I don’t know why I don’t want to program sometimes but here are a few things I do to get me back into the programming mind:

  1. Just Start Programming
  2. Forcing yourself to program is on of my favourite ways to defeat PP. Its sometimes hard to just start programming but I generally lock myself in my room, and set a specific goal to reach. Generally the goal will be small to start out with; finish this method or class. Once I’ve started to program, the willingness flows back and I’ll stay for a few hours.

    Just starting to program can help the creative juices flow, but this is the hardest step in my opinion.

  3. Discuss Tactics with Another Developer
  4. Talking with other developers is another way to get past programming procrastination. When you talk with other people it puts you into the mindset of a developer. This often is enough for me to get me past programming procastination because it gets me thinking about programming.

    Talking tactics can help you figure out a problem that may be stopping you from programming or a complex algorithm. I generally talk to Alex when I’m stuck and can’t think of what to code.

  5. Set a Specific Time to Start
  6. This one is a little like just starting to code. When you give yourself a specific time to start coding it forces you to get into the mindset of a developer. If you know you’re going to sit down at 8pm and code something your mind will start to think like a developer and hopefully you’ll get past programming procastination.

  7. Read Your Development Books/Blogs
  8. Reading your favourite book or blog can help you get past programming procastination as well. Whenever I don’t feel like programming I go though my RSS reader and read some of my favourite development articles. It really helps put me in the programming mood. Dust off your favourite book or fire up your RSS reader and read whatever development stuff you want.

There are a number of ways to get past programming procrastination. The above four points are just a few that I use, but what I really want to know is how do you get through programming procrastination? Do you do any of the things I do or do you have your own ways? Feel free to drop us a line in the comment section below.

How to Reply to an Email

This morning I followed my usual schedule. I woke up, fired up my laptop, checked my blogs for any new comments, checked my feeds for any new posts and then opened my email client. As I was wading through the numerous emails (I have five different emails that I go through) I came across this email from a blog that I commented on yesterday:

"Hi there 4620,

Thank you for taking the time to visit my blog. I hope i was able to help you with whatever you were looking for, if found my site to be interesting i would be more then happy if you consider subscribing to my RSS feed."

Emailing can be the only personal interaction that you have with your readers. Sure they hear you talk in your posts but when you email them you’re talking directly to them. The problem with sending out a bad email is that it can actually send them away, and not bring them to your site. Here are a couple of tips to create a good email.

Make it Personal
One of the most important things about an email is keeping it personal. In the email that I received the first line was “Hi there 4620″. This doesn’t make me want to read the rest of the email. Because they didn’t use my name I immediately wanted to stop reading. This could easily been fixed by either a) use my name or b) don’t use anything. If you’re going to use a bot to email people make sure it does it in a friendly way.

Give them something else
If you’re replying to a first time reader (which was the case for my email), give them something else to read. Provide a few links to your recent articles and tell them whats coming up. You could even provide a link to your RSS subscription. This makes the email more interesting and helps the reader see what kind of content your site has. It also helps convert a one-time reader into a potential life-time reader. Giving links to your different articles also makes the email a little more interesting. Plain text if often fairly boring so the addition of links and interesting article titles will make a previous plain email into a more interesting one.

These couple of tips can help your emails become more personal and more interesting. More importantly they’ll help make sure that you never write an email like the one that was sent to me.

Your first C Program

So, you want to be able to write C programs? Well, you have come to the right place. Over the next few weeks I’ll be writing a series of tutorials called “The Basics”. Each one of these tutorials will cover a different subject that will help you learn how to program in C. In this weeks tutorial I’ll teach you how to write your first C program.

Before I go into detail about the program you will be writing, you’re going to need 3 things:

  1. A C Compiler: If you’re working from a Unix computer the GCC compiler should already be installed. If you’re working from a Windows computer I would suggest installing an integrated development environment (IDE) such as PellesC (an IDE generally consists of an editor and compiler as well as other built-in tools). This compiler takes the code you’ll write later on and translates it into object files which you can then link together into an executable.
  2. A Text Editor: If you just downloaded PellesC then you can use the built in text editor. If you don’t have an IDE you can just use any text editor.
  3. The desire to program. You’d be surprised how many people decide they want to program and then stop as soon as they realize that it’s not as easy as they thought.

Now that you have those three things we can begin.

Every C program must have a function called “main”. Now, you may be wondering to yourself, “whats a function?” and thats a good question. A function is just a block of code that does a specific task. From within your main function you can call other functions; these functions can be ones you made or built-in ones that come with the language. To use these built-in functions you need to include a header file with the #include directive and place it at the top of the program. What this does is effectively take everything in the header and paste it into your program. Here’s an example of your first program.

#include <stdio.h>
#include <stdlib.h>
int main( )
{
      printf("Hello World!");
      return EXIT_SUCCESS;
}

So what does this program do and how does it do it? The best way to understand this program is to go through each line. On the first line you have you’re #include <stdio.h>. This tells the compiler that you wish to use all of the built-in functions located in stdio.h. The second line #include <stdlib.h> tells the compiler that you wish to use all of the functions located in stdlib.h. The next line is your main function. The int in this line can either be left or or changed to another basic datatype. After the int main( ) line you have an open brace. This brace tells the compiler that the rest of the code (until the close brace) belongs ot the function above it (in this case int main( )).

The next line, printf("Hello World!\n");, is used to output text from the program. You can put any text you wish inside the ” ” and it will print it to the screen. In the next “The Basics” tutorial I’ll show you how to print variables to the screen.

The final line, return EXIT_SUCCESS; Tells the compiler that the program is finished and returns an integer. You could return any integer here but common programming practice is to useEXIT_SUCCESS or EXIT_FAILURE as return values from your main( ) because it has more meaning than returning a random value.

Finally you have your closed brace. This tells the compiler that any code after this is not part of the main function.

Now that you have your program written it’s time to compile it and run it.

  1. If you’re using PellesC do the following: File -> new -> project -> Click on “Win32 Console Program (EXE)” and enter the project name -> press ok -> save your file -> Add it to the project (a pop-up box will ask if you want to) -> click on the red exclamation point to execute (compile and run)
  2. If you’re using a compiler (GCC, CC, etc…) do the following: save the file (make sure it ends in .c) -> compile it (this depends on which compiler you’re using) -> run it (depends on your OS)

Summary

  1. #include <.h file> statement takes all of the pre-defined statements in the .h file and substitutes them into your program (it basically copies and pastes the text from the .h into yours).
  2. Every program must have a main( ) function. This function is where the program starts and ends.
  3. printf("whatever you want"); is used to output a string onto the console, you can substitute any string into it (as well as variables).
  4. { and } are used to define the scope of the code (local, global, etc…).

Fix Firefox Backspace in Ubuntu

As a computer nerd, I've used a number of different operating systems for a number of different reasons.  One of my favourite Linux operating systems is Ubuntu.  I like it for its ease of use, its great UI and a number of smaller reasons that are too numerous to list.

One of the things I hate about most Linux OS's is the fact that the backspace button is used to go up in any documents.  Now, I know I'm just used to the Windows way of things but I find it one of the biggest nusances when moving to a new operating system.

Below are a few steps on how to fix Firefox in Ubuntu (and probably other operating systems) to get the backspace button to go back in history instead of going up the page.

  1. Type about:config into your browser
  2. Find browser.backspace_action
  3. Change the value from 2 (or any other number) to 0

Once you've done the steps above, your browser will now function like it would in Windows with the backspace button going back in history instead of up the page.

If you have any other tips or tricks for us, please feel free to post them in the comment section.

SEO: The Good, The Bad and the Ugly

Search Engine Optimization (SEO) is something that's often overlooked by companies or pushed to the backburner when funds are running out.  Unfortunately this is a big mistake and will hurt the company in the long run.  While not optimizing your website for search engines can be bad, hiring unethical SEO companies can be even worse than not doing anything in the first place.

Search Engine Optimization: The Good

Search engine optimization can help bring a steady stream customers to your website.  If you've set up your site properly, search traffic is a continuous stream of users that have searched for something that your site has to offer.  From my experience it's the best kind of traffic, often staying on my sites much longer than traffic from ads.

Optimizing your site for search engines doesn't have to cost an arm and a leg or take years to achieve.  Obviously if you're trying to rank high for extremely competitive keywords its going to cost more money and take more time but even doing simple things like making sure each page has a proper &lt; title &gt; tag, well layed out headings tags and linking to your website properly is better than nothing.

The Bad

Often when the money runs out, so does the SEO.  For some reason, developers always leave SEO last, and then either charge more to include it or just leave it out all together.  This is a huge mistake and can make a website all but useless.  I'm not trying to say all websites are pointless without search engine traffic but a lot of companies rely on that traffic for sales.

Many web design and development companies will offer SEO services along with their design services but will never follow through.  These companies will promise that your website will hit #1 in [insert search engine name] within the first week.  Promises like these just aren't practical.  SEO isn't a science it's an artform.

The Ugly

Unethical SEO might get a website in Google fast, but they will get it out of Google faster. Ethical SEO takes time but will give better results over a longer period of time.

Unethical SEO practices can includ: Placing unrequited links on website pages, creating landing pages for the sake of just drawing the search engine goodies, paid links on high ranking pages without relevant content, spamming pages, etc. All of these activities are black-marked by Google and will get the practitioners a negative ranking.

In the end, it's often better to not optimize your website for search engines than it is to go about doing it in an unetical way.

Welcome to 41six

I'd like to welcome you to the new home of 41six studios. While we're still getting this website off the ground you can expect to see changes around here in the upcoming months including tweaks to the current design, new projects being added and fun new features coming along.

If you like what you're seeing feel free to contact us via our about page.  Make sure you checkback soon for more tutorials, tips and rants.