SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
セキュリティ&プログラ
 ミングキャンプ2008
 ソースコードの読み方
   2008年8月15日
ミラクル・リナックス株式会社
   よしおかひろたか
本日のアジェンダ
●
    ソースコードの読み方
トラブルシューティングと
    ソースコードの読み方
●
    トラブルシューティングと問題の理解
●
    実践的なコードの理解
ソースコードを読むチカラ
●
    プログラマの基礎体力
    ●
        ソフトウェア開発コストの大部分は保守
    ●
        不具合修正、改良、機能追加にはコードの理解が
        必須
●
    技術者の付加価値
    ●
        OSSは深追いできる
    ●
        陳腐化しにくい
●
    プロフェッショナルとしての研鑚
    ●
        すぐれた技術者はソースコードを上手に読む
コードの読み方
●
    なぜ、コードを読むのか
●
    どのように、読むのか
なぜコードを読むのか?
●
    仕事だから
    ●
        トラブルシューティング(不具合修正)
    ●
        機能修正、機能開発
    ●
        自己研鑚、勉強
●
    趣味だから
    ●
        楽しいから
    ●
        自己啓発(知的好奇心)
●
    不純な動機
    ●
        形から入る
なぜコードを読むのか
●
    人それぞれ、人生いろいろ
●
    無目的でもいいじゃないか
●
    熟読、濫読、積読、黙読、音読、再読、誤
    読、精読、速読、耽読、通読、復読、輪読
    、朗読、輪読、…
コードの理解について
●
    モットー:
    コードは読むな、
    理解しろ〜
どのようにコードを理解するの
    か
●
    個人的な方法を紹介する
    ●
        唯一あるいはベストな方法というわけでもない
    ●
        適材適所、もっと良い方法があると思う
    ●
        公開することによって進化したい(もっと良い方法
        への模索)
ソースコードを読む視点


        微視的理解 巨視的理解

 静的理解

 動的理解
理解の仕方、読み方
●
    静的、動的理解
●
    微視的、巨視的
●
    規模の把握
●
    ツールの利用
●
    事例
静的理解、動的理解
●
    静的理解
    ●
        字面での理解
●
    動的理解
    ●
        動作による理解
静的、動的構造
●
    静的構造
    ●
        規模
    ●
        ディレクトリ構造
    ●
        名前つけ規約
●
    動的構造
    ●
        呼び出し経路
    ●
        プロファイリング
    ●
        実行結果
微視的、巨視的
●
    微視的:細部からの理解
    ●
        最終的にはコードの一行
●
    巨視的:全体からの理解
    ●
        規模、構造、機能など。実行結果(性能?)
    ●
        俯瞰図、鳥瞰図。
規模の把握(巨視的理解)
●
    規模重要
    ●
        規模(相手)を知らずして作戦を立てられない
    ●
        大局的な地図、俯瞰図、鳥瞰図
    ●
        大規模になればなるほど、システマティックな方法
        論が必要になってくる
    ●
        巨視的な理解
規模の把握
●
    小規模:100K行未満程度、
    ファイル数100未満
    10人未満
●
    中規模:100K行〜1M行程度
    ファイル数100〜1000未満
    100人未満
●
    大規模:1M行以上
    ファイル数1000以上
    100人以上
    ざっくりの規模感
規模の把握(例)
●
    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
ディレクトリ構造
●
    トップディレクトリは、ソフトウェアの論理
    的構造を表している
    ●
        doc ドキュメント
    ●
        lib ライブラリ関係
    ●
        test テスト
●
    ソースツリーの把握
ドキュメント
●
    README, INSTALL, COPYING, …
●
    内部ドキュメント(Docs)
●
    リリースノート
●
    ChangeLog
変更の履歴
●
    ChangeLog/Release Notes
●
    コード管理システム
    ●
        例:Linux git/Subversion/CVS
●
    Mailing List
●
    Wiki
●
    blog
●
    変更(時間軸)の微視的理解
ドキュメント、情報収集
●
    Mailing List
●
    Bug database
●
    開発者との会話
●
    Googleに聞く
ソースコードを読む視点


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




 動的理解   デバッガによる実行         実行性能、リグレッションテスト
いよいよコードを読む?
●
    ツール
    ●
        エディタ:(x)emacs
    ●
        デバッガ:gdb
    ●
        クロスレファレンス:cscope
    ●
        カーネルの場合、クラッシュダンプ(crash)
デモ、実習
●
    例題としてGNU coreutilsを読むことにす
    る。
    ●
        http://ftp.gnu.org/gnu/coreutils/
    ●
        http://savannah.gnu.org/projects/coreutils/
    ●
        http://git.savannah.gnu.org/gitweb/?p=coreutils.git
●
    GNU Hello
    ●
        http://savannah.gnu.org/projects/hello
実習
●
    ソースコードの規模を理解する
●
    ディレクトリ構造を理解する
●
    ビルドする
●
    ソースコードのナビゲート
●
    機能変更をする
実習
●
    ディレクトリ構造を理解する
●
    ファイル名を眺める
●
    ファイル数を調べる
●
    プログラムの行数を調べる
実習
●
    ソースコードの入手
    $ git clone git://git.savannah.gnu.org/coreutils.git
●
    ビルドの準備
    README-hackingをよく読む
●
    必要なツールを揃える
    -   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/>
実習
●
    ビルド
    $   time git clone git://git.savannah.gnu.org/coreutils.git
    $   cd coreutils
    $   time sudo ./bootstrap
    $   time sudo ./configure
    $   time sudo make
    $   time sudo make check
動的理解
●
    ビルド
動的理解
●
    ともかく動かす
    ●
        make; make install
    ●
        strace
    ●
        ltrace
    ●
        gdb
    ●
        oprofile
    ●
        リグレッションテスト
    ●
        ベンチマークテスト
make
●
    とりあえず、make; make install
●
    実行環境の構築
    ●
        gcc -g (デバッグシンボルを付加する)
    ●
        cscopeのインデックスを作成
    ●
        ビルドは(x)emacsのshellなどから行い、ビルドのロ
        グを取得しておく
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
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) = 0xb7fe
close(3)                       =0
open("/lib/libdl.so.2", O_RDONLY)       =3
gdb
●
    デバッガはコードを理解するためにある
    ∴コードを読むために使う
●
    http://savannah.gnu.org/projects/gdb
gdbで読むための準備
●
    gcc -g でコンパイル
●
    コンパイルしたコードサイズが大きくなる
    以外、特に副作用はない
●
    printfデバッグは有害無益
gdb
●
    ブレークポイントを設定
●
    ウオッチポイント(変数の変更)
●
    run
●
    止まった時点で
    ●
      bt スタックフレームの表示
    ●
      p 変数の表示
    ●
      c 実行再開、s ステップ実行(関数に潜る)、n ステ
      ップ実行(関数に潜らない)
●
    繰り返す
oprofile
●
    プロファイラー
    ●
        実行時のボトルネックを発見
    ●
        # opcontrol –--start
    ●
        テストの実行
    ●
        # opcontrol –--stop
    ●
        # opreport -l
●
    http://oprofile.sourceforge.net/news/
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
oprofile
●
    高速道路で、ズバリ最もコストのかかって
    いるところに連れて行ってくれる
●
    コードを読まないで、理解する極意
微視的理解
●
    ひたすらコードを読む
●
    王道はない
●
    ↑身もふたもない
●
    データ構造、変数などに注目し、どこで定
    義され、参照され、代入(変更)されてい
    るかという観点でみる
●
    デバッガとエディタ、クロスリファレンスツ
    ールを駆使
微視的理解
●
    $ time find -type f |egrep  '.([chp]
    (xx|pp)*|cc|hh)$' |xargs egrep -l
    hogehoge
●
    hogehogeを含むファイルを検索
微視的理解
●
    クロスリファレンスツール
    ●
        変数の定義(型情報)、変更(代入)、参照
●
    変数(関数)が、どのように定義されてい
    て、どのように参照、変更されているかを
    追う
●
    cscope
    http://cscope.sourceforge.net/
●
    lxr
    http://lxr.linux.no/
●
    GNU GLOBAL
    http://www.gnu.org/software/global/
実習
●
    cscopeを利用する
    $ time cscope-indexer -r
●
    emacsを利用する
●
    gdbを利用する
●
    oprofileを利用する
ソースコードを読む視点


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




 動的理解                       oprofile、strace、実行性能、リグレ
        デバッガ(gdb)による実行、strace ッションテスト
参考書
●
    Linux
    ●
        詳解LINUXカーネル第三版
        ISBN:487311313X
    ●
        Linuxカーネル2.6解読室
        ISBN:4797338261
●
    コードリーディング
    ●
        ISBN:4839912653
●
    Rubyソースコード完全解説
    ●
        ISBN:4844317210(品切れ中)
        http://i.loveruby.net/ja/rhg/
ユメのチカラ(ブログ)
●
    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
●
    多くの人に興味がある話題
●
    ブログ:ユメのチカラ
●
    http://blog.miraclelinux.com/yume/
●
    未来のいつか/hyoshiokの日記
●
    http://d.hatena.ne.jp/hyoshiok/

Más contenido relacionado

La actualidad más candente

どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)parrotstudio
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたfurandon_pig
 
Varnishのログの眺め方
Varnishのログの眺め方Varnishのログの眺め方
Varnishのログの眺め方Iwana Chan
 
tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)
tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)
tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)Iwana Chan
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyDaisuke Ando
 
My misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile moduleMy misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile moduleYukiya Hayashi
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門Hirotaka Kawata
 
パケットジェネレータipgenから見るnetmap
パケットジェネレータipgenから見るnetmapパケットジェネレータipgenから見るnetmap
パケットジェネレータipgenから見るnetmapfurandon_pig
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacksyaegashi
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1Hirotaka Kawata
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えてYuta Ogura
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 
Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方MITSUNARI Shigeo
 
Openjdk 入門してみた話
Openjdk 入門してみた話Openjdk 入門してみた話
Openjdk 入門してみた話Tokuhiro Matsuno
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会Hirotaka Kawata
 

La actualidad más candente (18)

どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
どきっ!三行で作るランダムダンジョン!?~WEBもあるよ!~ - 2010/8/21 群馬Web研究会(勉強会)
 
OSC2015kyoto
OSC2015kyotoOSC2015kyoto
OSC2015kyoto
 
elasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみたelasticsearchソースコードを読みはじめてみた
elasticsearchソースコードを読みはじめてみた
 
Varnishのログの眺め方
Varnishのログの眺め方Varnishのログの眺め方
Varnishのログの眺め方
 
tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)
tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)
tokyo.vcl発表資料(VarnishCache3.0新機能とVUPの仕方)
 
Fluentd+MongoDB+Groovy
Fluentd+MongoDB+GroovyFluentd+MongoDB+Groovy
Fluentd+MongoDB+Groovy
 
My misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile moduleMy misstake on Ansible’s lineinfile module
My misstake on Ansible’s lineinfile module
 
ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門ゼロから始める自作 CPU 入門
ゼロから始める自作 CPU 入門
 
パケットジェネレータipgenから見るnetmap
パケットジェネレータipgenから見るnetmapパケットジェネレータipgenから見るnetmap
パケットジェネレータipgenから見るnetmap
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
golang binary hacks
golang binary hacksgolang binary hacks
golang binary hacks
 
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
バイナリより低レイヤな話 (プロセッサの心を読み解く) - カーネル/VM探検隊@北陸1
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて秋のVim祭り Rubyを添えて
秋のVim祭り Rubyを添えて
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 
Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方Cybozu Tech Conference 2016 バグの調べ方
Cybozu Tech Conference 2016 バグの調べ方
 
Openjdk 入門してみた話
Openjdk 入門してみた話Openjdk 入門してみた話
Openjdk 入門してみた話
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 

Destacado

programming camp 2008, Debug
programming camp 2008, Debugprogramming camp 2008, Debug
programming camp 2008, DebugHiro Yoshioka
 
programming camp 2008, BOF Study Group
programming camp 2008, BOF Study Groupprogramming camp 2008, BOF Study Group
programming camp 2008, BOF Study GroupHiro Yoshioka
 
Debug Hacks Conference 2009
Debug Hacks Conference 2009Debug Hacks Conference 2009
Debug Hacks Conference 2009Hiro Yoshioka
 
Programming camp 2008
Programming camp 2008Programming camp 2008
Programming camp 2008Hiro Yoshioka
 
Sapporo Open Seminar 1
Sapporo Open Seminar 1Sapporo Open Seminar 1
Sapporo Open Seminar 1Hiro Yoshioka
 
programming camp 2008, introduction of git
programming camp 2008, introduction of gitprogramming camp 2008, introduction of git
programming camp 2008, introduction of gitHiro Yoshioka
 
Debug Hacks出版記念トークイベント、新宿ジュンク堂
Debug Hacks出版記念トークイベント、新宿ジュンク堂Debug Hacks出版記念トークイベント、新宿ジュンク堂
Debug Hacks出版記念トークイベント、新宿ジュンク堂Hiro 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
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaSHiro Yoshioka
 
Go to Study Group BoF at Security and Programming camp 2011
Go to Study Group BoF at Security and Programming camp 2011 Go to Study Group BoF at Security and Programming camp 2011
Go to Study Group BoF at Security and Programming camp 2011 Hiro Yoshioka
 
Building Hacker Centric Culture in Japan
Building Hacker Centric Culture in JapanBuilding Hacker Centric Culture in Japan
Building Hacker Centric Culture in JapanHiro Yoshioka
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02Hiro Yoshioka
 
社内Twitter研究会、by 勉強会同好会 110426
社内Twitter研究会、by 勉強会同好会 110426社内Twitter研究会、by 勉強会同好会 110426
社内Twitter研究会、by 勉強会同好会 110426Hiro Yoshioka
 
カーネル読書会の作り方 1000 speakers conference, 2/23/'08
カーネル読書会の作り方 1000 speakers conference, 2/23/'08カーネル読書会の作り方 1000 speakers conference, 2/23/'08
カーネル読書会の作り方 1000 speakers conference, 2/23/'08Hiro Yoshioka
 
100th Kernel code reading party
100th Kernel code reading party100th Kernel code reading party
100th Kernel code reading partyHiro Yoshioka
 
第100回カーネル読書会の作り方
第100回カーネル読書会の作り方第100回カーネル読書会の作り方
第100回カーネル読書会の作り方Hiro Yoshioka
 
CAN FORM FOR GET COMMUNITY CERTIFICATE
CAN FORM FOR GET COMMUNITY CERTIFICATECAN FORM FOR GET COMMUNITY CERTIFICATE
CAN FORM FOR GET COMMUNITY CERTIFICATEabubakkar_a
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativoNicauryreyes
 

Destacado (20)

programming camp 2008, Debug
programming camp 2008, Debugprogramming camp 2008, Debug
programming camp 2008, Debug
 
programming camp 2008, BOF Study Group
programming camp 2008, BOF Study Groupprogramming camp 2008, BOF Study Group
programming camp 2008, BOF Study Group
 
Debug Hacks Conference 2009
Debug Hacks Conference 2009Debug Hacks Conference 2009
Debug Hacks Conference 2009
 
Programming camp 2008
Programming camp 2008Programming camp 2008
Programming camp 2008
 
Sapporo Open Seminar 1
Sapporo Open Seminar 1Sapporo Open Seminar 1
Sapporo Open Seminar 1
 
programming camp 2008, introduction of git
programming camp 2008, introduction of gitprogramming camp 2008, introduction of git
programming camp 2008, introduction of git
 
Debug Hacks出版記念トークイベント、新宿ジュンク堂
Debug Hacks出版記念トークイベント、新宿ジュンク堂Debug Hacks出版記念トークイベント、新宿ジュンク堂
Debug Hacks出版記念トークイベント、新宿ジュンク堂
 
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
 
Project Based Learning using by PaaS
Project Based Learning using by PaaSProject Based Learning using by PaaS
Project Based Learning using by PaaS
 
Go to Study Group BoF at Security and Programming camp 2011
Go to Study Group BoF at Security and Programming camp 2011 Go to Study Group BoF at Security and Programming camp 2011
Go to Study Group BoF at Security and Programming camp 2011
 
Building Hacker Centric Culture in Japan
Building Hacker Centric Culture in JapanBuilding Hacker Centric Culture in Japan
Building Hacker Centric Culture in Japan
 
TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02TDDBC osaka 2012/06/02
TDDBC osaka 2012/06/02
 
Tokaido 53 walk
Tokaido 53 walkTokaido 53 walk
Tokaido 53 walk
 
社内Twitter研究会、by 勉強会同好会 110426
社内Twitter研究会、by 勉強会同好会 110426社内Twitter研究会、by 勉強会同好会 110426
社内Twitter研究会、by 勉強会同好会 110426
 
カーネル読書会の作り方 1000 speakers conference, 2/23/'08
カーネル読書会の作り方 1000 speakers conference, 2/23/'08カーネル読書会の作り方 1000 speakers conference, 2/23/'08
カーネル読書会の作り方 1000 speakers conference, 2/23/'08
 
100th Kernel code reading party
100th Kernel code reading party100th Kernel code reading party
100th Kernel code reading party
 
第100回カーネル読書会の作り方
第100回カーネル読書会の作り方第100回カーネル読書会の作り方
第100回カーネル読書会の作り方
 
CAN FORM FOR GET COMMUNITY CERTIFICATE
CAN FORM FOR GET COMMUNITY CERTIFICATECAN FORM FOR GET COMMUNITY CERTIFICATE
CAN FORM FOR GET COMMUNITY CERTIFICATE
 
Private Frontage Secrets-Brown CNU17
Private Frontage Secrets-Brown CNU17Private Frontage Secrets-Brown CNU17
Private Frontage Secrets-Brown CNU17
 
Cuadro comparativo
Cuadro comparativoCuadro comparativo
Cuadro comparativo
 

Similar a Programming camp 2008, Codereading

Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code readingHiro Yoshioka
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Hiro Yoshioka
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Hiro Yoshioka
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp CodereadingHiro Yoshioka
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめMikiya Okuno
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
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
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Ransui Iso
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacksHiro Yoshioka
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜Takahiro Inoue
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)Yoshifumi Yamaguchi
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入Yu Nobuoka
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Takuya Ueda
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成弘毅 露崎
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
study on safety and security ccoding standards
study on safety and security ccoding standardsstudy on safety and security ccoding standards
study on safety and security ccoding standardsKiyoshi Ogawa
 

Similar a Programming camp 2008, Codereading (20)

Programming camp code reading
Programming camp code readingProgramming camp code reading
Programming camp code reading
 
Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011 Code Reading at Security and Programming camp 2011
Code Reading at Security and Programming camp 2011
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 
Programming camp Codereading
Programming camp CodereadingProgramming camp Codereading
Programming camp Codereading
 
DTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめDTraceによるMySQL解析ことはじめ
DTraceによるMySQL解析ことはじめ
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
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
 
Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6Lisp Tutorial for Pythonista Day 6
Lisp Tutorial for Pythonista Day 6
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)20130228 Goノススメ(BPStudy #66)
20130228 Goノススメ(BPStudy #66)
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析Goでかんたんソースコードの静的解析
Goでかんたんソースコードの静的解析
 
RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成RとSQLiteで気軽にデータベース作成
RとSQLiteで気軽にデータベース作成
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
study on safety and security ccoding standards
study on safety and security ccoding standardsstudy on safety and security ccoding standards
study on safety and security ccoding standards
 

Más de 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
 

Más de 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
 

Último

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 

Último (8)

クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 

Programming camp 2008, Codereading

  • 1. セキュリティ&プログラ ミングキャンプ2008 ソースコードの読み方 2008年8月15日 ミラクル・リナックス株式会社 よしおかひろたか
  • 2. 本日のアジェンダ ● ソースコードの読み方
  • 3. トラブルシューティングと ソースコードの読み方 ● トラブルシューティングと問題の理解 ● 実践的なコードの理解
  • 4. ソースコードを読むチカラ ● プログラマの基礎体力 ● ソフトウェア開発コストの大部分は保守 ● 不具合修正、改良、機能追加にはコードの理解が 必須 ● 技術者の付加価値 ● OSSは深追いできる ● 陳腐化しにくい ● プロフェッショナルとしての研鑚 ● すぐれた技術者はソースコードを上手に読む
  • 5. コードの読み方 ● なぜ、コードを読むのか ● どのように、読むのか
  • 6. なぜコードを読むのか? ● 仕事だから ● トラブルシューティング(不具合修正) ● 機能修正、機能開発 ● 自己研鑚、勉強 ● 趣味だから ● 楽しいから ● 自己啓発(知的好奇心) ● 不純な動機 ● 形から入る
  • 7. なぜコードを読むのか ● 人それぞれ、人生いろいろ ● 無目的でもいいじゃないか ● 熟読、濫読、積読、黙読、音読、再読、誤 読、精読、速読、耽読、通読、復読、輪読 、朗読、輪読、…
  • 8. コードの理解について ● モットー: コードは読むな、 理解しろ〜
  • 9. どのようにコードを理解するの か ● 個人的な方法を紹介する ● 唯一あるいはベストな方法というわけでもない ● 適材適所、もっと良い方法があると思う ● 公開することによって進化したい(もっと良い方法 への模索)
  • 10. ソースコードを読む視点 微視的理解 巨視的理解 静的理解 動的理解
  • 11. 理解の仕方、読み方 ● 静的、動的理解 ● 微視的、巨視的 ● 規模の把握 ● ツールの利用 ● 事例
  • 12. 静的理解、動的理解 ● 静的理解 ● 字面での理解 ● 動的理解 ● 動作による理解
  • 13. 静的、動的構造 ● 静的構造 ● 規模 ● ディレクトリ構造 ● 名前つけ規約 ● 動的構造 ● 呼び出し経路 ● プロファイリング ● 実行結果
  • 14. 微視的、巨視的 ● 微視的:細部からの理解 ● 最終的にはコードの一行 ● 巨視的:全体からの理解 ● 規模、構造、機能など。実行結果(性能?) ● 俯瞰図、鳥瞰図。
  • 15. 規模の把握(巨視的理解) ● 規模重要 ● 規模(相手)を知らずして作戦を立てられない ● 大局的な地図、俯瞰図、鳥瞰図 ● 大規模になればなるほど、システマティックな方法 論が必要になってくる ● 巨視的な理解
  • 16. 規模の把握 ● 小規模:100K行未満程度、 ファイル数100未満 10人未満 ● 中規模:100K行〜1M行程度 ファイル数100〜1000未満 100人未満 ● 大規模:1M行以上 ファイル数1000以上 100人以上 ざっくりの規模感
  • 17. 規模の把握(例) ● 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
  • 18. ディレクトリ構造 ● トップディレクトリは、ソフトウェアの論理 的構造を表している ● doc ドキュメント ● lib ライブラリ関係 ● test テスト ● ソースツリーの把握
  • 19. ドキュメント ● README, INSTALL, COPYING, … ● 内部ドキュメント(Docs) ● リリースノート ● ChangeLog
  • 20. 変更の履歴 ● ChangeLog/Release Notes ● コード管理システム ● 例:Linux git/Subversion/CVS ● Mailing List ● Wiki ● blog ● 変更(時間軸)の微視的理解
  • 21. ドキュメント、情報収集 ● Mailing List ● Bug database ● 開発者との会話 ● Googleに聞く
  • 22. ソースコードを読む視点 微視的理解 巨視的理解 ディレクトリ構造、名前付け規約 静的理解 ソースコード、ChangeLog、リリース 、規模の把握(行数、ファイル数 ノート など) 動的理解 デバッガによる実行 実行性能、リグレッションテスト
  • 23. いよいよコードを読む? ● ツール ● エディタ:(x)emacs ● デバッガ:gdb ● クロスレファレンス:cscope ● カーネルの場合、クラッシュダンプ(crash)
  • 24. デモ、実習 ● 例題としてGNU coreutilsを読むことにす る。 ● http://ftp.gnu.org/gnu/coreutils/ ● http://savannah.gnu.org/projects/coreutils/ ● http://git.savannah.gnu.org/gitweb/?p=coreutils.git ● GNU Hello ● http://savannah.gnu.org/projects/hello
  • 25. 実習 ● ソースコードの規模を理解する ● ディレクトリ構造を理解する ● ビルドする ● ソースコードのナビゲート ● 機能変更をする
  • 26. 実習 ● ディレクトリ構造を理解する ● ファイル名を眺める ● ファイル数を調べる ● プログラムの行数を調べる
  • 27. 実習 ● ソースコードの入手 $ git clone git://git.savannah.gnu.org/coreutils.git ● ビルドの準備 README-hackingをよく読む ● 必要なツールを揃える - 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/>
  • 28. 実習 ● ビルド $ time git clone git://git.savannah.gnu.org/coreutils.git $ cd coreutils $ time sudo ./bootstrap $ time sudo ./configure $ time sudo make $ time sudo make check
  • 29. 動的理解 ● ビルド
  • 30. 動的理解 ● ともかく動かす ● make; make install ● strace ● ltrace ● gdb ● oprofile ● リグレッションテスト ● ベンチマークテスト
  • 31. make ● とりあえず、make; make install ● 実行環境の構築 ● gcc -g (デバッグシンボルを付加する) ● cscopeのインデックスを作成 ● ビルドは(x)emacsのshellなどから行い、ビルドのロ グを取得しておく
  • 32. 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 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) = 0xb7fe close(3) =0 open("/lib/libdl.so.2", O_RDONLY) =3
  • 33. gdb ● デバッガはコードを理解するためにある ∴コードを読むために使う ● http://savannah.gnu.org/projects/gdb
  • 34. gdbで読むための準備 ● gcc -g でコンパイル ● コンパイルしたコードサイズが大きくなる 以外、特に副作用はない ● printfデバッグは有害無益
  • 35. gdb ● ブレークポイントを設定 ● ウオッチポイント(変数の変更) ● run ● 止まった時点で ● bt スタックフレームの表示 ● p 変数の表示 ● c 実行再開、s ステップ実行(関数に潜る)、n ステ ップ実行(関数に潜らない) ● 繰り返す
  • 36. oprofile ● プロファイラー ● 実行時のボトルネックを発見 ● # opcontrol –--start ● テストの実行 ● # opcontrol –--stop ● # opreport -l ● http://oprofile.sourceforge.net/news/
  • 37. 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
  • 38. oprofile ● 高速道路で、ズバリ最もコストのかかって いるところに連れて行ってくれる ● コードを読まないで、理解する極意
  • 39. 微視的理解 ● ひたすらコードを読む ● 王道はない ● ↑身もふたもない ● データ構造、変数などに注目し、どこで定 義され、参照され、代入(変更)されてい るかという観点でみる ● デバッガとエディタ、クロスリファレンスツ ールを駆使
  • 40. 微視的理解 ● $ time find -type f |egrep '.([chp] (xx|pp)*|cc|hh)$' |xargs egrep -l hogehoge ● hogehogeを含むファイルを検索
  • 41. 微視的理解 ● クロスリファレンスツール ● 変数の定義(型情報)、変更(代入)、参照 ● 変数(関数)が、どのように定義されてい て、どのように参照、変更されているかを 追う ● cscope http://cscope.sourceforge.net/ ● lxr http://lxr.linux.no/ ● GNU GLOBAL http://www.gnu.org/software/global/
  • 42. 実習 ● cscopeを利用する $ time cscope-indexer -r ● emacsを利用する ● gdbを利用する ● oprofileを利用する
  • 43. ソースコードを読む視点 微視的理解 巨視的理解 ディレクトリ構造、名前付け規約 静的理解 ソースコード、ChangeLog、リリース 、規模の把握(行数、ファイル数 ノート、cscope など) 動的理解 oprofile、strace、実行性能、リグレ デバッガ(gdb)による実行、strace ッションテスト
  • 44. 参考書 ● Linux ● 詳解LINUXカーネル第三版 ISBN:487311313X ● Linuxカーネル2.6解読室 ISBN:4797338261 ● コードリーディング ● ISBN:4839912653 ● Rubyソースコード完全解説 ● ISBN:4844317210(品切れ中) http://i.loveruby.net/ja/rhg/
  • 45. ユメのチカラ(ブログ) ● 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 ● 多くの人に興味がある話題
  • 46. ブログ:ユメのチカラ ● http://blog.miraclelinux.com/yume/ ● 未来のいつか/hyoshiokの日記 ● http://d.hatena.ne.jp/hyoshiok/