So, I’ve been thinking about walking robots lately. I like ‘em. I like ‘em a lot. But before I continue with that, I’d like to direct any sysadmins that may be reading to this:The Case of the 500-mile Email
Definitely good for a chuckle.
Anyhoo(even MicroHoo?), on with the robots!
Here are a few videos of a few robots that I’m especially fond of.
It took for-freaking-evar, but I finally got freeglut and Haskell to play nice with each other.
Here’s how I got it working.
The Tools
I’m not giving step-by-step, but rather a general method plus some details where they’re important. It actually became relatively easy once I switched from Cygwin to MSYS for my build environment. So the first thing to do is to go set up MinGW and MSYS. Their documentation will tell you how to set that up better than I could, so I’ll refer you to that. We need some extra libraries, too, so grab the supplementary tools while you’re there. I got the ‘Current Release’ version of both MSYS and the supplementaries, not the technology previews.
Update: autoconf and I have a tenuous peace treaty thanks to MSYS. See my post, “Haskell and freeglut at last!”, for an example of what I’ve been able to do :Update
I really do hate autoconf. I’ll probably end up upsetting a few C/C++ guys, but I’m pissed and I have a blog and that means I’m going to blog about being pissed.
I should warn you, I’ve never actually used autoconf in any of my projects. Being a Windows programmer, I’ve never had it easily available. For all I know, it’s a wonderful tool that saves gobs of effort, just not mine.
See, the problem isn’t so much autoconf, it’s the whole “autoconf on Windows” thing. In fact, it’s pretty much building anything on Windows. A whole lot of software projects claim to be ‘cross-platform’, and usually this is done with makefile and #define trickiness, with a lot of checking and configuring and editing done depending on what platform your build tools think you’re running on.
This is where the madness starts.
Why are all of these configuration doodads crammed into one set of headers? That pisses me off. The configuration between Windows and *nix is so wildly different in most cases that the resulting mega-header becomes a steaming pile of near incomprehensible preprocessor syntax that never configures for my Windows box properly. Why don’t these people just make a separate Windows header set if they really want Windows support?
But sometimes this doesn’t matter. Sometimes there’s a configure script that knows what the hell it’s doing, and it’s written in an OS neutral scripting language. Sometimes it just works. But not when autoconf enters the picture. Autoconf, in Windows, is a sign that reads ‘Pain’
So I’ve been mucking about with Haskell all week. I still can’t get freeglut to work properly. I’ve got a post in the works about it, but I’d like a happy ending so I’m holding onto it until I get a working example.
Have you ever struggled with your data types? Ever had pages and pages of boilerplate for trivial conversions? How about checking every member function you were going to use so as not to throw an exception later? I sure have. There doesn’t seem to be a language out there that doesn’t frustrate me in at least one of these areas. Except Haskell.
Now, I can’t say that the situation won’t change as I write more in Haskell. I really liked C++’s type system until I got to know it. I’ll try to go easy on the fanboy-ism and stick to an overview of what I see that I like.