<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-178174920347765771</id><updated>2012-02-02T00:35:22.119-08:00</updated><category term='ruby'/><category term='C#'/><category term='C++'/><category term='scuba'/><category term='scala'/><category term='systems design'/><category term='java'/><category term='groovy'/><category term='erlang'/><category term='object oriented'/><category term='haskell'/><category term='C'/><category term='functional programming'/><category term='parallel/distributed/concurrent'/><category term='scala humor'/><category term='monads'/><category term='version control'/><category term='programming languages'/><category term='types'/><category term='humor'/><title type='text'>One Div Zero</title><subtitle type='html'>An exploration of software development.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-6243457048915628551</id><published>2012-01-05T16:03:00.000-08:00</published><updated>2012-01-06T13:01:24.023-08:00</updated><title type='text'>Type Errors as Warnings</title><summary type='text'>Paul Snively and I are having a bit of disagreement about the value of treating type errors as warnings during development.  It's hard to make anything like a cohesive point on Twitter so I thought I'd write a quickie post on what I mean and why I think it's valuable.What I'm talking about is not revolutionary.  Eclipse JDT does it and I'm sure others do as well.  The idea in a nutshell is that </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/6243457048915628551/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=6243457048915628551' title='29 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6243457048915628551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6243457048915628551'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2012/01/type-errors-as-warnings.html' title='Type Errors as Warnings'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-1398185908064397431</id><published>2011-06-17T09:38:00.000-07:00</published><updated>2011-06-17T11:40:14.672-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala humor'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel/distributed/concurrent'/><title type='text'>Sleep Sort! With Actors! For No Reason!</title><summary type='text'>The world's stupidest, racy sort algorithm ported to Scala actors for no good reason.import scala.actors._
import Actor._

def sleepSort(xs : List[Int]) : List[Int] = {
   def sorter(aggregator : Actor, n : Int) = actor {
      reactWithin(n * 1000) {
        case TIMEOUT =&gt; {
           aggregator ! n
           exit
        }
      }
   }

   xs map (sorter(self, _)) foreach (_.start)

   val </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/1398185908064397431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=1398185908064397431' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1398185908064397431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1398185908064397431'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2011/06/sleep-sort-with-actors-for-no-reason.html' title='Sleep Sort! With Actors! For No Reason!'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-1719719543637052959</id><published>2011-05-09T14:32:00.000-07:00</published><updated>2011-05-11T08:02:54.812-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='types'/><title type='text'>Why Eager Languages Don't Have Products and Lazy Languages Don't Have Sums</title><summary type='text'>In The Point of Laziness, Bob Harper mentioned a core duality between lazy and eager languages[1].  Eager languages have sum types but not product types and lazy languages have product types but no sum types.  I've seen a few questions about what he means.  I thought I'd try to explain.  It all has to do with non-termination, our old friend "bottom" which I'll write ⊥.  In this entire article I'm</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/1719719543637052959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=1719719543637052959' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1719719543637052959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1719719543637052959'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2011/05/why-eager-languages-dont-have-products.html' title='Why Eager Languages Don&apos;t Have Products and Lazy Languages Don&apos;t Have Sums'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-3819756574545279058</id><published>2011-01-19T07:49:00.000-08:00</published><updated>2011-01-19T08:14:37.025-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><title type='text'>The Read Eval Print Lie</title><summary type='text'>It's a common misconception that a language must be "dynamic" or "interpreted" to have a REPL, a Read Evaluate Print Loop (also sometimes confusingly called an interpreter), or to have an "eval" function.  That's not true at all.Haskell, OCaml, F#, and Scala are all statically typed languages with very sophisticated static type systems, yet all have REPLs. All are usually compiled although </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/3819756574545279058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=3819756574545279058' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3819756574545279058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3819756574545279058'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2011/01/read-eval-print-lie.html' title='The Read Eval Print Lie'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-646573968169370997</id><published>2010-11-10T09:32:00.001-08:00</published><updated>2010-11-10T11:34:04.970-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='version control'/><title type='text'>Local Version Control</title><summary type='text'>My company uses a centralized version control system.  It works reasonably well, but of course has all the downsides of centralized VCS.  So I wanted to explain how I use a local version control system to supplement even if there isn't a real "bridge" like git-svn.WhyBefore I start let me sum up why you might want to.It's not uncommon to work on task A only to have it interrupted by super </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/646573968169370997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=646573968169370997' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/646573968169370997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/646573968169370997'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/11/local-version-control.html' title='Local Version Control'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-3619684065550557457</id><published>2010-10-18T15:07:00.001-07:00</published><updated>2010-10-18T15:58:46.912-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Phantom Types In Haskell and Scala</title><summary type='text'>
/*
Some literate Haskell and Scala to demonstrate 
1) phantom types
2) I am a masochist
3) ???
4) profit!

The code is probably best viewed with a syntax colorizer
for one language or the other but I've colorized all my
 comments.

&gt; {-# LANGUAGE EmptyDataDecls #-}
&gt; module RocketModule(test1, test2, createRocket, addFuel, addO2, launch) where

*/
object RocketModule {

/*
None of these data </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/3619684065550557457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=3619684065550557457' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3619684065550557457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3619684065550557457'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/10/phantom-types-in-haskell-and-scala.html' title='Phantom Types In Haskell and Scala'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-4038797788265418733</id><published>2010-10-15T08:50:00.000-07:00</published><updated>2011-06-17T08:09:39.647-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='systems design'/><title type='text'>Systems Design: Making a New Feature (Nearly) Too Much Trouble</title><summary type='text'>EDIT: Since I wrote this BART has finally implemented an integration between parking payment and the Clipper card.  It's a little more complicated to set up than it should be, but it works.  I'll leave the rant up because the meta-point still stands.This article will look like a random rant about public transportation, but it's really a random rant about bad systems design, especially when </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/4038797788265418733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=4038797788265418733' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4038797788265418733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4038797788265418733'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/10/systems-design-making-new-feature.html' title='Systems Design: Making a New Feature (Nearly) Too Much Trouble'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-8393266978840218814</id><published>2010-10-08T16:18:00.000-07:00</published><updated>2010-10-11T13:36:21.033-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>How To Estimate Software</title><summary type='text'>A guide to estimating percentage complete and remaining time.I haven't looked at the problem.  Completed: 0% Time esimate: about 2 weeks.I've looked at the problem.  Completed: 50% Time estimate: about 2 more weeks.I've implemented almost everything.  All that remains is the difficult stuff that I don't really know how to do.  Completed: 90% Time estimate: about 2 more weeks.I've done everything.</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/8393266978840218814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=8393266978840218814' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8393266978840218814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8393266978840218814'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/10/how-to-estimate-software.html' title='How To Estimate Software'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-3065945894754504030</id><published>2010-09-13T15:51:00.000-07:00</published><updated>2010-09-14T07:52:26.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Moron Why C Is Not Assembly</title><summary type='text'>In response to a previous article a poster in some forum called me an idiot and said "everybody knows that C is a portable assembly language with some syntax sugar."  The idiot insult hurt deeply and I cried, but once the tears were dry I resolved to write a bit more on why C isn't assembly, or is at best an assembly for a strange, lobotomized machine.  Also, I may have misspelled "more on" in </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/3065945894754504030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=3065945894754504030' title='49 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3065945894754504030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3065945894754504030'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/09/moron-why-c-is-not-assembly.html' title='Moron Why C Is Not Assembly'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>49</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-2589355882870196097</id><published>2010-08-27T13:55:00.000-07:00</published><updated>2011-02-07T08:11:35.751-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Why Scala's "Option" and Haskell's "Maybe" types will save you from null</title><summary type='text'>Cedric Beust makes a bunch of claims in his post on Why Scala's "Option" and Haskell's "Maybe" types won't save you from null, commenters say he doesn't get it and he says nobody has argued with his main points.  So I thought I'd do a careful investigation to see what, if anything, is being missed.First, right off the top here: Scala has true blue Java-like null; any reference may be null.  Its </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/2589355882870196097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=2589355882870196097' title='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2589355882870196097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2589355882870196097'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/08/why-scalas-and-haskells-types-will-save.html' title='Why Scala&apos;s &amp;quot;Option&amp;quot; and Haskell&apos;s &amp;quot;Maybe&amp;quot; types will save you from null'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-3386485961399223</id><published>2010-08-13T13:18:00.000-07:00</published><updated>2010-08-13T13:21:59.088-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Sometime in 1977</title><summary type='text'>Kernighan: "I know, let's open the book with a program that displays 'hello, world.'"
Ritchie: "Great idea! I'll start the patent search."</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/3386485961399223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=3386485961399223' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3386485961399223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3386485961399223'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/08/sometime-in-1977.html' title='Sometime in 1977'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-909810478178688319</id><published>2010-08-02T07:43:00.000-07:00</published><updated>2010-08-02T15:29:52.768-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>On Removing Java Checked Exceptions By Means of Perversion</title><summary type='text'>/*What do you do in Java when you need to throw a checked exception in a context where it's not allowed, for instance when implementing a third party interface with no declared throws clause?  If you're smart and its allowed you just write the code in another language. Otherwise you probably just wrap the bastard checked exception in an unchecked exception and be on your way.But the wrapping </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/909810478178688319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=909810478178688319' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/909810478178688319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/909810478178688319'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/08/on-removing-java-checked-exceptions-by.html' title='On Removing Java Checked Exceptions By Means of Perversion'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-9120467841801838459</id><published>2010-07-20T12:36:00.000-07:00</published><updated>2010-07-31T07:22:17.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>When CONSTants Vary</title><summary type='text'>/*Occasionally somebody will suggest that statically typed language X (Java, C#, Scala, F#, whatever) would be better off with C++'s "const", a type qualifer that supposedly makes objects immutable in certain contexts[1].  I'm not convinced.  Const requires a fair amount of work and provides fairly small guarantees.  This post is a bit of literate C++ program demonstrating some of the weaknesses </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/9120467841801838459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=9120467841801838459' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/9120467841801838459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/9120467841801838459'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/07/when-constants-vary.html' title='When CONSTants Vary'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-9152348724635748102</id><published>2010-07-09T09:24:00.000-07:00</published><updated>2010-07-11T20:17:24.789-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Code Monkeyism's Post Is Unfit For Serious Reading</title><summary type='text'>Stephan Schmidt makes several points in Scala Is Unfit For Serious Development .  Some are even valid.  Unfortunately, the valid points are buried in over-generalizations and attacks on the attitudes of the developers and community.It's unfit because the developers and the community are unwilling.At the end of his little diatribe he thanks 2 members of the community for helping him with his </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/9152348724635748102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=9152348724635748102' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/9152348724635748102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/9152348724635748102'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/07/code-monkeyisms-post-is-unfit-for.html' title='Code Monkeyism&apos;s Post Is Unfit For Serious Reading'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-7041142113636747263</id><published>2010-05-27T06:54:00.000-07:00</published><updated>2010-05-27T14:42:18.808-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Who Will Throw the Hammer This Time?</title><summary type='text'>During the 1984 Super Bowl, Apple released an ad where gray, drab people are transfixed on a giant screen with a talking head who tells them how utopian their uniform world is.  A female athlete jogs in and throws a hammer at the screen, the screen explodes, and a new voice announces the release of the Apple Macintosh.The ad riffed off of the George Orwell dystopian novell Nineteen Eighty-Four.  </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/7041142113636747263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=7041142113636747263' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7041142113636747263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7041142113636747263'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/05/who-will-throw-hammer-this-time.html' title='Who Will Throw the Hammer This Time?'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-2933252320565217229</id><published>2010-05-25T07:32:00.000-07:00</published><updated>2010-05-25T09:53:51.407-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='types'/><title type='text'>Anatomy of an Annoyance</title><summary type='text'>The warning "Type safety : A generic array of T is created for a varargs parameter" is so irritating it makes me want to beat Java with a snoracle, an implement that allows defunct tech companies to breath while underwater. This article will explain what the warning is, where it comes from, and why it is pretty boneheaded. The warning also shows just how hard it is to extend an existing language </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/2933252320565217229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=2933252320565217229' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2933252320565217229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2933252320565217229'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/05/anatomy-of-annoyance.html' title='Anatomy of an Annoyance'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-5671321100639097484</id><published>2010-05-05T08:43:00.000-07:00</published><updated>2010-05-10T08:18:02.010-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><title type='text'>Types à la Chart</title><summary type='text'>I recently saw a debate on whether a certain language had a "weak" or "strong" type system. Naturally the debate ended in flames.  As far as I could tell neither side knew what the other was talking about which isn't surprising as I've almost as many definitions of "weak" and "strong" typing as there are developers who use the words. Frankly the words have too many meanings to be useful.If the </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/5671321100639097484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=5671321100639097484' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5671321100639097484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5671321100639097484'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/05/types-la-chart.html' title='Types à la Chart'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-4479598368262226583</id><published>2010-04-12T15:23:00.000-07:00</published><updated>2010-04-13T16:18:39.734-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>C Is Not Assembly</title><summary type='text'>In my last article I dug down into some of the joys of undefined pointer behavior in C.  But I did it in the context of an architecture that most developers aren't too likely to ever see again, the Intel 8086. I wanted to show that this stuff matters even with more mainstream architectures because compilers are free to do a lot of non-obvious things.  C is not assembly.The United States Computer </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/4479598368262226583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=4479598368262226583' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4479598368262226583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4479598368262226583'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/04/c-is-not-assembly.html' title='C Is Not Assembly'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-2828860865593933782</id><published>2010-04-08T08:42:00.000-07:00</published><updated>2010-04-08T12:31:43.342-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><title type='text'>Good Math, Bad Pointer Math</title><summary type='text'>Heard about the new C bandwagon? According to April's Tiobe report C has eclipsed Java as the number 1 most popular language by a whopping 0.007%. So while all the rest of you Java suckers have just lost all professional relevance, I'm OK. I cut my professional teeth on C.Sometime ago on Twitter I gave in-jest advice to new C programmers: all your code and data are in one giant mutable array </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/2828860865593933782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=2828860865593933782' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2828860865593933782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2828860865593933782'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/04/good-math-bad-pointer-math.html' title='Good Math, Bad Pointer Math'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-6031173593466159927</id><published>2010-03-08T07:40:00.000-08:00</published><updated>2010-10-11T09:36:36.111-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Robert Fischer Finally Admits that Scala is Functional</title><summary type='text'>Robert Fischer saysIf your language doesn’t lead people to re-discover point free programming at least in the small, then the language really isn’t taking function manipulation and functional language type conceptions seriously.Thus Fischer has finally recognized that Scala is functional.
val double : Int =&gt; Int = 2 * // point free function definition
List(1,2,3) map double /* removes one point </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/6031173593466159927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=6031173593466159927' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6031173593466159927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6031173593466159927'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2010/03/robert-fischer-finally-admits-that.html' title='Robert Fischer Finally Admits that Scala is Functional'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-5059709925446668158</id><published>2009-08-21T14:17:00.001-07:00</published><updated>2010-11-23T09:31:30.354-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Getting to the Bottom of Nothing At All</title><summary type='text'>Except when I'm being a total smart ass or self indulgent emo telling the Ruby community to f' off, most of what I write talks about practical stuff, often with a small dose of theory.  But this time it's about theory with a small dose of practice.Last time I talked about the way programmers in popular C derived languages C++, Java, and C# think of a void function as being one that returns </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/5059709925446668158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=5059709925446668158' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5059709925446668158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5059709925446668158'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/08/getting-to-bottom-of-nothing-at-all.html' title='Getting to the Bottom of Nothing At All'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-7037726222994626038</id><published>2009-07-23T15:11:00.000-07:00</published><updated>2010-11-23T09:26:31.363-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Void vs Unit</title><summary type='text'>I suspect most people who come to one of the statically typed functional languages like SML, OCaml, Haskell, F#, or Scala will have only seen static typing in one of the popular C derived languages like C++, Java, or C#.  Some differences in type system become clear fast.  One particular spot is the relationship and difference between void and unit.So imagine your favorite C derived language.  </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/7037726222994626038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=7037726222994626038' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7037726222994626038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7037726222994626038'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/07/void-vs-unit.html' title='Void vs Unit'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-7140048831795003215</id><published>2009-07-16T08:03:00.000-07:00</published><updated>2009-07-16T09:41:37.656-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>"Fixing" Groovy?</title><summary type='text'>In response to my last article on Groovy's lack of static typing James Strachan, the original Groovy guy, tweeted "groovy should fix this really IMHO."  Well, perhaps.  But "fixing" it would substantially change Groovy's semantics.  Most importantly it would prevent Groovy from executing some programs that work just fine right now.An ExampleHere's a simple example of a program that works now but </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/7140048831795003215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=7140048831795003215' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7140048831795003215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7140048831795003215'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/07/fixing-groovy.html' title='&quot;Fixing&quot; Groovy?'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-2560089181381669872</id><published>2009-07-15T16:54:00.000-07:00</published><updated>2010-08-27T10:35:28.763-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='types'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Groovy Does Not Have Optional Static Typing</title><summary type='text'>Every now and then somebody writes that Groovy supports optional static typing.  But it doesn't.  They've confused the use of type annotations on variables with a static type system.This article is emphatically not an entry in the long, sad, and mostly insipid static vs. dynamic debate.  It is a clarification of a misunderstanding.DefinitionsThe word "static" in "static type system" is related to</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/2560089181381669872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=2560089181381669872' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2560089181381669872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2560089181381669872'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/07/groovy-does-not-have-optional-static.html' title='Groovy Does Not Have Optional Static Typing'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-5126972453166458305</id><published>2009-05-15T08:42:00.000-07:00</published><updated>2009-05-15T12:56:40.739-07:00</updated><title type='text'>Erlang is Not Functional</title><summary type='text'>Robert Fischer claims Scala is not a functional language.  But if you go by his post then Erlang isn't either.ModulesFischer says
In OCaml, we define a function like this:let f x = x + 1;;In Scala, though, we define the function somewhat differently:
object SomeHolderObject {
  val f(x:int):int = { x + 1 }
}Now some Erlang
-module(SomeHolderModule).
-export([f/1]).

f(X) -&gt; X + 1.
Erlang requires</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/5126972453166458305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=5126972453166458305' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5126972453166458305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5126972453166458305'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/05/erlang-is-not-functional.html' title='Erlang is Not Functional'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-4502078731021642654</id><published>2009-05-07T19:28:00.000-07:00</published><updated>2010-08-02T14:28:15.416-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><title type='text'>A Brief, Incomplete, and Mostly Wrong History of Programming Languages</title><summary type='text'>1801 - Joseph Marie Jacquard uses punch cards to instruct a loom to weave "hello, world" into a tapestry.  Redditers of the time are not impressed due to the lack of tail call recursion, concurrency, or proper capitalization.1842 - Ada Lovelace writes the first program.  She is hampered in her efforts by the minor inconvenience that she doesn't have any actual computers to run her code.  </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/4502078731021642654/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=4502078731021642654' title='505 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4502078731021642654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4502078731021642654'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html' title='A Brief, Incomplete, and Mostly Wrong History of Programming Languages'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>505</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-4829031039331534097</id><published>2009-04-24T18:09:00.000-07:00</published><updated>2009-04-24T18:31:24.065-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Java Has Type Inference and Refinement Types (But With Strange Restrictions)</title><summary type='text'>When enthusiasts talk about Scala they frequently start with "it's a lot like Java but with all this other cool stuff like type inference and structural types and..."  I guess it's okay to introduce Scala that way.  I've done it myself.  But it does give the impression that Scala has somehow heaped complexity onto the Java.  Oddly enough, it hasn't, at least not in the areas of type inference and</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/4829031039331534097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=4829031039331534097' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4829031039331534097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4829031039331534097'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/04/java-has-type-inference-and-refinement.html' title='Java Has Type Inference and Refinement Types (But With Strange Restrictions)'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-6116630211443016162</id><published>2009-04-16T17:07:00.001-07:00</published><updated>2009-04-29T10:21:56.569-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel/distributed/concurrent'/><title type='text'>Erlang Style Actors Are All About Locking</title><summary type='text'>I managed to offend a few Erlangers by talking about actors as being shared stateful objects a couple of articles back.  Now I'm going to continue the tradition by talking about the actor locking model.  And I'm not just talking about Erlang, but any of the libraries that have sprung up for other languages to support actor style concurrency. Let me emphasize again that I like both Erlang and </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/6116630211443016162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=6116630211443016162' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6116630211443016162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6116630211443016162'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/04/erlang-style-actors-are-all-about_16.html' title='Erlang Style Actors Are All About Locking'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-8333808293262753604</id><published>2009-04-14T17:22:00.000-07:00</published><updated>2009-04-17T07:28:40.128-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='object oriented'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel/distributed/concurrent'/><title type='text'>But, But...You Didn't Mutate Any Variables</title><summary type='text'>In a private email, somebody asked of my previous article "Okay, I can see that there must be state since you've created a state machine.  But you aren't mutating any variables so where does the state come from?"  It's a good question.  If you feel you "got it" then skip this article. But if you're still hesitant or think I'm misusing the word "state" please read on.First, let me remind that I </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/8333808293262753604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=8333808293262753604' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8333808293262753604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8333808293262753604'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/04/but-butyou-didnt-mutate-any-variables.html' title='But, But...You Didn&apos;t Mutate Any Variables'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Nyksh2OFfkU/SdaexYpMWgI/AAAAAAAAAGs/36LoPVL5kZY/s72-c/path2383.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-3065882543275531333</id><published>2009-04-06T16:59:00.000-07:00</published><updated>2009-04-17T07:29:16.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel/distributed/concurrent'/><title type='text'>Erlang Style Actors Are All About Shared State</title><summary type='text'>Actors have become quite the popular topic. Besides Erlang, there's a famous library implementation in Scala and at least 3 for Java.  But the "no shared state" propaganda is setting people up for failure.  In last week's exciting episode I defined both what state is and what it isn't.  It is the fact that something responds differently to the same inputs over time.  It is not the details of how </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/3065882543275531333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=3065882543275531333' title='29 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3065882543275531333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/3065882543275531333'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/04/erlang-style-actors-are-all-about.html' title='Erlang Style Actors Are All About Shared State'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Nyksh2OFfkU/SdaexYpMWgI/AAAAAAAAAGs/36LoPVL5kZY/s72-c/path2383.png' height='72' width='72'/><thr:total>29</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-8551027449583272617</id><published>2009-04-03T16:40:00.000-07:00</published><updated>2009-04-17T07:29:35.229-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='object oriented'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel/distributed/concurrent'/><title type='text'>The State of Sock Tubes</title><summary type='text'>Oddly, given that state is such a central notion to so much programming, it's awfully misunderstood.  How do I know?  Because OO programmers think they can make it private and Erlang programmers think they don't share it.  If you agree with either of those statements then this article is for you.I want to start with a simple, hypothetical vending machines.  It dispenses socks in a tube, which is </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/8551027449583272617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=8551027449583272617' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8551027449583272617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8551027449583272617'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/04/state-of-sock-tubes.html' title='The State of Sock Tubes'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Nyksh2OFfkU/SdaexYpMWgI/AAAAAAAAAGs/36LoPVL5kZY/s72-c/path2383.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-5091392080568383923</id><published>2009-04-01T11:48:00.000-07:00</published><updated>2010-10-15T09:19:05.107-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='systems design'/><title type='text'>The Door to User Interface Design</title><summary type='text'>A common tenet in user interface design is to be consistent, especially to be consistent with de facto standards.  It's certainly a good goal, but I think that kind of consistency can be pushed too far.  I recently thought of some real world examples: humble, ordinary, every day doors.Doors share a common functional requirement: be closed sometimes and be open others.  That leaves a lot of room </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/5091392080568383923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=5091392080568383923' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5091392080568383923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5091392080568383923'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/04/door-to-user-interface-design.html' title='The Door to User Interface Design'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-4413466236256979782</id><published>2009-03-16T09:00:00.000-07:00</published><updated>2009-03-17T07:32:58.297-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><title type='text'>Operator Overloading Ad Absurdum</title><summary type='text'>Bruce Eckel's recent blog post on The Positive Legacy of C++ and Java has opened a small can of worms on the Internet.  The argument is on operator overloading[1]: tool of Satan or road to bliss?  The arguing that's resulted is the usual well thought out, reasoned debate I've come to expect from software engineers.  Which is to say, not at all.The Argument AgainstEckel mentions issues with </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/4413466236256979782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=4413466236256979782' title='51 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4413466236256979782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/4413466236256979782'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/03/operator-overloading-ad-absurdum.html' title='Operator Overloading Ad Absurdum'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>51</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-7394556909766678345</id><published>2009-01-12T22:03:00.000-08:00</published><updated>2009-01-27T08:47:48.231-08:00</updated><title type='text'>By reading Joel Fog, you will be able to experience the power of Joel Fog</title><summary type='text'>Joel Spolsky has a post about the Java installer using the the word "Java" 7 times without really saying much.  It's funny because it's true.  It's even more funny that Joel writes his post without a hint of irony.

(click for full screen Technicolor)
</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/7394556909766678345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=7394556909766678345' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7394556909766678345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7394556909766678345'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2009/01/by-reading-joel-fog-you-will-be-able-to.html' title='By reading Joel Fog, you will be able to experience the power of Joel Fog'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-6447068795355390461</id><published>2008-07-24T13:54:00.001-07:00</published><updated>2008-07-30T14:05:33.311-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scuba'/><title type='text'>Shark Eye for the Dive Guy</title><summary type='text'>This was originally published as a trip report for Tom's Dive and Swim in Austin, TX. If you happen to be a scuba diver in that area, they're a great bunch of people and the Flower Gardens is a great place to dive.


This account is loosely based on a real encounter
                on October 11, 2003.  Unlike most fish tales, however, the
                size of the fish is about the only thing </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/6447068795355390461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=6447068795355390461' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6447068795355390461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6447068795355390461'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2008/07/shark-eye-for-dive-guy.html' title='Shark Eye for the Dive Guy'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-7237755195907157340</id><published>2008-07-18T10:42:00.000-07:00</published><updated>2009-01-26T17:33:42.740-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Java Is Too Academic</title><summary type='text'>Occasionally you'll hear people praising Java because it's incredibly readable; there's only one way to do things; and other languages are too academic.  But I have proof that they're wrong.  After you view the code below I think you'll agree with me that with Java:


 It's far too easy to write code that's illegible to most programmers.
 There are far too many ways to do things.
 It's far too </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/7237755195907157340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=7237755195907157340' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7237755195907157340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/7237755195907157340'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2008/07/java-is-too-academic.html' title='Java Is Too Academic'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-8359553541911637215</id><published>2008-07-16T10:42:00.000-07:00</published><updated>2010-10-26T10:45:39.123-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Of Reading, Posting Comments, and Debates</title><summary type='text'>I can't for the life of me figure out how to get a comment to post on Ted Neward's blog article critiquing the discussion in my previous post.  Perhaps my comment is being moderated, but the system didn't say so.

So I'll put it here.

[Edit:  whatever was wrong seems to be fixed now.  I was able to post a comment, but the original seems to have been eaten.  That's okay, it's more complete here.]</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/8359553541911637215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=8359553541911637215' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8359553541911637215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8359553541911637215'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2008/07/of-reading-posting-comments-and-debates.html' title='Of Reading, Posting Comments, and Debates'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-2672341952386957915</id><published>2008-07-15T10:35:00.000-07:00</published><updated>2008-07-30T14:03:37.834-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Is Scala for Academics and Egomaniacs?</title><summary type='text'>This one isn't going to be a meaty technical article nor a deep philosophical exploration.  Instead it's about perception vs reality.   What moves me to post is the following 3 twits from Tim Dysinger.



The guys in #scala on irc are academics...
Just got kicked from #scala for arguing. 
scala sucks at gaining any momentum with that kind of academic egomaniac cliques


Edit: A few more 

 R.I.P.</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/2672341952386957915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=2672341952386957915' title='41 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2672341952386957915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/2672341952386957915'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2008/07/is-scala-for-academics-and-egomaniacs.html' title='Is Scala for Academics and Egomaniacs?'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>41</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-1730895798330068236</id><published>2008-06-23T12:25:00.003-07:00</published><updated>2008-08-01T12:35:32.030-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><title type='text'>Lambda in the Sun</title><summary type='text'>Announcing the creation of Southern California Functional Programmers (SoCalFP), a group for people in LA, Orange County, and San Diego to meet in person and/or virtually to discuss, debate, present, and learn about functional programming concepts and techniques in various languages.

You might ask, "why a functional programming group in Southern California?"

Well, SoCal, wake up and smell the </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/1730895798330068236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=1730895798330068236' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1730895798330068236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1730895798330068236'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2008/06/lambda-in-sun_23.html' title='Lambda in the Sun'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-5675298408512871978</id><published>2007-11-06T19:50:00.001-08:00</published><updated>2009-08-21T15:01:02.086-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monads'/><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Monads are Elephants Part 4</title><summary type='text'>Until you experience an adult elephant first hand you won't really understand just how big they can be.   If monads are elephants then so far in this series of articles I've only presented baby elephants like List and Option.  But now it's time to see a full grown adult pachyderm.  As a bonus, this one will even do a bit of circus magic.Functional Programming and IOIn functional programming </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/5675298408512871978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=5675298408512871978' title='18 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5675298408512871978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/5675298408512871978'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2007/11/monads-are-elephants-part-4.html' title='Monads are Elephants Part 4'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>18</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-1560748452919590443</id><published>2007-10-18T20:31:00.000-07:00</published><updated>2009-01-26T17:28:31.043-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monads'/><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Monads are Elephants Part 3</title><summary type='text'>In this series I've presented an alternative view on the old parable about the blind men and the elephant.  In this view, listening to the limited explanations from each of the blind men eventually leads to a pretty good understanding of elephants.So far we've been looking at the outside of monads in Scala.  That's taken us a great distance, but it's time to look inside.  What really makes an </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/1560748452919590443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=1560748452919590443' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1560748452919590443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1560748452919590443'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2007/10/monads-are-elephants-part-3.html' title='Monads are Elephants Part 3'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-1884014050593696028</id><published>2007-10-02T21:03:00.000-07:00</published><updated>2009-01-27T12:38:42.345-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monads'/><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Monads are Elephants Part 2</title><summary type='text'>In part 1, I introduced Scala's monads through the parable of the blind men and the elephant.  Normally we're supposed to take the view that each blind man doesn't come close to understanding what an elephant is, but I presented the alternative view that if you heard all the blind men describe their experience then you'd quickly build a surprisingly good understanding of elephants.In part 2 I'm </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/1884014050593696028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=1884014050593696028' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1884014050593696028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/1884014050593696028'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2007/10/monads-are-elephants-part-2.html' title='Monads are Elephants Part 2'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-8138648827336748223</id><published>2007-09-18T18:14:00.000-07:00</published><updated>2009-01-26T17:05:15.813-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monads'/><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Monads are Elephants Part 1</title><summary type='text'>Introductions to monads are bit of cottage industry on the Internet.  So I figured, "why buck tradition?"  But this article will present Scala's way of dealing with monads.An ancient parable goes that several blind men were experiencing their first elephant.  "It's a tree," one said while wrapping his arms around its legs.  "A large snake," another said while holding its trunk.  A third said...um</summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/8138648827336748223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=8138648827336748223' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8138648827336748223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8138648827336748223'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2007/09/monads-are-elephants-part-1.html' title='Monads are Elephants Part 1'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-8557159274743238275</id><published>2007-08-26T14:44:00.000-07:00</published><updated>2009-01-26T17:02:02.312-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monads'/><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Martians vs Monads: Null Considered Harmful</title><summary type='text'>I hate null.  More specifically I hate NullPointerExceptions(NPEs). Scala has an alternative, but let me explain why I hate NPEs.  They're like evil, sneaky muppets. Remember the Martians on Sesame Street?  They'd ask each other if a phone was a cow and then say "nope, nope, nope, nope."  To my eye, NPE looks a lot like "NoPE."Me: Is my unit test working?Computer: NoPEMe: Um...okay, fixed that </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/8557159274743238275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=8557159274743238275' title='24 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8557159274743238275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/8557159274743238275'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2007/08/martians-vs-monads-null-considered.html' title='Martians vs Monads: Null Considered Harmful'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>24</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-6943695133455080187</id><published>2007-08-16T07:07:00.001-07:00</published><updated>2009-01-26T15:55:43.453-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='object oriented'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>The Kingdom of Nerbs</title><summary type='text'>In his famous rant Execution in the Kingdom of Nouns, Steve Yegge hilariously excoriates Java for being so "noun oriented" that it's difficult to express ideas that are simple to express in functional programming languages. Scala is a language for the JVM that attempts to unify the funcional and object oriented worlds using first class functions, pattern matching, and what I'm going to call </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/6943695133455080187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=6943695133455080187' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6943695133455080187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/6943695133455080187'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2007/08/kingdom-of-nerbs.html' title='The Kingdom of Nerbs'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-178174920347765771.post-461190475791938867</id><published>2007-08-13T20:33:00.000-07:00</published><updated>2007-08-13T21:37:50.988-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programming languages'/><title type='text'>You Might Be a Blub Neck</title><summary type='text'>In Beating the Averages, Paul Graham formulated the Blub paradox.  In short a programmer who only knows a language called Blub looks down on all languages that don't support features that Blub has.  At the same time, he1 is incapable of understanding why he would want to use some weird language that has features that Blub doesn't have.   The Blub programmer is so used to thinking in Blub that he </summary><link rel='replies' type='application/atom+xml' href='http://james-iry.blogspot.com/feeds/461190475791938867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=178174920347765771&amp;postID=461190475791938867' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/461190475791938867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/178174920347765771/posts/default/461190475791938867'/><link rel='alternate' type='text/html' href='http://james-iry.blogspot.com/2007/08/you-might-be-blub-neck.html' title='You Might Be a Blub Neck'/><author><name>James Iry</name><uri>http://www.blogger.com/profile/02835376424060382389</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry></feed>
