September 2007 Archives

AddThis Social Bookmark Button

My friend Dave just built a machine to run CentOS. Last night he lamented that he didn’t like the video player. I cringed, “Is it well-known free software video player? I’ve not had much luck dealing with the developers and I recommend another well-known free software video player.”

Another friend, Jim, snickered. “This is what I hate about Linux. There’s just too much choice.”

I rolled my eyes. Today I realized why that’s a silly argument (sorry, Jim–but you don’t use Notepad.exe for text editing).

AddThis Social Bookmark Button

I am working on finding a way to enable developers working in a wide variety of languages to directly access computationally-intensive libraries written in C++, C, and Fortran. The libraries will have been multithreaded using Threading Building Blocks (TBB), the open source project for which I’m “community manager.” TBB is a C++ template library (like STL). I don’t expect to have much of a problem calling C and Fortran libraries from C++/TBB code. But, what’s the best path to enable someone writing in Perl or Python or Ruby or — whatever — to call these multithreaded libraries?

This search has led me to reinvestigate some techniques I’ve looked at in the past — for example, Perl’s XS — but the idea of having to create an interface for each individual calling language is unappealing. I looked at, and did some experimenting with, SWIG (Simplified Wrapper and Interface Generator). But before I got very far, Parrot was suggested to me by some people on the #tbb IRC channel (on FreeNode.net).

During my initial investigation of Parrot, I wrote a blog about my research. Parrot looked promising to me:

Hence, if we can wrap C++ libraries threaded using TBB, then the Parrot NCI should make it possible for all the languages that have Parrot support to call those libraries. Then, high level scripting languages such as Ruby, Python, and Perl will have convenient access to computationally-intensive libraries that have been threaded for optimal performance on multicore processors.

This post elicited an interesting response on another site: “Will Parrot Ever Truly Deliver?” The author acknowledges that “Parrot does sound like an interesting piece of technology”, but wonders “will it ever be a platform suitable for serious, production usage?” The author’s concerns include the length of time Parrot has been in existence (quite a long time), the instability of the code base (lots of significant changes), and the incompleteness of the support from other languages.

Does multicore change the Parrot equation?

Sometimes a technology is invented, and the time simply isn’t right, the need at the moment for solutions that apply that technology is nearly non-existent, though many people readily admit it’s a “wonderful” technology. I wonder if this might apply to a certain extent to Parrot prior to the age of many-core computing?

In a few years, inexpensive PCs will have 8, 16, or more processing cores. Some people doubt that the average home or office user is going to have any use for all these cores. I think that’s like saying “no one will ever need more than 640K of RAM.” Once it’s possible for the average home or office user to apply algorithms and image analysis and video processing and stock market simulators that were previously available only on high-end workstations in data centers, you cannot tell me they won’t want to do this.

It’s going to take programming techniques like Threading Building Blocks, OpenMP, perhaps new languages such as Erlang, or Transactional Memory applied in Haskell, to multithread these computationally-intensive libraries. I doubt that applying conventional low-level threads is going to be an efficient way to accomplish this in terms of programming time (I’ve worked at this level for a long time).

But on the other side: no one is going to want to convert the mass of existing software platforms/applications that could potentially apply these computation libraries, into C++ or C. A convenient means to enable a broad spectrum of languages to call multithreaded C++, C, and Fortran libraries is going to be needed. Otherwise, again we face enormous software development inefficiency, as a separate interface has to be constructed for each library for each calling language. That’s not a solution that is going to fly, in my opinion.

It seems to me that Parrot is an excellent candidate for addressing this problem. If this is the case, the Parrot team may soon find itself lent increasing support from independent developers, and possibly from companies who recognize the need for this capability with respect to their own applications.

I don’t think this need was really there when PC performance could be improved simply through ever-increasing clock speeds. Single-threaded software that did a few simple calculations was fine then. Multicore, however, changes everything. As highly-scalable multithreaded computation / simulation libraries become available, and people realize they want them, and developers realize they need to be able to call these libraries from every language platform, Parrot’s time may arrive.

Carla Schroder

AddThis Social Bookmark Button

O’Reilly is running an interesting series of articles written by a number of different women in tech, about how they got to where they are and their adventures along the way. It’s a good read with a lot of different experiences and viewpoints.
http://www.oreillynet.com/womenintech/

Caitlyn Martin

AddThis Social Bookmark Button

Every time I write a review I get comments and e-mails asking me to review Puppy Linux. Puppy has lots of people who really seem to love and zealously support the distro. I invariably download a copy (most recently 2.17) and try and run it. I invariably give up on it very quickly. I Here’s what I recently shared by e-mail with someone on why I haven’t reviewed Puppy:

AddThis Social Bookmark Button

Justas Ingelevičius wrote in about an Autodesk international user group poll about non-Windows ports. Specifically, users want Autodesk Revit (engineering design software) to run on Mac OS X and GNU/Linux. As Justas writes:

We have to handle projects sometimes ~1GB of size (whole districts with 20 levels buildings completely 3D) in Autodesk Revit Architecture and let edit that project for many users on network. Work speed depends on effective management of computer and network resources. It definitely will run better on Linux, then on Vista or Xp. We invest much in good hardware and high speed LAN and it’s ridiculous, that we have to run windows…

In other words, the interesting question is not “Would you pay for proprietary software?” or “Can proprietary software exist with free operating systems?” but “Your software is the only thing keeping us on Windows; can you sell us what we really want to buy?” It’s easy to predict that this conversation will happen more frequently and with greater volume. (I imagine something similar happened when Windows NT was worth using and much, much cheaper than high-end UNIX workstations.)

Juliet Kemp

AddThis Social Bookmark Button

First up: check out the O’Reilly “Women in Tech” series - especially my article :)

Lately I have mostly been playing with Puppet, a piece of software for centrally managing host configuration. (I have various roll-your-own solutions for aspects of this, as ever, but this looks like a better way of doing it.)

One very nice thing about Puppet from my point of view is that it will take its node definitions from LDAP. (In Puppet, a node is any individual machine.)

How this works is that instead of having your node definitions in site.pp, you keep them in LDAP as the puppetclass attribute. You can have as many of these attributes per host as you like - for example, my web server has webserver, ftpserver, and server as puppetclass attributes.

site.pp therefore has only import statements, not node definitions, and you put your class definitions in /etc/puppet/manifests/classes (or wherever suits you), and import them in site.pp.

You probably want to start with something along the lines of the setup I have, as described below, with base.pp, desktop.pp, and server.pp classes (the latter two inherit from the first). These correspond to desktop and server as puppetclass attributes (the inheritance structure means there is no need to specify base). Then add further puppetclasses as required for your site.

The wiki has some information on how to do the LDAP integration; this is how I did it:

  • Install libldap-ruby1.8 on the Puppet server (Debian package).
  • Add the Puppet schema to your LDAP schema directory (/etc/ldap/schema/ for me), add it to your slapd.conf, and restart slapd. The schema seems to be a little hard to get hold of through official channels at present, so I reproduce it here:
    # These OIDs are all fake.  No guarantees there won't be conflicts.
    #
    # $Id$
    
    attributetype ( 1.1.3.10 NAME 'puppetclass'
            DESC 'Puppet Node Class'
            EQUALITY caseIgnoreIA5Match
            SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
    
    attributetype ( 1.1.3.9 NAME 'parentnode'
         DESC 'Puppet Parent Node'
         EQUALITY caseIgnoreIA5Match
         SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
    
    objectclass ( 1.1.1.2 NAME 'puppetClient' SUP top AUXILIARY
         DESC 'Puppet Client objectclass'
         MAY ( puppetclass $ parentnode ))
    
  • Modify all existing host LDAP entries so they have objectClass: puppetClient, a puppetclass attribute (my initial ones were server and desktop, and a parentnode attribute (I have baseserver and basedesktop).
  • Create baseserver and basedesktop LDAP entries. It is not entirely clear to me if these really have a purpose; but I gave them the appropriate puppetclass and will investigate further in due course.
  • In /etc/puppet/puppetmasterd.conf, add:
    [ldap]
    ldapnodes = true
    ldapserver = ldapserver.example.com
    ldapbase = dc=example,dc=com
    
  • That’s it!

A note: if you’re changing the puppetmaster config, or any other puppet setup stuff, it can be useful to stop the running puppetmaster process, and restart it interactively with the verbose option: puppetmasterd --verbose. This helps a lot with debugging.

AddThis Social Bookmark Button

Lucas Nussbaum suggests that Linux distributions should have a place to collaborate more effectively than just with upstream projects:

I am both a Debian and an Ubuntu developer, and I’m sometimes amazed that Ubuntu discusses technical choices that were discussed (and solved) a few weeks earlier in Debian. And it’s even worse with the other big distros out there.

Couldn’t we try to improve this ?

More and more I believe that open code itself is insufficient. Encouraging and participating in a healthy community around the project is necessary for both free software and open source.

AddThis Social Bookmark Button

I know it’s not the point of the weblog, but a paragraph just jumped out at me.

For me, the perfect destkop has already been built: Mac OS X. Yes, I know of the inconsistencies in this (I’m a free source bigot and Apple may well be the most proprietary company on the planet, in more ways than source code). I just can’t help it.

— Matt Asay, The Open Road

If you really wanted to help it, you could. When you find yourself replacing Apple’s proprietary applications with software that respects your freedoms, it’s time to switch.

Maybe you’re not a freedom guy. Maybe you promote open source because you believe that it makes demonstrably better software, through the process of user feedback and enlightened self-interest leading to greater contributions of code, bugs, documentation, and support.

Maybe there’s a third possibility I don’t see… but it seems a bit inconsistent to suggest that there’s a perfect desktop already, one which leaves you no choice as to what to support..

Juliet Kemp

AddThis Social Bookmark Button

I saw this article today about rebooting a frozen system without having to hit the power button, which looks like it might be useful. We do have this happen once in a while - usually for no readily apparent reason, and since I tend to go by the “once is an anomaly, twice in quick succession is time to investigate” rule, I confess I don’t look too hard.

Also very useful today was step-by-step guide to installing IRAF on Debian (literally tells you exactly what to type). IRAF is an astronomy program, so this information is probably of use to a very small subset of people, but still. I have found it a PITA to install, partly because it insists on belonging to its own user rather than root. This install (of the latest beta) went very smoothly, although I haven’t heard back from the requesting user yet.

Finally, a note on RAID5. A fortnight ago two drives on my RAID5 array failed (I was out of the office at the time & can’t find anything in the logs to indicate why). Much beeping ensued, drive appeared dead (suspicion was that the hotspare had failed partway through the rebuild, i.e. all data would be lost). The very competent support engineer managed to fix it after several hours (the old drives resurrected themselves; neither of us have any idea why), and I’ve now replaced both faulty drives and done the required rebuilds.

However: it reminded me of concerns I’ve had in the past about the reliability of SATA drives, and the deceptive appearance of redundancy that RAID5 has. Whilst in theory you can lose up to two drives and still not lose your data, in practice a) drives may tend to fail around the same time, and b) the thrashing caused by a rebuild may be enough to trigger failure in another drive (in which case you lose data).

I’m not sure if there are any much better alternatives, though; I guess the lesson is ALWAYS BACK UP. (Yes, I did have backups, even if I didn’t need them in the end!)

Caitlyn Martin

AddThis Social Bookmark Button

The first public Pseudo (alpha) release of Vector Linux 5.9 is now available. Normally a release like this wouldn’t be worth blogging about. It’s early development code. If you’re used to Ubuntu then think Tribe 1. It’s at that level. OK, it seems to be usable at this point but it’s not something I’d recommend for a system that has to do real work.

The point? There’s a 64-bit version. There has never been a 64-bit version of Vector Linux before. To me this is one more essential step towards Vector Linux being taken seriously as a major distribution.

In the past year we’ve seen Vector Linux offer commercial support for the first time, we’ve seen it offered preloaded on systems for the first time, we’ve seen huge steps forward on internationalization and localization, and now it seems likely that Vector Linux 6.0 will be available in both 32-bit and 64-bit versions. After trying a bunch of other smaller distros, some based on Slackware, some not, and being disappointed by most of them I’m excited about the prospect of 64-bit Vector.

Digg It!

Carla Schroder

AddThis Social Bookmark Button

http://www.linux.com/feature/118946
“If you have a point-and-click digital camera made by Canon, you may be able to turn on all sorts of features usually reserved for more expensive SLRs. That includes live histograms, depth-of-field calculation, under and overexposure highlighting, and — best of all — shooting your pictures in RAW. The secret is CHDK, an enhanced, free software replacement firmware.”

This sounds pretty darned cool, and it illustrates the nature of this newfangled digital world- it’s all in the software. Of course, the optics and the camera sensor are important, but in the end the software does most of the work. Software translates the data from the camera sensor, software runs your photo printer, software makes your pretty pics into Web galleries. Amazing stuff.

Juliet Kemp

AddThis Social Bookmark Button

I realised a while ago that it would be a useful thing to check, occasionally, that all the machines I’m responsible for are still up. (This helps to minimise those embarrassing “Oh, I didn’t know there was anything wrong with it” conversations.).

Thus, the following pretty basic perl script, which I run from /etc/crontab on my own desktop every couple of hours:

#!/usr/bin/perl -w
#
# host_ping.pl - run from crontab

use strict;
use Net::Ping;
use Net::SMTP;

sub sendmail;

my $ping  = Net::Ping->new();
my $email = 'me@example.com';

my @host_array = qw/host1 host2 serverA serverB/;
my $hosts_down = "";

foreach my $host (@host_array) {
    unless ($ping->ping($host)) {
        $hosts_down .= "$host ";
    }
}

sendmail() if ($hosts_down ne "");

sub sendmail()  
{
    # email to me
    my $s = Net::SMTP->new('mailserver.example.com');
    $s->mail($email);
    $s->to($email);
    $s->data("Subject: Host(s) down: $hosts_down","\n","\n");
    $s->quit;
}

Also this week, I’ve been organising an engineer for a 4TB RAID 5 array which had 2 disks fall over at the same time. Apparently this is increasingly common with large SATA disks (we had 10 500GB disks) - probably due to the heavy load put on the disks by rebuilding. And of course it renders the RAID5 unusable, so reinstall/restore-from-tape fun on the horizon once the engineer currently in the server room has established that it’s definitely kaput.

The other current project is looking at Puppet. So far I’ve got a server and test client working, and am cautiously optimistic about prospective usefulness. I wish you could readily up the log level without having to run in the foreground, mind. I will doubtless blog more on this in future.

Caitlyn Martin

AddThis Social Bookmark Button

Lately I’ve been looking to pick up a new contract or even possibly move back into a long term corporate position. My resume (CV for those outside the United States) is, I think, fairly impressive. I am a competent systems administrator and security geek with over 27 years of experience in the industry. I’ve had lots of calls from recruiters: some quite good, some not so good, and some, well…

In the past couple of weeks I’ve had several calls like this. I’m pretty close to word for word on the most recent:

Me: Hello.
Recruiter: Can I speak to Martin please?
Me: This is Caitlyn Martin. How can I help you?
Recruiter: No, I need Mister Caitlyn Martin.
Me (annoyed): There is no Mr. Martin. What is this about?
Recruiter: (sputters and trips over his tongue, then goes on to say it’s about a job)

Advertisement