⚓ Resources » Tools I use heavily and heartily recommend
- Unlicense ⚓
I release all my projects into the Public Domain with this. The Unlicense is the most liberal open-source "license" and you should use it if you want to maximize the potential applicability, and thus relevance and impact, of your projects.
Avoid the GPL at all costs! You'd just silently lose users left and right for no reason!
If you feel you can't use the Unlicense for some obscure reason, then the MIT license is a good second choice. It's very liberal and, most importantly, very short.
Personally, I consider any license longer than 2 pages to be suspect and a liability. Maybe that's because I'm a programmer and not a lawyer.
- TypeMatrix 2030 ⚓
I've been using this keyboard exclusively since January 2008 and I love it!
I touchtype Dvorak (~70wpm) and made some custom remappings so that I can press all modifiers in any combination with my thumbs, without alternating. This is quite a boon for Emacs! My physical right shift is a "()" key (it inserts opening and closing parentheses and puts the caret between them), which is nearly indispensable for Lisp coding. Also, with CTRL it inserts two double-quotes ("").
See my layout. (By the way, the "Win" key means "Window Manager", not "Windows".)
The messy GIMP file is released into the Public Domain.
Note that the included background is from the TypeMatrix site and presumably copyrighted.
My fairly incomprehensible xmodmap changes file is available.
I'm not affiliated with TypeMatrix in any way, just an enthusiastic user!
- Dvorak ⚓
A MASSIVELY superior alternative to clunky old Qwerty, in every respect except popularity. Significant Dvorak efficiency and ergonomy gains compared to Qwerty:
- 70% of strokes on home row. With Dvorak, you can type tons of common words just with the home row. Not so with Qwerty.
- Optimizes for hand alternation, which increases rhythm and reduces errors and pain.
- Optimizes for using stronger fingers such as index more than weaker fingers such as pinky.
- Optimizes for natural and speedy "finger rolls" from "exterior" to "interior".
- Optimizes for common digraphs.
- Optimizes for minimizing "jumps" from the top row to the bottom row and vice-versa.
- Optimizes for using the right hand a bit more as it's typically the stronger hand.
- "AOEUI" is in a nice line on the home row on the left, which is logical and makes the layout easier to learn. "Y" is just on top of "I", which is also logical. Qwerty scatters vowels pretty much randomly.
In short, Dvorak was designed scientifically to optimize many important things, there's some thought to the design. In contrast, Qwerty is is a basically random arrangement of letters. Fun fact: the letters in the top row spell out "TYPEWRITER". Talk about some marketing bullshit!
I should expand on this in one or more articles...
- StumpWM ⚓
"A tiling, keyboard driven X11 Window Manager written entirely in Common Lisp."
Basically, this extends Emacs to the whole GUI. Needless to say, this is freaking AWESOME! StumpWM also draws inspiration from the "screen" terminal multiplexer, another awesome program I use daily, albeit in basic ways. I've been using this exclusively since 2008 and I can't imagine living without it (or a superior replacement) ever again!
My raw and undocumented
.stumpwmrcinit file is released into the Public Domain.
- Emacs ⚓
The best programmer's editor and IDE available today!
My raw and undocumented
.emacsinit file is released into the Public Domain.
- Slime ⚓
Required to use open-source Common Lisp implementations properly. No excuses!
By the way, M-x slime-cheat-sheet is still as under-advertised as ever!
- SBCL ⚓
By far the most popular Common Lisp implementation.
It's open-source (mostly Public Domain), reliable, very fast, and well-supported by its maintainers and library authors.
Shines especially on Linux! For OSX and Windows, apparently CCL (the second most popular Common Lisp implementation) is pretty nice.
- Quicklisp ⚓
The One True Way to download and install Common Lisp libraries. Period!
- Ubuntu Linux ⚓
So I know this is not exactly the most hardcore Linux distro, to say the least... But it's pretty user-friendly, if (and only if?) you disable some of the horrid UI crap and make some tweaks, which I should document at some point. The most important point for me was activating "Gnome Classic".
I've been using Ubuntu exclusively since mid-2006 and I've never looked back because it's good enough and it's the most popular Linux distro. I use LTS releases only, because I'm simply not going to upgrade every 6 months. I like to make clean installs then reconfigure and load backups rather than upgrading major versions through the package system. That's always a great opportunity to leave some cruft behind and do some considered refactorings...
⚓ Resources » Great references I use
- Common Lisp HyperSpec ⚓
The last word on all the syntax and semantics of Common Lisp.
You'll need to invest untold hours studying this if you're ever to truly master Common Lisp.
Note however that it's not a tutorial.
You can download the CLHS to your computer from Quicklisp with
for a more snappy browsing experience. This uses my thin ASDF wrapper.
- HTML5 Specification (at the W3C) ⚓
The Candidate Recommendation for HTML5 at the W3C.
This is based on the HTML5 specification from the WHATWG.
- CSS 2.1 Specification ⚓
My pages validate as CSS 3, but really CSS 2.1 lets me do pretty much everything I want to do.
- Selectors Level 3 ⚓
These additional CSS selector types are at least occasionally useful.
- SVG 1.1 Specification ⚓
I should definitely start learning some SVG.
The idea of writing vector images by hand is very appealing to me.
I think a few touches of custom SVG here and there
could significantly improve the presentation quality of my website.
⚓ Resources » Distinguished articles
- "Programming's Dirtiest Little Secret" ⚓
Every professional involved with computers should learn touch-typing.
Steve Yegge makes the case quite convincingly!
- The Best of Intentions: EQUAL rights - and Wrongs - in Lisp ⚓
An unmissable classic!
Kent Pitman explains some fundamental limits on copying, equality and coercion in programming languages. Also, the useful concept of "intentional types".
- Rule of Least Power ⚓
One of the most fundamental principles to understand to be a great programmer!
- "Deep Emacs Lisp Part 1 (Basically, a Monad Tutorial)" ⚓
Best monads tutorial EVER for lispers! Forget burritos and space suits!
Part 2 is less interesting, if I recall correctly.
⚓ Resources » My heartfelt recommendations
- Practical Common Lisp ⚓
The most popular Common Lisp tutorial. Also the best, if you have some programming experience.
- Quickdocs ⚓
A very promising new documentation and search engine site for all libraries in Quicklisp!
- quicklisp-projects issues ⚓
Great way to keep tabs on Quicklisp inclusion requests and such.
- cl-test-grid reports ⚓
Got a library in Quicklisp?
Definitely check these reports for success/failure across multiple Common Lisp implementations and platforms.
- Programming in the twenty-first century ⚓
One of the best programming blogs on the planet! A very high ratio of "home runs".
- "The Surprising History of Copyright and The Promise of a Post-Copyright World" ⚓
If you read one single article about copyright in your entire life, this should be the one.
- "The Long, Painful History of Time" ⚓
A great, informative piece by the legendary Erik Naggum.
(todo: re-read and produce a better description)
- @CodeWisdom ⚓
Tons of great programming quotes. Extremely high-quality twitter feed!
- Urban Dictionary ⚓
Your one-stop shop for all matters of random slang terms!
Particularly useful for more or less obscure IRC abbreviations, IMHO!
⚓ Resources » Good stuff
- Planet Lisp ⚓
The best Common Lisp blog aggregator!
- lisptips.com ⚓
A healthy source of Common Lisp tips, by Zach Beane, creator of Quicklisp.
- Slime Tips ⚓
A healthy source of Slime tips, by Stas Boukarev (stassats), another proficient and prominent lisper.
- Iterate ⚓
A welcome improvement over LOOP!
Still monolithic and not better enough for successful mass migration, though. I don't use it, nor LOOP. I rely more on such things as mapping operators. I already made some libraries that make it easier to survive without LOOP, with plans for many more that will completely replace LOOP in a lispy and non-monolithic manner. I should write some articles about this...
- Lisp in Small Parts ⚓
A good and recent Common Lisp learning resource for newbies without prior programming experience.
- Features of Common Lisp ⚓
A pretty nice showcase of distinctive Common Lisp features!
- Common Lisp Type Hierarchy ⚓
A pretty nice diagram of all the types in Common Lisp, with their relationships.
A bit overwhelming, but highly informative!
- Parsing Considered Harmful ⚓
I strongly agree! At least for the parts of the article directly related to parsing.
⚓ Resources » Fair warnings
- Let over Lambda ⚓
Common Lisp newbies: STAY AWAY from this book, at least until you've acquired proper Common Lisp taste, lest it teach you bad habits and warp your mind.
I've seen my share of impressionable newbies pick up questionable tactics from this book without realizing how unconventional (and often unnecessary) they are. There's usually no good reason to use closures to make your own ad-hoc object system, for instance. Just use CLOS.
- Paul Graham ⚓
Common Lisp newbies: Beware of Paul Graham's Common Lisp coding style, it's not considered "idiomatic" by many (myself included). For example, he prefers DO over LOOP.
He's got some pretty nice essays on Lisp, though! The most well-known is "Beating the Averages", which introduced masses of programmers to Lisp, myself included!