SBCL Crowdfunding
My first attempt at crowdfunding SBCL development is live!
Crowdfunding SBCL threading improvements at IndieGoGo.com. Go and take a look.
SBCL Crowdfunding
My first attempt at crowdfunding SBCL development is live!
Crowdfunding SBCL threading improvements at IndieGoGo.com. Go and take a look.
Donations by Popular Request
Several people have told me I need a donations button on my website, so I went ahead and added one.
That crowdfunding thing? Expect it to go live next week.
My current plan is to run a fundraiser for assorted threading improvements first, and a second one for external format work after that.
The primary goal of the threading work is to make mutexes, semaphores, and condition variables interrupt safe on non-Linux POSIX platforms (primarily Darwin and Solaris/x86[-64]). Secondary goals are timeouts on all blocking synchronization constructs, adding read/write-locks, semaphore notification objects, and finally a general cleanup/refactoring of the threading API.
The external-format project's goal is adding support for newline conversions and BOM marks, and also making external format conversions a good deal faster. Possible secondary goals are adding support for Unicode-aware case-conversions and similar, plus adding a general vector output and input streams similar to string output and input streams provided by ANSI CL.
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.
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
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.
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.
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))
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.
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:
As long as you don't have local changes, you should only see version numbers containing the first four digits, though.
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:
(defun foo (f &rest args) (apply f :bar t args))typically no longer cons the argument list on the heap.
(defmethod foo :around (x &key bar) (call-next-method x :quux t :bar (compute-default x bar)))
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.
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!