Recap of 3/21 Chicago Lisp Meeting

April 3rd, 2008

Happy belated Chicago Lisp news!

Two weeks ago (March 21st), we had our first meeting to bootstrap the new Chicago Lisp User Group.  We had 7 people show up for the initial meeting:

Craig Luddington
Eli Naeher
Victor Kryukov
John Quigley
Shaneal Manek
Dave Morrow
Peter Christensen

Items Covered:

Future meetings - We decided on monthly meetings, the third Friday of every month, 7pm.  The next meeting will be Friday, April 18th where John Q. will give a presentation on continuations.  The May meeting will have several lightning presentations - submissions welcome (please post a message on the Coordinatr event)!  All but one of the attendees live or work in the city of Chicago, so we decided that all meetings will be held in Chicago.

Meeting locations - The first meeting was held at Ambrosia Cafe (1963 N. Sheffield, Chicago, map: http://tinyurl.com/2koztz).  It was a nice place for a meeting but we’d like to find a place to meet with a projector, so presentations can be given and recorded.  Some proposed locations are the IIT Institute of Design (350 N. LaSalle St) and the Harold Washington Library (400 S. State St).  If anyone has an office or location they’d like to volunteer, please let me know.

Scope - We decided to keep the group and meeting open to the greater Lisp family - Common Lisp, Scheme, Arc, etc.  That will be the focus of the group but all are welcome to attend.  Some people expressed desire to start or adopt a project that we could work on as a group.

Name - Some people wanted a better name than “Chicago Lisp”, and who can blame them?  One nomination as “LispChics” (inspired by NYC’s Lispniks) but I thought it was false advertising (7 guys with laptops, Chics, ??).  The name is up in the air, nominations accepted.

Web Presence - John Q. owns the chicagolisp.org domain and Craig L. has a server he volunteered for use.  A project we develop could be hosted there, and I recommended a CLiki instance for group notes.  I’ve also setup a group on coordinatr.com that I’d like to try out for organizing meetings.  You should get an email soon.

The common-lisp.net chicago-lisp mailing list will still be used but only as a supplement.  The list is not great because of spam but there are a hundred or so subscribers still on the list that would have no other connection to the group.

Intro to Lisp Workshop - John Q. informed of a planned, all day workshop designed to introduce programmers to using Lisp - from installing and setting up an image to programming basics to advanced concepts.  It is planned for a Saturday in May (date TBD, location probably Institute of Design) and volunteers would be appreciated.

Coordinatr - I’ll be trying out a new site called Coordinatr.com to manage the meetings.  You can RSVP there, submit ideas for proposals, etc.  You should receive email inviting you to the first two meetings shortly after this email.  There is also a feed of new events created for this group here:  http://coordinatr.com/feeds/rss/vcwxbvdrepk2blkbtwctez .  You can get updates and reminders by email and/or SMS, but I think the RSS feed doesn’t get updated (the platform has only been out for a couple weeks).  Let me know how this works - I think it’ll be better than a zillion back and forth emails.

You can view the feed without registering at the site, but you need to register AND be invited to see the event website, RSVP, post messages, etc.  Good news is that you can invite new people to an existing event once you’ve registered.

Calendar:

Friday, April 18, 7pm: Chicago Lisp Meeting
Location TBD
Presentation on Continuations

Friday, May 16, 7pm: Chicago Lisp Meeting
Location TBD
Lightning presentations, accepting submissions

Some Saturday in May: Intro to Lisp Workshop
Location TBD (probably Institute of Design)
Getting started with Lisp, all-day event

Homework Items:

Name the Group!  Send submissions to Peter

Lightning Talk Proposals for May 16 meeting

Locations for future meetings - 3rd Friday of the month, 7pm, ~10 people, preferably with wireless access and a projector.  If you have a place, email Peter

Feedback on using Coordinator for managing events

Thanks,
Peter Christensen
DFGL (de facto group leader)

Tasteful Monetization and the Passionate Developer Community

March 31st, 2008

It’s impossible to read about blogging without hearing talk about “monetization” - making money off the attention your blog gets. This isn’t a problem for most writers, since nobody reads their blog. I’m no blog celebrity, but at this point, I’ve had 4 or 5 articles that were read by several thousand people, so I can’t really say that nobody reads me. I already have a goal to use this blog to write my thoughts and experiences and meet new interesting people, so now I’m tempted to try to make some hosting money, book money, or gadget money while I’m at it. However, I don’t want this to end up looking up like a Nascar uniform, so I have been on the lookout for tasteful ways to monetize.

Fortunately, I’m not the only one to go through this process. Two prominent tech bloggers, Jeff “Coding Horror” Atwood and Reg “Raganwald” Braithwaite have already crossed this bridge. They use Amazon Associate links whenever they mention a book, and I like the idea so much I’ve used it since the beginning. I often recommended books anyway, and there’s no difference for the user between a regular Amazon link and an Associates link. It’s unobtrusive, easy, and useful, so it has been a no-brainer from the start. We’re nerds, we read books, it just works.

I’ve recently come across another way to monetize that supports my goals and intentions for this blog. One of the new batch of YCombinator startups, SnapTalent, is a tech job advertising network that only advertises on hand-picked sites that great developers are likely to read. I think this is a great approach. Screening ensures that the ads only appear on websites that active, passionate developers are reading, and those passionate developers are a lot more valuable than a typical clock-punching, Monster-surfing developer.

What I like about it is that it creates a market for small, smart companies to advertise on that’s actually worth their while, and it makes it easier for smart, passionate developers to find them. Big job sites like Monster and Dice have lots of jobs, but it’s a grimly representative sample of all the bad jobs out there. It would be a waste for a bright startup to advertise there because they would get a grimly representative sample of all the bad job applicants. Therefore, the best companies don’t advertise on these sites and the average gets dragged down even farther.

The alternative is for great companies and great developers to find each other through traditional networking and discovery. This works well and produces the best results, but it is limited by the size of the social networks you belong to. For instance, I don’t really know anyone in Silicon Valley, and I only know of a few small companies in Silicon Valley, so I would be at a big disadvantage if I wanted to move there for a job. Conversely, if there’s a Silicon Valley company that could really use my blend of coding, writing, personal communication, and big-picture problem solving, they wouldn’t find me because I’m in Chicago. Or for that matter, since Chicago doesn’t have a strong network of startups and tech companies, a company in Chicago might not be able to find me either. This is one of the reasons that Silicon Valley is such a big startup hub - its network of people in the startup world is big enough to actually be a useful asset, and it becomes more useful as it grows.

My hope is that SnapTalent will provide a third option. I hope the companies that advertise there have enough success that it becomes a go-to site for companies looking for great developers. I hope that enough great tech writers put the SnapTalent widget on their site that more companies advertise there (right now they’re mostly companies associated with YCombinator, which are all great companies, but only a small subset of what’s out there). Once they do, I think the ads will be seen as a useful way for smart, passionate developers to get acquainted with smart companies in a way that scales beyond the typical “Who you know” network. And even if you don’t work for or apply to these companies, just knowing who they are and what they’re products are is a good enough service worth clicking on the ads for (more people in this world need to know about AnyBots. They just do.).

So, if you have a tech blog of your own and you’ve been complimented on it, join me and SnapTalent in building up the passionate developer community by linking passionate developers to smart companies.

Polyphasic FAIL

March 19th, 2008

Polyphasic Sleep III has fallen to the forces of normal life.  More specifically, a steadily progressing family health situation demands more of my time during the day, to the point where I pretty much can’t take naps at home during until everyone’s asleep, and I’ve had to trim my time at work so tight that I can’t get even get one nap, let alone one, during the day.  The work thing was a problem even before.  I felt okay going out to my car for a half hour during lunch but I never quite found a time in the afternoon when I could sneak away.  This wasn’t a problem with my first experiment because I had a 40 minute commuter train ride each way where I could sleep.  But now that I have a driving commute, I can’t exactly sleep on the way to and fro.

That’s an important consideration for anyone considering polyphasic sleep.  For a normal weekday, you pretty much need a nap before, during, and after work, or if you get up and go straight to work, two naps during work.  I can’t do the first  one because I have to drive, and I can’t do the second because I don’t feel comfortable stepping out twice.

For anyone interested in following my polyphasic sleep experiment (Aaron and others), sorry to disappoint.  However, I’ve got a mandatory polyphasic sleep period coming up sometime in the next month when my second daughter is born.  My wife is excited for me to go back to polyphasic then so I can take care of nighttime care and feeding.  Not exactly what I had in mind, but it’s easier to do when you’re already awake then if you have to wake up for it!

Until next time …zzzzzz…zzzz……zzzzzzzz.  (Me hibernating for 7 straight hours)

Hacker vs Engineer - Know The Difference!

March 6th, 2008

Some of the most commonly used terms are often the most misunderstood and least agreed upon. One example of this is the difference between a startup and a business. Now I’m no expert (having run neither of them), but I do read a lot and I pay $8 a month for hosting, so I can pretend to be! Here are my definitions for startup and business (again lifted from a Hacker News comment I made):

Startup: This is when your revenues can’t support the company and its employees at a standard they would expect. This could mean a lot of things, for instance

  • You’re self funding but doing the ramen/living on a friend’s couch/wifi-freeloading super cheapo route. Maybe you’re making a profit but you don’t want to live like this forever.
  • You’re living off of investment money unrelated to what your startup is producing: angel/VC money, cash from a prior successful exit, student loans, day job money, etc.

The key thing is that your idea and execution are currently unproven. You should be getting noticeably better each day as you improve your technology, your product, your marketing, your brand, your sales cycle, etc, (all these things create wealth but not necessarily money), trying to find the right combination of those things that lead to market acceptance and self-sustaining revenues. Or your goal might not be self-sustaining revenues but to create a product or technology or business that will be bought by another, larger company.

Business: A business is funded by its customers and revenues, and it has found a successful niche in the market. Once you get to this point, some of the pressure is off, although your niche and success is a moving target and you need to continue working and executing in order to get knocked out of it. There are completely different skills and personalities needed to nurture and grow a successful business/product as opposed to developing a new one and finding a market for it.

Read the rest of this entry »

How To Learn Lisp

March 3rd, 2008

In the spirit of my last post, I decided to turn one of my favorite long comments on Hacker News into a blog post in the hopes that someone would find it useful. There was a good discussion last week about how to learn Lisp, and since I was a little late to the thread, most of the things I wanted to say had already been said. So, in an effort to pull it all together, I made a nice long summary comment, which is reproduced and cleaned up below.

Before I started learning Lisp, I have (in reverse chronological order) worked with .Net for several years, disliked C++ in college, loved Pascal in high school, dabbled in (Assembly?) programming my TI-82 graphing calculator, and started with Hypercard. Here’s my advice based on ~1 year of part-time Lisp education.

  • To learn “lispiness”, functional programming, and get a feel for the computational approach to programming, read The Little Schemer and The Seasoned Schemer. Also, use the resources for the MIT Intro course Structure and Interpretation of Computer Programs. Watch the video lectures (30 well spent hours) and if you’re ambitions, read the book (Amazon). Doing these things will help keep you from writing PHP in Lisp.
  • To put it into practical perspective and learn the nuts and bolts of modern common Lisp, read Practical Common Lisp (Amazon).
  • If you read PCL, you will run into Emacs and SLIME (the generally preferred [NO FLAMES, PLEASE. I KNOW VI IS AWESOME TOO] open source way to edit Lisp files). I wrote some resources to help with that:
  • I’m surprised no one has mentioned PAIP (Peter Norvig’s Paradigms of Artificial Intelligence Programming). Probably because there’s no free version online and it’s a pricey book. I got it for myself for Christmas and it’s well worth the price. It’s half AI book, half tutorial on Lisp programming and Lisp style. It’s a good read with lots of example programs written in good Lisp Style.

There are three hurdles people usually run into when learning Lisp:

  1. The language looks different - this goes away with practice and familiarity. It starts looking normal fast. The parentheses are a bit tough to manage unless you use a capable editor, which leads to:
  2. Emacs is different - really powerful, fun to use, but it takes investment in learning. It’s really tempting to quit when starting, but worth getting over the hump. Once you do that:
  3. The way of thinking is different in Lisp - Lisp seems a little awkward to use until you get (don’t need to master them, just get the idea) the following ideas: 1) code can be manipulated as data because the syntax is so simple, 2) creating your own syntax (using macros - code that writes code) means that you can express your program in a way that closely matches the problem you’re trying to solve. Some good articles to help get these points are:
    1. The Nature of Lisp
    2. Functional Programming For The Rest of Us

Don’t worry if you don’t get these “big picture” things at first, they click at some point and everything makes a lot more sense. You can speed that up by putting a lot more Lisp in your head in the meantime.

Does anyone have any more tips on learning Lisp?

Also: read comments on this post at comp.lang.lisp, reddit, Hacker News

Why We’re Not In A Startup Bubble

March 3rd, 2008

Normally, when I read something on the Internet, I have one of three reactions:

  1. “This guy is so wrong he’s not worth acknowledging.”
  2. “This guy is stating the obvious so he’s not worth acknowledging.”
  3. “This guy is so right there’s nothing to add.”

Sometimes, very rarely, there’s a fourth reaction: “This guy has a really good point, but something’s not quite right.” So, the Reaction #4 award of the day goes to this post on Entrepreneur2Be, called “Why There Will Never Be A Startup (Bubble) Bust“. I realized I was entering #4 territory when I started writing a really long, well-formatted comment that I had to use PageDown several times to read. If I have so much to say, I might as well put it here so others can read it to. So here goes (I think I’ll add more #4 posts in the future):

SUMMARY:

He says that people think there’s a startup bubble because so many crazy little companies are getting funded. There is no bubble because:

  1. There are billions of people still waiting to get on the Internet
  2. People can switch products quickly online
  3. The Internet makes real life products and services (package tracking, listening to music, etc) better
  4. The audience wasn’t there in the 2K bubble burst

These factors mean that Internet growth will eventually slow as they catch up to the real world, but since the cost of starting a company is going down, more and more startups will continue to be created.

MY ANALYSIS:

I agree with the main point (no bubble bursting) but not so much with your arguments. (well, I do like #3 and #4). If I had to give my arguments for it, I would say:

  1. The internet lets people with common interests that would never have found each other find each other and create new markets that wouldn’t otherwise exist (like the zillion dollar internet knitting communities that keep getting mentioned, or Lisp programmers, etc). This lowers the cost to supply a new product, which will create more value (in a microeconomic sense).
  2. Innovation in the physical world has been going on for thousands of years, and online for about 15. There’s lots of room for trial and error and improvement. I’m sure there are big ideas (like the equivalent of car financing in the real world) that will change the way people work on the internet.
  3. There hasn’t been a generation of programmers/entrepreneurs yet that had the WWW around for their whole life. I think their perspective will create a lot of new ideas because they will lack older (possibly outdated) assumptions
  4. The economics of starting a startup in college (something Paul Graham and others are promoting) are so favorable now that participation will continue to increase. A lot of really awful startups will get done by college students, and a few outstanding ones will also happen. A la “The Black Swan”, if 10,000 new startups are formed a year, and 100 of them become successful businesses or acquisitions, and 1 of them IPOs, that’s a lot more value created than the 99,899 that go nowhere lose (especially if they just go back to school or try again next year).
  5. Some big problems still exist on the internet (trust, privacy, identity segmentation, etc) that will open huge new opportunities when they are solved.
  6. As long as the only bubbly characteristic is “lots of little angel and VC investments”, then generally the only people that can get hurt are rich people. I’m sure it still stings, but the difference between and angel investor blowing $500K on some college students or a ski condo is a wash for the economy as a whole.
  7. In the 90s, a successful company was one that IPO’ed for 9 figures and sucked cash out of investors from around the world. The much more common successful exit now is acquisition by a big company. That’s not a big deal because
    1. most acquisition prices are small compared to the acquirer’s resources (even a $1B purchase by Google won’t break the bank) so there’s little chance of completely wiping our investor value
    2. acquisitions are generally inline with the same company fundamentals that cause someone to buy stock in the parent company, whereas Bubble IPOs were based on a bunch of enthusiastic question marks
    3. Acquisition pairs a new innovation with a successful business model. IPO pairs a new innovation with a one-time financial windfall that doesn’t mean jack for the ongoing success of the business

Overall, it doesn’t matter what reasons anyone offers for why we are or aren’t in a startup bubble because history will decide that for us. But I think that E2B and I are onto something.

Sleeping Too Much and Fighting With Emacs and ASDF

February 29th, 2008

So it has been a while since I wrote something useful. I have either an excuse or an explanation, (depending on how you value excuses). Two weekends ago, I got sick and, long story short, I got better but I had to sleep a lot to do it. Ergo, no polyphasic sleep during that time. I’ve been sleeping like a normal person, except my wife has had trouble sleeping so I’ve been sleeping for maybe 6-7 hours, with a 30-60 minute interruption somewhere in the middle. What did this do to me? It made me really, really tired! I’ve been sleeping too much and doing a bad job at it, and I’m sick of it. I’m taking one last night sleep tonight and then tomorrow I’ll start taking my naps and staying up at night. And I’m very much looking forward to getting that time back.

So with 5 fewer hours a day to work, what did I cut out and what did I keep? Well, I haven’t a) written quality blog material, b) done housework chores, c) programmed as much, or d) made all the great improvements people suggested to my SLIME/Emacs cheat sheet. I decided that if I only had a little time, I should spend it on what’s most important, which right now is sharpening my Lisp skills. I’m trying to get to a point where I can work on programming for my startup without referring to documentation for every single thing I try to do. That consists of 3 things:

  1. get better at Lisp (currently working through Practical Common Lisp)
  2. learn to use ASDF (so I don’t have to only use one file)
  3. customize Emacs and learn more commands

#1 is going nicely. Unfortunately, #2 and #3 pose a bit of a problem. I’m currently using the Allegro-bundled LispBox for Windows from the PCL website. It’s been great for getting started, getting comfortable with basic commands, and getting familiar with SLIME and Emacs. However, it’s not conducive at all to customization. I’m not saying that it can’t be customized, just that it is a minor distribution for new users, so there’s not a lot of documentation out there for working with it. Three big strikes: (Windows, LispBox, Allegro) means that there are very few users, very few comments, and very little help.

For instance, ASDF is included and configured correctly, with the code from PCL already setup and easy to load. However, I tried for (too long) to get ASDF to load my code. I wrote my own packages.lisp and .asd files, I tried pushing values for my directory to the asdf:*central-registry* so I didn’t have to make a zillion shortcut files, etc. Long story short, it didn’t work and nowhere on the Google did anyone have specific advice for my setup. Ditto with .emacs customization with Lispbox (for anyone who’s wondering, I think it’s at C:\Program Files\acl81-express\misc\dot-emacs.el, but I couldn’t get the settings to load. YMMV). It’s just too obscure and I don’t have the time to figure out everything on my own, so I’m moving to a more mainstream setup.

So I put development and practice mostly on hold so I could get a more common setup that will make it easier to get help with when (not if) I have issues. I’m still working on the setup, becuase I spent a lot of time researching recommendations and best practices. I want to get it right (or at least mostly right) the first time so I don’t have to go back and re-do everything again. Tweaking is fine and I plan to keep doing that forever, but no more redos. I’ll put out another n00b type giude (along with rationales) when I get my own setup working, but here’s what I’ve come up with:

  • Emacs 22.1
  • SLIME 2.0
  • CLisp
  • Cygwin(?) - I’m trying to limit the number of tools I have to deal with so I wanted to leave out Cygwin. Can anyone give advice on whether it will make my life easier or harder in the short term?

Thanks to everyone who has expressed interest in the meantime. Keep your eyes out for more guides and an update to the cheat sheet. That’s my motto, helping the n00b in all of us!

UPDATE: I wrote this on Thursday but haven’t been able to post until Friday night. I’ve taken two naps, planning on staying up at night, and I feel great! I’m already happy to be back on a polyphasic schedule!

Lisp is Great Because It’s An Ordinary Language

February 27th, 2008

Kenny Tilton just wrote a great article that I think cuts through a lot of the clutter that gets spoken about Lisp. Among the great quotes in the article, he says:

“The first reason you should be using Lisp is a non-reason, an answer to an objection, a negation, a let-down: Lisp is just an ordinary programming language.”

and

“Lisp at one level of understanding is just a normal high level programming language. Those parentheses look quite different but constitute only a superficial difference from the conventional chicken scratch syntax of semi-colons, braces, full stops, and brackets. When a conventional programmer sits down to program Lisp, they feel quickly at home: Lisp is just another 3GL.”

“I feel terrible about this. I am supposed to be up on a soapbox preaching eternal salvation and ecstasies glorious and unknown”.

I couldn’t agree more. While I haven’t officially taken the Road to Lisp survey, I will say that I started out by reading Paul Graham’s essays, which sparked my interest but didn’t convince me to ask. Paul is an honest, straightforward, persuasive writer, but in a world where everything is overhyped and “The Greatest, Most Extremest X EVER!!!!!!” I looked for some more confirmation before taking him at his word. Well, I found it. Not in any specific place, but in the sum of a year of experience reading reviews, comments, history, blogs, and books, and doing some programming of my own. And the answer I came up was that Lisp is simply a great general purpose language. And since everyone else has the same wariness about any “Most Extremest EVER!!!!”, I think Kenny can close sum it up better:

“Lispers are accused of religious fanaticism and zealotry — nope, our enthusiasm is all about getting applications built faster with less pain.”

Amen.

That’s One New Year’s Resolution That’s Resolved

February 22nd, 2008

Something very delightful on a Friday afternoon:

Google Result

Go ahead, try it, it’s fun! (If I’m not #1 when you click it’s YOUR fault for not linking to me more often! :) )

That was one of my New Year’s Resolutions that’s now resolved (be the #1 search result on Google for my name). Now I’ve just got to lose 30 pounds and get some revenue out of my startup!

Public Beta Open For “Ultimate N00b SLIME/Emacs Cheat Sheet”

February 14th, 2008

On this Valentine’s Day, give the gift people really want - complex key chords!

In other news, I’ve got fans!

Well, at least one anyway. A lot of the feedback I’ve received on this site so far has been from experienced Lispers who appreciate my enthusiasm and contributions for new users. Yesterday, I got the first (I think) comment and reply from another new Lisper who’s actually getting some use out of my stuff. Aaron Feng wrote up my SLIME movie reference, and he even caught my later reference to my upcoming “Ultimate N00b SLIME/Emacs Cheat Sheet”. Well Aaron, wait no more!

I’ve been using it for a week or so, and I’m sort of pleased with it. First the positives:

  • It includes all of the SLIME commands from the SLIME manual
  • It includes all of the Emacs commands from the built in tutorial
  • It includes the main Emacs help keys
  • The commands are sorted and grouped by functional area
  • It’s all fits on one page

Here are some of the things I’m not so pleased with:

  • It has very few Emacs commands, relative to what’s available
  • It doesn’t include any advanced text manipulation options
  • It doesn’t have the sexp-based manipulation commands. I couldn’t find standard bindings for these and I’m not up to Emacs tweaking yet. Adding a key for the slime-selector was enough for me at this point.
  • It’s pretty crowded (~100 commands and descriptions on one page)

The Emacs section is weak mainly because I haven’t dived into Emacs the way I have into Lisp/SLIME. I figure for now I can use it as a standard, powerful IDE for writing, testing, and debugging Lisp, and I can add Emacs wizardry later. I think I hit the point of diminishing returns where focusing on my tools will help me learn to code in Lisp. Now I need to get my coding up to par with my tools! I need to improve to the point where it’s worth getting a copy of Learning GNU Emacs.

So without further ado, here is my unfinished yet eminently usable cheat sheet:

Ultimate N00b SLIME/Emacs Cheat Sheet (pdf)

or customize your own!

Ultimate N00b SLIME/Emacs Cheat Sheet (xls)

Enjoy! As usual, feedback is appreciated. If you’ve got an Emacs trick that you use a jillion times a day that you think a new user could use, this is a great way to share!

(PS I hope it goes without saying but there isn’t any kind of beta process. Just that I consider it a work in progress and that it will definitely change in the future, hopefully in response to useful criticism.)

Follow the discussion at: Hacker News, programming.reddit.com, comp.lang.lisp, comp.emacs