The hu.dwim.* universe of Common Lisp projects was built when we decided to do some enterprise development in Common Lisp.
We are a small group of friends (3-5) from Hungary who used to work together as a team in various contexts for a couple of decades. Two of us were even shooting together in QuakeWorld, all the way back at the university.
Notably, prior to our Lisp gig we were part of the core team of Charles Simonyi's IntentSoft startup, working on an editor that edits structures (as opposed to a string of characters). Several years later Levy wrote an interesting experiment in Common Lisp: ProjecturEd.
The core lispers, in alphabetical order:
- Tamás Borbély
- Attila Lendvai
- Levente Mészáros
After we left IntentSoft we were chopping wood at a random software shop. It was not satisfying intellectually, so we decided to try ourselves in the same enterprise bullshit, but using Common Lisp.
Our Common Lisp endeavor lasted from around 2006, for about a decade. Since then everyone has moved on, and we are merely fighting off the bitrot -- with varying success.
None of us are working actively in Common Lisp anymore. Throughout those years we developed a few projects that helped us pay the bills, but sadly, there is a lot of potential lying wasted in the dwim.hu universe. All in all, we made about the same amount of money as we would have as employees... but it was much more fun!
We loved darcs, but gave in eventually and converted the majority of our projects to git. Some projects that had non-trivial forks are yet to be converted to git (notably hu.dwim.perec, hu.dwim.rdbms, hu.dwim.web-server, hu.dwim.presentation), because I want to convert the forks as git branches.
A couple of our apps are still alive at some customers, but no live contracts, and nothing that would require day to day lisp hacking.
The git repos are at https://github.com/hu-dwim/.
dwim.hu used to run an instance of hu.dwim.home. It was kinda like an example project that demonstrated our codebase by documenting itself in the form of a webapp that is written in our codebase. Currently it's succumbed to bitrot, but it could be brought back alive with a little work. Today dwim.hu is only serving the darcs repos, most of them already obsoleted by the git conversion.
Our darcs repos are also mirrored at hub.darcs.net.
- hu.dwim.perec is an ORM that fully integrates with CLOS. You may read some blog posts from David Lichteblau, and pinterface. It has a query engine that is a Lisp DSL with much more freedom than SQL, and yet it partially or fully compiles down to SQL queries, depending in how much magic you employ, and how much attention you pay for compilability. When compilation to SQL fails, then parts or all of the query is transparently executed in the lisp vm.
- hu.dwim.rdbms is an abstraction layer for various SQL databases. It also contains a lispy DSL for writing quasi-quoted SQL.
- Business Process Modelling: we used hu.dwim.delico to CPS transform plain lisp code and serialize the continuation into the database whenever it wanted to wait for an event (e.g. display some UI to a user, sleep until some date, etc). When users logged in they had a list of TODO's that contained the serialized processes that were waiting for their feedback. When a process was continued, it typically displayed the GUI element for the user whose absence initially triggered its suspension. Processes could be written in plain Common Lisp code, with only a few additional primitives and constraints. All of this is going through database transactions.
- hu.dwim.computed-class is a constraint based change propagation lib, fully integrated with CLOS.
- We were really battle-testing SBCL in our projects that were deployed for customers. This led to a lot of bug reports and reproducers, and sometimes even some patches from us. We channeled some of our (East-European) income into financing SBCL development. Threading and stability improved a lot while we were active. This is not to say that we were an important part of SBCL's development! All the credit belongs to its fine contributors and maintainers. But we did make some difference.
- We had major contributions to Slime, but we also had major clashes with the rather conservative maintainer at that time. Due to this some of our work is bitrotting away in our fork.
- hu.dwim.stefil is a revolutionary testing framework:
deftest
is a very thin/seamless layer overdefun
. Coding in Slime and running the unit test becomes almost the same thing: a test is just adefun*
plus a smarterassert
. A dynamic environment is ensured when a test is called and a special test-run object is returned from the toplevel entry call. This object is inspectable in Slime and it contains a lot of details of the "test run" (read: function call). Tests of course can call other tests recursively. Whenever something fails, the debugger is entered, with a lot of testing related additional restarts. You can often copy-paste a frame's code with its arguments, and you instantly have a reproducer to play with in the REPL. fiasco is a fork of Stefil. - hu.dwim.reiterate is a rewrite of Iterate, but done properly. Sadly, it's stuck at around 80%, and the Iterate compatibility layer is not done either. It could be a drop-in replacement for Iterate, but it's not.
- hu.dwim.quasi-quote is a library to quasi-quote any structure. It's like the standard
`(foo ,bar)
list quasi-quotation syntax, but generalized to SQL, Strings, JavaScript, PDF, XML, CSS, etc. It is used in our web framework to inline HTML (XML) into lisp code. HTML emission is optimized at compile time into calls towrite-sequence
with literal vectors holding the merged constant parts. - hu.dwim.presentation is a component based web ui, with transparent partial page refresh through AJAX requests. It was something back then.
- TODO to be continued
We often got criticism, but usually for surface issues like the use of reader macros (e.g. syntactic sugar like the #true
#false
syntax to communicate intention), and how it broke the then fragile CL library infrastructure. Luckily it became much better by the time we closed shop, primarily thanks to Fare's extensive work on ASDF.
The praise we got came from people who digged deeper:
- David Lichteblau wrote a post about our hu.dwim.rdbms and hu.dwim.perec (ORM) libs.
- He points to a series of posts on Perec by pinterface.
- Lisp Project of the Day mentions a few of our libs (hu.dwim.def, hu.dwim.walker, hu.dwim.asdf).
- We got some praise from two fellow lispers on IRC starting at 2013-02-22T11:04.