In the Flow » Posts in 'software' category

Free Inno Setup Skins from CodeJock

Free is good. Free that makes my product look better is great.

If you’re an Inno Setup user, take a peek at the free skins from Code Jock. The gallery of styles is here. They add a bit of polish and take only a few minutes to add it to your setup. It does add about 300 kb, so if you obsess about download size, it may not be for you.

I used the Office 2007 skin. Here’s the before:

Normal FlowBreeze setup

Here’s the after:

Skinned FlowBreeze setup

I wonder if I can get Skinned for Vista Certified.

Lifestyle Business vs Software Startup: How One Company Got Screwed

[This is a story about Bob. Bob is not his real name, but he is a real person. The events here were gleaned from intermittent conversations and pieced together as accurately as I could.]

I’d never heard the term “lifestyle business” until I met Bob. It was a few years ago, not long after he started a software company with the goal of being bought out. I told him about my company, and that’s when he introduced me to the term and explained the difference between a startup and a lifestyle business.

When I first met him, Bob was struggling to get off-the-shelf versions of his products to sell, so his company kept afloat by consulting - mainly providing customized implementations of their core product.

Finally they hit pay dirt when a golden trifecta of companies each bought multiple team licenses for his product. I won’t name the golden trifecta, but the three companies make chips, make computers, and sell the software that runs the computers, respectively. This got the attention of some national players, and Bob’s dream of selling his software company for a big payoff began to take shape.

Several suitors made preliminary offers, but one stood out. We’ll called it BigInvestCo. It had a track record of success and made the best offer. So he said thanks but no thanks to the other outfits and settled on BigInvestCo.

Then things slowly went south. It seems that these masters of enterprise at BigInvestCo were con men in $2000 suits. They suggested that the buyout price would be in the “set for life” range. After Bob had said no thanks to the other suitors, BigInvestCo lowered the buyout figure by half - which still would have been very good money. Following that, they did the due diligence and the final offer was to be put together. And that’s where things went bad.

The initial offer (which I assume was non-binding) was back in June, and BigInvestCo told Bob they hoped to close the deal by the end of the month. As part of the deal, he and his team would be given positions in a newly formed company, which would be a subsidiary of the BigInvestCo’s existing business. But the existing channel partners would be replaced by their in-house sales channel, so there was no need to keep nurturing them. Those ties were severed.

The owner of a startup is the rainmaker. Bob had hired a few salespeople, but none of them had the passion and understanding of the products to close deals like Bob did. But with Bob spending weeks away from his business while trying to negotiate the deal, the sales pipeline started to dry up.

Every time the deal seemed to be on the verge of closing, BigInvestCo used all kinds of delaying tactics and legal maneuvers designed to eat up time and legal expenses for Bob. With the sales pipeline sufficiently dry, a payroll to meet, and Bob’s finances getting tight, BigInvestCo came back with an offer at 10% of the June offer (i.e., 5% of the “set for life” figure).

I have to assume that hope overtook logic, because Bob plowed on, convinced he could still pull off a great deal for his company. Then one night, Bob’s out for dinner and drinks with BigInvestCo’s lawyer. After one too many, the lawyer let it slip that this is how these deals are done. They get the prospect all charged up, then as the deal progresses BigInvestCo does everything possible to bleed them out. When the seller is at the point of desperation, they make a lowball offer.

That was four months ago. I just found out the deal has gone tits up. I could tell it was painful, so I didn’t press for details. I don’t even know whether his company is still afloat.

At this point I suppose I could draw some conclusions or point out Bob’s missteps along the way. I assume readers can do that themselves. But I do think that starting a company solely to sell out is a long shot. You’re going up against people that do this for a living. They have deeper pockets, longer time lines, and less risk than you do. This is their game. They’re better at it than you.

Meanwhile, my quaint little lifestyle business looks better every month.

PopBox beats Lightbox

When I loaded up new screenshots a few weeks back, I decided to replace Lightbox 2 with John Reid’s PopBox. The more I see Lightbox, the more I find it annoying. It just seems slow. And no matter how many times I use it, I still hit the back button occasionally.

It turns out I’m not the only one. I looked at my web stats for the past two weeks and the number of page views matches the visits almost exactly. Looking at several previous two-week spans, page views are about 5% higher than visits. So the conclusion I came to is that visitors are hitting the back button, realizing their mistake, then returning to the page again.

So if you’re using Lightbox or Lightbox 2, check out PopBox. It’s fast, intuitive, and the script weights in at half the combined file size of Lightbox 2 and its dependencies.

How to Stop IE6 Caching Downloads

Update: The method described below will cause IE7 to drop the extension. A modified version is pending.

Until recently, I had no idea that IE6 cached downloads. I knew page and image caching were issues, but I didn’t know if affected exe’s and zip’s as well.

FlowBreeze 2.0 was released 11 days ago, putting some of the 30-day trial users in the bubble. They were using the 1.4 version, so they’d come to the site, download the new version, and install … Version 1.4?!?

One customer didn’t think I’d believe him, so he took screenshots of each step: clicking the download button, saving to the Desktop, and running the setup file, which clearly said version 1.4 on the screen.

Thanks to the folks on the BoS forums, I figured out the problem and wrote a little Javascript to resolve it. If you are running dynamic pages, server side scripting would be more robust. But if you’re all HTML like I am here at BreezeTree then this should work in a pinch:

function UpdateDownloadLinks() {
var i;
var linkLength;
var linkType;
var linkCount = document.links.length
var randNum = Math.round((Math.random()*10000));
for (i = 0; i < linkCount; i++) {
linkLength = String(document.links[i].toString()).length;
linkType = String(document.links[i].toString().toLowerCase()).substring(linkLength, linkLength - 3);
if ((linkType == "exe") || (linkType  == "zip"))
document.links[i].href += "?fid=" + randNum;
}
}

(N.B.: I haven’t played with Javascript in years, so if this code sucks, leave a comment below and let me how to make it unsuck.)

The script downloaded by clicking here.

Seven Motivational Techniques for MicroISV’s

Someone on the Business of Software forum asked how others motivate themselves to get working. This is a timely question. The jump from FlowBreeze 1.x to FlowBreeze 2.0 has been a long struggle. The code base has grown 3X and of course that doesn’t include the re-writes and thrown away code. Facing burn out in the final stretch, I’m pulling out every technique I can think of to get 2.0 out the door.

Below are the techniques I’ve been using. They don’t come from some motivational or time management book, but I’ve found they work for me. YMMV:

  1. ID all the mundane TODO’s that don’t require much thinking. Do those when you’re tired or lazy.
  2. Start writing your help file. It’s never too early to begin, and if you put it off until the end you’ll shortchange the effort. Some people might fit this under #1 above, but if you think writing a help file doesn’t require much thinking then you’re either a naturally good tech writer or your user documentation sucks.
  3. Edge into the periphery of tough problems. Pseudo code, helper methods, data structures supporting the tough problem - whatever it takes. Eventually they’ll suck you in, and you’ll forget that you were tired.
  4. Print out your existing code, sit in a comfy chair and review it. Make notes in the margins. It’s productive, you’ll find bugs or inefficiencies, and often you’ll spot something that motivates you to take immediate action.
  5. Back to the comfy chair. Make a list of all your TODO’s and break them into the simplest possible tasks. Find the easiest one and tell yourself you can’t take a break (or go to bed) until you do that one little thing. Typically, you’ll finish it then knock out a few more. Often, you’ll knock out a lot more.
  6. Use the technique Jerry Seinfeld motivated himself with to write new stand-up material. Keep a calendar and tell yourself that everyday you need to do at least one thing on your application. When you’ve done one thing, you can place an X on the calendar. The goal then becomes never to break the chain of X’s.
  7. Sit down and work. Sometimes the “just do it” thing really is the best motivator.

MicroISV Survey Results

The Business of Software blog posted Part II of their microISV survey. (Part I van be found here.) I have to admit that I was surprised by some of the low revenue numbers. But I’m one of those obstinate people who refuses to believe something when it doesn’t fit his world view. At least for a while, anyway.

Successful people are often too busy to spend time on forums, so they wouldn’t even be aware of the survey. Others just wouldn’t be interested. Business is war - why share data? My neighbor runs a successful microISV, and he doesn’t hang out in any online communities. He’s too busy. Scale that to the globe and you’ll have a good idea why I think the results of the survey may be skewed to the low end.

Still, I’m a data junkie and there are several data points I’d be interested in seeing. Are the microISV’s with two or more people more successful than one person shops? How do revenues correlate between B2C versus B2B apps? Of the successful companies, what’s the breakdown between those selling a small number of flagship products or a handful of smaller products? I have a gut feel for each of these, but I’d love to see the numbers.

The Piracy Loss Formula

Due to the recent incompatibilities between Vista and the crappy 3rd party licensing tool I use for FlowBreeze, I have been re-examining how I look at anti-piracy protection. I’ve decided it all boils down to a simple formula:

PL = F(SLS + SE + LS - DT)

Where, PL = Piracy Loss (i.e. the revenues lost due to software piracy) is a function of:

SLS = Support Labor Savings
The support time savings by NOT having to deal with crappy 3rd party licensing tool problems.

SE = Software Expenses
The money saved by not buying the forced upgrade to the just-as-crappy new version of the crappy 3rd party licensing tool that still fails on Vista.

LS = Lost Sales
The lost sales caused by installation and runtime problems which are due to the crappy 3rd party licensing software.

DT = Development Time
The labor to develop my own licensing tool and delivery mechanism to replace the crappy 3rd party licensing software.

The question is, should the formula be…
(a) PL < F(x) or
(b) PL = F(x) or
(c) PL > F(x)?

Obviously I wrote this piece because I think the answer is (a).

In the past few months, there’s been an spike in user-reported problems. First, there’s Vista. Putting a crappy 3rd party licensing wrapper around a DLL justing isn’t working on Vista. In fact, FlowBreeze won’t even install on Vista 64. Unfortunately, there have been a number of reported problems on XP as well. I haven’t been able to pinpoint the cause of the problems, other than sending users an unprotected version of the software resolves everything.

Did I just say that I was sending out unprotected versions of FlowBreeze? Yes, I did. In fact, I’m candid when people ask about it.

It’s a trust based system, and conversions for those who request a copy are much higher then the standard conversion rate. I think that there are two reasons for this. (1) The people who take the time to inquire are more interested than the casual downloader. (2) Most people are pretty honest.

Granted, the release of FlowBreeze 2.0 is just around the corner, so the risk of sending out unprotected copies is low. But it’s still nice to know that most of the people I deal with are willing to pay for something they value. Not only does that re-affirm my belief that (a) is the correct formula, but also that nascent microISV’s are better off implementing their own simple licensing system than relying on 3rd party tools with potential side effects.

The Next Great Link Building Scam

When Google rose to the top of the search engine food chain, they created several commodities. One of them was backlinks. Google’s algorithm places a premium on the number of incoming links to a site. The more incoming links a site has, the higher the site will rank. The higher it ranks, the more traffic it will get. The more traffic it gets, the more money it will make.

And so the link commodity was born. There are link building services, link brokers, link traders, social bookmarking services, directory submissions, and assorted other operations built around this new cottage industry. One of them, Text-Link-Ads, even has a little calculator to show how much you can earn by selling links on your site.

Of course, Google doesn’t treat all links as equal. Links from authority domains or on-topic domains weigh more than links from Joe Blow’s PR1 blog. But that doesn’t stop the link scammers. They’ve even developed nice little charts showing how to gain high page rank from masses of low ranking incoming links. And even if page rank doesn’t directly translate to high search engine result positions (SERP’s), that doesn’t stop people from buying and selling scammy links.

Back in college, I knew a couple of guys who would subscribe to magazines under the name Mr. William M. Later. Then they’d get 2-3 months of free subscriptions to Playboy, Sports Illustrated, Rolling Stone, etc. until the magazines wised up and realized that no one named William M. Later (aka, Bill Me Later) was going to pay up.

I was reminded of this when Andy Brice, creator of the legitimate 5-Cow ranked table planning software Perfect Table Plan, wrote a piece about the fake awards granted by some download sites. He created a fake piece of software called awardmestars (that’s AwardMeStars for the camel-case impaired). This software could have been written by William M. Later because it does nothing. It’s a text file with the extension changed to .exe and the product description even says that “this product does nothing.” And yet, many of the cheesier software download sites still awarded him 5 Stars.

Now that Andy’s article is making the rounds, I’m positive that more than a few link scammers will pick up on this. All they need is a text editor and a copy of Robosoft, and soon they will have hundreds of back links from low rent software directories. And I hope they do. If these software directories start getting bombarded with fake submissions, maybe they’ll actually clean up their act and stop accepting all kinds of crappy software and awarding these rankings worth less than a Commemorative Lincoln Medallion.

Coding the Old-Fashioned Way

My first programming experience was in Computer Math class back in High School. It was taught by Mr. “write this down and never forget it” Gray. Mr. Gray was a witty guy, but he wasn’t Mr. Witty. Mr. Witty was the Biology teacher, but he was actually kind of loony. But he wasn’t Mr. Looney. Mr. Looney was the calculus teacher, and he, simply put, was a bad ass.

One day, one of the guys in the gym was getting cocky after benching 300 for the first time. “Oh yeah, that’s nice,” says the 50-something Mr. Looney. Then plops 350 on the bar and knocks out 10 quick reps like a hot knife through butter. He then got up and casually strolled out the gym while we all tried to find our jaws on thre floor.

So the rules of thumb were, you never goofed around in Mr. Looney’s class, you never dozed off during Mr. Witty’s week-long lecture on photosynthesis, and you never ever ever got on one of Mr. Gray’s computers before checking and double-checking your code by hand.

I didn’t learn to program back in the Jurassic period when everything was done on punch cards. No, I learned later during the Cretaceous period when programs were run on mainframes. You had to dial your AT&T standard black rotary phone endlessly until you finally got a connection. Then you placed the phone’s handset into the modem cradle and you were up and running, ready to enter your FORTRAN or BASIC program.

Kind of.

If you made an entry error in your program, sometimes you had to start back at the beginning. Other times you got logged off completely and had to dial up again. Anyone nostalgic for those days must be daft. But the key point was that our school had a limited number of minutes per month, and the fastest way to a bad grade was to waste Mr. Gray’s time on the mainframe. So all code was written by hand and run only when you were as sure as possible that it would compile and run correctly.

Last night I was tired of sitting in front of the computer, but I didn’t feel like knocking off for the evening. So I grabbed a stack of paper and a pen and sat down in the family room, coding the old fashioned way. I’ve got to say it was great. There’s something about stepping away from the PC that helps focus attention and separate you from distractions.

I wrote several hundred lines of code, and when I was done it looked like a mess. There were strikeouts and arrows and itty bitty lines of code squeezed between other lines of code and wrapping around the edge of the paper. But I understood it. When I entered it in today, it ran. First time. No errors. I lifted my coffee cup in salute to Mr. Gray, wherever he might be.

What Every Online Vendor And Consumer Should Know About AVS

One of the more frustrating things about selling online is dealing with AVS mismatches. Sometimes you get an email from a customer complaining that your payment processor won’t accept their credit card. Most of the time, though, the sale is lost without notice - unless you’re scanning your transaction logs daily.

So What is an AVS Mismatch?

AVS stands for Address Verification System. It’s a system used to defer credit card fraud by checking the customers billing address versus the address filed by the credit card company for that account.

Seems pretty straightforward, doesn’t it? So why is it a problem?

The problem often comes from customers buying with corporate credit cards. I’ve experienced this problem a number of times, and every time so far the problem is that the customer assumes that the address of their work facility is the same as the credit card billing address of record. Often it’s not.

Three Common Scenarios

Here are three common scenarios I’ve had first-hand experience with AVS mismatches:

Small Businesses: With small businesses, sometimes the owner will register the card with their home address used for billing. That’s fine, but they do need to realize that their business address is not going to be the same as their billing address when doing credit card payments on-line.

Medium to Large Businesses: Another common case is when the buyer is located in one state and the corporate headquarters is located in another. Their billing address is usually the address of the headquarters - not their local shipping address.

Parent Companies: This is just another variation of the same thing. If a company has corporate credit cards issued in the name of the parent company, then the buyer needs to know the billing address that the parent company uses.

What Can Be Done?

If you’re a customer, then it’s pretty simple. Find out your corporate billing address and use that.

If you’re a vendor, then there are several things you should do. First, put a small note on your order pages for customers using company buying cards. Second, periodically monitor your transaction logs, looking for AVS mismatches. Third, if a potential customer emails you about a credit card problem, use the advice given here to determine whether this may be the cause of the problem.

AVS Is Good for Everyone

Now all this may seem like a hassle - especially if you’re a customer. But online credit card fraud is a rampant problem, and e-commerce providers take fraud detection seriously. So they really are helping businesses with these extra security measures.

But customers benefit too. You and I are all potential victims of credit card fraud. Online, the fraudulent buyer doesn’t even need your card - just the number, expiration date and usually the 3-digit verification on the back of the card. So AVS checks are a simple way to ensure that one avenue of abuse is cut off, protecting us all.