Tuesday, March 27, 2012

How to integrate MVC pattern with GCD/KVO/CoreData in iOS

My publication

Last year, I published this article on Software Design Issue November. The whole article was written in Japanese. Since I’m not a native Japanese, I’d like to thank my fellow coworkers Nagano/7gano and Kato/guruguruman to help me review the article again and again. Without your help, I could not make this happen.

View the content

The Japanese title of this article is iOS でのMVCパターンの再検討およびCore Data、GCD、KVOの実践運用

The article was coordinated with Gihyo‘s format and it’s hard to layout it again, so, I’d like to share the finished page in PDF with everyone.

View the article in PDF

Brief content in English

  • CoreData is powerful, and if you don’t have legacy database to conform to, use it
  • KVO is super powerful, but come with side effect. It can help you with your multiple UI update, and can also mess your code flow
  • GCD is awesome! forget about delegate, use GCD whenever possible with multithread programming
  • All these technologies comes great with MVC pattern

Finally, as always, follow me on Twitter or Facebook



Via Tonny Xu http://feedproxy.google.com/~r/tonnyxu/~3/ee83fUHCzx0/ iPhone Dev

Monday, March 26, 2012

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



Via Tonny Xu http://feedproxy.google.com/~r/tonnyxu/~3/siaaueqVywY/ General, iPhone Dev, Programming

Sunday, March 25, 2012

Fibonacci Number

Fibonacci Number is a very common topic in everyday life, because it has a tight relationship with golden ratio Φ(Phi).

In CS, calculate the nth fibonacci number is also an interesting problem. Here is a Lightening Talk I gave to my company’s engineer on March 22, 2012. Take a look at it if you are looking for a job now, or you just don’t know how to calculate a fibonacci number.


Meanwhile, don’t forget to follow me on twitter, or on Facebook



Via Tonny Xu http://feedproxy.google.com/~r/tonnyxu/~3/2ZB_E66nfgI/ iPhone Dev, Programming, Tips

Saturday, March 24, 2012

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万円で提供できます。欲しいなら、ご連絡ください。



Via Tonny Xu http://feedproxy.google.com/~r/tonnyxu/~3/OMXcuWo3XP0/ General, iPhone Dev

Saturday, March 17, 2012

The next generation: Objective-C 2.2 or Objective-C 3.0?

According to a recent post by Big Nerd Ranch Weblog, the most recent Clang build now support Objective-C Literal feature.

WOW!

This is gonna be the most exciting part of this year’s WWDC! I believe Apple will announce this feature in this year’s WWDC. Damn it, I can’t miss that!

What’s Objetive-C Literal syntax feature?

According Ted Kremenek from apple who committed a large patch to llvm repository recently(On March 6th, 2012)

Add clang support for new Objective-C literal syntax for NSDictionary, NSArray, NSNumber, and boolean literals. This includes both Sema and Codegen support. Included is also support for new Objective-C container subscripting.

My apologies for the large patch. It was very difficult to break apart. The patch introduces changes to the driver as well to cause clang to link in additional runtime support when needed to support the new language features.

Docs are forthcoming to document the implementation and behavior of these features.

Is it just like the boxing/unboxing feature in Java?

Yes, it is.

This feature makes Objective-C much more easy to use and much more like a modern high-level programming language while maintain the downward compatibility with C.

NOTE: Java introduced auto boxing/unboxing in 2004 with Java 1.5.0.

How to use Objective-C Literal feature?

Here are some examples:

Before we start to use Objective-C Literal

 NSArray *myArray = [NSArray arrayWithObjects:                     @"string",                      [NSNumber numberWithInt:1234],                     [NSNumber numberWithFloat:12.34],                     [NSNumber numberWithLongLong:123456789012345],                     nil];  NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys:                         @"Value1", @"key1",                          [NSNumber numberWithInt:1234], @"key2",                          [NSNumber numberWithBool:YES], @"key3",                          nil];  

After using Objective-C Literal

 NSArray *myArray = @[@"string", @1234, @12.34, @123456789012345, nil]; NSDictionary *myDict = @{     @"key1":@"Value1",     @"key2":@1234,     @"key3":@YES };  

Super easy, super fast! right?

What’s the next version number?

Last time Apple updated Objective-C language with block syntax, and a fantastic library for concurrent computing. There is an official version for block, that’s Objective-C V2.1.

This time, it brings some nice features which are common in Java and other dynamic language lick ruby, php, python. What’s the version we should call it?

I predicate that Apple will proudly call it V3.0. Yes, Objective-C V3.0. Let’s wait and see!

Want to have a try?

Goto clang’s page, checkout the most recent source code, build it and try to run a test case!

NOTE: if you downloaded the source in a folder with a space in the name, you might not be able to build the llvm and clang.

So, DO NOT put the source code in a folder with space


Finally, you can reach me at twitter: @tonnyxu or facebook Tonny Xu



Via Tonny Xu http://feedproxy.google.com/~r/tonnyxu/~3/lfqDWprKGeE/ iPhone Dev, iPhone Romur, Programming, Something really cool!

Friday, March 16, 2012

WordPress app now support using Camera+ to take a photo

20120316-220247.jpg

So many wonderful effects now can be used with WordPress.



Via Tonny Xu http://feedproxy.google.com/~r/tonnyxu/~3/BzdT667Aw1I/ iPhone Dev