<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: erlang</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/erlang.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2025-06-23T18:42:02+00:00</updated><author><name>Simon Willison</name></author><entry><title>Phoenix.new is Fly's entry into the prompt-driven app development space</title><link href="https://simonwillison.net/2025/Jun/23/phoenix-new/#atom-tag" rel="alternate"/><published>2025-06-23T18:42:02+00:00</published><updated>2025-06-23T18:42:02+00:00</updated><id>https://simonwillison.net/2025/Jun/23/phoenix-new/#atom-tag</id><summary type="html">
    &lt;p&gt;Here's a fascinating new entrant into the AI-assisted-programming / coding-agents space by &lt;a href="https://fly.io/"&gt;Fly.io&lt;/a&gt;, introduced on their blog in &lt;a href="https://fly.io/blog/phoenix-new-the-remote-ai-runtime/"&gt;Phoenix.new – The Remote AI Runtime for Phoenix&lt;/a&gt;: describe an app in a prompt, get a full Phoenix application, backed by SQLite and running on Fly's hosting platform. The &lt;a href="https://www.youtube.com/watch?v=du7GmWGUM5Y"&gt;official Phoenix.new YouTube launch video&lt;/a&gt; is a good way to get a sense for what this does.&lt;/p&gt;
&lt;h4 id="background-on-phoenix-and-elixir-and-fly"&gt;Background on Phoenix and Elixir and Fly&lt;/h4&gt;
&lt;p&gt;First, some background. &lt;a href="https://www.phoenixframework.org/"&gt;Phoenix&lt;/a&gt; is an open source web framework for Elixir, the Ruby-like language that compiles to Erlang's BEAM bytecode and runs on top of the highly concurrent Erlang runtime. The signature feature of the framework is &lt;a href="https://github.com/phoenixframework/phoenix_live_view/blob/main/README.md#feature-highlights"&gt;Phoenix LiveView&lt;/a&gt;, a toolkit for building realtime interfaces through streaming diffs to server-side HTML over a WebSocket connection.&lt;/p&gt;
&lt;p&gt;Phoenix was created by Chris McCord 11 years ago, and Chris joined Fly nearly four years ago. &lt;a href="http://phoenix.new/"&gt;Phoenix.new&lt;/a&gt; is his latest project.&lt;/p&gt;
&lt;p&gt;Phoenix LiveView is a really great fit for Fly's geographically distributed application serving infrastructure. Fly co-founder Kurt Mackey &lt;a href="https://fly.io/blog/low-latency-liveview/"&gt;wrote about that&lt;/a&gt; in April 2021, before they had hired Chris, describing how LiveView benefits from low latency by "moving app processes close to users" - something Fly has been designed to help with from the start.&lt;/p&gt;
&lt;p&gt;There's one major challenge though: Elixir is still a niche programming language, which means the number of people out there who are ready to spin up a new Phoenix app has always been artificially limited.&lt;/p&gt;
&lt;p&gt;Fly's solution? Get LLMs to shave that learning curve down to &lt;em&gt;almost nothing&lt;/em&gt;.&lt;/p&gt;
&lt;h4 id="prompt-driven-application-development-with-phoenix-new"&gt;Prompt-driven application development with Phoenix.new&lt;/h4&gt;
&lt;p&gt;Phoenix.new is a prompt-driven application development platform. You describe what you want to build, then watch as an LLM-powered coding agent writes, tests and iterates on code to help achieve that goal. It's in the same broad category as &lt;a href="https://lovable.dev/"&gt;Lovable&lt;/a&gt;, &lt;a href="https://v0.dev/"&gt;v0.dev&lt;/a&gt; and and &lt;a href="https://townie.val.run/"&gt;Val Town's Townie&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;One of the most important problems to solve with coding agents is to give them a robust sandbox where they can run code without breaking things outside of that space. Fly, at their heart, are a sandboxing company - their &lt;a href="https://fly.io/docs/machines/"&gt;Fly Machines&lt;/a&gt; product makes it trivial to spin up a new sandboxed VM in just a few seconds. I'm building &lt;a href="https://www.datasette.cloud/"&gt;Datasette Cloud&lt;/a&gt; on Fly for exactly that reason.&lt;/p&gt;
&lt;p&gt;I tried out Phoenix.new with the following starter prompt:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;A notebook application. Notes are rich text, using a nice visual markdown editors. The first line of a note becomes the title. Notes have a URL that is a 6 character random text string - thise can be used to link notes to each other by dropping in an @ sign and that text string. A hash and then text becomes a tag, clicking a tag goes to a page with that tag on. Notes are all in SQLite FTS so they can be searched with a search tool.&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Watching it work was &lt;em&gt;fascinating&lt;/em&gt;. It provides a full IDE-style environment in the browser, running a dedicated container and with a forwarded port to allow you to interact with the running application &lt;em&gt;while it is being built&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://static.simonwillison.net/static/2025/phoenix-new.jpg" alt="Browser IDE interface showing a notebook app development project with a left sidebar containing a chat session that starts &amp;quot;What would you like to build?&amp;quot; with options like &amp;quot;todo list&amp;quot;, &amp;quot;chat app&amp;quot;, &amp;quot;product landing page&amp;quot;, then a main editor displaying plan.md file with detailed development steps including &amp;quot;Generate a Phoenix LiveView project called 'notebook'&amp;quot; and &amp;quot;Start the server so you can view the app as we build it&amp;quot;. The bottom has a terminal showing &amp;quot;All dependencies are up to date&amp;quot;, &amp;quot;Generated notebook app&amp;quot;, &amp;quot;Done in 241ms&amp;quot;." style="max-width: 100%;" /&gt;&lt;/p&gt;
&lt;p&gt;It spun up a &lt;code&gt;plan.md&lt;/code&gt;, planned out the approach and started working through the code. Most interestingly, it constantly tested the application it was building using a testing tool that looked similar to my own &lt;a href="https://shot-scraper.datasette.io/"&gt;shot-scraper&lt;/a&gt;. Here's an example of the output from that:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I can see the issue! The page is still showing the "Welcome to your Notebook" message instead of the form. Let me wait a moment for the JavaScript to execute and then check if the form appeared.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ web http://localhost:4000 --js "setTimeout(() =&amp;gt; { document.querySelector('button[phx-click=\"start_creating\"]').click(); }, 500); setTimeout(() =&amp;gt; { console.log('Form visible?', !!document.querySelector('textarea')); console.log('Creating note state:', document.body.innerHTML.includes('Create New Note')); }, 2000);"&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I'm used to coding agents that write and execute their own tests, but this is the most impressive example I've seen of a coding agent that actively interacts with and tests the live application while it is iterating on the code.&lt;/p&gt;
&lt;p&gt;Most interestingly of all, since LiveView is a realtime framework, I could interact directly with the application at the same time as the machine was writing and testing it, seeing any changes it made instantly in my browser!&lt;/p&gt;
&lt;p&gt;How did it do? It got there in the end, but with hindsight my initial prompt was a little too complex: I had to rescue it after it got stuck in an error loop trying to implement SQLite full-text search. Just like a project you build yourself it turns out to work much better if you start with the simplest possible version of the application and then iterate on it to add additional features.&lt;/p&gt;
&lt;p&gt;One of my favorite details is how Git integration works. Phoenix.new commits constantly as it works, and a menu option for "Clone X to your local computer" then gives you a command that looks like this:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;git clone "https://phoenix.new/git/WENQLj...big-random-string...VHFW/$RANDOM/notebook"&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Run that locally to get a full copy of the repo! I ran the following to push it to a new repository in my GitHub account:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell"&gt;&lt;pre&gt;git remote add github https://github.com/simonw/phoenix-new-notebook.git
git push -u github main&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;You can see the code (and the &lt;a href="https://github.com/simonw/phoenix-new-notebook/commits"&gt;commit history&lt;/a&gt;) in my &lt;a href="https://github.com/simonw/phoenix-new-notebook"&gt;simonw/phoenix-new-notebook&lt;/a&gt; repo.&lt;/p&gt;
&lt;h4 id="how-much-did-i-learn-"&gt;How much did I learn?&lt;/h4&gt;
&lt;p&gt;My initial experiments with Phoenix.new were very much &lt;a href="https://simonwillison.net/2025/Mar/19/vibe-coding/"&gt;vibe coding&lt;/a&gt; - I interacted with the resulting application but didn't pay a great deal of attention to the code that was being written, despite it being presented to me in an IDE that made it very easy to review what was going on.&lt;/p&gt;
&lt;p&gt;As a result, I didn't learn much about the low-level syntax details of how Phoenix and Elixir work. I did however get a strong feel for the &lt;em&gt;shape&lt;/em&gt; of Elixir and Phoenix at a high level as the code danced past my eye.&lt;/p&gt;
&lt;p&gt;It turns out having an LLM write an application in front of you is a great way to start building understanding of what a framework can do.&lt;/p&gt;
&lt;p&gt;It’s almost like watching a YouTube livestream of an experienced developer speed running building an application, except that app is exactly what you asked them to build and you can interject and send them in a new direction at any moment.&lt;/p&gt;
&lt;h4 id="expanding-beyond-elixir-and-phoenix"&gt;Expanding beyond Elixir and Phoenix&lt;/h4&gt;
&lt;p&gt;Chris's announcement included this note:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At this point you might be wondering – can I just ask it to build a Rails app? Or an Expo React Native app? Or Svelte? Or Go?&lt;/p&gt;
&lt;p&gt;Yes, you can.&lt;/p&gt;
&lt;p&gt;Our system prompt is tuned for Phoenix today, but all languages you care about are already installed. We’re still figuring out where to take this, but adding new languages and frameworks definitely ranks highly in my plans.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The browser-based IDE includes a terminal, and I checked and &lt;code&gt;python3&lt;/code&gt; and &lt;code&gt;python3 -m pip install datasette&lt;/code&gt; work there already.&lt;/p&gt;
&lt;p&gt;If Fly do evolve this into a framework-agnostic tool for building web apps they'll probably need to rebrand it from Phoenix.new to something a bit more generic!&lt;/p&gt;
&lt;p&gt;Phoenix.new is currently priced as a $20/month subscription. Val Town recently switched the pricing for their similar Townie assistant from a subscription to to &lt;a href="https://blog.val.town/townie-credits"&gt;pay per use&lt;/a&gt;, presumably because for many users this kind of tool is something they would only use intermittently, although given the capabilities of Phoenix.new it's possible it could become a monthly driver for people, especially as it expands out to cover more frameworks.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;em&gt;Fly sponsor some of our work on Datasette Cloud (see &lt;a href="https://simonwillison.net/about/#disclosures"&gt;disclosures&lt;/a&gt;), but this article is not sponsored content and Fly did not request or review this post.&lt;/em&gt;&lt;/small&gt;&lt;/p&gt;
    
        &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai"&gt;ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fly"&gt;fly&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/generative-ai"&gt;generative-ai&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/llms"&gt;llms&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-assisted-programming"&gt;ai-assisted-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ai-agents"&gt;ai-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/vibe-coding"&gt;vibe-coding&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/coding-agents"&gt;coding-agents&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/prompt-to-app"&gt;prompt-to-app&lt;/a&gt;&lt;/p&gt;
    

</summary><category term="erlang"/><category term="sqlite"/><category term="ai"/><category term="fly"/><category term="generative-ai"/><category term="llms"/><category term="ai-assisted-programming"/><category term="ai-agents"/><category term="vibe-coding"/><category term="coding-agents"/><category term="prompt-to-app"/></entry><entry><title>ActorDB</title><link href="https://simonwillison.net/2018/Jun/24/actordb/#atom-tag" rel="alternate"/><published>2018-06-24T21:48:29+00:00</published><updated>2018-06-24T21:48:29+00:00</updated><id>https://simonwillison.net/2018/Jun/24/actordb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/biokoda/actordb"&gt;ActorDB&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Distributed SQL database written in Erlang built on top of SQLite (on top of LMDB), adding replication using the raft consensus algorithm (so sharded with no single-points of failure) and a MySQL protocol interface. Interesting combination of technologies.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/big-data"&gt;big-data&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="scaling"/><category term="sqlite"/><category term="big-data"/></entry><entry><title>Hot Code Loading in Node.js</title><link href="https://simonwillison.net/2010/Jan/31/liminal/#atom-tag" rel="alternate"/><published>2010-01-31T13:57:53+00:00</published><updated>2010-01-31T13:57:53+00:00</updated><id>https://simonwillison.net/2010/Jan/31/liminal/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://romeda.org/blog/2010/01/hot-code-loading-in-nodejs.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A LiminalExistence %28Liminal Existence%29"&gt;Hot Code Loading in Node.js&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Blaine Cook’s patch for Node.js that enables Erlang-style hot code loading, so you can switch out your application logic without restarting the server or affecting existing requests. This could make deploying new versions of Node applications trivial. I’d love to see a Node hosting service that allows you to simply upload a script file and have it execute on the Web.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/blaine-cook"&gt;blaine-cook&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/deployment"&gt;deployment&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;&lt;/p&gt;



</summary><category term="blaine-cook"/><category term="deployment"/><category term="erlang"/><category term="javascript"/><category term="nodejs"/></entry><entry><title>Introducing BERT and BERT-RPC</title><link href="https://simonwillison.net/2009/Oct/21/bert/#atom-tag" rel="alternate"/><published>2009-10-21T22:11:37+00:00</published><updated>2009-10-21T22:11:37+00:00</updated><id>https://simonwillison.net/2009/Oct/21/bert/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/blog/531-introducing-bert-and-bert-rpc"&gt;Introducing BERT and BERT-RPC&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Justification for inventing a brand new serialisation protocol: Thrift and Protocol Buffers both use IDLs and code generation, XML “is not convertible to a simple unambiguous data structure in any language I’ve ever used” and JSON lacks support for unencoded binary data. The result is BERT—Binary ERlang Term—which extracts a format from Erlang in much the same way that JSON extracted one from JavaScript.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/protocolbuffers"&gt;protocolbuffers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/serialisation"&gt;serialisation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/thrift"&gt;thrift&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xml"&gt;xml&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="github"/><category term="javascript"/><category term="json"/><category term="protocolbuffers"/><category term="serialisation"/><category term="thrift"/><category term="xml"/></entry><entry><title>How We Made GitHub Fast</title><link href="https://simonwillison.net/2009/Oct/21/github/#atom-tag" rel="alternate"/><published>2009-10-21T21:14:38+00:00</published><updated>2009-10-21T21:14:38+00:00</updated><id>https://simonwillison.net/2009/Oct/21/github/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://github.com/blog/530-how-we-made-github-fast"&gt;How We Made GitHub Fast&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Detailed overview of the new GitHub architecture. It’s a lot more complicated than I would have expected—lots of moving parts are involved in ensuring they can scale horizontally when they need to. Interesting components include nginx, Unicorn, Rails, DRBD, HAProxy, Redis, Erlang, memcached, SSH, git and a bunch of interesting new open source projects produced by the GitHub team such as BERT/Ernie and ProxyMachine.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/drbd"&gt;drbd&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ernie"&gt;ernie&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/git"&gt;git&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/github"&gt;github&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/haproxy"&gt;haproxy&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/memcached"&gt;memcached&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nginx"&gt;nginx&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/proxymachine"&gt;proxymachine&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rails"&gt;rails&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/redis"&gt;redis&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/replication"&gt;replication&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ssh"&gt;ssh&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/unicorn"&gt;unicorn&lt;/a&gt;&lt;/p&gt;



</summary><category term="drbd"/><category term="erlang"/><category term="ernie"/><category term="git"/><category term="github"/><category term="haproxy"/><category term="memcached"/><category term="nginx"/><category term="proxymachine"/><category term="rails"/><category term="redis"/><category term="replication"/><category term="ruby"/><category term="scaling"/><category term="ssh"/><category term="unicorn"/></entry><entry><title>PubSub-over-Webhooks with RabbitHub</title><link href="https://simonwillison.net/2009/Jul/1/pubsuboverwebhooks/#atom-tag" rel="alternate"/><published>2009-07-01T20:22:52+00:00</published><updated>2009-07-01T20:22:52+00:00</updated><id>https://simonwillison.net/2009/Jul/1/pubsuboverwebhooks/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.lshift.net/blog/2009/06/30/pubsub-over-webhooks-with-rabbithub"&gt;PubSub-over-Webhooks with RabbitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
RabbitMQ, the Erlang-powered AMQP message queue, is growing an HTTP interface based on webhooks and PubSubHubBub.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/amqp"&gt;amqp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/http"&gt;http&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/message-queues"&gt;message-queues&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pubsubhubbub"&gt;pubsubhubbub&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rabbitmq"&gt;rabbitmq&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webhooks"&gt;webhooks&lt;/a&gt;&lt;/p&gt;



</summary><category term="amqp"/><category term="erlang"/><category term="http"/><category term="message-queues"/><category term="pubsubhubbub"/><category term="rabbitmq"/><category term="webhooks"/></entry><entry><title>Parallel merge sort in Erlang</title><link href="https://simonwillison.net/2009/Mar/15/yarivus/#atom-tag" rel="alternate"/><published>2009-03-15T13:36:13+00:00</published><updated>2009-03-15T13:36:13+00:00</updated><id>https://simonwillison.net/2009/Mar/15/yarivus/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://yarivsblog.com/articles/2009/03/09/parallel-merge-sort-in-erlang/"&gt;Parallel merge sort in Erlang&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Thoughts on an Erlang-y way of implementing a combined activity stream (e.g. Facebook and Twitter). Activity streams are a Really Hard Problem—as far as I know there’s no best practise for implementing them yet.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/activitystreams"&gt;activitystreams&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/facebook"&gt;facebook&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/twitter"&gt;twitter&lt;/a&gt;&lt;/p&gt;



</summary><category term="activitystreams"/><category term="erlang"/><category term="facebook"/><category term="twitter"/></entry><entry><title>GeoCouch: Geospatial queries with CouchDB</title><link href="https://simonwillison.net/2008/Oct/27/geocouch/#atom-tag" rel="alternate"/><published>2008-10-27T23:48:46+00:00</published><updated>2008-10-27T23:48:46+00:00</updated><id>https://simonwillison.net/2008/Oct/27/geocouch/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://vmx.cx/cgi-bin/blog/index.cgi/geocouch-geospatial-queries-with-couchdb:2008-10-26:en,CouchDB,Python,geo"&gt;GeoCouch: Geospatial queries with CouchDB&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Interesting approach: uses “external2”, a branch that allows external services to be called from CouchDB. SQLite’s SpatiaLite extension is then used as an external spacial index.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/external2"&gt;external2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/geocouch"&gt;geocouch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/spatialite"&gt;spatialite&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/sqlite"&gt;sqlite&lt;/a&gt;&lt;/p&gt;



</summary><category term="couchdb"/><category term="erlang"/><category term="external2"/><category term="geocouch"/><category term="spatialite"/><category term="sqlite"/></entry><entry><title>A Million-user Comet Application with Mochiweb, Part 1</title><link href="https://simonwillison.net/2008/Oct/16/millionuser/#atom-tag" rel="alternate"/><published>2008-10-16T14:16:18+00:00</published><updated>2008-10-16T14:16:18+00:00</updated><id>https://simonwillison.net/2008/Oct/16/millionuser/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.metabrew.com/article/a-million-user-comet-application-with-mochiweb-part-1/"&gt;A Million-user Comet Application with Mochiweb, Part 1&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Richard Jones explores Mochiweb, Erlang and linux kernel tuning for building a high performance comet server. Does this mean real-time web features are coming to last.fm?


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lastfm"&gt;lastfm&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mochiweb"&gt;mochiweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/realtimeweb"&gt;realtimeweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/richard-jones"&gt;richard-jones&lt;/a&gt;&lt;/p&gt;



</summary><category term="comet"/><category term="erlang"/><category term="lastfm"/><category term="mochiweb"/><category term="realtimeweb"/><category term="richard-jones"/></entry><entry><title>Reia</title><link href="https://simonwillison.net/2008/Sep/25/reia/#atom-tag" rel="alternate"/><published>2008-09-25T18:12:59+00:00</published><updated>2008-09-25T18:12:59+00:00</updated><id>https://simonwillison.net/2008/Sep/25/reia/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://wiki.reia-lang.org/wiki/Reia_Programming_Language"&gt;Reia&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The most common complaint I see about Erlang is the syntax. Reia is a Python-style scripting language (with a dash of Ruby) that runs on the Erlang virtual machine. Looks promising.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/reia"&gt;reia&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ruby"&gt;ruby&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="programming"/><category term="python"/><category term="reia"/><category term="ruby"/></entry><entry><title>Engineering @ Facebook: Facebook Chat</title><link href="https://simonwillison.net/2008/May/15/engineering/#atom-tag" rel="alternate"/><published>2008-05-15T07:55:36+00:00</published><updated>2008-05-15T07:55:36+00:00</updated><id>https://simonwillison.net/2008/May/15/engineering/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.facebook.com/note.php?note_id=14218138919&amp;amp;id=9445547199&amp;amp;index=0"&gt;Engineering @ Facebook: Facebook Chat&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The new Facebook Chat uses Comet (long polling with a hidden iframe) against a custom web / chat server written in Erlang, designed to handle a launch to all 70 million users at once. It was tested using a “dark launch” period where live pages simulated chat request traffic without showing any visible UI.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/comet"&gt;comet&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/darklaunch"&gt;darklaunch&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/facebook"&gt;facebook&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;&lt;/p&gt;



</summary><category term="comet"/><category term="darklaunch"/><category term="erlang"/><category term="facebook"/><category term="javascript"/><category term="scaling"/></entry><entry><title>Quoting Damien Katz</title><link href="https://simonwillison.net/2008/Apr/14/damien/#atom-tag" rel="alternate"/><published>2008-04-14T15:17:39+00:00</published><updated>2008-04-14T15:17:39+00:00</updated><id>https://simonwillison.net/2008/Apr/14/damien/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://damienkatz.net/2008/04/lisp_as_blub.html"&gt;&lt;p&gt;Once you reach a certain level of activity in the system where the garbage collector can no longer keep up (and it will happen), then every line of code in your system is now a potential failure point that can leave the whole program in a bad state. Lisp has this problem. Java has this problem. Erlang does not.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://damienkatz.net/2008/04/lisp_as_blub.html"&gt;Damien Katz&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/damien-katz"&gt;damien-katz&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/faliure"&gt;faliure&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/garbagecollection"&gt;garbagecollection&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lisp"&gt;lisp&lt;/a&gt;&lt;/p&gt;



</summary><category term="damien-katz"/><category term="erlang"/><category term="faliure"/><category term="garbagecollection"/><category term="java"/><category term="lisp"/></entry><entry><title>In Response to "What Sucks About Erlang"</title><link href="https://simonwillison.net/2008/Mar/11/yarivus/#atom-tag" rel="alternate"/><published>2008-03-11T05:46:05+00:00</published><updated>2008-03-11T05:46:05+00:00</updated><id>https://simonwillison.net/2008/Mar/11/yarivus/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://yarivsblog.com/articles/2008/03/09/in-response-to-what-sucks-about-erlang/"&gt;In Response to &amp;quot;What Sucks About Erlang&amp;quot;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Yariv Sadan responds to Damien’s criticism.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/damien-katz"&gt;damien-katz&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yarivsadan"&gt;yarivsadan&lt;/a&gt;&lt;/p&gt;



</summary><category term="damien-katz"/><category term="erlang"/><category term="yarivsadan"/></entry><entry><title>What Sucks About Erlang</title><link href="https://simonwillison.net/2008/Mar/11/damien/#atom-tag" rel="alternate"/><published>2008-03-11T05:45:16+00:00</published><updated>2008-03-11T05:45:16+00:00</updated><id>https://simonwillison.net/2008/Mar/11/damien/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://damienkatz.net/2008/03/what_sucks_abou.html"&gt;What Sucks About Erlang&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Damien Katz shares his greatest frustrations from working with Erlang on CouchDB.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/damien-katz"&gt;damien-katz&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;&lt;/p&gt;



</summary><category term="couchdb"/><category term="damien-katz"/><category term="erlang"/></entry><entry><title>What You Need To Know About Amazon SimpleDB</title><link href="https://simonwillison.net/2007/Dec/14/simpledb/#atom-tag" rel="alternate"/><published>2007-12-14T11:21:37+00:00</published><updated>2007-12-14T11:21:37+00:00</updated><id>https://simonwillison.net/2007/Dec/14/simpledb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.satine.org/archives/2007/12/13/amazon-simpledb/"&gt;What You Need To Know About Amazon SimpleDB&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Amazon have finally launched the database component of their web service suite. It fits a bunch of current trends: key/value pairs, schemaless, built on top of Erlang. “Eventual consistency” is an interesting characteristic.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/amazon"&gt;amazon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/charles-ying"&gt;charles-ying&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/databases"&gt;databases&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/hashtables"&gt;hashtables&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/scaling"&gt;scaling&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/schemaless"&gt;schemaless&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/simpledb"&gt;simpledb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/web-services"&gt;web-services&lt;/a&gt;&lt;/p&gt;



</summary><category term="amazon"/><category term="charles-ying"/><category term="databases"/><category term="erlang"/><category term="hashtables"/><category term="scaling"/><category term="schemaless"/><category term="simpledb"/><category term="web-services"/></entry><entry><title>ErlyWeb vs. Ruby on Rails EC2 Performance Showdown</title><link href="https://simonwillison.net/2007/Dec/10/yarivus/#atom-tag" rel="alternate"/><published>2007-12-10T15:27:54+00:00</published><updated>2007-12-10T15:27:54+00:00</updated><id>https://simonwillison.net/2007/Dec/10/yarivus/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://yarivsblog.com/articles/2007/12/09/erlyweb-vs-ruby-on-rails-ec2-performance-showdown/"&gt;ErlyWeb vs. Ruby on Rails EC2 Performance Showdown&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
ErlyWeb’s peak response rate beats Rails by 47x, albeit with a hugely simplified benchmark. More interesting than the results is the idea of using EC2 for benchmarking on identical simulated hardware.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/amazon"&gt;amazon&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/benchmarks"&gt;benchmarks&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/ec2"&gt;ec2&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlyweb"&gt;erlyweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/performance"&gt;performance&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/rails"&gt;rails&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/virtualisation"&gt;virtualisation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/yarivsadan"&gt;yarivsadan&lt;/a&gt;&lt;/p&gt;



</summary><category term="amazon"/><category term="benchmarks"/><category term="ec2"/><category term="erlang"/><category term="erlyweb"/><category term="performance"/><category term="rails"/><category term="virtualisation"/><category term="yarivsadan"/></entry><entry><title>CouchDB Roundup</title><link href="https://simonwillison.net/2007/Dec/6/damien/#atom-tag" rel="alternate"/><published>2007-12-06T15:48:47+00:00</published><updated>2007-12-06T15:48:47+00:00</updated><id>https://simonwillison.net/2007/Dec/6/damien/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://damienkatz.net/2007/12/couchdb_roundup.html"&gt;CouchDB Roundup&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The CouchDB project is interested in contributions from people who can write a large file driver for Erlang, help figure out the CouchDB security model and build scripts to help benchmark performance, scalability and reliability.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/helpwanted"&gt;helpwanted&lt;/a&gt;&lt;/p&gt;



</summary><category term="couchdb"/><category term="erlang"/><category term="helpwanted"/></entry><entry><title>mochiweb - another faster web server</title><link href="https://simonwillison.net/2007/Nov/9/mochiweb/#atom-tag" rel="alternate"/><published>2007-11-09T23:22:37+00:00</published><updated>2007-11-09T23:22:37+00:00</updated><id>https://simonwillison.net/2007/Nov/9/mochiweb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://bob.pythonmac.org/archives/2007/11/07/mochiweb-another-faster-web-server/"&gt;mochiweb - another faster web server&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Bob Ippolito’s latest project: a high performance Erlang web server.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/bob-ippolito"&gt;bob-ippolito&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mochiweb"&gt;mochiweb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/webserver"&gt;webserver&lt;/a&gt;&lt;/p&gt;



</summary><category term="bob-ippolito"/><category term="erlang"/><category term="mochiweb"/><category term="webserver"/></entry><entry><title>CouchDB "Joins"</title><link href="https://simonwillison.net/2007/Oct/25/couchdb/#atom-tag" rel="alternate"/><published>2007-10-25T08:27:27+00:00</published><updated>2007-10-25T08:27:27+00:00</updated><id>https://simonwillison.net/2007/Oct/25/couchdb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.cmlenz.net/blog/2007/10/couchdb-joins.html"&gt;CouchDB &amp;quot;Joins&amp;quot;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Different approaches to indexing a blog post and its associated comments in the non-relational CouchDB.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/christopher-lenz"&gt;christopher-lenz&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/databases"&gt;databases&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/joins"&gt;joins&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/relational"&gt;relational&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/views"&gt;views&lt;/a&gt;&lt;/p&gt;



</summary><category term="christopher-lenz"/><category term="couchdb"/><category term="databases"/><category term="erlang"/><category term="joins"/><category term="relational"/><category term="views"/></entry><entry><title>CouchDB first impressions</title><link href="https://simonwillison.net/2007/Oct/19/couchdb/#atom-tag" rel="alternate"/><published>2007-10-19T11:43:11+00:00</published><updated>2007-10-19T11:43:11+00:00</updated><id>https://simonwillison.net/2007/Oct/19/couchdb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.jacobian.org/writing/2007/oct/18/couchdb/"&gt;CouchDB first impressions&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Jacob’s been poking at CouchDB. Inserting data is slow, but everything else looks pretty slick considering how recently the JSON / JavaScript views functionality was added.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jacob-kaplan-moss"&gt;jacob-kaplan-moss&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;&lt;/p&gt;



</summary><category term="couchdb"/><category term="erlang"/><category term="jacob-kaplan-moss"/><category term="javascript"/><category term="json"/></entry><entry><title>How should JSON strings be represented in Erlang?</title><link href="https://simonwillison.net/2007/Sep/14/lshift/#atom-tag" rel="alternate"/><published>2007-09-14T08:17:05+00:00</published><updated>2007-09-14T08:17:05+00:00</updated><id>https://simonwillison.net/2007/Sep/14/lshift/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.lshift.net/blog/2007/09/13/how-should-json-strings-be-represented-in-erlang"&gt;How should JSON strings be represented in Erlang?&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Erlang’s poor support for strings makes this a surprisingly tricky question.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/strings"&gt;strings&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tonygarnockjones"&gt;tonygarnockjones&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="json"/><category term="strings"/><category term="tonygarnockjones"/></entry><entry><title>An Introduction to Erlang</title><link href="https://simonwillison.net/2007/Sep/13/onlampcom/#atom-tag" rel="alternate"/><published>2007-09-13T17:47:24+00:00</published><updated>2007-09-13T17:47:24+00:00</updated><id>https://simonwillison.net/2007/Sep/13/onlampcom/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.onlamp.com/pub/a/onlamp/2007/09/13/introduction-to-erlang.html"&gt;An Introduction to Erlang&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Erlang gets the ONLamp tutorial treatment from Gregory Brown.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gregory-brown"&gt;gregory-brown&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/onlamp"&gt;onlamp&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="gregory-brown"/><category term="onlamp"/><category term="programming"/></entry><entry><title>CouchDB: Thinking beyond the RDBMS</title><link href="https://simonwillison.net/2007/Sep/3/labnotes/#atom-tag" rel="alternate"/><published>2007-09-03T09:48:43+00:00</published><updated>2007-09-03T09:48:43+00:00</updated><id>https://simonwillison.net/2007/Sep/3/labnotes/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://blog.labnotes.org/2007/09/02/couchdb-thinking-beyond-the-rdbms/"&gt;CouchDB: Thinking beyond the RDBMS&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
CouchDB is a fascinating project—an Erlang powered non-relational database with a JSON API that lets you define “views” (really computed tables) based on JavaScript functions that execute using map/reduce. Damien Katz, the main developer currently works for MySQL and used to work on Lotus Notes.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/couchdb"&gt;couchdb&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/damien-katz"&gt;damien-katz&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/databases"&gt;databases&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/lotusnotes"&gt;lotusnotes&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mapreduce"&gt;mapreduce&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/mysql"&gt;mysql&lt;/a&gt;&lt;/p&gt;



</summary><category term="couchdb"/><category term="damien-katz"/><category term="databases"/><category term="erlang"/><category term="javascript"/><category term="json"/><category term="lotusnotes"/><category term="mapreduce"/><category term="mysql"/></entry><entry><title>Quoting Ralph Johnson</title><link href="https://simonwillison.net/2007/Aug/8/erlang/#atom-tag" rel="alternate"/><published>2007-08-08T19:47:12+00:00</published><updated>2007-08-08T19:47:12+00:00</updated><id>https://simonwillison.net/2007/Aug/8/erlang/#atom-tag</id><summary type="html">
    &lt;blockquote cite="http://www.cincomsmalltalk.com/userblogs/ralph/blogView?showComments=true&amp;amp;printTitle=Erlang,_the_next_Java&amp;amp;entry=3364027251"&gt;&lt;p&gt;Erlang fits all the characteristics of an OO system, even though sequential Erlang is a functional language, not an OO language&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="cite"&gt;&amp;mdash; &lt;a href="http://www.cincomsmalltalk.com/userblogs/ralph/blogView?showComments=true&amp;amp;printTitle=Erlang,_the_next_Java&amp;amp;entry=3364027251"&gt;Ralph Johnson&lt;/a&gt;&lt;/p&gt;

    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/java"&gt;java&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/object-oriented-programming"&gt;object-oriented-programming&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/programming"&gt;programming&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="java"/><category term="object-oriented-programming"/><category term="programming"/></entry><entry><title>JSON and JSON-RPC for Erlang</title><link href="https://simonwillison.net/2007/Mar/25/lshift/#atom-tag" rel="alternate"/><published>2007-03-25T16:29:07+00:00</published><updated>2007-03-25T16:29:07+00:00</updated><id>https://simonwillison.net/2007/Mar/25/lshift/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.lshift.net/blog/2007/02/17/json-and-json-rpc-for-erlang"&gt;JSON and JSON-RPC for Erlang&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Nice example of using lists:reverse and an accumulator to efficiently build a string in reverse order.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/json"&gt;json&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/jsonrpc"&gt;jsonrpc&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="json"/><category term="jsonrpc"/></entry><entry><title>Programming Erlang</title><link href="https://simonwillison.net/2007/Mar/3/erlang/#atom-tag" rel="alternate"/><published>2007-03-03T08:49:52+00:00</published><updated>2007-03-03T08:49:52+00:00</updated><id>https://simonwillison.net/2007/Mar/3/erlang/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.pragmaticprogrammer.com/titles/jaerlang/"&gt;Programming Erlang&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
A book on Erlang from the creator of the language himself, out in July but available to buy now as a beta PDF.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/books"&gt;books&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/joe-armstrong"&gt;joe-armstrong&lt;/a&gt;&lt;/p&gt;



</summary><category term="books"/><category term="erlang"/><category term="joe-armstrong"/></entry><entry><title>ErlyWeb Documentation</title><link href="https://simonwillison.net/2006/Dec/20/erlyweb/#atom-tag" rel="alternate"/><published>2006-12-20T00:45:36+00:00</published><updated>2006-12-20T00:45:36+00:00</updated><id>https://simonwillison.net/2006/Dec/20/erlyweb/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://erlyweb.org/doc/"&gt;ErlyWeb Documentation&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
The Erlang web framework finally gets some formal documentation.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/erlyweb"&gt;erlyweb&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="erlyweb"/></entry><entry><title>Candygram</title><link href="https://simonwillison.net/2004/Aug/31/candygram/#atom-tag" rel="alternate"/><published>2004-08-31T06:32:39+00:00</published><updated>2004-08-31T06:32:39+00:00</updated><id>https://simonwillison.net/2004/Aug/31/candygram/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://candygram.sourceforge.net/"&gt;Candygram&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Erlang concurrency primitives in Python. May hurt your brain.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://www.pythonware.com/daily/"&gt;Daily Python-URL&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/erlang"&gt;erlang&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/python"&gt;python&lt;/a&gt;&lt;/p&gt;



</summary><category term="erlang"/><category term="python"/></entry></feed>