<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">
 
 <title>hassy's public journal</title>
 
 <link href="http://12monkeys.co.uk/pubj" />
 <updated>2009-05-16T00:58:05+01:00</updated>
 <id>http://12monkeys.co.uk/pubj/</id>
 <author>
   <name>Hasan Veldstra</name>
   <email>hasan@12monkeys.co.uk</email>
 </author>

 
 <link rel="self" href="http://feeds.feedburner.com/hasanveldstra" type="application/atom+xml" /><entry>
   <title>Erlang is pragmatic</title>
   <link href="http://feedproxy.google.com/~r/hasanveldstra/~3/lcrO3sR_oWY/erlang-is-pragmatic.html" />
   <updated>2009-05-16T00:00:00+01:00</updated>
   <id>http://12monkeys.co.uk/pubj//2009/05/16/erlang-is-pragmatic</id>
   <content type="html">&lt;p&gt;Yes, Erlang &lt;a href="http://james-iry.blogspot.com/2009/05/erlang-is-not-functional.html"&gt;is not&lt;/a&gt; a functional programming language.&lt;/p&gt;
&lt;p&gt;Erlang is a language that makes it easier to write fault-tolerant applications. (And &lt;span class="caps"&gt;OTP&lt;/span&gt; is the platform that makes it even easier.)&lt;/p&gt;
&lt;p&gt;Context matters.  From day one, the goal of the project that resulted in Erlang as we know it today was to come up with something that made it cheaper and faster to develop telephony systems — &lt;span class="caps"&gt;ATM&lt;/span&gt; switches and the like.  There was a lot of tinkering, rewriting, and questioning everything — even the most basic of assumptions.  There was a solid business requirement, which the Erlang team at Ericsson’s CS Lab understood well.  They were experienced hackers, with expertise in Prolog, C, Lisp and other programming languages.  They were also experienced in building fault-tolerant systems, and ruthlessly pragmatic.  It was simple: if something helped them get closer to their objective, it went into the language.  If it didn’t, it got thrown out.&lt;/p&gt;
&lt;p&gt;It turned out that discouraging mutable state brought the language closer to the goal.  Cheap lightweight isolated processes at the core of the language did too.  Currying, algebraic data types and many other features didn’t.&lt;/p&gt;
&lt;p&gt;Erlang is highly pragmatic.  This is what seems to get overlooked by many newcomers to the language.  It may be considered functional, and it may also be considered object-oriented, but that does not really matter.  (Some people also call it concurrency-oriented.  I personally like this categorization.)&lt;/p&gt;
&lt;p&gt;Read &lt;a href="http://www.cs.chalmers.se/Cs/Grundutb/Kurser/ppxt/HT2007/general/languages/armstrong-erlang_history.pdf"&gt;this paper&lt;/a&gt; if you want to understand Erlang better.  It won’t teach you to program in Erlang, but it’ll shed light on why Erlang is the way it is, and why it’s by far the best choice for solving certain problems.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/hasanveldstra/~4/lcrO3sR_oWY" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://12monkeys.co.uk/2009/05/16/erlang-is-pragmatic.html</feedburner:origLink></entry>
 
 <entry>
   <title>Erlang's hot code update + MochiWeb Reloader = awesome</title>
   <link href="http://feedproxy.google.com/~r/hasanveldstra/~3/CzdD8BvaJBk/mochi-reloader.html" />
   <updated>2009-02-05T00:00:00+00:00</updated>
   <id>http://12monkeys.co.uk/pubj//2009/02/05/mochi-reloader</id>
   <content type="html">&lt;p&gt;If you’re working on an Erlang app, and you aren’t using &lt;a href="http://code.google.com/p/mochiweb/source/browse/trunk/src/reloader.erl"&gt;MochiWeb Reloader&lt;/a&gt; yet, you’ll be wondering just how you got by without it &lt;em&gt;very soon&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Once you have Reloader set up, it’ll detect when you recompile any of the modules in your project, and reload them in the running instance of your app. It’s a bit like edit-refresh cycle you get when writing &lt;span class="caps"&gt;HTML&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;It only takes a minute or two to set up the Reloader:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Grab yourself a copy of &lt;a href="http://code.google.com/p/mochiweb/source/browse/trunk/src/reloader.erl"&gt;reloader.erl&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Add it to your build script.&lt;/li&gt;
	&lt;li&gt;Modify your app startup command to include &lt;code&gt;-run reloader start&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That’s it.&lt;/p&gt;
&lt;p&gt;If you have Emacs set up with &lt;code&gt;make&lt;/code&gt;, you can have all modified modules recompiled &amp; reloaded with just one keystroke.&lt;/p&gt;
&lt;p&gt;As a bonus, if a module exports a test/0 function, Reloader will run that too to help you to make sure you haven’t broken anything.&lt;/p&gt;
&lt;p&gt;And this is what it looks like:&lt;/p&gt;
&lt;p&gt;&lt;object width="400" height="300"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3097960&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3097960&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/3097960"&gt;MochiWeb Reloader Demo&lt;/a&gt; from &lt;a href="http://vimeo.com/user453509"&gt;Hasan Veldstra&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/hasanveldstra/~4/CzdD8BvaJBk" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://12monkeys.co.uk/2009/02/05/mochi-reloader.html</feedburner:origLink></entry>
 
 <entry>
   <title>films i've seen recently</title>
   <link href="http://feedproxy.google.com/~r/hasanveldstra/~3/UY-0thiYP38/films-ive-seen-recently.html" />
   <updated>2009-01-22T00:00:00+00:00</updated>
   <id>http://12monkeys.co.uk/pubj//2009/01/22/films-ive-seen-recently</id>
   <content type="html">&lt;p&gt;i’ve become a real fan of the movies now that i’ve got an unlimited card at Cineworld. (the deal is: pay a tenner a month, go see anything you want any time for free.)&lt;/p&gt;
&lt;p&gt;stuff i watched recently:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt0814314/"&gt;7 Pounds&lt;/a&gt; — great piece of acting by Will Smith. great death scene in the bathtub. a boring film overall though. also, what’s up with Will Smith and sleeping in bathtubs for no apparent reason? (here in 7 Pounds and in &lt;a href="http://www.imdb.com/title/tt0480249/"&gt;I Am Legend&lt;/a&gt;) you get into a bathtub when there’s a shootout in your apartment or (obviously) to have a bath. sleeping in one though… why?&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt1135985/"&gt;Sex Drive&lt;/a&gt; — went in with low expectations… and loved it. the premise is typical: a bunch of teenagers trying to get laid. the film turned out to be rather sweet &amp; endearing though, rather than tacky like e.g. American Pie. very funny too.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt1010048/"&gt;Slumdog Millionaire&lt;/a&gt; — just great. go see it if you haven’t.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt1179891/"&gt;My Bloody Valentine&lt;/a&gt; — if it wasn’t for 3D, it would be just another cheap slasher. 3D makes it worth it.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.imdb.com/title/tt1068680/"&gt;Yes Man&lt;/a&gt; — not a fan of Jim Carrey’s, but enjoyed this one. good script, good jokes, not too many out-of-place-just-because stupid faces pulled by Carrey.&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/hasanveldstra/~4/UY-0thiYP38" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://12monkeys.co.uk/2009/01/22/films-ive-seen-recently.html</feedburner:origLink></entry>
 
 <entry>
   <title>the future of Lisp...</title>
   <link href="http://feedproxy.google.com/~r/hasanveldstra/~3/T8npMrvBf68/the-future-of-lisp.html" />
   <updated>2009-01-21T00:00:00+00:00</updated>
   <id>http://12monkeys.co.uk/pubj//2009/01/21/the-future-of-lisp</id>
   <content type="html">&lt;p&gt;…is &lt;a href="http://clojure.org/"&gt;Clojure&lt;/a&gt;, &lt;a href="http://github.com/rvirding/lfe/tree"&gt;&lt;span class="caps"&gt;LFE&lt;/span&gt;&lt;/a&gt; and other such things, i.e. implementations of Lisp running on top of popular virtual machines. there are two advantages to this approach:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;you get a lot of libraries for free, as long as the author spent a bit of time thinking about interop.&lt;/li&gt;
	&lt;li&gt;(new) Lisp code can live side-by-side with (older) Java, Erlang &amp;c code. there is no need for a radical rewrite or any interop difficulties — you simply write parts of your system in Lisp where it makes sense, perhaps gradually replacing older non-Lisp code.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;the implications of both are pretty big.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Common_Lisp"&gt;Common Lisp&lt;/a&gt; is not going to get mainstream for three reasons:&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;it’s full of what looks like cruft to beginners.&lt;/li&gt;
	&lt;li&gt;it’s not straightforward to get started with. advising newbies to learn Emacs &amp; &lt;span class="caps"&gt;SLIME&lt;/span&gt; is not wise. choosing an implementation to start with can be tricky too.&lt;/li&gt;
	&lt;li&gt;the community is not making an effort to make CL seem cool.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://www.plt-scheme.org/"&gt;&lt;span class="caps"&gt;PLT&lt;/span&gt; Scheme&lt;/a&gt; is not a contender either, because it’s perceived as little more than a Lisp for teaching, which isn’t true, but the community isn’t doing much to shatter this perception.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; discussion over at &lt;a href="http://news.ycombinator.com/item?id=443948"&gt;Hacker News&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/hasanveldstra/~4/T8npMrvBf68" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://12monkeys.co.uk/2009/01/21/the-future-of-lisp.html</feedburner:origLink></entry>
 
 <entry>
   <title>Edinburgh Tech Meetup №5</title>
   <link href="http://feedproxy.google.com/~r/hasanveldstra/~3/Jzrkn8vmGBM/tech-meetup-no-5.html" />
   <updated>2009-01-15T00:00:00+00:00</updated>
   <id>http://12monkeys.co.uk/pubj//2009/01/15/tech-meetup-no-5</id>
   <content type="html">&lt;p&gt;Another great meetup. Lots of interesting and friendly people turned up again. If you’re in Edinburgh, check this out: &lt;a href="http://www.techmeetup.co.uk/"&gt;techmeetup.co.uk&lt;/a&gt; (coming to Glasgow very soon too).&lt;/p&gt;
&lt;p&gt;Sam &amp; Arnav of &lt;a href="http://yadster.com/"&gt;Yadster&lt;/a&gt; have done a really good job of organizing the meetups. Edinburgh really needed something like this; a place for techies to get together, meet new people, talk shop and get drunk. &lt;a href="http://www.inf.ed.ac.uk/"&gt;The School Of Informatics&lt;/a&gt;, more specifically &lt;a href="http://www.informatics-ventures.com/"&gt;Informatics Ventures&lt;/a&gt;, have been awesome too. Thanks to them, we have a great place to meet in and something to munch on.&lt;/p&gt;
&lt;p&gt;I did a short talk on &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; this time. It wasn’t really technical — my intention was to show what’s cool about Git and encourage people to get the details for themselves. I think I succeeded. Some of the things I’ve said sparked a lively discussion afterwards, anyway. The slides, if you’re interested, are &lt;a href="http://12monkeys.co.uk/files/git-slides-tech-meetup.pdf"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;(On a side note, a lot of technical presentations I’ve seen suffer from one problem — the benefit to me isn’t made clear in the first few minutes. I usually don’t care much about how something works until after I’m excited about this new thing.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;/strong&gt; The video of my talk is now up on &lt;a href="http://www.techmeetup.co.uk/blog/?p=180"&gt;techmeetup.co.uk&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/hasanveldstra/~4/Jzrkn8vmGBM" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://12monkeys.co.uk/2009/01/15/tech-meetup-no-5.html</feedburner:origLink></entry>
 
 <entry>
   <title>hello, F#</title>
   <link href="http://feedproxy.google.com/~r/hasanveldstra/~3/-CFnTyZDLSQ/f-sharp.html" />
   <updated>2008-12-13T00:00:00+00:00</updated>
   <id>http://12monkeys.co.uk/pubj//2008/12/13/f-sharp</id>
   <content type="html">&lt;p&gt;&lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=293"&gt;.&lt;span class="caps"&gt;NET&lt;/span&gt; Rocks! Podcast #293 on F#&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.xbox.com/en-GB/live/xbox360/features/matchmaking.htm"&gt;XBox Live TrueSkill&lt;/a&gt; system &lt;a href="http://blogs.msdn.com/dsyme/archive/2006/11/22/three-machine-learning-experts-f-interactive-ienumerable-a-terabyte-of-data-and-xbox-live.aspx"&gt;uses&lt;/a&gt; &lt;a href="http://blogs.msdn.com/dsyme/archive/2006/04/01/566301.aspx"&gt;F#&lt;/a&gt;.&lt;/p&gt;
&lt;hr noshade height="1px" width="400px" color="#ded" /&gt;
&lt;p&gt;i’m learning F# as well as getting to know the .&lt;span class="caps"&gt;NET&lt;/span&gt; APIs &amp; the dev toolchain. i haven’t used a statically-typed functional PL since a couple of years (and that was Haskell for a couple of simple projects at uni). i also haven’t used Windows since around 2001. lots of head scratching but i’m having fun.&lt;/p&gt;
&lt;p&gt;the best way to learn a new language is to write something real in it, so &lt;a href="http://www.coffee-driven.com/"&gt;Tom&lt;/a&gt; &amp; i are writing a simple document-oriented database in F#. nothing to show yet, but if we get somewhere we’ll probably publish the code.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/hasanveldstra/~4/-CFnTyZDLSQ" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://12monkeys.co.uk/2008/12/13/f-sharp.html</feedburner:origLink></entry>
 
 <entry>
   <title>hello, Jekyll</title>
   <link href="http://feedproxy.google.com/~r/hasanveldstra/~3/2_6MQ9CmlMc/jekyll.html" />
   <updated>2008-12-10T00:00:00+00:00</updated>
   <id>http://12monkeys.co.uk/pubj//2008/12/10/jekyll</id>
   <content type="html">&lt;h1&gt;hello, Jekyll&lt;/h1&gt;
&lt;p&gt;Bye, PyBlosxom, hello &lt;a href="http://github.com/mojombo/jekyll/tree"&gt;Jekyll&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Jekyll is a lot like nanolog, my own little publishing script I’ve been spending some time on in the last couple of weeks, only usable now and much better. &lt;code&gt;mv nanolog/ dead/&lt;/code&gt;&lt;/p&gt;
&lt;hr noshade height="1px" width="400px" color="#ded" /&gt;
&lt;p&gt;&lt;a href="http://spotify.com"&gt;Spotify&lt;/a&gt; — one of my other recent discoveries — is simply awesome.&lt;br /&gt;
It’s so good I’d pay for it. (Though for now the free version will do.)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://spotify.com"&gt;&lt;img src="/images/spotify_logo.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr noshade height="1px" width="400px" color="#ded" /&gt;
&lt;p&gt;In other news, I’m going to Entrepreneural Finance tomorrow, the second part of the School For Startups workshop by Doug Richard.&lt;br /&gt;
The first part was great and no doubt tomorrow will be interesting too. I’m looking forward to hearing what Doug has to say in light of the whole recent “sky is falling” situation. (And &lt;a href="http://uk.techcrunch.com/2008/12/01/trutap-decimates-headcount-keeps-skeleton-staff-looks-for-sale/"&gt;this&lt;/a&gt; of course.)&lt;/p&gt;
&lt;p&gt;(I published my notes from School For Startups &lt;a href="http://12monkeys.co.uk/w/doug_richard_sfs08.html"&gt;here&lt;/a&gt;.)&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/hasanveldstra/~4/2_6MQ9CmlMc" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://12monkeys.co.uk/2008/12/10/jekyll.html</feedburner:origLink></entry>
 
 <entry>
   <title>blank</title>
   <link href="http://feedproxy.google.com/~r/hasanveldstra/~3/pQVctuWJFUA/blank.html" />
   <updated>2007-01-01T00:00:00+00:00</updated>
   <id>http://12monkeys.co.uk/pubj//2007/01/01/blank</id>
   <content type="html">&lt;p&gt;this space intentionally left blank&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/hasanveldstra/~4/pQVctuWJFUA" height="1" width="1"/&gt;</content>
 <feedburner:origLink>http://12monkeys.co.uk/2007/01/01/blank.html</feedburner:origLink></entry>
 
 
</feed>
