SlideShare a Scribd company logo
1 of 46
ライ麦畑で捕まえて
The Catcher in the Rye

Jerome David Salinger
アント側
  クライ麦畑で捕まえて
The Catcher in the Rye Client

Jerome David Salinger
Kaoru Shibasaki
自己紹介
自己紹介
• とある動画配信サイトでFlashクライアント作っ
てます

              Kaoru Shibasaki


             Twitter ID : crexista
NICE CATCH してますか
try {
        var hoge:Hoge = new Hoge;
        hoge.fuga();
        ======以下数百行 =====
}
catch(e:Error) {
     // Nice Catch (^ ー *) b
}
try {
        var hoge:Hoge = new Hoge;
        hoge.fuga();
        ======以下数百行 =====
}
catch(e:Error) {
     // Nice Catch (^ ー *) b
}
本当のNICEなキャッチを提案
Necessary
 Information for
 Customer
 Enjoyment
ユーザーが楽しむための情報を
キャッチすること
NICE じゃない例
例外のメッセージをそのまま表示するのみ
   何が起きたか分からない!
アドレスとかどうすればいいのよ!
    てか怖いよ!
普通の人はプロトコルとか分かりません
 分からないのにOK押したくない !
『[ネットワーク]で別の名前を指定してください』
          だけで良い




OK ではなくて 『コントロールパネルを開く』に
押されたらネットワークの設定画面を開いてあげ
原因よりも方法を先に、簡潔に
良いNICE キャッチするにはどうしたら
良いNICE キャッチへの3つの指針
• ユーザーの選択は絶対!


• 真実に向かおうとする意思


• 覚悟する者は幸福である
ユーザーの選択は絶対!
1. ユーザーの選択は絶対 !
• クライアント側はユーザの選択に左右され
る

• ユーザーの選択が例外を起こす事もある
1. ユーザーの選択は絶対 !
例) ローカルに変更情報を保存しようとしたとき
      ユーザーに保存することを確認
1. ユーザーの選択は絶対 !
例) ローカルに変更情報を保存しようとしたとき
      で、また何かのタイミングで保存
1. ユーザーの選択は絶対 !
例) ローカルに変更情報を保存しようとしたとき
1. ユーザーの選択は絶対 !




  ユーザーの選択は例外じゃない
1. ユーザーの選択は絶対
• ユーザーに拒否られたらあきらめよ
う!

• 拒否られた事はもうしない
真実に向かおうとする意思
2. 真実に向かおうとする意思
• クライアント側はユーザーの環境に左右さ
れる
 • 時計
 • 通信
 • Etc..


• 起きたエラーの原因を見極める必要がある
2.真実に向かおうとする意思
例) HTTP で外部SWFを読み込んで例外が起きた場合
      サーバに置いてあるswfをリクエスト




          InvalidSWFError
     バイナリに異常あるときの例外が飛ぶ


     サーバに置いてあるswf自体がおかしい可能性
     通信時に障害がおこった可能性
     ユーザーのHDDがおかしい可能性
2.真実に向かおうとする意思
例) HTTP で外部SWFを読み込んで例外が起きた場合
      サーバに置いてあるswfをリクエスト




          InvalidSWFError
     バイナリに異常あるときの例外が飛ぶ



      もう一回だけリト
      ライ
2.真実に向かおうとする意思
例) HTTP で外部SWFを読み込んで例外が起きた場合
      サーバに置いてあるswfをリクエスト




          InvalidSWFError
     バイナリに異常あるときの例外が飛ぶ



      それでも失敗した
      ら?
2.真実に向かおうとする意思
例) HTTP で外部SWFを読み込んで例外が起きた場合
• 他のAPIやpingを打ってみる → 通信をチェック


• テストデータをローカルに保存してみる → HDDをチェッ
 ク

• Etc…


2回やってだめだった処理は繰り返さない!
2.真実に向かおうとする意思

 private var retryCount:int = 0;

 public function tryRequest():void
 {
          try {
                   request();
          }
          catch(e:Error) {
                   retryCount++;
                   //マジックナンバー
                   if (retryCount < 5) tryRequest();
          }
 }
2.真実に向かおうとする意思

 private var retryCount:int = 0;

 public function tryRequest():void
 {
          try {
                   request();
          }
          catch(e:Error) {
                   retryCount++;
                   //マジックナンバー
                   if (retryCount < 5) tryRequest();
          }
 }
2.真実に向かおうとする意思



   理由のないリトライは
サーバーにもクライアントにも負担
闇雲にリトライせずに
原因をチェックする処理へ
覚悟した者は幸福である
3. 覚悟した者は幸福である
• クライアント側はシステムに左右される


• 時にキャッチできない例外を飛ばす
3. 覚悟したものは幸福である
• プレイヤーのVersionが想定より古い
    と




•       勝手に ↑ なダイアログが出る
3. 覚悟したものは幸福である


 UIからかけ離れたものが
 いきなり出るとユーザーは混乱する
3. 覚悟したものは幸福である




ユーザーに覚悟をさせる
3. 覚悟したものは幸福である

違う機構(javascript)で制御してあげる

             ◯◯は新しくなりました

             左のダイアログが出るか
             ら
             「はい」をおしてね
3. 覚悟したものは幸福である

 UIでラップしたダイアログを出した後




      ↑ を表示
結論
• 原因じゃなくて対処法を出そう
• 難しい文言はつかわない
• リトライは1回まで
• ユーザーの設定は例外扱いしない
• デフォルトアラートは出さないように
• 出す場合は対処法をユーザーに伝えてから
それでは、良いナイスキャッチを!

  Have a Nice Catch !

More Related Content

What's hot

蜘蛛の巣から抜け出すには?
蜘蛛の巣から抜け出すには?蜘蛛の巣から抜け出すには?
蜘蛛の巣から抜け出すには?Hayato Tominaga
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外higaki
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料SECCON Beginners
 
コンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについてコンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについてYASUKAZU NAGATOMI
 
シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)icchy
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門icchy
 
やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-Joe_noh
 

What's hot (11)

Memory sanitizer
Memory sanitizerMemory sanitizer
Memory sanitizer
 
蜘蛛の巣から抜け出すには?
蜘蛛の巣から抜け出すには?蜘蛛の巣から抜け出すには?
蜘蛛の巣から抜け出すには?
 
Javascript basic code
Javascript basic codeJavascript basic code
Javascript basic code
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
 
Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
 
CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料CTF for ビギナーズ バイナリ講習資料
CTF for ビギナーズ バイナリ講習資料
 
コンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについてコンテナイメージの脆弱性スキャンについて
コンテナイメージの脆弱性スキャンについて
 
シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)シェル芸初心者によるシェル芸入門 (修正版)
シェル芸初心者によるシェル芸入門 (修正版)
 
今から始めるzsh
今から始めるzsh今から始めるzsh
今から始めるzsh
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
 
やってみた -URL外形監視-
やってみた -URL外形監視-やってみた -URL外形監視-
やってみた -URL外形監視-
 

Viewers also liked

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
#yidev 横浜 iPhone 勉強会 - 第16回 オープニング
#yidev 横浜 iPhone 勉強会 - 第16回 オープニング#yidev 横浜 iPhone 勉強会 - 第16回 オープニング
#yidev 横浜 iPhone 勉強会 - 第16回 オープニングTomohiro Kumagai
 
100915 HTML5とか勉強会発表資料
100915 HTML5とか勉強会発表資料100915 HTML5とか勉強会発表資料
100915 HTML5とか勉強会発表資料Yuki Naotori
 
Getting started with Handoff
Getting started with HandoffGetting started with Handoff
Getting started with HandoffYuichi Yoshida
 
「その他」のUI Framework 3選
「その他」のUI Framework 3選「その他」のUI Framework 3選
「その他」のUI Framework 3選Shumpei Shiraishi
 
VCSクエスト
VCSクエストVCSクエスト
VCSクエストjoker1007
 
Pythonとgit hubとベンチャー企業の上手な付き合い方
Pythonとgit hubとベンチャー企業の上手な付き合い方Pythonとgit hubとベンチャー企業の上手な付き合い方
Pythonとgit hubとベンチャー企業の上手な付き合い方Takahiro Fujiwara
 
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...Kazuhiro Hara
 
HTML5×Monacaプログラミング教育事例セミナー・ワークショップ資料
HTML5×Monacaプログラミング教育事例セミナー・ワークショップ資料HTML5×Monacaプログラミング教育事例セミナー・ワークショップ資料
HTML5×Monacaプログラミング教育事例セミナー・ワークショップ資料アシアル株式会社
 
Agile Shibuya github_enterprise
Agile Shibuya github_enterpriseAgile Shibuya github_enterprise
Agile Shibuya github_enterpriseKoichiro Ohba
 
Rails Development That Doesn't Hurt
Rails Development That Doesn't HurtRails Development That Doesn't Hurt
Rails Development That Doesn't HurtAkira Matsuda
 
Javaでマサカリ投げてみた
Javaでマサカリ投げてみたJavaでマサカリ投げてみた
Javaでマサカリ投げてみたYujiSoftware
 
Uiテスト@yidev
Uiテスト@yidevUiテスト@yidev
Uiテスト@yidevYusuke Kita
 
Developing better debug_components
Developing better debug_componentsDeveloping better debug_components
Developing better debug_componentsTomoaki Imai
 
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得Reimi Kuramochi Chiba
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話Takuto Wada
 

Viewers also liked (20)

例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会
 
#yidev 横浜 iPhone 勉強会 - 第16回 オープニング
#yidev 横浜 iPhone 勉強会 - 第16回 オープニング#yidev 横浜 iPhone 勉強会 - 第16回 オープニング
#yidev 横浜 iPhone 勉強会 - 第16回 オープニング
 
100915 HTML5とか勉強会発表資料
100915 HTML5とか勉強会発表資料100915 HTML5とか勉強会発表資料
100915 HTML5とか勉強会発表資料
 
Getting started with Handoff
Getting started with HandoffGetting started with Handoff
Getting started with Handoff
 
「その他」のUI Framework 3選
「その他」のUI Framework 3選「その他」のUI Framework 3選
「その他」のUI Framework 3選
 
VCSクエスト
VCSクエストVCSクエスト
VCSクエスト
 
Pythonとgit hubとベンチャー企業の上手な付き合い方
Pythonとgit hubとベンチャー企業の上手な付き合い方Pythonとgit hubとベンチャー企業の上手な付き合い方
Pythonとgit hubとベンチャー企業の上手な付き合い方
 
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
クリーンな WordPress サイトのための PHP コーディングのお作法 ― 計画的に WordPress を拡張していくためのフレームワーク思考 |...
 
HTML5×Monacaプログラミング教育事例セミナー・ワークショップ資料
HTML5×Monacaプログラミング教育事例セミナー・ワークショップ資料HTML5×Monacaプログラミング教育事例セミナー・ワークショップ資料
HTML5×Monacaプログラミング教育事例セミナー・ワークショップ資料
 
Agile Shibuya github_enterprise
Agile Shibuya github_enterpriseAgile Shibuya github_enterprise
Agile Shibuya github_enterprise
 
Rails Development That Doesn't Hurt
Rails Development That Doesn't HurtRails Development That Doesn't Hurt
Rails Development That Doesn't Hurt
 
Javaでマサカリ投げてみた
Javaでマサカリ投げてみたJavaでマサカリ投げてみた
Javaでマサカリ投げてみた
 
Uiテスト@yidev
Uiテスト@yidevUiテスト@yidev
Uiテスト@yidev
 
Developing better debug_components
Developing better debug_componentsDeveloping better debug_components
Developing better debug_components
 
Github of project
Github of projectGithub of project
Github of project
 
エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得エンジニアから飛んでくるマサカリを受け止める心得
エンジニアから飛んでくるマサカリを受け止める心得
 
RESTfulとは
RESTfulとはRESTfulとは
RESTfulとは
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
 

クライアント側でつかまえて