Chad Perrin: SOB

20 August 2008

Sucks-Rules-O-Meter Value Comparison

Filed under: Geek — apotheon @ 02:15

(note: There’s a newer version of the meter.rb program I use to munge Sucks-Rules-O-Meter data, which I discuss in another SOB entry titled meter.rb uses a linear function now.)

You may have heard of a “sucks-rules-o-meter” before this. There are a few of them on the Web. They’re basically collections of statistics gained by scouring the Web for instances of statements that something either “sucks” or “rules” (with “rocks” as a synonym for “rules”). The Chip’s Quips link post from August 18th mentions one I don’t recall seeing before: the Operating System Sucks-Rules-O-Meter.

I decided I wanted an ordered list of the OSes, from most loved to most hated. Toward that end I cobbled together a simple stats-munging script in Ruby to produce numbers no higher than 10, and the function used to translate the numbers produces a decelerating curve, rather than a linear scale as one might expect. I guess I did it that way because I was lazy. The results, in descending order from best to worst, are:

VMS : 9.99
FreeBSD : 9.94
MacOS X : 9.88
NetBSD : 9.75
OS/2 : 9.70
MVS : 9.59
Unix : 9.56
AmigaOS : 9.43
Linux : 9.30
Solaris : 9.01
OS/400 : 9.00
NetWare : 8.66
BeOS : 8.60
MacOS Classic : 6.70
OpenBSD : 4.98
Windows : 3.87

The following is the code for the statistics translation (edit — there’s a better version in comments now):

#!/usr/bin/env ruby
 output = File.open(ARGV[0]).readlines.collect do |line|
  stats_list = line.split(',')
  value = 10 - (stats_list[1].to_f / stats_list[2].to_f)
  [stats_list[0], value]
end
 output.sort! {|a,b| a[1] <=> b[1]}

output.reverse.each do |a|
  print a[0], ' : '
  printf("%.2f\n", a[1])
end

Actually, the version I’m using uses File.open(path) instead of File.open(ARGV[0]), and has this line between the shebang line and the File.open line:

path = "/usr/home/ren/etc/meter/#{ARGV[0]}.meter"

That way, I can store a bunch of sucks-rules-o-meter statistics files in the /usr/home/ren/etc/meter directory, and specify them with a very simple argument. For instance, I have the values from the OS Sucks-Rules-O-Meter stored in a file called os.meter, within that directory, and I use this program (which I called meter.rb) to translate the OS statistics like so:

meter.rb os

The format of the data file containing the statistics from the sucks-rules-o-meter looks like this:

AmigaOS,21,37
BeOS,443,317
FreeBSD,679,12270
Linux,252000,360000
MVS,54,131
MacOS Classic,2665,807
MacOS X,32800,283440
NetBSD,159,632
NetWare,146,109
OS/2,57,188
OS/400,14,14
OpenBSD,3050,608
Solaris,1890,1916
Unix,12600,28860
VMS,145,19240
Windows,557000,90800

Basically, I just have a comma separated list, three fields per line. The first field is the name of the OS, the second is the “sucks” value from the sucks-rules-o-meter, and the third value is the “rules, rocks” value.

. . . not that anyone else with a modicum of programming capability couldn’t do this, but what the hell — if it helps anyone else, here it is. It’s available under the same terms as the rest of the text in this SOB entry (the Public Distribution License as of this writing).

Moral of the story: FreeBSD is obviously the best OS available that makes a decent general-purpose “desktop” system.

7 Comments

  1. I’m not about to run OpenVMS on my desktop — but one thing you gotta give it, it’s reliable.

    Makes me even mor eager to convert to FreeBSD when I get the time.

    Thanks!

    Comment by Sterling Camden — 20 August 2008 @ 02:24

  2. It’s interesting how in your “scale of 1 to 10”, nobody ranks really low. I’m actually surprised that Windows beats 3. Of course, that actually means a 7:1 hate ratio.

    Comment by Sterling Camden — 20 August 2008 @ 02:27

  3. Yeah. If I get inspired, maybe I’ll use the negative:positive ratios to produce a linear scale, probably via a command line option. On the other hand, I think it’s hilarious how with my decelerating curve output anything with a net positive ratio ends up being 9.x, and everything with a net negative ratio drops off precipitously from there. Sure, MS Windows is 3.87, but the fact that 3.87 is around six points below half the list is certainly worth a laugh.

    For now, though, I should probably finish getting caught up on stuff in my RSS feed and email inbox, then do something productive.

    edit: . . . and I’m with you — I don’t much want to run OpenVMS as my primary workstation either. I guess FreeBSD just has to be good enough.

    Comment by apotheon — 20 August 2008 @ 02:42

  4. I’m both happy and disappointed with Linux’s ranking. Oh well, can’t please all the people all the time, as it goes.

    Comment by Joseph A Nagy Jr — 20 August 2008 @ 07:10

  5. I did a minor refactor — took all of about five minutes. It still produces exactly the same output for exactly the same input, but the code looks slightly different. I swapped out the File#open method call in favor of using the CSV library and strung stuff together in a slightly more FP style to reduce redundancy and state maintenance. I made the version I’m actually using, with the extra file path specification line, a trifle more portable by using the File#expand_path method.

    Thus, the version I’m actually using looks something like this, all put together:

      #!/usr/bin/env ruby
      require 'csv'
    
      path = File.expand_path("~/etc/meter/#{ARGV[0]}.meter")
    
      CSV.readlines(path).collect do |stats|
        value = 10 - (stats[1].to_f / stats[2].to_f)
        [stats[0], value]
      end.sort! {|a,b| a[1] <=> b[1]}.reverse.each do |a|
        print a[0], ' : '
        printf("%.2f\n", a[1])
      end
    

    For a version without the path specification, just delete the line that assigns to path and replace readlines(path) with readlines(ARGV[0]).

    It amuses me that it took less than half as long to refactor the program than it did to compose this comment (because I kept changing my mind about how to compose the comment before I posted it).

    Comment by apotheon — 21 August 2008 @ 12:42

  6. […] Chad Perrin: SOB » Sucks-Rules-O-Meter Value ComparisonChad crunches the data to rank the OSes on a scale of 1 to 10.Tags: apotheon operatingsystems rankings ruby Tags: aging, apotheon, birthday, comments, del.icio.us, forums, geek, history, humor, intel, nerds, operatingsystems, philosophy, power, rankings, ruby, techrepublic, tesla, wireless […]

    Pingback by Chipping the web: August 22nd -- Chip’s Quips — 22 August 2008 @ 10:00

  7. […] Sucks-Rules-O-Meter Value Comparison, a couple days ago, I mentioned a program I wrote that translated values collected for […]

    Pingback by Chad Perrin: SOB » meter.rb uses a linear function now — 22 August 2008 @ 01:12

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.

All original content Copyright Chad Perrin: Distributed under the terms of the Open Works License