Skip to content

Happy Saturday

Thursday night at dinner, one of Stephanie's colleagues gave me a puzzle to play with.

The idea is to twist and turn the little blocks until they form a 3×3x3 cube.  This morning, after messing with it for a few minutes, I decided I didn't want to brute-force it manually.  So I wrote a little script.

And that, my friends, is just about a perfect Saturday morning.

(The script is here.)

Geeks Fighting Corruption

One of the things I'm really hopeful about is technology that can improve the transparency of government. Money is a corrupting influence in politics, but websites that track every campaign contribution, contract bid, earmark author, and the passage of every bill through its development give corrupt politicians and self-interested lobbyists nowhere to hide. And that's a good thing.  Sunlight, as Supreme Court Justice Louis Brandeis said, is the best disinfectant.

When Larry Lessig announced his campaign to end corruption in politics, he started encouraging hackers to attack this problem, to build websites and databases that lay bare the innerworkings of our politics. There are a few well-known projects in this area, like The Sunlight Foundation, Open Secrets, and followthemoney.org.  There's also USASpending.gov, the website "where Americans can see where their money goes," the product of a law co-sponsored by Barack Obama.

Waldo JaquithRecently on twitter I learned that Charlottesville provocateur and long-time friend Waldo Jaquith created and runs Richmond Sunlight, a one-man sunlight site to track Virginia state politics. On it, you can track the progress of bills and the activities of the legislators in the Virginia state congress. The site has no ads and no for-pay section and Waldo runs it purely because he believes in what he's doing.

Running the site takes a huge amount of work, and a little money.  One of Richmond Sunlight's most important features is the collection of videos of the Virginia General Assembly. To get these videos online, Waldo has to manually convert DVDs provided by the state into a format suitable for posting online.  It's a lengthy process that involves OCRing parts of the video to extract bill numbers and legislator names to index and tag the videos properly.  He's doing all this on his only computer — an aging Mac Mini.  And unbelievably, Waldo actually has to purchase these videos from the General Assembly.  And he has ambitious plans for the site.  Last night Waldo posted an appeal for resources to help him grow the project:

While hundreds of thousands of people have found the site very useful, I look at it and see unfulfilled promise. I want to rewrite Richmond Sunlight and give it away to a nonpartisan political group in every state in the union. I want to complete the API so that anybody can write software to interact with the Capital Sunlight in their own state (and let even more newspapers integrate it into their own websites). I want a Facebook application, I want daily podcasts, I want people recording secret subcommittee votes, I want to mash up the daily floor calendar with campaign finance data with minutes with video and create the most radical transparency a state legislature has ever seen.

Waldo is doing exactly what Larry Lessig is encouraging us all to do.  He's dreaming big about open government.  But he needs help today to do the daily business of running Richmond Sunlight.  So, what do you say we pitch in to help a corruption-fighting geek in need?  If you'd like to help buy Waldo a new computer so that he can put these videos online faster without spending his whole weekend swapping discs and waiting for codecs to convert, visit his blog and drop him a line.

Love (and blogging)

It's been a while since I wrote regularly on this blog, and people have been asking, with decreasing regularity, why my blog posts sputtered out.

At first, I wanted to take a break to shake off the "I can't wait to blog about this" impulse that was starting to spring up in the middle of almost everything I was doing, and was threatening the in-the-moment joy of life's little adventures by making them into a kind of low-grade performance literature.

Then, in early 2007, I moved to Munich and got busy learning about another culture.  Moving to a new place has a way of disrupting all your old habits, so I stopped going to yoga and I stopped posting here, but I started programming a lot again (yay!), and running a few times a week.

And then twitter erupted into my social group like an invasive species and I found that my public-writing energy nibbled away bit by bit, never building past whatever critical threshold is required for something to be (dare I say) bloggable.

And then, unexpectedly, at a conference in Paris, I met the most dazzling girl.  Smart and kind-hearted, and with an incredible appetite for life, she lived in Munich.  When I moved here, she helped me find an apartment and get settled.  Somewhere in there, she completely stole my heart. And so, earlier this year, on a hill in San Francisco, I asked her to be my wife, and she said "why the hell not" (I'm paraphrasing here).

Stephanie
 

We both love to travel, and she's amused by my sense of whimsy.  Over the last year we've had a lot of fun running around Europe.  (More on that later.) And so I've found someone I want to share life's adventures with, and you guys have recently taken second priority.  Sorry about that, but I'm sure you can understand :-).

We do plan to have an actual wedding sometime next year, though we're not sure exactly when or where.  So, stay tuned for future episodes, now featuring Stephanie (introductory glam shot below).

We're Hiring

We're Hiring

One of my most fun responsibilities at Novell is running the SUSE Incubation Team: a  small team of developers focused on innovation, prototyping, and exploratory hacking.  Our charter is to come up with disruptive ideas that take Novell's Linux business in exciting new directions.

The team is a diverse group, ranging from web developers who love working in Ruby on Rails to kernel hackers and virtualization experts, and it's a great privilege to work with them.  We have an upbeat culture that's tolerant of experimentation, we're obsessive about delivering innovative and amazing experiences to our users, and we hold each other to high standards.  Besides our exploratory development work, the team is also responsible for running the twice-a-year SUSE Hack Week.

As it happens, one of our projects — an innovative web application — is starting to look promising and so we're working on getting it ready for a limited public beta.  And we're looking for a few talented, energetic developers to help us get there.

The job descriptions are below.  Keep in mind that we're not looking for specialists: we're a small team, and we need people who are willing and happy to shift gears whenever necessary.

If any of these sound interesting to you, mail us your CV/resume.

We're open to hiring people in any location, but we have a slight preference for people who can work in Nürnberg, Germany, and a preference for people close to the UTC+1 timezone.  We offer competitive salaries and benefits in a fun, tight-knit team.

Quality Engineer

If you believe that quality is priority one and that great QA also means writing code, then this could be the job for you.  We are looking for a skilled programmer to help create and run a robust testing environment for an innovative new web service.

Your responsibilities will include building and maintaining a test harness and test environments; automating UI testing of our web application; monitoring and analyzing test results; helping to fill in unit and functional tests; creating test environments; and playing the role of bugmaster in our bugzilla.

The ideal person will be a strong programmer who can tell a good bug report from a bad one, will consider themself a whiz at scripting (shell, perl - whatever works for you), and will enjoy understanding the ins and outs of a sophisticated system.

Deployment and Release Engineer

Interested in designing and operating a streamlined deployment architecture for a cluster of several hundred cores? We are looking for an engineer to architect and manage the build, release and deployment infrastructure for our new web service.

Your responsibilities will include creating and maintaining deployment scripts; creating deployable packages and images; system administration of production machines; building RPM packages and virtual images to simplify deployment; and setting up and maintaining a cluster monitoring infrastructure.

Linux packaging and system administration skills, and experience deploying web applications are a must; experience with Ruby on Rails is a plus; solid programming skills and a strong focus on delivering a great user experience are required.  Infrequent travel to our data center in Boston will also be required.

Developer

This position will be working today on the core of our web application, which is mostly written in Ruby on Rails, Perl and in C.  Ideal candidates will be creative self-starters with a strong focus on user experience and performance, and will have good communication skills and experience working in teams.

Because of the nature of our team, we can't allow ourselves to be defined by the tools we happen to be using at any given time.  Today you might be writing Ruby on Rails, but tomorrow you could find yourself knee-deep in C: whatever it takes to get the job done.  Above all, we're looking for smart programmers who don't mind learning a new codebase or a new language overnight, and who are willing to hit a few dead ends before arriving at the perfect solution.  We're also looking for people who are good writers, and with good design skills.

If you're applying for this position, please send us some code that you've written that you're particularly proud of.

Rack servers in Boston, make money

We're looking for a neat, meticulous person to help us rack and wire some servers next week, on Tuesday and Wednesday. The tasks are unboxing, carrying, mounting, screwing, wiring, and testing the servers.  Pay is $20/hour, duration is until we're done, location is in Waltham (we'll pay for your transport).

If you're interested, send mail to pzb@novell.com and mention any relevant experience or skills.

More Tweetable Scripts

A few more tweetable commandlines have emerged since I posted the last round-up.

From pupitetris, this little work of art:

a=1;for i in {1..34};do printf %$[40-${#a}]s"$(eval $(echo $a*$a|bc|sed 's/$/0/;s/\([0-9]\)/tput setab \1; echo -n \\ ;/g'))"\\n;a=1$a;done

This Linux-specific commandline from Justin:

s=.o0O0o.o0O0o.o0O0o.o0O0o.o0O0o.o0O0o.o0;n(){ for x in `seq $1 $2 $3`;do notify-send ${s:0:x}; done };while :;do n 1 2 39;n 39 -2 1;done

And I wrote these two:

clear;for x in {0..150}; do y=`echo "12+6*s($x/6)"|bc -l|cut -d. -f 1`;echo -en \\e[$y\;"$(($x/2))"HX; sleep .1;done

s=`seq 9|shuf`;while :;do for((i=0;i<15;i+=2));do echo $s;a=${s:i:1};b=${s:i+2:1};[ $a -gt $b ]&&s=${s:0:i}$b\ $a${s:i+3};sleep .2;done;done

That last one is a bubble-sort implementation in 140 characters. Unfortunately, 140 characters is one character too many for a twitter post. Can you figure out how to shave off a character or two? (You'll need a recent version of coreutils for shuf).

Thanks to some helpful hints in the comments (abock, knipknap, Mitch) we're down to 137 chars:

s=`shuf -i1-9`;while i=;do for((;i<15;i+=2));do echo $s;a=${s:i:1};b=${s:i+2:1};[ $a \> $b ]&&s=${s:0:i}$b\ $a${s:i+3};sleep .2;done;done

I'll be posting more on twitter as people send them in.

Ten Tweetable Scripts

Yesterday morning I proposed a contest to create the best one-line program that would fit inside Twitter's 140-character buffer. To kick things off, I wrote this 105-character script which displays a small animation:

s="-<";while true;do echo -ne "$s\r";s=`sed 's/->$/-<-/;s/^</>/;s/-</<-/;s/>-/->/;'<<<$s`;sleep 0.1;done

Arturo (or Pupi as his friends call him) wrote a 135-character morse code decoder in shell:

m=etianmsurwdkgohvf?l?pjbxcyzq;p=0;while read -sn1 c;do [ -z "$c" ]&&p=0&&echo&&continue;let p+=c;echo -ne \\b${m:$p:1};let p+=p+2;done

Press '0′ for dot, '1′ for dash, and hit space (or enter) as a char separator. Wow!

I learned a few tricks from Arturo's script. First, he uses the ${} braces operator to take substrings, like so:

${var:offset:length}

This is incredibly useful! You can actually do shell arithmetic in the offset and length parameters, too. So for example,

${var:i+1:a-3}

is valid for shell variables $i and $a. And to find the length of a string, you can use:

${#str}

So str="foobar"; echo ${#str} will print "6". You can read more about the braces operator in the bash info page.

Another thing I learned from Arturo's script is the versatility of the 'read’ builtin in bash. Pupi uses the -s argument, which causes read not to echo its input (useful for inputting passwords) and -n1 which tells it to only read one character. Also, Arturo uses [ test] && operation, which is a handy short-hand for an if statement in shell (and other languages).

Pádraig Brady wrote this excellent screensaver:

tr -c "[:digit:]" " " < /dev/urandom | dd cbs=$COLUMNS conv=lcase,unblock | GREP_COLOR="1;32" grep --color "[^ ]"

Pádraig makes use of the square-brace character class operator in tr(1) to filter out all the numerals, which bash also supports.

Building on what I learned from Pupi, here is one I wrote that I call paint.sh:

c=12322123;x=20;y=20;while read -sn1 p;do k=${c:(p-1)*2:2};let x+=$((k/10-2));let y+=$((k%10-2));echo -en \\033[$y\;"$x"HX;done

Use the 1 2 3 and 4 keys to move the cursor around the screen. It's an etch-a-sketch for your terminal! You can see that I made use of the read -sn1 trick from pupi as well as the braces operator to substring. I also used ANSI escape codes to position the cursor.

And this is one I call rockband.sh (Updated - works much better now!):

while read -sn1 p;do s="";for((i=0;i<$p;i++));do s=x$s;done; yes $s > /dev/audio&sleep 0.1;kill %%;done

Use the number keys to play different tones. When you're done, hit Control-c.

The way it works is that the ASCII value of each character you send to /dev/audio specifies the excursion of the speaker diaphragm (roughly). The 'yes’ command prints whatever string you give it, followed by a newline character (ASCII 13, pretty low), over and over again. So the longer the string of 'x’ characters you pass to 'yes', and which 'yes’ prints between newlines, the slower the oscillation of the speaker diaphragm, and the lower the tone. Neat, huh? I learned this trick from my boyhood friend Edward Loper many years ago.

And here's the last one I wrote:

s=" #55755071317011117011117075557";for i in `seq 2 $((${#s}-1))`; do k=${s:i:1}; for b in 1 2 4; do echo -n "${s:(k&b)/b:1}"; done; echo; done

Miguel submitted this tiny function plotter:

for x in `seq -1 .05 1`; do y=`echo "s($x*8)*10+10" | bc -l`; for p in `seq 0 $y`; do echo -n " "; done; echo "*" ;done

And here's another plot:

for x in `seq -5 .5 5`; do y=`echo "$x*$x" | bc`; for p in `seq 0 $y`; do echo -n " "; done; echo "*" ;done

Those last three scripts make use of the venerable "seq" command to generate a series of numbers. Miguel uses fractional steps, but if you only need integers you can also use braces in shell, like this:

sum=0;for i in {1..100}; do let sum+=i; done; echo $sum

Ryan Paul of ArsTechnica fame wrote this Ruby script:

proc{|f|f[proc{|x|x+1},0]}[proc{|x,y|proc{|f,z|x[proc{|w|y[f,w]},z]}}[proc{|f,x|f[f[f[f[f[f[f[x]]]]]]]},proc{|f,x|f[f[f[f[f[f[x]]]]]]}]]

Ryan is using the "proc" primitive in Ruby, which allows you to create an anonymous function (like lambda in lisp), and which I didn't know about even though I've been coding Ruby off and on the last few months. He uses Church encoding to encode the numbers 7 and 6, and lambda calculus to multiply them, thus confirming that he is the most awesome IT journalist working today.

Finally, Jay Wren sent in this C program:

main(x,y){for(;x++;) for(y=2;x%y;)printf( ++y/x+"\0%d\n",x);}

of which he is not the original author (and which I suspect was an IOCCC entry), but which is a very compact way of generating all the prime numbers. The author uses the args to main to save space on variable declaration, and the leading null-terminator in the string is a really clever way to select whether or not to print the output without an if statement. Lots of cleverness in there (though the algorithm to find primes is just brute force).

There were too many good entries to declare a winner, and maybe a contest was the wrong idea anyway. But this was a lot of fun. If you want to send me a script on twitter, be sure to send a "@natfriedman" message after, so that I notice you.

Take the Tweetable Script Challenge

Twitter limits posts ("tweets") to 140 characters. This constraint makes sending updates to your friends challenging, but it makes programming more interesting.  I just tweeted this 105 character shell script:

s="-<";while true;do echo -ne "$s\r";s=`sed 's/->$/-<-/;s/^</>/;s/-</<-/;s/>-/->/;'<<<$s`;sleep 0.1;done

(Pasting from the tweet link seems to work a lot better than pasting from my blog — not sure what wordpress is doing to that script) (Fixed - disabled smart quoting in wordpress).

Cute, huh? :-) But you can probably do better. Tweet your one-liner, and then send a @natfriedman message on Twitter so that I notice it. Best tweetable script posted today wins. All the basic shell languages are allowed, but your script has to be pastable into the shell, i.e. "perl -e" is ok.

Guns, Guts and God

At dinner during a recent meeting of Democrats Abroad in Brussels, an articulate American investment banker from London recounted the story of a visit he'd made to a Republican gathering in the US where he learned that the unofficial motto of the Republican party is:

Guns, Guts and God make America great. Republican Party.

This pithy catchphrase impressed me. In 9 words it defines a coalition of voters (church-goers, rural gun-owners, and military families), emphasizes strong patriotism, and sketches a personality that's instantly familiar to many people.

"So," he went on to ask, "what's the analogous slogan for Democrats?"

There were a lot of intelligent people at the table, and murmured discussion followed. The closest anyone could get to a counterpart was the familiar "Strength through diversity." But it doesn't pack the rhetorical punch of the Republican slogan. In fact, it could be cynically interpreted as another way of saying "We couldn't agree on a motto."

I found myself wondering whether this was an inherent state of affairs. In a two-party system, if one party comprises a well-defined coalition, the other party could end up picking up the scraps — and be left with such a diverse group of members that it would have trouble expressing common cause, except "we're not them."

Or maybe a group defined by its tolerance, rationality, and empiricism simply can't deliver the kind of bumper-sticker policy positions as the Republican party.

Certainly the division we see right now between the Obama and Clinton supporters hasn't happened in the Republican party, despite the fact that McCain is despised by many conservatives.

I was reminded of another quote I read recently:

A conservative is a liberal who got mugged and a liberal is a conservative who got arrested.

There's a symmetry in here which would seem to point the way to some kind of catchphrase.

Liberal political groups in other parts of the world manage to cohere well, and to express themselves compellingly.

Can you come up with a catchy slogan for the Democratic Party?

Low-expectation microblogging

I started using twitter recently, at twitter.com/natfriedman. One of the things that's nice about twitter is that no one expects you to say anything really interesting there. "Blogging for retards" is another way to put that. It reminds me of Ze Frank's "keeping us company" (in a good way!).

my avatar

Adventures in Personal Genetics

There are about 3 billion nucleotides in the 23 chromosomes of human DNA. For each nucleotide, there are four different nucleic acids (G, C, T, and A) to choose from, so each nucleotide contains 2 bits of information, and the total (uncompressed) data in the human DNA is about 715 Megabytes. Only about 3% of all human DNA actually codes for proteins, and the rest is ignored and generally referred to as "junk DNA."

So the total genetic information necessary to fully specify a human is about 25 Megabytes.

That's it! And that's before compression. I definitely have tarballs of source code that are bigger than that. You could fit your whole family and all of your friends on your iPod (Update: Jamie pointed out that this doesn't include the DNA to specify all of the bacteria in our digestive tracts without which we couldn't survive, more details in the comments). (Update: I've recently made friends with some biologists who tell me that the concept of "junk DNA" is now widely disputed, and that much of the non-protein-coding DNA are control data. Also, just because we don't know what it does, doesn't mean that it's junk.  In any case, 715Mb is still a relatively small amount of data — a little more than one TV show downloaded from iTunes.)

Most non-junk DNA is identical across the human population. A protein-coding nucleotide which varies in more than 1% of the population is called a SNP, or Single Nucleotide Polymorphism. Of the 90 million protein-coding bases in our chromosomes, there are maybe 3 million SNPs coding for differences like eye color and sickle-cell anaemia.

There are now a few companies offering low-cost partial sequencing of your DNA by mail. Mostly these companies act as front-ends to a couple labs (Illumina and Affymetrix) that use chip-based sequencing machines to sample between 500k and a million nucleotide variations (SNPs) from your chromosomes. You FedEx them a test tube full of your saliva, they send it off to a lab to get your cells cultured and your DNA sequenced, and then they put your genetic information online for you to view. Cool, right?

The best-known of the personal genomics companies is 23andme, but there's also DecodeMe and Navigenics. They charge about $1000 to decode 500k bases, which is about 120 kilobytes of genetic information. That's a cost of about 0.2 cents per base or 0.8 cents per byte. That is a lot cheaper than it used to be, and the cost of decoding a nucleotide is dropping exponentially on curves reminiscent of Moore's Law.

The various personal genomics companies don't let you donwload all your raw SNP data; they map the base pairs to a handful of genes and in the end you only get a few bytes of actual data. They also look at your mitochondrial DNA (which is passed to you from your mother directly in her egg cell that becomes you) and some little bits on the Y chromosome that don't change between individuals to determine your likely ancestry. At least, that's what I've gathered from their web sites.

But I'll let you know soon! My spit kit arrived from 23andme yesterday and they should have my DNA on-line for me to view in about 6 weeks.

Me and my spit kit

When you order the kit, you have to read through some pretty interesting disclaimers:

You give permission to 23andMe, its contractors, and assignees to perform genotyping services on the DNA extracted from your saliva sample and to disclose the results of analyses performed on your DNA to you and others you specifically authorize. You are guaranteeing that the sample you provide is your saliva; if you are completing this consent form on behalf of a person for whom you have legal authorization, you are confirming that the sample provided will be the sample of that person. If you are a customer outside the U.S., by providing your sample, you confirm that this act is not subject to any export ban or restriction in the country in which you reside. You are warranting that you are not an insurance company or an employer attempting to obtain information about an insured person or an employee. You are aware that some of the information you receive may provoke strong emotion.

Personally I think having more information about myself can only be a good thing. Because you can act on it. A gene coding for a prostate cancer predisposition isn't a death sentence — it's a call to action. Eat better, get exercise, get checked every year after you're 40. That sort of thing.

The New York Times has an article about these personal DNA services.

Obama Event in Boston

For those of you in Boston tomorrow, February the 4th, Barack Obama, Ted Kennedy and Governor Deval Patrick will be speaking at the Seaport World Trade Center at 8pm. The event is open to the public, but space is limited and they encourage that you RSVP.

If you're still undecided going into Tuesday's primary, or are already an Obama supporter and just want to hear the man speak, this is a must-see event on the eve of what could be the critical day in the campaign.

Besides hearing from Senator Obama, another excellent reason to go to this event is Deval Patrick. Patrick took office just a few weeks before I moved to Germany, so I didn't know much about him when he spoke at the Obama lunch I attended a few weeks ago. But, wow! I was blown away by his presence in the few brief words he said to introduce Obama.

I'm in sunny Bavaria the next few days and am very sad I won't be able to make it, but if you're in Massachusetts tomorrow, this is not to be missed!

Update: if you're worried the Seaport event will be packed, Rebecca C. writes that there will also be a pre-event, "Hands across Mass Ave Bridge," organized by Obama supporters and students. Go to the Mass Ave bridge from 3:30pm - 5:30pm to join in.

My first political fundraising

Fundraising Status

Thanks to everyone who contributed; we managed to pull in $5600 for Barack Obama the last few weeks. The money came from 39 different people, and the mean donation was $143.60. It took 20 days to raise this money, at a rate of $280/day. Interestingly, most of the money was raised the old-fashioned way — by pestering my friends on IM and Facebook — and only $1800 came in via my blog.

If you still want to donate, go here.

Also, I was lucky enough to get to meet the Senator a couple of weeks ago at a lunch in Boston. The campaign photographer sent me the photo last week:

Obama and me

Barack Obama Contribution Reminder

I'm happy to report that the people who read this blog have contributed $2,660 to Barack Obama in the last 5 days. That's over 50% of the way to the target of raising $5000 by January 21st! Thanks everyone!

If you support Barack Obama and you haven't yet donated to his primary campaign, please consider contributing now. If you've already given, consider giving again. The Nevada primary takes place January 19th, and South Carolina is just a week later (complete schedule). The outcome of these early primaries sets the tone for the states voting later. What happens in the next 4 days could be decisive in choosing our next president. And your contribution will make a real difference in mobilizing supporters to get out the vote in those critical contests.  So please don't wait. Take action:

Contribute to Barack Obama's primary campaign now!

I believe that there are already a lot of Obama supporters out there who feel that he could do great things for this country, but who haven't yet stepped up and supported him in any concrete way. If you're one of those people, then now's your chance: give $50 or $100 (or $500!) today so that we can have a president we will all be proud of.

If you support someone else for the Democratic nomination, or if you haven't made up your mind yet and you want to learn more about Senator Obama, check out these links:

The donation link above will credit my personal fundraising campaign, but all of the money goes directly to Obama for America. Just visit the link and click the ‘Donate’ button next to the thermometer.

Barack Obama

One of the things the next president has to do is to stop fanning people’s fears. If we spend all our time feeding the American people fear and conflict and division then they become fearful and conflicted and divided. If we feed them hope and we feed them reason and tolerance then they will become tolerant and reasonable and hopeful.

If you're like me, you spent a fair bit of the last seven years being unhappy about the state of our government and complaining about the terrible acts being done in our name, but you spent pretty much no time at all actually doing anything about it.

So, this year I've resolved to try to transform some portion of that negative energy into positive action, and the man who's convinced me to do it is Barack Obama.

Thus! For your consideration, I offer:

I don't agree with every single one of Senator Obama's campaign positions, but I agree with many of them. And most importantly, I believe that Obama has the capacity to lead this country into a new era of unity, optimism and rationalism.

Living in Munich now (more on that later!), one of the things I can do is to raise money for the campaign. So, I've set a goal of raising $5000 for Obama by January 21st. And I need your help.

If you agree that Obama is the leader we need (and you're an American citizen or permanent resident), then I would urge you to contribute to the Obama primary campaign while there's still time to affect the outcome.

If you are a Republican or an independent, and don't plan to vote in the Democratic primaries, or if you have already contributed to another candidate, you can still send Obama $50 (or $500 :-) ) if you believe he's the best of the Democratic options. There's nothing wrong with having a horse in each race, after all!

The link above will credit my personal fundraising campaign, but all of the money goes directly to Obama for America.  Just visit the link and click the 'Donate’ button next to the thermometer.

Is this thing on?

Testing one two three.

More reviews

OSNews has a review of the SLED 10 preview available:

A huge step forward for desktop Linux… I can confidently say that this release candidate outshines Windows Vista's beta. — OSNews, July 28th, 2006, First Look: SLED 10

SUSE Linux Enterprise Desktop 10

A preview edition of SUSE Linux Enterprise Desktop 10, the desktop we have have been working on for the last two years at Novell, is now available for download.

And the first reviews are in as well:

SLED 10 is hands down the most polished desktop Linux distribution I've ever used — and that includes Ubuntu.

     — InfoWorld, June 26th, 2006, SuSE Linux Enterprise Desktop 10; SLED 10 offers unmatched ease-of-use, polish, and hardware support


SUSE Linux Enterprise Desktop 10 has the feature set, compatibility and flexibility to meet the needs of most corporate desktop users. What's more, at a price point roughly one-tenth of what Vista and Office 2007 will cost, SUSE Linux becomes harder to ignore.

     — CRN Article, June 9th, 2006, Head To Head: Can Novell SUSE Linux Take On Microsoft Windows Vista?

You should also check out the videos of Ted Haeger demoing a few of the new features in SLED 10.

Evolution / Cairo Support

The Evolution team has started to add Cairo support to Evolution.

Pretty. More details on Srini's blog.

iFolder Server Open Sourced

The iFolder team announced on Friday that the iFolder enterprise server is now open source.

Grab the code, install it, and host an iFolder server for your team! It's pretty sweet.