Archive for March, 2007

Can Ubuntu Cut the Gordian Knot?

Saturday, March 10th, 2007

When Windows was released, it united a vast but rather fragmented society around a single philosophy. On the one side, you had end users. They had to get work done, and they needed applications to do that. On the other side, you had application developers, who needed a platform conducive to making useful applications to sell to the end users. This is, of course, gross oversimplification of historical events. The point is that geeks and end users alike wound up rallying around Windows.

These days, it would seem that Apple is looking to do the same thing. They’ve lured in end users by enabling them to work with media in new, fun and interesting ways while still allowing them to get work done. Meanwhile, they’ve also attracted the technical crowd because under the covers OS X is really UNIX. In short, Apple has done what Linux has needed to do for a decade now but couldn’t get organized enough to do: they made what amounts to a distribution of BSD that’s so easy to use that the end user never knows what’s under the hood unless they’re curious enough to go and learn about it.

The ability to organize around the idea that a system should be easy to use *first*, and gratifying to geeks *second* has been the gordian knot of the Linux community. While Apple has pasted a bunch of slick “ooh aah” features onto the desktop, and provided a platform for developers to extend the environment (note I said “extend” and not “fork”), Linux is busy, for the most part, doing things with a mind toward “the community” instead of “the customer”.

The Linux community is making sure that the end user has at least 10 different mp3 players, 5 different desktop environments, 6 different photo management applications, and 20 different scripting languages built in and ready to go. They’re fighting over licensing, attribution, inclusion, exclusion, who’ll take over this project, who’s forking that project, what should this project be called today, what package format will be used, which package manager will be used and does it work with this format, and what’s the best way to support 32-bit programs on 64-bit hardware while still allowing the end user the freedom to build software from source in an environment that looks something like sanity?

I certainly understand that all of those arguments are in some way important. There needs to be this community of concerned technologists who provide so many important things to the technological landscape as it were. The community is a proving ground for ideas, a training ground to develop skill sets, a forum for the discussion on the directions different technologies might go in, and a united force against inane legislation.

However, as important as these arguments are, you have to admit two things:

  1. They don’t make getting things done any faster, and
  2. Apple has already proven that these things can get done quickly if you get organized.

Apple has hit a nice sweet spot in terms of what it delivers to the end user. It doesn’t come ready to do… um… well, nothing – like Windows. On the other hand, it also doesn’t come with 5 ways to perform a single task. Just this small amount of streamlining greatly reduces the amount of work involved in delivering the product, because energy that might otherwise be expended in testing all of the different ways you can set up your printer can now be redirected to solving a problem that doesn’t have a particularly great solution, or (gasp!) writing documentation!!!

What I’m hoping for Ubuntu is that they evolve into a project that can do two things, both of which I think the project is capable of:

  1. Accomplish on the Linux platform what Apple has accomplished on the BSD platform.
  2. Take the word “Linux” out of the larger desktop platform discussion.

Item 1 would involve making some difficult decisions about the applications that will not be included in the distribution, and employing some amount of diplomacy to try to unite developers to get them to work together on solving problems instead of forking every time someone gets their feelings hurt.

Item 2 is *going* to be done by some distribution at some point in time. It won’t be Red Hat, and it won’t be Novell. They’re not interested in you and me. They’re interest is in the “enterprise”. They’re smart to go that route. It’s a large market, and it’s a market that isn’t likely to care if there are no mp3 libraries or commercial NVIDIA drivers installed by default. But this doesn’t help us home users.

It’s also not going to be Debian, because their interest is in “keeping it real”, where “real” equals “open”, not “easy to use for non-geeks” or “bleeding edge”. It won’t be Mandriva because, as much as I love Mandriva, they don’t seem to know where to put their energies from one day to the next. Someone needs to get the discussion about the desktop to include the name of their distribution instead of this nebulous “Linux” thing.

Linux is a kernel. The distribution is what makes Linux useful to normal people. We sure as heck don’t talk about “win32″ on the desktop, now do we? We talk about Windows. Likewise, we should be talking about “Ubuntu vs. Windows” or “Ubuntu vs OS X” and not “Linux vs Whatever”. People aren’t going to understand comparisons between a kernel and an operating environment. They’re not going to understand a comparison between Windows and an entire movement. There needs to be something identifiable to put up there, and right now, at least in the desktop space, that’s Ubuntu.

So, flame away. Here are a couple of replies up front:

  1. I’m not saying it has to be Ubuntu, I’m just saying that right now, it *is* Ubuntu. Read the article.
  2. Debian religion aside, you have to admit that you’re not likely to hand a Debian netinstall CD to your mom and wish her the best of luck now are you?
  3. Yes, MEPIS, KDE, Slackware, Gentoo, OpenSUSE, Fedora, {K,Edu,X}ubuntu are also very nice. That’s not the point of the article, though, so please move along.
  4. Yes, choice is good, but anyone who has ever worked in food service is no doubt familiar with people who sit there staring at the menu saying “there’s soooo many choooiiices” and not knowing which way to go. People on the by and large are indecisive. Having one tool to perform a task instead of five, just by itself, will do wonders for the perception of usability on a platform, as evidenced by Windows and OS X.

I’ll reply to the rest as they come in :-)

Technorati Tags: , , , , , , , , , , , , ,

Social Bookmarks:

Saving (daylight savings) Time with ClusterSSH

Friday, March 9th, 2007

IMG_0901.JPG

That’s 20+ ssh sessions being controlled by that little bitty box in the bottom left-hand corner of the right-hand screen.

This is why I really like clusterssh. It saves me time because I can do things on a whole bunch of machines all at the same time with zero scripting. All I do is create a configuration file that holds a bunch of default settings and “cluster” definitions, then run “cssh clustername” on the command line, and I’m all set.

So I have clusters for our database servers, our ldap servers, lab machines, etc. But I don’t have to cssh to each cluster seperately. That would be less than ideal because I’d have an input window for each cluster. Instead, I do “cssh cluster1 cluster2 cluster3″ and I get one input window that goes to *all* of the machines in all three of those clusters. This is how I’ve been using cssh for a long time now.

According to the documentation, you can create a cluster in your config file that you can group other cluster definitions under, but I guess my syntax is perpetually wrong, because that never works for me. You’re supposed to be able to define ‘cluster1′ and ‘cluster2′, and define ‘cluster3 = cluster1 cluster2′ for example.

Your cluster definitions can also include a username in case your local username is different from the one you ssh with. There’s a good number of config options covering flags to pass to ssh, terminal settings, and all kinds of stuff.

So if you’re wondering just how you’ll ever find the time to run ‘zdump -v | grep 2007′ on all of your linux hosts, here you go!

Technorati Tags: , , , , , , ,

Social Bookmarks:

Rolling Back an Entire CVS Repository

Thursday, March 8th, 2007

There’s someone at Stanford who maintains a whole bunch of awesome tips on using CVS. This is perfect for me because it has all the little things that my brain loses because I don’t need to use CVS all that frequently. Of course, not using it frequently also leads to screwups, and I has a doozy this week. I thought I was joining two branches in the *checked out* version of my repository. What I really did was merge the two branches onto HEAD somehow. If you’ve ever done this, there’s a route out of the maze, and that doc from Stanford has it. I’m reproducing it here in case that document ever moves or goes away:

Here is what you need to do if you want to revert the changes in you repository back, say, two days:
1. Make sure you are up to date

% cvs update

2. Create a tag based on the date. The -D can be any date format that CVS will reconize.

cvs tag -D "2 days ago" two_days_ago

3. Clear the sticky bits. (Don’t Ask)

cvs update -A

4. Do the reverse join. (Again, don’t ask…or… you can see the CVS documentation!)

cvs update -j HEAD -j two_days_ago

5. Update after you do the join.

cvs update

6. Commit the changes.

cvs commit

And that’s it!!! You’re saved! You’re back to a good, working version.

Phew!

That one saved my bacon. Now I can get on with the work of moving this project (and the rest of my development) to GIT!!

Technorati Tags: , , , , , , , , , , , ,

Social Bookmarks:

Still updating old links

Thursday, March 8th, 2007

I recently imported a bunch of old blog entries from my old Blogger blog, and there are some old broken links in those old posts. As I find them, I’m fixing them. For example, I just saw in my logs that someone clicked a link to pics of my flooring project, but the link had some dust on it. I’ve fixed the link in the post, and it’s here if you don’t feel like looking for the post. If you find any more broken links on the site, let me know!

Dear WordPress, Please Give Us “Post Widgets”

Thursday, March 8th, 2007

It seems logical that WordPress.com would see value in having its users promote their blogs with the greatest of ease, thereby increasing traffic, and everything that follows from that. I have to admit, they do make a blogger pretty comfortable, but there’s always room for growth and improvement.

One feature that I think could be fairly simple to implement, and immensely useful to the entire community is “Post Widgets”. Non-wordpress users don’t know this, but the stuff that’s on the sidebar of this blog is created using a little drag-n-drop interface. It’s very nice, and I’ve never seen it explode or do anything wacky, which is great. What I’d like, though, is the same interface that will let us drag little bits around to customize how posts work on our blogs.

For example, I add Technorati tags and social bookmarking links to every post, using bookmarklets I downloaded. Every time I post, I have to click on these two bookmarklets and enter in a bit of text, then press enter, and then cut-n-paste the resulting code into my post. Meanwhile, Blogger users can just paste some CSS into their theme *one time* and be done with it. Of course, I had much, much bigger issues with Blogger, so I’m not going back just to save myself 2 clicks per post.

So, the way it would work is just like the sidebar widgets, but instead of a sidebar drag-n-drop interface, we’d need one for the posts. Included could be, of course, a “WordPress tags” widget, a social bookmarking widget, and widgets that would let us include/exclude other cool things like maybe a ‘glossary’ widget that would automatically highlight words for which there is a glossary entry or something. You could really come up with a good number of useful things you can do with each blog post. I suppose the hold up here would be that launching such a service would be rather expensive, computationally speaking. Imagine what happens when 300,000 blogs decide they want social bookmarking icons on the bottom of every post entry!

Technorati Tags: , , , , , , , , ,

Social Bookmarks:

WordPress as OpenID Portal

Wednesday, March 7th, 2007

WordPress has announced that you can use your WordPress blog URL as your OpenID. If I understand this right, this means you can go to a site that supports OpenID, and log in by entering your WordPress blog URL, being redirected to the login page for your blog, and if that’s successful, you’re redirected back to the site you wanted to get into, and you’re recognized as being logged in.

Well, I guess this is cool. Certainly for people who have a blog but are otherwise not very technical, this is a way to get word out to those people, and get them using this service that a lot of them would never have heard of. However, I don’t believe WordPress actually supports logging into WordPress using an already-existing OpenID that already exists somewhere else. Odd.

At first, I thought that the idea here was to have *one* OpenID that could be used in a bunch of places. However, that would mean that there would have to be one issuer of OpenIDs that is globally trusted all across the internet (or at least that subset of the internet that you care about I guess). That doesn’t currently exist, best I can tell.

So that implies that, in the future, for each site I go to, I’ll have to remember not only if the site uses OpenID, but *which* OpenID provider I have to use, which to me sounds more complex than just remembering a bunch of passwords, which is what I do now, and don’t have a huge problem with.

I guess there’s still some shaking out that has to be done. Where I work, we’re actually implementing a small pilot CAS solution. Elsewhere on campus, they’re looking at pubcookie…. where it stops, nobody knows! :-)

Technorati Tags: , , , , , , , , ,

Social Bookmarks:

GCalSync Working on my BlackBerry 7290

Wednesday, March 7th, 2007

Well, I had to cobble the steps together from various places on the internet, and do a little twiddling on my own, but here’s how I got GCalSync 1.1.1 working on my BlackBerry 7290:

  1. I had to upgrade the software. The gcalsync site says 4.0 or later should work, but my old 4.0.something version didn’t work. I just upgraded to 4.1.0.292, and (after doing all the *other* stuff), I got it working.
  2. I had to go into “Options -> Security Options -> TLS” and change “TLS Default” to “Handheld” (from “Proxy”).
  3. I had to go into “Options -> Advanced Options -> TCP” and fill in the APN information. I had no idea what this was about or how to set this up, or what APN I was supposed to be, but I found the settings I needed (it depends on your carrier) here. If you get java.io.IOException errors saying it can’t create or open a tunnel, I believe setting this alleviates that particular issue.
  4. I had to reset the blackberry (ie, shut it off, and remove/replace the battery).

All this, and what I’ve found out is something I should’ve suspected: it only syncs with a single calendar. At least as far as I can tell. There’s no documentation, so I’m not really sure, but I’m pretty certain that’s it. Even so, it’s still a good fit for now until I can find something that’s a more complete/integrated offering. At least if I know that if I had to I could add an event to my Google Calendar, *or* email myself a task to my Remember The Milk task list, which itself is visible from my Google Calendar.

By the way, this is all part of my bigger plan to replace my old Franklin planner and go all digital. Details on that are here.

Technorati Tags: , , , , , ,

Social Bookmarks:

No Business Left Behind

Monday, March 5th, 2007

I have a confession to make. Before my life in computing, I was a stockbroker, and flirted with going into the family business, which is real estate (see a somewhat complete list of jobs I’ve held here. It’s good for a laugh). My father is a certified tax assessor and real estate appraiser who specializes in business analysis, and special properties like mines, marinas, quarries, golf courses, and the like. My mother worked in mortgage banking for 15 years, on the operations end of the big machine that packages loans for the secondary market, and that business also did construction, renovations and brokerage. She left that business when she remarried, and opened her own consignment shop for baby clothes and toys, which was rather successful. I had an uncle who was a broker and also ran a mortgage outfit for some time, and two other uncles who were not in real estate opened an international courier service in the late 80’s which is still running today.

In short, I have a business background. I started reading the Wall Street Journal at 16 and got my series 7 license 2 months after I turned 20. I had a client portfolio and mastered the HP-12C financial calculator before I could legally drink.

If there’s one thing; one common thread that has worked its way through every successful deal, venture, business, consultancy, whatever, it is this: it is about people.

This brings us to…. a bar, actually.

I was at Triumph in Princeton tonight. They have a ‘cask conditioned beer night’ on the first Monday of each month, where they tap a barrel of a craft brewed beer that isn’t on the normal draft schedule. It’s kind of like a limited-edition, special-reserve, exclusive type thing. I heard about it because I’m on a mailing list for the local brew club (oh yeah, I brew beer, too). Had I not been on that list, I would never had heard of it. Had I not been a brewer, I would never have been on that list, and I wouldn’t know much at all about Triumph.

Triumph was kind of a sad site this evening. At 5:30, which is to say “during the happy hour leading up to the exclusive cask unveiling”, I was able to walk up to my choice of stools at the bar. There were people there, but few of them seemed to have any idea that anything special was going on that night. The brewer and his employees were gathered round the barrel, which they had put about 3 stools down from me on top of the bar, and they were discussing why nobody ever seems to show up to these events, and they seemed to conclude that they should change the night they hold it on.

Then I wondered how I would ever know which night they changed it to. Then I thought about their website. I had been to it a number of times. It’s very fancy, but in reality, it’s a brochure. The front page is all glossy and flashy and stuff, but there’s not much substance there. Just a bunch of ho-hum mystery meat navigation and cool graphics.

Where are the people? Where is the beer blog telling me what’s going on and why beer matters and why I should care about what’s going on at Triumph? Where is their involvement in the local brewing community? Are they involved? What, exactly, on that web site, is supposed to ever make me want to come back? Heck, what on that site even engages me to make me click on more of the links?

In short, there’s nothing people-oriented about the web site. So the people-oriented stuff must be at the bar, right? Wrong.

The head brewer interacted, so far as I could tell, with employees, or people he knew. For crying out loud, the bar tender knew I brewed beer, I was the only non-employee at the bar drinking what came out of the barrel, and not only did the brewer not speak a single word to gauge my interest in the beer or see if I was a ‘beer person’, NO employee seemed to be speaking to *anyone* that wasn’t an employee in any way that wasn’t obviously in pursuit of a transaction (ie “what can I get you?”). Now, I’m not so anti-social that I need someone to reach out to me to be social, but this crew just seemed really driven to seem unavailable or something. It was quite a phenomena to behold, especially in a bar. A good bar is almost solely about social interaction. The money happens to fall out of that.

So… what… Triumph is just entitled to my money by virtue of its existence? Get real. That business, like every other business, is about people. Whether it’s technology, real estate, the service industry or anything else, the most successful operations are those that foster a community around their business and products. Empower your target audience. Don’t just give them a glossy about how to find parking for your store – make sure that they’re thinking of you as an authority on anything remotely related to your business. Modern software has made it dead simple to cover the technical end of community building with relatively little cost. The only thing left is to come up with ways to empower your loyal fans; to enable them to interact with each other, to talk about things related to your business.

In the case of Triumph, they could start a site that encourages brewers, beer enthusiasts, foodies, and service industry folk to interact and get interesting new perspectives on beer, brewing, and how beer and food are prepared and served. This would be supplied absolutely for free, and would also link to a blog that stays updated with the latest rants or thoughts of the head brewer, which, of course, feeds the conversation through various means. Of course, users who register on the site can be apprised of events, new menu items, and, oh, I dunno, the new cask night schedule via email, or (gasp!) via an ical feed that they can subscribe to from any standard calendar client! The entire customer base would be virtually plugged right into the business!

That last paragraph is not *even* the tip of the iceberg. Community building isn’t a simple task, and it takes time, and a good bit of humility, realism, and social skill. If you sit down, and without thinking about money (at first, bear with me) and think about what a community around your product might look like, what form it might take, what common threads would attract people to the community, how to empower them or foster their interaction, you’re likely to come up with a flood of good ideas. Write them down. Keep the ideas in your pocket. Look at them when you’re not doing anything. Review them. Gnaw on them. Those thoughts will evolve into a method of fostering a community that is right for your product or business, and from that, methods on how to link all of this traffic together and turn it into dollars will (for business-minded folk) almost fall right out of the new world you’ve created.

For more on community building, there’s a good post about it geared to technology outfits by Guy Kawasaki, and the high-level concepts apply to any business. Be sure to see the comments for other views on community building, and (indeed!) an example of how blogs encourage the formation of communities (in this case, around a respected business figure).

Hope this helps, and please feel free to share your ideas and links about the community building process!

Technorati Tags: , , ,

Social Bookmarks:

Migrate a NIS password map to LDAP… FAST

Monday, March 5th, 2007

I came across this awk hack in an old code repository today. I slapped it together a couple of *years* ago now, and it was never really worthy of being distributed for general use. However, if you’re like me and never made friends with the PADL migration tools and all you need is a quick way to convert a password map, maybe you can use this. If you need to convert a different map, you can use this as a starting point.
If you saved this as ‘nis2ldap’, you’d call it like this:

ypcat passwd | ./nis2ldap > users.ldif

users.ldif, then, would be your new ldif file, hopefully ready to be imported into your LDAP directory. It shouldn’t matter if you use Fedora Directory Server, Novell eDirectory, or OpenLDAP as long as the schema you’re using in your LDIF is supported by the server.

#!/bin/bash

awk -F: '{
                print "dn: cn="$1",ou=People,dc=mydomain,dc=com"
                print "objectClass: top"
                print "objectClass: person"
                print "objectClass: organizationalPerson"
                print "objectClass: inetOrgPerson"
                print "objectClass: posixAccount"
                print "objectClass: inetLocalMailRecipient"
                print "objectClass: shadowAccount"
                print "uid: "$1
                gfields = split($5,gecos,",")
                namefield = split(gecos[1], fullname, " ")
                print "sn: " fullname[namefield]
                print "givenName: "fullname[1]
                print "cn: " $1
                print "userPassword: {crypt}"$2
                print "loginShell: "$7
                print "uidNumber: "$3
                print "gidNumber: "$4
                print "homeDirectory: "$6
                print "gecos: "$5
                print "mail: "$1"@mydomain.com"
                print "displayName: " gecos[1]
                print ""
        }'

See? You don’t really need 20 different perl scripts to do this!
Happy Monday :-)

Technorati Tags: , , , , , ,

Social Bookmarks:

GCalDaemon Looks Promising

Monday, March 5th, 2007

I just came across an article about GCalDaemon, which is a Java-based (meaning it should work on any platform) program to keep any iCal-compliant calendar in sync with your Google Calendar. And yes, this is also a bidirectional sync’ing tool!

Technorati Tags: , , ,

Social Bookmarks: