Getting Started with ITK

Software Toolkits
Building
Communities
Luis Ibáñez
KITWARE, Inc.
If a tree falls in a forest…
and
nobody is around to hear it,
does it make a sound?
No Users
=
No Toolkit
How to sustain a Toolkit
Developers Mailing List
Moderator
CVS Repository
Gatekeeper
CMake Configuration
Guru
Dart Dashboard
Bad Guy
Bug Tracking
Czar
Doxygen Documentation
Volunteer
How to sustain a Toolkit
Writing Tests
XTreme
Writing Applications
Outsider
Tutorials
Prophet
License
Lawyer
CVS
Read Only
Read / Write
Repository
User 1
Developer X
User 2
Developer W
Developer Z
Developer Y
Developer M
User 3
User 4
User 5
CVS
For every change in the code,
CVS provides an answer to

Who ?
 When ?
 What ?
 Why ?
Also: Compare with old versions,
and Restore old versions
CVS
First step:
Provide CVS literacy,
Tutorials,
Set up a fake repository for practice
CMake
Build configuration
Source1.cxx
Source2.cxx
LibraryA.lib
LibraryM.lib
LibraryK.lib
Source3.cxx
Source4.cxx
LibraryH.lib
LibraryM.lib
Source5.cxx
Source6.cxx
Source7.cxx
Executable1.exe
CMake
Generating Project Files
CMakeLists.txt
CMake
CMakeLists.txt
CMakeLists.txt
CMakeLists.txt
NMake
Makefiles
VC++ 7.0
Project.sln
VC++ 6.0
Project.dsw
Unix
Makefiles
Borland
Makefiles
CMake
Functionalities
FindOpenGL.cmake
CMakeLists.txt
Test Versions
FindITK.cmake
FindVTK.cmake
Options
FindJPEG.cmake
TRY_COMPILE
Static / Shared
Use / NotUse
TRY_RUN
COPY
Dart-Tests
Dart
Every line of code is presumed broken
until proven correct
If it is not being compiled and tested
chances are that is broken
Dart
Dart
Server
Platform
XX
Platform
Platform
X
Mac
OS
Mac
MacOS
OS
Platform
ZZ
Platform
Platform
ZZ
Linux,
GCC
3.3
Platform
Linux,
GCC
3.3
Linux,
GCC
Linux, GCC3.3
3.3
Platform
WW
Platform
Platform
W
Win
XP,
VC7
Win
WinXP,
XP,VC7
VC7
Platform
MM
Platform
Platform
M
Sun,
GCC
Sun, GCC
Sun, GCC
Platform
YY
Platform
Platform
YY
Linux,
ICC
Platform
Linux,
ICC
Linux,
Linux,ICC
ICC
Dart
Dart
Web Page
CVS
Aware
Navigate
Dates
Code
Coverage
Compare tests
Across platforms
Doxygen
Regression
Testing
Purify
Valgrind
Dart - Dashboard
Dart - Dashboard
Dart - Dashboard
Bug Tracking
Categories
Feature Request
Bug Tracker
User 1
Documentation
User 2
Incorrect Code
Performance Issues
CVS Comments
reference Bug-ID
User 3
Developer A
Developer B
Developer C
Bug Tracking
Bug Tracking
Project Management
Who is doing what
 Avoid duplication of effort
 Inform users about future
developments
 Track progress of sub-projects
 But: requires some discipline

Project Management
Making Releases
Time
Freezing
Coverage
80%
Bug
Tracker
Clearance
Tests
Passing
Packaging
.tar.gz
.zip
CDs
Doxygen
Generating Documentation from Code
ClassA.h
ClassB.h
Doxygen
ClassC.h
ClassD.h
ClassE.h
Windows
Help
RTF
HTML
LaTeX
PostScript
PDF
Doxygen
Generating Documentation from Code
/** This is
documentation */
class A
{
/** Convergence criterion */
void SetTolerance( float );
};
Doxygen
Article
Pages
Equations
Images
UML
UML
Class
Collaboration
Diagrams
Diagrams
List of
Classes
List of
Methods
Conceptual
Grouping
Communications
Weekly
TCons
FTP
for Data
Dev. Mailing
List
Developers
Users
Tele
Conference
NetMeeting
Instant
Messaging
Developers
Meetings
BOF at
Conferences
Tutorials at
Conferences
Users Mailing
List
Users Mailing List
Treat the first users very well.
 Use:
maybe, perhaps, it seems, it looks like,
you may want to.
 Train users to report:
platform, compiler, version.
 Assume first that the user is right
 Don’t say it works until you test it.
 Collect Frequently Asked Questions (FAQ)

Meta Documents
White Papers
 Journal Papers
 Diagrams
 Slides Presentations
 Books

Teaching by Example
Start from Scratch
 Then simple examples
showing only one feature
 Progress toward functional
examples
 Provide examples that can be
used as tools
 Regression testing examples

Are we there yet ?