editorÕsEditorÕsPickspicksBY DAVID PAIK, PhD, EXECUTIVE EDITORDo you have a few favorite books that you recommend to anyone with aninterest in biomedical computing? Are t<strong>here</strong> software products or web sites thatyou love to evangelize? We’d like to open this forum up to the community formini-reviews of biomedical computation—books/papers/Web sites that havecaught your interest. Email us at editor@biomedicalcomputationreview.org.Open-Source SoftwareESR’S CATHEDRAL OR BAZAARThe paper’s cryptic title, The Cathedral and theBazaar, dares the reader to delve in and readfurther. Eric S. Raymond (a.k.a. ESR) is a longtimeadvocate for open source software and theauthor of this classic essay. At its most literal level,it documents the history of email software, but thisis only the framework for the true topic: a firsthandexperiment with the open-source developmentprocess that has made Linux so successful.Raymond describes the traditional closedsourcedevelopment process as a cathedral, witha centralized, selective, authoritative hierarchythat releases ordained versions of software onlywhen ready. On the other hand, he describesopen-source development as a bazaar, with taskspromiscuously delegated among developers withdifferent agendas and approaches.He expands on the topic by enumerating 19 lessonslearned from his experience with fetchmail,about half of which can be generalized beyond programmingand software design. Most interesting areRaymond’s insights intoDETAILSEric S. RaymondThe Cathedral andthe Bazaarhttp://www.catb.org/~esr/writings/the culture of the opensourcemovement. He describeshow motivation, teamwork andcommunication differ from thatseen in the “cathedral” setting.Since open-source developmentis a growing trend in biomedicalcomputing, many ofthese observations and lessonsapply directly. But t<strong>here</strong> areother ways in which this essay may also be fitting. Theopen-source movement shares numerous similaritieswith the culture of big science projects, many of whichinvolve biomedical computing in one form or another.Research teams of the future, as outlined in the NIHRoadmap, stress interdisciplinary and collaborativeeffort that echoes many characteristics of the bazaarmodel. Many of the 19 lessons could apply to big scienceprojects as well.One of Raymond’s 19 lessons explains why opensource software improves so rapidly. Dubbed “Linus’slaw” (after Linus Torvalds, who launched the Linuxmovement), the lesson states: “Given enough eyeballs,all bugs are shallow.” In essence, given enough co-developersand beta-testers, a problem (or “bug”) will be characterizedand fixed by someone. It’s an embodiment ofthe Delphi effect, which states that averaged expertopinion is more reliable than a single individual. If thesame lesson proves true for the biomedical computationinfrastructure currently under development, that will begood news for the field as a whole.“If you push mass andvelocity high enough youget surprises like nuclearexplosions or Linux.”—Eric S. Raymond22 BIOMEDICAL COMPUTATION REVIEW Fall 2005 www.biomedicalcomputationreview.org
Software EngineeringFINDING PATTERNSBy relying onreference bookssuch as DesignPatterns and itsprogeny, designerscan spend their timecoming up with newideas ratherrepeating others’mistakes.www.biomedicalcomputationreview.orgDon’t reinvent the wheel—soundadvice whatever your profession.Novelists have reused archetypalplots and characters throughout history;graphic artists reuse design templates; and architectsreuse architectural motifs. The same is true for programmers:certain design problems recur, and t<strong>here</strong>’s noneed for every programmer to tackle them all over again.Examining reuse at a higher level of abstraction, this book ismore about idea reuse than code reuse. This book is particularlyrelevant to thiscommunity because itpromotes the use ofsolid design conceptsthat may prove valuablefor building a biomedicalcomputinginfrastructure.Instead of discussingprogramming languagesyntax or features, thisclassic text presentsdesign patterns that arecommonly used motifsin object-oriented programming.After ashort introduction, thebook catalogs 23 of themost commonly usedDETAILSErich GammaRichard HelmRalph JohnsonJohn VlissidesDesign Patterns:Elements of ReusableObject-OrientedSoftware,Addison-WesleyProfessional, 1995.design patterns,although it does notclaim to be an exhaustivelist. The patterns are then divided on two axes. The purposeaxis distinguishes between creational (dealing withobject creation), structural (dealing with composition ofclasses/objects), and behavioral (dealing with class/objectinteraction and distribution of responsibility). The scopeaxis distinguishes between patterns that deal with classesand objects. Some of the patterns are obvious enough thatmany designers use them withoutneeding to use this book,w<strong>here</strong>as other patterns may beless commonly understood.Design Patterns has become apowerful and important bookbecause it starts to map out theuniverse of patterns in a singlereference collection. Since 1995,when this book came out, othershave compiled lists of anti-patterns:programming motifs thatshould be avoided. Sometimes,studying poor form can be just asinstructive as studying good form.By relying on reference books such asDesign Patterns and its progeny, designers canspend their time coming up with new ideasrather than reinventing the wheel and repeatingothers’ mistakes.Development EnvironmentFIXING WINDOWS (WITH CYGWIN)Every once in a while, something so ridiculouslyuseful comes along that you feel theurge to go out and tell everyone you knowabout it. For me, that something is Cygwin, a UNIXlikeenvironment that runs within MicrosoftWindows. Mac OS X and Linux may be compellingalternatives, but for diehard Windows users, Cygwincan’t be beat for ease of use.Cygwin is free software and the installer is simple, availableat http://cygwin.com. It gives Windows a commandline shell that allows the user to use most of the standardUNIX utilities you would expect. Because it is not an emulationlayer, programs running within Cygwin run just asfast as native Windows code. Some interesting alternativesexist, such as VMware, coLinux and Bochs, but none ofthese have the native integrationand ease of use of Cygwin.Installing is as simple as runningthe setup program fromthe Web site and selecting theindividual packages that youwant to install; the defaultselection is rather minimalist.Cygwin brings tremendousnew functionality to Windows, including a full X Windowsport that allows X11 programs to run alongside Windowsprograms seamlessly. One can run various servers includethe Apache web server, FTP, SSH/SCP, NFS, and mail.Programming tools include gcc/gdb, perl, python, emacs,vi, make, cmake, doxygen, OpenGL, LAPACK, cvs, subversionand swig. Other miscellaneous applicationsinclude PostgreSQL, gnuplot, octave, grep, tar, cron, wget,ghostscript and TeX.T<strong>here</strong> are, however, a fewlimitations and caveats.Windows and UNIX handlenewlines and carriage returnsdifferently and so care must beCygwin bringstremendousnew functionalityto Windows.DETAILSCygwinhttp://www.cygwin.comtaken in I/O programming. Also note that the Cygwin APIlibrary is covered by GNU General Public License (GPL),which means that if you publicly release programs compiledunder Cygwin, you must make source code available.Cygwin has fundamentally changed my computinghabits, providing a pretty good best-of-both-worlds compromise.Nothing is perfect but this does make significantimprovements to Windows. ■Fall 2005 BIOMEDICAL COMPUTATION REVIEW 23