SlideShare a Scribd company logo
1 of 52
Download to read offline
セキュリティ&プログラミング
    キャンプ2011

  ソースコードの読み方

   よしおかひろたか
     2011年8月11日
講師紹介
●   よしおかひろたか、Debug Hacks著者、カーネル
    読書会主宰、YLUG(横浜Linux Users Group)、勉
    強会勉強会
●   未来のいつか/hyoshioの日記
    http://d.hatena.ne.jp/hyoshiok
●   hyoshiok@gmail.com
●   http://twitter.com/hyoshiok



                                        2
お題
●   ソースコードの読み方




                 3
プログラマに必要な3つの
    スキル
●   ソースコードを読むチカラ
●   デバッグするチカラ
●   テストをするチカラ




                   4
3つのスキルをどう身につ
    けるか
●   学校では教えてくれない
●   教科書を読む?
●   実際のプロジェクトで経験する?
    ●   オープンソースのプロジェクトに参加?
●   師匠に弟子入り?
    ●   そこでプログラミングキャンプだ



                             5
ソースコードの読み方
●   ソースコードって何?
●   人間がプログラミング言語などを用い
    て記述したもの。
    ●   そのままではコンピュータは実行できないので
        、通常、コンパイラと呼ばれるソフトウェアで
        直接実行できる形式に変換して実行されるか、
        インタプリタと呼ばれるソフトウェアで字面を
        解釈し実行される。


                            6
トラブルシューティングと
    ソースコードの読み方
●   トラブルシューティングと問題の理解
●   実践的なコードの理解




                        7
ソースコードを読むチカラ
●   プログラマの基礎体力
    ●   ソフトウェア開発コストの大部分は保守
    ●   不具合修正、改良、機能追加にはコードの理解
        が必須
●   技術者の付加価値
    ●   OSSは深追いできる
    ●   陳腐化しにくい
●   プロフェッショナルとしての研鑚
    ●   すぐれた技術者はソースコードを上手に読む
                               8
コードの読み方
●   なぜ、コードを読むのか
●   どのように、読むのか




                  9
なぜコードを読むのか?
●   仕事だから(目的中心)
    ●   トラブルシューティング(不具合修正)
    ●   機能修正、機能開発
    ●   自己研鑚、勉強
●   趣味だから(興味中心)
    ●   楽しいから
    ●   自己啓発(知的好奇心)
●   不純な動機
    ●   形から入る                10
なぜコードを読むのか
●   目的中心の場合
    ●   対象に対する基礎知識は必要
    ●   アーキテクチャ
        OS、プログラミング言語、RDBMS、…
    ●   定番の教科書で知識を得る




                               11
なぜコードを読むのか
●   興味中心の場合
    ●   人それぞれ、人生いろいろ
    ●   無目的でもいいじゃないか
    ●   熟読、濫読、積読、黙読、音読、再読、誤読、
        精読、速読、耽読、通読、復読、輪読、朗読、
        輪読、…




                            12
コードの理解について
●   モットー:
    コードは読むな、
    理解しろ〜


               13
どのようにコードを理解す
    るのか
●   個人的な方法を紹介する
    ●   唯一あるいはベストな方法というわけでもない
    ●   適材適所、もっと良い方法があると思う
    ●   公開することによって進化したい(もっと良い
        方法への模索)




                            14
ソースコードを読む視点


       微視的理解 巨視的理解

静的理解

動的理解

                     15
理解の仕方、読み方
●   静的、動的理解
●   微視的、巨視的
●   規模の把握
●   ツールの利用
●   事例


                16
静的理解、動的理解
●   静的理解
    ●   字面での理解
●   動的理解
    ●   動作による理解




                  17
静的、動的構造
●   静的構造(デモ)
    ●   規模
    ●   ディレクトリ構造
    ●   名前つけ規約
●   動的構造
    ●   呼び出し経路
    ●   プロファイリング
    ●   実行結果
                   18
微視的、巨視的
●   微視的:細部からの理解
    ●   最終的にはコードの一行
●   巨視的:全体からの理解
    ●   規模、構造、機能など。実行結果(性能?)
    ●   俯瞰図、鳥瞰図。




                               19
規模の把握(巨視的理解)
●   規模重要
    ●   規模(相手)を知らずして作戦を立てられない
    ●   大局的な地図、俯瞰図、鳥瞰図
    ●   大規模になればなるほど、システマティックな
        方法論が必要になってくる
    ●   巨視的な理解




                            20
規模の把握
●   小規模:100K行未満程度、
    ファイル数100未満
    10人未満
●   中規模:100K行〜1M行程度
    ファイル数100〜1000未満
    100人未満
●   大規模:1M行以上
    ファイル数1000以上
    100人以上
    ざっくりの規模感
                      21
規模の把握(例)
●   find -type f -name "*.[ch]"|wc
●   find -type f -name "*.[ch]"|xargs wc|grep total




      Ruby 1.8.5                  257 197767
      Linux 2.6.18              16522  680万
      MySQL 5.0.24a              1795 988463

                                                      22
ディレクトリ構造
●   トップディレクトリは、ソフトウェア
    の論理的構造を表している
    ●   doc ドキュメント
    ●   lib ライブラリ関係
    ●   test テスト
●   ソースツリーの把握


                      23
ドキュメント
●   README, INSTALL, COPYING, …
●   内部ドキュメント(Docs)
●   リリースノート
●   ChangeLog




                                  24
変更の履歴
●   ChangeLog/Release Notes
●   コード管理システム
    ●   例:Linux git/Subversion/CVS
●   Mailing List
●   Wiki
●   blog
●   変更(時間軸)の微視的理解
                                     25
ドキュメント、情報収集
●   マニュアルを読む
●   サーチエンジン(Google)に聞く
●   Mailing List
●   Bug database
●   開発者との会話(シンポジウムなど)
●   勉強会

                     26
ソースコードを読む視点


       微視的理解 巨視的理解
                                 ディ ト 構造、
                                   レク リ  名前付け規約
静的理解   ソ
       ノ
        ースコ 、 h a n ge Log 、 リ
        ート
           ード C             リ ース 、規模の把握(
                                 など)
                                        行数、 ァ ル数
                                           フ イ




動的理解   デバッガによる実行           実行性能、 グレッ ンテスト
                                リ   ショ




                                                   27
いよいよコードを読む?
●   ツール
    ●   エディタ:emacs
    ●   デバッガ:gdb
    ●   クロスレファレンス:cscope
    ●   カーネルの場合、クラッシュダンプ(crash)




                                  28
デモ、実習
●   例題としてrubyを読むことにする。
    ●


●   GNU Hello
    ●   http://savannah.gnu.org/projects/hello




                                                 29
実習
●   ソースコードの規模を理解する
●   ディレクトリ構造を理解する
●   ビルドする
●   ソースコードのナビゲート
●   機能変更をする


                     30
実習
●   ディレクトリ構造を理解する
●   ファイル名を眺める
●   ファイル数を調べる
●   プログラムの行数を調べる




                    31
実習
●ソースコードの入手
    $ git-clone git:// (講師に聞いてください)
●   ビルドの準備
    READMEをよく読む
●   必要なツールを揃える
    -   automake <http://www.gnu.org/software/automake/>
    -   autoconf <http://www.gnu.org/software/autoconf/>
    -   bison <http://www.gnu.org/software/bison/>
    -   gettext <http://www.gnu.org/software/gettext/>
    -   git <http://git.or.cz/>
    -   gperf <http://www.gnu.org/software/gperf/>
    -   gzip <http://www.gnu.org/software/gzip/>
    -   perl <http://www.cpan.org/>
    -   rsync <http://samba.anu.edu.au/rsync/>
    -   tar <http://www.gnu.org/software/tar/>

                                                           32
実習
●   ビルド
    $   time git clone ssh:// (講師から情報を得る)
    $   cd ruby
    $   time autoconf
    $   time ./configure
    $   time make
    $   time make test




                                            33
●   $ git checkout -b trunk
    origin/trunk
●   $ autoconf
●   ./configure
●   make -j4 miniruby



                              34
動的理解
●   ビルド




           35
動的理解
●   ともかく動かす
    ●   make
    ●   strace
    ●   ltrace
    ●   gdb
    ●   oprofile
    ●   リグレッションテスト
    ●   ベンチマークテスト

                     36
make
●   とりあえず、make
●   実行環境の構築
    ●   gcc -g (デバッグシンボルを付加する)
        通常はMakefileのCFLAGSなどに設定
    ●   cscopeのインデックスを作成
    ●   ビルドはemacsのshellなどから行い、ビルドの
        ログを取得しておくと便利



                                 37
strace
 ●   システムコールのトレース
$ strace ruby -v
execve("/usr/local/bin/ruby", ["ruby", "-v"], [/* 39 vars */]) = 0
uname({sys="Linux", node="asianux2.miraclelinux.com", ...}) = 0
brk(0)                       = 0x976a000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or dir
open("/etc/ld.so.cache", O_RDONLY)          =3
fstat64(3, {st_mode=S_IFREG|0644, st_size=89946, ...}) = 0
old_mmap(NULL, 89946, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7
close(3)                     =0
open("/lib/libdl.so.2", O_RDONLY)         =3
                                                                  38
gdb
●   デバッガはコードを理解するためにあ
    る
    ∴コードを読むために使う
●   http://savannah.gnu.org/projects/gdb




                                     39
gdbで読むための準備
●   gcc -g でコンパイル
●   コンパイルしたコードサイズが大きく
    なる以外、特に副作用はない
●   printfデバッグは有害無益




                    40
gdb
●   ブレークポイントを設定
●   ウオッチポイント(変数の変更)
●   run
●   止まった時点で
    ●   bt スタックフレームの表示
    ●   p 変数の表示
    ●   c 実行再開、s ステップ実行(関数に潜る)、
        n ステップ実行(関数に潜らない)
●   繰り返す                      41
oprofile
●   プロファイラー
    ●   実行時のボトルネックを発見
    ●   # opcontrol --start
    ●   テストの実行
    ●   # opcontrol --stop
    ●   # opreport -l
●   http://oprofile.sourceforge.net/news/

                                     42
oprofile
CPU: Core Solo / Duo, speed 2666.77 MHz (estimated)
Counted DCACHE_PEND_MISS events (Weighted cycles of L1 miss outstanding) with
a unit mask of 0x00 (Weighted cycles) count 100000
          vma    samples    %             linenr info          app name symbol
   name
000000000042be50 244787     33.2383       gc.c:1661            ruby
   os_each_obj
  000000000042bfac 1            4.1e-04     gc.c:1599
  000000000042bfb9 5            0.0020     gc.c:1599
  000000000042bfbe 6            0.0025      gc.c:1599
  000000000042bfd0 4862         1.9862      gc.c:1601
  000000000042bfd3 228573       93.3763     gc.c:1601
  000000000042bfd6 2698         1.1022     gc.c:1601
  000000000042bfd8 250          0.1021     ruby.h:672
                                                                                 43
oprofile
●   高速道路で、ズバリ最もコストのか
    かっているところに連れて行ってくれ
    る
●   コードを読まないで、理解する極意




                    44
微視的理解
●   ひたすらコードを読む
●   王道はない
●   ↑身もふたもない
●   データ構造、変数などに注目し、どこ
    で定義され、参照され、代入(変更)
    されているかという観点でみる
●   デバッガとエディタ、クロスリファレ
    ンスツールを駆使
                    45
微視的理解
●   $ time find -type f -name 
    '*.[ch]' -or -name '*.cpp' 
    -or -name '*.cxx' | xargs 
    egrep -l hogehoge
●   $ time grep -r 
    –include='*.[ch]' hogehoge .
●   hogehogeを含むファイルを検索
                                   46
微視的理解
●   クロスリファレンスツール
    ● 変数の定義(型情報)、変更(代入)、参照


●   変数(関数)が、どのように定義されていて、ど
    のように参照、変更されているかを追う
●   cscope
    http://cscope.sourceforge.net/
●   lxr
    http://lxr.linux.no/
●   GNU GLOBAL
    http://www.gnu.org/software/global/
●   ack-grep
                                          47
実習
●   cscopeを利用する
    $ time cscope-indexer -r
●   emacsを利用する
●   gdbを利用する
●   oprofileを利用する



                               48
ソースコードを読む視点


       微視的理解 巨視的理解
                                 ディ ト 構造、
                                   レク リ  名前付け規約
静的理解   ソースコ 、 h a n ge Log 、 リ
             ード C
       ノ 、 sco p e
        ート c
                            リ ース 、規模の把握(
                                 など)
                                        行数、 ァ ル数
                                           フ イ




動的理解   デバッ (g db )による実行、 e
          ガ             strac
                                op ro fie 、 c e 、
                                ッ ンテスト
                                 ショ
                                       l stra    実行性能、 グレ
                                                      リ




                                                            49
参考書
●   Linux
     ● 詳解LINUXカーネル第三版

       ISBN:487311313X
     ● Linuxカーネル2.6解読室

       ISBN:4797338261
●   コードリーディング
    ● ISBN:4839912653


●   Rubyソースコード完全解説
     ● ISBN:4844317210(品切れ中)

       http://i.loveruby.net/ja/rhg/
                                       50
ユメのチカラ(ブログ)
●   http://blog.miraclelinux.com/yume/
●   ブックマークで見た人気エントリー
●   ソースコードの読み方(524個)
    ●   http://blog.miraclelinux.com/yume/2007/08/post_d6bd.html

●   デバッグ方法論(99個)
    ●   http://blog.miraclelinux.com/yume/2007/08/post_d3eb.html

●   多くの人に興味がある話題

                                                                   51
●   ブログ:ユメのチカラ
●   http://blog.miraclelinux.com/yume/
●   未来のいつか/hyoshiokの日記
●   http://d.hatena.ne.jp/hyoshiok/




                                         52

More Related Content

What's hot

Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Taku Miyakawa
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試したy-uti
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話Kinuko Yasuda
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードy-uti
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Takefumi MIYOSHI
 
PHPでマルチスレッド
PHPでマルチスレッドPHPでマルチスレッド
PHPでマルチスレッドkarky7
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューAkira Inoue
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたYoshio Hanawa
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い sasezaki
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までMasahiro Wakame
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another sideKiwamu Okabe
 
Richard high performance fuzzing ja
Richard  high performance fuzzing jaRichard  high performance fuzzing ja
Richard high performance fuzzing jaPacSecJP
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームmarsee101
 
PHPの関数実行とその計測
PHPの関数実行とその計測PHPの関数実行とその計測
PHPの関数実行とその計測shinjiigarashi
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るMasahiro Wakame
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CITDaiki Maekawa
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方Shigenori Sagawa
 

What's hot (20)

ECMAScript没proposal追悼式
ECMAScript没proposal追悼式ECMAScript没proposal追悼式
ECMAScript没proposal追悼式
 
Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語Kink: プロトタイプベースの俺々 JVM 言語
Kink: プロトタイプベースの俺々 JVM 言語
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
 
Synthesijer jjug 201504_01
Synthesijer jjug 201504_01Synthesijer jjug 201504_01
Synthesijer jjug 201504_01
 
PHPでマルチスレッド
PHPでマルチスレッドPHPでマルチスレッド
PHPでマルチスレッド
 
TypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービューTypeScript 1.0 オーバービュー
TypeScript 1.0 オーバービュー
 
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみたOPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
 
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
 
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例までBuildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
Buildinsider OFFLINE TypeScriptの基礎から実践・利用事例まで
 
Dive into RTS - another side
Dive into RTS - another sideDive into RTS - another side
Dive into RTS - another side
 
Richard high performance fuzzing ja
Richard  high performance fuzzing jaRichard  high performance fuzzing ja
Richard high performance fuzzing ja
 
Vivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリームVivado hlsのシミュレーションとhlsストリーム
Vivado hlsのシミュレーションとhlsストリーム
 
PHPの関数実行とその計測
PHPの関数実行とその計測PHPの関数実行とその計測
PHPの関数実行とその計測
 
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作るGoCon 2015 Summer GoのASTをいじくって新しいツールを作る
GoCon 2015 Summer GoのASTをいじくって新しいツールを作る
 
ROS Tutorial 02 - CIT
ROS Tutorial 02 - CITROS Tutorial 02 - CIT
ROS Tutorial 02 - CIT
 
良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方良い?悪い?コードコメントの書き方
良い?悪い?コードコメントの書き方
 

Viewers also liked

VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 Hiro Yoshioka
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルComputational Materials Science Initiative
 
Hacker culture at an internet company. 文明塾, 2014/04/23
Hacker culture at an internet company. 文明塾, 2014/04/23Hacker culture at an internet company. 文明塾, 2014/04/23
Hacker culture at an internet company. 文明塾, 2014/04/23Hiro Yoshioka
 
1000 Speakers Conference in English, on December 6th, 2013
1000 Speakers Conference in English, on December 6th, 20131000 Speakers Conference in English, on December 6th, 2013
1000 Speakers Conference in English, on December 6th, 2013Hiro Yoshioka
 
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014Hiro Yoshioka
 
kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014Hiro Yoshioka
 
Internet and Opensource at Security and Programming camp 2011
Internet and Opensource at Security and Programming camp 2011 Internet and Opensource at Security and Programming camp 2011
Internet and Opensource at Security and Programming camp 2011 Hiro Yoshioka
 
産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit
産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit
産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpitMiho Nagase
 
Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...
Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...
Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...Hiro Yoshioka
 
対人関係におけるアルコールの効用
対人関係におけるアルコールの効用対人関係におけるアルコールの効用
対人関係におけるアルコールの効用Akiko Kosaka
 
1000 speakers conference in English, 2nd, 1/20/2013
1000 speakers conference in English, 2nd, 1/20/20131000 speakers conference in English, 2nd, 1/20/2013
1000 speakers conference in English, 2nd, 1/20/2013Hiro Yoshioka
 
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000engHiro Yoshioka
 
Introduction to Git and GitHub #git_nyan
Introduction to Git and GitHub #git_nyanIntroduction to Git and GitHub #git_nyan
Introduction to Git and GitHub #git_nyanHiro Yoshioka
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaSHiro Yoshioka
 
Hacker centric culture @devlove 110423
Hacker centric culture @devlove 110423Hacker centric culture @devlove 110423
Hacker centric culture @devlove 110423Hiro Yoshioka
 
How Changing Mobile Technology Is Changing The Way We Create Economy.
How Changing Mobile Technology Is Changing The Way We Create Economy. How Changing Mobile Technology Is Changing The Way We Create Economy.
How Changing Mobile Technology Is Changing The Way We Create Economy. Osaka University
 
Business Application Development Course at AIIT
Business Application Development Course at AIITBusiness Application Development Course at AIIT
Business Application Development Course at AIITHiro Yoshioka
 
20140725 オープンデータ化の価値
20140725 オープンデータ化の価値20140725 オープンデータ化の価値
20140725 オープンデータ化の価値Tomoaki Watanabe
 
CUI -- How to Analyze History command
CUI -- How to Analyze History commandCUI -- How to Analyze History command
CUI -- How to Analyze History commandHiro Yoshioka
 

Viewers also liked (20)

VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011
 
Version Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアルVersion Control System Tutorial バージョン管理システムチュートリアル
Version Control System Tutorial バージョン管理システムチュートリアル
 
Hacker culture at an internet company. 文明塾, 2014/04/23
Hacker culture at an internet company. 文明塾, 2014/04/23Hacker culture at an internet company. 文明塾, 2014/04/23
Hacker culture at an internet company. 文明塾, 2014/04/23
 
1000 Speakers Conference in English, on December 6th, 2013
1000 Speakers Conference in English, on December 6th, 20131000 Speakers Conference in English, on December 6th, 2013
1000 Speakers Conference in English, on December 6th, 2013
 
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
English Book Club at 1000 Speakers Conference in English, 3rd, on Feb 7th, 2014
 
kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014kernel code reading party on March 28th, 2014
kernel code reading party on March 28th, 2014
 
Internet and Opensource at Security and Programming camp 2011
Internet and Opensource at Security and Programming camp 2011 Internet and Opensource at Security and Programming camp 2011
Internet and Opensource at Security and Programming camp 2011
 
産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit
産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit
産業技術大学院大学の2014年度enPiT受講生募集中 #qcontokyo #aiit_enpit
 
Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...
Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...
Anatomy of Lightning Talks at Rakuten Technology Conference 2014, After Confe...
 
対人関係におけるアルコールの効用
対人関係におけるアルコールの効用対人関係におけるアルコールの効用
対人関係におけるアルコールの効用
 
1000 speakers conference in English, 2nd, 1/20/2013
1000 speakers conference in English, 2nd, 1/20/20131000 speakers conference in English, 2nd, 1/20/2013
1000 speakers conference in English, 2nd, 1/20/2013
 
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
1000 Speakers Conference in English, 5th on April 11th, 2014 #1000eng
 
Introduction to Git and GitHub #git_nyan
Introduction to Git and GitHub #git_nyanIntroduction to Git and GitHub #git_nyan
Introduction to Git and GitHub #git_nyan
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaS
 
Hacker centric culture @devlove 110423
Hacker centric culture @devlove 110423Hacker centric culture @devlove 110423
Hacker centric culture @devlove 110423
 
Tokaido 53 walk
Tokaido 53 walkTokaido 53 walk
Tokaido 53 walk
 
How Changing Mobile Technology Is Changing The Way We Create Economy.
How Changing Mobile Technology Is Changing The Way We Create Economy. How Changing Mobile Technology Is Changing The Way We Create Economy.
How Changing Mobile Technology Is Changing The Way We Create Economy.
 
Business Application Development Course at AIIT
Business Application Development Course at AIITBusiness Application Development Course at AIIT
Business Application Development Course at AIIT
 
20140725 オープンデータ化の価値
20140725 オープンデータ化の価値20140725 オープンデータ化の価値
20140725 オープンデータ化の価値
 
CUI -- How to Analyze History command
CUI -- How to Analyze History commandCUI -- How to Analyze History command
CUI -- How to Analyze History command
 

Similar to Code Reading at Security and Programming camp 2011

Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code readingHiro Yoshioka
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, CodereadingHiro Yoshioka
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Hiro Yoshioka
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Hiro Yoshioka
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識Katsuhiro Morishita
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Takuya Ueda
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版Katsuhiro Morishita
 
Terraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as CodeTerraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as CodeTakahisa Iwamoto
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacksHiro Yoshioka
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49shoma h
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口Sunao Tomita
 
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017 2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017 unixfreaxjp
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2tamtam180
 

Similar to Code Reading at Security and Programming camp 2011 (20)

Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
Programming camp 2008, Codereading
Programming camp 2008, CodereadingProgramming camp 2008, Codereading
Programming camp 2008, Codereading
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011 Debug Hacks at Security and Programming camp 2011
Debug Hacks at Security and Programming camp 2011
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
 
Terraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as CodeTerraformで始めるInfrastructure as Code
Terraformで始めるInfrastructure as Code
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
Pythonista による Pythonista のための Scala 紹介 in BPStudy #49
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
TypeScriptへの入口
TypeScriptへの入口TypeScriptへの入口
TypeScriptへの入口
 
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017 2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017
2017年11月02日「radare2」トーク/ワークショップAVTokyo 2017
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
 

More from Hiro Yoshioka

Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Hiro Yoshioka
 
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Hiro Yoshioka
 
不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにかHiro Yoshioka
 
続・人生100年時代の学び方
続・人生100年時代の学び方続・人生100年時代の学び方
続・人生100年時代の学び方Hiro Yoshioka
 
人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活Hiro Yoshioka
 
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Hiro Yoshioka
 
人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性があるHiro Yoshioka
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7Hiro Yoshioka
 
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演Hiro Yoshioka
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】Hiro Yoshioka
 
未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_studyHiro Yoshioka
 
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Hiro Yoshioka
 
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56Hiro Yoshioka
 
理科系の作文技術
理科系の作文技術理科系の作文技術
理科系の作文技術Hiro Yoshioka
 
Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Hiro Yoshioka
 
質問される力 #TechGirls
質問される力 #TechGirls質問される力 #TechGirls
質問される力 #TechGirlsHiro Yoshioka
 
Oracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるOracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるHiro Yoshioka
 
Using oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureUsing oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureHiro Yoshioka
 
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in JapanIT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in JapanHiro Yoshioka
 

More from Hiro Yoshioka (20)

Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
Infra study 2nd #1 人生100年時代の学び方,定年後の大学院生活
 
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
Infra study 2nd #1「インフラ技術者・研究者としてのキャリア」
 
不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか不揮発性メモリ(NVM)とはなにか
不揮発性メモリ(NVM)とはなにか
 
続・人生100年時代の学び方
続・人生100年時代の学び方続・人生100年時代の学び方
続・人生100年時代の学び方
 
人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活人生100年時代における学び方 定年後の学生生活
人生100年時代における学び方 定年後の学生生活
 
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
Thesis introduction "RECIPE : Converting Concurrent DRAM Indexes to Persisten...
 
人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある人生100年時代の学び方、脳には可塑性がある
人生100年時代の学び方、脳には可塑性がある
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、「私のような仕事につく方法」、2019/06/23 DevLOVE X Day 1 D-7
 
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
OSSとの付き合い方。OSSから学んだこと。OSS貢献者賞受賞講演
 
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
エンジニア人生と定年退職、人生100年時代のエンジニアの生き方、デブサミ 2019 【15-A-8】
 
未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study未経験プログラマがコボルコンパイラを作った話 #compiler_study
未経験プログラマがコボルコンパイラを作った話 #compiler_study
 
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
Godel, Escher, Bach: an Eternal Golden Braid, reading club, Chapter 12
 
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56海外から見た東京 〜人生100年時代の働き方〜 #efsta56
海外から見た東京 〜人生100年時代の働き方〜 #efsta56
 
理科系の作文技術
理科系の作文技術理科系の作文技術
理科系の作文技術
 
Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015Agile Software Development advanced course (PBL) at AIIT, 2015
Agile Software Development advanced course (PBL) at AIIT, 2015
 
質問される力 #TechGirls
質問される力 #TechGirls質問される力 #TechGirls
質問される力 #TechGirls
 
Oracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考えるOracle vs Google API 著作権裁判を考える
Oracle vs Google API 著作権裁判を考える
 
Using oss at an internet company and hacker culture
Using oss at an internet company and hacker cultureUsing oss at an internet company and hacker culture
Using oss at an internet company and hacker culture
 
Be Hacker
Be HackerBe Hacker
Be Hacker
 
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in JapanIT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
IT勉強会 Anatomy of IT Study groups, seminars, conferences in Japan
 

Code Reading at Security and Programming camp 2011

  • 1. セキュリティ&プログラミング キャンプ2011 ソースコードの読み方 よしおかひろたか 2011年8月11日
  • 2. 講師紹介 ● よしおかひろたか、Debug Hacks著者、カーネル 読書会主宰、YLUG(横浜Linux Users Group)、勉 強会勉強会 ● 未来のいつか/hyoshioの日記 http://d.hatena.ne.jp/hyoshiok ● hyoshiok@gmail.com ● http://twitter.com/hyoshiok 2
  • 3. お題 ● ソースコードの読み方 3
  • 4. プログラマに必要な3つの スキル ● ソースコードを読むチカラ ● デバッグするチカラ ● テストをするチカラ 4
  • 5. 3つのスキルをどう身につ けるか ● 学校では教えてくれない ● 教科書を読む? ● 実際のプロジェクトで経験する? ● オープンソースのプロジェクトに参加? ● 師匠に弟子入り? ● そこでプログラミングキャンプだ 5
  • 6. ソースコードの読み方 ● ソースコードって何? ● 人間がプログラミング言語などを用い て記述したもの。 ● そのままではコンピュータは実行できないので 、通常、コンパイラと呼ばれるソフトウェアで 直接実行できる形式に変換して実行されるか、 インタプリタと呼ばれるソフトウェアで字面を 解釈し実行される。 6
  • 7. トラブルシューティングと ソースコードの読み方 ● トラブルシューティングと問題の理解 ● 実践的なコードの理解 7
  • 8. ソースコードを読むチカラ ● プログラマの基礎体力 ● ソフトウェア開発コストの大部分は保守 ● 不具合修正、改良、機能追加にはコードの理解 が必須 ● 技術者の付加価値 ● OSSは深追いできる ● 陳腐化しにくい ● プロフェッショナルとしての研鑚 ● すぐれた技術者はソースコードを上手に読む 8
  • 9. コードの読み方 ● なぜ、コードを読むのか ● どのように、読むのか 9
  • 10. なぜコードを読むのか? ● 仕事だから(目的中心) ● トラブルシューティング(不具合修正) ● 機能修正、機能開発 ● 自己研鑚、勉強 ● 趣味だから(興味中心) ● 楽しいから ● 自己啓発(知的好奇心) ● 不純な動機 ● 形から入る 10
  • 11. なぜコードを読むのか ● 目的中心の場合 ● 対象に対する基礎知識は必要 ● アーキテクチャ OS、プログラミング言語、RDBMS、… ● 定番の教科書で知識を得る 11
  • 12. なぜコードを読むのか ● 興味中心の場合 ● 人それぞれ、人生いろいろ ● 無目的でもいいじゃないか ● 熟読、濫読、積読、黙読、音読、再読、誤読、 精読、速読、耽読、通読、復読、輪読、朗読、 輪読、… 12
  • 13. コードの理解について ● モットー: コードは読むな、 理解しろ〜 13
  • 14. どのようにコードを理解す るのか ● 個人的な方法を紹介する ● 唯一あるいはベストな方法というわけでもない ● 適材適所、もっと良い方法があると思う ● 公開することによって進化したい(もっと良い 方法への模索) 14
  • 15. ソースコードを読む視点 微視的理解 巨視的理解 静的理解 動的理解 15
  • 16. 理解の仕方、読み方 ● 静的、動的理解 ● 微視的、巨視的 ● 規模の把握 ● ツールの利用 ● 事例 16
  • 17. 静的理解、動的理解 ● 静的理解 ● 字面での理解 ● 動的理解 ● 動作による理解 17
  • 18. 静的、動的構造 ● 静的構造(デモ) ● 規模 ● ディレクトリ構造 ● 名前つけ規約 ● 動的構造 ● 呼び出し経路 ● プロファイリング ● 実行結果 18
  • 19. 微視的、巨視的 ● 微視的:細部からの理解 ● 最終的にはコードの一行 ● 巨視的:全体からの理解 ● 規模、構造、機能など。実行結果(性能?) ● 俯瞰図、鳥瞰図。 19
  • 20. 規模の把握(巨視的理解) ● 規模重要 ● 規模(相手)を知らずして作戦を立てられない ● 大局的な地図、俯瞰図、鳥瞰図 ● 大規模になればなるほど、システマティックな 方法論が必要になってくる ● 巨視的な理解 20
  • 21. 規模の把握 ● 小規模:100K行未満程度、 ファイル数100未満 10人未満 ● 中規模:100K行〜1M行程度 ファイル数100〜1000未満 100人未満 ● 大規模:1M行以上 ファイル数1000以上 100人以上 ざっくりの規模感 21
  • 22. 規模の把握(例) ● find -type f -name "*.[ch]"|wc ● find -type f -name "*.[ch]"|xargs wc|grep total Ruby 1.8.5 257 197767 Linux 2.6.18 16522 680万 MySQL 5.0.24a 1795 988463 22
  • 23. ディレクトリ構造 ● トップディレクトリは、ソフトウェア の論理的構造を表している ● doc ドキュメント ● lib ライブラリ関係 ● test テスト ● ソースツリーの把握 23
  • 24. ドキュメント ● README, INSTALL, COPYING, … ● 内部ドキュメント(Docs) ● リリースノート ● ChangeLog 24
  • 25. 変更の履歴 ● ChangeLog/Release Notes ● コード管理システム ● 例:Linux git/Subversion/CVS ● Mailing List ● Wiki ● blog ● 変更(時間軸)の微視的理解 25
  • 26. ドキュメント、情報収集 ● マニュアルを読む ● サーチエンジン(Google)に聞く ● Mailing List ● Bug database ● 開発者との会話(シンポジウムなど) ● 勉強会 26
  • 27. ソースコードを読む視点 微視的理解 巨視的理解 ディ ト 構造、 レク リ 名前付け規約 静的理解 ソ ノ ースコ 、 h a n ge Log 、 リ ート ード C リ ース 、規模の把握( など) 行数、 ァ ル数 フ イ 動的理解 デバッガによる実行 実行性能、 グレッ ンテスト リ ショ 27
  • 28. いよいよコードを読む? ● ツール ● エディタ:emacs ● デバッガ:gdb ● クロスレファレンス:cscope ● カーネルの場合、クラッシュダンプ(crash) 28
  • 29. デモ、実習 ● 例題としてrubyを読むことにする。 ● ● GNU Hello ● http://savannah.gnu.org/projects/hello 29
  • 30. 実習 ● ソースコードの規模を理解する ● ディレクトリ構造を理解する ● ビルドする ● ソースコードのナビゲート ● 機能変更をする 30
  • 31. 実習 ● ディレクトリ構造を理解する ● ファイル名を眺める ● ファイル数を調べる ● プログラムの行数を調べる 31
  • 32. 実習 ●ソースコードの入手 $ git-clone git:// (講師に聞いてください) ● ビルドの準備 READMEをよく読む ● 必要なツールを揃える - automake <http://www.gnu.org/software/automake/> - autoconf <http://www.gnu.org/software/autoconf/> - bison <http://www.gnu.org/software/bison/> - gettext <http://www.gnu.org/software/gettext/> - git <http://git.or.cz/> - gperf <http://www.gnu.org/software/gperf/> - gzip <http://www.gnu.org/software/gzip/> - perl <http://www.cpan.org/> - rsync <http://samba.anu.edu.au/rsync/> - tar <http://www.gnu.org/software/tar/> 32
  • 33. 実習 ● ビルド $ time git clone ssh:// (講師から情報を得る) $ cd ruby $ time autoconf $ time ./configure $ time make $ time make test 33
  • 34. $ git checkout -b trunk origin/trunk ● $ autoconf ● ./configure ● make -j4 miniruby 34
  • 35. 動的理解 ● ビルド 35
  • 36. 動的理解 ● ともかく動かす ● make ● strace ● ltrace ● gdb ● oprofile ● リグレッションテスト ● ベンチマークテスト 36
  • 37. make ● とりあえず、make ● 実行環境の構築 ● gcc -g (デバッグシンボルを付加する) 通常はMakefileのCFLAGSなどに設定 ● cscopeのインデックスを作成 ● ビルドはemacsのshellなどから行い、ビルドの ログを取得しておくと便利 37
  • 38. strace ● システムコールのトレース $ strace ruby -v execve("/usr/local/bin/ruby", ["ruby", "-v"], [/* 39 vars */]) = 0 uname({sys="Linux", node="asianux2.miraclelinux.com", ...}) = 0 brk(0) = 0x976a000 access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or dir open("/etc/ld.so.cache", O_RDONLY) =3 fstat64(3, {st_mode=S_IFREG|0644, st_size=89946, ...}) = 0 old_mmap(NULL, 89946, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb7 close(3) =0 open("/lib/libdl.so.2", O_RDONLY) =3 38
  • 39. gdb ● デバッガはコードを理解するためにあ る ∴コードを読むために使う ● http://savannah.gnu.org/projects/gdb 39
  • 40. gdbで読むための準備 ● gcc -g でコンパイル ● コンパイルしたコードサイズが大きく なる以外、特に副作用はない ● printfデバッグは有害無益 40
  • 41. gdb ● ブレークポイントを設定 ● ウオッチポイント(変数の変更) ● run ● 止まった時点で ● bt スタックフレームの表示 ● p 変数の表示 ● c 実行再開、s ステップ実行(関数に潜る)、 n ステップ実行(関数に潜らない) ● 繰り返す 41
  • 42. oprofile ● プロファイラー ● 実行時のボトルネックを発見 ● # opcontrol --start ● テストの実行 ● # opcontrol --stop ● # opreport -l ● http://oprofile.sourceforge.net/news/ 42
  • 43. oprofile CPU: Core Solo / Duo, speed 2666.77 MHz (estimated) Counted DCACHE_PEND_MISS events (Weighted cycles of L1 miss outstanding) with a unit mask of 0x00 (Weighted cycles) count 100000 vma samples % linenr info app name symbol name 000000000042be50 244787 33.2383 gc.c:1661 ruby os_each_obj 000000000042bfac 1 4.1e-04 gc.c:1599 000000000042bfb9 5 0.0020 gc.c:1599 000000000042bfbe 6 0.0025 gc.c:1599 000000000042bfd0 4862 1.9862 gc.c:1601 000000000042bfd3 228573 93.3763 gc.c:1601 000000000042bfd6 2698 1.1022 gc.c:1601 000000000042bfd8 250 0.1021 ruby.h:672 43
  • 44. oprofile ● 高速道路で、ズバリ最もコストのか かっているところに連れて行ってくれ る ● コードを読まないで、理解する極意 44
  • 45. 微視的理解 ● ひたすらコードを読む ● 王道はない ● ↑身もふたもない ● データ構造、変数などに注目し、どこ で定義され、参照され、代入(変更) されているかという観点でみる ● デバッガとエディタ、クロスリファレ ンスツールを駆使 45
  • 46. 微視的理解 ● $ time find -type f -name '*.[ch]' -or -name '*.cpp' -or -name '*.cxx' | xargs egrep -l hogehoge ● $ time grep -r –include='*.[ch]' hogehoge . ● hogehogeを含むファイルを検索 46
  • 47. 微視的理解 ● クロスリファレンスツール ● 変数の定義(型情報)、変更(代入)、参照 ● 変数(関数)が、どのように定義されていて、ど のように参照、変更されているかを追う ● cscope http://cscope.sourceforge.net/ ● lxr http://lxr.linux.no/ ● GNU GLOBAL http://www.gnu.org/software/global/ ● ack-grep 47
  • 48. 実習 ● cscopeを利用する $ time cscope-indexer -r ● emacsを利用する ● gdbを利用する ● oprofileを利用する 48
  • 49. ソースコードを読む視点 微視的理解 巨視的理解 ディ ト 構造、 レク リ 名前付け規約 静的理解 ソースコ 、 h a n ge Log 、 リ ード C ノ 、 sco p e ート c リ ース 、規模の把握( など) 行数、 ァ ル数 フ イ 動的理解 デバッ (g db )による実行、 e ガ strac op ro fie 、 c e 、 ッ ンテスト ショ l stra 実行性能、 グレ リ 49
  • 50. 参考書 ● Linux ● 詳解LINUXカーネル第三版 ISBN:487311313X ● Linuxカーネル2.6解読室 ISBN:4797338261 ● コードリーディング ● ISBN:4839912653 ● Rubyソースコード完全解説 ● ISBN:4844317210(品切れ中) http://i.loveruby.net/ja/rhg/ 50
  • 51. ユメのチカラ(ブログ) ● http://blog.miraclelinux.com/yume/ ● ブックマークで見た人気エントリー ● ソースコードの読み方(524個) ● http://blog.miraclelinux.com/yume/2007/08/post_d6bd.html ● デバッグ方法論(99個) ● http://blog.miraclelinux.com/yume/2007/08/post_d3eb.html ● 多くの人に興味がある話題 51
  • 52. ブログ:ユメのチカラ ● http://blog.miraclelinux.com/yume/ ● 未来のいつか/hyoshiokの日記 ● http://d.hatena.ne.jp/hyoshiok/ 52