2013-05-04 17.17.51This is the beginning of something wonderful as I embark on the journey of writing my own apps, specifically iOS & MacOSX based. I have two apps(both games) in mind – a short term app for the iPad and a very ambitious long term project for Mac OSX(more details on these in the future). My plan along the way is to form my own LLC and spend some quality time giving myself a refresher on XCode, iOS and Objective-C. I would like to specifically focus on some APIs that I don’t currently have any experience using or perhaps just go over some advanced topics such as blocks and categories . After I feel that I am ready to write my first app, I will start theย  process of applying for an iOS developer license from Apple. Some people have told me it takes a while, while others have gotten approved in very little time so we will see how that goes.

The first goal, is to find out more about myself. How am I going to manage my projects with no supervision? How am I going to balance my personal life, my real job and other responsibilities around writing an app without experiencing burnout? I know that it is very important that I keep myself active, to eat brain foods and get as much sleep as possible so that I can deliver my best. How am I going to manage my projects working with an artist and musician – who, most likely, will not be local? Once I get my initial design what publish date should I give myself, if at all? I don’t have a manager to review my work or make sure that I am keeping up with my goals. So it is all up to me and only me to make this work.

The second goal, is to expand my knowledge of Cocoa and Cocoa Touch along with the development tools, focusing on breadth and depth and venturing off into the cool worlds of Core Graphics and Core Animation which will be focus topics in my upcoming apps mentioned above. When I say, “expand my knowledge” I don’t mean reading more books or articles or watching more Stanford iTunesU courses online. All those resources are great but as I have experienced with other languages, nothing beats rolling up your sleeves and actually writing your own applications and experiencing everything that goes along with it(fixing bugs, logic issues and even design changes). Fixing mistakes is one of the best learning experiences bar none.

However, the work and effort to make it through these issues doesn’t come without its rewards. I know that through this process, I will understand the core aspects of iOS at a deeper level and become better familiar with the Apple documentation(since I will be visiting the docs often). I will also become more familiar with the tools, libraries and frameworks or at least, at a minimum, understand them enough to know where to look to find an answer or fix a problem if I get stuck.

Since I have had experience with other object oriented languages(C++ & Java), stepping into Objective-C has been easier but there are concepts with Objective-C such as protocols/delegation that took a little time to get used to and understand but after grasping these concepts are extremely powerful and exciting to use. As a disclaimer, I have done some Cocoa/iOS programming before on my own time and I am writing iOS apps at work so I am fairly familiar with XCode and Objective-C but as stated earlier I am looking really to give myself a solid refresher on parts of the language that I really don’t use that often. I think this will be useful before I start designing out some details about the apps that I have in mind.

Obviously, it would be nice to generate some added income as an independent developer but I am going to need to market my app, generate hype/traffic/interest and make friends with app developer communities/websites that might write an article to generate extra traffic. Simply creating an app and putting it on the app store is probably not going to open the floodgates of users who have been waiting all their lives to play my creation. I will also have to keep in mind that there are rare first time/one-hit wonders out there on the app store. The obvious plug to this is Angry Birds from Rovio but I know that they almost went out of business before that smash hit. As a one-man show(I will be doing all the design and coding), who will be hiring people to work on any artwork or music/sound effects that I will need, I will need to keep positive and see it through but also be realistic that I am most likely not going to become a millionaire after my first app.

As I move forward, I will write about my progress, post updates with screenshots(without giving too much away ๐Ÿ™‚ ) and provide some interesting insights to what I discover along the way so stay tuned!


Stanford Artificial Intelligence Course Online

I just registered for the Stanford A.I. course online that Sebastian Thrun is putting together for anyone that wants to learn a little something about A.I. or perhaps those of us who are looking for a challenge. I suppose, for myself, I am in both camps. For a long time, I have been interested in Artificial Intelligence from the view point of software in general, even though it has been used a lot in the context of video games. If you don’t know Sebastian, he was part of team Stanley – a Volkswagen turned robot that they built to compete in the Darpa Grand Challenge, which they won in 2005 by implementing their own machine learning algorithms, which is a topic that this course will cover.

I think that there is great potential for software of all disciplines, that could take advantage of A.I. techniques and as time goes on, “learn” about the data that it reads, correlate that with past data and fuse that with logic built into the software to accomplish whatever its goal is.

The course runs from mid-October to December and there are two tracks. You can register to just watch the videos like this one or you can be ambitious and sign up to do the homework assignments, take the mid-term and a final exam. In the end, you will get a statement of accomplishment which isn’t going to count for a real grade or any Stanford credit, naturally. There is also a stand alone machine learning course offered at the exact same time but with a real job, family stuff, programming on the side and all that I won’t have time for that.

I opted for the more ambitious track so I’ll be busy for the next few months learning about probabilities, machine learning, robotics, game theory/planning and other topics. I don’t know how many people signed up but evidently the top 1% will automatically get an interview with google. Looks like I will have to be at my best ๐Ÿ™‚ Wish me luck!

OpenGL – Visualizing The World

My first job out of college involved writing OpenGL applications with C++. A lot of the projects revolved around high performance computing where TONS of data was stored on massive supercomputers. The customers would rent time on these machines where they would have a set amount of hard drive space to store all their data. They would also have access to a few developers who had the talent to turn this data into something beautiful and full of 3-D goodness, that would help them in their research. This is what I was hired to do.

Usually, we just had room enough to take slices of a whole data set, considering that the data consisted of not only space but time and some data sets were petabytes in size. Each time slice could hold many variables to visualize across a wide area and each variable had their own updates through time so it was a massive task to manage all of these components.

Examples of data sets included things like wind shear, water currents, water temperatures out in the ocean at multiple depths, movements of buoys over a period of years, salinity, plankton and coral data… you name it. Beyond just water and land, we had data sets from jet and rocket propulsion tests and molecular data with time steps in nanoseconds. It was really interesting work.

Since a lot of our work did revolve around climatology, we often had to place the data that we received, on the world somehow to make the data more meaningful. This, of course, means that you have to visualize the earth somehow. Naturally, you can view the earth as flat or as a globe, which require lat, lon data.

I ended up writing a set of classes to set all this up to prevent starting from scratch every single project. The only thing that would be left to do would be to place the data at the appropriate places (usually each data set did contain lat, lon information).

You can head over to the OpenGL page to check out some screenshots!