<?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; fun</title>
	<atom:link href="http://blog.palantirtech.com/category/fun/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.palantirtech.com</link>
	<description>Articles from the Engineering Group at Palantir Technologies</description>
	<lastBuildDate>Fri, 23 Jul 2010 23:33:01 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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</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>The MultiSnake Challenge</title>
		<link>http://blog.palantirtech.com/2009/07/06/the-multisnake-challenge/</link>
		<comments>http://blog.palantirtech.com/2009/07/06/the-multisnake-challenge/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 20:00:20 +0000</pubDate>
		<dc:creator>Nick</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[enterprise software]]></category>
		<category><![CDATA[fun]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=997</guid>
		<description><![CDATA[
&#8220;Freaking lag!&#8221; It had started to become a common refrain around the developer pit. Listed as a project on a candidate&#8217;s resume, MultiSnake was a game that we had started to play during our coding breaks. The game was really quite fun &#8212; it was easy to play, games were short, and its multi-player nature fostered [...]]]></description>
			<content:encoded><![CDATA[<div style='float: right; text-align: right; width: 310px'><a href="/wp-content/uploads/2009/06/snake1.png"><img src="/wp-content/uploads/2009/06/snake1.png" alt="multisnake game" width="300" height="217" /></a></div>
<p>&#8220;Freaking lag!&#8221; It had started to become a common refrain around the developer pit. Listed as a project on a candidate&#8217;s resume, MultiSnake was a game that we had started to play during our coding breaks. The game was really quite fun &#8212; it was easy to play, games were short, and its multi-player nature fostered great competition. The only real drawback was that we seemed to experience network lag. There was nothing more infuriating than having your long snake die by running straight into a completely avoidable wall because the game lagged and didn&#8217;t respond to your keyboard commands in time. During one of our particularly lag-heavy games, someone yelled out a gripe that would change our MultiSnaking days for good: &#8220;Man, we could totally write this game ourselves, in our app.&#8221;</p>
<p><span id="more-997"></span>The gripe stuck around, and one day someone finally called out the person making the claim.  &#8220;Do you seriously think we could write this ourselves?&#8221;</p>
<p>&#8220;Sure, why not? We have all of the architecture that we need to make this work. We could do it in four hours.&#8221;</p>
<p>&#8220;I bet you we couldn&#8217;t.&#8221;</p>
<p>The rest of the story and a video of MultiSnake in action follows.<br />
<!--more--></p>
<h2>The Challenge</h2>
<p>A challenge was born. The task sounded fun, and it also provided us with a great chance to test the extensibility of our platform. Our most recent milestone had focused on solidifying the public APIs of our platform, and this challenge seemed like a way to test its pluggability. We also thought that it would be a great showcase to demonstrate how easily one could add capabilities to our platform &#8212; if we could write a multi-player network game using only the same public APIs available to our clients, it would be a strong signal that our framework was solid.</p>
<h2>The Rules</h2>
<p>Once we decided that we were going to take on the challenge, we decided that we would do it on Sunday from 8:00PM to midnight (our normal peak productivity hours) and laid out the following rules:</p>
<ul>
<li>There would be a strict four-hour time limit for all planning, design and coding.</li>
<li>The game had to be implemented using only our public APIs &#8212; no touching core code.</li>
<li>The game had to support all of the features provided by the online game and had to be lag-free (after all, that was the whole point of writing our own!).</li>
</ul>
<h2>The Race</h2>
<p>Sunday night came along, and it was off to the races! We projected a countdown timer onto a whiteboard in the middle of the developer space, blasted some techno music and got to work! Five developers decided to participate, and it was a pretty collaborative effort in which most of the participants ended up contributing in their standard roles &#8212; the frontend people did the game graphics and UI, the backenders worked on the server and game logic, and our data folks dealt with creating a game board provider.</p>
<p>The pluggability of our platform and the fact that it already had support for multiple users and sending out realtime messages from the server to clients made most of the work go pretty smoothly. Besides Eclipse crashing on one of our machines, development was pretty seamless and fast-paced, with team members yelling out at each other across the room to communicate. Within 45 minutes, most of us had finished our first iteration of code, and at the one hour mark we verified that we could successfully get the server and client communicating with each other and draw some game state. By the time we were two hours in, we had most of the core game features implemented, and once we hit the three hour mark we had a fully functional snake game that allowed us to play against each other. We spent the last hour doing some UI polish and ironing out a few bugs, and by the time midnight rolled around we had a fully functional MultiSnake implementation in our platform that was written using only our public APIs. We were even able to get in a few extra features such as a visible timer to count down to the end of the game, a circle to show where a snake respawned and a name that followed the snakes vertically to identify them. We celebrated by eating a rum cake that a coworker had brought in earlier and playing multiple rounds of lag-free MultiSnake against each other. Success!</p>
<h2>The Results</h2>
<div style='text-align: center'>
<object width="425" height="344"><param name="movie" value="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/misc/snake.flv"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
<embed src="http://www.palantirtech.com/_ptwp_live_ect0/wp-content/themes/ptcom/swf/fvp.swf?movieurl=http://media.palantirtech.com/misc/snake.flv" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>
</div>
<p>MultiSnake lives on as an add-on to our platform. Even after the challenge was completed, devs have been playing around with the code on slow weekends, adding extra maps, new features such as wormholes, and overhauling the graphics. The final product is a pretty impressive and fun-to-play game that we now often demo as an example of the versatility and power of the APIs for our platform.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2009/07/06/the-multisnake-challenge/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Palantir Build Contraption</title>
		<link>http://blog.palantirtech.com/2008/10/22/palantir-build-contraption/</link>
		<comments>http://blog.palantirtech.com/2008/10/22/palantir-build-contraption/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 20:01:57 +0000</pubDate>
		<dc:creator>Jon</dc:creator>
				<category><![CDATA[development process]]></category>
		<category><![CDATA[fun]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=140</guid>
		<description><![CDATA[Here at Palantir, we use continuous integration as one of our development practices. Part of this includes running automated builds and tests. This practice is quite common, and is useful because it gives immediate feedback on (some of) the software’s correctness.
How it usually works

Developers submit changes to the code base.
The continuous build system detects a [...]]]></description>
			<content:encoded><![CDATA[<p>Here at Palantir, we use <a href="http://en.wikipedia.org/wiki/Continuous_Integration">continuous integration</a> as one of our development practices. Part of this includes running automated builds and tests. This practice is quite common, and is useful because it gives immediate feedback on (some of) the software’s correctness.</p>
<h3>How it usually works</h3>
<ul>
<li>Developers submit changes to the code base.
<li>The continuous build system detects a problem and the build “breaks” (or “goes red”).
<li>All developers who made recent changes are notified via email.
<li>Someone (usually the guilty developer) locates and fixes the problem.
<li>The continuous build system verifies the corrected problem and “goes green”.
</ul>
<p>Ideally, the delay between failure and fix should be as short as possible. But failure notifications are typically sent by email, which can easily be overlooked or ignored. Clearly we can do better.<br />
<span id="more-140"></span></p>
<h3>The Palantir Way</h3>
<p>With some time, some hacking, and a little <a href="http://en.wikipedia.org/wiki/X10_(industry_standard)">home automation</a>, I came up with a simple visual notification system. Our continuous build process now has a few extra features:</p>
<ul>
<li>When the build breaks, a rotating red light (the “build light”) turns on for a few seconds.
<p><object width="500" height="377"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1862858&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=1862858&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="377"></embed></object></p>
<p>&nbsp;</p>
<li>A personalized build light next to the culprit&#8217;s desk turns on to get his/her immediate attention.
<p><object width="500" height="377"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1862875&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=1862875&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="377"></embed></object></p>
<p>&nbsp;</p>
<li>When the problem is fixed, we celebrate: a bubble machine rings in the joyous occasion.
<p><object width="500" height="377"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=1862881&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=1862881&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="377"></embed></object>
</ul>
<p>&nbsp;</p>
<p>The enhanced system relieves the need to constantly check email, and gives immediate feedback to those who need to be informed (it tends to stop home-bound developers in their tracks). Also, it brings a bit of entertainment to the environment, and serves as a convenient mechanism for public shaming <img src='http://blog.palantirtech.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2008/10/22/palantir-build-contraption/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Our offices: the birthplace of Java</title>
		<link>http://blog.palantirtech.com/2008/03/04/birthplace-of-java/</link>
		<comments>http://blog.palantirtech.com/2008/03/04/birthplace-of-java/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 23:35:39 +0000</pubDate>
		<dc:creator>Ari</dc:creator>
				<category><![CDATA[Java Links]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[palantir]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/2008/03/04/birthplace-of-java/</guid>
		<description><![CDATA[
Palantir started in a very small office on Sand Hill Rd.  For a time (while between offices), all work was done in a founder&#8217;s bedroom.  In late 2005, the Palantir moved to medium-sized, nondescript suite on Page Mill Rd., just across the street from Hewlett-Packard in south Palo Alto.  I joined a [...]]]></description>
			<content:encoded><![CDATA[<div class='postimg'><img src='/wp-content/uploads/2008/02/100hamilton.jpg' alt='100 Hamilton Ave., Palo Alto' /></div>
<p>Palantir started in a very small office on Sand Hill Rd.  For a time (while between offices), all work was done in a founder&#8217;s bedroom.  In late 2005, the Palantir moved to medium-sized, nondescript suite on Page Mill Rd., just across the street from Hewlett-Packard in south Palo Alto.  I joined a few months later, as the fifteenth employee.  Since that time, we&#8217;ve sextupled in size and we&#8217;re currently pushing a triple-digit headcount!</p>
<p>We almost ran out of space last year, but managed to find a fantastic office space in downtown Palo Alto, at the <a href="http://maps.google.com/maps?f=q&#038;hl=en&#038;geocode=&#038;q=100+Hamilton+Ave,+Palo+Alto,+CA+94301,+USA&#038;sll=37.446916,-122.161789&#038;sspn=0.008467,0.02708&#038;layer=c&#038;ie=UTF8&#038;ll=37.446976,-122.16387&#038;spn=0.008467,0.02708&#038;z=16&#038;iwloc=addr&#038;om=0&#038;cbll=37.44267,-122.16275&#038;cbp=1,444.46972166721275,,0,-3.003818584942289">intersection of Hamilton and Alma.</a>  At the time we acquired the space, we were told that it had been the home of Digital Equipment Corporation&#8217;s Western Research Lab.  I mentioned this to an acquaintance of mine who mentioned, offhandedly, that this same set of offices was where Java was developed.</p>
<p>A few weeks ago, I got curious about this potentially <a href="http://en.wikipedia.org/wiki/Dangling_pointer">dangling reference</a> and decided to see if I could transmute it from rumor into fact.  It sure would be neat if the fundamental technology that underlies our software was first developed in the very offices in which we work.</p>
<p>Some quick research confirmed the rumors and they&#8217;re all true! After the jump, the history of 100 Hamilton Ave.<br />
<span id="more-86"></span></p>
<h2>1982-1992: DEC&#8217;s Western Research Lab</h2>
<p>Before there was a Google, Microsoft, Apple, Sun, or Internet, there was Digital Equipment Corporation (aka DEC).  DEC built the <a href="http://en.wikipedia.org/wiki/Digital_Equipment_Corporation#16-bit_systems">PDP series of mini-computers that Unix was originally developed on</a>.  In later years, DEC built <a href="http://en.wikipedia.org/wiki/Altavista">AltaVista</a>, the first search engine that returned useful results quickly.  They did this to show off the power of their <a href="http://en.wikipedia.org/wiki/DEC_Alpha#History">Alpha microprocessor</a>, which was one of the first &#8220;commodity&#8221; 64-bit processors.</p>
<p>In the style of most tech behemoths, DEC funded a number of laboratories where researchers could work on basic science that would hopefully be turned into profitable technologies.  In 1982, DEC opened the Western Research Laboratory at 100 Hamilton Ave., in Palo Alto.</p>
<p>Their <em>raison d&#8217;être</em> is spelled out in the front matter from one of their technical reports:</p>
<blockquote><p>
The Western Research Laboratory (WRL) is a computer systems research group that was founded by Digital Equipment Corporation in 1982. Our focus is computer science research relevant to the design and application of high performance scientific computers. We test our ideas by designing, building, and using real systems. The systems we build are research prototypes; they are not intended to become products. </p></blockquote>
<p>As you may know, DEC was purchased by Compaq in 1998, who was then bought in some bizarre reverse-merger fashion by Hewlett-Packard. The full list of their published research is available on <a href="http://www.hpl.hp.com/techreports/Compaq-DEC/#wrl">the HP Labs website</a>.</p>
<p>People might assume that researchers in this field might be a dry humorless lot.  Not so!  In 1988, WRL publishes <a href="http://www.hpl.hp.com/techreports/Compaq-DEC/WRL-TN-13.pdf">Technical Note 13: Characterization of Organic Illumination Systems</a>, an experiment into the incandescent properties of three varieties of pickles, mandarin oranges, and bok choy.  The report includes instructions on making your own pickles as well as a discussion of the practical considerations of making glowing cucumbers commercially viable:</p>
<blockquote style='clear: both;'>
<h3>9. Practical considerations</h3>
<p>The primary advantage of pickles as light bulbs is that they can be eaten, either before or after providing illumination. Thus they are to be preferred for long sea voyages.  Pickles are also organically grown and so do not contribute to pollution.  However, whereas incandescent lamps can be manufactured by a single machine at a rate of 20 or 30 per minute [4], proper pickling takes several weeks and requires careful control [5]. Thus the challenge to economically exploit the rediscovery of pickle light sources comes down to developing techniques for the massive growing of cucumbers and efficient vast vats for pickling. This may be an excellent industry for the Developing world.
</p></blockquote>
<p>For those of you wondering what an incandescent pickle looks like, YouTube is here to help you out:</p>
<div style='width: 100%; text-align: center'><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/tMhXCG6k6oA&#038;rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/tMhXCG6k6oA&#038;rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></div>
<p>The legacy of this experiment lived on inside DEC for years.  From the Wikipedia page on the DEC Alpha:</p>
<blockquote><p>
Officially, the Alpha processors were designated the DECchip 21&#215;64 series, the &#8220;21&#8243; signifying the 21st century, and the &#8220;64&#8243; indicating 64 bits, with the middle digit corresponding to the generation of the Alpha architecture. Internally, Alpha processors were also identified by EV numbers, EV officially standing for &#8220;Extended VAX&#8221; but having an alternative humorous meaning of &#8220;Electric Vlasic&#8221;, giving homage to the Electric Pickle experiment at Western Research Lab.</p></blockquote>
<p>The Western Research Lab ultimately produced some slightly more useful innovations, like AltaVista (in 1995, after they had moved around the corner).</p>
<h2>1993-1997: Javasoft</h2>
<p>Sometime in 1992, DEC moved the Western Research Lab a few blocks away to 250 University Ave.  The world did not yet know Java.  At that time, the Java team was known as &#8220;The Green Team&#8221; and were working in relative seclusion from the rest of Sun, on the fourth floor of the Bank of America building on Sand Hill Road.</p>
<p>Around 1993, the Green Team demoed the *7 (&#8221;star seven&#8221;), a hand-held computer running an early version of Java (then known as &#8220;Oak&#8221;) on top of a stripped down version of <a href="http://en.wikipedia.org/wiki/SunOS">SunOS</a>.</p>
<p>Building on the momentum of that demo, the Green Team formed FirstPerson, a wholly owned subsidiary of Sun. FirstPerson was working on building and promoting the Oak technology (not yet officially named Java), focusing primarily on the cable set-top box market.  The team expanded to about 100 people and moved into the offices that are currently occupied by Palantir.  <a href="http://www.blinkenlights.com/classiccmp/javaorigin.html">As one of the earliest Java developers recalls</a>:</p>
<blockquote><p>
We moved the company to the best location in the entire south bay. The old DEC Western Research Lab at 100 Hamilton Avenue in Palo Alto. This is ironically where the OSF, Open Software Foundation was formed by the &#8220;Hamilton Group&#8221; before they came up with what Scott always called &#8220;Oppose Sun Forever&#8221;. Six blocks of the finest restaurants in the Bay Area, CalTrans across the street for the San Fran commuters, and the nicest looking office buildings around. Things were looking up.</p></blockquote>
<p>Javasoft occupied 100 Hamilton for a very exciting four years before being re-assimilated into the Sun mothership.  During that time Java was named, introduced, released to world, and worked through three major revisions of the platform (1.0, 1.1, and 1.2).</p>
<p>This interview with Sami Shalo from JavaWorld&#8217;s October 1996 issue (no longer available online) has the details:</p>
<blockquote><p><em>JavaWorld</em>: What is your recollection of the meeting in which the word &#8220;Java&#8221; was chosen as the name of Sun&#8217;s new programming environment? Where was it held and when?</p>
<p><em>Shaio</em>: Oh, boy. Well let me look through my extensive archives. The meeting was held at the &#8220;TestPattern&#8221; conference room in &#8220;PAL2,&#8221; which is the building at 100 Hamilton Ave., where all the Java-Internet thing happened. It&#8217;s also the infamous building where OSF started, when it was known as the &#8220;Hamilton Group.&#8221; I believe the meeting was held in perhaps January of 1995.
</p></blockquote>
<h2>2007 &#8211; ?: Palantir Technologies</h2>
<p>Palantir started operations at 100 Hamilton in October of 2007.  We love our new home, especially having lunch out on our third-floor kitchen balcony.  In the grandest Silicon Valley tradition, we&#8217;re living the dream of working hard and playing hard, moving the state of the art forward, one line of code at a time.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2008/03/04/birthplace-of-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Realtime Swing reflections (iTunes ain&#8217;t the only kid on the block)!</title>
		<link>http://blog.palantirtech.com/2007/05/25/reflection/</link>
		<comments>http://blog.palantirtech.com/2007/05/25/reflection/#comments</comments>
		<pubDate>Fri, 25 May 2007 23:00:25 +0000</pubDate>
		<dc:creator>Carl</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[swing]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/?p=51</guid>
		<description><![CDATA[
Check out this reflection magic!  Now iTunes isn&#8217;t the only one with fancy reflections on album art.  The best part about it is that it&#8217;s a general use component that doesn&#8217;t require customization each time.  It can wrap any transparent JComponent and it will automatically repaints whenever the contained component changes.  [...]]]></description>
			<content:encoded><![CDATA[<div style=' float: left; margin-right: 20px; margin-top: none; margin-bottom: 20px;'><a href='http://blog.palantirtech.com/wp-content/uploads/2007/03/reflectiondemo.jnlp' title='ReflectionDemo Webstart Launch file'><img src='http://blog.palantirtech.com/wp-content/uploads/2007/05/reflection-clean.png' alt='Achtung Baby reflected' /></a></div>
<p>Check out this reflection magic!  Now iTunes isn&#8217;t the only one with <a href="http://www.apple.com/itunes/jukebox/coverflow.html">fancy reflections on album art</a>.  The best part about it is that it&#8217;s a general use component that doesn&#8217;t require customization each time.  It can wrap any transparent <a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JComponent.html">JComponent</a> and it will automatically repaints whenever the contained component changes.  You see the text appearing in the reflection as you type in the text field.  Try the <a href='http://blog.palantirtech.com/wp-content/uploads/2007/03/reflectiondemo.jnlp' title='ReflectionDemo Webstart Launch file'>Web Start ReflectionDemo</a>.  Source code is provided in <a href='http://blog.palantirtech.com/wp-content/uploads/2007/03/reflectiondemo.jar' title='Reflection Demonstration application'>reflectiondemo.jar</a>, and an explanation of how it&#8217;s done follows.<br />
<span id="more-51"></span><br />
This component is a combination of several techniques:</p>
<ul>
<li>Image fading.
<li>Applying a transform so the contained component is painted upside down.
<li>Active update accomplished by, <b>*<i>gasp</i>*</b>, calling repaint during <a href="http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JComponent.html#paintComponent(java.awt.Graphics)">paintComponent</a>!
</ul>
<h2>Fading images</h2>
<p>You can paint colors/lines/solid shapes/etc using a <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/GradientPaint.html">GradientPaint</a> to create an object that fades from solid to transparent as we desired, but getting a complex graphic to do the same thing didn&#8217;t seem possible until we learned about <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/AlphaComposite.html#DST_IN">AlphaComposite.DST_IN</a>,  (see our <a href="http://blog.palantirtech.com/2007/03/27/custom-alpha-compositing/">previous blog posting</a> on the subject).  It&#8217;s a class that, instead of blending two images together, allows you to use the color bytes from one image and the alpha from the second image.  This technique allowed me to composite together a fully opaque picture of a component with a rectangle of black painted using a standard Gradient paint.</p>
<p>Imagine the icon upside down and you&#8217;ll see what I&#8217;m trying to accomplish here.</p>
<p><a href='http://blog.palantirtech.com/wp-content/uploads/2007/03/thepalantirway.png' title='SourceAlphaComposite'><img src='http://devblog.yojoe.local/wp-content/uploads/2007/03/thepalantirway.png' alt='SourceAlphaComposite' /></a></p>
<h2>Inverting the component</h2>
<p>The reflection is obtained by applying transforms to a <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Graphics.html">Graphics</a> object, then permitting the reflecting component to paint itself to a <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/BufferedImage.html">BufferedImage </a>instead of the supplied Graphics instance.  This results in a copy of the contained component painted upside down in a separate <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/BufferedImage.html">BufferedImage</a>.    After compositing using the above technique, you get something that looks like the component but upside down and faded with whatever <a href="http://java.sun.com/j2se/1.5.0//docs/api/java/awt/GradientPaint.html">GradientPaint </a>you used.</p>
<p>You can paint upside down to the supplied Graphics, of course.  However, if you want the fading effect to apply only to the contained component, you need to isolate it on a separate <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/image/BufferedImage.html">BufferedImage </a> until it&#8217;s fully prepared.</p>
<p>In the below snippet of code, reflG2D is the <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Graphics2D.html">Graphics2D</a> of the offscreen buffer that holds the reflection so that it may be faded before painting to screen.  The scaling step causes all y-coordinates to be multiplied by -1, so when you paint the children of ReflectionComponent to reflG2D, source paints itself upside down.</p>
<p>Look out, though, that means the paint which would normally be (0,0) -&gt; (source.getWidth(), source.getHeight())</code> is now (0,0) -&gt; (source.getWidth(), -source.getHeight()).  You've just painted outside the boundaries of the image so you translate down to put it in the visible region.  The rest of the translation ensures proper painting even if source isn't at (0,0) due to insets or the layout manager.</p>
<pre class="brush: java;">
	Insets i = getInsets();
	reflG2D.scale(1,-1);
	reflG2D.translate(-source.getX(), - (source.getHeight()+i.top));

	super.paintChildren(reflG2D);

	reflG2D.translate(source.getX(), (source.getHeight()+i.top));
	reflG2D.scale(1,-1);
</pre>
<p>Don't forget to undo the changes you made so the fade operations can be done without being affected by the inversion/translation.</p>
<h2>Active update of the reflection</h2>
<p>This is a bit sketchy but too cool to pass up.  I've seen several reflection component examples out there, but they don't seem to do active update, so here it is.  There's no event that fires to report when repaints occur (I suppose Sun engineers figured it was just too likely to be abused).  They're probably right.  So I abused <i>opacity</i> instead.  When a component is marked for repaint and it is transparent (i.e. isOpaque() == false), then the parent of said component will be repainted as well.  So, if everything contained in a ReflectionComponent is transparent, then ReflectionComponent itself will repaint every time the contained object does so.  The only hurdle to overcome is the crop -- the dirty region will never automatically include the reflection region because the reflection lies outside the bounds of the contained component.  This makes it necessary to call repaint on the reflection region as well.  Basically it doubles up on every repaint, not something you REALLY want to do all over the place but it does the job.</p>
<p>Here's how I did it:</p>
<pre class="brush: java;">
public void paintComponent(Graphics g) {
	...
	Rectangle r = g.getClipBounds();
	if( (r.y+r.height) &lt; (getHeight() - 1) ) {
		repaint(r.x, r.y, r.width, getHeight() - r.y);
	}
	...
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2007/05/25/reflection/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Music for coding</title>
		<link>http://blog.palantirtech.com/2007/01/25/music-for-coding/</link>
		<comments>http://blog.palantirtech.com/2007/01/25/music-for-coding/#comments</comments>
		<pubDate>Fri, 26 Jan 2007 01:10:55 +0000</pubDate>
		<dc:creator>Ari</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[fun]]></category>

		<guid isPermaLink="false">http://blog.palantirtech.com/2007/01/25/music-for-coding/</guid>
		<description><![CDATA[It&#8217;s amazing to me how much the music I&#8217;m listening to defines my energy level and output.  Couple that with the open office environment we have at Palantir, and I end spending a good portion of the work day listening to music on my headphones. I often use different music for coding than debugging, [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s amazing to me how much the music I&#8217;m listening to defines my energy level and output.  Couple that with the open office environment we have at Palantir, and I end spending a good portion of the work day listening to music on my headphones. I often use different music for coding than debugging, as the tempo of the two activities feels very different to me. As my coworkers know, I&#8217;m a total beat-head and lover of drum machines, but even within that, I like to mix it up a bit.  Here&#8217;s a quick list of the internet radio I like to listen to while coding:</p>
<ul>
<li><a href="http://www.hbr1.com/">HBR1</a> &#8211; the crazy Germans at HBR1 give us <a href="http://en.wikipedia.org/wiki/Psychedelic_trance">Psytrance</a> on tap, probably the most driving of all the genres.  The <a href="http://www.hbr1.com/playlist/trance.m3u"><em>I.D.M. Tranceponder</em> Stream</a> stream is pretty consistently driving and great to code to.</li>
<li><a href="http://protonradio.com/">Proton Radio</a> &#8211; really good house music.  Probably the best on the web. Consistently good to code to, slightly less energetic than the HBR1 pystrance streams. <a href="http://www.protonradio.com/proton.m3u">[stream link here]</a>.</li>
<li><a href="http://somafm.com/">SomaFM</a> &#8211; an grand old institution of internet radio, SomaFM is operated out of San Francisco and has streams for every taste.  People like Brien, who like things a bit more chill, love their famous flagship stream, <a href="http://somafm.com/groovesalad.pls">Groove Salad</a>.  Their trance stream, known as <a href="http://somafm.com/tagstrance.pls">Tag&#8217;s Trance Trip</a> is similar to HBR1&#8217;s channels, but slightly less psy and a bit more classically trance-ish.  There&#8217;s a are 11 different streams coming out of SomaFM, all worth checking out.
</li>
<li>
<a href='http://www.di.fm/'>Digitally Imported Radio</a> &#8211; they have a whole bunch of streams, without fancy names, split by genre.  I&#8217;m personally a fan of their <a href="http://www.di.fm/mp3/house.pls">house</a> and <a href="http://www.di.fm/mp3/breaks.pls">breaks</a> streams, but there are many more.
</li>
<li><a href="http://breaks.fm/portal.php">BreaksFM</a> &#8211; Breaks out of the UK.  This station has some great underground, really big breaks.  Occasionally, there&#8217;s a little too much talking by the DJ over the stream, but the music so exceptional, it more than makes up for it.  Stream links: <a href="http://breaks.fm/hifi.m3u">Channel 1</a> <a href="http://stream002.breaks.fm:9000/listen.pls">Channel 2</a>.
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.palantirtech.com/2007/01/25/music-for-coding/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.hbr1.com/playlist/trance.m3u" length="27" type="audio/x-mpegurl" />
<enclosure url="http://www.protonradio.com/proton.m3u" length="467" type="audio/x-mpegurl" />
<enclosure url="http://somafm.com/groovesalad.pls" length="0" type="audio/x-scpls" />
<enclosure url="http://somafm.com/tagstrance.pls" length="0" type="audio/x-scpls" />
<enclosure url="http://www.di.fm/mp3/house.pls" length="2683" type="audio/x-scpls" />
<enclosure url="http://www.di.fm/mp3/breaks.pls" length="388" type="audio/x-scpls" />
<enclosure url="http://breaks.fm/hifi.m3u" length="57" type="audio/x-mpegurl" />
		</item>
	</channel>
</rss>
