<?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:blogger='http://schemas.google.com/blogger/2008' 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-5246027334551923738</id><updated>2013-05-22T11:36:07.228-07:00</updated><category term='distributed'/><category term='test-and-set mutex'/><category term='p2p'/><category term='scalability'/><category term='rpc'/><category term='contracts'/><category term='erlang'/><category term='fra-lagen'/><category term='quote marks'/><category term='programming'/><category term='peer to peer'/><category term='transaction memories'/><category term='violation of human rights'/><category term='privacy'/><category term='websockets'/><category term='protocols'/><category term='multi-core'/><category term='venture capital'/><category term='corba'/><category term='concurrency'/><category term='chrome'/><category term='wikipedia'/><category term='shared memory'/><category term='ldap'/><category term='typography'/><category term='asn.1'/><category term='unit test'/><category term='fault-tolerance'/><category term='functional programming'/><category term='VM design'/><category term='test driven development'/><category term='sweden'/><category term='message passing'/><category term='ftp'/><category term='couchDB'/><category term='json'/><category term='contentEditable javascript erlang couchdb'/><category term='money'/><title type='text'>armstrong on software</title><subtitle type='html'>Mainly about Erlang, 
programming, 
and anything else that takes my fancy.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-3051706052907971885</id><published>2012-06-26T12:41:00.000-07:00</published><updated>2012-06-26T12:41:11.449-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='functional programming'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><title type='text'>Where's my cheese</title><summary type='text'>Imperative programming is pretty difficult.

The main problem is that once you've put something somewhere you expect to find it where you put it.



“Hej, who moved my cheese?” you're thinking.

If you put a chunk of cheeses in the fridge, its nice if you can find it where you put it.  You put things in places, and later you expect to find them where you put them.  What this boils down to in </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/3051706052907971885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=3051706052907971885&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3051706052907971885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3051706052907971885'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2012/06/wheres-my-cheese.html' title='Where&apos;s my cheese'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-918495463446617172</id><published>2012-06-26T04:17:00.000-07:00</published><updated>2012-06-26T04:17:49.785-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='typography'/><category scheme='http://www.blogger.com/atom/ns#' term='quote marks'/><title type='text'>What happened to my quotes?</title><summary type='text'>How come Google and blogger.com can't get quote marks right?

In English we use “ for a start quote mark and ” for a ending quotes.

But all Google's editors insert a " quote when you type the quote symbol.

What ever happened to typography?</summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/918495463446617172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=918495463446617172&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/918495463446617172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/918495463446617172'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2012/06/what-happened-to-my-quotes.html' title='What happened to my quotes?'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-8405750228489487288</id><published>2012-06-26T04:10:00.000-07:00</published><updated>2012-06-26T04:10:02.451-07:00</updated><title type='text'>I recover my blog</title><summary type='text'>I managed to get my blog back. Admittedly it's not the original format but at least I can view all the old content.

The problem appears to be in the templates. I tried using one of Goggles "Dynamic Views" but these just made my blog unreadable.

 I have now reverted to one of the
"Simple" Templates. I guess simple means "I can now read my blog."

</summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/8405750228489487288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=8405750228489487288&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/8405750228489487288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/8405750228489487288'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2012/06/i-recover-my-blog.html' title='I recover my blog'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-4966503458596292462</id><published>2012-06-21T12:52:00.002-07:00</published><updated>2012-06-22T01:51:26.004-07:00</updated><title type='text'>Sorry about the blog</title><summary type='text'>This blog is now totally fucked up. If you click on any of the old articles all you'll see is the beginning.All comments seem to be broken as well.I changed to the new templates.Result - a mess.Can I revert to the old blog - No. There is no revert button.Thanks Google.To my readers. Sorry about this. I'll try and fix the content on a non-google site.</summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/4966503458596292462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=4966503458596292462&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/4966503458596292462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/4966503458596292462'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2012/06/sorry-about-blog.html' title='Sorry about the blog'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-3196525077345707737</id><published>2009-12-16T03:25:00.001-08:00</published><updated>2012-06-22T01:52:00.294-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='websockets'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><title type='text'>Comet is dead long live websockets</title><summary type='text'>I've just had a chance to play with the implementation of websocketsin Googles Chrome browser.  This post  started me off.After a small amount of experimentation I was able to make Erlang talk to a web page using pure asynchronous message passing.I think this means the death of the following technologies:cometlong-pollAJAXkeep-alive socketsAll the above are merely hacks, inadequate ways of </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/3196525077345707737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=3196525077345707737&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3196525077345707737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3196525077345707737'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2009/12/comet-is-dead-long-live-websockets.html' title='Comet is dead long live websockets'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-3196478642852125831</id><published>2009-06-29T11:15:00.000-07:00</published><updated>2009-06-29T11:26:57.920-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contentEditable javascript erlang couchdb'/><title type='text'>Content Editable</title><summary type='text'>I've been playing with the HTML contentEditable mode in Firefox.One word awesome.I quickly managed to put together the basis of a seamless editor. This is described in a seven part article.Part1 - toggling content editablePart2 - Adding some stylePart3 - Adding editing buttonsPart4 - A seamless structure editorPart5 - All the buttonsPart6 - Storing the results foreverPart7 - Integration with </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/3196478642852125831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=3196478642852125831&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3196478642852125831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3196478642852125831'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2009/06/content-editable.html' title='Content Editable'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-1165264298212740849</id><published>2009-02-15T02:46:00.000-08:00</published><updated>2009-02-15T03:34:49.318-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='contracts'/><category scheme='http://www.blogger.com/atom/ns#' term='json'/><category scheme='http://www.blogger.com/atom/ns#' term='protocols'/><title type='text'>JSON protocols (part 1)</title><summary type='text'> For a long time I have been interested in describing protocols. In 2002 I published a contract system called UBF for defining protocols. This scheme was never widely adopted - perhaps it was just to strange...I have revised UBF and recast it in a form which I call JSON Protocols - since JSON is widely implemented, this method of described protocols might be more acceptable.What's the problem?</summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/1165264298212740849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=1165264298212740849&amp;isPopup=true' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/1165264298212740849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/1165264298212740849'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2009/02/json-protocols-part-1.html' title='JSON protocols (part 1)'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-3507765455089605433</id><published>2009-01-28T01:14:00.000-08:00</published><updated>2009-01-28T04:08:32.230-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='test driven development'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='unit test'/><title type='text'>Micro Lightweight Unit Testing</title><summary type='text'>I'm often asked the question "what unit testing framework do you use?" The answer is usually I don't, but I do use a form of micro testing that is built into Erlang.In Erlang, every assignment of the form Lhs = Rhs where the Lhs is a ground-term and  Rhs is a non-ground term can be viewed as an assertion, or unit test, since it can possibly fail.So when we write:    {ok, S} = file:open("filename"</summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/3507765455089605433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=3507765455089605433&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3507765455089605433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3507765455089605433'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2009/01/micro-lightweight-unit-testing.html' title='Micro Lightweight Unit Testing'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-8318692186429607666</id><published>2008-07-10T00:39:00.000-07:00</published><updated>2008-07-10T03:48:23.289-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='ldap'/><category scheme='http://www.blogger.com/atom/ns#' term='VM design'/><category scheme='http://www.blogger.com/atom/ns#' term='asn.1'/><title type='text'>UBF and VM opcocde design</title><summary type='text'> UBF is a data encoding that allows structured terms (rather like XML) to be sent over the network. It also includes a protocol checking scheme to automatically determine if sequences of typed messages follow a particular protocol.This blog entry was stimulated by this posting on the erlang mailing list.One of the basic ideas of UBF of was to send programs not data structures. The programs were </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/8318692186429607666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=8318692186429607666&amp;isPopup=true' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/8318692186429607666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/8318692186429607666'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2008/07/ubf-and-vm-opcocde-design.html' title='UBF and VM opcocde design'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-4724295521704285571</id><published>2008-06-28T13:53:00.000-07:00</published><updated>2008-11-15T00:49:12.220-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='couchDB'/><category scheme='http://www.blogger.com/atom/ns#' term='p2p'/><category scheme='http://www.blogger.com/atom/ns#' term='peer to peer'/><title type='text'>Itching my programming nerve</title><summary type='text'>Photo: oreillygmtI've just got back from the first ever commercial Erlang conference. Some 40 talks in two days all related in some way or other to Erlang. It was a chance to meet old friends, make new friends and  connect people together in the hope that new synergy effects would arise.The most exciting thing was the emergence of what I think might be the first killer applications written in </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/4724295521704285571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=4724295521704285571&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/4724295521704285571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/4724295521704285571'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2008/06/itching-my-programming-nerve.html' title='Itching my programming nerve'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_m9AVLEb9djs/SG-zJvx97RI/AAAAAAAAAFA/p2EE9DgVS3g/s72-c/2613639696_ca4220ed83.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-7309515441611634378</id><published>2008-06-24T11:28:00.000-07:00</published><updated>2008-06-24T12:53:06.998-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='violation of human rights'/><category scheme='http://www.blogger.com/atom/ns#' term='sweden'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='privacy'/><category scheme='http://www.blogger.com/atom/ns#' term='fra-lagen'/><title type='text'>Invasion of Privacy</title><summary type='text'>On 18 June the Swedish Parliament passed a law giving sweeping new powers to the FRA (Swedish Defense Radio Establishment) allowing them to wiretap people in Sweden through phone conversations, email, text messages and more.All people in Sweden using electronic communication can have their communication monitored despite the fact that they are not suspected of committing any crime.In my view this</summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/7309515441611634378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=7309515441611634378&amp;isPopup=true' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/7309515441611634378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/7309515441611634378'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2008/06/invasion-of-privacy.html' title='Invasion of Privacy'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-2767538981043038705</id><published>2008-05-26T04:41:00.001-07:00</published><updated>2008-05-27T07:03:17.367-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='corba'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='rpc'/><title type='text'>The Road we didn't go down</title><summary type='text'>I've been following an interesting discussion on the Erlang mailing list where Steve Vinoski and friends have been telling us what's wrong with RPC.The discussion started on 22 May, the general topic of conversation was the announcement that facebook had deployed a chat server written in Erlang.In one of the posts Steve said:"What all those years of CORBA taught me, BTW, is that RPC, for anumber </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/2767538981043038705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=2767538981043038705&amp;isPopup=true' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/2767538981043038705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/2767538981043038705'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2008/05/road-we-didnt-go-down.html' title='The Road we didn&apos;t go down'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-3760743554935855110</id><published>2007-07-19T02:21:00.000-07:00</published><updated>2007-07-19T03:52:16.543-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='scalability'/><category scheme='http://www.blogger.com/atom/ns#' term='fault-tolerance'/><title type='text'>Scalable  fault-tolerant upgradable systems  Part 1</title><summary type='text'>let's talk about servers which are:Scalablefault-tolerant Dynamically UpgradableQ: Are these really the same thing?A: Well not really, but they are very similar.A system that is fault-tolerant can easily be made scalable and easily made so that we can do in-service upgrade.Here's how:Algorithm1.In-service Upgrade.Assume we have N nodes running version one of a program - we want to upgrade to </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/3760743554935855110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=3760743554935855110&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3760743554935855110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/3760743554935855110'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2007/07/scalable-fault-tolerant-upgradable.html' title='Scalable  fault-tolerant upgradable systems  Part 1'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-6255649099984262630</id><published>2007-03-03T09:26:00.000-08:00</published><updated>2007-03-03T11:07:04.475-08:00</updated><title type='text'>Hasta La Vista,  baby</title><summary type='text'>But what did he say when he came back?I think he just grunted.I've been busy. With this. But now I'm back (perhaps not every week since there are three more chapters to write).When I've started this Blog the idea was "blog at least once a week." Nobody will read a blog unless there's content, once a week. Just say something, have a point of view.That's easy - once a week - easy.Said he.A while </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/6255649099984262630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=6255649099984262630&amp;isPopup=true' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/6255649099984262630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/6255649099984262630'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2007/03/hasta-la-vista-baby.html' title='Hasta La Vista,  baby'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-2371791066875103701</id><published>2006-09-28T00:01:00.000-07:00</published><updated>2006-09-28T00:15:52.003-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ftp'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='distributed'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Why I often implement things from scratch</title><summary type='text'>Once upon a time there was an Erlang programmer who needed an FTP server running on one of the hosts in a private network. In fact he didn't need an FTP server, he just needed to transfer files between a central server and his client machine, but he thought that he needed an FTP server to do this.He searched for  FTP servers, and indeed found several of them. They had to be free of course, </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/2371791066875103701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=2371791066875103701&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/2371791066875103701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/2371791066875103701'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2006/09/why-i-often-implement-things-from.html' title='Why I often implement things from scratch'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-5749540209297010238</id><published>2006-09-11T23:01:00.000-07:00</published><updated>2006-09-11T23:11:00.401-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='transaction memories'/><category scheme='http://www.blogger.com/atom/ns#' term='test-and-set mutex'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>Pure and simple transaction memories</title><summary type='text'>Now for a technical article.How can several parallel programs maintain a consistent view of state. By this I mean how can two programs, possibly in different countries, manipulate common state variables in a consistent manner? How can they do so in a way that does not involve any locking?The answer is surprisingly simple and incredibly beautiful and makes use of something called a transaction </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/5749540209297010238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=5749540209297010238&amp;isPopup=true' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/5749540209297010238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/5749540209297010238'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2006/09/pure-and-simple-transaction-memories.html' title='Pure and simple transaction memories'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-998581103285318358</id><published>2006-09-11T06:57:00.000-07:00</published><updated>2006-09-11T07:13:34.187-07:00</updated><title type='text'>Erlang meets Smalltalk</title><summary type='text'>Here I am evangelising on the right.Last Thursday I gave an invited talk on Erlang at the European Smalltalk Users Group meeting in Prague. This was a chance to meet hard-core members of the Smalltalk community.Now I must admit I rather like Smalltalk - it's one of those language that just feels right. I like the fact that the core language is small and easy to learn and the set of concepts </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/998581103285318358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=998581103285318358&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/998581103285318358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/998581103285318358'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2006/09/erlang-meets-smalltalk.html' title='Erlang meets Smalltalk'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-5913465963863651059</id><published>2006-09-01T08:31:00.000-07:00</published><updated>2006-09-01T08:58:53.651-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='shared memory'/><category scheme='http://www.blogger.com/atom/ns#' term='multi-core'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>Why I don't like shared memory</title><summary type='text'>In my last blog concurrency is easy I wrote about a simple model for programming concurrent systems. When you write a blog you have to think about the target audience and what level you want to pitch the blog at. Should it be technically advanced, or should it popularise the ideas you want to talk about?I chose to talk about concurrency in a decidedly non-technical manner, I thought I'd use the </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/5913465963863651059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=5913465963863651059&amp;isPopup=true' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/5913465963863651059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/5913465963863651059'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2006/09/why-i-dont-like-shared-memory.html' title='Why I don&apos;t like shared memory'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-5100849798692368178</id><published>2006-08-23T00:14:00.000-07:00</published><updated>2006-08-23T00:21:58.951-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='message passing'/><category scheme='http://www.blogger.com/atom/ns#' term='concurrency'/><title type='text'>Concurrency is easy</title><summary type='text'>We understand concurrencyA deep understanding of concurrency is hard-wired into our brains. We react to stimulation extremely quickly, in a part of the brain called the amygdala, without this reaction system we would die. Conscious thought  is just too slow, by the time the thought "hit the brakes" has formed itself, we have already  done it.On a motorway, I mentally track the positions of dozens</summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/5100849798692368178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=5100849798692368178&amp;isPopup=true' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/5100849798692368178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/5100849798692368178'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2006/08/concurrency-is-easy.html' title='Concurrency is easy'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5246027334551923738.post-4925315351154112265</id><published>2006-08-22T06:39:00.000-07:00</published><updated>2006-08-22T06:41:11.778-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='money'/><category scheme='http://www.blogger.com/atom/ns#' term='erlang'/><category scheme='http://www.blogger.com/atom/ns#' term='venture capital'/><title type='text'>Making Money from Erlang</title><summary type='text'>Last Friday I had lunch with Jane Walerud.Jane is one of the unsung heroines of the Erlang story. She was the first entrepreneur to recognise that having a better programming technology gave commercial advantages that could be turned into money.Jane was the first entrepreneur to recognise the commercial value of Erlang and form a new company that would eventually earn over USD 100 million from </summary><link rel='replies' type='application/atom+xml' href='http://armstrongonsoftware.blogspot.com/feeds/4925315351154112265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5246027334551923738&amp;postID=4925315351154112265&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/4925315351154112265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5246027334551923738/posts/default/4925315351154112265'/><link rel='alternate' type='text/html' href='http://armstrongonsoftware.blogspot.com/2006/08/making-money-from-erlang.html' title='Making Money from Erlang'/><author><name>Joe Armstrong</name><uri>http://www.blogger.com/profile/13842732706414838736</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://www.sics.se/~joe/images/joeold.jpg'/></author><thr:total>6</thr:total></entry></feed>