<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>I blog about faith in life and whatever else is currently making demands on my attention.



  var _gaq = _gaq || [];
  _gaq.push([‘_setAccount’, ‘UA-24885986-1’]);
  _gaq.push([‘_trackPageview’]);

  (function() {
    var ga = document.createElement(‘script’); ga.type = ‘text/javascript’; ga.async = true;
    ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google-analytics.com/ga.js’;
    var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
  })();</description><title>Two Negatives</title><generator>Tumblr (3.0; @vishers)</generator><link>http://blog.twonegatives.com/</link><item><title>A Challenge! </title><description>&lt;p&gt;My favorite podcast at the moment, recently having overtaken &lt;a href="http://5by5.tv/b2w"&gt;Back to Work&lt;/a&gt; on the mighty &lt;a href="http://5by5.tv/"&gt;5by5&lt;/a&gt; &lt;a href="https://www.youtube.com/watch?v=XrYvkFltFPo"&gt;media empire&lt;/a&gt;, is &lt;em&gt;easily&lt;/em&gt; &lt;a href="http://5by5.tv/hypercritical"&gt;Hypercritical&lt;/a&gt;. Since doing a &lt;a href="http://www.google.com/search?&amp;amp;q=hypercritical&amp;amp;btnI"&gt;Google Lucky search for the term &amp;#8216;hypercritical&amp;#8217;&lt;/a&gt; gets me to the show&amp;#8217;s site, I&amp;#8217;ll trust that many other people feel the same way. &lt;a href="http://arstechnica.com/author/john-siracusa/"&gt;Mr. Siracusa&amp;#8217;s&lt;/a&gt; dry wit and quiet, nerdy charm combined with his detailed knowledge and extreme desire to be accurate make for one heck of a pop-corn-poppin&amp;#8217; time!&lt;/p&gt;

&lt;p&gt;So, it is with an &lt;em&gt;extraordinarily heavy heart&lt;/em&gt; that I must point out that &lt;a href="http://knowyourmeme.com/memes/the-cake-is-a-lie"&gt;the cake is a lie&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;The slogan of the show, in various forms, is that &amp;#8220;there is nothing so perfect that it cannot be complained about&amp;#8221; by Mr. Siracusa., hereafter referred to as &amp;#8216;the defendant&amp;#8217;. In fact, in some of it&amp;#8217;s more extreme forms, what the defendant is referred to as doing is &amp;#8216;destroying&amp;#8217;, &amp;#8216;desiccating&amp;#8217;, &amp;#8216;bringing beneath the bottom level&amp;#8217;, &amp;#8216;beating beyond any shred of recognition or humanity&amp;#8217;, &amp;#8216;destroying in such a way that has not been seen since the great alliance of men and elves confronted the might of Morgoth in the glory days of Numenor and cast the fowl sorcerer into the abyss along with his balrogs and goblins&amp;#8217;, etc.. Mind, these are all &lt;em&gt;direct&lt;/em&gt; quotes. To the defendant&amp;#8217;s credit, the defendant did complain about these alternative slogans and got &lt;a href="http://benjamin.org/dan/"&gt;Dan Ben-jammin&lt;/a&gt; to stop saying them. However, such an admission is not relevant here. Given the slogans, I&amp;#8217;ll assume that it is clear what the show claims to be.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The defendant has admitted on more than one occasion that he is a fan of &lt;a href="http://www.kungfugrippe.com/post/21396028101"&gt;tele-screen gaming in the data age with journey&lt;/a&gt;. In fact, one of the first episodes that I listened to was &lt;a href="http://5by5.tv/hypercritical/49"&gt;episode 49&lt;/a&gt; in which the defendant waxes on ad nauseam regarding the design of console controllers. Again, I&amp;#8217;d like to remind everyone that the defendant does this in such a way that makes me smile over and over again and in no way impeaches his character.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The defendant has said on at least one occasion that he is an especially big fan of the first-party Nintendo games.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Recently, I was playing &lt;a href="http://zelda.com/skywardsword/"&gt;The Legend of Zelda: Skyward Sword&lt;/a&gt; with my father in law and noted that the controls were not as slick as I would expect them to be. The graphics were slightly grainier than I thought they should be. There were lots of little nit-picks that I thought brought the game down beneath even the likes of &lt;a href="http://en.wikipedia.org/wiki/The_Legend_of_Zelda:_Twilight_Princess"&gt;Twilight Princess&lt;/a&gt;, which I happened to enjoy a fair bit.&lt;/p&gt;

&lt;p&gt;This got me thinking, I can&amp;#8217;t find much to complain about in many of the &lt;a href="http://en.wikipedia.org/wiki/Nintendo_games"&gt;first-party Nintendo&lt;/a&gt; games, but I bet the defendant could! I mean, he &lt;em&gt;destroys&lt;/em&gt; topics like &lt;a href="http://www.imdb.com/title/tt0177789/"&gt;Grignac&lt;/a&gt;! How could he not, given the slogan of the show?&lt;/p&gt;

&lt;p&gt;My a disappointment shall become evident…&lt;/p&gt;

&lt;p&gt;I expressed my interest in such a show or 5 in &lt;a href="https://twitter.com/#!/timvisher/status/182478718793551872"&gt;a tweet&lt;/a&gt; to the defendant, 10:48 AM EST, 21 March 2012, or, perhaps in a language more parsable to the defendant, &lt;a href="http://www.unixtimestamp.com/index.php"&gt;1332326880&lt;/a&gt;. I waited with baited breath to see when my dream would be fulfilled and all of the little plot-holes and dark years and poor iterations evident only to the mind of the defendant would be dissertated upon and exposed for the black marks on the universe&amp;#8217;s fabric that they are.&lt;/p&gt;

&lt;p&gt;Only to find very quickly that the defendant &lt;em&gt;lies&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://twitter.com/#!/siracusa/status/182534256013225985"&gt;a t00t&lt;/a&gt; marked 1332358080, the defendant informed me that any show of such a topic &amp;#8220;wouldn&amp;#8217;t be very critical.&amp;#8221;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=K8E_zMLCRNg"&gt;crickets…&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d like to remind the court of a our situation:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;Dan Benjamin and, by proxy, the defendant claim that there is &lt;em&gt;&amp;#8216;nothing&amp;#8217;&lt;/em&gt; so perfect that it can&amp;#8217;t be complained about.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The defendant claims, in &lt;em&gt;writing&lt;/em&gt;, that a he couldn&amp;#8217;t fill a show with critical things to say about &lt;em&gt;all&lt;/em&gt; of the first-party Nintendo games. Not one show!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/The_Legend_of_Zelda"&gt;17 Zelda games&lt;/a&gt;!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Metroid#Games"&gt;12 Metroid games&lt;/a&gt;!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/List_of_Mario_video_games"&gt;200 Mario games!!!!!&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;That&amp;#8217;s only 3 of the first-party Nintendo games!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;There are far less iterations on the concept of a video game controller than even the sum of those 3, ((+ 200&amp;#160;12&amp;#160;17) =&amp;gt; 229 for the curious), and the defendant was able to fill up a sizable chunk of a show talking about &lt;em&gt;them&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But, no, apparently not enough material here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=K8E_zMLCRNg"&gt;crickets…&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Incensed doesn&amp;#8217;t even begin to cover it. I immediately turned purple. My co-workers had to learn how to use a defibrillator and then perform a double heart and lung bypass operation combined with brain surgery to revive me. I tore down the entirety of my cube farm in a rage the likes of which haven&amp;#8217;t been seen since the Cambrian era.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;lies&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;burning&lt;/strong&gt; lies!&lt;/p&gt;

&lt;p&gt;What can the defendant and his co-host Dan Benjamin do to make this situation right?&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;They could try their very best to do a show on the first-party Nintendo games, a feat that the defendant has already shrunk back from, like a VB6 coder shrinking back from the heady heights of Haskell.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;They could change their slogan. I would demand a change to the following: &amp;#8220;Nothing is so perfect that it can&amp;#8217;t be complained about, except first-party Nintendo games.&amp;#8221; This would have to be read and elaborated upon, every show, in the way that only Dan Benjamin (and other pod people) can.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;If no action is taken, I won&amp;#8217;t be surprised. After all, &lt;a href="http://daringfireball.net/linked/2012/03/30/readability"&gt;scumbags do scummy things&lt;/a&gt;, and scum can be found in wells, and liars have fallen in to wells, and Dan Benjamin and the defendant have been proven to be liars, and therefore they are scumbags (&lt;a href="http://en.wikipedia.org/wiki/Q.E.D."&gt;Q.E.D.&lt;/a&gt;). Scumbags aren&amp;#8217;t ashamed when they&amp;#8217;ve been found out because of the scummy things they&amp;#8217;ve done. They&amp;#8217;re only sad that they got caught.&lt;/p&gt;

&lt;p&gt;And they&amp;#8217;ve been caught. Oh &lt;em&gt;boy&lt;/em&gt;, they&amp;#8217;ve been &lt;strong&gt;caught&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;By the by, my name is pronounced &lt;code&gt;Thyme Supercalifragilisticexpialadotious&lt;/code&gt;, in case that becomes necessary.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/21451558017</link><guid>http://blog.twonegatives.com/post/21451558017</guid><pubDate>Fri, 20 Apr 2012 17:06:50 -0400</pubDate><category>john siracusa</category><category>dan benjamin</category><category>5by5</category><category>hypercritical</category><category>humor</category></item><item><title>Functional Thinking in Clojure: Part 3</title><description>&lt;h4&gt;Refactored Number Classifier&lt;/h4&gt;

&lt;p&gt;Neal starts his latest article demonstrating what he would have done if he&amp;#8217;d been programming in a functional language like Scala from the beginning. Seems like the perfect place for me to do the same in Clojure.&lt;/p&gt;

&lt;p&gt;Voila!&lt;/p&gt;

&lt;p&gt;&lt;script src="https://gist.github.com/2368220.js"&gt; &lt;/script&gt;&lt;!-- ;;; http://www.ibm.com/developerworks/java/library/j-ft3/index.html --&gt;&lt;!-- (ns functional-number-classifier.core) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (defn factors [number] --&gt;
&lt;!--   (filter (partial factor? number) (range 1 (+ 1 number)))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (defn classify-using [factor-sum-function number] --&gt;
&lt;!--   (cond (= (factor-sum-function number) number) :perfect --&gt;
&lt;!--         (&lt; (factor-sum-function number) number) :deficient --&gt;
&lt;!--         :default :abundant)) --&gt;&lt;/p&gt;



&lt;p&gt;Some notes about what I&amp;#8217;ve done:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;When I &lt;a href="http://blog.twonegatives.com/post/20182672074/functional-thinking-in-clojure-part-2"&gt;originally optimized &lt;code&gt;aliquot-sum&lt;/code&gt;&lt;/a&gt;, I slavishly followed (or &lt;a href="http://blog.twonegatives.com/post/20901172174/functional-thinking-in-clojure-part-2-0-0-1"&gt;thought I did&lt;/a&gt;) his implementation and thus mimicked his use of &lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#round(double)"&gt;&lt;code&gt;Math/round&lt;/code&gt;&lt;/a&gt; and &lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#sqrt(double)"&gt;&lt;code&gt;Math/sqrt&lt;/code&gt;&lt;/a&gt;. This is cool, but then you have to add 1 to the resulting number to begin to check for factors. Why not just use the equally valuable &lt;a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#ceil(double)"&gt;&lt;code&gt;Math/ceil&lt;/code&gt;&lt;/a&gt; function? Thus, instead of deciding which way to round based on the size of the floating point number, we just always round up as high as we can go.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The use of &lt;code&gt;Math/round&lt;/code&gt; allows us to get rid of the &lt;code&gt;(+ 1 …&lt;/code&gt; code, which makes the whole step sightly more readable, IMHO.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I pulled &lt;code&gt;factor?&lt;/code&gt; out into it&amp;#8217;s own function and now my &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/filter"&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/a&gt;s read very nicely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I&amp;#8217;ve removed the slow implementation of &lt;code&gt;aliquot-sum&lt;/code&gt; but left &lt;code&gt;classify&lt;/code&gt; as a function who&amp;#8217;s guts can be replaced. If someone else wants to come along with some sort of &lt;a href="https://en.wikipedia.org/wiki/Lenstra_elliptic_curve_factorization"&gt;elliptic curve factorization algorithm&lt;/a&gt; that I can&amp;#8217;t even begin to understand, they are officially my guests.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;My implementation thinks a little differently about the problem than Neal apparently wants to, but like I said I find his implementation to be a bit repetitious.&lt;/p&gt;

&lt;h4&gt;Functional Testing&lt;/h4&gt;

&lt;p&gt;Neal begins by documenting some of the changes he thinks functional programming can bring to your testing.&lt;/p&gt;

&lt;p&gt;I started off by copying his initial implementation as directly as I could.&lt;/p&gt;

&lt;p&gt;&lt;script src="https://gist.github.com/2378009.js"&gt; &lt;/script&gt;&lt;!-- ;; @Test def negative_perfection() { --&gt;&lt;!-- ;;   for (i &lt;- 1 until 10000) --&gt;&lt;!-- ;;     if (Set(6, 28, 496, 8128).contains(i)) --&gt;&lt;!-- ;;       assertTrue(NumberClassifier.isPerfect(i)) --&gt;&lt;!-- ;;     else --&gt;&lt;!-- ;;       assertFalse(NumberClassifier.isPerfect(i)) --&gt;&lt;!-- ;; } --&gt;&lt;!-- (deftest negative-perfection --&gt;&lt;!--   (let [known-perfects [6 28 496 8128]] --&gt;&lt;!--     (dorun --&gt;&lt;!--      (map #(if (some (partial = %) known-perfects) (is (= :perfect (classify %))) (is (not (= :perfect (classify %))))) (range 1 10000))))) --&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;I use &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/map"&gt;&lt;code&gt;map&lt;/code&gt;&lt;/a&gt; instead of a for loop, because for loops suck.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;a href="http://clojure.org/reader#The%20Reader--Macro%20characters"&gt;&lt;code&gt;#(...)&lt;/code&gt;&lt;/a&gt; construct is a reader macro that allows for very succinct anonymous function definition. I&amp;#8217;m avoiding it more and more now that I know about &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/partial"&gt;&lt;code&gt;partial&lt;/code&gt;&lt;/a&gt; and &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/comp"&gt;&lt;code&gt;comp&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Clojure supports branching!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This will result in over 10,000 tests running, which is a little slower than necessary.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;So I refactored immediately.&lt;/p&gt;

&lt;p&gt;&lt;script src="https://gist.github.com/2378376.js"&gt; &lt;/script&gt;&lt;!-- ;; @Test def negative_perfection() { --&gt;&lt;!-- ;;   for (i &lt;- 1 until 10000) --&gt;&lt;!-- ;;     if (Set(6, 28, 496, 8128).contains(i)) --&gt;&lt;!-- ;;       assertTrue(NumberClassifier.isPerfect(i)) --&gt;&lt;!-- ;;     else --&gt;&lt;!-- ;;       assertFalse(NumberClassifier.isPerfect(i)) --&gt;&lt;!-- ;; } --&gt;&lt;!-- (deftest negative-perfection --&gt;&lt;!--   (let [known-perfects #{6 28 496 8128} --&gt;&lt;!--         non-perfects-till-10000 (apply disj (apply hash-set (range 1 10000)) known-perfects)] --&gt;&lt;!--     (is (not-any? (partial = :perfect) (map classify non-perfects-till-10000))))) --&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;I didn&amp;#8217;t like that &lt;code&gt;if&lt;/code&gt; form in the original code. An easy way to get around that is to use the sequence manipulation functions to get a slightly more declarative solution. Now, I classify all of what I expect to not be perfect in the range 1 to 10000 and verify that none of them turned out to be perfect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;#{...}&lt;/code&gt; is the notation for creating a hash-set literal. I also &lt;code&gt;apply&lt;/code&gt; &lt;code&gt;hash-set&lt;/code&gt; to the range so that I can &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/disj"&gt;&lt;code&gt;disj&lt;/code&gt;&lt;/a&gt; them.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Turns out that Neal wasn&amp;#8217;t super happy with his implementation either, specifically because of that for loop. He transformed his thinking as well and here&amp;#8217;s my implementation of that:&lt;/p&gt;

&lt;p&gt;&lt;script src="https://gist.github.com/2378401.js"&gt; &lt;/script&gt;&lt;!-- ;; @Test def alternate_perfection() { --&gt;&lt;!-- ;;   assertEquals(List(6, 28, 496, 8128), --&gt;&lt;!-- ;;               (1 until 10000) filter (NumberClassifier.isPerfect(_))) --&gt;&lt;!-- ;; } --&gt;&lt;!-- (deftest alternate-perfection --&gt;&lt;!--   (is (= [6 28 496 8128] (filter (comp (partial = :perfect) classify) (range 1 10000))))) --&gt;&lt;/p&gt;

&lt;p&gt;This translates pretty directly into Clojure. We&amp;#8217;re verifying that the only perfect numbers in that range are the ones we expect via &lt;code&gt;filter&lt;/code&gt;ing. Perhaps interesting to note that &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/="&gt;&lt;code&gt;=&lt;/code&gt;&lt;/a&gt; works despite &lt;code&gt;filter&lt;/code&gt; producing a &lt;code&gt;seq&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Moving on to currying.&lt;/p&gt;

&lt;h4&gt;What the heck is currying? Or, where I attempt to appear like I have the ability to ascend far above my own head.&lt;/h4&gt;

&lt;p&gt;When I got to writing this section, I realized that I have no clue what currying is and why it&amp;#8217;s so important. I&amp;#8217;ve heard Rich and other Clojurians say that they explicitly decided to not follow Haskell down the full currying path, but not why. I&amp;#8217;ve heard Haskell people say that currying is so important that you cannot do anything else in their language.&lt;/p&gt;

&lt;p&gt;So when two really smart groups of people disagree, what&amp;#8217;s a relatively dumb one like me supposed to do?&lt;/p&gt;

&lt;p&gt;Improvise!&lt;/p&gt;

&lt;p&gt;As a side note, it seems much more common to &lt;em&gt;not&lt;/em&gt; understand currying than it does to understand it.  Neal doesn&amp;#8217;t seem to understand currying, at least according to his article. For that matter, some of the &lt;a href="http://www.ibm.com/developerworks/java/library/j-pg08235/index.html"&gt;other authors&lt;/a&gt; over at Developer Works don&amp;#8217;t seem to understand currying. And over some brief discussions with other developer friends, once you understand currying, the most common question I found was, &amp;#8216;So what?&amp;#8217;.&lt;/p&gt;

&lt;p&gt;For my purposes, and so this article can at the very least be internally consistent even if it&amp;#8217;s externally wrong, Currying is taking a function of more than 1 argument and splitting it up into many functions that take 1 argument and return another function that takes 1 argument until you reach the last argument after which the result is given.&lt;/p&gt;

&lt;p&gt;Partial application, in contrast, is &lt;em&gt;not&lt;/em&gt; currying, though many of the authors at IBM Developer Works seem to think so. Partial application is taking a function of multiple arguments (i.e., a function that &lt;em&gt;could not exist&lt;/em&gt; in Haskell, where &lt;em&gt;all&lt;/em&gt; functions take &lt;em&gt;exactly&lt;/em&gt; one argument) and &amp;#8216;fixing&amp;#8217; some of the leading arguments, returning a new function that takes less arguments (or the same number of arguments in the case of true variadic functions like &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/+"&gt;&lt;code&gt;+&lt;/code&gt;&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;The question in my head is why currying matters &lt;em&gt;beyond&lt;/em&gt; partial application, which you can obviously see how much I enjoy by reading the code samples in &lt;a href="http://blog.twonegatives.com/tagged/functional-thinking-in-clojure-series"&gt;this series&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One of the main advantages noted by Haskell folks in &lt;code&gt;#haskell&lt;/code&gt; is that currying allows for automatic partial application. This is actually a good, albeit debatable, deal. It&amp;#8217;s a question of verbosity. &lt;code&gt;(comp (partial a b c) (partial d e f) (partial g h i))&lt;/code&gt; is a heck of a lot more verbose than &lt;code&gt;a b c . d e f . g h i&lt;/code&gt;. Which do you find to be more readable? How &amp;#8216;bout more writable?&lt;/p&gt;

&lt;p&gt;Notably, Scala does support &lt;a href="http://www.scala-lang.org/node/135"&gt;auto-partial application&lt;/a&gt;. Pass less arguments than the function definition required and you get a new function definition back that has the first &lt;code&gt;n&lt;/code&gt; arguments fixed and accepts the rest of the arguments. Again, this &lt;em&gt;isn&amp;#8217;t&lt;/em&gt; currying, but it does solve the initial point brought up by the Haskell folks. I have no idea why Clojure doesn&amp;#8217;t do this. Why isn&amp;#8217;t it possible to &lt;code&gt;(comp (a b c) (d e f) (g h i))&lt;/code&gt;?&lt;/p&gt;

&lt;p&gt;Greater minds than mine will have to explain.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m not happy with that argument because it comes down to an aesthetic decision, not a technical one. Doesn&amp;#8217;t feel like that should be correct. On the other hand, I do believe strongly in aesthetics driving thought so I can see the point. I&amp;#8217;m definitely on the side that my lovely AST is more important than complete succinctness but I understand the other side.&lt;/p&gt;

&lt;p&gt;Another possibility is something hinted at in &lt;a href="http://learnyouahaskell.com/higher-order-functions"&gt;Learn You A Haskell&lt;/a&gt;, namely, that you can partially apply arguments out of order, which is something I&amp;#8217;ve been tempted to do &lt;em&gt;a lot&lt;/em&gt; in my own source. Turns out this isn&amp;#8217;t really valid, as this is more a product of supporting infix notation than it is of currying your functions. Obviously in a prefix language like Clojure, infix is irrelevant and thus functions don&amp;#8217;t have &amp;#8216;sides&amp;#8217; that you can apply an argument to. You can get the same effect by defining an anonymous function but it&amp;#8217;s much more verbose.&lt;/p&gt;

&lt;p&gt;To wrap up this little tour of currying, 2 points that I understand almost not-at-all. One, several people mentioned that &lt;a href="http://www.haskell.org/haskellwiki/Pointfree"&gt;pointfree programming&lt;/a&gt; rocks. I read through the wiki page and this again seems to come down to an aesthetic decision. Two, several people in #haskell continually asked me what &amp;#8216;type&amp;#8217; a variadic function would have, and how you would define the argument type constraints of your function in the case of variadic arguments. As a Clojure programmer, I&amp;#8217;m not used to caring about types (unless I pass the wrong one in!), but this is apparently very important to the Haskell folks. It seems like this is for the same reason that most people argue for static type checking, namely, compiler level function call verification. I&amp;#8217;ve obviously been won over by the dynamic language siren since I&amp;#8217;m using Clojure, but I can see the point. This is the case where Haskell is more verbose than Clojure. It&amp;#8217;s up to you whether that&amp;#8217;s a good or bad thing.&lt;/p&gt;

&lt;p&gt;Enough theory, let&amp;#8217;s get to the code!&lt;/p&gt;

&lt;h4&gt;Neal&amp;#8217;s &amp;#8216;Currying&amp;#8217; examples&lt;/h4&gt;

&lt;p&gt;Now that I&amp;#8217;ve thoroughly destroyed Neal&amp;#8217;s notion of currying, let&amp;#8217;s get on to exploring what he does through partial function application, which Groovy does indeed support, albeit through a method, not automagically like Scala.&lt;/p&gt;

&lt;p&gt;&lt;script src="https://gist.github.com/2377901.js"&gt; &lt;/script&gt;&lt;!-- ;;; http://www.ibm.com/developerworks/java/library/j-ft3/index.html --&gt;&lt;!-- (ns currying.core) --&gt;&lt;/p&gt;

&lt;!-- ;; def product = { x, y -&gt; return x * y } --&gt;



&lt;p&gt;&lt;!-- ;; println "4x4: ${quadrate.call(4)}" --&gt;
&lt;!-- ;; println "5x8: ${octate(5)}" --&gt;&lt;/p&gt;

&lt;!-- (def quadrate (partial * 4)) --&gt;

&lt;!-- (def octate (partial * 8)) --&gt;



&lt;p&gt;&lt;!-- ;; println "The volume of the 2x3x4 rectangular solid is ${volume(2, 3, 4)}" --&gt;
&lt;!-- ;; println "The area of the 3x4 rectangle is ${area(3, 4)}" --&gt;
&lt;!-- ;; println "The length of the 6 line is ${lengthPA(6)}" --&gt;
&lt;!-- ;; println "The length of the 6 line via curried function is ${lengthC(6)}" --&gt;
&lt;!-- (defn volume [h w l] --&gt;
&lt;!--   (* h w l)) --&gt;&lt;/p&gt;

&lt;!-- (def area (partial volume 1)) --&gt;

&lt;!-- (def length-full-partial (partial volume 1 1)) --&gt;

&lt;!-- (def length-double-partial (partial (partial volume 1) 1)) --&gt;



&lt;!-- ;; println "composition of curried functions yields ${thirtyTwoer(2)}" --&gt;

&lt;!-- (def thirty-twoer (comp quadrate octate)) --&gt;

&lt;p&gt;&lt;!-- ;; def adder = { x, y -&gt; return x + y } --&gt;
&lt;!-- ;; def incrementer = adder.curry(1) --&gt;&lt;/p&gt;



&lt;!-- ;; object CurryTest extends Application { --&gt;

&lt;p&gt;&lt;!-- ;;   def filter(xs: List[Int], p: Int =&gt; Boolean): List[Int] = --&gt;
&lt;!-- ;;     if (xs.isEmpty) xs --&gt;
&lt;!-- ;;     else if (p(xs.head)) xs.head :: filter(xs.tail, p) --&gt;
&lt;!-- ;;     else filter(xs.tail, p) --&gt;&lt;/p&gt;

&lt;!-- ;;   def dividesBy(n: Int)(x: Int) = ((x % n) == 0) --&gt;



&lt;!-- ;; object CurryTest extends Application { --&gt;

&lt;p&gt;&lt;!-- ;;   def filter(xs: List[Int], p: Int =&gt; Boolean): List[Int] = --&gt;
&lt;!-- ;;     if (xs.isEmpty) xs --&gt;
&lt;!-- ;;     else if (p(xs.head)) xs.head :: filter(xs.tail, p) --&gt;
&lt;!-- ;;     else filter(xs.tail, p) --&gt;&lt;/p&gt;

&lt;!-- ;;   def dividesBy(n: Int)(x: Int) = ((x % n) == 0) --&gt;



&lt;p&gt;&lt;!-- (defn my-filter [predicate sequence] --&gt;
&lt;!--   {:pre [(sequential? sequence) --&gt;
&lt;!--          (every? integer? sequence)]} --&gt;
&lt;!--   (loop [sequence sequence --&gt;
&lt;!--          filtered-sequence []] --&gt;
&lt;!--     (if (empty? sequence) --&gt;
&lt;!--       filtered-sequence --&gt;
&lt;!--       (recur (next sequence) (if (predicate (first sequence)) (conj filtered-sequence (first sequence)) filtered-sequence))))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (deftest product-of-3-and-4-is-12 --&gt;
&lt;!--   (is (= 12 (quadrate 3)))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (deftest volume-of-rectange-2-by-3-by-4-is-24 --&gt;
&lt;!--   (is (= 24 (volume 2 3 4)))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (deftest the-length-of-the-6-line-by-full-partial-is-6 --&gt;
&lt;!--   (is (= 6 (length-full-partial 6)))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (deftest product-of-2-and-32-is-64 --&gt;
&lt;!--   (is (= 64 (thirty-twoer 2)))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (deftest numbers-under-10-that-divide-by-2 --&gt;
&lt;!--   (is (= [2 4 6 8] (filter (partial divides-by? 2) (range 1 10))))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (deftest cannot-pass-non-sequential-to-my-filter --&gt;
&lt;!--   (try (my-filter true 1) (catch AssertionError e))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (deftest filtering-empty-returns-empty --&gt;
&lt;!--   (is (empty? (my-filter (partial divides-by? 2) [])))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (deftest numbers-under-10-that-divide-by-3-by-my-filter --&gt;
&lt;!--   (is (= [3 6 9] (my-filter (partial divides-by? 3) (range 1 10))))) --&gt;&lt;/p&gt;

&lt;p&gt;I think the only thing terribly interesting here, as in new to show off, is the recursion construct that Clojure supplies. Everything else is vanilla function composition as I&amp;#8217;ve showed off in my other posts.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re not familiar with recursion, the good news is that you don&amp;#8217;t have to be! In Clojure at least, recursion is pretty uncommon because you can accomplish much of it through list comprehension in it&amp;#8217;s various flavors. It&amp;#8217;s so uncommon that whenever I&amp;#8217;m forced to do it because of a programming challenge or something like this, I always have to look it up again.&lt;/p&gt;

&lt;p&gt;Basically, Clojure supplies easy recursion just like any other language through calling yourself within your definition. The badness here is that there is &lt;em&gt;no&lt;/em&gt; &lt;a href="http://en.wikipedia.org/wiki/Tail_call"&gt;tail-call optimization&lt;/a&gt; on the JVM. Thus, rather than solving that problem partially and off-loading the over-head of reasoning about whether or not you&amp;#8217;ll blow your stack in this or that instance, Clojure simply says that you&amp;#8217;ll never get it, unless you explicitly use the &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/recur"&gt;&lt;code&gt;recur&lt;/code&gt; form&lt;/a&gt;. &lt;code&gt;recur&lt;/code&gt; allows you to get the benefits of tail-call optimization on the JVM.&lt;/p&gt;

&lt;p&gt;A couple of points:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;code&gt;recur&lt;/code&gt; must be used in the tail position of your function.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;recur&lt;/code&gt; outside of a &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/loop"&gt;&lt;code&gt;loop&lt;/code&gt;&lt;/a&gt; uses the function definition as it&amp;#8217;s loop point.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If that doesn&amp;#8217;t work for you, as in this case, you can supply a &lt;code&gt;loop&lt;/code&gt; form that gives it it&amp;#8217;s own bindings as in &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/let"&gt;&lt;code&gt;let&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I think that&amp;#8217;ll do for this iteration of my &lt;a href="http://blog.twonegatives.com/tagged/functional-thinking-in-clojure-series"&gt;Functional Thinking in Clojure&lt;/a&gt; series. Hopefully you&amp;#8217;re continuing to get good stuff out of it and you&amp;#8217;ll stay tuned for next time.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/21318658303</link><guid>http://blog.twonegatives.com/post/21318658303</guid><pubDate>Wed, 18 Apr 2012 05:59:09 -0400</pubDate><category>clojure</category><category>functional programming</category><category>functional thinking in clojure series</category><category>ibm developer works</category><category>neal ford</category><category>haskell</category><category>currying</category><category>partial function application</category></item><item><title>Wow! Want, want, want!

But over 200 euros!? Jeeze!

(via Tina)</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m2mkbfWyBE1qc2hdoo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Wow! Want, want, want!&lt;/p&gt;

&lt;p&gt;But over 200 euros!? Jeeze!&lt;/p&gt;

&lt;p&gt;(via &lt;a href="http://www.swiss-miss.com/2012/04/horbert.html"&gt;Tina&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/21270994666</link><guid>http://blog.twonegatives.com/post/21270994666</guid><pubDate>Tue, 17 Apr 2012 11:46:39 -0400</pubDate><category>kids</category><category>technology</category><category>want</category></item><item><title>InfoQ: Rich Hickey on Datomic: Datalog, Databases, Persistent Data Structures</title><description>&lt;a href="http://www.infoq.com/interviews/hickey-datomic"&gt;InfoQ: Rich Hickey on Datomic: Datalog, Databases, Persistent Data Structures&lt;/a&gt;: &lt;p&gt;Rich waxing poetic about Datomic and why it &lt;em&gt;rawks&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Some day soon I really need to dig in and figure out this product.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/21087443641</link><guid>http://blog.twonegatives.com/post/21087443641</guid><pubDate>Sat, 14 Apr 2012 12:02:28 -0400</pubDate><category>clojure</category><category>datomic</category><category>rich hickey</category><category>infoq</category><category>video</category><category>development</category></item><item><title>Tuts  Hub — The Best Place to Learn Online</title><description>&lt;a href="http://hub.tutsplus.com/"&gt;Tuts  Hub — The Best Place to Learn Online&lt;/a&gt;: &lt;p&gt;I can’t believe I hadn’t heard of this Tuts before. Looks like an amazing place to learn a wide variety of information related to web development and design.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/21079958620</link><guid>http://blog.twonegatives.com/post/21079958620</guid><pubDate>Sat, 14 Apr 2012 08:45:05 -0400</pubDate><category>web</category><category>development</category><category>design</category><category>learning</category></item><item><title>The Lineup Card for T4G - Desiring God</title><description>&lt;a href="http://www.desiringgod.org/blog/posts/the-lineup-card-for-t4g?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed: DGBlog (DG Blog)"&gt;The Lineup Card for T4G - Desiring God&lt;/a&gt;: &lt;p&gt;Insanity!&lt;/p&gt;

&lt;p&gt;The picture of Pastor John had me &lt;em&gt;rolling&lt;/em&gt;.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/21027416681</link><guid>http://blog.twonegatives.com/post/21027416681</guid><pubDate>Fri, 13 Apr 2012 11:23:27 -0400</pubDate><category>john piper</category><category>desiring god</category><category>humor</category></item><item><title>Ring Handlers – Functional Decorator Pattern | Squirrel's</title><description>&lt;a href="http://squirrel.pl/blog/2012/04/10/ring-handlers-functional-decorator-pattern/"&gt;Ring Handlers – Functional Decorator Pattern | Squirrel's&lt;/a&gt;: &lt;p&gt;This is a brilliant little document on how easy it is to use the ‘&lt;a href="http://en.wikipedia.org/wiki/Decorator_pattern"&gt;decorator pattern&lt;/a&gt;’ in functional languages and Clojure in particular.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mmcgrana/ring"&gt;Ring&lt;/a&gt; is an amazing library for creating web applications and it’s use of functional decorators for folding behavior into your app was inspired!&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/21021537987</link><guid>http://blog.twonegatives.com/post/21021537987</guid><pubDate>Fri, 13 Apr 2012 08:59:06 -0400</pubDate><category>clojure</category><category>decorator</category><category>functional programming</category><category>ring</category></item><item><title>Don’t docwrite scripts | High Performance Web Sites</title><description>&lt;a href="http://www.stevesouders.com/blog/2012/04/10/dont-docwrite-scripts/"&gt;Don’t docwrite scripts | High Performance Web Sites&lt;/a&gt;: &lt;p&gt;Good tip, though it’s not terribly relevant to me as the only time I ever async a script into place is after a page has already loaded.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20967547822</link><guid>http://blog.twonegatives.com/post/20967547822</guid><pubDate>Thu, 12 Apr 2012 11:55:11 -0400</pubDate><category>web</category><category>development</category><category>javascript</category><category>async</category><category>docwrite</category></item><item><title>Alternative Units for CSS3 Rotation Transforms | Impressive Webs</title><description>&lt;a href="http://www.impressivewebs.com/alternative-units-css3-rotate-transforms/"&gt;Alternative Units for CSS3 Rotation Transforms | Impressive Webs&lt;/a&gt;: &lt;p&gt;Interesting.&lt;/p&gt;

&lt;p&gt;I definitely like &lt;code&gt;grad&lt;/code&gt; best, as they allow you to do many of the interim rotations with whole numbers. &lt;code&gt;turn&lt;/code&gt; sounds interesting, but it’ll suffer from the same thing that &lt;code&gt;em&lt;/code&gt; does, namely, that you have to use floating points to get ‘exact’ sizes.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20961770227</link><guid>http://blog.twonegatives.com/post/20961770227</guid><pubDate>Thu, 12 Apr 2012 08:59:56 -0400</pubDate><category>web</category><category>development</category><category>css</category><category>rotation</category><category>css3</category></item><item><title>Want!

(via swissmiss | Funny Food)</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_m2be2gEl2i1qc2hdoo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Want!&lt;/p&gt;

&lt;p&gt;(via &lt;a href="http://www.swiss-miss.com/2012/04/funny-food.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:%20Swissmiss%20(swissmiss)"&gt;swissmiss | Funny Food&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20906895694</link><guid>http://blog.twonegatives.com/post/20906895694</guid><pubDate>Wed, 11 Apr 2012 11:53:41 -0400</pubDate><category>kid</category><category>family</category><category>swiss-miss</category><category>cooking</category></item><item><title>Functional Thinking in Clojure: Part 2.0.0.1</title><description>&lt;p&gt;Who knew I&amp;#8217;d need 3&amp;#160;&lt;code&gt;.&lt;/code&gt;s to number these posts!&lt;/p&gt;

&lt;p&gt;OK, I really don&amp;#8217;t need all those dots, but whatever. I needed some clever way to let you know that I got caught with my pants down.&lt;/p&gt;

&lt;p&gt;Turns out that my reading challenges have continued and here I am to say that I poorly implemented the square-root factorization optimization documented in &lt;a href="http://www.nealford.com/"&gt;Neal Ford&amp;#8217;s&lt;/a&gt; &lt;a href="http://www.ibm.com/developerworks/java/library/j-ft2/index.html"&gt;Functional Thinking Part 2&lt;/a&gt;. I caught it only when I moved on to working on part 3 in &lt;a href="http://blog.twonegatives.com/tagged/functional-thinking-in-clojure-series"&gt;this series&lt;/a&gt; as I removed the old non-optimized code. Hurray for &lt;a href="https://github.com/timvisher/functional-thinking-series/blob/master/ft2/functional-number-classifier/test/functional_number_classifier/test/core.clj#L20"&gt;unit tests&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Here is the correct implementation:&lt;/p&gt;

&lt;p&gt;&lt;script src="https://gist.github.com/2353495.js"&gt; &lt;/script&gt;&lt;!-- (ns functional-number-classifier.core) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (defn proper-factors [number] --&gt;
&lt;!--   (filter (partial &gt; number) (factors number))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (defn aliquot-sum-optimized [number] --&gt;
&lt;!--   (let [factors-of-square-root (filter (partial #(= 0 (rem %1 %2)) number) (range 1 (+ 1 (Math/round (Math/sqrt number))))) --&gt;
&lt;!--         symmetrical-factors (map (partial / number) factors-of-square-root) --&gt;
&lt;!--         proper-factors (filter (partial &gt; number) (into factors-of-square-root symmetrical-factors))] --&gt;
&lt;!--     (reduce + proper-factors))) --&gt;&lt;/p&gt;



&lt;p&gt;&lt;!-- (defn classify --&gt;
&lt;!--   ([number] (classify-using aliquot-sum number)) --&gt;
&lt;!--   ([factor-sum-function number] (classify-using factor-sum-function number))) --&gt;&lt;/p&gt;

&lt;p&gt;My problem was my understanding of how you utilized the square root. I thought you had to take the factors of the square root and then find which of them also factor the target number. Not so!&lt;/p&gt;

&lt;p&gt;Instead, you only need to investigate whether the numbers less than the square root are factors of the target number, thus suggesting the use of &lt;a href="http://clojuredocs.org/clojure_core/clojure.core/range"&gt;&lt;code&gt;range&lt;/code&gt;&lt;/a&gt;. It&amp;#8217;s a simple change and I will be cleaning it up even further in the next post, but for now this will do.&lt;/p&gt;

&lt;p&gt;/me blushes…&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20901172174</link><guid>http://blog.twonegatives.com/post/20901172174</guid><pubDate>Wed, 11 Apr 2012 08:30:04 -0400</pubDate><category>functional thinking in clojure series</category><category>functional programming</category><category>clojure</category></item><item><title>In the extraordinarily extraordinary event that you are not already on Dropbox, you could get me some free storage by signing up through this link.</title><description>&lt;a href="http://db.tt/wWnNScQx"&gt;In the extraordinarily extraordinary event that you are not already on Dropbox, you could get me some free storage by signing up through this link.&lt;/a&gt;</description><link>http://blog.twonegatives.com/post/20845602235</link><guid>http://blog.twonegatives.com/post/20845602235</guid><pubDate>Tue, 10 Apr 2012 11:44:50 -0400</pubDate><category>dropbox</category></item><item><title>"The power of Lisp is its own worst enemy."</title><description>“The power of Lisp is its own worst enemy.”&lt;br/&gt;&lt;br/&gt; - &lt;em&gt;&lt;p&gt;&lt;a href="http://www.winestockwebdesign.com/Essays/Lisp_Curse.html"&gt;The Lisp Curse&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(via &lt;a href="https://twitter.com/#!/fogus"&gt;@fogus&lt;/a&gt; re-tweeting &lt;a href="https://twitter.com/#!/mfeathers/status/188390983929577473"&gt;@mfeathers&lt;/a&gt;)&lt;/p&gt;&lt;/em&gt;</description><link>http://blog.twonegatives.com/post/20775813121</link><guid>http://blog.twonegatives.com/post/20775813121</guid><pubDate>Mon, 09 Apr 2012 08:58:55 -0400</pubDate><category>lisp</category><category>michael feathers</category><category>fogus</category><category>clojure</category></item><item><title>Does anyone you know actually have a safe word? In my...</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_m224xz8mT41qc2hdoo1_500.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Does anyone you know actually have a safe word? In my experience, they seem like a good idea that everyone tries again every 6 months.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20585110762</link><guid>http://blog.twonegatives.com/post/20585110762</guid><pubDate>Fri, 06 Apr 2012 08:52:02 -0400</pubDate><category>xkcd</category><category>comic</category><category>humor</category><category>relationship</category></item><item><title>Still absolutely love this moment.</title><description>&lt;iframe width="400" height="299" src="http://www.youtube.com/embed/QgSAOxwr0xE?wmode=transparent&amp;autohide=1&amp;egm=0&amp;hd=1&amp;iv_load_policy=3&amp;modestbranding=1&amp;rel=0&amp;showinfo=0&amp;showsearch=0" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Still absolutely love this moment.&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20470110058</link><guid>http://blog.twonegatives.com/post/20470110058</guid><pubDate>Wed, 04 Apr 2012 11:44:47 -0400</pubDate><category>street fighter</category><category>video</category></item><item><title>Stunning.

(via kottke)</title><description>&lt;iframe src="http://player.vimeo.com/video/37120554" width="400" height="225" frameborder="0"&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Stunning.&lt;/p&gt;

&lt;p&gt;(via &lt;a href="http://kottke.org/12/04/time-lapse-of-hitchcocks-rear-window"&gt;kottke&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20464402696</link><guid>http://blog.twonegatives.com/post/20464402696</guid><pubDate>Wed, 04 Apr 2012 08:49:05 -0400</pubDate><category>video</category><category>alfred hitchcock</category><category>jason kottke</category><category>timelapse</category><category>the rear window</category><category>movie</category></item><item><title>Wow! This is super cool, but the designer of this definitely...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_m1wh30CFqz1qc2hdoo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Wow! This is super cool, but the designer of this &lt;em&gt;definitely&lt;/em&gt; never has kids in their house.&lt;/p&gt;

&lt;p&gt;(via &lt;a href="https://twitter.com/counternotions/status/186998343858270209"&gt;counternotions&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20405939533</link><guid>http://blog.twonegatives.com/post/20405939533</guid><pubDate>Tue, 03 Apr 2012 08:53:05 -0400</pubDate><category>design</category><category>home</category><category>furnishing</category><category>light</category><category>radiator</category><category>counternotions</category></item><item><title>Infinity Blade Review - - Kill Screen</title><description>&lt;a href="http://killscreendaily.com/articles/reviews/infinity-blade/"&gt;Infinity Blade Review - - Kill Screen&lt;/a&gt;: &lt;p&gt;I heard about &lt;a href="http://killscreendaily.com/"&gt;Kill Screen&lt;/a&gt; from the excellent &lt;a href="http://www.christandpopculture.com/"&gt;Christ and Pop Culture&lt;/a&gt; blog way back. I stopped subscribing to it for some reason in one of my many RSS purges, but I’m very thankful to have been &lt;a href="https://twitter.com/kissane/status/185537988439191553"&gt;pointed to&lt;/a&gt; &lt;a href="http://killscreendaily.com/articles/reviews/infinity-blade/"&gt;this review of Infinity Blade&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I found the post absolutely compelling and, though I’ve never played the game, incredibly thought provoking about gaming and popular culture in general.&lt;/p&gt;

&lt;p&gt;The presentation was truly beautiful.&lt;/p&gt;

&lt;p&gt;Do yourself the favor, even if you don’t think you care about games at all, to go over and experience &lt;a href="http://killscreendaily.com/articles/reviews/infinity-blade/"&gt;the review&lt;/a&gt; for yourself.&lt;/p&gt;

&lt;p&gt;(via &lt;a href="https://twitter.com/kissane/status/185537988439191553"&gt;Erin&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20346745268</link><guid>http://blog.twonegatives.com/post/20346745268</guid><pubDate>Mon, 02 Apr 2012 09:00:06 -0400</pubDate><category>killscreen magazine</category><category>erin kissane</category><category>infinity blade</category><category>game</category></item><item><title>‘Paper’ for iPad</title><description>&lt;a href="http://fiftythree.com/"&gt;‘Paper’ for iPad&lt;/a&gt;: &lt;p&gt;&lt;a href="http://cameronmoll.tumblr.com/post/20115110114/paper" class="tumblr_blog"&gt;cameronmoll&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;iframe src="http://player.vimeo.com/video/37254322?color=ffffff" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="margin-bottom: 15px;"&gt;&lt;/iframe&gt;

&lt;p&gt;There are so many things right about this app. The lovely watercolor, miniature sketchbook icon. The marketing site. The “take this everywhere life takes you” video above. And the undo gesture: Place two fingers on the screen and draw a circle counter-clockwise to undo and clockwise to redo. (Though the number of undo/redo steps are limited.)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Ooo baby! That does look awesome. I still think that having a paper notebook in your pocket is the best way to go, but the idea of having it all stored digitally in this beautiful package is really intriguing. But then I need the iPad with me all the time…&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20290348578</link><guid>http://blog.twonegatives.com/post/20290348578</guid><pubDate>Sun, 01 Apr 2012 12:00:05 -0400</pubDate><category>cameron moll</category><category>notebook</category><category>memory</category><category>capture</category></item><item><title>swissmiss | The Lorax Experiment</title><description>&lt;a href="http://www.swiss-miss.com/2012/03/the-lorax-experiment.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed: Swissmiss (swissmiss)"&gt;swissmiss | The Lorax Experiment&lt;/a&gt;: &lt;p&gt;I hadn’t watched the trailer for The Lorax up until this post, figuring that The Lorax would be just another in the long train of abused childhood tails.&lt;/p&gt;

&lt;p&gt;But the trailer really blew me away. Maybe we’ll finally have a use for those movie theater gift certificates people keep giving us!&lt;/p&gt;</description><link>http://blog.twonegatives.com/post/20283221367</link><guid>http://blog.twonegatives.com/post/20283221367</guid><pubDate>Sun, 01 Apr 2012 09:00:05 -0400</pubDate><category>the lorax</category><category>swissmiss</category><category>video</category><category>kids</category><category>parenting</category></item></channel></rss>

