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.

Tuesday, February 8, 2011

Text editors, Geany

I'm teaching a course on parallel and distributed programming where the programming environment is the head node of a Linux cluster, which we're connecting to using VNC.  We're using the classic "text editor and makefile" development environment rather than an IDE, so the choice of text editor has been on my mind lately.

Years ago, I was an Emacs guy, but I abandoned that particular ship when I started to develop wrist problems.

In grad school Vim was my editor of choice.  I gave it a try again, and there are definitely things I like about it.  Running an arbitrary filter process on a region of text bounded by a regular expression search is really cool.  However, its model for switching between buffers is appallingly primitive.  If Vim had a sidebar displaying a list of open files, it would probably be my favorite editor.  But it doesn't.

Oddly enough, my preferred editor in recent years has been Gedit.  It's very basic, but it's clear that its developers actually thought about usability.  The gedit-plugins package in Debian/Ubuntu provides some few useful extensions.  Plus, its default syntax coloring scheme is the same as Vim's, which to my eyes is simply the correct one.  (Comments are blue.  That's just the color they are.)  Unfortunately, there is no support for word completion.  There seem to be a few plugins that have provided support, but there's doesn't seem to be a Debian package for any of them, and I wasn't encouraged by the complicated list of instructions for installing any of them locally.

After a number of web searches, I stumbled upon Geany.  It's a lightweight programmer's editor with a few IDE-like features.  I've been using it for a few days, and it's more or less exactly what I was looking for.  It has a side pane and word completion, but the UI is fairly minimal.  I haven't really used the IDE features (such as compiling from within the editor), but happily those features aren't imposed on you in any way.  Most importantly, there was a Debian package available through APT.

Wednesday, February 2, 2011

I am a criminal

Recently, one of the DVDs that Eli and Gus like to watch became corrupted.  I'm not sure exactly what the problem is; there aren't any obvious scratches, and we've cleaned it.  The symptom is that during one of the scenes, the video freezes.

So, I ripped the data off of the disc using ddrescue, managing to get all but about 800K of the data.  I can play the resulting ISO image using the awesome VLC.  There's a brief pause in the video where the missing data occurs, but otherwise it plays perfectly.

So why am I a criminal?  The DVD data is scrambled with CSS, which of course requires libdvdcss to unscramble.  And since CSS is legally a mechanism to guard against unauthorized copying, unscrambling the content is illegal under the DMCA.