The comedic geniuses over at The Onion have done a number on the new Ben Affleck/Jennifer Lopez film, Gigli. I actually got to this story from somewhere else and didn’t realize it was an Onion story at first. Given some of the descriptions of this film that I’ve heard by people who have seen it, the “audience reactions” in the story didn’t seem all that far-fetched. Then I figured it out. Go read it. But don’t drink anything while you are reading unless you want it on your monitor.
As I mentioned yesterday, I got a handheld GPS unit and was going to give GeoCaching a go. Well, today when I got home, Thomas and I headed out for our first “treasure hunt.” The cache we were after is actually in our subdivision, which made it a good first hunt since it was so close and I had a pretty good idea of where it was. Yes, this does somewhat violate the spirit of GeoCaching, but for a first go with a 4.5 year old, I wanted to make certain we found it.
And find it we did! We parked by the pool, got out, sprayed our arms and legs with Deep Woods Off! and started out. I let Thomas wear the GPS unit around his neck and showed him how to read the map display. I told him that the line showed us where we wanted to go and that the arrow was where we were, and it needed to point as closely as possible to the line. He got a real kick out of that. “Daddy, we need to go to the right. Oops! Too far!” It was fun. We had to trek through some weeds that were taller than he is, but we found the cache and opened up. There was a ton of stuff in it. Some toys, a big sea shell and some stuff I didn’t recognize. We looked at all of it, recorded our find in the log book, took a little green MatchBox type car and left a Disney trading pin of Goofy. We then closed it back up, walked around the lake a bit, then headed for home.
Thomas had a ball, and I rather enjoyed myself as well. He’s ready to go on another hunt, only next time he wants one that isn’t so close to home! That shouldn’t be a problem. According to GeoCaching.com, there are about 30 in the area.
On the local radio station 96 Rock they are running a spot in which some chick from the “96 Rock Bod Squad” delivers this at the end of a “newscast”:
Well, it looks like we got Uday and Quasay. Hey Saddam! Ou’reyay extnay, ickheadday!
Juvenile, yes. But funny.
I finally got around to getting a handheld GPS unit today. I got the Garmin eTrex Venture and took it for a spin today when I went cycling at my usual location. Pretty cool little unit. Good price, too. On of the reasons I got it is because I had heard a while back about a sport called GeoCaching and the website that supports it. I had also heard that there was a cache remarkably near my house; actually in my subdivision. So tomorrow, assuming the weather is good, Thomas and I will head out, GPS in hand, to find our first cache. I’ll post tomorrow night with our results. From the comments I read about this cache, and my knowledge of the area, I don’t think it should be too hard to locate. Of course the website reminds us that GeoCaching is “deceptively easy.” We’ll see.
That’s right. Some sick people are creating a computer game based on the horrible events of 9-11-2001. Can you believe that? At the risk of giving them free publicity, the site is here. They have “actual in-game” screenshots of a guy leaping to his death to escape the fires behind him. What kind of person comes up with something like this? I can’t even imagine. And I sure hope I never meet them.
This morning I found out about SmartCVS; a really nice looking GUI client for CVS. I’ve been using WinCVS for a while now, but (no offense to the developers!) it just didn’t feel right. I can’t explain it, but it just didn’t give me all that I wanted. (Laugh all you want about SourceSafe, but that is a really nice client tool.)
Anyway, I just downloaded SmartCVS a few minutes ago and started playing with it. It’s written in Java so it will run on lots of OSs, and it’s fast too. It looks a lot like IntelliJ IDEA and apparently JetBrains has signed some sort of license with SmartCVS to incorporate it into IDEA. There is a free version and a “pro” version with more features. A single license of the pro version is $45 USD which doesn’t sound too bad. I’m going to keep using the free version for a while to make sure I really like it, but thus far it looks like a great tool.
Now if someone would just create a cvs client that can use a proxy! I’m behind a firewall that blocks most useful ports, one of which is 2401… Sigh…
So I’m playing around with Lisp, reading Successful Lisp and thoroughly enjoying myself. I really like Lisp, I just haven’t gotten to use it on anything other than test stuff yet. One of the things that I find the most interesting, and powerful, is the macro facility. Sure, some languages like C have macros that are processed by a preprocessor, but Lisp’s macros are in a league of their own. Consider this code (lifted wholesale from Successful Lisp)
1 (defmacro def-i/o (writer-name reader-name (&rest vars)) 2 (let ((file-name (gensym)) 3 (var (gensym)) 4 (stream (gensym))) 5 `(progn 6 (defun ,writer-name (,file-name) 7 (with-open-file (,stream ,file-name 8 :direction :output 9 :if-exists :supersede) 10 (dolist (,var (list ,@vars)) 11 (declare (special ,@vars)) 12 (print ,var ,stream)))) 13 14 (defun ,reader-name (,file-name) 15 (with-open-file (,stream ,file-name 16 :direction :input 17 :if-does-not-exist :error) 18 (dolist (,var ',vars) 19 (set ,var (read ,stream))))) 20 t)))
What does this mass of parentheses, backquotes, commas and colons do? Lots. Executing the macro thusly
(def-i/o save-checks load-checks (*checks* *next-check-number* *payees*))
will define two functions, one called
save-checks and the other called
load-checks, that will store and retrieve the global variables
*checks*, *next-check-number* and *payees* to and from a given file name. These methods could be called thusly
(save-checks "checks.dat") (load-checks "checks.dat")
This macro could be included in any program for which we needed to have reader and writer functions for marshaling data to and from disk files. This example was for a fictional bank, but let’s say I had a program to process data about the Tour de France and I had buckets for teams, riders, jerseys and sponsors. I could do this
(def-i/o save-tdf-info restore-tdf-info (*riders* *teams* *jersyes* *sponsors*)
and would get
save-tdf-info and restore-tdf-info functions that could be called thusly
(save-tdf-info "tdf.dat") (restore-tdf-info "tdf.dat")
Maybe I’m just easily impressed, but I think that’s pretty cool.