Open Help Conference, 2013

This weekend I attended the OpenHelp Conference in Cincinnati. Unfortunately, I was only able to go to one day of it, as we had to be back for something Sunday morning.

It was smallish, and so there was a lot of good conversation and brainstorming.

The focus was both documentation and support, which are, of course, deeply intertwingled. It gave me a lot to think about, and I really wish I could have been there for the second day as well.

Siobhan McKeown, from the WordPress documentation team, was at the conference, and took amazing notes, so I’m going to link to her writeup for each talk.

The day started with Jorge Castro talking about using StackExchange to handle the Question & Answer part of support.StackExchange is part of the StackOverflow family of sites, Each StackExchange site is focused on a particular community, and is very focused on Question and Answer format, rather than general discussion. It allows users to vote for the quality of questions and answers, and seems to be a great way to get the subject matter experts more directly involved in the support process.

Siobhan’s notes are here.

Following that, Michael Verdi, from the Firefox support team, talked about the SuMo site and the work that they had done to help users find the answers to their question. Of particular interest was some graphs he showed of the improvement in customer satisfaction, as well as the rate of answered questions, brought about by just improving the search functionality, to help users find the right docs so that they didn’t even need to ask their question.

Firefox has their own home-grown, but Open Source, solution, called Kitsune. It has some StackExchage-like features, and also has a great tool called Army of Awesome, which is a way to watch Twitter mentions of your project/product, and ensure that at least one person from the expert community has responded to each one.

Here’s Siobhan’s notes.

This was followed by a panel discussion including Jorge, Michael, Jeremy Garcia (LinuxQuestions.org, and Siko Bouterse from Wikipedia. The discussion ranged from Wikipedia author retention to further discussion of many of the issues that Michael and Jorge had raised.

I spoke next, talking about listening to your audience. This is something I’ve thought a lot about over the years. My trepidation in speaking at this conference was that it seems like many of the people there know a lot more about documentation and support than I do, as I’m largely self-taught in this area. But it seemed that my remarks were well received. Once again here’s Siobhan’s notes, which in this case are way better than my own notes for my talk.

I was the last speaker of the day, and this was followed by a general discussion of the things that had been raised during the day, as well as many related issues.

You can see a lot of commentary about the events of the day, and of Sunday, by looking at the #openhelp keyword on Twitter. I’m looking forward to reading Siobhan’s notes from Sunday’s sessions.

Mac OS X Time Machine disks on Linux

Useful information about accessing a Mac OS X Time Machine backup disk on Linux: http://hints.macworld.com/article.php?story=20080623213342356

The relevant part being that if you look at a directory entry on the Time Machine disk, from Linux, you’ll see something like:


-r--r--r-- 2155704 root 5791966 0 2007-06-25 02:54 Wallpaper

that first number, which is usually an indication of how many files are in a directory, is instead being used as a pointer to a directory named (in this case), dir_2155704 in the directory ‘.HFS+ Private Directory Data’, which actually contains the files.

This information has proved very helpful over the last few days – although what I ended up doing was plugging the drive into a Mac and scp’ing the data across the network, since that was less hassle.

Looks like a good place for some Linux utility that provides a file browser for this kind of file system. Although I expect there’s probably already one out there that I just didn’t find yet.

What I’ve learned at SourceForge

Today I’ll be leaving SourceForge and taking a role at RedHat. Please don’t think for a moment that it’s because I don’t like SourceForge. I continue to think that SourceForge does community *way* better than either Github or Google Code, and while there are places where the platform can improve, the team that’s working on it is one of the finest bunch of engineers I’ve ever had the privilege of working with.

Here’s a few of the many things I’ve learned at SourceForge.

People are passionate

Every time I talk to anybody about my job, I mention two projects: PonyKart and OpenMRS. These projects illustrate to me how people can be passionate about anything. Having talked with the leads of both of these projects, I’m blown away by their passion for excellence.

Of course, these projects could hardly be more different.

PonyKart is a My Little Pony themed Mario-Kart style game. It’s fun. The physics are well done. The courses are well designed. The community is very engaged. And it has My Little Pony characters in it. The guys that did this project wanted it to be a MLP game, but they also wanted it to be excellent. They wanted it to be fun. They wanted it to be *good*. They are passionate about it.

The OpenMRS project is a medical records system that was developed for a hospital in Kenya that had a hacked-together Access database monstrosity, and it was faster and easier for these guys to hack something together than to try to fix what was there. But that wasn’t enough. They were passionate. They wanted it to be done right, and they wanted hospitals all over the world to benefit from it. And now they have a non-profit dedicated to giving this product away to hospitals in developing nations that need it. These guys are my heroes.

I am continually blown away by the quest for excellence, and the vast range of ways that it manifests itself.

People are kind

I’ve met amazing people in my time at SourceForge. These people are helpful, kind, patient, and, as I’ve mentioned, passionate. For the most part, people get that I’m human and can’t solve all of their problems immediately. They get that we all have the limitation of time and resources.

Most people *don’t* throw tantrums or demand their way. For this I am very grateful. I’m glad to have met a few of the nice people.

People are cruel

Sure, SourceForge is the underdog right now. I get that. It’s not necessary to be a jerk.

It’s hard to remember, when people are being jerks, that they’re in the minority. Most people are, in fact, nice. But the jerks are very loud.

I’d like to remind the jerks that the folks who happen to be developing their project on the SourceForge platform are passionate, and they are pragmatic, and they are doing something useful while you fling mud at them.

’nuff said.

People are pragmatic

Tools are tools. They are not your children.

For the most part, people want to get a job done, and they use the tools they have, because the focus is the task, not the tools. Once, we used CVS and MailMan and we *liked* it. SVN is better. Some people like Git better. But if we had to use CVS and MailMan, you know what? We’d still get stuff done.

Religious debates over the relative merits of DVCS and CVCS systems are all well and good over beer at conferences, but most of us have a job to do, and we don’t have time for that indulgence. You may, in fact, be right, but I don’t have that kind of time.

I grow very weary of the This vs That flame wars that have characterized the IT world for so long. Perl vs Python, VI vs Emacs, Linux vs Windows vs Mac, Git vs SVN. The thing is, if you’re a professional, you need to know *all* of them, and you’re not coming across as brilliant, you’re coming across as only knowing one tool. Nice hammer. Sometimes a screwdriver is useful.

But, much as most people are nice, it turns out most people are pragmatic. Most people don’t have time for those debates either. They want to get their job done. I really appreciate having met a lot of those kinds of people.

Maqetta

Today I discovered Maqetta – http://maqetta.org/ – which is exactly what I was looking for about a month ago. It’s a browser-based HTML5 editor for creating mobile web app thingies without having to actually know anything about mobile CSS.

FitBit – Not what I was looking for

This evening I returned the FitBit I purchased a few days ago. It wasn’t what I was looking for.

So I guess it’s best to define what it is that I was looking for. Basically, I want everything that Strava does without having to lug my phone around. I thought that the FitBit was that, but it lacks one important element – a GPSr. I thought it had GPS fu in it, but it appears that I was mistaken.

So, instead, I’ve ordered a cheap armband thingy so that I can carry my phone without wearing a fanny pack. And maybe that’ll be all I want.

The alternate is a $150 watch from Nike, and that’s just a little too much to pay.

Chores

Disclaimer: I don’t require, or even particularly care about, your approval of my parenting style. I will cheerfully ignore any parenting advice you offer. Unless you’re my parents.

My kids are very goal-driven. My son wants to save for a new iPod. My daughter wants a particular pair of shoes. These things motivate them.

But when it comes to something as pointless as taking out the garbage or vacuuming the living room, it’s hard to get them to see the point. They’ll do it when told, but they’re not likely to think of it on their own.

We’ve gone through a number of experiments in getting them motivated to do their chores, including tying what chores they do to how much allowance they get. But that’s a huge hassle to keep track of.

Last week I decided that since I like hacking on Open Source anyway, I’d throw something together to both track what chores they’re doing – so that it’s less work for us – and also to provide them with some incentive.

So, here it is: Chores is a PHP/MySQL web app to track what chores they’re doing, and tie their allowance directly to that. I chose PHP because it’s easy and, more importantly, I thought it might lower the bar to getting other folks to pitch in, whereas mod_perl or mod_lua might make it certain that I’d never get any help.

Chores is currently very simple, allowing you to:

  • Manage user accounts, and define how much money a point is worth for those individuals, so that each person can have a different base allowance.
  • Manage chores, and define how many points each chore is worth, and how frequently it may be done.
  • Track when a chore has been done, who did it, and when it can be done again.
  • Tell you how much you have earned today, and so far this week.
  • Provide reports of allowance earned for any given time period.
  • Formats nicely on the iPhone, iPod, and Nexus7, so that the kids can use it from whatever mobile device they have in their hands at the time.

Chores

I have other stuff planned, but for the moment we’re kind of in a testing phase, to see if this actually works to motivate them.

I don’t yet have a packaged distribution, because I don’t have any documentation written, other than very rudimentary install docs. But you can check it out of svn if you want a copy. Patches are eagerly accepted, and if you’d like to participate on the project I’d be glad to add you to it.

Getting your CM19a working on Linux (Raspberry Pi)

I recently acquired a Raspberry Pi, and my main project is to get X10 stuff working again in my house.

To that end, I purchased a CM19a. I’m going to chronicle the process of getting it working here, so that eventually this will be a helpful howto. At the moment, it’s just a collection of notes and frustration. If you know something I don’t know, *please* let me know.

First, plug in your CM19a to the USB port.

Run dmesg. You’ll see something like:

[ 11.236260] input: X10 Wireless Technology Inc USB Transceiver as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/input/input0
[ 11.436218] usb 1-1.3: Weird data, len=1 ff 00 ff 00 00 00 …
[ 11.447235] usbcore: registered new interface driver ati_remote
[ 11.584656] ati_remote: 2.2.1:ATI/X10 RF USB Remote Control

Also, when you run lsusb you’ll see:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 0bc7:0002 X10 Wireless Technology, Inc. Firecracker Interface (ACPI-compliant)

And in /dev you’ll see:

rbowen@raspberrypi ~ $ ls -la /dev/usb*
crw——T 1 root root 189, 0 Jan 1 1970 /dev/usbdev1.1
crw——T 1 root root 189, 1 Jan 1 1970 /dev/usbdev1.2
crw——T 1 root root 189, 2 Jan 1 1970 /dev/usbdev1.3
crw——T 1 root root 189, 3 Jan 1 1970 /dev/usbdev1.4

So far, so good. Linux sees it.

[I’m not yet sure if this part is necessary. Still trying to figure that out.]

[[
You’ll need to create /dev/ttyUSB* to go along with that. Paste this at the shell:

for i in 0 1 2 3 4; do
sudo mknod /dev/ttyUSB$i c 188 $i
done

Note: 1) This is a magical incantation. I don’t yet know what the args to mknod mean. 2) I did 0..4 because lsmod shows devices up to 4. If you have more, make more.
]]

It appears that ‘heyu’, which I used with the serial device I used to have, doesn’t support the CM19a. Disappointing. But it looks like mochad does, so I’m trying that. Unfortunately, it appears that mochad doesn’t support extended status reporting (ie, the bit that tells you to what level a particular light is dimmed).

Get mochad. Build it and install it as per the instructions at https://sourceforge.net/apps/mediawiki/mochad/index.php?title=Main_Page..

At this point, it’s probably easiest to reboot the box, so that libusb gets loaded right, and mochad starts up correctly.

You should now be able to send commands to your device with netcat from anywhere on the network (or on the box itself)

echo ‘rf f2 off’ | nc raspberry 1099

Where, in this case, raspberry is the network address of my raspberry pi.

On the box where mochad is running, you can watch progress with:

nc localhost 1099

which will show the commands as they arrive:

01/02 21:51:12 Tx RF HouseUnit: F2 Func: Off

Now, the only problem is that my lights aren’t actually turning on or off. Perhaps a project for later this evening.

Update: I think maybe the RR501 I was sending to was defective? Not sure. Anyways, I swapped it out with a TM751 I also had sitting around, and now I can turn lights off and on. Next challenge, some kind of automation scripts that do more than one action at a time.

Update2: Seems maybe the CM19A has a range problem. I put the raspberry pi back in the network closet, and now stuff has stopped working.

Update3: No, that was an idiot problem – I had an argument misspelled in the shell script that was calling the X10 commands. Everything seems to be working now. However, for now, it’s all set up down in the living room, with rather more cables behind the stereo than I really care for.

Problems remaining to be solved: Why do /dev/ttyUSB* need to be recreated at each boot?

Update4: Having the perennial Linux problem where something works, and then stops working on reboot. Gah!

Update5: Using OpenRemote to create an Android app that is a remote control for my home’s lights. Very cool. However, I’m encountering a bug that was theoretically fixed two versions ago. Bummer. The remote controller establishes TCP connections to mochad and never releases them. Eventually, you can’t make any more connections and it just stops responding.

Update6: I’ve forked mochad on SourceForge and will be tinkering with stuff there for the moment. Right now I’m working on fixing the CGI stuff to be more generic. What’s in the main repo is hard-coded to talk to mmauka’s home setup, and obviously that doesn’t work for me. I’m not sure I want to develop a full CGI controller solution … but I might. We’ll see.

Upodate7: MisterHouse (http://misterhouse.sourceforge.net/) appears to still be active, so perhaps I’ll play with that some, too.

Raspberry Pi, episode 1

I got a Raspberry Pi for Christmas. I’ve been meaning to get one for some time, because I wanted to play with home automation (x10) stuff again. So here we go.

I’d rather not mess with getting usb/serial stuff working again. That was a pain. So I’m going to get a CM19a instead and see if I can get that working.

Should be fun.

So far, I have the Rasberry Pi booted, and I’ve got some basic stuff installed on it. It’s running Debian 6 (Raspbian) and I’ve got a 4G card in it, which, so far, looks like it’s going to be plenty.

The myth of the death of SourceForge

I’m the Community Manager at SourceForge. As such, every day, I see tweets about how SourceForge is dead, dying, or terminally ill. The evidence given for this is the huge number of dead projects on SourceForge.

This reflects a profound ignorance of how Open Source (and software development in general) works.

One of the things that makes software development such a compelling hobby is that it is so very cheap to fail. You have an idea? Great. Try it out. Did it work? No? Well, no great loss. Move on to the next idea. But, also, leave your notes out in the public so other people can have a look and see if they can do better.

Most software projects fail. Sorry. That’s reality.

So, the fact that SourceForge has a lot of failed projects is not an indication of the death of SourceForge. It’s an indication of its age. SourceForge is 12 years old. Github is still a baby, and so has a much smaller number of dead projects. Just wait a few years, and we’ll be hearing about how Github is where projects go to die, and the new thing on the block is so much better.

This is nonsense, and measures the wrong thing. Open Source forges are a place where you can try out an idea, cheaply, and, if necessary, find where it fails. It is the rare thing to succeed.

Of course, this leads to the question that always gets asked – why don’t we just purge all of the dead projects? Well, if you think about it for a minute or two, you’ll see why that’s not feasible. Who am I to determine what project is dead and what is not? I have a project that’s over ten years old, which I haven’t touched in 8 years, that I’m planning to rewrite this weekend. What if we’d purged that last week? More importantly, the notes and source code from your “failed”, or “dead” project often leads to a fork that is more successful. Purging the historical reference does nobody a service.

Meanwhile, I spend hours every day promoting releases and developments of very active and very passionate Open Source projects. The week isn’t long enough to fit in a tweet for every one of these releases without my wife saying to me, wow, you tweet an awful lot. A tweet almost every hour, 24 hours a day, every day for the last 9 months. That’s a lot of active projects. Not dead at all.

It is a great honor to be the community manager at SourceForge, working with tens of thousands of vibrant, passionate projects. SourceForge remains a very important player in the Open Source ecosystem, with new projects started every day. Some of those projects are destined to become successes, and others are not. That’s just how it works, and doesn’t indicate a failing of any of the open source forges where it happens.

The Margin Is Too Narrow