Hi,
Many of you may enjoy this:
http://www.storytotell.org/essays/74-response.html
As I mentioned in my Wakanday NoFlo talk, FBP is one of these good ideas from the 70s that are due to be resurrected.
/Henri
" A disruptive technology or disruptive innovation is an innovation that helps create a new market and value network, and eventually goes on to disrupt an existing market and value network (over a few years or decades), displacing an earlier technology. The term is used in business and technology literature to describe innovations that improve a product or service in ways that the market does not expect, typically first by designing for a different set of consumers in the new market and later by lowering prices in the existing market. "
If you look inside of FitNesse, you’ll find that there are lots of structures and decisions that don’t seem to make a lot of sense at first reading. There are complexities and abstractions that will leave you shaking your head.
For example. We generate all our HTML in code. Yes, you read that correctly. We write Java code that constructsHTML. And yes, that means we are slinging angle brackets around.
To be fair, we’ve managed to move most of the angle bracket slingers into a single module that hides the HTMLconstruction behind an abstraction barrier. This helps a lot, but cripe who would sling angle brackets when template system are so prevalent? I hope nobody. But FitNesse was not conceived at a time when template systems made sense (at least to us).
Fear not, I am working through the Fitnesse code replacing the HTML generation with Velocity templates. It’ll take some time, but I’ll get it done. The point is, that just like every other software system you’ve seen, FitNesse is a collection of historical compromises. The architecture shows the scars of many decisions that have since had to be reversed or deeply modified.
CRAP is a metric that is applied to each function in the system. The formula for CRAP is: CRAP = comp(f)2. X (1 – cov(f)/100)3. + comp(f)
Where comp(f) = the cyclomatic complexity of the function f. and cov(f) = the unit test coverage of function f.
So a function’s CRAP will be small iff the cyclomatic complexity is low and the test coverage is high. CRAP will behuge if cyclomatic complexity is high, and there is no coverage.
What does this have to do with architecture? Read on…
I work very hard to keep the ratio of crappy methods near .1%. Of the 5643 methods in FitNesse, only 6 are crappy, and five of those I have no control over.
One reason is that mathematical analysis is always incomplete. The engineer must make a decision about which variables are significant and which are not, and an analysis may lead to incorrect conclusions if this decision is not made well. Also, equations are often simplified (e.g., made linear) to make their analysis feasible, and this is another potential source of error. Because of these limitations, engineers that depend on mathematical analysis may overdesign a structure to compensate for unforeseen effects left out of the analysis. Thus the price of safety is additional material and increased cost (i.e. decreased efficiency and economy).
That scarring makes the system hard to understand. It complicates the job of adding features and fixing bugs. It decreases the effectiveness of the developers who work on FitNesse. And though I work hard to massage the scars and bandage the wounds, the war goes on.But I can keep the CRAP out! I can keep the code so clean and simple at the micro level, that the poor folks who try to make sense out of the macro scale aren’t impeded by huge deeply nested functions that aren’t tested!
expert designers restrict their attention to designs in which the interaction of the forces is easy to see. The design looks unbalanced if the forces are unbalanced, and the design looks stable if it is stable.The general principle is that designs that look good will also be good, and therefore the design process can be guided by aesthetics without extensive (but incomplete) mathematical analysis. Billington expresses this idea by inverting the old architectural maxim and asserting that, in structural design, function follows form. He adds (p. 21), ``When the form is well chosen, its analysis becomes astoundingly simple.'' In other words, the choice of form is open and free, so we should pick forms where elegant design expresses good design (i.e. efficient and economical design). If we do so, then we can let aesthetics guide design.The same applies to programming language design. By restricting our attention to designs in which the interaction of features is manifest - in which good interactions look good, and bad interactions look bad - we can let our aesthetic sense guide our design and we can be much more confident that we have a good design, without having to check all the possible interactions.
[...] In my own case, my first machines weren't even computers - they were "unit record" ( http://en.wikipedia.org/wiki/Unit_record_equipment ), which was, as I say in the book, a dataflow approach...
That's why I mentioned Scratch ( http://scratch.mit.edu/ ), pointed out
to me by Bob Corrick, in an earlier post. Scratch looks promising, as
Logo did a generation earlier, if we can add some kind of fixed
capacity connections to it... On a more general level, there is an
interesting article in the latest American Scientist on what makes Angry
Birds so successful - and how Rovio is building on it. Hint: it lets
grandparents and grandchildren bond over a computer game :-)
Lets have some more discussion!
You can play it with one hand on the bus, silly sound effects,
'3 star' challenge, and almost anyone at any age can pass
the early levels -> win.
To mention something more on-topic, I did some work on a web graph
editor using Raphael JS vector library (http://raphaeljs.com/).
I shouldn't link to this at such an early stage, but thought a post
just about Angry Birds would be a bit light!
http://sam.nipl.net/code/amps-js/test.html
I'm only just getting started! Can only move nodes and the page around.
Aiming for smooth zoom / rotate soon, then I can do the arcs.
Raphael JS is really a brilliant little library.
I should especially say thanks for lib Cairo (chi-rho / Xr), used in
both mozilla and webkit/chrome now, and most everywhere else.
I hope to write a version of my editor in C, using Cairo API directly.
Sam
Adrian