Enviar pesquisa
Carregar
良質なコードを高速に書くコツ
•
16 gostaram
•
9,283 visualizações
Shunji Konishi
Seguir
社内勉強会資料
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 14
Baixar agora
Baixar para ler offline
Recomendados
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
どこに何を書くのか?
どこに何を書くのか?
pospome
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
Recomendados
実践的な設計って、なんだろう?
実践的な設計って、なんだろう?
増田 亨
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
どこに何を書くのか?
どこに何を書くのか?
pospome
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
例外設計における大罪
例外設計における大罪
Takuto Wada
正しいものを正しく作る塾-設計コース
正しいものを正しく作る塾-設計コース
増田 亨
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
Takafumi ONAKA
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考える
pospome
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Marp Tutorial
Marp Tutorial
Rui Watanabe
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
良いコードとは
良いコードとは
Nobuyuki Matsui
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
オブジェクト指向やめましょう
オブジェクト指向やめましょう
なおき きしだ
JavaOne報告2017
JavaOne報告2017
なおき きしだ
Mais conteúdo relacionado
Mais procurados
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
増田 亨
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
Takafumi ONAKA
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
増田 亨
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考える
pospome
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
増田 亨
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
ドメイン駆動設計入門
ドメイン駆動設計入門
Takuya Kitamura
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Marp Tutorial
Marp Tutorial
Rui Watanabe
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
良いコードとは
良いコードとは
Nobuyuki Matsui
メタプログラミングって何だろう
メタプログラミングって何だろう
Kota Mizushima
Mais procurados
(20)
オブジェクト指向プログラミングのためのモデリング入門
オブジェクト指向プログラミングのためのモデリング入門
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
世界でいちばんわかりやすいドメイン駆動設計
世界でいちばんわかりやすいドメイン駆動設計
アプリケーションコードにおける技術的負債について考える
アプリケーションコードにおける技術的負債について考える
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計の正しい歩き方
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計入門
ドメイン駆動設計入門
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Marp Tutorial
Marp Tutorial
オブジェクト指向できていますか?
オブジェクト指向できていますか?
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
良いコードとは
良いコードとは
メタプログラミングって何だろう
メタプログラミングって何だろう
Destaque
オブジェクト指向やめましょう
オブジェクト指向やめましょう
なおき きしだ
JavaOne報告2017
JavaOne報告2017
なおき きしだ
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
Akineko Shimizu
チームとプロダクトをぶっ壊した話
チームとプロダクトをぶっ壊した話
Taichi Watanabe
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
土岐 孝平
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
コードレビューのススメ
コードレビューのススメ
kawahira kazuto
設計してますか?
設計してますか?
ke-m kamekoopa
C#アプリの作り方入門
C#アプリの作り方入門
森理 麟
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
ke-m kamekoopa
Cしゃーぷができるまで
Cしゃーぷができるまで
信之 岩永
人工知能に何ができないか
人工知能に何ができないか
なおき きしだ
プログラマは何を勉強するか
プログラマは何を勉強するか
なおき きしだ
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
なおき きしだ
Javaプログラミング入門
Javaプログラミング入門
なおき きしだ
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
なおき きしだ
JavaOne2016報告
JavaOne2016報告
なおき きしだ
Your code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnCon
Rafael Dohms
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
なおき きしだ
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
なおき きしだ
Destaque
(20)
オブジェクト指向やめましょう
オブジェクト指向やめましょう
JavaOne報告2017
JavaOne報告2017
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
チームとプロダクトをぶっ壊した話
チームとプロダクトをぶっ壊した話
Springを何となく使ってる人が抑えるべきポイント
Springを何となく使ってる人が抑えるべきポイント
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
コードレビューのススメ
コードレビューのススメ
設計してますか?
設計してますか?
C#アプリの作り方入門
C#アプリの作り方入門
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
関数型もモナドも分からなくてもScalaと言う言語は便利らしい
Cしゃーぷができるまで
Cしゃーぷができるまで
人工知能に何ができないか
人工知能に何ができないか
プログラマは何を勉強するか
プログラマは何を勉強するか
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
Javaプログラミング入門
Javaプログラミング入門
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
JavaOne2016報告
JavaOne2016報告
Your code sucks, let's fix it - DPC UnCon
Your code sucks, let's fix it - DPC UnCon
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
JavaOne2017で感じた、Javaのいまと未来 in 大阪
JavaOne2017で感じた、Javaのいまと未来 in 大阪
Mais de Shunji Konishi
Salesforceのハッカソンに参加した話
Salesforceのハッカソンに参加した話
Shunji Konishi
Salesforce連携のためのOData入門
Salesforce連携のためのOData入門
Shunji Konishi
プロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にする
Shunji Konishi
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
MochaとChaiでやるJavaScriptテスト
MochaとChaiでやるJavaScriptテスト
Shunji Konishi
SendGridサンプルの紹介
SendGridサンプルの紹介
Shunji Konishi
セキュリティの考え方
セキュリティの考え方
Shunji Konishi
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
Shunji Konishi
WebSocketでリアルタイムクイズアプリを作ってみた
WebSocketでリアルタイムクイズアプリを作ってみた
Shunji Konishi
Heroku tips1
Heroku tips1
Shunji Konishi
Playframework1でSeleniumテスト
Playframework1でSeleniumテスト
Shunji Konishi
Heroku Dyno再起動時の振る舞い
Heroku Dyno再起動時の振る舞い
Shunji Konishi
Dyno cycling behavior of Heroku
Dyno cycling behavior of Heroku
Shunji Konishi
Herokuで使えるRDBMS管理者ツール
Herokuで使えるRDBMS管理者ツール
Shunji Konishi
Play1 to Play2
Play1 to Play2
Shunji Konishi
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Shunji Konishi
Herokuのログ解析ツール
Herokuのログ解析ツール
Shunji Konishi
Excel2 canvas
Excel2 canvas
Shunji Konishi
特盛!Heroku
特盛!Heroku
Shunji Konishi
文字コードのお話
文字コードのお話
Shunji Konishi
Mais de Shunji Konishi
(20)
Salesforceのハッカソンに参加した話
Salesforceのハッカソンに参加した話
Salesforce連携のためのOData入門
Salesforce連携のためのOData入門
プロキシーを使ってテストを楽にする
プロキシーを使ってテストを楽にする
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
MochaとChaiでやるJavaScriptテスト
MochaとChaiでやるJavaScriptテスト
SendGridサンプルの紹介
SendGridサンプルの紹介
セキュリティの考え方
セキュリティの考え方
一番簡単なWebSocketの試し方
一番簡単なWebSocketの試し方
WebSocketでリアルタイムクイズアプリを作ってみた
WebSocketでリアルタイムクイズアプリを作ってみた
Heroku tips1
Heroku tips1
Playframework1でSeleniumテスト
Playframework1でSeleniumテスト
Heroku Dyno再起動時の振る舞い
Heroku Dyno再起動時の振る舞い
Dyno cycling behavior of Heroku
Dyno cycling behavior of Heroku
Herokuで使えるRDBMS管理者ツール
Herokuで使えるRDBMS管理者ツール
Play1 to Play2
Play1 to Play2
お手軽Ajaxアプリケーションの作り方
お手軽Ajaxアプリケーションの作り方
Herokuのログ解析ツール
Herokuのログ解析ツール
Excel2 canvas
Excel2 canvas
特盛!Heroku
特盛!Heroku
文字コードのお話
文字コードのお話
Último
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
Último
(8)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
良質なコードを高速に書くコツ
1.
株式会社FLECT 小西俊司 2014/02/27
2.
大袈裟なタイトルは釣りです。(^^; 僕が他人のコード(主にFLECT社内)を見る時に気に なる点のひとつを、文書化しただけで、そんなたいし た話はないのであまり期待しないように
3.
良いコードを書くための方法論は最終的にはすべて 「一度に考えなければならないことの量を減らす」こと によって目的が達成されていると考えます。 「オブジェクト指向」「分割統治」などは良い例で、これ らの方法論を使うとその部分以外のことを考えなくて 良くなるわけです。 逆にいわゆる「スパゲティ化したコード」とは一度にあ れもこれも考えなくてはならなくて訳がわからなくなっ た状態を指します。 これを踏まえてコードを書く時に意識して欲しいこと は。。。
4.
ことです
5.
6.
開発者が考えなければいけないことには ◦ ◦ ◦ ◦ ◦ アプリの要件 アプリの実装 インフラ ストレージ など様々なレイヤがある これらは俯瞰で考えなければいけない時もあるが、全部 いっぺんに考えるのは無理なので基本的には別々に考え る(別の人が考える場合もある) コンテキストスイッチとはここで考えることのレイヤが切り 替わること ◦ これは人間にとってコストの高い処理
7.
AならばB BならばC すなわち、AならばC これは常に正しい が、この考え方は往々にしてコンテキストをまたぐ 特にフロントエンド開発(jQuery+JavaScript)ではコ ンテキストスイッチが発生しやすい
8.
アプリ要件 ◦ 情報量の多いテーブルの一部の表示/非表示をボタンで切 り替えたい ◦ データが切り替わった時には非表示 実装 ◦
jQueryで楽勝!
9.
$("#btn-toggle").click(function() { var opened
=$("#table").find(".view-toggle").toggle().is(":visible"); $(this).text(opened ? "閉じる" : "開く"); }); $("#btn-exec").click(funtion() { $.ajax({ "url" : ... "data" : { ...}, "success" : function(data) { var $table = $("#table"); $table.find(".data-name").text(data.name); //ここにデータ設定のコードが並ぶ $table.find(".view-toggle").hide(); } }); });
10.
簡潔な記述なので、コード自体はそんなに悪くない しかしこのコードを書くためにはアプリ要件を考えてい る時にHTMLとJavaScriptの間を行ったり来たりしな ければならない ◦ HTMLとJavaScriptの行き来でもコンテキストスイッチは発生 する コードを読み書きする時に何度もコンテキストスイッチ が発生して、疲れる
11.
まず、アプリ要件だけを先に全部書く //Tableオブジェクト function Table($table) { //中身は後で書くのでとりあえず空 } var
table = new Table($("#table“)); $("#btn-toggle").click(function() { table.toggle(); $(this).text(table.isOpened() ? "閉じる" } $("#btn-exec").click(funtion() { $.ajax({ "success" : function(data) { table.apply(data); table.close(); } }); }); : "開く"); まだTableオブジェクトの メソッドを1行も書いてない うちから「toggle」「apply」 などのアプリ要件を実現する メソッドを記述する (関数宣言だけは先に書く場合 もある)
12.
//Tableオブジェクト function Table($table) { function
toggledRows() { return $table.find($(".view-toggle"));} function isOpened() { return toggleRows().is(“:visible");} function open() { toggleRows().show();} function close() { toggleRows().hide();} function toggle() { toggleRows().toggle();} function apply(data) { $table.find(".data-name").text(data.name); ... } $.extend(this, { 要するにオブジェクト指向的な実装をすると “isOpend" : isOpened, いうことだがコンテキスト境界が明確になる "open" : open, ことが大事 "close" : close, "toggle" : toggle, 関数をローカルに宣言して$.extendで公開 "apply" : apply するやり方は単に小西の好みなので普通に } prototypeでやっても良い }
13.
アプリ要件を考える時に使う用語がそのままメソッドになっ ている ◦ テーブルを開く ->
open ◦ テーブルを閉じる -> close ◦ テーブルが開いていたら -> isOpened jQueryで1行でできることでもアプリ要件の用語でメソッド 定義することが重要 ◦ セレクタがでてくるとそこでコンテキストスイッチが発生する オブジェクトの実装とアプリ要件のコードはどちらを先に書 いても良い ◦ ていうかオブジェクトを先に書く方が一般的かも。。。 ◦ 慣れてくるとアプリ要件を先に書く方が楽。 Backbone等のフレームワークを使うという解もある ◦ しかしこれができるようになるとあまり必要を感じなくなる
14.
コンテキスト境界を意識してコンテキストをまたぐ場合はメ ソッドを切る jQueryはHTMLとの結びつきが強いのでアプリ要件を考 えるところは分離する ◦ オブジェクト指向はそのための有効な手段 サーバサイドや他のところでも考え方は同じ。大事なのは 以下の2つ ◦ 一度に考えなければならない事柄を減らす ◦
コンテキストスイッチの回数を減らす オブジェクト指向的なJavaScriptの書き方が良く分からな い人はこれも併せて読もう(宣伝) http://www.slideshare.net/shunjikonishi/ajaxapp-20725783
Baixar agora