Keynote introduction

without comments

IN3 – Inspect, Innovate, Integrate

Written by grantmcinnes

April 6th, 2010 at 8:27 am

Posted in Digital Now

DigitalNow 2010 Presentation Links

without comments

The presentation we made for Digital Now 2010 can be found here. Below is further detail and links to products and services mentioned in the presentation.

Backing up in the CLOUD

Amazon S3 Services

Amazon S3 provides a highly durable storage infrastructure. Objects are redundantly stored on multiple devices across multiple facilities in an Amazon S3 Region. To help ensure durability, Amazon S3 PUT and COPY operations synchronously store your data across multiple facilities before returning SUCCESS. Once stored, Amazon S3 helps maintain the durability of your objects by quickly detecting and repairing any lost redundancy. Amazon S3 also regularly verifies the integrity of data stored using checksums. If corruption is detected, it is repaired using redundant data. In addition, Amazon S3 calculates checksums on all network traffic to detect corruption of data packets when storing or retrieving data.

Amazon S3 US – only $0.15 per GB-Month of storage used
First 5 GB Storage FREE

FREE data uploaded until June 30, 2010! $0.10 per GB of data uploaded thereafter
$0.15 per GB of data downloaded

Jungle Disk for Business – Various Pricing Options
http://www.jungledisk.com/business/

Jungle Disk for Personal- Various Pricing Options
http://www.jungledisk.com/personal/

CloudBerryLab Backup – $29.99
http://cloudberrylab.com/default.aspx?id=39

DropBox – $99/year for 50gb
Essential tips for every Dropbox user

http://www.rackspace.com/apps/backup_and_collaboration/

http://jeremy.zawodny.com/blog/archives/007641.html

Are you taking advantage of the new NCOA USPS regulations?

If not, read Johns post from last year’s Digital Now presentation.

Business Intelligence

This year we demonstrated and mentioned a couple of technologies:

  • Oracle’s OBIEE platform which is an enterprise solution, more information can be found here
  • Microsoft’s ProClarity which we use as a front end to our Data Warehouse, download an evaluation version here
  • Microsoft’s free Data Mining Add-in for Excel. Last year we did a presentation on Microsoft’s Data Mining Add-in for Excel and the links for that post are here

Written by grantmcinnes

March 30th, 2010 at 12:13 pm

Thoughts from SXSW 2010

without comments

Content is not king – the conversation is king! Users are your content creators now. Trying to control content can be daunting. Encourage user generated content. Crowdsource content. It gets them involved and their passion comes through.

When will you have, use, work with what I use? I’m here now but not for long.

 

http://www.google.com/friendconnect/
http://www.google.com/friendconnect/home/overview?hl=en

http://friendfeed.com/

Written by grantmcinnes

March 30th, 2010 at 11:59 am

Posted in Technology

Amazon S3 Links

without comments

Written by grantmcinnes

March 18th, 2010 at 8:55 am

Posted in Technology

How To Add A Nice Background Image To Your Grouped Table View

without comments

http://howtomakeiphoneapps.com/2009/03/how-to-add-a-nice-background-image-to-your-grouped-table-view/

What you need to do is create a view with your background image and add that view to your app’s window. Then you must set the table view’s background color to “clearColor”.

Here is how you would do that from the app delegate:

UIView *backgroundView = [[UIView alloc] initWithFrame: window.frame];
backgroundView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"TableViewBackground.png"]];
[window addSubview:backgroundView];
[backgroundView release];

yourTableViewController = [[ATableViewController alloc] initWithStyle:UITableViewStyleGrouped];
yourTableViewController.view.backgroundColor = [UIColor clearColor];
[window addSubview:yourTableViewController.view];

[window makeKeyAndVisible];

yourTableViewController is declared at the top level of the app delegate and ATableViewController is a subclass of UITableViewController that simply displays the rows and sections in the example.

Written by grantmcinnes

November 3rd, 2009 at 11:17 am

Posted in iPhone

Lessons for the Beginning iPhone Developer

without comments

Written by grantmcinnes

October 26th, 2009 at 2:47 pm

Posted in iPhone

Adding a Contact to the iPhone Address Book

without comments

http://www.modelmetrics.com/tomgersic/iphone-programming-adding-a-contact-to-the-iphone-address-book/

We then create our reference to the iPhone Address Book with a call to ABAddressBookCreate():

        ABAddressBookRef iPhoneAddressBook = ABAddressBookCreate();

And then we create a new person record:

        ABRecordRef newPerson = ABPersonCreate();
 

At this point, we haven’t saved anything to the address book yet, but we can start adding data to the person record. To do this, we use ABRecordSetValue, but some fields need to be formatted differently from others. For some, like first name and last name, we can just pass in a string:

        ABRecordSetValue(newPerson, kABPersonFirstNameProperty, @”John”, &error);
        ABRecordSetValue(newPerson, kABPersonLastNameProperty, @”Doe”, &error);

kABPersonFirstNameProperty and kABPersonLastNameProperty are constants defined by Apple that specify which fields you’re saving. They’re listed in the XCode documentation under Personal Information Properties in the ABPerson Reference document. We can also set some other fields in this manner, such as company and title:

        ABRecordSetValue(newPerson, kABPersonOrganizationProperty, @”Model Metrics”, &error);
        ABRecordSetValue(newPerson, kABPersonJobTitleProperty, @”Senior Slacker”, &error);

Where it gets a bit trickier is when we want to set our phone, email, or address properties, because these fields use ABMutableMultiValueRef rather than strings to store the data, and the specific data types of the values vary a bit depending on which one we’re talking about. For phone, we would do something like this:

 
        ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
        ABMultiValueAddValueAndLabel(multiPhone, @”1-555-555-5555″, kABPersonPhoneMainLabel, NULL);
        ABMultiValueAddValueAndLabel(multiPhone, @”1-123-456-7890″, kABPersonPhoneMobileLabel, NULL);            
        ABMultiValueAddValueAndLabel(multiPhone, @”1-987-654-3210″, kABOtherLabel, NULL);        
        ABRecordSetValue(newPerson, kABPersonPhoneProperty, multiPhone,nil);
        CFRelease(multiPhone);
       

 The first two phone types (kABPersonPhoneMainLabel and kABPersonPhoneMobileLabel) are listed as Phone Number Properties in the ABPerson Reference, along with kABPersonPhoneHomeFAXLabel, kABPersonPhoneWorkFAXLabel, and kABPersonPhonePagerLabel. Despite the fact that the two fax numbers and the pager number seem fairly useless (you can’t send a fax from your phone, and who has a pager anymore?) but there’s nothing listed there for Other, or Work Phone or anything like that. That’s where the Generic Property labels come into play:

      kABWorkLabel;
      kABHomeLabel;
      kABOtherLabel;

Those will file the phone numbers as Work, Home, and Other, respectively. After adding the values to the ABMutableMultiValueRef, we need to call ABRecordSetValue, only this time instead of passing a string in for the third parameter, we pass in multiPhone. Then be sure to free up the memory with CFRelease.

Adding email addresses to the record is pretty similar to adding phone numbers, where we create an ABMutableMultiValueRef of strings:

        ABMutableMultiValueRef multiEmail = ABMultiValueCreateMutable(kABMultiStringPropertyType);
        ABMultiValueAddValueAndLabel(multiEmail, @”johndoe@modelmetrics.com”, kABWorkLabel, NULL);
        ABRecordSetValue(newPerson, kABPersonEmailProperty, multiEmail, &error);
        CFRelease(multiEmail);

Where it gets a little different is when we go to set the street address values. While we do still use an ABMutableMultiValueRef, we won’t be using kABMultiStringPropertyType. To set the street address, we use kABMultiDictionaryPropertyType instead, so we have to create an NSMutableDictionary, and the method calls end up being a bit different:

            ABMutableMultiValueRef multiAddress = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
           
            NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init];

            [addressDictionary setObject:@"750 North Orleans Street, Ste 601" forKey:(NSString *) kABPersonAddressStreetKey];
            [addressDictionary setObject:@"Chicago" forKey:(NSString *)kABPersonAddressCityKey];
            [addressDictionary setObject:@"IL" forKey:(NSString *)kABPersonAddressStateKey];
            [addressDictionary setObject:@"60654" forKey:(NSString *)kABPersonAddressZIPKey];

            ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, kABWorkLabel, NULL);
            ABRecordSetValue(newPerson, kABPersonAddressProperty, multiAddress,&error);
            CFRelease(multiAddress);

kABWorkLabel means that we’re setting this as the contact’s work address. And to add it to the contact record, we call ABRecordSetValue as before, releasing the memory afterward.

 The last step is to add the new record to the address book, and save it back to the device:

        ABAddressBookAddRecord(iPhoneAddressBook, newPerson, &error);
        ABAddressBookSave(iPhoneAddressBook, &error);

And then we can check for any errors:

        if (error != NULL)
        {

                  NSLog(@”Danger Will Robinson! Danger!”);

        }

Written by grantmcinnes

October 26th, 2009 at 2:37 pm

Posted in Uncategorized

Adhoc Distribution Process

without comments

Written by grantmcinnes

October 26th, 2009 at 12:34 pm

Posted in iPhone

ABAddressBookRef example

without comments

- (void)AddressBookInMotion
{
   
    ABAddressBookRef m_addressbook = ABAddressBookCreate();
   
    if (!m_addressbook) {
        NSLog(@”opening address book”);
    }
   
//    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(m_addressbook);
   
   
    ABRecordRef person = ABPersonCreate();
   
    //ABRecordSetValue(person, kABPersonPrefixProperty, @”Mr.” , nil);
    ABRecordSetValue(person, kABPersonFirstNameProperty, @”Jane” , nil);
    //ABRecordSetValue(person, kABPersonMiddleNameProperty, @”M.” , nil);
    ABRecordSetValue(person, kABPersonLastNameProperty, @”Doe”, nil);
    //ABRecordSetValue(person, kABPersonSuffixProperty, @”MD” , nil);
    //ABRecordSetValue(person, kABPersonNoteProperty, @”My Company, we help everyone”, nil);
    //ABRecordSetValue(person, kABPersonEmailProperty, @”jane.doe@money.com”, nil);
   
   
    ABAddressBookAddRecord(m_addressbook, person, nil);
    ABAddressBookSave(m_addressbook, nil);

   

    CFRelease(person);
    CFRelease(m_addressbook);
   
   
}

Written by grantmcinnes

September 1st, 2009 at 2:34 pm

Posted in iPhone

Survey Results: Which Smartphone Will Own the Healthcare Market?

without comments

Written by grantmcinnes

August 21st, 2009 at 3:59 pm

Posted in Uncategorized