Category Archives: General

DYI Airport Express

Ha! Recipe:

Ingredients

  • An old powerbook with a mostly broken screen and a very broken hinge (priceless).
  • A long wire to the stereo (10$)
  • A short wire the printer.
  • Ethernet cable to the household hub.
  • VNC.(free)
  • Web Remote, lets you control iTunes over the web. (10$)

Instructions

  • Plug in power adaptor
  • Install OS10 from scratch, wiping disk clean.
  • Plug into Ethernet
  • Run short cable to printer
  • Run long cable to stereo, considering selling CD player.
  • Install VNC. So we can work on machine without leaving our chair.
  • Enable print sharing, so we have a print server.
  • Enable file sharing
  • Copy all the music (mp3 etc.) into the household onto this machine.
  • Load mp3 into iTunes
  • Via iTunes preferences enable iTunes sharing, so we have a tune servers.
  • Install Web Remote; have it start up at reboot.

When you done you can play your iTune’s library on the stereo; just like you’d bought an Airport Express. If the old powerbook has a airport card you can also let is act as a wireless base station.

I gather some people can get their powerbooks to keep running even when the lid is closed. That didn’t work, dependably, for me. (Did you know there is a magnet on the lid of most of the powerbooks; aligned with the mousepad?)

You can print from OS9 to an OS10 printer if you create on the OS9 machine a desktop printer that uses the right lpr server and queue.

I couldn’t get Darwin to run on an olde iMac; maybe later. I was doing something analogous on a FreeBSD box; but this was really easy.

Teacher

From the amazingly affecting blog of a first year teacher in NYC (in this episode the school system hadn’t managed to pay her yet).

“Allegedly, I’ll be getting an “emergency” check on Tuesday (Monday is Yom Kippur and the schools are closed), but I’m living through this three day weekend on the “State Quarters” that I’ve been saving since I applied to be a Teaching Fellow last October. At the grocery store this morning, the man behind me in line wanted to know if I’d been to Atlantic City, since I was paying from a paper cup full of quarters. I had saved those quarters to use for teaching; I didn’t spend a single one that came into my hands in 10 months. Good thing, too, I guess. After making sure that I saved two of each in the holders I have (a map and a folder), I had a bit more than $20 which will hold me through the weekend and get me to work on Tuesday.”

Start at the beginning or start with the latest but do read it. It will be interesting to see how long she can keep it up before the institutions around her find a reason to shut her down.

Note: I deleted this posting from 2002 by mistake; spam! So I’ve reposted it. I apparently don’t understand the “edit timestamp” feature in Word Press; so it looks brand new.

Choose me Matie: get things done or it’s a flogging

I suspect that it’s September because I notice that a number of people on my blog roll have been posting about Getting Things Done; a fun little book.

Getting Things Done, or GTD as it’s sometimes referred to, is one of a class of business self help books. Boots designed to sell the consulting services (and related paraphernalia) of it’s author. Selling is easier if you understanding the demand your filling. For GTD the demand it not “I need to get things done!” it’s “I’m suspect I’m not getting the right things done. My life is out of control. The stress is driving me crazy. Excuse me while I scream. Damn that didn’t help either.” People are, of course, interested in getting things done; but they are far more interested in getting control over their anxieties.

The GTD solution to the anxiety problem is Zen like. Empty mind = low stress. This isn’t a bad plan, but it is a very good target market!

The GTD means to that end is to move the the pile of anxiety producing stuff out of your noodle and into his system. Clever, he just happens to have the tools for that for sale.

I love his system, because it reminds me of the design of software I’ve written; in particular a real time control system’s master scheduling module. I enjoy mapping all the elements in his system to the elements in such software systems.

For example he has an interrupt queue. New information is queued up; he calls that the inbox. With reasonable regularity our automaton comes around and drains the interrupt queue. In a software context interrupt processing is very high priority, which means it locks out all kinds of other presumably useful work. To avoid the risk inherent in that lock-out you make a rule that time limits the interrupt queue processing. N units of time per item say.

In the GTD system you shuttle them off into other data structures: the trash, the do soon list, the someday maybe list, etc. etc. Limiting the time/resources devoted to the input queue is a big help in staying sane. Presumably once things move into the other piles they will get dealt with more rationally than they can at interrupt.

There are behavioral reasons why a human is not well suited to this plan. The input queue is the source of positive and negative reenforcement. For that reason we tend to pay it close attention. Each time the mail drops thru the slot it creates the a bit of fisson. A letter from a long lost love? A card from the IRS? One reason we all hate spam with such a passion is that it abuses and degrades all this. Oh joy! A credit card offer!

It took me a while to turn this model around and realize that my correspondents all have similar N-second processing rules on their input queues. If I wanted to affect their behavior I had to fit my inputs inside that envelope. Some correspondents can only handle a one sentence email; others can swallow an whole paragraph!

I notice that some of my acquaintances have compiled this insight so deeply into their behavior that they tend to only generate very very short missives.

One of the ways I remain confident that my blog is for my pleasure and not customized to the pleasure of my readers is how I totally ignore this insight when writing it.

There is a risk with the GTD system. While it is a very good idea to move the anxiety producing stuff out of one’s head, sadly this just results in creating anxiety around the maintenance of the piles. People adopt the system with great optimism. Later they discover that the meta-work of keeping it up and running, well, isn’t something they actually do. In software systems I’ve seen failures of like that were the master scheduling loop fails because it doesn’t actually get any cycles, but then I’ve also seen cases where it fails because it gets most of the cycles. One of the ways that GTD fails is pile management: too many piles, too much anxiety about the piles or too little.

My current manifestation of GTD is a private Wiki. I have a half dozen input queues (email, phone, a wiki page, a physical inbox, etc.) and I try to shift things out of them and into the Wiki. Wiki pages become the piles. I then try to at least occasionally review the higher priority piles.

Another place where I see strong analogies between the GTD and software is in the object oriented elements. In software we have processes and in his system there are projects. He has physical folders that capture the supporting materials for that project; I have a page in the Wiki and sometimes I also have a physical folder. Piles, folders, etc – all in my wiki.

This is another place where the GTD system breaks down for people. It’s very hard to figure out how granular things should be. For example I have a page for my glasses and an associated folder with my prescription in it. Is that too fine? Probably not, because at least I haven’t lost the damn prescription. But then should I have a folder for that 12% off coupon from Staples or should it go in the folder of all coupons – or possibly coupons are just too much anxiety.

I tend to create objects in my system for things and for relationships. This is another lesson I learned from software – i.e. that the most critical data structures are often the links between objects and not the objects themselves. So for example there is one for entry for the car, and one for each of the credit card relationships, etc. It’s hard to think of those as projects, but they certainly do a great job of generating things to do. If you don’t find a way to tame the list they are generating your reward is more head clutter. “Did the car get inspected?” “Did that charge-back show up on the next bill?” etc.

I have one more trick. I love this trick. I learned this years and years ago from the original version of Hypercard. One of the example stacks in the original Hypercard was for something called a lateral file. I have one. Each time something comes in that needs to be filed I grab a folder and stuff it into the folder. I then write an number on the folder and put it into the lateral file in numeric order. I then add an entry describing it to a page in the wiki that tells me what’s in the lateral file. When I want to find my glasses prescription I go to the Wiki, I do a search for glasses. That finds the number and I pull it from the lateral file. This works because it lowers to nearly zero the cost of “get this filed.” It raises slightly the cost of “find this.” But most importantly it avoids the tar pit of “maintain appropriate ontology for the problem domain.”

Almost all of GTD is about finding the sweet spot of where one is organized at a reasonable costs. For example he spends a surprising amount of time in the book talking about the physicality of his system. What kind of folders to use, how to label them, etc. My perception is that these bits of advise come out of his observation of his clients and what rituals cause their coordination costs to rise for no benefit. Some of his advice of this kind seems wierd – for example he’s a huge fan of having a label maker for your folders. I don’t know why, maybe his clients have horrible hand writing or maybe it raises the perceived value of the folders and helps assure their long-term maintenance/survival.

Of course Kieran Healy pointed out the key to getting lots of stuff done. Prioritize your work! Recognize what the absolutely most important thing to do is! Then leverage the anxiety that produces so you keep you focused on other less important work. This will help to assure that lots get done. Works for me! Works so well that it makes me suspicious that the guild of project managers spends all that time creating anxiety just to tap into this powerful secret.

If my system worked then my tickler file or calendar would have reminded me that this was talk like a Pirate day. Instead my honey told me. The GTD system has no mention of the role of one’s honey! That can’t be right.

Clubs – privacy services

The first time I saw bloom filters used was in a spelling corrector; they provide a quick way to assert if X is has any chance of being a member of a set; so they make a good fast front end in lots of validation situations.

The most recent time I saw bloom filters suggested from something was Loaf. The core idea in Loaf is that there is a lot of useful information in people’s address books that could help filter spam. The challenge is how to capture that information so it can do good in the world while protecting the privacy of all concerned.

I wrote a critique of Loaf here. The problem with Loaf is that you can gain some knowledge of what’s in your correspondent’s address books; and even some is probably too much. I just updated that posting to point out that there is a work around for that. Here’s the work around.

I am a members of a club. I reveal my address book’s bloom filter to the club. The club can then strips off my identity and reveals the filter. Users of the filter don’t know it’s mine, they only know that it’s the filter of some random club member. If the trust distribution over members of club is good enough – large and generally trustworthy – then the collected filters of a mess of members can go do useful work in the world.

This is similar to the idea of having a club generate an anonymous persona for a member, mentioned in this posting. Both ideas allow an individual to gain some anonymity by getting lost in the crowd of club members. In that sense it’s similar to the way that TOR provides anonymity by letting you fold your internet traffic in with the traffic of a crowd of other users (i.e. members of the TOR using club).

The operation the club is performing on my address book’s bloom filter in the example above can be generalized. I pass a lump of data to the club along with proof of my membership in the club. I ask the club to sign the data and state on that signature; treat this data as having been signed by some member of the club. That strips off my identity. If I didn’t want to strip off the identity when then I could have signed it my self, possibly using keys I got from the club’s certificate authority.

This becomes a privacy service of the club.

Consider this scenario. I join a library, anonymously. They give me a membership card – presumably some digital object signed by the library. I didn’t tell them who I am, or where I live, or etc. etc. I really value my privacy! But the library isn’t willing to let me borrow any books. They need to know two things first. Do I live in town and will somebody they trust vouch that I return my library books. So I go to the town’s privacy server and have it add an assertion to the library card that says “lives in town” and I go to my university’s privacy server have them add an assertion that says “four years a student, returned all books.” My true identity is still not revealed on the library card; but now they know all they need to know and they are willing to grant me the right to borrow books.

php domxml misery

Argh.

So I could have some fun; I rebuilt my php4 with-dom, (with-zlib, with-iconv), and the tidy extension via pear (with just the right automake, et. al. – of course). I can tidy up stuff I fetch. I can build dom trees and convert them to text. I can parse stuff, I know because the parser complains about malformed inputs.

But there is no sign that it’s returning much that’s useful from this parsing. It’s as if I have some configuration toggle set to “don’t bother to build the dom tree.”

<html>
<body>
<?php
$doc = domxml_open_mem('<?xml version="1.0"?><a><b/></a>');
echo "<hr/><pre>",htmlspecialchars($doc->domdocument_dump_mem),"</pre><hr/>";
?>
</body>
</html>

That displays two horizontal lines with nothing betwix. The $doc object has assorted slots; no sign of substructure.

Argh.

Blooming Notification Networks

I’ve been toying with ideas around an update notification network that would:

  • take notifications of updates from readers and writers and deliver them to readers,
  • reduce the cost of polling for readers and writers,
  • shorten the time it takes for updates to get to the readers, and
  • avoid concentrating power in hubs while leveraging and giving value to the masses

Two corners of this design space I’ve been kicking around in recently.

  • How to maintain privacy for readers.
  • How to deal with bad actors.

Bloom filters might provide a scheme to help deal with the privacy problem; but how they interact with the class issues is hard to think about. Each member of the network would then publish the bloom filter bit map of his interests and his peers would notify him when they saw updates that matched that filter. Notification rattle around in the network only among those peers that who’s filters intersect for that notification’s bit settings. A peer in the network can set additional bits either to protect his privacy, but also because those bits reflect the interests of his peers. A voracious reader, like the elite readers, can fill in all the bits. Notifications might not even mention the resource that was polled, instead they just enumerate the bits effected.

A cool insight about the bad actors came out of a chat with Ben Laurie. It’s not really the quality of the participants you care about. You care about the quality of the notifications. That’s the same problem we find in open source projects – where we take all input and then strive to let thru the good stuff. In this case you could treat notifications injected into the network as rumors that something might be new and then let some process in the network promote that into an assertion that something’s changed. For example you might put a quality value into the notification; decaying that quality as it cascades thru the net; amplifying that quality when ever a peer acts upon the information and asserts that it’s correct. That could have nice synergies with the need for a mechanism that assures participants in the network that the resources they care about are being regularly monitored; i.e. the watch dog problem.

I’m not really satisfied with the bloom filter approach to the anonymity, it looks like it has problems of many kinds – but it’s a fun idea anyway. Similarly I doubt that the notification QA approach is robust against really committed bad actors.

All this is an interesting window into the class problems. The elite often solve the anonymity and bad actor problems using business agreements, lawyers and the courts. That allows them to punt on designing the protocols to solve them. That tends to force the masses to go thru bottlenecks created by the elite. The function of that bottleneck is to have the elite dude vouch for their not being a bad actor while laundering their traffic (hopefully) to given them some anonymity.

Helping Giants

Thinking around the efficiency problems for blogs, or URI in general. Here two things that don’t look too hard to do (one about polling, one about diffs); along with some clarification about the populations that yearn for these improvements.

First let’s block out some givens. There are content consumers and content providers. Two populations, call them readers and writers. Then we have all the stuff in-between them that makes it work. We would like to make that stuff more efficient; presumably so life is better for those two populations.

The readers and the writers are power-law distributed. You can make a cartoon of that. Each population has its elites and its masses. There are billions of readers, billions of writters – most of them very low volume – that’s the masses. There are a much smaller number of elites. A few voracious readers like Google, or Technorati. A few very popular and prolific writers. Live Journal is a good example in the blog space. For the purposes of this discussion I’ll just ignore the middle classes and the scale free networks that really describe the situation.

With that picture – two populations broken into elite/masses – it becomes clear that the stuff in the middle might be broken out into four design problems: {reader,writer}*{elite,masses}. It certainly helps to generate cases to think about. For example the elite readers yearn for a way to lower to the cost of polling all the masses of writers.

So one simple idea is to just attempt to address the polling problem. Do something so that it is easier to know if a site’s been updated. Building a distributed system that provides a standard where all parties can rendezvous and collaborate about notification of changes wouldn’t be that hard a design problem. But is sufficiently complex to take some real work to get it right. For example it would be a bad thing (I think) if that design encouraged a single notification hub owned by one entity.

I suspect that elite authors and the elite readers are the only ones who really care about solving the bandwidth problems at this point; or at least they stand to gain the most from getting the problem solved. I started thinking that after it occurred to me that the current bloom of interest in these problems came out of Microsoft deciding to stop providing full feeds for a mess of blogs they host. I found myself thinking “Oh please! What they can’t afford the bandwidth? Bandwidth is practically free. … hm. I bet they are really just trying to get those reader eyeballs to come back to their site.” Who knows if all that is true or not, just a though in my head, but it’s clear that you need a lot of readers before you start finding the bandwidth problem all that serious. My blog is in the top .5% of all blogs and I run it on a little DSL connection off a discarded computer in my basement.

In some standardization situations when you set out your four boxes you discover that most of the benefit of introducing a standard is captured by fixing the elite to elite exchanges. That happens when the elites mostly exchange with each other. That’s not the case in this scenario – at least I don’t think so. It would be very interesting to see some data about that for various subsets of the reader/writer markets. Microsoft’s misery with their developer network blogs is a particularly ironic case study though. Developer networks are all about large platform vendors creating relationships with masses of small developers.

Well so in thinking about the bandwidth problem it seems to me that there is one simple hack I’ve not seen suggested so far.

Just add a new encoding type. Clueful readers write “Accept-Encoding: gzip” in their requests and responsive content providers then act on that to reduce bandwidth. In addition clueful readers do conditional gets and include an ETag so that if the resource hasn’t changed at all then they can get back a very efficient (i.e. practically empty) response. What if the elite readers started doing: “Accept-Encoding: gzip, x-diff-from-etag”?

Ah, but I hear you say. “That will never work, we’d have to revise all the entire installed base.” Well yes, if we wanted the entire installed base to get the benefit of this efficiency improvement. But what if we only really care about the elites? For example if Technorati (an elite reader) started doing this and Typepad, Live Journal, MovableType and WordPress all started responding appropriately it would have a huge impact on the total bandwidth being consumed.

Of course we could spend a few years negotiating exacltly what “x-diff-from-etag” means, and how many variations there are. While that is the usual approach I suspect in this case somebody could hack up a proposal that everybody could sign onto pretty quickly. You’ll notice who I think should fund that labor. It’s simple enough that it is unlikely to be biased toward one of the four classes of users ({reader,writer}*{elite,masses}).

Crucial Decision Breakdown

A little more on Irving L. Janis’s work on why competent capable groups focused on some crucial decision end up having a fiasco.

His diagnosis of the what leads to a premature exit from the vigilant problem solving at the feet of arousal. Like the three bears the group fails because it is too hot or too cold. The problem of too cold is a form of organizational blindness. The group fails to appreciate the necessity of additional vigilant problem solving. The overheated organization pops out of it’s vigilant problem solving in a state of emotional panic of one form or another. His observations of real word cases suggest that there are three classes of over reacting: cognitive, affiliative, and self-serving. Digging further in he then enumerates the “personality deficiencies” that trigger these too hot/cold exits from vigilant problem solving.

I. Too Cold

1. Lack of Conscientiousness
2. Lack of openness
3. Cool, calm, detatched, coping style
4. Chronic optomism concerning stablity and low vulnerabity of the organization

II. Too Hot

IIa.Cognitive (i.e. resource limitations)
5. Chronic low self-confidence or sense of low self-efficacy
6. Chronic pessimism concerning the organization’s ability to supply essential resources for solving complicated problems

IIb. Affiliative (i.e. loyality issues)
7. Strong need for social approval
8. Strong neeed for power and status
9. Chronic apprehensiveness about ruthlessness of other powerholders in the organization with supporting beliefes about their readiness to inflict retaliation
10. High dependency on a cohesive group of fellow members (executives)

IIc. Self serving, emotive, egocentric
11. Lack of conscientiousness
12. negativeism or hostility toward the organization
13. Low stress tolerance
14. Lack of percieved control and other components of low personality hardiness
15. Ambivalence toward he organization: it deserves loyality but is weak and vunerable
16. Habitual externalized anger-coping style
17. Chronic hostility toward opponents

He’s observed, it seems entirely credible to me, that each of these four major and 17 minor failure triggers leads to breakdowns of a particular kind. For example if the group becomes all hot and bothered about it’s lack of resources to think thru a critical problem it will respond by selecting a solution that emphasises that aspect of the problem. It will “solve” the problem using simple “rules of thumb” or some other coping mechinism for that kind of scarcity.

Previous post on this: How to have a fiasco.

Guardians

When groups reach decisions in tough problem spaces it can be hard to get everybody in synch with the choice that’s been made. Sometimes this leads to folks wandering (even boiling) off. That almost always happens in an Open Source projects in the inter-version transitions. Sometimes it leads to the group splitting up. This is why we have so many churches in the US.

Mind guards (a community maintainance role) often act to help temper these forces. As the group reachs a decision the mind guards fan out to help hold everybody to the course chosen. This can like all other community maintainance roles go bad. A community who’s mind guards are too draconian will be unable to engage in any vigourous problem solving.

Ostracizing is another pattern. When groups undergo a bumby period and it become clear that folks are going to boil off surviving portions of the group will sometimes engage in a massive amount of shunning; presumably so they can get on with. Again this can go very badly.

Against this backgroup you get a complementary process involving the exit/voice/loyality dynamics of the individual group members. As the vigourous problem solving comes to closure the group collectively turns down the voice knob, turns up the loyality knob which leads to some degree of exiting by the indivuals. This is hard work for the individuals. On the loyality front they have to labor to strengthen loyalities in the face of personal doubts; or conversely they have to go thru the grief of tearing down existing loyalities. On the voice front they have to shift from a collective dialog about the problem at hand and shift to a personal dialog about enter/exit the choice that’s been made.

There is a tragic variation of the guardian pattern. The new member arrives at the door of the group and makes a few statements. The groups guardian immune system reacts. The pattern I’ve noted is how rare it is for the reaction to be played out privately. Why do the guardians choose to publicly scold or shun new commer rather than privately outline the nature of the local customs?

One, reasonably functional, answer is that they don’t want the public statements of the new commer to reopen old arguements or pattern bad behavior for others. If that’s the goal a short critique would do the job. But often the critique I’ve observed is strong, even vitrolic.

My guess is that the guardians in this case are revealing something about their own inner live. The level of conflict they have with the issue still. The new commer’s actions didn’t arouse them; they were already aroused. The new commer just provided a hook for them. It’s an oportunity for them to demonstrate their loyality, to prove that they don’t voice the ‘wrong’ answer. Tragically this tends to send newcommers running. It’s an unintended consequence that the guardian’s over aroused response on issue X leads to the group growing insuallar re. the entire rest of the alphabet.