Archive by Author

Bits du Jour update

End result of the Bits du Jour promotion: 2 sales, which was exactly what I had been expecting. Ahh well, I am a wee bit niche, after all. I also had 5 sales from “regular” customers on the same day, which is an all time record, and I’m not sure some of them weren’t caused by a) downloading my executable straight from Bits du Jour b) using the purchase now button within the executable and c) neglecting to notice the fact they were getting charged $24.95 instead of $14.95.
I’m going to give it a day or two for Google Analytics to catch up with all the conversions (its been crazy slow this week for me) and then decide whether to credit all the ones I don’t have a positive identification of the source for or just credit them all.

Oh, incidentally, I got perhaps 60 hits from Bits du Jour during the promotion. For those of you who sell a somewhat less niche product, Bits du Jour could potentially make you a nice bit of money.

Bits Du Jour

Wow, the pressure of getting through a deadline at work this week made me completely forget: its now (barely) Friday in America and that means the Bits Du Jour promotion will be going on today!  (I talked about how I ended up saying yes to this promotion after an e-mail out of the clear blue sky several weeks ago.)  I was reminded of this by a sudden anomalous order in my mailbox — who orders Bingo Card Creator at 2 AM in the morning local time?  Apparently, someone who saw the 40% discount and just said “I gotta have it!”

I think Ellen did an absolutely superb job of writing the advertising copy.  She originally started with what I had on my website as a base, then made a slight addition at my suggestion, and then went on to “embrace and extend” my market to places where I hadn’t even considered it would be useful (and where it might not have been useful at $24.95, but was swingable at $14.95 — yay for smart market segmentation).

Let me take the liberty of reproducing this copy here since I guess its probably going to vanish into the ether after today is over.  Its, as I said, excellent (if a little more aggressive about getting the sale than I would be — then again, I guess that makes sense with the time-sensitive format).  I had originally been expecting about 2 sales but given that I got one of them at 3 AM in the morning I’m thinking Bits Du Jour is going to significantly outperform my expectations.  Its a pity I don’t have a bit wider of a niche, but for folks who do I recommend taking a half an hour one day and seeing whether you and Ellen can’t come to a mutually beneficial arrangement.  I’m always willing to take total losses on 30 minute experiments.

Check back tomorrow for the gory details of how many copies were sold exactly.  Maybe I’ll even make a chart — I’m very interested in whether these customers are going to look like my normal customers (teachers generally buy on their lunchbreak, shortly after school ends when planning lessons for the next day, or between the hours of 9 and 11 pm at night which I think is shorthand for “after I have put the kids to sleep”) or not.

Roll Your Own Bingo Cards

Bingo Card Creator

Regular price: $24.95
Bits du Jour Today Only price: $14.95
You save: 40%

If you’re a teacher – especially if you’re teaching younger children, or if you’re teaching a language – you’ve probably used Bingo playing as a great teaching aid.

But if you’ve ever tried making your own cards, you know how tedious it is. And if you’ve tried buying cards, you undoubtedly haven’t been able to find all the cards you wanted, or haven’t wanted to buy a whole set just for a limited-time use.

But you don’t have to be a teacher to enjoy this great program. If you’re a parent, you’re probably always on the lookout for a good game to play with your kids. But how great would it be if you had a game specifically tailored to their interests, or to recent vacations or upcoming activities? And daycare providers, retirement community workers and other professionals can almost always use a fun, personalized activity for their groups.

Bingo Card Creator lets you easily make and print your own Bingo cards.
  • Save time: Print Bingo cards for your entire classroom with your own computer and printer in mere minutes. Writing cards by hand takes hours. Let your PC do the tedious work for you.
  • Save money: Why spend $10-$15 on buying single activity sets from traditional publishers, when you can make an infinite number of your own.
  • Tailor your activities: There’s no need to limit yourself to stock Bingo card sets. Make your own cards, matched exactly to your lesson plan and your students. Teaching math? Make cards where the numbers are the answers to the questions you’re asking. There’s no limit to what you can do.
  • Keep their interest: What’s harder than competing with TV and computers for your students’ – or childrens’ – interest? But what about animal Bingo right after a trip to the zoo? Or landmark Bingo for that upcoming road trip? Or Christmas Bingo for that long week before the holidays?
  • Teach any subject: If you can type it on your computer, you can put it on a Bingo card. Answers to questions, vocabulary lists, translations, math facts, social studies facts, student names (great for first day jitters), famous people — the choices are unlimited.
  • Not just for parents and teachers: Use Bingo cards in retirement communities, at parites, or for corporate events. Read sample uses.

Who Needs Bingo Card Creator?

  • Teachers – It’s a great tool for teaching young children, languages (including ESL), and even older ages. You don’t have to call out words on the cards; you can have the answers to questions, translated words, or even class members’ names.
  • Parents – Do your kids get bored in the car, or shopping? Make cards they can fill in during trips and events. And make your own party game cards for birthday or other parties. Play Harry Potter Bingo, SpongeBob Squarepants Bingo or BratzBingo!
  • Daycare Providers – Here’s an activity you can do with a whole group, but tailored to their specific interests, the time of year, or anything else you think of.
  • Retirement Center or Group Home Workers – A Bingo Card Creator customer who works in a retirement community wrote that the residents are “absolutely thrilled to be able to play a brand new game of bingo every week”.
  • Corporate Event Coordinators – Get people introducing themselves quickly with Bingo Cards with attendees’ names. Or keep them paying attention in sessions with “Buzzword Bingo”.

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”.

Yo Ho, Me Hearties, Yo Ho

[Edit: This post originally included a quirky joke with me linking the words “Bingo Card Creator serial” to a funny video on YouTube for SEO purposes.  i.e. if someone searches for it on Google, they get the video instead of actually getting a crack of my software.  Then I thought, wait,  here’s a Seth Godin moment: why not make this an ideavirus?

If you are a shareware author, an uISV, or if you just want to take a stand against software piracy, you can do so in thirty seconds. Pick three software programs you enjoy, and write a blog post saying how easy it is to find Visual Studio keygens or Adobe Photoshop serialz or what have you. And link our happy pirate friends to that video on YouTube (why? Because its an insanely catchy tune, thats why!). Blam, instant Google bomb — or should we say, Google Cannon. Arr, pass the rum. Just a few people linking a small program will get that as the #1 result, and a few more people will cause it to rank highly for any query including words like keygen, serial, etc, because our poor pirate friends don’t typically get trusted links from anybody.]

It seems like that cracker group finally got around to realizing that their old keygen didn’t work anymore (the comments I saw were priceless — unrepeatable, but priceless), so they went ahead and cracked version 1.04. *yawn* Guess I’ll have to wait a day or two and then break their keygen again, since this time at least one of them actually does show up on Goooogle.

In the spirit of sticking it to pirates everywhere, I heartily support the #1 Google result for “Bingo Card Creator serial“, which is SharewareConnection’s excellent page on the subject. I think every download site should implement similar language (check the waaaay bottom of the page for why that page ranks for those search terms), because doing so would make it impossible to find the needle in the haystack. After all, its not like anyone is hotlinking the Bingo Card Creator keygen directly.

My Next Piece of Software

I just got an idea for it yesterday and I’m quite excited, although I still have some design and thought to do before I greenlight the project.  Ah, its nice being my own boss.  As opposed to Bingo Card Creator is, well, radically different in just about every way.

Its much more ambitious than Bingo Card Creator, and would probably take 2+ months of development if I go ahead and do it — likely more, as there is no possible way I can or would do the “full time job on top of a full time job” deathmarch for that long (it nearly hospitalized me the first time).  The budget is still hyper-low, since I get to reuse a lot of what I learned on (and bought for) Bingo Card Creator: I think I can do this for probably $500 for the first 6 months.

This is aimed at a much less price-sensitive customer (although its primarily B2C rather than B2B, although some of my prospects are chucking around close to $500,000), and the target user belongs to a community of 4,000 which is currently experincing a Web 2.0-type growth curve, so I’m guessing by the time I start writing there will be 10,000 prospects or thereabouts.  I’d probably start writing in January, since I’ve got a major ongoing time commitment between now and December (I’m going to get JLPT level 1 this year or perish in the attempt*).

Speaking of Web 2.0, this application screams “Make part of me a web service and charge by the month”, so I’ll probably release a couple of versions targetting various segments within the community: free forever, freemium (free trial for paid version), premium, and premium + subscription.

If course, given that I’d be scarily dependent on a third-party not totally wrecking me by either a) failing or b) radically altering their own software/business to eliminate the pains I’m going to solve, this might not exactly be a sedate experience.  Ah well, its so fun breaking out ye olde project management package (I’m a big fan of Paper v1.0) and sketching out some specs.

Maybe I’ll do this one in Visual C# .NET.  It would be great to add another skill to the list before I go back on the job market at the end of my current contract.

* Explanatory note for the peanut gallery: JLPT stands for the Japanese Language Proficiency Test.  I already have a sufficient oral skill and certifications of oral skill to work pretty much anywhere I darn well please, but I’m functionally illiterate.  I can get myself around a train system, buy a cellphone, navigate Visual Studio, and understand a letter from the apartment super about the water being off on Wednesday… but a memo about the recent accounting scandal in my prefecture might as well be written in Ancient Greek.  (At least I think it was about the accounting scandal… might have been someone’s favorite cookie recipe.)  Note only do I really, really hate it when I get a memo passed around the office and actually have to look at the individual words to understand the meaning (try to recall what it was like for you reading when you were 7 and had to sound out words like “dif, diffy, difficult — what does difficult mean, Mommy?”, now try imagine doing the same as a grown professional in real time with the boss standing over your shoulder), but it will greatly increase my chances that my next job will be one I really enjoy.

Anyhow, the JLPT comes in four flavors, level 4 (“I can order a beer”) through level 1 (“I can read Kirin’s annual shareholder guidance and scoff at their inadequate protection against currency fluctuations”).  Currently, I hold the level 2 certification (“I can tell a hostess that I can’t order a beer because a hereditary condition would make that potentially fatal”
).

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.]

Yay, 1.04 Out The Door

Its actually going out right now (go go gadget Robosoft!  I love not having to submit to half a zillion places by myself)

New features of note:

  • Mac version (side note: make one PAD file for Windows, one for Mac.  It will make submitting with Robosoft a lot easier for you.  Trust me on this.)
  • Beautiful new look and feel courtesy of stock icons
  • Word wrap within cells
  • Font family and size are now selectable
  • Ability to center a single card on the page (Remember Sally?  She asked for this.  What Sally wants, Sally gets.)
  • A few minor bug fixes (all display related).

If you want to try out Bingo Card Creator 1.04 why don’t you mosey on over to my website or check your favorite download site over the next couple of days.