One week has passed working for new company

One week has passed working for new company. Testing my skills in iOS development has commenced.

Unfortunately, what I have feared did happen. I got involved to the project which is struggling to be finished for some reason. It was impossible to avoid being the newly added member to the project in the midst of development. This is really daunting for me, since I have to do cramming to learn the whole plan and history of successes and failures, in limited time before the due date. And I must meet their expectation for me to actually contribute something helpful to increase the chance to finish the project successfully.

Above all, it’s really frustrating when the solutions I want to implement are not working for this project, when they are the similar ones I had done successfully in other places. Being a new comer to the project is really hard for me to trace the causes of problems, without having enough time to understand whole lines of codes and their intentions. It scares me how bad it will be if the project is much larger than current one.

I just want to save precious time, without being troubled by failed tests of implementations. It could be much better if I could get involved from the beginning of a project.

Advertisements

Being employed and having new expectation for PopToo

I got employed to work for a South Korean company, developing iOS apps. Though it will cause me to take less attention to PopToo project, personally I am grateful for going to be able to earn some money to support myself and other activities, and continue to train myself to be a better iOS developer while working for this company.

PopToo has been great so far, being used by highly active users from United States, Brazil, Japan, Germany and Australia. While developing PopToo’s iOS app and its web application, I was not only able to learn the right technologies, but also have them to be tested by many users. Being confident about the apps to work is one thing, but confirming them actually working for many users is something really different.

However, I must admit PopToo has big disadvantage. It needs long period of time to build users, if massive strategic marketing cannot be granted to this project. Since PopToo is willing to stay free as long as possible, it’s really easy to be demotivated by having so little number of downloads for days, though it’s natural result for not being promoted like other popular apps. I shouldn’t forget not to have too much expectation for a service app like PopToo.

I guess working for a company and developing apps designed (or demanded) by others can broaden my experience in iOS deveopment, allowing me to see PopToo as an interesting test for my skills and an app that is evolving over long period time, not as something I need to be dependent on to prove myself instantly. No matter what, programming should be meaningful and fun, especially if it’s for PopToo project.

As I am getting used to new responsibilities given from the company, I will make time to continue developing for PopToo project. Though it won’t be as exciting as bringing regular updates almost every week, keep supporting the platform and its users will teach me a lot of things about software development and serving others, especially those things that can only be taught after long time has been passed. Test of time has commenced.

[Korean] Explaining How I developed PopToo service

This is written in Korean, introducing myself for the development job application. However, actually this describes how I developed PopToo, what I thought and what decisions I made, rather than who I am in general. Though it’s unconventional, telling the story about what I have done for my project can tell more about who I am, since I am applying for a technical job requiring to solve to problems. I don’t know when it will be, but perhaps I may rewrite this in English to be shared, or to be used for applying for other development jobs.

[아이폰 개발]
전세계 많은 개발자들과 마찬가지로, 독학으로 직접 개발을 해보면서 학습을 했습니다. 이전부터 MacBook 제품을 사용해 왔으며, iPhone 3GS, iPad, iPhone 4 모두를 경험해보면서, 최종적으로 현재 PopToo iOS App 을 완성하여 App Store 에서 서비스 하고 있습니다. http://itunes.com/apps/poptoo

개발을 진행하면서, Objective-C 의 장단점을 충분히 경험할 수 있었으며, 성능 향상을 위해서 iOS Framework 의 전반적인 특징과 Multi-Threading 의 기초를 습득, 구현하였으며, iOS 가 제공하는 객체형 데이터베이스 Core Data 의 장점을 최대한 활용하여, 유지 보수에 탁월한 소스를 효율적으로 완성할 수 있었습니다. 충분한 검토와 고민을 하여 탄탄하고 버그 없는 Version 1.0.0 이 설계되었고, 데이터베이스 Migration 등을 포함한 업그레이드를 설계상의 큰 변형없이 무리없이 진행하면서, 현재 버젼 1.2.x 를 서비스 하고 있습니다.

아이폰 및 다른 프레임워크에서도 공통적으로 추구되는 객체지향과 MVC 방법론을 최대로 응용하여 장기적으로 유지 보수에 탁월한 설계를 완성하였습니다. 물론, 동료 개발자들과 소스가 실제로 공유될 시에는 여러가지 다른 사항들을 보완해야겠지만, 개인적으로 객체지향의 최대 장점이라 여기는 Inheritance 와 Polymorphism 의 혜택을 받으면서 수정과 개선에 필요한 작업을 최대 코드 몇줄 수준까지 줄일 수 있었습니다. 설계상 시작부터 DRY 원칙을 지키면서 Model – View – Control 을 서로 분리하였기에, 한쪽의 변경이 어떻게 다른 부분에 영향을 미치는지 확인이 무척 용이하였고, 단순반복 작업을 피하면서, 이후 업그레이드 까지 준비할 수 있었습니다.

소스코드 작업을 할 때에는 객체의 상태와 변수 값을 구동 중에도 테스트합니다. 데이터베이스 모델이 수시로 변경되고 객체의 클래스 자체가 변경될 지라도, 기본적인 구동에는 문제가 없게 할 수 있기 때문입니다. 거기에 더불어, Xcode 의 기능들을 최대한 활용하여 수시로 Build 상황을 점검하면서, 버그 없는 결과물을 만들기 위해서 테스트에 충분한 시간을 할애하고 있습니다. 물론 시간이라는 중요한 자원을 소비해야 하지만, 훌륭한 결과물이 만들어지면, 사후 관리에 필요한 시간을 별도로 할애해야 하는 상황을 방지할 수 있기 때문에, 궁극적으로는 오히려 시간을 더 아낄 수 있다고 여깁니다. 특히 PopToo 의 경우에는 버그 제거에 국한되지 않은 지속적인 업그레이드를 사용자들에게 제공해야 하기 때문에 꼭 필요한 설계 및 작업 방식이었습니다.

훌륭한 개발자 분들이 거듭 강조하시는대로, Comment 설명이 굳이 필요하지 않을 만큼 사람이 읽기 편하고, 설계의 의도와 당위성이 보이는 코드를 작성하고자 최선을 다했습니다. 목적과 용법을 쉽게 파악할 수 있는 변수, 클래스 및 메소드 명을 사용하였으며, 성능을 최대한 헤치지 않으면서 개발자가 쉽게 작업 순서도를 파악할 수 있게 한줄 한줄 신경을 썼습니다. 물론, 공동 작업자가 없이 혼자만 보게된다면 그리 심각하게 여기지 않아도 되지만, 불필요한 반복과 실수를 방지하는데 가장 좋은 방법이라고 여깁니다. 소스코드 자체가 개발 설계도가 될 수 있게 하면, 최대의 결과물이 나올 수 있기 때문입니다.

[웹 애플리케이션 개발]
PopToo 는 위치기반의 음악 정보 공유 서비스로서, 독자적인 앱으로서만이 아니라, RESTful 웹 애플리케이션과 함께 연동되는 Social Network Service 입니다. 각각의 아이폰 앱에서 데이터를 중앙 서버에 업로드하고 다른 사용자들이 공유한 데이터를 다운로드할 수 있어야 합니다. 결국, 아이폰 앱 개발 만으로는 해결할 수 없는 부분이라서 추가적인 학습이 필요한 주제였습니다.

이전부터 WordPress 기반의 블로그를 운영하면서, PHP 와 MySQL 를 활용해 보았습니다. 개발 초기에는 간단하게 PHP 를 활용한 RESTful 기반의 애플리케이션을 이용하였습니다. 웹 개발에는 초보였던 제게는 단순히 아이폰 앱에서 데이터를 업로드하고 MySQL 에 저장하고, 다운로드 받을 수 있는 것에 만족을 했었습니다. 블로그 용의 일반적인 PHP 호스팅을 사용한 무척이나 단순한 초보 수준의 작업이었습니다.

하지만, 점점 더 RESTful 기반의 웹 애플리케이션 개발에 대해 학습을 하면서, 블로그용 호스팅을 사용하는 것은 좋은 선택이 아니며, 성능과 확장성을 위해서는 PHP 보다는 Ruby 또는 Python 이 훨씬 더 용이하다는 것을 알게 되었습니다. 더군다나 자료를 검색해보아도 Ruby 또는 Python 을 이용한 자료가 훨씬 더 많고 선호됨을 알 수 있었습니다. 바쁘게 진행되는 아이폰 앱 개발에 비해서, 웹 개발은 지식과 경험의 부족함으로 어떻게 설계해야 하고 작업해야 할 지 확실한 결정을 내리기 힘들었습니다.

다행이도, Google, Amazon, Heroku, Engine Yard 등에서 개발자들을 위해서 웹 애플리케이션 전용 클라우드 호스팅을 제공하고 있습니다. 처음에는 작은 규모에서 무료로 서비스를 이용하고, 성장 규모와 트래픽에 따라서 추가 비용을 지불하게 하는 방식이어서, 본인과 같은 소규모 개발자에게, 막 새롭게 웹 개발을 배우기 시작한 사람에게는 무척이나 유용한 서비스입니다.

Ruby 기반의 Heroku 와 Python 과 Google App Engine 중에서 선택을 하려는데, 막상 두가지의 장점과 단점을 비교하기 보다는 제가 가진 한계를 어떻게 보완해 줄 수 있느냐에 더 큰 비중을 두었습니다. 개인적으로는 Ruby 언어에 대한 관심이 무척이나 크고, 학습자료의 방대함과 커뮤니티에 매료되었기에 Heroku 서비스를 이용하고 싶었으나, 웹 애플리케이션은 개발자의 역량뿐만 아니라 서버의 성능과 확장력에 대한 의존도가 무척이나 높기 때문에, 별도의 관리대응능력을 갖추지 않으면 상당히 어렵거나, 추가 비용이 많이 필요할 것으로 판단되었습니다. 반면, Google App Engine 은 이용방식에 제약이 많고, 자료가 상대적으로 많지 않지만, 자동적으로 일정 규모까지 서버의 성능을 애플리케이션에 맞게 조절을 해줄 수 있고, 일정 Quota 까지는 무료로 이용할 수 있기때문에, 저와 같은 비전문 웹 개발자에게는 상당히 유용하고 경제적인 선택이었습니다.

현재 웹 애플리케이션은, 학습자료에서 가르쳐 주는 소스들을 활용한 가장 기본적인 데이터 저장과 전송을 맡고 있습니다. 분명 PopToo 가 어떻게 성장하느냐에 따라, 웹 애플리케이션의 중요도가 커질 터인데, 시간을 내어서 웹 애플리케이션 개발능력을 더 키워보고 싶습니다. 아무리 아이폰 앱 개발에 집중을 하고 싶을 지라도, 웹 개발의 기초 정도는 분명 파악을 하고 Prototype 수준으로라도 개발을 할 수 있어야, 공동 작업시 웹 개발 담당자와의 의사소통과 작업 효율을 높일 수 있을 거라 생각합니다.

Free Applications for the Developers using Mac

Mac and Windows togatherA few weeks ago, I reinstalled Mac OS X Leopard after one year of experiencing my first non-Windows environment. Not that I needed to fix something, but simply I wanted to set the optimal environment which I’ve learned by trials.

So far, it has been very satisfying, and owning a machine which allows me to have both Mac and Windows worlds for development is purely exhilarating.

To be honest, I don’t have anything against Windows environment. Rather, it’s because I still can have Windows in a Mac machine, I decided to get one, so I can obtain the privilege to use Mac OS X(Unix) and Windows together. For acquiring this environment, I figured Mac could be the only machine, unless I hack something.

It has been great joy to find more about Mac and useful equipments for the developers and to train myself to become better at them.

This is the list of applications I was recommended by great blog posts, and would strongly recommend to other Mac users, especially to the new developers who has experienced Mac for no more than a year like myself. I personally use these, some are available also in Windows, and of course, they are free.

Xcode:

There is no other IDE for developing an application for Mac OS and iPhone. Unlike Microsoft’s expensive Visual Studio, you can get it for free, as included in Mac machine you purchased. You may have to pay for iPhone Developer’s Program if you want to use an actual device for testing and deployment, but to use only simulator you can get Xcode with iPhone SDK for free. Currently, I am enjoying so much time to master this great tool.

Eclipse:

I cannot say much about this, but it seems like this IDE is a must for Java or other popular language developers, almost in every environment. Though I’ve been using it less then I expected because of using Xcode and Aptana more, I think nobody can ignore the importance of its presence in a developer’s machine.

Aptana:

Using almost identical user interface as Eclipse, this tool is specialized in web development. Whenever I need to write a web program, rather than using Eclipse, I use Aptana. So I designated Aptana for web development, and Eclipse for Java.

TextWrangler:

I just can’t find any other editor better than this for Mac environment. This one has almost every feature a developer can ask for. My use of an editor is to modify codes already written, while IDEs are for writing new codes, because they provide code suggestions while typing. Together with TextWrangler, I can have a mini and quick IDE for anything.

DropBox:

If you are in the situation of using more than one computer in many places, DropBox folder is a must. Though it gives only 2GB to be used for free, it’s sufficient to synchronize your working files to be shared among your office computer and home computer. This synchronization is very powerful if you save your workspace of Eclipse or Aptana in DropBox folder, you can have same coding environment shared among the computers accessing the same DropBox folder.

FileZilla:

So far I’ve been using only this one, because it seems to be the simplest and the fastest. I strongly recommend this for its bookmark and folder synchronization features.

XMind:

This is a great tool for building a beautiful mind map of your own. To me, the user interface and icon are simple and pretty.

NTFS-3G for Mac:

Since I use Windows also, it’s necessary to be able to access NTFS-3G formatted disk. You may use FAT32 format to be used in both Mac OS X and Windows, but it’s doesn’t allow a single file to be bigger than 4GB. Using this, you can stay in Mac OS X mainly while accessing Windows file system freely.

SynergyKM:

I use more than one computers. If I want to use all of them on the same desk, it’s necessary to use only one keyboard and mouse to be free from annoyance of interchanging between different keyboards and mouses. This app allows to share keyboard and mouse with multiple computers using different OSes. As long as the computers are in the same network, knowing the IP address or the computer name of the main(server) computer which will share its keyboard and mouse is suffice.

Can anyone recommend more apps, or the better alternatives to these, especially for the developers using Mac? I would love to get some comment. Thank you!

Returning after almost 2 months of absence from blogging

My last post was published on August 29th, re-posting other blogger’s post. It was difficulty to balance working for others(company) and working for myself. (if they can be distinguished.)

I’ve been busy working for the company, learning and trying fundamentally important subjects. Learning new things, often with so little resources, without a personal assistance or a dedicated mentor, I’m humbled and grateful that my working environment does not simply consume my talent, but rather trains me to become more knowledgeable and pragmatically skillful.

Initially, my team was focused on iPhone development, following the latest craze, but unfortunately due to lack of preparation, the project is now canceled. It’s hard to ignore the importance of knowing exactly what to do before trying anything.

Currently, I’m actively leading an open source project, in the category of ECMS, using the famous Alfresco. For now, only I can do is utilizing it with addition of Korean language, but I hope sometime sooner my team and I can commit some meaningful contribution to the source.

Tried to blog, saved some drafts with the interesting ideas, but being not so confident enough to write without full knowledge about the subjects, prevented me from publishing. Maybe I am being too careful, or being simply procrastinating. Well, in a good way, Twitter being the useful micro blogging can be the understandable excuse.

As I got used to the professional work environment and pace, I think now I can find the time to blog more regularly, possibly at least once a week. What I strive to get is to be efficient in managing time economically for working for other and myself.

Though it has been too busy and difficult to make time for myself, I am glad that my professional experience has been enriching, meaningful enough to share with others.

The Danger of Hesitation and Procrastination

For many days, I had been seriously considering to register a domain for my web development. Finally, after many days of speculation, I had come up with almost perfect domain name. It was about two weeks ago. At the time, registration for one year was priced about $7.99. However, because of my personal reason, I hesitated to obtain it thinking there might be better options. I was wrong. And now it costs about $59.99 for one year.

I couldn’t understand what happened to me. The price that I saw about two weeks ago was sale price and I didn’t know well about the price difference in registering .at, an Austrian domain. In other words, I wasn’t fully informed about domain pricing and business. I can’t help but still thinking what if I didn’t hesitate to register the domain at the moment of conceiving the domain name.

Another lesson I learned is about the danger of procrastination. My hosting company sent me an email about its affiliate program offering $10 for putting the banner linked to its website. Not reading the details of the email, I thought about doing it a few days later. But the email offer was valid only for 3 days. Noticing how easy it was like notifying the hosting company that I put the banner in my website, I was embarrassed to ignore the value of $10 which can be used for supporting my hosting charges. Lost the easy money.

Here I would like to stress the reasons why hesitation or procrastination is ALWAYS BAD:

It happens because one is not informed enough.

Due to having narrow viewpoint or stereotypical idea, one cannot act even though the decision to do it needs to be made as soon as possible to progress the task.

It cannot be replaced by better activities.

To be honest, I cannot confidently say I always did something better or meaningful things while in the state of hesitation of procrastination.

You cannot expect the future.

Accidents happen and the remaining time becomes so much shorter than anticipated.Often it’s caused by other factors, but blaming them is not the right excuse for lack of preparing for accidents.

It leads to abandoning the initial plan.

Unless I had the strong need and will to obtain the domain name before it was too late, I would’ve abandoned my plan for developing a web service. It frightens me how shameful and regretful it could be.

It is not a good thing to talk about.

Almost nobody wants to hear about the reasons or excuses for hesitation or procrastination state. The professionals working together will definitely think negatively about the one who is mindlessly talking about what he or she could do if he or she had enough time but didn’t.

Does anyone think differently? What’s differences between hesitation and procrastination? What are your experiences? Can anyone likes to suggest links?

Why it’s hard for me to blog frequently

Examining myself very closely, my recent difficulty in blogging is not because I am a total recluse who doesn’t like to share with anyone about anything. Or I can make it worse by labeling myself as a lazy person, but it’s not actually true considering what’s going on in my mind. I do have some topics in mind, but somehow it’s just not as easy to share them with the public as I thought it would. It seems to be a methodical, or a situational problem which I must learn to deal with using the solutions from the experienced bloggers and developers. There are what I suspect to be reasons or excuses for my lack of blogging.

Preoccupied in doing a project. But it’s not ready to be opened and shared yet.

  • Because I want to keep it as a secret.
  • Still the project in the conceptualizing phase which is still too abstract even to myself.
  • Waiting for internal and external encouragement on this, to solidify confidence in the project.

I guess this waiting is the major cause preventing me from actual progression. Also, without opening the minimum information about the project, how can I expect to learn anything from the experienced developers whom I can meet and interact through blogging? I must learn to present and communicate well with the experienced developers.

I am not tuned to the current events.

  • Not because I intentionally ignore them, but simply I just want to distinguish facts from opinions and it’s taking some time.
  • Due to my lack of professional insight, what I can blog about current events is only the repetition of what’s already there with a little bit of my simple thoughts. It’s not a real contribution in my measure.

To gain more professional and unique insight, it would take a lot of reading and speculating, challenging me to build and re-build knowledge basis. This task must be taken quite seriously and I need find the right way to do it.

I need to have more reading and watching to expand my knowledge and imaginations, which cannot be limited in web browsing.

  • Embarrassingly, I began to understand the need to have more various activities including something entirely different from or even against one’s field of study, in my case it’s Computer Science.
  • Narrowed perspective, intentionally or unintentionally gained prevent one from developing and sharing his or her experiences or thoughts with others.

I am thinking about having more knowledge in film making, English learning, Bible study, social servitude, and unknown other possibilities. The additional solution is to meet more people from various interests. Though I don’t neglect the value of socializing, it’s been hard for me to be more proactive.

Not utilizing the notes in my journal.

  • As a proof for not being lazy, I’ve been keeping journals. However, almost none of the notes are used in blogging. Because of excessive filtering not to jeopardize my private notes, my record keeping has contributed so little for my blogging.
  • But most of all, I think it’s lack of confidence in my notes that prevented me to review them more carefully to find the value.

The worst thing that I found while writing this blog, blogging infrequency is the consequence of not following the plan as it is scheduled. Procrastination is the worst kind of enemy for developers and bloggers like myself. It’s not only about unable to do something, but also about taking away the opportunity to do something else, possibly better and more important thing.

And I must free myself from fear of not becoming a responsible contributor. Accepting my current status of being a student of life and knowledge without any set date for graduation, must not be ashamed of utilizing the resources from others especially the open information and I must understand that mature blogging experience require so many trials and error.

In conclusion, not only for my blogging but also for other activities, I must embrace beauty of making mistakes and learning from these valuable experiences.

UPDATE(2009/08/04 16:31) Found a good article related to this blogging problem. [CopyBlogger] The Most Horrible Blog Post Ever