Tuesday, February 12, 2008

Books and Rumours of Books

Hot on the heels of the news that ‘Hardcore Erlang’ is no more I’m hearing rumours that O’Reilly is working on a ‘Practical Erlang’ book to go alongside their ‘Practical Haskell’ book. My informant has told me a couple of things:


  1. the authors are also involved in teaching Erlang classes

  2. there is going to be a website for the book soon

  3. the book is going to be deeper (though less broad) than Programming Erlang: Software for a Concurrent World




I’m hoping to get an interview with the authors as the book gets closer to publication. Until then, I’ll see what more information I can lay my hands on.

Wednesday, February 6, 2008

Feb 2008 Tidbits

Okay, here are a few quick bits about Erlang that I wanted to get up for people to see.



It looks like Erlang Training and Consulting Ltd is going to be busy with Erlang training in the US this year. They’ve scheduled seven courses spread over four US cities this year. If you’re in Los Angelas, New York City, Chicago, or Palo Alto (or close enough to make the trip), you might be in luck.



If those courses won’t work for you, you might also keep your eye out for the Pragmatic Programmers Erlang Sutdio. The only one scheduled so far is in Chicago, and is already full, but who knows where the next one will be—maybe you can talk the prags into bringing one to your home town.



Speaking of the prags, it looks like Joel won’t be doing the Hardcore Erlang book for them after all. As Kevin wrote over on his hypothetical labs blog, this is really too bad. I was looking forward to a follow up to Programming Erlang. The silver lining to this cloud is that Joel will be posting the content to his blog.

Monday, October 8, 2007

Reading SICP 1.1.6

This time around, I’ve decided to toss the translations for Ruby, Factor, and Erlang into the same post instead of trying to juggle multiple posts and point them all at one another. So, without further ado …



Section 1.1.6



Let’s take a look at section 1.1.6, the goal of this section is to look at conditional expressions through implementing an absolute value procedure. the book iterates through a couple of versions, trimming away fat. In each of my examples below, I’ve only shown the final product.



In Ruby, the code should look something like this:



def abs(num)
if num < 0
num = -num
end
return num
end


In Factor it looks like this:



: abs ( n -- n ) dup 0 < [ -1 * ] [ ] if ;


And in Erlang it looks like this (I’ve left out the administrative bits from the top of the file):



abs(A) ->
case ( A < 0) of
true -> -1 * A;
false -> A
end.


Exercise 1.3



Esercise 1.3 asks the reader to write a procedure that takes three numbers and returns the sum of the squares of the largest two of them. In each case below, I rely on the previously defined square and sum-of-squares (sum_of_squares) procedures.



Ruby was pretty easy:



def sum_squares_of_larger(a, b, c)
sorted_nums = [a, b, c].sort.reverse
sum_of_squares(sorted_nums[0], sorted_nums[1])
end


Factor took me a while to figure out (mostly in trying to figure out how to build the array):



: top-two ( x,y,z -- x,y ) 3array natural-sort reverse first2 ;
: sum-squares-of-larger ( x,y,z -- x ) top-two sum-of-squares ;


I’m least sure of my Erlang code. I couldn’t find a good function for sorting the array, so I borrowed the qsort function from Programming Erlang. In any case, here’s my cut at it:



qsort([]) ->
[];
qsort([Pivot|T]) ->
qsort([X || X <- T, X < Pivot])
++ [Pivot] ++
qsort([X || X <- T, X >= Pivot]).

last_two([H|T]) ->
T.

sum_of_squares_of_list(L) ->
lists:sum([square(A) || A <- L]).

sum_squares_of_larger(A, B, C) ->
sum_of_squares_of_list(last_two(qsort([A,B,C]))).


What I learned



The biggest thing I’ve taken away from this exercise so far is that I really need a good Factor book that covers both the language and the vocabulary. Along similar lines, Programming Erlang is a good book, but it could have spent some more time on basic programming (especially covering the provided functions in something other than an appendix).



Factor has been the language that’s been hardest to wrap my mind around so far. At the same time, it’s the one that I’ve enjoyed the most—I also think the word definitions have a sort of terse beauty. I think Ruby is probably the one that most programmers could just pick up and maintain though.



Next up, Section 1.1.7 “Square Roots By Newton’s Method”.

Thursday, October 4, 2007

Reading SICP in Erlang: Section 1.1.4

Ok, here’s my erlang take on Section 1.1.4 of SICP, or you can go look at my Ruby or Factor versions.




Unlike Scheme, Ruby, or Factor, I’ve got to put the code for the square and sum_of_squares functions1 into a separate file. I’m not going to explain the mechanics of the file, but we can take a look at the functions themselves.




sicp.erl
-module(sicp).
-export([square/1]).
-export([sum_of_squares/2]).
square(A) -> A * A.
sum_of_squares(A, B) -> sicp:square(A) + sicp:square(B).


square has an arity of 1 (it takes a single argument), and returns the value of that argument times itself. Because mulitplication only works with numeric types, it will work for integers and floats, but will fail for non-numeric arguments.




To execute these functions we need to compile the code (see line 1 below). Then we just call the function (with its module namespace) and give it an appropriate argument.





1> c(sicp).
{ok,sicp}
2> sicp:square(5).
25
3> sicp:sum_of_squares(3,4).
25


And that’s about all there is to it. Pretty simple stuff. Next up will be section 1.1.6 exercise 1.3.




1 In SICP they’re called procedures; in Ruby, methods; and in Factor, words. I just need to try to keep them all straight.

Wednesday, September 26, 2007

Reading SICP in Erlang and Ruby



I’ve had a long standing goal to read SICP, but it keeps conflicting with other goals, like mastering Ruby or learning Erlang (to name a couple of geeky ones). Recently I learned of a project to ‘translate’ SICP into Erlang (and other languages).




“Great! I can use this to help with both learning Erlang and reading SICP”, I thought and went to take a look at it. It turns out they also have a Ruby translation underway, so I went to look at that first. It turns out that the first couple of examples make me think that they either don’t understand Ruby or don’t understand SICP.




Page 5 of SICP shows that you can start up a LISP or scheme interpreter and type in an expression and it will return that expression, like this:


> 486
486
>

The site recommends the following Ruby puts 486, which is not quite right:

irb(main):001:0> puts 486
486
=> nil
irb(main):002:0>

You see, this prints 486, but returns nil. A much better answer looks a lot more like scheme:

irb(main):002:0> 486
=> 486
irb(main):003:0>



With a problem like this early on, I’m not sure that I trust the Erlang or other translations. I do like the idea though, so I should probably stick with my idea of combining the goals, and just post my own translations into Erlang and Ruby (and let everyone else find my mistakes).

Wednesday, September 19, 2007

Long Time No Write

It’s been a while since I’ve written anything here, and (sadly) a long time since I’ve taken any time to focus on Erlang. I’d like to rectify both of these deficencies, so here’s a first stab.




First off, I’d like to drum up another Provo Erlounge for October 9th at 7PM (MST). We can meet at the Open Source Technology Center again (we’re supposed to have wireless access at that point). There are a couple of routes we can go, either hitting the Concurrent Programming and Distributed Programming chapters from Programming Erlang: Software for a Concurrent World or walking through some ‘real world’ Erlang code. Anyone have a request/suggestion for us?




Secondly (and more generally), I’ve recently been talking with a publisher about their entry into the Functional Programming world. They’re very interested in doing this, and seem to have a good plan. They haven’t settled on which language(s) they want to cover yet, but Erlang is on their list. They would like feedback on which languages, potential topics, and potential authors would be of interest. If you’d like to leave a comment here, I’d be happy to pass the information along. If you’re worried about other publishers mining the information (but, hey, that would just mean more potential books on Erlang and FP wouldn’t it?), feel free to email me directly.




And now, it’s off to spend a little time with Erlang.

Monday, June 11, 2007

May Contest Winners



After going through the contest entrants for May, we’ve come to a decision.
Joe, Dave, and I couldn’t decide between an entry on socket programming (which appears to be broken now) and one on ErlUnit.




The writers of these posts should drop me a line to get set up for their free copies of Programming Erlang: Software for a Concurrent World.




If you’re interested in a copy, never fear. The Erlang Blogging contest is still running. Go ahead and write a blog post about Erlang, and add a link to it in the comments below. If you’re post is selected as our June Winner, you’ll win a copy of Joe’s book as soon as it’s in print. Great topics to write about include tools for Erlang programming, tutorials about Erlang modules or software, and tutorials about Erlang itself.




Thanks for the support in May, and good luck to everyone who enters in June.