Let’s get technical!

I haven’t talked about what my app will be yet. And I have been very shy on detailing my progress. Even though it’s the main purpose of this blog, it often felt worthless… I don’t write as much as I would want to, so when I do, I talk about things that seem more useful.

Today I came accross an issue. Actually I have been having this issue for a few days, but until today, I could avoid it. So I did.

I tried to debug as much as I could, checking the debug navigator, outputting everything that seemed relevant to the console, trying to analyse the call stack so I could figure out what the app was trying to accomplish… Because of course, the error I got was EXC_BAD_ACCESS code = 1. Which means: you have a memory error, now find it.

Where do I go to? Being an indie developer, I can’t turn to a collegue. I don’t do code review. An old collegue of mine use to help me out via screen sharing, but he’s charging me… I finally turned to my best friend stackoverflow.com. I asked my question, trying to be as detailed as possible. But I am always shy to ask a question there! I am always afraid I will look stupid, too new to do anything useful, or just helpless! I am always glad someone asked the same question I have before me so I can just read the answer and be happy!

I create custom views on one of my UIViewController. These views have two labels that I set with specific values; one int and one string. In the first iteration of the UIView class, the int (called number) was an actual int. So the property was declared:

@property (assign, nonatomic) int number;

Later on, I changed number to be an NSNumber, but didn’t change the property declaration. It caused a memory error when the view was accessing _number to set the label properly. Changing the property to:

@property (strong, nonatomic) NSNumber *number;

fixed my issue.

Back to coding!

Doubting myself

Continuing without doubting myself is hard these days. I don’t doubt myself on a technical or programming point of view. I doubt myself because of money, or lack thereof.

Lastly, I have been spending quite some time on my app. The efforts are not wasted! I now have a very, very basic functionality in my app. Too basic to talk about, or publish, but enough to distinguish it as an app, and not some kind of primitive form.

Like I mention here, I log my hours. And one of the impact is I see all the hours I am putting into this project that I won’t charge to anyone. I like billing my hours.

At the same time, when I peek into job offers, I often see: “published at least n app(s) to the AppStore”. (Example here or here. Note that these examples require more experience that I have anyway, but I you get the point! I also see this requirement for low experience jobs). These efforts are not wasted. By any measure.

So on one side, I am currently working on a project that won’t pay my next rent, nor the one after that. But on the other side, this will be a key asset when looking for a job.

Another reason to keep me coding this non-profitable project is a conference that will happen here in Montréal (Québec) next April. If my app is ready, it will be presented… More on that conference in upcoming posts…

Counting time

From the -almost- beginning of the project, I decided I would keep a record for hours I work on the project. I thought (and I still do think) that it would give me a better idea of hours it takes to create a simple app.

More precisely, I would be better at estimating the time it takes to create one feature, fix one bug.

So each time I am sitting down to work on my app, I am counting time and log the activity I am doing. I don’t know if there’s anything else relevant to log?

I think there is a lot of benefits from doing that. Plus, I actually have numbers in my face telling me I didn’t spend that much time on the project! So let’s get going!

A new player worth talking about

Sooner today, Ubuntu launched is new OS for tablets.

I saw the demo, and was pretty excited! I had already seen the presentation for the phone a few weeks back and I was curious. It seemed promising. Something worth digging into. The mobile Ubuntu OS has a non-commercial vibe that’s appealing. But it’s more than that. They come across, to me, as modest. They seem to say: we did it right. We don’t need marketing fireworks. It is integrated, beautiful, fast, secure. We offer an alternative.

That last part is important to me. Tonight, I really feel Ubuntu offers an alternative. And without all the marketing bull surrounding its product, it feels clean, refreshing.

I feel invited. Appealed. Charmed.

And I responded to that invitation by creating a Ubuntu 12.10 partition on my iMac and by downloading “quickly“, the start of the IDE to create mobile native apps.

I must stay focused on my goal, of course!

Note: you can follow them on twitter: @ubuntuappdev

Learning Resources – Part II

In the first part of this series, I talked about lynda.com. I did so because I had just reactivated my account. I just completed a really well done html course given by Bill Weinman.

I will now jump into the “free world” and talk about iTunesU. With more than 350,000 files, hundreds of millions of downloads, and available in all countries where iTunes is available (except in Romania), iTunesU deserves more press. Apple is putting a lot of efforts into education, and I love it. I have started my online studying with an iPhone programming class from Stanford, and this platform remains my favorite one.

The way of delivering content has changed significantly over the years: it basically started as a glorified podcast. Filters on both ends make sure not everyone can publish, hence assuring some quality in the content (although really not consistent), but also can allow institutions to restrict access to their content. Universities can take advantage of the platform as an academic tool for their students.

As of this writing, iTunesU is available as a universal app for iOS device. You can also access content from iTunes on your desktop machine.

What’s great about the iOS app is that courses are organized either in a chronological way or by content. You can check what you’ve seen so far, so you have a good overview of your progress. The catalog is easily accessible via the library, the same way you access the music store from the iPod app. You can also download content in advance, which is a huge plus for me (it was my biggest critic of lynda.com).

In the same breath, I will also say that this “download” feature in iTunesU drives me insane. Let’s say you follow a course that’s already complete, so all the material is available for you to download. You are home, with a high-speed connection and a decent bandwidth, so you decide to download 4-5 lectures. Days go by, you listen to the first 2 lectures and you really enjoy it. Then you take the subway, open iTunesU to realize that all the content you’ve downloaded vanished into thin air. Gone. Even the lecture you are in the middle of.

You use to be able to keep the videos you had already downloaded before, but not anymore. Downloads have an expiration date.

Other than this, which may be a detail for you, if you are always in range of a high-speed connection, the service as a whole is awesome.

Right now, I am enjoying Jerry Cain’s Programming Paradigms course from Stanford. He explains the basics so well and so thoroughly, it is worth it to revisit them. Paul Hegarty’s Coding Together: Developing Apps For iPhone And iPad is also great (I followed this same course but from previous semester). M. Hegarty knows the iOS SDK inside and out, and explains them clearly. Note that these are from Stanford University: they really have the best selection in computer science (at least in my experience). The quality of the course is very good, but also the quality of the material (videos and slides), which also makes a big difference. Be careful for audio-only content: only having the voice of a recorded class that you did not attend is not that helpful. I’ve seen some in my research for this post.

My take on BB10 (and other mobile OS)

I am known for being an Apple fan. One of my nickname is MacMan. Yes I do love the Apple ecosystem, but with time I came to be more nuanced in my opinions. So I don’t look down on Android, and if BlackBerry is offering a good phone, let’s give this player a chance.

My principal thoughts is that there was only 2 major innovations in smart phones: the blackberry back in the days, bringing you Messaging with a qwerty keyboard and email on-the-go, and the iPhone, in 2007, with its touch screen and (in 2008) with its AppStore, which opened the world to a whole new level of smart phones. The apps gave you a computer in your pockets. Since then, we’ve seen some very good, needed and appreciated improvements, but improvements nonetheless. 

Android basically copied the iOS, but done in a slightly different way. Android didn’t invent anything, unless I am missing something big. I am not denying their bigger share of the market. But at the same time, I come across this. And this is the third article repeating history all over again. Openness in software is great, but it comes with a price. And personally, if I download an app from the official store, I want to know it won’t copy my entire digital life on someone else’s server.

Worst for WindowsPhone; WP7 was never adopted by more then the family of the developers, and WP8 is so late in the game, I am still wondering why they bothered. It has been well received by critics, I must say, but that doesn’t seem to sell devices. (Remember how bad the original iPad was received?)

I also want to mention Ubuntu new upcoming smart phone OS. This looks very interesting and I will give it a look when it comes out. I don’t know why, but I am excited by this! Plus they bring an interesting philosophy to the mobile OS, which is: if you can see it you can use it. It’s not an innovation, but it’s really interesting.

Now for Blackberry. Many of us gave RIM for a dead walking company, and in a sense we were right. They changed their name to insist on a new beginning. RIM is dead, let’s welcome Blackberry. After so many delays, it’s finally here. But from what I’ve read so far, critics are happy because BB10 has everything iOS or Android have. Wow. Get out of my way so I can rush to the store and buy one. They will bring back physical keyboard. For many users it’s a great news, for me it’s a source of discouragement and disbelief. I never could understand how someone could write with that thing. Plus, when you don’t need your keyboard, it’s still there. They will even 70 000 apps on launch day! Wow, that’s awesome, but those are Android apps that are a few years old. As a developer, I will not invest time on this platform, that’s for sure. BB10 might keep the company alive for a while, but they won’t be back as Smart phone Kings. Not with this.

We all get excited when something new comes up, but I am waiting to be really excited… waiting for the next innovation. I mean the next huge step. Something that none of us has imagined yet…

I believe developers are influenced in their choice of platform by popularity of the phone and what they personally love. As of myself, because of its popularity, I will eventually delve into Android app development. I will also take a look at Ubuntu mobile phones, because it looks awesome! But iOS will still be my primary mobile OS of choice.

Learning Resources – Part I

Like I mention in my About page, I am currently a student in Computer Science. So of course I learn a lot there, but of course it’s not what I’ll talk about in this series of posts! I also learn a great deal with a few resources that I cherish a lot. I will go through each of them in different posts.

Today I want to talk about lynda.com (a free ad for them, I guess…). It will be the object of Part I of this series mostly because I reactivated my subscription today. So Lynda.com is subscription-based service, accessible through their web site or via their iOS app. They have many categories, but I don’t care about all the non-developer videos…

I subscribed the first time to go deeper in my knowledge of SQL. I actually never finished that particular course. Nonetheless a very good one. But I wasn’t spending enough time on the lessons at the time so I stopped my subscription a first time. It has been an off/on relationship since; I keep going back whenever I have a little bit of time… or I feel dedicated enough to accomplish whatever I have in mind to spend the time learning what I need to learn. This time, I want to learn web development. As I mentioned in a previous post, I need a web site to accompany my eventual AppStore app.

As a service, it offers a good variety of courses. They all follow the same structure, so the quality is consistent. New courses are added on a regular basis, and they keep up with new technologies. Also, the instructors are very good!

On the other side, I wish they had more advanced courses. There is a lot of “Essential training” (that I appreciate greatly), but I also wish for more advanced courses. The worst aspect of it all is a small detail on their iPad app – small detail that makes a great difference for me: videos are streaming only, and very, very last minute. So you need to have a constant, high-speed internet to view the courses. The thing is: I spend a lot of time in the subway system. Here in Montreal, the subway system is connectionless. And it sucks. (Tell me we’re not the last one!) If I could buffer up a few lessons in advanced, it would do a huge difference in my experience. I can also think of people going in their backyard in the summer where their connection might be slower or non-existent.

Otherwise, they made great improvement on their iOS app and it’s now, in my experience, a stable and reliable release.

Oh, and I am not rating. This is my experience, from my needs. I reactivated my subscription, but this is one of many resources: that should speak for itself…