<?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>Pure Danger Tech</title>
	<atom:link href="http://tech.puredanger.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://tech.puredanger.com</link>
	<description>Alex Miller&#039;s technical blog</description>
	<lastBuildDate>Wed, 01 Sep 2010 05:42:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>My uncle Al</title>
		<link>http://tech.puredanger.com/2010/08/31/my-uncle-al/</link>
		<comments>http://tech.puredanger.com/2010/08/31/my-uncle-al/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 05:36:29 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[goodbye]]></category>

		<guid isPermaLink="false">http://tech.puredanger.com/?p=527</guid>
		<description><![CDATA[[Note: This is ridiculously long for a blog entry and entirely personal in nature.  It was written on a plane about 18 months ago where the people next to me no doubt thought something was horribly wrong with me to be writing and crying on a plane.  In any case, I release it [...]]]></description>
			<content:encoded><![CDATA[<p><em>[Note: This is ridiculously long for a blog entry and entirely personal in nature.  It was written on a plane about 18 months ago where the people next to me no doubt thought something was horribly wrong with me to be writing and crying on a plane.  In any case, I release it now...]<br />
</em></p>
<p>This weekend I traveled to Portland for the <a href="http://audubonportland.org/news/al">memorial service</a> of my uncle, Al Miller.  Al was a special guy and I wanted to write down some of the things I&#8217;ve been thinking about since his death, especially after being surrounded by his large and loving group of family and friends.  </p>
<p>It&#8217;s hard not to start talking about Al without talking about polycystic kidney disease.  Most people develop PKD later in life and may not even know they have it.  But Al started showing symptoms when he was just 12 or 13 years old.  He and my dad Jim were tested at about that time and my dad was told he had a mild case but my uncle had an acute case.  This was the first time doctors told Al that he wasn&#8217;t going to live that long.  </p>
<p>My grandfather also had PKD disease and died a few years later.  My grandmother Vesta had to start teaching to make ends meet and they were very poor for several years, apparently living on not more than onion sandwiches if my dad is to be believed.  Jim and Al didn&#8217;t have a lot of supervision and spent most of their days wandering rural Missouri on the outskirts of Sedalia, doing what boys do when left unattended.  </p>
<p><center>
<p><img src="http://puredanger.com/techfiles/090425/760800v006.JPG" alt="Al, me (the little guy), my dad, and my grandmother (1976)" height="250"/><br />
<em>Al, me (the little guy), my dad, and my grandmother (1976)</em></p>
<p></center></p>
<p>I&#8217;ve heard just hints of many stories from this time &#8211; tales of BB guns, firecrackers, girls, and the things boys naturally get follow when allowed to run free and wild.  According to my dad, Al was the most brave and fearless person he ever met.  Al and Jim used to sneak out in the middle of the night and roll the car down the road to start it and then go on hair-raising joy rides through the back roads, probably nearly killing themselves more than once.  </p>
<p>I don&#8217;t know a lot about Al in those younger years but I know he played basketball (wearing a fiberglass brace to protect his kidneys) and the string bass.  He ultimately went to college at Central Methodist University in Missouri where he made a name for himself as part of a group that staged a sit-in of the administration building in support of a teacher.  He was invited not to return. :)  </p>
<p>Al moved to Portland after that and lived there for the rest of his life.  It was clear to me from his service that he spent the next forty years in Portland participating in, and perhaps more importantly, building communities around his passions. </p>
<p>Al&#8217;s early years in Portland were spent at Oregon State and eventually he became involved with the Oregon Gaming Commission as a photographer.  He was also making the connections at this time that would grow into his love for nature and conservation.</p>
<p>In his early 20&#8217;s, he received his first kidney transplant which lasted just eight months or so before it rejected.  Soon after he received his second kidney transplant which would last many years.  Al was a passionate believer in organ donation and he frequently asked me whether I had signed my organ donor card.  Donors gave him a total of three kidneys over his life and by extension helped so many people.  </p>
<p>My early memories of Al are happy ones as we usually saw him on holidays at my grandmother&#8217;s house or occasionally vacation trips out to the west coast.  Once we rented a cabin with Al out on the Oregon coast.  My memories are fleeting but I remember bunk beds, reeds, and the stark Oregon coast.  I also remember meeting them to camp at Crater Lake once and sitting around the fire telling stories.  </p>
<p>Al was always full of stories as anyone who knows him can attest.  He told wonderful, funny, touching stories.  It was hard to tell how much of them were actually true, but that made them no less enjoyable. :)  The oldest story I can remember him telling us was one about my dad when they were kids.  They shared a room and when my dad got up to go to the bathroom in the middle of the night, Al would jump up and close the door to their room.  My dad would come running back from the bathroom and slam into the door.  According to my uncle, he pulled this trick on my dad for years, although that may have been an Al embellishment. </p>
<p><center>
<p><img src="http://puredanger.com/techfiles/090425/114_1461.JPG" alt="My dad, me, and uncle Al after burying the ashes of my grandmother" height="250"/><br />
<em>My dad, me, and uncle Al after burying the ashes of my grandmother</em></p>
<p></center></p>
<p>In 1980 he inevitably (due to their interests and the circles they traveled in) met my aunt, Beth Parmenter.  It&#8217;s hard to imagine two people better suited in temperament and interests and clearly they were made to be together.  They married in 1985 in the Washington DC area where Beth&#8217;s parents lived.  I was at the wedding (I was about 11 or 12) and I don&#8217;t remember too much of it except that it was very personal and joyful.  I think it was the first time I ever wore a suit.  </p>
<p><center>
<p><img src="http://puredanger.com/techfiles/090425/114_1477.JPG" alt="Al, Beth, and my daughter in 2003" height="250" /><br />
<em>Al, Beth, and my daughter in 2003</em></p>
<p></center></p>
<p>As many people attested at the memorial service, Al was masterful at having a vision for what should be done and then convincing other people to get involved.  I don&#8217;t know the full extent of everything he was involved in over the years but I met people from all sorts of groups and projects and many of them had gotten involved because Al had gotten them involved and excited.  Al was a tireless advocate for conservation, the environment, birding, and various political causes.  He loved to get people together with potlucks, clear trails, and was always willing to help others if they needed a hand.  </p>
<p>Al had a way of talking with people that just drew them out and made them feel special.  Going places with him was a trip because you never know when he was going to grab some guy in the street or a restaurant and get into some crazy conversation about hats or yo-yos or who knew what.  He made connections with people like breathing in a way I always envied.  </p>
<p>One of the unifying things many people shared with Al was his love of food and cooking.  He loved to chat someone up in a restaurant on the way to a table to find out about what they were eating.  I think he would have sat down at someone&#8217;s table and tried it if someone hadn&#8217;t pulled him along.  Every time Al ever cooked a meal around me, he got me to help all the while talking away a mile a minute about the ingredients, where he&#8217;d learned the recipe, some amazing meal he&#8217;d had somewhere.  </p>
<p>Before I was engaged, my wife and I took a trip to the northwest and we crashed on Al and Beth&#8217;s floor for a couple days.  He made me his famous salmon, which primarily involves drenching it in butter and parmesan, sealing it in foil, and baking on a grill.  There was a lengthy story that went with the recipe that involved learning it from an indian in the backwoods somewhere.  According to his wife, some of the elements of the story were even true. :)</p>
<p>Al loved kids.  He had such a child-like love of the world and life that he seemed to naturally connect at a level most people don&#8217;t, especially people without their own kids.  Al and Beth served as surrogate babysitters/aunt+uncle/friend to countless kids of their friends.  Over the years I heard about them often from Al and Beth and met some on my occasional trips to Portland.  They called him &#8220;Uncle Al the Kiddies Pal&#8221;.  In his later years Al bought a tiny red Ford truck he called the Little Red Ranger and the kids loved that truck as much as he did.  It is one of my great regrets that my kids never got to know Al or love him the way other kids did.</p>
<p><center>
<p><img src="http://puredanger.com/techfiles/090425/114_1426.JPG" alt="Me, my daughter, and uncle Al (2003)" height="250"/><br />
<em>Me, my daughter, and uncle Al (2003)</em></p>
<p></center></p>
<p>At some point, Al got into woodworking and eventually was a teacher at a woodworking school in Oregon.  Clearly, he had both a natural talent for the craft and the eye of an artist based on his pieces.  He made many beautiful things over the years but most famously a series of &#8220;dieter&#8217;s candy dish&#8221; tables.  Each table featured a candy dish along with mortal hazards that had to be bested to get the candy.  Some had dishes pierced with iron or blue spikes.  One was a low wobbly table that moved if you tried to brace yourself while reaching over it.  Another was a monkey&#8217;s paw where you could grab the candy but not pull your hand back out while holding it.  Some common elements he used a lot were twisted wood and large numbers of spikes, often piercing another surface.  I think one of the things Al loved so much about woodworking or kids or cooking was his love for teaching and involving others. He had a natural desire to always be sharing and wanting others to learn.  And he loved learning from others as well.  </p>
<p>One final aspect of Al I wanted to mention was music.  I&#8217;ve always had a passion for music and Al always had a deep love of music and I found a connection with him there.  Over the years I sent Al and Beth a number of mixed CDs with fun stuff I was listening to and I&#8217;ve heard he spent many hours listening to those and other CDs.  When Al listened to music he really listened to it, often just sitting in a chair with headphones and not splitting his attention as many people do, but rather really focusing on the music.  As far as I can tell, his musical interests were widely varied and he had little concern for genre.  I always felt quite free to send him mixed CDs that ran the gamut from classical to jazz to rock, whatever I thought was good.  </p>
<p>In particular, I&#8217;m thankful that he got me listening to Lyle Lovett.  Someone Beth knows knew the cello player for Lyle Lovett and so they were big fans early in his career and at some point Al introduced me to them too.  Lyle has always been a favorite of my wife and I and we ultimately chose to dance to a Lyle Lovett song at our wedding.  I&#8217;m sure that wouldn&#8217;t have happened without the recommendation from Al years earlier.  </p>
<p>Al touched many people throughout his life and his memorial service was a wonderful tribute with people from all times in his life present.  I heard so many stories and I&#8217;m already sorry I&#8217;ve forgotten so many.  Hopefully I captured a few here.  Al&#8217;s enduring love of people, learning, teaching, sharing, and his belief in the ability to change the world were always inspiring.  I won&#8217;t forget him.  I love you Al.  </p>
]]></content:encoded>
			<wfw:commentRss>http://tech.puredanger.com/2010/08/31/my-uncle-al/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Clojure multi-methods</title>
		<link>http://tech.puredanger.com/2010/08/21/clojure-multi-methods/</link>
		<comments>http://tech.puredanger.com/2010/08/21/clojure-multi-methods/#comments</comments>
		<pubDate>Sat, 21 Aug 2010 17:55:48 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Clojure]]></category>
		<category><![CDATA[how to]]></category>

		<guid isPermaLink="false">http://tech.puredanger.com/?p=924</guid>
		<description><![CDATA[A friend asked me a question about multi-methods and since the response was long-ish, I&#8217;m dumping it here in case it helps someone else:
Question:  &#8220;Is it possible to write a multimethod that has defmethods which handle ranges of values?  For example, say that a person has an age. Can I write a  [...]]]></description>
			<content:encoded><![CDATA[<p>A friend asked me a question about multi-methods and since the response was long-ish, I&#8217;m dumping it here in case it helps someone else:</p>
<p><strong>Question:  </strong>&#8220;Is it possible to write a multimethod that has defmethods which handle ranges of values?  For example, say that a person has an age. Can I write a  multimethod that accepts a person as a parameter and returns &#8220;child&#8221; if age < 16, "adult" if 16 <= age < 66 and "senior" if age >= 66?&#8221;</p>
<p><strong>Answer:</strong></p>
<p>Sure &#8211; how a multimethod &#8220;switches&#8221; to choose an implementation is abstracted by a function of course, specifically the dispatch function you give it when you create the multimethod.  Very commonly, the dispatch function is just &#8220;class&#8221; to switch on type but it can be anything.  Each defmethod specifies a specific value it matches on, so you can&#8217;t have a defmethod that directly matches a range (afaik).</p>
<p>In your example, you don&#8217;t really need a multimethod though &#8211; I would just use cond for that:</p>
<pre>
user=&gt; (defn ticket [age]
         (cond (&lt; age 16) :child
               (&gt;= age 66) :senior
               :else :adult))
#'user/ticket
user=&gt; (ticket 10)
"child"
user=&gt; (ticket 20)
"adult"
user=&gt; (ticket 90)
"senior"
</pre>
<p>Now, you could use the ticket function above as the dispatch function for a multi-method if you wanted to switch behavior based on those kinds of tickets and that would make some sense.  Here I create a print-name multimethod that switches behavior based for a Person record using the ticket function on the age:</p>
<pre>
user=&gt; (defrecord Person [name age])
user.Person
user=&gt; (defmulti print-name (fn [person] (ticket (:age person))))
nil
user=&gt; (defmethod print-name :child [person] (str "Young " (:name person)))
#&lt;MultiFn clojure.lang.MultiFn@44547842&gt;
user=&gt; (defmethod print-name :adult [person] (:name person))
#&lt;MultiFn clojure.lang.MultiFn@44547842&gt;
user=&gt; (defmethod print-name :senior [person] (str "Old " (:name person)))
#&lt;MultiFn clojure.lang.MultiFn@44547842&gt;
user=&gt; (print-name (Person. "Jimmy" 5))
"Young Jimmy"
user=&gt; (print-name (Person. "Alex" 36))
"Alex"
user=&gt; (print-name (Person. "Edna" 99))
"Old Edna"
</pre>
]]></content:encoded>
			<wfw:commentRss>http://tech.puredanger.com/2010/08/21/clojure-multi-methods/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Learning Clojure #16: class reference</title>
		<link>http://tech.puredanger.com/2010/08/08/learning-clojure-class-reference/</link>
		<comments>http://tech.puredanger.com/2010/08/08/learning-clojure-class-reference/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 21:49:18 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Clojure]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[how to]]></category>

		<guid isPermaLink="false">http://tech.puredanger.com/?p=919</guid>
		<description><![CDATA[Most new Clojure devs find the need to call static Java methods or access static Java fields pretty quickly and doing so is easy:
user=&#62; (Math/max 5.2 2.7)
5.2
user=&#62; Math/PI
3.141592653589793
But recently I need to get the Class of a well-known Java class, which I would normally have done with String.class in Java.  This *looks* like a [...]]]></description>
			<content:encoded><![CDATA[<p>Most new Clojure devs find the need to call static Java methods or access static Java fields pretty quickly and doing so is easy:</p>
<pre>user=&gt; (Math/max 5.2 2.7)
5.2
user=&gt; Math/PI
3.141592653589793</pre>
<p>But recently I need to get the Class of a well-known Java class, which I would normally have done with <code>String.class</code> in Java.  This *looks* like a static field so I first tried to access it like one:</p>
<pre>user=&gt; String/class
#&lt;CompilerException java.lang.Exception: Unable to find static field: class in class java.lang.String (NO_SOURCE_FILE:405)&gt;</pre>
<p>No dice.  This makes sense when you consider that saying <code>Foo.class</code> is not really referencing a field, but rather a part of the Java language syntax (just like <code>this.</code>) defined as &#8220;class literals&#8221; in <a href="http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8.2">JLS 15.8.2</a>.</p>
<p>Eventually it occurred to me that if <code>(Foo/method)</code> is a static method call and <code>Foo/field</code> yields the value of a static field then maybe just <code>Foo</code> is the class reference.  Sure enough, it is!  So if you are calling an API that requires a Class, you can just pass the name of the class to refer to the class of that type.</p>
<pre>user=&gt; Math
java.lang.Math
user=&gt; (class Math)
java.lang.Class
user=&gt; (seq (.getFields Math))
(#&lt;Field public static final double java.lang.Math.E&gt; #&lt;Field public static final double java.lang.Math.PI&gt;)
</pre>
<p>It&#8217;s sometimes helpful when working with Java objects to use <code>bean</code> to get a handy map view into the Java object:</p>
<pre>user=&gt; (map #(:name (bean %)) (seq (:fields (bean Math))))
("E" "PI")</pre>
]]></content:encoded>
			<wfw:commentRss>http://tech.puredanger.com/2010/08/08/learning-clojure-class-reference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Open source bargain</title>
		<link>http://tech.puredanger.com/2010/07/28/open-source-bargain/</link>
		<comments>http://tech.puredanger.com/2010/07/28/open-source-bargain/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 21:04:42 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Terracotta]]></category>
		<category><![CDATA[ehcache]]></category>
		<category><![CDATA[open source]]></category>

		<guid isPermaLink="false">http://tech.puredanger.com/?p=915</guid>
		<description><![CDATA[This blog started as a Twitter conversation between me and @realjenius about Ehcache but I needed a little more room to make my point.
Ehcache is the most widely used open source Java caching library.  Terracotta (my former employer) bought Ehcache last year and I was intimately involved in tending it while I worked at [...]]]></description>
			<content:encoded><![CDATA[<p>This blog started as a Twitter conversation between <a href="http://twitter.com/puredanger">me</a> and <a href="http://twitter.com/realjenius">@realjenius</a> about Ehcache but I needed a little more room to make my point.</p>
<p>Ehcache is the most widely used open source Java caching library.  Terracotta (my former employer) bought Ehcache last year and I was intimately involved in tending it while I worked at Terracotta &#8230; just to make my relationship to this clear.  </p>
<p>Periodically someone <a href="http://forums.terracotta.org/forums/posts/list/2793.page">notices</a> that Ehcache pings a Terracotta server when it is instantiated and periodically thereafter and sends it the following information:</p>
<ul>
<li>Operating system name (os.name)</li>
<li>Java VM name (java.vm.name)</li>
<li>Java version (java.version)</li>
<li>Platform (os.arch)</li>
<li>Terracotta version (if applicable)</li>
<li>Terracotta product name/version (if applicable)</li>
<li>Uptime</li>
<li>Hash of IP address &#8211; used as a fingerprint for correlation</li>
</ul>
<p>The Terracotta update check server sends back information about whether a newer version of Ehcache exists.  If so, a message is displayed to the console.</p>
<p>This of course is no different in operation than what most of the other software on your desktop or most open-source app servers do these days.  I&#8217;ll admit it&#8217;s a little unusual for a non-server library to perform this kind of check but I think that line is pretty gray if you ponder it for a minute.</p>
<p>Generally, people seem upset when they find this out and feel like the library is spying on them or in some way intruding on their application.  I&#8217;ve listed above the information that is actually being sent and it&#8217;s nothing nefarious (being open source, you&#8217;re welcome to <a href="http://svn.terracotta.org/svn/ehcache/trunk/core/src/main/java/net/sf/ehcache/util">peruse the code</a> yourself).  </p>
<p>The update check is made in a separate background thread &#8211; it will time out if there is no response due to network setup and it safely handles conditions where thread creation is not allowed (Google App Engine most notably).  You can turn the update checker off either in the Ehcache xml configuration (with <code>updateCheck="true"</code> on the root <code>&lt;ehcache&gt;</code> element), or programmatically if you dynamically create caches, or VM-wide with the system property <code>-Dnet.sf.ehcache.skipUpdateCheck=true</code>.  </p>
<p>Terracotta expects and recommends that any production deployment of Ehcache will turn off the update check, just as it would likely turn off the update check in Glassfish, or any other such software.</p>
<p>I think it might be helpful to consider why Terracotta/Ehcache would want such a check in the first place.  This information tells Terracotta how Ehcache is being used as a metric of adoption.  That information can be fed through the marketing and business sides of Terracotta.  Those numbers let Terracotta convince investors that people use the library and consequently get funding to pay the salaries of the world-class team at Terracotta and the machines in the giant perf lab that makes Ehcache awesome.  </p>
<p>The information about Ehcache versions and OS/JVM environments tells Terracotta how to place emphasis during QA.  If 80% of users run on Linux, then it makes sense to focus testing efforts on that platform.  Similarly, if a small but significant number are running JDK 1.5 then that might keep it in the QA and support matrix for longer.  Again, this information lets Terracotta put limited financial resources to the most efficient use to make Ehcache awesome.</p>
<p>While these features may initially feel intrusive, I think on some reflection that they are not really doing anything evil or scary, that they are easy to turn off, and that while they provide value to Terracotta, they also provide value to the user, both in version information in the short term and in an awesome product in the long term.  </p>
<p>Sometimes I think people underestimate the amount of engineering work that goes into an open source product like Ehcache or Terracotta or Quartz, especially one backed by an actual company.  Terracotta as a company employs a team of a couple dozen people who are creating truly world-class products, equal in innovation and quality to any number of commercial, non-open source, non-free products.  But to make that work financially, there must be some part of the products that actually provides revenue.  Small things like an update check actually make a big difference on the business side of the equation, both in growth and efficiency.  I think if you consider it in those terms, you&#8217;ll find that the trade-off of information for engineering value is still weighted heavily in favor of the user.</p>
<p>The first suggestion people always make about the update check is why can&#8217;t it default to off?  The answer to that should be obvious &#8211; no one would take extra steps to turn it on and provide that information (even if it is harmless).  There is no point in having the update check code if it is not on by default.  You are welcome to read that rationalization as evil if you want, but I think that&#8217;s naive.  </p>
<p>Google shows you ads when you use their free search engine &#8211; this trades your attention (and occasional clicks) for a valuable service.  Any other Internet &#8220;free&#8221; service is asking you to participate in a trade of something (often attention to ads or personal information) in exchange for a valuable &#8220;free&#8221; service.  The Ehcache update check is really nothing different &#8211; an exchange of information for free use of a great piece of software.  I personally see no moral issue with making an exchange of this information for great (free) software &#8211; seems like a bargain to me.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.puredanger.com/2010/07/28/open-source-bargain/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Strange Loop 2010!</title>
		<link>http://tech.puredanger.com/2010/07/27/strange-loop-2010-2/</link>
		<comments>http://tech.puredanger.com/2010/07/27/strange-loop-2010-2/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 04:45:53 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Strange Loop]]></category>
		<category><![CDATA[st. louis]]></category>

		<guid isPermaLink="false">http://tech.puredanger.com/?p=913</guid>
		<description><![CDATA[I have released the full schedule for Strange Loop 2010 and it is (in my humble opinion) a truly mind-blowing set of talks and speakers.
Check out these keynotes:

Guy Steele (Oracle) &#8211; &#8220;How to Think about Parallel Programming: Not!&#8221;
Douglas Crockford (Yahoo) &#8211; &#8220;Heresy and Heretical Open Source: A Heretic&#8217;s Perspective&#8221;
Billy Newport (IBM) &#8211; &#8220;Enterprise NoSQL: Silver [...]]]></description>
			<content:encoded><![CDATA[<p>I have released the <a href="http://strangeloop2010.com/calendar">full schedule</a> for Strange Loop 2010 and it is (in my humble opinion) a truly mind-blowing set of talks and speakers.</p>
<p>Check out these keynotes:</p>
<ul>
<li>Guy Steele (Oracle) &#8211; &#8220;How to Think about Parallel Programming: Not!&#8221;</li>
<li>Douglas Crockford (Yahoo) &#8211; &#8220;Heresy and Heretical Open Source: A Heretic&#8217;s Perspective&#8221;</li>
<li>Billy Newport (IBM) &#8211; &#8220;Enterprise NoSQL: Silver Bullet or Poison Pill?&#8221;</li>
<li>Hilary Mason (bit.ly) &#8211; &#8220;Machine Learning: A Love Story&#8221;</li>
</ul>
<p>Like <a href="http://strangeloop2010.com/talk/by_track/943">language stuff</a>?  There are seven talks about Clojure! Four talks about Scala! Five talks about Groovy! A Java Puzzlers talk starring Josh Bloch (author of &#8220;Effective Java&#8221;) and Crazy Bob Lee!  Other talks about Ruby, Perl 6, Lua, and Go!</p>
<p>Rethinking that old relational database?  Check out some <a href="http://strangeloop2010.com/talk/by_track/944">NOSQL talks</a> about MongoDB, Cassandra, Hadoop, Riak, HyperGraphDB, Mark Logic. </p>
<p>Working on the <a href="http://strangeloop2010.com/talk/by_track/946">web</a>?  Check out talks on JavaScript, jQuery, HTML 5, semantic web, RDFa, microformats, and node.js.  Or talks about cloud infrastructure &#8211; dev ops with Chef or Puppet, deployment with jclouds, and using EC2 for testing.</p>
<p>Maybe making <a href="http://strangeloop2010.com/talk/by_track/947">mobile apps</a>?  Check out talks on Android, mobile HTML 5, background processing, or a case study in how Square built its Android application.</p>
<p>Interested in how to <a href="http://strangeloop2010.com/talk/by_track/945">scale your app</a>?  Check out talks from developers at Twitter, eBay, Flickr, Flightcaster, and BackType.  Or learn how to build distributed apps with Terracotta, Akka, Conduit, or Google App Engine.</p>
<p>There is also a party featuring the enigmatic <a href="http://strangeloop2010.com/pages/strange_passions">Strange Passions</a> track.   The Strange Passions track features talks given by <em>attendees</em> on non-technical topics.  The 2009 sessions included talks on astronomy, neurons, options trading, building houses in Mexico, and more.  The winner receives a genuine <a href="http://www.kleinbottle.com/whats_a_klein_bottle.htm">Klein Bottle</a>!</p>
<p>You can <a href="https://regonline.com/strangeloop2010">register for Strange Loop right now</a>!  The early bird price is just $150 (what?! that&#8217;s crazy low) until August 6th, so don&#8217;t miss out.</p>
]]></content:encoded>
			<wfw:commentRss>http://tech.puredanger.com/2010/07/27/strange-loop-2010-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.667 seconds -->
