<?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>Palantir Technologies &#187; visualization</title>
	<atom:link href="http:///category/visualization/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Articles from the Engineering Group at Palantir Technologies</description>
	<lastBuildDate>Wed, 14 Dec 2011 17:48:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Fun and Games with the Palantir Finance Spreadsheet Application</title>
		<link>http://blog.palantirtech.com/2011/08/11/mandelbrot-testing-with-hh-lang/</link>
		<comments>http://blog.palantirtech.com/2011/08/11/mandelbrot-testing-with-hh-lang/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 20:18:49 +0000</pubDate>
		<dc:creator>Rico Chiu</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[problemspace - finance]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">https://wp-admin-techblog.yojoe.local/?p=1859</guid>
		<description><![CDATA[&#8220;You&#8217;re asking us to test our platform&#8217;s programming language? How am I supposed to do that?&#8221; My head itches from trying to recall the bits and pieces of what I learned in high school about programming, specifically the semantics of a programming language. Sure, I did a bit of programming for homework assignments in college, [...]]]></description>
			<content:encoded><![CDATA[<div style='float: right; width: 300px; margin-left: 15px; margin-bottom-15px'><a href="/wp-content/uploads/2011/07/mandelbrot-15-1-to-51.jpg"><img src='/wp-content/uploads/2011/08/mandelbrot-15-1-to-51-tiny-thumb.jpg'/></a></div>
<blockquote><p>&#8220;You&#8217;re asking us to test our platform&#8217;s programming language?  How am I supposed to do that?&#8221;
</p></blockquote>
<p>My head itches from trying to recall the bits and pieces of what I learned in high school about programming, specifically the semantics of a programming language.  Sure, I did a bit of programming for homework assignments in college, but I was no CS major.  This was a much different challenge for a QA engineer to test.  Compared to an application, a programming language is completely open ended; there are no specifications to test, guidelines to follow, or limits to break.</p>
<p>The <a href="http://blog.palantir.com/2011/06/06/tech-talk-the-hedgehog-programming-language/">Hedgehog language</a> had the basic set of tools laid out for me already: I could declare variables, create data structures, and use loops for iteration.  As I was trying out individual usage examples, such as how to structure <code>if</code> statements or how to cast an object to a different type, I realized that this was no way to test something as powerful and flexible as an entire language.  It would be like a doctor who claims that since each individual organ works fine, there are no problems with the entire system.  This is insufficient: <a href="http://blog.palantir.com/2010/07/23/help-is-there-a-doctor-in-the-network/">one needs to look at the system as a whole, including examining the interactions between each component</a>.  I decided I needed to create much larger and elaborate code samples in order to test the Hedgehog language in a larger scope.</p>
<p>Using the Hedgehog language, I had programmed several algorithms, solving puzzles that would output a number.  This was getting bit boring, since once the output value was matched the expected number, there was nothing more to be done.  I wanted to create something more dynamic, a toy I could play around and experiment with.  And opportunity presented itself in the form of one of our newest tools: the spreadsheet application.  With the capability of setting the value of each cell programmatically and then coloring them depending on their value… hmm what could I do with this?</p>
<p>Hedgehog is a powerful tool in coding functions and workflows that directly interact with our applications. Most of the time, the language is used to write expressions for an input value, create custom metrics that return values after a set of calculations, or even to set inputs, calculate, and save documents. Given the language’s ability to integrate with Spreadsheet, the capabilities of the Hedgehog language can literally be visually shown to the user, resulting in some stunning displays.<span> </span>Below are three examples I’ve coded in Palantir Finance’s own language: calculating and drawing the Mandelbrot fractal, simulating Conway’s Game of Life, and solving a Nonograms puzzle.<br />
<span id="more-1859"></span></p>
<p class="MsoNormal"><span style="underline;"><strong>The Mandelbrot fractal</strong></span></p>
<p class="MsoNormal">The<a title="Mandelbrot Set" href="http://en.wikipedia.org/wiki/Mandelbrot_set" target="_self"> Mandelbrot set</a> is one of the most recognized images among fractals.<span> </span>Fractals are unique images due to their self-similarity, such that they have infinite detail: as you zoom in on a fractal border, detailed structures will continue to appear indefinitely.<span> </span></p>
<p>Since the Mandelbrot set is an example of an escape time fractal, we can write a function that counts the number of iterations it takes for a given point to escape a threshold value.<span> </span>Applying this function to each point within a grid of specified range and resolution, we can generate a field of values to be set in a spreadsheet.<span> </span>After resizing the spreadsheet cells into small squares and applying conditional formatting, specifically a heat map that colors the cell based on its value, the below images can be generated:</p>
<div id="attachment_1912" class="wp-caption aligncenter" style="width: 660px"><a href="/wp-content/uploads/2011/07/mandelbrot-15-1-to-51.jpg"><img class="size-full wp-image-1912 " src="/wp-content/uploads/2011/07/mandelbrot-15-1-to-51.jpg" alt="Mandelbrot Fractal drawn from (-1.5, -1) to (0.5, 1)" width="650" height="460" /></a><p class="wp-caption-text">Fig M1. Mandelbrot Fractal drawn from (-1.5, -1) to (0.5, 1), with the top left quadrant visible</p></div>
<div id="attachment_1913" class="wp-caption aligncenter" style="width: 660px"><a href="/wp-content/uploads/2011/07/mandelbrot2.jpg"><img class="size-full wp-image-1913" src="/wp-content/uploads/2011/07/mandelbrot2-thumb.jpg" alt="Mandelbrot Fractal drawn from (0.27205, 0.00451) to (0.27505, 0.00751)" width="650" /></a><p class="wp-caption-text">Fig M2. Mandelbrot Fractal drawn from (0.27205, 0.00451) to (0.27505, 0.00751)</p></div>
<div id="attachment_1914" class="wp-caption aligncenter" style="width: 660px"><a href="/wp-content/uploads/2011/07/manual-heat-map.jpg"><img class="size-medium wp-image-1914" src="/wp-content/uploads/2011/07/manual-heat-map-thumb.jpg" alt="Mandelbrot Fractal with manually created heat map" width="650" /></a><p class="wp-caption-text">Fig M3. Mandelbrot Fractal with manually created rainbow heat map</p></div>
<p class="MsoNormal"><span style="underline;"><strong>The Game of Life</strong></span></p>
<p><span>John Conway’s <a title="Game of Life" href="http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life" target="_self">Game of Life</a> </span>is a simple cellular automaton that shows the evolution of an initial state of cells governed by a set of rules.<span> </span>In the classic scenario, cells can be alive or dead, indicated by a filled or empty cell respectively.<span> </span>When evaluating the next generation of cells, each cell checks the number of live neighbors among its adjacent 8 cells.<span> </span>If the cell is alive with 2 or 3 live neighbors, it remains alive.<span> </span>If a dead cell has 3 live neighbors, it becomes alive.<span> </span>All other scenarios, the cell evolves into a dead cell.</p>
<p class="MsoNormal">In this example, we rely heavily on spreadsheet’s cell dependency tree.<span> </span>Cells are able to reference the value of other cells within their expression, creating a directed acyclic graph. If the value of a cell changes, all cells that point towards the changed cell need to recalculate their value.<span> </span>In this specific case, the user can change the value of which generation to view, which causes the recalculation of the grid of cells representing the game.</p>
<p class="MsoNoSpacing">In the spreadsheet below, the initial state, or generation 0, of “Noah’s Ark” is shown.<span> </span>The initial data for Noah’s Ark is derived from an external spreadsheet document containing a grid of 0’s and 1’s.<span> </span></p>
<p><a href="/wp-content/uploads/2011/07/initial-noahs-ark.jpg"><img class="size-medium wp-image-1915" src="/wp-content/uploads/2011/07/initial-noahs-ark.jpg" alt="Initial generation for Noah's Ark" width="650" /></a></p>
<p class="MsoNoSpacing">Below is an animated image of the evolution of Noah’s Ark from generation 0 to generation 10.</p>
<p><a href="/wp-content/uploads/2011/07/animation.gif"><img class="size-full wp-image-1916" src="/wp-content/uploads/2011/07/animation.gif" alt="Animation of Noah's Ark up to 10th Generation" width="640"/></a></p>
<p class="MsoNormal">One problem encountered is that it takes increasingly longer to calculate a larger generation number. Because the only generation that is saved is the initial generation, calculations must always start from generation 0 when the user changes the generation number.<span> This triggers a lot of redundant calculations: if I am at generation 10 and want to see generation 11, the calculation starts from generation 0, repeats all the same calculations up to generation 10, and finally calculates one more iteration to reach generation 11.  T</span>o prevent unnecessary calculations, the results of previous calculations can be written to a cache file: a separate spreadsheet document containing the generation data that was calculated previously.<span> When caching is enabled, previous generation calculations can be retrieved so the same calculation never happens twice.</span></p>
<p class="MsoNormal">Below is an animated image of a “Gospel Glider Gun” from generation 0 to generation 40, shown in increments of 2 generations.<span> </span>The glider gun will continue to oscillate over time while producing a 5 cell glider object that floats away from the gun diagonally down to the right.<span> </span>Without the caching functionality, the 40<sup>th</sup> generation would take approximately 4 times as long as the 10<sup>th</sup> generation.<span> </span>By enabling caching, each animation frame takes approximately the same time to calculate since only 2 generations are computed per frame.</p>
<p><a href="/wp-content/uploads/2011/07/211.gif"><img class="size-full wp-image-1918" src="/wp-content/uploads/2011/07/211.gif" alt="Animation of Glider Gun up to 40th generation" width="640" /></a></p>
<p><span style="underline;"><strong>Nonograms Solver</strong></span></p>
<p><span><a title="Nonograms" href="http://http://en.wikipedia.org/wiki/Nonogram" target="_self">Nonograms</a>, sometimes better known as Picross, </span>are a type of logic puzzle where the user is given a blank grid with a set of numbers for each row and column.<span> </span>The numbers represent the number of consecutively filled blocks in the final solution within that row or column.<span> </span>Using these numbers as clues, it can be deduced whether or not a space is filled or not, until the entire grid simultaneously satisfies all given conditions.<span> </span>Solving puzzles is a NP-complete problem: it is very easy to verify a solution by checking if each row and column satisfies its set of numbers, but becomes increasingly difficult to solve larger puzzles.<span> </span>Time it takes to check a puzzle increases linearly with puzzle size, but the time to solve increases much faster due to the increase in number of iterations over each row or column crossed with an increased number of permutation possibilities for each set of numbers per iteration.<span> </span>Solving a 25&#215;25 nonogram puzzle by hand usually takes about 30 minutes for an experienced solver.</p>
<div style='float: right; margin-left: 15px; margin-bottom: 15px;'><a href="/wp-content/uploads/2011/07/nonogram-permutation.jpg"><img class="size-full wp-image-1919" src="/wp-content/uploads/2011/07/nonogram-permutation.jpg" alt="Possible permutations of [2,1] in a row of 5 spaces" width="186" height="146" /></a></div>
<p class="MsoNormal">Given the initial set of values for each row and column, the algorithm iterates through each row or column individually. <span> </span>The simplest method to solve is to find all possible permutations of the given numbers over the length of the row or column and check if there are any spaces that are consistently filled or unfilled across all possibilities.<span> </span>Let’s consider a simple example: In a row of 5 spaces, the set of values given is [2,1].<span> </span>Thus the possible permutations are shown on the right, where 1 is a filled space, -1 is an unfilled space, and 0 is undetermined.</p>
<p class="MsoNormal">Additional optimizations, such as queuing the order of rows and columns to solve, trimming the solved ends of a range of spaces, and avoiding unnecessary calculations, were made to improve the performance of the algorithm such that the average time to solve a 25&#215;25 puzzle is 5 minutes.<span> </span>This is fairly impressive given that the Hedgehog language is by no means optimized to handle such calculations and array manipulations.<span> </span>Below are some examples of solved puzzles:</p>
<div id="attachment_1920" class="wp-caption aligncenter" style="width: 660px"><a href="/wp-content/uploads/2011/07/10x10.jpg"><img class="size-full wp-image-1920" src="/wp-content/uploads/2011/07/10x10.jpg" alt="10x10 nonogram solution, solved in less than a second" width="650" /></a><p class="wp-caption-text">Fig N1. 10x10 nonogram solution, solved in less than a second</p></div>
<div id="attachment_1921" class="wp-caption aligncenter" style="width: 657px"><a href="/wp-content/uploads/2011/07/20x20.jpg"><img class="size-full wp-image-1921" src="/wp-content/uploads/2011/07/20x20.jpg" alt="20x20 nonograms solution, solved in 20 seconds" width="647" /></a><p class="wp-caption-text">Fig 2. 20x20 nonograms solution, solved in 20 seconds</p></div>
<div id="attachment_1922" class="wp-caption aligncenter" style="width: 660px"><a href="/wp-content/uploads/2011/07/25x25.jpg"><img class="size-full wp-image-1922" src="/wp-content/uploads/2011/07/25x25.jpg" alt="25x25 nonograms solution, solved in 3 minutes" width="650" /></a><p class="wp-caption-text">Fig N3. 25x25 nonograms solution, solved in 3 minutes</p></div>
<p>The initial spark that ignited this series of code examples started from just a simple curiosity of, &#8220;I wonder if it would be possible to write this in Hedgehog?&#8221;  In a way, it was also an exercise for me to learn more about the Hedgehog language, extending the use of its capabilities and libraries of metrics, in order to inject more complicated expressions while testing other applications on our platform. Throughout the process of developing the finished product, I was able to expose issues with the language that may have gone unnoticed with smaller, simpler test cases.  </p>
<p>But of course, the driving motivation behind all this was to have fun, which is a big part of what it means to be working at Palantir.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2011/08/11/mandelbrot-testing-with-hh-lang/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Human-Computer Symbiosis: 9/11 Memorial Name Layout</title>
		<link>http://blog.palantirtech.com/2011/07/05/human-computer-symbiosis-911-memorial-name-layout/</link>
		<comments>http://blog.palantirtech.com/2011/07/05/human-computer-symbiosis-911-memorial-name-layout/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 20:49:41 +0000</pubDate>
		<dc:creator>Ari Gesher</dc:creator>
				<category><![CDATA[Human-Computer Symbiosis]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">https://wp-admin-techblog.yojoe.local/?p=1849</guid>
		<description><![CDATA[We talk a lot about Human-Computer Symbiosis on this blog &#8211; it&#8217;s a systems design approach that guides us in our construction of our technology stacks. Given that, we&#8217;re always on the lookout for example of HCS systems built by other people. Here&#8217;s an unlikely example: the layout of names in the memorial was made [...]]]></description>
			<content:encoded><![CDATA[<div style='float: right; margin-left: 15px; margin-bottom: 15px; width: 300px'><a href='http://blog.blprnt.com/blog/blprnt/all-the-names'><img src='/wp-content/uploads/2011/06/9-11-memorial.jpg' width='300'/></a></div>
<p>We talk a lot about <a href="http://blog.palantir.com/category/human-computer-symbiosis/">Human-Computer Symbiosis on this blog</a> &#8211; it&#8217;s a systems design approach that guides us in our construction of our technology stacks.  Given that, we&#8217;re always on the lookout for example of HCS systems built by other people.</p>
<p>Here&#8217;s an unlikely example: the layout of names in the memorial was made according to &#8216;meaningful adjacencies&#8217; (as described by <a href='http://blog.blprnt.com/about'>Jer Thorp</a> in his blog post, <a href='http://blog.blprnt.com/blog/blprnt/all-the-names'><em>All The Names: Algorithmic Design and the 9/11 Memorial</em></a>):</p>
<blockquote><p>
The project was to design an algorithm for placement of names on the 9/11 memorial in New York City. In architect Michael Arad‘s vision for the memorial, the names were to be laid according to where people were and who they were with when they died – not alphabetical, nor placed in a grid. Inscribed in bronze parapets, almost three thousand names would stream seamlessly around the memorial pools. Underneath this river of names, though, an arrangement would provide a meaningful framework; one which allows the names of family and friends to exist together. Victims would be linked through what Arad terms ‘meaningful adjacencies’ – connections that would reflect friendships, family bonds, and acts of heroism. through these connections, the memorial becomes a permanent embodiment of not only the many individual victims, but also of the relationships that were part of their lives before those tragic events.</p></blockquote>
<p>Read on for details on the approach they used and how it embodies HCS architecture (not to mention, a video of their tool in action).<br />
<span id="more-1849"></span></p>
<p>The post goes deep into detail on how they built the information system to model and prototype the layout of the names.  In end, they let the computers track the adjacency issues while the humans handled the overall aesthetics of not just the overall memorial, but the details of how the names were laid out:</p>
<blockquote><p>It would be misleading to say that the layout for the final memorial was produced by an algorithm. Rather, the underlying framework of the arrangement was solved by the algorithm, and humans used that framework to design the final result. This is, I think, a perfect example of something that I’ve believed in for a long time: we should let computers do what computers do best, and let humans do what humans do best. In this case, the computer was able to evaluate millions of possible solutions for the layout, manage a complex relational system, and track a large set of important variables and measurements. Humans, on the other hand, could focus on aesthetic and compositional choices. It would have been very hard (or impossible) for humans to do what the computer did. At the same time, it would have been very difficult to program the computer to handle the tasks that were completed with such dedication and precision by the architects and the memorial team.</p></blockquote>
<p>To quote <a href="https://secure.wikimedia.org/wikipedia/en/wiki/J._C._R._Licklider">J.R. Licklider</a>, whose <a href="http://blog.palantirtech.com/man-computer-symbiosis/"><em>Man-Computer Symbiosis</em></a> paper is widely considered to be the seminal work on the how and why of building HCS systems:</p>
<blockquote><p>Men will set the goals and supply the motivations, of course, at least in the early years. They will formulate hypotheses. They will ask questions. They will think of mechanisms, procedures, and models. They will remember that such-and-such a person did some possibly relevant work on a topic of interest back in 1947, or at any rate shortly after World War II, and they will have an idea in what journals it might have been published. In general, they will make approximate and fallible, but leading, contributions, and they will define criteria and serve as evaluators, judging the contributions of the equipment and guiding the general line of thought.</p>
<p>In addition, men will handle the very-low-probability situations when such situations do actually arise. (In current man-machine systems, that is one of the human operator’s most important functions. The sum of the probabilities of very-low-probability alternatives is often much too large to neglect. ) Men will fill in the gaps, either in the problem solution or in the computer program, when the computer has no mode or routine that is applicable in a particular circumstance.</p>
<p>The information-processing equipment, for its part, will convert hypotheses into testable models and then test the models against data (which the human operator may designate roughly and identify as relevant when the computer presents them for his approval). The equipment will answer questions. It will simulate the mechanisms and models, carry out the procedures, and display the results to the operator. It will transform data, plot graphs (“cutting the cake” in whatever way the human operator specifies, or in several alternative ways if the human operator is not sure what he wants). The equipment will interpolate, extrapolate, and transform. It will convert static equations or logical statements into dynamic models so the human operator can examine their behavior. In general, it will carry out the routinizable, clerical operations that fill the intervals between decisions.</p></blockquote>
<p><iframe src="http://player.vimeo.com/video/23444105?title=0&amp;byline=0&amp;portrait=0" width="650" height="390" frameborder="0"></iframe>
<p><a href="http://vimeo.com/23444105">WTC Names Arrangement Tool</a> from <a href="http://vimeo.com/user313340">blprnt</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2011/07/05/human-computer-symbiosis-911-memorial-name-layout/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inside Horizon: interactive analysis at cloud scale</title>
		<link>http://blog.palantirtech.com/2011/04/15/inside-horizon-interactive-analysis-at-cloud-scale/</link>
		<comments>http://blog.palantirtech.com/2011/04/15/inside-horizon-interactive-analysis-at-cloud-scale/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 19:04:46 +0000</pubDate>
		<dc:creator>Ari Gesher</dc:creator>
				<category><![CDATA[distributed systems]]></category>
		<category><![CDATA[enterprise engineering]]></category>
		<category><![CDATA[enterprise software]]></category>
		<category><![CDATA[Human-Computer Symbiosis]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[problemspace-government]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">https://wp-admin-techblog.yojoe.local/?p=1837</guid>
		<description><![CDATA[Late last year, we were honored to be invited to talk at Reflections&#124;Projections, ACM@UIUC&#8217;s annual student-run computing conference. We decided to bring a talk about Horizon, our system for doing aggregate analysis and filtering across very large amounts of data. The video of the talk was posted a few weeks back on the conference website. [...]]]></description>
			<content:encoded><![CDATA[<div style='width: 250; margin-left: 10px; margin-bottom: 10px; float: right;'><a href="http://www.acm.uiuc.edu/conference/2010/"><img src="http://blog.palantir.com/wp-content/uploads/2011/03/reflectionsprojections.png" alt="" title="reflectionsprojections" width="250" height="215"/></a></div>
<p>Late last year, we were honored to be invited to talk at Reflections|Projections, ACM@UIUC&#8217;s annual student-run computing conference.  We decided to bring a talk about Horizon, our system for doing aggregate analysis and filtering across very large amounts of data.  The video of the talk was posted a few weeks back on <a href="http://www.acm.uiuc.edu/Conferenceware/Schedule/Videos">the conference website</a>.</p>
<p>Horizon started as research project / technology demonstrator built as part of Palantir&#8217;s Hack Week &#8211; a periodic innovation sprint that our engineering team uses to build brand new ideas from whole cloth.  It was then used by the Center For Public Integrity in their <a href="http://www.publicintegrity.org/investigations/economic_meltdown/">Who&#8217;s Behind The Subprime Meltdown</a> report.  We produced a short video on the subject, <a href="http://www.palantirtech.com/government/analysis-blog/horizon">Beyond the Cloud: Project Horizon</a>, released on our analysis blog.  Subsequently, it was folded into our product offering, under the name <a href="http://www.palantirtech.com/labs/object-explorer">Object Explorer</a>.</p>
<p>In this hour-long talk, two of the engineers that built this technology tell the story of how Horizon came to be, how it works, and show a live demo of doing analysis on hundreds of millions of records in interactive time.</p>
<p><iframe title="YouTube video player" width="640" height="510" src="http://www.youtube.com/embed/9dOpDeRMTMc" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2011/04/15/inside-horizon-interactive-analysis-at-cloud-scale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Haiti: effective recovery through analysis</title>
		<link>http://blog.palantirtech.com/2010/04/05/haiti-effective-recovery-through-analysis/</link>
		<comments>http://blog.palantirtech.com/2010/04/05/haiti-effective-recovery-through-analysis/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 21:58:56 +0000</pubDate>
		<dc:creator>Ari Gesher</dc:creator>
				<category><![CDATA[Human-Computer Symbiosis]]></category>
		<category><![CDATA[palantir]]></category>
		<category><![CDATA[problemspace-government]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=1336</guid>
		<description><![CDATA[Visualizing SMS hotspots in days following the earthquake in Palantir. Screenshot courtesy of Palantir Technologies [Editor's Note: an edited version of this post first appeared on O'Reilly's Radar blog.] The prologue was an earthquake of unexpected magnitude and location that left 250,000 dead. As computer scientists and technologists, we&#8217;re used to dealing with large numbers [...]]]></description>
			<content:encoded><![CDATA[<div style='float: right; margin-left:15px; margin-bottom: 15px; text-align: center; width: 300px'><a href="/wp-content/uploads/2010/03/haiti.png"><img src="/wp-content/uploads/2010/03/haiti-thumb.png" alt="" title="haiti" width="300" height="210" class="alignnone size-medium wp-image-1468" /></p>
<div style='text-align: center; font-size: 0.8em'>Visualizing SMS hotspots in days following the earthquake in Palantir.</div>
<div style='text-align: center; font-size: 0.6em'>Screenshot courtesy of Palantir Technologies</div>
<p></a></div>
<p><em>[Editor's Note: an edited version of this post <a href="http://radar.oreilly.com/2010/04/good-data-cuts-through-the-cha.html">first appeared on O'Reilly's Radar blog</a>.]</em></p>
<p>The prologue was an earthquake of unexpected magnitude and location that left 250,000 dead.</p>
<p>As computer scientists and technologists, we&#8217;re used to dealing with large numbers in the abstract. Expressed in human terms, the mind-boggling numbers of 250,000 dead, 300,000 injured and over 1 million people left homeless are hard to comprehend. </p>
<p>Hit the link to read more about how effective data management and analysis is crucial to recovery efforts and see specific examples of data about the situation in Haiti modeled in Palantir Government.<br />
<span id="more-1336"></span></p>
<h2>Chapter One: Rescue</h2>
<p>There was one glimmer of hope in this sea of tragedy: the world&#8217;s reaction. In the early hours and days after the quake, the focus was on pinpointing, triaging, and rescuing those in grave danger. Since those first harrowing hours, <a href="http://en.wikipedia.org/wiki/Humanitarian_response_to_the_2010_Haiti_earthquake"> the world has made plain its willingness to help the people of Haiti</a>.  Supplies of money, food, medicine, fresh water, and volunteers have been pouring into Haiti and fundraising efforts are on-going around the world.</p>
<p>Technology also played an early, crucial role, with <a href="http://www.mission4636.org/">Mission 4636</a>, <a href="http://instedd.org/">InSTEDD</a>  and <a href="http://haiti.ushahidi.com/reports/submit">Ushahidi</a> reacting lighting-fast to create a data collection system that enabled people in trouble to quickly communicate their urgent needs to rescuers and relief workers . If you haven&#8217;t already read it, Lukas Biewald&#8217;s piece, <a href="http://radar.oreilly.com/2010/03/how-crowdsourcing-helped-haiti.html">How crowdsourcing helped Haiti&#8217;s relief efforts</a>, is a great look at those first, and most urgent efforts to collect data and synthesize information about the situation on the ground.</p>
<h2>Chapters Two Through Many: Recovery</h2>
<div style='float: right; margin-left:15px; margin-right: 15px'>
<a href="/wp-content/uploads/2010/03/p-hti0366.jpg"><img src="/wp-content/uploads/2010/03/p-hti0366-thumb.jpg" alt="" title="p-hti0366" width="300" height="200" class="alignnone size-medium wp-image-1475" /></a><br/></p>
<div style='text-align: center; font-size: 0.8em'>The extent of the devastation in Haiti.</div>
<div style='text-align: center; font-size: 0.6em'>Photo courtesy of Marko Kokic / ICRC / American Red Cross</div>
</div>
<p>Unfortunately, even partial recovery in Haiti will take years at the bare minimum.<a href="http://www.miamiherald.com/2010/01/17/1429872/vice-president-joe-biden-stresses.html"> U.S. Vice President Joe Biden stated on 16 January</a> that President Obama &#8220;does not view this as a humanitarian mission with a life cycle of a month. This will still be on our radar screen long after it&#8217;s off the crawler at CNN. This is going to be a long slog.&#8221;   </p>
<h3>Building the Deep, Big Picture</h3>
<p>The recovery from a disaster of this magnitude presents some important tasks in the sphere of information technology: coordination of effort, triaging those most in need, and getting good data into the hands of decision makers and aid workers.</p>
<p>Here&#8217;s a partial list of aid, relief, and rescue organizations currently in Haiti, gleaned from <a href="http://en.wikipedia.org/wiki/2010_Haiti_earthquake#Rescue_and_relief_efforts">Wikipedia</a>: </p>
<ul>
<li>An Argentine military field hospital</li>
<li>The Red Cross/Crescent, in various forms</li>
<li>The US military</li>
<li>Multiple UN agencies</li>
<li>Remnants of the Haitian government</li>
<li>The French navy</li>
<li>Sri Lankan relief workers</li>
<li>At least 2000 rescuers from 43 different groups (along with 161 search dogs)</li>
</ul>
<p>A wealth of collaborators like this presents some unique challenges around information fusion: unlike business competitors or opposing sides of a war, the different groups <em>want</em> to share as much information as possible to achieve their common goal.  A unified organization, like a single national military will have pre-existing methods to model and share their <a href="http://en.wikipedia.org/wiki/Situational_awareness">situational awareness</a>. That is not the case in Haiti: this is a collection of groups coming together to form an ad-hoc relief force. Everything from differences in human languages, database schema, collection methodology, and problem domain make most of the datasets seemingly disjoint from the others.</p>
<p>However, each organization has a produced a fairly detailed picture of the parts of Haiti that they are interacting with.  Each organization also wants to consume every other&#8217;s organization&#8217;s detailed knowledge of the situation.  To act effectively, they need to integrate that knowledge into a common operating picture that accurately models the situation on the ground yesterday, today, and tomorrow.</p>
<h3>Analyzing the Haiti situation using Palantir Government</h3>
<p>Our reaction to the earthquake was to try to help in the best way we knew how.  We set up a <a href="http://haiti.paas.palantirtech.com/">publicly available instance of our Palantir Government product</a>, already loaded with relevant data, for use by aid workers and organizations working in Haiti.  Using relevant, open-source data we&#8217;ve started modeling a picture of what&#8217;s going in Haiti.  </p>
<p>Our first cut was to include the locations and names of collapsed buildings, Internally Displaced People (IDP) camps, and Misson 4636 SMS messages, among others.  We also added in map layers that let us see what administrative zone any point on the map is located in.</p>
<p>Having mapped the data into this model, users have access to it through a suite of visualization, analysis, querying, and collaboration tools that allow them to get useful answers to practical questions.  Here are some examples:</p>
<ul>
<li>Which administrative sectors have had the most SMS requests for food in the past 24 hours?</li>
<li>What collapsed buildings are there that may contained hazardous materials that will require special cleanup?</li>
<li>Are any IDP camps near enough to these hazmat sites to warrant special precautions or moving the residents?</li>
</ul>
<p>We&#8217;ve created a video showing all the pieces put together into a seamless whole, using live data in our publicly available Haiti instance:</p>
<div style='text-align: center;'>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="id" value="banner" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="src" value="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=hhttp://media.palantirtech.com/government/videos/haiti/haiti2.flv" /><embed src="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/government/videos/haiti/haiti2.flv" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="480" movieurl="http://media.palantirtech.com/government/videos/haiti/haiti2.flv"/></object>
</div>
<h2>The Next Chapter: Flooding</h2>
<div style='float: right; margin-left:15px; margin-bottom: 15px; width: 300px; text-align: center;'>
<a href="/wp-content/uploads/2010/03/p-hti0508.jpg"><img src="/wp-content/uploads/2010/03/p-hti0508-thumb.jpg" alt="" title="p-hti0508" width="300" height="199" class="alignnone size-medium wp-image-1472" /></a><br/></p>
<div style='text-align: center; font-size: 0.8em'>A view of the water point at the Citee Renault camp  in Port-au-Prince, Haitii</div>
<div style='text-align: center; font-size: 0.6em'>Photo courtesy of Joe Lowry / IFRC / American Red Cross</div>
</div>
<p>From the <a href="http://www.redcross.org/portal/site/en/menuitem.1a019a978f421296e81ec89e43181aa0/?vgnextoid=0fe6e0b8da8b6210VgnVCM10000089f0870aRCRD">Red Cross website</a>: </p>
<blockquote><p>      “We’re racing against the clock with hurricane season just around the corner,” said Jean Pierre Taschereau, a Red Cross disaster expert just back from Haiti. “Getting semi-permanent structures in place as well as trenches for sanitation latrines will be critically important.”</p></blockquote>
<p>From <a href='http://www.abc.net.au/lateline/content/2010/s2844832.htm'>&#8220;Quake-ravaged Haiti faces flooding&#8221;</a>:</p>
<blockquote><p>
The UN wants to move 200,000 people out of overcrowded camps like this one. The Haitian government is trying to find land. It&#8217;s identified five sites outside of the Haitian capital, but those five sites are about 200 hectares and by the UN&#8217;s estimates 600 hectares will be needed to house the people it plans to move safely to have proper drainage when the rainy season finally arrives.
</p></blockquote>
<p>Haiti&#8217;s rainy season is notorious for causing flooding.  Now, with the infrastructure of the country destroyed, flood season will be more dangerous than usual.  Not only are the normal structures that protect people from the waters gone, but they&#8217;ve moved out of the ruins of Port-au-Prince to hastily constructed IDP camps, some of which are sitting in the flood plains of Haiti&#8217;s waterways.</p>
<p>The essential question facing relief workers: <em>Which of the approximately 2500 IDP camps are most at risk from flooding?</em></p>
<p>In a place like the United States, an earthquake response and recovery team could engage the services and expertise of the US Geological Survey,  which maintains the <a href="http://waterdata.usgs.gov/nwis">National Water Information System</a>, a warehouse of detailed information about all things water in this country. No such luck in Haiti, where the closest thing to the USGS is the <a href="http://www.cnigs.ht/">Centre National de l&#8217;Information Géo-Spatiale</a>.  A quick look at their website shows that they didn&#8217;t really make it through the earthquake. (In the video, we feature a picture of what&#8217;s left of their facility &mdash; it&#8217;s not pretty).</p>
<p>Since we&#8217;re starting from square one we put together data from the <a href="http://www.agc.army.mil/Haiti/index.html">Army Geospatial Center</a>, <a href="http://ochaonline.un.org/tabid/6412/language/en-US/Default.aspx">the UN</a>, <a href="http://www.noaanews.noaa.gov/stories2010/20100119_haiti.html">NOAA</a>, Haiti-based NGOs, a number of academic papers, and even <a href="http://www.flickr.com/photos/tags/earthquake/map?&#038;fLat=18.5873&#038;fLon=-72.3666&#038;zl=6&#038;order_by=recent">geo-tagged photos from Flickr</a>.  The time it took to integrate this data? About six hours.  Time it took to do the analysis?  About seven minutes.  Amount of that work that is reusable?  All of it.</p>
<p>Check out this video for a walk-through of the analysis:</p>
<div style='text-align: center;'>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="id" value="banner" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="src" value="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/government/videos/haiti/haiti_flooding.flv" /><embed src="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/government/videos/haiti/haiti_flooding.flv" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="480" movieurl="http://media.palantirtech.com/government/videos/haiti/haiti_flooding.flv"/></object>
</div>
<p>The best way to improve this analysis will be to add more detailed information about flooding, gathered from the field.  We&#8217;re looking into getting new conduits of information into the Haiti instance to make this a reality as the rains really pick up.</p>
<h2>A Call To Action</h2>
<p>If you&#8217;d like to help us, we&#8217;re accepting new data sources, analyses, and contact with relief organizations.</p>
<p>Volunteers, supplies, and goodwill are only the raw ingredients to recovery; it&#8217;s the efficient and timely application of those resources to Haiti&#8217;s most pressing problems that will change lives and make recovery a reality instead of just a good intention.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2010/04/05/haiti-effective-recovery-through-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Palantir Technologies Demo Reel: screenshots, round 3</title>
		<link>http://blog.palantirtech.com/2009/09/29/the-palantir-technologies-demo-reel-screenshots-round-3/</link>
		<comments>http://blog.palantirtech.com/2009/09/29/the-palantir-technologies-demo-reel-screenshots-round-3/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 18:53:27 +0000</pubDate>
		<dc:creator>Ari Gesher</dc:creator>
				<category><![CDATA[fun]]></category>
		<category><![CDATA[palantir]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=1185</guid>
		<description><![CDATA[Software engineering is a craft that blends science and art. This fact is easy to overlook as the artistic aspects are often eclipsed by discussions of the science and technology behind what we do. This is not one of those times: the art in software engineering is most evident when building compelling visual interfaces, something [...]]]></description>
			<content:encoded><![CDATA[<p>Software engineering is a craft that blends science and art. This fact is easy to overlook as the artistic aspects are often eclipsed by discussions of the science and technology behind what we do.</p>
<p>This is not one of those times:  the art in software engineering is most evident when building compelling visual interfaces, something Palantir knows a thing or two about. </p>
<p>A demo reel is an industry term in the movie business &mdash; a short reel that acts as a portfolio when applying for jobs, a highlight reel of the author&#8217;s visual career.  We&#8217;re not in the movie business, we&#8217;re in the software business.  We do, however, use moving pictures to tell stories, stories backed by data &mdash; this is our demo reel: two-and-a-half minutes of data visualization and user interface eye-candy (<i><span style='font-size: 0.9em'>It has pounding music &#8212; you may want to put on headphones or turn down your speakers.</span></i>):</p>
<div style='text-align: center;'>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="id" value="banner" /><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="src" value="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/palantir_demo_reel_final.mp4" /><embed src="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/palantir_demo_reel_final.mp4" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="480" movieurl="http://media.palantirtech.com/palantir_demo_reel_final.mp4"></embed></object>
</div>
<p><i><span style='font-size: 0.9em'>The movie will take a few seconds to load.  It&#8217;s 800&#215;600, so expanding to full-screen is suggested. We&#8217;ve done our best to create a streamable-yet-good-looking video.  The compression artifacts are there, but shouldn&#8217;t be too distracting.  In a real Palantir client, there are no compression artifacts and everything looks even better than it does here.</span></i></p>
<p>The Palantir family of products is much more that just pretty pictures; we have the <a href="http://www.palantirtech.com/government/videos/whitevideos">underlying intelligence infrastructure</a> to make those realtime animations possible and (more importantly) <b><i>meaningful</i></b>.  That said, we sure do think they&#8217;re pretty.</p>
<p>By the way, if you&#8217;re interested in the progression of our interfaces, this not the first time we&#8217;ve posted eye candy: we posted <a href="http://blog.palantirtech.com/2008/07/04/palantir-screenshots-round-two/">a set of updated screenshots</a> a little over a year ago; think of this as the next installment in the series.</p>
<p>And yes, it&#8217;s really all <a href="http://java.sun.com/docs/books/tutorial/ui/features/index.html">Java Swing</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2009/09/29/the-palantir-technologies-demo-reel-screenshots-round-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Palantir Finance Applied to Log4J Data</title>
		<link>http://blog.palantirtech.com/2009/08/26/palantir-finance-applied-to-log4j-data/</link>
		<comments>http://blog.palantirtech.com/2009/08/26/palantir-finance-applied-to-log4j-data/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 07:22:42 +0000</pubDate>
		<dc:creator>Andrew C.</dc:creator>
				<category><![CDATA[enterprise engineering]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=948</guid>
		<description><![CDATA[In a previous post, Eric W. covered how we analyze polled system health information. Now we’ll look at pushed information, in the form of logging events.

We had two problems to solve: how to store structured data with a logging message, and how to analyze the collected data.

Analysis is the easy part: just use Palantir! More details below the fold.]]></description>
			<content:encoded><![CDATA[<p>In a <a href="http://blog.palantirtech.com/2009/02/23/palantir-monitoring-server-where-build-beats-buy/" mce_href="http://blog.palantirtech.com/2009/02/23/palantir-monitoring-server-where-build-beats-buy/">previous post</a>, Eric W. covered how we analyze polled system health information.  Now we&#8217;ll look at <em>pushed</em> information, in the form of logging events.</p>
<p><strong>Use Cases &amp; Constraints</strong></p>
<p>We decided on three kinds of questions we wanted to answer:</p>
<ul>
<li>What is the health of the deployment?
<ul>
<li>Example: What errors have occurred in the last 24 hours?</li>
</ul>
</li>
<li>Which parts of the platform are our users engaged with?
<ul>
<li>Example: How much time do users spend in each application?</li>
</ul>
</li>
<li>How is our server performing over time?
<ul>
<li>Example: What is the average wait on a search query?</li>
</ul>
</li>
</ul>
<p>The chief constraint was that we build our platform on <a href="http://logging.apache.org/log4j/" mce_href="http://logging.apache.org/log4j/">Log4J</a>. We already use Log4J all over the project, so converting the logging was out of the question.  Besides, Log4J provides a guideline for the kind of metadata our events should support, and Log4J makes it easy to record events to a database.</p>
<p>That left us with two problems to solve: how to store structured data with a Log4j message, and how to analyze the collected data.</p>
<p>Analysis is the easy part: just use Palantir!  After all, a sequence of logging events has a lot in common with a time series.  The rest is explained below.</p>
<p><span id="more-948"></span></p>
<p><strong>Recording Structured Data</strong></p>
<p>Consider the problem of plotting usage by a user on a given day.  The simplest approximation is to log an event every time an application is closed, and provide the time spent in the application with that event.  Posting the information as an unstructured String&#8211;e.g. “Andrew spent 46 seconds in Chart&#8221;–makes it difficult to later extract the data for analysis.  To solve this problem we developed the class <code>RichLogEntry</code>.</p>
<p><code>RichLogEntry</code>s contain a human-readable message and tagged data in the form of a set of key/value pairs, such as {duration, 46}, {user, Andrew}.  This adds to the up-front cost since log messages become more complex, but the benefit is that the analysis engine can easily and generically access data in events.</p>
<p>Furthermore, <code>RichLogEntry</code> plays nicely with existing Log4J infrastructure.  <code>Logger</code>s in Log4J already accept an arbitrary <code>Object</code> to pass to <code>Appender</code>s, and Log4J’s default <code>Appender</code>s call <code>toString()</code> on the <code>Object</code>s provided.  For <code>RichLogEntry</code> the <code>toString()</code> is simply the human-readable message. So a call to the logging framework with a <code>RichLogEntry</code> would look like (pseudo-Java):<br />
<code><br />
logger.info( (“Andrew just spent 46 seconds in Chart”,<br />
{“duration” : 46.0, “application” : “Chart”, “user” : “Andrew”}) );<br />
</code></p>
<p>For most <code>Appender</code>s this would produce the human-readable <code>String</code>, but our custom <code>Appender</code> knows how to store the tagged data for later analysis.</p>
<p><strong>Example: Application Usage</strong></p>
<p>We implemented the above (i.e. log a &#8220;duration&#8221; message each time a Palantir application loses focus), and hooked in the data with a Palantir Data Provider plugin.</p>
<p>In the image below, we&#8217;re using our <a href="http://www.palantirfinance.com/apps/instrument.html">Explorer</a> application to analyze the logging data.  Our filter framework combines filtering and visualization into a single application.  The image contains three filters from top to bottom, each containing a blue title bar.  The results of each filter are fed into the filter below it:</p>
<ul>
<li>The top filter separates messages by application and displays statistics for each.  We&#8217;ve selected the Explorer application, so its 144 messages will be fed into the next filter.</li>
<li>The middle filter has a histogram of the number of seconds each Explorer instance was active (in log scale). Each &#8220;bucket&#8221; represents a range of durations, and its height is the number of messages with that duration.  It looks like I usually spend around 10 seconds in Explorer before switching windows. We&#8217;re selecting the gray part of the histogram to avoid skewing our results for the times I&#8217;ve gone <a href="http://en.wiktionary.org/wiki/AFK" mce_href="http://en.wiktionary.org/wiki/AFK">AFK</a> with Palantir running.</li>
<li>The bottom filter counts the number of log events over time.</li>
</ul>
<p><a href="/wp-content/uploads/2009/08/andrew-usage.png" mce_href="/wp-content/uploads/2009/08/andrew-usage.png"><img class="size-full wp-image-1093" src="/wp-content/uploads/2009/08/andrew-usage.png" mce_src="/wp-content/uploads/2009/08/andrew-usage.png" alt="Andrew's InstrumentGroup usage." width="664" /></a></p>
<p>In <a href="http://www.palantirtech.com/finance">Palantir Finance</a>, filters such as these can be saved and used anywhere in the platform.  Let&#8217;s do that, and compare my usage to my coworker Eric L&#8217;s.  Creating a new set of filters for Eric is easy&#8211;I just modify a single filter above to specify him instead of me (the filter isn&#8217;t shown for simplicity&#8217;s sake), and then save a new copy.  Our <a href="http://www.palantirfinance.com/apps/chart.html">Chart</a> application is a good place to view the two series side by side:</p>
<p><a href="/wp-content/uploads/2009/08/usage-comp.png" mce_href="/wp-content/uploads/2009/08/usage-comp.png"><img class="size-full wp-image-1098" src="/wp-content/uploads/2009/08/usage-comp.png" mce_src="/wp-content/uploads/2009/08/usage-comp.png" alt="Andrew and Eric's usage." width="664" /></a></p>
<p>Of course, I&#8217;m the harder worker!</p>
<p><strong>Conclusion</strong></p>
<p>Our logging framework is complete, and we&#8217;ve found many new use cases. We use the framework to:</p>
<ul>
<li>analyze performance metrics across builds of both Palantir products</li>
<li>automatically compile usage reports on deployed installations</li>
<li>import and explore exotic event data sets by running the events through Log4J</li>
</ul>
<p>Building the Log4J analysis framework was valuable, fun and easy; and it demonstrates the flexibility of Palantir Finance for working with arbitrary data sets.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2009/08/26/palantir-finance-applied-to-log4j-data/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VizWeek 2009: Awards and Workflow</title>
		<link>http://blog.palantirtech.com/2009/08/24/vast09award/</link>
		<comments>http://blog.palantirtech.com/2009/08/24/vast09award/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 11:00:01 +0000</pubDate>
		<dc:creator>Ari Gesher</dc:creator>
				<category><![CDATA[problemspace-government]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=1157</guid>
		<description><![CDATA[We put up a post last year on the 2008 VAST Grand Challenge. Well, the IEEE VAST Challenge 2009 is over and the awards are in. We had another strong year, scoring two awards: Grand Challenge: Analyst’s Tool Choice (Of 48 submissions, only 3 Grand Challenge awards were given) Intuitive Traffic Visualization and Video Description [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; margin-left: 15px; margin-bottom: 15px;"><img src="/wp-content/uploads/2009/08/vast2009.jpg" alt="" /></div>
<p>We put up a post last year on the <a href="http://blog.palantirtech.com/2008/07/21/we-bring-data-to-life/">2008 VAST Grand Challenge</a>.  Well, the <a href="http://hcil.cs.umd.edu/localphp/hcil/vast/index.php">IEEE VAST Challenge 2009</a> is over and the awards are in.  We had another strong year, scoring two awards:</p>
<ul>
<li><strong>Grand Challenge: Analyst’s Tool Choice </strong>(Of 48 submissions, only 3 Grand Challenge awards were given)</li>
<li><strong>Intuitive Traffic Visualization and Video Description of the Analysis Process</strong></li>
</ul>
<p>Some background on the event: three years ago, the <a href="http://ieee.org/portal/site">IEEE</a> began an annual conference called <strong>VAST</strong> (<strong>V</strong>isual <strong>A</strong>nalytics in <strong>S</strong>cience and <strong>T</strong>echnology).  The <a href="http://vis.computer.org/VisWeek2009/vast/index.html">VAST symposium</a> focuses on the fundamental research contributions and  real-world application of <a href="http://www.infovis-wiki.net/index.php/Visual_Analytics">visual analytics</a>.  As a part of the conference, the <a href="http://hcil.cs.umd.edu/localphp/hcil/vast/index.php">VAST Challenge</a> allows teams to compete on delivering analytic solutions against a synthetic real-world dataset.</p>
<p>A selection of choice quotes from the judges:</p>
<ul>
<li><em>An award for “highly usable integrated exploration environment”, “efficient analytic exploration platform” or something along these lines would be appropriate.</em></li>
<li><em>Survey Question: How much novelty do you see in this submission (data processing, visualization, interaction, hypothesis generation or evaluation, overall process, etc.)? Answer: More so than novelty was the <span style="text-decoration: underline;">extremely</span> efficient solution approach to this challenge, much more so than other solutions.</em></li>
<li><em>The submission shows two things very clearly: One, it shows the analytical process as being a multi-faceted, simultaneous processing of different information that is quite common among analysts. Two, it shows how multiple perspectives can be displayed on a single monitor, enabling the analyst to visualize what his mind is analyzing. Outstanding!</em></li>
</ul>
<h2>Our submission</h2>
<p>And finally, our submission to the Grand Challenge.  Here we have our overview video, with a link to the full video below:</p>
<div style="text-align: center;">
<p><object id="banner" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="640" height="480" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="src" value="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/government/videos/VAST2009/GC_Intro.flv" /><param name="allowfullscreen" value="true" /><embed id="banner" type="application/x-shockwave-flash" width="640" height="480" src="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/government/videos/VAST2009/GC_Intro.flv" allowfullscreen="true" bgcolor="#000000" quality="high"></embed></object></p>
</div>
<p>For an in-depth look at the data and techniques used to make this a reality, check out our full submission in <a href="http://www.palantirtech.com/government/analysis-blog/cyber-counter-intelligence"><em>Finding a Mole: Cyber Counter Intelligence</em></a> on the <a href="http://www.palantirtech.com/government/analysis-blog">Palantir Analysis Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2009/08/24/vast09award/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Model-View-Adapter</title>
		<link>http://blog.palantirtech.com/2009/04/20/model-view-adapter/</link>
		<comments>http://blog.palantirtech.com/2009/04/20/model-view-adapter/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 20:00:17 +0000</pubDate>
		<dc:creator>Kevin Simler</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[javatech]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[tips and tricks]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=210</guid>
		<description><![CDATA[I used to think I understood MVC. In undergraduate CS programs, MVC is taught as an off-the-shelf pattern, explained once and then ready for use in the real world. Wikipedia also makes it seem pretty simple: Model–View–Controller (MVC) is an architectural pattern used in software engineering. Successful use of the pattern isolates business logic from [...]]]></description>
			<content:encoded><![CDATA[<p>I used to think I understood MVC.  In undergraduate CS programs, MVC is taught as an off-the-shelf pattern, explained once and then ready for use in the real world.  Wikipedia also makes it seem pretty simple:</p>
<blockquote><p><a href="http://en.wikipedia.org/wiki/Model-view-controller">Model–View–Controller (MVC)</a> is an architectural pattern used in software engineering. Successful use of the pattern isolates business logic from user interface considerations, resulting in an application where it is easier to modify either the visual appearance of the application or the underlying business rules without affecting the other. In MVC, the model represents the information (the data) of the application; the view corresponds to elements of the user interface such as text, checkbox items, and so forth; and the controller manages the communication of data and the business rules used to manipulate the data to and from the model.</p></blockquote>
<p>They go on to show the classic triangle diagram and how it&#8217;s baked into various GUI and web frameworks.  There&#8217;s only one clause in the entire article that hints at something deeper:  &#8220;Though MVC comes in different flavors…&#8221;</p>
<p>Different flavors indeed.  In fact MVC is not just <em>a</em> pattern but a whole family of patterns:  <a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a>, <a href="http://en.wikipedia.org/wiki/Model-view-adapter">MVA</a>, <a href="http://en.wikipedia.org/wiki/Model_View_Presenter">MVP</a>, <a href="http://en.wikipedia.org/wiki/Presentation-abstraction-control">PAC</a>, <a href="http://c2.com/cgi/wiki?ModelDelegate">Model-Delegate</a>&#8230;.  It very quickly gets very hairy.</p>
<p>In this article I want to describe one of MVC&#8217;s lesser-known variants, the <a href="http://en.wikipedia.org/wiki/Model-view-adapter">Model-View-Adapter (MVA) pattern</a>, and talk about its advantages over traditional MVC in the context of a Java Swing application.</p>
<p><span id="more-210"></span></p>
<h2>Architecture</h2>
<p>The best place to start is with an architecture diagram.  While vanilla MVC is a triangle:</p>
<div class="postimg"><a href="/wp-content/uploads/2009/04/mvc.png"><img title="mvc" src="/wp-content/uploads/2009/04/mvc.png" alt="Model-View-Controller" /></a></div>
<p>MVA puts the Adapter in a position to strictly mediate between Model and View:</p>
<div class="postimg"><a href="/wp-content/uploads/2009/04/mva.png"><img title="mva" src="/wp-content/uploads/2009/04/mva.png" alt="Model-View-Adapter" /></a></div>
<p>Here a solid line represents a direct relationship while a dashed line represents an indirect relationship via the Observer pattern.  Put another way, the Adapter holds a pointer both to the Model and to the View and directly calls methods on both.  At the same time, it attaches itself as a listener both to the Model and to the View in order to receive events.  It receives property change events from the Model and action events (checkbox ticked, text entered, etc.) from the View, and then routes appropriate changes to the other side.  The Adapter is entirely responsible for keeping the Model and the View in sync; the Model and View are both relatively dumb structures, knowing nothing about the other.</p>
<p>The advantages to organizing code this way are:</p>
<ul>
<li>All &#8220;moving parts&#8221; are centralized in one place, the Adapter.  No worrying about where to add a listener; no hunting around to find isolated listeners.</li>
<li>Separation of concerns between the View and the Adapter.  The View is responsible for layout and visual presentation while the Adapter is responsible for synchronization and the dynamic aspects of the user interface.</li>
<li>Better decoupling between Models and Views.  Specifically, the View doesn&#8217;t need to know anything about the Model.</li>
</ul>
<p>Additionally, while it will never be possible to fully <a href="http://se.ethz.ch/~meyer/publications/patterns/visitor.pdf">componentize </a> any variant of the MVC pattern, MVA is more amenable to componentization and thus more of its implementation can be centralized (in a single class) and reused.  Once componentized, we can augment the basic functionality with things like:</p>
<ul>
<li>Automatic registration and unregistration of listeners when the View enters and exits the Swing component hierarchy, thereby preventing certain kinds of memory leaks.</li>
<li>Automatic unregistration of listeners when the program shuts down.  This can help free up resources like realtime subscriptions.</li>
<li>Method for swapping a new Model object in for an old Model object.</li>
<li>Ability to execute a task without listeners attached, to help prevent event-action-event loops.</li>
</ul>
<p>The downside to using MVA over MVC is that the Adapter tends to take on a lot of the responsibility and can get quite complicated.  But in my experience that can be mitigated by having good conventions about which pieces (M, V, A) are allowed to communicate with which other pieces and at what times.  Enforcing predictable control flow goes a long way toward managing complexity.</p>
<p>Read on for a code-level description of our implementation of the MVA pattern.</p>
<h2>Palantir MVA Implementation</h2>
<p>Our half-componentization of MVA resides in a single abstract class named Adapter:</p>
<pre class="brush: java; title: ; notranslate">
public abstract class Adapter&lt;ViewType extends Component, ModelType&gt; {
// constructor
protected Adapter(ViewType view, ModelType model); { ... }

/**
* Attach listeners to the View's subcomponents (checkboxes etc.).
* Listeners should be stored as member variables in the Adapter
* subclass.
*/
protected abstract void registerViewListeners();

/**
* Detach the same listeners (member variables) that were
* attached in registerViewListeners().
*/
protected abstract void unregisterViewListeners();

/**
* Attach listener(s) to the Model.
*/
protected abstract void registerModelListeners();

/**
* Detach the same listeners (member variables) that were
* attached in registerModelListeners().
*/
protected abstract void unregisterModelListeners();

/**
* Bring the View fully in synch with the Model.  Typically
* this involves querying state from the Model and
* reconfiguring subcomponents of the View accordingly.
*/
protected abstract void fullSynchronize();

protected ModelType getModel() { ... }
protected ViewType getView() { ... }

// other methods elided
}
</pre>
<p>New View components that want to stay synchronized with a Model must instantiate a subclass of Adapter and implement the abstract methods.  The Adapter parent class (itself an example of the Template Method design pattern) will then call into the appropriate abstract methods at the appropriate times.  For example, after the View is constructed, as soon as it&#8217;s displayed in the Swing component hierarchy the Adapter parent class will automatically call fullSynchronize() (whose implementation should bring the View in line with the Model) and then registerViewListeners() and registerModelListeners(), so the Adapter is poised to react to events.  Likewise, when the View is removed from the component hierarchy (when its containing frame is closed, say), both unregisterViewListeners() and unregisterModelListeners() will be called.  This can help ensure that no memory will be leaked when a long-life-cycle object (like a system-wide singleton) retains a pointer to a short-life-cycle object (the View) via the Observer pattern.</p>
<h2>Dealing With Listener Loops</h2>
<p>One problem that confronts UI developers is the problem of &#8220;listener loops&#8221;:  infinite loops that result when the View fires an event, the Adapter (or Controller) responds to it by setting some property on the Model, and an event is propagated from the Model back to the View, starting the whole cycle over again.</p>
<p>One way to combat this is to make sure your Model only fires events when the value that&#8217;s being set on the Model is different from the value currently stored in the Model.  (This will cut off the infinite loop after one and a half cycles.)  It&#8217;s a good practice but often isn&#8217;t enough, especially when your system is multithreaded and events start to queue up.  You can sometimes get into situations where an M-V-C triplet will thrash forever between two different values for one of the Model&#8217;s properties.</p>
<p>Our solution to this problem is a protected method (on our Adapter base class) called runWithoutViewListeners:</p>
<pre class="brush: java; title: ; notranslate">
/**
* Guarantees that the job r will be run:
*    - on the Swing thread
*    - with Model listeners attached
*    - with View listeners DEtached
*/
public final void runWithoutViewListeners(final Runnable r) { ... }
</pre>
<p>The implementation of this method checks to make sure the view listeners are attached when it&#8217;s called, detaches them via a call to unregisterViewListeners(), invokes the Runnable, then reattaches the view listeners via a call to registerViewListeners().  The code inside the Runnable can then make whatever changes it wants to the View without perturbing the Model downstream.  Listener loop averted!</p>
<h2>More To Come</h2>
<p>I hope that&#8217;s given you some sense of the territory out there in the wide world of MVC-variants.  In a week or two, Derek will show off some of the work he&#8217;s done on the M piece of the MVA triad related to &#8220;event bubbling.&#8221;  Stay tuned!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2009/04/20/model-view-adapter/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>VizWeek 2008: awards and workflow</title>
		<link>http://blog.palantirtech.com/2008/12/12/vizweek-2008-report/</link>
		<comments>http://blog.palantirtech.com/2008/12/12/vizweek-2008-report/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 09:15:28 +0000</pubDate>
		<dc:creator>Ari Gesher</dc:creator>
				<category><![CDATA[palantir]]></category>
		<category><![CDATA[problemspace-government]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=158</guid>
		<description><![CDATA[As we mentioned in an earlier post, Palantir was recently invited to the IEEE&#8217;s VisWeek in Dayton Ohio, and was honored to be invited to participate in the VAST Interactive Challenge as part of VisWeek. After winning an award for Interactive Visual Analytic Environment, Palantir was one of three teams selected to participate in the [...]]]></description>
			<content:encoded><![CDATA[<div style="float: right; width: 289px; text-align: right"><a href="http://vis.computer.org/VisWeek2008/"><img src="http://vis.computer.org/VisWeek2008/img/logo_vswk.jpg" alt="" /></a></div>
<p>As we mentioned in an <a href="http://blog.palantirtech.com/2008/07/21/we-bring-data-to-life/">earlier post</a>, Palantir was recently invited to the IEEE&#8217;s <a href="http://vis.computer.org/VisWeek2008/">VisWeek</a> in Dayton Ohio, and was honored to be invited to participate in the VAST Interactive Challenge as part of VisWeek.</p>
<p>After <a href="http://vgtc.org/wpmu/vast08/2008/11/04/grand-challenge-award-interactive-visual-analytics-palantir-the-future-of-analysis/">winning an award for Interactive Visual Analytic Environment</a>, Palantir was one of three teams selected to participate in the interactive session from 73 <a href="http://www.cs.umd.edu/hcil/VASTchallenge08/">VAST Challenge</a> entries.  For the challenge, we were given a completely new set of data to analyze.  We had 30 minutes to import 3 disparate datasets into Palantir, 30 minutes to train an analyst that had never used Palantir, and then 2 hours for the analyst to explore the data.</p>
<p>The data for the challenge came from three different sources, with a set of questions to answer for each set of data.  There was an infectious outbreak, a Wikipedia edit war, and an abduction from a city park.  Over the three challenges, there were over 100,000 datapoints to analyze.  All of the data revolved around a fictitious town in Florida, Barracuda Springs, and was linked to the fictitious cult that was the center of the 2008 VAST Challenge.  While two members of our team were importing the three datasets, the third team member was working with our analyst (each of the three teams was given a analyst from a nearby analytical organization).  In 30 minutes, our analyst was able to learn how to conduct relational, temporal, geospatial, and statistical analysis in Palantir.  After the 30 minutes of training, she was able to easily navigate the Palantir workspace, and solve all three challenges.  Below is her work (hit the link to check it out).</p>
<p>Her conclusion was that Palantir was “viciously good software” and that she would be asking her boss if they could acquire Palantir for their work.  Hit the link below to see screenshots and explanations for one of the challenge workflows.</p>
<p>We really enjoyed the VAST Challenge, and our experience at VisWeek.  There were a lot of outstanding papers, posters, and speakers at VisWeek, and we were inspired by many fantastic visualizations that might soon make their way into Palantir&#8217;s Finance and Government Platforms.  We are also looking forward to the <a href="http://www.cs.umd.edu/hcil/VASTchallenge09/">2009 VAST Challenge</a>!<br />
<span id="more-158"></span></p>
<h2>Challenge: Infectious Outbreak</h2>
<p>Our analyst started with the first challenge, analyzing an infectious outbreak in Barracuda Springs.  The notional source of this data was reported school absences, so we see gaps in the timeline for weekends.</p>
<h3>The Outbreak</h3>
<p>She started by searching for all infected houses, and then plotting them geospatially.  She immediately identified that the infection was a 5 week outbreak, peaking in week three, and then tailing off.  With Palantir&#8217;s temporal filters, she quickly identified the first house to have the disease was 208, on Thursday May 5th:</p>
<div class='postimg'><a href="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-outbreak-patient0.jpg"><img src="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-outbreak-patient0.jpg" width="640" /></a></div>
<h3>Week 1 &#8211; starting slow</h3>
<p>Increasing our temporal filter to the first week, we saw that the infection was in the north of Barracuda Springs, isolated in two neighborhoods (points on the map that correspond to selected time range in the timeline (bottom) are highlighted in yellow):</p>
<div class='postimg'><a href="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-week1.jpg"><img src="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-outbreak-week1.jpg" width="640" /></a></div>
<h3>Week 2 &#8211; burning bright in north</h3>
<p>The second week saw much of the north infected, but not yet into the south:</p>
<div class='postimg'><a href="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-week2.jpg"><img src="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-outbreak-week2.jpg" width="640" /></a></div>
<h3>Week 3 &#8211; everyone&#8217;s got it</h3>
<p>The third week shows the infection peaking, and moving to the rest of community. The analyst also noted that the neighborhoods from the first week appear to be clearing up:</p>
<div class='postimg'><a href="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-week3.jpg"><img src="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-outbreak-week3.jpg" width="640" /></a></div>
<h3> Week 4 &#8211; northside burnout</h3>
<p>By week 4, infections are exclusively in the south of Barracuda Springs, and in week 5 the infection clears up:</p>
<div class='postimg'><a href="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-week4.jpg"><img src="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-outbreak-week4.jpg" width="640" /></a></div>
<h3>Hidden Pattern: refusing treatment</h3>
<p>Also of interest was the fact that there are certain geographic areas where the infection lasts for 10 days.  This was an Easter egg put into the data &#8212; the areas of 10 day infections were neighborhoods in the city where the fictitious cult had settled, and they were refusing to take treatment.  Using the histogram, the data leaps out you. We were the only group to discover this:</p>
<div class='postimg'><a href="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-outbreak-cult-families.jpg"><img src="http://blog.palantirtech.com/wp-content/uploads/2008/12/visweek-workflow-outbreak-cult-families.jpg" width="640" /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2008/12/12/vizweek-2008-report/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Scatter Plot Quick Select</title>
		<link>http://blog.palantirtech.com/2008/09/16/scatter-plot-quick-select/</link>
		<comments>http://blog.palantirtech.com/2008/09/16/scatter-plot-quick-select/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 04:00:26 +0000</pubDate>
		<dc:creator>Brandon Burr</dc:creator>
				<category><![CDATA[user interface]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=112</guid>
		<description><![CDATA[I recently had the opportunity to attend a talk by Ben Shneiderman, a big name in HCI and professor at the University of Maryland. He showed off a bunch of really cool visualizations he&#8217;s invented over the years, aimed at advancing the field of data analysis. One of the visualizations, the Rank-by-Feature framework, looked immediately [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had the opportunity to attend a talk by <a href="http://en.wikipedia.org/wiki/Ben_Shneiderman">Ben Shneiderman</a>, a big name in HCI and professor at the University of Maryland. He showed off a bunch of really cool visualizations he&#8217;s invented over the years, aimed at advancing the field of data analysis. One of the visualizations, the <a href="ftp://ftp.cs.umd.edu/pub/hcil/Reports-Abstracts-Bibliography/2004-13html/2004-13.pdf">Rank-by-Feature framework</a>, looked immediately useful to our product.  It&#8217;s an overview of multidimensional data that uses coloring in a matrix of correlations. I decided to add it into Palantir Finance as a proof-of-concept.</p>
<p>We have a scatter plot in Palantir Finance, but it&#8217;s not designed to compare your data across many variables (called metrics here). I extended it by adding a small triangular matrix control that we call the scatter plot Quick Select. The control gives you a visual overview of the data, and allows you to identify interesting metric pairs and then drill down into a scatter plot for any particular pair.</p>
<p><a href='http://blog.palantirtech.com/wp-content/uploads/2008/09/quick-select.png' title='quick-select.png'><img src='http://blog.palantirtech.com/wp-content/uploads/2008/09/quick-select.png' alt='quick-select.png' /></a></p>
<p>Assume I want to view a set of 10 metrics (shown above). With our regular scatter plot, you have to choose two of these metrics and plot them to see their correlation. If you want to know how every possible pair of metrics correlate, you have to manually perform an <a href="http://en.wikipedia.org/wiki/Big_O_notation">O(n<sup>2</sup>)</a> input operation.</p>
<p>With Quick Select, you enter the metrics once and the triangular matrix is formed. Each square in the matrix represents a pair of metrics, and each square&#8217;s color is the correlation between the pairs.  For example, green is a strong positive correlation, light green a less positive correlation, white is no correlation, and red is a strong anti-correlation.</p>
<p>In the highlighted square above, we&#8217;re comparing <a href="http://en.wikipedia.org/wiki/Percent_return">percent return</a> and <a href="http://en.wikipedia.org/wiki/Correlation">correlation with the S&amp;P 500</a> over the past year.  The red shows a strong negative correlation.  This makes sense in light of recent market behavior: the S&amp;P 500 has not done well over the past year, so companies that were correlated with it also performed poorly, while companies that moved in the opposite direction performed well.</p>
<p>Drilling down to a scatter plot is as simple as clicking on the corresponding square.  Below are 2 of the 45 possible scatter plots defined by this set of 10 metrics. You can quickly jump back and forth between different scatter plots while retaining a nice, condensed overview of the data in the triangular matrix on the left.</p>
<p><a href='http://blog.palantirtech.com/wp-content/uploads/2008/09/quick-select-2.png' title='quick-select-2.png'><img src='http://blog.palantirtech.com/wp-content/uploads/2008/09/quick-select-2.png' alt='quick-select-2.png' /></a></p>
<p><a href='http://blog.palantirtech.com/wp-content/uploads/2008/09/quick-select-3.png' title='quick-select-3.png'><img src='http://blog.palantirtech.com/wp-content/uploads/2008/09/quick-select-3.png' alt='quick-select-3.png' /></a></p>
<p>This prototype took less than a day to write. And it was written from outside the system, using only the pluggability points Palantir Finance provides.  Overall it&#8217;s a powerful visualization component, added as an extension to the Palantir Finance platform, and done in under a day. Pretty cool!</p>
<p> Many thanks to Prof. Shneiderman for the idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2008/09/16/scatter-plot-quick-select/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

