<?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"
	>

<channel>
	<title>The dreams that stuff is made of</title>
	<atom:link href="http://luqui.org/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://luqui.org/blog</link>
	<description>Luke Palmer -- music, programming</description>
	<pubDate>Tue, 01 Jul 2008 07:27:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Apparently I do not want to be in Antwerp</title>
		<link>http://luqui.org/blog/archives/2008/07/01/apparently-i-do-not-want-to-be-in-antwerp/</link>
		<comments>http://luqui.org/blog/archives/2008/07/01/apparently-i-do-not-want-to-be-in-antwerp/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 07:25:20 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=560</guid>
		<description><![CDATA[Because VISA is not here!  It was a bit distressing coming here with only 15&#8364; in my pocket and finding out that people don&#8217;t take credit cards the way everybody does in the USA.  Anyway, there was a bank that understood my card and could give me cash.
This is my first time out [...]]]></description>
			<content:encoded><![CDATA[<p>Because <i>VISA</i> is not here!  It was a bit distressing coming here with only 15&euro; in my pocket and finding out that people don&#8217;t take credit cards the way everybody does in the USA.  Anyway, there was a bank that understood my card and could give me cash.</p>
<p>This is my first time out of the USA (barring Canada), so I&#8217;m enjoying observing the differences.  Although there are some interesting points, it&#8217;s more similar than I expected.</p>
<ul>
<li>The outlets are those weird european ones, so I can&#8217;t plug in my computer (without ganking an adapter from a coworker).  I was going to go to a store and buy one, but</li>
<li>Stores close at or around 17:00!  How am I supposed to satisfy my electronics craving after dinner?</li>
<li>People write times in 24-hour format, there&#8217;s no AM/PM.</li>
<li>There is a different meme at stoplights on foot.  In the USA, each person or group of people presses the button.  Here, it seems that people only press the button if there&#8217;s nobody already waiting.  That is, they trust people to have already pushed it&#8230; which makes sense.</li>
<li>I always like trying new weird food.  This is made easier when one cannot read the menus.</li>
<li>&#8220;Met&#8221; means &#8220;with&#8221; in Dutch.  Other words have other meanings.</li>
<li>A glass of water costs 1.50&euro; at restaurants.  That could be related to the fact that tap water in this country is not what I would consider drinkable.</li>
</ul>
<p>It&#8217;s actually not that hard to get around not being able to read anything.  It&#8217;s fun being here.</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/07/01/apparently-i-do-not-want-to-be-in-antwerp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>New Job</title>
		<link>http://luqui.org/blog/archives/2008/06/18/new-job/</link>
		<comments>http://luqui.org/blog/archives/2008/06/18/new-job/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 13:15:27 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=558</guid>
		<description><![CDATA[So I am now officially working for Anygma.  It&#8217;s a very&#8230; interesting situation.
So far, the team has been great to work with.  It&#8217;s always nice communicating with smart people who &#8220;get&#8221; software and don&#8217;t have any strange overarhicitectural fantasies.  Well, I guess we have yet to find that out, but so far [...]]]></description>
			<content:encoded><![CDATA[<p>So I am now officially working for <a href="http://anygma.com">Anygma</a>.  It&#8217;s a very&#8230; interesting situation.</p>
<p>So far, the team has been great to work with.  It&#8217;s always nice communicating with smart people who &#8220;get&#8221; software and don&#8217;t have any strange <a href="http://luqui.org/blog/archives/2007/10/05/universal-architecture/">overarhicitectural fantasies</a>.  Well, I guess we have yet to find that out, but so far so good.</p>
<p>The project is really interesting, too!  I wish I could talk more about it.</p>
<p>Typically I&#8217;m starting work around 1AM (which is 9AM in Belgium).  Today was the first day I got a &#8220;decent work day&#8221; in, going until 8ish.  The environment is nice; sitting here in my comfy chair or couch with a blanket and <a href="http://www.giantitp.com/comics/oots0568.html">a kitty</a> on my lap, discussing linguistic (as opposed to formal) aspects of programming languages!</p>
<p>I&#8217;m using <a href="http://fogbugz.com">FogBugz</a> to track my time and tasks.  It&#8217;s working well, nice and lightweight.</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/06/18/new-job/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Freewrite no. 25</title>
		<link>http://luqui.org/blog/archives/2008/06/09/freewrite-no-25/</link>
		<comments>http://luqui.org/blog/archives/2008/06/09/freewrite-no-25/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 05:35:34 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[Compositions]]></category>

		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=555</guid>
		<description><![CDATA[Long before I started this blog, I decided to adapt the idea of a writer&#8217;s freewrites to music.  The exact definition has mutated over the years, but nowadays I define a freewrite as a piece which I compose in one sitting, generally (but not rigidly) avoiding backtracking.  That makes it a sort of [...]]]></description>
			<content:encoded><![CDATA[<p>Long before I started this blog, I decided to adapt the idea of a writer&#8217;s freewrites to music.  The exact definition has mutated over the years, but nowadays I define a freewrite as a piece which I compose in one sitting, generally (but not rigidly) avoiding backtracking.  That makes it a sort of compositional improvisation.</p>
<p>Yesterday I took two hours to do a freewrite using two of Karen&#8217;s instruments: oboe and marimba (instruments I definitely did not focus on in the past).  It&#8217;s a two minute, four piece ensemble for oboe, marimba, violin, and cello.</p>
<p>Freewrite no. 25: (<a href="/music/freewrites/25.mp3">mp3</a> / <a href="/music/freewrites/25.pdf">pdf</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/06/09/freewrite-no-25/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Opus 3: Symphonic Serenade</title>
		<link>http://luqui.org/blog/archives/2008/06/09/opus-3-symphonic-serenade/</link>
		<comments>http://luqui.org/blog/archives/2008/06/09/opus-3-symphonic-serenade/#comments</comments>
		<pubDate>Tue, 10 Jun 2008 05:29:07 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[Compositions]]></category>

		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=554</guid>
		<description><![CDATA[Two weeks ago I completed my symphonic serenade, which I now dub opus 3.  In previous posts I referred to the second movement as symphonic poem no. 1, and the third movement as symphonic poem no. 2.  I wrote a third and crammed the three of them into a logical movement structure, where [...]]]></description>
			<content:encoded><![CDATA[<p>Two weeks ago I completed my symphonic serenade, which I now dub opus 3.  In previous posts I referred to the second movement as <a href="http://luqui.org/blog/archives/2008/04/16/symphonic-poem-no-1/">symphonic poem no. 1</a>, and the third movement as <a href="http://luqui.org/blog/archives/2008/05/08/symphonic-poem-no-2/">symphonic poem no. 2</a>.  I wrote a third and crammed the three of them into a logical movement structure, where they form a somewhat coherent piece.</p>
<p>In total, this serenade took me about 90 hours over six weeks.  It forms my largest, most complex piece to date, and although parts of it are somewhat juvenile and the scores are messy, I am quite proud of it.  Its runtime is 22 minutes.  It is also listed on <a href="/musicpage">my music page</a>.</p>
<ol>
<li>Molto allegro (<a href="http://luqui.org/music/classical/opus_3/01_molto_allegro.mp3">mp3</a> / <a href="http://luqui.org/music/classical/opus_3/01_molto_allegro.pdf">pdf</a>)</li>
<li>Adagio (<a href="http://luqui.org/music/classical/opus_3/02_adagio.mp3">mp3</a> / <a href="http://luqui.org/music/classical/opus_3/02_adagio.pdf">pdf</a>)</li>
<li>Allegro, Andante (<a href="http://luqui.org/music/classical/opus_3/03_allegro-andante.mp3">mp3</a> / <a href="http://luqui.org/music/classical/opus_3/03_allegro-andante.pdf">pdf</a>)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/06/09/opus-3-symphonic-serenade/feed/</wfw:commentRss>
<enclosure url="http://luqui.org/music/classical/opus_3/01_molto_allegro.mp3" length="8047911" type="audio/mpeg" />
<enclosure url="http://luqui.org/music/classical/opus_3/02_adagio.mp3" length="9202523" type="audio/mpeg" />
<enclosure url="http://luqui.org/music/classical/opus_3/03_allegro-andante.mp3" length="8130981" type="audio/mpeg" />
		</item>
		<item>
		<title>Education (two senses)</title>
		<link>http://luqui.org/blog/archives/2008/06/08/education-two-senses/</link>
		<comments>http://luqui.org/blog/archives/2008/06/08/education-two-senses/#comments</comments>
		<pubDate>Sun, 08 Jun 2008 07:39:08 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=552</guid>
		<description><![CDATA[Woo!  This is post #500!
Recently I had the realization that I don&#8217;t want to be a professional programmer.  I just made a commitment to program professionally for a while in Belgium, in Haskell, doing FRP (yeah, pretty freaking awesome!), and I&#8217;m not about to bail on that.  But after that job has [...]]]></description>
			<content:encoded><![CDATA[<p>Woo!  This is post #500!</p>
<p>Recently I had the realization that I don&#8217;t want to be a professional programmer.  I just made a commitment to program professionally for a while in Belgium, in Haskell, doing FRP (yeah, pretty freaking awesome!), and I&#8217;m not about to bail on that.  But after that job has run its course, I suspect I won&#8217;t be wanting another one.</p>
<p>It&#8217;s not because I don&#8217;t like programming anymore.  Programming is still a wonderful way to keep my mind agile, and I like it very much.  Creating or learning a new abstraction requires head-breaking leaps, it&#8217;s exciting to master a new concept, and I still feel passionately about the future of programming languages (particularly the completely yet-unrealized potential of dependent types).  But such are the pursuits of an academic, not a professional.</p>
<p>When I started college, I wanted to be a professor.  It didn&#8217;t take long to realize that my work ethic was not insane enough to be a professor.  Nevertheless, every semester since my sophomore year I was a TA.  I skipped around teaching physics, calculus, and computer science.  I was good at it and I loved doing it.  It was a delightful sanctuary from the stress of studenthood.</p>
<p>After the fall semester of 2006, I became fed up with school&#8217;s bullshit (in fact, an <i>elective voice</i> class of all things was the one to push me over the edge&mdash;it&#8217;s a long story) and intended to take a year-long hiatus from school to work at NetDevil, a local game studio.  That I did, quitting the job seven months later due to the ridiculous &#8220;crunch time&#8221; (read: mandatory unpaid overtime) policies.</p>
<p>And here we are, mid 2008 and I have not resumed school, and the next year does not expect my return.</p>
<p>It&#8217;s unclear what happens next.  Maybe I spend a year in Belgium as a programmer, maybe longer.  But after that, I don&#8217;t know.  However, teaching looks to be in my future.  And looking back on all my teaching experience in college, there is one thing that will always stand out:  physics.</p>
<p>Physics is miraculous to teach.  The subject&#8217;s depth and beauty has made a zealous atheist like me reconsider God&#8217;s nonexistence (converting me, if you will, into an agnostic :-).  There is nothing more pleasing than being in the presence of a student who asks question after question as he begins to behold the mathematical masterpiece (except perhaps seeing more of the masterpiece yourself, which students have helped me to do!).  I witnessed this with two or three students each semester.</p>
<p>Students come into physics often with a truckload of preconceptions about how the world works.  This differs from mathematics and computer science, where the most prominent preconception is that they will not understand (a difficult one to work with).  Physics also differs from those two subjects in that the tools to disprove themselves are placed right under the students&#8217; noses.  I have experienced the moving, haunting situation where I predicted the outcome of a physical situation and then observed it go down completely unlike I expected.  To help a student with a misconception, you don&#8217;t tell them they&#8217;re wrong, you help them devise an experiment to disprove themselves.</p>
<p>Talking about it excites me, it makes me remember and long for that experience.  I can see myself, even with my restless, wandering soul, doing that for the rest of my life.  But there is a brief international diversion to explore first, it seems.</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/06/08/education-two-senses/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Last Comic Standing</title>
		<link>http://luqui.org/blog/archives/2008/06/06/last-comic-standing/</link>
		<comments>http://luqui.org/blog/archives/2008/06/06/last-comic-standing/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 08:17:50 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=550</guid>
		<description><![CDATA[I have a love/hate relationship with stand-up comedy.  Most comics are mediocre, with one or two jokes in a half hour set that make me roll on the floor, where the rest mostly bore me.  The only counterexamples I can think of right now are Demetri Martin and the late Mitch Hedberg, who [...]]]></description>
			<content:encoded><![CDATA[<p>I have a love/hate relationship with stand-up comedy.  Most comics are mediocre, with one or two jokes in a half hour set that make me roll on the floor, where the rest mostly bore me.  The only counterexamples I can think of right now are Demetri Martin and the late Mitch Hedberg, who hit me with 80 or 90 percent of their material.</p>
<p>On the other hand, I can&#8217;t stand Chris Rock and those like him (George Carlin somewhat included in this category), who ostentatiously vomit political and ethical opinions which sound like they&#8217;re edgy but everyone agrees with.  I didn&#8217;t go to a comedy show to hear a liberal sermon (I, too, agree with most of said opinions).</p>
<p>Anyway, where I&#8217;m going with this:  I just watched <a href="http://www.hulu.com/watch/21322/last-comic-standing-thu-may-22-2008">Last Comic Standing on Hulu</a>.  I was thoroughly impressed: about 80% of the <i>jokes</i> made me laugh out loud (possibly to the extent of waking up my roommate).  However, I completely disliked the presentation.  It was presented like American Idol: they showed bad comics telling bad jokes and getting rejected by the judges, they showed the good comics boringly telling the camera about themselves (but two of them were quite hillarious in this process), they even did the &#8220;who will go on to the next round&#8221; needlessly long dramatic pauses with nary a single amusing moment.</p>
<p>I&#8217;m watching a comedy show, I don&#8217;t want to get to know the comics as people and cheer when they are selected and feel bad for them when they are rejected.  It&#8217;s a <i>comedy</i> show, I want to <i>laugh my ass off!</i></p>
<p>So: skip the two semi-final nomination segments, there is nothing good there.  The rest has spatterings of pretty funny stuff, and the two live show segments are hillarious.  And NBC, stop with the mindless filler!</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/06/06/last-comic-standing/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Flow</title>
		<link>http://luqui.org/blog/archives/2008/06/03/flow/</link>
		<comments>http://luqui.org/blog/archives/2008/06/03/flow/#comments</comments>
		<pubDate>Tue, 03 Jun 2008 06:08:43 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[Personal]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=548</guid>
		<description><![CDATA[Flow is my cat.  She&#8217;s more like a person to me today than ever before.
Originally Flow belonged to Namaste, and now that he has moved away it&#8217;s unclear who the owner is.  It&#8217;s almost like she belongs to this house.
I had my music program open on my computer and was about to start [...]]]></description>
			<content:encoded><![CDATA[<p>Flow is my cat.  She&#8217;s more like a person to me today than ever before.</p>
<p>Originally Flow belonged to Namaste, and now that he has moved away it&#8217;s unclear who the owner is.  It&#8217;s almost like she belongs to this house.</p>
<p>I had my music program open on my computer and was about to start writing a song when Flow walked onto the couch next to me.  She put her paws on my lap and lay down.  Normally I would have pet her a few times and continued working.</p>
<p>I&#8217;ve been thinking a lot about a particular girl recently.  Today I fantasized, what if that girl had sat down close next to me and rest her head on my shoulder?  I wouldn&#8217;t simply hug her and go back to working; she just asked me for some affection!</p>
<p>So instead of seeing &#8220;that&#8217;s a cat&#8221;, I interpreted Flow&#8217;s actions as I would a human&#8217;s.  I closed my computer and sat next to her, petting her softly and listening to her purr.  I felt close to her, like she was my friend and she understood me.  At the least, I understood her.</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/06/03/flow/feed/</wfw:commentRss>
		</item>
		<item>
		<title>OO is not the One True Paradigm, but Haskell still sucks at it</title>
		<link>http://luqui.org/blog/archives/2008/05/29/oo-is-not-the-one-true-paradigm-but-haskell-still-sucks-at-it/</link>
		<comments>http://luqui.org/blog/archives/2008/05/29/oo-is-not-the-one-true-paradigm-but-haskell-still-sucks-at-it/#comments</comments>
		<pubDate>Thu, 29 May 2008 11:10:27 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[Code]]></category>

		<category><![CDATA[Haskell]]></category>

		<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=547</guid>
		<description><![CDATA[I just read osfameron&#8217;s Readable Perl talk.  It&#8217;s a pretty typical language advocation talk, nothing special, but it reminded me of Perl.  Those who have not been reading my blog since 2005 may not know that I used to be a Perl nut.  I was even on the Perl 6 design team, [...]]]></description>
			<content:encoded><![CDATA[<p>I just read osfameron&#8217;s <a href="http://osfameron.vox.com/library/post/readable-perl-talk-slides-up.html?_c=feed-atom">Readable Perl</a> talk.  It&#8217;s a pretty typical language advocation talk, nothing special, but it reminded me of Perl.  Those who have not been reading my blog since 2005 may not know that I used to be a Perl nut.  I was even on the Perl 6 design team, attended several design mettings with Larry Wall (and a couple other notable geniuses), had the Perl 6 syntax memorized, &#8230;.  Quite insane I was.</p>
<p>I have been pondering recently about the cognitive mismatch between OO and functional approaches.  The two have been fused in languages, see O&#8217;Caml, but I argue that code in such a fused language will mostly end up looking like one or the other, not a beautiful balance as we would like.</p>
<p>My thesis is that the two support different models of the universe.  The functional approach supports a &#8220;mathematical&#8221; view, where we know a lot about the structure of our data; the object approach supports an &#8220;empirical&#8221; view, where we know a lot about the data itself.  Let&#8217;s use something I was playing with today as an example: the <a href="http://en.wikipedia.org/wiki/SKI_combinator_calculus">SK calculus</a>.</p>
<p>The obvious functional approach is to define a data type representing the cases of the AST:</p>
<pre>
data AST = S | K | AST :@ AST
</pre>
<p>(The <tt>:@</tt> is the name of an infix constructor; i.e. it is just a node with two subtrees)</p>
<p>Then to implement a function that, say, reduces the top level of a tree, we can analyze the data by pattern matching:</p>
<pre>
reduce (S :@ x :@ y :@ z) = Just $ x :@ z :@ (y :@ z)
reduce (K :@ x :@ y)      = Just $ x
reduce _                  = Nothing
</pre>
<p>Here we know a lot about what kind of argument <tt>reduce</tt> will get.  Whatever it gets, we know that it will be either an <tt>S</tt>, a <tt>K</tt>, or an application.  We then define what it means to reduce data of this form.</p>
<p>Now I could half-bake a standard OO retort showing how much incredibly better functional programming is by how awkward this would be in a typical OO language (and it would be).  But that&#8217;s trying to apply the functional world-view, that we know a lot about the structure of our data, to an OO setting.  I think a good OO design for this same problem would take quite a different form.   I see it something like this:</p>
<pre>
interface Combinator {
    int arguments();
    AST apply(AST[] args);
}
class S implements Combinator {
    override int arguments() { return 3; }
    override AST apply(AST[] args) {
        return new Apply(new Apply(args[0], args[2]), new Apply(args[1], args[2]);
    }
}
class K implements Combinator {
    override int arguments() { return 2; }
    override AST apply(AST[] args) {
        return args[0];
    }
}
...
</pre>
<p>While I gave a working Haskell program above in four lines, my &#8220;good&#8221; OO solution (in whatever language this is&#8230; looks like C#) has much more than that and is not even complete.  I have left out the definition of Apply and the function which actually does the reduction.  But I&#8217;m not bashing OO here (but please do understand if I bash OO syntax, which as the years go by seems to get more and more verbose).  Instead it&#8217;s just that this problem is very well-suited to functional programming.</p>
<p>But this program has very different properties from the Haskell version.  In particular, it is easy to add a new combinator, a new object, that does something different.  Whereas in the Haskell program, adding a new primitive combinator would change the assumptions of every function that worked with combinators.  Conversely, adding data manipulation functions which depend on particulars, namely whether something is an S or a K (or whatever else), involves touching every object to add that method.  Whereas in Haskell, we can just add a new function.  Astute readers will recognize this as the famous &#8220;expression problem&#8221;.</p>
<p>This trade-off starts to affect the way we proceed.  If we were to implement identical functionality in the two programs, our approaches will diverge greatly.  For example, today I added a function to invert an application.  In Haskell, I just enumerated by cases: <i>this is how you invert an S-reduction, this is how you invert a K-reduction, etc.</i>  </p>
<p>In the OO program I wouldn&#8217;t add a visitor though, that would be stupid.  Instead I would create a new node type for variables, apply the transformation to a number of variables equal to the number of expected arguments, and analyze the positions of the variables in the result.  I would end up with a function that can invert any combinator.  That is, the natural next step in the OO example is to write <i>more generic</i> code than in the functional example.  </p>
<p>Anyway, there&#8217;s what I consider a nice side-by-side comparison of the two approaches.  Maybe by analyzing these two examples and where they led, you can start to see what I&#8217;m saying about the two cognitive models.</p>
<p>And this brings me back to Perl.  The slides I read mentioned Moose, an object model module for Perl.  It is rich: supports inheritance, role composition, privacy, coersion, and many other tools.  I think an OO system needs to have these tools: the OO world view counts on data having many facets, capabilities, constituents, and concerns itself with what is possible when you know about certain ones.  An OO programmer must be an expert at creating <i>data</i> with many facets, capabilities, and constituents.  This is contrasted to functional programming where everything is known about the data, and the focus is on manipulating it.</p>
<p>Haskell has no support for these tools.  Its type system, although powerful, is too static.  Haskell provides too many guarantees for OO to work; it wants to know too much about what&#8217;s going on.  Similarly I don&#8217;t consider C++, Java, C# to be &#8220;powerful&#8221; OO languages.  In fact, I might go so far as to say a language with static types and OO is not properly embracing the philosophy.  You&#8217;re creating rich, smart data.  If your superclass guaranteed that a particular method was <tt>const</tt>, i.e. does not change the object it was called on, how are you supposed to smartly cache the results of that function?  Well, with the <tt>mutable</tt> hack.  But that&#8217;s a hack, essentially telling the type system that it should go take a hike because you know what you&#8217;re doing.</p>
<p>Perl and Smalltalk &#8220;get it&#8221;, in my opinion.  They have simple models, but provide tools for looking inside and changing data on the fly.  They are about creating and manipulating <i>smart</i> data, leaving the guarantees up to the naming of the methods and their intended use, because trying to force guarantees would restrict their ability to be smart.  If you want guarantees, use Haskell; it will almost prove your code is correct for you.  But Haskell has no smart data, that&#8217;s the only way it can provide guarantees.  You can&#8217;t have case analysis of data structures and objects that can reverse-engineer your function at the same time.</p>
<p>That&#8217;s it: when you&#8217;re in OO, don&#8217;t design functionally.  Keep your guarantees wide open, and focus on making smart objects.</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/05/29/oo-is-not-the-one-true-paradigm-but-haskell-still-sucks-at-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Moment last Monday</title>
		<link>http://luqui.org/blog/archives/2008/05/28/the-moment-last-monday/</link>
		<comments>http://luqui.org/blog/archives/2008/05/28/the-moment-last-monday/#comments</comments>
		<pubDate>Wed, 28 May 2008 09:13:49 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[Music]]></category>

		<category><![CDATA[The Moment]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=546</guid>
		<description><![CDATA[Last Monday, &#8220;The Moment&#8221; (def: Nolan and whoever else) had a jam session at my house.  I got my whole rig out, indicating this was a special occasion (first jam in more than a month).

1 - Great funky track.  It&#8217;s rough going now and then, but has some incredible passages, and is definitely [...]]]></description>
			<content:encoded><![CDATA[<p>Last Monday, &#8220;The Moment&#8221; (def: Nolan and whoever else) had a jam session at my house.  I got <a href="http://luqui.org/blog/archives/2008/04/26/music-gear-review/">my whole rig</a> out, indicating this was a special occasion (first jam in more than a month).</p>
<ul>
<li><a href="/music/improv/2008-05-26_01.mp3">1</a> - Great funky track.  It&#8217;s rough going now and then, but has some incredible passages, and is definitely listenable on the whole.</li>
<li><a href="/music/improv/2008-05-26_02.mp3">2</a></li>
<li><a href="/music/improv/2008-05-26_03.mp3">3</a></li>
<li><a href="/music/improv/2008-05-26_04.mp3">4</a></li>
<li><a href="/music/improv/2008-05-26_05.mp3">5</a></li>
<li><a href="/music/improv/2008-05-26_06.mp3">6</a> - High energy rock/funk.</li>
<li><a href="/music/improv/2008-05-26_07.mp3">7</a> - My favorite of the session.  A trance track with nice vocals.</li>
<li><a href="/music/improv/2008-05-26_08.mp3">8</a> - My &#8220;Charlie Hunter&#8221; moment (okay, that is an overstatement), playing a complex solo and bass at the same time :-)</li>
<li><a href="/music/improv/2008-05-26_09.mp3">9</a></li>
<li><a href="/music/improv/2008-05-26_10.mp3">10</a></li>
</ul>
<p>The lineup:</p>
<ul>
<li>Nolan McFadden - guitar, vocal</li>
<li>Willow - vocal, percussion</li>
<li>Will - drums</li>
<li>Luke - keyboard/bass</li>
</ul>
<p>As the lineup implies, my left hand was on &#8220;bass&#8221; throughout the session.  This was the first time I&#8217;ve had to cover the bass part, and I thoroughly enjoyed it (and it overloaded me, indication that I improved greatly that night).</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/05/28/the-moment-last-monday/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to play improv that doesn&#8217;t suck</title>
		<link>http://luqui.org/blog/archives/2008/05/21/how-to-play-improv-that-doesnt-suck/</link>
		<comments>http://luqui.org/blog/archives/2008/05/21/how-to-play-improv-that-doesnt-suck/#comments</comments>
		<pubDate>Wed, 21 May 2008 10:56:00 +0000</pubDate>
		<dc:creator>Luke Palmer</dc:creator>
		
		<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://luqui.org/blog/?p=541</guid>
		<description><![CDATA[Before we begin, a little shameless peddling: SNW was my band before it, er, disbanded.  I consider that &#8220;improv that doesn&#8217;t suck&#8221;.  If you think it sucks, then you probably won&#8217;t agree with my conclusion.
Two weeks ago I attended an open mic night at Cafe Babu, a fabulous musician-supporting cafe in Boulder.  [...]]]></description>
			<content:encoded><![CDATA[<p>Before we begin, a little shameless peddling: <a href="http://myspace.com/snwband">SNW</a> was my band before it, er, disbanded.  I consider that &#8220;improv that doesn&#8217;t suck&#8221;.  If you think it sucks, then you probably won&#8217;t agree with my conclusion.</p>
<p>Two weeks ago I attended an open mic night at Cafe Babu, a fabulous musician-supporting cafe in Boulder.  Interleaved between the scheduled acts were &#8220;open jam sessions&#8221;, where anybody who wanted to play could come up and play.  Keyboardists being a rare commodity, I played in three of the four such sessions.</p>
<p>After more than a year of playing with excellent improvisers, it was extremely frustrating playing with these folks.  Not because they weren&#8217;t good musicians&mdash;they were, they had good ears and a good sense of groove&mdash;but because nobody had musical control.  The problem was that the music had the inertia of a freight train, and no matter how hard anyone pushed, it would not change direction.  I will refine this statement to be more succinct by the end of the post, but <i>in a good improv session, everyone needs to have control, simultaneously.</i></p>
<p>What I mean by this is that everyone needs to be looking at everyone else, watching and listening for ideas.  Ideas are scarce in improv: because of the hypnotic nature of playing, music can continue on a good groove with no new content happening for many minutes.  This makes it suck (ever heard the term &#8220;jam band&#8221; as derogatory?  That&#8217;s what it&#8217;s referring to.).  Music needs to change to make an impression, and if somebody wants to change it, you follow them.  No matter if you like where it&#8217;s going or not, where it&#8217;s going is better than where it is.</p>
<p>Ears are more important than eyes.  Especially when you&#8217;re around excellent musicians who often play with their eyes closed :-).  So you <i>listen</i> for ideas and adapt to them.  My personal philosophy as a musician assumes others are doing this: when I have an idea, I <i>do it!</i>  No thinking, no testing the waters, no making sure that there is a nice transition or even that anybody is on board: just commit and go!  If it doesn&#8217;t work out, well, you cross that bridge when you come to it.<sup>1</sup>  Other musicians take different tactics to success as well, this is just mine.</p>
<p>But if people aren&#8217;t listening, such riskiness will never work.  That&#8217;s what I found at the open jam.  I heard an idea (almost all my ideas come from hearing other people do things) and accentuated it, basically split off a new groove with whoever sparked the idea very coarsely, and nobody else did <i>anything</i>.  Same ol&#8217; thing.  If I wanted it to stop sounding like noise, I had to shut up.</p>
<p>The best way to get the music to go somewhere new is to give someone control.  You can force control on someone by making them solo.  Not drum+bass+guitar solo, I mean guitar-only solo (or bass-only, or drum-only).  As an extension to this rule, the more people playing, the less control anybody has.  Or: the prowess of the musicians involved must increase quadratically with the number of musicians in order for the music to be coherent (each musician needs to be able to simultaneously listen and respond to each other).  I explicitly restricted SNW never to grow beyond 4 members, since I didn&#8217;t believe that I had the prowess to handle 5.</p>
<p>But there is another way!  If I can&#8217;t handle 5, there is an easy way to give the coherence of a session with 4.  In the words of a favorite pop band, Cake: &#8220;Shut the fuck up!&#8221;   Whaddya know, there are only 4 people playing again.  The problem is that if you want it to be a 5 person jam session, one person can&#8217;t just refuse to play the whole time.  Everyone needs to STFU, frequently.  Listen to some Miles Davis fusion records, great improv.  And then note the number of people listed on the album versus the number of people you can count playing at once.  The ratio is around 3:1.   </p>
<p>I am going to be organizing some jam sessions before I leave.  And my preface will be just that: STFU.  And ideally, you&#8217;ll get all numbers of musicians playing at once if you have a good distribution: 4,3,1,5, and (my favorite) 2.  And if it&#8217;s really flowing for somebody, 6.  :-)</p>
<p>But that&#8217;s it.  Listen for ideas, give everyone control.  If you don&#8217;t have enough control to introduce a new idea, shut the fuck up and endow your bandmates with more.</p>
<p><sup>1</sup> I have been working on incorporating such a mentality into my life outlook.</p>
]]></content:encoded>
			<wfw:commentRss>http://luqui.org/blog/archives/2008/05/21/how-to-play-improv-that-doesnt-suck/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
