Author: Stuart Sierra

JavaScript-like Objects in Ruby (or Lisp)

As part of my exploration of Ruby, I attended Francis Hwang’s presentation to the New York Linux Users’ Group. One feature that caught my interest in his talk was the OpenStruct class, which lets you assign values to arbitrary “slots” within an object. require ‘ostruct’ me = OpenStruct.new me.name = "Stuart Sierra" me.net_worth = -500…

Read the full article

Ruby: Python for Lisp Programmers

A popular game on comp.lang.lisp is comparing Lisp with Python. Lispers complain that Python has a crippled lambda and no lexical closures, and they hiss and boo whenever Python’s development tends in a non-functional direction. I’ve recently been playing with Ruby. Lo and behold, it has real lambdas, closures, and a generally more functional style.…

Read the full article

List Processing and the Efficiency of CONS

One big difference between Lisp and most other programming languages is its use of recursion instead of iteration. So while I was working on some text-parsing code, I fell in to this simple pattern: (defun process (list) (if list (cons (do-something (first list)) (process (rest list))))) Ah, the joys of Lisp-2. If do-something were actually…

Read the full article

Goodbye Toolbar, Hello “Ribbon”

Microsoft Office 12 will feature a new interface called the ribbon. I’m not usually a fan of Microsoft interfaces, but this one shows some potential. Office’s hierarchical menus are definitely overloaded, and “Task Panes” are clunky. Moving controls that were formally buried in modal dialogs out into the ribbon should also make working with the…

Read the full article

Broken Binary Searches Oh My!

So it turns out that nearly every binary search algorithm is broken. Why? Fixed-sized integers, a holdover from machine programming that still lingers in supposedly modern languages like Java. LtU’ers are haggling to decide if it’s a type error, a bad data structure, a language defect, a failure of correctness proofs, or just a bug.…

Read the full article

Static-Dynamic Pages

Despite all of the AJAX/Web 2.0 hype, the fact remains that most web pages are mostly static. The most efficient way to serve static pages is unquestionably to store them as static files on a file-based web server such as Apache. I add new pages to this site once every few days at most, but…

Read the full article

Pushing to Lists

Fiddling with some Common Lisp code a few weeks ago, I needed to push items onto the end of a list. After thinking for a moment, I wrote this: (defun push-end (object place) (nconc place (list object)) Since I was fiddling in LispWorks at the time, I discovered that LispWorks already defines its own push-end…

Read the full article