Archive by Author

Introducing the Bingo Card Creator website

If you’re wondering how good of a website you can get accomplished with Notepad, a free design from www.oswd.org, and about four hours of tinkering… well, here’s your chance to find out!  My website is about half finished and half is good enough to slap the word “beta” on and shove it out the door so, without further ado, I give you Bingo Card Creator.  I was hoping to have the Free Resources section done by tonight but I worked less than I usually do on account of having come down with a severe cold.

OK, where’s my checklist.

For the website, to be done tomorrow:

  1. Add in Free Resources, Screenshots, Support, About Me pages.
  2. Use Bingo Card Creator and my printer emulator to export some PDFs to add to the Free Resources section.
  3. Write thank-you page for customers who have made a purchase.
  4. Create popup page to detect if JRE 1.4 or above is installed, and create page to automagically install it for IE (this uses an ActiveX control — soooo evil).

Other than the website, how does the schedule look.

  • The program: I believe it to be of shippable quality, at least on PCs.  The installer is no-frills at the moment but I can juice that up a bit tomorrow.
  • Mac version: Not going to make it in time for release.  Its going on the back burner for the moment.
  • Data files for the program: I have about 12 and I want to ship with “dozens”.  Making them is relatively quick but I want to choose fairly carefully which are available on the website, which are available in the unregistered version, and which are available only in the registered version.
  • Payment processing.  Payloadz will be up within minutes after I have an executable ready.  eSellerate’s response time has been superb but I forgot to sign and fax in their contract today, so I’ll have to do that tomorrow and hope my account gets unlocked before launch.  If not, oh well, unlikely I’ll be getting many registrations on launch day.
  • Unexpected difficulty: It just hit me about three hours ago that I should probably include a license.  I’m mildly panic stricken as to the prospect.

Guestimating Market Size

When I told my parents about my plan to make Bingo Card Creator my father was very skeptical.  “Patrick, you know I love you, but how many teachers are there that play bingo?”  You’ll likely have to answer a question similar to this for your own product idea.  Here’s how I would go about answering it (although not to Dad, at least until I have a paycheck in hand — he ran his own business for years too, and while he’s not interested in software he has a deep appreciation for results).

One method of estimating a market starts with identifying your minimum qualifying feature and winnowing from there.  Suppose for the sake of argument I sell only to teachers.  How many school teachers are there in the United States?  Hey, that sounds like a Microsoft interview question… but since I’ve got the luxury of thinking it over (and having access to Goooogle), I can come up with a much better answer than a number pulled out of my hindquarters.

There are a few places that keep fairly accurate numbers of the number of teachers there are.  One obvious source is the Bureau of Labor Statistics.  There are 1,486,650 elementary school teachers in the United States.  Well, that was certainly easy.   So I’m going to sell 1.5 million copies?  No.

Now we winnow down from that 1.5 million.  First, how many of them play bingo?  I’ll be conservative and say thats no more than 10%.  (This is a number pulled out of my hindquarters).  We’re now down to 150k teachers.  Of this, how many are hooked up to the Internet and have access to a computer when they prepare for classes?  For a low-ball estimate, lets say 50%.  We now have 75k teachers who meet the minimum requirements for being interested in a bingo card creator.  75k sales, yaaaaay!

Not quite.  You see, there are free alternatives to buying bingo software or buying bingo cards, such as making them yourself or using my free competitors.  Free is probably good enough for most teachers — call it 60% that would never spend a penny on bingo software.  Of the remaining 40%, lets say half would theoretically like to spend the money but don’t have it in the budget and/or don’t have purchasing power at their school district or the will to spend their own cash.

So 20% of 75k means there are 15k American elementary school teachers who run bingo games regularly and could potentially be convinced to buy software.  If I can sell to 1 in 10 of them, my market size is about 1,500 users.  And there we go.  (That is, incidentally, not a sales projection – there are other gates they have to make it through, from not buying from a competitor first to finding my software exists to installing it to handing their credit card numbers over to a barely trusted party to…).
Another method of estimation is to figure things out from the bottom up.  For example, Yahoo receives about 10k searches for bingo cards every month (they will happily inform you of this at Overture).   If we assume that only 20% of those folks are actually interested in teaching with bingo (as opposed to gambling), thats 2k searches per month from qualified buyers.  Somebody probably has decent statistics on this but I’m guessing people are calling it quits after about 2.5 searches on an item, so thats 800 unique users searching per month.  If Yahoo holds 40% of the search market, then there are give or take 2k unique users per month searching for educational bingo software.

So, anyhow, long story short: There does indeed exist a niche to target.  Can I do it successfully?  Well, we’ll find out soon.

My Competition

(If you haven’t read it yet, you might want to hear about my product first.)

I’ve mentioned previously that my original inspiration for Bingo Card Creator was hearing a teacher ask for it after searching fruitlessly. I also searched. There are direct competitors to my product, but even the ones targetted at the education market fail to provide key features to my users (or I’d better pray they do).

I wish them the best of luck in their endeavors, incidentally: I’m setting out to do one thing very well and intend to do so, but my product won’t be right for everybody and I would be genuinely pleased if everyone continues to have whatever successes they are looking for. That being said, I’m playing at being a businessman at the moment so I’m going to offer my opinions on why there exists a niche which is being under-served, so my evaluation is necessarily going to sound critical.
The Top Search Result In Google For “Bingo Card Creator”: they’ve got a free version and a paid version.

Free version: A CGI script which generates 3×3 or 5×5 bingo cards. You must supply your own words. The output can be printed from your browser , but a coding error makes it look less than spectacular (your word list gets printed after your bingo cards, the selection to make a free space is not respected). No customizability.

It lacks a core feature for my target audience: printing multiple cards at a time. After you have entered your word list (which you can’t save), printing 25 copies (a classroom worth) requires *seventy five* (next page, print button, OK, repeat x 25) additional mouseclicks and 25 page loads. They can’t offer an entire lesson in 5 minutes like I can.

There is also no option to print multiple cards on a single page, which is important for saving your paper budget. Do you know how much money the average school spends on paper every year? I used to work for an office supply company. Our educational orders would boggle your mind. Teachers are big believers in “reduce, reuse, recycle” for a reason.)

Paid version: $29.99 a year. Creates “advanced” bingo cards, which is a feature bundled with a lot of much more broadly useful features: ability to print rubrics, worksheets, etc. I don’t have $30 in the budget to test out what the advanced cards look like, but I assume it involves saving cards and probably respecting the “free space” button. This is quite possibly an excellent resource for a teacher seeking a package of instructional aids which includes a passable bingo creator, but isn’t attractive just for bingo.

Most free web-based bingo generators suffer for the same flaws as the above so I won’t review any other ones.

The Best Solution I’ve Seen: You have to hunt for this one on the search engines, but if you assume my customer has infinite time to research they will eventually land at a site like this. 2 to 4 cards for a page, 5 pages at a time, the interface offers flexibility and respects user choices, and outputs to PDF for easy printing. You can choose font size which a) is important to teachers (little kids and old folks get big fonts, its just the way of the world) and b) lets the user, with a little effort, avoid edge cases like the one I was talking about yesterday.

For $10 you can upgrade to a premium version which is pretty hard to differentiate from free: it will let you make a call list but this is a luxury item, not a necessity, for a teacher (you can always just use another bingo card or pick items psuedo-randomly — remember, you will be using lists that you have taught every year for your entire career, its not like you’re going to forget that the letter “Y” exists or that “the” is a sight word).

There’s no ability to save word lists in either version and they only offer ~10 custom word lists, and you can’t make a list with a number of words not equal to 25 (thats, well, problematic — try doing “countries of Latin America” bingo some time).

Typical Software From Mainstream Educational Publisher: $35 ($45 on CD). Their site licensing is also more expensive for most schools than just buying multiple units from me, although I should probably include a site licensing option at some point to handle orders which come from the administration and not directly from a teacher. Free trial limits you to basic math facts (I think that might be a tad overfocused). Functionality similar to my program, with customizability for the header (Name Date Class etc). Although the linked publisher doesn’t, many publishers sell the software by the year.

Non-software solutions: You can just buy bingo sets from many educational publishers, and many teachers do (the fact that they do proves the existence of a market). The main value is from the cards themselves. You get one set of cards (which teachers frequently photocopy) restricted to a single subject or word list, are limited to what the publisher has in stock, and can expect to pay about $10 for every unique bingo game you run in a year.

My own trial version (no link yet): All uISVs with a free trial need to understand that they compete with themselves for their customers. I’m going to talk strategies for dealing with this most dangerous of all competitors in the next post.

Unveiling The Software & Market

It seems unreal that something like five days ago I had no code and today I have a fully functional program to do what I set out to do.  While its still being fine tuned and the website, payment processing, and marketing campaigns are in their infancy (keep checking back, though, because this baby is growing fast), I feel absolutely confident that I will be able to launch this software at some point in time.  And if you’re still reading this, you are probably interested with what I am doing. Well, whats the harm:

The title: Bingo Card Creator (short, sweet, currently unused, and will hopefully work well for organic search results)

In a sentence: Bingo Card Creator lets you print custom bingo cards on your own PC or Mac.

The elevator pitch:  Bingo Card Creator lets you print custom bingo cards on your own PC or Mac.  You can use your own word list or pick from one dozens we provide you with, covering subjects ranging from early childhood, phonics, elementary vocabulary, ESL, basic numeracy, math facts, geography, foreign languages, and much much more!

The market niche: I made a decision very early on that I was going to target primarily educational users.  My advertising copy and web site reflect this.  There is obviously a gigantic market out there for bingo as a gambling product — it is well served, has high barriers to entry (including, as I discovered accidentally while trying to make my first Google AdWords ad, the fact that many search engines don’t let you use paid search to promote gambling — I’m applying for a dispensation as we speak), and doesn’t interest me.

And we're feature complete

Finishing up the tweaking on printing took 6.5 hours, about what I expected.  Much of it was banging my head into the wall — I’ve got a particular sample data set which I want to provide to my customers as a “freebie” with the full version of the software.  Its the sort of thing I hope will motivate someone to buy my product, as none of my competitors have it and its off-the-shelf ready to make you a lesson plan and save you hours of work.  The problem is this particular data set excercizes an edge case: but what if someone includes a really, really long word in a place we’ve sized for words of more moderate length(say, 10 characters).

What if indeed.  The answer depends on what flavor of JComponent you are using to display the word, what container that component is in, what the layout manager of that container is, what your locale is, and a whole host of factors.  In the typical case most JComponents, including JLabel and JText area (the obvious choices for formatable text), will truncate the word.  And they will unfortunately do it without firing any special notifications or causing getText() to return a different value than the one you originally provided it.  The first chance you’ll have to notice “Hey, that looks funny” is when the word appears on the screen like “Java decided to tr…” (“Java decided to truncate me!), or worse, when that appears in your print output.  Luckily, I have a virtual printer which outputs to PDF, so I saved myself wasting ~50 reams of paper fixing this sucker.

In case anyone is searching the Internet looking how to fix JLabels with chopped off text, here’s the best I came up with:  first, identify the Container one level above your component that is experiencing truncation.  Then, change that component’s LayoutManager to be a custom subclass of whatever you were doing before.  Override the layoutContainer method to both call super and do the following:

Check to see if your component which can have problems is having problems by calling its getFontMetric() method, and use FontMetric.getWidth(insert correct text here) to figure out how many pixels that takes to display.  If thats less than the width of your component (include a fudge factor or you’ll see some pixels get chopped off on occasion), you need to change the font on that component to one of a smaller size.  How you do that is up to you, but I used a while loop with a safety cutout at 6pt because otherwise you will get an infinite loop on the next step for extremely large strings.  After you’ve set the font to the new smaller font you need to call your super.layoutContainer method again, or else you may not see any changes.  I chose 6 pts arbitrarily because I thought anything smaller than that would be totally useless and I needed *some* safety value.

This was pure pain to have to discover but I think its worth the price of admission for this week by itself.  I got a tour of a section of Swing that I never had dealt with before (LayoutManagers under the hood), and got a coding gem out of the deal which I can reuse again later *and* which solves a vexing problem in my line of work (localizing Japanese to English and English to Japanese makes for some very fun times with anything that relies on any assumptions about physical width of strings, let me tell you!)

Anyhow, the upshot is, fixing two little edge cases in one little data set in a freebie I’m giving to customers took me four hours.  Was this productive use of my time, given that I could have achieved the same effect just by not including that data set and hoping customers didn’t notice on their own?  I think it was — while its entirely likely that many prospects will never see the edge cases during their time with the demo unless they use input I supply, this adds a bit of spit-and-polish my competitors in many cases lack *and* allows me to make use of more “freebies” than I would be able to otherwise.

Development plan for the rest of the week

1) Finish, tweak, and test test test the printing code. I think I’m going to move Print Preview and document templates into version 2.0 — they’re wonderful features for my customers but the program is usable and worthwhile without them, and the sooner I can put this out on the Internet the sooner I can start getting feedback. Expected time: ~6 hours
2) Finish adjusting the CSS file to suit final design of my website. Expected time: ~1 hour
3) Write ~5 pages for website, including product information, buy it now, sample lesson plans (SEO bait mostly), about us, etc. Expected time: ~2 hours
4) Finish data generation for my (very lightweight) document by wizard feature. The full-on templating system in 2.0 will likely replace this. Expected time: ~3 hours
5) Write advertising copy for eBay and Payloadz, continue eSellerate setup process. Expected time: ~2 hours
6) Design Google AdWords advertising campaign. Expected time: ~1 hour

Thats 15 hours of work, which would put me at halfway through my working time on Friday, leaving all of Saturday for dealing with launch issues. Yay for projects which stay on schedule.

The Joys of Open Source

In addition to the two bits of code that have saved me hours of searching in documention, I owe a big thank-you to Open Source Web Design.  They collect hundreds of freely available designs (CSS and sample HTML files) which you can use or modify to suit your needs.

I am a fairly competent HTML programmer and was going to bang out my web site by myself (contrary to my own advice below, which was hire an expert: I just don’t have it in my shoestring budget). However, I’m not a designer: I’m barely competent enough to pick a color coordinating outfit in the morning, much less design an aesthetically pleasing website. I found a nice, bright, inviting site design available through the Creative Commons license (the author gets a little credit at the bottom of my site) which was about 90% of what I wanted in a site design.

The other 10% I can accomplish by myself: resizing to make it work at 800×600 (consumer/educational market = don’t target a large screen), add some image support to the sidebar for buy-it links, and reformat around the banner I had designed the other day.

The Sorrows of Java Printing

I spent another six hours on the project yesterday. Four hours was spent writing printing code, which is suprisingly difficult in Java (as soon as you’re not printing plain text on the default printer God help you).

On the plus side, writing mountains of boring code is one barrier to entry. I think it accounts for the paucity of programs solving my need at the moment: most of them are web apps which delegate printing to the browser (which elegantly solves the printing problem at the cost of depriving you of fine-grained control over your program — I’m praying my output clocks the web apps on visual inspection). One of my shareware competitors (one of only a handful who have a desktop app) has apparently discovered the same thing: their program, on Download.com, lists as one of its limitations (paraphrased) “sometimes introduces random output into printed documents”. Thats hopefully something I can avoid.

Anyhow, my quest to get a document formatted exactly the way I wanted it involved tearing up my code about three different times, because I had tried a variety of approaches to printing it. The quick-and-dirty way to print formatted text in Java is to print as HTML. Unfortunately, I discovered belatedly that many printing services my customers will have installed do not support printing HTML directly (whoopsie, I’m spoiled from work).

So, having already gone to the trouble of formatting it as HTML, I decided to make an EditorPane and initialize it from that HTML, then print the EditorPane. Now, while I’ve been programming AWT/Swing for going on 6 years now I’ve never before had to play with EditorPanes that much, and there are some gotchas.

Gotcha #1: EditorPanes render HTML differently than either IE or Mozilla, and in particular they just *can’t* render some HTML elements I need to do (like, say, correctly specifying the width and height of table cells).

So I did it the way I had dismissed at the outset for taking too long — creating my own printing object offscreen and printing that — and, applying painful experience that I got along the way, stripped out 80% of my code and had it done in about 2 hours.

Now, there are some other issues with printing in Java: lets say you want to print a Swing Component. Good for you, but there is a dead zone in the Java API as far as printing services are concerned: Java will format the output and get it to the printer for you but you have to accomplish things like, e.g., printer discovery, etc more or less on your own.

I was saved by freely available code which walks you through the whole printing process. While I had to essentially rip its guts out because I need more finegrained control of printer settings, I would have been lost in confusing and incomplete Java documentation without that site. Hats off to you, professor. (Note: the code is public domain, not GPLed. As an off-again, on-again OSS developer myself I try to be religious about respecting license restrictions.)

The Pros and Cons of Java for uISV

My application is developed in Java, a decision I made with some trepidation.  Lets start with the reasons people generally give to be afraid:

  • Java requires a seperate runtime from the application itself.  Most of the Internet does not have a JRE installed, and roughly half of the installed JRE base is the ancient MS 1.1 which is a pain to code for.
  • Java is slow.
  • Java applications are ungainly, ugly monsters.  Especially the Swing apps.

Here are the counterbalancing points in Java’s favor:

  • Despite the flaws in “write once, debug everywhere”, Java is still one of the easiest ways to quickly port a desktop application.
  • Java can quickly deliver a professional looking GUI.
  • Java’s best IDEs are free, along with everything else you need to get your application running.

First, I am not sure whether “users don’t, in general, have the JRE installed” is accurate.  Mac OS X, a major market for me, ships with it installed.  Java has some nice viral characteristics (after you decide to install it on your computer once it persists for years), and with the increasing uptake of broadband I don’t think the 18MB JRE (or the 7 MB mini-install) are the gigantic stumbling block they were back in, say, 2001 when all the “Java will never work on the desktop” articles were published.  Getting accurate statistics on Internet users is like herding cats, but www.thecounter.com registered 89 million hits this month and some 95% of them had a version of Java installed (I’m guessing a large number are MS Java 1.1, which is less than helpful to me, but there you go).

Then there is the work around to not having a JRE installed: I am creating two seperate distributions of my program.  The Mac version is, at the moment, just an executable jar file.  The PC version is wrapped in Launch4j, an open source native Windows executable which, for the price 21kB, wraps your JAR in an .exe, allows you to display a BMP splash screen while the JRE is loading, and (perhaps most importantly) will handhold your customer through a JRE install if the minimum JRE requirements are not met.  Granted, the JRE install is not for the most casual users.  It weighs in at 18 MB, which is more than a coffee break.  However, with their web install version you can cut that down to 7MB and about ~4 mouse clicks.  Which is certainly more than zero, but doable even on dialup (~20 minutes on 56k).  It thankfully does not require a restart anymore.

With regards to speed: Java is just not slow at what I am doing if you are using a computer which is anything close to recent.  Starting up the JRE takes a few seconds which I can handily cover with a splash screen, and then I display another splash screen for 5 seconds offering them the opportunity to upgrade to the full version before dumping them into the main window.   On my PCs at work and home the entire process takes about 10 seconds, and all of it is hopefully at least minimally engaging to the user.

Anyhow, on development environments: Visual Studio .NET would also let me build a compelling graphical application in a reasonable amount of time, but while I’ve got a legal license at work I don’t at home.  I’m just not enough of an expert with the Windows APIs to do a GUI in a reasonable amount of time without the .NET safety-net under me, and I don’t know of any free alternatives which can touch the combination of Netbeans or Eclipse plus the Java libraries (ugly, ungainly beasts though they are, I’ve cut my teeth on most of the ones in the critical path already).

The Original Conception through Release In 7 Days Story

Brian Plexico has a description of how he released a moderately successful product in just seven days.  This story, among others, helped convince me to actually take the plunge into the business.  I think the key here is a) finding an unfilled niche and b) targetting it aggressively.  If you are the sole source in the world for software to fill your need, and there are people who are actually hurt by that need, then people will be happy to pay you money to ease it for them.  It doesn’t matter if the need sounds trivial to people who don’t feel it, or whether another developer could do the same thing in their lunch break.  Well, OK, if you actually get to the profitable stage you have to worry about someone doing it on their lunch break and competing with you.  But its a wide, wide world out there and there are an embarassment of niches which have never caught the eye of somebody with rudimentary programming expertise.  Including, apparently, skeet shooting software.