iPhone

The tiny little gadget I use to control my communication habits and feel less cluttered.

How To Redeem A Promo Code In iBookStore

Recently, Apple allowed authors with books published on their iBookStore to use promo codes. A stable and very popular feature for iOS developers who published their apps in AppStore, promo codes were unavailable for iBookStore until now. I confess I was a bit confused on how to use these promo codes, since there is no iBooks app on Mac OS. Usually, I was using my iTunes on the Mac to redeem the promo codes for apps in AppStore, but without a similar thing for ibooks, I just had to scratch my head a bit.

Fortunately, it proved to be a much simpler process than I thought. In fact, it has only 2 simple steps. Here we go:

Step 1: Find The Redeem Button

For that, you should open the iBooks app (on your iPhone or iPad). If you’re on the “Library” mode, browsing the ebooks you already bought, touch the “Store” button and make sure you’re on the Apple store and not on your local device. Once you get there, touch the first tab button in the navigation tab bar on the bottom of the screen. It is the one called “Featured”. Now scroll all the way down to the bottom, and voila: the “Redeem” button magically appears.

Step 2: Enter Your Promo Code

Now, after touching the “Redeem” button, you’ll be taken to a new screen, pretty much similar with the one below:

After you entered your promo code, you will (hopefully) get a message saying that your item is downloading. What iBooks does is that it automatically matches the product with your promo code, looks it up in the store and starts downloading it. In a few seconds, if you have a good internet connection, your book will be available in the Library. Here’s how your iPhone screen should look like after the entire process finished:

That’s it. :)

Blogging With An iPhone, An iPad And iAdd

Posted on Apr 18, 2011 in Assess Decide DoBloggingiPhone by
5 Comments

(Every once in a while I have this urge to write a shiny, picture-rich blog post. The following post is one of those.)

The other day, after the storm passed away, I surprised myself thinking at how my digital nomad life has changed completely the way I work. I don’t have an office anymore – and I do enjoy this every minute, after more than 10 years of working for my own company, in my own office – and that means I work pretty much everywhere. The distinction between work and regular life slowly faded away. It’s not like I’m working anymore. I spend quality time in a coffee shop for a few hours, but at the same time (and in the same place) I do write blog posts, write code or do consulting.

Although it may seem like a very comfortable way of living, it’s not even remotely like this. It’s very easy to get distracted and stop creating value. As you may imagine, is very important to keep things under control.

So, how I manage to actually run a fairly popular blog, do consulting on a regular basis, create iPhone apps and self-publish my ebooks? The short answer: I keep myslef organized. The long answer: you just started to read it :) . What follows is a very accurate reconstruction of what it takes for me to write a blog post, from idea to publishing. Sepcifically, this very blog post. :-)

On the technical side, it involves and iPhone, and iPad and iAdd. Of course, a Mac is necessary for publishing too. As you may know, I am the creater of iAdd, so I am definitely biased here. It’s not like you can’t use something else, it’s just that iAdd really works for me.

Capturing Blog Post Ideas

Being on the run pretty much anytime, I started to capture my ideas using my iPhone. In the beginning I used a mind-mapping software, but now I use iAdd. iAdd let me save in it 4 types of information: tasks, projects, ideas and events. Every time I have a blog post idea, I fire up iAdd and quickly jot the title of the post:

A blog post is more likely to be created as a project. After I added the project, I start to add short tasks to it. They are more like the building blocks of the entire blog writing process, not only paragraph sketches or ideas.

Once I feel I’m ok with it, I sync my app to Dropbox. The newly added project will be safe and, more than that, it will be available next time when I sync with my iPad too.

Managing The Actual Process

Now, suppose I’m back to a more comfortable place and I have a little bit of time. I take my iPad, fire up iAdd and do a sync. After the sync, my project from iPhone will be magically available on iPad. (Just click on the following screenshots to enlarge them).

The first thing I do once the project is available on my iPad is re-ordering tasks (I can reorder tasks on the iPhone too, but usually I don’t have time for this, plus, on the iPad is more space).

After reordering, I quickly peruse the tasks and if I feel the need to enhance or complete any one of them, i do it.

Of course, now it’s time to add more details, so on the iPad I add the more complex tasks to the project.

At some point, the blog post project will be finished. From this point, it takes two different routes. First of all, the entire project gets sent by email (you can do that from inside iAdd). Like that, I will have all the ideas on my Mac too. I usually copy and paste the email message in my blogging setup.

But moving the work completely on the iMac will undermine the power of iAdd. So, the second route the project takes is to be sent to Decide. This is how it looks when it’s sent to Decide.

As I already told you, not all the tasks are involving writing. Some of them are atomic actions which can be performed anytime. For instance, in this specific project, I have to make screenshots. This can be done anytime. It’s an atomic task that can be performed any time I have 15 minutes free. So, I start to add contexts to all the tasks in the project.

And also I add due dates to each task.

After I finished, all the tasks are ordered ascending by time, giving me quite a clear idea about what I have to do.

One more thing. I may keep the project in Decide for as long as I want. And usually I do. I don’t write all the blog posts at once. I have other projects too. But once I’m committed to a project, I move it to Do. All the tasks that have been added in Assess, completed with contexts and due dates in Decide, will show up in my time based views in Do. Meaning that if one of the tasks is due Today, I will have it under my Today tab in iAdd. Along with the project title too. Once done, the task can be crossed off.

But if I feel a little bit lost, I can also look at the entire project in Do. I can see all the remaining tasks, and, if I want to edit their due dates, I send the entire project back to Decide.

Well, that’s pretty much it. :) Expected more? Sorry to tell you that I like things simple and effective :-)

Conclusions

So, I capture all the ideas on my iPhone, I manage the entire project on my iPad and then I publish on my Mac. If I add together all the tasks involved in creating a blog post, I think I am somewhere between 1 and 3 hours for any of the blog posts I manage like this. It doesn’t happen in one chunk, as I told you, because my work time is unusually fractured, but the good thing is that it does happen in a consistent way.

 

Assess – Decide – Do: Natural Productivity

More than a year ago, I was traveling to Thailand. It was my first trip to South-East Asia. I clearly remember the colors, the smells, the images and the overall excitement mixed with curiosity. I had an incredible time during that trip. I don’t know if it was the visual shock or the cultural difference, the jetlag or my raw food diet (at that time) fact is, at some point during that trip, I had a sort of a revelation. It came in the form of three words: Assess – Decide – Do.

During the trip, those words repeatedly came into my mind until I realized they were my unconscious response to a lot of questions. How do you get up in the morning? How do I get to that place I want to visit? How do I get to the airport? How do I manage to write the blog posts I planned to write on this trip? All those questions stacked up somewhere in a darker corner of my mind, until they got a sudden and unexpected response. Assess, Decide, Do. While my conscious mind was busy absorbing all the fresh experiences, my unconscious mind had to come up with an answer to all those questions.

During that trip, I started to follow that short sequence of activities more and more, hour after hour, each and every day. I started to calm down and assess what I want to do, then decide if, when and where I want to do that, and then do it. I practically started to slice up my reaction to outside stimuli following this pattern. First assess, then decide, then do. Somehow, it seemed to work. The events were flowing down easily, I was focusing exactly on what I wanted to focus, while still maintaining a high degree of awareness. As I told you, I still remember the colors, the smells and even the noises.

After I got home, I put those words apart. There were things that needed to be done, bills to pay, meetings to attend to and so on. But somehow, the words kept popping out in my head. And somehow, I started to apply that sequence to other parts of my life. I started with work. In a matter of days, I started to experience a smooth flow and a surprising increase in my productivity. I said surprising because I’m not a lazy person. And then tried to apply it in my personal life. And then in my relationships. The more I practiced it, the better I became at. Eventually, I took this to a whole new and bigger level. After a few months of trials and errors, I was sure that I was into something really good. And by lack of any other name, I named this a “life management framework”.

What’s This Ebook About?

After I realized that I finally discovered something, I started to write about it. There were a few articles on the blog, all of them very well received. I started to incorporate feedback from my readers in it and also started to share these ideas with my friends. Basically, everybody who was exposed to the ideas seemed to “click” with the approach. At some point, when all the structure of the framework was clear, I started to build an app for it. Exactly, an iPhone app. There must be an app for everything, right?

During the app building process, I applied the same framework rules: I assessed, I decided than I did what seemed to be necessary to move the app forward. It took me roughly 30 days to build that app, without any prior knowledge of Objective C. It took me roughly 30 days to build that app, without any prior knowledge of Objective C. (No, this was not a mistake, I deliberately wrote that twice. Just to get it right.)

Now, the app is in the AppStore for more than 2 months, the latest version syncs your data with Dropbox, there is also an iPad version and so on. It may look like I started a business on this idea and to a certain degree, that’s right. But this perception of business will have to stop at the level of employees, though, because I don’t have any. I did everything by myself. Everything. The app, the blog, the promotion. Everything. Oh, and in the process, I had to handle the reconnection with my 13 year old son, I had to take care of my 4 year old daughter and also manage the separation details from my ex-wife. Just in case you’re thinking I had nothing else to do than to write on the blog, on the ebook or write Objective C code.

And still, every morning when I look in the mirror I see a healthy man, doing what he loves to do and enjoying a life of balance and fulfillment. This is what this ebook is about.

Let’s Get Practical Here

Now, if you made it till here, you must need some real life data, not some motivational stories. You’re right. I have what you need.

The ebook is structured in 3 levels: the conceptual one, the practical exercises and the tutorial for the iPhone/iPad app.

You start by learning from a very high perspective what Assess, Decide, Do means, how your being is acting on each realm and how you can identify your life imbalances using only the 3 aforementioned realms This will sound more like what I write on my blog on a regular basis. Many chapters are sharing large parts with the articles already published.

Then, in the second part, you take the framework to a real life ride. You start to apply it to relationships, to personal crisis management or to strategies for dealing with interruptions. This is the practical stuff. Once you have the concepts clear, you start to apply them to various areas of your day to day life.

And finally, in the 3rd part, you actually see, screenshot by screenshot, how to use iAdd for iPhone. This is the “tutorial” part of the ebook. I felt like a practical section was not enough. I needed something very “in your face”. Step by step. That’s what the third part is.

That’s it. This is the ebook.

I said it before, I will say it again: I suck at writing long, boring and deceiving sales pages. I simply can’t afford to insult your intelligence with all kind of cheap incentives, when I know that you know better than me if you need this ebook.

What Others Are Saying About It

As you may already know, the ebook was on pre-order for 48 hours on my blog. Since I wanted to have some feed-back, I kindly asked some of the people who read it to give me some impressions. These are real people, with real blogs and real lives. And, to my surprise (well, not quite ;-) ) they gave me feedback for both the ebook and the app.

Ian Peatey – QuantumLearning.pl

You will like the book if you:

  • want to know how Dragos is so damn productive
  • want a method to help you get productive yourself
  • want to know how Dragos is so damn laid back AND productive at the same time.

You will be wasting your money if you:

  • hate Dragos and wish him to live in poverty for the rest of his days
  • are perfectly content with both your productivity and level of laid-back-ness.

Lyman Reed – LymanReed.com (iTunes feedback)

iAdd is an excellent app if you want to get out of the “add things to a list and then cross them off” world of productivity. It incorporates much from the GTD world (such as Contexts), but really shines in the area where GTD leaves off – where we assess what’s important to us and make decisions based on what we want to do.

The app is based on Dragos Roua’s Assess-Decide-Do framework – without an understanding of this framework, it could easily be mistaken for just another to do list with what seem like some extra useless steps. I strongly suggest that the user takes the time to learn the framework (links are in the app) to get the most from it.

It’s now my go-to iPhone app for productivity, especially when it comes to using the Assess realm for idea collection. It may even have convinced me that purchasing an iPad would be worth it – unless of course Dragos is planning on creating a version for Windows.  Or even better, a Google Chrome extension (hint, hint…)

Eric – EdenJournal.com

Assess Decide Do is a revolutionary way of approaching Life Management.  It’s more than managing productivity, it’s a framework to underlie day to day decision management.  Assess Decide Do clearly organizes the pre-decision, the decision, and the post decision (or doing.)   Decision making can be a challenge, but Dragos makes it easier by creating a process that allows for all the information gathering to happen first, and then the decision follows a simple go/no-go format.  I have struggled with many forms of organization, and I despise task lists.  Assess Decide Do is a great alternative to the task list, and is really a much more comprehensive solution to organize my life.  It really is a Life Management Framework.

Ruben Berenguel MostlyMaths.net

When I read about the ADD framework in Dragos’ blog, or about the iADD application, I wasn’t impressed. Maybe it was not the correct time, or I just didn’t get it at the moment. Then, I was offered to review the ebook, and reading chapter 3 opened my eyes. I definitely needed to buy that app: it was my workflow. Said and done, I bought it a few hours ago and can’t stop thinking about how much attention to usefulness Dragos put in it. If you have found other to-do apps useless, this is for you.

Pat Flynn – SmartPassiveIncome.com (iTunes feedback)

I agree with one of the other commenters. This really helps take the GTD mindset to a whole new productivity level. Understanding which tasks are most important to us is key, and I’m really glad I have an app to help me with this now, because I often lose my way throughout the day. Thank you!

***

The ebook is only 27 USD and you can buy it by clicking here.

Buy Now

I do hope it will give you at least a fraction of the benefits I had from creating it.

iAdd For iPhone / iPad Now Syncs With Dropbox

It has been a very exciting time for me in the last few weeks. Not only I finished another ebook, one that is very close to me, called “Assess – Decide – Do: Natural Productivity” but I also finished a brand new version of iAdd, my iPhone / iPad implementation for the ADD framework. As a matter of fact, I’m still in the “eye of the hurricane” as we speak. The ebook is currently on pre-order now (for the next 20 hours and something) which means you can still get it at a discounted price and the latest version of iAdd for iPhone / iPad, 1.2,  is live on the AppStore. So, I’m right in the middle of action, knowing that the actual launch of the ebook will happen only after a few hours.

Yes, We Run On iPad Too

Noticed how I silently added the iPad suffix too? Well, that’s because iAdd is now natively working on the iPad too. The good news is that you don’t have to pay extra bucks for it. iAdd is a Universal app. You pay only once (and you pay 3.99 USD, for a limited period of time) and you get 2 apps. If we take into account the iPod users, well, you get 3 apps in only one.

That’s one of the most important features of the latest version of iAdd. It’s not an app running in compatibility mode, it’s specifically designed for iPad. You will notice that all the main interface elements have been designed specifically for iPad, and the data enter workflow has been completely rewritten (click to see full size).

Look, I’m A Landscape!

Another new feature of the version 1.2 will be autorotation. Any data input app should have this, especially on smaller devices like the iPhone. It’s much more comfortable to type, or even to read your tasks while your device is on landscape. As many of you noticed this was an important oversight of the first version of iAdd. Well, it’s fixed now.

Send Anything By Email

Another common suggestion from iAdd customer was a way to make the data accessible in many ways. Everybody agreed that the app is easy to use, but not having a way to share your data outside the device was perceived like an important limitation. Well, starting with version 1.2 you can send any information via email. You can send tasks, you can send events, you can send even projects or ideas and all the contained tasks / details within the projects or ideas will be automatically added. All you have to do is to add an email address and hit send.

Cloud Syncing Is The New Black

As useful as it may be, email is kinda obsolete. I mean it’s a very good back-up solution, but the nicest thing of all is to have cloud syncing. Well, you asked for it, you got it. iAdd version 1.2 sync your data completely with Dropbox via Edge, #g or WiFi. You can now have access to all your tasks, projects or ideas from anywhere. Dropbox released an API for interacting with its widely popular cloud storage service only a few weeks ago but when I saw the press release, I knew I had to work with it.

The API is really fresh, so there might be some inconsistencies. I took all the measures I could think of to ensure a proper backup and syncing of your data, but as always, bad things may happen. Please use the support page listed in iTunes to give me a very thorough description of what wen bad. I’ll fix it.

The most common use case for syncing is when you have 2 devices: an iPhone that goes with you everywhere and an iPad which is more static. You can also have any combination of iPod, iPhone and iPad, of course. That’s one of the main reasons we have an iPad version too. You can use iAdd on any device, with its local database and once you hit sync, your information will be updated. As in most common syncing algorithms, I used the “most recent wins” approach. There are many ways in which you can sync your data, but for a sequential use case (not a concurrent access) this one seemed the most appropriate.

Workflow Improvements And Bug Fixes

There are also tons of bugfixes in this release and I won’t stop to mention each and every one of them. Maybe the most important one is the date selection mechanism which has been drastically improved. There are also a lot of new workflow enhancements and here is just a short list of what are the most important ones:

  • a new context based view in the Decide realm
  • now you can send a task back to Decide even before you finished it
  • a task can be detached from a project, becoming a single task
  • a task can be assigned to another idea
  • a single task can be promoted to a project

You can see a full list of what’s new in the iTunes listing page.

It’s All Part Of The Framework

But the biggest competitive advantage of all would be of course the fact that iAdd implements the Assess-Decide-Do framework in a very handy and easy to use application. It’s part of the bigger framework, one that could allegedly be used not only for life management, but also for simpler and more mundane tasks like blogging or shopping. That’s right, you can use iAdd to plan your next blog post, or your next shopping session. There are even 2 sample chapters in the ebook which are talking specifically about that: how to use iAdd for blogging and for shopping. Not to mention that one third of the ebook is a very comprehensive manual of iAdd.

So, if you like iAdd, I strongly recommend getting the ebook “Assess – Decide – Do: Natural Productivity” which is, as I already said, on pre-order until tomorrow at 7 AM, Bucharest time. The price is 27 USD, but you can get it at 20 USD while on pre-order. Not to mention that I’ve also thrown in 30 promo codes for the new version of iAdd (of which I have less than 10 now, so you should really hurry up).

You get both the ebook and the app on a very good deal. The bad part of the deal is that will expire in less than 24 hours.

An iPhone App In 30 Days – The Challenge

Posted on Jul 17, 2010 in iPhone by
18 Comments

Three weeks ago I launched iAdd for iPhone, a productivity app which is very important to me. Not only because I coded every single line of it, but because this app is the tangible result of more than 3 years of testing, learning and writing about personal productivity. iAdd is based on my own framework, Assess – Decide – Do. It implements every single concept of this framework, bringing to life a completely new approach towards productivity.

One thing that you may not know, though, is that 2 months ago I had no idea about how to write an iPhone app. I didn’t know Objective C at all, although I do know a few other programming languages, like PHP, Java or JavaScript. Two months ago I also had no idea that I would actually finish this task and have the app live in the App Store. When I started to work for this project (and yes, it was just a pet project in the beginning), all I did was to log daily my progress. And this is exactly what I’m going to do in this blog post, I will publish these daily logs (in a more or less abridged version of course) giving you a time based description of the whole process, from installing Xcode to having your app in the AppStore.

The Set Up

Warning: this is going to be a highly technical post, so if you’re unfamiliar with terms like compiling, backtrace or ViewControllers, you shouldn’t read it. Alternatively, you could only read the “frustration level” paragraph on each chapter and have some fun. Three weeks after, I still have a lot of fun reading those parts, although at that time all I wanted was to draw many, many little men named Steve Jobs and tear the drawings apart. Slowly. Oh, and nobody could pronounce “apple” near me without triggering an uncontrollable itching all over my head.

There is also a little reward at the end of this post. If you get really curious about the app, there will be a giveaway: I’m giving you 20 promo codes to test out iAdd for yourself. The details are towards the end of the article.

Oh, and the article is more than 7500 words so please set aside at least 15 minutes if you want to read it all. You’ve been warned.

But first of all, some words of caution.

First: I am a seasoned PHP programmer, having written more than 100.000 lines of PHP code. I also had a deep knowledge of some high level frameworks over PHP, the most important being CodeIgniter. SQL or JS were common sense to me too.

Second: I knew the whole app structure inside out before starting to code. In other words, I had a very clear client brief, including the user interface. There were some significant changes made on the go, as you will see, but the basis was there before. In my experience, more than 60% of development time is spent on user interface.

Third: I am obsessed with learning new things. I can also be insanely disciplined and focused on what I do. Sometimes I am close to pathological behavior, and I am aware of that.

Fourth: I have completed all the necessary steps to become an Apple Certified Developer (paper work, paying the 99 USD and all) long before I actually started to work. This post will not cover this process.

***

Now, one may argue that my programming knowledge was an advantage in moving to Objective C and iPhone. There was only one point in which my PHP experience served me well and that was the deep understanding that if you write some code properly something interesting will happen. :-) In other words, my prior experience as a programmer didn’t count. Why? Well…

PHP is a procedural language, Objective C is a object oriented language. In PHP you write functions, in Objective C you write classes. Lately, PHP become object oriented too, but the vast majority of apps are still written with loads of procedural functions.

PHP is basically an interpreted language, Objective C is a compiled language. Even more, in Objective C you can send messages to objects at runtime. That means that even if your code compiles without any warning, you can still get some runtime booboos. Weird.

PHP has garbage collections which means your variables are automatically discarded when they are no longer needed, in Objective C you have to do your own management memory. Prepare to read a lot of sentences starting with “Message sent to deallocated instance…”.

Speaking of errors, specifically about error messages, after 30 days of learning Objective C I am totally convinced that the error messages in Xcode were invented by a joyous and careless hermit, with the only goal of driving programmers crazy. Program received “BAD_EXC” message. Wow, really? I got this error at least a few hundreds times and at least half of times I was completely puzzled.

Incidentally, since I started to code in Xcode, “Program received BAD_EXC” is what I’m mentally telling myself when Bianca is completely stubborn and I can’t get away with my normal approach. Ok, Bianca is having a “BAD_EXC”, time to start debugging.

Oh, and the infamous “Message sent to deallocated instance ”. You kidding me? Sometimes I even had the feeling that the source code on the editor was forming a twisted and evil smiley. The joyous and careless hermit was smiling at me from behind the whole Xcode fence.

Enough with whining, let’s start this.

Day 1 – Getting Acquainted With Xcode

Getting familiar with Xcode. Learned how to create a project and what the folder structure means. The folder tree you see in Xcode is not necessarily the same you see in Finder. Can be tricky at times. Did a few tests with some sample projects to see how the building process works. Installed a few apps on Simulator and also in the iPhone. Modified some labels just to be sure they’re popping out modified in the simulator. You know, how to get “Hello World” to display “This label was modified by me in Interface Builder”. Living dangerously, so to speak.

Frustration level (0 – 100): 0 I actually had fun.

Day 2 – Core Data Bed Time Stories

Deciding that I am going to use Core Data for storage. I knew SQL more than better (used to write some haiku’s using left joins and alike) but for some reasons Core Data looked much more interesting. I was attracted by the fact that in Core Data you model your data before implementing it, visually creating the relationships between your entities at the design stage. Once you created the model, XCode will generate the implementation files for your objects. Say you have an object called Task in Core Data, Xcode will take care of the implementation files, so all you have to do in code is to write something like:

task.dueDate to get the due date property of a task.

I also learned three fundamental notions for Core Data, especially useful for those who are migrating from an SQL backend:

PersistentStoreCoordinator, ManagedObjectContext and ManagedObjectModel.

Frustration level (0 – 100): 5 – There was some fog related to how a Core Data model maps a data base and the role of those top level objects.

Day 3 – Creating And Saving Data

Spent too much time with the FetchedResultsController class, trying a simple select from DB. Took me a few hours to understand that FetchedResultController is a class designed specifically to be used with a TableViewController. In other words, if you just want some data pulled out from the DB, and not necessarily displayed in a TableView, you could use a simple fetchRequest. Also, I started to properly use NSLog().

In Objective C there is usually too much overhead to put a label in the interface and assign its value to your test data. If you just want to test some results, NSLog() is a much easier way to do it. It just logs to the console whatever you tell it to.

Frustration level (0 – 100): 15 – That FetchedResultsController was really difficult to understand. Also, I had a little bit of trouble understanding the TableView object, but I eventually got it.

Day 4 – First Withdrawal Impulse

Although I did learned some fancy things, in the 4th day I had my first withdrawal impulse. More on that on the “frustration level” paragraph. As for the things I learned, one of the most interesting was that in Objective C you have to use a LOT of typing, just to concatenate two strings. Have you heard of something like “appendStringWithFormat”?  Excuse me, I was used to type a simple dot “.” to make the concatenation. Whatever.

Frustration level (0 – 100): 60 – I installed a fully fledged core data sample app just to have a glimpse of what I was starting and simply got overwhelmed. What am I doing here? I should try something much easier. I’m not up to this challenge. It looked enormous. Too much.

Day 5 – Working Data

It was a long day. I created a first view, in which I was adding some text and then saving it to the database. Incidentally, the first data type was an “idea”, not a “task”. I was saving ideas in the Idea Core Data model. Also, learned how to make a TableView reload. Coming from PHP, when user interaction is almost always necessary and expected, you don’t pay too much attention to other parts of the app. In iPhone programming, you gotta place calls to reloading your data in several places in the app. At this point, I was still following a mental framework of “procedural”, instead of “object oriented”.

During the day I also spent a couple of hours working on another project, a much simpler one. All I had to do was to integrate a C library and call some functions. I managed to compile it, call the functions and log the results. Still undecided if I was going to follow to iAdd project or settle for the simpler one, with the external C library.

Frustration level (0 – 100): 35 – A lot of trial and error and also a lot of writing and deleting. Didn’t actually know where to head because there was too much information I didn’t master. Each improvement was the result of hours of falling down and getting up again. The biggest confusion at that time was the syntax, many errors from improper using or accessing properties.

Day 6 – Detour

Spent the entire day fiddling with the external C library project (I will call it like this, although it’s more than that, hope to have it published in a few weeks too). For some reason, it looked easier. I got some minor results while completely avoiding the iAdd project. Just didn’t think at it. Cleared my head. Got some rest.

Frustration level (0 – 100): 0 – I was like in a one day vacation. Just gave myself some mental space.

Day 7 – First Big Leap

After a day spent in relaxation, I came back to iAdd with significantlyh more motivation. I took a major step forward deciding I would completely rewrite the code. From now on, all database calls were to be placed in a single class. For the more experience programmers that seems like common sense, but as I told you I came from a PHP background. Now you understand why my previous experience almost didn’t count.

I created the class and moved all the Core Data related code in that class. My first approach was to use an App Delegate for it and call it everywhere I need it. By the end of the day I moved all the code there and make sure it worked. Calling the class in other views was problematic, though.

Frustration level (0 – 100): 20 – Meaning frustration was there every 5th minute, if you know what I mean, but at least it was bearable. By starting to organize the app at a higher level I created a bit of light over the whole project. Still unsure where this whole 30 days challenge will lead, but at least something started to get some structure.

Day 8 – Going Singleton

The App Delegate id didn’t look like a viable option so I decided to make my “super data model” class a singleton. Never really knew what a singleton was, if you’re asking me. Never knew what a singleton was if you don’t ask, either :-) . So I had to read for a few hours and ponder all the theoretical and practical implications of using a singleton. In the end, it looked like it was the best way to go, although the implementation looked a little complicated (or hard to understand the first time). In the end, this proved to be one of the best design solutions for this project.

After making the “super data model” singleton I implemented a few new functions, especially for the first level of views, the ones that listed the data in the Assess, Decide and Do areas. Was able to use the “count” specifier in order to find the total numbers of ideas, tasks or projects.

Frustration level (0 – 100): 0 – For some reason, the moment I started to understand what I was doing, I wasn’t frustrated at all. Everything was going on in the right direction. It wasn’t going on smoothly in the right direction, I had to maintain a very high focus for several hours, but the end result was incredibly rewarding. Hey, I know singletons! Do you?

Day 9 – First Core Data Disaster

Since I was working a lot with data, I had to make some modifications to the underlying data model (the .xcdatamodel file, namely). In Core Data, if you make modifications to your data model AFTER you started to actually with it, you’re going to be in trouble. Big trouble.

First of all, you’ll have to reset your persistent store coordinator, by choosing another name for the database layer (I’m using sqlite as a back end for Core Data). It simply doesn’t work to just update it, as you would do with a MySQl table, for instance. Basically, that means you’re going to lose ALL your data in the previous data model. I think that was the first time I thought at the word “migration”. A few days later I had to thoroughly deal with all the migration headache, but at that point I was just disappointed with losing my test data.

And as if this wasn’t enough, I had more: if you make modifications to your data model, you’ll have to regenerate all the managed object classes, otherwise you won’t be able to access the new properties or entities you just added. If you have many entities (tables) in the data model that could become confusing and difficult to manage.

So, the day was spent in despair over the lost data and trying to plan as thoroughly as I can the data model future evolution, in order to avoid other changes. Just to feel good, at the end of the day I made some small cosmetic changes to the interface: get rid of some buttons and made the text fields bigger. You know, just to go to bed with the sensation that I actually did some work.

Frustration level (0 – 100): 50 – Losing data is bad. Especially if you’re building an app which is processing data. It’s basically a disaster.

Day 10 – The Consistency Day

I finally had a deep understanding of TableViewControllers and their infamous reloadData() function (or message, in Objective C lingo). Meaning in the day 10 I was able not only to add data in the database, but to delete it and update the interface. It was the first consistency day in which what I did at the data manipulation level was mirrored in the interface. Feeling rather confident, I pushed it even further: I added a new table in the adding area (the one you actually see right now in the app, if you have it) in order to choose what type of item is added: a task, a project, an idea or an event. And it worked. Toldya, a big consistency day.  Hard to believe that only 5 days ago I was ready to quit.

Frustration Level (0 – 100): 0 – Nada. Niente. Zero. Zilch. Everything was falling right into its place.

First Big Milestone

After the first 10 days of this challenge all I had was this:

  • a working interface prototype: the 3 tabs were pointing to different view controllers: Assess, Decide, Do
  • adding data was working in the Assess realm for ideas, tasks, projects. Didn’t add any event yet.
  • deleting data was working in the list views
  • listing data was working (and any adding or deleting worked consistently)
  • all data calls were made in a single point among the whole source code (the singleton class)
  • had the first withdrawal impulse (the 5th day)
  • had the first data disaster (losing data and updating the persistent store coordinator)

Not much, I agree. By any standards, not a functioning app. Not even remotely. But enough to get me going. So, here we go.

Day 11 – Deep Digging

It was a full day. Loads of working on the data model, implementing new functions and witnessing a few breakthroughs.

First of all, now that I knew how to reset the persistent store coordinator I started to heavily modify the data model. I made only a few fields compulsory. I also updated all the relationships, especially the deletion rules. Core Data started to emerge like a very interesting modeling tool. It takes a while to understand the ins and outs, but once you get a grip of it, it’s incredibly productive. For instance, if you properly set the deletion rules, the inner Core Data mechanisms can take care of a lot of after deletion cleaning for you, saving a lot of typing. Just by setting the right rule in the data model. In the source code you end up with only one line of code, usually the one in which you call the “delete” message on the managed object model.

I also implemented a new view for adding an event. Wrote the code in less than an hour. Now I was having events too. Nice.

I implemented the entity (table) for adding contexts. Wrote the code for adding and editing the context. Used a Modal View Controller for the first time. Not everything was working 100% at the end of the day for the Contexts area, but at least I learned something new.

Frustration level (0 – 100) 25 – Learning something new is always packed with frustration. If it’s not frustration, then you’re not learning something new.

Day 12 – Going On Steadily

I started to write the detail views for ideas, tasks and projects. Everything went smoothly and didn’t encountered any difficulty. Realized that writing code is the easiest thing in programming. Kinda knew it before that too, but this time I realized it in regard to Objective C. Always thought it’s gotta be difficult to write code in Objective C.

I also decided that I was going to implement a new feature: Collections. In the initial set up, Collections weren’t present, there was something else in their current place in the interface (I won’t tell what because I still want to implement this for the next major version). But at this point I realized I will need some storage mechanism for the data, something that will act as a neutral repository. You can assess a lot of stuff but some of this stuff is not that urgent. Put it into a collection and free some space.

Frustration Level (0 – 100): 10 – I started to feel frustrated by the flood of my own ideas. Once I started to understand how certain things are done, I just couldn’t stop imagining new features and new ways of doing it. Not good. Distracting.

Day 13 – Finishing Ideas

That was the day when I was actually finishing the whole “ideas” workflow: adding an idea, listing ideas and editing / deleting an idea. In my approach, an idea could contain many details (imagine a mind map: the name of the mind map is the idea name, but the branches are details, or tasks). Making a task semantically integrated with an idea seemed rather interesting. So, almost 2 weeks after I started I was able to add an idea, to add some details to an idea and to see all of these in some nice tables.

It was also the day when I learned how to add a background color to a TableView. From that day, each realm had a specific color, following the workflow rules: Assess was red, Decide was orange and Do was green. It’s the same principle widely used in transportation regulation: red: you stop and wait (until you finish what you have to assess), orange you decide to move on (or, in ADD terms, you sign the contract with the task or the event) and green: you’re good to go, move on with it!

Frustration Level (0 – 100): 0 – I was feeling light and easy. I think that for the first time I found some logic in Xcode completion rules. And even started to use those completion shortcuts. Got productive, so to speak.

Day 14 – Getting Closer

Another productive day, another new feature: now you could add a single task too, if you want, not only as a detail to an idea. I also added the Collections entity in the data model, which means I had to restart the database clean again. Losing the test data didn’t hurt this time, because I knew it will happen. What was hurting though was a totally unexpected thing: while I was regenerating my managed object classes (after adding a new entity, that is) I accidentally deleted my singleton. My super data class. No way to interact with the data anymore. The functions were lost. A few hours later I was able to restore it from memory (my own memory, that is), but the whole thing was rather unpleasant.

I linked the Decide and Do controller to the Core Data model, meaning I added the functions for querying the respective realms, but since I didn’t have the functionality to actually send the ideas or tasks to those realms, I wasn’t able to see nothing.

Frustration Level (0 – 100) 40 – Deleting the super data model class file is a VERY nasty thing to do. I actually lost all the data related functions and nothing worked. Luckily, I was able to re-write them pretty much the same and in the end everything was ok. But not without some hair pulling (now I’m kidding you, I’m bald ;-) ).

Day 15 – A Working Model

Probably the most productive day so far. I finished the code for adding tasks to projects, sending projects, ideas and tasks to Decide, and also the code for listing the ideas and tasks in Decide. Added to ability to create and send events to Decide.

I completely implemented the Collections functionality: creating a collection, editing a collection and deleting a collection. I also implemented the “archive” functionality, which basically means saving an object to a Collection. Basic functionality was there, but there were a lot of bugs. Will deal with them later, said to myself.

Frustration Level (0 – 100): 0 – Didn’t even have the time to think at frustration. The app was actually growing under my eyes and every hour was bringing in another functionality. I gradually started to spend more and more time playing with the app than writing code. It felt nice.

Day 16 – Alerts!

I implemented the delete code using a UIAlertView. It took around 45 minutes top, including reading the documentation and writing the code. I started to understand the philosophy behind the whole SDK. That shortened my learning paths a lot. Every time I needed to use a new UI control, all I had to do was to read the local Apple doc and look over the sample code. Most of the time, that was just about enough.

Another breakthrough of the day was finishing the whole process: code for sending an app from Decide to Do. Basically, what I had only on paper and in my mind was suddenly reality: creating a task (or idea, project, event), sending it to Decide, and from there the ability to send it back to Assess or forward to Decide. It was just 2 weeks and 2 days since I started this challenge.

It was also the day when I started to actively monitor and use stackoverflow.com. If you’re going to write an iPhone app, I definitely recommend you check out this collaborative project. Chances that your apparently unsolvable question was already solved at stackoverflow are actually close to 100%.

Frustration Level (0 – 100): 10 – And that’s because I had to implement something new (UIAlertViews). Otherwise it could have been close to 0.

Day 17 – Cleaning Up And Getting Fancy

Spent the day mostly cleaning up the code, ditching some old trials (used a TableHeaderView separated nib at some point and that cluttered a little bit both the code and the resources – nib files – in the Interface Builder). I wanted to make the corners of an editing area rounded so half of the day was spent searching how to do it. Proved to be a little more complicated than I was ready to accept, but nevertheless I finished it with the help of a little bit of Quartz Core. Felt somehow special and fancy, mainly because of the name of the new framework: Quartz Core.

I think that was also the day when I started to use my app as an excuse for not going out or as a standard answer at the phone. “Hey, Dragos, could we use a beer, my friend?”, “Nope, sorry, I’,m working on my app, mate…” I know, I should have that beer. I can get pathological, I warned you…

Frustration Level (0 – 100): 5 – That Quartz Core thing proved to be a little bit too time consuming, but in the end everything went well.

Day 18 – More Buttons

Another “interface” day. I decided to use UISegmentedControllers as buttons, not the native iPhone UI buttons. It just looked fancier, although I had a little bit more code to write. I also decided to group the buttons after the table view, in a new place, namely a UITableFooterView. So, the whole day was spending re-writing the interface in each and every place I had some interaction code. And there were a lot of places.

Guess it was the first day when I actually felt bored because I was doing so many repetitive tasks. Replacing a button in one place is a thing, but then propagating the change in 20 different places gets really boring.

Frustration Level (0 – 100) 50 – This time the frustration source wasn’t the lack of knowledge (or usable documentation) but my own decisions on how the interface should look. I realized I already had a significant code base behind me and every change that should propagate in this code base would require from now on a really really important amount of time.

Day 19 – Connecting The Dots

At the end of the day I was able to assign a context to task, an event or a project in Decide. I was also able to promote a task to a project in Assess. The rest of the day was spent in writing down some constraints, or rules about how the app should treat some special cases. I find it very useful to write down what I can and what I can’t do in the app, although I was way ahead in writing code already. But since the boring task of updating the interface was killing me, writing down those constraints gave me the feeling that I actually did something productive.

Frustration Level (0 – 100): 35 – I guess the frustration was generated not only by the interface update, but by the expectations that were started to build up pretty strong. I mean, now I had the app on my iPhone, I could add tasks and sign the contract to do them, the only thing that was missing was a decent listing in Do, and the ability to mark a task as done. Believe me, it was starting to feel really frustrating.

Day 20 – The Working Prototype

Since I already felt the pressure to finish, I spent the day implementing the Do functions. Now I could follow a task from Assess, through Decide, until Do, and even mark it as done. Big breakthrough. The whole workflow was implemented. Of course, the app crashed a lot and then there were a lot of places left in a less-than-a-prototype state, since I was focusing only on finishing the main workflow.

Frustration Level (0 – 100): 35 – The same reason as yesterday: I was feeling the pressure to finish. Just wanted to see something working, but at the same time I knew that there were still a lot of boring work to be done.

Second Big Milestone

After 20 days since I started the challenge I had the following:

  • the app was fully functional
  • the app was also highly unstable, there were a lot of unexplainable crashes and incomplete implementations
  • I was able to: add a task, idea, event or project.
  • I was able to edit a task, idea, event or project.
  • I was able to send that item to Decide and have it displayed there
  • I was able to assign a context and bounding dates to a task or event and then send it to Do
  • I was able to see the item in Do and mark it as done.

The most important thing that happened after 20 days, though, was the fact that I started to use the app as a modeling tool for creating the app. Sort of eating your own dog food, if you know what I mean. Since I had the iPhone with me everywhere, every time I had an idea on how to implement something, I was adding it, assessing it, moved it to decide or do and then review it once I was in front of the laptop. It was an incredible leap in speed. In the next 10 days, basically I knew what I have to do because it was already filtered through the whole Assess – Decide – Do framework in the iAdd app. Except for the times when I actually lost all the data. Which was still test data. Again. And again.

Day 21 – Time For Working With Time

I started something that I postponed for a long time: date and time management. For some reason, UIDatePicker seemed like something ugly and difficult to understand. By the end of the day I started to think it’s beautiful, but still difficult to understand. I was able to set the start and ending date for an event and for a task.

Since I was on a roll with dates I thought to give it a try with a predicate for selecting tasks or events between certain dates, something that I needed in the Do realm. If “predicate” sounds strange, think at it like the equivalent of an SQL query, although the concept is a little bit more abstract (you can use a predicate to sort a Dictionary, a Set or an Array in Objective C).

And by the end of the day I also implemented partially the badges count (how many items in each realm) for the tab bars. Nice. But buggy.

Frustration Level (0 – 1oo): 45 – UIDatePicker is still a nasty thing, not to mention that working with time in Objective C is a pain in the arse. You have to subclass Calendars, Time Zones and Time Components if you want to do some fine grained date comparisons. Complicated.

Day 22 – Counting The Bits And Pieces

Since yesterday was a rather difficult day, I decided to focus on finishing some other bits and pieces, so I completed the Soon and Overdue code in Do. Now I had a complete visual implementation: tasks were nicely organized by date in Today, Soon and Overdue. I also cleaned up the buggy code for the tab badges. Now every time I was doing an atomic operation on a task (sending it to another realm, deleting or marking it as done) all the tabs were updated accordingly.

Frustration Level (0 – 100) 10 – I think I had a frustration level of 10 by habit. I was so prepared to get frustrated that I went on by inertia. Didn’t have any reason to be frustrated but I kept a small dose just to keep my frustration engine in shape. I guess.

Day 23 – Limitations

Now that almost the entire functionality was there, I started to notice some limitations. For instance, the table view cells in a standard implementations have only 4 types of layout. If you want something more, you have to create your own table view cells. And of course I wanted something more. I wanted to be able to display the context under a task and the due date on the same line, None of the existing layouts of the default table view cells provided something like this so I started to do my own table view cells. And nothing more, of course, for the rest of the day.

Frustration Level (0 – 100) 60 – Learning something new is always frustrating. Learning something new knowing that you have only 7 days left to finish your challenge can be really frustrating.

Day 24 – Rewriting The Old Code

After spending the last days building new table view cells, I thought it would be nice to actually finish something. So, I took each and every list view in the Do realm and implemented the finishing code for a task (or event). Boring stuff, but pushed me forward. I also implemented filtering in the Do based on tasks or events using a UISegmentedController in the view’s toolbar. In other words, one could see just tasks or just events, or both in every section of Do: time based (Today, Soon, Overdue) or context based.

Frustration Level (0 – 100): 25 – There was an increasing internal pressure for finishing things up which made me quite nervous. I was happy to finish the lot for the day.

Day 25 – New Interface Choice. Again

It may have been the increasing pressure, it may have been a deep desire to make things right, fact is that in the 25th day I realized my user interface sucked. Big time. There was too much real estate consumed by the possible operations you could do with a task (make it a project, delete, archive) and too little for the task itself. So, I decided to hide those operations and make them visible only when the user would touch a standard “Actions” button in the upper right corner. When the button was touched,a standard toolbar would slide up from the bottom, containing the three buttons. Interesting. Only I never worked with a toolbar before. By the end of the day I had it implemented in a view. Still pretty buggy but mainly working.

Frustration Level (0 – 100): 75 – A new interface decision so close to the end couldn’t be felt nice. On the contrary. I admit I was incredibly stressed but somehow the stress motivated me. I knew the decision was good and so the work that came attached was well worth it. That didn’t prevented me to feel like a bird on a cage. Or something like this.

Day 26 – Finishing Big Blocks Of Code

By that time all I wanted to do was to finish the task. Or the app, Or everything. I just browsed through my “Do” realm and implemented whatever I picked first. I added the priority functionality for tasks and completely recoded the Collections section, finishing the partial implementation. I also implemented a migration model for the data model. From that day, no matter how I modified the data model, I didn’t have to reset the database again.

Frustration Level (0 – 100) 50 – A little lower than yesterday but still a constant buzz in my head. But still, this buzz, although it was a kind of pressure, made me focus on the task.

Day 27 – Interface. The Final Frontier.

I decided that I have to put an end to all my interface ideas and spent half of the day pondering what I should leave and what I should postpone. I even wrote an entire document, postponing a lot of functionality for the next major version. For the record, the document was called: Minimum Product Demo, or what is necessary for the product to be functional,. but not perfect. The other half of the day was spent coding. Basically, the app was done in the 28th day. The functionality list was frozen.

Frustration Level (0 -100) 50 – Now I was getting frustrated because I have so many ideas but no time to make them alive. Nevertheless, even at that bare bone level I agreed to stop, there was still so much work to do to bring the app at the Minimum Product Demo level.

Day 28 – Getting Ready To Submit

With only two days before the deadline I realized I didn’t have a settings section. No more arguing or negotiating, I just started to code it. I also added a Help and FAQ section.

Frustration  Level (0 – 100): 10 – Now I know that this was the silence before the storm and nothing more.

Day 29 – Solving Puzzles

Bug hunting. Loads of bugs. A lot of hunting. Crashing, identifying the bug, solving it. Restart the process. All day long.

Frustration Level (0 – 100) 75 – When you have only one day to finish and you realize that almost EVERY section have a few serious bugs, you can’t be relaxed. At all.

Day 30 – Calling It A Day. Or An App.

In the final day I was doing a final testing round and bug hunting. Didn’t find any bug and the testing went well. No crashes. (Unfortunately, just after the launch I spotted a crash so I had to come up with a fix pretty fast, in less than a week).

Frustration Level: 80 – The highest ever, because the stress of how the app would be accepted was incredible. Now I was pwerless. Nothing more to do. Just waiting for the reaction. Incredibly stressful.

The Final Milestone

After 30 days I had a working app. There were a few critical decisions about what the app should contain in the final stage, but I finally did it. The app was ready, tested, polished and, what was the most important thing, was useful. At least for me. The implication of actually using the Assess – Decide – Do framework in the final stages of building the app were huge. I honestly think that for this complexity level, I should have spent at least twice the time finishing it.

40 Days After

The initial challenge was for 30 days and I met the deadline. I had a working app in 30 days. But in fact, I had to spend another 10 days on tweaks, testing and cleaning up. A lot of cleaning up. I actually started to organize the code, to hunt memory leaks (I could write an entire post only on hunting, finding and eliminating memory leaks. Wait! I guess I could write a mini-book on this topic :-) ).

Another time consuming task was making the app ready for submission. Having a working iPhone app is one thing, but having it published in the AppStore is a completely different thing. There are a few distinct steps that you have to focus on.

First Level: The certificate and provisioning part. Please, pretty please, with sugar on top, do read Apple’s documentation on the Provisioning Portal BEFORE making assumptions on how much time it will take. Because, no matter how much time you allocate for it, it will always be twice. I mean it. It’s time consuming, tedious and confusing.

Second Level is the building of the app. You have to be extra careful on what provisioning profile to use it and what version (Debug, Release or Distribution) and specific target are you going to use. Again, Apple’s Developer Center is your best friend. Read on until you get it. May take some time.

Third level: the whole submission process, because it involves a lot of work: your app should be artwork ready. description ready. tags ready. You gotta create a series of icons separately from what you usually see in an app, there will be one for the app and one for the AppStore, different sizes. Must be extra careful when choosing your keywords, because your app is going to be found by those keywords. All in all, once you got the certificate / provisioning ready AND the app build in a proper way, allocate at least one day to have the copy details for the app sorted out.

Promoting An iPhone App

If you’re an independent developer, you gotta take into account the promotion part. The AppStore ecosystem is so crowded that you simply can’t do it without it. I won’t cover the details of promoting my app in this post, it will take too long.

The good news for you, and I mean you, the one who reads this post, is that this whole promotion thing is THE place where you can play a big part too, if you’re wondering. :-) Not only you could grab a nice promo code (more on that on the next paragraph), to try iAdd for yourself, but you could also spread the word about the whole thing. How?

You can save this post to delicious, reddit, or StumbleUpon (there’s a small square at the end of the article with links for all those services, didn’t write to clutter your reading with more links ;-) ). What more you can do? You can tell your friends and colleagues about it. You can tell your girlfriend about it and believe me, it will make you look good. If you don’t have a girlfriend, just spread the word about the app and who knows, you may get a girlfriend at some point (statistically speaking, there is a chance). You can even tell your mom about it. Here are a few convenient templates for the telling your mom part:

“Hey, mom, I just got this amazing thing you should check out, heard that Oprah is using one of these too…”
“Hey, mom, remember how you told me I was lazy? Well, I’m not! I’m Assessing! You wanna see?”
“Hey, mom, when’s cousin Bob birthday? You know, I just don’t wanna miss it again. I’ll save it on this… What is this? Well, just a thing that helps me remember cousin Bob’s birthday. Wanna check it out?”

I could go on and on like this forever but I’m pretty sure you got the message.

And if you really, really want to promote the app, now that you know how much hard work it contains, you could just buy it for 2.99 USD. Use it for a few days and then leave a nice review on the AppStore. I’ll think good thoughts about you. Promise.

The iPhone Promo Code Giveaway

That’s the part I was talking about in the beginning of this post. If you want to check out iAdd for iPhone for free and have an US iTunes account, just leave a comment and let me know the following info: the blog you’re running, the main topic of that blog and where are you going to let me know your opinion: on the blog or on the AppStore. There is no obligation to leave a review on the AppStore, by the way, just do how you feel.

I put aside 20 promo codes for this thing and I’m going to give them on a “first come, first served” basis. So, you’d better hurry up, so to speak. Remember, the promo codes are working only for the US iTunes Store.

The 7 Commandments For Writing And Publishing An iPhone App

If there are some basic principles that I could take out of this experience, I would lay them down like this:

1. Think it over. Have it clear in your head BEFORE starting to code. If necessary, do some prototyping first. If you don’t, you’ll get lost in a swamp of complicated Objective C notions and overwhelmed by the whole bureaucratic process of submitting the app to the App Store, to a point where you’re actually forgot what you’re coding.

2. Prepare to face some withdrawal. If you’re an indie developer, having a day job (or a life, for instance) prepare to face some serious rejection in this process. It’s not easy and the withdrawal impulse will come, sooner or later. In my case, just avoiding it for a while and moving my focus towards something else did the trick. Your mileage may vary.

3. Read. Read. Read. There are tons of documentations available on the net. I highly recommend the collaborative project at stackoverflow.com. They’re incredibly well indexed in Google and their search engine is also fantastic. When I was completely blocked, in 90% of the cases, just asking stackoverflow.com in a simple query unblocked me.

4. Subscribe to WWDC. This is a library of video, usually from the event with the same name: World Wide Developer Connection. As a developer, you get access to a huge library of movies and sample code that won’t be available to other developers. I personally subscribed to it a year ago but I only reaped the benefits now, when I actually wrote an app. There’s something very intuitive in watching a movie.

5. Log. Daily. Extensively. If you don’t have a SVN systme in place (I don’t have one at the moment, although I do feel the need for it) you will have to log everything you do. In the first 10 days, I was “coding” for 60% of the time and the rest of 40% I was just logging my progress. Write it in black and white. It will help you tremendously.

6. Test. Test. Test. Maybe the app will look good on paper but bad on the iPhone. Maybe nobody will need it. Maybe there is no need for it so you’d better do a development build, install it on your iPhone, use it, and forget about submitting it to the AppStore. Be sure that somebody needs what you’re doing.

7. Do Write Code. An app will never build by itself. Using high level frameworks (there are quite a few these days) won’t save you for writing code. Interface Builder won’t do the job for you, it will only align some controls on a canvas. If you want to code an app, do write code. It won’t work without it.

One more thing… Of course, I have my “one more thing” too, what would you expect? ;-) As you can see, I logged the frustration level daily and one may argue that this is a negative polarization. That I’m focusing only on the negative side of things. Not true. Not at all. I could have log the level of satisfaction too, but to be honest, on a scale from 0 to 100, this satisfaction level was always at least 120. Sometimes close to 500. I’m not joking. I had an incredible time doing this. And this leads me to the final words for this article (seriously, these are the final words)…

What’s In It For Me, At The End Of The Day?

Beyond the whole Objective C learning stuff, beyond being featured in the App Store, beyond the huge frustration I experienced in this whole process and even beyond the money that I’ll make out of it (or that I won’t make out of it, respectively), there’s something more important that remains. At least for me.

And that’s the feeling of getting better. Of doing something new. Of creating something valuable. The feeling of being fulfilled. The feeling of making a difference. The feeling of overcoming failures and my own limiting beliefs.

At the end of the day, I’m not an Objective C programmer. Not even a personal development blogger. I am nothing but a better human being, free and powerful. So powerful that I can make my dream of creating an an iPhone app in 30 days a breathtaking reality.

And that is a hell of an end of the day, my friends :-)

Assess – Decide – Do In Under 2 Minutes

Posted on Jul 4, 2010 in iPhoneProductivity & Effectiveness by
6 Comments

Well, since things are going on just well with my iPhone app, which, by the way, is called iAdd, and can be seen directly in iTunes here, I thought it would be about time to make a short video explaining what’s the thing with this Assess – Decide – Do framework.

Without further ado, go on and watch this (very) short video. I suggest you see it in full screen, since I fiddled a little with the app, and it would be a little difficult to see all the things in just one tiny window.

Now, you know. Hopefully. :-)

As you can see, it’s not very difficult. And I never claimed ADD would be something difficult, on the contrary, it’s simplicity at its best.

I did this video after I started to receive the first round of feed-back form my very first customers. Without exception, all were attracted by the “clean” interface and the apparent lack of complexity in the app. While the lack of complexity is a deliberate act, the clean interface is just the result of enforcing the Assess – Decide – Do framework. The information is the same in every productivity methodology, it’s how you look at it that differs. And, for what matters, what really makes a difference.

One more thing. Before posting the video on my blog, I shared it on twitter and facebook. Apparently, people loved it. So, I think I’m not too far from the truth when I’m saying that I will do more of these in the very near future. I already got some ideas about some very, very short tutorials, under 1 minute, which will fit great in this video scaffold.

Until then, remember that iAdd is still in its very first stage, in what I call MPD, or Minimum Product Demo. In this state, the app is only enforcing the framework, making you the obey some simple rules, like

  • you cannot edit a piece of information if you’re not in Assess
  • you don’t have to “sign the contract”, to actually commit for a task, unless you really send it to Do. The task can stay in the Decide realm for as long as you want, and you can select different contexts or deadlines for it as you see fit
  • on the Do realm you’re only doing, there’s nothing more to distract your focus from that. You can only see the tasks from whatever perspective you want: time (today, soon or overdue) or space (meaning the contexts you assign in Decide).
  • you can only add information in the Assess realm, in Decide and Do, you are performing completely different. Some clients suggested that I should add the possibility to add tasks from Decide or Do. That is very unlikely to happen.

Well, that’s it. If you have the app, just let me know in the comments and also feel free to give suggestions, critiques or any type of feedback you want. If you didn’t buy the app yet, you can do it by clicking here, for just 2.99 USD.

Or, at least, you can start assessing the possibility. :-)

Holiday, New Domain Name, Full Moon and Projects

Posted on Jul 10, 2009 in BloggingiPhoneTravel & Fun by
11 Comments

Starting tomorrow we’ll go on a short holiday. While are still in Romania we thought it would be interesting to have a car trip in Europe, trying to take things easier and see as much as we can. We planned really loosely this trip and even the word “planned” is used in a quite inappropriate context. We just decided it’s time to go, taking advantage of Bianca’s holiday and of the promised good weather. We do have some cities we want to see and a little bit of a plan, but it can be changed anytime. We plan to see Vienna, Prague, Salzburg, a little bit on Austrian Alps and probably some sea side in Croatia. At best, the holiday will be two weeks but we can go back anytime if we don’t like something.

I’m quite happy with this arrangement. Although I had quite a bit of traveling during the first half of the year, it was on my own, without my family. I visited Thailand, Japan and had a short stop in New Zealand too (ok, that was business related, but still). But since the last trip something started to feel somehow inconsistent and I strongly felt the need to be in a warm and welcoming company. Don’t get me wrong, it’s fantastic to travel on your own and feel independent, autonomous but I just had enough of that. I’m not bored, I just need something else.

I do have some scheduled posts for the next week but again, if I will find something interesting to write while I’m still on the trip, I’ll change the order. All in all, expect a little bit of relaxation here. Maybe it was time for it.

New Domain Name

A few days ago I decided to change the domain name from eDragonu.ro to DragosRoua.com. There were a few reasons for that. First of all, it was this gap between what I wrote in the last year and the old domain name. Edragonu was my first nickname on the internet and I had quite a bit of emotional link to it. But what I wrote in the last year was more related to my real persona. It was time to jump from the nickname level to the real life level.

Second, there was this SEO thing that was bothering me from some time. It seems that Google is limiting the searches to a particular TLD by redirecting the searches to the assigned servers. Let me explain: if you have a domain ending in .ro, even the content is in English, Google will assume it’s a Romanian site and it will include it in the Google.ro cluster. Sometimes, some terms were out of it and had quite a good ranking on other search engines, but seemed there were local search engines too, like Google.in or Google.ie. Changing the domain to .com will most likely put the content in the main English clusters.

I know there will be a time penalty until the new domain will be picking up in the search engines index. When I made the change I had an alexa rank of 75.000 which is something way about average. Right now I’m starting from 24.000.000. :-) It’s picking up quite faster though, I think I’ll be back in my old numbers – and even better – anywhere between one and three months. Which is exactly when the holiday will be over and a new season will start.

If you have some bookmarks, feel free to change them to the new domain.

Full Moon

This summer will be really interesting. A few days ago we had a full moon and in the next few weeks will have a solar eclipse (not visible form Romania, only in Asia) and another full moon. These full moons are also mixed with some eclipses. Of course we have full moons every 30 days, but these are specials. There are some interesting astral configurations.

I won’t dive into details here, but these are very special aspects. A lot of violent events took place in the last few weeks and I expect even more to come. I’m not a huge fan, but I can’t but take into account Michael Jackson’s violent death. A few days ago we had an earthquake in Romania, a small one, but we expect replicas. The keyword here is “aggressiveness”. It’s time to release huge energy depots and if you’re not knowing why you’re doing this and try to blame others for your own problems, it will come back in a very strong way. Everything seems to get out of your reach.

This is a time for control and moderation, for clarity and lucidity. Every step made without careful consideration will not only be made in a very aggressive way, but this aggressiveness will come back amplified quite soon, usually to trash something out. There was some turmoil in my neighborhood the other days, involving some big confusions and false problems,  but I’m happy I managed to keep my head clear and let the flood of aggressiveness pass me by. I’ve been there before and I know that any aggressive attack made under these circumstances will come back in a very destructive way.

Projects

In the last few weeks I’ve put together some new projects, a few of them not directly related to this blog. The main one is still related to this blog though, and it will be my first commercial product. I can’t say more at this time but most likely it will be in the form of an ebook. I worked pretty hard during the last 5-6 weeks only to realize that the project will be way bigger than I initially thought. Writing a book is something way more difficult than working on a blog. Regardless of the ebook success – which will, of course, be quite visible :-) – I’m already getting a lot of good vibes only from working on the book.

The other projects are related to the new business I’ve started in New Zealand, and it will be about iPhone programming. There’s no secret that I am a huge fan of iPhone, even before it was launched. Doing some programming for the platform was just a logical step ahead. Learning Objective C can be frustrating at times, but it’s rewarding. I already have several apps outlined and some of them are even in Alpha stage. I expect to have my first apps in the App Store this fall, but then again, time will tell.

One of the iPhone apps will be directly derived from my Assess – Decide – Do series. It will be a productivity application, what we may call right now a task manager, but it will be built upon the Assess – Decide – Do framework.

It was a busy time, as you can see, and what’s ahead is even more challenging.

Which.
Is something.
I love. :-)

The Gratitude Experiment

The experiment is out and running, check out the new page listing the last 20 tweets tagged #gratitude on twitter.

It’s funny how a certain path we chose leads us to realms we never knew to exist. Or puts us on roads far more adventurous or enriching than we thought. In today’s post I’ll share one of those twisted yet so rewarding situations in which a certain path lead me to another, much deeper one.

The iPhone Situation

I can say in all truth that I’m using an iPhone even since before it was launched. One of the most read posts on my blog is about iPhone and GTD – total black belt productivity, a post featured on the official forums of David Allen company. That post was written weeks before the launch of the iPhone. What can I say: it’s a useful device which combines my needs for communication in one little tool.

But I use my iPhone for much more than communication. In a post about Law Of Attraction and Action I gently let you know that I exercised with the Law Of Attraction by using my iPhone. It was a very simple exercise: I set up reminders in the calendars with my goals and took time to read them and interiorize them. I kept this habit for several months and of course, it worked. I also used my iPhone for getting in touch with my Personal Mission Statement, another interesting exercise which I am still using. (more…)

Practical Astrology: The Moon In Signs

As some of you may know, I use astrology for personal development. Among some other stuff, of course. And by that I mean I use it constantly as a symbolic model of reality. The position of the planets on the sky is having some kind of influence on our lives and I learned how to understand that. Today I’ll share a little experiment which lasted for more than a month. It’s about the Moon and its position on the sky during a complete cycle from New Moon to Full Moon. If you still think astrology is only a horoscope in the morning paper, with no value whatsoever, I recommend you to read more about understanding astrology. And if you still think this is just new age garbage, feel free to skip this post, it’s ok.

I guess you already know the Moon is having a complete cycle in around 28 days around the Earth. During this cycle the Moon is staying between 2 and 3 days in each astrological sign. The nature of the sign in which Moon is at some moment is affecting that part of our being which is ruled by Moon. There are many interpretations of what Moon “is” in our lives. For the sake of simplicity I chose to understand Moon as the ruler of our emotions. It has a number of other interpretations but staying only at the emotional level will just be enough for this experiement. Just remember that the Moon represent the things that can hurt us and the things which we need healing from. The Moon is the unconscious pulse of our emotional field. From joy to sorrow, from compassion to anger, everything that is in your emotional filed has something to do with the Moon and its position on the sky.

The Experiment

During a complete cycle of the Moon I monitored my emotions. I also monitored the position of the Moon on the sky and noted my impressions and reflections of what the Moon in the sky could be. I did this in a kind of geeky way by using, of course, an iPhone. There are two apps on the iPhone that I used during this, none of them directly related to astrology, but more on that later on after the experiment description.  For now, let’s just focus on what I felt during a complete cycle of the Moon on the zodiac, from Aries to Pisces.

Moon in Aries

My emotions were extremely intense, like powered with high energy. On the whole, I felt an intense drive to action. Anything I started was out of enthusiasm, was powered by my own choices, not by external circumstances. I also felt an interesting silence on the emotional level, not too much noise, everything seemed extremely pure. It seemed that Moon in Aries favors clean emotions focused on achieving immediate results. Moon in Aries is also accident prone, during this interval I had a small driving accident (no consequences, but the burst of energy was almost physical around me). (more…)

Mind Mapping For iPhone: iBlueSky

After my last GTD software review, the article about OmniFocus for iPhone, I received a lot of positive feed-back. But among all the messages, there was a specific email which intrigued me. It was an email from a United Kingdom based software company called Tenero, in which the main developer announced the availability of a mind mapping software for iPhone. Are you kidding? A mind mapping application for an iPhone? That would be really something.

Minutes after I received the message from the developer, I checked AppStore, search for an application called iBlueSky, and installed it. And started to play with it. And continued to play with it. And played with it even more. And, if I wouldn’t have to write this post, I assure that I would play with it even now :-) .

How to mind map with your iPhone

The first thing you notice when you use iBlueSky is the extreme simplicity of the interface. You only have 3 buttons on the lower bar and this is actually all you need.

Adding child items is as easy as hitting the “+” icon in the lower bar. Before that, you have to select the item which will contain the child branch. If you want to delete an item, or even an entire branch, you hit the recycle bin icon. Easy as pie. And if you want to edit the content of an item, double click it:

And yes, this is actually an iPhone in landscape mode, and we all know that this is the best mode for text input, since the keyboard will spread over much more space. I personally think that the lack of a landscape mode in the Mail of iPhone is a serious drawback, by the way… (more…)

OmniFocus for iPhone – a GTD application reviewed

A simple Google search for omnifocus is revealing more than 220.000 results (as of October 2008), which, for a personal task manager application, is a lot. And I would say that this popularity is well deserved by OmniFocus. Not only because it won the Apple Awards for Best iPhone Productivity Application in 2008, but because is a really useful piece of software. OmniGroup, the makers of OmniFocus, are well known in the Mac world for their OmniOutliner and OmniPlan products. I used OmniOutliner a lot until I shifted to mind mapping but I still use it from time to time even today. As for OmniPlan, it was a key factor in big projects, when I used to run my own online publishing business.

But from a large structure planning application to a personal organizer implementing GTD there is quite a gap, and one cannot expect to apply the same knowledge in both areas. Maybe this is why OmniGroup made some very interesting moves back in 2006-2007, bringing into the development team of what they called at that time Omni Fu the icon GTD blogger Merlin Mann, and the maker of a popular GTD implementation called Kinkless, Ethan Schoonover. I dare to say that OmniFocus wouldn’t be what it is today without the advices and know-how of those GTD gurus.

But enough with praises, and let’s start reviewing OmniFocus for iPhone. I expect this post to be rather big, so put aside some time to read it. Also, I must say that the intended audience for this goes from the unexperienced iPhone user who wants to increase personal productivity to the moderate GTD follower, so if you fall between these categories, give it a read.

GTD with an iPhone

The first and the most important thing about OmniFocus is its compliance with the GTD methodology. For those of you unaware of this concept, GTD is a methodology invented by David Allen, which can dramatically boost one’s personal productivity. In short, by using GTD you are doing stuff (Actions) grouped together (Projects) in specific locations (Contexts) and by taking one step at a time (Next Actions). OmniFocus lets you add your Projects, fill them with Actions, assign them to Contexts, and see when and where you can do them. But a picture is worth a thousand words (have I already said that?) so here is how the home screen of OmniFocus looks like:

OmniFocus for iPhone home screen

OmniFocus home screen

Projects and Contexts are just usual handles for task management, so these are pretty self explanatory, but what you can see at a glance in the home screen is also the time constraint for your activities. Being able to see on the home screen how many tasks are due soon, how many are overdue and how many important (flagged) tasks you have is such a time saver. Another noticeable thing is the lower sidebar, which features icons for nearby contexts, syncing, and quick add an action to Inbox. That lower bar is available all over the application. Simple and clear interface.

(more…)

My Ultimate Wordpress Framework

I use WPSumo on this very blog, not only because I was one of the founders, or because I'm actively maintain it, improve it and promote it, but because it's the best choice when it comes to a premium wordpress framework.

See for yourself

Join Me In this New Journey

Wanna make it to Tony Robbins' next event? Just contact me and we'll find a way. See you there ;)



Copyright 2006 - 2012 © Dragos Roua | find me on Google+

Brilliantly Better | Natural Productivity - Assess, Decide, Do | iAdd for iPhone / iPad | 100 Ways To Live | Mirabilis Media NZ