### Category "Books"

Lesa Williams, ITT VIS Programming Consultant, recently wrote a great review of *Modern IDL* for an internal ITT VIS newsletter. I had gotten word of the review last week, but today I received permission to post the whole review here:

> Mike Galloy spent nearly five years writing this 462-page book covering modern topics in IDL, and it certainly shows. This virtual tome (available in both PDF and spiral-bound versions) contains a wealth of information on the IDL programming language, with sections for beginners and advanced users alike. It provides a wide range of topics spanning from IDL basics such as variables, file input/output, programming calls, and direct graphics to more advanced concepts such as widget/object graphics applications, IDL compound widgets and composite graphic classes, optimizing code performance, and external development using bridges, Python, etc.

> One impressive aspect of Modern IDL is how well it illustrates some of the basic components of the IDL programming language from a fresh, unique perspective. Those with a chemistry or physics background will appreciate Galloy’s innovative way of viewing the IDL operator hierarchy via the “Periodic Table of IDL Operators.” Similarly, for those who are more literary in nature, there is an extensive section on strings and string manipulation, with an especially helpful segment on the often confusing, but very powerful, use of regular expressions. For visual learners, Modern IDL has an exemplary set of diagrams depicting the concept and use of pointer variables in IDL. The mathematically-minded will thoroughly enjoy the four-page section explaining the use of the *IDLgrModel*’s transformation matrix, as well as the seven-plus pages describing the simplistically beautiful, yet amazingly clever, HISTOGRAM function. Lastly, hard-core programmers will hone in on the chapter covering code performance in which Galloy addresses various ways to speed up and to make IDL code more computationally and memory efficient (e.g., taking advantage of IDL’s array operators, minimizing the number of interpreted statements, using IDL thread? aware operators/routines, etc.).

> Accompanying the wide array of material in the Modern IDL text itself are over 50 pages of additional resources and information contained within the appendices. The book is also filled with numerous exercises and examples, which makes it a very practical, hands-on instructional guide. In my opinion, Galloy has written an outstanding and comprehensive book covering a vast range of topics relevant to the current world of IDL programming. This is a terrific resource — one that I will definitely revisit time and time again.

Thanks, I hope this is a great resource for IDL programmers! Check out [*Modern IDL*’s website](http://modernidl.idldev.com) for sample chapter, table of contents, and links to buy.

[Mort Canty’s first look](http://fwenvi-idl.blogspot.com/2011/06/modern-idl.html) at Modern IDL:

> … But I’ve always wanted a thorough, concise, up-to-date overview of the the IDL language and its vast capabilities. This is exactly what Mike’s book provides in 464 very informative pages. Can’t wait to have the “real thing” on my bookshelf. Highly recommended!

High praise indeed, thanks Mort!

[Modern IDL](http://modernidl.idldev.com) is now [listed](http://books.google.com/books?id=zAd1Y0-bOrsC&printsec=frontcover) in Google Books! This should make a fair amount of content of the book available for reading online. Even better, you can do text searches of the entire book, which gives snippets and a page number that you can look up in your [hardcopy version](http://modernidl.idldev.com).

I have printed copies of my new book, [*Modern IDL*](http://modernidl.idldev.com), so I’m taking orders now. Run over to [modernidl.idldev.com](http://modernidl.idldev.com) to get your copy (spiralbound or PDF)!

After nearly five years of writing on nights and weekends, I have finally finished [*Modern IDL*](http://modernidl.idldev.com), my book about all things IDL. The book is at the printers now and should be available on Tuesday June 14!

See the [*Modern IDL* website](http://modernidl.idldev.com) for the [table of contents](http://modernidl.idldev.com/modernidl-toc.pdf), a [sample chapter](http://modernidl.idldev.com/modernidl-objectgraphics.pdf) (object graphics!), all the [code examples](http://modernidl.idldev.com/modernidl-code-1.0-r1224.zip), and, on June 14, a link to buy the book. The book discusses, with many examples, topics such as object-oriented programming, file input/output, networking, widget applications, direct graphics, object graphics, new graphics, external development, and performance.

The book will be available spiral bound and in PDF. I put a [set of photos of the book](http://www.flickr.com/photos/mgalloy/sets/72157626758059579/) on Flickr which you can see below:

*[Coyote’s Guide to Traditional IDL Graphics](http://www.idlcoyote.com/books/index.php): Using Familiar Tools Creatively* by David Fanning is a great resource for users of direct graphics, particularly those using David’s fantastic Coyote Graphics system. It contains discussion and many examples of various types of graphics: line plots, contour plots, surface plots, image display (and even image processing), as well as topics such as PostScript output, raster output, and using the Z-buffer.

The book also serves as a user manual for the Coyote Graphics system with most of the examples using the “cg” routines and a chapter on Coyote Graphics extra features like resizeable graphics windows, loading command lists, saving/restoring visualizations, and layout management.

The book itself is 460 high quality, full color pages, available in softcover or as a PDF.

The [book website](http://www.idlcoyote.com/books/index.php) has ordering information, table of contents, sample chapter download (contour plots), and the required files.

*The book is currently on sale through June 6, 2011. After that, it will be available only through Amazon or special order until late July.*

Ronn Kling’s [Object Oriented Programming with IDL](http://www.amazon.com/Object-Oriented-Programming-Ronn-Kling/dp/096712705X/ref=sr_1_3?ie=UTF8&s=books&qid=1281471500&sr=8-3) is an excellent introduction to object-oriented programming with IDL. The beginning chapters introduce object-oriented concepts like encapsulation, inheritance, and polymorphism along with IDL’s basic syntax for creating classes. This should be straight-forward for anyone comfortable with writing normal routines in IDL.

Later chapters cover more sophisticated topics like features added in IDL 8.0 like object overloading, garbage collection, and the new syntax for calling methods and instantiating an object. There is also a chapter and appendix dedicated to showing tricks for getting around the lack of object-oriented features in IDL.

Overall, this is a great way to break the ice into object-oriented programming if you have been reluctant. Kling not only gives the basic syntax for IDL, but gives a nice introduction to object-oriented programming itself, as well as a discussion of situations when it can be most useful.

[Matplotlib](http://matplotlib.sourceforge.net/index.html) is a popular 2-dimensional plotting library used with Python. While Matplotlib is fairly powerful, I have always had trouble figuring out how to do what I needed from the documentation. I have found the online Matplotlib [documentation](http://matplotlib.sourceforge.net/contents.html) adequate as a reference, but not very good for getting started (especially since Matplotlib uses some terms in what I would call a “non-standard” way).

*Matplotlib for Python Developers* by Sandro Tosi is a welcome addition to my bookshelf. It focuses on embedding Matplotlib in applications in GTK+, Qt 4, wxWidgets, and even various web frameworks such as Pylons and Django. But the fundamental elements of the scientific Python tool chain, such as NumPy and IPython, as well as a thorough tutorial of Matplotlib itself are discussed. Both the pylab/pyplot procedural interface (useful for interactive plotting) and object-oriented interface (useful for fine-tuning and more advanced usage) are covered. Over 2000 lines of example code are downloadable from the book site.

Seeing as I don’t use Matplotlib regularly, I’m sure I will using this book frequently to brush up on Matplotlib basics. And this book would have saved me a lot of time when I was writing my only major Python project, a PyQt 4 application which embedded interactive Matplotlib graphics. While this book doesn’t cover every detail of Matplotlib (the online docs are good for that), it will get you started no matter how you are using it.

The publisher has made a sample chapter on embedding Matplotlib in Qt4 [available for download](http://www.packtpub.com/files/7900-matplotlib-for-python-developers-sample-chapter-6-embedding-matplotlib-in-qt-4.pdf). More information, such as a full [table of contents](http://www.packtpub.com/article/matplotlib-python-development-table-of-contents), is also available on the [publisher’s site](http://www.packtpub.com/matplotlib-python-development/).

*Full disclosure: I received a review copy of this book.*

From the CRC Press site for [Image Analysis, Classification, and Change Detection in Remote Sensing: With Algorithms for ENVI/IDL, Second Edition](http://www.crcpress.com/product/isbn/9781420087130):

> This popular introduction to the processing of remote sensing imagery has been updated to include coverage of the latest versions of the ENVI software environment. This new edition covers support vector machines and other kernel-based methods. Illustrating many programming examples in the array-oriented language ID, the text includes coverage of basic Fourier, wavelet, principal components and minimum noise fraction transformations; convolution filters, topographic modeling, image-to-image registration and ortho-rectification; image fusion; supervised and unsupervised land cover classification with neural networks; hyperspectral analysis; multivariate change detection.

I was excited to hear that [GPULib](http://www.txcorp.com/products/GPULib/) was used in this version of the book. Mort says:

> In the text I discuss routines for nonlinear principal component analysis, supervised classification and nonlinear clustering, and explain that they can take advantage of GPULib/CUDA, if installed. (I use your routine GPU_DETECT() to check for GPULib).

*Full disclosure: I work for Tech-X Corporation and worked on the IDL bindings and examples for GPULib.*

[xkcd](http://xkcd.com/), the great geek webcomic that I have [mentioned](http://michaelgalloy.com/2009/03/06/correlation-vs-causation.html) [before](http://michaelgalloy.com/2008/02/01/real-programmers.html), has a [printed book available for sale](http://store.xkcd.com/). Grab the [mousepad depicting the fight with red spiders from the book’s back cover](http://store.xkcd.com/xkcd/#Mousepad) while you’re there.

• #### GPULib

GPULib enables IDL developers to access the high-performance capabilities of modern NVIDIA graphics cards without knowledge of CUDA programming.

TaskDL is a task-farming solution for IDL designed for problems with loosely-coupled, parallel applications where no communication between nodes of a cluster is required.

#### mpiDL

mpiDL is a library of IDL bindings for Message Passing Interface (MPI) used for tightly-coupled parallel applications.

#### Remote Data Toolkit

The Remote Data Toolkit is a library of IDL routines allowing for easy access to various scientific data in formats such as OPeNDAP, HDF 5, and netCDF.

• #### Modern IDL

Modern IDL offers IDL programmers one place to look, for beginners and advanced users alike. This book also contains: a thorough tutorial on the core topics of IDL; a comprehensive introduction to the object graphics system; common problems and gotchas with many examples; advanced topics not normally found are discussed throughout the book: regular expressions, object graphics, advanced widget programming, performance, object-oriented programming, etc.

• #### IDLdoc

IDLdoc is an open source utility for generating documentation from IDL source code and specially formatted comments.

#### mgunit

mgunit is an open source unit testing framework for IDL.

#### rIDL

rIDL is an open source IDL command line replacement.

#### mglib

mglib is an open source library of IDL routines in areas of visualization, application development, command line utilities, analysis, data access, etc.