Thursday, December 9, 2010

Idea: A story in Vi commands

The thought occurs that, a bit like hearing one side of a telephone conversation and slowly piecing together the story, a particularly niche storytelling device could be to tell the story using only the vi commands. A series of searches, a replace, perhaps a :q! (runaway!).

Wednesday, December 8, 2010

Idea: An optimally diffusing reflector

In an unlikely twist of events, here's an actual idea, like I intended to be posting.

The problem

I have a consumer digital camera, but I hate the glare of the flash when I take an indoor photo at a family event. So I usually either find a bit of white paper or a spoon and hold it in front of the flash to bounce the flash off the ceiling or a wall behind me. This has its downsides; you look silly, you flash whoever's behind you, it's cumbersome (particularly when shooting vertically) and it doesn't work whenever there's a dark or far away wall or ceiling.

The concept

So I thought it would be good to have a little diffuser I could attach to my camera. But a little piece of plastic would waste a lot of the light by sending it out the sides, more so the larger the diffuser. And so that it actually improves the shot, I'd like the diffuser to be a reasonable size (A6?). So how about using 2 bounces? Firstly, a bounce in front of the flash to redirect it upwards, and then a second above the flash to bounce it forwards. If both of those were made of some kind of semi-diffusing reflector, like shiny paper, or had a bumpy surface like crinkled tin foil, then the light would be diffused without too much loss. I could also just use the first reflector to bounce of the wall or ceiling.

Optimizing the solution

What shape should the two reflectors be? If the first was concave it could focus the flash onto the second reflector, or even (via a paraboloid) create a fairly narrow beam. The second reflector would need to again diffuse the light to create the most diffuse source it could. So could we throw two surfaces of nodes and a light source into an optimising algorithm and see what answer it comes up with? The constraints would be to maximise diffuseness of the resulting light (so a given point in the field of view would be uniformly lit from as wide an angle as possible), minimise size, maximise the intensity within the field of view, etc.

Thursday, December 2, 2010

Visualization: Analysis plus Design

In response to Dave McCandless' post on Data, Information, Knowledge and Wisdom:

I would say that the value visualization brings is not only design but also analysis. First, you must analyse the information, and then you have to communicate that analysis to others. You can generate a very well designed pie chart, but if the useful analysis is better done with a bar chart, you’ve missed the best visualization. That’s why you get mush – not because the design is missing, but because the analysis is.

Wednesday, August 18, 2010

Just out of reach

A wisdom eludes me - just out of reach.

I can feel that there's something there; somehow complexity and the way S types think, the attention to detail and the ability to hold many complex aspects in mind, while N types focus on a few aspects and manipulate them with more ease. I can invent a new thing because I look at the simple set of aspects I see and question them. She can see the straightforward and (to her) obvious way to do it simply, using the existing tools and systems - she doesn't need the invention to deal with the details for her, because she gets them right anyway.

Somehow it's the difference in perception - some kind of slowly built picture of aspects, of richness. So expression and enjoyment is of the rich and the real, rather than the simple and the abstract.

If I could choose to, I would change the world and be content. She would pick up some fresh raspberries and douse them in fresh cream, and in delighted contentment sit in the sunshine and enjoy the experience.

But I'm an N, so I'm looking for the connection, looking for the model that explains the two. But for now it's just out of reach.

Monday, June 21, 2010

Of Meaning

Meaning, that on which it all hinges.
Accept, inhaling meaning.
Expression, exhaling meaning.
Gift, meaning passed from me to you.

I hand you a book wrapped in paper. I do not know you. You hand me a piece of paper, and walk away. A book bought, a transaction. Particles collided, interaction completed, immediately forgotten.
I hand you a book wrapped in paper. I do know you. You hand me a piece of card, and we walk together. A gift given, a relationship deepened. Expression of humanity, exchange completed, feeling ever binding us.

You see, a gift mediates meaning. If there is no meaning - a corporate gift, a free pen, a loyalty bonus - there is no gift. A gift is anti-free; it is binding. There is no greater love than that between mother and child, we are told. It derives largely from an evolved need for the mother to protect her offspring, true. But come here and look at it this way: she gives the gift of life to her child, the gift of protection and nourishment with her own body, to produce a child helplessly dependent upon her continuing to give. The bond is deep, and the meaning absolute; the meaning of new life.

The Jews were given the gift of freedom from oppression, the Christians were further given the Son of God, who gave them redemption - for God so loved the world he gave. This, the essence of the power of their stories.

So, if to be human is to live meaningfully, then to live is to give. What you give is largely immaterial, only it must be meaningful to you. If you have no time, give some that you do not have to your family. If you seek significance at work, give yourself to it or find a new position in which you can.

Meaning, inner significance.
Significance, difficulty of sacrifice.
Gift, my sacrifice made manifest, in offerance to you.

Who is my neighbour, someone once asked a Nazarene. The Samaritan that gave comfort and healing to a dying Jew, when his priest did not. The body on the road meant nothing to the priest, and he saw no value in it. The Samaritan saw value in the human life, and sacrificed his own resource to support it. Who is my friend, then? Look at your friends; are they not arbitrary? Who are they that you are so close to them but people who you happened to meet at school or work, accidents of geography and family history. But you could not replace them now, because of your shared history, the depth of your bond. You have given time to each other, gifts, love, support. You have listened to their troubles, they have salved your pain.

Medical professionals can kill your physical pain, but you need friends for your emotional hurt. When you grieve, can pills help like the reassuring hand on your shoulder?

Friend, someone now significant you have built a relationship with.
Bond, emotional history that binds you together.
Sacrifice, voluntarily giving up something significant, for the sake of meaning.
Gift, my sacrifice given to you, offering to bind us closer.

So, Meaning, then? Inner significance. And Gifts? My sacrifice, dedication of something significant to me, to deepen our relationship. Gifts mediate meaning.

What is the meaning of life? Given. Over and over, for all time.

Wednesday, June 16, 2010

Re: Goodbye to the office

In response to Seth Godin's Goodbye to the office.

"What's missing is #7... someplace to go."

Have you heard of the telecottage/telecentre concept used in Europe?

Telecentre [Wikipedia]

Workplaces [Teleworker Association]

The place is a communal, internet-connected space/building.

I surmised, when I heard about it, that infrequently-used buildings like churches could easily set up as telecottages during the week, and allow local teleworker networking. Of course, that all tends towards the creation of local tribes, and eventually into semi-organised aggregate workgroups who meet locally and are employed globally. Say goodbye to the oil crisis.

On a side note, it may make for a more varied cross-section of society (particularly as the implied flexibility of hours suits mothers) than at most IT-based workplaces, with a resulting impact on mate-finding which is currently predominantly done at work. Except for Silicon Valley, where nothing would change.

It also lends itself to far more efficient time-sharing of space; a much freer movement of people between facilities, predicated on preference for surroundings, busyness, company, cost. A new lease of use for churches, restaurants, cafes. You could go into the pub garden for a meeting, keep an eye on your children in the creche.

If I were to commute at a cottage (the tele prefix would have to die, as per the telephone), I would choose one that had a resident motivator psychologist, who could help me get through the Dip, and to avoid procrastination, and access to a technician to fix my PC.

Friday, June 11, 2010


I can almost believe in God,
but more and more
I doubt evil.

Thursday, June 10, 2010

The Moving Finger

Edward Fitzgerald's translation of the poem The Rubáiyát of Omar Khayyam, 1859:
The Moving Finger writes; and, having writ,
Moves on: nor all thy Piety nor Wit
Shall lure it back to cancel half a Line,
Nor all thy Tears wash out a Word of it.

Monday, May 10, 2010

Black cable against fake wood veneer

I look down at the cable snaking across my desk;
loops and turns, a rollercoaster of sound.

A pipe flooding notes of atmosphere into my weary ears.

Not quite an escape, a softening of the edges of consciousness,
easing my day of all its

Tuesday, April 27, 2010


If there is no god,
and no divine forgiveness,
then how can there be

Guilt shifts,
his judgement to mine,
with no prospect of
pardon or release.

Monday, April 26, 2010

Passive Depressive

Go ahead,
Just ignore me,
And I will turn away.

Show me I am valueless
I'll quietly agree.

You feel nothing
I feel everything;

My worth reels.
Anger rages
at you, at me
with defeated turmoil,
all withheld.

Here, the root of the deathwish
An expression of the magnitude of feeling
this side of my skull.

Why am I powerless?
Introspection grips self-loathing;
an answer that stokes the fire -
dank heaviness of head
falling with hurt
and seeking escape.

Escape in sleep
escape in oblivion
rest, peace from the hurt and judgement within.

The more you matter to me
the more I will push you away
and the more I will want you
to stay
and ask me what's wrong.

A child in me seeks comfort in kind words
and a demon threatens it
with hate and disgust in its eyes.

So turn away
and I will crumple
rag-doll towards the abyss.

Monday, April 19, 2010

All connects: A renarration

All connects
From rationality to sentiment
Work to play
Love to introspection
God to my own will.

A little self-expression
of my feelings on faith;
A drop of clarity,
cooling balm to my academia.

Reading insights of those
whose boldness has brought them to the hill
long before me:
The familiar spirit
but an enormity of strength,
a fearlessness
my soul shivers at the thought
of reaching for it.

If, as I've wondered, to re-narrate your story
you first must believe it, or believe in it,
then here is a kind of me
but with boldness
that I can believe in
that I can be.

I have felt disconnected
a bad fit for the world I see
creativity where perseverence is wanted
ideas where doggedness is valued
rebellion where sticking to the path is key.

Maybe it was just the wrong path,
maybe there is a path where I am not wrong
where the steps fit my stride
and obstacles are met with confidence
not timidity.

So all connects,
and renarration means revised belief.
Here, perhaps, lies
the death of another me
and the power of the role model.

Thursday, April 15, 2010

Elite thinking

By hook and by crook
we'll have 'em

By trick, by advice
by convincing, overruling,

Until the Damas scene.

Because we know
we are right,
we know

So the seeping elite,
the knowing and surety
the willingness to push beyond
past their rebellion
is this, strictly,

No but I'm right,
right I am
on my quest.

Friday, April 9, 2010


Just caught up on xkcd, particularly liked this one:


(Wouldn't a Sisyphean version be worse?)

It triggered a thought - how about a version of tetris with
non-regular blocks, which would reach some kind of critical mass when
enough were placed close together? Each time critical mass was
reached, it could explode in the box, with larger explosions leaving
less stuff at the bottom. Maybe some radioactive blocks and some
absorber blocks, with all the physics being simulated for critical

Later levels could have less random combinations of absorber and
emitter, or more concave shapes which are harder to fit together, etc.

I think it's doable in javascript... It would involve
graphics programming, polygon collision-detection, physics simulation
(both for the critical mass stuff and the resulting kinetics) and user
interaction for the controls.

Friday, February 19, 2010

Code of Ages

Software lifetimes range from minutes (s/LastCompanyName/NewCompanyName/g)to a few years. Well, that's what it's designed for, but often it's longer (remember Y2K?). Given the rate at which bugs a put into and taken out of software, it's hard to imagine anything staying up for a century - what would you do when the original programming team have all died and the programming language has no modern architecture compiler support. Think BBC Micro - it is still in use, but to fix a system using it means either buying a manual off ebay or paying a grey-haired chap to come out of retirement.

So how would we design a system that could work for centuries? For me, the first part of the answer is interfaces. If we carefully specified the interfaces between chunks of the system, or between the machine and the outside world, then we could simply replace the problematic part. Generally, as architectures change and paradigms come and go, it is easier to rewrite a module of code than to go hunting through the source code to fix it. We could also rewrite a system module-by-module, without having to rewrite the entire thing. The more levels of interfaces you have, the more choice you have later on about how much of the old system you replace.

Secondly, if you want a system to run for centuries, I'm reminded of the apocryphal 60-year old broom; it's had 3 new heads and 7 new handles, but it's the same broom. Similarly, a long term system is likely to be pretty large and unweildy, so you wouldn't want to have an enormous rewrite/replace project and a scary switchover where it all falls apart. No, if the system needs to start supporting the new cryogenics hardware it needs to have just that part of the system replaced.

As far as I can see, the web may have one of the best answers. With its clearly defined protocols and request-response system, it is possible to switch hardware, software, networks, IP addresses etc without the user noticing. Just start routing the requests to the new server, and then decomission the old one.

So those enormous, intercontinental, centuries-long up times will one day be possible, but only if we design them to be so. Like the broom that never dies, it has to take less time to fix a given problem than you get between the warning signs and the event itself.

Evolution as Nature's way of doing details

Programmers attempt to deal with complexity by getting the details of a system right. Largely programming is simply creating a system that gets all the details right. That's why we buy software packages - because creating software that gets the details correct is a long, slow and hard process. Test, fix, repeat. We try to make software that is as correct as we can make it within the constraints on resources and time.

Nature, however, comes at it from the opposite angle. In evolution, she takes the scatter-gun approach, like the Monte Carlo simulation method. How many legs are better when you live in trees? What kind of skin? Cold or warm-blooded? Nature is pure pragmatism - we can't guess this very well, so just make a load of similar animals, and see which ones survive. Mutation and cross-breeding combine to produce a never-ending stream of ever-differing versions of the same thing. The best ones survive and reproduce.

Imagine you are trying to make a repair system for a robot. The design route says you spend a lot of research money designing ever more sophisticated repair mechanisms, and pack in replacement and redundant parts. The human body just repairs itself automatically, all the time. Not by some clever design but by a process of elimination - knock out the blood platelet genes and you get haemophiliacs.

Nature has a few advantages over programmers, though. It has limitless resources and a slow-changing set of requirements; the competitors, predators, prey and environment of an organism change very slowly, and there's always more oxygen and more sunlight. Programmers, however, have to determine both the resource allocation and the tests of a system, so that what they give to the customer for a fight-to-the-death with the customer's expectations wins the first time.

Largely, however, programmers will run out of time shortly after working out what the real priorities are, and deliver something with a lower probability of survival. So, I suspect a good strategy when specifying software is to demand a minimum level of stuff by a short deadline, then just before it arrives extend it by an arbitrary amount.

One route that I'm waiting for unit testing to take is that of mutated software - if there is a series of automated tests that cover all the required functionality of the software, then why not leave a few machines churning out modified versions of the code and competing them against each other for survival? A part of the rational brain nags - won't this just create hideous amorphs that pass some unit tests and fail as software? But that would imply that your unit tests lack coverage, no?

Thursday, January 28, 2010

The case against 'should'

Working in a software company, there is a lot of use of the word 'should'. "Should we include this feature?" "Should we put a process in place for this?" "That shouldn't be allowed to happen."

Should implies that there is a right way and a wrong way. It is the language of correct and incorrect, light and dark. No, the software should never crash. Yes, we should have a process for changing important parts of the system. No, we should never make the customer wait more than a week.

But this is danger territory. Tell me, should I take sugar or sweetener? Should I rent or buy? Should I be a vegetarian? Should I marry or cohabit? These are not topics people generally agree on. In fact, they are topics that bring out the worst traits in people - judgemental, unthinking refusal to compromise or be flexible, or even to think rationally about a subject. These are hard-and-fast gut reactions. You should marry. No, I believe in marriage. Cohabitation has no benefits. Vegetarianism is the future, think of the children!

I've noticed that when people say should, they are using their expectations as a measure of should vs should not. Should the customer be made to wait? No! Of course not! Stupid question! Let's rephrase it: how much of a tradeoff of productivity and efficiency are we willing to accept in order to reduce customer waiting times by X%? Now we are talking - we have a more objective yardstick, a more equivocal question. We have framed the question in terms of the true business upside and downside, rather than throwing it against their gut reaction.

So, when someone says we should do X, or the software should not do Y, a little flag goes up in my head. Wouldn't it be easy for someone to argue for their preferred course of action by simply invoking our predictable gut reactions? Do it my way, because we should give our customers what they asked for.

'Should' is a hammer. It makes everything look like a nail, which can be battered into place by the sheer righteousness of our gut reaction. Pick a different verb! Ask if we can allow, expect or improve. Talk about tradeoffs and priorities, opportunities and strategies.

If you keep using 'should', you're just looking for an argument.

You shouldn't do that.