My math joke in the recap of the previous meeting turned out to be too conservative: this month, we had 22 people, double the turnout from last month! The meeting was held at the offices of CashNetUSA, and they were generous enough to provide pizza and drinks (for both drivers and transit riders ;-). There was a wireless transmitter but no connection to the internet, so Bruce B. routed us all through an ad-hoc network off his cellular wireless card. Next month’s meeting will be held there as well, and they promise to have a proper internet connection setup then!
CashNetUSA is looking for Ruby developers, or more accurately, great developers who know Ruby. They’re hiring at all levels of experience – check out their job listings. Thanks, CashNetUSA!
John Q. donated a copy of Programming Erlang to our first book raffle, which was won by Craig L. If anyone has a book they’d like to donate, please contact me so I put it in announcements for future meetings.
Intro to Lisp Workshop
There was some more discussion about the details of the Intro to Lisp Workshop on May 31. The most noteworthy decisions were:
- standardize on SBCL, SLIME, Emacs
- have a set of milestone files that people who can’t keep up with the presentations can download to get themselves caught up
- recommended screen capture softweare: xvdicap, vnc2swf
We also planned presentation topics for future meetings:
- June: Kurt S. will present on implementing interpreters, and Steve G.’s presentation on Lisp languages on the JVM got bumped to June in the interest of time at May’s meeting
- July: Andrew W. will demo Open Genera, the operating system from Symbolics’ Lisp machines
- future: John Q. knows a guy who could presnet on programming language topics, I will (someday) present on Weblocks
Presentation: A Basic Object System Using Macros
The rest of the meeting was Grant R.‘s presentation on how he wrote his own object system using closures in Scheme. Check out his presentation slides (here or here) and the code from his demos (here or here). The slides are supplemental to the discussion and the demo, so if you’re trying to get the message from just the slides, shame on you for not coming to the meeting. Grant gets extra style points for writing his slides in Scheme and displaying them using a slide program in DrScheme. There were a couple times he wanted to change his slides and he did so in code in the DrScheme IDE. Cool!
Grant is a big proponent of using “toy projects” to learn fundamental concepts. In this case, he wanted to understand objects and closures better, so he iterated through a couple versions of a simple object system implements using closures, including using hygenic and unhygenic macros. In the process, he got more experience with language features and concepts. His final system included methods and variables, encapsulation, message passing, lexical scope, and name collision detection. He approached it as a code generation problem – write the code you want, then abstract out the essence using macros and syntax extension.
The end of the presentation was cut off due to technological failure (projectors, gotta love them), but he had some great closing thoughts:
- toy projects are a great learning experience
- Lisp is a great vehicle for exploring ideas, which you can then use in other languages
- don’t become a language slave; embrace the best ideas from all languages
- put in the time and effort to improve your study habits
- Lips introduces powerful ideas that are hard to find in other languages
Check out his slides and demo code. They are nice, but like I said, the real value was in the discussion during the presentation. Grant has worked with Scheme but not Common Lisp, and several people (myself included) were the opposite. There were also people who knew both languages well and could explain some of the differences. For instance, there were two Scheme language features (lexical scoping and hygenic macros) that I knew of but didn’t understand well, but Matt, Kurt, and Andrew explained it in a way that finally made sense to me. I’m not the only one who learned from both the presentation and the discussion; there are some seriously smart people in this group and I can’t wait for the next meeting to participate in more stimulating discussions like this.