Someone has put programmers’ fridge magnet poetry on our fridge. I suspect it was a well-targetted marketing freebie, like the beanbag penguin that sits looking out onto Old Street. In any case, it has already attracted the attention of several clearly very talented individuals:
gorgeous dangling cyberspace whisper foo
and this ironic gem
greasy hacker @ deprecated network tiny bucket spawn bandwidth controller
My favourite, though, is the person that has arranged some magnets into a pair of parens, with the single atom
Up close, it is a subtle play on self-description, a visual pun on syntactic abstraction; but macroscopically, the seemingly trivially-evaluated expression brings recursion into the fold – its position and spelling suggests that there is more yet to be unravelled, and poses the question “How do we define truth?”.
Shifty (LShift’s Guru and Avatar) is looking for an experienced Programme Manager / Business Manager with the nous and ambition to drive a truly innovative company. We’ve found that a traditional approach to running projects is as much of a hindrance as a help, so we need someone to report directly to the board, capable of defining, implementing and delivering new ways of working in a thoroughly agile environment. Do you fancy the challenge of ensuring that our systems are as smart as our technical offering?
Salary: £38 – £45k plus discretionary bonus, based in Central London.
You’ll work across five key areas:
Ideally you’ll come from a project management discipline with a mix of planning, technical (at the requirements level) and client facing experience. In return, you can expect;
For more information about the role, or to apply, please contact Chris
Stephenson on chris (at) lshift.net or 020 7749 7749. CVs should be accompanied by a covering letter.
Closing date for applications is Wednesday 17th October, although applications will be reviewed as soon as they are received.
Some seven months ago, I built simple Erlang modules for generic SMTP and POP3 services. The idea is that the programmer should instantiate a service, providing callbacks for user authentication and for service-specific operations like handling deliveries, and scanning and locking mailboxes. Originally, I was planning on providing SMTP-to-AMQP and AMQP-to-POP3 gateways as part of RabbitMQ, but I haven’t had the time to seriously pursue this yet.
git clone git://github.com/tonyg/erlang-smtp
The current status of the code is:
io:format, and the POP3 mailbox and user authentication database are similarly hard-coded.
Patches, bugfixes, contributions, comments and feedback are all very welcome!
Update: a new post summarises changes since this post, including pluggable callbacks etc.
size_t is unsigned. In Java, there are no unsigned fixed-width pseudointegral types, so it can perhaps be forgiven for having an array’s length field be signed. In .NET, however, which has unsigned
ints, an array’s length field is also signed. What could it possibly mean to have a length less than zero?
The fourth Agile Business Conference will be held at the QE2 Conference Centre from 2-3 October 2007. The conference represents a great opportunity to find out more about a range of Agile development approaches. LShift is sponsoring, exhibiting, and attending the event along with other sponsors such as Borland and Fronde. Organisations such as Allied Irish Bank, the BBC and British Telecom will be discussing their experience of Agile adoption and development.
This is an exciting period for the Agile community with a rapid
acceleration in the uptake of Agile methods, both within and beyond the IT
context. The conference has been organised jointly between the DSDM Consortium – of which LShift has been a member since 2002 – and the Agile Alliance.
Please feel free to come and talk to us in the exhibition space at the event to find out more about what we think about Agile.
Running the interactive erlang shell on a cellphone is pretty cool. Erlang’s built-in clustering support works fine: I’ve successfully connected an erlang node on my pc to a node on the phone using the USB ethernet support the phone provides.
The base package compiles down to a bit less than 7MB, which is a bit large. The full suite of libraries are another 22MB or so. It’s certainly possible to fine-tune the packaging process to get a smaller distribution, but for now I’m happy developing against what I have.
This [old link: http://www.annexia.org/_file/jonesforth.s.txt ] (LTU discussion here) is the most exciting programming language implementation I’ve seen in months. Time to learn more about Forth!
Erlang represents strings as lists of (ASCII, or possibly iso8859-1) codepoints. In this regard, it’s weakly typed – there’s no hard distinction between a string, “ABC”, and a list of small integers, [65,66,67]. For example:
Eshell V5.5.4 (abort with ^G) 1> "ABC". "ABC" 2> [65,66,67]. "ABC" 3>
All was well – until I came to implement UTF8 support after Sam Ruby got the ball rolling. Binaries will no longer work as the chosen mapping for JSON strings, since strings may contain arbitrary characters, including those with codepoints greater than 255.
It has always been the case that the ideal representation for a JSON string is an Erlang string, a list of codepoints. Binaries are really a bit of a compromise. But choosing strings-for-strings puts us straight back in a weakly-typed position: it’s possible in JSON to distinguish between “ABC” and [65,66,67], but it’s not possible to make the same distinction in Erlang. We’d need to alter the way JSON arrays are represented to compensate.
All in all, I can’t decide which is the least distasteful option. I think I prefer the middle option, keeping strings mapped to binaries and viewing them as UTF-8 encoded text, but I really need to get some feedback on the issue.
There are a few tools for building javadoc-like documentation for .NET code available out there on the ‘net. Unfortunately, the major contenders (e.g. NDoc, Sandcastle) suffer from a few flaws: they are variously not free (gratis), not free (libre), not cross-platform, not maintained, and/or not easy-to-use. Therefore:
hg clone http://hg.opensource.lshift.net/ndocproc
Update: New release available.
I find it fascinating that after so many decades of support for closures, we’re still stuck in a C-style mentality of passing function-pointers that take an explicit context argument rather than a proper closure object. Witness the design of .NET’s Type.FindInterfaces method:
public virtual Type FindInterfaces (TypeFilter filter, Object filterCriteria);
The TypeFilter argument is a delegate. The Object argument is context that the delegate may require! This is pretty much exactly the old-school C-style way of implementing closures:
/* Yes, pretty crude translation, I know */ TypeArray find_interfaces(int (*type_filter)(Type*, void*), void *argument);
Smalltalk (and Lisps) would do it in the natural way, with a block (a closure):
someType selectInterfaces: [:interface | ... ]
Lisp 1.5, complete with support for lexical closures, appeared in 1959. It’s 2007. That’s forty-eight years.
You are currently browsing the LShift Ltd. blog archives for September, 2007.