<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>michaelgalloy.com</title>
	<atom:link href="http://michaelgalloy.com/feed" rel="self" type="application/rss+xml" />
	<link>http://michaelgalloy.com</link>
	<description>Resources for IDL developers</description>
	<lastBuildDate>Fri, 03 Sep 2010 15:54:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Diving Deeper into IDL Graphics webinar</title>
		<link>http://michaelgalloy.com/2010/09/03/diving-deeper-into-idl-graphics-webinar.html</link>
		<comments>http://michaelgalloy.com/2010/09/03/diving-deeper-into-idl-graphics-webinar.html#comments</comments>
		<pubDate>Fri, 03 Sep 2010 15:54:28 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[Object graphics]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2931</guid>
		<description><![CDATA[ITT VIS is hosting a webinar about the IDL 8.0 function graphics system next Wednesday September 8, 2010 at various times (11 am Singapore time, 2 pm London time, or 2 pm New York time). I plan on attending to learn more about this system. Not sure if this will really replace direct graphics for [...]]]></description>
			<content:encoded><![CDATA[<p>ITT VIS is hosting a <a href="https://cc.readytalk.com/cc/schedule/display.do?udc=6pmbddaf4u1r">webinar about the IDL 8.0 function graphics system</a> next Wednesday September 8, 2010 at various times (11 am Singapore time, 2 pm London time, or 2 pm New York time). I plan on attending to learn more about this system. Not sure if this will really replace direct graphics for me, but I plan to use it for quick stuff.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/09/03/diving-deeper-into-idl-graphics-webinar.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDLdoc 3.3alpha1</title>
		<link>http://michaelgalloy.com/2010/08/20/idldoc-3-3alpha1.html</link>
		<comments>http://michaelgalloy.com/2010/08/20/idldoc-3-3alpha1.html#comments</comments>
		<pubDate>Fri, 20 Aug 2010 22:35:39 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[IDLdoc]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2924</guid>
		<description><![CDATA[If you are interested in the next version of IDLdoc, check out the downloads page for a preview of IDLdoc 3.3 including what&#8217;s new and the link to download. This is an early release; an official 3.3 release will be made soon. If you try this out, please let me know (via email or submitting [...]]]></description>
			<content:encoded><![CDATA[<p>If you are interested in the next version of IDLdoc, check out the <a href="http://idldoc.idldev.com/wiki/Downloads">downloads page</a> for a preview of IDLdoc 3.3 including what&#8217;s new and the link to download. This is an early release; an official 3.3 release will be made soon.</p>

<p>If you try this out, please let me know (via email or submitting a ticket on the  <a href="idldoc.idldev.com">IDLdoc project site</a>) if you encounter an issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/08/20/idldoc-3-3alpha1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDL 8.0 wrap-up</title>
		<link>http://michaelgalloy.com/2010/08/19/idl-8-0-wrap-up.html</link>
		<comments>http://michaelgalloy.com/2010/08/19/idl-8-0-wrap-up.html#comments</comments>
		<pubDate>Thu, 19 Aug 2010 16:53:22 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2907</guid>
		<description><![CDATA[In conclusion, I think IDL 8.0 has a wealth of new features beginning the transition to a more modern programing language. These changes are not without risk: there are a few changes that might effect poorly written code (which we all have either used or written). But there are some compelling features (I&#8217;m thinking about [...]]]></description>
			<content:encoded><![CDATA[<p>In conclusion, I think IDL 8.0 has a wealth of new features beginning the transition to a more modern programing language. These changes are not without risk: there are a few changes that might effect poorly written code (which we all have either used or written). But there are some compelling features (I&#8217;m thinking about lists/hashes, the new graphics API, and operator overloading) and many small extremely useful features that encourage updating to IDL 8.0. My main question is when have a sufficient number of users upgraded to 8.0 so I can begin using these features in code I release? Hopefully soon.</p>

<p>Finally, what new features is IDL still lacking to be considered a truly modern scientific programming language? I&#8217;ll have to give this some thought, but feel free to make suggestions in the comments.</p>

<p>As a reference to get all them all listed in a single place, the IDL 8.0 related posts discuss <a href="http://michaelgalloy.com/2010/07/22/idl-8-0-lists-and-hashes.html">lists and hashes</a>, <a href="http://michaelgalloy.com/2010/07/26/idl-8-0-help.html">online help</a>, <a href="http://michaelgalloy.com/2010/08/03/idl-8-0-idl-workbench.html">IDL Workbench changes</a>, <a href="http://michaelgalloy.com/2010/08/18/idl-8-0-distributionlicensing.html">distribution/licensing changes</a>, <a href="http://michaelgalloy.com/2010/07/27/idl-8-0-operator-overloading.html">operator overloading</a>, <a href="http://michaelgalloy.com/2010/08/09/idl-8-0-other-language-changes.html">other language changes</a>, and <a href="http://michaelgalloy.com/2010/08/12/idl-8-0-a-new-graphics-interface.html">new graphics interface</a>. Also, note that Paulo Penteado updated his <a href="http://michaelgalloy.com/2010/08/04/updated-idl-8-0-make_rt-uber-installation.html"><code>MAKE_RT</code> über-installation to IDL 8.0</a>. These articles are not intended to be a complete reference to all the new changes; for more information check out the <a href="http://michaelgalloy.com/2010/07/26/idl-8-0-webinar.html">IDL 8.0 webinar</a> and, of course, the &#8220;What&#8217;s New&#8221; section of the online documentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/08/19/idl-8-0-wrap-up.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>IDL 8.0 distribution/licensing</title>
		<link>http://michaelgalloy.com/2010/08/18/idl-8-0-distributionlicensing.html</link>
		<comments>http://michaelgalloy.com/2010/08/18/idl-8-0-distributionlicensing.html#comments</comments>
		<pubDate>Wed, 18 Aug 2010 15:58:44 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2858</guid>
		<description><![CDATA[There are a few important changes to the IDL infrastructure that I have not already discussed in the IDL 8.0 related posts so far. I&#8217;ll have one final wrap-up post after this one. First, the location of the default IDL installation has changed&#8212;there is another level added to the hierarchy. For example, by default on [...]]]></description>
			<content:encoded><![CDATA[<p>There are a few important changes to the IDL infrastructure that I have not already discussed in the IDL 8.0 related posts so far. I&#8217;ll have one final wrap-up post after this one.</p>

<p><span id="more-2858"></span></p>

<p>First, the location of the default IDL installation has changed&mdash;there is another level added to the hierarchy. For example, by default on a UNIX system, IDL 7.1 was installed in:</p>

<pre><code>/usr/local/itt/idl71
</code></pre>

<p>Now, IDL 8.0 is installed in:</p>

<pre><code>/usr/local/itt/idl/idl80
</code></pre>

<p>Be careful, this installation location will destroy the link that most of us had at <code>/usr/local/itt/idl</code> to the current IDL version.</p>

<p>Also, system administrators take note: using a network license with IDL 8.0 requires the download and installation of the IDL 8.0 FlexLM License Server. So admins familiar with updating previous IDL installations will have to do something a bit different this time.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/08/18/idl-8-0-distributionlicensing.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDL 8.0: a new graphics interface</title>
		<link>http://michaelgalloy.com/2010/08/12/idl-8-0-a-new-graphics-interface.html</link>
		<comments>http://michaelgalloy.com/2010/08/12/idl-8-0-a-new-graphics-interface.html#comments</comments>
		<pubDate>Thu, 12 Aug 2010 19:30:39 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[Object graphics]]></category>
		<category><![CDATA[iTools]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2216</guid>
		<description><![CDATA[IDL 8.0 introduces an entirely new graphics interface. Currently, there is no name for this system except Graphics (am I supposed to say it capitalized when talking?), so I will refer to them as function graphics because all the routines are functions instead of procedures as in most direct graphics and iTools graphics routines. This [...]]]></description>
			<content:encoded><![CDATA[<p>IDL 8.0 introduces an entirely new graphics interface. Currently, there is no name for this system except Graphics (am I supposed to say it capitalized when talking?), so I will refer to them as function graphics because all the routines are functions instead of procedures as in most direct graphics and iTools graphics routines. This new system is easy to use, interactive, programmatically accessible, and fairly complete even in this first release.</p>

<p><span id="more-2216"></span></p>

<p>I can only just skim the surface of the capabilities of function graphics in this post. See the online help for more details.</p>

<p>To create a plot using function graphics, do:</p>

<pre><code>IDL&gt; p = plot(findgen(10), color=[255, 0, 0])
</code></pre>

<p>The plot can be annotated from the GUI interface, but it can also be modified via the return value <code>p</code>, an object which represents the newly created plot. You can get and set properties of the graphics object easily:</p>

<pre><code>IDL&gt; p.color = 'blue'   ; or you could use [0, 0, 255]
</code></pre>

<p>The plot line automatically changes to blue.</p>

<pre><code>IDL&gt; print, p.color
   0   0 255
</code></pre>

<p>From the command line, to find all the available properties of one of the graphics object returned from a function graphics routine, just print it:</p>

<pre><code>IDL&gt; print, p
PLOT &lt;21317&gt;
  ANTIALIAS                 = 1
  ASPECT_RATIO              = 0.0000000
  ASPECT_Z                  = 0.0000000
  BACKGROUND_COLOR          = 255 255 255
  COLOR                     = 255   0   0
  DEPTH_CUE                 = 0.00000      0.00000
[etc, rest of output omitted for brevity]
</code></pre>

<p>By the way, if you want to refer to colors by name in other uses in IDL, you can use the new <code>!color</code> system variable:</p>

<pre><code>IDL&gt; print, !color.blue 
   0   0 255
</code></pre>

<p>You can see a listing of all of the color names available by using <code>HELP</code> on <code>!color</code>:</p>

<pre><code>IDL&gt; help, !color, /structures
** Structure !COLOR, 147 tags, length=441, data length=441:
   ALICE_BLUE      BYTE      Array[3]
   ANTIQUE_WHITE   BYTE      Array[3]
   AQUA            BYTE      Array[3]
   AQUAMARINE      BYTE      Array[3]
   [etc, rest of output omitted for brevity]
</code></pre>

<p>Note that function graphics can be used programmatically without any graphics windows appearing on the screen:</p>

<pre><code>IDL&gt; c = contour(dist(200), /buffer)
IDL&gt; c-&gt;save, 'contour.png'
</code></pre>

<p>See the online help on a particular graphics object type to see its available methods, but most seem to have <code>close</code>, <code>convertCoord</code>, <code>copyWindow</code>, <code>getSelect</code>, <code>order</code>, <code>print</code>, <code>refresh</code>, <code>rotate</code>, <code>save</code>, <code>scale</code>, <code>select</code>, and <code>translate</code>.</p>

<p>The <code>WIDGET_WINDOW</code> routine provides a way to add a function graphics window to a widget application.</p>

<p>One of my favorite features in the new graphics API is that LaTeX escape sequences are built-in! For example,</p>

<pre><code>IDL&gt; p = plot(findgen(10), title='Some formula: $\mu = \epsilon^2 + \tau$')
</code></pre>

<p>(UPDATE: there is a <code>TEX2IDL</code> routine in the IDL distribution now that can be used independently of the function graphics routines.)</p>

<p>The following functions are part of the function graphics API: <code>BARPLOT</code>, <code>COLORBAR</code>, <code>LEGEND</code>, <code>CONTOUR</code>, <code>ERRORPLOT</code>, <code>IMAGE</code>, <code>MAP</code>, <code>MAPCONTINENTS</code>, <code>MAPGRID</code>, <code>PLOT</code>, <code>PLOT3D</code>, <code>POLARPLOT</code>, <code>SURFACE</code>, <code>VECTOR</code>, <code>AXIS</code>, <code>ELLIPSE</code>, <code>POLYGON</code>, <code>POLYLINE</code>, <code>STREAMLINE</code>, <code>TEXT</code>, and <code>WINDOW</code>.</p>

<p>There is much, much more to be said about function graphics, but hopefully this will get you started exploring. It will take more time to actually do some work using it to determine its shortcomings, but I think it is the most important feature of IDL 8.0.</p>

<p>Stay tuned for one last wrap-up article about IDL 8.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/08/12/idl-8-0-a-new-graphics-interface.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>IDL 8.0: Other language changes</title>
		<link>http://michaelgalloy.com/2010/08/09/idl-8-0-other-language-changes.html</link>
		<comments>http://michaelgalloy.com/2010/08/09/idl-8-0-other-language-changes.html#comments</comments>
		<pubDate>Mon, 09 Aug 2010 21:59:51 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2218</guid>
		<description><![CDATA[There are many other changes to the core IDL language besides operator overloading and lists/hashes, discussed here already. These changes make IDL&#8217;s syntax more convenient to use. A new !null variable was introduced in IDL 8.0. There are several equivalent forms: IDL&#62; help, !null, [], {} &#60;Expression&#62; UNDEFINED = !NULL &#60;Expression&#62; UNDEFINED = !NULL &#60;Expression&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>There are many other changes to the core IDL language besides <a href="http://michaelgalloy.com/2010/07/27/idl-8-0-operator-overloading.html">operator overloading</a> and <a href="http://michaelgalloy.com/2010/07/22/idl-8-0-lists-and-hashes.html">lists/hashes</a>, discussed here already. These changes make IDL&#8217;s syntax more convenient to use.</p>

<p><span id="more-2218"></span></p>

<p>A new <code>!null</code> variable was introduced in IDL 8.0. There are several equivalent forms:</p>

<pre><code>IDL&gt; help, !null, [], {}
&lt;Expression&gt;    UNDEFINED = !NULL
&lt;Expression&gt;    UNDEFINED = !NULL
&lt;Expression&gt;    UNDEFINED = !NULL
</code></pre>

<p><code>!null</code> is an undefined variable with a couple special properties:</p>

<ol>
<li>it can be assigned to a variable</li>
<li>it can be used in array or structure concatenation</li>
</ol>

<p>For example, a typical use would be:</p>

<pre><code>IDL&gt; a = []
IDL&gt; a = [a, 1]
</code></pre>

<p>This eliminates the need for special cases in code to check for the case of adding the first element, though this use case is generally handled better by the new <code>list</code> objects.</p>

<p>IDL now allows the use of negative subscripts to specify indices relative to the end of an array, with <code>-1</code> representing the last element:</p>

<pre><code>IDL&gt; a = findgen(10)
IDL&gt; print, a[-1]
      9.00000
IDL&gt; print, a[-2]
      8.00000
</code></pre>

<p>Negative indices can also be used in ranges:</p>

<pre><code>IDL&gt; print, a[-2:0:-1]
      8.00000      7.00000      6.00000      5.00000      4.00000
      3.00000      2.00000      1.00000      0.00000
</code></pre>

<p>But, negative subscripts are handled in the same manner as in older versions of IDL when placed in an array used to index another array:</p>

<pre><code>IDL&gt; print, a[[-1]]
      0.00000
</code></pre>

<p>This behavior can also still be controlled via <code>compile_opt strictarrsubs</code>.</p>

<p>Object-oriented programming has had several important updates. Most important of these features is automatic garbage collection. This will automatically free heap variables, both pointers and objects, which no longer have a reference to them. For example, in the following example, an object is created and then its reference is lost by reassignment to another value:</p>

<pre><code>IDL&gt; o = obj_new('IDL_Container')
IDL&gt; help, /heap
Heap Variables:
    # Pointer: 0
    # Object : 1

&lt;ObjHeapVar1&gt;  refcount=1
                STRUCT    = -&gt; IDL_CONTAINER Array[1]
IDL&gt; o = 2
IDL&gt; help, /heap
Heap Variables:
    # Pointer: 0
    # Object : 0
</code></pre>

<p>This situation would have resulted in leaked memory&mdash;the <code>help, /heap</code> command would have reported <code>1</code> object at the end, but it would not have been accessible through the <code>o</code> variable any longer. Now, memory that can no longer be accessed is automatically freed. This feature can be turned off globally or for a particular variable with the <code>DISABLE</code> keyword to the new <code>HEAP_REFCOUNT</code> function.</p>

<p>There are also two small syntax changes that make objects a bit more like other languages and a bit more convenient:</p>

<ol>
<li>method invocation can be done with the <code>.</code> operator, as well as the old <code>-&gt;</code> operator</li>
<li>a function of the same name as the class is automatically generated to create new objects of that class, so the <code>OBJ_NEW</code> function is not required to instantiate an object</li>
</ol>

<p>These are both shown in the following:</p>

<pre><code>IDL&gt; c = IDL_Container()
IDL&gt; c.add, IDLgrModel()
IDL&gt; help, c.get(position=0)
&lt;Expression&gt;    OBJREF    = &lt;ObjHeapVar5(IDLGRMODEL)&gt;
</code></pre>

<p>Note that the <code>.</code> operator and the <code>-&gt;</code> operator a slightly different precedence:</p>

<pre><code>IDL&gt; p = ptr_new(list())
IDL&gt; *p-&gt;add, 1
IDL&gt; *p.add, 1

*p.add, 1
         ^
% Syntax error.
IDL&gt; (*p).add, 1
</code></pre>

<p>My understanding is that this is not intended and will be fixed in a release soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/08/09/idl-8-0-other-language-changes.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Updated IDL 8.0 MAKE_RT über-installation</title>
		<link>http://michaelgalloy.com/2010/08/04/updated-idl-8-0-make_rt-uber-installation.html</link>
		<comments>http://michaelgalloy.com/2010/08/04/updated-idl-8-0-make_rt-uber-installation.html#comments</comments>
		<pubDate>Wed, 04 Aug 2010 21:03:32 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2807</guid>
		<description><![CDATA[Paulo Penteado has updated his Building cross-platform IDL runtime applications article with an über-installation on 32- and 64-bit Mac, Linux, and Windows for IDL 8.0. The über-installation lets you use MAKE_RT to make all-inclusive IDL runtime applications for platforms other than the one you are building on.]]></description>
			<content:encoded><![CDATA[<p>Paulo Penteado has updated his <a href="http://www.ppenteado.net/idl/idl71_rt.html">Building cross-platform IDL runtime applications</a> article with an über-installation on 32- and 64-bit Mac, Linux, and Windows for IDL 8.0. The über-installation lets you use <code>MAKE_RT</code> to make all-inclusive IDL runtime applications for platforms other than the one you are building on.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/08/04/updated-idl-8-0-make_rt-uber-installation.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IDL 8.0: IDL Workbench</title>
		<link>http://michaelgalloy.com/2010/08/03/idl-8-0-idl-workbench.html</link>
		<comments>http://michaelgalloy.com/2010/08/03/idl-8-0-idl-workbench.html#comments</comments>
		<pubDate>Tue, 03 Aug 2010 17:34:12 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2257</guid>
		<description><![CDATA[The IDL Workbench is much simpler in IDL 8.0. The result is a much faster and nimbler Workbench experience, at the cost of a few features (both non-IDL related Eclipse features and ITT VIS added features from previous versions). For example, perspectives are gone entirely now; instead of &#8220;IDL&#8221;, &#8220;Debug&#8221;, and &#8220;Visualize&#8221; perspectives there is [...]]]></description>
			<content:encoded><![CDATA[<p>The IDL Workbench is <em>much</em> simpler in IDL 8.0.</p>

<p>The result is a much faster and nimbler Workbench experience, at the cost of a few features (both non-IDL related Eclipse features and ITT VIS added features from previous versions). For example, perspectives are gone entirely now; instead of &#8220;IDL&#8221;, &#8220;Debug&#8221;, and &#8220;Visualize&#8221; perspectives there is only a single layout for your editors/views.</p>

<p><span id="more-2257"></span></p>

<p>But other, more useful features, like software update for plugins are also gone. Plugins now must be downloaded directly and copied into the <code>features</code> and <code>plugins</code> folders in the <code>idlde</code> directory of the IDL distribution. I downloaded the <a href="http://subclipse.tigris.org/">Subversion plugin</a> and have it successfully working in the 8.0 Workbench. You now have to manually check for updates and re-install them instead of having the Workbench just automatically check every time it starts.</p>

<p>The best new feature of the Workbench is an integrated command line/output log that looks like a TTY-based command line. Maybe it is my command line bias, but this is much more intuitive than separate views of the command line and output log (I have seen many, many users repeatedly clicking in the output log, trying to enter a new command because they see their last command echoed in the output log).</p>

<p><a href="http://michaelgalloy.com/wp-content/uploads/2010/08/commandline.png"><img src="http://michaelgalloy.com/wp-content/uploads/2010/08/commandline-thumbnail.png" alt="New integrated command line/output log" /></a></p>

<p>The Workbench plays a bit nicer on Mac OS X by launching like a normal application instead of creating another icon in my dock (as does the Help system). It&#8217;s a small thing, but it&#8217;s a bit easier to deal with two IDL-related icons instead of four icons, which was starting to dominate my dock.</p>

<p>I haven&#8217;t missed the removed features yet (I used the &#8220;Debug&#8221; perspective for everything and I can manually install plugins for the few that I use), but I only use the Workbench about 10% of the time I use IDL. Overall, the speed and simplicity gained from the removal of the features seems well worth it for me. I like the focus on improving usability of the Workbench instead of just adding more and more new &#8220;features&#8221; that I may or may not use.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/08/03/idl-8-0-idl-workbench.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IDL 8.0: Operator overloading</title>
		<link>http://michaelgalloy.com/2010/07/27/idl-8-0-operator-overloading.html</link>
		<comments>http://michaelgalloy.com/2010/07/27/idl-8-0-operator-overloading.html#comments</comments>
		<pubDate>Tue, 27 Jul 2010 17:11:56 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[Objects]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2214</guid>
		<description><![CDATA[Operator overloading is the feature in IDL 8.0 that I have been testing the most; I am already using it in a couple of my projects. The behavior of objects when used in expressions containing nearly any of IDL&#8217;s operators can be defined through special methods of the object. To make an object which recognizes [...]]]></description>
			<content:encoded><![CDATA[<p>Operator overloading is the feature in IDL 8.0 that I have been testing the most; I am already using it in a couple of my projects. The behavior of objects when used in expressions containing nearly any of IDL&#8217;s operators can be defined through special methods of the object.</p>

<p><span id="more-2214"></span></p>

<p>To make an object which recognizes operators, simply inherit from <code>IDL_Object</code> and write a special method for each operator you wish to use. For example, to make your object interact with the <code>+</code> operator, simply write a method with the signature</p>

<pre><code>function myclass::_overloadPlus, left, right
</code></pre>

<p>When an object of your class is one of the operands of an expression using <code>+</code>, as in <code>result = left + right</code>, the special method will be called to compute <code>result</code>.</p>

<p>In addition to the standard unary and binary operators like <code>+</code>, <code>le</code>, unary <code>-</code>, etc., objects can also interact with other special routines and language keywords such as <code>HELP</code>, <code>PRINT</code>, <code>SIZE</code>, and <code>FOREACH</code>. Furthermore, the object can define behavior when it is accessed with <code>[]</code>. It also automatically accesses properties when <code>.</code> is used (calling <code>getProperty</code> and <code>setProperty</code> as appropriate).</p>

<p>As an example of using operator overloading, I have some classes and routines for accessing HDF5 files (<a href="http://michaelgalloy.com/wp-content/uploads/2010/07/mg_hdf5.zip">download</a>). To see these classes in use, checkout the main-level program at the end of <code>mg_h5.pro</code>. Run it with:</p>

<p>ID> .run mg_h5</p>

<p>First, I have a convenience function <code>mg_h5</code> which creates an object representing an HDF 5 file, an <code>MGffHDF5File</code> object:</p>

<pre><code>IDL&gt; h = mg_h5(file_which('hdf5_test.h5'))
</code></pre>

<p>The <code>HELP</code> routine will now present more information:</p>

<pre><code>IDL&gt; help, h
H               MGFFHDF5F = &lt;/Applications/itt/idl/idl80/examples/data/hdf5_test.h5&gt;
</code></pre>

<p>To make this work, I had to write the following special method:</p>

<pre><code>function mgffhdf5file::_overloadHelp, varname
  compile_opt strictarr

  type = obj_class(self)
  specs = string(self.filename, format='(%"&lt;%s&gt;")')
  return, string(varname, type, specs, format='(%"%-15s %-9s = %s")')
end
</code></pre>

<p>An HDF 5 file is hierarchical, so groups in the file can be accessed using <code>[]</code>:</p>

<pre><code>IDL&gt; g1 = h['images']
</code></pre>

<p>The method to implement this is a bit more complicated, but the signature is:</p>

<pre><code>function mgffhdf5file::_overloadBracketsRightSide, isRange, $
                                                   ss1, ss2, ss3, ss4, $
                                                   ss5, ss6, ss7, ss8
</code></pre>

<p>Here, <code>isRange</code> is an array indicating whether each dimension specified using <code>[]</code> is a range (i.e., something like <code>0:10</code>) or just a particular value (like <code>5</code> or <code>'images'</code>). Then <code>ss1</code> to <code>ss8</code> are either 3 element arrays or scalar values, depending on the corresponding value in <code>isRange</code>.</p>

<p>One trick: it is possible to write classes that provide the ability to use operator overloading when used in IDL 8.0, but provide their normal functionality when used with IDL versions before 8.0. Just write your own <code>IDL_Object</code> class (<a href="http://michaelgalloy.com/wp-content/uploads/2010/07/idl_object__define.pro">here&#8217;s mine</a>). This will not be found when using IDL 8.0, since its <code>IDL_Object</code> is a core built-in class, but will be found in older versions of IDL so that classes which inherit from it will compile.</p>

<p>I think that, used wisely, operator overloading can provide very usable, intuitive objects. But too much operator overloading can lead to overly complicated code which is difficult to debug.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/07/27/idl-8-0-operator-overloading.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>IDL 8.0 webinar</title>
		<link>http://michaelgalloy.com/2010/07/26/idl-8-0-webinar.html</link>
		<comments>http://michaelgalloy.com/2010/07/26/idl-8-0-webinar.html#comments</comments>
		<pubDate>Mon, 26 Jul 2010 23:07:52 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2749</guid>
		<description><![CDATA[I watched this &#8220;New Features and Functionality in IDL 8.0&#8243; webinar live, but if you missed it, the recorded version is now available. It&#8217;s a great overview of the new features in IDL 8.0 by Mark Piper of ITT VIS.]]></description>
			<content:encoded><![CDATA[<p>I watched this &#8220;New Features and Functionality in IDL 8.0&#8243; webinar live, but if you missed it, the recorded version is <a href="http://cc.readytalk.com/play?id=hlocs4">now available</a>. It&#8217;s a great overview of the new features in IDL 8.0 by Mark Piper of ITT VIS.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/07/26/idl-8-0-webinar.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IDL 8.0: Help</title>
		<link>http://michaelgalloy.com/2010/07/26/idl-8-0-help.html</link>
		<comments>http://michaelgalloy.com/2010/07/26/idl-8-0-help.html#comments</comments>
		<pubDate>Mon, 26 Jul 2010 16:31:42 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2637</guid>
		<description><![CDATA[IDL 8.0 introduces yet another help system. The help system inside the Workbench and the web server to view HTML pages are gone. This is welcome for me, as I did not like the 7.x help system and was wondering how long I could reasonably use the IDL Assistant from IDL 6.4. But I primarily [...]]]></description>
			<content:encoded><![CDATA[<p>IDL 8.0 introduces yet another help system. The help system inside the Workbench and the web server to view HTML pages are gone. This is welcome for me, as I did not like the 7.x help system and was wondering how long I could reasonably use the IDL Assistant from IDL 6.4. But I primarily use IDL form the command line; Workbench users with only a single monitor may not be as thrilled that they have to have two separate applications open.</p>

<p><span id="more-2637"></span></p>

<p><a href="http://michaelgalloy.com/wp-content/uploads/2010/06/help.png" class="nodecoration"><img src="http://michaelgalloy.com/wp-content/uploads/2010/06/help-thumbnail.png"/ align="center"></a></p>

<p>The integration with IDL is still available, using <code>?</code> on the command line (either from the command line version of IDL or the Workbench) will still bring up the help. In the Workbench, you can select a term and view &#8220;Help on Selected Item&#8221; (although I couldn&#8217;t successfully bind that to a keyboard shortcut). If you launch help from the Workbench, the help viewer will go away when you quit the Workbench, but you can also start the help viewer independently.</p>

<p>My one complaint with the help viewer is that it defaults to the &#8220;Search&#8221; tab instead of the &#8220;Index&#8221; tab, which I use almost exclusively.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/07/26/idl-8-0-help.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IDL 8.0: Lists and hashes</title>
		<link>http://michaelgalloy.com/2010/07/22/idl-8-0-lists-and-hashes.html</link>
		<comments>http://michaelgalloy.com/2010/07/22/idl-8-0-lists-and-hashes.html#comments</comments>
		<pubDate>Thu, 22 Jul 2010 21:14:27 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2647</guid>
		<description><![CDATA[Fundamental data structures like lists and hashes have been needed in IDL for some time, but IDL 8.0 introduces them along with some related features/syntax for object-oriented programming to make them even more useful. A list is simply a sequentially ordered container of items of any type. You can add/insert items, remove items, look up [...]]]></description>
			<content:encoded><![CDATA[<p>Fundamental data structures like lists and hashes have been needed in IDL for some time, but IDL 8.0 introduces them along with some related features/syntax for object-oriented programming to make them even more useful.</p>

<p><span id="more-2647"></span></p>

<p>A list is simply a sequentially ordered container of items of any type. You can add/insert items, remove items, look up an item at a given index, etc. It is similar to an <code>IDL_Container</code>, except that it allows its items to be of any type, not just objects (and the items don&#8217;t have to even all be of the same type). For example,</p>

<pre><code>IDL&gt; stations = list()                        
IDL&gt; stations-&gt;add, 'Boulder'
IDL&gt; ; try the following without the EXTRACT keyword too                 
IDL&gt; stations-&gt;add, ['Fort Collins', 'Denver'], /extract
IDL&gt; stations-&gt;add, ['Colorado Springs']                
IDL&gt; print, n_elements(stations) 
           4
IDL&gt; print, stations 
Boulder
Fort Collins
Denver
Colorado Springs
IDL&gt; print, stations[1]
Fort Collins
IDL&gt; foreach s, stations do print, strupcase(s)
BOULDER
FORT COLLINS
DENVER
COLORADO SPRINGS
</code></pre>

<p>Hashes are another type of container, but ordered by arbitrary keys instead of by an integer index. For example,</p>

<pre><code>IDL&gt; zip_codes = hash()               
IDL&gt; zip_codes[80303] = 'Boulder'     
IDL&gt; zip_codes[80521] = 'Fort Collins'
IDL&gt; zip_codes[80002] = 'Denver'
IDL&gt; zip_codes[80840] = 'Colorado Springs'
IDL&gt; print, zip_codes
80840: Colorado Springs
80521: Fort Collins
80002: Denver
80303: Boulder
IDL&gt; print, zip_codes[80303]
Boulder
IDL&gt; print, zip_codes-&gt;keys()
       80840
       80521
       80002
       80303
IDL&gt; print, zip_codes-&gt;values()
Colorado Springs
Fort Collins
Denver
Boulder
IDL&gt; foreach city, zip_codes, code do $
IDL&gt;   print, code, city, format='(%"Zip code %d is in %s")'
Zip code 80840 is in Colorado Springs
Zip code 80521 is in Fort Collins
Zip code 80002 is in Denver
Zip code 80303 is in Boulder
</code></pre>

<p>For an example of more extensive use of lists and hashes, I implemented <a href="http://norvig.com/spell-correct.html">Peter Norvig&#8217;s spelling corrector</a> in IDL (<a href="http://michaelgalloy.com/wp-content/uploads/2010/07/spellcorrect.zip">download</a>):</p>

<pre><code>IDL&gt; print, mg_spellcorrect('corect')
correct
IDL&gt; print, mg_spellcorrect('correct')
correct
IDL&gt; print, mg_spellcorrect('speling')
spelling
</code></pre>

<p>Norvig&#8217;s Python implementation uses some list features that IDL does not have like list comprehensions, but IDL&#8217;s lists and hashes were up for the task (though it&#8217;s regular expressions were not and I had to make a few optimizations to get IDL&#8217;s implementation to a reasonable speed, so the first time you run <code>mg_spellcorrect</code> will take longer while it generates the word list and saves it away).</p>

<p>I have my own list and hash classes which provide similar functionality, but require elements of lists and keys/values of hashes to be of a single type. This provides a bit of extra performance (and in practice I never needed to have a single list or hash containing items of differing types) against earlier versions of the IDL list and hash objects, but lists and hashes are faster in the final IDL 8.0 release, as seen in this comparison between adding items to standard arrays, lists, and <code>MGcoArrayList</code>s:</p>

<p><img src="http://michaelgalloy.com/wp-content/uploads/2010/07/concatenation.png" align="right" hspace="8"/></p>

<p>UPDATE 2/23: Fixed <code>x</code>-axis scale on above graph. Code for running the test is <a href="http://michaelgalloy.com/wp-content/uploads/2010/07/mg_listtest.pro">available</a> (though the graphics code requires a bunch of my private routines).</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/07/22/idl-8-0-lists-and-hashes.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>IDL 8.0 released</title>
		<link>http://michaelgalloy.com/2010/07/22/idl-8-0-released.html</link>
		<comments>http://michaelgalloy.com/2010/07/22/idl-8-0-released.html#comments</comments>
		<pubDate>Thu, 22 Jul 2010 18:02:27 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2710</guid>
		<description><![CDATA[IDL 8.0 is out! Download here (the normally long download was quite fast for me). Stay tuned for a sequence of articles here highlighting features I am excited about in IDL 8.0: lists and hashes, the new graphics routines, operator overloading, language changes, new help system, and Workbench changes.]]></description>
			<content:encoded><![CDATA[<p>IDL 8.0 is out! <a href="http://www.ittvis.com/Download/Download.aspx?product=IDL">Download here</a> (the normally long download was quite fast for me). Stay tuned for a sequence of articles here highlighting features I am excited about in IDL 8.0: lists and hashes, the new graphics routines, operator overloading, language changes, new help system, and Workbench changes.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/07/22/idl-8-0-released.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MetaOptimize</title>
		<link>http://michaelgalloy.com/2010/07/07/metaoptimize.html</link>
		<comments>http://michaelgalloy.com/2010/07/07/metaoptimize.html#comments</comments>
		<pubDate>Wed, 07 Jul 2010 21:48:11 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[Visualization]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2702</guid>
		<description><![CDATA[MetaOptimize has a forum for asking and answering questions about data visualization, like comp.lang.idl-pvwave for visualization issues: Where data geeks ask and answer questions on machine learning, natural language processing, artificial intelligence, text analysis, information retrieval, search, data mining, statistical modeling, and data visualization! Haven&#8217;t asked/answered a question yet, but it looks like a good [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://metaoptimize.com/qa/">MetaOptimize</a> has a forum for asking and answering questions about data visualization, like <a href="http://groups.google.com/group/comp.lang.idl-pvwave/topics">comp.lang.idl-pvwave</a> for visualization issues:</p>

<blockquote>
  <p>Where data geeks ask and answer questions on machine learning, natural language processing, artificial intelligence, text analysis, information retrieval, search, data mining, statistical modeling, and data visualization!</p>
</blockquote>

<p>Haven&#8217;t asked/answered a question yet, but it looks like a good resource.</p>

<p>Link via <a href="http://flowingdata.com/2010/07/06/stack-overflow-for-data-geeks/">FlowingData</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/07/07/metaoptimize.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Site down for routine maintenance</title>
		<link>http://michaelgalloy.com/2010/07/01/site-down-for-routine-maintenance.html</link>
		<comments>http://michaelgalloy.com/2010/07/01/site-down-for-routine-maintenance.html#comments</comments>
		<pubDate>Thu, 01 Jul 2010 16:59:50 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[Admin]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2698</guid>
		<description><![CDATA[The site will be down for routine maintenance this evening, July 1, around 10 pm MDT for approximately 6 hours.]]></description>
			<content:encoded><![CDATA[<p>The site will be down for routine maintenance this evening, July 1, around 10 pm MDT for approximately 6 hours.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/07/01/site-down-for-routine-maintenance.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VISualize 2010 presentations</title>
		<link>http://michaelgalloy.com/2010/06/24/visualize-2010-presentations.html</link>
		<comments>http://michaelgalloy.com/2010/06/24/visualize-2010-presentations.html#comments</comments>
		<pubDate>Thu, 24 Jun 2010 20:45:28 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2684</guid>
		<description><![CDATA[Presentations from VISualize 2010 are now on the ITT VIS website. (The PDF file for Paulo Penteado&#8217;s presentation looks corrupted to me, but you can download a good version from here.) Overall, I thought that the talks were great and I learned something interesting and/or useful from each one. I&#8217;m particularly excited about the code [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://www.ittvis.com/groups/index.asp?sid=&amp;bs=&amp;gid=355&amp;ngid">Presentations</a> from VISualize 2010 are now on the ITT VIS website. (The PDF file for Paulo Penteado&#8217;s presentation looks corrupted to me, but you can download a good version from <a href="http://www.ppenteado.net/idl/penteado_visualize2010.pdf">here</a>.)</p>

<p>Overall, I thought that the talks were great and I learned something interesting and/or useful from each one. I&#8217;m particularly excited about the code for producing perceptually uniform color maps that Paulo Penteado promised to release. It is also great to learn a few <a href="https://www.ittvis.com/groups/group_download.asp?lid=1213">new facts about IDL 8.0</a> at each ITT VIS presentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/06/24/visualize-2010-presentations.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VISualize 2010: GPULib with IDL 8.0</title>
		<link>http://michaelgalloy.com/2010/05/20/visualize-2010-gpulib-with-idl-8-0.html</link>
		<comments>http://michaelgalloy.com/2010/05/20/visualize-2010-gpulib-with-idl-8-0.html#comments</comments>
		<pubDate>Thu, 20 May 2010 14:17:33 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[IDL]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[original]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2626</guid>
		<description><![CDATA[Here are my slides on the &#8220;GPULib with IDL 8.0&#8243; talk I gave yesterday at VISualize 2010. They are very similar to the slides for the talk I gave a few months ago at the IDL User Group Meeting in Boulder. More to come on other talks&#8230;]]></description>
			<content:encoded><![CDATA[<p>Here are my <a href="http://michaelgalloy.com/wp-content/uploads/2010/05/gpulib-with-idl80.pdf">slides</a> on the &#8220;GPULib with IDL 8.0&#8243; talk I gave yesterday at VISualize 2010. They are very similar to the <a href="http://michaelgalloy.com/2010/02/25/gpulib-with-idl-8-0-slides.html">slides</a> for the talk I gave a few months ago at the IDL User Group Meeting in Boulder. More to come on other talks&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/05/20/visualize-2010-gpulib-with-idl-8-0.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Recipes as infographics</title>
		<link>http://michaelgalloy.com/2010/05/14/recipes-as-infographics.html</link>
		<comments>http://michaelgalloy.com/2010/05/14/recipes-as-infographics.html#comments</comments>
		<pubDate>Fri, 14 May 2010 18:36:38 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[Visualization]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2622</guid>
		<description><![CDATA[I have wanted to create something like this for awhile. Link via Chart Porn.]]></description>
			<content:encoded><![CDATA[<p>I have wanted to create something <a href="http://www.flickr.com/photos/starsammy/4605760111/in/pool-16135094@N00">like this</a> for awhile.</p>

<p>Link via <a href="http://chartporn.org/2010/05/14/recipes/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+ChartPorn+%28Chart+Porn%29">Chart Porn</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/05/14/recipes-as-infographics.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Next visualization type: motion  charts</title>
		<link>http://michaelgalloy.com/2010/05/13/next-visualization-type-motion-charts.html</link>
		<comments>http://michaelgalloy.com/2010/05/13/next-visualization-type-motion-charts.html#comments</comments>
		<pubDate>Thu, 13 May 2010 12:40:25 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[Visualization]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2609</guid>
		<description><![CDATA[The next visualization type summarized by Juice Analytics in their excellent &#8220;Better know a visualization&#8221; series: motion charts. Motion charts are essentially animated bubble charts. A bubble chart shows data using the x-axis, y-axis, and the size and color of the bubble. A motion chart displays changes over time by showing movement within the two-dimensional [...]]]></description>
			<content:encoded><![CDATA[<p>The next visualization type summarized by <a href="http://www.juiceanalytics.com/">Juice Analytics</a> in their excellent &#8220;Better know a visualization&#8221; series: <a href="http://www.juiceanalytics.com/writing/better-know-visualization-motion-charts/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+JuiceAnalytics+%28Juice+Analytics%29">motion charts</a>.</p>

<blockquote>
  <p>Motion charts are essentially animated bubble charts. A bubble 
  chart shows data using the x-axis, y-axis, and the size and color 
  of the bubble. A motion chart displays changes over time by showing 
  movement within the two-dimensional space and changes in the size 
  and color of the bubbles.</p>
</blockquote>

<p>Motion charts are used quite effectively by Hans Rosling in his great <a href="http://www.ted.com/talks/hans_rosling_shows_the_best_stats_you_ve_ever_seen.html">TED</a> <a href="http://www.ted.com/talks/hans_rosling_at_state.html">talks</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/05/13/next-visualization-type-motion-charts.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>History of programming languages</title>
		<link>http://michaelgalloy.com/2010/05/11/history-of-programming-languages.html</link>
		<comments>http://michaelgalloy.com/2010/05/11/history-of-programming-languages.html#comments</comments>
		<pubDate>Tue, 11 May 2010 16:02:42 +0000</pubDate>
		<dc:creator>Michael Galloy</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://michaelgalloy.com/?p=2594</guid>
		<description><![CDATA[This history of programming languages is hilarious: 1957 &#8211; John Backus and IBM create FORTRAN. There&#8217;s nothing funny about IBM or FORTRAN. It is a syntax error to write FORTRAN while not wearing a blue tie. and 1972 &#8211; Dennis Ritchie invents a powerful gun that shoots both forward and backward simultaneously. Not satisfied with [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html">This history of programming languages</a> is hilarious:</p>

<blockquote>
  <p>1957 &#8211; John Backus and IBM create FORTRAN. There&#8217;s nothing funny 
  about IBM or FORTRAN. It is a syntax error to write FORTRAN while 
  not wearing a blue tie.</p>
</blockquote>

<p>and</p>

<blockquote>
  <p>1972 &#8211; Dennis Ritchie invents a powerful gun that shoots both 
  forward and backward simultaneously. Not satisfied with the number 
  of deaths and permanent maimings from that invention he invents C 
  and Unix.</p>
</blockquote>

<p>I wonder what IDL&#8217;s entry would look like?</p>

<p>Link via <a href="http://www.boingboing.net/2010/05/10/funny-history-of-pro.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+boingboing%2FiBag+%28Boing+Boing%29">BoingBoing</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://michaelgalloy.com/2010/05/11/history-of-programming-languages.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
