SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
1/33	
デバッグのコツ	
渡辺宙志
2013年6月13日	
※これは2013年6月6日に行われたCMSI計算科学技術特論Aの内容を一部抜粋、改訂したものです
2/33	
「デバッグ」という作業
バグを見つけたら、デバッグするまで先に進めなくなる	
→ デバッグは絶対にやらなければいけないタスク	
デバッグは・・・	
集中力を要求する	
成功したら達成感がある	
仕事した気になる	
→ 実際には自分で入れたバグを自分で取っただけ(マッチポンプ)	
「デバッグは仕事ではない」ということを肝に銘じること	
※他人の入れたバグを取るのが仕事の人は愁傷様です
3/33	
典型的な研究スパン
年に二編論文を書きたい→ 半年で一つの研究が完結
プログラム開発+計算	
 執筆	
調査	
調査:先行研究の調査や、計算手法についての調査 (1ヶ月)
開発+計算:プログラム開発、計算の実行(4ヶ月)
執筆:結果の解析+論文執筆+投稿 (1ヶ月)
実態は・・・	
執筆	
調査	
 デバッグ	
開発	
開発時間の大部分はデバッグに費やされている
初心者であるほど、デバッグの占める割合が長くなる
コードの高速化は、研究時間の短縮にさほど寄与しない	
計算	
※ 一般論です
4/33	
Q. 最適化、並列化でもっとも大事なことは何か?
A. バグを入れないこと	
開発において最も時間のかかるプロセスはデバッグ
→ バグを入れない事が最も効果的な高速化
デバッグについて
そもそもバグを入れないコーディング&バグってもすぐに
問題個所を発見できる状況の構築を目指す	
並列プログラムのデバッグは絶望的に難しい
・デバッグ用のprint文入れたら挙動が変わる
・ほとんど動くがたまにこける
・実行環境によってはこける, etc.
5/33	
バグの入り方と種類
Q. バグはいつ入るか?
バグの種類:
・機能追加直後に判明するバグ(即効性バグ)
 → バグを入れないコーディング
・機能追加後、後で判明するバグ(地雷型バグ)
 → 地雷型バグのデバッグ
A. 機能を追加したとき
※ より正確には、仕様を変更した時
6/33	
バグを入れないコーディング	
単体テストとsort+diffデバッグ
7/33	
いろいろあるが、特に以下の二つの方法が有効
(一種のテスト駆動開発)
バグを入れないコーディング
・単体テスト
・sort + diff デバッグ	
※プログラム開発一般論としては、将来の仕様変更に強い
  設計をすることの方が大事ですがここでは触れません
8/33	
単体テスト
・テストしようとしている部分だけを切り出す
 → 該当部分のみでコンパイル、動作テストできる
   最低限のインタフェースを用意する
・最適化や並列化の前後で結果が一致するか確認
・本番環境でテストしない
9/33	
sort+diffデバッグ
・出力情報を保存し、sortしてからdiffを取る
→ 二種類の方法による結果が一致することを確認
・print文デバッグの一種
・単体テストと組み合わせて使う	
※なんだかんだいってprint文でバッグがデバッグの基本
10/33	
デバッグのコツ	
「ここまでは大丈夫」という砦を築く
11/33	
ペアリストとは?	
・粒子間距離が相互作用距離未満である粒子対のリスト	
・全粒子対についてチェックするナイーブな実装→O(N^2)   	
グリッド探索	
sort+diff デバッグの例1:粒子対リスト作成 (1/2)	
・空間をグリッドに切り、粒子の住所録を作成
・相互作用する粒子は空間的に近いところにいるはず
・住所録から粒子番号を逆引きして相互作用粒子を探索→O(N)
この範囲だけ探索
12/33	
ポイント	
O(N)法とO(N^2)法は、同じconfigurationから同じペアリストを作る
O(N^2)法は、計算時間はかかるが信頼できる (砦)
手順	
初期条件作成とペアリスト作成ルーチンの切り出し(単体テスト)
O(N)とO(N^2)ルーチンに同じ初期条件を与え、ペアリストをダンプ
ダンプ方法:粒子対の番号が若い方を左に、一行に1ペア
リストとしては一致するはずだが、リストの順番は異なる
→ ソートしてからdiffを取る
$ ./on2code | sort > o2.dat
$ ./on1code | sort > o1.dat
$ diff o1.dat o2.dat
いきなり本番環境に組み込んで時間発展、などとは絶対にしない	
←結果が正しければ何も出力されない	
sort+diff デバッグの例1:粒子対リスト作成 (2/2)
13/33	
端の粒子の送り方	
ナイーブな送り方	
通信方法を減らした送り方	
隣接するドメイン全てと通信を行う
3次元の場合、26回の通信が発生する	
Domain A	
 Domain B	
Domain C	
辺で接する領域からもらった粒子を
別の方向で辺で接する領域へ転送	
斜め方向の通信が必要なくなるため
通信回数は6回で済む	
sort+diff デバッグの例2:粒子情報送信(1/2)
14/33	
(1) 初期条件作成と通信ルーチンのみで実行  (単体テストの原則)
(2) 通信後、自分の担当する粒子を全て出力
   (proc012.datなどの名前でファイルに出力する)
(3) ナイーブな通信(砦)と、転送式の通信の両方で実行
  (出力先を test1/ test2/などと異なるディレクトリに)
(4) 粒子の座標が完全に一致することを確認 (sort + diff デバッグ)
デバッグの手順	
自分の領域	
受け取った領域	
全てのプロセスについて一致することを確認
$ sort test1/proc000.dat > test1/proc000s.dat
$ sort test2/proc000.dat > test2/proc000s.dat
$ diff test1/proc000s.dat test2/proc000s.dat
$ diff test1/proc001s.dat test2/proc001s.dat
…
sort+diff デバッグの例2:粒子情報送信(2/2)	
※複数の初期条件について試すこと
15/33	
ペアリストの並列化	
並列版
空間分割による並列化
各領域でそれぞれペアリストを作成	
並列化の有無に関わらず同じconfigurationからは
同じペアリストを作成しなければならない
sort+diff デバッグの例3:並列版リスト作成(1/2)	
非並列版
16/33	
手順	
非並列版と並列版のペアリスト作成ルーチンを作る
それぞれに同じ初期条件を与える
非並列版は標準出力にダンプ
並列版はプロセスごとにファイル(proc???.dat)に出力
→ あとでcatでまとめる
sort + diffで一致を確認する
ポイント	
非並列版のペアリスト作成ルーチンはデバッグが終了 (砦)
粒子情報の通信ルーチンはデバッグが終了 (砦)
一度に複数の項目を同時にテストしない	
sort+diff デバッグの例3:並列版リスト作成(2/2)	
$ ./serial | sort > serial.dat
$ ./parallel
$ cat proc???.dat | sort > parallel.dat
$ diff serial.dat parallel.dat
17/33	
新しい機能の追加や高速化をするたびに単体テストする
単体テストとは、ミクロな情報がすべて一致するのを確認すること
エネルギー保存など、マクロ量のチェックは単体テストではない
時間はかかるが信用できる方法と比較する
複数の機能を一度にテストしない	
デバッグとは、入れたバグを取ることではなく
そもそもバグを入れないことである
バグを入れないコーディングのまとめ
単体テストとは、必要なルーチンのみでコンパイル、実行すること
全体のプログラムの一部に着目してテストすることではない
「確実にここまでは大丈夫」という「砦」
18/33	
地雷除去	
地雷型バグのデバッグ方法
19/33	
デバッグ・・・その前に
バージョン管理システム、使っていますか?(Y/y)	
バージョン管理システムとは	
ファイルの編集履歴を管理するためのシステム
CVS, Subversion, Gitなどが有名
編集履歴を全て記録する「リポジトリ」というデータベースをもつ
ユーザは、そのリポジトリにアクセスしながら開発を行う
超優秀な秘書のようなもの	
リポジトリ	
checkout
update	
commit
commit
checkout
update
20/33	
コード	
1)開発したコードをスパコンへ	
コード	
ローカル	
 スパコン	
ありがちなパターン
コードB	
3)スパコンで実行中、別の修正をする	
コードA	
2)動かなかったので苦労して修正する	
コードB	
4)修正したコードをスパコンへ	
あっ、コードAを上書きしちゃった!
21/33	
バージョン管理している場合
ローカル	
 スパコン	
リポジトリ	
コード	
1)開発したコードを
リポジトリへ	
コード	
 コード	
2)リポジトリからスパコン
へチェックアウト	
コードA	
3)動かなかったので苦労して修正する	
コードA	
 4)修正をコミット	
コードB	
5)スパコンの修正を忘れて別の修正	
衝突	
6)修正をコミットしようとして、衝突に気づく	
コードC	
7)スパコン向けの修正と新しい修正を統合 (マージ)
22/33	
バージョン管理システムの利点
・全ての編集履歴が保存される
 (ちゃんとコミットしていれば)
・(リポジトリを別マシンに置けば)バックアップの代わりにもなる
 → 個人ユースでは地味に便利	
・複数の環境でコードを開発しても混乱が少ない
 → むしろ複数の環境向けにコードを開発する時には
   バージョン管理必須	
・任意のバージョン間の比較が可能	
 → どのようにデバッグに役に立つかは後述
23/33	
バージョン管理システムの欠点 (面倒な点)
・修正前に最新の状態にアップデートしなければならない	
 → 慣れると習慣になります	
・衝突(コンフリクト)が発生した時に対処しなければならない。	
 → 衝突に気づかずに上書きしてしまうほうが怖いです	
・全ての修正を「コミット」しなければならない	
 → 慣れると習慣になります	
・すべての履歴を保存って、ディスク容量を食うんじゃないの?	
 → 差分を保存していくので、たいしてディスク容量は増えません
 → そもそもテキストファイルの容量なんて無視できるレベル
24/33	
地雷型バグ
地雷型バグとは?	
バグを入れた後、しばらくしてから発見されるバグ
・最初から入っていたが、これまで気づかなかった
・機能追加時に、思わぬところに影響が波及した、etc	
バグを見つけたら?	
・いきなりデバッグをはじめない
デバッグにおいて重要なのは原因究明
「いつのまにかなおっていた」は一番まずい
→ 最初にやることは現場保全
(1) 再現性テスト (同じ条件で実行したら同じバグを発生するか?)
(2) バグを起こすソース一式を保存しておく (Subversionならタグ)
(3) バグを再現する最低限のコードを切り出す (容疑者の限定)
A	
B	
C
25/33	
バグったコードの保存
バグったコードは保存しておく	
Subversionを使っているなら、tagという機能を使うとよい	
trunk	
tags	
ソース一式	
130613_bug	
 ソース一式	
ジョブスクリプト	
Subversionにおいてタグとは、単にコピーのこと
デバッグが終了したら消しても良い (消去したことも含めて記録される)	
なぜ保存しておくか?	
デバッグしたつもりが、実はなおってなかったということがよくある
(別の原因でバグが発生しなくなったのを完治したと勘違い)
後で同様なバグが発生した時、同じ原因か、別のバグなのかを
確認したいことがよくあるため
26/33	
問題の切り分け (1/3)
実行したらSegmentation Faultと言われて止まった
やってはならないこと
・どこで止まったかを調べる
・どうやって調べるか?
 → print文による二分探索 (gdbでも可)
→ いきなりソースを見ながら原因を探る
  (特にダメなのが頭の中でのトレース実行)	
やるべきこと
printf “1”;
  ・・・
printf “2”;
  ・・・
printf “3”;
出力が「1」であればこの間で止まっている	
出力が「12」であればこの間で止まっている	
上記を繰り返して、バグの発生箇所を特定する
27/33	
問題の切り分け (2/3)
バグの発生箇所は、配列の領域外参照だった
const int N = 10;
double data[N];
・・・
double func(int index){
return data[index]; ← ここでindex=10だった
}
indexの値は0から9でないといけない
→ どこかでおかしな値が入った
バグの発生箇所と、止まる箇所は一般に異なる	
バグの発見個所: 配列の領域外参照をした場所
バグの発生個所: indexに不正な値が代入された場所 (本丸)
28/33	
問題の切り分け (3/3)
おかしな値が代入された場所をどうやって探すか?
→ assertを入れまくる(if文でも可)	
#include <assert.h>
double func(int index){
assert(index<N);
・・・
}
Assertion failed: (i<10), function func, file test.cc, line 7.	
assertにひっかかると、以下のようなエラーが出て止まる	
assertには「満たすべき条件」
を記載する	
※普段からassertを入れているような人はこれを読む必要はありません	
これをたどって、不正な値が代入された場所を探す
29/33	
バグの実例 (1/2)
double myrand_double (void){
return (double)(rand())/(double)
(RAND_MAX);
}
N未満の整数をランダムに返す関数が欲しかった
randは0からRAND_MAXまでの整数を返す関数
(RAND_MAX=2147483647)
それをRAND_MAXで割れば、0から1までの実数を返すはず?	
randは最高でRAND_MAXの値を返す
→ myrand_intは低確率(21億分の1)でNを返す
int myrand_int (const int N){
return (int)(myrand_double()*N);
}
それをN倍してintにキャストすれば0からN-1を返すはず?
30/33	
バグの実例 (2/2)
const int N = 10;
double data[N];
int index = myrand_int(N); ← ここがバグの原因
…
// (ずっと遠くで)
return data[index]; ← 低確率で領域外参照が発生
この種のバグの原因に「最初から思い至る」のは難しい
print文+assert文デバッグが有効	
※ちゃんとしたプログラマは最初からこういうことに気をつけます
(僕はダメプログラマ)
31/33	
問題の切り分けとバージョン管理 (1/2)
機能を追加したらバグった?	
→ その機能を追加したことによるバグ?
  もともとバグっていたものが顕在化?
バージョン管理システムはタイムマシン	
Rev. 2とRev. 3のdiffを取れば、どこが原因かがすぐわかる
バージョン管理していれば・・・	
開発時間軸	
Rev. 1	
 Rev. 2	
 Rev. 3	
 Rev. 4	
 Rev. 5	
(1)ここでバグ発覚	
(3)実はここでバグ混入	
(2)ここまでは動作することを確認(砦)	
デバッグ時間軸
32/33	
問題の切り分けとバージョン管理 (2/2)
例:圧力測定ルーチンを追加したら、エネルギーが発散した	
Observe
Pressure	
Main
Kernel Ver. 1	
Observe
Energy	
Input A	
 OK	
Main
Kernel Ver. 2	
Observe
Energy	
Input B	
 NG	
Main
Kernel Ver. 1	
Observe
Energy	
Input B	
OK?
NG?	
測定ルーチン追加に伴い、計算カーネルも少し修正している
→ その修正のせい?入力ファイルのせい?	
バグった?→ 圧力測定ルーチンを容疑者から除外
バグらなかった?→ 圧力測定ルーチンと付随する修正が容疑者	
圧力関連の修正前のリビジョンを取ってきてInput Bを食わせる	
バージョン管理をしていると、問題の切り分けが容易
33/33	
・バグったら、再現するコードを保存する (現場保全)
・いつバグが混入したか確認する (砦)
・バグに関係のないルーチンを削除していく (問題の切り分け)
・print文、assert文デバッグ (頭を使わない)
まとめ
デバッグ (プログラミング)とは
「ここまでは絶対大丈夫」
という砦を築いていく作業	
※ 統合開発環境やデバッガを使っても良いが、
とにかく原則として頭を使わないこと

Más contenido relacionado

La actualidad más candente

Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Kazuki Ohta
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングKohsuke Yuasa
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話Tier_IV
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来についてshinjiigarashi
 
自宅サーバ仮想化
自宅サーバ仮想化自宅サーバ仮想化
自宅サーバ仮想化anubis_369
 
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能についてUnityTechnologiesJapan002
 
20190625 OpenACC 講習会 第2部
20190625 OpenACC 講習会 第2部20190625 OpenACC 講習会 第2部
20190625 OpenACC 講習会 第2部NVIDIA Japan
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部NVIDIA Japan
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎信之 岩永
 
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImageNaruhiko Ogasawara
 
並列化による高速化
並列化による高速化 並列化による高速化
並列化による高速化 sakura-mike
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門NVIDIA Japan
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッドKohsuke Yuasa
 

La actualidad más candente (20)

Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方Google Perf Tools (tcmalloc) の使い方
Google Perf Tools (tcmalloc) の使い方
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
C++ マルチスレッドプログラミング
C++ マルチスレッドプログラミングC++ マルチスレッドプログラミング
C++ マルチスレッドプログラミング
 
トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話トランクベース開発を活用して爆速に開発した話
トランクベース開発を活用して爆速に開発した話
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
HTTP入門
HTTP入門HTTP入門
HTTP入門
 
自宅サーバ仮想化
自宅サーバ仮想化自宅サーバ仮想化
自宅サーバ仮想化
 
楽しいShaderToy
楽しいShaderToy楽しいShaderToy
楽しいShaderToy
 
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
【Unite Tokyo 2019】SPARKCREATIVE始動で見えてきた最新VFX動向とSPARKGEARの最新機能について
 
20190625 OpenACC 講習会 第2部
20190625 OpenACC 講習会 第2部20190625 OpenACC 講習会 第2部
20190625 OpenACC 講習会 第2部
 
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについてeBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
NW入門
NW入門NW入門
NW入門
 
20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部20190625 OpenACC 講習会 第1部
20190625 OpenACC 講習会 第1部
 
非同期処理の基礎
非同期処理の基礎非同期処理の基礎
非同期処理の基礎
 
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
最新のデスクトップアプリを使おう:Snap, Flatpak, AppImage
 
並列化による高速化
並列化による高速化 並列化による高速化
並列化による高速化
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
規格書で読むC++11のスレッド
規格書で読むC++11のスレッド規格書で読むC++11のスレッド
規格書で読むC++11のスレッド
 

Destacado

AVX命令を用いたLJの力計算のSIMD化
AVX命令を用いたLJの力計算のSIMD化AVX命令を用いたLJの力計算のSIMD化
AVX命令を用いたLJの力計算のSIMD化Hiroshi Watanabe
 
20130426 デバッグ物語
20130426 デバッグ物語20130426 デバッグ物語
20130426 デバッグ物語s_taichan
 
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなものHiroshi Watanabe
 
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの 〜並列編〜
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの 〜並列編〜短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの 〜並列編〜
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの 〜並列編〜Hiroshi Watanabe
 
短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化Hiroshi Watanabe
 
テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践Yuusuke Takeuchi
 
Vuzix developer conference - M100アプリ開発
Vuzix developer conference - M100アプリ開発Vuzix developer conference - M100アプリ開発
Vuzix developer conference - M100アプリ開発Keiji Ariyama
 
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!Moto Arima
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方Kimikazu Kato
 
10年前「Microsoftの社員だと思って働け!」と教育されて嫌気がさして出てった人から見た「外の世界」の話 #JCCMVP
10年前「Microsoftの社員だと思って働け!」と教育されて嫌気がさして出てった人から見た「外の世界」の話 #JCCMVP10年前「Microsoftの社員だと思って働け!」と教育されて嫌気がさして出てった人から見た「外の世界」の話 #JCCMVP
10年前「Microsoftの社員だと思って働け!」と教育されて嫌気がさして出てった人から見た「外の世界」の話 #JCCMVPKazuhito Miura
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
UI/GUI Design Guide Process Tutorial
UI/GUI Design Guide Process TutorialUI/GUI Design Guide Process Tutorial
UI/GUI Design Guide Process Tutorialwitstudio
 
ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことMASA_T_O
 
【 #Unity会 】このUnityがすごい2015年版
【 #Unity会 】このUnityがすごい2015年版【 #Unity会 】このUnityがすごい2015年版
【 #Unity会 】このUnityがすごい2015年版ui nyan
 
非ウェブデザイナーも知っておきたいデベロッパーツールの使い方(応用編 知っておきたい機能と応用) 先生:池田 祐太郎
非ウェブデザイナーも知っておきたいデベロッパーツールの使い方(応用編 知っておきたい機能と応用) 先生:池田 祐太郎非ウェブデザイナーも知っておきたいデベロッパーツールの使い方(応用編 知っておきたい機能と応用) 先生:池田 祐太郎
非ウェブデザイナーも知っておきたいデベロッパーツールの使い方(応用編 知っておきたい機能と応用) 先生:池田 祐太郎schoowebcampus
 
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -Takao Oyobe
 
デザイン仕様書(ガイド)の書き方 (初歩者用)
デザイン仕様書(ガイド)の書き方 (初歩者用)デザイン仕様書(ガイド)の書き方 (初歩者用)
デザイン仕様書(ガイド)の書き方 (初歩者用)witstudio
 
コーディングを考慮したWebデザインガイドライン
コーディングを考慮したWebデザインガイドラインコーディングを考慮したWebデザインガイドライン
コーディングを考慮したWebデザインガイドラインHiroyuki Makishita
 

Destacado (20)

AVX命令を用いたLJの力計算のSIMD化
AVX命令を用いたLJの力計算のSIMD化AVX命令を用いたLJの力計算のSIMD化
AVX命令を用いたLJの力計算のSIMD化
 
20130426 デバッグ物語
20130426 デバッグ物語20130426 デバッグ物語
20130426 デバッグ物語
 
ゲームノシクミ
ゲームノシクミゲームノシクミ
ゲームノシクミ
 
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの
 
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの 〜並列編〜
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの 〜並列編〜短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの 〜並列編〜
短距離ハイブリッド並列分子動力学コードの設計思想と説明のようなもの 〜並列編〜
 
短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化短距離古典分子動力学計算の 高速化と大規模並列化
短距離古典分子動力学計算の 高速化と大規模並列化
 
テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践テスト駆動ゲーム開発をJava scriptで実践
テスト駆動ゲーム開発をJava scriptで実践
 
Vuzix developer conference - M100アプリ開発
Vuzix developer conference - M100アプリ開発Vuzix developer conference - M100アプリ開発
Vuzix developer conference - M100アプリ開発
 
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!
スクラムはもうだめぽよ!新しい開発手法『パワープレイ』をお姉さんが教えてあげちゃう!
 
正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方正しいプログラミング言語の覚え方
正しいプログラミング言語の覚え方
 
10年前「Microsoftの社員だと思って働け!」と教育されて嫌気がさして出てった人から見た「外の世界」の話 #JCCMVP
10年前「Microsoftの社員だと思って働け!」と教育されて嫌気がさして出てった人から見た「外の世界」の話 #JCCMVP10年前「Microsoftの社員だと思って働け!」と教育されて嫌気がさして出てった人から見た「外の世界」の話 #JCCMVP
10年前「Microsoftの社員だと思って働け!」と教育されて嫌気がさして出てった人から見た「外の世界」の話 #JCCMVP
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
UI/GUI Design Guide Process Tutorial
UI/GUI Design Guide Process TutorialUI/GUI Design Guide Process Tutorial
UI/GUI Design Guide Process Tutorial
 
ゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのことゲーム制作初心者が知るべき8つのこと
ゲーム制作初心者が知るべき8つのこと
 
【 #Unity会 】このUnityがすごい2015年版
【 #Unity会 】このUnityがすごい2015年版【 #Unity会 】このUnityがすごい2015年版
【 #Unity会 】このUnityがすごい2015年版
 
非ウェブデザイナーも知っておきたいデベロッパーツールの使い方(応用編 知っておきたい機能と応用) 先生:池田 祐太郎
非ウェブデザイナーも知っておきたいデベロッパーツールの使い方(応用編 知っておきたい機能と応用) 先生:池田 祐太郎非ウェブデザイナーも知っておきたいデベロッパーツールの使い方(応用編 知っておきたい機能と応用) 先生:池田 祐太郎
非ウェブデザイナーも知っておきたいデベロッパーツールの使い方(応用編 知っておきたい機能と応用) 先生:池田 祐太郎
 
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
私がスクラムをやめた理由 - 全員スクラムマスター。@DevLove -
 
PyCharm入門
PyCharm入門PyCharm入門
PyCharm入門
 
デザイン仕様書(ガイド)の書き方 (初歩者用)
デザイン仕様書(ガイド)の書き方 (初歩者用)デザイン仕様書(ガイド)の書き方 (初歩者用)
デザイン仕様書(ガイド)の書き方 (初歩者用)
 
コーディングを考慮したWebデザインガイドライン
コーディングを考慮したWebデザインガイドラインコーディングを考慮したWebデザインガイドライン
コーディングを考慮したWebデザインガイドライン
 

Similar a 130613-debug

No020-01-suc3rum-20101129
No020-01-suc3rum-20101129No020-01-suc3rum-20101129
No020-01-suc3rum-20101129Sukusuku Scrum
 
週の仕事を3日で終わらせる「GM時短術」(セミナー資料の一部を公開)
週の仕事を3日で終わらせる「GM時短術」(セミナー資料の一部を公開)週の仕事を3日で終わらせる「GM時短術」(セミナー資料の一部を公開)
週の仕事を3日で終わらせる「GM時短術」(セミナー資料の一部を公開)亨輔 大林
 
2015/06/13 第6回G-Study発表資料 プログラミング?コーディング?
2015/06/13 第6回G-Study発表資料 プログラミング?コーディング?2015/06/13 第6回G-Study発表資料 プログラミング?コーディング?
2015/06/13 第6回G-Study発表資料 プログラミング?コーディング?Tsuyoshi Yoshida
 
Agile development-course-advanced-13-14
Agile development-course-advanced-13-14Agile development-course-advanced-13-14
Agile development-course-advanced-13-14Miho Nagase
 
DevLOVE関西2012 Drive 講演資料(iBook)
DevLOVE関西2012 Drive 講演資料(iBook)DevLOVE関西2012 Drive 講演資料(iBook)
DevLOVE関西2012 Drive 講演資料(iBook)広告制作会社
 
デザインスプリント試行してみて
デザインスプリント試行してみてデザインスプリント試行してみて
デザインスプリント試行してみてShosaku Suzuki
 

Similar a 130613-debug (6)

No020-01-suc3rum-20101129
No020-01-suc3rum-20101129No020-01-suc3rum-20101129
No020-01-suc3rum-20101129
 
週の仕事を3日で終わらせる「GM時短術」(セミナー資料の一部を公開)
週の仕事を3日で終わらせる「GM時短術」(セミナー資料の一部を公開)週の仕事を3日で終わらせる「GM時短術」(セミナー資料の一部を公開)
週の仕事を3日で終わらせる「GM時短術」(セミナー資料の一部を公開)
 
2015/06/13 第6回G-Study発表資料 プログラミング?コーディング?
2015/06/13 第6回G-Study発表資料 プログラミング?コーディング?2015/06/13 第6回G-Study発表資料 プログラミング?コーディング?
2015/06/13 第6回G-Study発表資料 プログラミング?コーディング?
 
Agile development-course-advanced-13-14
Agile development-course-advanced-13-14Agile development-course-advanced-13-14
Agile development-course-advanced-13-14
 
DevLOVE関西2012 Drive 講演資料(iBook)
DevLOVE関西2012 Drive 講演資料(iBook)DevLOVE関西2012 Drive 講演資料(iBook)
DevLOVE関西2012 Drive 講演資料(iBook)
 
デザインスプリント試行してみて
デザインスプリント試行してみてデザインスプリント試行してみて
デザインスプリント試行してみて
 

Más de Hiroshi Watanabe

CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術2
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術2CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術2
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術2Hiroshi Watanabe
 
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術1
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術1CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術1
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術1Hiroshi Watanabe
 
Huge-Scale Molecular Dynamics Simulation of Multi-bubble Nuclei
Huge-Scale Molecular Dynamics Simulation of Multi-bubble NucleiHuge-Scale Molecular Dynamics Simulation of Multi-bubble Nuclei
Huge-Scale Molecular Dynamics Simulation of Multi-bubble NucleiHiroshi Watanabe
 
ハイパースレッディングの並列化への影響
ハイパースレッディングの並列化への影響ハイパースレッディングの並列化への影響
ハイパースレッディングの並列化への影響Hiroshi Watanabe
 

Más de Hiroshi Watanabe (7)

Enjoy supercomputing
Enjoy supercomputingEnjoy supercomputing
Enjoy supercomputing
 
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術2
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術2CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術2
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術2
 
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術1
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術1CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術1
CMSI計算科学技術特論A(8) 高速化チューニングとその関連技術1
 
MDとはなにか
MDとはなにかMDとはなにか
MDとはなにか
 
Huge-Scale Molecular Dynamics Simulation of Multi-bubble Nuclei
Huge-Scale Molecular Dynamics Simulation of Multi-bubble NucleiHuge-Scale Molecular Dynamics Simulation of Multi-bubble Nuclei
Huge-Scale Molecular Dynamics Simulation of Multi-bubble Nuclei
 
ハイパースレッディングの並列化への影響
ハイパースレッディングの並列化への影響ハイパースレッディングの並列化への影響
ハイパースレッディングの並列化への影響
 
Tuning, etc.
Tuning, etc.Tuning, etc.
Tuning, etc.
 

Último

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 

Último (11)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 

130613-debug