Archive | marketing RSS feed for this section

Heh, Amusing New Link

Waaaaay back when I was deciding what to call the program that eventually became Bingo Card Creator I looked into the possibility of calling it Teacher’s Pet.  I have since learned about good practices for naming B2C software and that idea strikes me as extraordinarily silly now.  Luckily, I was prevented from actually calling it that by folks owning all the obvious domain names, including www.teachers-pet.org .  I then looked at Bingo Card Maker (taken, rats) and then settled on Bingo Card Creator.  I forgot totally about teachers-pet.org and then got a blast from the past today reading the logs — a decent sized trickle of users coming from them.

Apparently despite the PR2 they’ve got quite a number of regular users, because they put up a link to me about a week ago and its getting fairly steady traffic at about the same level as my AdWords campaign, and converting pretty well, too.  (14%, just a few points off organic search traffic)  I didn’t have anything to do with them putting up the link but, hey, I’ll take it.  Its always nice when folks take time out of their day to do your marketing for you.

Why Your uISV Should Have A Blog

My post on Free Bingo Cards, which is two months old, received a hair under 1,000 hits in April (thats three days worth of weekday traffic for my website — not shabby!).  This resulted in ~100 trials of my program and 5 sales, or roughly 20% of my sales for the month (full monthly stats to follow sometime this weekend).  And the kicker?  That post is an evergreen — it never goes bad.  It continues to pick up search engine hits, links, emails to friends, yadda yadda, and keeps making me money.

One more big thanks to everyone who linked it.

AdCenter Actually Performs Quite Decently

Volume?  Low.  Interface?  Annoying.  Work flow?  Terrible.  Cost per download?  Half of what Google is, and this required no tweaking whatsoever.  I’m buried under about four ads for places like Amazon which apparently bid on every word in the English language, but with no effort the following ad got about 4% CTR and, much more importantly, costs less than 30 cents per download it drives.  That is my target for reasonably profitability with advertising. 

 Print Custom Bingo Cards

Be ready in minutes using our software.  Download our free trial now!

http://www.bingocardcreator.com

 

 This might do a bit better if I did some optimization.  I don’t know if the time invested is worth the volume, though.  We’ll see.

Simple Changes Fixed Adwords

Regular readers know that my AdWords campaign, which I spent a great deal of time optimizing back when I started my business, has been not performing well for the last several months.  I have recently fixed this — amount spent is down 50%, CPA (cost per marginal trial download) is down 50%, and conversion to purchases is now measurable.  I get $2 in purchases for every $1 on AdWords, as opposed to $0.60-0.80 as of a month ago.  I might be jumping the gun, as this is just my results from one week, but tentatively I think my tweaks worked.

What I did:

  • reenabled position preference.  For queries like “make bingo card” which I practically own, Google was happy to give me the #1 ad spot.  They then charged me about 15 cents for it, and I have an extraordinarily high click rate (something like 8 to 10%, depending on query).  That can end up burning my $3 per day very fast.  Now,  folks looking to make a bingo card are good prospects for me but not GREAT ones, since they may well be looking to make numeric bingo cards and they can do that cheaper elsewhere.  (If they’re looking to make cards for class on Friday, on the other hand, I very well might be the best site on the Internet for them, if I do say so myself.)  So I said, you know, let someone ELSE have that #1 spot.  (Position preference #2 through #10)  This let one of my competitors for the spot have it, and they get to pay 15 cents (or more, probably, since they don’t have my CTR for that keyword — most of my competitors, incidentally, are folks like Amazon who mass bid on every keyword under the sun).  I get the #2 or #3 spot now, for 10 cents.  It also comes with customers who appear to be more likely to convert (30% vs. 22% for trial).  Savings per download: 50% (45 cents vs 22 (!!!) cents).
  • Killed underperforming keywords.  If they had a CPA greater than my expected profit per download (about 40-50 cents), no matter how good I thought they would be personally, I nixed them.  “How do I make bingo cards?”, etc, got voted off the island (CPA was over a buck!).  My only remaining keywords are my A-team, and I need to see if I can’t recruit a few members this week (since my total spend now is half of what I want to be able to budget every month — heck, as long as its actually sustainably profitable it makes sense to increase it, right?)

A Good Day

Aside from being genuinely useful at my day job today, I woke up to a bit of good news this morning.  A huge influx of Thai pirates?  Well, OK, I woke up to that too, but as for the good news:

Between September 1st and September 6th I sold approximately $100 worth of software, which was fantastically good considering there was a holiday weekend in there and when school isn’t in session my sales trend to close to zero.  I stashed it away in my bank account to cover this month’s AdWords bill ($90, give or take), and then everything I made for the rest of the month would be gravy, since I don’t have any capital purchases planned.  (My hosting is covered through December, and the only other expense running my business aside from my time is $5 a month for e-junkie.)

So last night I went to sleep obscenely late after a hard night of eating dinner, blogging, and working on one fantastically interesting puzzle (I love puzzles, incidentally).  And when I woke up in the morning, it was to the lovely sound of You’ve Got Money!

And it was, relatively speaking, a lot of money.  Not like Daddy Warbucks a lot of money or even “I just sold a $500 developer component” a lot of money but definately “Hmm, I think I will get a Wii on launch day afterall” a lot of money.  Here’s a comparison for you: frequently, my father has remarked that I could just teach English lessons and make more money than this project, which is strictly speaking probably accurate at the moment (although its hard to find students who want to study between the hours of 10 PM and 2 AM, where a lot of my development hours were spent).  My one class a month that I currently do as a favor for a friend runs about 3 hours and I get paid $40 (below the market rate but, again, I only teach it so my friend can take one night a month off and spend some quality time with her new husband).  If I were really serious about getting my own students and all the hassle that would entail, I suppose it would be closer to $80, and it would still involve the opportunity cost of doing absolutely nothing interesting on a Saturday night.  Well, aside from teaching English, which I do enjoy but which is not the most enjoyable use of most of my Saturday nights.

And this morning, well, I earned rather more than $80 for… sleeping on a Friday morning, and firing off two emails when I got up (“Sorry to hear that, I’ve refunded your money” and “Que los estudiantes aprenden bien de eso juego de bingo interesante!”*, if you must know).  Elapsed time, four minutes and thirty seconds (I watch the clock in the morning because I am in perpetual danger of being late to the day job), not counting the sleeping.

And in the near future I hope to be taking a young lady out for a plate of sushi and the business will happily continue running itself while I do.  Yay.

This whole “do a little work once and keep getting paid for it for a while” passive income thing certainly has its benefits.

* The last time I addressed a customer in a language which wasn’t spelled out in my job description, at a job a number of years ago, it required: HR to be conferenced on whether I was the best person available, my boss and group manager to be briefed on the situation, a call to the help desk to make sure my phone’s automated recorder got turned off because Legal was unsure they were covered with respect to this customer, and VP level approval for a deviation from the standard operating procedures with “unpredictable legal and marketing consequences”.  All of that for a three minute phone call.  (I won’t mention who I was working for at the time, but suffice it to say the customer was offered cookies as our way to apologize for the delay.  Even great companies, and I am convinced that employer was and is a great company, have their hangups.  Had they been less of a great company, their VP would have taken the easy “Permission denied.” way to kill off a troublesome order worth less than his hourly salary.)

This is one of the lovely things about being a teeny-tiny slip of a company: you can outmaneuver the guys who have sixteen levels of managers to report to before anything as significant as a pleasantry can be exchanged.

Writing a Customer-Focused Blog

This is most definately not a customer-focused blog.  Why?  Because essentially none of you want to buy Bingo Card Creator, nor am I hoping to convince you otherwise.  My typical reader is, I think, either running a uISV or thinking about doing so, or someone who is in general interested in the business of software.  You know who Joel Spolsky is, can provide a pronunciation that goes with “/.” , and have at least some idea of what AJAX is.  My typical customer, on the other hand, has no clue who Joel Spolsky is.  She thinks “/.” is what happens when her kitty or 6 year old start banging away on the keyboard.  AJAX is either a cleaning product or, if she is of a literary bent, a hero of the Trojan War (my typical customer is quite intelligent, she’s just not technical, and woe unto the uISV who thinks this is a contradiction in terms).

Why did I just belabour that point for a paragraph?  Because I’m about to tell you that despite my total lack of experience doing it, you can write a customer-focused blog, and it can be a great marketing tool.  And better than tell you, I’m going to show you.  I was inspired to do this by a post on the Business of Software earlier today.  I think the general tone of that thread is mistaken: in the first place, I think the majority of the advice you’ll find on that forum is excellent or at least good to hear even if I wouldn’t follow it myself.  In the second place, there is a lot of tension between people who want “specific” answers to their questions who won’t put out specific statements about what they’re doing.  Many people have their reasons for not being very detailed about their own situations, and I respect that choice, as I respect the choice of folks to ask vague questions like “My software isn’t selling enough.  How can I fix this?” as long as they understand that the answers they get are going to be vague, too, like “Try blogging.”

But, seriously, try blogging.  Writing a bog about and for your customers, as opposed to about and for your business, is a great marketing investment.  It humanizes you, it gives you “street cred” within your community (people above the age of 25 call this “goodwill”, which I don’t use because its defined in the dictionary as “Money spent on marketing which we can’t prove was wasted and so want to claim as a success to the boss”), it drives qualified traffic straight to your website, and it is mana from heaven in the Search Engine optimization game.

How blogging works: Yeah yeah, I know, you know how blogging works.  You’re here, after all.  In fact, I’d give 50-50 odds that you got here from either a feed reader or a blog or other information gatherer you read every single day, the same way my father reads the Wall Street Journal.   But indulge me as I present to you the Pyramid of Participation, a concept which has been done to death before by smarter people and so which is perfect to hold off on.

The Pyramid Of Participation

This artistic masterpiece represents sort of the Power Law of Blogging: of any given blogging community, 1% of the population actually blogs.  Those are the creators.  10% of the population contributes to the blogs — they comment, they tag, they submit their favorite stories to Digg/Slashdot/Reddit, yadda yadda.  And the rest of the folks have lives.

Why is this critically important for you to understand?  Because most bloggers consistently pitch their blog to Creators or Contributors, because most bloggers want links and recognition and those folks contribute that in spades.  You, however, want cash money for your blogging efforts and as a result you’re going to want to pull a Seth Godin and invert the pyramid (he calls it “inverting the funnel”).  Fear my massive Paint.NET skills:

Pyramid of Participation Inverted

Basically, what you really want to do is encourage those folks who are really only passively engaged with your blog to become actively engaged in it.  How do you do this?  You give the people what they want.  What do the people want?  Your call, you know your audience far better that I do or ever will.  In the vast majority of cases.  There is exactly one uISV out there I feel qualified to comment on besides a certain outfit that makes bingo cards.  Its Declan Software, which as a fraction of their business produces resources to help Japanese students study.  Been there, still there, done that, still doing that, got the battle scars to prove it.  And conviniently Ethan, the owner, wonders if blogging would work for all markets.  Well, lets talk about that.

Blogging is for bloggers.  Ever noticed how poetry is for poets?  Really, if you find anyone who has even a passing interest in poetry these days, I guarantee you they have a scrapbook somewhere where they’ve got some free verse just waiting to see a publishing offer if they only had the time.  This is because the poetry community is insular and inbreeds intellectually far more often than is healthy — and if the connection to blogging doesn’t immediately jump out at you, you need to develop more of an ability to laugh at yourself (yes, I’m talking to YOU, Mr. I Only Have 15 Feeds In My RSS Reader).

Anyhow, blogging is traditionally for bloggers.  And this is bad, because unless you’re pitching products to the 53,651 members of the Silicon Valley echo chamber, who probably run an average of 16 blogs apiece, not counting the Squidoo Lenses and other “I can’t believe its not blog” innovations which I haven’t heard about in rural Japan yet.  Because it means lots of people who would buy from you, but don’t blog, won’t hear about you.  Unless you give people an incentive to tell their friends about you, or let them find you on search engines.

Yeah, like that will work: It will, if you can convince twenty people that your blog has something useful to say.  Plus or minus two.  Twenty people all tell a couple of friends, and then one of their friends posts you to a message board, and then five people on the message board tell your friends, and you get picked up on another message board, and then somebody posts you to #INFLUENTIAL_SITE_IN_YOUR_COMMUNITY, and then suddenly BOOM your blog is popular and you have to feed the beastie every day.

Yeah, heard it before, its a pipe dream:  Well, I only know what I know, but I’ve got a pretty amusing graph sitting somewhere on my WordPress interface showing a trickle of hits, then me hitting about twenty visitors, then sustained (and pretty spiky) growth until I hit 20k uniques a month.  In, hmm, two months.  While I was writing as an idle hobby about a business I run as a mostly-idle hobby on top of holding down a day job.  For folks who are serious about using your blog as a promotional tool, I think you can make my 20,000 hits a month look like chicken feed.  You just have to give people what did they want.

So what did we want?  Well, I’m guessing most of you came in because I had a combination of something almost nobody else did (a transparent business — not a big business, not a successful business, just a transparent business) and a few articles which folks actually found genuinely useful.  Maybe, oh, I don’t know, a dozen over two months.  About 20 people were intrigued enough by the initial concept to keep coming, blogrolling and linking followed, and with just a tad of promotion on my part I started ending up on the front page of WordPress a couple times a week.  Now, I’m helped by the fact that my blog is interesting to a community which has a lot of mechanisms for getting the word out (the Business of Software boards, lots of blogs, joel.reddit.com, Digg, Slashdot, yadda yadda), but the Internet is a very wide open place nowadays.  I get hits to my actual business site from sites with x0,000 users whose common interest is teaching elementary school English: its like Dick Slashdot Jane in their community, everybody who is online knows somebody who makes it a daily routine to check the buzz on that site.  (Do you know where your user base hangs out?  Because if you don’t, I’m worried for you.)

So how do you get folks on that really large site to come visit your site and buy from you?  Well, an introduction from somebody they trust helps wonders.  Ah, problem is, they don’t trust you and you don’t know anybody they do trust.  So start up a blog, and give folks a reason to start trusting you.  One way to do this is by giving them stuff.

Folks love getting stuff for free: You’ve got a trial version so you understand this concept: have pain, have widget which partially alleviates pain, induced to spend money to buy Premium Registered Widget which completes the promised pain relief.  Guess what, information can be a widget, too.  If you write stuff of use to your target audience, how-to’s, things they are genuinely interested in hearing, etc, they will beat a path to your door.  I have taken the liberty (without permission — mea maxima culpa) of writing two articles plugging Declan Software’s product, in the course of providing stuff which is genuinely useful to people, like me, who are studying for a very difficult exam this December.  (I do use their software, and I like it, and I’ve plugged software I liked before here, so might as well have an ulterior motive for the plug).  These could just as easily have come from a clearly marked staff blog — not saying that Declan Software should have a blog, but saying that if they thought it would make sense for them I bet it would turn out well.

Here’s one reason: Google loves blogs.  Can’t get enough of them.  WordPress shows me what search engine queries hit my blog every day, and I end up on the first page for random, high-value queries sometimes shockingly fast even when not trying to do so.  e.g. “teach yourself kanji” after writing a post tangentially about the Japanese language some weeks ago, back when this blog had no reason to be Google-ranked for anything and certainly not that.  Somebody searching for “teach yourself kanji” is a pretty good prospect getting to know Declan Software, or at least their Japanese department.  You don’t have to get him to buy in that browser session — just try to get him to take a positive action to you.  Maybe induce him to come back tomorrow, by promising a Kanji of the Day, or answer a burning question he has, like “What do I need to do to pass the JLPT this December?”  (The second of these is a much harder sell than Kanji of the Day — I think you should probably have a mix of both on your blog.)  You start ranking for queries quickly, too — less than 48 hours ago I started talking about registration systems and now I’m getting rather more hits for “how do I break shareware time limit” than I rather care to think about.

And then get him to tell other people.  Japanese language learners and enthusiasts (the anime crowd) are typically young, high-school to college, and they congregate online in all sorts of places.  Chat rooms, Facebook, what have you.  They practically live on instant messenger and the word “hyperlink” does not scare them.  And everybody who is studying for the JLPT knows somebody else who is, probably several someones (misery loves company).  So when you produce things which are genuinely of use to somebody, like answering “Hey, how many points do I need to pass this test?” (come on, you were a college student once, do you give good odds that you would have found your application packet and hunted for the answer or would you take the shortcut and ask Google or a buddy?), they might pass it around to other folks they know.  Who might stick around for other interesting things you’ve got on the page.  And pretty soon, you’ve got your twenty.

Speak your customers language: You blog needs to have a voice, and it needs to sound like your customers.  The easy explanation for why this is important is “Because Google is scarily good at long-tail queries, and you’re much, much more likely to rank on these if you write like your customers write than if you don’t”.  The other reason is because people are much more likely to introduce their peer group to people who they know are already peers.  On this blog, I can occasionally be jocular and I sling the tech jargon with the best of them.  On my actual website, I speak like an elementary English teacher (note: I hope I authentically sound like an elementary English teacher, because I was one for a couple of years).  Your customer likely does not care about the technology you are using, the difficulties of porting your code to .NET, the bug that nearly wiped out your version control system.  Your customer likes to hear about themselves, and their interests, and every once in a while how your product helps them further their interests.  Which is why my test-postings for ReadWrite Kanji barely mention the product at all, except at the end.

Have a goal in mind for every post: You can tell my blog isn’t that much more than a hobby because I definately don’t do this.  A lot of my posts are like “Here, I have something to say.  Alright, I said it.  Well, tata, see you later.”  If you are writing a customer focused blog, “Tata, see you later” is a waste of your customer’s time unless its the sort of “See you later” that means “I will pick you up at 7:00 this Friday and I hope you like Pirates of the Carribean because thats the movie we’ll be seeing”.  The sample posts have clear goals: Kanji of the Day wants to be Japanese blogging crack.  I want a portion of the readers who see it to be enlightened and intrigued by that post, and to make a note to themselves “Wow, I want to come back tomorrow, when I will get another kanji to master”.  Studying for the JLPT wants to generate a trial download for ReadWrite Kanji and, perhaps, an authorative mention to a friend or community the reader is a part of: “I saw this post earlier about the 2-kyuu.  Good stuff here!  Check it out.  God I hope I pass.  What was the assignment for tomorrow?”  Notice how I end both posts with a call to action and include relatively little extraneous stuff that could draw folks away from my site.  (Now, one place I’d suggest a link is near the top — folks who are just getting into your article don’t want to click away from it quite yet, so might as well send a kickback to whatever source you’re using and just as imporantly end up on their list of Trackbacks so that they can see this nice person who Cares About What They Have To Say.  Bloggers love that.  I’ve got a soft spot for this, too — probably 70% of the incoming links I get in an article get me to respond to the article in some fashion.)

Offer a mix of content:  You don’t limit yourself to one type of pitch on your AdWords, and you don’t have just one take on your product page, why have a blog which is a one-trick pony?  Experiment, and let people know you’re doing it and offer to engage them in a conversation about what they find useful.  More short posts?  More long posts?  More link roundups from their community?  More “original reporting”/punditry?  Whatever the answer to the question is, the fact that someone is answering means they have an investment in you that they will protect by coming back — you just have to invest in them so that they feel inclined to join the 10% of the world that will ever post a comment, etc.  A regular schedule of content lots of folks find regularly useful with occasional change-ups keeps folks coming back for more, too: Instapundit, for example, is 99% “I find a good article my readers will like and give a pithy 2 sentence summary” and 1%, sporadically, “I demonstrate the penetrating insight that makes folks really love my 2 sentences of pithy commentary enough so that they follow me for years and learn what in-jokes like ‘Heh’ and ‘Indeed’ mean.”  I’m sure if you think about it you can identify the things in any random community you belong to that are the familiar sights of home: “+1 for X” on Business of Software, hot grits, yadda yadda.

And some percentage of the folks who come to your blog every day or every week to check up on what you’ve got to say will read the tasteful, clearly marked ads you’ve got interspersed with the content (maybe thats not the right way to say it — the ads are content by then, because your blog is about things your customers like and find useful and your customers are obviously interested in what you have to sell), and then you get to print money hats.

Or there is the distinct possibility that I have no clue what I’m talking about.  It wouldn’t be the first time.  Now, if you’ll excuse me, got some studying to do.  (P.S. Look, ma, no call to action!  Yep, this blog is going to remain happily unmonetized.)

Studying For the JLPT

Note to readers: This post is off the beaten path for this particular blog. You can safely ignore it if you aren’t interested in Japanese study. Its a proof-of-concept for the blog series Writing A Customer-Focused Blog, where you can see the motivation for doing this. In this post, I plug a piece of software called ReadWrite Kanji. I have received neither permission nor compensation for doing so. I am a happy registered user, and am using it to pass a certification exam this December, God willing. Everything which follows this disclaimer, including my representations as to my opinion of the quality of that software, is true. Apologies in advance if it breaks your RSS reader because it contains Japanese characters.

The Japanese Language Proficiency Test (JLPT, 日本語能力試験) is coming up in December and I’m busy studying for it. I currently hold level 2 (2nd highest of four ranks) and am aiming for level 1, the ikkyuu, the bane of my existence. Lots of the folks I know are currently preparing to try for their very first credential (generally 3kyuu or 2kyuu — taking level 4 is a waste of your time and money, because nobody cares that you have a piece of paper that says you can order a beer). And many of them ask me how I study. So here’s my lazy-programmer-no-Mountain-Dew for you way of passing the JLPT.

Objective: Secure a passing grade on the JLPT. For 1kyuu, this is 70%. For level 2, level 3, and level 4 this is 60%.

Sections to the test: All four tests are scored out of 400 possible points. The points are divided as follows: 100 points for kanji/vocabulary, 100 points for listening comprehension, 200 points for reading comprehension and grammar.

The key to passing the JLPT: The listening comprehension section is a joke. If you can speak Japanese with any proficiency at all relative to your level, expect to pick up 80 points there without batting an eyelid (the only exception is if you are a heritage Chinese speaker who is aiming at a level above your genuine ability and hoping to get through on the strength of your kanji skills: you probably have things well under control, but are outside the realm of my experience).

Thats 80 points out of the 240 you need for levels 2 through 4, which means you need to average a whopping 160 out of 300 on the rest of the test, which is slightly better than 50%. You can do this. (If you’re studying for 1kyuu, you need 200 instead: still easily possible if you’re willing to devote a lot of time and effort.) The key is to master as many kanji as possible.

What does it mean to master a kanji? There are four skills for studying a kanji: you need to know what it means as a general concept, which isn’t specifically tested by any question but will certainly help you out on reading comprehension (particularly the comprehension of a sentence-in-isolation questions, since in the passages you can generally get by on context cues). You need to be able to associate the kanji with its readings, both on-yomi (Chinese reading) and kun-yomi. And you need to be able to be able to take the readings and work back to the kanji, not a kanji which kinda-sorta looks like the kanji, but the correct kanji.

There are a lot of ways to achieve this level of mastery. One is to be born in Japan. Missed the boat? Well, you could read a lot of authentic Japanese texts. Of course, odds are if you’re taking the JLPT you a) can’t read anything of importance yet and b) if you can, it won’t be testing words that are on the JLPT (sorry, anime/manga fans, the intersection between 3kyuu and your favorite series is probably about 3 words). And then there’s rote memorization.

People hate rote memorization, and they hate getting up every day and doing 20 minutes of kanji practice. But if you do it, and if you start early enough, you’ll steamroll the JLPT. Sure, study your grammar books so you’ll be able to impress people with your writing ability later on in life, but you can be batting 25% on those questions (random guessing, essentially) and you’ll still squeak by if you know the kanji.

Note, master is not the same as “Yeah, I’ve seen that one”. Let me give you an example of one type of question the JLPT asks:

山田さんは明日から出張へ行きます。(This one is level 3, incidentally.)
Your mission, should you choose to accept it, is to pick the correct reading for the underlined kanji. No problem, shucho, right? Ahh, but see, the Japanese test writers are tricky, because your four answers for this question WILL be:

しゅうちょう、しゅっちょう、しゅうちょ、しゅちょ

Yep, this is designed to screw you up if you don’t understand long Japanese vowel sounds versus short ones, or if you can’t hear the glottal stop. The test takers know these are difficult for most foreign learners of the Japanese language, thats why this problem (and about a dozen that are going to ask you the same thing except with different kanji) are on the test.

So how well do you know your kanji really? You know your kanji well when you can wake up every day for a week and nail that problem. No hesitation, no fudging, no peaking at the other side of your flashcard and saying “Oh, yeah, I knew that”: you look at that problem for 3 seconds and say BAM its しゅっちょう and none other. Achieving this level of mastery can be done with flashcards, but since flashcards require some complicated system for sorting them into “mastered”, “not seen yet”, and “iffy” I used to end up wasting as much time sorting or studying old kanji as I did studying new ones. Amazing I passed the 2kyuu at all, really. And really, all the books in the world (I think my collection approaches $200 at the moment, not counting general purpose dictionaries and textbooks — $200 on books I bought just to pass my exams) can be useful for learning the kanji the first time, but for mastering them you can’t beat daily practice with a set of flashcards.

Until now, anyhow. This year, for getting the 1kyuu, my inside track on the kanji is this program called ReadWrite Kanji. Dumb name, great stuff. Its like flashcards on your PC (or Palm, which would be great for a train ride if I actually owned a Palm — guess I’ll have to “study” on my DS instead on next week’s 3 hour trip to Tokyo). Every day when I wake up, I check my email, put on a pot of tea, and then practice kanji for 15 minutes. ReadWrite Kanji runs me through a half dozen different types of drills for each kanji, and remembers all the ones I flub up. And it asks me them the next day, and the next, until I get them all perfect. Then it replaces that kanji that I just learned with a new one from the pile (handily organized in the order Japanese schoolkids learn them, which is more-or-less the same order you need to know them for the JLPT).

Don’t take my word for it, though, try out their trial and you can practice the excercizes with a set of kanji you probably already know. If you want to get all the kanji (enough to study every level of the JLPT), it costs $120. Whoops, sorry, that was my freshman year Japanese textbooks. No, its actually $16. Yeah, I know, a heck of a lot cheaper than failing a test with a $80 admission fee and having to wait until next year to take it again.

Oh, and if you’re studying for level 3 and the kana are still giving you trouble, the same company sells ReadWrite Hiragana and ReadWrite Katakana. Their inventiveness in naming stuff amazes me. Anyhow, if you buy all three in a bundle its only $32. If for some reason you only wanted the two kana things its $19.20 but come on, you’re in Japanese for the long haul (or should be, for the amount of work you’re putting into it) and with only kana you’re not even good enough to be called functionally illiterate.

I think later this week I’ll post some more about the different types of grammar questions. Good luck on studying everyone, and a big ganbatte come December. Anyhow, try out that kanji software, you’ll be glad you did.

Editor’s note: There will not actually be another installment.

Kanji of the Day: 任

Note to readers: This post is off the beaten path for this particular blog. You can safely ignore it if you aren’t interested in Japanese study. Its a proof-of-concept for the blog series Writing A Customer-Focused Blog, where you can see the motivation for doing this. In this post, I plug a piece of software called ReadWrite Kanji. I have received neither permission nor compensation for doing so. I am a happy registered user, and am using it to pass a certification exam this December, God willing. Everything which follows this disclaimer, including my representations as to my opinion of the quality of that software, is true. Apologies in advance if it breaks your RSS reader because it contains Japanese characters.

Kanji of the Day: 任

On-yomi(音読み): にん

Kun-yomi(訓読み):任(まか)せ-る, 任(まか)-す

Basic meaning: To leave something up to someone else, to charge someone with responsibility

JLPT(日本語能力試験) level: Level 2 (2級)

Words you’ll want to know for the JLPT: 解任 かいにん(to dismiss from a post), 主任 しゅにん (the person in charge of something, an official — note the short yu! 主 is a perinneal favorite of the test writers because there’s about a zillion different ways to flub up its reading ), 任せる(to leave something up to someone)

Words you might find fun to know: 任務 にんむ(the mission one is entrusted with — shows up about 3 times a Naruto episode, along with 任せて! being the catchphrase of one of the major characters), 任天堂 (see below)
Cool trivia: there is a poetic expression 運(うん)を天(てん)に任せる, which means literally to “Leave one’s fate to heaven”. Figuratively it means to take a gamble on something, to “let the chips fall where they may”, etc. This association of submission before heaven and gambling probably had something to do with the naming of a certain playing card company 任天堂 (にんてんどう), “the house of leaving one’s fortune to heaven”, which is probably better known as the company which went on to make two Italian plumbers household names in every nation on earth.

More kanji to study: You can continue studying 任 and 1,944 other kanji which you need to know to be considered literate in Japanese by trying out ReadWrite Kanji, a lovely little computer program which is like kanji flashcards for your PC. There is a free trial available and the price is less than you’ll pay for a single kanji study book.

Be sure to come back tomorrow for our next kanji of the day! You can bookmark us by hitting Ctrl+D or add us to your RSS reader.

Editor’s note: there won’t be a kanji of the day tomorrow. Its an example of an effective call to action. I’d also hyperlink both “bookmark us” and “add us to your RSS reader”.

Everything You Need To Know About Registration Systems

… but were afraid to ask.

One of the most common questions asked on the Business of Software board by a new aspiring uISV is “How do I protect my software?” This post is meant to be a comprehensive answer to that question, so folks can point to it and say “Alright, now get out of my hair!”. Kidding, kidding, we were all there once.

First, a brief discussion on why you want to protect your software. The only reason you want to protect your software is to enforce the limitations you have put on the trial version. Many people mistakenly come to the table with the assumption that protecting the software will somehow, magically, “protect my intellectual property” or something to that effect. This might be theoretically true but you will have an easier time conceptualizing your registration scheme if you think of it as primarily a marketing, rather than technical, measure. Its your salesman that encourages folks to pay you money.

Why is it important to remember your registration scheme is a salesman? Because salesmen do not typically kick their prospective customers where the sun doesn’t shine, and many registration schemes do. Aside from some clubs in Tokyo (and the less you know about them, the better, really), people generally don’t pay money for the privilege of being kicked. Yet many software developers keep including Nutcracker Suite protection systems, such as Starforce, which severely harm the user experience, out of the mistaken belief that this will eventually increase profits.

If you will permit be a bit of amateur psychoanalysis, I think this is because software developers in general, and uISVs in particular, feel violated when someone is using their software illegally. I know the feeling, it has happened to me (and, mark my words, it will happen to you). Someone who downloads your software and cracks it hasn’t cost you any more money than someone who picks your door and walks around your apartment for 20 minutes without touching anything, yet the feeling that your rights have been violated is the same. And perhaps in a fit of less-than-rational anger you might demand your apartment upgrade its security system to include dead-locks, pitbulls, a batallion of US Marines with shoot-to-kill-orders, and some cleverly disguised booby-traps involving acid or flaming oil, or perhaps just flaming acid. Of course, the local Girl Scout troop selling cookies will probably not react too well to the fortifications (aside from the “cute wittle puppy!”), so if you like having cookies delivered to your door this is probably not a good idea.

So lets talk about four classes of users and how they interact with your registration scheme.

The first type of user is perfectly honest and will always comply with your licensing scheme to the letter, even if ways to circumvent your registration scheme are obvious. Approximately everyone thinks they are this kind of user. To this kind of user, your registration scheme (a salesman for your software) can be only a hindrance in getting to use the software which he happily paid for.

The second type of user is mostly honest. He’s not a pirate, after all, he has a wife and kids and works at an insurance company. He scoffs at the kids on Napster who feel entitled to free music. And yet he also will happily buy one license of your software when your license tells him he really requires five, install and uninstall a time-limited trial version every two weeks, and perhaps even reset his system clock to get around a time limitation. But he won’t download a crack, no. A crack would be stealing, and stealing is wrong. This second type of user is where your protection (a salesman for your software!) will make most of his keep. How many of these users relative to totally honest users you have depends on your market, but sadly, they’re a lot more common than most non-developers would think.

The third type of user wants to use your software, but will pirate it given half the chance. Its too expensive, it doesn’t do quite what he needs, he doesn’t have the money, for-profit software development is evil, piracy is wrong but oh well… he has a lot of mental excuses. Some of this user group is very technically adept at finding cracks — they know what IRC channels to go to and what shady connections to excercize. Some of them rely on Google searches. You can potentially wheedle a small number of sales from this group with your protection scheme, and they’ll hate you for every minute of it.

The fourth type of user… “Do what you want ’cause a pirate is free, YOU ARE A PIRATE!” He flies the Jolly Roger and you will never, ever make a legitimate sale to him. Even if he does “buy” your software it will be with a stolen creditcard or chargebacked within 24 hours. You’ll find that there are countries on earth (*cough* China *cough*) where there are few users from any other type. Your protection system is not really relevant to this type of user, since he’ll be using the crack anyway.

Oh, yeah, lets talk about cracks a little bit. You. Will. Be. Cracked. I really strongly recommend you read that post, because its true: no protection scheme will survive indefinite contact with the adversary. Your goal in instituting a protection scheme is not to achieve 0 utilization of your software by the Jolly Rogers of the world. It is primarily to keep circumvention methods obscure enough that it will take dedicated effort to discover either a way around your software or find someone who has found a way around your software.

There are several varities of cracks which you have to worry about. We are now crossing into the technical portion of this article, and will be discussing implementation details rather than philosophy, so pay attention.

1) A single good key. The cracker discovers, either via a “legitimate” purchase or analyzing your code, one single good key, and publishes it. This is the least damaging type of crack, because you can just ban that key in further updates to your software, and because if you use keys which are tied to other user data it will prevent someone from using the good key without otherwise impersonating the user it is tied to.

2) Keygen, or “key generators”. You have one of these lying around on your PC or server which generates good keys for your software. The cracker’s goal is not to replicate your system, but instead write one which produces at least some subset of the keys your system will produce. Many crackers prefer to write keygens because they get a psychological thrill out of “beating” you, but to most user groups there is no difference between one download and another.

3) A patch/crack which strips off your protection. For example, if you leave in a debug mode (if (!debug) {checkRegistrationKey();} else {registered = true;}), all the patch has to do is modify your executable to flip the debug bit and then your software is locked into the registered version. Creating a patch requires that your executable be a stable binary, as if the offsets of the bits to flip change applying an old patch will be impossible.

4) A cracked executable. This is the cracker’s least favorite method, because then he has to spend non-trivial amounts of bandwidth hosting the executable, and since he wants to host literally tens of thousands of executables this is irksome to him. However, remember, bandwidth is cheap — this is a speed bump, not a security mechanism.

In general, it is to your advantage to force the adversary to use countermeasures which are higher up that list. This means that your protection scheme should:

1) Require user-specific data so that a single good registration key does not break your software everywhere. The most obvious choice is username, but this is not very secure. Other popular choices include hard drive serial numbers, MAC addresses, GUIDs, etc. Remember, this will inconvinience legitimate users — you will have users who spell their name differently on their Paypal accounts versus in your software (example: McKenzie != Mckenzie has gotten my mother a few times, Bob Smith versus Robert Smith), you will have users who expect (and are perhaps, depending on your license, entitled) to use the software both at work and at home, you will have users whose hard drive dies and your software will cease to work on the new one. All of these become support issues for you, because your salesman is busy trodding on the toes of people who have already given you money. Consider carefully how much pain you will authorize him to inflict. For myself, I thought the risk of a serial key leaking was less than the amount of difficulty I would have policing unique serials, so while I ask folks for their name to generate my keys they’ll actually work for any name you put in (Shh, don’t tell the crackers :) ).

2) Obfuscate your code. Especially if you are using an interpreted language, such as .NET or Java, decompilers exist which will print out your protection routines in their entirety. This was how my very first hacked in version 1.0 happened, and that resulted in a keygen (i.e. total tactical victory for the bad guys). I’ve since started using ProGuard, a lovely OSS utility which takes your nice, easily decompileable JAR file and returns gibberish which still executes. This plus a (partial, backwards compatible) fix for the earlier keygen has kept me from getting hit with another wave of me hearties from China, although I know of at least one functioning keygen out there — but its buried beyond the reach of my casual pirate customers, which is a total strategic victory for me. Obfuscation is nice in that unless you need reflection or debugging stack traces it can’t hurt a legitimate user.

3) Change binaries early and often . Frequently changing your binary, via any method you want (obfuscation utilities can often do this — so can minor patches to your code), forces pirates to either host the executable themselves or deal with “customer support” requests like “Waaaaaah your patch doesn’t work anymore lol”.

OK, now, finally, on to license key generation algorithms. Some design considerations:

1) Are you going to run this offline, or are you going to run this on a server?

2) How much information from your customer does the algorithm require? How are you going to get this? e.g. if you require their hard drive serial number, you suddenly add the requirement “Customers can only purchase my application through my application”, which may be less than desireable.
3) Are you going to roll your own, or use an off-the-shelf system like Armadillo? In general, you’re not paying for security (although its likely that their system is more secure than yours, its not totally secure), you’re paying for convinience. Armadillo has been broken before and will be broken again, like every other security system.

4) How do you get the registration key to the user? Do you want to display it on a website, display it on an email, or update the application directly (sometimes called “automatic key injection”? A lot of the payment processors (including e-Sellerate, as I recall) promote systems that have this as a feature. Its quite nice, as it reduces customer support headaches (what was my registration key? How do I input it again?), particularly with non-technical customers. I didn’t do this myself, primarily because it required more development effort than my schedule had time for.

OK, if you’re still with me, lets talk some strategies for key generation if you want to do it yourself.

1) Public key encryption. Basically, your registration key sends a message: “Bob Smith, I hereby give you the right to use my software, in exchange for the consideration you have given me”. The problem is that Jolly Roger wants to be able to forge the message and replace Bob Smith with Jolly Roger, thus bamboozling your program into functioning for him. Luckily, there is a solution to this: public key cryptography. Public key cryptography works like this: you have a pair of keys. One of them is public and you can give it out to everybody, including the adversary. One of them is private and you guard it with your life. Since your trial version will be in the hands of the adversary, the only thing the trial version can know is your public key.

Practically speaking, you first take the hash value of all the identifying information you have. Then, you encrypt this with your private key: the output of this encryption is your “registration key/serial number”. Your software then performs the same calculation of the hash value in parallel, and decrypts your serial number using your public key, which results in a hash value. If the two hash values match, you unlock the software. If not, you display a nicely worded message to contact support (remember, your protection mechanism is a salesman).

If you are interested in the math behind encryption, which gets kind of heady, Wikipedia has a nice article on RSA. I’ll give you my dirty little secret: I’ve got a very incomplete understanding of a lot of the number theory involved, and I don’t trust myself to implement encryption. Neither should you. Really, trust Bob Schneider, you’ll probably just end up breaking something. Instead, take the crypto library which comes with your package of choice, and USE IT. Look for “MD5 digest” or “message signing” in your documentation if you’re unfamiliar with the whole field and just want to be done, quickly.

2) Everything else. Any other mechanism is insecurity which you’re tolerating for the sake of preserving your time as a developer. With that in mind, for preventing casual piracy you don’t need to go as far as public key crypto, although I would oh-so-strongly suggest doing so. I ignored my own advice though, and did something similar to the following: take two random constants A and B, which are “secret” in the sense that you have to actually decompile my program to find them (“But Patrick, thats not very secret is it. After all, the program is in the hands of the adversary.” EXACTLY). if (serial ^ A) % B == 0, then the serial is good. Note this doesn’t allow for any use of identifying information, and was chosen totally because I could implement it in 30 seconds. If I did another product today, I would spend 30 minutes instead and use Java’s excellent crypto libraries. The weaknesses of my approach are obvious: with access to the code breaking it takes a matter of seconds, one serial number will work for any number of computers, etc etc. But it was sufficient to my purposes because my target customer has enough difficulty getting a legitimate version installed, to say nothing of navigating the dark corners of the Internet where the keygens flourish.

Where/when to check the serial number: I check once on startup. A lot of people say “Check in all sorts of places”, to make it harder for someone to crack by stripping out the check. If you want to be particularly nasty to the cracker, check in all sorts of places using inlined code (i.e. DON’T externalize it all into SerialNumberVerifier.class) and if at all possible make it multi-threaded and hard to recognize when it fails, too. But this just makes it harder to make the crack, not impossible, and remember your goal is generally not to defeat the cracker. Defeating the cracker does not make you an appreciable amount of money. You just need to defeat the casual user in most instances, and the casual user does not have access to a debugger nor know how to use one.

Alright, that about wraps it up. This article is a work in progress, so I might beef it up some more, perhaps with code samples or techniques to impose, e.g., time limitations. Someday. In the meanwhile, I hope you learned something.

[Edit: Yo ho, me hearties.  If ye be wantin’ to stick it to a pirate without having to program a thing, cast yer glass over this way.]

What Should Starbucks Do

I spotted this on Seth Godin’s blog.  Starbucks had an incredibly ill-conceived promotion where they mailed some fraction of their employees with an email coupon for a free iced drink, then told them to mail friends and family members.  Oh boy, a chain letter, no possible way that could get out of hand, right?  Well, it did, and as a result Starbucks canceled the promotion.

Seth opines that, were it his call, he would have notched the driver’s license of anyone who used the promotion and given them the free drink.  The business problem this solves is that it prevents someone from going to the 46 Starbucks within walking distance from, say, the Sears Tower and getting 46 free ice lattes or whatever it is Starbucks sells.  His rule #3 (“We never accept online promotions.  However, if you were scammed by one, have *a free premium which the company can give out almost at will*.”) is, in my opinion, a brilliant solution to this problem for a chain which doesn’t have it yet.  But it doesn’t help Starbucks since they can’t force the cat back into the bag.

Here’s my solution: for every customer who comes in asking for their free iced fraparamadingdong, tell them “We’re very sorry, that promotion has been abused so we have to ask you this: what’s your first name and the last four digits of your telephone number?”  Then make a show of writing it down, and give them the product.  The only purpose of this system is to keep honest men honest and to remind folks that there is no presumptive right to free Starbucks, the way that many college students have come to believe that there is a presumptive right to free music.  The information collected can’t be enough to make a person hesitate for fear of their privacy, but that plus the fact that it is recorded is just enough to make them remember “Oh, thats right, I’m being watched”.

Here’s the rationale: the impact of one scammer who realizes he can beat the system (and, if you think of it, there is no system to beat here) is one ice drink per store.  The stores are franchises so you basically evaluate the damage to their profits on an individual level, where 1 or a 100 ice drinks is pocket change (here’s the secret to Starbucks: no matter how much they charge you, making the drink didn’t cost more than 10 cents!).  The damage to the brand from having to put that sign up everywhere, on the other hand, is at literally many orders of magnitude above the individual store.