Older blog entries for nikodemus (starting at number 56)

SBCL Merchandice

I have opened a cafepress shop with some Lisp and SBCL branded merchandice -- currently mugs and T-shirts, including zbir's infamous save-lisp-and-die -design.

I've been intending to do something like this for ages now, but never got around to it before. Everything has a markup of around 50%, and the proceeds go towards funding SBCL development.

The crowdfunding thing is still on. More on that soon.

Syndicated 2011-08-03 18:43:16 from Nikodemus Siivola

Crowdfunding SBCL

I'm planning a couple of crowdfunding campaigns on indiegogo.com to raise money for SBCL work.

One campaign will be about external-format improvements, and the other about improving threading on non-Linux POSIX platforms.

Trying to cauge interest a bit, so here's a small questionnaire: SBCL Crowdfunding Questionnaire

Syndicated 2011-08-02 15:58:38 from Nikodemus Siivola

Amazon ebook Surcharges

What's up with the $2 surcharge on ebooks Amazon applies when shopping from Finland? (Or most non-US countries for that matter.)

My understanding is that this is used to bankroll the Whispernet, which is completely, ridiculously disproportionate.

Since buying my Kindle late last year, I've bought some 60 ebooks from Amazon -- paying $120 is surcharges. That's more than enough to pay for a year of unlimited mobile broadband in Finland.

So yeah, I'm feeling pretty butthurt here.

For more on this, see: Amazon Hold Back The Growth Of E-Books Around The World. (TL;DR: $0.99 ebook becomes a $3.44 ebook -- and none of the price difference goes to the author or the publisher.)

Since it's highly unlikely that Amazon will do anything about this unless there's a good deal of publicity about this, please consider sharing this.

Syndicated 2011-07-14 13:49:05 from Nikodemus Siivola

Will Somone Think of The Namespaces?

There is a single namespace for packages in Common Lisp.

There is also a single ASDF system namespace.

Please, make sure you use the same prefixes in both!

To pick a random bad example: system name cl-unification, package name unify. Do not do this.

Just pick one, please. It's getting crowded.

Syndicated 2011-06-14 10:37:14 from Nikodemus Siivola

Slime-Indentation and Names Styles

Slime's slime-indentation contrib now also provides support for named indentation styles. Add a line like this to source files to specify a style:

;; -*- common-lisp-style: modern -*-

Predefined styles are: basic, classic, modern, and sbcl. See C-h v common-lisp-style for more details.

You can also define your own styles:

;;; in .emacs, after slime-setup.
(define-common-lisp-style "personal"
   "My own eccentric style."
   (:variables
     (lisp-lambda-list-keyword-alignment t)
     (lisp-lambda-list-keyword-parameter-alignment nil)
     (lisp-loop-indent-forms-like-keywords t))
   (:indentation
     (if (4 2 2))))

See C-h f define-common-lisp-style for details.

If you define a style for use in the source-files of an open source project, please consider submitting it for inclusion.

Ps. in case you're wondering, you can gain access to all these goodies and more by adding slime-indentation to your slime-setup call:

;; Maybe slime-indentation will be part of slime-fancy at some
;; point, but it isn't yet.
(slime-setup '(slime-fancy slime-indentation))

Syndicated 2011-06-09 16:08:35 from Nikodemus Siivola

Endless Loops and Interactive Development

Tip of the day. Don't write:

(defun foo-loop (foo) (loop ...loop body...))

Instead, write:

(defun foo1 (foo) ...loop body...)
(defun foo-loop (foo) (loop (foo1 foo)))

It's a small thing, but it makes it much easier to debug the loop while it's running. If you need to instrument it, you can just add whatever code you need to FOO1 and recompile it.

If you open code almost anything inside the body of an endless loop, it becomes much harder to intercede -- and interactive development is all about intercession with running code.

Syndicated 2011-06-08 17:56:02 from Nikodemus Siivola

SBCL 1.0.49 released, move to Git

SBCL 1.0.49 has been released. I already blogged about some of it's features, so I won't repeat myself.

On the dev front, SBCL official upstream has as of today moved to Git:

git clone git://sbcl.git.sourceforge.net/gitroot/sbcl/sbcl.git

to get your clone. The CVS repository remains open for anon access, but will not be getting any new updates.

This changes SBCL version numbers a bit. If you see a version number like this: 1.0.49.3.foo.2-f48ea2d-dirty this is what it means:

  • 1.0.49: first three numbers come from the latest release. The last digit is incremented approximately once per month, as before.
  • 3 the fourth is the number of commits on origin/master since the release.
  • foo is the name of branch being built.
  • 2 is the number of commits on that branch but not on origin/master.
  • f48ea2d is the abbreviated SHA1 has for the current commit.
  • -dirty is a marker for builds from dirty trees, ie. ones containing uncommitted changes.

As long as you don't have local changes, you should only see version numbers containing the first four digits, though.

Syndicated 2011-06-06 14:52:52 from Nikodemus Siivola

SBCL 1.0.48.35 frozen

It's that time of the month again.

SBCL's frozen for testing, in preparation for 1.0.49 release due next weekend.

Some things on note this month:

  • Things like
    (defun foo (f &rest args)
      (apply f :bar t args))
    typically no longer cons the argument list on the heap.
  • Functions from files loaded as source have source location information associated with them.
  • Deadlocks on mutexes and spinlocks are detected.
  • --script commandline option now also works with standard input, and is generally more shell-scripting friendly.
  • Using call-next-method with explicit arguments in safe code is much faster in the common case of required arguments not changing. Eg:
    (defmethod foo :around (x &key bar)
      (call-next-method x :quux t :bar (compute-default x bar)))
  • Few instances where interrupts were disabled needlessly have been fixed, leading to easier to debug code.

That's not the complete list by any means, which is why you should grab the latest from git, eyeball the NEWS, and give it a whirl -- and report any regressions.

Syndicated 2011-05-30 19:18:30 from Nikodemus Siivola

Improvements to slime-indentation

I just merged a mess of improvements to the slime-indentation contrib. To gain the benefit of them, update your Slime from CVS and make sure your slime-setup call looks something like this:

(slime-setup '(slime-fancy slime-indentation))
;; This is my preference -- alter to taste.
(setq lisp-lambda-list-keyword-parameter-alignment t)
(setq lisp-lambda-list-keyword-alignment t)

Summary of improvements:

  • Subclause aware loop indentation. (Adapted from cl-indent-patches.el.)
  • Support for if* indentation. (Adapted from Gabor Melis' mail to slime-devel.)
  • Improved lambda-list indentation. (Didier Verna's recent work.)
  • Improved defmethod indentation. (Didier Verna's recent work.)
  • Support for #+foo and friends.
  • Indent ,(...) and ,@(...)as code.
  • Correct handling of (... &rest symbol) indentation specs. Fixes eg. prog indentation.
  • Distinguish default from other things beginning with "def". Fixes eg. :default-initargs indentation.

Syndicated 2011-05-15 17:32:55 from Nikodemus Siivola

SBCL 1.0.48 released

It's been a while since I last summarized SBCL status, so here's my five favorite changes in the 1.0.43-1.0.48 range (out of over 100 user-visible ones).

  • Better toplevel form reporting from eval, ie. no more "in: LAMBDA NIL" in compiler notes.
  • Faster slot-value in the presence of slot-value-using-class.
  • Optimized constructors can be used for make-instance in the presence of slot-value-using-class and initialize-instance :around methods.
  • Support for ~/ and ~user/ in pathnames.
  • A number of improvements to compile-time typechecking and derivation, eg. full warnings for violating a proclaimed ftype.

Additionally, if you're feeling the least bit adventurous, the current devhead adds source-locations for code loaded as source -- with it M-. can take you to functions defined in your initialization files, etc.

Syndicated 2011-05-10 06:33:02 from Nikodemus Siivola

47 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!