koogawa blog

iOS、Android、foursquareに関する話題

Conference With Developers 2 #confwd に参加してきたよ

今日はグリー株式会社で開催された Conference With Developers 2 に参加してきました。
 
f:id:koogawa:20140202001207j:plain
 

Conference With Developersは、iOSに携わるすべての開発者に向けたカンファレンスイベントで、去年に引き続き2回目の開催らしいです。私は1回目に参加できなかったので、初めての参加になります。

 
イベント詳細ページを見ても分かる通り、LT含め、発表者陣がめちゃくちゃ豪華でした!
イベント中のツイートもまとめさせて頂きました。
 
以下はイベント中のメモになります。
 

GitHub活動を通して個人のキャリアを積みつつ仕事の成果を出す方法 

 
  • 株式会社Fablic
    • 女性向けフリマアプリFril
    • 100万ダウンロード突破
    • iPhone/Androidアプリを開発
  • プライベートでFeedbackというiOSアプリも出している

https://itunes.apple.com/jp/app/feedback-buroguno-fan-xiangwo/id577698758?mt=8&uo=4&at=10l8JW&ct=hatenablog

  • 去年の「個人の日記」騒動で大変傷付いている
  • GitHub活動
    • なぜiOS界隈でGitHubが盛り上がってるのか
      • 2008/10 にNDAが緩和されたのが原因ではないか
      • それまではSDKについて話すこと自体が難しかった
      • ASIHTTPRequestなどの成功事例が生まれた
    • Github活動への道のり
      • Psycsさん、kishikawaさん、ishikawaさん見てすげーと思う
    • GitHub活動を通して得たもの
    • NJKWebViewProgressの話
      • UIWebViewのロードプログレスを取得できる
      • 2013年4月公開
      • NJKはninjinkunのプレフィックス
      • このプレフィックスも一生懸命考えたけどDISられた
      • UIWebViewとViewControllerとの間にProxyとして挟む
      • JavaScriptのdocument.readStateでロード状況を取得
      • プロト実装反日、綺麗にするのに1日
      • Yahoo! JAPAN、FB Messengerで採用された!
      • GitHubでも500ぐらいスターがついてる(嬉しい)
    • NJKScrollFullScreen
      • Facebookアプリライクなフルスクリーン表示ができる
      • 2014年1月公開
      • UIScrollViewDelegateをフックしている
      • proxyとして動く
      • 実装2日、READMEとブログ書きで1日
      • GitHubでも300ぐらいスター
        • Issue、プルリクもぼちぼちきてる
    • GitHubチャンス
      • ググっても自分の欲しいライブラリがない
      • cocoaControlsで使ったライブラリも用件にあわなかった
      • 毎回同じ処理を書いている時
      • 作るのにおすすめのモジュール
        • 手離れがいいもの
        • UIがないモジュール
        • UIがあるとOSのアップデートに追従しないといけない
        • Web連携アプリに必要なパーツはまだ足りてない
        • その他の言語、プラットフォームにあってiOSにないもの
    • モジュールを使ってもらう方法
      • DemoAppをつける
      • 依存ライブラリはPodfile, submodulesで一発インストールできるように
      • 組み込みやすくする
        • 継承前提では作らない、とか
      • テストを充実させる
      • Description、README.mdをがんばる
      • UI系ライブラリならアニメーションGIFを付けよう
      • CocoaPodsにPullRequests
      • ブログ書く&Twitterで周知
      • @iphone_dev_jp で宣伝
    • はてなブックマークiOS SDK
      • OSSを仕事にした例
      • シード開発者を事前に募集
      • Issue, Pull Requestを使って開発
      • 様々なアプリで採用
      • 退職後のメンテナに
  • おわりに
    • 大事なことはみんなPerlに教わった
    • OSSハッカーロールモデルは既にある
    • 個人と仕事の両方に良い影響がある
    • GitHubは履歴書
    • アプリ作る良い簡単でメンテコスト低い
    • 次の週末はGitHub活動しましょう!
 

「公開用のObjective-Cの書き方」


Objective-C Programming Guide for Open Source Software // Speaker Deck

  • LINE株式会社
    • と言ってもLINEアプリを作っているわけではない
  • GHFeedというアプリをプライベートで作ってる 
GHFeed

GHFeed

  • ishkawa.org
  • 仕事効率化
  • 無料

 

  • アプリとの衝突
    • シンボルの衝突
      • クラスやカテゴリメソッド、定数の衝突
      • リソースの衝突
      • 画像などの衝突
      • ぶつかるとDuplicated Symbol !!!
      • クラスの命名規則
      • カテゴリの命名規則
        • 3文字の小文字のPrefixを付ける
        • - (void)ish_additionalMethod など
      • 関連するクラス名を先頭に付ける
      • 外部から不要な定数は非公開にする
        • static NSString *const ISHLocalConstant = @"Foo";
    • リソースの衝突
      • 画像などの衝突
      • main bundleには同名ファイルはおけない
      • main bundleとは別の Library bundleを作ればいい
  • 良い@interface
    • 実装を推測できる
    • 誤用をさせない
    • - (id)get:(id)key だと何が返ってくるか分からないし引数もわからない
    • - (id)objectForKey:(id)key にしちゃった方がわかりやすい
    • 良い@property
      • 変更の可否を明確にする
      • ライブラリの利用に必要な情報は与える
      • ライブラリの異様に不要な情報を与えない。
      • readwrite
        • 変更する必要があるプロパティ
        • いかなるタイミングに変更されてもオブジェクトの整合性を保つことができる
      • readonly
        • 変更する必要のないプロパティ
        • 変更を禁止したいプロパティ
    • 良い通知パターン
      • blocks
        • 通知が特定のメソッドに結びつく
        • 通知の種類が少ない場合
        • openWithCompleHandler:^(BOOL success)とか
        • 引数には結果を渡す
        • エラーが想定される場合はNSErrorも渡す
        • 構文忘れる人は http://fuckingblocksyntax.com/ 見るといいよ 
      • delegate
        • 通知が特定のオブジェクトに結びつく
        • 通知の種類が多い
        • 通知の受け手が1つしかない
        • scrollViewDidScrollとか
      • NSNotification
        • 通知の受け手が多い
        • 通知の送信元と受け手が遠い時
        • グローバルな通知になるので容易に採用しない
        • blocks、NSNotificationで代用できないか検討しる
      • KVOの説明は省略(質疑応答タイムで話題になった)
  • ユニットテスト
    • テストを書く理由
      • テストを書いた法が開発が速い箇所がある
      • コードが壊れていることをすぐに発見できる
        • 長期にわたって複数人がメンテナンスするプログラムは壊れやすい
      • ライブラリのテストのメリットはコストに見合うことが多い
        • アプリと比べて仕様変更が少ないので、テストコードがごみになる可能性が低い
    • CIを導入する
      • せっかくテストを書いたので確実に実行したい
      • git pushするともれなくレポートがもらえる仕組み
      • 導入方法
        • ターミナルから実行できるように
        • コマンドから Cmd+U みたいなことができる
      • Webサービス
        • Travis CI
          • public repositoryなら無料
          • GitHub連携
          • ステータスバッジが付く
        • COVERALLS
          • コードカバレッジ表示サービス
          • public repositoryなら無料
          • GitHub連携
          • ステータスバッジが付く
  • 会場からの声
    • KVOはチーム開発の場合は使うべきではないと思ってる
      • わかりにくい
      • 受けるメソッドの中で分岐しないといけない
      • 注意しないとクラッシュする
      • KVOはハック目的で使うことが多い

「デザインのわかるエンジニアになる」

iPhoneアプリ設計の極意 ―思わずタップしたくなるアプリのデザイン

iPhoneアプリ設計の極意 ―思わずタップしたくなるアプリのデザイン

 

 

モバイルデザインパターン― ユーザーインタフェースのためのパターン集

モバイルデザインパターン― ユーザーインタフェースのためのパターン集

 

 

  • ノート販売もしてる
  • デザインとは
    • 綺麗にすること
    • スタイリングではない
    • デザインとは設計
    • 目的を提案・解決する(デザイン)
    • 複雑な問題を整理して解決すること
    • デザインはセンスではなくエンジニアリング
    • JavaScriptより自由度の高い言語にすぎない
    • 目的を提案、解決する、満足を与えるUXデザイン
    • 使いやすくするUIデザイン
    • わかりやすくする情報デザイン
    • ジャイロを用いたパララックス
    • パララックスは面白エフェクトではない
    • iOS7のブラー(半透明)は「一時的なステートであること」を明示的に宣言するための手段
    • iOS 7電卓問題のお話
    • 一瞬の変化は信用されない(認識されない)
    • まとめ
      • デザインはセンスではなくエンジニアリング
      • しっかりしたデザインは、位置、色、動き、音あらゆることに意味と目的がある
 

JavaScriptCore.frameworkでできること」 

f:id:koogawa:20140202001415j:plain

LT