Thursday, October 11, 2012

Blog has moved

I have moved by blog to github:  See you there!

Tuesday, June 5, 2012

CodeLite - a very nice free C/C++ IDE

From time to time I do a bit of C/C++ development, and I appreciate the benefits of using an IDE to automate tedious aspects of development such as build automation.

In the past I've used Eclipse CDT, which is fairly nice, but quite heavyweight.  I poked around with Code::Blocks a few years ago, but it had some rough edges.

Imagine my surprise to discover CodeLite, a surprisingly functional and full-featured IDE.  It's implemented using wxWidgets, so it runs on Linux (as well as Windows and MacOS X).  With very little effort I was able to create a skeleton wxWidgets project and hack on it.  The code completion is based on ctags, and works surprisingly well.  There is also support for using Clang for code completion, although I haven't tried that.  CodeLite even includes some support for refactoring: I was able to use it to rename some C++ member variables without much difficulty.  CodeLite generates a makefile which does proper dependency tracking and can take advantage of multicore and hyperthreaded CPUs.

In addition to using CodeLite on my main laptop (Core i3, 8 GB RAM), I have been using CodeLite on our kitchen laptop, which is an old Dell Inspiron 600M with a 1.8 GHz Pentium 4M and 1.5 GB of RAM.  It works just fine on this old hardware.  Very useful for occasional 5-minute hacking sessions between drawing, watching Electric Company, dancing, and other things my 2- and 4-year olds like doing.

Thursday, February 2, 2012

CloudCoder, a web-based programming exercise system

Well, I haven't updated my blog in a really long time, so here goes...

Jaime Spacco and I have been working on a web-based programming exercise system called CloudCoder.  We've finally reached the point where it's ready for students to use.  I wrote up a web page that explains the basic idea (for students in the CS 101 course at York College):
I'm planning to use CloudCoder to assign exercises to accompany each reading assignment.  The idea is to give students a concrete way to test their own understanding of the material.  I'm also hoping that if students try a problem, and have trouble with it, they will use the opportunity to attend office hours or a tutoring session.  We'll see how it works out.

We made CloudCoder available under an open source license (AGPL v3), and the code is on Github:
There are definitely some rough edges, but it is usable.  If you want to know more, you can drop me a line.

Thursday, April 7, 2011

Reflections on using Pandora

Lately I've decided to force myself to be honest when I rate music (like/dislike) on Pandora.  The rubric is "do I enjoy listening to this song enough to want to hear it again?"

There are a couple interesting phenomena I've noticed.

First, initial impressions are not always accurate in the long term.  I find myself hitting "dislike" for songs that I did initially like several months ago.  There are probably some songs I disliked initially that I might like now, but of course I'll never know about those.

Second, and this is where the honesty comes in, is that I have had to admit to myself that I don't necessarily like music I "should" like.  For example, I don't like any Velvet Underground song.  There, I said it.  They sucked.  I also dislike most songs by the Jam, although I do think "Eton Rifles" is a good song.  I don't like the Cure or Depeche Mode at all, which is somewhat surprising considering I'm a huge Smiths fan.  What is harder is hitting dislike for artists I admire.  There are Morrissey songs I don't particularly care for (anything off of Kill Uncle, for example.)  I've considered hitting dislike for remixes of New Order songs (although usually I just use the "bored" feature for those.)  It pains me to have to hit dislike for any song by the Mekons, but their most recent album (Natural) is, well, I hate to say it, terrible.

Thursday, March 31, 2011

Anti-parallel computing with Java

I did a lecture today on fork/join parallelism using the JSR 166 fork/join framework.  As an example, I parallelized merge sort in the obvious way and got some decent performance improvements:

Here's the speedups for increasing numbers of elements for the 2-way and 4-way cases:

This was on an Intel Core 2 Quad Q6600.  The sequential data is measuring the time to call the built-in Collections.sort(), which is an optimized quick sort implementation.

Overall, the implementation took about 25 minutes, much of which was consumed with figuring out that the ForkJoinPool class's execute() method doesn't wait for the top-level task to complete.  (I should probably go back and read Doug Lea's book.)

Not bad for a language whose programming paradigm is anti-parallel by its very nature!

Saturday, March 26, 2011

GNOME 3 - lots of gratuitous changes in store!

Jon Corbet (the guy behind has written an interesting (and disturbing!) preview of Gnome 3.

Suffice it to say that the Gnome UI folks are radically changing the way pretty much everything works, regardless of how current users feel about the changes, in the name of making the UI more "intuitive" for "novice users".  Yes...just like KDE did with KDE 4.

I have only two comments:
  • My 3 year old likes GNOME just the way it is, thank you.  I guess he's not a typical novice user.
  • Thank $DIETY for XFCE and LXDE.

Wednesday, February 9, 2011

Violet UML

In my Software Engineering course, I have the students do OOA&D projects where some form of software for working with UML diagrams is useful.

In previous years, I've used ArgoUML.  It's open source, and quite full-featured.  It also does not support undo.  Every year I investigate to see if any progress has been made on this issue, and every year it's "in progress".  Students find this limitation extremely frustrating, and I don't blame them.  Feh.

This year I stumbled across Violet UML, which I had somehow missed in my previous searches for open source UML tools.  It does not aim to be a full-blown CASE tool --- e.g., no code generation, reverse engineering, etc.  This is actually a virtue in my case: it's very simple to use, so the learning curve for students should be minimal.  The UI is intuitive.  And it has undo.  It's a Java app packaged as an executable jar file, so no installation required.  Win win win.