Learning to Adopt Concurrency with Confidence

Recently, I have been enjoying the opportunity to practice implementing concurrency in my software engineering.

Following iOS’s own concurrency programming guidelines, I could develop some confidence in designing the workflow from the initial stage to achieve optimal performance.

By separating works into two types; for UI & not for UI; I have been able to keep queues of operations to be as simple as possible. Also, due to obvious convenience of using Block programming with iOS SDK, I could be able to actually see where asynchronous queues branched out, and merged back, right within the scopes of codes.

Being able to keep tracks of these operations was quite exciting for me, since I used to have great fear in adopting concurrency. But the real issue I have to fear should have been lack of real performance and difficulty in seeing the workflows among the objects.

Fortunately, learning more about the convenience of using NSOperationQueue and the basic criteria for deciding when to branch out and when to merge back, which is; “Are these operations for UI or not?”, I could see what’s actually going on much clearer than ever.

It has been a good case for me to realize it’s not enough to memorize the list of methods, but often it’s more important to know when and where to use them appropriately.

Advertisements

Celebrating PopToo’s First Year

PopToo recently has become one year old!

I thank every PopToo Friend for finding this meager iOS app and using it everyday.

To a solo developer like myself, who never had his own personal project before PopToo, any kind of interest means a lot. I can’t help but feeling grateful and be humbled by all the PopToo-ings made by our Friends. Thank you so much!

Here are some records made with our PopToo Friends:

179 PopToo Friends checked-in 37419 times.

The first check-in was done by @revilo1390 at Jan. 5, 2011 20:13 UTC from Denver, Colorado, United States.

The song was “Chasing the Lights” by Last Winter.

Top 3 users who checked-in their songs are:

  1. @orbitat (14995 times)
  2. @r_Salxixa (11818)
  3. @yukino1230music (3020)

11932 songs, 3719 albums and 2651 artists were identified.

The Most checked-in song (84 times) is titled “All I Want” by

  1. A Day to Remember” (58 times)
  2. LCD Soudsystem (23)
  3. The Offspring (2)
  4. Cure (1)

The Most checked-in album (516 times) is “The Black Swan” by “Story of the Year”

The Most checked-in artist (1763 times) is “A Day to Remember”

Top 5 songs of “A Day to Remember” are:

  1. “All Signs Point To Lauderdale” (64 times)
  2. “I Heard It’s The Softest Thing Ever” (59)
  3. “Better Off This Way” (59)
  4. “All I Want” (58)
  5. “If It Means A Lot To You” (56)

Top 10 genres are:

  1. Rock
  2. Pop
  3. Soundtrack
  4. Indie
  5. Hardcore
  6. Alternative
  7. Punk Rock
  8. Indie Rock
  9. J-Pop
  10. Electronica/Dance

The Most checked-in Foursquare venue is “Runner Academia (1199 times) in São Paulo, Brazil

Top 10 cities are:

  1. Sao Paulo (Brazil)
  2. San Francisco, CA
  3. Vallejo, CA
  4. Fremont, CA
  5. Palm Coast, FL
  6. Berlin, Germany
  7. Mt. Shasta, CA
  8. Rocklin, CA
  9. Santa Barbara, CA

Because of the experience in developing PopToo as my own personal project, I was able to prove my proficiency in software development and eventually got full-time employment.

Though I had to compromise time I may spend to improve PopToo more rapidly, having financial security freed me from the pressure to find the business model for PopToo.

So, I could keep PopToo as a free app without advertisements. By treating it as a non-commercial project, I didn’t have to ask for the user’s attention for the ads, but just for their satisfaction in using PopToo everyday.

About 3 months after PopToo’s release, an awesome app called Soundtracking was introduced. Other than its name, the app and its service were exactly how PopToo dreamed to be. Instead of feeling beaten, it taught me about the importance of knowing the limits of PopToo project. Without serious capital and additional development resources, trying to make PopToo as good as Soundtracking while having full-time job could have been the fatal disaster. It did solidify PopToo’s mission to stay non-commercial project, to be used for training me to become better iOS developer and for building meaningful relationships with PopToo Friends.

The future of PopToo is about becoming the Real Service. Though I’m not sure about keeping it non-commercial, I want to build great community of people who love to use PopToo. Three of the important objectives for continuing PopToo project are upgrading to have aesthetically pleasing user experience, building the web platform and utilizing geolocation more effectively. For these objectives, I guess I should learn more about graphic design and web development.

Again, I would like to thank all my PopToo Friends. Thank you so much for enjoying your favorite music with PopToo!

iOS Tech Talk 2011 in Seoul

[This blog does not contain any technical information. Also, I am an Apple fan, probably my blog will be purely subjective.]

iOS Tech Talk World Tour

Today, December 8, was very special day for me.

It was my birthday, which was meaningful to me and my parents.

Also, it was the event day for iOS Tech Talk in Seoul, which was meaningful to every iOS developer in S. Korea.

One of the greatest things I didn’t expect from this event was to be able to meet the same instructors who were at the WWDC. In other words, this Tech Talk event can be considered as the extension of WWDC, not the another kind.

To some people, including myself, these instructors are the Rock Stars. They were touring around the world to excite their fans. Some people took pictures with their stars. I didn’t do it because I thought it could be perceived as objectifying them, which could be impolite. However, I just hope I don’t regret not taking pictures with them, later.

Aside their professional authority in the field of software development, the instructors were extremely friendly. They were so generous enough to pay good attention to people they never met before, who kept asking annoying questions. Probably, it’s their job requirement as the  Apple Evangelists. However, it’s impossible to ignore but respect their effort.

This one day event did impress me a lot, strengthening my positive perception about Apple and its people. They do know how to make their fans happy.

Allow me to reuse the tweet I shared: With these enthusiastic, friendly and yet extremely professional masters, the future of Apple will stay to be bright, I think. Even if Steve is no longer with them, with us.

I definitely want to attend WWDC 2012. Not only because I am eager to learn new technologies, but also I want to continue the joyful conversation I was having with the masters. Now it’s clear to me that, everything about Apple has become very personal to me.

My understanding in naming a Class with Prefix

Many source codes, especially those which are written in kinds of C languages, almost always named their classes using prefix.

Intuitively, I adopted to use this way of naming, since many GOOD ones were written in this way. My usual way of learning is by imitating.

As I’ve gained more experience, it became obvious to me why it’s critically helpful for programming.

In my case, I care quite a lot how methods and variables are named. Nicely named ones can help understanding the workflow, minimizing any confusion, thus producing reliable lines of codes.

However, one must careful not to use same syntax for the name of class and instance of it, since it’s difficult to distinguish if one is meant for the instance or the class. It gets worse if the class name and the instance name are as common as something like ‘WebViewController.’

Since naming instances of class happens more often than naming a class, it’s better to name the class with less common way. To make it less common, one of the easiest way is to use a prefix, elongating it to be syntactically different. For example, by using prefixed, ‘FXDWebViewController’ for the class name, one can use ‘webViewController’ as a name for an instance.

Though this instance name is quite common, you can use it as often as possible, without causing the programmer to be confused and even preventing compile time or run-time errors, as long as they are separated by scopes.

It gets even better when one has to use Find and Replace function, since syntactically different words are much easier to be found more quickly.

Also, using the prefix, you can leave it as some kind of signature, claiming your authorship and responsibility on the source codes.

Why having personal projects is critical for a software developer?

I would like to share my reasons, based on what I learned from other developers, to have personal projects outside of professional jobs.

Unless you are a super genius, who can implement newly acquired knowledge flawlessly at once, it’s inevitable to make mistakes in programming based on new ideas. Your choice for solutions will need to be revised repeatedly. It may require number of customizations to accommodate merging these solution with codes from other developers or from older projects, though they are working just fine with no problems by themselves.

At early stage, your professional job will provide this kind of challenges many times, allowing you to grow patience in dealing with errors and testing implementations to find the right solutions. Sooner or later, you may find yourself simply customizing lines of codes for already solved problems. In other words, your job will get easier as your professional experience grows.

Unlike many other professional fields, new technologies are introduced so often, much faster than we can keep up with. But until your project manager or supervising developer decides to use these new technologies, you may only hear about them, if this is the worst case.

Your ability to implement new ideas, that you’ve practiced so hard, will become dull or inefficient. And what makes it more depressing is that this kind of backsliding happens very quickly and drastically. When finally new technologies are required for your projects, it could be embarrassing that your development skill is much like how it were at the early stage of your profession.

Having your personal projects not only mean that you build something, but also that you make own decisions. Because you are in charge, you can test your implementation skill with new technologies without waiting for anything. Whether your attempt to use new ideas is successful or not, you will be prepared to deal with issues later when it’s much needed for real jobs assigned by your employer.

Along with technical decisions, you can also make scheduling one on your own, without any constraints. Of course, once it’s public and used by many others, you may have to listen to their requests and satisfy their demands as soon as possible. However, it’s done proactively, being able to lengthen or even shorten the development time as you like. This sense of controlling time is probably only possible if you have complete ownership of your project, which is by having personal project outside of your job.

Also, no matter how much dedication you’ve put into your works, technically these jobs assigned by your employer are actually not yours. These useful evidences for proving your skills may not be permitted to be used when you are applying for a new job from another company. But with you own personal projects, you can just submit them to be fully analyzed without any guilt but with great confidence. It’s always better to silently show what you are so good at, than just loudly speak about it.