3. Spending your energy
Early Majority
Late Majority
Early Adopters
Laggards
Innovators
Chasm
4. Natural Habitat of Agile
Early Majority
Late Majority
Early Adopters
Lagards
Innovators
5. Natural Habitat of Agile
Early Majority
Late Majority
“Embrace Change”
Early Adopters
Lagards
Innovators
6. Natural Habitat of Agile
ag e” Early Majority
Co ur
“ Late Majority
“Embrace Change”
Early Adopters
Lagards
Innovators
7. Natural Habitat of Agile
ag e” Early Majority
Co ur
“ Late Majority
“Embrace Change”
Earlyaste”
minat e W Adopters
“Eli GNI)
Lagards
(YA
Innovators
8. Natural Habitat of Agile
ag e” Early Majority
Co ur
“ Late Majority
“Embrace Change”
Earlyaste”
minat e W Adopters
“Eli GNI)
Lagards
(YA
n”
eaInnovators
“L M)
( LI
9. Natural Habitat of Agile
ag e” Early Majority
Co ur
“ Late Majority
“Embrace Change”
Earlyaste”
minat e W Adopters
“Eli GNI)
Lagards
(YA
n”
eaInnovators
“L M)
( LI
“Conti nuous
rovem ent”
Imp
12. Kiss conventions
goodbye
He had bought a large map representing the sea,
Without the least vestige of land:
And the crew were much pleased when they
found it to be
A map they could all understand.
"What's the good of Mercator's North Poles and
Equators,
Tropics, Zones, and Meridian Lines?"
So the Bellman would cry: and the crew would
reply
"They are merely conventional signs!"
"Other maps are such shapes, with their islands
and capes!
But we've got our brave Captain to thank:"
(So the crew would protest) "that he's bought us
the best—
A perfect and absolute blank!"
Lewis Caroll, “The Hunting of the Snark”
14. Preon in One Slide
class BitMap {
@Bound int width;
@Bound int height;
@Bound int nrColors;
@BoundList(size=”nrColors”) Color[];
@BoundList(size=”width*height”) byte[] pixels;
}
class Color {
@Bound int red;
@Bound int green;
@Bound int blue;
File file = …;
}
Codec<BitMap> codec =
Codecs.create(BitMap.class);
BitMap bitmap = Codecs.decode(file);
15. Preon in One Slide
One Source
class BitMap {
@Bound int width;
@Bound int height;
@Bound int nrColors;
@BoundList(size=”nrColors”) Color[];
@BoundList(size=”width*height”) byte[] pixels;
}
class Color {
@Bound int red;
@Bound int green;
@Bound int blue;
File file = …;
}
Codec<BitMap> codec =
Codecs.create(BitMap.class);
BitMap bitmap = Codecs.decode(file);
16. Preon in One Slide
One Source
class BitMap {
@Bound int width;
@Bound int height;
Free Decoder
@Bound int nrColors;
@BoundList(size=”nrColors”) Color[];
@BoundList(size=”width*height”) byte[] pixels;
}
class Color {
@Bound int red;
@Bound int green;
@Bound int blue;
File file = …;
}
Codec<BitMap> codec =
Codecs.create(BitMap.class);
BitMap bitmap = Codecs.decode(file);
17. Preon in One Slide
One Source
class BitMap {
@Bound int width;
@Bound int height;
Free Decoder
@Bound int nrColors;
@BoundList(size=”nrColors”) Color[];
@BoundList(size=”width*height”) byte[] pixels;
}
class Color { Free Encoder
@Bound int red;
@Bound int green;
@Bound int blue;
File file = …;
}
Codec<BitMap> codec =
Codecs.create(BitMap.class);
BitMap bitmap = Codecs.decode(file);
18. Preon in One Slide
One Source
class BitMap {
@Bound int width;
@Bound int height;
Free Decoder
@Bound int nrColors;
@BoundList(size=”nrColors”) Color[];
@BoundList(size=”width*height”) byte[] pixels;
}
class Color { Free Encoder
@Bound int red;
@Bound int green;
@Bound int blue; Free Documentation
File file = …;
}
Codec<BitMap> codec =
Codecs.create(BitMap.class);
BitMap bitmap = Codecs.decode(file);
24. Obscure Ideas Bad?
“After all, the world’s
bravest and most
important ideas are
often forged away
from the spotlight - in
small, obscure groups
of people who are
passionately
interested in a subject
and like arguing about
it.”
“Maybe we should be
designing tools that
reward obscurity - …”
25. Where is obscurity found?
Early Majority
Late Majority
Early Adopters
Laggards
Innovators
27. Kaha Channel
Mark Fisher Says:
Posted at: November 27, 2009 at
8:20 pm
Nice post! We should be able to
support a custom “queue” strategy
within Spring Integration such that
namespace support would be available
with something like a “ref” attribute or
inner-bean defined within a queue
element…
36. Xeger (= Regex Reversed)
String regex = "[ab]{4,6}c";
Xeger generator = new Xeger(regex);
String result = generator.generate();
// Result could be abbac, bbbbbc, ababc, etc.
assert result.matches(regex);
37. Xeger (= Regex Reversed)
String regex = "[ab]{4,6}c";
Xeger generator = new Xeger(regex);
es of
lin
String result = generator.generate();
26abbac, bbbbbc, ababc, etc.
// Result could be ode
1
c
assert result.matches(regex);
41. Summary
• Cherish the impulse
• Obscure *can* be good
• How would I do this without…?
• Leverage Cross-over Effects
• Kiss conventions goodbye
• Your perspective matters
• Train your imagination
• Don’t bet on a single horse
• Express yourself
42. Summary (cont’d)
Early Majority
Effortless Late Majority
Chance to Hook up With
EarlyLeaders
Adopters
Thought
Laggards
Opportunity
Innovators
43. Being Lost is a
Necessity
If you don’t care where you
want to be, you cannot
actually be lost.
If you are never lost, you don’t
care where you want to be.
44. Finally, there is no substitute for ‘the
dreariness of labour and the loneliness of
thought’ -- even though it
has been joked that committees are a place
where people seek refuge
from that.
-- Frederik P. Brooks