Monthly Archives: July 2017

Well Played, Udacity!

This past week, Udacity was offering a “Discovery Week” special of 50% off tuition for the first two months of the iOS Developer Nanodegree. I was very, very tempted. I however did not take advantage of the offer for the following reasons:

  • I set out on this task to complete the requirements for the Nanodegree without signing up and thought it important to finish the experiment as originally laid out
  • I am not yet finished
  • Although I appear to be on schedule for finishing in the next month, I never know what might prevent me from doing so
  • Every month I am not signed up for the Nanodegree is a month I don’t have to send Udacity any money
  • In the past, Udacity regularly offered me the opportunity to sign up for the Nanodegree with the first two weeks free, which is cheaper than 50% off if I finish in the first two weeks

What would have tempted me enough to abandon my original plan and sign up? 50% off the first three months probably would have done it.

I have to say that I don’t think the subscription model is the right one for this Nanodegree. I would think a better means of monetization would be a fixed price with a six month payment schedule. If you finish early and want your Nanodegree earlier than six months, then pay the remaining tab early. If you need to drop out for a while and can’t afford the payments, fine, pause the payments and jump back in when you can afford it.

Yes, Udacity would potentially have to support students pursuing the Nanodegree beyond six months without additional funds coming in after that time (because they would have already paid in full), but I think those people would be few and far between and not likely to linger too terribly long. Getting their Nanodegree is incentive enough; they don’t need further financial incentive. If there is a significant cost associated with these stragglers, it can probably be spread across the student body (in the form of slightly-higher tuition) without negatively impacting the number of people signing up.

Set Title For State

This announcement brought to you by every dynamic UIButton with truncated text ever:

When using a button (UIButton) with dynamic text, I will use setTitle(_:for:)
When using a button (UIButton) with dynamic text, I will use setTitle(_:for:)
When using a button (UIButton) with dynamic text, I will use setTitle(_:for:)
When using a button (UIButton) with dynamic text, I will use setTitle(_:for:)
When using a button (UIButton) with dynamic text, I will use setTitle(_:for:)
When using a button (UIButton) with dynamic text, I will use setTitle(_:for:)
When using a button (UIButton) with dynamic text, I will use setTitle(_:for:)
When using a button (UIButton) with dynamic text, I will use setTitle(_:for:)


The Grumpy Old Programmer and MapKit

I really ought to rename my blog “The Grumpy Old Programmer”. Today I am going to pick on Apple and MapKit.

Now, MapKit had some issues at the start of its life. Fortunately, those are in the past. I have actually found MapKit to be an enjoyable experience so far. But I do have one issue with it that I just came across.

You can tell MapKit where you want your map centered and how tall it should be (in degrees latitude) and how wide it should be (in degrees longitude). MapKit will supposedly give you a map as close to what you requested as it can, but it can’t guarantee that you will get exactly what you asked for. This is because MapKit is going to fill the available space with the map while still maintaining the Mercator projection. The upshot of this is that a full-screen display can only display half of the earth at a time.

The Google Maps API will readily serve up not just the whole earth, but the whole earth repeated several times over. It does this by clipping off the poles and letter boxing the map to preserve the projection.

As an added twist, I really want a different center to the map based on orientation. For a portrait orientation, the default map at minimum zoom can be centered on (0, 0) and you will see everything of interest (in that hemisphere, anyway). But in landscape orientation, the discrepancies between the Northern Hemisphere and Southern Hemisphere become obvious. I would much rather see more of the northern land than the southern seas in this case. That’s the Earth’s fault, not Apple’s. But again, this is a non-issue with the Google Maps API.

Fortunately, there is only one time when I want to set the center and size of the map, and that is at startup. The rest of the time, I am going to preserve the last location and zoom level that the user set. So, my apologies to Asia and Australia. Perhaps someday the iOS version of Steampunk Road will show your your half of the world as well as mine.

A Debugging Class Is Needed

Looking through Udacity’s student forums, I think they should add another course that is devoted to debugging. They showed some promise in the initial lessons of the first course by displaying some common errors and how to handle them, but since then we have pretty much been left out to dry on our own. That is partly because debugging is very hard, and partly because it seems like every bug is a unique issue unlike any other.

Of course, that is not true. Bugs can be categorized, and basic general steps as to how to approach debugging can be described and demonstrated. The opportunities for practice assignments are enormous. And practice is the one thing that will really make a difference in how well a programmer can debug. It is so much easier to catch and fix a bug that one has already seen before.

How to Make an iOS App: What I Learned Today

I started building my app today. I learned a lot about sending notifications to iOS devices using Firebase. I learned a lot of other things about other stuff as well as I set up all of my tooling. There should be a course just for tooling included in the Nanodegree.

It is somewhat interesting to note that, in all likelihood, you will learn far more outside of the Udacity video lectures than inside. I think that to a certain extent, this is just the nature of the beast. Most people learn more by doing than by watching.

How to Make an iOS App: Course (Lectures) Complete

I have completed watching the lessons for this final course in the Nanodegree program, which means I have finished all of this Nanodegree’s video lectures. I still have the last two projects to finish: “Virtual Tourist” and my capstone project app “Steampunk Road”.

So it has taken me precisely four months to get to this point. Using my timeline for my final project, it looks as though it will be another two months before all of my work for the Nanodegree is complete. Of course, the duration from start to finish will be different for everyone, and especially different from mine if you are not working full-time and have an active family life.

Would I recommend the courses to aspiring developers? My answer would have to be a qualified “Yes”. There is much to be appreciated here, but there are also many faults. Be prepared to use at least one outside source to help you, or at least lean heavily on the course forums.

Would I recommend the courses to established developers? Not necessarily. Although you can probably learn something from the videos, the flaws in them are more pronounced to those who can understand what is going on.

I still have a lot of reflection to do for that final project, so I will try to post those here over these next two months (or more).

How to Make an iOS App: Personal Motivation

Q: What are you most passionate about?

A: I have no idea what I am most passionate about. I have many passions, including mathematics, physics, music, theatre, and computer programming. I am also passionate about my family. On any given day, one or more of those will most likely come to the fore.

Q: How might an app help?

A: Apps can help me explore mathematics, play with physics, create music, and learn programming. Some apps, like multiplayer games, help me interact with my family.

Q: Where are there frustrations or pain points in your life?

A: Time

Q: How might an app help alleviate them?

A: An app or apps might help me manage my time better, but I doubt that an app can provide the vast swaths of time to explore that I really crave.

How to Make an iOS App: What Makes a “Good” iOS App?

I have found the information I need to make the “Virtual Tourist” app, plus I now know how to actually use the “Virtual Tourist” app provided by Udacity on Apple’s App Store, but I am starting the final course of the iOS Developer Nanodegree whilst also working on that app. Part of “How to Make an iOS App” is answering questions, some of which I will answer here and others which I will probably keep private to protect my intellectual property.

The first question is “What makes a good iOS App?” The answer is very much the same as the answer to the question “What makes any product good?” And the answer to that question is, “You feel better after using the product (app) than before.”

But that sort of begs the question, “What about an app makes you feel good?” And there are many answers to that question. An app that makes you feel good is probably:

  • Simple
  • Intuitive
  • Beautiful
    • Visually
    • Aurally
  • Engaging
  • Entertaining
  • Challenging (at least for me)
  • Inspiring
  • Tells a compelling story
  • Humorous

And of course, that list could go on and on. Plus, the list will most certainly be different for different people. It might also be informative to list the opposites, to show what an app should not be:

  • Unnecessarily complicated
  • Unintuitive
  • Ugly
  • Dull
  • Boring
  • Unchallenging
  • Uninspiring
  • Pointless
  • Humorless

What Online Learning Needs

Whilst thinking about the shortfalls of Udacity’s (and virtually everyone else’s) online classes, I struck upon this brilliant thought. Online learning needs the equivalent of a “Dragon’s Lair” video chat bot. While you are watching an instrutor video, you should be able to raise your virtual hand with a question, have the video pause, cut to a video of the instructor saying “Ah, you have a question. Yes, what is it?”, then you type or speak your question (“What is SQLite?”), the video cuts to a pre-recorded answer, and then cuts to the instructor saying, “Are we ready to return to our discussion?”, after which you say “Yes” and the original video resumes.