Meta just came into the bedroom, tears streaming down her face to share this with me and Lisa.

My daughter is beyond amazing.

Posted in Uncategorized

A eulogy

Vincent van Gogh
Virginia Woolf
Ernest Hemingway
Alan Turing
Hunter S. Thompson
Sylvia Plath
Kurt Cobain
David Foster Wallace
Aaron Schwartz
Tim Tripcony

Genius that changes the world yet cannot change itself is a tale as old as civilization. Those of us that look on in tearful awe feel stranded in a sea of inevitability. We can no more predict their personal choices as we can their creative ones. Those could only be foreseen by a matching genius, and alas, there is no such thing in this world.

Our friend Tim cast more light than heat, so no matter how bright he blazed, he could not stay warm. I should have known how cold it was for you, my friend. I should have burned and raved with you ’til close of day.


Posted in Uncategorized

A note for those coming to Tim’s dedication tomorrow…

This is a dedication for Tim Tripcony. So if you want to know how to dress, ask yourself “What Would Tim Wear?”

You don’t HAVE to dress like Tim, of course. There’s certainly good reason not to. ūüôā But friends and family will all be welcoming of anyone who dresses like the man we’re going to honor.

And — sneak preview — this will be a Thing (TM) at the gathering.

Posted in Uncategorized

From our friend and colleague, Matt Smith

Matt Smith worked with Tim and me and the team at GBS for several years. He doesn’t have a blog, so he asked me to share his thoughts concerning Tim’s passing.

I feel very inadequately prepared for sudden shocking news, and when something like yesterday happens, where I learned of Tim’s passing, it can be very troubling to try to come to grips with it.

When I first saw the news…I guess I just did not want to believe what it was saying could possibly be true. When that feeling changed to one of “this is really true”, it took my breath away, a huge kick in the stomach.

To people I worked with at GBS, it may be obvious, but most likely the furthest from obvious, that Tim’s loss has been a personal blow to me (as others). So many days after work, when I should have been on my way home, I stuck around to chat it up for another hour with Tim about all kinds of things, and most of the time not about Xpages or Java or anything like that, but about his singing in a barbershop quartet, about time-travel movies we have admired, brainstorming at a high level of some cool app and how it would make the world a better or easier place, or just some random political or social issue that came up in conversation.

He had a way of making you feel like you were his very close friend, when that might have been presumptuous at that point in time. Friend and colleague, yes….very close friend (like Nathan)….well, he made you feel like that. Good God, he was genuine. I just realized all of the adjectives describing him that seem like they have a common source:

Genuine, Genius, Gentle, Generous.

Nathan alluded to the fact that many people were going to be relating that Tim was selfless, and he was spot on. This was a trait of Tim’s that was impossible to not appreciate. It wasn’t just the time and effort that he spent, it was the way he did it. He was never condescending, never made you feel like you were stupid or uninformed. At times he surely had reason to, but that wasn’t his way. He truly wanted to impart knowledge to you no matter where you were in the techy food-chain. If you injected an idea that to observers would be obviously misguided, he had a way of gingerly letting you out of the embarrassment by telling you the good part of what you just said, or how that could be looked at another way that was correct or wise. I do not know if I am doing that skill of his justice in how I am explaining it, but hopefully you either experienced it, or at least can imagine how that could be done, and how it could be appreciated. He was a teacher at heart.

I don’t have a blog. I am not an IBM Champion. I can only aspire to get near to that level of skill and participation, and when I came onto the team at GBS, I was immediately immersed in tall Redwoods of the type, and it soon became clear that Tim stood as tall or taller than them all. I had not known him before then, but I can say now that it was my immense privilege to be in the midst of such a talent’s presence, and not only be there, but actually get a chance to be taught by him, to ask him questions one-on-one where I had all of his attention. That kind of opportunity just doesn’t present itself to me on a daily basis. And the fact is that even if Tim didn’t know the first thing about programming languages, his genuine non-assuming and generous spirit would have been as impressive. It’s just that his technical prowess, and eagerness to explain it, were overwhelming and infectious. The analogy I have is something that might make it clearer, it was like I was at baseball camp with some of the game’s legends, and getting a chance to play catch with an eager-to-help Stan Musial.

Even in recent months, on a couple of occasions, when I would be stuck on something that seemed to me to be an ‘advanced’ feature or item technically, I would reach out to him, and as always, he would stop and help. We even would just Skype call, so it was more than a chat, it was a real connect, and that is something that working from home all of the time, you learn to miss, especially when it is someone so engaging as Tim. I would always say I wanted to drive over to go to a Lunch SCRUM, but never got that done. That is someting of a loss, a missed opportunity, that is bothering me today.

In closing, I need to say that it hits me that the cumulative accolades, anecdotes, remembrances, and condolences that have streamed around the net, while each being seriously heart-felt, just do not seem to be enough. I don’t know if there could be enough.

I want everyone I know to know Tim, and now it is too late. For that, I feel especially sad.

Rest in peace Tim. We are all going to miss you terribly. You impacted more people than you could have known. We could all wish that we might have someone say the same about us when we are gone.

I can only hope and pray that all of the words written about him in these past days will provide some comfort to his parents and anyone else that cared for him.


Posted in Uncategorized

In Memoriam, Tim Tripcony

Friday, May 16. 5pm ET at Tuscany in Woodstock, GA.

We’re exploring options for virtual guests as well. Details will follow.

How to make a White Russian: Pour 2oz of vodka and 1oz of coffee liquor over ice. Add light cream or milk to taste. Your choice of vodka should reflect the person we’ll be honoring.

Posted in Uncategorized

My Friend, Tim Tripcony


The XMage and I first met in North Carolina at Lotusphere Comes to You in 2007. We had collaborated on some open source projects before, but had never been in the same room until that point. I was smitten. And I managed to convince my bosses at the time to make him an offer. He accepted and our worlds were forever changed.

Over the last 7 years, Tim and I shared a deep collaboration that, while it faced its share of struggles, stemmed from our enduring friendship. It saddens me that we’ll never get to finish each other’s code blocks or pick a blog fight or present a session together again. It makes my soul ache that I’ll never get to roll my eyes at one of his cheesy puns or pretend we can dance at a music festival or be his wingman and introduce him to a pretty girl ever again.

Much has been and will be said about Tim’s genius and generosity and every word of it will barely scratch the surface of the contributions he’s made. Having worked keyboard-to-keyboard with him for many years, I would add that he always used both sides of his brain in every line of code, applying musical creativity and linguistic flourishes right along with his anonymous callbacks and love of ternary notation.

Unlike most of my readers, I knew a Tim who would sit on the floor and play with my dogs for hours after Christmas dinner. I knew a Tim who snored like an elephant after too many white Russians at Kimono’s. I knew a Tim who fought through a haze of tears to share with me the loss of his marriage. I knew a Tim who nearly punched a Dolphin network tech in the face while we sat backstage at Lotusphere watching months of planning and effort blow up in our faces. I knew a Tim who fell asleep sitting upright in a hotel bed trying to get just one more bug fixed before our big demo. I knew a Tim who would would come over to my house on a Sunday to write some crazy piece of code together, because while making a computer do what you want is fun, doing it with your best friend on a self-imposed deadline just because you can is positively gut-busting.

I knew Tim; and I am a better coder, a better husband, a better father, a better man for it.

I wish I’d given him as much as he gave me.

EDIT: My friend Cheryl Spring shared this picture on Facebook and I thought it was too perfect to withhold.


Posted in Uncategorized

Meme time

Pro tip: Make sure you read the hover text

Posted in Uncategorized

A timely lesson on logic

One of the most indispensable resources on the entire internet is a simple web page that describes the generally¬†accepted logical fallacies. When you encounter a debate that seems confusing or intuitively incorrect, it’s a great technique to look over the fallacies and see if the arguments in the debate rely on any of them. I’ve found that the most common are:


Personal Incredulity

False Cause

Slippery Slope


False Dichotomy



Appeal to Authority

Middle Ground

The Fallacy Fallacy

Watch out for these fallacies when you encounter debates online. Even people that you would expect to be experts at logic and argumentation are prone to committing them.

Posted in Uncategorized

Why I’m no longer a “consultant”

Does this meeting sound familiar to you?

Posted in Uncategorized

Hmm… upgrades!

Marky Roden has published an excellent post on the difference between what’s good for developers and what’s good for users over at his Xomino blog. I wanted to give my reply due consideration, and spent a bit of time thinking about why there’s this dichotomy of interests. And I ultimately realized that in order to do the topic justice, I would have to develop both solutions and compare. I set myself a simple task: have an XPage with two radio button groups, one that would show & hide a div using partial refresh, and another that would show & hide a div using client-only code.

The first part was easy enough and took about 5 minutes. It looks like this…

<xp:div id="partialTarget">
<xp:radioGroup id="radioGroup1" value="#{viewScope.partialRadio}" defaultValue="hide">
<xp:selectItem itemLabel="show" itemValue="show"/>
<xp:selectItem itemLabel="hide" itemValue="hide"/>
<xp:eventHandler event="onchange" submit="true" refreshMode="partial" refreshId="partialTarget" execMode="partial" execId="partialTarget"/>
<xp:this.rendered><![CDATA[#{javascript:return viewScope.partialRadio=="show";}]]></xp:this.rendered>
<xp:label value="Partial Refresh area now being shown!" id="label1"/>

But then a funny thing happened when I went to do the client-only version. I couldn’t. I thought it would be easy enough to add a client event handler to the radio button that toggled the visibility of the target div, but I discovered that I didn’t know how to get the value for the radio button. And a bit of Google-fu revealed that I wasn’t the only person to have this challenge. Because of the arcane way that radio button groups work, lots of people have struggled with this problem.

In the end, I had to turn to people who know client-side Javascript better than I, including the esteemed Dr. Roden himself, to come up with a solution. It looks like this…

<xp:radioGroup id="clientRadio" value="#{viewScope.clientRadio}" defaultValue="hide">
<xp:selectItem itemLabel="show" itemValue="show"/>
<xp:selectItem itemLabel="hide" itemValue="hide"/>
<xp:this.value><![CDATA[dojo.query("input[name=#{id:clientRadio}]").connect("onchange", function() {
    dojo.style( dojo.query("div[id=#{id:clientTarget}]")[0], "display", (this.value=="show" ? "" : "none") );
<xp:div id="clientTarget" style="display:none">
<xp:label value="Client refresh area now being shown!" id="label2"/>

Needless to say, this is quite a bit different. I hesitate to say it’s more complicated, because if you’re thoroughly familiar with Dojo, it’s not much code. But Designer didn’t offer me any help in solving the problem client-side. I might even say that it actively got in the way by misleading me with the onChange event in the IDE not being able to provide me with the selected value of the radio button.

But as I look at what code gets generated at the browser level, there’s no particular reason why the Designer components couldn’t do this. Indeed, if I’m willing to switch to a Dojo radio button set, I can do this with a client simple action. It looks like this…

<xe:djRadioButton label="show" id="djRadioButton1" value="#{viewScope.dojoRadio}" defaultValue="show" selectedValue="show" groupName="dojoRadio">
<xp:eventHandler event="onChange" submit="false">
<xe:this.script><xe:dojoFadeIn node="dojoTarget"/></xe:this.script>
<xe:djRadioButton label="hide" id="djRadioButton2"  value="#{viewScope.dojoRadio}" selectedValue="hide" groupName="dojoRadio">
<xp:eventHandler event="onChange" submit="false">
<xe:this.script><xe:dojoFadeOut node="dojoTarget"/></xe:this.script>
<xp:div id="dojoTarget">
<xp:label value="Dojo refresh area now being shown!" id="label3"/>

Definitely more complicated but perhaps worth it.

So how do we solve this conflict between developer productivity and user experience? Better tooling, of course. We need new components that are as simple to use and understand as the partial refresh example, while providing the user experience and efficiency of the client-side or Dojo examples. To me, the obvious place to do this is in the Bootstrap4XPages open source project.

Who’s in?

Posted in Uncategorized