Monthly Archives: March 2006

Psycho Math Day

During a discussion on a internet board, I espoused a pretty weird theory. I like it so much I’m going to try to explain it here.

The gist of the theory is that there is no such thing as integers or rational numbers, at least not in reality. Sounds crazy, I know, and it’s probably just a bunch of bunk, but I like the “feel” of the argument so I’d like to capture it in words.

When we started inventing the thing we call math, it was all about counting things. One sheep, two sheep, three sheep, four. We made words to associate with these concepts and started constructing a set of words and symbols to work with adding and subtracting sheep.

We soon reached a point where we had to deal with the idea of taking away more sheep than we had — meaning we had to have negative numbers. I’m sure it didn’t make sense to a lot of folks at the time (how can you have -4 sheep?) but it worked well enough so that the math became a lot more useful.

When we added multiplication and division into the mix, a couple of interesting things happened. First of all, we ended up trying to divide 5 sheep among 3 people. How could you split a sheep? Never fear, we invented rational numbers, which are any numbers that can be repesented as p/q (for those of you sleeping in math class), where p and q are integers. Once again, it didn’t make much sense to sheep herders, but the math became even more useful.

We also had the interesting question of “what is something divided by zero?”. As we all know from elementary school, you cannot divide a number by zero, because how many times do you need to multiply zero together to get any other number? You can’t, so it didn’t make sense.

Here we did something very interesting. Instead of re-examining where we were with our math system, we just ignored the problem and said “don’t worry about it, it just never can happen”. We didn’t invent a new type of number, we didn’t make up new symbols. We just kind of grimmaced and continued our counting, adding, multiplying, and dividing.

Some of you know more of the story. Later on we wondered what the square root of -1 was. For this, we invented (discovered?) imaginary numbers. Then we got quaternions, vectors, matrices — we’ve made all sorts of extensions to our beloved system for enumerating sheep.

At each step, we learned more about reality. For instance, when we had to represent those 5 sheep split among 3 people, that was a real-world situation. We would make up words and symbols, see if it mapped to reality, and then make up new words and symbols if it didn’t work exactly right.

Which leads me to physics today. As I understand it (and I am a total idiot but I do stay at Holiday Inn from time to time) now that we’re getting to very small pieces of things we are finding that the “pieces” aren’t really there. Take an electron, for instance. There’s no such thing as “an electron”, rather there is a potentiality field where an electron _might_ be at any one time. The universe, in effect, consists of probability waves that intersect. Nothing is really somewhere — everything is everywhere. If you know it’s exact momentum, you have no idea where it is, and if you know it’s exact position, you have no idea how fast it is going. We really never know either of those totally, everything is “fuzzy”.

This is the craziness of quantum theory. If you don’t get it, don’t worry — it looks nothing at all like counting sheep, that’s for sure. But it describes what we know about reality currently. For any given amount of space, there is some probability that some particle may exist in it.

This means that probability and statistics play a very important role in how we define reality today.

Now you can take this two ways. You can think in terms of particles and the probability that they are somewhere. That’s the way most people think about it. Or — you can think that the particles really don’t exist at all but only the probability waves.

I like to think of it that way.

I think there is no such thing as zero. Sure, there might be zero sheep, but the things that make up the universe are not sheep. A sheep is either there or not, but a quark exists in some other reality where it is kind of everywhere but most likely in a certain area. To say there is no quark in a room has no meaning — there is always some probability, no matter how small, that a quark is there. There is no zero.

If we had to start over again with math, and we were very small (or had great eyesight), our system would look much different than it does today! First, there would be no zero. Once we accepted that reality, it logically follows that there is no 1, 2, or 3 (because how do you really know there isn’t one more or less?). You can’t really count anything. Counting, the verb, is meaningless.

So how would we express states of reality? How does one say, compare a room full of electrons with a room that looks pretty empty? My response is that from our vantage point these concepts are expressed as ratios of truly irrational numbers. Although perhaps the term “ratio” is a little misleading. We might need to invent new operators to describe how these true irrationals relate to one another.

There is probably an underlying computer system for the universe — a “calculable substrate” on which the rest of reality runs. This is the reason so many small things are currently expressed as probabilities — we’re really just measuring a whole bunch of something else. That “something else” may not be observable from our perspective. In which case, it follows that the concept of zero, integers, and rational numbers do not help us understand reality at that level. Instead we may need a set of symbols that describe computer relations, operations, and the interaction of computing fields.

It was a fun mental exercise.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Always something, part 2

So I’m getting ready to give a big presentation and show these local CIOs the organizational process analysis tool I have developed. The day before I’m to go, my notebook computer crashes. Well, it doesn’t crash, just parts of the hard-drive stop working. I spent several hours with it yesterday, and now it boots but it is way screwed up. The HD errors have stopped, but it runs slow, beeps a lot, and generally is a hunk of junk. So THAT’S not going to work.

Fortunately for me, I have Groove (you should check out this program if you do consulting. Best purchase I’ve made in a long time.) I have a backup notebook — a big, honking Media Center Toshiba that I use sometimes as a TiVo. I load up the materials on it last night and it’s looking good. So I show up today and start the spiel.

About 5 minutes into my presentation, the Toshiba just — stopped. No error, no beeping, no clicking. In fact, nothing. All the lights went out and so did the computer. Nothing. Nada. It was like the computer was playing possum.

So on to plan 3! I had handouts of the presentation available and in by bag (do you remember to make hard copy backups? Saved my bacon today.) Pass those rascals out and finished the presentation pointing to graphs and slides on a piece of paper.

The moral to the story? Life sucks. No really. There is no moral. You try to make plans for the worst, but somehow even the worst never happens like you think it will. I’m glad I had the hard copies, and I’m glad I had a web application to demo. I always love getting up in front of people because I never quite know what is going to happen. This time was no different! In short, it was a hoot.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Is Microsoft ATLAS for me?

I have an AJAX application that I’ve written, and I’m thinking about whether to use the ATLAS tools from Microsoft to help me develop it.

If you look to the left of the title bar, there’s a little “rating bar” that pops up beside each article on this blog. Underneath each article is a voting button that says something like “RATE ME!” Clicking on this button opens up a rating box.

The application runs anywhere — a blogger adds one line of code to his blog and instantly he’s got article rating and content analysis services. Clicking on the rating bar takes users to a details page.

Adding to the gee wiz factor is the fact that the application is basically server-less: the blogger adds one line of code to his blog template and that’s it. There’s no kind of installation or setup for either the bloggers or the users (as you can see on your own browser). Users can pick skins for their vote box that follows them to whatever blog site they visit. And to top it off, both bloggers and users can add custom javascripts to their toolbars to run when clicked. Want to offer users a button to go to a donation page? You can easily add a button. Want a button on your vote box that highlights the best article on the page? Easy to do.

The back end is running .NET 2.0 and SQL Server 2005. I have a custom-tiered data layer (check out CodeSmith and NetTiers if you are interested) and I do some funky things, as you might imagine.

It’s all very Web 2.0. Voting happens completely behind the scenes. Once you vote and the box closes, the vote is committed while you continue reading. After all, you’ve just given your opinion — you don’t want to wait around for a bunch of trivial stuff, right? Each minute, the current statistics for the page is collected and the rating bars for each article is updated. The readers read the articles and if they want to bat back their opinion quickly to the blogger, they can do so without wasting a lot of time.

So I’m thinking about ATLAS and it looks like it is designed for a dedicated server hitting a dedicated client. That is, the server effectively “runs” everything you see on the page. I don’t think that fits into my paradigm or the paradigm of Web 2.0 as I understand it.

I want web page designers to mix and match services and products from all over the web, not tie themselves to my (or anyone else’s) server, language, or platform.

As a fallback, I guess I could use the ATLAS libraries on the client side. It sure would be great to leverage those 360K of javascript. I haven’t seen a good technical document for this code yet, however. As I understand it, this is a “develop while you wait” deal where Microsoft is busy cutting code even as the community is working with it.

I’m not crazy about using an unknown library, however, and I don’t have the time right now to dig through it and figure out what’s usable and what’s not. Trying to chase a moving target makes this strategy look even worse to me.

The last option would be to use some of my “traditional” applications with the ATLAS libraries. After all, like every web application, I have preferences pages, administration pages, and pages to do fun stuff for the user. But do I really need AJAX for that stuff? I like the change-click-commit model. If I really, really want to try it out, I guess that’s my best option.

So as I’m discovering, even if I want to try out ATLAS it’s not as simple as it might seem. Users are comfortable with the old model. Is the complexity worth the convenience? What do you really want to do with Web 2.0 and ATLAS, and why do you want to do it? I guess the answers to those questions determine where you should shop for solutions, and whether you should build or buy.

By the way, the application, which I call batBack, is completely free. If you’d like to try it out, drop me an email or visit the signup page to get your blog put into the database and your code emailed to you. I am currently collecting a group of beta testers to scale the application up and work out the bugs. I’d appreciate your help if you are able.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Atlas At Last

Yesterday I got my first peek at Microsoft’s new ATLAS framework. I’m going to tear it apart, but first a couple of warnings.

This is a technical article. So mom — if you’re reading — this would be a good article to sit out. I’d also like to point out that I have no problems with the implementation of ATLAS. It’s one of the best jobs of computer engineering I’ve seen in a while. The design and coding are absolutely top-notch. It’s the strategy that is awful. Now on with the thrashing.

ATLAS is supposed to be Microsoft’s answer to AJAX. Although I’m not sure AJAX is a question, and if it is a question, I’m not sure Microsoft needed an answer. It’s all part of Web 2.0, which once you strip the marketing hype away is just a new way of thinking about web applications. The key part of that last sentence is “new way”. Users don’t want to sit around while the server reloads the page, thank you very much. So AJAX moves updates into the background and makes the web page act more like a regular application.

Here are my initial impressions:

It’s too big – This hoss weighs in at over 360K of downloaded Javascript to my browser. Before it’s all over I’m betting on 500K to 1MB of code. That’s a freaking lot of stuff sitting on my browser. Stuff that Microsoft owns and I’m not to touch. Reading the license agreement, I’m prevented even from fixing problems and overcoming bugs in Microsoft’s code. I had to read this one a couple of times before I believed it. So Microsoft is taking a big honking bandwidth chunk of my application and I’m powerless to control what goes inside the black box? If everything else in the world were perfect, I’d have no problem with this. But I’ve been around the block too many times to think that Microsoft’s code is going to be the do-all, end-all that it’s promised. So that means somebody is going to have to fix it. Which I take is now illegal.

It’s Overblown – Okay. Okay. So it looks like somebody smart at MS has decided to eventually push the entire freaking CLR down to the client in Javascript. No doubt this is part of the unified strategy of making MS and the browser one happy union of peace and utility. But heck, guys, I just wanted asynchronous operations here. I’ve got code that is the atomic missile of architecture, and my problem is that I want a gnat killed. Now Microsoft may have bigger needs: they have market share and browser wars and all sorts of issues. But me? Joe Coder? Keep it simple, stupid.

Declarative Programming Is the Wrong Model – I love those little ASP tags, really I do. But there is a time and place for everything. If I wanted a grid to do AJAX, maybe, JUST MAYBE, I would encapsulate that AJAX behavior in the freaking grid, not make up some all new assortment of tags and behaviors. This is the same issue as before — my need is a grid that updates. Not some .NET client engine in Javascript. That’s Microsoft’s need. The scary part of this is that they are having programmers on the server declare programming constructs on the client. Very complicated constructs. When you add a couple of tags on your page, you’re doing all sorts of new and wondrous things.

What’s the problem with that, you may ask? The problem is that the client environment is a separate environment with different rules and expectations than the server environment. Everybody has to play together, which means Microsoft isn’t the only player in town. If I want to add a few other gizmos into my client, now I have to make sure they all play nice. Once, yet again, we have Microsoft demonstrating something that looks great on the video, but the minute you use it in real life you’re hosed. Dig out the books, hire the consultants, there’s a new technology in town.

I’m also concerned that Microsoft seems to be doing almost everything in their power to keep developers from using client Javascript. Why? You can make up your own reasons. But the examples in MSDN have always been sparse (but getting better), and the company actively seems to promote server programming as the de-facto method to write web applications. Not only is this a little self-centered, it’s also probably not the way the technology is heading. It’s also a great disservice to the poor schmucks out there working for a living.

Span of Control is Out of Control – It’s just too much. For those of you out there who understand the whole ASP pipeline paradigm, the custom control model, HTML, XML, DHTML, Javascript, CSS …. The list goes on and on. Technology is supposed to simplify things, but instead we keep making things more complicated. Look, if you want the CLR on the client, make it part of the ECMA standard. (But I guess that wouldn’t work politically, huh?) This is not just MS, it’s everywhere. But MS needs to be aware of it. ATLAS can’t be everything to everybody, even though it’s making a valiant attempt. And it’s not that great an idea to leverage onto the client. There are programmers right now who are dreading ATLAS, I can tell you. In their minds they see dropping a couple of things on to the page and then nothing working. The easy life is over as quickly as it began. These programmers won’t admit it (probably), but I’m willing to bet they are tired of the “simple demo” sucking them into implementation hell. Yet again. Part of this is the tendency for software providers to solve the technical details of a solution instead of focusing on the human details of a solution, which is exactly backwards. So we get great technology that works on the simple path but involves detailed domain knowledge for anything that strays from that path.

Lack of an Independent Client Architecture – So here’s what the community needs: an independent, extensible, client architecture. Here’s what we are getting: vendors trying to elbow and code their way into owning our browsers. People want to mix and match, they want choices. MS and others are actively trying to take away these choices. Yes, I understand that soon MS will probably introduce a tool wizard for atlas and encourage third-party vendors. But that’s just window-dressing. Locking down the framework at this early stage in the paradigm change does not help the larger community. My opinion only folks.

Now that I’ve trashed ATLAS, some good news: I’m not all that opposed to using it. In a closed shop, with dedicated IE on the floor, it probably makes a lot of sense. I worry that the marketing hype versus trade-off will be disappointing to many implementers. I also think that for a lot of pages a couple hundreds lines of custom-written Javascript might be better than tens of thousands of lines of pre-canned work.

All-in-all it is exactly what you would expect: another complete architecture, tools, and technology to hit a Microsoft need squarely on the head.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Dan’s Bike: Dead

Ok. Ok. So it’s a little more complicated than I thought.

I had it. Man, I had it. I had the front wheel turning almost correctly, I had the back wheel working. I even had the gears turning. I took it for a test ride. It rode well, just needed some minor adjustments.

I made the adjustments, then hit the road again. Before I could get out of my driveway, however, I heard a CLANG!

The back deraileur broke off the frame.

I have no explosives to use on the bike. I am also out of bazooka shells. I thought about driving over it in the Jeep, but knowing my current luck I’ll probably get a flat tire. So I covered it back up with a tarp and took my tools inside.

Later tonight, I am thinking about having a memorial service. Gad fracking gummity-slumping moon-fritzin ice slurper! (I could give this to you in the native vernacular, but I’m running clean blog here, folks) I feel like Darren McGavin in the movie “Christmas Story” after his wife broke his lamp. I know for a fact Melissa is responsible for this as well, just need to figure out how to blame it, er find the responsible party.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Dan’s Bike: In ICU

I lost my bike this week. A bunch of other negative things happened, including being told a contract was in the works that didn’t pan out, but the thing that bothers me most is the bike.

It was a nice bike. I got it for Christmas along with my son Jack, and I thought we could ride together. In fact, that’s the way it worked out: Jack learned to ride his bike while I rode mine and encouraged him along. Jack learned the hard way — no training wheels. Just keep trying son until you get it right.

So me, Jack, and the bikes have become a lot closer over the last couple of months. Jack is getting really good on his bike, and I have been extending my rides longer and longer up the road we live on.

Well until Monday, that is.

First the chain broke. I managed to fix that and took the bike out on a trial run. It’s a mountain bike, and I like to put it through it’s paces. During the test run, I took it down an old road with large gravels and ruts on it. Everything was going along fine until BAM! The back wheel popped out of place, and the whole bike locked up.

So it’s a mess. The front wheel rubs the brakes when you turn it. The back wheel rolls freely (I got it back on), but the rear deraileurs are a mess — bent.

I told Melissa I was going to fix it today. She made a sound that sounded like the same response she would make if I announced I was going to perform brain surgery on myself. My mechanical skills (or lack thereof) are well-known in these parts. But hey, it’s a bike, right? I mean, two wheels, a chain and some sprockets. How hard could it be? How hard could it be?

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

It’s Always Something

I’ve just given up.

It seems that whenever you do a presentation, it’s always something that screws up. You do your best beforehand, practicing in front of family, adjusting the colors, making the handout material (see yesterday’s post) But in the end, something always gets you. Something always, always goes wrong.

Case in point: yesterday I arrived on time, reasonably well-dressed and looking as presentable as is possible. The support people showed up on time, we had a projector, a room, and everything we needed.

Well. Almost.

When we were setting up the projector, I noticed that part of the bottom of the display was cut-off — the people in the audience couldn’t see it. It wasn’t that it was off the bottom of the screen, it just wasn’t there. But heck, it was only a few pixels. I didn’t really need those few anyway, so we finished setting up and went forward.

Now you have to understand. In my presentation I show some grids towards the end. The grids show processes that are working and that are not working. The bottom row shows poorly performing processes. I talk at length about how you read these bottom rows and then do different things to fix the problems.

I guess you can see where this is going. When I got around to showing the grids, none of the two bottom rows are visible to the audience — the rows that show the exact thing that I’m supposed to be talking about.

So I tap dance. I had to do the old “If you COULD see this, boy would you be impressed!” routine. I hate doing that, but really is a situation like this you have no choice. One time when I was demonstrating a security application to a client the entire program crashed in the middle of the demo. Big Blue Screen of Death. Took the entire operating system down with it.

Without missing a beat, I announced that “As you can see, when the security privileges are low, the system will prevent the user from operation”. Fortunately my audience had their BS detectors on high, so they got a good laugh.

I had a demo once where in the middle of it a VP asked “Where’s that button to do X? I was promised a button to do X!”. The room was deadly silent. Everybody looked at one another. Nobody had any idea what this guy was talking about.

Once again, I tried the Monty Python approach. I told him that the button was there, it was just the same color as the background and was disabled (sort of like the deal with the tree falling in the wilderness and nobody around) After he looked like he was going to bean me, I apologized and told him nobody told us about it and we would have it fixed that week. The show went on.

The show always goes on. One of the many benefits I received from taking 12 years of piano as a child is the knowledge that you smile, be unruffled, and keep on playing. The show goes on. One time during a piano recital the power went out. The student didn’t miss a beat and kept on playing. Then the teacher put candles around the room so we could see. A few minutes later, a couple of the candles fell onto a girl’s dress while she was playing! She kept on playing. Fortunately the teacher grabbed the candles before the kid caught on fire — that would have been a recital to remember. I don’t think Chopin had a piece called “Flaming Girl”, and it is not what most parents expected, I can tell you that.

So the show went on yesterday. I hope I did a good job helping the folks out. I tried to cram 3 hours of material into 25 minutes, and I spoke too quickly and mumbled when I should have projected. I missed material. I paced nervously. I think I even told a story about myself that didn’t put me in the best light — sometimes a no-no. But the show went on. I had fun giving the presentation. Maybe it made a difference for somebody.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Why is it Always an Art Project?

I’m getting ready this morning to go to speak at the Region 2000 Wired Wednesday luncheon. As those of playing along at home know, I’ve done a bunch of speaking engagements over the last year or two. Can somebody tell me why they always turn out to be art projects?

I usually start out with a good idea. For today, it was “tell the folks about risk management and process risk management in particular. Give them something to make their businesses better.”

So I put together the presentation. But that is never enough, for some reason. You also need business cards, and handouts, and flyers, and — well you get the picture. It seems that no matter how simple the topic, at the end I’m always sitting at the dining room table, laminating or binding, or cutting and pasting some kind of material into some new kind of material. Last night it was business cards and take home “quick lists”. One time it was these really cool rolodex brochures. Then there was the time that I did a full color set of miniature slides that fitted on a keychain….

Ok. Ok. So perhaps it is me. I guess the anal-retentive side of me always tries to do everything to extreme. I’m the only guy I know who has frequent flier miles on his laminating machine. And I’ve got at least six different versions of my business cards.

I never liked all of that creative stuff when I was in kindergarten. Looks like I should have been paying more attention. I’ve got to go now. I was thinking that I could make a serious origami boat out of folded tri-color graphs.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

I am now a Pod-Person

I’ve been putting it off for a long time, but finally I have become a pod-person.

Nope. There wasn’t a strange plant growing outside my window last night. Rather, there was a strange feeling growing inside of me that I was missing out on something important. Plus, after all these years as a PC computer consultant, wouldn’t it be a hoot to have something with an Apple logo on it? Plus I really like listening to music and lectures while I exercise, a habit the rest of the family is finding less enjoyable. Why, I don’t know. Wouldn’t every five-year-old girl want to hear about the use of motif in early Romantic composers? Some kids are strange, I guess.

So I trucked myself off to Best Buy last night and did the dirty deed: in my greasy palms there is a brand-spanking-new i-Pod nano. I thought about getting one of the hard drive models, but the little 4GB nano should be enough for now, plus maybe it will be better suited for running or cycling.

It’s an odd experience. With my arm-band on, I can listen to music in the house while working without bothering anybody else or dragging heavy machinery around. It’s like having my own personal soundtrack. I can see where there might be some problems with hearing loss — after all, everybody will, over time, keep adjusting these little rascals louder and louder, especially in noisy environments.

So far, so good. I’ve re-ripped my collection of Beethoven’s Symphonies onto the little gadget and now I think I’ll start on my blues CDs. At some point today, I guess, I should stop playing with the little toy and get some work done! But just not yet. You see, I look the same, talk the same, and for all accounts AM the same person, but I’m not.

I’m a pod-person.

If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.