ShopSimple 1.1

I just released ShopSimple 1.1 on the App Store — tell your friends, neighbors, co-workers, pets, SOs, mail carriers.

Even if I say so myself, it’s a great little shopping list application.


Why ShopSimple?

  • Why do I need to tell my shopping list what brand of toothpaste I buy?

  • Why do I need to tell my shopping list when I’m done shopping?

  • Why do I need I need to add things one. item. at. a. time.?

  • Why does my list have to look so complicated?

  • Why would I want to take photos of the dog food I buy?

The answer: you don’t! ShopSimple: simpler shopping lists because life is already too busy.


pushd, I hardly knew you

From a tech/geeky point of view, this is embarrassing enough that I probably shouldn’t mention it. There is hope, however, that some other soul will benefit from my pain.

If you use the *nix (or OS X) command line, you probably know about pushd. It and its companion popd let you push and pop (duh!) a stack of directories so that you can jump from place A to place B and then quickly jump back. Cool.

The embarrassing part is the way in which I was using pushd. I thought that I had to push the directory I wanted to come back to before I went there. So I would:

> pushd .
> cd /someplace
> ... do stuff ...
> popd

This works, but it (obviously) looks sort of, well, dumb. Somehow, when I learned about pushd, I never learned that it acts just like the change directory (cd) command. I.e., that the argument to pushd was the directory to which you want to move and that it saves your current directory automatically. Thus, the correct (more efficient) way to use pushd is:

> pushd /someplace
> ... do stuff ...
> popd

It only eight fewer keystrokes but it’s conceptually much cleaner. The morass of the story: use pushd but use it correctly. Alternately, keep reading the manual, you’ll probably still learn something!

announce: metabang-bind 0.7.4

I discovered a nasty bug in metabang-bind today caused by a gensym being created too early (i.e., it was created when I defined a macro rather than when a bind form in user-code was expanded.) Version 0.7.4 corrects this and adds a nifty new binding form: :structure/rw. This latter lets you both read and write to structure slots within the scope of a binding. Handy!

announce: cl-markdown 0.10.5 and cl-containers 0.11.5

Shocking as it is, I’m actually posting an entry categorized with “lisp”. What is the world a’coming to.

Seriously, though, Tiarnan O’Corrain and Timothy Ritchey, reported a very basic problem with cl-markdown (i.e., it didn’t work). To put it simply, cl-markdown required asdf-system-connections but didn’t make this requirement explicit. ASC shouldn’t really be necessary so 0.10.5 (and cl-containers 0.11.5) add some more duct tape (chewing gum, bailing wire) to the mix in the hopes of getting things more or less straightened.

My apologies for the snafu. Let me know if things are still aft agley.

announce: lift, moptilities

For your edification and enjoyment:

  • A very minor update to moptilities (to let it keep up with changes in sb-introspect).

    BTW, I did this to handle the past, but I’d be happy to hear of a different way to avoid history’s nightmare:

    (defun function-arglist (symbol)
       (or (find-symbol (symbol-name '#:function-lambda-list) :sb-introspect)
           (find-symbol (symbol-name '#:function-arglist) :sb-introspect))
       (fdefinition symbol))
  • An update to LIFT. The primary impetus was to avoid the brain-dead way SBCL’s version of ASDF-install loads every system definition it finds (rather than only the ones it needs (a behavior, by the by, that the portable version does not share)). It also includes several small additions and tweaks.

    • Added ignore-multiple-values? to ensure-same and ensure-different,
    • catch ambiguous names in make-testsuite,
    • divide result by delay in while-counting-events to give count per second,
    • many other minor things…