Older blog entries for dsifry (starting at number 20)

6AM Tuesday morning. And I've already been up for an hour. Ahhhh. I can really get used to this unemployment thang. I'm finally getting unwound enough from life and times at Linuxcare and Turbolinux to really relax and enjoy the mornings.

I'm playing a lot of golf, getting out and taking the dog on long walks in the park, and finally getting back into some hacking for fun.

I must say that kjofol skins for xmms totally rock.

If you would like to reach me from now on, best to send email to david at sifry dot com.

Whew, long time no post.


I got a new job - VP of Engineering. This means I have to wear two technical hats - both as CTO, my old job, and now as VP of Engineering. I have been having something of an amusing time finding out how different the two roles are, much to my charign.

As CTO, I go out and talk to a lot of customers, partners, and the press. It's my job to be a visionary - to research and understand new markets for Linuxcare, to define and pursue the strategic vision of the company along with the executive team. It also means that it's my job to talk a lot with customers and potential customers and open their eyes to the benefits of open source, and to Linuxcare's role. It involves a lot of sales activity. It is about defining and architecting the future products and services we'll offer. It's a great job.

As VP of Engineering, I have a very different role - I have to have very well defined requirements, specifications, and test plans - and I have to do everything I can to make sure that the engineers know exactly what they are building, for whom, and what their deadlines are. I spend my time talking with the engineers, project managers, and end-customers to make sure that we're on track and that the engineers have all the resources they need. It is my job to reduce their complexity, have well-defined deliverables, and make sure that we're making our dates.

The problems started when I began talking about the sales calls I was going on, describing some of the cool future uses of the projects and technologies we were building. Things got really bad when I brought some of the engineers out on sales calls, and they heard "Dave the CTO" talking to customers. ;-)

What I didn't realize is that I have an interesting ability to hold these two dissonant job descriptions in balance in my mind - The visionary that is describing where we're going to take the customer, where Linucare's competencies are evolving, and the kinds of products and services we'll have in 6 months was scaring the bejesus out of some of the engineers who were wondering, "Omygod, is he expecting me to have that thing built today?"

Lessons Learned

The hard reality hit me in the face when one of the engineers got very hesitant and started asking questions about product definition - at first, I was a bit put off, but after some long discussions with him and the other members of the team, I learned that I wasn't communicating clearly exactly what he and his team were supposed to build RIGHT NOW. Instead it looked like there was scope creep all over the place, and that the entire process was completely unfocused.

Essentially, I wasn't being clear about when I was CTO, and when I was VP of Engineering. And as VP of Engineering, I had to make sure that I was bludgeoning the hell out of the CTO - so that the engineers had clear knowledge of exactly what they were to build, who they were building it for, and when it was due. There is no room for the visionary in that role - it has to be very concrete, making sure that we have well-defined requirements, specs, project plans, etc. Basically, I had to tell the CTO to shut up. ;-)

This has been a really valuable learning experience for me - and I'm really glad that my team has gotten through this with me with mostly chuckles and good natured barbs. I'm really grateful that they showed me where I was fucking up.

So now I'm trying to be really clear about when I'm speaking as CTO, and when I'm speaking as VP of Engineering. I hope the folks continue to keep me honest on that front...

16 Oct 2000 (updated 16 Oct 2000 at 08:25 UTC) »

Back from ALS. It was a good show. Gave my talk on OpenFlock and GCTP and I think it went over pretty well. Had a nice chat with some of the Helix Code guys about how to get everything playing nicely between OpenFlock and Evolution. Saw lots of old friends at the show too, and made some new friends. I especially enjoyed hanging out with Don Becker on Thursday night. Too bad the beers were free, I'd have bought him one. Perhaps the next time he comes out to SF...

Digital Pictures

Wow, the pictures from my new Nikon 990S are better than the ones I get back from Kodak on PhotoCD with my 35mm camera. That's impressive. I also found www.shutterfly.com, a web site that produces prints from jpegs, and they have a special for the month of October - if you sign up before October 31, you get 50 free 4x6's. I'm going to try them out to see how well they go from jpeg->print. I also want to see what an 8x10 will look like, and they're only ~$2.00/print. Anyone know of any other good online photo printing services?

VTech Helio

The best booth at ALS had to be the Transvirtual booth - they were showing off PocketLinux running on everything from an Itsy to a Casseopea to a Helio to an iPAQ... Very cool stuff, even though it isn't ready for production use. They were also selling those Helios (75MHz MIPS processor, 2MB Flash, 8 MB RAM) for $139. I just couldn't help myself, I got a bunch for the folks back at work to play with. I gotta tell you, it looks really cool to see the Linux boot messages fly past on the little LCD of the Helio. I'm sure that things will be even better when Linux no longer hangs when you hit the power switch - as it stands now, you have to hard reset the device and it has to reboot each time you turn it on. Good luck guys!


Got some good patches for apmiser from the guy who wrote tpctl. I'll incorporate them, and do a release soon. It is a thrill to know that your software is being used by a whole bunch of other people out there in the world. Ahhhhhh.

ALS Pre-show

Hacking like cray to get everything ready for the show. Making good progress, but there's only so many hours in the day. I'm looking forward to having 1.0 released...


Must... Get... Some... Now...

10 Oct 2000 (updated 10 Oct 2000 at 09:28 UTC) »
Group Calendaring

More commits to OpenFlock today. Notching up the volume so that I will have something interesting to talk about at ALS - I really want to have v 1.0 released before the talk... Well, I can always code on the plane to Atlanta (I hope!)

Baby Stuff

Melody's first tooth is starting to come in, which causes her some discomfort, not to mention disruption in her sleeping patterns.


Got good pickup for the project at Freshmeat. 228 hits as of today. Cool.

Magic 8 Ball

This is the best use of technology I've seen in at least a week. Enjoy. This is the big question on my mind today.

OK, off to bed.

8 Oct 2000 (updated 8 Oct 2000 at 11:22 UTC) »

Lots of stuff going on recently.

Group Calendaring

I've started the integration of the ACL Code into OpenFlock itself. This is proving to be a pain in the ass, mostly because it is a whole lot of busy work - changing a lot of function calls into OOP method calls, changing argument ordering that kind of thing. Some of the old code doesn't apply anymore, so I've got to figure out a good way to remove it without breaking anything - but that appears to be a minor issue. With ALS coming up soon, I am bucking to get the new release out before my talk. :-)

Baby Stuff

Babies are BAD for productivity. I'm lucky to get any work done late at night after the wife and baby have gone to sleep so I can get into "the zone". Anyone else work that way? I just can't seem to get myself into a really productive space unless I have at least 4 hours of completely uninterrupted time, which sure as hell doesn't happen at work! The most ironic part of it all is that I can't get work done on OpenFlock (the group calendaring system) because I'm constantly booked in meetings! You just gotta laugh.

Melody is a pure delight, though. She's 8 months old now, and it is so incredibly fascinating to watch her personality continue to emerge, especially her sense of humor. I had the chance to spend a lot of time with her today, and it was a hell of a lot of fun.

Digital Cameras

Woo hoo! My Nikon 990 finally came in. It is a sweet camera. 3.34 Megapixels, and 2000x1534 pixel pictures by default. So sharp! I was having lots of gimp fun tonight. Don't ask me about the jerks who sold me the camera, though - classic bait-and-switch artists. Watch out for them!!! After lots of calls, I finally got the camera (the only thing they got right in my order). I think AmEx is going to get a call from me regarding these guys.

Add to that mess the fight I had with Airborne Express to just pick up the package after it arrived in San Francisco. Suffice it to say that not only did Airborne promise me 3 times they'd have the package at my door (even when it was late), they never followed through, and I had to go down to their shipping dock and pick it up myself in order to prevent further frustration.

*Sigh* Well, at least I have the camera now. I took some shots today of Melody at the supermarket, you can see them youself. Sorry Ryan, no PA pictures... ;-)


I released the first production version of apmiser today, woo hoo! apmiser is a tool for IBM Thinkpads that automatically controls the APM power settings based on your usage patterns. I often got pissed off at how slow the Thinkpads were when running on power-save mode - IBM would slow the CPU clock to 1/4 the rate of the full-speed CPU. This significantly saved power, but the performance drop was noticable. Whenever I wanted to do a compile, I would run tpctl to switch the thinkpad into full-power state, and then when I was done, I'd switch back into power-save state. This worked for big compiles, but even then, it was time consuming and sometimes I forgot to go back into power-saving mode, which caused my batteries to run out quickly. In addition, this didn't change performance when doing short CPU intensive tasks, like sorting a mail folder, or switching virtual desktops.

In response to this, I created apmiser, which is a little daemon that regularly checks your CPU utilization. If you're on battery power and it thinks that you're using the CPU, it switches you into full-power state while you need the CPU, and then it immediately switches you back into power-savings mode when you're finished with the CPU. I've found that apmiser significantly increases my productivity when using my thinkpad on battery power.

There's more, too. Since most of the time people use computers the CPU is idle, I've set up apmiser to help you to recharge your batteries faster when you're plugged into AC power. If you're plugged into AC power and your battery charge state is less than 95%, then apmiser acts as if you're running on battery power. Tests show that this speeds up my battery recharge time by almost 25% over the IBM default, which is to run the computer in a full-power state all the time.

In a way, I guess you could call it software-based "code morphing", sorta like what the folks over there are doing... Heh.


Today is my Birthday, I'm 32 today. Happy birthday to me!

1 Oct 2000 (updated 1 Oct 2000 at 08:31 UTC) »
Group Calendaring

Another day of hacking, and I've fixed some major bugs. First, the ACL code had a major bug where it neglected to look at the enumerateperm permission! Stupid error on my part, it is now fixed. Where are those regression tests again? If I only had more time...

I also removed the last remaining disgusting hack from the ACL code. You can now call your data tables whatever you wish - no need to prepend "data" or "private" onto the column names themselves. Ah, that feels much better. I implemented a new table called the datatypes table that handles all of that for you - you just register your table and all of its columns by adding a new row in the datatypes table with the permissions that each respective column needs in order for access to occur - "base" (for basereadperm and basewriteperm), "normal" (for readperm and writeperm), and "private" (for privatereadperm and privatewriteperm). All of the changes have been committed to CVS on www.openflock.com.

I really hated that old hack - it reminded me of programming in FORTRAN - where variable types could be defined by their first letter. Yuck! I'm glad that this is all plug-and-play now - you could actually pop the ACL code into a current DB schema and have ACLs working with only a small amount of programming effort.

Digital Cameras

Many thanks to the folks who sent suggestions regarding good digital cameras in the $1000 price range. I'm now looking at two models: Nikon's CoolPix 990 and Olympus' C-3030 Zoom. Both have features I like in a package I like (I'm not looking for another bulky SLR) at a price in my range - about $850. Anyone know/like/hate these cameras?

Whew! It's been a long time since I've posted last here at Advogato. Long time, no see!

Group Calendaring

ALS is coming up soon. I have a paper to deliver at ALS on OpenFlock. this has proven to be a very positively motivating deadline for me (read: It gets me off my ass to work on OpenFlock). I've been a busy bee. I've got the main OpenFlock website running, along with email addresses, etc., and I've also got the GCTP (Group Calendaring Transport Protocol) site up and running too. Not everything works, but it's not bad. PHP is cool.

Access Control Lists

I never really worked on a system that implemented ACLs before, having saved myself from VMS and NT by working on all this open source stuff... So, when I finally figured out that I needed ACLs in order to support the GCTP primitives, it really threw me for a loop. After having many discussions with Tridge, Luke, DaveM, Rasmus, and others, I finally got it down in my head what needed to be done - we needed ACLs for various information inside of a SQL database. For example, I have private data inside of an appointment, and I want to make sure that only I can see that private data, but that other people in my group can see my calendar (even though they can't see the private info). For people outside my group, I want to make sure that they can see my time as free/busy, but I don't want them to see the actual appointment titles, for example. And for people whom I don't trust, like someone outside my company, or a service like a ticket web site, I don't want them to get any access to my schedule at all, but I do want to let them request appointments with me...

This level of access control (not to mention the whole concept of proxies, like administrative assistants) is only doable through ACLs. I can't think of a better, less complex way to create and maintain these relationships. The problem was, "How do you implement ACLs on a SQL database?"

So, I created a package that implements ACLs over any SQL table or tables that you desire. It even has an OOP interface to make life easier on the programmer. The idea is to create an abstraction that automatically handles the details of a SELECT or DELETE or UPDATE or INSERT call over a table that has ACLs associated with it. Each row's ACLs must be compared to the current secrity descriptor (the permissions that I currently have) and decisions are made on a row-by-row basis, but the user never sees this - he only sees the data that his security context allows him to see. There are ACLs for each table, too, so that you can define who gets to do what to a table, like what person or group of people gets to add new users and groups, for example.

I call it AclDB, and it is included as a class with OpenFlock (see the website for details on getting CVS snapshots, if you're interested). When I get it working well and documented a bit, I'll probably turn it loose on its own and do something like submit it to CPAN.


Almost 8 months old. Unbelievable. I'm planning on getting a digital camera for my birthday so that I can take lots more pitures of her and put them up on the web. I hear that the Olympus cameras are good. Any recommendations for a serious photographer who loves the auto features but also likes to take control now and then? Something in the ~$1,000 price range would do...

Group Calendaring

Not much new work on OpenFlock this weekend, but I did fix the anonymous pserver access to the cvs tree so that folks can see the pre-alpha work again! Turns out that the code Tridge wrote to rsync the CVS tree into the chroot() jail used a new rsync flag - and I was using an older version of rsync, so it was failing silently without copying over the changes. Rrr. Fixed it, though. Things are getting close - I just want to have a good, working client that people other than developers can use before releasing the alpha code.

PCMCIA, Wireless Networking, and Device Naming

Congratulations to Corey Thomas and David Hinds for finally fixing the ray_cs driver in pcmcia-3.1.15! Now at least cardctl eject works properly. Even though cardctl resume doesn't work right, at least I can use cardctl eject; cardctl insert to reinitialize the card after an APM resume event. I sent off a patch to them so that you can now have the Aviator wireless card come up as raycsX instead of ethX. This makes life much easier because I can unambiguously know what the card will be called no matter what configuration I have the computer in.

Group Calendaring

Ah, I love fixing bugs. Well OpenFlock is getting really close to its first public alpha. I've got the server pretty much working the way it is supposed to, although it is missing a number of advanced features (like authentication, doh!) and I finally got the GCTP client library almost there. Currently, it is still more of a toolkit than a real set of client programs, but I have created a simple 10 line client that connects to the server and creates appointments, checks schedules, etc.

Just a little further to go to actually have a client that is usable - and then it is only a few steps from there to having a web-based client...

Then all I have to do is write up a formal description of the GCTP protocol so that others can create fully interoperable group calendaring clients and servers too.

11 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!