Not your average programmer…

I’ve been asked several times what led me to take up coding, having come from a pure science and aviation background. This post is about my journey and the inspiration behind an app I am very passionate about.

How I got here – the short version

I’ve dreamed of being a pilot since I was 4 years old, but I didn’t begin my life as a pilot until 2006 when I took my very first flight lesson flying around Barbados. I took my next big step when I enrolled in the Aeronautical Science program at Embry-Riddle one year later. During my time there, I completed my Private Pilot License and Instrument Rating. After completing my degree, I went on to sit the JAA (now EASA) ATPL theory exams. I began, but have not finished my commercial training because it is out of reach financially at the moment. These days, I spend a large chunk of my time working as a freelance iOS developer and learning how to become better at coding it all the while.

When Steve Jobs introduced the iPhone to the world, and later the iPad, it sparked something inside of me I didn’t really know existed – a passion for technology. I always regarded myself as much of a geek but this really sealed the deal. I wanted to get into the world of mobile app development because I could see the impact it could have on people’s lives.

I started teaching myself how to code only last year, but from very early on I knew exactly what I would want to do.

Why I made ATPL Dictionary

I created ATPL Dictionary because I wanted to do something to help other pilots with their training, whether initial or recurrent, and to make studying for exams easier than it was for previous generations.

During my time studying, I found it cumbersome to lug around heavy books and wade through several pages of textbooks or personal notes in order to find the definition of a particular term.

I believed it would be much more convenient to have a reference for all the terms a pilot would need to know on mobile devices, which have essentially become appendages to the human body in recent years.

List

So what makes this app unique?

I started out by thinking about what I look for in a any good reference tool – concise, legible and accurate information. In creating the app, I didn’t want to simply regurgitate information directly from a book or web site. That would have been easy, but does not provide any assurance of the quality of the information. I decided to create my own database of definitions, so I consult various sources, summarize the information, and type out every definition in the dictionary. I believe this is the best method because if someone thinks it is all rubbish, then I’d know that I created that rubbish but did my best at it, and If users appreciate my efforts, then I’d know that I made the right decision. Luckily, so far, it has been the latter case!

Definition

Final thoughts…

I have thoroughly enjoyed stepping out of comfort zone to do something I have become really passionate about. I love working on the ATPL Dictionary app and I enjoy reading every email I get with a correction for one of my mistakes, a suggestion for a new feature, or someone simply sending their thanks because the app helped them in some way.

I have come to learn we can change the world and touch many lives in our own special way.

If you’d like to try ATPL Dictionary, it is available free on the App Store.

Advertisements

How To: Animate Showing and Hiding a UINavigationBar with Tap Gesture

The navigation bar is an important component of your app’s user interface but, sometimes, it can really get in the way of your content. Maybe you’d like to show a web page or an image, but the navigation bar occupies precious screen real estate, which essentially becomes dead space while a user is engaged with your content.

This tutorial quickly teaches you how to animate showing and hiding the navigation bar with a tap gesture.

#import "ViewController.h"
#import <QuartzCore/QuartzCore.h>;

#define kNavBarDefaultPosition CGPointMake(160,22)

@interface UIViewController () <UIGestureRecognizerDelegate>;

@end

@implementation UIViewController

- (void)viewDidLoad:(BOOL)animated
{
    [super viewDidLoad];

    UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer]
    alloc] initWithTarget:self action:@slector(animateNavigationBar)];
    recognizer.delegate = self;
    recognizer.numberOfTapsRequired = 1;
    [self.view addGestureRecognizer:recognizer];
}

- (void)animateNavigationBar
{
    CALayer = self.navigationController.navigationBar.layer;

    // If the navigation bar is shown, hide it.
    // Else, if the navigation bar is hidden, show it.

    if (layer.position.x == kNavBarDefaultPosition.x &amp;&amp;
    layer.position.y == kNavBarDefaultPosition.y) {
         [UIView animateWithDuration:0.25 animations:^{
             layer.position = CGPointMake(layer.position.x,
             -self.navigationController.navigationBar.frame.
             size.height);
         }];
    } else {
        [UIView animateWithDuration:0.25 animations:^{
            layer.position = kNavBarDefaultPosition;
        }];
    }
}

How To: Programatically Select a Random Cell in a UITableView

This little snippet of code shows how you can select a random UITableViewCell in a UITableView programatically. For example, you might want to trigger a random selection when the user shakes the device, or through some other action of your determination. Here I assume your familiarity with setting up a UITableView and implementing its associated delegate and datasource methods.

@interface MyTableViewController : UITableViewController {

// Declare arrays in @interface

    NSArray *section1;
    NSArray *section2;
    NSArray *section3;

    NSArray *randomSectionsArray;
}

- (void)viewDidLoad {

// Initialize arrays
    section1 = @[string1, string2, string3];
    section2 = @[string4, string5, string6]:
    section3 = @[string7, string8, string9];

    sectionsArray  = @[section1, section2,
    section3];
}

/* After implementing the delegate and datasource methods for the UITableView, 
   you can now implement the method to select a UITableViewCell at a random indexPath: */

- (void)selectCellAtRandomIndexPath
{
    int randomSectionIndex = arc4random() % sectionsArray.count;

    NSArray *randomSection = sectionsArray[randomSectionIndex];
    int randomRow = arc4random() % randomSection.count;

    NSIndexPath *randomIndexPath = [NSIndexPath 
    indexPathForRow:randomRow inSection:randomSection];

    [self.tableView selectRowAtIndexPath animated:NO
    scrollPosition:UITableViewScrollPositionMiddle];

    [self.tableView.delegate tableView:self.tableView
    didSelectRowAtIndexPath:[self.tableView indexPathForSelectedRow];

}


- (void)triggerAction
{
   //  Now, you can use your trigger action to select a random cell.

    [self selectCellAtRandomIndexPath];
}

That’s it! Happy coding.