Resources to get started with iOS development

I have the opportunity tonight to teach a lecture to college students interested in getting started with iOS development.  I really have no idea which way the lecture will go, so I haven't really planned out a set agenda for the lecture.  Instead, I came up with a long lists of different topics that I could cover throughout the lifecycle of creating an iOS application, and then jump around based on me soliciting topics at the beginning of class.  Along with those topics, I came up with a list of online resources that would be helpful for someone getting started with iOS development.  I posted them on Github at: https://github.com/obuseme/GettingStartedProgrammingiOS

My 5 Favorite Jimmy Buffett Tailgate Pictures

This article first appeared in Issue 5 of my newsletter, Music Group of the Week.  Sign up at http://www.musicgroupoftheweek.com.


There was a good streak of 5 or so years where I could claim true "parrot head" status, going to Jimmy Buffett's Philadelphia concert stop each summer.  Here's the best photos from those years.

Please don't be disappointed, I won't incriminate myself or anyone else. And boy you should be disappointed, because looking back through my archive, there's some good ones!  Here's the best of the rest:

Summer Lovin, Had Me a Blast

Can you believe that this picture was taken in Camden, NJ?  It looks more like Florida than New Jersey.  Mary and I had such good times at the Buffett shows.  I can almost feel the summer sun, taste the margarita, and smell the sun tan lotion.

It's 5 o'clock right here

I have no clue where Gumby came from in this shot!  One thing you'll notice in the Buffett parking lots is that every clock is permanently set to 5:00pm in reference to his song, "It's 5 O'Clock Somewhere" - as in, there's no wrong time to have a cocktail while on vacation.

Sand from Belmar, NJ

IMG_1044.jpg

One of the organizers of our tailgate, who lived in Belmar, NJ, would literally stop at the beach on the way to the tailgate to load up on real beach sand to bring to the parking lot for a more authentic tiki bar!

Hot Tub To Go

One summer, it was over 100 degrees in the sun.  We were so jealous.

Yes, that is a blender powered by a car battery

IMG_1032.jpg

Parrot Heads are serious about their frozen drinks, and they don't let the fact that there isn't a power outlet around stop them.

TSBTS - Thinking of you, Brussels

Today's post in "The Story Behind The Shot" series is in honor of the victims of the terrorist attacks in Brussels.  Two explosions went off at the Brussels airport, and one explosion happened in the Maalbeek Metro station.

All terrorist attacks are terrible.  This one especially hits home because I was in Brussels less than one year ago.  John and I took a trip to see Mary while she was on a two week work trip to Paris and Brussels.  John and I flew in to Paris, and then over the weekend took a train to Brussels.  Brussels a beautiful city.  One thing I loved about it is its "walkability."  Particularly around the town center, most roads are blocked to traffic and are replaced with pedestrian pathways between beautiful architecture overtop cobblestone streets lined with small shops.

Us in the center square, I forget the name...

Us in the center square, I forget the name...

An example of the pedestrian streets

An example of the pedestrian streets

One thing that was unique to me about the Brussels airport, is that as you pass through customs and security, you are actually routed through duty free shops.  There's no avoiding it.  Imagine you are at an airport, go through an ID check, and then on the way to the actual bag check station, you are dropped into a Macy's and you need to navigate to an unknown exit on the other side of the store.  That's no exaggeration.

On the plane about to leave.

On the plane about to leave.

This picture captures the moment as John and I said goodbye to Europe for this trip, as we were on the tarmac waiting to take off from the Brussels airport.  It was a great trip, I love Europe, and my prayers are with them.

Other outtakes from Brussels

The Allman Brothers Band is a great band, here's why:

Great music is defined by attracting cross generational interest, and having a wide applicability for listening.  The Allman Brothers Band fits this.  You'll hear their music in movies of all types, at sporting venues, and on many different types of radio stations (no not just classic rock stations).  You'll even hear it at weddings, and even cooler, Mom and I honored the Allmans by having our Mother/Son dance at my wedding to "Melissa."  Have you heard it?  Here's the song, and pic from that special moment I'll always remember.

Side note, did you know this was the first song they recorded after Duane Allman's death?

2 Reasons Taylor Swift Earned My Respect (and will earn yours too)

1) She has put in the time

She learned three guitar chords from a computer repairman when she was 12 years old.  From there she moved to Nashville when she was 14 years old.  This was no overnight American Idol karaoke sensation.  Taylor Swift followed her dream, leaving a stable life to start a journey to become a rock star. Long days of writing music, followed by longer nights gigging in Nashville helped her to become the chart topping gazillionaire that she is today.  Could you have fought through that uncertainty?

2) She can reinvent herself

Taylor Swift's music has been a journey from country to pop to 80s rock, winning countless awards in each area she tries.  1989 sounds so different from her early albums, and it's only helped to sky rocket her popularity.

This article appeared in Music Group of the Week, my weekly newsletter highlighting a different music group of the week with the most interesting content from around the web.  Get more info and signup here.

Dave Grohl IS a Rock and Roll God

Regardless of what you actually think about the Foo Fighters, or their music, one thing is undeniable.  Dave Grohl is a rock and roll god, and rightly deserves to act like it.  Dave doesn't prove this to anyone, and criticsm that "he doesn't lead the rock and roll" life aren't valid.  Yes, he has more money than is imaginable at this point (at one point estimated to be the 3rd wealthiest drummer in the world with $225m net worth).  And yes, he isn't sleeping on a sticky bathroom floor in the back of some tiny rock venue on a weekday night.  The point is, he HAS put in his time, ascended the mountain, and now sits on top of it with few others as one of the living legends who can claim the status of "Rock and Roll God."

Here's three reasons why:

  1. He has played in two different instruments, in two different bands, each of which have moved the Rock and Roll genre forward in different ways.  (He played drums in Nirvana, and sang and played guitar in Foo Fighters)
  2. He had a major injury while performing, and didn't let it impact tour dates later in the summer (he severely broke his leg, and then played the whole summer tour with a cast, and built a sweet throne).
  3. He is a philanthropist.  Philanthropy is the test in the trial and graduation to Rock and Roll God-ship.  Dave Grohl is involved in supporting LGBT rights, and advocating anti-drug use.

So, YES, Dave Grohl is a Rock and Roll God, and deserves to act like one.

This article appeared in Music Group of the Week, my weekly newsletter highlighting a different music group of the week with the most interesting content from around the web.  Get more info and signup here.

Music Group of the Week newsletter, a new project!

I'm excited to announce my newest project: Music Group of the Week.  It's a weekly newsletter that highlights a different music group with each issue.  Arriving in your inbox on Friday's around noon, Music Group of the Week contains around 10 interesting pieces of content about the group that I've found interesting, and that I think you'll find interesting too.  I try to include a range of material, from information about the band's roots, to unique performance videos on YouTube, to contemporary news about the group. 

One of my favorite time wasting activities is digging through the Internet into the history of various music groups.  The beginning of the rabbit hole usually begins on Wikipedia or YouTube.  It's so easy just to follow link after link watching live performance, interviews and covers of songs.  So I figured, why not share the best of these findings with others?  And thus Music Group of the Week.

For the first issue, I tackled the Eagles.  You can find the archive here.

Or if you're interested in a screenshot of how the newsletter looks, here's a teaser:


The coolest thing about Music Group of the Week is that the newsletter is created with the newest mobile app I'm working on, Curate by AWeber.  It's not yet live on the App Store or Google Play store yet, but will be soon.  We are hosting an open beta period though as complete the final piece of the project.  I'm really liking dogfooding my own product, like really dogfooding it - not just testing it throughout development, but actually using it as intended and building an audience.  And even cooler, is that it's driving dogfooding of the rest of the AWeber experience (like our other apps - Stats and Atom, as well as the AWeber website).

If you're interested in trying Curate by AWeber, hit me up on Twitter (@obusek) and I'll get you invited into the beta.

Here's to new projects!

Sign up for Music Group of the Week here:

The team that created Curate:


Using Mock Objects To Write Stubs In Your Swift Code

Using mock objects is an easy way to increase your test coverage in any code base. For years, in the Objective-C that powered my iOS applications, I used the hell out of OCMock. I even wrote a couple articles on it. As much as I used OCMock, I definitely had a love hate relationship with it. In one way, it totally enables a test driven development workflow in a UIKit driven codebase. On the otherhand, sometimes you end up writing super nitpicky tests that end up verifying each line of code, rather than overall behavior in an application. At the end of the day though, I think I do sleep better knowing that I had the test coverage (it's kind of like eating your vegetables).

It was disappointing to learn that OCMock would not work with Swift, nor is it even possible to create a mock framework in the nature of OCMock in Swift. Read this article for more information about why OCMock won't work with Swift. Fortunately, there's a couple different ways that you can actually write your own mock objects in Swift. Notice, I'm proposing that you can write your own mock objects, on a case by case basis, NOT write an entire dynamic mocking framework like OCMock.

There's two primary uses for a mock object:

  1. Stubbing a value - creating a "fake" object that behaves in a specific and predictable way that enables testing of other code.
  2. Verifying that an expected method is called with the correct parameters

Eli Perkins wrote a great article where he covered some techniques on how to use protocols in Swift to do the later - verify that an expected method is called with the correct parameters.

In this article, I'll show you how to do #1, stub a return value using Swift.

Why Stub?

You might first be wondering, why stub anything in the first place? Well, let me show you through example. Consider the following super simple UIViewController:

class ViewController: UIViewController {
    @IBOutlet weak var aLabel: UILabel!
    @IBOutlet weak var aTextField: UITextField!

    @IBAction func changeLabelFromTextField(sender: AnyObject) {
        aLabel.text = "Hi " + aTextField.text!
    }
}

How would you write a unit test for changeLabelFromTextField? In my mind, I'd write a test that initializes a value in aTextField, then calls changeLabelFromTextField and then verifies that the resulting text in aLabel is correct. On the surface, that's a great test that achieves 100% coverage on this piece of code.

Something like this:

func testChangeLabelFromTextField_ActuallySetsLabel() {
    let toTest = ViewController()
    toTest.aTextField = UITextField()
    toTest.aLabel = UILabel()

    toTest.aTextField.text = "Andy"
    toTest.aLabel.text = ""

    toTest.changeLabelFromTextField(UIButton())

    XCTAssertEqual("Hi Andy", toTest.aLabel)
}

There's one problem, those pesky weak properties in ViewController.

Since ViewController only has weak ownership of those IBOutlets, that means you are going to have a problem when you try to set an actual instance of an object on the property - it will immediately be "released" and the property will go back to being nil.

If you don't believe me, here's a Playground for proof:

OCMock made this easy

Back in the good ole days of using OCMock, it would have been easy to create a mock and stub those properties out.

ViewController *toTest = [[ViewController alloc] init];
id mockVC = [OCMockObject partialMockForObject:toTest];
[[[mockVC stub] andReturn:[[UILabel alloc] init]] aLabel]

Stubbing in Swift isn't hard either

In order to stub these properties out in Swift, it isn't that hard either. You just have to manually create your mock and specify what to be stubbed, like this:

class MockViewController: ViewController {
    let stubbedLabel: UILabel! = UILabel()
    let stubbedTextField: UITextField! = UITextField()

    override var aLabel: UILabel! {
        get {
            return stubbedLabel
        }
        set {
            // Nothing to do here
        }
    }

    override var aTextField: UITextField! {
        get {
            return stubbedTextField
        }
        set {
            // Nothing to do here
        }
    }
}

Basically, you just create a subclass of the class that you want to mock, and then override the weak properties with a custom getter that allows you to return an actual hard instance of an object. It's even okay to create one of these mocks for an object under test, just don't get your wires crossed and accidentally mock or stub behavior that you actually want to verify (test driven development, and fail first FTW here).

Now, make sure that in the test, you instantiate the mock and use that, rather than the base class.

Again, for proof, here's a playground where you can see that by using the mock, you can actually get the object-under-test's weak properties to behave:

 

Not the only way to test this

One could argue that testing behavior and values of UIKit driven properties like labels and text fields is something better left to black box based testing tools like Xcode UI Tests or KIF.  I would agree with you.  And I would add on that redundant coverage is even better!  Which is why I usually end up writing both my unit tests to verify this behavior, and then complement that with a more UI oriented test to verify it from an end user perspective.  Plus, there's plenty of other times where you might be using weak properties that aren't part of a user interface.

You can find the Swift playground that I referenced in this article in my GitHub at: https://github.com/obuseme/PlaygroundWithSwiftMocks

Thank You

A big thanks to Jon Reid for inspiring me to come up with this approach. I credit his talk on Test Driven Development for iOS at MCE 2014 for giving me the push to try mocking on my own without a framework.

Other References

Baby's Musical Hands iOS Kids Game Review

Baby's Musical Hands is an iOS game by Streaming Colour Studios.  It's a simple game, appropriate for one to two year olds, that allows players make musical sounds by tapping colored boxes on the screen.

Rating: 4 stars

Recommended Ages: 1-2

Price at time of post: $0.99

It's an extremely simple game.  There is literally only one screen in the game, the music board.

The one screen in Baby's Musical Hands

The one screen in Baby's Musical Hands

Each of the three groups of colors represent a group of similar instrument sounds.  The red squares are different percussion instruments.  The yellow squares are different notes on a lower octave of piano.  The blue squares are a higher octave on piano.  This was one of the first games that actually engaged John on the iPad because even as a 1 year old, he quickly understood that the more he mashed the screen, the more sound it made.  There's even a cool particle effect that explodes when you tap a box.

I would have loved some enhancements, or alternate modes on this game to continue its usefulness for a toddler.  I think a mode, kind of like the game Simon, where the game shows a sequence of notes, and then the player must mimic it would be a useful way to start getting kids to learn how to memorize music.  On the other hand, there is definitely an elegance in Baby's Musical Hands' simplicity.

At this point at 2 years old, John is outgrowing Baby's Musical Hands, but I know he'll enjoy showing his new baby brother James how to play!  If you have a one year old who's excited to try Mommy and Daddy's iPad, this is a great game for them to try.

Endless Alphabet iOS Kids Game Review

Endless Alphabet is an educational iOS game from Originator Inc. designed to help young children learn about letters, spelling, and new words.

John has loved learning both the new letters and the new words, as well as the mechanics of using an iPad.  In fact, it's become a slight obsession that we're needing to curb.  There's been a couple nights where John has come home and immediately ran over to the charging station and start saying "iPad, iPad, iPad."  That was a sign to start reeling in the use (now the iPad is hidden in the study), but in the remaining limited time with the device, I think Endless Alphabet is one of the first iOS apps that John really enjoys.  Use of this app goes all the way back to our Paris trip when he was just a year and half.  At that point, John was just becoming aware that he could use his fingers to manipulate stuff on the screen.  Now, having just turned two, he blows through the levels and really gets immersed in the game.

The menu screen of Endless Alphabet

The menu screen of Endless Alphabet

Upon launching Endless Alphabet, John is prompted to pick a starting word.  There's a huge list that is alphabetically sorted.  Upon completing a level, he'll be prompted to go forward or backward a word in the alphabet to the next "level."

The main gameboard of Endless Alphabet

The main gameboard of Endless Alphabet

The main gameplay of Endless Alphabet involves sliding letters into their designated "slot" to complete the word.  It's just like wooden puzzle that your child might also have.

The level completion video that explains the word's meaning.

The level completion video that explains the word's meaning.

Upon getting all the letters into their place, the level is won!  At that point, a short little fun animation is shown that helps John understand the meaning of the word.  It's funny though, because often he just mashes the right arrow to get to the next word.

Settings is protected for adults-only

Settings is protected for adults-only

There's a Settings icon available from the main menu of the app.  There really isn't much in Settings except a couple of options to share/like the game, and a label indicating the specific version of the game (we're currently playing version 2.1.0).  I thought it was clever how they protect Settings for adults-only by requiring you to read the spelled out numbers and then type them into the pad.

John really loves Endless Alphabet.  I think that the other games from Originator Inc. will also be immensely popular.  When we get around to trying them out, we'll report back here.  There's plenty of app bundles available to help reduce the price further.

Top Five Favorite 3rd Party 3D Touch Home Screen Quick Actions

With the brand new iPhones, iOS developers can use 3D Touch Home Screen Quick Actions to provide a way for users to have easy access to frequently used functionality, right from their home screen.  As a user, all I have to do is 3D Touch (press hard) the app's icon, and a little menu pops up while the rest of the screen blurs.  From there, select an action, and I'm taken right to that place in the corresponding app.

The only drawback is that the app's creator needs to program this into their app for it to be supported.  Right off the bat, when I got my new iPhone 6s Plus, I started 3D Touching every app icon to see which had Quick Actions.  I was pleasantly surprised to find out that most of Apple's stock apps had Quick Actions (look for a future post on those).  I was a little disappointed to find out that hardly any 3rd party app supported Quick Actions at launch, but the thing is, I have a newly discovered engagement with some older apps on my phone, because I frequently find myself just 3D Touching each app icon in order to see if Home Screen Quick Actions were added in a recent update.  I feel like I'm striking gold when a menu pops up in an app that didn't previously have one.

Here's my current top five 3rd party favorite Home Screen Quick Actions

5. Instagram

Instagram was famously one of the first apps to implement use of 3D Touch across their app.  This included Home Screen Quick Actions.  There are Quick Actions to create a new post, view feed activity, launch the search screen with focus already in the search box, and launch the direct messaging interface.

4. Twitter

I'm falling back in love with the original Twitter app after having used TweetBot 3 for a year.  There's something to be said about the increased level of functionality that Twitter can provide by having access to many private APIs that 3rd parties aren't allowed to use.  Twitter provides three Quick Actions: create a new direct message, create a new tweet, and search Twitter.  "New Tweet" is my most frequently used option.

3. Overcast

I'm a huge Marco Arment fan, and a huge Overcast fan.  If you haven't listened to the Accidental Tech Podcast you really should, it's by far my favorite podcast.  Marco created Overcast, and recently, with the launch of version 2, made the app entirely free.  You really need to try Overcast if you haven't yet.  Amongst many other awesome features, Overcast includes an entirely automated social recommendation service.  You can see podcast recommendations from the circles of people you follow on Twitter based on their Overcast recommendations.  As a result, it's really important to have easy quick access to be able to "Recommend" a podcast that you like.  Marco makes this really easy by providing a Quick Action to recommend the currently playing podcast.  There are other actions for selecting another podcast in your playlist, launching the "All Episodes" screen where you can see a list of all available episodes, and a "Resume" button to start the current podcast playing again when it is paused.

2. DayOne

DayOne is a journaling system with apps available for OS X and iOS.  It makes it really easy to keep a journal.  In addition to text, you can add a single photo to each post.  You can have more than one post a day.  When my son John was born, I started keeping a daily journal in DayOne.  It's hard to keep the diligence to write in it each day, but seeing that I have 366 posts in DayOne, and he is just over two years old, I'm at least hitting every other day.  That's much better than none in my opinion, and whatever makes it easier to get those posts written, I'm all about.  That's why DayOne makes it to number two in the list.  It provides three Quick Actions: create a new text entry, create a new entry with a photo you select, or create an entry with the last photo taken.  Three Quick Actions to conveniently create a DayOne entry, awesome!


1. Omnifocus

While I'm still learning about the "Getting Things Done" method of planning out stuff I do in my life, I still find so much productivity out of OmniFocus.  Honestly, I use it as a glorified Todo app that syncs across both the OS X app and the iOS app.  My main use of the iOS version is to add items to my inbox.  Occasionally, I'll mark items as complete, but more often than not, I'll be somewhere away from my computer, and need to add something to my OmniFocus list.  The Quick Action to add a new item is priceless.  It makes it that much quicker to get the todo out of my head and written down so I can get back to what I was doing.  That right there is why OmniFocus makes it to number one on this list.  There's also options for launching the list of things to do today, another Quick Action for launching the forecast, and finally an option for launching the app to the home view.


Honorable mentions

Pinterest, Workflow, and Live GIF.

How To Build a Bookshelf From a Pallet

John loves reading. I think it's a great habit, and I definitely want to foster his passion for books. As a toddler though, he's a very "intense" reader, and the books often take a beating.  The cardboard books tend to last a lot longer than books with pages.  And as much as I loved Maisy Grows a Garden, those pop out cardboard figures didn't even last one session of John reading it by himself (we still love reading it, even without them).  We needed a place to keep some of these more delicate books, yet also keep them accessible for our nightly story time.  His room was long overdue for a bookcase of some sort. I love building stuff myself, so I had in mind to build a full blown bookshelf.  We didn't really have that many books yet, but I definitely wanted something that blended style, with craft and utility- and thus the pallet bookshelf.

Materials Needed:

  • 1 pallet (Home Depot by me was allowed to give one free pallet to each customer.  Each pallet can make two bookshelves.)
  • Can of wood stain - I went really dark
  • Sandpaper, 60 and 110 grit
  • 2.5 inch dry wall screws
  • Anchors (if you can't find a stud)

Tools Needed:

  • Saw
  • Sanding block, or powered sander
  • Brush (or something to apply the stain)
  • Level
  • Power drill

Construction:

1. Cut your pallet "short ways" right where John is pointing in this picture:  

The detached piece should look like this:

2. Pry off one of the boards from the larger piece, but don't attach it to the smaller piece yet.  This new piece will serve as one of the book holders (depending on the pallet that you get, you may or may not need to do this), but I want to sand it first.  It's easier to sand when not attached to anything.

3. Sand the single plank and smaller piece of the pallet.  I wanted to sand it enough to remove the discoloration and ink, but also wanted to maintain some of the "roughness" of the wood.  I decided to first use 60 grit, and follow it up with 110 grit.

4. Stain the pallet.  I'm still getting the hang of the proper way to ultimately treat wood in a way that I like.  I absolutely hate using paint thinner to clean brushes.  I feel like you can never get all the stain or polyurethane off the brush.  I'd rather just use a new brush every time.  As a result, I wanted to do a one-coat stain so I'd only use one brush.  I laid it on thick!  Probably a little too thick because it took forever to dry.

5. Reusing some of the nails I pried out of the pallet, attach the loose board to the front of the bookshelf.

6. Using a level and the drywall screws (and optionally anchors), mount the bookshelf to the wall in the desired location.  I hung it about 5 feet off the floor so it would be out of reach from John, and thus a good place to store the books with paper pages.

7. Fill it with your favorite books.  This is a good step for a helper.

TSBTS #2 - We're going on an airplane

This picture certainly doesn’t break any records in terms of quality or composition, but it’s the moment that was captured which really speaks to me.  I snapped this picture from my iPhone 5 while John and I were waiting to board our flight to Paris in early April 2015.  Honestly, I don’t know whether John was looking at the baby to the far right, or the staring in awe at the airplane in front.  Leading up to the trip, we were really getting John excited for “his big trip on the airplane” so I like to imagine that this picture is when he finally got to see one in person.  What’s funny, is that, this picture makes it seem like that’s the airplane we were about to board, but it wasn’t.  Our gate was like three further to the right.  The photo I ended up posting here is the HDR version of the photo, I’ll post some of the others in the outtakes, but you’ll see that they aren’t evenly exposed at all - especially the contrast between the sky and the dark carpet indoors.  HDR really enhanced the picture.

The backpack he’s wearing is another uniquely “Euro Trip 2015” thing.  It’s one of those backpacks with a leash, this thing was indispensable for the trip.  With John at this age, he doesn’t sit still for more than five minutes unless he’s eating or sleeping (so you can imagine how an eight hour plane ride was - that’s a story for a different post).  In this shot, the leash is actually attached to one of the chairs in the waiting area at the boarding gate.  John was still getting accustomed to the reach of the leash, and kept falling down as he was walking to the end of it’s reach and it got tight.

If I’m being picky, a couple changes I’d make if I could, would obviously be to have gotten the photo captured on my DSLR.  I’m still up in the air about what the baby in the far right brings to the photo.  I could easily crop it out, but I think it also helps me remember the moment- that there was this Italian (I think) family traveling as well.  I also don’t really like the big pole in the middle of the shot.  At the end of the day though, it was a special moment that passed quickly, and I’m just lucky I was able to capture it. 

Weekend Project - Workbench

I'll post a more detailed recap soon with a better pic, just wanted to get a little glam to brag about.  With some Home Depot holiday giftcards, and a new circular saw I got for Christmas, I built a new workbench for my garage.  I also added the lights, the pegboard, and the shelf.  It's hard to see in this picture, but there's a cubby for a beer fridge in the lower left under the shelf.


Are podcasts the new app?

If so, we better make sure that iTunes isn't the new App Store.

Podcasts are gaining popularity so fast with listeners.  Tools like iTunes and 3rd party mobile apps that let you automatically subscribe and listen to podcasts are really making it easier and easier for more and more end users to enjoy all the great content available in podcasts.  There's just way too many commercials on FM talk radio to be able to enjoy it, people are looking for an alternative.

Where do people go to look for an alternative?  A place they're already comfortable, iTunes.  For podcasting, iTunes is both a blessing and a curse.  iTunes provides a familiar store and content delivery system for listeners to discover new podcasts.  It reaches many, many people.  In addition, it allows listeners to rate shows, and provide comments on shows.  This is great in that it helps surface these opinions to others, and helps iTunes algorithmically determine where the high quality content is.

This is where the problem lies.

Listening to this week's episode of The Podcast Method on 5by5, I was disturbed to hear Dan Benjamin discuss some of the perceived ways that iTunes determines how to promote podcast shows.  It uses a combination of ratings, reviews, downloads, and subscriptions as input into some magic stew that outputs what the "New & Noteworthy" shows are.  This sounds alarmingly similar to the same mysterious algorithms that rank and promote apps in the iOS App Store.

In comparison to iOS apps, podcasts are in their infancy.  I have absolutely no hard data to cite here, but my pure gut feel, there are millions more iOS apps than podcast shows available today.  At one point though, there weren't so many iOS apps as there are now.  There was a time when the number of iOS apps available mirrors the number of podcasts available now.  At that time, the App Store's "Top" charts worked well.  The App Store was necessary in order for new iOS users to find apps that they would gain value out of.  Now, the App Store is a cess pool of SEO and gamification where the rich get richer, and the unknowns are suffocated by the 50 Flappy Bird clones that are pushed to the top of the search results.

Furthermore, when I recently submitted Brotherly Mobile to iTunes for publication, I was notified by Apple that it must be reviewed before it would be made available through iTunes. Yay, another big brother moment in which I'm now at the whim of Apple to deem my content appropriate for release through their channel, iTunes.  Throughout the iOS App Store's life there has always been cases in which Apple has changed their mind regarding the appropriateness of apps.  What was okay by Apple one day and making lots of money in the App Store is mysteriously removed from sale leaving the developer helpless and pissed off.

I would hate for this to happen with podcasts.

When does the monopoly on podcast distribution affect our rights for free speech?

If momentum for podcast popularity, through iTunes, continues to gain traction, just as app distribution through the iOS App Store, at what point do Podcasts out grow iTunes?  At what point does Apple's control of the medium become unhealthy?

I propose that we're already there.

At the end of the day, podcasts are just people speaking into a microphone, recording it, and getting it into other people's ears.  What can we do to help podcasts flourish beyond the constraints of the walled garden of iTunes?

We need something beyond iTunes to help distribute podcasts to the general public.  Who is going to step up?

The App Store will never be full

Reflecting on David Smith's Episode 206 of his podcast Developing Perspective, I don't believe that the iOS App Store is "functionally full" or will ever be full, assuming that Apple continues to make new devices and release new versions of their operating system.  New devices will have new features, new OS versions with have new APIs available through their SDK.  Each of these provide new opportunities for new apps to be imagined and created.  I think David unfairly dismisses some of Apple's latest additions to the iOS8 SDK during the summer of 2014 as trivial and barely impactful to the end user.  While APIs like HealthKit or HomeKit may not have reached their full potential, I think Today Widgets are a great addition.  I've been waiting years for a more interactive experience with my phone outside of the context of an individual app, and I think the Today View in Notification Center has a chance of providing that.

There will continually be new customers either upgrading their devices or customers entering the market place for the first time.  If the popularity of iOS devices continues, this means that there will be continued demand for the apps that run on the devices.  Continued demand for apps means that people will continue to spend money in the app store.  If people are spending money in the app store, there will be developers looking to provide value through new app features for the customers to spend money on.

Just as developers leave market themselves through retirement and changing interests, new developers will continue to enter the market.  With new developers entering the market, new ideas come with them.  New ideas can lead to fresh takes on existing ideas, or they can even lead to totally new products as well.

I like how David talks about how he reviewed some of the App Store's Top Lists to gain some insight into what's been popular this year.  I didn't do that.  I did think about the new apps that I've discovered this year: Day One, Overcast, Threes, Monument Valley, Waze, Untapped (to name a few).  Some of these were created this year, some weren't.  Regardless, I discovered them this year.  They might as well have been created this year from my perspective.  And consider Overcast for a moment.  If the app store was "full," one could have dismissed creating a new podcast app as something destined for failure - even Apple has a podcast app.  Well Overcast was created, and at least from me on the outside looking in, has been successful.  Marco Arment took a fresh take on an existing idea, and I love the result.

I don't think the App Store is full.  And as an end user of apps, I'm happy about it.

(I do think Apple could do a little bit to clean out some of the out of date apps that are no longer maintained.  I thought David Smith had some valuable insights on some improvements that could be made which he discussed earlier this year.

TSBTS #1 - John on a dam at sunset

Here's the first post in a series where I'm going to cover the back story on some of the photographs I've snapped.  I'm calling it "The Story Behind The Shot" or TSBTS.  I barely qualify as an amateur photographer, but I do enjoy it, and there's some interesting stories behind some of the shots I've taken.

This shot started with the lens that I had rented for the weekend. I needed a wide angle lens to use for photographing some real estate, so I rented a Canon EF-S 10-22 f/3.5-4.5 from prophotorental.com for the weekend.  (By the way, their service was wonderful, definitely recommend them).  With the wide angle lens, I was also hoping to catch some long exposure star trails overnight, but unfortunately, it was a full moon all weekend, so there was no possibility that I could get anything good with that much light pollution.  Driving home from work on Friday night, where I knew the lens was waiting for me on the doorstep, there were some beautiful colors in the sky right around dusk.  Seeing these colors was what triggered the idea to take some sunset shots the next day Saturday out in Marsh Creek State Park.  Fast forward 24 hours.  I took my two best buds, John and Gunner, out into the park.  There's a earth dam in the south west corner of the man made lake that would provide some big views of the lake and the sky that would be great right at sunset.  It was about a 3 mile hike away, and with John in tow in the backpack carrier, I needed to leave extra time to get there and setup.

Once we were in place for the shot, I took a couple practice shots with my favorite subjects.  I knew I wanted to ultimately get a good shot of at least John, and if possible, include Gunner.  These guys can't sit still.  As a result, I needed to keep a high shutter rate so the subjects wouldn't be blurred as they would inevitably be moving around.  Additionally, I wanted a fairly deep field of focus so the full landscape would appear in focus, that means stopping down (increasing the F-stop number) and thus reducing the amount of light getting to the sensor.  This left me at 6400 ISO.

Right as the sun was about to go down behind the trees, I got John all setup, and grabbed what I'm calling a near-perfect shot.  The dam road provides a nice line to the sunset, and John is right in front smiling.  The weather could have cooperated better, I wasn't impressed with the light cloud cover that prevented those bold colors that I saw the night before.

Here's some outtakes:


Brotherly Mobile

Two firsts in one day.  I'm excited to finally have found the time to get my blog online, and what's even cooler, is that I can use my new blog to announce that I've started my own podcast called Brotherly Mobile with my co-host Matt Rein.  The podcast will focus on things related to mobile software development.  We have a pretty good initial list of topics, and we're still feeling out the ropes related how to sound good on a mic, how to keep the conversation flowing, and how to properly edit the result.  At the end of the day, I totally agree with Marco Arment's opinion that you should simply "care" about what you do, and if you care about putting effort and energy into your podcast, that it can go a long way to sounding good, even without spending hundreds of dollars.  You might be wondering, "why would you start a podcast?"  Well, I think Matt and I have really good conversations about software development during our carpool, and what better than to get these out into the open and share them with the community?  I think we're also firm believers in feedback, so we'd also love to hear what the community has to say regarding what we're discussing.  Contrary to Dave Wiskus' Podcast Intervention, I feel that this is the information age, and getting content shared and on-the-record digitally only improves the world.  For one to hold back on blogging or podcasting for fear of copying someone else, or fear of not being innovative enough with regard to the medium that the content delivered feels overly critical and not constructive in terms of recognizing the value of simply getting the content shared to begin with. 

Regarding the blog, I'm still trying to figure out what content will end up here, but probably stuff related to my hobbies and work (iOS app creation).