cyber-dojo dates

If you'd like me to run a private cyber-dojo for you please email me. I love travelling (especially to places where you can fly-fish for atlantic salmon) and meeting new people. There is often no charge but I do ask you to cover my travel expenses.

past cyber-dojos

I no longer keep this list updated...

the first cyber-dojo Raspberry Pi

Here's the first Raspberry Pi raised from cyber-dojo donations :-) Everything works so it's off to my old school in the morning.
In case you're thinking "where is it?" (it's only credit-card sized) it's to the right of Lightning McQueen and Tow Mater, between the keyboard and the monitor with an aptly raspberry coloured ethernet cable attached. Here's a close-up.
And here's cyber-dojo running in Midori. More Pies have been ordered and should be arriving in the next few days. Many thanks for your donations. Keep them coming!

Cadora salmon

Today I have mostly been fly fishing for salmon on the River Wye at the Cadora beat. I missed a good take on Cadora pool on my fifth cast! About half and hour later I had another take. This time on Little Run. Didn't miss this one :-) Cock fish, quite thin, measuring 34 inches from nose to tail. I'm guessing 13lb ish. After taking my hook out (a Cascade) I noticed another fly hook with some line attached! It took a while to recover before swimming away - perhaps it had just smashed someone else up!?

holes

is an excellent book by Louis Sachar (isbn 0-439-12845-5). If you've not seen the film the story revolves around a boy called Stanley, whose offered the choice of going to jail or going to Camp Green Lake. He chooses the lake. Each day he has to dig a hole five feet deep and five feet in diameter.
As usual I'm going to quote from a few pages, particularly the ones about digging the holes. They remind me of refactoring, and the pain of introducing a test-seam into legacy code:
There is no lake at Camp Green Lake.
Using all his might, he brought the shovel back down onto the dry lake bed. The force stung his hands but made no impression on the earth.
...
He noticed a thin crack in the ground. He placed the point of his shovel on top of it, then jumped on the back of the blade with both feet. The shovel sank a few inches into the packed earth. He smiled. For once in his life it paid to be overweight. He leaned on the shaft and pried up his first shovelful of dirt, then dumped it off to the side. Only ten million more to go, he thought, then placed the shovel back in the crack and jumped on it again. He unearthed several shovelfuls of dirt in this manner, before it occurred to him that he was dumping his dirt within the perimeter of his hole.
The digging got easier after a while. The ground was hardest at the surface, where the sun had baked a crust about eight inches deep. Beneath that, the earth was looser.
Though he tried to convince himself otherwise, he'd been aware for a while that his piles of dirt were too close to his hole. The piles were outside his five-foot circle, but he could see he was going to run out of room. Still, he pretended otherwise and kept adding more dirt to the piles, piles that he would eventually have to move. The problem was that when the dirt was in the ground, it was compacted. It expanded when it was excavated. The piles were a lot bigger than his holes were deep. It was either now or later. Reluctantly, he climbed up out of his hole, and once again dug his shovel into his previously dug dirt.
Stanley kept digging. His hole was almost up to his shoulders, although it was hard to tell exactly where ground level was because his dirt piles completely surrounded the hole. The deeper he got, the harder it was to raise the dirt up and out of the hole. Once again, he realized, he was going to have to move the piles.
As he dug he was careful to dump the dirt far away from the hole. He needed to save the area around the hole for when his hole was much deeper.
"Well, the first hole's the hardest," Magnet said.
"Well, the first hole's the hardest," said Stanley. "No way," said X-Ray. "The second hole's a lot harder. You're hurting before you even get started. If you think you're sore now, just wait and see how you feel tomorrow morning, right?" "That's right," said Squid. "Plus, the fun's gone," said X-Ray.
"You're right," he said to X-Ray. "The second hole's the hardest." X-Ray shook his head. "The third hole's the hardest," he said.
That meant he'd dug forty-four holes. Stanley dug his shovel into the dirt. Hole number 45. "The forty-fifth hole is the hardest," he said to himself. But that really wasn't true, and he knew it. He was a lot stronger than when he first arrived. His body had adjusted somewhat to the heat and harsh conditions.

dig the trenches before the bombs start falling

If I write code without tests I will end up with low quality code. Worse - I'll discover that having written code without tests I've naturally ended up with a codebase that resists being tested. When this happens the codebase is not being 'malicious'. That's just that way it is. That's exactly the way I grew it. Testability isn't something that appears by magic. If I want a codebase to be testable I have to write tests for it as I go along. So that I find out just how testable it actually is and steer accordingly.

Sun Tzu put it very well in The Art of War when he wrote:

Plan for what is difficult while it is easy, do what is great while it is small.


out of inodes!

A huge thanks to everyone who tweeted about cyber-dojo donations going to buy Raspberry Pies for schools. It caused a big surge of use on the site :-) Which unfortunately brought the site down :-(

At first I thought the 'No space left on device' message meant I'd run out of disk space. However a df revealed plenty of 1K blocks still available. The problem was not lack of disk space it was lack of inodes! This is because cyber-dojo uses a lot of files (every press of the run-the-tests button results in a git commit). I put a temporary fix in place by recovering a few thousand inodes. That gave me enough time to put a better fix in place - some scripts to zip and prune dojos based on both their age and total number of traffic-lights. Successive prunings reclaimed 231,941 inodes which should last a while. Sorry for the glitch.

raising money for Raspberry Pies

I built cyber-dojo to help promote deliberate practice of test-driven-development at the team level. It's free (beer and speech), there's no login or registration and there are no adverts. It's hosted in the cloud and, until a few moments ago, its home page had a small donate button to help pay for the hosting.

After hearing Eben Upton's keynote at the Agile on the beach conference I've decided that from all previous and future donations will go 100% towards raising money to buy Raspberry Pies for schools.

Please help publicise this in any way you can! Thank you.

Gus and the breakfast police

At breakfast on the second day of Agile on the beach I was queueing behind my friend Gus Power. Gus asked for two sausages and was told he could only have one. I knew what he was about to say next so I intervened in the interest of trying to keep the queue moving at some speed slightly faster than stopped, and said "And you can't trade one item for another either".

So Gus had just one sausage. And Odette was not allowed a fried egg either - but could have scrambled egg. I thought for a moment and, when it was my turn, I said - "I'll have the maximum I can have of everything please." I got one piece of bacon, one scoop of scrambled egg, one scoop of beans, one scoop of mushrooms, one of those reconstituted potato croquette things, two pieces of toast, two individually wrapped "bricks" of butter, two plastic containers in the shape of a miniature thumb-sized bath containing marmalade, and... a sausage. I walked over to where Gus and Odette were sitting and joined them. I gave the sausage to Gus, explaining that I didn't want most of the food - but I did want Gus to have two sausages.

The point of this story is not to whine about the conference. It was a really excellent conference. The breakfast staff usually serve students which may have something to do with the somewhat draconian rules. The point is that overly rigid rules foster bureaucracy and generally end up self-defeating. The intention behind the rules, to avoid waste, is laudable. But rigid rules and their associated lack of trust in both the servers and the served simply creates more waste. A system like that invites people to live down to its expectations.

Agile on the beach

Last week I attended the excellent Agile on the beach conference in Falmouth, Cornwall. I'm really proud to have been the consultant who provided most of the technical-tdd agile training that has helped create 50 new jobs in Cornwall.

I thought Schalk Cronjé's talk was excellent. So was the one Ed Sykes did. And Seb Rose too. The highlight for me was Eben Upton's endnote. Inspiring. I'm going to visit my old secondary school and see if they want half-a-dozen Raspberry Pies. And I'm going to buy one for myself and put Cyber-Dojo onto it. I ran a double cyber-dojo session at the conference and several teachers said they wanted to run cyber-dojos as part of their course - fantastic.

frozen names

A radio phone-in caller reminded me of the Label Law yesterday - the name of the thing is not the thing. The caller said his local shop is run by an Indian gentleman who everyone calls Ray. For 15 years the caller has called him Ray. But, he recently discovered, his name is not Ray. It's not even close. He explained that everyone calls him Ray because the previous owner of the shop was called Ray. At least that's what he's been told. Maybe the previous owner was called Ray because the previous previous owner was called Ray!

It's a bit like sixth form college. That's the school you used to go to after you'd finished five years at secondary school. But in 1990-ish they changed the numbering scheme. Now the year number is the number of years you've been in education. One for your first year at primary school, eleven for your last year at secondary school. So now sixth form college is where you go after you've finished year eleven. But it's still called sixth form college.

I'm also reminded of something Jerry Weinberg wrote in Experiential Learning - Vol 3 Simulation.

Rules are frozen solutions. Rules are solutions to yesterday's problem, carried forward to the present, but usually without reference to the problem they were intended to solve. Each rule is really an "if-then" rule, but the "if-then" part is seldom stated.


If you don't know why you're putting eye-of-newt into the cauldron then you're in trouble when the magic potion stops working. And if you don't understand why eye-of-newt works, you'll probably be afraid to change the recipe.

practice and observation



I want to get better at speycasting. I need to know how I'm currently doing and what aspects of my casting to pay attention to next. Those are exactly what I don't know. To make rapid progress I need the help of another person - someone who is both an expert at speycasting and also an expert at teaching speycasting. In my case that person is Gary Scott (who took this short video).

I've no doubt there are masses of faults in my casting technique. That's irrelevant and not helpful and does not deter me at all. What counts is working towards some improvement in the next video.

refactoring in the shower

Some houses are populated only with teenagers. When one gets in the shower they notice the plug-hole is clogged with horrible gunk: hairs of indeterminate origin, bits of soap, spit, bogies, general fluff (like the stuff that grows in your belly button), congealed shower gel, etc., etc.,. But they don't clean out the plug-hole. After all, they didn't make the mess. When they've finished they're cleaner. But only slightly. And they don't clean the plug-hole. Partly because they then notice there's no towel. They curse the other teenagers as they walk around the house naked, dripping water as they go, looking for anything vaguely absorbant they can commandeer.
After a while the plug-hole gets so gunked up tackling it becomes a truly repulsive task. It actually clogs the plug-hole. The shower fills with water - it starts turning into a bath! But it wasn't designed as a bath. Splashes leak over the lip of the door. Water collects under the shower base where it's not visible. Not at first anyway. After a while the ceiling below the shower starts to discolour in a tell-tale circular pattern. But it goes unnoticed. At first anyway. Soon the ring grows so large it's unmissable. But it's ignored. After all, it's a full-scale call-the-plumber-and-tiler job now.

Some houses contain a mixture of teenagers and adults. When a teenager showers sometimes the plug-hole is gunk free and there's a dry towel but sometimes the plug-hole is gunked up and there's no dry towel. They can't quite understand this. But they never clean the plug-hole and never put up a clean dry towel. When an adult showers sometimes there's a build-up of plug-hole-gunk and no dry towel. They know the previous shower-goer was a teenager. Sometimes there's no plug-hole-gunk and there is a dry towel. They know the previous shower-goer was an adult. When they've finished they clean out any plug-hole-gunk and put up a new dry towel.

Some houses house only responsible adults. Whenever they start to shower they don't notice any gunk around the plug-hole because there never is any. And there's always a fresh clean towel. After they've showered they clear any plug-hole gunk and put up a new dry towel.

my first salmon on the fly

Catching, reviving, and releasing my first ever fly caught salmon (from the River Tay at Dunkeld) :-) A huge thank you to my spey casting instructor and guide (who took the videos) Gary Scott, a world champion caster and a fantastically good teacher.





Some days you remember all your life :-)

amplify & dampen

You know how sometimes the universe seems to be trying to tell you something? I had one of those experiences the other day. I was looking through my notes from the ALE2011 conference keynote Dave Snowden gave. I wrote

You know things differently in ordered-systems compared to complex-adaptive-systems. In complex adaptive systems you need discipline, you need safe-to-fail probes. You won't know the effect the probes will have. If the probes have a good effect you need to amplify them. If the probes have a bad effect you need to dampen them. Your strategies for amplifying and damping need to be planned ahead of time.

A short while later I was reading Surfing the Edge of Chaos and I came across this on page 93

The olfactory cells, which provide mammals with their sense of smell, delicately tune receptors to dampen out familiar smells and rapidly amplify receptors with new smells. This is the way the brain is alerted to new dangers or opportunities.

There it was again, amplify & dampen. I was sure this was a theme Jerry Weinberg had written about somewhere but try as I might I couldn't track it down. About an hour or so later I spotted a small red notebook on my bookshelf. I hadn't looked at it in over a year but for some reason I decided to pick it up. On the second page I looked at I'd written the following quote from Quality Software Management, vol 3, Congruent Action on page 95

A basic law of perception is that we tend to minimize small differences (tendency toward assimilation) and to exaggerate appreciable differences (tendency toward contrast). Thus, our perceptions make the world more sharply differentiated than it is, and we're a lot more alike than we are different.


no scaffolding means we're done

Suppose I'm doing the print-diamond kata in cyber-dojo in Java. I start with a test
    @Test
    public void diamond_A() {
        String[] expected = {
            "A"
        };
        String[] actual = new Diamond('A').toLines();
        assertArrayEquals(expected, actual);
    }
I slime a solution as follows
public class Diamond {

    private char widest;

    public Diamond(char widest) {
        this.widest = widest;
    }

    public String[] toLines() {
        return new String[]{ "A" };
    }
}
now I add a second test
    @Test
    public void diamond_B() {
        String[] expected = {
            " A ",
            "B B",
            " A ",
        };
        String[] actual = new Diamond('B').toLines();
        assertArrayEquals(expected, actual);
    }
and I slime again as follows
public class Diamond {

    private char widest;

    public Diamond(char widest) {
        this.widest = widest;
    }

    public String[] toLines() {
        if (widest == 'A')
            return new String[] { 
                "A" 
            };
        else
            return new String[] {
                " A ",
                "B B",
                " A ",
            };
    }
}
Like all techniques this approach has a certain style. In this case there is a small but definite asymmetry between the specificness of the tests (one for 'A' and another one for 'B') and the slightly less specificness of the code (an explicit if for 'A' but a default everything-else for 'B'). This is a style that is relaxed about the asymmetry, a style that emphasises this step as merely one temporary step on the path of many steps leading towards something more permanent. A style that recognises that code, by it's nature, is always going to be more general than tests.

But suppose you get hit by a bus tomorrow. How easily could your colleagues tell that this code was work in progress? Code that was not finished?

As an experiment I thought I would try an alternative style. One that is not so relaxed about the asymmetry. One that tries a bit harder to be more explicit about distinguishing code that's a temporary step still on the path from code that has reached its destination.

First I wrote a test that expresses the fact that nothing is implemented.
    @Test(expected = ScaffoldingException.class)
    public void scaffolding() {
        new Diamond('Z').toLines();
    }
I make this pass as follows
public class Diamond {

    private char widest;

    public Diamond(char widest) {
        this.widest = widest;
    }

    public String[] toLines() {
        throw new ScaffoldingException("not done");
    }
}
The scaffolding, as its name suggests, will have to be taken down once the code is done. While it remains, it indicates that the code is not done. Now I start. I add the diamond_A test (as before) and make it pass
public class Diamond {
    ...
    public String[] toLines() {
        if (widest == 'A') {
            return new String[]{ "A" };
        }
        throw new ScaffoldingException("not done");
    }
}
I add a second diamond_B test (as before) and make it pass
public class Diamond {
    ...
    public String[] toLines() {
        if (widest == 'A') 
            return new String[] { 
                "A" 
            };
        if (widest == 'B') 
            return new String[] {
                " A ",
                "B B",
                " A ",
            };
        throw new ScaffoldingException("not done");
    }
}
The scaffolding is still there. We haven't finished yet. Now suppose I refactor the slime (by deliberately duplicating) and end up with this
public class Diamond {
    ...
    public String[] toLines() {
        if (widest == 'A') {
            String[] inner = innerDiamond();
            String[] result = new String[inner.length-1];
            int mid = inner.length / 2;
            for (int dst=0,src=0; src != inner.length; src++)
                if (src != mid)
                    result[dst++] = inner[src];
            return result;
        } 
        if (widest == 'B') {
            String[] inner = innerDiamond();
            String[] result = new String[inner.length-1];
            int mid = inner.length / 2;
            for (int dst=0,src=0; src != inner.length; src++)
                if (src != mid)
                    result[dst++] = inner[src];
            return result;
        }
        throw new ScaffoldingException("not done");
    }
}
The code inside the two if statements is (deliberately) identical so I refactor to this
public class Diamond {
    ...
    public String[] toLines() {
        if (widest == 'A' || widest == 'B') {
            String[] inner = innerDiamond();
            String[] result = new String[inner.length-1];
            int mid = inner.length / 2;
            for (int dst=0,src=0; src != inner.length; src++)
                if (src != mid)
                    result[dst++] = inner[src];
            return result;
        } 
        throw new ScaffoldingException("not done");
    }
}
Now I add a new test for 'C'
    @Test
    public void diamond_C() {
        String[] expected = {
            "  A  ",
            " B B ",
            "C   C",
            " B B ",
            "  A  ",
        };
        String[] actual = new Diamond('C').toLines();
        assertArrayEquals(expected, actual);
    }
This fails. I make it pass by changing the line
        if (widest == 'A' || widest == 'B')
to
        if (widest == 'A' || widest == 'B' || widest == 'C')
Now I remove the if completely
public class Diamond {
    ...
    public String[] toLines() {
        String[] inner = innerDiamond();
        String[] result = new String[inner.length-1];
        int mid = inner.length / 2;
        for (int dst=0,src=0; src != inner.length; src++)
            if (src != mid)
                result[dst++] = inner[src];
        return result;
        throw new ScaffoldingException("not done");
    }
}
And it no longer compiles.
I have unreachable scaffolding.
Time for the scaffolding to come down.
I delete the throw statement.
public class Diamond {
    ...
    public String[] toLines() {
        String[] inner = innerDiamond();
        String[] result = new String[inner.length-1];
        int mid = inner.length / 2;
        for (int dst=0,src=0; src != inner.length; src++)
            if (src != mid)
                result[dst++] = inner[src];
        return result;
    }
}
Now the scaffolding() test fails. I delete that too.
We're green.
The scaffolding is gone.
We're done.

surfing the edge of chaos

is an excellent book by Richard Pascale, Mark Millemann, and Linda Gioja (isbn 0-609-80883-4). As usual I'm going to quote from a few pages:
As a general rule, adults are much more likely to act their way into a new way of thinking than to think their way into a new way of acting.
Recent study of evolution, both in the natural world and in computer based complex systems, has demonstrated the surprising result that the presence of parasites in a system accelerates evolution dramatically.
The average corporation lives only half as long as the average human being.
The defining feature of a complex adaptive system is its ability to learn.
As the process unfolded, employees repeatedly asked Shapiro to give a more definitive shape to his "vision". He refused to do so. "It will only get in the way," he countered. "People will take it too seriously."
Because we thought our job was to persuade, too often we forgot to listen.
How a system connects with its "external" world is also a key source of that system's health.
Feedback is the means by which a system talks to itself.
Bacteria require three years to circumvent the latest antibiotic; viruses typically outmaneuver vaccines within a year.
Critical to the impact of the [National Training Center] experience is a cadre of 600 instructors, one of whom is assigned to every person with leadership or supervisory responsibilities. These "observers/controllers," as they are called, shadow their counterparts through day after twenty-hour day of intense activity, provide personal coaching, and facilitate a team debriefing called an After Action Review (AAR).
If you awaken with sore muscles, how you feel depends a lot on whether you think you're getting the flu or you believe you are reaping the benefits of a good workout the day before.

progressive fly fishing for salmon

is an excellent book by Alexander Baird Keachie (isbn 1-86126-048-2). As usual I'm going to quote from a few pages:
If you want the maximum pleasure from the sport, be patient, because the more difficult the trade, the longer is the apprenticeship.
On entering freshwater, 90 percent of the retinas [of Coho salmon] are dominated by porphyropsin, or red visual pigment. ... Initial preliminary microspectrophotometric testing of the Atlantic salmon has shown that their retina colour pigmentation closely follow that of the Coho.
In short, when the water level starts falling, or if the water temperature increases, reduce your size of fly. Conversely if the water height increases, or the water temperature takes a downward turn increase your fly size accordingly.
Wood discovered from his fishing that the speed of the fly in relation to its size was of paramount importance. For instance, he found that the only effective way to fish a small fly was to present it at a speed which would be natural to a creature of similar size.
In my opinion most anglers change their flies too often, generally because they lose faith in it. Moreover, when they change flies it is normally for one of a different colour, and not size, and I believe that this is a great mistake.
In fact he [A.H.E. Wood] did not think pattern made much difference, but considered size of much greater importance. J.A. Hutton asked him why he only ever used two flies, a Blue Charm and a Silver Blue. Wood replied that he didn't care which he used. J.A. Hutton then asked him why then he did not use a March Brown, a fly not commonly used at the time for salmon fishing. To this Wood replied that he would use nothing else for the rest of the season, which he did - and took the same number of fish as he would normally have expected to catch during a season.
The main advantage which tube flies have over other flies is that they can be 'queued'; this means you can create a fly of any length, colour, and weight.
Whatever practices you follow when making the 'D' loop, all movements should be continuous and smooth: these will load a rod progressively, while jerky uneven actions cause irregular loading.

ABC

This just caught my eye at breakfast in a hotel. I had to look up xeriscape. Wikipedia says it means "landscaping and gardening in ways that reduce or eliminate the need for supplemental water from irrigation".

local optimization, global pessimization

A well known UK company, let's called them B&O, sells bidgets and odgets. B&O sold me a bidget a few years back. They did a good job. I like the bidget they sold me. It works well. B&O rings me know-and-then to ask if I'm thinking of buying another bidget or my first odget.

Recently B&O rang me and I mentioned I was indeed thinking of buying an odget to go with my bidget. The B&O person on the other end of the phone sounded very pleased and arranged for a B&O salesman to visit me to provide me with an odget quote. On the designated day, at the designated time, the B&O salesman, let's call him Stan, arrived.

Stan didn't know that someone at B&O had spoken to me on the phone and arranged for Stan to provide me an odget quote. So I explained, for a second time, the odget I was thinking of, and where it would go and how big it would need to be. Stan said that he could quote for the odget, but, being honest, there was no point. Since the odget I was after was not a regular odget B&O would simply subcontract the work to a builder, and then charge me the builder's cost plus a fat markup. Stan said I'd be much better off hiring a builder myself.

Stan explained that the people at the B&O office get a cash bonus each time an odget quote is made to a prospective customer. Stan further explained that they got this cash bonus regardless of whether the customer actually bought the odget. Predictably, the people in the B&O office work hard to get quotes out. They send B&O salesman out to any and all jobs regardless of how likely the job is to result in actual work. Stan said if a B&O phone-handler phoned me to ask whether I'd received a quote, he'd very much appreciate it if I said no I hadn't because I'd changed my mind and didn't want an odget.

Top marks to Stan. No marks to B&O.

the house at pooh corner

is an excellent book by A. A. Milne (isbn 1-4052-1117-2). As usual I'm going to quote from a few pages:
'Now,' said Rabbit, 'this is a Search, and I've Organized it - '
'Done what to it?' said Pooh.
'Organized it. Which means - well, it's what you do to a Search, when you don't all look in the same place at once. So I want you, Pooh, to search by the Six Pine Trees first, and then work you way towards Owl's House, and look out for me there. Do you see?'
'No,' said Pooh. 'What -'
'Then I'll see you at Owl's House in about an hour's time.'
'Is Piglet organdized too?'
'We all are,' said Rabbit, and off he went.
Pooh was sitting in house one day, counting his pots of honey, when there came a knock at the door. 'Fourteen,' said Pooh. 'Come in. Fourteen. Or was it fifteen? Bother. That's muddled me.'
Pooh hadn't thought about it at all, but now he nodded. For suddenly he remembered how he and Piglet had once made a Pooh Trap for Heffalumps, and he guessed what had happened. He and Piglet and fallen into a Heffalump Trap for Poohs! That was what it was.
And he respects Owl, because you can't help respecting anybody who can spell TUESDAY, even if he doesn't spell it right; but spelling isn't everything.
it suddenly came over him that nobody had ever picked Eeyore a bunch of violets, and the more he thought of this, the more he thought how sad it was to be an Animal who had never had a bunch of violets picked for him.
Rabbit came up importantly, nodded to Piglet, and said, 'Ah Eeyore,' in the voice of one who would be saying 'Good-bye' in about two more minutes.
and the big one came out first, which was what he had said it would do, and the little one came out last, which was what he had said it would do, so he had won twice... and when he went home for tea, he had won thirty-six and lost twenty-eight, which meant that he was - that he had - well, you take twenty-eight from thirty-six, and that's what he was. Instead of the other way around.
'They always take longer than you think,' said Rabbit.
'And I was here myself a week ago.'
'Not conversing,' said Eeyore. 'Not first one and then the other. You said "Hallo" and Flashed Past. I saw your tail a hundred yards up the hill as I was meditating my reply. I had thought of saying "What?" - but, of course, it was then too late.'
'Well, I was in a hurry.'
'No Give and Take,' Eeyore went on. 'No Exchange of Thought. "Hallo - What" - mean, it gets you nowhere, particularly if the other person's tail is only just in sight for the second half of the conversation.'
Christopher Robin was telling them what to do, and Rabbit was telling them again directly afterwards, in case they hadn't heard, and then they were all doing it.
'And what about the new house?' asked Pooh.
'Have you found it, Owl?'
'He's found a name for it,' said Christopher Robin, lazily nibbling at a piece of grass, 'so now all he wants is the house.'
He had to write this out two or three times before he could get the rissolution to look like what he thought it was going to when he began to spell it;
'Don't Bustle me,' said Eeyore.
The fact is this is more difficult than I thought,