Jan 19, 2011, public speech at PasonaTech Japan

User, User, User

This is a public speech I gave to PasonaTech‘s seminar on smart phone development. Basically, this is not a technical speech, in this session, I proposed that every engineer should focus on what the user really want, not just what your superior what. In order to do so, you need to whatever you can on the full development process.


As always, remember to follow me on Twitter, or on Facebook

mixi API SDK for iOS sucks

この記事は仕事で使ったmixi API SDK for iOSの感想を記録したものです。完全に個人の意見です、勤務先の会社と全く関係ありません。

このエントリーを書いた時点の最新版はV1.3.2(March 1st, 2012)です。その後、V1.3.3 (March 15th, 2012)がリリースされました。

問題

1.3.3なのに、Sample プロジェクトがない?

どういう基準でリリースしたのか全くわかりません!リリースにokを出した人は絶対エンジニアではないと思います。

1.3.3なのに、ソースコードにテストケースがついていない?

mixi社内にはあるかも知れないですが、リリースしても良いじゃないですか?リリースできない理由が分からないです。

V1.3.2の時、OAuthのtokenを取得したら、store/restoreができないというバグがありました。それはありえないでしょう! 一応僕がこのバグをmixiの開発者に報告して確認してもらって、3/15にリリースされた1.3.3で直されました。

ちなみに、1.3.3と1.3.2のdiffを見てみたら、このバグだけを直しました。

iOS 4のリリースからまもなく2年, iOS 5のリリースから半年, まだBlockを使っていない?

iOS 4.0は2010年6月21日に正式にリリースされて、iOS 5.0は2011年10月12日に正式にリリースされました。

つまりmixi API SDK for iOSを開発し始めた時点は既にBlockとGCDを使えました。何故か使っていないのか分かりまへん!

APIのリクエストとリスポンスがセットにしていない

何故かセットにするのが必要ですか?簡単な例です:mixi Photoのアルバムを取得するために、必ず2回のAPIリクエストを叩かないと行けないです。なぜなら、簡単公開のアルバムのリクエストとその他アルバムのリクエストが違います。

そもそも、Blockを使えばこれは一発で解決できます。現在僕らが苦労をしないとdelegateのメソッドが呼ばれる時、どのリクエストからのリスポンスのかさっぱりわかりません。
mixi公式アプリでは全部一つのページで一つのAPIをしか叩かないですか?

最悪:削除などのリクエストが成功したら、エラーのdelegateメソッドが呼ばれます!

なぜかというと、JSONの解析が失敗した!何だと!!!?レスポンスはHTTP 200のみです。テストする時、削除などのテストをしないの????馬鹿野郎!

全体的に用語を統一していない

認証時client_idを用いて認証用のAPIはありますが、doxygenで生成したdocにclient_idについて、何も言及していない、公式サイト上はこのような2つ矛盾な表記があります:

  1. client_id = consumer_key, googleの検索結果も全部Consumer keyの意味です。しかも、同じ技術仕様の中に、AndroidもConsumer keyの意味です。
  2. client_id = mixi-phone-ios_xxxxxx,しかし、このページではxxxxxxの意味は一切説明していなかった。

もう。。頼むよ!xxxxxxの説明を追加してください!

公式app経由の認証は実機でしか使えない

シミュレーターではSDK経由の認証ができるのに、docに一切記載していないです。自分でも全部実機でテストとデバッグをやていたんですか?偉いね!

Source Codeを公開しているのに、githubなどを使っていないの?

Zipファイルベースのソースコード配布は不思議だと思います。まだ2000年にいるの?

公式アプリの作りが悪い、認証失敗は日常茶飯事

URL schemeから起動した時の挙動がおかしい、通常のアプリロジックと混ざっています。URL schemeからの起動であれば、明らかに認証の事を優先すべきじゃないですか?

ユーザから見ると、「なに??」と思うしかないでしょう。

adプログラムのviewのaddOnTopaddOn:メソッドは全然tab viewとnavigation viewを対応していない。

そんな簡単にaddSubViewを使って、回せられるの?ちゃんと自分でテストしたのがい???

なお、fade in/fade outなどのanimationを全く考えていないでしょう。ちょっとだけその考えがあったら、アイコンの背景色を除くべきでしょう??

mixi API SDK for iOSを使うと、ストレス対策を事前に用意したほうがオススメ

mixiとFacebookの戦いはもう既に勝負が見えるでしょう。僕は見えました。

僕がコードレビューを提供しましょう

もちろん、mixiはまだまだ伸びていきたいでしょう。世界のユーザーを獲得などを別に置いといて、日本国内の市場シェアを維持もしくは拡大していきたいでしょう。その考えがあれば、サードパーティの開発者を失望させるのは嫌でしょう。それを考えたら、僕の力を貸してあげますよ。

この記事はタダですが、コードレビューを1時間5万円で提供できます。欲しいなら、ご連絡ください。

Blogging from Flock

How does this feel?
-> Not so bad.

What if I need a picture?
-> It’s too weak! I need the basic picture manipulation functions. Like position and size.

Category?
-> Damn it! Flock blogging does not support category! Unbelievable!
-> Oh, sorry, it does support category but not so obviously.

My 2009

After a few days struggling, I decided to confess that I was a loser for work in 2009, and also, I’m a luck man for life in 2009.

Work

I started this year with the biggest failure project in my life as a software engineer. July 2008, Apple released iPhone in 32 countries, lucky enough, I was in Japan, which was one of the first 32 countries. I bought the iDP program soon after I got my iPhone on July 25, 2008, and I started to build my first iPhone app.

After learning Objective-C and iPhone development for about 2 weeks, I thought I was ready to start my first iPhone project. Before I started, I did some homework(But was not enough), I didn’t have much money, I didn’t have many resources, I didn’t have any experience in game development. What I had was some language learning experience(I found out later that experience is hard to be turned into application). I was a programmer and project leader in enterprise software development, actually, I knew nothing about what people need and want in consumer market.(My Weakness: Don’t know too much about consumer market.)

But I decided to challenge myself. So I tried to start my first app: gogoSpeak Japanese on Sept 2008. I planed to make this application an platform for Japanese language learning, but as I studied AppStore everyday, I gave up this idea in middle of Oct 2008. And decided to created a application with my own contents like scripts and audios and pictures. I tried to do this because I didn’t have money to buy some contents and I did not want to violate other company’s rights. (Big Mistake 1: Underestimated the difficulty to make language learning contents.)

I decided to start the coding at first. (Big Mistake 2: content first or app first.). I thought I could create the app and define the working flow, so after that I could create some content to fit this working flow and app. That was wrong, and I realized this more than a half year later.

After I started the coding for 2 or 3 weeks, I had to go to an contract work started from Nov 10th 2008, and ended at the end of March. For some other things I returned to gogoSpeak’s development at Jun 2009, that was a year after iPhone debuted. Damn it, I wasted a whole year!(I had to: make some money to continue the iPhone development.)

I continued the development on the weekend during I was a contract employee, but I did not make any progress because I made the biggest mistake(Big Mistake 3)ever. I was trapped in a technical problem for over six months! I also used my iPhone ITS support credits along with iDP and did not get the right answer. If I could go back to that time, I would tell myself that either give this feature up or spend some money to resolve this problem. It was really hard for me to get myself out of that trap. Why I was trapped in such a stupid problem? I know I want to make this application better with this feature, but why I could not obey some basic management role that I often talked about 2 years ago(At that time, I was a good project leader)?

In early July 2009, I figured out how to resolve the technical problem and started to make my own contents. Until that time, I realized how difficult to make some good language learning contents. If I could go back again, I would definitely create the content at first then create the application.

Finally, I submitted gogoSpeak to AppStore on Aug 23th, 2009. One year behind my original plan. I explained to my friend that iPhone need us code faster, but I could not do it myself. What a loser I am!

After August, 2009, I started a new plan to created some other applications. I carefully reviewed those mistakes I made during making my first iPhone app. This time I finished my second app(iPinyin) in one month and it’s still in the top 100 paid application(Education) in Japan. But this time, this application was not good enough because it did not become a hit app. It has good contents which I prepared for over 2 weeks to record the voice of each Pinyin, but the usability was not good enough, the user experience was not good enough, the UI was not good enough. I compromised to myself that I need to finished this in one month. I still consider this app has a good idea, but bad implementation(My Weakness: Easy to compromise).

Later I read some blog from Tapity which was maintained by Jeremy, and another blog is  Tap Tap Tap(Yeah, the Tap Tap Tap created the famous voice and unit converter on AppStore!) . Jeremy wrote one sentence that really touched me: Developers compromise, developers lose. I thought this is the reason why I did not success. Thank you Jeremy. And also, Tap Tap Tap told me that what a really consumer market is. Look at those apps created by Tap Tap Tap, I believe they are doing the best on non-game categories on AppStore. Jeremy analysed a lots of Tap Tap Tap’s secrets of success. Tap Tap Tap and Jeremy are now my best teacher.

In the end of 2009, I took a look back of my career. Because of so many compromises I made before, my life sucked. I decided to make a new start in 2010 without compromise. I will try to rebuild my confidence and my pride.

 

Life

Compare to my work, my life was a little bit lucky, after my wife arrived to Tokyo on April 2009, I thought a new life was began, I’m finally living with my lovely wife and I believe we will live happily forever.

Watching my wife making impressive progress on Japanese, that’s really why everyday ended with happiness.

 

About 2010

As Jeremy said, Developers compromise, developers lose. I will not compromise again, I will do everything in my best. Here is some goal.

  1. Be a Microsoft employee, that’s a dream that I compromised a looooong time ago. But this time, I mean it and I believe I can do it.
  2. Keep working on iPhone, create 2 or 3 apps. Not focus on how many apps I create, but how best I can do.
  3. Do everything I could to support my wife’s new challenge: Be a Waseda student.