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 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.
bitquabit – The One in Which I Call Out Hacker News
“A developer, asked how hard something will be to clone, simply does not think about the polish, because the polish is incidental to the implementation.”
Nine times out of ten, when you think an application was ridiculously easy to implement, you’re completely missing the user side of the story.
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 ...
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 /someplace
> ... do stuff ...
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!
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!
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.
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))
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.
- catch ambiguous names in
- divide result by delay in
while-counting-events to give count per second,
- many other minor things…