Skip to content

dwim.hu

What

The hu.dwim.* universe of Common Lisp projects was built when we decided to do some enterprise development in Common Lisp.

Who

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:

Why

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.

When

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.

Status

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.

Where

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.

Notable projects, experiments, contributions

  • 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 over defun. Coding in Slime and running the unit test becomes almost the same thing: a test is just a defun* plus a smarter assert. 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 to write-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

Third party opinions

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:

Pinned Loading

  1. hu.dwim.stefil hu.dwim.stefil Public

    Common Lisp testing framework blending into normal Slime development.

    Common Lisp 4

  2. hu.dwim.defclass-star hu.dwim.defclass-star Public

    A Common Lisp DEFCLASS* for less boilerplate

    Common Lisp 5 4

  3. hu.dwim.sdl hu.dwim.sdl Public

    Common Lisp FFI for http://libsdl.org/ (SDL2), using cffi/c2ffi.

    Python 4 1

  4. hu.dwim.zlib hu.dwim.zlib Public

    Common Lisp FFI for http://zlib.net/, using cffi/c2ffi.

    Python 2 1

  5. hu.dwim.computed-class hu.dwim.computed-class Public

    Constraint based change propagation with CLOS integration.

    Common Lisp 3

  6. hu.dwim.syntax-sugar hu.dwim.syntax-sugar Public

    Framework to introduce and work with syntax sugars in Common Lisp.

    Common Lisp

Repositories

Showing 10 of 32 repositories
  • .github Public
    hu-dwim/.github’s past year of commit activity
    0 0 0 0 Updated Nov 24, 2024
  • hu.dwim.sdl Public

    Common Lisp FFI for http://libsdl.org/ (SDL2), using cffi/c2ffi.

    hu-dwim/hu.dwim.sdl’s past year of commit activity
    Python 4 BSD-3-Clause 1 0 0 Updated Nov 23, 2024
  • hu.dwim.reiterate Public

    The Common Lisp iterate macro – rethought and rewritten using a proper walker.

    hu-dwim/hu.dwim.reiterate’s past year of commit activity
    Common Lisp 4 MIT 1 0 0 Updated Nov 18, 2024
  • hu-dwim/hu.dwim.logger’s past year of commit activity
    Common Lisp 1 0 0 0 Updated Nov 18, 2024
  • hu.dwim.zlib Public

    Common Lisp FFI for http://zlib.net/, using cffi/c2ffi.

    hu-dwim/hu.dwim.zlib’s past year of commit activity
    Python 2 1 0 0 Updated Feb 27, 2024
  • hu.dwim.defclass-star Public

    A Common Lisp DEFCLASS* for less boilerplate

    hu-dwim/hu.dwim.defclass-star’s past year of commit activity
    Common Lisp 5 4 0 1 Updated Dec 5, 2023
  • hu.dwim.walker Public

    Customizable code walker for Common Lisp. Uses CLOS and ContextL.

    hu-dwim/hu.dwim.walker’s past year of commit activity
    Common Lisp 7 BSD-3-Clause 1 0 0 Updated Jan 27, 2023
  • hu.dwim.util Public
    hu-dwim/hu.dwim.util’s past year of commit activity
    Common Lisp 0 0 0 0 Updated Jan 27, 2023
  • hu.dwim.quasi-quote Public

    A framework to generalize quasi-quotation, i.e. `(,foo) but for SQL, XML, JavaScript, etc.

    hu-dwim/hu.dwim.quasi-quote’s past year of commit activity
    Common Lisp 0 0 0 0 Updated Aug 21, 2022
  • hu.dwim.syntax-sugar Public

    Framework to introduce and work with syntax sugars in Common Lisp.

    hu-dwim/hu.dwim.syntax-sugar’s past year of commit activity
    Common Lisp 0 0 0 0 Updated Aug 21, 2022

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading…

Most used topics

Loading…