18577 items (0 unread) in 191 feeds
IT
I have been thinking a lot about this tech addiction topic over the last week. Some problems just keep beating you about the head and shoulders until you try to do something about them.
And according to the data I'm looking at. It's a big problem.
Huge.
Billions of dollars have been spent by technology and internet companies to find out how to get you to play games. Every little detail is controlled and optimized, from the graphics to the music to the way the game is presented.
Fact is, however, that it really doesn't take much to get people to play games. Most of us seem somewhat natural at doing trivial and repetitive things. Somewhere right now there is still somebody wasting hours playing Tetris from the 1990s. A few little colored shapes dropping from the top of the screen. Millions of hours were spent on it.
From what I can tell, people have a natural desire to be in a state of flow. Professor Mihály Csikszentmihályi describes the flow state like this:
The problem is, the last item -- experiences bring full satisfaction -- is a very relative thing. What you view as being worthwhile in itself this very minute could be completely different than how you would value it a year from now.
From my email stream yesterday
I figure that I work hard and effectively 8 or 10 hours a day, and as my world stands right now, that gives me the privilege to do what I please the rest of the time. So when I said 4-5 hours, I didn't mean that I want to get rid of those 4-5 hours, and spend them doing something else.I have to admit that whether something is "productive" has almost zero influence on whether I am inclined to do it....
I don't know whether I'm striking the right balance between spending "unproductive" time online and spending time doing other things -- maybe I would be happier spending 2 hours a day average instead of 4; it feels like there's a little element of addiction influencing me. But I know that I would not be happier spending 0, or 1.
There are 3 great points here.
So I'll say something like that.
I remember when I grew up what is was like to be bored. Summer would be in full swing, we'd get up and have breakfast - -then what? It was very common to complain to mom and dad about not having anything to do. There were 3 channels on TV and it was all soap operas during the day. We had no video games or taped movies.
Boredom was a real, physical, immediate, painful experience. But mom and dad would always say something like "you need to go and make yourself something fun to do, son"
The pain led to complaining, which led to self-direction and creative play. We'd build monsters from old blankets, make a play, create a new game. It was just you. If you wanted something fun, it took physical and mental work -- sometimes a lot of it. Boredom was nature's way of telling you that you had to create, invent. Act.
I'm sure my great, great grandfather probably had the exact same experience with hunger. Nothing to eat? Painful experience. Motivates you to go out and hunt and kill something. Pain drives adaptation. Now we all sit around eating junk food all the time, fat as pigs. My grandfather would be amazed.
Like bad food, bad technology just makes you want to do more of it. So how do you do just a little bit of something instead of so much? What's the low-carb, good sugar version of technology?
How do you unplay a game?
In the Beginning was the Project
And then came the Assumptions
And the Assumptions were without form and void
And the customer conversation was completely without substance
and the darkness was upon the face of the workers
and they spoke among themselves, saying
"It is a crock of shit and it stinketh."
And the workers went unto their Supervisors and sayeth,
"It is a pail of dung and none may abide the odour thereof",
And the Supervisors went unto their Managers and sayeth unto them,
"It is a container of excrement and it is very strong,
Such that none may abide by it."
And the Managers went unto their Directors and sayeth,
"It is a vessel of fertilizer, and none may abide its strength."
And the Directors spoke amongst themselves, saying one to another,
"It contains that which aids plant growth, and it is very strong."
And the Directors went unto the Vice Presidents and sayeth unto them,
"It promotes growth and is very powerful."
And the Vice Presents went unto the President and sayeth unto him,
"This new project will actively promote the growth and efficiency
of this Organization, and in these areas in particular."
And the President looked upon The Project,
And saw that it was good, and The Project continued many generations, and many were overpowered at the size, ineptness and illogic of it
And this is why you are here
Who are you?
Most of these guys are friends from over on HackerNews, and the data skews accordingly.

All my tech friends are guys. Not much surprise there.

You're mostly all from English-speaking countries

Mostly you're in your mid-to-late twenties.
Just out of college and hitting the workforce

Incomes around 40K or so. Nice normal curve in there
What are your opinions on technology?
Not a lot of interesting data in the direct results of the likert responses (the "Strongly agree" questions), which is surprising. So no graphs. But you guys are tech mavens: you know a lot about the technology and the internet, and you keep learning more. You slightly disagree that playing electronic games was as much fun as it was five years ago, which makes sense, since you probably just got out of college. The statement people agreed most with? (Standard Deviation-wise) "I know a lot about technology". The types of statements you most often disagreed with each other on? (by 2 places on the scale) "i'm really excited about gadgets", "I wish I had better gadgets", and "I like playing electronic games" Seems like with gadgets and games, you're either for them or against them.
So what's the problem?
Note the wording here, because I think it is important: Number of hours a day you think you spend non-productively (Facebook gaming, WoW, randomly-surfing the web, chit-chatting, reading articles not directly-related to your goals for the day, arguing with people you will never meet and will never change their mind, looking at pictures or videos of things just to pass the time, creating and reading status updates and tweets that are silly, pointless, or trivial, etc)
This is not the hours you spend online. This is not the time you search for information that you find. This is the time that you self-report as being wasted. So please don't argue about how technology is great, you can find wonderful things on the net, etc. All of those things are true. This is simply what you think is unimportant. That can be different things for different folks, but the point is that, looking at your overall technology use, these are the parts you are not happy with.

Minimum hours lost per day

Minimum hours lost per week

Minimum lost income per month
Where's the money?
That last graph made me sit back and think -- what's up with this? Are there two (or three) segments of people? The income was such a nice curve, yet the lost money is not. Perhaps people are thinking that their time is worthless -- I might make 20K at the library, but the time I spent not at work has no value.
But you'd think that this opinion would hold evenly. Would it? This might explain the spike at the end of the graph -- at some point you realize that all of your time is equally valuable, while for a long time -- in your early-years, perhaps -- you think of "work" and "me" time.
So let's take the income numbers your provided and multiply by the hours you spend each month.

Calculated monthly loss based on income and hours
So there might be a bit of denial going on. Let's take the folks out who said the cost per month for their technology use is zero -- these are the guys who are saying "what problem?"
Average age: 28, give or take 6 years. Average income: 8!K give or take 55K -- so there is no average income. Average time reported lost per day: 3.4 hours give or take 3.4 hours -- so no average there either. Same with the weekly hours lost: 20 average with an STD of 21

Hours reported lost daily by the "what problem" people

Calculated monthly loss of income for the "no problem" guys
Denial -- it's not just a river in Egypt.
In part 2, I'll start looking at correlation between sets of data -- do people with more income report more time lost? Are they more sensitive to the time they spend? Are people who are more social less likely to report time lost with technology. There is some good stuff in there.
Also please keep telling folks about the poll -- the more numbers, the better.
Note: this is not a study or scientific survey. This is just people who feel like self-reporting. In addition, the sample size is very small -- less than 200 -- hence the reason I am asking you to help me keep pumping the link [bit.ly]
I wasn’t at the OSCON Cloud Summit this past week, but I’ve spent some time over the weekend trying to collect the good bits. Via Twitter, I had heard echos of an interesting debate on Cloud standards between Sam Johnston and Benjamin Black. Today I got to see Benjamin’s slides and read reports from two audience members, Charles Engelke and Krishnan Subramanian. Sam argued that Cloud standards are needed, Benjamin that they would be premature.
Benjamin is right about what to think and Sam is right about what to do.
Let me put it differently: Benjamin is right in theory, but it doesn’t matter. Here is why.
Say I’m a vendor and Benjamin convinces me
Assume I truly believe the industry would be better served if we all waited. Does this mean I’ll stay away from Cloud standards efforts for now? Not necessarily, because nothing is stopping my competitors from doing it. In the IT standards world, your only choice is to participate or opt out. For the most part you can’t put your muscle towards stopping an effort. Case in point, Amazon has so far chosen to opt out; has that stopped VMWare and others from going to DMTF and elsewhere to ratify specifications as standards? Of course not. To the contrary, it has made the option even more attractive because when the leader stays home it is a lot easier for less popular candidates to win the prize. So as a vendor-who-was-convinced-by-Benjamin I now have the choice between letting my competitor get his specification rubberstamped (and then hit me with the competitive advantage of being “standard compliant” and even “the standard leader”) or getting involved in an effort that I know to be counterproductive for the industry. Guess what most will choose?
Even the initial sinner (who sets the wheels of premature standardization in motion) may himself be convinced that it’s too early for Cloud standards. But he has to assume that one of his competitors will make the move, and in that context why give them first mover advantage (and the choice of the battlefield). It’s the typical Tragedy of the Commons scenario. By acting in a rational and self-interested way, participants invariably end up creating a bad situation, one that they might all know is against everyone’s self interest.
And it’s not just vendors.
Say I’m an officer of a Standard-setting organization and Benjamin convinces me
If you expect that I would use my position in the organization to prevent companies from starting a Cloud standard effort there, you live in fantasy-land. Standard-setting organizations compete with one another just as fiercely as companies do. If I have achieved a position of leadership in a given standard organization, the last thing I want is to see another organization lay claims to a strategic and fast-growing area of the IT landscape. It takes a lot of time and money for a company to get elected on the right board and gets its employees (or other reliable allies) in the right leadership positions. Or to acquire people already in that place. You only get a return on that investment if the organization manages to be the one where the key standards get created. That’s what’s behind the landgrab reflex of many standards organizations.
And it goes beyond vendors and standards organizations
Say I’m an IT buyer and Benjamin convinces me
Assume I really believe Cloud standards are premature. Assume they get created anyway and I have to choose between a vendor who supports them and one who doesn’t. Do I, as a matter of principle, refuse consider the “standard-compliant” label in my purchasing decision? Even if I know that the standard shouldn’t have been created, I also know that, all other things being equal, the “standard-compliant” product will attract more tools and complementary solutions and will likely ease future integration problems.
And then there is the question of how I’ll explain this to my boss. Will Benjamin be by my side with his beautiful slides when I am called in an emergency meeting to explain to the CIO why we, unlike the competitors, didn’t pick “a standards-based solution”?
In the real world, the only way to solve problems caused by the Tragedy of the Commons is to have some overarching authority regulate the usage of the resource at risk of being ruined. This seems unlikely to be a workable solution when the resource is not a river to protect from sewer discharges but an IT domain to protect from premature standardization. If called, I’d be happy to serve as benevolent dictator for the IT industry (I could fix a few other things beyond the Cloud standards landgrab issue). But as long as neither I nor anyone else is in a dictatorial position, Benjamin’s excellent exposé has no audience for which his call to arms (or rather to lay down the arms) is actionable. I am not saying that everyone agrees with Benjamin, but that even if everyone did it still wouldn’t make a difference. Many of us in the industry share his views and rationally act as if we didn’t.
[UPDATED 2010/7/25: In a nice example of Blog/Twitter synergy, minutes after posting this I was having a conversation on Twitter with Benjamin Black about my interpretation of what he said. Based on this conversation, I realize that I should clarify that what I mean by "standards" in this post is "something that comes out of a standard-setting organization" (whether or not it gets adopted), in other words what Benjamin calls a "standard specification". He uses the word "standard" to mean "what most people use", which may or may not be a "standard specification". That's a big part of the disconnect that led to our Twitter chat. The other part is that what I presented as Benjamin's thesis in my post is actually only one of the propositions in his talk, and not even the main one. It's the proposition that it is damaging for the industry when a standard specification comes out of a standard organization too early. I wasn't at the conference where Benjamin presented but it's hard to understand anything else out of slide 61 ("standardize too soon, and you lock to the wrong thing") and 87 ("to discover the right standards, we must eschew standards"). So if I misrepresented him I believe it was in making it look like this was the focus of his talk while in fact it was only one of the points he made. As he himself clarified for me: "My _actual_ argument is that it doesn't matter what we think about cloud standards, if they are needed, they will emerge" (again, in this sentence he uses "standards" to mean "something that people have converged on").
More generally, my main point here has nothing to do with Benjamin, Sam and their OSCON debate, other than the fact that reading about it prompted me to type this blog entry. It's simply that there is a perversion in the IT standards landscape that makes it impossible for premature standardization *not* to happen. It's something I've written before, e.g. in this post:
Saying “it’s too early” in the standards world is the same as saying nothing. It puts you out of the game and has no other effect. Amazon, the clear leader in the space, has taken just this position. How has this been understood? Simply as “well I guess we’ll do it without them”. It’s sad, but all it takes is one significant (but not necessarily leader) company trying to capitalize on some market influence to force the standards train to leave the station. And it’s a hard decision for others to not engage the pursuit at that point. In the same way that it only takes one bellicose country among pacifists to start a war.
Benjamin is just a messenger; and I wasn't trying to shoot him.]
Related posts:
1903 -- Man first flies in heavier-than-air plane
Approximately 22 years later, early 1920s -- propeller aircraft become practical. 1923 First nonstop transcontinental flight. 1927 First Solo nonstop Transatlantic flight
Approximately 20 years later, mid 1940s -- The propeller gets replaced. 1944, German Messerschmitt Me 262 is first production jet fighter. 1947, Chuck Yeager breaks the sound barrier in an X-1
Approximately 22 years later, mid 1960s. SCRAMJET practical application. The SR-71 Blackbird first flies 1966
Approximately 22 years later, invisible airplanes. the clunky F-117 stealth fighter in 1981 preceded the terribly dangerous B-2 in 1989
Approximately 22 years later, 2010. ????? -- What?
The last two advances were made under extreme secrecy. It took many years for the rest of us to catch up.
Sci-Fi can be deeply meaningful, or just all so much bullshit. It all depends on how you consume it.
During lunch for the last week I've been having a Trek-for-lunch workout session. Just old Star Trek shows (remastered) and the elliptical machine. Yesterday's show was "Return of the Archons" If you're not a trek fan, here's a synopsis of the show from wiki
Teaser
Lieutenants Sulu and O'Neil are dispatched to the surface of the planet Beta III to learn what became of the Archon, which disappeared there one hundred years earlier. Recognized as outsiders, they draw the attention of the lawgivers. Pursued, the officers call for beam-out, but only Sulu is retrieved, and he is in a strange mental state.Act One
Captain Kirk beams down with a larger landing party to investigate. Spock, Dr. McCoy, sociologist Lindstrom, and two guards, Leslie and Galloway, form the balance of the landing party. Immediately, Spock notices a strangeness in the people they encounter; a kind of contented mindlessness. Then the Red hour strikes - the beginning of the Festival, a period of debauchery and lawlessness. Fleeing, the landing party bursts in on Reger, Hacom, and Tamar. They had been told by Bilar and Tula, two passersby, that Reger could rent them rooms for after Festival. Their questions seem to terrify Reger. They are given rooms and retreat from the mayhem outside, trying their best to get a few hours' sleep.Festival ends the next morning. Reger, learning the landing party did not attend Festival, concludes they are not of the Body, and asks an astonishing question: "Are you Archons?" The conversation is interrupted by the arrival of lawgivers, the robed servants of the mysterious Landru. The lawgivers command the landing party to accompany them, to be absorbed.
Act Two
Kirk, acting on a hunch, defies them - and causes confusion. He'd correctly concluded this society is built around obedience, and might not be ready for disobedience. Taking advantage of their confusion, Reger guides the crew to a place he knows, where they will be safe. But on the way, Landru employs a form of mass telepathy to command an attack. Among the attackers is... Lieutenant O'Neil. Reger warns against bringing him along, but Kirk cannot abandon a crew member.Spock discovers a source of immense power, radiating from a point near the landing party's location. Reger tells Kirk about the arrival of the first Archons: many were killed, many more were absorbed. And then he drops the bombshell, mentioning casually that Landru pulled the Archons from the sky... Kirk contacts the Enterprise, and learns that heat beams are focused on the ship. Her shields are able to deflect them, but nearly all ship's power is diverted to this purpose. Communications are poor, escape is impossible, and the orbit is decaying. If Kirk can't put a stop to the beams, the ship will be destroyed. Worse, contacting the ship enables Landru to discover and stun the landing party.
Act Three
They awaken in a cave-like cell, but McCoy, Galloway and O'Neil are missing. Then McCoy returns - and he has been absorbed. Evidently, this is the fate that awaits the entire landing party. Lawgivers appear, demanding Kirk accompany them, and this time, Kirk's refusal results in an immediate death threat. The orderly society has corrected a flaw.Kirk is taken to a futuristic room: the absorption chamber. There, a priest named Marplon will oversee Kirk's forcible induction into the Body. Lawgivers summon Spock, who is taken to the same place, and there encounters Kirk, now mindlessly happy.
Act Four
Spock learns that Marplon is part of the same underground to which Reger belongs. Marplon intervened to prevent both Kirk and Spock from being absorbed, and returned their weapons. Spock, acting as instructed, makes his way back to the cell.Discussing Landru and his society, Kirk and Spock reach the same conclusion: the society has no spirit, no spark; Landru's orders are being issued by a computer. Kirk decides the plug must be pulled. Spock is concerned this would violate the Prime Directive, but Kirk opines that the directive applies to living, growing cultures. When Reger and Marplon join them, Kirk demands more information: the location of Landru. Reger reveals that Beta III was at war, and was in danger of destroying itself. Landru, one of the leaders, took the people back to a simpler time. And, Marplon claims, Landru is still alive.
Marplon takes Kirk and Spock to a chamber, the Hall of Audiences, where Landru appears to his acolytes - or, at least, a projection of him does. There, Landru regretfully informs them that their interference is causing great harm, and that they, and all who knew of them, must be killed, to cleanse the memory of the Body. Blasting through the wall, Kirk reveals the truth: an ancient machine, built and programmed by the real Landru 6,000 years earlier. This machine, now calling itself Landru, was entrusted with the care of the Body, the society of Beta III. To that end, it has enslaved all members of that society, and those who visit, in a thralldom of happiness that is stagnant and without creativity.
Kirk and Spock discuss this with Landru, asking it difficult questions it has evidently never had to answer, questions about whether its approach to creating the good is really creating evil. Ultimately, they convince it that it is the evil, and that it must destroy the evil - and it does, exploding in a burst of pyrotechnics.
Kirk leaves a team of specialists, including Lindstrom, to help restore the planet's culture "to a Human form".
It's not a great episode, and I kept noticing that one of the red-shirt guys kept asking stupid questions. The plot would inch along towards us realizing that it's a computer controlling things, and the character would say something like "Don't these people have a soul!"
It seemed kind of stupid, but then I realized that the writers were using all the dumb comments as a way of continuing to explain the plot. Perhaps folks in the 1960s couldn't understand computer mind control. I don't know. it seemed heavy-handed to me. It had lots of problems. If I was going to start picking apart problems, I wasn't going to enjoy the story much. How about making up a game?
So with nothing better to do than exercise and think, I started asking myself the old editors and writer's question: "what could you take away from this show and it would still work?"
Obviously the "festival" -- the time when everybody went ape-shit -- was put in there so people would realize that things were not normal, not normal at all. People running around raping and burning and looting is a bad thing.
Would it work without all that silliness? I think so. I think just a bunch of people walking around with mindless looks on their faces would be pretty scary. People being afraid of these hooded characters, living in an ecstasy, no progress in six thousand years? Sounds like a pretty messed up place to me. Worthy of investigation, especially with the mystery of what happened to the Archons
What else could we take out? How about Landru? I think he's a nice prop thrown in there -- wise man from the ancient past who, through no malice of his own, created a system where people stay happy and fulfilled and society is stable. This is more of a critical plot element -- it gives the story it's human conflict. (After all, the main conflict is between Kirk and Landru's creation) But having a computer run things with mind control is still pretty scary. A story about computer controlling reality is basically a version of The Matrix, so it can work very well.
How far could I take this thing. How much could you remove and still have some degree or terror, conflict, and the opportunity for a good story?
How about taking the computer out? No, that wouldn't work. You have to have something that is bad. Wouldn't be much of a story about evil mind-control without the computer, would it?
Would it? I'm a good programmer. Could we take the computer from the central location and spread it around some? How about a network of computers all inside people's heads?
Yep, that still works. What we have here is The Borg. Lots of good story potential. The story has a centralized hive that controls all. I am still sticking to the idea that the trick is the mind control.
But is it? How about, instead of one hive mind controlling all, we have individual computers in each person's head doing whatever they want, providing them with anything they can imagine.
Ouch. Kind of hitting close to home, here.
But it works. This is a version of "Idiocracy" -- we advance technology so much we become immobile sensation-seeking tubs of lard. And I think it's still pretty scary. No progress in six thousand years, everybody with a blank stare, a constant state of rhapsody. No change. A stagnant society. You guys have heard me rant about this before, so I don't need to go on again. But it's a scary outcome.
Are we done? How about if we take away the computers completely? What if everybody was just extremely happy all the time, no crime or violence ever occurred, nothing changed, people had no new ideas, society actively punished any new thought.
Hmmmm. Yes, I think I could go that far. Perhaps not as a story about looking for lost Archons, but it could work. The story would begin with the crash-landing of the Archon's starship. You'd set it up as two societies living next to each other. One would be chaotic, messy, violent at times, dirty, and noisy. The other would be orderly, serene, peaceful, and idyllic. There would be immense tension. Those outside the body must be absorbed. Chaos and error cannot be tolerated. On the other side, those who are not progressing must be helped. Six Thousand years and folks still dying of things like smallpox? It hurts billions of future generations by not trying to make life better. We must help them, or at least talk to them and show them how things can be. Not the Borg, more like a version of the Stepford Wives. Or maybe one of those stories where the missionary doctor goes somewhere and doesn't fit in, but eventually makes a few converts and one of them goes to Harvard.
It'd work.
Which means, at it's heart this is a story about the conflict of cultures. We don't need Kirk and Spock and all that -- it's just the Landru guys and the Archons. One culture values peace, tranquility, non-violence, and stability -- above all else. The other culture? Well you can make a lot of arguments -- Landru says that he alone should be allowed to create. This seems to imply that the Star Trek folks are creative, therefore better, and the Landru guys are not creative, therefore worse. I don't buy that. It's true but incomplete. The Landru people are thinking independently and one assumes they create. Having a conversation, painting a building, getting a haircut -- even in stagnant civilizations there is creativity. I think this is just self-serving bullshit from the writers (sorry Gene!). If you have a job creating, creating must be the sole savior of the world. Everybody's job is always the key to civilization.
Gene Roddenberry, creator of Star Trek and writer for this show, thought of creativity in extreme terms: the artist. But humans exhibit immense creativity in all kinds of ways, most of which are unpleasant. Everybody loves the painter, writer, or singer. Not many folks can find love for the torturer, human experimenter, or serial killer. Yet they are all forms of extreme creativity.
I think what the Star Trek guy's culture has that the other one doesn't is the empowering people as much as possible to be wrong, to make mistakes. You get mad and drive too fast. You have a fight with your spouse and they hit you. You come up with some half-brained idea for a search engine for the internet and it doesn't work. You decide to become a rock-painter for a living. Creative Chaos. Allowing folks to be as wrong as maximumly possible.
In controlled societies, there is a strong sense of what is wrong, either explicit or implicit. As our story fell apart, each of the above examples was about a world in which nobody deviated -- at all -- from a norm. The community did not allow anybody to be wrong.
Everybody is wrong -- until they are right. Every new idea and venture starts off as a crazy and bad idea. Until it works and changes the world. Every prophet, street philosopher, and malcontent preacher is a nutcase. Until one starts the Civil Rights Movement. Every crazy wacko in the world was wasting time and being a danger to themselves and others by trying to fly -- until the Wright Brothers flew. The guy down the street who gets angry all the time and looks like he might be dangerous is a menace to society -- until we need warriors.
99.99% of the time, these people are annoying, scary, chaotic, dangerous, not-serene, unhappy, pain in the asses. They're the exact opposite of the Landru folks. And they never accomplish anything except annoy folks
Except for that other .01% of the time. At those points society moves forward.
One final thought experiment.
Let's assume that the people have machines in each of their heads that can control their minds, but there is no external agent. They have complete control over the machine. Once a year, they all meet for a town meeting what the standards would be for programming. By debate and popular vote, they all set their machines to the same settings -- what they can do, what they can't do, what they can think about, what they can't think about. Technically there's still mind control, but it's being done by popular vote in a democracy.
Would you want to live there? Does it change your mind if there were only one reasonable rule, like not killing people. What if we started with one rule, and then each year added just one more rule, a rule that was guaranteed to prevent 99.99% of a bad thing and make people happier 99.99% of the time?
And the final kicker: are all peaceful cultures that shun change, have insanely blithely happy people, and are stagnant for thousands of years bad?
It's popular to picture aliens arriving as peaceful, wise, tranquil and kind souls. Any tendency towards violence or ugliness couldn't exist in an advanced species, we tell ourselves. Take a look at Kenau Reeves in The Day The Earth Stood Still as an example
But what if, a hundred years from now when the real aliens show up, they are a bunch of broken-down weirdos, violent and hateful, spiteful and petty? Smelly, get in fistfights all the time. Carry very dangerous weapons around as personal possessions. Keeping a strict military structure on their spaceships. Nice guys -- something like what a bunch of cowboys would be like from 1880. Not evil, but chaotically, unpredictably beautiful and truly diverse. What if we're the Landru guys, plugging ourselves into machines and then deciding what exactly what the machines can and can't do, valuing peace, stability, social harmony and happiness above all other things? Who's got the better culture?
Sci-Fi can be deeply meaningful, or just all so much bullshit. It all depends on how you consume it.
Just stumbled on this video created by Rogers.
One of a few good quotes:
“10 years ago it took 72 hours to download Godfather… – Today it takes 10 minutes – It still takes 3 hours to watch”
Oracle recently published a Cloud management API on OTN and also submitted a subset of the API to the new DMTF Cloud Management working group. The OTN specification, titled “Oracle Cloud Resource Model API”, is available here. In typical DMTF fashion, the DMTF-submitted specification is not publicly available (if you have a DMTF account and are a member of the right group you can find it here). It is titled the “Oracle Cloud Elemental Resource Model” and is essentially the same as the OTN version, minus sections 9.2, 9.4, 9.6, 9.8, 9.9 and 9.10 (I’ll explain below why these sections have been removed from the DMTF submission). Here is also a slideset that was recently used to present the submitted specification at a DMTF meeting.
So why two documents? Because they serve different purposes. The Elemental Resource Model, submitted to DMTF, represents the technical foundation for the IaaS layer. It’s not all of IaaS, just its core. You can think of its scope as that of the base EC2 service (boot a VM from an image, attach a volume, connect to a network). It’s the part that appears in all the various IaaS APIs out there, and that looks very similar, in its model, across all of them. It’s the part that’s ripe for a simple standard, hopefully free of much of the drama of a more open-ended and speculative effort. A standard that can come out quickly and provide interoperability right out of the gate (for the simple use cases it supports), not after years of plugfests and profiles. This is the narrow scope I described in an earlier rant about Cloud standards:
I understand the pain of customers today who just want to have a bit more flexibility and portability within the limited scope of the VM/Volume/IP offering. If we really want to do a standard today, fine. Let’s do a very small and pragmatic standard that addresses this. Just a subset of the EC2 API. Don’t attempt to standardize the virtual disk format. Don’t worry about application-level features inside the VM. Don’t sweat the REST or SOA purity aspects of the interface too much either. Don’t stress about scalability of the management API and batching of actions. Just make it simple and provide a reference implementation. A few HTTP messages to provision, attach, update and delete VMs, volumes and IPs. That would be fine. Anything else (and more is indeed needed) would be vendor extensions for now.
Of course IaaS goes beyond the scope of the Elemental Resource Model. We’ll need load balancing. We’ll need tunneling to the private datacenter. We’ll need low-latency sub-networks. We’ll need the ability to map multi-tier applications to different security zones. Etc. Some Cloud platforms support some of these (e.g. Amazon has an answer to all but the last one), but there is a lot more divergence (both in the “what” and the “how”) between the various Cloud APIs on this. That part of IaaS is not ready for standardization.
Then there are the extensions that attempt to make the IaaS APIs more application-aware. These too exist in some Cloud APIs (e.g. vCloud vApp) but not others. They haven’t naturally converged between implementations. They haven’t seen nearly as much usage in the industry as the base IaaS features. It would be a mistake to overreach in the initial phase of IaaS standardization and try to tackle these questions. It would not just delay the availability of a standard for the base IaaS use cases, it would put its emergence and adoption in jeopardy.
This is why Oracle withheld these application-aware aspects from the DMTF submission, though we are sharing them in the specification published on OTN. We want to expose them and get feedback. We’re open to collaborating on them, maybe even in the scope of a standard group if that’s the best way to ensure an open IP framework for the work. But it shouldn’t make the upcoming DMTF IaaS specification more complex and speculative than it needs to be, so we are keeping them as separate extensions. Not to mention that DMTF as an organization has a lot more infrastructure expertise than middleware and application expertise.
Again, the “Elemental Resource Model” specification submitted to DMTF is the same as the “Oracle Cloud Resource Model API” on OTN except that it has a different license (a license grant to DMTF instead of the usual OTN license) and is missing some resources in the list of resource types (section 9).
Both specifications share the exact same protocol aspects. It’s pretty cleanly RESTful and uses a JSON serialization. The credit for the nice RESTful protocol goes to the folks who created the original Sun Cloud API as this is pretty much what the Oracle Cloud API adopted in its entirety. Tim Bray described the genesis and design philosophy of the Sun Cloud API last year. He also described his role and explained that “most of the heavy lifting was done by Craig McClanahan with guidance from Lew Tucker“. It’s a shame that the Oracle specification fails to credit the Sun team and I kick myself for not noticing this in my reviews. This heritage was noted from the get go in the slides and is, in my mind, a selling point for the specification. When I reviewed the main Cloud APIs available last summer (the first part in a “REST in practice for IT and Cloud management” series), I liked Sun’s protocol design the best.
The resource model, while still based on the Sun Cloud API, has seen many more changes. That’s where our tireless editor, Jack Yu, with help from Mark Carlson, has spent most of the countless hours he devoted to the specification. I won’t do a point to point comparison of the Sun model and the Oracle model, but in general most of the changes and additions are motivated by use cases that are more heavily tilted towards private clouds and compatibility with existing application infrastructure. For example, the semantics of a Zone have been relaxed to allow a private Cloud administrator to choose how to partition the Cloud (by location is an obvious option, but it could also by security zone or by organizational ownership, as heretic as this may sound to Cloud purists).
The most important differences between the DMTF and OTN versions relate to the support for assemblies, which are groups of VMs that jointly participate in the delivery of a composite application. This goes hand-in-hand with the recently-released Oracle Virtual Assembly Builder, a framework for creating, packing, deploying and configuring multi-tier applications. To support this approach, the Cloud Resource Model (but not the Elemental Model, as explained above) adds resource types such as AssemblyTemplate, AssemblyInstance and ScalabilityGroup.
So what now? The DMTF working group has received a large number of IaaS APIs as submissions (though not the one that matters most or the one that may well soon matter a lot too). If all goes well it will succeed in delivering a simple and useful standard for the base IaaS use cases, and we’ll be down to a somewhat manageable triplet (EC2, RackSpace/OpenStack and DMTF) of IaaS specifications. If not (either because the DMTF group tries to bite too much or because it succumbs to infighting) then DMTF will be out of the game entirely and it will be between EC2, OpenStack and a bunch of private specifications. It will be the reign of toolkits/library/brokers and hell on earth for all those who think that such a bridging approach is as good as a standard. And for this reason it will have to coalesce at some point.
As far as the more application-centric approach to hypervisor-based Cloud, well, the interesting things are really just starting. Let’s experiment. And let’s talk.
Related posts:
Why? First, I have always been a bit of an anti-social person, but more to the point, from many years of observation, I have concluded that most of the time people oversimplify and overreact. If there's some bad economic news, the market drops off -- but it almost always drops off farther than it should. If some executive or politician is caught doing something wrong, people shun him. But they almost always shun him more than is reasonable. If the economy takes a bad turn, it's the end of capitalism.
Especially when it comes to war and history, people think in the most crude and simplistic terms. It's either good or evil. People think of wars as always moving civilizations forward. Winners are the good guys. Losers are the bad ones.
I'm not about to defend Nazism, but even the Nazis weren't Nazis: there were some real and valid reasons for German outrage after the way WWI was settled. The allies didn't want total victory, and some of the major issues weren't settled, so the war continued many years later. In fact, many historians view both the first and second World Wars and being the same war. I digress. What I wanted to talk about was good and evil, history, and super heroes and ultimate villains.
Which brings me to Abraham Lincoln.

A few weeks back, my wife and I were spending a lazy Sunday afternoon reading when she stopped and stared off into space.
"I never knew that" she said
"What?"
"Abe Lincoln. Turns out he wasn't the great guy everybody makes him out to be."
Now I've had some doubts for some time about Lincoln, but my wife isn't much of a history buff, so it was interesting to hear her bring it up. I decided to poke around a little more.
I went to Amazon and found "The Real Lincoln" Wow! The reviews were either highly flattering or outright rants against the author and material. This much emotion can either be a sign of contrarian goodness, or wack-a-doodle pandering to the fringe element -- or both.
So I did a bit more research on the reviews, found nothing I considered substantially damning, and downloaded the book to my Kindle.
We all know the narrative around Abe Lincoln: In the early United States, the south had slavery. The north did not. Over time the differences between the two led to a fight. Lincoln, who campaigned his whole life to free slaves, finally was able to abolish slavery in the states and to save the Union -- at a horrible cost in lives. Lincoln freed the slaves with his famous Emancipation Proclamation. His Gettysburg Address laid the groundwork for why the north fought. After the war, the treasonous Southerners, who hated the slaves, did all they could to harass blacks, eventually forming the KKK.
In addition, as I've been hearing from various friends on the internet, to say anything good about the South is just about as good as wearing a KKK robe and burning a cross in your front yard -- we all know what you mean. It's code for racism. The South means slavery, hatred, and oppression. The only thing the South is good for now is a rallying point for poor, religious white trash. The day that every symbol of the South is removed from the country can't come too soon. Southerners were the Nazis of the late 19th century.
I overstate for effect, but only a bit.
To a contrarian like me, these types of statements are like a red cape to an angry bull. I just have to keep poking around. There's lots of smoke here (highly-charged emotions that things can only be told one way), but is there a fire? Is there some bit of interesting truth in here?
Trying to ditch the rhetorical baggage, there were several questions I have always had about Abe and the American Civil War:
I got the book, and I had to force myself to read it. Not because it's poorly written: it was very interesting and readable. Not because it was a horrible vitriolic screed: I found it a bit of a rant, but solidly based on facts. Everything that I chased down was true. Not even because it was one-sided: you don't expect to pick up a book called "The Real Lincoln" without expecting a harsh, scathing criticism.
I found it hard to read because it went against the grain of so many things I had learned in school and society. I know nothing about the author, but he didn't seem like a crazy person. Emotional, perhaps. Many times he started with facts and narratives and then sort of evolved into a tirade. He overstated and exaggerated, as one would do in a heated argument. But he did not lie. You could almost see him, red-faced, waving his arms around.
People getting this emotional? About something that happened what? 150 years ago? it just gets better and better.
If you have ever wanted to sit down with an intellectual person from the South around 1870, have a couple of beers and talk about the Civil War, this is your chance. Even filtering out the author's biases, I found this to be one of the most eye-opening books I have read in years. I could feel his passion for the topic. I find that people who have passion, even if you do not believe in what they are saying, make you more passionate as well.
I'm not going to get into what I learned or why I have changed some opinions and deepened others. I can't do these topics justice, and it would only invite needless debate. Read the book yourself. Form your own opinions.
There was something very important that happened to me reading this book: the Civil War went from some kind of abstract concept -- perhaps about state's rights or slavery or something -- and became something that I really felt. Now I know why Lee, when asked at the beginning of the war, aren't you a patriot? Don't you want to stay with the Union? said "I wish to live under no other government, and there is no sacrifice I am not ready to make for the preservation of the Union save that of honour. If a disruption takes place, I shall go back in sorrow to my people and share the misery of my native state, and save in her defense there will be one soldier less in the world than now"
I love you guys but please don't show up in Virgina or I'll kill as many of you as I can? What kind of rebellious attitude is that?
Now that I've read the book, I know what the "American Bastille" was, why there were riots during the war, how the first Income Tax got passed, what the "American System" was, how the South viewed reconstruction -- all kinds of little things I must have missed in history class. I also know much more about the answers to my questions mentioned above.
More importantly, I am beginning to know the feelings of those who fought. They just aren't cardboard cutouts appearing in some comic book. The southerners weren't villains with funny hats -- they were just like us: same language, same history, same values (slavery excepted, of course), same culture, same literature and art. This was the first war that we Americans lost. Not quit, not negotiated a deal, but lost. This is what our civilization looks and feels like when it is totally defeated. Moving over to the North, this is what our civilization looks like under extreme duress. What rules of civilization do we keep? What do we let go? Why? This is how we got to our modern version of our country.
I never realized until recently how different the United States was prior to 1860. We teach kids about July 4th and 1776, the Declaration of Independence and the Constitution and all of that, but all of that was really for a different country. For all practical intents and purposes, the country we have now was formed in 1861.
So many times we teach history as a linear process full of dates and events. This thing was wrong, so it led to this thing, which is naturally better. Logically then, the farther in history you go back, the more "wrong" people must be. This leads children to believe that progress is inevitable and that the people from the past were somehow stupid for thinking the things they did. But once you manage to emotionally connect to history, it suddenly blossoms into a beautiful tapestry of intelligent, honorable people doing the best they can under difficult circumstances. Lincoln wasn't Hitler, but the Southerners weren't Nazis, either. Now that I can see the southerner's viewpoint, it's a wonderfully complex story. I plan on learning more.
Are you living somewhere that people tell you a version of history that doesn't seem to make sense? Find people who can challenge your mind. Listen to their arguments. Feel their emotion, but even more importantly, double and triple-check their facts. You just might learn something. I know I did.
And that was worth being a little contrary and poking around.

Abraham Lincoln was a famous micro-manager. They said he spent as much time in the telegraph office as he did in the White House.
The more I play with F# the more fun it gets. Take for instance this problem I was having last week.
I was doing some text processing. As part of that, I set up a few RegExes. As I continued coding, I realized that I was following a pattern: apply the regex, check the match count, and if there were a bunch of matches, either get the first or last item. So the code looked like this.
open System
open System.Text.RegularExpressions
let regFindNumbersInParens = new Regex(@"\([0-9]{1,4}\)")
let doSomeStringStuff (s:string) =
let parenNumMatches = regFindNumbersInParens.Matches(s)
if parenNumMatches.Count > 0
then parenNumMatches.[parenNumMatches.Count - 1].Value
else ""
// more stuff here
The more I got to thinking about it, the more I realized there were a lot of situations where I wanted the first or last item in a bag of stuff. Of course, this is already available for a bunch of stuff, but what about things that only had an IEnumerable, like Regex Matches? What I'd like is something like Matches.Last or Matches.First
The RegEx collection implements ICollection and IEnumerable, so we can get an enumerator and walk it. (This was actually the first thing I tried). But poking around, it gets easier still.
The generic case is very easy to do. If you want to get the first item, it looks like this:
let firstEnum (e:IEnumerable) = e |> Seq.cast |> Seq.nth 0
Note the use of "Seq.cast" -- this is because if all you have is an IEnumerable, you can have a bunch of anything. You really don't know. Hopefully every time you get a new item from the collection you get one of the same things, but it's not strictly required. So F# adds "Seq.cast" to take a bunch of IEnumerables and fake-out a strongly-typed collection. It's not perfect, but it's good enough for government work.
The last item gets a little trickier, since sequences aren't necessarily all "there" when you compute them. I mean heck, you could have a RegEx match that gives you a million results. Ideally you wouldn't walk the collection unless you had to. But, if you're going to the end, you're walking the list. So to find the last item, you have to convert to an array first:
let lastEnum (e:IEnumerable) =
e |> Seq.cast |> Seq.toArray |> (fun x->x.[x.Length - 1])
Note that I'm not checking to make sure the collection has anything in it. That's simple enough to do, but let's stick with the plot.
So I throw my Regex MatchCollection at this wonderful hunk of code -- and it barfs.
I throw a lot more collections that implement IEnumerable, and it works fine.
WTF?
After a LOT of googling around, I came across this thread about RegEx.Matches. In it, Tomas Petrice explains that the RegEx collection is one of the "old" ones -- it implements an IEnumerable, but not an IEnumerable
If all of this is sounding complex, the problem is that RegEx was coded a long time before generic collections, and nobody has updated the code. So while it looks like a collection, smells like a collection, and may even taste like a collection, it's not the same kind of collection as all the other ones.
Thanks Microsoft!
So let's fix this so it will stop annoying folks.
The first thing I tried to do was to write one function that would take either an IEnumerable OR an IEnumerable
I failed miserably.
I still believe this is possible, but hell if I can get it to work. Perhaps by wrapping the code in a type and using method overloads, but I digress. What I did find out with this adventure is that programmers have tremendous flexibility with types in F#. For instance, I can write a function that takes a type with certain conditions.
let inline getNameValue xItem =
let name = (^a : (member get_Name : unit -> XName ) xItem)
let value = (^a : (member get_Value : unit -> string) xItem)
name, value
There's a heckuva lot going on here, and I don't want to get into a detailed F# discussion. Suffice it to say that this method only takes an argument that has accessors for Name and Value, not that implement some kind of interface. So I could decide I would write a method that worked on any object that implemented a method called "Foo" and you could pass me any object that implemented such a method -- no matter where you got it. It's called "duck typing", and it's an entirely different thing from what most .NET developers are used to.
I also found that I could extend built-in types with new stuff. For instance, say I wanted a function that would give me "ForEach" capability on anything that implemented an IEnumerable. Sure, I could write a stand-alone function, but why not just make it part of anything that has an IEnumerable. Whiz-bang, easy enough to do:
type System.Collections.Generic.IEnumerable<'a> with
member this.ForEach(f:'a -> unit) =
for item in this do
f item
Hell, a body could go ape-wild with all this power, adding on dozens of methods to each of the primary system types.
Maybe not a good thing to do!
Finally I found out I could write a function that took any number -- float, int, bigint, whatever -- and work with it.
module NumericLiteralG = begin
let inline FromZero() = LanguagePrimitives.GenericZero
let inline FromOne() = LanguagePrimitives.GenericOne
end
let inline factorize n =
let rec factorize n j flist =
if n = 1G then flist
elif n % j = 0G then factorize (n/j) j (j::flist)
else factorize n (j + 1G) (flist)
factorize n (1G + 1G) []
There's a whole nest of goodness in there. How can you write a strongly-typed function which takes any type of number? But that's a story for a later day
So what was my answer? Here's the dump:
#light
open System
open System.Text.RegularExpressions
open System.Collections
open System.Collections.Generic
type System.Collections.Generic.IEnumerable<'T> with
member this.getLast =
this |> Seq.toArray |> (fun x->x.[x.Length - 1])
member this.getFirst =
this |> Seq.nth 0
type System.Collections.IEnumerable with
member this.getLast =
this |> Seq.cast |> Seq.toArray |> (fun x->x.[x.Length - 1])
member this.getFirst =
this |> Seq.cast |> Seq.nth 0
type System.Text.RegularExpressions.MatchCollection with
member this.getLast =
this.getLast :> Match
member this.getFirst =
this.getFirst :> Match
member this.toSeq =
seq {for i = 0 to this.Count - 1 do yield this.[i]}
member this.toArray =
[|for i = 0 to this.Count - 1 do yield this.[i] |]
let regFindNumbersInParens = new Regex(@"\([0-9]{1,4}\)")
let doSomeStringStuff (s:string) =
let lastitem = regFindNumbersInParens.Matches(s).getLast
// more stuff here
This code allows me to throw a "getFirst" or a "getLast" on any kind of collection I'm given -- whether it's a shiny new-fangled IEnumerable collection or just an old-hat .NET 1.0 RegEx Collection.
What I wanted initially was to be able to throw any untyped collection at the function and have it give me a strongly-typed last element, but my F# Kung-Fu has failed me. Clocking in at around 18 lines of code, this seems a little long to me, but it's always that way.
In either case, works good enough for now. And perhaps somebody else will run into this RegEx problem and be able to find some help here.
The cool thing here is the degree of freedom you have with playing around under the hood. This is not always a good thing, but like everything else, a little bit will go far.
UPDATE: Fred Leitz wrote in and pointed out that my function finding the last element in seqences is a bit whacked. No point in converting to an array just to go to the end. So it looks much better like this:
let lastSeq<'T> = Seq.reduce (fun a b -> b)
Couple interesting points here.
First, converting to the array and checking for "Length" walks the structure anyway -- which is what our new code does. So the old way copied it all over to a new structure, walked the array to get the length, then walked it again to get the last item. The new one just picks up 2 items from the sequence at a time, returning the second one. When you're done, the second item will be the last item in the sequence. No copying, no double-work.
Second, if you're going to be walking the sequence a bunch, finding the length, getting individual items, etc, you should go ahead and make it an array. But, as in this case, you make it, find the last element, then throw it away, there's no point in using up memory and CPU cycles.
One of the things about Functional Programming that strikes me as completely different from OOP-world is the degree to which you are always inspecting your variable structures and deciding which forms of structures, collections, and functions work best with the data you have. Many times in OOP we have abstracted away so much of the "guts" of the problem that the programmer is dealing in abstractions far removed from the physical implementation of the data and programming. This makes OOP easier to understand, design, code, and maintain, but it also makes it more prone to bone-headed mistakes.
Thanks Fred!
I've spent the last ten years working on creating my own startup. I've read dozens of books, hung out with other people who wanted a startup online, joined clubs and associations, met with "experts" , etc. More to the point, I've actually built 5 startup ideas and tried them out.
I'm finally reaching the point where I'm starting to get traction -- I'm not Ramen-profitable, but some things are starting to "click" and I'm making enough money each month to cover server and domain expenses plus beer money. That's not Bill Gates-rich, but it sure beats a stick in the eye.
Now that I'm beginning to get traction, I'm also beginning to feel like I may never make it.
Why? Because there's a huge obstacle that I am not sure I can overcome on my own.
Is it programming ability? Nope, got tons of that, and I love to code. Is it "stick-to-it-ness"? Nope, I used to have that problem, but now I realize that a year or two minimum is required to begin to get an idea of potential. Is it business smarts? To some degree yes, but not enough to matter. I understand that there are ways to quickly test a market and that market research must come before development. Find your customers and live with them. How about time? Nope, I make enough when I consult that I have time to work on my startups. Motivation? Not really, as I love building things and learning, and there is nothing in the world like getting a check for some service or product you have provided.
It's life.
I find this hard to explain, but I'll give it a shot.
In your teens and 20s, it is not unusual for you to have a kind of empty feeling. You might wander "What is the meaning of life?" or "What do I want to be doing?" or "What is the right choice for me now?" Life can appear empty and foreboding. Although you have things that you love doing, and it's great hanging out with friends, there is this feeling that you should be needed somewhere, that you should be fitting into the grand scheme in a big way, and that somehow you are supposed to make these decisions about how to make all of that happen.
Smart people take those feelings and turn them into ambition -- they go to school, self-educate, join the military -- do all sorts of things to maximize where they fit into the grand scheme of things. Some people join up with various causes and groups -- nothing wrong with these groups, but for many they serve an unacknowledged psychological need to be a part of something. Some folks get married.
Some folks just learn how to be permanently apathetic, through drugs, video games, TV, sports, whatever, they have learned to kill this feeling of wanting to make a difference and fit in.
But they are the rare ones. Everybody learns to dull this feeling to various degrees through these things, but most folks find some pieces of life where they are needed and where they make a difference. Many people find dozens.
So the day comes in your 30s or 40s when you want to do a startup.
And you have programmed your entire life to resist this.
Let's say you decide to start on a Monday.
You wake up on Monday. Time to kick it off, right? Well no, it's time to hit the treadmill. Can't take a day off from the workout. After that can you start? Well no, then it's taking the kids to the doctor this morning. Remember you promised? How about when you get back? Well, only an hour or so there, and you haven't blogged in over a week. Remember the goal to blog once a week?
After lunch? Sure thing! You sit down at the computer -- only to realize that ten of your Facebook friends have various things to say that you should respond to. Then you drift off reading HackerNews for an hour (very easy to do) and suddenly it's supper time.
I could go on, and on, and on, and on. There is a significant element of technology evolving to take all of your attention, which I've written about before. But there's also the fact that as you get older, things get more complicated.
When you write a program for a system, many times the code is in it's best shape the minute you stop coding. It does exactly what you want, and it is easy to read. Over time, however, if you (and others) continue to maintain this code, it gets a lot of "cruft" -- stuff that works, patches that make sense, but might not fit into the larger picture. It just works -- it's not pretty. Over months and months of patching and kludging, the code gets so much cruft it's hard to tell what does what.
Life is like that too. Each time you pick up a habit or make a commitment, it seems like a very logical thing to do at the time. But over many years, the habits and commitments build up, and they don't always interact with each other in optimum ways. Remember that habit you had of going out with the guys drinking beer and watching sports games on Monday night? Well that doesn't fit into your new habit of needing to exercise on Tuesday morning.
At first these are simple conflicts -- do I keep my running habit even if I'm traveling on vacation? But later they all start stacking up. For instance right now it is 10am Sunday morning and I have at least 4 commitments I have made, 3 of which I am ignoring. Sunday mornings is my designated TV time -- I love watching the political shows. It is also my time for exercising -- nothing like a good workout while the family is gone to church. It's the time I should be coding on my startup. And I should be writing on my blog. Today the blog wins.
The obvious answer is to prioritize your startup above everything else -- just do it. But when there are real people involved, it's not so easy. Let's take decisions involving family as an example. My oldest son Bruce is still upset me with because I did not attend his sporting events when he was a kid. My wife was talking to me last week to make sure I don't make the same mistake with the two children still at home. Startups have a 1-in-10 or 20 chance of succeeding. It might take another ten years to become self-sufficient. Even though I know now that it is doable, in ten years all my kids will be out of the house. Do you provide for your retirement or make memories with the people you love?
The easy answer is "family comes first", and of course, it does. But I don't think family shouldn't be some kind of god in your life. People in a family love each other no matter what and are all supposed to be encouraging each other to grow and do their best in life. This pattern of parents becoming martyrs -- spending every waking moment obsessing over their children and taking them from one event to another -- doesn't seem very healthy, either for the kids or the parents. I honestly hope that some activity I was involved in as a child didn't prevent my parents from enjoying their retirement. To think otherwise would be the epitome of selfishness.
These commitments and habits are complex, and inter-related. While I can dynamically choose each day which to prioritize, I find that over time it leaves insufficient time for working on my startup. This would not have been true when I was 20.
So now I'm in a spot where my existence itself conspires against my larger goals. Everything that I am -- the choices I have made, the habits I have formed, the promises I have made, the people that I love -- pulls me away from trying to create something that people want. And why shouldn't it? A startup is all about trying to find something people want. A rich life is about already having found it.
No answers from me this Sunday morning, but I've checked off the "blog" item for today, now on to 4th of July celebrations. The code can wait, right?
It can always wait.
The things you may or may not have not done in the past have nothing at all to do with it. If you define yourself by your past actions then you are doing yourself a great harm.
Every minute you make new choices, do new things, and those choices and actions are your life. The things you do, the decisions and actions you take, even if nothing more than decisions to be happy under miserable circumstances, constitute your life. You own them, and by continuing to take ownership and dancing above the chasm, you live fully.
We must imagine Sisyphus happy.


I was downloading data from my PulseOx this morning and thinking about some problems i had yesterday with type coercion in F# when it occurred to me how good I am at whining and complaining. It's something of an art form. We live in a wondrous world, yet we complain all the time. Everything is awesome and everything sucks. Dude! Where is my jet-pack?
Then I remembered those cool pictures I found last week on the internet and changed my mind.
Take a look at these paintings. They look pretty good for an amateur or new painter. Perhaps something a person with a few years experience could do. I don't know anything about painting, but I thought they were beautiful. The artist shows a good use of color, an ability to put together a nice scene, and there's a warmth that comes through when looking at them.


Which makes it all the more amazing, because the man who painted this is blind. He cannot see -- not "I can see a little light and dark at times" but can't see anything at all. He was born without eyes. And he is a painter.


Eşref Armağan was born in 1953 to a poor family in rural Turkey. Growing up, he decided that he was going to be a painter. Not an unusual goal in life for some, but definitely an unusual one for a kid from a dirt-poor family who has no eyes. You might even say it was a ludicrous goal.
Fifty years later, and he's a well-known artist. He works with one color at a time, one color each day, and it has to be absolutely quiet for him to work. First he outlines his picture, then slowly adds color and texture. It's not just his painting that makes him amazing -- it would be possible to learn painting through rote. It's his ability to create 3-dimensional scenes in his mind and then keep that model in his head while he continues the painting over many days. Not only does he know where all the objects are in his painting, he even uses perspective and color correctly. Painters in the west didn't use perspective in their paintings until just a few hundred years ago.
So perhaps he is even smart enough to construct these 3-D scenes and keep track of them in his head, but how does he know how to use perspective in such a way that looks realistic to us? How does a blind man know what a good or bad picture would be like?


In the last decade or so researchers have studied the way he works on his paintings. They've even put him in an MRI and PET scanner to see what parts of his brain he is using when he paints. And they found something very interesting: when Eşref paints, all kinds of activity takes place in his visual cortex. This is astounding since people who are blind don't use their visual cortex -- it's for processing images. There is obviously much more to "seeing" than just eyes.
It's a fascinating topic, bringing together art, cognition, brain science, and the power of hard work and a positive attitude. There's even a book out, "Drawing and the Blind"
So next time you're pissed about something in life, think about Eşref -- who's making miracles happen simply because he decided he wanted to.
The most important thing we need in life is a little perspective.
EDIT: Here's a video about Eşref
What product can you buy that is expensive, works with your PC, does things that could be critical to your health, but the salesman can't tell you how to use it?
Sounds stupid, huh?
A lot of medical products, that's what.
I found this out during a long and painful experience with Obstructive Sleep Apnea.
I can't breathe at night -- it's not being fat, although I am, it's that for some reason the muscle tone in my neck sucks. So as soon as I drop off to sleep, my throat closes up and I stop breathing. As my blood oxygen levels drop, adrenalin kicks in, I wake up a little bit, my throat opens up, and then I immediately pass out again.
Most people have some form of obstruction when sleeping. However when it reaches over 120 times per hour, you're basically waking up twice a minute. That means no REM, tossing and turning all night, your adrenalin and stress hormones are in high gear, your heart rate is surging all night long, your blood pressure is out of whack -- as you can imagine, not a good thing. If left untreated, OSA at that level can lead to heart attack and stroke. Early in life.
So I went to the doc and told him my problem. Told him I needed a CPAP. (Continuous Positive Airway Pressure -- a device that does not breathe for you, but keeps your airway open so that you can breathe) My wife and I have been observing the symptoms for years, we're done the research, and now it is time for action. He said I needed to go to a pulmonary specialists first -- a guy who specializes in lungs and hearts. Why? Because it had to do with breathing. Could I have just went to the pulmonary guy first? No, they won't take you without a referral.
I go to the pulmonary guy. Tell him I have this problem, have had it for years, it's gotten bad enough that I am unable to get enough sleep at night and my health is going down the toilet. I need a CPAP. Pronto.
Do I get a CPAP? Nope. I get a "sleep study"
Sleep studies cost $2000 and they are very important to make sure that you really have the problem that you say you do. Or at least that's what they told me. They measure your breathing, pulse, movements, and blood oxygen through the night. They also can fit you for a mask to use with your CPAP and show you how to use one. You'd think sticking a mask on your face would be fairly simple to learn, but it's good to have support.
I show up, tell them my problem, and say "So, once you measure this, do you start fitting me for a mask?"
Nope. We send you back to the pulmonary guy. We just take measurements. Another guy comes in during the day and reviews the data. Then we send the data to your pulmonary guy and he makes a decision.
Gee, I thought I had already made the decision.
Did the sleep study. Went back to the pulmonary guy.
Can I get my CPAP now?
Nope. He tells me yes, it looks like you have Obstructive Sleep Apnea (which was very much a "no shit?" kind of moment for me) Now you must have a CPAP.
Yay! Cool! Got one here? It's been 4 weeks since I started this and I'm feeling the worst I ever have in my entire life. I will go to another hundred tests and doctors, just please give me a CPAP so I can breathe tonight.
Nope. Dude, you got to go back for another sleep study. We just make the diagnosis here, the sleep study guys are responsible for fitting and making sure it's working okay. They make sure the diagnosis is correct. Maybe it was my imagination, but somewhere far away I could hear cash registers ringing.
Back to the sleep study, where another $2K later I have a temporary mask and my first real night's sleep in months or years. But no CPAP. Where's the CPAP? Hell, you got to go to the medical supply place for that. We don't sell CPAPs. What do you think we are, a home medical device provider?
Off I trot to the medical supply place.
By this point I'm starting to get a little concerned. Even though I am currently under insurance, for most of my life I have been self-pay. And I need this CPAP thing. It's not like a new hat. It's not even like a car, or a house. I need this CPAP thing like I need air. So what happens if I have no insurance and the one I have breaks? What if the power goes out? What if it stops working well? What if my condition changes? It's not like I can play pin-the-tail-on-the-billing-chain every time something needs tweaking. After all, this is my breathing we're talking about. I am very fond of breathing.
So I call the doc and make sure that it's an APAP -- Automatic Positive Airway Pressure device. Through my research I found out that the automatic ones will adjust themselves during the night. That means less fooling around with doctors.
At the medical supply place, I finally get an APAP. But it was programmed to be a CPAP. The doc wrote the prescription for an automatic machine, but that it would be set on a fixed setting.
So the automatic machine was set to run in non-automatic mode. Why? As best as I can tell, for safety. We can't have folks running these machines just any way they want. If it needs adjusting, I was told, just call us up, bring in the chip, and we'll turn it up or down a notch or two.
But how will you know if what you are doing is correct? How will I know when to bring it in? Hey if you start having a lot of problems, let us know and we can reschedule a sleep study. Find out what's going on.
!@#$%$@#
I have reached the end of my patience. The medical system is a system between providers -- doctors, test takers, diagnosticians, pharmacies, and such -- and payers -- insurance companies and government programs and such. Nowhere in that equation was the patient, although everybody was supposed to be in it for him. Nobody had any malice, everybody was acting as carefully and precisely as they could and they all had my best interests at heart. But somewhere along the way I stopped being helped and started being herded.
That's not happening.
Programmer Versus The System
So I go home and find a pulse oximeter -- a little device that measures my pulse and heart rate over night and then reports to me what is happening. It's not a $2000 sleep study, but if my oxygen is fine and my heart rate isn't spiking? For all I care things are working fine.
I have decided to go off the doc treadmill and start taking control of this thing.
The pulse oximeter shows up. Cool little gadget, a PulseOx 7500 Wrist Oximeter, plugs right into a USB port, and after some screwing around I got it to work.
But the program to access the data is proprietary. The data is proprietary. Hell, the USB drivers are proprietary. The company that makes the device doesn't support the software and the guys who made the software are long gone (both of these thing probably happened for liability reasons). So could I have the spec? I'll write my own program to pull the data? Nope. The spec does not exist on the net. Aside from using the software they provide to read and display the data, I have no options. Can I correlate it into larger groups? Perform my own statistical analysis? Export to a standard format? Nope, nope, nope,
Ok, how about re-programming the CPAP to go into full auto mode? After hours of googling, I can't find a way to do that either. For a machine with a data card, a processor, and all these smarts it doesn't seem to want to talk to other machines.
I even found out that my machine was monitoring my breathing habits during the night -- it could tell me of obstructions. Between that and the PulseOx I had a pretty damned good set of instrumentation, but the machine couldn't tell me what it knew. That was for the doctors. Not the user.
"If you have any problems or would like us to look at the data, just bring in the card and we'll take a look" the nurse helpfully told me on the phone.
So I started calling people who sold CPAPs on the net. Spoke to one guy last week. If I bought a new machine, paid for it with my own money, do I get the technical guide along with the user's guide? Maybe a link to a SDK somewhere?
"I can't tell you how to configure your machine or how to get data from it," the guy told me, "the FDA strictly forbids me from telling you the details of how to operate the machine except as a user"
How about not setting the machine, but just getting the diagnostic information it contains? Nope.
I can be a user, but I can't be an informed user. If I want information, I must go to the magic people who charge me (or somebody else) money. After all, what would silly old me know about reading such complex information? It would do nothing but confuse me.
Now I'm not shooting up morphine -- I'm basically using a machine that maintains pressure in my throat while I sleep. Best I can tell, there is nothing addictive or harmful about this situation -- especially compared with strangling myself while I sleep each night. But the machine vendors have a deal with the docs and the techs and the specialists and the rest of the system where everything is a walled garden and I'm not invited in. I'm just the owner, the user, the human being.
If this situation existed anywhere else where we paid tens of thousands of dollars, people would be outraged. But it's all hidden here, except for those who are stuck on their own. Worse, the system is rigged so that open and shared information is harmful to those who provide it, so the incentives are all for controlling more and more information and charging for access (usually in the name of safety or risk or whatever). And so it will simply get more complex and difficult to access.
Meanwhile I've got a cool machine that could help me understand my condition, and I can't do anything but plug it up and turn it on.
"I could tell you how to program it, " the salesman said last week, "but then I'd have to shoot you"
He laughed.
Yesterday a couple of readers gave me grief for all the "knowns", "unknown knowns", "unknown unknowns", etc.. On top of that , the definitions got a little loose in the essay.
So instead of fixing the essay (Gad no! This is the internet! 2-hours work constitutes long-term commitment) I thought I would enumerate the scale of what you can know and what you can't. I'm probably reinventing something from somewhere, but I think these distinctions are important enough to restate. One of the authors from the articles I quote came to the conclusion that you can deal with any amount of unknowns simply by knowing the questions. Hell no. That's totally whacked.
Ten years ago I sat in the office of a high-ranking procurement officer in the military. He was a fast-riser, had a masters in mathematics and was a very sharp guy. I was explaining to him that the way the software development was going on a certain project was troublesome. The people, technology, process, environment, and bureaucracy were not working together. Instead various misunderstandings, agendas, confusion, and ignorance was causing chaos and poor performance.
It was a complicated discussion, made more so because each of the varying factors - people, technology, process, bureaucracy, environment - were pretty dang complicated in their own right. The way they all worked together -- or were supposed to work together -- was even more complex. Remember, this guy was probably a genius. Literally responsible for tens of billions of dollars. But he had no concept of what he didn't know. It was like trying to explain String Theory to Julius Caesar. We just had no place to meet. Sure, given a few weeks of gaining some common understanding, this guy would be teaching me something. There was no stupidity at work -- he was a brilliant man. He wasn't even classically ignorant -- it wasn't like I could give him a class and a couple of tests and somehow that would fix things. We simply couldn't communicate.
I'll never forget what he said.
"I'm not sure I'm following you completely, but you see, I'm on top of the whole thing. I can ask any questions I like and get an answer"
My thoughts were: yes! But you neither know the correct questions, what the answers might imply, or how the answers to one question might lead to other questions!
Simply asking and answering questions is not enough. This guy had the magic power -- whatever he asked, you can be sure that somebody was going to work as hard as they could to come up with an answer. And the project was still hosed up.
So in the interest of simplifying the discussion of how ignorant we all are in various ways, I propose the following scale:
This one is a little complicated, so let's unpack it a bit. Picture a professional card player. He knows what all the cards in the deck are. He knows how to play all of the games involving cards. He knows all the jargon involved with card games. In addition, he knows why some card games are better than others, and he can create his own games on the fly. In fact, given some paper and a pencil, he could create a new card game complete with new kinds of cards, new terms , new rules, new strategies, and new goals. And people would like it. This guy has not only mastered the terms and symbols of cards, he's mastered how those symbols go together -- flush, straight, 3-of-a-kind. He's even mastered how all of the various operations work on cards: drawing a card, using a discard pile, laying down, etc. But it goes beyond that: he knows the principles that all card games are built on: competition, turn-taking, combinatorial logic, etc. He knows why certain combination of rules and cards make a good game and why certain combination don't. Based on this knowledge, he can modify existing games, add new card types, come up with new jargon, heck, create his own game. He is operating at the lowest level of ignorance
Of course, it's never "exactly" like that, but the generalization works for a while, sometimes for a long while, and it helps people start working in the new domain. This is the expert on frogs that is called upon to work in the field of iguanas. The various analogies may work so well that no problem is ever discovered -- or there may be subtle differences between the domain he knows and the one he is working in. This is the "unknown unknowns" from yesterday's post. The various abstractions and analogies being used seem fine. It's impossible for the practitioner to know if some new terms or procedures completely outside his experience will show up because he has no idea what is in the actual world he is operating in. All abstractions are leaky. Things might come along that he has no terminology for, things could happen that he's never seen before. If you're creating a new business, or learning a new skill, you're going to spend a lot of time here. A lot of breaking-ground science happens here as well.
Ignorance Level 7 is where deities are used. We're a couple of cave people on the beach. Never been there before. There is this big body of water. "Auugwheychat!" I say, using a word that has no meaning at all to us. We leave. From now on, "Auugwheychat!" is our word for the ocean. It's ways are mysterious. Who knows what it is made of, or what is in it? Who knows what it does, or how it does it? It is the unknown. It is "Auugwheychat!"
Of course, the human mind can't stand a void, so we immediately start anthropomorphizing it. Level 7 is very uncomfortable, and people will not remain here. "Auugwheychat!" is a woman. It is a jealous lover. It has many legs like the centipede, etc. Welcome to a plausible explanation of the origin of all those Greek and Roman gods. It got so in ancient times that the stories were plethora and many times conflicted with each other -- after all, you got to make up your own as you went along. The gods were so numerous that single rivers or woods would have their own god, which makes sense too. After all ,who in ancient times really understood much about a river? Aside from being made of water, it had all sorts of terms and did all sorts of actions that were completely baffling.
Note that you may physically be unable to move from one level to another. No matter how hard I try, I'm never going to get a slug to understand arithmetic; there's simply no cognitive ability. Perhaps humans are slugs to most of the rest of intelligent life in the cosmos, in which case not only would it be silly to talk to us, it might actually interfere with our evolving into some sort of creature that could understand things. In other cases the cognitive ability is there, it's simply a matter of vastly different life experiences, as in our caveman. Sometimes we have a wide array of life experiences, but we don't have enough in common, or we don't have the time to start creating common models that we can both use, as in our procurement discussion.
The worst case, of course, is when we understand many models that mostly work, but we have no idea where they do not work. We may not even know that there are gaps. We're just humming along using our broad generalizations, working metaphors, and patterns of other models, and things seem to be fine. This is the scientist who speaks out of his subject area, or the historian who tries to explain Bayes Theorem but misses hugely important parts. A vast, vast majority of the time we are at Level 6, which is how it should be. It's probably all we can cognitively manage. Our brains are able to fake higher levels to an amazing degree -- to such a degree that we are not even aware of it.
Some domains are easier for us than others to reach Level 7, Card-playing, for instance, or some forms of math. Some are probably impossible for us. The vast majority of domains we are able to use Level 6 techniques to fake our way up to Level 3 enough that nobody is really the wiser. Most of the time things work the way the way most things work most of the time. But as things get more interconnected, as all the pieces get smaller and hooked together in more complicated ways, the "gotchas" multiply. And are largely invisible. Not a good thing.
In the modern world the stupid are cocksure while the intelligent are full of doubt. - Bertrand Russell
I haven't been blogging much lately, and it all has to do with flying. Fifteen years ago a 22-year-old kid at the airport told me something that's been resonating with me ever since.
In my mid 30s, I had decided to learn to fly. So I went to the airport, where I met a young flight instructor. He seemed like a nice enough fellow. He asked me about my desire to fly. Immediately I went through a list of things I'd like to do -- first I'd like to learn how to navigate, and then I'd like to try out landing on grass strip, and then....
"Hold on a second there, hoss," he said, "Right now you don't even know what you don't know."
As I learned to fly, first as a private pilot, then getting my instrument, commercial, tailwheel, high-performance, and complex ratings (including trying out twins, seaplanes, and stunt planes, among other things) I thought a lot about what he said: I didn't even know what I didn't know.
He was right.
His point was that while I was very aware of what I'd like to do in terms an outsider would understand, I had no domain experience at all in aviation, aside from watching a few movies and being a passenger. It's not just that I didn't know the questions, I wouldn't understand the questions, wouldn't understand what they meant, what the answers might mean, or how the questions fit together. There was no basis for us to have an intelligent conversation.
So we spent a lot of time doing things not on my list: flying slow, approaching a stall, reading METARs, talking about maps, talking about priorities in an emergency (aviate, navigate, communicate), talking about all sorts of domain concepts, talking and learning. We created a common model understood overtly, tacitly, and functionally from which we could start to have a conversation.
You see, I thought I knew what I wanted, and I was right in a way, but in a more important way I was worse than ignorant -- an ignorant person can be taught, he simply needs to be exposed to information -- I was a stranger in a strange land. I was just some guy with a boatload of terms and stories that all kind of fit together in my world-view but had little credence in his -- even though the terms were the same. First I had to learn and be able to physically and symbolically manipulate concepts about what I didn't know, aviation, and then we could start talking about what I'd like to know.
The reason I haven't blogged much lately because I am beginning to feel that the vast majority of what we say and do in the world is horribly incomplete. We're all like kindergarteners to somebody else. We don't know what we don't know. This has very mportant consequences
First I'm not talking about the Dunning-Kruger effect, where people are incompetent believe they have great competence beyond their ken, although this is certainly a subset. I am also not talking about Anosognosia, where people believe they can do things, function in some way, that they cannot, and are unable to realize this, although this too is a subset. I'm talking about the space between being an outsider to a world and being ignorant of it's questions and issues. Cavemen are not ignorant of particle physics: it is outside their world so completely that there's no common ground to discuss knowledge. No amount of questions and answers that is going to get a caveman to start working with bosons.
I started programming in the mid 70s. Back then there were 2 or 3 kinds of personal computers. I learned BASIC on a Commodore PET, but it could have just as easily been on an Altair 8800 (some acquaintances had one) The cognitive leap between turning the thing on -- just like a light-switch -- and programming was minuscule. I could have had my sister (yuck!) programming with just a small amount of help. When I started programming, nobody had PCs, nobody wanted PCs, and PCs were simple to own and use. You could know everything about PCs by taking a week and hanging out with the right bunch of nerds.
Over the next 30 years, I became a computer consultant, a generalist, specializing in not being a specialist. I lived in a rural area and the way I started my business was to meet people with computer problems, walk into their workplace, and fix the problem. Whatever that problem might be. I did hardware, software, the first Mac network in town, manufacturing, printing, you name it. I have tried to have a general overall knowledge of computers and a general overall knowledge of business. My professional goal for the next few decades was to stay on top of a field of study that started out very simple, and got immensely more complex. I've had the unique opportunity of being in the passenger's seat while an entire new world-wide industry took off and changed things forever. Very cool.
Of course, in the last ten years or so it's gotten too much: there are too many major variations on personal computer software and major variations on deployed hardware platform. Over this time I kept seeing the same pattern. Let's take,databases. Initially there were very basic DOS databases (Dbase anyone?) Pretty soon multiple players come into the market, the level of expertise rises dramatically, things get super complex, and suddenly you get people who are expert in one software aspect of one database platform. Repeat and rinse.
Today if you asked me if I knew how to program a database, I'd explain that I can and have worked in many different platforms: Oracle, SQL Server, Sybase, Access, flat-files, etc, but my work has consisted of designing and deploying project-based work. There's a whole other world of database programming involving shards, clustered indexed, column-based datastores, replication, etc that I think I know enough about to have a conversation, but not immediately use. These are the known unknowns for me.
I believe I am seeing the end of when a technologist can walk into a company and start having a reasonable conversation about any of the random hardware/software combinations that might be running there. We're still at the point where sharp people can learn quickly, so consulting is not dead! But the days of having a vast functional cross-cutting domain knowledge are coming to a close. Consultants, even the sharpest ones, that work with random clients are moving into unknown unknown territory.
I'll never forget when I joined Microsoft Developer Network. The first month I got all these discs in the mail. Woo hoo! I had a copy of everything Microsoft made! I could take my time and learn product X, or take a look at system Y.
Then the next month came, and there were more discs. Then the next, and the next. Discs started to pile up around the house. I bought boxes for them. Products had multiple releases and patches. Microsoft set up tests for each category, then each product, and finally each product version. Pretty soon I had hundreds of DVDs but the hits just kept coming. Microsoft had forty-thousand people in Redmond making new Microsoft products, making the existing Microsoft products more complex, and all I had was one guy at the other end of the disc mother lode -- me -- at first trying to master but later just to stay on top of the language of the technology. I have a closet full of MSDN discs.
Used to be Microsoft was the big game in town, but now Microsoft is just one player in a large ecosystem of technology creation. I never stood a chance.
Over the years I am coming to believe this same thing is happening in most all of modern life, to all of us, only it's happening at a slow enough rate and we give it such little attention that we are unaware of it.
Recently I had a friend recommend a good book, "The Science of Fear". In it, the author goes over his reasons why we are afraid of things we shouldn't be, and how external agents use that to their advantage. Next I read "Predictably Irrational" in which that author went over how people made economic decisions based on many other things besides a mathematical understanding of value, and how that changes economics. Finally I am reading "Against the Gods:The Remarkable Story of Risk" in which THAT author goes over how people have learned to deal with very complex systems of risk, using logic and math to make intricate and detailed plans and decisions about things. About how we don't reason in superstitious ways like we used to.
Now each of these books is good, and each has a point. But each is missing something from the others: context. The fear guy has simple theme -- people have a primal brain and a logical brain -- and he takes that to the conclusion that we are all manipulated by [insert evil actor here]. Seems like he is missing the fact that it is not just fear, it's perception, it's understanding, it's expected impact -- but you can use the word "fear" to cover a lot of ground, and that's what he does. He has a semantic hammer, and everything in the world is a nail. The others have similar flaws. You get one piece, you miss others. You tell a great story, but big pieces of it are incomplete.
Each of these books was written by people who had important things to say and were somewhat experts in their field, yet each author drifts subtly from an area of strength to one of weakness while continuing to expound as an expert. The psychologist begins talking about economics, or the economics professor begins discussing history. Most people will never spot the holes -- unless the book has some great political impact, there's simply not the attention given to the overly-broad statements, misstatements of fact, or important omissions. It's not false. There is no deception going on. In fact, mostly kinda sorta it's all true. The models are incomplete or lacking in subtle yet perhaps important ways. It's "truthy"
I remember after I learned to fly I took some "practical aerobatics" classes from one of the better flight instructors in the nation. The guy was amazing. You could ask him any question "What would happen if we turned the plane upside down, killed the engine, and got into an inverted spin while in IMC?" and he would sit down, walk you through the issues, then take you up in the plane to practice it.
One day a very unusual plane flew into the airport. As the pilot (one of his friends) came into the FBO, he asked "Jim, how long do you think I would last if I tried to fly that without any training?"
Jim chuckled, "You might make take-off, but you'd never land it"
There are old pilots and bold pilots, but no old bold pilots. Aviation is all about having a damn good grasp on the knowns, the known unknowns, and the unknown unknowns.
While we all may find it easy to believe that most other people are stupid (to use Russell's term), it's much harder to accept that we all suffer equally from this. Intelligent and educated people, in fact, more than others. Let's take a look at science, because that's where the gap between what we'd like to be and what we are is the most painful.
Initially a person could be a fair master of everything scientific: people up until the 17th or 18th centuries could learn enough to make a passable attempt at basically whatever field they wanted to play around in. Science was like a field of dirt with a few plants placed every so often. If you knew something about one plant, you could work with most any of them. Scientists were supermen.
In the late 19th century, though, and definitely as the 20h century progressed, the plants grew roots, multiplied, and started forming in unique ways. In addition, all the plants wrapped around each other both above and below ground -- visibly and invisibly. it was no longer clear what was connected to what or by pulling on one thing what other things would be affected. Folks reassured themselves by saying that their little plant was where all the action was, and that we could trust the experts on the other little plants when we needed help, but nobody really understood all the interconnections. It either wasn't important, or it was impossible, so why worry about it?
As I learn more and more, I realize more and more what I don't know. I also begin to see what others do not know -- and believe you me, we do not know a lot of stuff. 99% of internet commentary, including mine, is missing key pieces of information that would make a huge difference. It's enough to make you give up writing altogether. I had some inkling of this, but I don't think it really sunk in until recently.
Sadly, education level does not help. To take a recent example, economist Daniel Klein surveyed about five thousand adults to ask them a few simple questions about economics that had clear wrong or right answers. Now economics isn't the most sexy science in the world (sorry Dan) but having a basic knowledge of it would be important, say, for talking about starting a business, or immigration, or minimum wage, or any of a thousand other topics that tangentially involve economics. Surprisingly he found no correlation between education level and understanding of basic economic theory. But there are a lot of professors, scientists, pundits, and otherwise highly educated people who are more than willing to blog, write, comment, and pontificate where this basic rudimentary knowledge is required. Dan's discovery is like finding out that most PhDs are unable to add or subtract. It should be a scandal, except that it isn't. Nobody knows what they don't know.
it's all becoming like computer science was in the last decade. To have a discussion about just about anything in life makes us a generalists in some sense, and just like me and those Microsoft discs, we don't stand a chance either. The details and new sciences are piling up faster than we can not only grasp, but faster than we can roughly manage a working domain knowledge.
So we have climatologists making statistical errors, physicists making historical errors, biologists failing to understand political science, English majors failing to understand logic. It's not that these people are defective or somehow missed out on some needed piece of education; it's that, at certain times that they are totally unaware, the depth of all the required peripheral fields to their work have increased beyond their ability to function. Somewhere Rumsfeld has to be laughing.
Some scientists, unaware of what they don't know, or uncaring, have decided to become activists. Or historians. Or TV commentators. Or political pundits. Or authors. Or politicians. The great general public still attaches a certain face with "expertise" -- the old lizard brain is not about to go around saving some matrix of skills with each face -- so our brains basically only have two modes: trust him and don't trust him. Lizard brain meeting the cognitively blind pundit is not a good match-up.
Not only do we (the public) do this, much more importantly highly educated people do it to each other. In fact, highly educated people are much more likely to trust another highly educated person than a mentally-challenged person would.
So a scientist in one field, say agriculture, can write a book on better farming and begin talking about meteorology and cross the line between solid science and guesswork without having any idea he's done so. Meanwhile we, and other scientists, take him on the same authority in one area as the other. Then he reaches conclusions that seem imminently rational and germane to modern life: conclusions that are little more than educated speculation -- although neither he nor we know this. The plants are all connected to each other in non-intuitive ways. Not good.
It gets worse when we add activism to the mix. An activist scientist, like all others, can easily rely on nearby sciences that he thinks he knows enough about to reach conclusions. After all, while he might not be an expert, these are sciences in his general field, so he feels qualified to work with them in the same manner as his own science. Maybe he is correct in this assumption, maybe he is not. To an outsider we can never be sure. We know the dentist who starts giving us stock picks may be speaking outside his expertise area, but the expert on frogs telling us about dinosaurs? Not as sure. Are dinosaurs still considered reptiles? What we can say from historical observation is that the distance between sciences where you step out of your depth keeps getting smaller and smaller. 150 years ago your dentist could also be your doctor and veterinarian. Does the frog expert know enough to give advice about iguanas? Who knows?
Like the rest of us, the activist scientist doesn't know what he doesn't know either. but he knows what we should be doing. He has made an emotional commitment to a course of action based on provisional facts strewn together with speculation covering areas that the speculator has no expert knowledge of, but he doesn't know and we don't either. Nobody knows what we don't know.
Science, logic, and reason will carry on no matter what, of course, but once the guy who is the expert in the arcane starts worrying about messages and planning how to wield political power, a line is crossed. In an important way this takes us back to where we started five thousand years ago. There's some big thing we can never understand, actions must be taken to make things right. The magic man will tell us what to do and whether or not we have done enough. He is sure he knows. He can show us other tricks that assure us of his power.
The rest of us are sure of our ignorance. He is not. He cannot petition for political change unless he is sure that he has mastered the subject to such a degree as to know what to do. It means there can be no Anosognosia, no major doubts, no Dunning-Kruger, no unknown unknowns.
In my opinion, an activist scientist is not a scientist at all.
Maybe you are thinking global warming, but I have no particular topic in mind here, you can substitute economics or whatever else you like and still reach the same conclusion.
We're back to the witch doctors preaching to the cocksure.
There is hope, all is not lost, when there's an actual product or reproducible result and not just an opinion or theory the universe has a tendency to cut through the bullshit, but that's a topic for another day.
EDIT: But what do I know? I've finally written an article where if you tell me I don't know what I'm talking about, you're agreeing with me!
I know there will be criticism that while there are common errors amongst regular folk, when it comes to science none of them are important enough to note. Leaving aside the discussion of popular scientific literature versus scientific papers, I leave it as an exercise to the reader to determine how one would know whether an error was important or not without knowing what it was, how it connects with other topics, and what impact it has on people working in other areas. This is not a matter of criticizing certain occupations, authors, or political positions. These examples are mostly random. I am simply observing the side-effects of humans with minds that evolved for the savanna interacting with the incredibly rich, deep, and interconnected system of knowledge that we've created.
After much sweat, pain and tears, I have finally nailed down the source to my troubles with OpenID on my blog, specifically when commenting on posts. It turns out that Filosofo Comments Preview plugin is the culprit, causing a “You must submit a comment using the comment form” error. The plugin hasn’t been updated in about 18 months, so I wonder if the developer has abandoned the project? Anyway, disabling the plugin brings OpenID full swing to my blog. It works, and it works well. I know there have been other blog installations where OpenID commenting has probably ruined your experience to OpenID, my blog included, but hopefully, now that it’s fixed, I can help provide a positive experience.
I’m constantly amazed to read, over and over again, about people who don’t “tweet”, because they don’t care what you had for breakfast. When I first heard about Twitter in early 2007, I had the same feeling. What am I supposed to do? Tell people when and what I’m eating, how often I’m using the restroom, and what time I went to bed? It seemed so pointless to broadcast my life in such a way. Why in the world would anyone care what’s going on in my personal life?
Then, while working for Guru Labs, I was on the road with Christer, another guru, and he was using it rather intensively. After dinner one day, and heading back to the hotel, he called me over to his room to hack on some stuff for our classes. In the meanwhile, he was go, go, go on Twitter (back then, they rocked it hard with a Jabber bot. They’ve since ditched the bot, and as a result, my interest in using it).
Him: “Dude, you need to get on Twitter. It’s a lot like an IRC room. Just post something, and people following you will likely reply if it’s interesting enough.”
Me: “So, I just tell people I’m having a burger for dinner, or that I’m about to take a shower, and people are supposed to care?”
Him: “Would you post that in an IRC channel?”
Me: “I guess not.”
Him: “Here’s the thing: start following others that you would be interested in keeping up-to-date with, like those in an IRC channel. They’ll likely start following you in return, especially if they know you. Eventually, you’ll have enough people to start a conversation with. Then, post something, and see if replies come back in. You know, stuff like what you would read on Techdirt, why the latest random distro sucks, etc. You know, stuff you care about that others can relate with. The conversation will just follow.”
He was right. I started following people first that I already knew personally. Mostly, those in the Ubuntu community. Then I started finding others that I didn’t know too well, but knew that their nerd level was on par with mine. As I started following others, people started following me. Then, the test- posting something. I don’t recall what I posted, as I ended up deleting my account in favor of Identi.ca (which I re-opned later, but lost my nick, my posts, and those I followed), but I’m sure they were awkward.
Then it hit me. When I found cool posts online, I usually shared the URL with an IRC channel I was in. Instead, I started sharing that link on Twitter. Sure enough, it would usually garner a reply. Then, a conversation would ensue. Before long, I “got it”. Twitter was nothing more than a platform for casual, off-the-cuff conversation. It wasn’t about what I was eating for breakfast, as much as it was discussing current topics, trends, fads, and such that I and my followers were interested in. As Christer mentioned, it was just like IRC, except rather that starting a conversation with a very limited set of people, it was being broadcast to anyone who could see my public profile, and people could subscribe to that feed if they liked what they read. Further, it was nothing about what I was eating for breakfast. Instead, it was all about having conversations with people I wouldn’t normally converse with.
Of course, if you know your Twitter history, you know it finally found its fame when celebrities started using it. People wanted to get closer to celebs. Celebs want to get closer to their fans. Then TV stations, news, weather, and just about anything and everything hit the Twitter trend. And rarely, since I’ve been on it, do I see people broadcasting what they had for breakfast. I see hurricane updates, earthquake news, when and where my favorite music artists will be, discussions, arguments and flames over some certain technology and on and on. Twitter has been the biggest platform for discussing the World Cup. Follow your favorite sports team, player and stats. Check out [hashtags.org], and you’ll see what I’m talking about. It’s really quite remarkable.
So, it never ceases to amaze me those who don’t understand the technology, or the Luddites fighting against it, keep saying “I don’t care what you had for breakfast”. Is it really hard to understand how to use a microblogging service? Let me guess. You probably don’t have a Facebook account either, right? Don’t get me wrong. I’m not saying everyone should jump on the social bandwagon, but if you aren’t using the service, because you think it’s nothing but vain, self-proclamations and promotions, then it’s clear you don’t “get it”, just as I didn’t back in 2007.
There are a number of reasons why Twitter, Identi.ca, Facebook, and other microblogging platforms will be successful over and over:
Sure, as with any service, there are those that abuse it, and people who have used a microblogging platform knows that there is some noise to come along with it. But, when you learn how to use the tool effectively, it’s rather trivial to filter out the noise, and get a high degree of signal.
I use it entirely for conversation and news. I am an IRC junkie, and hang out in far more channels than I would care to admit. I do it for the social conversations, as well as support and providing support. Identi.ca and Twitter are that for me. A place to converse when I want to converse. It’s a place for news, when I’m in the mood to keep up-to-date (along with RSS and email. No, I don’t watch TV). I’ve even used it to get deals when travelling and scheduling appointments with friends. Heck, I recently became a ham radio operator for similar reasons.
So, to each their own, but if your problem with Twitter is not caring what people have for breakfast, then it’s clear that you don’t know what you’re talking about and you haven’t used the service. But then again, unless I ask, I’m likely not interested in your opinion anyway. I definitely won’t try to “convert” you. ![]()
Thanks to the organizers and participants involved with ChangeCamp London yesterday. It was amazing to see such a strong turnout of people interested in making London better. I hope everyone got as much out of it as I did.
For anyone who couldn’t attend, you can get a feel for the event by looking at the #ccldn tweets and following up with the actions which will be posted on the website.
Upgraded to WordPress 3.0. There’s been so many changes to the themes in recent versions that I think I’ll be running the new default theme at least until I get some time to update my own.
The new theme looks really nice but it still doesn’t add horizontal scrolling to pre-formatted text blocks. This kinda breaks posts with long configuration examples.
At work, we use Symantec NetBackup for all our full and incremental backups to tape. With currently about 100 servers in operation, and roughly 300+ virtual development environments on the horizon using RHEV, NetBackup and Bare Metal Restore, also from Symantec, will be crucial in our operations.
Recently, we had some virtual servers take a dive, because the disk array they were on took a dive, and with it, all the storage that these VMs were relying on for their OS and other needs. So, we’ve been building these machines back up from backup on a new NetApp SAN. Everything has been working well with Bare Metal Restore for Windows VMs, but we were struggling getting it to work with RHEL. So, I got the idea to boot up a Fedora 12 Live CD, install the NetBackup client in the live environment, and do a restore from there, then reboot into the newly built machine.
Works like a charm! So, I documented the steps necessary to make it work. Realize, that this was documented for my place of employment. Of course, I’ve completely changed the hostnames, IP addresses, and other details that would be specific to work. However, if you deploy this in your environment, then you’ll need to make the necessary architectural changes that fit your needs. Also, this should work with Fedora 13, the latest release at the time of this writing, but Fedora 12 works well for us, and because it’s used just for this purpose, we see no pressing need to use the latest. Also, Debian or Ubuntu, or some other GNU/Linux based operating system might work as well, but NetBackup doesn’t support these operating system necessarily, and it is expecting the filesystem layout that is common with Red Hat based operating systems. Regardless, Fedora 12 is being used as a tool here, not because of any loyalty or fanboyism.
So, here’s the tutorial:
Fedora can be used as a temporary live environment for NetBackup when doing restores to RHEL machines. Just boot from the Fedora ISO or CD, and make sure you have configured networking appropriately, and that you can get out to the Internet. After that, follow the instructions below. This does assume that you have a base, bare-bones, RHEL install that matches the partitioning or volume layout of the previous install that you’re restoring. This must be completed first, because at the end of the tutorial, you will be mounting these devices, and restoring only the files, to these mount points.
First, the liveuser can get root access without any password. However, for this tutorial, you will need to set a password for root, so go ahead and do that:
[liveuser@localhost ~]$ su - [root@localhost ~]# passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]#
At this point, we need to setup the hostname and networking correctly. We have set aside the ‘netbackup.example.com’ domain name for the Linux restore system in our DNS environment, and the IP address that has been set aside is ’10.19.84.254′. In the terminal as root, set the hostname:
[root@localhost ~]# hostname netbackup.example.com [root@localhost ~]# export HOSTNAME="netbackup.example.com"
Now get networking configured with NetworkManager. In the status bar of the desktop, there is an icon that looks like two computers. Right click this, and click “Edit Connections…”. Click “Auto eth0”, click the “Edit…” button, click the “IPv4 Settings” tab, and set the parameters as necessary:
Method: Manual Address: 10.19.84.254 Netmask: 255.255.255.0 Gateway: 10.19.1.254 DNS servers: 10.19.2.192, 10.19.3.192, 10.19.4.192 Search domains: example.com
Click “Apply…”, and enter the password for root, then close the “Network Connections” widget. The icon looking like two computers should have a red “X” next to it now. This means it’s not online. Left-click the icon, and click “Auto eth0” to get it back online. Back in your terminal, you should be able to verify that the networking has been set correctly:
[root@localhost ~]# ip a show eth0
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:1a:4a:06:14:24 brd ff:ff:ff:ff:ff:ff
inet 10.19.84.254/24 brd 10.5.31.255 scope global eth0
inet6 fe80::21a:4aff:fe06:1424/64 scope link
valid_lft forever preferred_lft forever
[root@localhost ~]# ping -c 4 mediaserver.example.com
PING mediaserver.example.com (10.19.84.60) 56(84) bytes of data
64 bytes from mediaserver.example.com: icmp_seq=1 ttl=64 time=0.942 ms
64 bytes from mediaserver.example.com: icmp_seq=2 ttl=64 time=0.230 ms
64 bytes from mediaserver.example.com: icmp_seq=3 ttl=64 time=0.193 ms
64 bytes from mediaserver.example.com: icmp_seq=4 ttl=64 time=0.212 ms
--- mediaserver.example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3002ms
rrt min/avg/max/mdev = 0.193/0.394/0.942/0.316 msIn order for the NetBackup client to communicate with the media server (mediaserver.example.com – 10.19.84.60), we need to make a modification to our /etc/hosts file, and add it’s IP address and hostname:
[root@localhost ~]# echo "10.19.84.60 mediaserver.example.com mediaserver" >> /etc/hosts
With networking correctly set, we need to start up the SSH server:
[root@localhost ~]# service sshd start Generating SSH1 RSA host key: [ OK ] Generating SSH2 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ]
Because this is a temporary live environment, we’re not interested in SELinux nor any firewall. So, let’s get those disabled first:
[root@localhost ~]# getenforce Enforcing [root@localhost ~]# setenforce 0 [root@localhost ~]# getenforce Permissive [root@localhost ~]# service iptables stop iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules [ OK ]
At this point, you should verify that you can SSH to the Fedora live environment from another host. It should work. However, we still have more work to do. Before we can get the NetBackup client installed, we need to install a few packages. So, in your terminal, type the following:
[root@localhost ~]# yum install glibc-2.11-2.i686 libacl-2.2.47-5.fc12.i686 libstdc++-4.4.2-7.fc12.i686
This will download about 30MB of packages and metadata necessary for installation. Depending on your Internet connection, this might take a while. If you don’t want to wait, you could change the repo files in /etc/yum.repos.d/, and use a faster mirror. Or, you can wait. After the packages are installed, and everything configured, we should be able to install the NetBackup client. To do this, we need to SSH to mediaserver.example.com, and send the client over. You can do this from the terminal you’ve already been working in:
[root@localhost ~]# ssh mediaserver The authenticity of host 'mediaserver (10.19.84.60)' can't be established. RSA key fingerprint is 14:d3:50:f1:27:d5:14:ab:c2:ca:51:fa:7e:5a:98:4c. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'mediaserver,10.19.84.60' (RSA) to the list of known hosts. root@mediaserver's password: [root@mediaserver ~]#
Now transfer over the client. First, mediaserver.example.com will likely have the wrong SSH key for this box on file, as you might have done this more than once, and every time you boot into the Fedora 12 Live CD, and start up the SSH server, a different key will be generated. You will need to delete it:
[root@mediaserver ~]# cd /usr/openv/netbackup/client/Linux/RedHat2.6/ [root@mediaserver RedHat2.6]# ./sftp_to_client netbackup.example.com root Connecting to 10.19.84.18... @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 89:db:1f:12:f9:8f:76:38:63:6e:54:75:7a:43:ed:9e. Please contact your system administrator. Add correct host key in /root/.ssh/known_hosts to get rid of this message. Offending key in /root/.ssh/known_hosts:4 RSA host key for netbackup.example.com has changed and you have requested strict checking. Host key verification failed. Couldn't read packet: Connection reset by peer sftp connection to netbackup.example.com failed.
Notice, that it says the offending key is on line 4 of /root/.ssh/known_hosts. So, I’ll delete line 4 from that file:
[root@mediaserver RedHat2.6]# sed -i 4d /root/.ssh/known_hosts
Now, try again:
[root@mediaserver RedHat2.6]# ./sftp_to_client netbackup.example.com root Connecting to netbackup.example.com... The authenticity of host 'netbackup.example.com (10.19.84.254)' can't be established. RSA key fingerprint is 4d:74:e6:66:ed:d9:bc:dc:3a:71:41:51:18:58:da:e9. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '10.19.84.254' (RSA) to the list of known hosts. root@netbackup.example.com's password: sftp completed successfully. The root user on netbackup.example.com must now execute the command "sh /tmp/bp.22802/client_config [-L]". The optional argument, "-L", is used to avoid modification of the client's current bp.conf file. [root@mediaserver RedHat2.6]# exit [root@localhost ~]#
Now that we are back in the live environment, we can execute the command as given us from mediaserver.example.com. Of course, the name of the file transferred over might be different. First, let’s get xinetd running:
[root@localhost ~]# service xinetd start Starting xinetd: [ OK ] [root@localhost ~]# sh /tmp/bp.22802/client_config
It will spit out a bunch of files and directories that it’s installing for the client, and will reload the xinetd server. All that is left, is to start the NetBackup client, and we’re finished!
[root@localhost ~]# service nbclient start NetBackup SAN Client Fibre Transport daemon started.
Verify that the default NetBackup ports 13722, 13724, 13782 and 13783 are bound to the system:
[root@localhost ~]# lsof -Pan -i tcp | grep 137 xinetd 3261 root 5u IPv6 22914 0t0 TCP *:13782 (LISTEN) xinetd 3261 root 6u IPv6 22915 0t0 TCP *:13722 (LISTEN) xinetd 3261 root 8u IPv6 22916 0t0 TCP *:13724 (LISTEN) xinetd 3261 root 9u IPv6 22917 0t0 TCP *:13783 (LISTEN)
At this point, you should be able to login to the NetBackup Administrator Console, find the netbackup.example.com client, and verify that they can talk. The only thing that you should be aware of, is that you need to mount all logical volumes and partitions to their respective mount points BEFORE the restore! This is important! When in the NetBackup Administrator Console, and doing the restore, you restore the files to a specific mount point. In our case, it’s going to be ‘/’. This means, that if the host has separate /var, /u01, /, /home and other mount points, they all need to be mounted to their respective mount points BEFORE doing the restore!
[root@localhost ~]# mount /dev/work/root /mnt [root@localhost ~]# mount /dev/work/var /mnt/var [root@localhost ~]# mount /dev/work/u01 /mnt/u01 etc
CONGRATULATIONS! At this point, you’re ready to start restoring the data using NetBackup in the Fedora 12 live environment. Just remember, that when you’re in the NetBackup Admin Console, you need to restore the data to netbackup.example.com, and the directory path you need to use should be /mnt, not /, obviously.
I hope someone on the remote corners of the Internet finds this tutorial helpful. If so, let me know if the comments. If there are any spelling errors or I’ve missed something giving away detail of my works, also let me know so I can make the corrections. Thanks!
I just read an article on the Smithsonian National Museum of American History website called “Failure is Wonderful”. The article talks about a Creativity Round Table, held at Washington's Cosmos Club in late April.
There are several important points were made that is:
Laurie Kahn stated “Much of creativity depends on listening, asking the right questions, and being able to see things differently.”
Greg Mortenson replied "Listen with your heart and trust your intuition, not solely your logic.”
"When people ask you a question or ask how to solve a problem," Mortenson advised, "be hands-off so that they can figure it out using resources and thinking creatively."
Laurie Kahn asked, "How do you sustain creativity?" Mortenson's experience taught him you need to "take care of yourself" and "be in touch with yourself".
"Don't just think outside of the box," Mortenson added, "live outside of the box. Take risks. Don't be afraid to fail. Failure is wonderful."
I just read an article on the Smithsonian National Museum of American History website called “Failure is Wonderful”. The article talks about a Creativity Round Table, held at Washington's Cosmos Club in late April.
There are several important points were made that is:
Laurie Kahn stated “Much of creativity depends on listening, asking the right questions, and being able to see things differently.”
Greg Mortenson replied "Listen with your heart and trust your intuition, not solely your logic.”
"When people ask you a question or ask how to solve a problem," Mortenson advised, "be hands-off so that they can figure it out using resources and thinking creatively."
Laurie Kahn asked, "How do you sustain creativity?" Mortenson's experience taught him you need to "take care of yourself" and "be in touch with yourself".
"Don't just think outside of the box," Mortenson added, "live outside of the box. Take risks. Don't be afraid to fail. Failure is wonderful."
Bernd Harzog recently wrote a blog entry to examine whether “the CMDB [is] irrelevant in a Virtual and Cloud based world“. If I can paraphrase, his conclusion is that there will be something that looks like a CMDB but the current CMDB products are ill-equipped to fulfill that function. Here are the main reasons he gives for this prognostic:
I wanted to expand on some of these points.
New model elements for Cloud (bullets #1 and #2)
These first bullets are not the killers. Sure, the current CMDBs were designed before the rise of virtualized environment, but they are usually built on a solid modeling foundation that can easily be extend with new resources classes. I don’t think that extending the model to describe VM, VNets, Volumes, hypervisors and their relationships to the physical infrastructure is the real challenge.
New approach to “discovery” (bullets #3 and #4)
This, on the other hand is much more of a “dinosaurs meet meteorite” kind of historical event. A large part of the value provided by current CMDBs is their ability to automate resource discovery. This is often achieved via polling/scanning (at the hardware level) and heuristics/templates (directory names, port numbers, packet inspection, bird entrails…) for application discovery. It’s imprecise but often good enough in static environments (and when it fails, the CMDB complements the automatic discovery with a reconciliation process to let the admin clean things up). And it used to be all you could get anyway so there wasn’t much point complaining about the limitations. The crown jewel of many of today’s big CMDBs can often be traced back to smart start-ups specialized in application discovery/mapping, like Appilog (now HP, by way of Mercury) and nLayers (now EMC). And more recently the purchase of Tideway by BMC (ironically – but unsurprisingly – often cast in Cloud terms).
But this is not going to cut it in “the Cloud” (by which I really mean in a highly automated IT environment). As Bernd Harzog explains, the rate of change can completely overwhelm such discovery heuristics (plus, some of the network scans they sometimes use will get you in trouble in public clouds). And more importantly, there now is a better way. Why discover when you can ask? If resources are created via API calls, there are also API calls to find out which resources exist and how they are configured. This goes beyond the resources accessible via IaaS APIs, like what VMWare, EC2 and OVM let you retrieve. This “don’t guess, ask” approach to discovery needs to also apply at the application level. Rather than guessing what software is installed via packet inspection or filesystem spelunking, we need application-aware discovery that retrieves the application and configuration and dependencies from the application itself (or its underlying framework). And builds a model in which the connections between application entities are expressed in terms of the configuration settings that drive them rather than the side effects by which they can be noticed.
If I can borrow the words of Lew Cirne:
“All solutions built in the pre-cloud era are modeled on jvms (or their equivalent), hosts and ports, rather than the logical application running in a more fluid environment. If the solution identifies a web application by host/port or some other infrastructural id, then you cannot effectively manage it in a cloud environment, since the app will move and grow, and your management system (that is, everything offered by the Big 4, as well as all infrastructure management companies that pay lip service to the application) will provide nearly-useless visibility and extraordinarily high TCO.”
I don’t agree with everything in Lew Cirne’s post, but this diagnostic is correct and well worded. He later adds:
“So application management becomes the strategic center or gravity for the client of a public or private cloud, and infrastructure-centric tools (even ones that claim to be cloudy) take on a lesser role.”
Which is also very true even if counter-intuitive for those who think that
cloud = virtualization (in the “fake machine” interpretation of virtualization)
Embracing such a VM-centric view naturally raises the profile of infrastructure management compared to application management, which is a fallacy in Cloud computing.
Drawing the line between Cloud infrastructure management and application management (bullet #5)
This is another key change that traditional CMDBs are going to have a hard time with. In a Big-4 CMDB, you’re after the mythical “single source of truth”. Even in a federated CMDB (which doesn’t really exist anyway), you’re trying to have a unified logical (if not physical) repository of information. There is an assumption that you want to manage everything from one place, so you can see all the inter-dependencies, across all layers of the stack (even if individual users may have a scope that is limited by permissions). Not so with public Clouds and even, I would argue, any private Cloud that is more than just a “cloud” sticker slapped on an old infrastructure. The fact that there is a clean line between the infrastructure model and the application model is not a limitation. It is empowering. Even if your Cloud provider was willing to expose a detailed view of the underlying infrastructure you should resist the temptation to accept. Despite the fact that it might be handy in the short term and provide an interesting perspective, it is self-defeating in the long term from the perspective of realizing the productivity improvements promised by the Cloud. These improvements require that the infrastructure administrator be freed from application-specific issues and focus on meeting the contract of the platform. And that the application administrator be freed from infrastructure-level concerns (while at the same time being empowered to diagnose application-level concerns). This doesn’t mean that the application and infrastructure models should be disconnected. There is a contract and both models (infrastructure and consumption) should represent it in the same way. It draws a line, albeit one with some width.
Blurring the line between configuration and monitoring (bullet #6)
This is another shortcoming of current CMDBs, but one that I think is more easily addressed. The “contract” between the Cloud infrastructure and the consuming application materializes itself in a mix of configuration settings, administrative capabilities and monitoring data. This contract is not just represented by the configuration-centric Cloud API that immediately comes to mind. It also includes the management capabilities and monitoring points of the resulting instances/runtimes.
Wither CMDB?
Whether all these considerations mean that traditional CMDBs are doomed in the Cloud as Bernd Harzog posits, I don’t know. In this post, BMC’s Kia Behnia acknowledges the importance of application management, though it’s not clear that he agrees with their primacy. I am also waiting to see whether the application management portfolio he has assembled can really maps to the new methods of application discovery and management.
But these are resourceful organization, with plenty of smart people (as I can testify: in the end of my HP tenure I worked with the very sharp CMDB team that came from the Mercury acquisition). And let’s keep in mind that customers also value the continuity of support of their environment. Most of them will be dealing with a mix of old-style and Cloud applications and they’ll be looking for a unified management approach. This helps CMDB incumbents. If you doubt the power to continuity, take a minute to realize that the entire value proposition of hypervisor-style virtualization is centered around it. It’s the value of backward-compatibility versus forward-compatibility. in addition, CMDBs are evolving into CMS and are a lot more than configuration repositories. They are an important supporting tool for IT management processes. Whether, and how, these processes apply to “the Cloud” is a topic for another post. In the meantime, read what the IT Skeptic and Rodrigo Flores have to say.
I wouldn’t be so quick to count the Big-4 out, even though I work every day towards that goal, building Oracle’s application and middleware management capabilities in conjunction with my colleagues focused on infrastructure management.
If the topic of application-centric management in the age of Cloud is of interest to you (and it must be if you’ve read this long entry all the way to the end), You might also find this previous entry relevant: “Generalizing the Cloud vs. SOA Governance debate“.
Related posts:
It boggles my mind that the banks haven’t figured out how to make their websites more useful than they are. Why are these sites limited to online versions of bank tellers?
Here’s what I want my bank’s site to provide:
The banks already have access to all of my account activity and I don’t want to provide a third party, especially one outside of Canada, with my online banking credentials to get this functionality.
Why would a bank build this?
I recently finished reading a couple books that are worth mentioning.
The first is Cory Doctorow’s Little Brother. Don’t let the teen categorization discourage you, this is a book any technology geek will love. The best one line summary I can think of is that this book is a modern version of Nineteen eighty-four with the addition of a little teen rebellion. The story and characters are very well written and interwoven are decent introductions to important security techniques such as public key encryption and onion routing. Targetting this book at teen readers was a brilliant idea. I can’t think of a better way to help them understand what a security state would feel like.
The second book is Who Controls the Internet?: Illusions of a Borderless World by Jack Goldsmith and Tim Wu. No, this isn’t some kind of conspiracy theory book. The answer put forward by the authors is basically that territorial governments control the Internet despite the Utopian non-governmental ideal that many technologists associate with the Internet. The source of this control comes from the fact that governments are alone (mostly) in their ability to use physical coersion. While this in of itself isn’t that earth shattering I found the suggestion that online businesses such as eBay are reliant on the excercise of this coersive power very interesting. Even if the Internet isn’t that interesting to you this book is worth reading for the discussion of the role of government in commerce.
I’ve also recently read Switch and Linchpin which both deserve short reviews but that will have to be some other time.
I recently deployed a Django application with mod_wsgi on my server which runs Fedora 12. Since this required a bit more configuration than a standard Apache virtual host I thought it might be useful to document the configuration for others.
SELinuxWhile SELinux can be a little annoying if you don’t understand how it works it is a very powerful security layer that should not be disabled. In order to get the Django/mod_wsgi application working I had to modify a couple of SELinux booleans which give Apache extra permissions.
setsebool httpd_tmp_exec on setsebool httpd_can_network_connect onmod_wsgi configuration
The default configuration tries to create the mod_wsgi sockets in a directory that SELinux does not allow Apache access to. You can change this by adding the following line to /etc/httpd/conf.d/wsgi.conf.
WSGISocketPrefix run/mod_wsgiApache virtual host configuration
Below is the Apache virtual host configuration. Note that I have chosen to use mod_wsgi’s daemon mode and processes instead of threads because some of the libraries I’m using are not thread safe.
<VirtualHost *:80>
ServerAdmin dan@example.com
DocumentRoot /home/vhosts/example.com/
ServerName www.example.com
Alias /robots.txt /home/vhosts/example.com/example/web/static/robots.txt
Alias /favicon.ico /home/vhosts/example.com/example/web/static/favicon.ico
# Static files.
Alias /static /home/vhosts/example.com/example/web/static
# Admin static files.
Alias /media /home/vhosts/example.com/dependencies/Django-1.2.1/django/contrib/admin/media
WSGIScriptAlias / /home/vhosts/example.com/example/web/example/django.wsgi
WSGIDaemonProcess example.com processes=15 threads=1 display-name=%{GROUP}
WSGIProcessGroup example.com
ErrorLog logs/example.com-error_log
LogFormat "%a %l \"%u\" %t %m \"%U\" \"%q\" %p %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" custom_log
CustomLog logs/example.com-access_log combinedio
</VirtualHost>
For the two people that care I’m migrating to a new OpenPGP key. I created the old key way back in 2001 so it is time to move to a longer RSA key instead of DSA. The new key also uses the stronger SHA-256 hash.
You can find the signed (with both the old and new key) transition note at:
Here are a few useful links for anyone else making this transition.
Believe it or not, you can figure this out on any Unix-like operating system. Should keep you guessing for at least a few minutes. ![]()
by9+IFlvdSd2ZSBoYWQgYSBiaXJ0aGRheSwgc2hvdXQgaHVycmF5ISBXZSB3YW50IHRvIHNpbmcg dG8geW91IHRvZGF5LiBPbmUgeWVhciBvbGRlciBhbmQgd2lzZXIgdG9vLiBIYXBweSBCaXJ0aGFk eSwgdG8geW91ISBvL34K
Twitter has decided that for our good and their own it would be better if any time you click a link in a tweet the request first went to Twitter before being redirected to the intended destination. This blog entry announces the decision, but a lot of the interesting details are hidden in the more technical description of the change sent to the Twitter developers mailing list.
Here is a quick analysis of the announcement and its ramifications.
The advertised benefits
For users:
For Twitter:
You don’t have to be much of a cynic to notice that the user benefits are already available today for those who care about them (get a link scanner on your computer, get a Twitter client with built-in link shortening) while the benefit to Twitter is a brand new and major addition…
One interesting side-effect: the erosion of the 140 character limitation
Without going into the technical details of the new system, one change is that each URL will now “cost” 20 characters (out of the 140 allowed per tweet), no matter how long it really is. But in most cases the user will still see the complete URL in the tweet (clients may choose to display something else but I doubt they will, at least by default, except for SMS). So you could now see tweets like (line breaks added):
In the town where I was born / Lived a man who sailed to sea / And he told us of his life / In the land of submarines, http://more.com/ So.we.sailed.on.to.the.sun/Till.we.found.the.sea.green/ And.we.lived.beneath.the.waves/In.our.yellow.submarine/ We.all.live.in.yellow.submarine/Yellow.submarine,yellow.submarine/ We.all.live in.yellow.submarine/Yellow.submarine,yellow.submarine.
Based on the Twitter proposal, clicking on this link would send you to a Twitter-operated link shortener (e.g. http://t.co/J7erFi3) which would then redirect you to the full URL above. The site (e.g. more.com in this example) could be trivially set up so that such URLs are all valid and they return a clean version of the encoded text (for the benefit of users of Twitter clients that may not show the full URL).
This long URL example may seem a bit overkill (just post 3 tweets), but if you are only short by 20 or 30 characters and just can’t find another way to shorten the tweet the temptation will be big to take this easy escape.
A cool new URL shortening domain
You may have noticed the t.co domain in the previous paragraph. Yes, it’s a real one. That’s the hard-to-beat domain that Twitter was able to score for this. Cute. But frankly I am tired of the whole URL shortening deal and these short domain names have stopped to amuse me. You?
Enforcement
How, you may wonder, can Twitter ensure that the clicks go through its gateway if the full URL is available as part of the Tweet? Simple: they change the terms of service to forbid doing otherwise. It’s interesting how the paragraph in the email to developers which announces that aspect starts by asking nicely “we really do hope that…”, “please send the user through the t.co link”, “please still send him or her through t.co” and ends with a more constraining “we will be updating the TOS to require you to check t.co and register the click”. Speak softly and carry a big stick.
It will be obviously easy to avoid this, and you won’t have to resort top copy/pasting URLs. Even if the client developers play ball, open source clients can be recompiled. Proxies can be put in front of clients to remember the mapping and do the substitution without ever hitting t.co. Plug-ins and Greasemonkey scripts can be developed. Etc. Twitter knows that for sure and probably doesn’t care. As long as by default most users go through t.co the company will get the metrics it needs. It’s actually to Twitter’s benefit to make it easy enough (but not too easy) to circumvent this, as it ensure that those who care will find a solution and therefore keep using the service without too much of a fuss. We can’t tell you to cheat but we’ll hint that we don’t mind if you do.
The privacy angle
This is a big deal, and disappointing to me. Obviously the hopes I had for Twitter to become the backbone of an open, user-controlled, social data bus are not shared by its management. Until now, Twitter was a good citizen in a world of privacy-violating social networks because the data it shared (your tweets and your basic profile data) had always and unambiguously been expected to be public. Not true with your click stream. An average user will have no idea that when he clicks on http://cnn.com/some.story the request first goes to Twitter. Twitter now has access to identified personal data (the click stream) that its users do not mean to share. I realize that this is old news in a world of syndicated web advertising and centralized analytics, but this is new for Twitter and now puts them in position to mishandle this data, purposely or not, in the way they store it, use it and share it.
I wouldn’t be surprised if they end up forced to offer an option to not go through t.co and they had additional metadata in the user profile to inform the Twitter client that it is OK for this user not to go through the gateway when they click on a link. We’ll see.
The impact on the Twitter application ecosystem
The assault on URL shorteners was expected since the Chirp conference (and even before). Most Twitter application developers had already swallowed the “if you just fill a hole in the platform we’ll eventually crush you” message. What’s new in this announcement is that it also shows that Twitter is willing to use its Terms of Service document as a competitive tool, just like Steve Jobs does with Flash. Not unexpected, but it wasn’t quite as clear before.
It’s not a pretty implementation
Here is what it looks like at the API level: the actual tweet text contains the t.co shortened URL. And for each such URL there is a piece of metadata that gives you the t.co URL, the corresponding full-length URL (which you should display instead of the t.co one) and the begin/end character position of the t.co URL in the original tweet so you can easily pull it out (not sure why you need the end position since it’s always beginning+20 but serialized Twitter message are already happily duplicative).
As a modeling and serialization geek, I am not impressed by the technical approach taken here. But before I flame Twitter I should acknowledge the obvious: that the Twitter API has seen a rate of adoption several orders of magnitude larger than any protocol I had anything to do with. Still, it would take more than this detail of history to prevent me from pontificating.
For such a young company, the payload of a Twitter message is already quite a mess, mixing duplications, backward-compatible band-aids, real technical constraints and self-imposed constraints. Why, pray tell, do we even need to shorten URLs? If you’re an outsider forced to live within the constraints of the Twitter rules (chiefly, the 140 character limit), they make sense. But if you’re Twitter itself? With the amount of cruft and repetition in a serialized Twitter message, don’t tell me these characters actually matter on the wire. I know they do for SMS, but then just shorten the links in tweets sent over SMS. In the other cases, it reminds me of the frustrating experience of being told by the owner of a Mom-and-Pop store that they can’t accede to your demand because of “company policy”.
Isn’t it time for the text of tweets to contain real markup so that rather than staring at a URL we see highlighted words that point somewhere? Just like… any web page. Isn’t it the easiest for an application to process and doesn’t it offer the reader a more fluid text (Gillmor and Carr notwithstanding)? By now, isn’t this how people are used to consuming hypertext?
Couldn’t the backward compatibility issue of such an approach be solved simply by allowing client applications to specify in their Twitter registration settings that yes, they are able to handle such earth-shattering concept as a <a href=”"></a> element. This doesn’t prevent a URL to “cost” you some fixed number of characters, it doesn’t prevent the use of a tracker/filter gateway if that’s your business decision.
We’ll see how users (and application developers) react to this change. As fans of Douglas Adams know, the risk of claiming that “all your click are belong to us” is that you expose yourself to hearing “so long, and thanks for all the whale” as an answer…
Related posts:
This post is about true Agile/Lean thinking. If parts of it disagree with your particular opinion of doing things, no criticism is intended.
As an outsider, you note some interesting things about teams while watching them optimize that's not immediately apparent to the people inside the team. There is a huge aspect of psychology and sociology at work in technology teams that the teams themselves do not see. Kind of like how a fish is unaware it is swimming in water. Many times they will try something they don't like, say pair programming, and see an immediate improvement in productivity. In addition, the developers are more happy. But -- and this is really strange -- if you ask these same guys if they like pair programming some of them will tell you no. Their preconceived notions get in the way of observing reality. When I first saw this I thought it was just individuals acting irrationally, but after watching dozens of teams (and seeing it in myself) I've concluded this is just part of the human condition.
This has some interesting implications in how teams make decisions. The ultimate arbiter, of course, is whether or not you consistently meet your sprint goals. But "meeting goals" and "continuing to improve" are two different things, and if you're not improving, in my book, you're not agile. Some folks will want to only use data-based decision-making processes. Some folks are much more loosey-goosey. Whatever you do, have an objective baseline, try something for long enough to really grok it, then take a hard look at whether it works or not. Remember the beauty of small teams is that you cognitively cover for each other, so you might think something sucked or had no impact while somebody else has the complete opposite opinion. Learn to be open-minded.
At the end of the day, however, it's all Popper and Peirce. Look at data, form possible hypotheses, test, adapt. Good agile has a lot of the same attributes as good paradigm-breaking science and bad agile has a lot of the same attributes as bad science. If you've got the easy-going MythBusters attitude about seeing where things lead you, you'll go far. If you're rigid and inflexible -- even if you are a huge agile fan -- you won't.
In agile, I get to the User Story or Backlog Item level and I have reached the quantum of business value. As a management outsider, I should only be concerned with how fast the stories move across the task wall -- it is the ultimate indicator of team productivity. I have to have the faith -- or at least the common sense -- to know that how it all happens inside the team is not something that I'm really qualified to act on. Could be they have trained monkeys doing the work. Could be they all take Fridays off. However it's happening, if my team is delivering business value in a manner that's tremendously effective, leave them the heck alone. If they're not, give them some time to make sure they are not improving, then fire them. But whatever you do, don't micromanage. It's a funny thing: people usually know how to do their job, but if you start telling them, they are more than happy to let you tell them exactly what to do. You've just removed all accountability from the system.
Ten years from now I would expect agile best practices for many items to look much different than they do today. In my opinion, the word "agile" is a marketing term for best practices around iterative and incremental development, and I'm okay with that. The other guys can keep the certifications and the One True Way. I just want a buzzword to identify ideas I might find useful.
In big organizations we might have a PM or a PO who helps us decide what has business value, but the idea is, really, to use the person who actually has money: the customer. Here's a guy who needs something, here's some people that can make it happen. Everybody wins.
Note that there are not a lot of levels or processes between the guys who can make something happen and the guys wanting something done. In fact, the simpler the better. This tracks very, very closely with the golden rule of startups "stay close to the customer" In agile, the closer you are the better it works.
As I understand it, there is a whole effort to create a fusion between startup methodologies and agile/lean ones. But I'm not sure "fusion" is the right word. In my mind, startup systems are really all about a superset of agile -- finding iterative incremental projects that have value in the marketplace and how to construct them. I think if anything all of this work is simply underlining to people who either don't know agile or don't know startups that the two have always been in sync.
Agile teams will always win in the marketplace because agile teams always focus on the marketplace and delivering value to it. Other systems focus on other things -- including the system itself. Agile is fuzzy enough to not lead to doctrine wars yet specific enough to give teams useful help in making things happen faster.
In my
last post, I outlined considerations that need to be taken into
account when choosing between a centralized and federated security model. So, how do we implement the chosen model? Based on a real-world case study, I
will outline a Kerberos architecture that enables cutting-edge collaborative research through federated sharing of resources. This is an extract from the full article which can be downloaded here.
ContextThe IT infrastructures of two Institutions are heterogeneous to one another and contain different assets that are shared to facilitate ground-breaking research:
Each institution has its own user management system. This means that for a user to access a resource requires them to use its specific access credentials. Whenever one institution wants to share a resource with a user at the other institution, a new user account at the owning institution has to be created. This cumbersome resource sharing model is not effective, requires a lot of paper work and users suffer from the extensive number of account details (non-uniform resource access) that they must remember. Moreover, with the lack of a common user access management tool, administrators have difficulty in keeping tabs on resource access lists and conforming to security requirements.
ChallengeThe institutions have decided that a new approach is required that provides secure, simple and rapid sharing of resources. Users who own the resources should be free to decide who can access them to enable intuitive collaboration removed from administrative hurdles.The differing levels of IT skills at the two institutions means that the management tool for resource sharing should be simple and intuitive. GridwiseTech's AdHoc encapsulates these core values and is one of the presented solutions.
The challenge is to create an IT Infrastructure that securely shares distributed resources. Access granting and revoking must be intuitive and quick. The system should provide the following functionality:
Such a model enables multiple institutions to grant external user access to their sensitive resources, whilst maintaining full access control over them. No user accounts need to be created at the resource side and users benefit from single sign-on (SSO) to resources.
Designing a federated security system which connects multiple institutions is common. However, there is no single solution for such a challenge. A number of technologies exist that can be used to implement federated security, Shibboleth, Oracle IdM, OpenSSO, among others. Important aspects that require validation are:The two institutions are connected using Kerberos and LDAP. Green indicates services related to the security system and blue AdHoc management services. The key assumption is the existence of mutual trust between the Kerberos servers installed at both institutions. This is important because whenever a user logs into Kerberos at their institution they will be able to access those resources at the second institution to which they have access.
AdHoc is divided into two distinct modules. (1) AdHoc web application provides a graphical web interface where users and administrators manage access to their resources. Kerberos provides authentication to the AdHoc web application. (2) AdHoc policy manager is responsible for modifying the user access policies of the underlying resources. Four example services are shown; NFS or OpenAFS can be used for shared file storage between the institutions. Access to the compute cluster can be provided using SSH or Web portal.
SummaryThe presented architecture implements a federated security model to allow the secure and intuitive sharing of resources. It provides the following benefits:
Most APIs are like hospital gowns. They seem to provide good coverage, until you turn around.
I am talking about the dreadful state of fault reporting in remote APIs, from Twitter to Cloud interfaces. They are badly described in the interface documentation and the implementations often don’t even conform to what little is documented.
If, when reading a specification, you get the impression that the “normal” part of the specification is the result of hours of whiteboard debate but that the section that describes the faults is a stream-of-consciousness late-night dump that no-one reviewed, well… you’re most likely right. And this is not only the case for standard-by-committee kind of specifications. Even when the specification is written to match the behavior of an existing implementation, error handling is often incorrectly and incompletely described. In part because developers may not even know what their application returns in all error conditions.
After learning the lessons of SOAP-RPC, programmers are now more willing to acknowledge and understand the on-the-wire messages received and produced. But when it comes to faults, there is still a tendency to throw their hands in the air, write to the application log and then let the stack do whatever it does when an unhandled exception occurs, on-the-wire compliance be damned. If that means sending an HTML error message in response to a request for a JSON payload, so be it. After all, it’s just a fault.
But even if fault messages may only represent 0.001% of the messages your application sends, they still represent 85% of those that the client-side developers will look at.
Client developers can’t even reverse-engineer the fault behavior by hitting a reference implementation (whether official or de-facto) the way they do with regular messages. That’s because while you can generate response messages for any successful request, you don’t know what error conditions to simulate. You can’t tell your Cloud provider “please bring down your user account database for five minutes so I can see what faults you really send me when that happens”. Also, when testing against a live application you may get a different fault behavior depending on the time of day. A late-night coder (or a daytime coder in another time zone) might never see the various faults emitted when the application (like Twitter) is over capacity. And yet these will be quite common at peak time (when the coder is busy with his day job… or sleeping).
All these reasons make it even more important to carefully (and accurately) document fault behavior.
The move to REST makes matters even worse, in part because it removes SOAP faults. There’s nothing magical about SOAP faults, but at least they force you to think about providing an information payload inside your fault message. Many REST APIs replace that with HTTP error codes, often accompanied by a one-line description with a sometimes unclear relationship with the semantics of the application. Either it’s a standard error code, which by definition is very generic or it’s an application-defined code at which point it most likely overlaps with one or more standard codes and you don’t know when you should expect one or the other. Either way, there is too much faith put in the HTTP code versus the payload of the error. Let’s be realistic. There are very few things most applications can do automatically in response to a fault. Mainly:
So make sure that your HTTP errors support this simple decision tree. Beyond that point, listing a panoply of application-specific error codes looks like an attempt to look “RESTful” by overdoing it. In most cases, application-specific error codes are too detailed for most automated processing and not detailed enough to help the developer understand and correct the issue. I am not against using them but what matters most is the payload data that comes along.
On that aspect, implementations generally fail in one of two extremes. Some of them tell you nothing. For example the payload is a string that just repeats what the documentation says about the error code. Others dump the kitchen sink on you and you get a full stack trace of where the error occurred in the server implementation. The former is justified as a security precaution. The latter as a way to help you debug. More likely, they both just reflect laziness.
In the ideal world, you’d get a detailed error payload telling you exactly which of the input parameters the application choked on and why. Not just vague words like “invalid”. Is parameter “foo” invalid for syntactical reasons? Is it invalid because inconsistent with another parameter value in the request? Is it invalid because it doesn’t match the state on the server side? Realistically, implementations often can’t spend too many CPU cycles analyzing errors and generating such detailed reports. That’s fine, but then they can include a link to a wiki a knowledge base where more details are available about the error, its common causes and the workarounds.
Your API should document all messages accurately and comprehensively. Faults are messages too.
Related posts:
More from Pierre Levy’s book Collective Intelligence: mankind’s emerging world in cyberspace, translated by Robert Bononno.
One reason the book is notable is that, so far as I know, it was the first to really develop the term “collective intelligence”. Levy was writing in the mid-1990s, and others had, of course, both used the term before, and also developed related notions. But Levy seems to be the first to have really riffed on the term collective intelligence. Here’s Levy’s definition, and some additional commentary:
What is collective intelligence? It is a form of universally distributed intelligence, constantly enhanced, coordinated in real time, and resulting in the effective mobilization of skills… My initial premise is based on the notion of a universally distributed intelligence. No one knows everything, everyone knows something, all knowledge resides in humanity… New communications systems should provide members of a community with the means to coordinate their interactions within the same virtual universe of knowledge. This is not simply a matter of modeling the conventional physical environment, but of of enabling members of delocalized communities to interact within a mobile landscape of signification… Before we can mobilize skills, we have to identify them. And to do so, we have to recognize them in all their diversity… The ideal of collective intelligence implies the technical, economic, legal, and human enhancement of a universally distributed intelligence that will unleash a positive dynamic of recognition and skills mobilization.
Here’s Levy on the future of the economy:
What remains after we have mechanized agriculture, industry and messaging technologies? The economy will center, as it does already, on that which can never be fully automated, on that which is irreducible: the production of the social bond, the relational… Those who manufacture things will become scarcer and scarcer, and their labour will become mechanized, augmented, automated to a greater and greater extent…. The final frontier will be the human itself, that which can’t be automated: the creation of sensible worlds, invention, relation, the continuous recreation of the community… What kind of engineering will best meet the needs of a growing economy of human qualities?
It’s a provocative thought, although I don’t find it convincing. It’s true that the social bond is increasing in importance, as some other things become less scarce, but other scarcities remain as well.
I liked the following comment of Levy on democracy – it’s incidental to his main point, but nicely distilled an idea for me:
[Democracy] is favored not because it establishes the domination of a majority over a minority, but because it limits the power of government and provides remedies against the arbitrary use of power.
A final quote:
The greater the number of collective intellects with which an individual is involved, the more opportunities he has to diversify his knowledge and desire.
The downside of this may be a kind of glorified dilettantism. But the upside – as so often, the more interesting aspect of events – is the possibility of becoming deeply familiar with many more communities of practice.
The day before Mother’s Day, my family went up to the Golden Spike National Monument. We went through the museum, checked out the exhibits, and they even had a reenactment of the ceremony there on Promentory Summit. It was a fun day. On the way back to the car, I head some radio operators:
CQ CQ CQ. This is KB7MRL. Over. CQ CQ CQ. This is KB7MRL. Over.
Contact was made, a short conversation ensued, and they went on to the next band. I knew immediately they were hams, and I wanted to check out their rig, where they were from, and how long they had been doing amateur radio. They were handing out Golden Spike QSL cards to anyone they could make contact with. So, I headed over to their pavilion, chatted with them for a bit, then went back to my family for lunch.
During my meeting, they gave me a couple ARRL magazines, their personal QSL cards, and a Morse Code CD (bundled with Windows software). I’ve always been interested in learning Morse (commonly called “CW” for “continuous wave”), ever since I was a scout. So, recently, I decided to set to the task of learning it. Why, you ask? What’s the point, when we have the Internet, cell phones, satellites, and other forms of communication? My answer: I like a good challenge, and I just want to see if I can learn it. I can still get involved with satellite radio, and packet radio.
So, I fired up the software, and set to task. I’m learning CW using the Koch method, which means learning the number of characters I want, at the target speed I feel comfortable with. So, I set with 10 WPM, and I’m up to 7 characters: ABHJMTW, with about 90% accuracy. I’m hoping by the end of the month, I’ll have the entire alphabet down at 10WPM, where June I can focus on doubling the speed, as well as reaching the assigned 40 characters of CW. Maybe that’s a bit optimistic. We’ll see.
Eventually, I’ll set the goal for getting my Amateur Extra license here in the States. I understand that CW is no longer a requirement for obtaining that license, and as already mentioned, that isn’t the reason for me learning CW. However, when I do get my license, and eventually a rig setup, I would like to chat on the CW-only bands from the outset. So, becoming proficient with CW before then is important to me.
I’m not sure how my wife will enjoy me picking up a new hobby, especially seeing as though I have so very little time in my life for anything, let alone a hobby. She probably won’t be excited about me setting up my ham shack when we move. But, on the flip side, she’s always complaining that I spend too much time on IRC/IM, so maybe this can take that place. After all, hams step up for public service when they can, win awards, and just enjoy good company. It’s a bit more involved than IRC, with actual purposes, so we’ll see. Maybe she’ll get her license as well. I know I would like to see my daughter licensed. That would be cool.
So, anyway, there you go. Learning CW for fun. I’ll keep progress on this blog as I go along. No promises, or threats, on the frequency of the posts.
What can I say. It's Friday, and I'm tired of doing serious stuff. I was telling my wife last week that I miss doing the "cute girl" posts. They bring a lot of bogus and useless traffic which costs me money and I hate, but they're also mindless and fun. And sometimes mindless and fun is a good thing.
If you can handle a wet t-shirt and some PG-13 language, this entry is safe for work. If you like girls, the whole article will probably be much more entertaining! I went through a lot of girly-nerdy-booby t-shirts on the web trying to find tasteful and cute nerdy examples. What can I say -- this is the type of sacrifice I am prepared to make for you, the reader. Which is another way of saying this post has nothing to do with you the reader, it was just the product of a waste of time on a Thursday evening that turned into a blog post.
![]()






![]()
![]()





(Honorable mention, since I know that's what many of you are thinking anyway)
Somebody shared a link with me today about the role of dopamine in creativity. So I click the link.
And I am taken to the sign-on page to some place that keeps documents for people. I can view the document online, but if I want to download it, I need to sign-up.
I really wish there wasn't such a mad scramble on the internet to lay claim to data that I might be interested in.
Facebook is taking my friends -- who they are, what we say to each other, the pictures and videos we share -- and saying they own that data. Google recently got in trouble for accidentally picking up wi-fi -- as they drove around collecting hotspot information.
Google wants all the data in the universe. They're not going to charge me for it, but when I go looking for it, they want to "help" me out.
There are three types of businesses you can have any more. You can make pipes -- bring the internet to the house. You can hold data that goes through the pipes -- search data, map data, library data, whatever. Or you can write an application that transforms data, like QuickBooks, which transforms receipts, bills, and invoices into accounting data.
Transformative apps are becoming a sucker's game: the economics are driving most all software prices to zero, and creating the data is generally not as important as moving it or sharing it with the right people.
The pipe business is going like gangbusters, although most providers are looking at greed instead of Quality of Service, and they're going to pay the piper for that choice. But at the end of the day, the pipe business is mechanical and limited. Once you have 100 Gigs to the house, you're probably going to be okay for a while.
The data business, on the other hand, is the great internet land rush of the 21st century. Everybody wants to take parts of your life, your thoughts, your conversations, your email, your videos, your pictures, and "keep" them for you.
It's causing a lot of problems because the key issue here is this: is the computer a device like a record player that I store things on to play back at some future point? Or is it an extension of my mind?
The mp3 file-sharers have understood this problem for some time. If I hear a song, can I whistle it on the way to work? Can I record it on my mp3 player and listen to it any time I want? Can I share it with others? Their mantra, for quite a few years, is "data has to be free" The idea is that once an artist does a performance the information becomes bits and freely travels everywhere, whether we like it or not. Whether we try to outlaw it or not.
The computer is an information freedom device, moving all human knowledge and art around freely to everybody, enabling the world to know and act on the same data.
But then kids started taking pictures of themselves naked and sending them to each other on the phone. Or taking drunken pictures at college and posting them on FB. People have arguments via chat and words are said that live on forever.
Data never forgets, but people do (or used to)
Let's say I am 17u and living a wild life. I take lots of pictures and videos and write lots of blog posts that are radical, weird, or whatever. Perhaps due to some chemical imbalance I go insane and spend time posting totally incoherent thoughts for a year.
Later on I get that fixed -- it was something both natural and outside my control that caused me to act in an extremely anti-social manner.
Years pass. I go to college. I get a job as a lawyer. One day they ask me to be a judge. People Google me and blam! There's my life.
Now people will tell you that in this wondrous mysterious future, everybody will have skeletons in the closet and being able to find bad things on Google won't be such a big deal. This is akin to saying that since photography was invented, it wasn't a problem for folks to have slanderous pictures floating around, since there were a lot more slanderous pictures once photography had been invented. It's stretching the truth quite a bit. There will be folks with little to poke fingers at, and there will be folks with lots to poke fingers at. Who do you think is going to do better at being a judge?
The internet never forgets.
Worse still, the great data land rush is causing all sorts of little data islands to pop up. Each island has various rules and various standards of what to share with whom.
At the heart of this is a simple question: once the great singularity comes, are we going to evolve into a thinking machines that will live forever? Or are we evolving into some kind of hive mind where everything is shared and processed in parallel?
So here is my proposal.
Each person owns a file that describes everything they have put on the internet. Perhaps it's XML, don't care. Every time I tweet, or email, or post on FB, or record a video, or write a blog -- every tiny piece of data that I produce that is shared with anybody at all goes into this XML file.
Then I get to go in and annotate what I want to share with others. I may change this at any time. This is a passive standard -- people like FB and Google check this file from time to time and honor my wishes as to how my data is being presented or shared. Perhaps I keep this data on a key dongle, or on a PC, or in the cloud. Doesn't matter. But I separate the data from the ownership. Sure, I might choose to share any number of pieces of data with anybody on the web. Perhaps I blog, tweet about it, then post it on FB. But I get to say what my wishes are. If ten years later I am embarrassed by that post, I get to withdraw it.
The internet needs to be able to forget.
I'm not proposing a law, but I am saying that it is vitally important that each of us control our concept of self, of who we are. It used to be that if you made mistakes people would forget who you were and you could move on. It is absolutely critical that we provide this same functionality into whatever we're changing into.
It used to be that there was only one or two places that could index or hold all of the internet. As storage prices drop, the price of data storage is dropping through the floor and the number of organizations able to store all the data we generate in our lives is increasing geometrically. It is already impracticable for me to find all the places some picture might appear and annotate it with "but I was just a kid then". In the future instead of making me chase my data, my data should point back to me. We need a robots.txt file for people.
Bits still gotta be free, but there is a difference between a book, song, or movie and my life. As bits start adding up to cover more and more of my life, you're not just sharing some tune anymore: you're taking away my soul.
I don't want to be the Borg.
For those of you who don't get the pun in the title, obligatory link (and yes, this was before my time)
Three weeks ago, VMWare and Salesforce.com launched VMForce, a Salesforce-hosted PaaS solution based on VMWare runtime technology and force.com application services. In my analysis of the announcement, I wrote:
VMWare wants us to know they are under the covers because of course they have much larger aspirations than to be a provider to SalesForce. They want to use this as a proof point to sell their SpringSource+VMWare stack in other settings, such as private clouds and other public cloud providers (modulo whatever exclusivity period may be in their contract with SalesForce)
Well, looks like there wasn’t much of an exclusivity period after all as today VMWare is going an another date, with Google App Engine (GAE) this time. But a comparison of the two partnerships reveals that there is a lot more in the VMForce announcement than in today’s collaboration.
The difference in features
Before VMForce, we could not deploy Java applications on force.com. After VMForce we can (with the restriction that they have to be Spring-based). That’s a big difference. On the GAE side, the announcement today that we can now more easily run Spring Roo applications on GAE is nothing drastic. We could do it before, it was just harder. There was an ongoing effort to simplify it and there was no secret about this. Looks like it has delivered some improvements as part of the 1.1.0.M1 release. This only becomes major news via the magic of being announced as Google I/O rather than as an email on a developer mailing list.
Now, I don’t want to belittle the benefit of making things simpler. Simplicity is a feature. Especially for Roo where it is key to the value proposition. This looks very nice (and will probably push me over the edge to actually give Roo a spin now that I have an easy way to host whatever toy app I produce). It just doesn’t represent a major technology announcement.
The difference in collaboration
Salesforce is using VMWare infrastructure to run VMForce.com. They present a unified customer support service across the companies. They also presumably have some kind of revenue-sharing agreement. That makes for a close integration as far as business partnership go. No such thing that I can see on the Google side. No VMWare hypervisor is getting inside the Google infrastructure. No share of revenues from Google App Engine for Business goes to VMWare (any SpringSource infrastructure used is brought by the customer, not provided by Google, unlike with VMForce). And while Rod Johnson asserts that “today’s announcement makes Spring the preferred programming model for Google App Engine” (a sentence repeated on the vCloud blog), I don’t see any corresponding declaration on the Google side that would echo the implicit deprioritization of Python and non-Spring Java support. Though I am sure they had nice things to say on stage at Google I/O. From Google’s perspective this sounds more like “we’re happy that they’ve made their tools work well with OUR infrastructure” than an architectural inflection. I think Google has too much pride in their infrastructure to see VMWare/SpringSource as an infrastructure provider rather than just a tool/library. But maybe I’m just jealous… And tools are important anyway.
What we’re not seeing
These VMWare+Salesforce and VMWare+Google announcements are also interesting for what is NOT there. Isn’t it interesting that the companies that VMWare enables with a PaaS platform are those which… already have a PaaS platform? What we haven’t seen is VMWare enabling a mid-tier telco to become a PaaS provider. Someone who has power, servers and wires and wants to become a Cloud provider. VMWare is just starting to sell them an IaaS platform (vCloud) and cannot provide them with a turnkey PaaS platform yet by lack of application services (IDM, storage…) and of a comprehensive (i.e. not just virtualization) management platform. Make a list of what application services you think a PaaS platform requires and you probably have a good idea of the VMWare shopping list. But with Salesforce and Google this is not a problem, as they already have these services and all they need from VMWare is an application runtime (or just a runtime interface for Google) and some development tools.
The application services are also where the real PaaS portability issues appear. Which is also probably why Salesforce.com and Google are not too worried about being commoditized as interchangeable Spring runtime infrastructures. They know that the differentiation is with the application services. Their respective values in this domain are their business focus (processes, analytics, SaaS integration) for Salesforce and their scalability and low cost for Google (and more and more also the SaaS part). Not to mention Amazon who is not resting on its IaaS laurels and also keeps innovating in Cloud application services (e.g. RRS just yesterday). On their side, the value proposition seems to be centered on practicality and scale.
This is good news overall. As Steve Herrod writes, SpringSource has indeed been very busy and displays an impressive amount of energy in figuring this PaaS thing out. We’re still in the very early days of the battle of the Cloud Frameworks and at this point the armies are establishing beachheads and not yet running into one another. There is plenty of space for experimentation. 2010 is the year of PaaS.
Related posts:
I almost let today go by without blogging about Open Discussion Day. Of course, lately, I haven’t been doing much blogging at all, which is entirely out of my person, but anyway, let’s get onto the festivities.
First, so you understand, Open Discussion Day started back 4 years ago when Ploum first blogged about showing support for open protocols, such as Jabber/XMPP (using Google Talk, jabber.org, and others). I’ve blogged about it in the past, even though I missed blogging about it last year.
You can start with by checking out the page [www.opendiscussionday.org]. There, you’ll find a wiki that has some information on how to get started with open communication platforms, protocols and software. Given the ways we communicate with each other on the Internet and elsewhere, it makes sense to advocate supporting these open platforms. Here’s a brief, non-exhaustive list of various open protocols worth checking out:
Of course, there are many closed discussion platforms and protocols, such as Twitter, Facebook, Skype and MSN/AIM/ICQ/Yahoo. It’s important to note that you don’t own your data on these services, unlike the ones I’ve mentioned above. You are subject to vendor lockin, and everyone else must use those services too, as they don’t communicate with each other. But, we’re about the open discussion protocols, not the closed ones, so let’s continue.
I’m sure there are many other open communication platforms that would be worthy discussing in this post. I chose what I feel to be the biggest and most successful of the open protocols. The future will tell what else we see in this arena, but right now all I can say, is we have a great deal of options for supporting an open protocol, many of which are doing very, very well. If you have other open communication protocols that you use, make sure you specify them in the comments, or add them to the Open Discussion Day wiki. For the record, I fully support all the open protocols/communication platforms, and you can find me on any of the protocols listed above.
Happy Open Discussion Day, 2010!
I was discussing with PlinkPlonk from HackerNews the nature of Agile the other day and it struck me what a wonderful zoo of human experience I've had the pleasure to observe.
I was talking to a team member yesterday who was telling me that he had a fifth-degree black belt in Taekwondo. I worked with a guy years ago who was a nuclear particle physicist. One guy was a rocket scientist from the former Soviet Union.
I remember saying one day "Geesh! This isn't rocket science!" and everybody in the room laughed. (I loved that East-German Rocket-Scientist guy, because he always sounded like a mad scientist from cheesey sci-fi movies when describing programming problems)
Part of my job over the past few years has been to work in a tightly-integrated fashion with a few teams at a time for a month or two, and then move on. It's not just been one industry, either -- I've had the privilege to travel all over the country and see teams tackling all sorts of technology problems.
It hasn't always been fun, but it's been very varied.
I worked at one place and was talking about requirements. "You have to have a list of things that people understand in case one of you gets run over by a bus the team can carry on."
There was dead silence.
Later that day I saw a plaque next to the cafeteria. Somebody on the team had gotten ran over by a bus.
Mostly, though, it's been very fascinating. When I first started working in software teams in my 20s, I expected programmers and technology people to be sort of supermen -- they were working on the hardest problems in the world, they were using logic and reason as their tools -- you'd expect these guys to be highly-functional, rational, erudite paragons of rationality.
I remember my first contract job. I had been doing a lot of programming and hardware set up in the local area, but I was self-taught, and I was sure that I was out of my league. Here I had flown across the country to Sacramento, dressed in suit, and was waiting outside the door of the VP of an insurance company.
He came to greet me in a "Go Buckeyes!" T-shirt and sandals.
Technology people did not turn out as I had expected.
Instead of a laboratory, it's been much more like a zoo: I get to go to various exhibits, er companies, and watch how people play and work there. What are the customs? What are the unwritten rules? Are they happy? How does change occur?
Some technology folks become teachers. I find that the really good ones are eventually leaned on to start sharing some of their knowledge. (This can have a very bad effect on the teacher if they lose their technical chops over time, but that's a story for another day). A lot of technology people are attracted to aviation, as I was. Somebody told me once that there is a certain kind of brain that likes to master intricate technical skills as a way of relaxing. We get a lot of those folks in technology.
I've found that people are a lot less rational than they think they are. No, this isn't meant as some sort of "Most people are stupid" kind of remark. Rather it's a trait of all humans: we have an amazing ability to self-deceive. People can understand this if you show them some kind of optical illusion or some cognitive parlor trick, but most folks have a very difficult time understanding what a deep role it plays in everybody's psyche.
One of the reasons that small teams are so much more powerful than individual or pair programmers is the ability of a team to cover all the cognitive blind spots. This has led me to believe that true diversity -- diversity of personality styles and life experiences -- is critical for any team to succeed. It's also been interesting to observe that any decision made by a team of more than 7-9 players is based almost completely on group dynamics, no matter how much the participants believe it may be based on logic or reason. in fact, the larger the group the more a clan or political group mentality sets in, at least among some members. If you had told me that 20 years ago I wouldn't have believed you. At some team size greater than 9 members, we begin to start forming small versions of political parties. Fascinating.
I've noticed that people who think they know things are very useful -- except for the times they're not, in which case it's crazy hard to get them to understand they are mistaken. As part of that, I've gone back to Socrates -- humble ignorant questioning is probably the most rational way for humans to interact. It also can be uncomfortable, especially if you have the pride of being an expert or feel like you have spent your time earning your rank and shouldn't be questioned.
Some folks hack their bodies off-work. A few people ran marathons. A lot had gym memberships -- which they used to varying degrees. Be careful starting a conversation about nutrition! If there are any takers it could go for a long time, and you'd better have boned up on organic chemistry.
There are the mensa members and the Trekkers, of course. All the stereotypical "nerd" traits are still around. The old joke that goes "How do you tell an extroverted engineer? He stares at your shoes while he's talking to you" still holds true with some. There are still guys with the nerdy glasses and dorky look, but this is really not as common as before. Any more there are a huge number of immigrants. I have met people in IT from just about every country in the world.
I think one of the huge untold stories of the past decade is the burgeoning friendship between Americans and Indians, and to some extent the Chinese. No matter where our governments are at, hundreds of thousands of folks at the "grunt" level are meeting each other and making lasting friendships.
Computers and technology in general have grown so quickly that they have "sucked up" vast numbers of people from all over the planet who trained or planned their life to turn out very differently. And work in industry is vastly different than academia, the other place where you'll see so many cultures mixing. Directors don't get teunre, and I seriously doubt you'll run into a coworker just passing through living on a trust fund or attend a demonstration in the cafeteria for a some political cause.
This makes technology workers probably the best place to see the largest number of integrated diverse people actually living their lives while mingling with each other. Which is pretty cool, actually.
From Pierre Levy’s book Collective Intelligence: mankind’s emerging world in cyberspace:
Groups learn even more slowly than individuals.
The flipside to this is that sometimes groups learn things that individuals can’t or won’t.
I enjoy thinking and writing about philosophy, and over the years I have reached a strange conclusion.
There are really only three important metaphysical concepts: God, Suffering, and Death. How each of us deal with these concepts form the basis of our value system.
God is a placeholder name for the Great Unknown. Ancient peoples understood that they didn't understand most of life, so they created placeholders for things they didn't know. There was the god of the sun, the god of the moon, the god of rain, etc. Almost immediately after creating gods, they started giving them human characteristics. But I would encourage you to separate the two things. A belief in God is a deeply held belief that there is much in the universe we do not know. There is a kind of humbleness that goes with this that feels awkward to modern man. But our relationship to the unknown forms a critical part of life. We create explanations for those things, either using science or just making stuff up. We share these stories and beliefs. Man's relationship to the unknown begins at birth and is probably his most powerful driving force.
Immediately after birth, our tiny brains realizing there is a vast amount of unknown, we experience suffering. Indeed, suffering remains with us throughout life. Buddhists tell us that suffering is a response to being too attached to things in life. Some people become atheists because they can't understand how a God would allow so much suffering in the world. Some sects view suffering as a part of purification. Some religions tell us that our relationship with God determines in some way our experience of suffering.
Suffering, like God, is an irreconcilable part of life, of existing. (All of these concepts are meta-concepts) So we're stuck with it. Like the Great Unknown, there are folks who try to completely ignore or run away from suffering using things like drugs. Usually these efforts end very badly.
Finally there's death, or the end of our life. Every living being will end at some point. Existentialists tell us that how we deal in the present with our impending death is a critical part of the value of our life, and I agree. Many religions have sprang up to connect God with Death in various fashions.
I believe these three universal concepts, God, Death, and Suffering, will continue to exist long after I am gone. In fact, I believe they exist for all beings, human or not. If 2 billion years in the future aliens in some hive mind finally harness the power of a galaxy, they will still deal with God, Suffering, and Death.
That makes these concepts very cool. We can make several observations. For instance, for most of mankind's history we have been struggling with these concepts. Science attempts to make the unknown less and less. Religion gives us answers about Suffering and Death. Medicine address Suffering and Death. People die for God. People suffer to make other people's deaths easier.
Some folks have tried to completely deny these concepts. Some believe there is no such thing as the unknown in a deep sense: either we know most everything now and/or we will at some point in the future. This is the religion of science. Some folks say we can beat death -- machine intelligence will make our lives effectively last forever. Some think life can exist without any suffering at all.
I don't know, but my guess is that there are deep flaws with these positions. For instance, even a machine intelligence living for a million years could cease to exist as a result of an accident. The idea that death can come for us will never disappear, even if we radically change the 80-year life span. There's a yin and yang part of suffering in life that makes the happy parts mean more because of the sad parts.
But I don't know, I'm not sure.
And I'm happy with that.
Many companies are (rightfully) getting very concerned about security on the net. So to make sure you are who you say you are, they use something called "multi-factor authentication" It's not enough to have a password any more: now they'd like a smartcard, or perhaps you could store the answers to some questions only you would know the answers to. For those of us perhaps a bit on the forgetful side, this is not fun.
So now when I surf the net, it's like a quiz show. I go to log in to my brokerage account. After the password, they ask "What was the name of your elementary school?"
I don't know. They changed the name about halfway through my first year. Did I use the original one or the later one?
Visit another site: "What was the name of your favorite pet?"
I had a lot of pets. I really liked my cat WhiteFoot, but FriskyFoot was pretty cool too, and then was that dog Sad Eyes that Joy had...
"Where is your favorite vacation spot?"
The kids like Myrtle Beach, but I've always been fond of Maine, but then there was that trip I took about the time I set the account up....
"Who was your best friend growing up?"
Now wait a minute. I had LOTS of friends, thank you very much, and for me to pick one out....
"Where did you meet your wife?" "When is your wedding anniversary?" "Who is your favorite aunt?"
Stupid computer.
This is my first shot at collaborative blogging -- where you, the user, have just as much control over the blog as I do.
I'll ask the question and you guys respond, both by voting, giving options, and commenting. As things progress, you can send links to other people to join the conversation, add in text, images, video, video conferencing, IM, mindmaps, embed the results in your own blog, or whatever. Whatever you think is appropriate for the topic.
Then you can monitor the changes as other people add their thoughts effortlessly -- using the web.
We're using Google Wave, so if you don't have it and would like it visit the site or ask for an invite. It's all web-based (works best in Chrome) and it's probably the future of something-or-another. That's kind of what we're trying to figure out. Not sure, but I think you're going to need a high-speed connection for this.
google.load("wave", "1"); google.setOnLoadCallback(initialize); function initialize() { var waveframe = document.getElementById("waveframe"); var embedOptions = { target: waveframe, header: false, toolbar: false, footer: false }; var wavePanel = new google.wave.WavePanel(embedOptions); wavePanel.loadWave("googlewave.com!w+eW1CgukjA");}
The previous entry, “Don’t tell Facebook what you like, tell Twitter“, used Twitter and Facebook as examples to illustrate a general point about the integration of social profile data. Unfortunately, the examples may have overshadowed the larger point. In the post, I didn’t consider Twitter as a social network but as a message conduit. Most people on the other hand think of Twitter as a social network (after all, which Twitterer is not watching his/her follower count?) and could come out with the impression that I was just saying that Twitter is a better social network than Facebook. It wasn’t my point.
The main point is about defining the right integration pattern for social data: is it a “message bus” pattern or a “shared database” pattern. For readers who haven’t had the joy of dealing with integration architecture and enterprise integration patterns, here is a one-paragraph primer:
The expense report application in a company needs to be in sync with the data in the HR system, so that an expense report can be sent to the right manager for review/approval. Implementing such application integration in an efficient, resilient and flexible way is hard. Battle-tested approaches (high-level “patterns”) have emerged that have been successful, in the right context. Architects have learned that 99% of the time they are better off asking themselves which of these enterprise integration patterns is right for their problem, rather than trying to invent a new approach. Two of the most common basic patterns are the “shared database” pattern and the “message bus” pattern. In the “shared database” pattern, all the applications read and write to the same repository. In the “message bus” pattern, applications post messages on a shared channel (the “bus”) and also listen on the channel for messages from other applications that they are interested in. It’s similar to a radio channel of the kind used by police and ham radio operators.

(diagrams by Hohpe/Woolf, under cc license)
Facebook wants your social data to be shared across sites and applications using the “shared database” pattern, in which Facebook is the central database (and also the primary application). What I described in the previous post was the use of a “message bus” pattern (in which Twitter was used as the bus).
A bus has the following advantages when applied to the problem of sharing social data:
There are lots of interesting considerations about how to build and operate such a bus: security, scalability, access protocols, payload format, etc. But they are secondary to the choice of the integration pattern. For the sake of illustration, Twitter’s approach to security is OAuth, their scalable architecture is described here, the access protocols here and the payload format here. Reasonable alternatives exist for all these functions.
It’s hard for me to imagine the content of the messages on this bus not resembling RDF-like subject/verb/object triplets, in which the subject is implicit (the user attached to the message). The verbs could be simple strings or represented by URIs and have an associated taxonomy. And as in RDF, the objects should be either URIs or simple values (mostly strings, of a limited size, be it 140 characters or something else). Possible examples (the subject is implicit, the verb is in square brackets):
[say] I just had coffeecake for breakfast [like] http://www.hobees.com/ [location] http://www.hobees.com/redwood.html
I still think Twitter is the most practical implementation of the Open Social Data Bus, for reasons I listed before:
I remember discussions, in the early-to-mid-nineties, about whether the Internet, this quirky but fast-growing network, would turn into the expected global “information superhighway” or whether a superior one would have to emerge. This might seem like a silly discussion today but it wasn’t so obvious at the time. Wondering whether Twitter will turn out to be the Open Social Data Bus will seem just as silly in 15 years, though I don’t know if it will be deemed silly because the answer was obviously “no” or obviously “yes”…
The tension between Twitter as an infrastructure provider and Twitter as a competitor in the Twitter app marketplace is well-known. The company understands that what makes them different from other social networks is the ecosystem of applications that was enabled by this “message bus” pattern. Which is why, even as they announced that they were going to create their own applications to tap into the stream, they took pains to explain that they would be calling the same interfaces as everybody else.
On the other hand, Twitter obviously also needs to worry about making money. If their service becomes a low-level service, invisible to users (almost like DNS), then who is going to pay for the operations? Especially since the expectations on Twitter are currently so high that a “normal” rate of profit on operating such an infrastructure would be a huge letdown for investors. But this is not a post about the business prospects and strategic challenges of Twitter. It’s about allowing integration of social profile data in a way that benefits users.
I’d be fine with some other Open Social Data Bus implementation taking over and serving this need, as long as it fulfills the key requirements of being equally open to all applications and allowing individuals to control what gets posted about them. There are other avenues if Twitter cannot (or doesn’t want to) play this role. As the DNS example shows, it doesn’t necessarily have to be operated by a single operator. And there are a variety of funding models for such essential infrastructure (see “who funds root name server operations?” in the DNS root name servers FAQ). Alternatively, applications might be charged based on how much data they get from the bus.
Corporate support can take different forms. From wireless frequencies to wi-fi networks to DNS to supporting Firefox Google has shown a willingness to support the development and operation of the internet infrastructure, confident that they’ll be in the best position to benefit from it. Especially if the alternative is what Pete Cashmore describes as “Google’s nightmare“.
You could even think of this service eventually falling under the “common carrier” model, with the corresponding legal constraints. Especially in societies that are more privacy-aware.
I don’t know what the right business/operating model is for the Open Social Data Bus. What I know is that it’s how I want my social profile data to flow between applications.
[UPDATED 2010/5/20: Some supporting evidence for my recollection of "discussions, in the early-to-mid-nineties, about whether the Internet, this quirky but fast-growing network, would turn into the expected global 'information superhighway' or whether a superior one would have to emerge":
Gates's 286-page book [The Road Ahead, 1995] mentions the World Wide Web on only four of its pages, and portrays the Internet as a subset of a much a larger “Information Superhighway.” The Internet, wrote Gates, is one of “the important precursors of the information highway,” along with PCs, CD-ROMs, phone networks, and cable systems, but “none represents the actual information highway. … today’s Internet is not the information highway I imagine, although you can think of it as the beginning of the highway.”]
Related posts:
I am working on-site in North Carolina for a while. The client is large, so they have Wi-Fi available for visiting consultants but it is monitored by the network Nazis. They also have video surveillance of the entire place.
So using the WiFi is an non-starter. I don't surf porn at work, but I do like to do whatever the hell I feel like on the internet without having people watch and log my actions.
So I plugged up my Sprint modem, got 4 bars on an EVDO connection, and went to town.
Then weird things started happening.
First the connection would go up and down seemingly at random. I know a bit about multipath propagation, so no big deal. But random cars driving by outside and what I was seeing was two different things.
First, after putting a heavy load on the card, such as a big download, the signal would drop in strength -- consistently. Sometimes it would drop into dial-up speed world, and the using the internet would be painful.
After a while, and on some days, all I could get was dial-up speeds.
Second, as my mother passed away recently, I have another almost identical card in my pocket. For the past couple of days, I've been playing a game: when one card has problems I switch the cards.
Every time so far the signal has gotten better and the transfer speed improved. Now these are two identical cards in the same place getting different results.
Is Sprint promising me one kind of bandwidth and delivering on another -- sort of high-speed for all the folks that don't really need high-speed? I'm beginning to think so, although I am not completely sure.
What I am sure about is if the larger story of ISPs playing games with speed figures continues, we're going to end up not only having net neutrality, but some QoS regulations as well. As a libertarian, I am against government intervention, but everybody deserves to have a very clear idea about what they are buying or the marketplace doesn't work efficiently. The impedance mismatch between what people think they are purchasing and what they are getting grows larger.
So Sprint! Can you hear me now? Or do I have to get a bigger stick?
There seems to be a lot to like technically about the announcements at Facebook’s f8 conference, especially for a Semantic Web aficionado. But I won’t have anything to do with it as a user. Along with the usual “your privacy is our toy” subtext, I really don’t like the lack of data portability. “Web 2.0″ is starting to look a lot like “AOL 2.0″. Here is a better way to do it.
Taking the new “like” button as a simple example, I’d much rather tell Twitter what I like than Facebook. A simple #like hashtag in a tweet can be used to express positive feelings for what the tweet describes. Here is a quick list of the many advantages of this approach over the newly-introduced Facebook “like” feature.
It’s public
Your tweets are available to all. Your Facebook profile can still consume them, so if you think Facebook does the best job at organizing this information about you and your friends you can still go there to view the results. But other applications and networks can tap into the same data, so you can also benefits from innovation coming out of companies which do not want to be Facebook sharecroppers.
It’s publicly public
By which I mean that there is no pretense of privacy and no nasty surprise when trust is violated. Which is going to happen again and again. Especially when it’s not just a matter of displaying data but also of inferring new information based on the raw data collected. At which point it’s almost impossible to segregate access to the derived information based on the privacy settings of the individual data pieces. On Twitter, it’s all public, we all know it from the start, and as such we’re not fooled into sharing more than we should. See the fallacy of privacy settings.
It works on all things
Rather than only being on a web page, you can use a #like hashtag to describe any URI (dereferenceable or not) or even plain text. Just like RDF allows the value of an attribute to be either a URI or a scalar value (string, number…). For example, you can express that you like a quote or a verse of a poem by including them directly in the tweet. It’s not as identifiable as something that has a URI, but it can still be part of your profile. And smart consumers of this data might still be able to do some processing on it (e.g. recognizing it as a line from a song).
It can still be 1-click
You don’t necessarily have to copy/paste a URL (or text) into twitter. A web site can still do this for you, as long as it has your permission to post on your behalf. With that approach, it looks exactly like the Twitter “like” button to the user. You don’t have to be a Twitter user, just to have a Twitter account. No need for a Twitter client or to visit the Twitter web site if you don’t want to. It’s also OK if you have zero followers, Twitter is just a technical conduit in this approach.
It can evolve
The success of Twitter is also the success of self-organization as illustrated by the emergence of @replies, #hashtags and RT, directly form the users. Rather than having Facebook decide what verbs make sense to allow users to express their thoughts on the Web, let people decide and see what verbs emerge (e.g. to describe what you like, dislike, are curious about, are considering buying, etc). The only thing we need is an understanding that the hashtag qualifies the user’s attitude towards what’s described by the rest of the tweet. Or maybe hashtags should not be reused for this, maybe we need a new breed, “semtags” (semantic tags), with a different syntax, e.g. “^like”. This way you can semtag a hashtag, e.g. “^like #nyc” might replace “I ♥ NY” on twitter feeds (and tee shirts). It can be as simple or as complex as needed, based on what sticks in the real world. Nerds like me will try to qualify it (e.g. “^!like” for “I don’t like”) and might even come up with ontologies (^love subClassOf ^like). These experiences will probably fail and that’s fine. Evolution strives on failures.
It is transparent
Even if you let a site write these messages on your twitter feed, you can see exactly what goes on. There is no secret channel as with Facebook. The fact that it goes on your Twitter timeline acts as a validation, ensuring that only relevant, human-readable messages get added to your profile. Which is the only way in which we can maintain control of our profile information. If sites start to send too much information or opaque information you’ll see it. And so will your followers. This will put pressure on sites to make the posted data sparse and meaningful, because they know that their users won’t want to scare away their followers with social spam. See, for example, how the outcries over foursquare spam seem to have forced a clean-up (or at least so it looks to me, but maybe it’s just because I’ve unfollowed the spammers). Keeping social profiling on a human scale is a bug, not a feature.
It is persisted in many places
Who do you think is more likely to be around in 20 years, Facebook or the Library of Congress? Tweets are archived in many places, including Twitter itself, of course, but also Google, Bing and the Library of Congress. Plus, it’s very easy for you to set up a system to save all your tweets. Even if Twitter disappears, all the data in your profile that was built from your tweets will still be around. And if Google, Bing and the Library of Congress all go dark before Facebook, well that’s fine because the profile data from your tweets can be there too.
In effect, you should think of Facebook as a repository and Twitter as a stream. Don’t publish directly to one repository. Publish to a stream and benefit from all the repositories and other consumers that tap into it. It’s a well-known enterprise integration pattern (message bus), but it’s not just good for enterprise applications.
In fact, more than Twitter itself it’s this pattern that I want to encourage. Twitter is just the most obvious implementation, at this time, of a profile data bus. It already has almost everything we need (though a more fine-grained authorization model, or a delegated authorization model, would make me more likely to allow sites to tweet on my behalf). What matters is the switch from social networks owning data to you owning your data and social networks competing on how much value they can deliver to you based on the data. For example, LinkedIn might be the best for work connections, Facebook for personal connections, Google for brute search/retrieval of information, etc. I don’t want to maintain different profile data and privacy settings for each of them. I have one global privacy settings, which controls what I share with the world. Based on this, I want these sites to compete on the value they provide to me. It may not be what Facebook wants, but if what works best for us.
If you like this proposal, you know what you have to do. Go ahead and tweet:
^like http://stage.vambenepe.com/archives/1464
Or just retweet it.
[UPDATED 2010/5/6: See the next post for some clarifications.]
Related posts:
(Note use of Wave for comments at bottom. Feedback appreciated)
I do not believe in evolution.
When I was in fourth grade, my entire class took a break for an hour while I had a debate with my friend David Hillon about evolution. He argued for evolution and science, and I argued for skepticism and faith.
The world, you see, was only a few thousand years old. The Great Flood made the Grand Canyon. There were too many gaps in the fossil record to demonstrate evolution. Great flood stories are part of every culture. After all, we already knew how things came about -- the King James Bible -- and as long as we understood that was true we could speculate freely about the rest of it.
As long as it supported long-established religious dogma, it was worthy of study.
I have been thinking about my fourth-grade experience and Cato The Elder quite a bit over the last several years.
Cato the Elder came from a humble background. Born around 230 B.C.E., his ancestors had made names for themselves in military service but nobody in his family had a reputation for public service. Cato was the one who, after attracting the notice of powerful people, was brought to Rome where he stayed in politics the rest of his life. He was a man on the move, a novus homo. He was a strict Roman, he was old school and he accomplished a lot in his long life.
In his 70s, Cato was sent to Carthage to arbitrate a regional conflict. Cato was so taken back by the wealth he saw in Carthage that he became convinced that Carthage was a grave and imminent threat to the safety of Rome and must be attacked at once. From that point forward, whenever he gave a public speech he ended by saying "Carthago delenda est" -- Carthage must be destroyed.
It didn't matter what the topic of the speech was. The farmers this year have brought in record harvests and we should write a letter of praise, "Ceterum autem censeo, Carthaginem esse delendam" (and furthermore, Carthage must be destroyed). I am sure this new public building will contribute to the health of the state, and furthermore Carthage must be destroyed. I would like to thank my hosts for this gracious dinner, and furthermore Carthage must be destroyed.
Cato was so convinced that Carthage was a threat that whatever he was doing, he felt it somehow logically tied back to Carthage.
Nothing else really mattered if Carthage destroyed Rome.
Cato is best known for "Carthago delenda est", but he did a lot more than that. He also was the first person to write a history of Italy in Latin. He wrote a book on how to farm that you can still buy on Amazon, explaining everything from the soil to the market to dealing with the weather.
Back then, the climate was basically the same back then in Rome as it is today. Perhaps wetter. As the climate changed over the centuries, farmers produced more or less food, eventually leading to all sorts of problems for the Romans in the late empire period. The role of changing weather patterns and climate on ancient civilizations and how they evolve, or fail to, is fascinating.
Which brings us to what's driving me nuts.
Several years ago, I'm reading a science article about some esoteric topic, say tree frogs. (Most mainstream science reporting is total crap. [Insert long explanation here] This tree frog example is allegorical, not factual). At the end, the researchers noted that Global Warming is changing the frog's habitat and this could cause the species to be lost.
This seemed like a reasonable thing -- if things get warmer certainly organisms that depend on temperature will be affected.
Later that month, I read another such article -- also biology-related. Then there was another, and another. Then there was a deluge of articles. From reading these articles, the subtext was clear: global warming was a real and imminent threat in some fashion or another to the entire planet's ecosystem.
At this point my bullshit alarm went off. Sometimes I have trouble tuning it, but this was a pretty clear signal. My interest was piqued.
So I started researching Anthropocentric Global Warming. I found that the more I researched the science and the public debate, the more skeptical I became about the quality of the discussion. Not the truthfulness of the claims or counter-claims. I became convinced that there was little honest skepticism within the clique of scientists doing climate research. I was perfectly happy saying I didn't know what was going on with the climate. Climate scientists did not seem to be able to be this open-minded. It seemed that by the time you took a role in the climate research community, you already knew what was happening. Your job was just to continue to gather data to support it.
Later on, as we all know, the hacked emails showed some small number of scientists trying to rig editorial boards, shunning critics, fuming at criticism, withholding data, and all the other little petty things that people do when they're thinking politically instead of scientifically.
I became convinced that the debate was terribly flawed.
I am not trying to beat the dead horse of arguing about global warming. Really I'm not. This article has a deeper purpose, so bear with me even if you are the most avid supporter of AGW.
Things got even weirder.
Scientists started using the term "Climate Change" instead of "Global Warming"
Now every article I read ends in something like "and scientists feel that Climate Change is one of the responsible factors" or "Smith noted that Climate Change will continue to threaten the turtles habitat" or whatever. People even note how many research articles include links to Climate Change research, mentioned Climate Change, or implicitly accept Anthropocentric Climate Change. This is supposed to be a sign of the seriousness of Climate Change.
Climate change is everywhere.
Carthago delenda est.
Which brings me back to evolution.
What IS evolution, anyway? Wiki defines it as "Evolution is the change in the inherited traits of a population of organisms through successive generations."
I'm okay with that. It's not provable science in the strict prepositional "if A, then B" sense, but it represents a state of affairs that I believe to be true. I have grown up a lot since I was ten years old.
Just to repeat, evolution is not a theory like you see in physics that can be proven true or false. It's a general category of theories, all which deal with various pieces of how life changes over time. Some of these theories may be able to be proven one way or another. Some will be proven wrong. Some will be tweaked. We do not know everything about evolution because we've only been studying it around 150 years.
But generally, yes, makes sense to me. I agree that the title "Evolution" covers all of these theories. I also believe that most of these theories have been or will be proven true. I think evolution is an awesome thing to study. What I object to is the liberal use of the title "evolution" to describe and obscure anything you feel like saying.
Richard Dawkins is a popular writer. As i understand his works, he uses "evolution" to describe how religion may have evolved in human culture. Some writers use evolution to show us how human mating has become what it is. Some writers explain how corporations have "evolved" from the early days of barter. It seems that anything that changes over time is considered to be "evolving".
Worst still, it also seems that scientists can take a word like "evolution", pull apart various aspects and sub-theories, mix in a little imagination, and then expand at length on how "evolution" might explain everything from God to the Income Tax.
Poppycock.
Take a really smart person, give them an intractable problem, and ask them to take a stab at an answer. What do you get? A lot of scientific speculation, that's what. Creative answers based on shared beliefs about things that are still unknown.
As it turns out, we already have a great word for shared creative beliefs about things that are still unknown. It's called "religion"
I'm not saying Dawkins is wrong -- hell if I know how people became convinced about gods. I can certainly talk about God in the philosophical sense, and i think it's an important metaphysical topic, but I don't think anybody knows what humans thought of deities 400 thousand years ago. If they do, it's the first I've heard of it.
Dawkins is creatively speculating, pulling little anecdotal pieces of evidence here and there that supports his speculation.
I really, really love reading articles like this. It is fascinating to see what really smart people think about such difficult problems. If they're good writers, all the better -- I get to be one of the "in crowd", sitting in a bar having a beer with the best minds in the world while we talk about space-time, evolution, sociology, or any of a hundred other fascinating topics. It's like, for a little bit, I'm at the forefront of science, hearing about what the new stuff coming out is going to be before it comes out.
Very cool.
But we must remember what it is we consume. It's shared creative speculation by some of the smartest people we have using all the information in their field. It may have a lot of big words and contain all sorts of fascinating stories and observations, but it also may be very wrong. We don't know. After all, that's one of the reasons it's so much fun to read.
And let's be honest here, there is quite a bit of money and notoriety in it for the scientists as well. That's not saying they are crooked. Not at all. Just that it's not always clear whether you are helping them become wealthy and famous or helping their noble cause. Or both. Or neither. Motivations are unclear, and there can be subtle and powerful conflicts of interest that are not apparent to the consumer.
To be blunt, at the end of the day, epistemologically there's little difference between reading this kind of writing and listening to the local shaman explain why the river god has caused the floods due to a lack of sufficient sacrifices and offerings. The shaman was wrong, but he also lived ten thousand years ago. Somebody sometime is going to be looking back on us from ten thousand years in the future. I can guarantee you we're going to look the same way.
When I realized I only had a week to finish my research to debate Evolution with David, I tried to find the best sources I could. An older person at my church gave me a copy of The Genesis Flood, a detailed apology for the Biblical notion of how the world came to be. And there it was, in black and white! Pictures of human footprints next to dinosaurs, the reason we don't have dinosaurs (They couldn't fit on the Ark? Been a long time ago). Heck, this thing was written by real scientists. With footnotes and everything!
I am no longer ten years old, and I am embarrassed by this entire story. But at the time, there were really smart people with all sorts of credentials using big words telling me something I already knew was true. It wasn't like I was asking a bunch of questions or double-checking the details.
As I got older, I learned to ask questions -- especially of the things I felt strongly to be true. Those were the things I usually ended up being the most wrong about. It appears my BS detector has a tendency to automatically adjust itself downward without my noticing it.
I read a story today, "Arctic explorers get nasty surprise: rain"
In what looks to be another sign the Arctic is heating up quickly, British explorers in Canada's Far North reported on Tuesday that they had been hit by a three-minute rain shower over the weekend ... The rain fell on the team's ice base off Ellef Rignes island, about 3,900 km (2,420 miles) north of the Canadian capital, Ottawa ... "It's definitely a shocker ... the general feeling within the polar community is that rainfall in the high Canadian Arctic in April is a freak event," said Pen Hadow, the team's expedition director ... "Scientists would tell us that we can expect increasingly to experience these sorts of outcomes as the climate warms..."
Now I'm not an arctic explorer, or even a world-renowned scientist, but I'll give you a thousand dollars if you can show me detailed records from the last couple thousand years concerning 3-minute rain showers in the arctic. And no, a century or two isn't going to work, nor will measuring the temperature 3000 miles away and guessing rainfall. The statement was about rainfall, and I'd like to see the data, please.
Homeboy is not falling for this again.
Just like the problem with the word "evolution", when we moved from "Global Warming" to "Climate Change" we've broadened the terminology so much that it can freaking apply to anything.
Epistemologically (epistemology is about what you can know and what you can't know), we either agree with the idea that the climate is changing or not. I know of nobody in their right mind that thinks the climate is not changing, so we all agree with climate change. The only question is, what does "climate change" mean? It changes. We all agree. Now it's one thing. Later on it will be something else.
I can use "climate change" to apply to just about anything that involves temperature, humidity, rainfall, snowfall, wind, barometric pressure, sunlight, diurnal rate, adiabatic lapse rate, tornadoes, thunderstorms, hurricanes, beach erosion, tides, salinity of the ocean, migration patterns of swallows (African or European)...
I can go on. "climate change" is the ultimate wild-card.
It's also a hot-button political issue, by the way, and people feel very strongly about it, including many of the scientists studying it.
Whenever you have the same people that feel passionately about something who are also supposed to be dispassionately and intellectually evaluating it -- better pay close attention. Bias can sneak in a million different ways, and it happens to everybody. This isn't a situation where you can somehow train yourself to the point where the bias is not there. Oddly, the more educated and elite you are, the less likely you are to be able to see your own bias. Lawyers and doctors already know this -- never have yourself as a client.
So now whenever I read anything involving research and walking outside, I get to "climate change" at some point in the article. I'm willing to bet a huge number of news stories, papers and research reports will continue mention "climate change". After all, it's so poorly defined it works for anything. Simply drop it in there towards the end with the rest of the factors. Makes you feel good to be bringing it up, puts a little bit extra out there for the good cause, and after all, it is a really important thing to be reminding people about.
Nothing else really matters if climate change destroys the ecosystem.
So, for me, "climate change" makes for a nice marker to look for where scientists or reporters are slipping up, perhaps being a little lazy. Taking shortcuts. Pitching softballs to each other to hit out of the park. If the tree frog is dying off because of poor rainfall, then let's see the rainfall stats -- as much as you can -- and track those against tree frog populations over time. Or let's capture some frogs and raise them in various rainfall conditions. Let's take one variable -- rainfall -- and change it while we hold the other variables the same. Multivariate analysis is cool, but there are a lot of alligators in there which we'll save for another day.
I hope some of this is sounding familiar to anybody who's been in a high school science class.
So while I believe in natural selection, and in genetic drift, I do not believe in "evolution" -- it is a fun word but has so many meanings as to make it useless. Likewise while I believe in the absorption spectrum of CO2 and the other greenhouse gases, and I believe in humans changing the environment around them, I do not believe in "Climate Change". It is a silly phrase that cannot be discussed at all with any sort of meaning. It gets in the way of discussion and research instead of assisting it. And while I love listening and reading really smart people tackle the problems of our age, I do not confuse that with "science" -- the application of abduction, deduction, and induction in a linked fashion to allow us to understand and manipulate the universe.
This article is not about evolution, climate change, God, or religion, even though I use them as examples. It's about the standards we critically need to apply when conducting science and making public policy that involves science. If you got emotional about one of these topics and stopped reading or posted some snarky commment then you missed the point -- and you are demonstrating mine. There is a deep systemic problem here. It's mostly hidden, and we only see it when the stakes are high, such as happens in these topics. This is just the tip of the iceberg.
Ask questions, look for bias, and challenge assumptions. Always.
Furthermore, Carthage must be destroyed.
google.load("wave", "1"); google.setOnLoadCallback(initialize); function initialize() { var waveframe = document.getElementById("waveframe"); var embedOptions = { target: waveframe, header: false, toolbar: false, footer: false }; var wavePanel = new google.wave.WavePanel(embedOptions); wavePanel.loadWave("googlewave.com!w+ASFWJoUBA");}
In January of 2009, Tim Gowers initiated an experiment in massively collaborative mathematics, the Polymath Project. The initial stage of this project was extremely successful, and led to two scientific papers: “A new proof of the density Hales-Jewett theorem” and “Density Hales-Jewett and Moser numbers”. The second of these papers will soon appear in a birthday volume in honour of Endre Szemeredi. The editor of the Szemeredi birthday volume, Jozsef Solymosi, invited me to submit an introduction to that paper, and to the Polymath Project more generally. The following is a draft of my introductory piece. I’d be very interested in hearing feedback. Note that the early parts of the article briefly discuss some mathematics, but if you’re not mathematically inclined the remainder of the article should be comprehensible. Many of the themes of the article will be discussed at much greater length in my book about open science, “Reinventing Discovery”, to be published early in 2011.
At first appearance, the paper which follows this essay appears to be a typical mathematical paper. It poses and partially answers several combinatorial questions, and follows the standard forms of mathematical discourse, with theorems, proofs, conjectures, and so on. Appearances are deceiving, however, for the paper has an unusual origin, a clue to which is in the name of the author, one D. H. J. Polymath. Behind this unusual name is a bold experiment in how mathematics is done. This experiment was initiated in January of 2009 by W. Timothy Gowers, and was an experiment in what Gowers termed “massively collaborative mathematics”. The idea, in brief, was to attempt to solve a mathematical research problem working entirely in the open, using Gowers’s blog as a medium for mathematical collaboration. The hope was that a large number of mathematicians would contribute, and that their collective intelligence would make easy work of what would ordinarily be a difficult problem. Gowers dubbed the project the “Polymath Project”. In this essay I describe how the Polymath Project proceeded, and reflect on similarities to online collaborations in the open source and open science communities. Although I followed the Polymath Project closely, my background is in theoretical physics, not combinatorics, and so I did not participate directly in the mathematical discussions. The perspective is that of an interested outsider, one whose main creative interests are in open science and collective intelligence.
Gowers began the Polymath Project with a description of the problem to be attacked (see below), a list of rules of collaboration, and a list of 38 brief observations he’d made about the problem, intended to serve as starting inspiration for discussion. At that point, on February 1, 2009, other people were invited to contribute their thoughts on the problem. Anyone with an interest and an internet connection could follow along and, if they wished, contribute their ideas in the comment section of Gowers’s blog. In just the first 24 hours after Gowers opened his blog up for discussion, six people offered 24 comments. In a sign of things to come, those contributors came from four countries on three continents, and included a high-school teacher, a graduate student, and four professors of mathematics. A collaboration was underway, a collaboration which expanded in the weeks that followed to involve more than twenty people.
The problem originally posed by Gowers was to investigate a new approach to a special case of the density Hales-Jewett theorem (DHJ). Let me briefly describe the statement of the theorem, before describing the special case Gowers proposed to attack. Let
be the set of all length
strings over the alphabet
. A combinatorial line is a set of
points in
, formed by taking a string with one or more wildcards (“
“) in it, e.g., 14×1xx3, and replacing those wildcards by
, respectively. In the example I’ve given, the resulting combinatorial line is:
. The density Hales-Jewett theorem says that as
becomes large, even very low density subsets of
must contain a combinatorial line. More precisely, let us define the density Hales-Jewett number
to be the size of the largest subset of
which does not contain a combinatorial line. Then the density Hales-Jewett theorem may be stated as:
Theorem (DHJ):
.
DHJ was originally proved in 1991 by Furstenberg and Katznelson, using techniques from ergodic theory. Gowers proposed to find a combinatorial proof of the
case of the theorem, using a strategy that he outlined on his blog. As the Polymath Project progressed, that goal gradually evolved. Four days after Gowers opened his blog up for discussion, Terence Tao used his blog to start a discussion aimed at understanding the behaviour of
for small
. This discussion rapidly gained momentum, and the Polymath Project split into two subprojects, largely carried out, respectively, on Gowers’s blog and Tao’s blog. The first subproject pursued and eventually found an elementary combinatorial proof of the full DHJ theorem. The results of second subproject are described in the paper which follows, “Density Hales-Jewett and Moser Numbers”. As mentioned, this second subproject began with the goal of understanding the behaviour of
for small
. It gradually broadened to consider several related questions, including the behaviour of
for small
and
, as well as the behaviour of the Moser numbers,
, defined to be the size of the largest subset of
which contains no geometric line. As for a combinatorial line, a geometric line is defined by taking a strinq in
with one or more wildcard characters present. But unlike a combinatorial line, there are two distinct types of wildcards allowed (“
” and “
“), with
taken to vary over the range
, and
. So, for example,
generates the geometric line
.
Both subprojects of the Polymath Project progressed quickly. On March 10, Gowers announced that he was confident that the polymaths had found a new combinatorial proof of DHJ. Just 37 days had passed since the collaboration began, and 27 people had contributed approximately 800 mathematical comments, containing 170,000 words. Much work remained to be done, but the original goal had already been surpassed, and this was a major milestone for the first subproject. By contrast, the goals of the second subproject were more open-ended, and no similarly decisive announcement was possible. Work on both continued for months thereafter, gradually shifting to focus on the writeup of results for publication.
Although the Polymath Project is unusual from the perspective of current practice in mathematics, there is another perspective from which it does not appear so unusual. That is the tradition of open source software development in the computer programming community. Perhaps the best known example of open source software is the Linux operating system. Begun by Linus Torvalds in 1991 as a hobby project, Linux has since grown to become one of the world’s most popular operating systems. Although not as widely used in the consumer market as Microsoft Windows, Linux is the primary operating system used on the giant computer clusters at companies such as Google, Yahoo! and Amazon, and also dominates in markets such as the movie industry, where it plays a major role at companies such as Dreamworks and Pixar.
A key feature of Linux is that, unlike proprietary software such as Microsoft Windows, the original source code for the operating system is freely available to be downloaded and modified. In his original message announcing Linux, Torvalds commented that “I’ve enjouyed [sic] doing it, and somebody might enjoy looking at it and even modifying it for their own needs. It is still small enough to understand, use and modify, and I’m looking forward to any comments you might have.” Because he had made the code publicly available, other people could add features if they desired. People began emailing code to Torvalds, who incorporated the changes he liked best into the main Linux code base. A Linux kernel discussion group was set up to co-ordinate work, and the number of people contributing code to Linux gradually increased. By 1994, 80 people were named in the Linux credits file as contributors.
Today, nearly twenty years later, Linux has grown enormously. The kernel of Linux contains 13 million lines of code. On an average day in 2007 and 2008, Linux developers added 4,300 lines of code, deleted 1,800 lines, and modified 1,500 lines. The social processes and tools used to create Linux have also changed enormously. In its early days, Linux used off-the-shelf tools and ad hoc social processes to manage development. But as Linux and the broader open source community have grown, that community has developed increasingly powerful tools to share and integrate code, and to manage discussion of development. They have also evolved increasingly sophisticated social structures to govern the process of large-scale open source development. None of this was anticipated at the outset by Torvalds – in 2003 he said “If someone had told me 12 years ago what would happen, I’d have been flabbergasted” – but instead happened organically.
Linux is just one project in a much broader ecosystem of open source projects. Deshpande and Riehle have conservatively estimated that more than a billion lines of open source software have been written, and more than 300 million lines are being added each year. Many of these are single-person projects, often abandoned soon after being initiated. But there are hundreds and perhaps thousands of projects with many active developers.
Although it began in the programming community, the open source collaboration process can in principle be applied to any digital artifact. It’s possible, for example, for a synthetic biologist to do open source biology, by freely sharing their DNA designs for living things, and then allowing others to contribute back changes that improve upon those designs. It’s possible for an architect to do open source architecture, by sharing design files, and then accepting contributions back from others. And, it’s possible to write an open source encyclopedia, by freely sharing the text of articles, and making it possible for others to contribute back changes. That’s how Wikipedia was written: Wikipedia is an open source project.
The Polymath Project is a natural extension of open source collaboration to mathematics. At first glance it appears to differ in one major way, for in programming the open source process aims to produce an artifact, the source code for the desired software. Similarly, in synthetic biology, architecture and the writing of an encyclopedia the desired end is an artifact of some sort. At least in the early stages of the Polymath Project, there was no obviously analogous artifact. It’s tempting to conclude that the two papers produced by the polymaths play this role, but I don’t think that’s quite right. In mathematics, the desired end isn’t an artifact, it’s mathematical understanding. And the Polymath process was a way of sharing that understanding openly, and gradually improving it through the contributions of many people.
The Polymath Project’s open approach to collaboration is part of a broader movement toward open science. Other prominent examples include the human genome project and the Sloan Digital Sky Survey, which use the internet to openly share data with the entire scientific community. This enables other scientists to find ingenius ways of reusing that data, often posing and answering questions radically different to those that motivated the people who originally took the data.
An example which gives the flavour of this reuse is the recent work by Boroson and Lauer, who used a computer algorithm to search through the spectra of 17,000 quasars from the Sloan Digital Sky Survey, looking for a subtle signature that they believed would indicate a pair of orbiting black holes. The result was the discovery of a candidate quasar containing a pair of supermassive black holes, 20 million and 800 million times the mass of the sun, respectively, and a third of a light year apart, orbiting one another roughly once every 100 years. This is just one of more than 3,000 papers to have cited the Sloan data, most of those papers coming from outside the Sloan collaboration.
People practicing open notebook science have carried this open data approach to its logical conclusion, sharing their entire laboratory record in real time. The Polymath Project and the open data and open notebook projects are all examples of scientists sharing information which, historically, has not been openly available, whether it be raw experimental data, observations made in a laboratory notebook, or ideas for the solution of a mathematical problem.
There is, however, a historical parallel to the early days of modern science. For example, when Galileo first observed what would later be recognized as Saturn’s rings, he sent an anagram to the astronomer Kepler so that if Kepler (or anyone else) later made the same discovery, Galileo could disclose the anagram and claim the credit. Such secretive behaviour was common at the time, and other scientists such as Huygens and Hooke also used devices such as anagrams to “publish” their discoveries. Many scientists waited decades before genuine publication, if they published at all. What changed this situation – the first open science revolution – was the gradual establishment of a link between the act of publishing a scientific discovery and the scientist’s prospects for employment. This establishment of scientific papers as a reputational currency gave scientists an incentive to share their knowledge. Today, we take this reputational currency for granted, yet it was painstakingly developed over a period of many decades in the 17th and 18th centuries. During that time community norms around authorship, citation, and attribution were slowly worked out by the scientific community.
A similar process is beginning today. Will pseudonyms such as D. H. J. Polymath become a commonplace? How should young scientists report their role in such collaborations, for purposes of job and grant applications? How should new types of scientific contribution – contributions such as data or blog comments or lab notebook entries – be valued by other scientists? All these questions and many more will need answers, if we are to take full advantage of the potential of new ways of working together to generate knowledge.
When Mark Hurd read Steve Job’s rant against Flash (saying, in effect, “we have to tolerate Flash on our desktops/laptops for now but this piece of crap is not going to soil our iPhones, iPads and iPods”) he must have thought “hey, if I can pull one of these stunts maybe I too will have groupies screaming my name when I unveil our tablet”. Sources tell me he is planning to work on this over the weekend and publish it on hp.com on Monday. I was able to get hold of an early draft, which an HP staffer (or Mark himself?) left in a beer garden. Here is what Mark Hurd has to say to about Windows for mobile devices:
Thoughts on Windows
HP has a long relationship with Microsoft… [Note from Mark: someone inserts some hypocritical blah blah about how we used to love each other - sure hasn't been the case since I've been here]. Today the two companies still work together to serve their joint customers – HP customers buy a big chunk of Windows licenses – but beyond that there are few joint interests.
I wanted to jot down some of our thoughts on Microsoft’s Windows products so that customers and critics may better understand why we will not use Windows in our phones and tablets. Microsoft will characterize our decision as being primarily business driven – they say we want to taste decent margins for once – but in reality it is based on technology issues. Microsoft will claim that we are a closed system, and that Windows is open, but in fact the opposite is true. Let me explain.
First, there’s “Open”.
Microsoft Windows products are 100% proprietary. They are only available from Microsoft, and Microsoft has sole authority as to their future enhancement, pricing, etc. While Microsoft Windows products are widely available, this does not mean they are open, since they are controlled entirely by Microsoft and available only from Microsoft. By almost any definition, Windows is a closed system.
HP has many proprietary products too. Though the WebOS operating system we’ll use in our phones and tablets is proprietary, we strongly believe that all standards pertaining to the web should be open. Rather than use Windows, HP has adopted HTML5, CSS and JavaScript – all open standards. HP’s mobile devices will all ship with high performance, low power implementations of these open standards. HTML5, the new web standard that has been adopted by HP, Apple, Google and many others, lets web developers create advanced applications without relying on proprietary APIs (like Windows). HTML5 is completely open and controlled by a standards committee.
Second, there’s the “full application ecosystem”.
Microsoft has repeatedly said that HP mobile devices will not be able to access “the full application ecosystem” because 75% of applications are Windows applications. What they don’t say is that almost all these applications are also available in a more modern form, using Web standards and implemented as a service, and usable on HP’s upcoming phones and tablets. Microsoft Office, Outlook, financial software etc all have excellent Web-based alternatives. Users of HP’s phones and tablets won’t be missing many applications.
Third, there’s reliability, security and performance.
Windows has had an awful security records for twenty years. We also know first hand that Windows is the number one reason PCs crash. We have been working with Microsoft to fix these problems, but they have persisted for several years now. We don’t want to reduce the reliability and security of our phones and tablets by using Windows.
In addition, Windows has not performed well on mobile devices. We have routinely asked Microsoft to show us Windows performing well on a mobile device, any mobile device, for a few years now. We have never seen it. Microsoft publicly said that Windows would work well on a device starting with the first Windows CE in 1996. Then came Pocket PC 2000, then Pocket PC 2002, then Windows Mobile 2003, then Windows Mobile 5, 6, 6.1 and 6.5, none of which was any good. And now they say it will be with Windows Phone 7. We think it will eventually ship, but we’re glad we didn’t hold our breath. Who knows how it will perform?
Fourth, there’s battery life.
To achieve long battery life, mobile devices must use thin and efficient software and Windows is anything but that. It only runs on power-hungry Intel processors while the same features can be delivered by much smaller and more efficient processors when using WebOS. Not only does the battery last longer, the devices are lighter and don’t leave burn marks on your clothes.
Fifth, there’s Touch.
Windows was designed for PCs using mice, not for touch screens using fingers. For example, many Windows applications have such crappy UI that users depend on tooltips to figure out what a button does. They pop up when the mouse arrow hovers over a specific spot. WebOS revolutionary multi-touch interface doesn’t use a mouse, and there is no concept of a tooltip. Most Windows applications will need to be rewritten to support touch-based devices. If developers need to rewrite their Windows applications, why not use modern technologies like HTML5, CSS and JavaScript?
Even if HP phones and tablets used Windows, it would not solve the problem that most Windows applications need to be rewritten to support touch-based devices.
Sixth, the most important reason.
Besides the fact that Windows is closed and proprietary, has major technical drawbacks, and doesn’t support touch based devices, there is an even more important reason we will not use Windows on our phones and tablets. Windows is an abstraction layer that covers very different underlying hardware.
We know from painful experience that letting a third party layer of software come between the hardware and the developer ultimately results in sub-standard apps and hinders the enhancement and progress of the platform. If developers grow dependent on third party development libraries and tools, they can only take advantage of hardware enhancements if and when the third party chooses to adopt the new features. We cannot be at the mercy of a third party deciding if and when they will make our enhancements available to our developers.
This becomes even worse if the third party is supplying an operating system that runs on hardware from many vendors. The third party may not adopt enhancements from one platform unless they are available on all of their supported platforms. Hence developers only have access to the lowest common denominator set of features. Again, we cannot accept an outcome where developers are blocked from using our innovations and enhancements because they are not available on our competitor’s platforms.
Windows is a multi-hardware abstraction. It is not Microsoft’s goal to help developers write the best application for HP’s phones and tablets. It is their goal to help developers write applications that will run on Windows devices from all hardware manufacturers. [Note from Mark: should I describe how Microsoft has been getting in the way of how our PCs talk to our printers and making a mess of desktop printing for the last 20 years or is this off-topic?]
Our motivation is simple – we want to provide the most advanced and innovative platform to our developers, and we want them to stand directly on the shoulders of this platform and create the best apps the world has ever seen. We want to continually enhance the platform so developers can create even more amazing, powerful, fun and useful applications. Everyone wins – we sell more devices because we have the best apps, developers reach a wider and wider audience and customer base, and users are continually delighted by the best and broadest selection of apps on any platform.
Conclusions.
Windows was created during the PC era – for PCs and mice. Windows is a successful business for Microsoft, and we can understand why they want to push it beyond PCs. But the mobile era is about low power devices, touch interfaces and open web standards – all areas where Windows falls short.
The avalanche of Web-based applications accessible from Web-enabled mobile devices demonstrates that Windows is no longer necessary to access application functionalities of any kind.
New open standards created in the mobile era, such as HTML5, will win on mobile devices (and PCs too [Note from Mark: maybe I should remove that parenthesis or we'll give Ballmer a heart attack]). Perhaps Microsoft should focus more on creating a great Web-centric platform for the future, and less on criticizing HP for leaving the past behind.
Mark Hurd
April, 2010
[UPDATED 2010/5/18: I hear echos of "should I describe how Microsoft has been getting in the way of how our PCs talk to our printers and making a mess of desktop printing for the last 20 years or is this off-topic?" in the statements Mark Hurd made during his post-earning analyst call today: "when you look across the HP ecosystem of interconnected devices, it is a large family of devices and we think of printers, you’ve now got a whole series of web connected printers and as they connect to the web, [they] need an OS.” Though I am really puzzled by the next line: “Hurd adds that HP prefers to own the OS to “control the customer experience” as it always has in printing.” HP doesn’t control the customer experience at all in printing, because of Windows. It’s only because we are so used to it that we don’t realize how awful the printing experience is, whether using a connected printer or over the network. Glad to see that they intend to apply the Palm acquisition to this problem too.]
[UPDATED 2010/5/26: According to some, this breakup letter from HP caused a breakup inside Microsoft: The reason Robbie Bach was fired]
Related posts:
Now that school is out for the summer, I have a bit of time to work on some of the themes I’ve created for my ZSH prompt, Irssi and GNU Screen. The first focus of mine was to get all themes working well with both white text on black backgrounds, and black text on white backgrounds. I’ve been leaning more and more to black text on white background colors for my default terminals, so I wanted to make sure that everything I was using day-to-day looked good with that setup.
First, my ZSH prompt was already developed from the outset with that in mind. So, no additional hacking has been needed on that. There are some elements that I’m not too terribly excited about. I don’t care for the dark blue directories on a black background, and I don’t care for the yellow character devices on a white background. Using the Tango scheme for gnome-terminal makes both of those scenarios much more tolerable. However, I do have additional items that I want to put in my prompt, but that will be for a later post. Also, my GNU Screen hardstatus line also needed to be compatible. This wasn’t that big of a deal, as I only needed to apply some colors to a few elements. Hhere’s a couple screenshots showing both black and white backgrounds, and how the ZSH prompt inside looks in each. Note the GNU Screen hardstatus line is at the bottom of the terminal.
![]() |
| From Desktop Screenshots |
![]() |
| From Desktop Screenshots |
Second, my Irssi theme also needed to work well with both. As I’ve already blogged before, I was really, really impressed with the madcows theme. However, I didn’t care for a few elements, so I started hacking it, making my own changes. I’ve tried keeping the true nature of the theme, while still adding my own style. The theme was already largely compatible with my ZSH prompt colors, it just needed some adjustments here and there, before I was totally satisfied. Further, it looked like crap using a white background, so this needed some hacking as well. I think I’m overall happy with the result, although I’m sure I’ve missed many things (like DCC, or CTCP), so there’s likely much more hacking to go before it’s perfect. However, for the general day-to-day chat, it’s 95% there. Screenshots for both backgrounds below:
![]() |
| From Desktop Screenshots |
![]() |
| From Desktop Screenshots |
In a nutshell, the themes are compatible with xterm-color support on most terminals. Mainly, I’m using bold and normal weights on red, green, yellow, black, white and blue. Anything else takes the default color of the terminal itself, whether it be the foreground text or the background. So, as long as your TERM variable is set to “xterm-color” or something better, you should be okay.
This post wouldn’t be complete without the source for you to try it out. Here’s a compressed tarball for giving it a shot, and reporting anything you find in the comments, if you like.
Cheers!
How many flavors of PaaS do we need?
BTW, doesn’t “flavors of PaaS” sound like the name of a perfume? At least when I say it with my French accent it does.
Related posts:
One of the questions I commonly face as an agile smart-ass/wonk/nerd goes something like this: "We have a year's worth of work to do and 3 months to do it in. Agile is going to make it happen, right?"
Well yes, and no.
First yes. Yes, over time Agile principles will allow your teams to dramatically increase the amount of work they can do -- enough to be non-believable if I told you about it. After all, "Agile" is really just a marketing term around best practices for iterative and incremental teams and, well, best practices have a tendency to be really good.
But no, it will not fix your problems.
Here's the deal -- you don't make the work horse run faster by electrocuting him. Sure, it scares the hell out of him, and you're bound to get some initial improvement, but it's non-sustainable. Brute force does not make a team better.
What Agile principles do is bring the pain quicker. If you have unreasonable expectations for the next 3 months and week-long sprints, then an agile team is going to bring up that it's not working right from the very first sprint. You may not like this -- after all, traditional projects with long GANTT bars usually don't get feedback until many weeks into the process. Everybody here knows about the segment that makes steady increase until it reaches 80% -- only to remain at 80% for a long time! That's because it's easy to guestimate that you're making more progress than you actually are.
Agile projects aren't like that. You have a complete list of testable chunks of work that, when completed, represent the entire project. As each piece of work gets done, there is automated testing that goes with it. You're either done or you're not. We don't do partial credit.
So if you plan to have 10 iterations and the first three iterations only average about 5% of the total backlog, 10 times 5 percent means, on average, you're currently looking at only finishing about half the work. That's a lot of pain to get early in the project.
How organizations handle this pain depends on the project and the organization. If you want to allow the team to learn in order to reach the next level of performance, you will continue to stress them and give them maximum flexibility to innovate. I can promise you over time they'll figure it out.
This is called giving people time to learn. It's also called "sharpening the saw"
If, on the other hand, you want the product delivered, regardless of the consequences, then insist on sprint goals being completed each sprint even if it means working nights and weekends. I don't like this -- you're doing nothing more than electrocuting the horse -- but I understand that sometimes it has to be done. If your business model is such that it never has time for strategic items like increasing performance 10-30% and instead only has time for quarterly deliverables, then you're on a downward spiral. Have fun with that.
In either case, by having small periods of time in which the team is expected to make something of value in return for their salaries is good for everybody. The team gets better at providing value in small increments. The organization gets better at listening to the teams and learning from them.
Over time, teams getting in the pattern of providing value and providing feedback on organizational issues is good for everybody, no matter how the current project turns out. That's why if I'm put into an impossible situation the best thing I can do is stick to agile principles: promise stuff, deliver what I promise, and predict when I will be done and what's holding me up. If I stick to those principles and work as hard and as best as I can, there's nothing more for me to worry about -- I'm doing what I can. The rest is up to somebody else.
And over time, yes, you'll get that performance boost. But that's after you optimize your team and organization. It doesn't come that way out of the box. Agile does not mean doing the impossible.
The VMforce announcement is a great step for SalesForce, in large part because it lets them address a recurring concern about the force.com PaaS offering: the lack of portability of Apex applications. Now they can be written using Java and Spring instead. A great illustration of how painful this issue was for SalesForce is to see the contortions that Peter Coffee goes through just to acknowledge it: “On the downside, a project might be delayed by debates—some in good faith, others driven by vendor FUD—over the perception of platform lock-in. Political barriers, far more than technical barriers, have likely delayed many organizations’ return on the advantages of the cloud”. The issue is not lock-in it’s the potential delays that may come from the perception of lock-in. Poetic.
Similarly, portability between clouds is also a big theme in Steve Herrod’s blog covering VMforce as illustrated by the figure below. The message is that “write once run anywhere” is coming to the Cloud.

Because this is such a big part of the VMforce value proposition, both from the SalesForce and the VMWare/SpringSource side (as well as for PaaS in general), it’s worth looking at the portability aspect in more details. At least to the extent that we can do so based on this pre-announcement (VMforce is not open for developers yet). And while I am taking VMforce as an example, all the considerations below apply to any enterprise PaaS offering. VMforce just happens to be one of the brave pioneers, willing to take a first step into the jungle.
Beyond the use of Java as a programming language and Spring as a framework, the portability also comes from the supporting tools. This is something I did not cover in my initial analysis of VMforce but that Michael Cote covers well on his blog and Carl Brooks in his comment. Unlike the more general considerations in my previous post, these matters of tooling are hard to discuss until the tools are actually out. We can describe what they “could”, “should” and “would” do all day long, but in the end we need to look at the application in practice and see what, if anything, needs to change when I redirect my deployment target from one cloud to the other. As SalesForce’s Umit Yalcinalp commented, “the details are going to be forthcoming in the coming months and it is too early to speculate”.
So rather than speculating on what VMforce tooling will do, I’ll describe what portability questions any PaaS platform would have to address (or explicitly decline to address).
Code portability
That’s the easiest to address. Thanks to Java, the runtime portability problem for the core language is pretty much solved. Still, moving applications around require changes to way the application communicates with its infrastructure. Can your libraries and frameworks for data access and identity, for example, successfully encapsulate and hide the different kinds of data/identity stores behind them? Even when the stores are functionally equivalent (e.g. SQL, LDAP), they may have operational differences that matter for an enterprise application. Especially if the database is delivered (and paid for) as a service. I may well design my application differently depending on whether I am charged by the amount of data in the DB, by the number of requests to the DB, by the quantity of app-to-DB traffic or by the total processing time of my requests in the DB. Apparently force.com considers the number of “database objects” in its pricing plans and going over 200 pushes you from the “Enterprise” version to the more expensive “Unlimited” version. If I run against my local relational database I don’t think twice about having 201 “database objects”. But if I run in force.com and I otherwise can live within the limits of the “Enterprise” version I’d probably be tempted to slightly alter my data model to fit under 200 objects. The example is borderline silly, but the underlying truth is that not all differences in application infrastructure can be automatically encapsulated by libraries.
While code portability is a solvable problem for a reasonably large set of use cases, things get hairier for the more demanding applications. A large part of the PaaS value proposition is contingent on the willingness to give up some low-level optimizations. This, and harder portability in some cases, may just have to be part of the cost of running demanding applications in a PaaS environment. Or just keep these off PaaS for now. This is part of the backward-compatible versus forward compatible Cloud dilemma.
Data portability
I have covered data portability in the previous entry, in response to Steve Herrod’s comment that “you should be able to extract the code from the cloud it currently runs in and move it, along with its data, to another cloud choice”. Your data in the force.com database can already be moved somewhere else… as long as you’re willing to write code to get it and perform any needed transformation. In theory, any data that you can read is data that you can move (thus fulfilling Steve’s promise). The question is at what cost. Presumably Steve is referring to data migration tools that VMWare will build (or acquire) and make part of its cloud enablement platform. Another way in which VMWare is trying to assemble a more complete middleware portfolio (see Oracle ODI for an example of a complete data integration offering, which goes far beyond ETL).
There is a subtle difference between the intrinsic portability of Java (which will run in any JRE, modulo JDK version) and the extrinsic portability of data which can in theory be moved anywhere but each place you move it to may require a different process. A car and an oak armoire are both “portable”, but one is designed for moving while the other will only move if you bring a truck and two strong guys.
Application service portability
I covered this in my previous entry and Bob Warfield summarized it as “take advantage of all those juicy services and it will be hard to back out of that platform, Java or no Java”. He is referring to all the platform services (search, reporting, mobile, integration, BPM, IdM, administration) that make a large part of the force.com value proposition. They won’t be waiting for you in your private cloud (though some may be remotely invocable, depending on how SalesForce wants to play its cards). Applications that depend on them will have to be changed, at least until we have standards interfaces for all these services (don’t hold your breath).
Management portability
Even if you can seamlessly migrate your application and your data from your internal servers to force.com, what do you think is going to happen to your management console, especially if it uses operating system agents? These agents are not coming along for the ride, that’s for sure. Are you going to tell your administrators that rather than having a centralized configuration/monitoring/event console they are going to have to look at cute “monitoring” web pages for each application? And all the transaction tracing, event correlation, configuration policy and end-user monitoring features they were relying on are unfortunate victims of the relentless march of progress? Good luck with that sale.
VMWare’s answer will probably be that they will eventually provide you with all the management capabilities that you need. And it’s a fair one, along the lines of the “Application-to-Disk Management” message at the recent launch of Oracle Enterprise Manager 11G. With the difference that EM is not the only way to manage a top-to-bottom Oracle stack, just the one that we think is the best. BMC and HP aren’t locked out.
VMWare and SpringSource (+Hyperic) could indeed theoretically assemble a full-fledged management solution. But this doesn’t happen overnight, even with acquisitions as I know from experience both at HP Software and currently at Oracle. Integration (of management domains across the stack, of acquired application management products, of support data/services from oracle.com) is one of the main advances in Enterprise Manager 11G and it took work.
And even then, this leads to the next logical question. If you can move from cloud to cloud but you are forced to use VMWare development, deployment and management tools, haven’t you traded one lock-in problem for another?
Not to mention that your portability between clouds, if it depends on VMWare tools, is limited to VMWare-powered clouds (private or public). In effect, there are now three levels of portability:
Is your application portable the way cash is portable, or the way a gift card is portable (across stores of a retail chain)?
If this reminds you of the java portability debates of the early days of Enterprise Java that’s no surprise. Remember, we’re replaying the tape.
Related posts:
Yesterday I wrote an article about how the startup culture and business can reach a point of diminishing returns -- about how in many businesses gatekeepers adopt policies best suited to them and not the market, about how people honestly trying to help may not know their own selection bias, and about how there is a subtle motivator in the startup world to be "about" startups, without actually doing anything.
Today I thought I would quantify that a bit, using you guys as guinea pigs.
The goal? To find how how much money there could be in simply talking about startups, ie, what is one of the things in the industry causing dysfunction.
I posted my article on HackerNews, my virtual watercooler. It went pretty high. I've been trying to stay off HN, but checking a few times yesterday I'm guessing that it stayed on the front page for 12 hours or so.
What kind of money could that generate?
Looking at other sites I have, I've found that a tightly-focused site can generate between 1 and 2 bucks per hundred viewers using AdSense. My blog is about 1/100th of that, but if you are careful about how you control the topics and provide value, I believe you can at least make a buck per hundred viewers.
Yesterday there were 6,873 viewers of the article as of midnight. Extrapolating a bit, and just using the back-of-the-napkin, let's go for 10K viewers in all. That means if you write a startup article (as a successful writer with a tightly-couple audience) you should be able to get about ten thousand people to read it. Once again, from looking at other sites this is not an unusual number. Of course Joe Schmoe is not going to get this kind of traffic, but lots do.
Running the numbers, looks like yesterday's article could have generated about $100. Not bad for 15 minutes work.
But it gets better. AdSense is notorious for giving the blog owner just a small portion of the total amount being paid for an ad -- anywhere from 1/5th to 1/10th of the total price of the ad actually gets paid to the writer. Google keeps the rest. Assuming 1/5th, that means you could have sold that same ad to a set of dedicated advertisers for around $500.
But it gets better still.
Good sites -- sites that stay on-topic and provide new, fresh content, should easily be able to drive that kind of volume everyday, either through using rotating authors, more popular articles, or providing a social-ranking system portal, like Digg or HN.
But you can still take it up another level.
If, instead of selling ad space, you sell a service or product, like access to online repositories, a make-your-startup-hum book, or one of the many hangers-on to the startup world (lawyers, accountants, staff augmentation people, you know who you are) the value increases by another order of magnitude.
It's not hard to envision a situation where a person made it big in a startup one or two times, wrote a book (largely ignoring or minimizing their own selection bias) and is picking up several thousand dollars a month or more simply bullshitting about startups online. This can be a powerful incentive, even to people who don't need the money.
To them, they're bringing in an audience and generating revenue -- they must be providing value to somebody. But to the user, a simple case of hero worship or the insecurity or just trying to wring every little piece of information possible from this source could be causing them to visit even though they've long reached the point of diminishing returns.
That's not saying that these folks are con artists or that somehow the industry is crooked. It's just an example of how we can easily get at cross-purposes without realizing it. I personally think everybody I know in the "helping people create startups" business is good and honorable -- I haven't met any crooks. But that doesn't mean that the system isn't whacked, that lots of people aren't wasting their time and money, or that there are incentives that are not aligned with the greater common good.
Lots of noise-to-signal here, and it's not readily apparent that this is the case.
I am going to stop blogging about startups for a couple of weeks now, lest I become the very thing I am criticizing. I blog in order to clarify things in my own mind. This is something that has been festering for many months. Glad to have finally gotten it out in written form. Hope it helps you to realize if you are in the same boat as I am.
Let’s start with the disclosures: by most interpretations I work for a competitor to what Salesforce.com and VMWare are trying to do with VMforce. And all I know about VMforce is what I read in a few authoritative blogs by VMWare’s Steve Herrod, VMWare/SpringSource’s Rod Johnson and Salesforce’s Anshu Sharma. So no hard feeling if you jump off right now.
Overall, I like what I see. Let me put it this way. I am now a lot more likely to write an application on force.com than I was last week. How could this not be a good thing for SalesForce, me and others like me?
On the other hand, this is also not the major announcement that the “VMforce is coming” drum-roll had tried to make us expect. If you fell for it, then I guess you can be disappointed. I didn’t and I’m not (Phil Wainewright fell for it and yet isn’t disappointed, asserting that “VMforce.com redefines the PaaS landscape” for reasons not entirely clear to me even after reading his article).
The new thing is that force.com now supports an additional runtime, in addition to Apex. That new runtime uses the Java language, with the constraint that it is used via the Spring framework. Which is familiar territory to many developers. That’s it. That’s the VMforce announcement for all practical purposes from a user’s perspective. It’s a great step forward for force.com which was hampered by the non-standard nature of Apex, but it’s just a new runtime. All the other benefits that Anshu Sharma lists in his blog (search, reporting, mobile, integration, BPM, IdM, administration) are not new. They are the platform services that force.com offers to application writers, whether they use Apex or the new Java/Spring runtime.
It’s important to realize that there are two main parts to a full PaaS platform like force.com or Google App Engine. First there are application runtimes (Apex and now Java for force.com, Python and Java for GAE). They are language-dependent and you can have several of them to support different programming languages. Second are the platform services (reports, mobile, BPM, IdM etc for force.com as we saw above, mostly IdM for Google at this point) which are mostly language agnostic (beyond a library used to access them). I think of data storage (e.g. mySQL, force.com database, Google DataStore) as part of the runtime, but it’s on the edge of the grey zone. A third category is made of actual application services (e.g. the CRM web services out of SalesForce.com or the application services out of Google Apps) which I tend not to consider part of PaaS but again there are gray zones between application support services and application services. E.g. how domain-specific does your rule engine have to be before it moves from one category to the other?
As Umit Yalcinalp (who works for SalesForce) told me on Twitter “regardless of the runtime the devs using the Force.com db will get the same platform benefits, chatter, workflow, analytics”. What I called the platform services above. Which, really, is where most of the PaaS value lies anyway. A language runtime is just a starting point.
So where are VMWare and SpringSource in this picture? Well, from the point of view of the user nowhere, really. SalesForce could have built this platform themselves, using the Spring framework on top of Tomcat, WebLogic, JBoss… Itself running on any OS they want. With or without a hypervisor. These are all implementation details and are SalesForce’s problem, not ours as application developers.
It so happens that they have chosen to run this as a partnership with VMWare/SpringSource which makes a lot of sense from a portfolio/expertise perspective, of course. But this choice is not visible to the application developer making use of this platform. And it shouldn’t be. That’s the whole point of PaaS after all, that we don’t have to care.
But VMWare and SpringSource really want us to know that they are there, so Rod Johnson leads by lifting the curtain and explaining that:
“VMforce uses the Force.com physical infrastructure to run vSphere with a special customized vCloud layer that allows for seamless scaling and management. Above this layer VMforce runs SpringSource tc Server instances that provide the execution environment for the enterprise applications that run on VMforce.”
[Side note: notice what's missing? The operating system. It's there of course, most likely some Linux distribution but Rod glances over it, maybe because it's a missing link in VMWare's "we have all the pieces" story; unlike Oracle who can provide one or, even better, do without. Just saying...]
VMWare wants us to know they are under the covers because of course they have much larger aspirations than to be a provider to SalesForce. They want to use this as a proof point to sell their SpringSource+VMWare stack in other settings, such as private clouds and other public cloud providers (modulo whatever exclusivity period may be in their contract with SalesForce). And VMforce, if it works well when it launches, is a great validation for this strategy. It’s natural that they want people to know that they are behind the curtain and can be called on to replicate this elsewhere.
But let’s be clear about what part they can replicate. It’s the Java/Spring language runtime and its underlying infrastructure. Not the platform services that are part of the SalesForce platform. Not an IdM solution, not a rules engine, not a business process engine, etc. We can expect that they are hard at work trying to fill these gaps, as the RabbitMQ acquisition illustrates, but for now all this comes from force.com and isn’t directly replicable. Which means that applications that use them aren’t quite so portable.
In his post, Steve Herrod quickly moves past the VMforce announcement to focus on the SpringSource+VMWare infrastructure part, the one he hopes to see multiplied everywhere. The key promise, from the developers’ perspective, is application portability. And while the use of Java+Spring definitely helps a lot in terms of code portability I see some promises in terms of data portability that will warrant scrutiny when VMforce actually rolls out: “you should be able to extract the code from the cloud it currently runs in and move it, along with its data, to another cloud choice”.
It sounds very nice, but the underlying issues are:
All these are hard questions. I am not blaming anyone for not answering them today since no-one does. But we shouldn’t sweep them under the rug. I am sure VMWare is working on finding workable compromises but I doubt it will be as simple, clean and portable as Steve Herrod implies. It’s funny how Steve and Anshu’s posts seem to reinforce and congratulate one another, until you realize that they are in large part talking about very different things. Anshu’s is almost entirely about the force.com application platform services (sprinkled with some weird Facebook envy), Steve’s is entirely about the application runtime and its infrastructure.
One thing that I am surprised not to see mentioned is the management aspect of the platform, especially considering the investment that SpringSource made in Hyperic. I can only assume that work is under way on this and that we’ll hear about it soon. One aspect of the management story that concerns me a bit is the lack of acknowledgment of the challenges of configuration management in a PaaS setting. Especially when I read Steve Herrod asserting that the VMWare/SpringSource PaaS platform is going to free us from the burden of “handling code modifications that may be required as the middleware versions change”. There seems to be a misconception that because the application administrators are not the ones doing the infrastructure updates they don’t need to worry about the impact of these updates on their application. Is Steve implying that the first release of the VMWare/SpringSource PaaS stack is going to be so perfect that the hypervisor, guest OS and app server will never have to be patched and versioned? If that’s not the case, then why are those patches suddenly less likely impact the application code? In fact the situation is even worse as the application administrator does not know which hypervisor/OS/middleware patches are being applied and when. They can’t test against the new version ahead of time for validation and they can’t make sure the change is scheduled during a non-critical period for their business. I wrote an entire blog post on this issue six months ago and it’s a little bit disheartening to see the issue flatly denied and ignored. Management is not just monitoring.
Here is another intriguing comment in Steve’s entry: “one of the key differentiators with EC2 based PaaS will be the efficiencies for the many-app model. Customers are frustrated with the need to buy a whole VM as the minimum service unit for their applications. Our PaaS will provide fine-grained resource separation”. I had to read it twice when I realized that the VMWare CTO was telling us that splitting a physical machine into VMs is not a good enough way to share its resources and that you really need middleware-level multi-tenancy. But who can disagree that a GAE-like architecture can support more low-traffic applications on the same server than anything based on VM-based sharing? Which (along with deep pockets) puts Google in position to offer free hosting for low-traffic applications, a great way to build adoption.
These are very early days in the history of PaaS. VMWare, like the rest of us, will need to tackle all these issues one by one. In the meantime, this is an interesting announcement and a noticeable milestone. Let’s just keep our eyes open on the incremental nature of progress and the long list of remaining issues.
[UPDATED 2010/4/29: See the follow-up post, PaaS portability challenges and the VMforce example.]
[UPDATED 2010/6/9: This entry points out how the OS level is a gap in VMWare's portfolio. They took a step in addressing this today, by partnering with Novell to offer SUSE support.]
yalcinalpRelated posts:
A friend at work recently pointed me to a Python tutorial called Learn Python the Hard Way. It’s very basic but the later part has a little opinion chapter titled Advice from an old programmer which is worth taking the time to read. Below is one quote from this chapter.
Programming as an intellectual activity is the only art form that allows you to create interactive art. You can create projects that other people can play with and you can talk to them indirectly. No other art form is quite this interactive. Movies go out to the audience. Paintings don’t move. Code goes both ways.
Programming as a profession is only moderately interesting. It can be a good job, but if you want to make about the same money and be happier you could actually just go run a fast food joint. You are much better off using code as your secret weapon in another profession.
"Every great cause begins as a movement, becomes a business, and eventually degenerates into a racket" - attributed to Eric Hoffer.
I'm a startup junkie -- I love everything about how people can form together into small teams and change the world. To me it's the great untold story of the 20th and 21st century.
I also love writing. I have been a writer in some fashion or another for over 20 years, and loving every minute of it.
When I first started being serious about writing, I bought a copy of "Writer's Market", which would tell you where you could sell your writing. I subscribed to magazines like "The Writer" which educated me on all things a professional writer does and is. I attended conferences about being a writer. I sought out advice on how to submit, how to query, what to do or say and what not to do or say.
And a funny thing happened.
First, I became slightly successful. I wrote for local newspapers, regional magazines. Heck, I even did an interview of Clive Barker for High Society magazine. I realized that as much as I loved writing, it was a long haul and being rich probably wasn't in the cards.
Second I realized that I was consuming a vast amount of total crap in all the literature about writing. Take stories about what editors want. Some editor would write 500 words about what he wanted -- short cover letters, strong hook, yadda yadda. But what did he really want? He wanted a story to sell magazines. The story he was writing all kind of boiled down to "Don't pester me kid. I get a hundred like you every day, so write short letters, don't call, use an agent, do any freaking thing except for pestering me. I don't have time to sort through all of this junk I get"
Then there were the people who tried to sell me on making a living writing children's books. Or how-to books. But only if you paid them $99.95 for the full course. The deal here was that gee, there's no way all these folks are successful children's writers -- so where is the real action? The real action is selling courses on how to be a writer, not actually being one.
Lately, however, as much as I love startups, I've been seeing the same thing in the startup culture. As well-meaning as most people are, it's more of a racket than a help.
I read a recent post about "traction" -- the idea that your business is gaining more and more customers as time progresses. It was titled something like "How much traction is enough to talk to a VC? If you have to ask, you don't have enough"
Now this is like the bank saying in order to get credit you should already have plenty of money, or the editor saying that in order to pitch him you should already have an agent. It boils down to "Go do it on your own, kid. Then maybe we'll talk"
Nothing wrong with that advice. In fact I agree with it. But a VC's job (and an editor's) is to go through the slush pile and find gems that are going to help them grow. Only nobody wants to do that. It's too hard. Instead, everybody wants to find folks already succeeding and then pile on. Might make for a great bandwagon experience, but it's not being a VC (or angel)
Another article was about how to find and introduce yourself to an Angel. The gist? Already have a business making some amount of money, then use a personal connection to find an Angel. Once again, great advice -- lord knows if you are already making money and have a personal "in" with an Angel that's going to make the introduction go much better, but haven't we forgotten something?
If I'm making money, I'm not looking for cash to start a business. I may be looking for cash to grow a business, but I'm not looking for cash to start one.
Everybody wants the deal all wrapped up with a bow -- personal recommendation, cash flow, traction. Perhaps the founders have a lot of "moxie" or do a good interview. But the job description of venture investing is all about risk, not social engineering. If everybody goes for low-risk, highly social-engineered deals, what's the point? There's only so much room out there on that end of the spectrum guys, and it's already overcrowded enough as it is.
I spoke with a group a few months ago that was doing "early stage investing, covering the gap between FFF money (Friends, Family, Fools) and traditional angels"
First thing they told me? They wanted a business to already exist, have income and traction. By the way, they were really looking towards more high-end investing, say in the millions of dollars.
I'm seeing more and more websites -- some that require payment -- dedicated to showing you how to run a startup. More and more books about the magic forumla. More and more conferences and get togethers. More and more places where startups pay to be able to show their product.
There's lots of good people out there, even involved in all of these activities. But from the customer's standpoint, from the standpoint of whether it makes sense to invest time and money in all of this, there are a lot of rackets too -- places where you'll spend much more time and money than it's worth. After about the 100th founder's story you've read, at some point you should be doing some serious thinking.
At the end of the day, writing is about writing. You write because it is part of who you are. Startups are about startups. You create value from nothing (or attempt to) because it pleases you.
The goal here is to fail fast and learn, not to get a PhD in startups. PhDs in writing don't make any money, and PhDs in startups probably don't either. While the industry around startups will tell you they have useful information, most of them don't have a clue. It's like the guys writing "how to be a great writer" books. Totally worthless. Worse than worthless, because you waste valuable time consuming them. People get into this author and hero worship mentality and forget what startups are about.
I'm not down on the industry, and I apologize if this was a bit of a hurried rant. Most everybody I know in the how-to startup business means well. It's just that the industry has a lot of hidden flaws. Perhaps it's time to get them out into the open.
Another round of “update your Facebook privacy settings right now” messages recently swept through Twitter and blogs. As also happened a few months ago, when Facebook last modified some privacy settings to better accommodate their business goals. This is borderline silly. So, once and for all, here is the rule:
Don’t put anything on any social network that you don’t want to be made public.
Don’t count on your privacy settings on the site to keep your “private” data out of the public eye. Here are the many ways in which they can fail (using Facebook as a stand-in for all the other social networks, this is not specific to Facebook):
All in all, you should not think of these privacy settings as locks protecting your data. Think of them as simply a “do not disturb” sign (or a necktie…) hanging on the knob of an unlocked door. I am not advising against using privacy settings, just against counting on them to work reliably. If you’d rather your work colleagues don’t see your holiday pictures, then set your privacy settings so they can’t see them. But if it would really bother you if they saw them, then don’t post the pictures on Facebook at all. Think of it like keeping a photo in your wallet. You get to choose who you show it to, until the day you forget your wallet in the office bathroom, or at a party, and someone opens it to find the owner. You already know this instinctively, which is why you probably wouldn’t carry photos in your wallet that shouldn’t be shown publicly. It’s the same on Facebook.
This is what was so disturbing about the Buzz/GMail privacy fiasco. It took data (your list of GMail contacts) that was not created for the purpose of sharing it with anyone, and turned this into profile data in a social network. People who signed up for GMail didn’t sign up for a social network, they signed up for a Web-based email. What Google wants, on the other hand, is a large social network like Facebook, so it tried to make GMail into one by auto-following GMail contacts in your Buzz profile. It’s as if your insurance company suddenly decided it wanted to enter the social networking business and announced one day that you were now “friends” with all their customers who share the same medical condition. And will you please log in and update your privacy settings if you have a problem with that, you backward-looking, privacy-hugging, profit-dissipating idiot.
On the other hand, that’s one thing I like about Twitter. By and large (except for the few people who lock their accounts) almost all the information you put in Twitter is expected to be public. There is no misrepresentation, confusion or surprise. I don’t consider this lack of configurable privacy as a sign that Twitter doesn’t respect the privacy of its users. To the contrary, I almost see this as the most privacy-friendly approach: make it clear that everything is public. Because it is anyway.
One could almost make a counter-intuitive case that providing privacy settings is anti-privacy because it gives an unwarranted sense of security and nudges users towards providing more private data than they otherwise would. At least if the policy settings are not contractual (can you sue Facebook for changing its privacy terms on you?). At least it’s been working that way so far for Facebook, intentionally of not, as illustrated by all the articles that stress the importance of setting our privacy settings right (implicit message: it’s ok to put private information as long as you set privacy settings).
Yes you should have clear privacy settings. But the place to store them is in your brain and the place to enforce them is by controlling what your fingers do before data gets on Facebook. Facebook and similar networks can only leak data that they posses. A lot of that data comes from you directly uploading it. And that’s the point where you have control. After this, you really don’t. Other data comes from tracking and analyzing your activities and connections, without explicit data upload from you. That’s a lot harder for you to control (you rarely even get asked for your privacy preferences on this data), but that’s out of scope for this blog entry.
Just like banks that are too big to fail are too big to exist, data that is too sensitive to leak from Facebook is too sensitive to be on Facebook.
[Note: this post is somewhat off-topic for this blog. But here is a variation that brings it back to one of the usual topics of discussion: can’t the exact same thing be said for Cloud Computing in general? Isn’t data too sensitive to leak from the Cloud also to sensitive to be in the Cloud? Which of the points above, which apply to personal data in social networks, don’t also apply to enterprise data in Cloud platforms? What additional safety
Related posts:
I've noticed several trends in recent years, and I wonder if they won't all come together
The United States is on an unsustainable trajectory of spending. Politicians get elected making promises to spend money for stuff, and as long as they can find money, they're going to continue using it to get votes. No real news here.
Many third-world countries are becoming attractive places to live. Cost-of-living is low, the governments are getting more stable, and the land is not as over-developed as it is in the states.
The tax situation in the U.S. is getting crazy. Already people are beginning to renounce their citizenship because of the legal morass they get into when living overseas. While still at a small number, this is projected to increase.
Given these trends, which i believe to be true, I wonder if large numbers of U.S. citizens aren't going to start leaving the country to live in another country? Just like we saw with poorly-ran cities, I wonder if the country as a whole will suffer a kind of "White Flight", where the better off people move out of the city because the burden it is placing on them does not match the value of the services they are receiving? Meanwhile poorer people move in, further decreasing the tax base.
There is already a number, probably around 10K per month, where a person could take the same money they are paying in taxes and live in Central or South America and do quite nicely. They could pay for their own security, medical, electric, and communication services -- for much less than they are doing now. In addition the local labor rates are extremely low. A startup I was speaking with a few years ago was working with a growing market of ex-pats living in beautiful countries for a bargain. But for most people, the hassle of living far away from friends and family isn't worth it. As the tax burden increases, the difference between the pain of moving and the benefits of moving will become less and less.
The battle of the Cloud Frameworks has started, and it will look a lot like the battle of the Application Servers which played out over the last decade and a half. Cloud Frameworks (which manage IT automation and runtime outsourcing) are to the Programmable Datacenter what Application Servers are to the individual IT server. In the longer term, these battlefronts may merge, but for now we’ve been transported back in time, to the early days of Web programming. The underlying dynamic is the same. It starts with a disruptive IT event (part new technology, part new mindset). 15 years ago the disruptive event was the Web. Today it’s Cloud Computing.
Stage 1
It always starts with very simple use cases. For the Web, in the mid-nineties, the basic use case was “how do I return HTML that is generated by a script as opposed to a static file”. For Cloud Computing today, it is “how do I programmatically create, launch and stop servers as opposed to having to physically install them”.
In that sense, the IaaS APIs of today are the equivalent of the Common Gateway Interface (CGI) circa 1993/1994. Like the EC2 API and its brethren, CGI was not optimized, not polished, but it met the basic use cases and allowed many developers to write their first Web apps (which we just called “CGI scripts” at the time).
Stage 2
But the limitations became soon apparent. In the CGI case, it had to do with performance (the cost of the “one process per request” approach). Plus, the business potential was becoming clearer and attracted a different breed of contenders than just academic and research institutions. So we got NSAPI, ISAPI, FastCGI, Apache Modules, JServ, ZDAC…
We haven’t reached that stage for Cloud yet. That will be when the IaaS APIs start to support events, enumerations, queries, federated identity etc…
Stage 3
Stage 2 looked like the real deal, when we were in it, but little did we know that we were still just nibbling on the hors d’oeuvres. And it was short-lived. People quickly decided that they wanted more than a way to handle HTTP requests. If the Web was going to be central to most programs, then all aspects of programming had to fit well in the context of the Web. We didn’t want Web servers anymore, we wanted application servers (re-purposing a term that had been used for client-server). It needed more features, covering data access, encapsulation, UI frameworks, integration, sessions. It also needed to meet non-functional requirements: availability, scalability (hello clustering), management, identity…
That turned into the battle between the various Java application servers as well as between Java and Microsoft (with .Net coming along), along with other technology stacks. That’s where things got really interesting too, because we explored different ways to attack the problem. People could still program at the HTTP request level. They could use MVC framework, ColdFusion/ASP/JSP/PHP-style markup-driven applications, or portals and other higher-level modular authoring frameworks. They got access to adapters, message buses, process flows and other asynchronous mechanisms. It became clear that there was not just one way to write Web applications. And the discovery is still going on, as illustrated by the later emergence of Ruby on Rails and similar frameworks.
Stage 4
Stage 3 is not over for Web applications, but stage 4 is already there, as illustrated by the fact that some of the gurus of stage 3 have jumped to stage 4. It’s when the Web is everywhere. Clients are everywhere and so are servers for that matter. The distinction blurs. We’re just starting to figure out the applications that will define this stage, and the frameworks that will best support them. The game is far from over.
So what does it mean for Cloud Frameworks?
If, like me, you think that the development of Cloud Frameworks will follow a path similar to that of Application Servers, then the quick retrospective above can be used as a (imperfect) crystal ball. I don’t pretend to be a Middleware historian or that these four stages are the most accurate representation, but I think they are a reasonable perspective. And they hold some lessons for Cloud Frameworks.
It’s early
We are at stage 1. I’ll admit that my decision to separate stages 1 and 2 is debatable and mainly serves to illustrate how early in the process we are with Cloud frameworks. Current IaaS APIs (and the toolkits that support them) are the equivalent of CGI (and the early httpd), something that’s still around (Google App Engine emulates CGI in its Python incarnation) but almost no-one programs to directly anymore. It’s raw, it’s clunky, it’s primitive. But it was a needed starting point that launched the whole field of Web development. Just like IaaS APIs like EC2 have launched the field Cloud Computing.
Cloud Frameworks will need to go through the equivalent of all the other stages. First, the IaaS APIs will get more optimized and capable (stage 2). Then, at stage 3, we will focus on higher-level, more productive abstraction layers (generally referred to as PaaS) at which point we should expect a thousand different approaches to bloom, and several of them to survive. I will not hazard a guess as to what stage 4 will look like (here is my guess for stage 3, in two parts).
No need to rush standards
One benefit of this retrospective is to highlight the tragedy of Cloud standards compared to Web development standards. Wouldn’t we be better off today if the development leads of AWS and a couple of other Cloud providers had been openly cooperating in a Cloud equivalent of the www-talk mailing list of yore? Out of it came a rough agreement on HTML and CGI that allowed developers to write basic Web applications in a reasonably portable way. If the same informal collaboration had taken place for IaaS APIs, we’d have a simple de-facto consensus that would support the low-hanging fruits of basic IaaS. It would allow Cloud developers to support the simplest use cases, and relieve the self-defeating pressure to standardize too early. Standards played a huge role in the development of Application Servers (especially of the Java kind), but that really took place as part of stage 3. In the absence of an equivalent to CGI in the Cloud world, we are at risk of rushing the standardization without the benefit of the experimentation and lessons that come in stage 3.
I am not trying to sugar-coat the history of Web standards. The HTML saga is nothing to be inspired by. But there was an original effort to build consensus that wasn’t even attempted with Cloud APIs. I like the staged process of a rough consensus that covers the basic use cases, followed by experimentation and proprietary specifications and later a more formal standardization effort. If we skip the rough consensus stage, as we did with Cloud, we end up rushing to do final step (to the tune of “customers demand Cloud standards”) even though all we need for now is an interoperable way to meet the basic use cases.
Winners and losers
Whoever you think of as the current leaders of the Application Server battle (hint: I work for one), they were not the obvious leaders of stages 1 and 2. So don’t be in too much of a hurry to crown the Cloud Framework kings. Those you think of today may turn out to be the Netscapes of that battle.
New roles
It’s not just new technology. The development of Cloud Frameworks will shape the roles of the people involved. We used to have designers who thought their job was done when they produced a picture or at best a FrameMaker or QuarkXPress document, which is what they were used to. We had “webmasters” who thought they were set for life with their new Apache skills, then quickly had to evolve or make way, a lesson for IaaS gurus of today. Under terms like “DevOps” new roles are created and existing roles are transformed. Nobody yet knows what will stick. But if I was an EC2 guru today I’d make sure to not get stuck providing just that. Don’t wait for other domains of Cloud expertise to be in higher demand than your current IaaS area, as by then you’ll be too late.
It’s the stack
There aren’t many companies out there making a living selling a stand-alone Web server. Even Zeus, who has a nice one, seems to be downplaying it on its site compared to its application delivery products. The combined pressure of commoditization (hello Apache) and of the demand for a full stack has made it pretty hard to sell just a Web server.
Similarly, it’s going to be hard to stay in business selling just portions of a Cloud Framework. For example, just provisioning, just monitoring, just IaaS-level features, etc. That’s well-understood and it’s fueling a lot of the acquisitions (e.g. VMWare’s purchase of SpringSource which in turn recently purchased RabbitMQ) and partnerships (e.g. recently between Eucalyptus and GroundWork though rarely do such “partnerships” rise to the level of integration of a real framework).
It’s not even clear what the right scope for a Cloud Framework is. What makes a full stack and what is beyond it? Is it just software to manage a private Cloud environment and/or deployments into public Clouds? Does the framework also include the actual public Cloud service? Does it include hardware in some sort of “private Cloud in a box”, of the kind that this recent Dell/Ubuntu announcement seems to be inching towards?
Integration
If indeed we can go by the history of Application Server to predict the future of Cloud Frameworks, then we’ll have a few stacks (with different levels of completeness, standardized or proprietary). This is what happened for Web development (the JEE stack, the .Net stack, a more loosely-defined alternative stack which is mostly open-source, niche stacks like the backend offered by Adobe for Flash apps, etc) and at some point the effort moved from focusing on standardizing the different application environment technology alternatives (e.g. J2EE) towards standardizing how the different platforms can interoperate (e.g. WS-*). I expect the same thing for Cloud Frameworks, especially as they grow out of stages 1 and 2 and embrace what we call today PaaS. At which point the two battlefields (Application Servers and Cloud Frameworks) will merge. And when this happens, I just can’t picture how one stack/framework will suffice for all. So we’ll have to define meaningful integration between them and make them work.
If you’re a spectator, grab plenty of popcorn. If you’re a soldier in this battle, get ready for a long campaign.
Related posts:
Oracle has a busy week in store for people who are interested in application management. Today, the company announced:
Later this week, Oracle will announce Oracle Enterprise Manager 11g. I am not going to steal the thunder a couple of days before the announcement, but I can safely say that a large chunk of the new features relate to application management.
[UPDATED 2010/4/21: Adam and Blake's blogs on the Virtual Assembly Builder and WebLogic Suite Virtualization Option announcements. And Chung on the upcoming EM release.]
Related posts:
This post focuses on a customer’s backend, comprised of a business application stack supported by a dozen Oracle databases. They wish to equip this infrastructure with HA features and ensure that outages do not cost business. How do we address the challenge of pricing the complete solution, with hardware, software, services and annual support?
The options
Active Data Guard can be used if the locations are far apart, while Oracle RAC promises transparent application failover if they are in close proximity. For Enterprise-class users with database heterogeneity, then GoldenGate software, the 2009 addition to Oracle’s portfolio, is an attractive solution.
And for those with no stringent real-time I/O requirements, backup might be enough, so it’s worth considering Oracle Secure Backup or the external cloud variants that allow us to save on CapEx. With this option, there’s no need for extra hardware if the data is on the cloud. Home-made solutions based on Streams are also not unheard of.
Others will prefer hardware replication with intelligent disk arrays from EMC, Fujitsu, Sun (Oracle) and any other vendor in conjunction with clustering software such as Red Hat Cluster Suite. Those with cost as the number one priority might consider open-source disk array software replication methods such as DRBD.
Two architectures, Three competing solutionsUsing
our Momentum(tm) methodology (technical and economic analysis) we narrow the field down to two
alternative HA offerings. These two solutions are based on introducing a HA management layer through either database clustering or disk array replication.
1) Database clustering DB v1 Oracle RAC allows databases to be run on the server farm for
failover and efficiency purposes. When one server instance fails, the
other transparently takes over. For storage redundancy, ASM is used to manage data replication between the storage units. HA is achieved through RAC managing redundancy at all levels. (Note: This
design assumes geographical proximity of the redundant nodes due to synchronisation issues).
2) Disk array replication Disk array OracleDB is still used, but in this scenario the database is unaware that the underlying architecture provides for business continuity. Instead, intelligent disk arrays transparently perform data replication to the remote location. High Availability is invisible to the upper layers of the software stack (Note: also here, there is a limit on physical distance between sites connected, due to latency and bandwidth characteristics)
3) And the third solution? DB v2 Based on exactly the same architecture defined for DB v1 and knowing that some associated licensing restrictions would not affect the customer’s operations, we can recalculate the costs using a different licensing model (in this case restrictions were limiting the number of system users).
In short, the finance director will see three solutions to choose from, while the IT architect will only see two.
More on licensesOracle currently has a sophisticated licensing scheme and working out the optimum involves exercising the patience of our Oracle sales team. Beyond the alternative licensing models, the usual headache is to calculate the license migration from legacy architecture paradigms. Most vendors defend their business interest so that if you haven’t purchased support in the past, they will make you purchase it backwards, otherwise migration won’t be possible. Such aggressive loyalty schemes can annoy and put customers off who have little choice and so negotiations follow. This is where consultants are used to find an agreeable compromise between both parties.
Pricing
To forecast total project direct capital
expenditure, we break it down into the four major CapEx: (1) software licenses (2)
hardware (3) services (4) year 1 support package which is normally
paid up front.
The original “DB v1” option was priced at $611K. After the license
tuning exercise, the total for “DB v2 option came in at $518K - a saving of 93K.
For this type of
project, the major cost considerations are hardware and
software, while services and support are marginal. For DB v1, cost breakdown is: 36% hardware, 40% software, 13% services, 11% support.
So, if the hardware only solution removes additional investment in software, can we see significant savings? No. Surprisingly Disk array comes in at
$561K. Enterprise-grade storage
arrays with replication features are not cheap.
The cost of achieving business continuity using software is slightly less,
although still comparable, to the hardware-only solution. So hardware or software?
Frustrated strategist: Hardware is not the only answer
This is just another example of how wrong it is to “kill the problem with hardware”. How often do we see people instinctively decide to purchase extra hardware to overcome scalability challenges? To me, this knee-jerk reaction is based on short-termism thinking and is extremely frustrating. Just look. Here, the distributed middleware provides you with the same results, but slightly cheaper. This cost saving will grow dramatically the more you scale out. Why?
Simple - software vendors have greater freedom for volume discounts than the hardware vendors. Once you’ve purchased one license, the vendor’s cost of granting another for free is zero. It’s worth remembering that the larger your installation, the greater the cost gap between hardware-centered and software-centered solutions becomes. For scalability there is no choice, software-centered solutions win every time.
Conservative Tactician: Step back and figure out the context
At the moment this is a small project and we’re not scaling out just yet. It’s surprising how similar the costs of both the hardware and software approaches are. A 7% cost difference isn’t considerable, especially as before the license restrictions work around, the hardware variant was actually cheaper! The price difference itself is not significant enough to help us decide which approach is best. The factors affecting our decision will not be financial, but contextual:
Of course these are just the fundamentals and there are many more factors to consider. Any HA project that’s undertaken must take into account the indirect, hidden, and long-term cost implications.
Summary
A recent build of Chromium removes “http://” from the Omnibar in the browser, and replaces it with a globe icon. As a result, typing “http://www.google.com” will result in “www.google.com/” being displayed, rather than the full URI. There’s been a lot of heat and discussion about this, and near and far as I can tell, people just plain don’t like it. At least the vocal minority doesn’t. From what I’ve pieced together, here are the reasons the developers have removed “http://” from the display:
Fact of the matter is, the Chromium developers aren’t going to revert the change. I’ve read all the comments I can find on this matter, and here’s an overall summary:
It’s UGLY!
After seeing “http://” in every browser on the market since browsers have been used, as soon as it’s removed, it seems there’s a big gaping hole in the address bar. For some reason, it keeps their eyes floating back to the address bar, wondering what had happened and why it was changed, when it wasn’t hurting anything to begin with. In other words, displaying “http://” is sexy, and removing it is not. Either that, or they feel that there’s a big void in their life with it missing.
It breaks other applications with copy and paste
By removing “http://” from the Omnibar, when copying a URL to the clipboard, and pasting it into other applications, these applications may or may not be able to recognize the URI, and as a result, not make it “clickable”. However, there have been no use cases submitted of such breakage. No one has come forth saying “Application X won’t linkify a URL pasted without http:// in front”. Plenty of speculation about it, however. Plenty. But, what appears to be the problem, isn’t Chromium, but either your operating system, or the application you’re pasting your URL to. You see, Chromium will present a web object to the operating systems clipboard. If the operating system is worth its weight in gold, it will preserve the web object, and present the object to the pasting application.
So, at this point, it’s up to the application how it wants to handle it. Every email and IM client that I can test, including office document creators, treat the web object as it should, and linkifies the paste, even though “http://” isn’t part of the paste. If an application exists that doesn’t linkify the paste, it should be brought to that developer’s attention. After all, it’s the problem of their application, not Chromium. Think about it. Do you type “http://www.google.com” when chatting with your buddy, or just “google.com”. So, not only should the client recognize clipboard web objects, but it should also recognize partial URI schemes.
It doesn’t adhere to specification
This is semi-valid. At least people are concerned about Chromium adhering to spec. The specification is the URI scheme includes a scheme name, such as “http”, “ftp”, “smb”, etc, as well as an authority, path, query and fragment. So, by not displaying the scheme name in the Omnibar, Chromium is not adhering to specification. The problem with this argument, however, is that the specification is really only dealing with applications referencing a URI, through another program, source code, etc. What is displayed visually to the user shouldn’t matter if it’s “breaking spec” or not. I tell you right now, your mom isn’t going to care if her URI is valid specification.
Observations
Frankly put, I’ve been all over the mailing list and on the bug report trying to explain to people soundly and logically why the move was made, and why the Chromium developers aren’t going to revert the change. As I outlined above, no one, other that developers and Internet geeks, are going to notice, if they haven’t caught wind already. If the change is indeed breaking applications, then the developers need to know what is breaking and how. What they don’t want is a bunch of whining, moaning and threats that you’re going back to Firefox. That doesn’t help. If copying and pasting is broken in other applications, let them know what application is broken, and how it broke. You know, bug reports. Actual, solid, bug reports.
Currently, there is a regression. When removing “http://” from the Omnibox, copying the URL didn’t include “http://” in the clipboard web object. So, a paste wouldn’t show it either. So, they added “http://” to the clipboard on copy. However, something else broke this behavior, and as it sits, a copy and paste will not give “http://” in the pasted result. However, this has been marked as release critical, so the next stable push likely won’t go out until this is fixed.
Conclusion
Personally, I welcome the change. Knowing the default protocol of your software may or may not be important, but I don’t think the software really needs to communicate that to you. Think of your email client. It communicates over SMTP, IMAP and POP3, sometimes simultaneously. Yet, you don’t think twice about it, and it certainly doesn’t tell you “Okay, now I’m using the SMTP protocol to send your message.”. IRC clients don’t tell you they’re using “irc://”. Chat clients don’t tell you their protocol, whatever it may be. FTP clients, SSH clients, Samba clients. On, and on, and on. The browser is the only exception to this rule. Why? Why does the browser need to tell you that it’s using HTTP when it’s already generally understood? Isn’t the important thing interacting with the sites you want to visit? Not the protocol? Frankly, I say good riddance!
Now, if only we can get system administrators to register “domain.tld” as well as “www.domail.tld”. I would like to go to vim.org without forcing me to type the www.
Haven't been blogging much lately, due to two things. Twitter and Facebook seem to be sucking up anything creative I have to say each day, and I've had a hell of a time this past month or two.
You wouldn't think that writing in simple sentence format would relieve you of the desire to write in a longer format, but it does. I don't think this is a good thing at all, as there is something very good about organizing your thoughts in small essays. Not only does it teach you essay structuring, it also helps you reach some kind of conclusion. And if it continues this way, what are we going to do? End up sending smiley faces back and forth instead of having healthy conversations?
While that's slightly interesting, it's part of the larger story of technology dumbing us down and taking away all of our time. From a personal standpoint, the last month has been exciting -- and I mean exciting in a bad way.
My mother died a couple of weeks ago. She had been sick for a while, but we thought we had a few more months with her. Since she had spent most of her time in Florida, this involved flying back and forth, multiple services, and all sorts of stress.
I'm trying to write up an eulogy for her, but taking somebody you knew for 44 years and putting them into blog article is nearly impossible. I'm going to do it, though, no matter how poor it ends up.
Death is part of life. As my mother kept telling me that her dad would always say, "Nobody lives forever"
The second thing was that I found out that I had a major health problem.
You know how when you're watching videos you can turn the volume up or down? Over the last several years, somehow my volume was turning down. I thought it was just getting older -- perhaps even an indication of early heart disease or something. I didn't think there was much that could be done about it.
I found out what was wrong by chasing another problem, my snoring.
For at least 15 years Melissa has told me I am a bad snorer. In addition, she told me that I would stop breathing at night -- gasping and struggling to breathe. Since I was unconscious at the time, I didn't know one way or another how much I snored or struggled to breathe. Seemed just like I was everybody else.
About a year or two ago, I realized that I couldn't breathe when I was sleeping -- as I fell asleep, when my airway relaxed, it would effectively strangle me. I would wake back up enough to flex my airway muscles and breathe. But eventually I would drift off to sleep anyway. When I realized what was going on, I figured it was time to see a doctor about it.
I finally got to see the doctor last month. He sent me for a sleep study, and the results were not so good. This is called sleep apnea. It's perfectly normal. Obstructive Sleep Apnea happens when you physically cannot breathe -- because of the way your head is constructed when you are unconscious your airway completely closes up.
If you have apnea that happens more than 5 times an hour, it's considered mild. Anything over 30 times an hour is considered severe.
On average, during the sleep study, I stopped breathing about 116 times per hour, which is four times the severe rating, or about twice a minute. At this rate, I was not sleeping at all, just passing in and out of light states of unconciousness as I woke up enough to breathe and then passed out again. I could "sleep" for 12 hours like this and wake up just as sleepy as when I went to bed -- or feeling even worse. My blood oxygen levels dropped down to below 70%, which is also really bad.
So I am now the owner of a Continuous Positive Airway system, or CPAP. If I'm unconscious, I need to be on the machine. The doc said i had a risk of "coding" because of the severity of my condition. I take it "coding" is not a good thing.
But with the box it's all fine now. I am going to look into surgery,. Being overweight doesn't help with this, but I have it to a degree that is completely out of proportion to my weight. I really don't want the surgery, but I think it's probably the best thing to do. I'm also going to buy a pulse-oximeter with recording functions and start tracking my blood oxygenation levels overnight. The tricky thing about this problem is that since you are sleeping, you don't really know you have it.
i sold my Jeep a couple of weeks ago. Really loved that Jeep, but it was time. I was never driving it, and it was time to move on.
Finally I picked up a new larger client, Alcatel-Lucent, in Raleigh, North Carolina.
Other than that it's been mostly uneventful.
The singer Avril Lavigne’s third hit was a ballad titled “I’m With You”. Let me pose what might seem a peculiar question: should the second word in her song title – “With” – be capitalized or uncapitalized? This seems a matter of small moment, but to some people it matters a great deal. In 2005 an edit war broke out on Wikipedia over whether “With” should be capitalized or not. The discussion drew in a dozen people, took more than a year to play out, and involved 4,000 words of discussion. During that time the page oscillated madly back and forth between capitalizing and not capitalizing “With”.
This type of conflict is not uncommon on Wikipedia. Other matters discussed at great length in similar edit wars include the true diameter of the Death Star in Return of the Jedi – is it 120, 160 or 900 kilometers in diameter? When one says that U2 “are a band” should that really be “U2 is a band”? Should the page for “Iron Maiden” point by default to the band or to the instrument of torture? Is Pluto really a planet? And so on.
Don’t get me wrong. Wikipedia works remarkably well, but the cost in resolving these minor issues can be very high. Let me describe for you an open source collaboration where problems like this don’t occur. It’s a programming competition run by a company called Mathworks. Twice a year every year since 1999 Mathworks has run a week-long competition involving more than one hundred programmers from all over the world. At the start of the week a programming problem is posed. A typical problem might be something like the travelling salesman problem – given a list of cities, find the shortest tour that lets you visit all of those cities. The competitors don’t just submit programs at the end of the week, they can (and do) submit programs all through the week. The reason they do this is because when they submit their program it’s immediately and automatically scored. This is done by running the program on some secret test inputs that are known only to the competition organizers. So, for example, the organizers might run the program on all the capital cities of the countries in Europe. The score reflects both how quickly the program runs, and how short a tour of the cities it finds. The score is then posted to a leaderboard. Entries come in over the whole week because kudos and occasional prizes go to people at the top of the leaderboard.
What makes this a collaboration is that programs submitted to the competition are open. Once you submit your program anyone else can come along and simply download the code you’ve just submitted, tweak a single line, and resumbit it as their own. The result is a spectacular free-for-all. Contestants are constantly “stealing” one another’s code, making small tweaks that let them leapfrog to the top of the leaderboard. Some of the contestants get hooked by the instant feedback, and work all week long. The result is that the winning entry is often fantastically good. After the first contest, in 1999, the contest co-ordinator, Ned Gulley, said: “no single person on the planet could have written such an optimized algorithm. Yet it appeared at the end of the contest, sculpted out of thin air by people from around the world, most of whom had never met before.”
Both Wikipedia and the Mathworks competition use open source patterns of development, but the difference is striking. In the Mathworks competition there is an absolute, objective measure of success that’s immediately available – the score. The score acts as a signal telling every competitor where the best ideas are. This helps the community aggregate all the best ideas into a fantastic final product.
In Wikipedia, no such objective signal of quality is available. What allows Wikipedia to function is that on most issues of contention – like whether “With” should be capitalized – there’s only a small community of interest. A treaty can be beaten out by members of that community that allows them to reach consensus and move forward. Constructing such treaties takes tremendous time and energy, and sometimes devolves into neverending flame wars, but most of the time it works okay. But while this kind of treaty-making might scale to tens or even hundreds of people, we don’t yet know how to make it scale to thousands. Agreement doesn’t scale.
Many of the crucial problems of governance have large communities of interest, and it can be very difficult to get even two people to agree on tiny points of fact, much less values. As a result, we can’t simply open source policy documents in a location where they can be edited by millions of people. But, purely as a thought experiment, imagine you had a way of automatically scoring policy proposals for their social utility. You really could set up a Policyworks where millions of people could help rewrite policy, integrating the best ideas from an extraordinarily cognitively diverse group of people.
The question I have is how we can develop tools that let us scale such a process to thousands or even millions of people? How can we get the full benefit of cognitive diversity in problem-solving, without reaching deadlock? Are there clever new ways we can devise for signalling quality in the face of incomplete or uncertain information? We know some things about how to do this in small groups: it’s the art of good facilitation and good counselling. Is it possible to develop scalable mechanisms of agreement so we can open source key problems of governance?
Let me conclude by floating a brief, speculative idea for a Policyworks. In the one minute I have left there’s not time to even begin discussing the problems with the idea, let alone potential solutions. But hopefully it contains the kernel of something interesting. The idea is to allow open editing of policy documents, in much the same way the Mathworks competition allows open editing of computer programs. But each time you make an edit, it’s sent to a randomly selected jury of your peers – say 50 of them. They’re invited to score your contribution, and perhaps offer feedback. They don’t all need to score it – just a few (say 3) is enough to start getting useful information about whether your contribution is an improvement or not. And, perhaps with some tweaking to prevent abuse, and to help ensure fair scoring, such a score might be used as a reliable way of signalling quality in the face of incomplete or uncertain information. My suspicion is that – as others have said of Wikipedia – this may be one of those ideas that works better in practice than it does in theory.
You can subscribe to my blog here.
This post is based on some brief remarks I made about open architecture democracy at the beginning of a panel on the subject, moderated by Tad Homer-Dixon, and with co-panelists Hassan Masum and Mark Tovey. One day, I hope to expand this into a much more thorough treatment.

Devops? What’s devops? See these articles:
Related posts:
The other day I found Gephi which was used to create these amazing graphs based on GitHub data. So I thought it might be fun to pull some data into Gephi and play with it. I decided on using the Twitter API to obtain all of the Tweets related to the upcoming Canada 3.0 conference in Stratford, ON, CA. I used the ‘can30′ hash tag as the search term but since the Twitter search only returns Tweets less than seven days old the history is limited.
I used Python and igraph to create the graph and exported it to GraphML which Gephi can import. Here’s the resulting GraphML file if you are interested.
I also used igraph to export PNG and SVG versions.
The nodes in the graph are Twitter users. The size of the node is relative to the number of new Tweets with the #can30 hashtag. By ‘new’ tweets I mean not re-Tweets. The edges represent re-Tweets and the width of the edges are relative to how many times the source user re-Tweeted the destination.
Based on the graph, Canada3Forum is the largest source of new Tweets followed by tobidh and there are lots of users re-Tweeting Canada3Forum’s messages.

Canada 3.0 on Twitter
Yesterday, while at school, studying for a quiz, I saw that there was an open mic poetry reading. While passing the sign, I recalled a poem that I wrote about my wife’s hair while bored in church. So, I told my wife about it, asked if she and my daughter wanted to come, and we were on our way with my whimsical poem.
At first, I thought it was just a local university thing, with a few of the local college kids. However, I learned that this is only one night of a few that involved some major published poets, and had been held elsewhere across the city. This poetry event has been running for something like 20 years, and I was told that this is one of the biggest poetry reading events in the United States! Last night, was just a small part of the much larger event.
Anyway, I got up to the mic, and read my poem. I’ve never done this before, so I was actually quite nervous. To me, everyone in front of me was poetry and prose professionals, English majors, writers and the like. I’m sure my poem was child’s play to the profound poetry they had. But, I wanted to share my little poem, even if I was an amateur.
Just a little background on the poem: My wife and I were preparing for church one Sunday morning. When I got out of the shower, while drying myself off, one of my wife’s hair got caught around my leg, and a bit later, my arm. Further, she was worried about losing her hair, and at every brush stroke, felt she was becoming bald by the day. Well, while sitting in church, listening to the sermon, I was quite bored, so I pulled out my notebook, and started penning a poem about her hair.
I had been reading Dr. Seuss a bit before that day, so his quirky meter and rhyming style was on my mind. As a result, the poem doesn’t really have a specific meter or rhythm. It’s pretty carefree. It was meant entirely to be light and playful, and a bit overboard. My wife enjoys it, and it gathered quite the roar of laughter during and after I had read it last night. I initially wrote it in 2005.
Anyway, here it is, in full.
My Wife’s Hair
by Aaron Toponce
Licensed under the Creative Commons Attribution-Share Alike 3.0 United States License.
Some rights reserved.I just got married and inherited a wife.
Oh my, what a life!
It’s just not right
that I have to fight.
No not with her, but what’s on her head
and that she happens to shed.
It isn’t fair that she loses her hair.
The problem? It’s everywhere!It’s on the pillow and on the sheets.
The stuffed armadillo, even my pant pleats.
I get out of the shower and grab a towel.
I dry myself off- wait. What’s that? (scowl)
It’s more hair! Where’s the Nair?
My arms, legs, hands and feet
are all caught ensnare.
And there I sit in despair on the chair bare.
I swear all I wear is her long hair.
I need to get dressed, but it’s such a mess
to grab my pants, my shirt and underdress
and find her long folicle.
It’s just diabolical.Now I’m ready to go out for the day
and play.
I go to the kitchen for a glass of milk.
What am I met with? But the silk
of that thin dark hair on a freshly sliced pear.
Maybe I’ll have some cereal,
but there it is just as real
in my Froot Loops! Oops!I better be careful wherever I go.
For every minute passed allows her hair to grow.
On the couch? Of course.
Guess the source.
The car? It’s on the seat.
Even the shoes for my feet.
The TV? Look at the screen. Is it clean?
What about the sink?
Or the local skating rink?
The computer desk or the curtains pink?
Yes, Yes, Yes! I must confess.
The tub, the floor
the poor dog and the door knob.
It’s a mob of hair.At work, I shirk at the very thought
that my whole day was wrought
with fighting my wife’s hair.
“There. Right there,”
my coworker announced.
“It’s on your shirt.” And there he pounced
towards me to get the present that my wife renounced.
“That’s awfully long for a fellow like you.
Have you some confessing to do?”
He asked with a sarcastic grin.
“The joys of marriage,” I responded.
“With your wife’s hair, you’ll never win.”Back at home, the count had increased
to millions. Maybe even billions! Please, oh please!
It’s an army out to get you, so fight!
Yeah, right.
It won’t to any good.
Just get a jacket and pull up the hood.
“Protect yourself!” my dad used to say.
“Protect yourself in every way!”
Never had hair crossed my mind
that would come across as the aggressive kind.So here I stay in a marriage exposed
to a contract that was never proposed.
Every night, when I kneel at my bed,
I pray about my wife’s evil head:“Please Lord have mercy on my soul.
Hair isn’t meant for my soup bowl.
It doesn’t belong in closet
or the bathroom faucet.
And I think that I should sleep
without a peep deep.
Is this your idea of Armageddon
to begin war with her hair?
After my weddin’?
Look at my house Lord.
Look at the place.
I can hardly kneel at my bed
without getting hair in my face.
Give me this day a long needed break
from the hair that her evil head will make.
Please, for goodness sake.
But, thy will be done, Lord. I must confess
Even if I must endure this hairy mess.
If I must endure, then one blessing that is high
on my ‘To-Do List’, (sigh)
is to give me the strength that I must bear
to shave my wife’s head of all of her hair.”
In a recent blog post, Don Ferguson (CTO at CA) describes CA Catalyst, a major architectural overhaul which “applies enterprise application integration patterns to the problem of integrating IT management systems”. Reading this was fascinating to me. Not because the content was some kind of revelation, but exactly for the opposite reason. Because it is so familiar.
For the better part of the last decade, I tried to build just this at HP. In the process, I worked with (and sometimes against) Don’s colleague at IBM, who were on the same mission. Both companies wanted a flexible and reliable integration platform for all aspects of IT management. We had decided to use Web services and SOA to achieve it. The Web services management protocols that I worked on (WSMF, WSDM, WS-Management and the “reconciliation stack”) were meant for this. We were after management integration more than manageability. Then came CMDBf, another piece of the puzzle. From what I could tell, the focus on SOA and Web services had made Don (who was then Mr. WebSphere) the spiritual father of this effort at IBM, even though he wasn’t at the time focused on IT management.
As far as I know, neither IBM nor HP got there. I covered some of the reasons in this post-mortem. The standards bickering. The focus on protocols rather than models. The confusion between the CMDB as a tool for process/service management versus a tool for software integration. Within HP, the turmoil from the many software acquisitions didn’t help, and there were other reasons. I am not sure at this point whether either company is still aiming for this vision or if they are taking a different approach.
But apparently CA is still on this path, and got somewhere. At least according to Don’s post. I have no insight into what was built beyond what’s in the post. I am not endorsing CA Catalyst, just agreeing with the design goals listed by Don. If indeed they have built it, and the integration framework resists the test of time, that’s impressive. And exciting. It apparently even uses some the same pieces we were planning to use, namely WS-Management and CMDBf (I am reluctantly associated with the first and proudly with the second).
While most readers might not share my historical connection with this work, this is still relevant and important to anyone who cares about IT management in the enterprise. If you’re planning to be at CA World, go listen to Don. Web services may have a bad name, but the technical problems of IT management integration remain. There are only a few routes to IT management automation (I count seven, the one taken by CA is #2). You can throw away SOAP if you want, you still need to deal with protocol compatibility, model alignment and instance reconciliation. You need to centralize or orchestrate the management operations performed. You need to be able to integrate with complementary products or at the very least to effectively incorporate your acquisitions. It’s hard stuff.
Bonus point to Don for not forcing a “Cloud” angle for extra sparkle. This is core IT management.
Related posts:
I was just going through my Google Reader feeds, and stumbled upon a new concept for the Coca-Cola company in redesigning their soda bottles. The idea is rather ingenious. The bottles are reshaped to save on packing space, thus reducing the carbon footprint needed to ship the same amount of containers. They also feature a collapsible design, encouraging recycling, or at least minimizing land fill should they be thrown away. Overall, it’s a total win, and if I was a soda drinker, I would become a Coca-Cola fan. If they implemented the concept, that is.
However, the designer of the concept missed the boat on a crucial icon that represents recycling on an international scale. Take a look at this picture:

See the recycling symbol in the lower right-hand corner? Yeah. It’s wrong. I’ll explain.
Gary Anderson, in 1970, designed a symbol for a contest held by Container Corporation of America, to raise awareness for recycling consumable products for Earth Day. His design won, and has since been an international symbol representing recycling. However, here’s something that many people don’t know: the symbol was deliberately designed to be a Möbius band.
I’ll chop out the symbol that the designer created and we can compare it to the one Gary Anderson created, so you can see what I’m talking about. The Coca-Cola symbol is on the left, with Gary Anderson’s creation on the right:

Notice, that with the symbol the designer created, it’s just the same arrow three times, only rotated. However, this means that the strip is not a Möbius band that Gary Anderson initially intended. As you can see, comparing the two symbols side by side, the upper arrows and lower right arrows are the same. The difference lies in the lower left arrow. The “half-twist”, as it would be called, in Gary Anderson’s creation creates the Möbius band.
If a Möbius band is new to you, take a strip of paper where its length is substantially longer than it’s width, maybe 10-times as long. If you were to bring the two ends together, without putting any twists in the paper, you would create a loop with two sides. Now, instead, put a half-twist in one end, and bring the ends together again. You have now just created a one-sided surface, called a Möbius strip. If you were to color with a red crayon on one “side” of the strip, and color with a blue crayon on the other, and follow the strip, you’ll find that the red crayon will meet the blue line, and the blue crayon will meet the red line. This surface only has one side and one edge.
If you’re having trouble visualizing this, consider the following video to help you see the one-sided nature of the strip (flash ahead):
Gary Anderson chose the Möbius band for his symbol, due to the nature of recycling. Take a “side” of the strip. Call that side “creation” of the consumable product. Take the other side to be the “recycling” of the product. Due to the nature of the Möbius strip, as you move along the strip (call that “time”) starting with the creation, you will eventually reach the opposite side, when you labeled recycling. In other words, a Möbius strip was chosen, as with recycling, everything goes back into itself.
Now, consider the logo the designer made. That band is ambiguous on whether or not has two distinct sides. If it indeed has one side, then it has 1.5 twists in the loop, which does not have the same topological properties as the Möbius band. If it has two sides, by adding an odd third dimension, then the “creation” of their product never gets recycled, according to their symbol. It just stays as it is. It will never reach the “recycling” side of the strip. As a result, the product won’t get recycled and reused.
The designer isn’t the only person to produce this failure. After all, it’s subtle enough that I doubt many people are aware of it. However, it drives me nuts. Being a topologist (a mathematician studying topology (topology is NOT topography)), I notice these things. Take a look at this Google Image Search results, to see how many other people the world-round make the same mistake.
There’s a rule in design that every designer should be familiar with. The rule is that the designer should deeply study what they are about to create before they create. For example, if you were creating a logo for a company, and wanted that logo to represent a rubber stamp, you should better spend a great deal of time studying stamps in person, learning everything about them, before creating your logo. If your logo involves a tire, take a lot of time to study tires. Et cetera. The reason being, when your logo goes public, if you haven’t deeply scrutinized it, to make the logo accurately convey what it’s trying to convey, the public will scrutinize it, and guess who will be wishing they spent a little more time in the research area?
Now, this designer may, or may not have taken design classes, or not have any professional experience in design. I know not. However, the images produced are quite professional looking, so I’m guessing there is some experience to be expected. Regardless, if the concept is run with Coca-Cola, I would hope that the marketing or advertising department picks up on the symbol error, and corrects it before release.
</rant>
The competition between browsers in the area of Javascript performance has led to some pretty dramatic performance increases in the last couple of years. A lot of this has been accomplished through Javascript just in time (JIT) compilers. What JITs do is convert the Javascript into native instructions which execute a lot faster than more abstract forms. The one downside to this approach is that each native architecture must be supported to get the speed boost.
If you follow Javascript performance you know that recent versions of Firefox have a JIT. What you may not know is that there is no JIT in Firefox for x86_64. This isn’t that big of a problem for Windows since there are so few 64-bit windows users but Linux distributions have been native 64-bit for quite some time. So if you’ve installed a 64-bit version of your faviourite Linux distribution you are getting far slower Javascript performance in Firefox than if you had installed the i686 version. How much slower?
The following benchmarks were executed on an i7-930 running Fedora 12, Firefox 3.5.8 and Epiphany 2.28.2. The benchmarks I used are the SunSpider and V8 Javascript benchmarks.
| Browser/arch | V8 (higher is better) | SunSpider (lower is better) |
| Firefox i686 PAE | 402 | 1002.6ms |
| Firefox x86_64 | 277 | 2131.2ms |
| Epiphany x86_64 | 887 | 1261.0ms |
These results show that the Javascript performance of i686 Firefox is a lot better than x86_64. The Epiphany web browser is based on Webkit which, based on these results, I’m guessing does have a x86_64 JIT.
The motivation for this post, actually, is that I had heard of the BSD-licensed tmux. I’ve heard it’s far more configurable than GNU screen and lighter on resources. So, I thought I’d install it on my Debian machine, and give it a quick test drive. The first thing I wanted to test, was not attaching and detaching sessions, but using tmux to connect to serial ports as a null modem. I use this feature with GNU screen all the time, as I’m constantly in the back of Cisco switches, HPUX ports, and other serial connections in our datacenter at work. However, I found out very quickly that tmux doesn’t support this feature. In fact, the developers call it “bloat” (emphasis mine):
There are still a few features screen includes that tmux omits:
- builtin serial and telnet support; this is bloat and is unlikely to be added to tmux;
- wider platform support, for example IRIX and HP-UX, and for odd terminals.
That’s unfortunate. I’ve found that when developers call a requested feature “bloat”, it’s usually because they don’t use it themselves. That may be the case here. I don’t know. However, I do know that GNU screen supports both serial and telnet connections, and it’s a valued feature for our team.
So, here’s how you can use GNU screen to act as a terminal emulator to a serial null modem connection. Just start a screen session on the correct serial device:
$ screen /dev/ttyS0
If the connection is too slow, and your serial port can handle faster baud rates, then you can set that instead:
$ screen /dev/ttyS0 115200
As is common with null modem connections, if you need to send a break, just send C-a B.
That’s it. Rather straight forward. I know that using minicom or HyperTerminal can sometimes be a pain, so using a more modern terminal, complete with telnet, multiuser, locking and splitting support can make all the difference in the world. So, why tmux won’t support this is beyond me, but it sure makes life behind the serial connection just a bit more enjoyable, and a valuable system administration tool.
At Saturday on Libre Planet, Richard Stallman announced the publication of an essay on software as a service (SaaS). By my count, it is his first published piece on the subject since Stallman’s controversial comments on GMail a year and a half ago. Readers of this blog will all be interested in reading the new essay if they haven’t already already done so.
In his article, Stallman defines SaaS as, “a network server that does certain computing tasks … then invites users to do their computing on that server.” His basic message is simple: users should reject SaaS network services because SaaS users are inherently disempowered and out of control. Indeed, users should reject SaaS even if a service is implemented using free software!
Although some people have used the term SaaS quite broadly, Stallman means something very particular and focuses on the term “their computing.” When Stallman uses the term SaaS, he’s talking about computing that is highly individualistic and that looks like the type of computing that otherwise happens on a user’s own computer. Stallman explains SaaS does not refer to search, collaborative editing (e.g., Wikipedia), social networking, publication, or e-commerce. For each of these tasks, the computing involved can’t clearly be said to “belong” to one user or another; these examples all refer to computing that “belongs” to a dyad or a group. As a result, it follows that the computing involved need not obviously reside with any one individual. Stallman is careful to explain this doesn’t mean that network services doing these sorts of things are unproblematic. Often they are very problematic — but for reasons that have nothing to do with SaaS.
The piece is an interesting read but, judging by the questions and discussions after Stallman’s talk, the argument seems to be confusing for a number of people. Here’s my early thinking on the piece:
Part of the reason people are confused is because they are looking for a bright-line statement to evaluate particular applications and declare them free and non-free. SaaS can do that, but falls for short for many — and I think perhaps even the vast majority of — network services.
It seems to me that most network services I’ve used involve some SaaS features and some non-SaaS features. Some of the computing being done really belongs to a single user and some doesn’t. Some functionality boils down to collaborative or group-based computation and other things really are just tasks being done for one user using that user’s data; only the second class of features is SaaS. While particular features are easy to classify, most services end up being a bit muddy.
Much more problematically, and this is not something RMS addresses, it seems to me that the way that an application is used can really change the degree to which a program is SaaS. For example, Google certainly seems to be interested in having all of us replace OpenOffice.org and our other desktop applications with Google Docs and other Google services. Using Google as an OpenOffice replacement is clearly SaaS and should clearly be rejected for the reasons Stallman explains. That said, every time I’ve seen Google Docs used, it was as a real-time collaborative document editing system for a large group of people. Used in this way, it seems that even Google Docs might not be SaaS! SaaS or not, of course, we might still want to use federated free software alternatives like Gobby.
There are services that I have less trouble calling SaaS. Meebo, which apparently just uses the Pidgin code and creates a web-based front-end to it so that the all the computing involved happens in some data center instead of your desktop, seems like a clear example. But it’s hard to come up with tons of these pure-SaaS examples. My sense is that there are very few bright-line examples of network services that are clearly and completely SaaS. Indeed, my sense is that collaborative functionality is becoming an increasingly important part of most popular network services. SaaS seems to be a small and decreasingly important class of services.
Stallman made it clear in his talk and in the Q&A that he understands that SaaS is not a complete answer to the network services problem and, with the help of myself and the FSF staff, is working on a draft of a document influenced heavily by the Franklin Street Statement to be published by the FSF in the near future.
Stallman is right. We should reject SaaS. But even if rejecting SaaS alone leaves the most prominent, popular, and problematic network services unscathed — as I fear it might — SaaS provides a good way to think about them and keeps us focused on the key issues — control and (ahem!) autonomy. Thinking about the SaaS and non-SaaS features of applications helps us evaluate whether applications are worth their cost in freedom.
In one of my pet projects I’ve been using Twisted and txamqp. I use Twisted’s twistd to launch the service but unfortunately txamqp doesn’t come with any examples of how to use it with twistd. So I wrote a factory and protocol which makes it trivial to use txamqp with twistd. I haven’t tested it extensively but it appears to survive losing the connection to the AMQP server and reconnecting. I’m far from a Twisted expert though so please let me know if this isn’t the way it supposed to be done.
You can find the code in my Git repository.
Irssi, as blogged extensively throughout this site, is one solid client. The flexibility never ceases to amaze me, and tonight was one of those times.
Hanging out in the amount of channels I do, I see a lot of activity in my statusbar for all of my joined channels. This can be overwhelming for some, but I don’t mind it. What I do mind, however, is when I check in on a specific channel, and see pages and pages of scrollback that is nothing more than people joining and leaving the channel. I’ve tried blatantly ignoring JOINS, PARTS and QUITS, as they’re called, but I always disable it, because I usually want to be kept abreast of when someone leaves a channel that I’m having a conversation with. I don’t want to look silly continuing to chat to someone, long after they’ve left. So, I need a way to keep on top of when people are joining and leaving the channel, but not have that information in the channel itself. Thankfully, Irssi meets this need.
The concept is simple. A JOIN, PART or QUIT is what is referred to as a “level”. There are a number of different levels that Irssi supports, all of which can be found with “/help levels” in Irssi. With Irssi, it is possible to ignore, or even redirect, levels. In my case, I want to redirect these three levels to another window, if possible. So, digging through the settings in Irssi, I found “window_check_level_first”. By default, this setting is “OFF”, which means that Irssi has a global setting for levels, and how they’re handled. Enabling this setting, means to follow the levels that have been assigned to their respective channels. However, if you turn this on first, without doing some initial setup before hand, you’ll notice everything going to your status window by default, including chat. This isn’t what we want, so let’s get setup.
The first thing we need to do is set our levels for all of our currently open windows, as well as any future windows that we open. We can accomplish this with two commands in Irssi:
/foreach window /window level ALL -JOINS -PARTS -QUITS /set window_default ALL -JOINS -PARTS -QUITS
Now, the next thing to do is to create a new hidden window that will be the new home for all your JOINS, PARTS and QUITS. So, from Irssi:
/window new HIDDEN
Navigate to that window, wherever it is placed, and give it a name. For me, I called it “junk”. Of course, this isn’t necessary, just optional, but I prefer that each of my windows have a name:
/window name junk
It will have picked up the -JOINS -PARTS -QUITS from our default setting we just applied, so we’ll need to reverse that. Easiest way is to just apply the converse of what you did earlier:
/window level -ALL JOINS PARTS QUITS
Sweet. Our window is finished. Now, we can turn on the setting that will tell Irssi to look for each individual window level setting:
/set window_check_level_first ON
Wait a bit, and you should see all the JOINS, PARTS and QUITS going to your new hidden window, rather than each respective channel. You’ll also notice that it doesn’t print the channel where these are originating. I don’t know of an easy way to set that without a script, so if you know of such a script that exists, or want to write one yourself, sharing that would be appreciated. In the meantime, this is better than nothing.
Don’t forget to save:
/save
Also, you may not want to make your “junk” window hidden, but rather make it sticky, and split Irssi, putting the junk window on the top. I’ve done this with my highlight window, so it would make sense here. In that case, just:
/window stick on /window show (number|name)
You can then size the window as needed if you decide you split your Irssi.
And, there you have it. Now, when people are joining and quitting, rather than filling your scrollback where precious chat exists, it’s all being forwarded to a window of your choice. If eventually, you like this setup, and you find that you’re not checking your junk window for joins and quits, then you may be able to get away with just ignoring JOINS, PARTS and QUITS altogether Irssi-wide. Which means, if for any reason you want to reverse this setup, it’s rather trivial:
/set window_check_level_first OFF /foreach window /window level ALL /set window_default_level ALL /window close /save
And that would back you out of this configuration, and get you back to default.
I should mention that I’ve heard that WeeChat has a feature that only people you’ve recently chatted with will show when they quit, or there is a setting for setting this. I personally think WeeChat is a solid client. However, in this case, I don’t want to see any quits, even with those I’m chatting with, in that buffer. However, I would like to see it in another buffer, and Irssi makes this painless. So, while I’m sure WeeChat can also meet similar needs, Irssi meets my needs best.
As with my other Irssi tutorials, I hope this one was helpful. I find that I personally benefit from my own writing, and that’s the major reason why I blog. I have searched for doing solving problems in the past, only to stumble upon my own blog post, outlining the very issue I’m faced with again. So, if it won’t benefit you, at least it will benefit myself.
Why migrate your database? Efficiency and availability problems are harming your business - reports are out of date, your batch processing window is nearing its limits, outages (unplanned/planned) frequently halt work. Database consolidation removes the costs that result from a heterogeneous database environment (DBAs time, database vendor pricing, database versions, hardware, OSs, patches, upgrades etc.). OK, so the driving forces for migration are clear, what now?
What's the cost of my database?
Costs cannot be simply measured in terms of licenses, hardware, DBAs etc. It is more complex and requires thorough analysis on both a business and technical level.
1) A utilities company used Oracle. During the downturn a cost cutting strategy was undertaken to benefit from free database licensees and they migrated to the open source MySQL. The migration process took a couple of months and was initially a success. Problems surfaced with a sudden growth in customer demand – frequent outages occurred and because there was no clear plan for migration they could not address the underlying cause. The cost to business was so great that it was decided to migrate back to Oracle.
Main cost to business? During outages, the resulting backlogs had to be manually processed. Production standards could not be met in the desired time frame. Short-sighted planning had cost the company dearly.
2) In the early 90s, a manufacturing company buys the latest hardware and databases to support their production processes. As the years advance and production increases, efficiency problems appear as a result of the greater load. Managers are progressively viewing older and older data. Eventually they reach the point where they can only view today's data, tomorrow.
Main cost to business? Malfunctioning devices or defective materials, if not spotted immediately, can result in erroneous assembly of an entire batch, causing a loss of thousands in one shot. Ideally the system would operate in real-time, ensuing production quality with proactive decision making.
How to proceed?The first step is analysis. Determine where the needs of your business lie and evaluate whether your existing IT is meeting them. It is paramount to clearly define where you start and where you want to go.
Example starting points:
Example end goals:
After you have identified where you want to go, the next step is to prioritize the goals based on their ROI.
Types of migrationBased on the goals, we need to evaluate the migration type that will fulfill them:
Business logic - Most vendors provide tools that enable DBAs to translate from one vendors schema (tables, procedures, triggers etc.) to another. Of course, the functionality varies and specialist knowledge and manual tweaking will always be required. In essence, the more functionality you use that is specific to your database, the greater the amount of manual refactoring.
Data - Again, vendor tools can be used to migrate data from one vendors database to another. In the worst case scenario a DBA can simply create their own script to import.
Interfacing applications - The final step is to configure the applications that interface with the database inserting, updating and reading the data. A simple task, but one that requires careful analysis to identify and reconfigure the applications without causing costly downtime.Testing - As with any project, a substantial amount of testing is required ensure the maintenance of existing functionality. This must be performed incrementally to identify problems before they become blurred by others. Best practice is to run the existing production database with the migrated database in parallel over a bedding in period (1-3 months depending on complexity). Data differences of the production data are recorded, reported as bugs, prioritized and fixed accordingly.
What can be achieved?A financial services firm continued to use the same database over a number of years without upgrading. Batch report generation times were getting longer due to the ever increasing data. IT management took the decision to act and migrated to a different vendors database in addition to investing in more horsepower.
The initial results were disappointing with only 2X speedup. After a thorough audit of the migrated database, it was realized that the SQL logic (indexes, triggers, jobs etc.) needed to be optimized for the new database. After this was performed, report generation was 20X faster. The reduction in report generation time opened the door to new revenue channels.
To migrate or not?There is no straight forward answer, because it strongly depends on a case by case basis. My message is this – spend time and money during analysis to clearly define where the benefits and challenges lie. Ultimately, ROI determines if and what migration is required to realize the goals.
Last night, I wanted to see if I could get Debian Squeeze loaded on my HP Mini 110, so I set out to accomplish the task, and accomplish it I did. As with most netboks, this HP doesn’t ship with a CDROM. So, the only way to get an operating system on this guy is either with PXE, or USB (actually, I don’t even know if PXE-booting works). So, I grabbed an unused USB thumb drive, and set to work.
Before beginning any installation, you should be very familiar with your hardware, so you know what sort of drivers you’ll need for the installation, and if there will be any compatibility issues. Attempting to put Debian on this machine in the past has failed, due to the network driver not shipping with the Lenny kernel. If you have this netbook, the NIC is an Attansic Technology Atheros AR8132/L1c gigabit ethernet adapter. The driver is open source, however, the hardware is so new, that at the time I had purchased the Mini, the driver hadn’t been included in the mainline kernel. The wireless is a Broadcom BCM4132, which means the firmware is not open source, and as a result, not included with the Debian installer. So, at the time, there was no way to get this netbook online with Debian. However, with the release of the 2.6.29 kernel, the Aetheros driver needed was included, and the development snapshot of the installer now ships that kernel, so we’re good to go with a network installation, and getting the computer online.
All the other hardware that I’ve tested, I have tested before with different hardware other than the Mini, and worked out of the box. So, the installation should be rather straightforward, and booting in the new system should be on par with a working system.
So, in order to perform a Debian GNU/Linux installation via USB, you need only a few things. First, you must grab a boot.img.gz file from the development snapshot of the installer for your hardware. Because the HP Mini is x86 32-bit, I grabbed mine here. Now, you also need a CD image file (ISO format) which will contain the necessary software and installation procedures for the install. I prefer to do network installs, so I grabbed a netinst ISO here.
The boot.img.gz file will contain a bootable syslinux kernel and initial ramdisk, which means it will have the drivers necessary for your hardware. Of course, I got mine from a development snapshot, so I could get the Atheros NIC driver from the latest kernel, but if you have older hardware, maybe the stable version of the boot.img.gz would work better for you. You just need to get it from any hd-media directory appropriate for your architecture. The ISO on the other hand contains the base software for installing to disk, the partitioner and other parts of the installer necessary for performing the installation. The boot.img.gz just gets you started.
Now that you have both files, you’ll need a USB thumb drive that is at least 256MB in size, which shouldn’t be a problem these days. Insert the USB drive into a computer with a working Linux operating system, and determine the appropriate device assigned to your newly inserted drive. You can get this information a number of ways. Probably the best way, is to run the following command before you insert the USB drive:
# tail -f -n 0 /var/log/messages
Then, insert the drive. You’ll see output from the kernel as it discovers the hardware and assigns a device to the drive. For me, my output was this:
Feb 21 08:22:28 hermes kernel: [46103.644130] usb 1-7: new high speed USB device using ehci_hcd and address 7 Feb 21 08:22:28 hermes kernel: [46103.789569] usb 1-7: New USB device found, idVendor=13fe, idProduct=1e00 Feb 21 08:22:28 hermes kernel: [46103.789586] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3 Feb 21 08:22:28 hermes kernel: [46103.789599] usb 1-7: Product: USB DISK 2.0 Feb 21 08:22:28 hermes kernel: [46103.789609] usb 1-7: Manufacturer: Feb 21 08:22:28 hermes kernel: [46103.789618] usb 1-7: SerialNumber: 077904015F40 Feb 21 08:22:28 hermes kernel: [46103.789974] usb 1-7: configuration #1 chosen from 1 choice Feb 21 08:22:28 hermes kernel: [46103.790939] scsi5 : SCSI emulation for USB Mass Storage devices Feb 21 08:22:33 hermes kernel: [46108.838495] scsi 5:0:0:0: Direct-Access USB DISK 2.0 PMAP PQ: 0 ANSI: 0 CCS Feb 21 08:22:33 hermes kernel: [46109.101380] sd 5:0:0:0: [sdb] 4030464 512-byte logical blocks: (2.06 GB/1.92 GiB) Feb 21 08:22:33 hermes kernel: [46109.101984] sd 5:0:0:0: [sdb] Write Protect is off Feb 21 08:22:33 hermes kernel: [46109.107382] sdb: Feb 21 08:22:33 hermes kernel: [46109.174851] sd 5:0:0:0: [sdb] Attached SCSI removable disk
So, in my case, the newly inserted drive is /dev/sdb. So, armed with this information, I can now prepare the USB drive. This next step should be handled with caution. If you type in, whether intentionally or accidentally the wrong device, disasterous consequences may abound. As a friend once told me: “read twice, type once”. Think what you’re doing before you do it. So, at this point, I just need to send the contents of the boot.img.gz file to the new disk. I would not recommend doing it to a partition, but instead doing it to the whole drive. If you inserted your thumb drive, and you noticed in the output that you have a /dev/sdb and /dev/sdb1, then this means you have a partition table outlining a single partition on the drive /dev/sdb. Ignore the partition, work with the drive itself.
Make sure your USB drive is NOT mounted, then type in the following (this next step will remove any existing partitions and data on the drive):
# umount /dev/sdb* # zcat boot.img.gz > /dev/sdb
This should only take a couple of seconds to finish. At this point, you’ll have a FAT16 formatted USB drive with a syslinux install on the drive. You will now need to mount the drive and copy the ISO image to the mount point.
# mount /dev/sdb /mnt # cp debian-504-i386-netinst.iso /mnt # sync # umount /dev/sdb
At this point, you have a fully prepared USB thumb drive with all the necessary bits in place to perform a USB installation on your netbook, or other hardware. When you boot from the USB stick, you’ll have the familiar Debian installer interface- automated installation, beginner and expert modes and a rescue environment. Because of this, I would recommend keeping the USB stick close at hand, should you need to troubleshoot your installation any time soon.
When you initialize the installation, the installer will look for an ISO file that contains the Debian software. It will start with /dev/sda, and work it’s way device-by-device and partition-by-partition in order, until it finds the ISO file. Because my drive is also recognized as /dev/sdb on my netbook, it only take a couple seconds. After it has found the ISO image, you’re ready to install, just like you would if you had booted off a CD.
That’s it! Rather straightforward, I think. You only need four times really to complete the job:
Good luck on your USB installs!
I’m deeply engrossed in finishing my book at the moment, but wanted to mention two events which readers of this blog might enjoy hearing about, and perhaps attending.
The first event is a panel on open source democracy that’s being run at the University of Waterloo (just outside Toronto) on February 22. It’s about how and whether ideas like collective intelligence and mass collaboration will have any impact on governance in the 21st century. The panel is being run by Tad Homer-Dixon, and the panelists are Mark Tovey, Hassan Masum, and myself. After some short initial presentations it’s going to be (we hope) very interactive, with people there from a wide variety of backgrounds. I’m looking forward to it!
If you’re interested in open science, Science Commons is organizing a Science Commons Symposium on February 20, in Seattle, at the Microsoft Campus. They’ve organized a great group of speakers, and if I wasn’t chained to my desk writing I’d be on a plane to Seattle!
Update: The open source democracy panel is on Feb 22, not Feb 20, as I originally wrote.
It’s no surprise that Bitlbee is my chat client of choice. After all, I’ve blogged about it before. So, when I heard rumors that Facebook would be releasing their chat to outside clients over XMPP, I was excited to see the day when I could add it to my running Bitlbee instance. Lo and behold, that day has come.
Adding your Facebook account to Bitlbee is rather painless, as it is with any other account. The only catch, is you have to have a Facebook username set before you can continue. Once that is set, in Bitlbee, from your “&btilbee” status window, you can add the account:
account add jabber <