March 29, 2006

Electrograf

electrograf

I think this is brilliant in a few ways.

An electro-graf is a graffiti piece or throw-up that uses conductive spray-paint and magnet paint to embed movable LED display electronics. The following pages describe the materials and processes used to create the prototype indoor and outdoor interactive electro-grafs created in the lab at Eyebeam.

Check out the how-to video.

Posted by jjwiseman at 12:00 PM | Comments (0) | TrackBack

Peter Seibel at SDForum

i don't remember where i got this

Peter Seibel will be giving an SDForum talk on April 26:

In his talk, Peter will discuss how our choices of programming language influences and shapes our pattern languages and the architectures we can, or are likely to, invent. He will also discuss whether it's sufficient to merely broaden your horizons by learning different programming languages or whether you must actually use them.

I'm hoping to be in the Bay area around then for Paul Graham's Startup School, but I don't think I can swing the 26th.

Posted by jjwiseman at 11:45 AM | Comments (0) | TrackBack

March 22, 2006

WowWee and Evolution Robotics

This is cool: WowWee and Evolution Robotics have announced that WowWee will use Evo's object recognition (ViPR) and infrared-based localization (NorthStar) technologies in future products.

WowWee seems to be the most exciting thing in innovative but affordable robot toys (and other devices), and I can't wait to see what they do with Evo's nearly magical tech.

I can't find any mention of this deal on either Evolution's or WowWee's website. And why doesn't Evo have an RSS feed for news?

Speaking of things Evo should do... I wish they could figure out a way to offer a free version of the object recognition SDK.

They have a free Windows-based objrec demo app which is pretty neat, but you have to basically email a human and ask for a password before you can download it. That's too much of a barrier for me—they should be making sure that thing gets in front of as many people as possible. And then, if you want to play with your own object recognition application, you should be able to download a free version of the SDK without having to provide more than a working email address. It should work on Linux, and it should come with (at least) Python bindings.

I'm sure they can find a way to restrict the free SDK's suitability for commercial use, perhaps by limiting the number of objects that can be recognized (to say, 10) or restricting the resolution of the input images, or making it intentionally inefficient (if you want to process more than one image per second, you have to pay).

Update: A few hours later Evo posted a press release.

Posted by jjwiseman at 11:52 AM | Comments (0) | TrackBack

Reformation of Character(s)

From an openmcl-devel thread on Unicode support strategies, specifically on the subject of internal representations of strings, Gary Byers writes

I do think that the point that 16 bits is probably enough is a good one; the subset of UTF-16 that doesn't include surrogate pairs - which I guess is often referred to as UCS-2 - is probably a more reasonable step (if a 2X increase in string size is “quitting cold turkey”, a 4X increase is probably “quitting cold turkey and then getting religion”, which does seem a little drastic ...)

Posted by jjwiseman at 10:45 AM | Comments (0) | TrackBack

March 20, 2006

Mr. Shrimp Loses His Tolerance of Veterinarians One Year at a Time

mr. shrimp investigates the robot

This weekend it took $650 (in emergency vet dollars) worth of x-rays, injections and blood tests to learn that Mr. Shrimp has an allergy to wheat! At least he didn't swallow another foreign body (not Petunia), and at least the treatment doesn't involve expensive surgery: We just can't give him the fancy food I bought one night because it was more convenient than driving to Vons for Iams (I can't help but think of what Benjamin Franklin would have made of the last sentence).

Posted by jjwiseman at 10:19 AM | Comments (4) | TrackBack

March 17, 2006

Try Lisp, One of These Days

Try Lisp

Peter Seibel is playing with an AJAX-enabled Lisp REPL, Try Ruby-style.

Note the arglist display at the bottom.

Posted by jjwiseman at 11:24 AM | Comments (7) | TrackBack

March 16, 2006

Watch Out, She'll Bite Your Frakking Ear Off!

nicki clyne

Last night we went to see Block Party at the Arclight. I was waiting in line to buy Milk Duds, and was checking out this extremely cute girl in extremely tight jeans (pretty much the same outfit as the middle photo here), thinking that she looked familiar and maybe she was an actress. I had pretty much concluded she was just a plain old cute civilian when Lori came up to me and whispered fiercely “CALLY FROM BATTLESTAR IS TWO LINES OVER! SHE HELD THE BATHROOM DOOR OPEN FOR ME!” (Don't read that Battlestar wiki link if you haven't seen the last epsiode of this season yet).

We're both huge fans of the new Battlestar Galactica. This was perhaps even better than the other big celebrity sighting at the Arclight, when we stood close enough to Juliette Lewis to see the downy hair on her arms as she handed her ticket to the ticket taker.

It turned out that Cally (Nicki Clyne) was also there to see Block Party. Which was a good move on her part, I'd have to say. And now there are a bunch of CDs I want to buy.

Posted by jjwiseman at 04:18 PM | Comments (3) | TrackBack

Montezuma Begins

cockroach ZAP!
Catherine Chalmers, Electrocution

Lucene is a very popular open source search engine library written in Java. Ferret is a Ruby port of Lucene. Montezuma is my in-progress Lisp port of Ferret.

The idea is that if you have a Lisp application in which you'd like to be able to do text-based search, Montezuma will handle it. One search engine flexible enough to be used for project directories, Blog engines, wikis, IRC bots and paste services. Custom match scoring, phrase queries, wildcard queries, word proximity queries, date range searching and fielded (e.g., title, author, date, contents, channel) searching should be significantly more powerful, and easier for users than throwing a regex input field up on a page. If you want, you can write your own tokenizers and document classes.

I don't even remember what burning desire for Lisp-based search functionality originally motivated me to start writing Montezuma, but let the post hoc explanation include the following:

  • Learning Ruby. It's been interesting comparing the original Ruby version with my Lisp translation.
  • Learning about the inner workings of search engines. Though I've been surprised at how far I've been able to get without a complete understanding of Lucene-style index management.
  • Bringing Lucene home to Lisp.

Lucene seems to have Text Database (TDB) in its heritage, which was a Common Lisp text search engine developed at Xerox PARC in the late 80s/early 90s. “An Object-Oriented Architecture for Text Retrieval” is a very nice introduction to the principles on which TDB was built.

This paper presents a software implementation architecture for text retrieval systems that facilitates (a) functional modularization (b) mix-and-match combination of module implementations and (c) definition of inter-module protocols. We show how an object-oriented approach easily accommodates this type of architecture. The design principles are exemplified by code examples in Common Lisp. Taken together these code examples constitute an operational retrieval system. The design principles and protocols implemented have also been instantiated in a large scale retrieval prototype in our research laboratory.

For some reason I'm surprised by the modern style of the code examples in that paper. It's in lower case, and doesn't use tagbody!

(defmethod relevance-search ((app t) query &optional (threshold 10))
  (let ((terms ())
	(scores ()))
    (map-tokens #'(lambda (token) (pushnew token terms :test #'token-string=)) query)
    (dolist (term terms)
      (let ((weight (/ 1.0 (+ (get-term-frequency app (token-image term)) .001))))
	(dolist (freq-pair (get-frequency-postings app (token-image term)))
	  (let* ((id (car freq-pair))
		 (freq (cdr freq-pair))
		 (score-pair (assoc id scores)))
	    (unless score-pair
	      (setq score-pair (cons id 0.0) scores (cons score-pair scores)))
	    (incf (cdr score-pair) (* weight freq))))))
    (mapcar #'car (subseq (sort scores #'> :key #'cdr) 0 (min threshold (length scores))))))

(Speaking of search, the way I found the Lisp file containing the paper's code, which I typed in by hand, was with a little mdfind "org_lisp_definitions == '*relevance-search*'". Maybe that Lisp Spotlight plugin turned out to be somewhat useful, after all.)

Montezuma is probably about 50% complete. Searching (as opposed to parsing documents and updating indexes) and query parsing remain to be written.

It might seem absurd to say that the only part left undone in a search engine is the part that searches, but there's a lot of machinery that had to be put in place first:

lucene architecture

I can't wait to see how it fares performance-wise to the Ruby and Java versions.

Posted by jjwiseman at 02:59 PM | Comments (16) | TrackBack

March 13, 2006

Takin' 'er Easy for All Us Sinners

OK, where were we?

Right, Lebowskifest.

lori and the dude
“Who's this guy?”

We learned that the first day of Lebowskifest is the lamer day, with bad music and only a few people in costume. But we did get to talk with, attempt to recognize or share a nod with a few of the cast or the people who inspired the characters. The Dude is The Dude, and The Dude takes it as it comes.

The Dude: So... tell me what you're really searching for in life.
Lori: I dunno, what are you searching for in life, Dude?
The Dude: (slinkster voice) Apassionata.

I'm sure my camera flash interrupting his hitting on Lori was just one more thing for a mind kept limber through adherence to a strict, uh, limbering regimen to take in stride. And as we walked out of the Knitting Factory a while later, he caught my eye from across the room and gave me a nod, and I nodded back.

Posted by jjwiseman at 10:18 AM | Comments (2) | TrackBack

March 03, 2006

I Can Get You a Toe

lebowkifest west 2006 poster

Tonight is Lebowskifest. Mark and Charley are going, and they haven't seen the movie—radical!

Yesterday was jury duty and a drink at the the Drawing Room, served by our favorite bartender (I'm surprised I can't find a single picture of her online).

Monday was a flat tire. Thanks, AAA.

Saturday was Marisa's R & B birthday. Neck was a zombie, JoAnne was a robot, and Sonic's famous.

Posted by jjwiseman at 01:07 PM | Comments (1) | TrackBack

Halcyon Days

i wish i could remember where i got this from

“I went back to graduate school as a form of entertainment (at the time I was making $750/day as a Lisp Machine programmer -- that dates me, eh?”—Philip Greenspun

Posted by jjwiseman at 12:31 PM | Comments (3) | TrackBack

March 01, 2006

reAnimator

reanimator: regular expression visualization

Oliver Steele has a really neat animated regular expression visualizer called reAnimator. There's a lot of architecture behind it.

reWork is more of an interactive tool along the lines of Edi Weitz's regex coach, and the rest of his projects are pretty cool, too.

Posted by jjwiseman at 11:53 PM | Comments (0) | TrackBack