Wednesday, November 10, 2010

English Subjunctive - Pet Peeve

The subjunctive tense in English is not used very often.  However, it does exist. And when it is not used it annoys me.  Why? Because I'm perhaps a bit weird.


The Fiddler on the Roof song "If I were a rich man..." is often mistakenly quoted as "If I was a rich man..."    And since I'm not a rich man (well, richer than many, but not really rich) it's even more annoying.  These errors occur with frequency.  The Joan Osburne song One of US (good video, BTW, and pretty good song) contains the line  "If God was one of us..." It should be "If God were one of us..."   And many folks often use the phrase "If it was up to me..." It should be "If it were up to me..."

And big shoutout and kudos to Rooney who has a song correctly titled "If it were up to me".

And so, if it were up to me, nobody would forget their English subjunctive.

Thursday, November 4, 2010

Should I go ahead and build PillMinder.me?

I've got some flows done for PillMinder.me, but I'm not sure if I should pull the trigger on a CrowdSpring design or just go with a vworker developer?

Decisions...

Why 1,000,000 > 1,000,000 - a note on weird math

So I posted previously about the math behind bit.ly. This brings up a minor point that made me want to post again at 5:30am today.

When we talk about numbers, the number 1000000 is pretty big.  But the number 0000000 is pretty small.  However, the number 0 is the same numerically as 0000000.  But in a database they are different, if the field is a non-numeric field.

This means that the actual number of outcomes that comprise all the possible combinations from 0 to 0000000 is greater than 1000000.   If you have a single digit number, the possible number of outcomes is 10 (0,1,2,3,4,5,6,7,8,9).  If you have a two digit number, the possible number of outcomes is 100 (01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, ...)  If you consider "6" different than "06" then the actual possible number of outcomes is 110 with a two digit number.

So with an 8 digit number, the possible number of outcomes is as follows:


And this is why 1,000,000 can be greater than 1,000,000.

Wednesday, November 3, 2010

Begin the submission process

Does applying for a job really require us all to be beaten down?

I have no problem with "submitting an application" but this is kind of harsh.

Monday, November 1, 2010

Automatic continuously updated web design - the site is alive...

So I have an idea...don't we all?

Ever since adwords was able to automatically optimize the display of ads based on click-through rates I've been curious about automatic content and web design.

Shouldn't web widgets, such as those at jquery automatically rotate through colors, size and perhaps even functionality from the moment they are launched?

This way they would be regularly updated and improved.  Some of the website control would be turned over to an optimization program that would cycle through a predefined range of options (colors, size, location, functionality) which would then feedback and choose the best combination set.


I can see one bit of the admin console that looks something like this:

Each in this way, multi-variate testing becomes even more scalable so that widget option rotations could be linked. The purple button rotates into orange when the content switches to internal vs. external.

In its simplest form a button is optimized with no input from the site editor. In it's most complex form, the entire size can morph and change based on site visitor behavior....


The site responds to traffic and builds itself in a way that optimizes whatever goal is set...

Saturday, October 30, 2010

The math behind bit.ly and other url-shortening services and other numbers on the web

My son, who is 12 years old, was recently assigned homework dealing with outcomes.  These are the calculations that feed into probability calculations. We use outcomes all the time to calculate our chances of an event occurring given a predetermined number of possibilities surrounding prior events.

If Janie has a red blouse, a blue blouse and a green blouse and she also has blue jeans, khaki shorts and black capri pants, how many outfits can she create?
Aside from the  possible Glamour donts that Janie could create, we can calculate Janie's number of outfits by multiplying the number of blouses (3) times the number of leg-wear (3) and get 9 total outfits.  This can be generalized by saying that the number of outcomes is the product of the total possibilities of each subsequent event.  This can be represented by a tree diagram as well.


This math is actually the basis of our numbering system. Every number we use every day from our age to our shoe size can be represented as the outcome of a tree diagram.  Each digit in any number is represented by one of 10 possible characters 0, 1, 2, 3, 4, 5, 6, 7, 8 or 9. (These are called Arabic numerals.)  The second digit of a two-digit number can also have 1 of these 10 different characters.  Each digit in a number has 10 possibilities. If we draw a tree diagram for a 2 digit number, it has 100 possible branches.  Below is a tree diagram for a 2 digit number (I left out 2,3,4,5,6,7,8 for space reasons).

Each additional digit increases the number of possible outcomes by a factor of 10.  So a 3 digit number has 10^3 possibilities or 1,000.

You may see numbers mixed with letters on the, such as FF6.  This is a number, but instead of using 10 Arabic numerals for each digit, the character set has been expanded by 6 to include A, B, C, D, E, and F.  This yields a total of 16 characters for each digit.  This is called "base 16" or "hexadecimal". Our out numbering system is "base 10" or "decimal". Each additional digit in a hexadecimal number increases the number of outcomes by a factor of 16.

Anyone who has some knowledge of Cascading Style Sheets or HTML has come across hexadecimal in color codes.  All colors on the web can be represented by numbers and those numbers are often represented in hexadecimal instead of decimal. You can see breakdowns of the colors in both numbering systems on many websites. (for example, http://html-color-codes.com/ and http://www.december.com/html/spec/colorhex.html)

The reason behind this has to do with how computers think and how early computers stored numbers in memory.  Computers at their simplest operate in base 2 meaning they have two options, off and on. This is typically represented by the numbers 0 and 1.   Each on/off digit was called a "bit" and in fact on/off fields database tables are still called bit field.  Early computers, notably the 6502 microprocessor (which ran the Apple ][+), used 8 bits together to process calculations.  Half a byte was 4 bits. And with a 4 digit number in base 2, you have a total of 2x2x2x2 or 2^4 combinations or 16 total.  And instead of writing out 4 digit numbers, computer memory was often represented in base 16. (The name of this blog, FF69g, is the computer instruction that the original Apple ][+ used to exit from machine language mode and it refers to memory location FF69, which is a hexadecimal number)

Let's take a moment and talk about what Bit.ly and other url shortening services do.  They are very simple services in concept.  With an url shortening service you can take a long web address and shrink it down, like putting a wool sweater in a dryer, only when you put the sweater back on it magically returns to its correct size. Say you have a very long web address, for example if you search for "what is the capital city with the longest name?" on Google the actual results are in this web address:

http://www.google.com/search?q=what+is+the+capital+city+with+the+longest+name%3F&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

But wit an url shortening service, that search becomes

http://bit.ly/db3e3Q

The longer url can be hidden on a web page using the tag.  That search is linked here, for example. But with non-HTML services, such as text emails and text messages and Twitter, the longer url is simply inconvenient or impossible.  So url-shortening services evolved and now there are hundreds of them. They generally have short domain names such ".ly" or ".co".  (See recent controversy surrounding ".ly")

So bit.ly and other search services save the long url in a database table and assign a code to it. And when your browser requests a bit.ly url, the code that looks random (db3e3Q in this case) is used to look up the correct url in the table and redirect your browser to the destination, in this case a Google search.

Each url that bit.ly stores get it's own unique lookup code.  And sinceI assume bit.ly stores billions of urls, the lookup codes could get very long (and I'm assuming there are billions since I don't really know).

So a 10-digit lookup code using Arabic numerals would have about 10 billion possible outcomes  from 0000000000000 to 9999999999999.  In the computer world and the search world, that's not that much.  That means if everyone in China searched 10 times the service would run out of lookup codes if they wanted to use only 10 digits.

In order to increase the number of possible outcomes without increasing the number of digits, bit.ly added upper and lower case letters to each digit.  So instead of 10 possible characters each digit has 62, because there are 10 Arabic numerals, plus 26 lower case letters and 26 upper case letters. The number of possible outcomes for a 1 digit code with 62 characters is 62.  The number possible outcomes for a 10 digit code with 62 possible characters in each digit is 62 to the 10th power or 839,299,365,868,340,000 or, in words,  eight hundred thirty nine quadrillion two hundred ninety nine trillion three hundred sixty five billion eight hundred sixty eight million three hundred and forty thousand.




Now, math purists (and bit.ly mathematicians) may say I've actually undercounted the possibilities because not all 10 digit numbers are used, so, in fact, the remaining digits in any combination could be 63.  For example, 0000000000 and 0 could be considered different lookup codes by the bit.ly servers (and they probably are).

This means that the actual number of outcomes is the sum of the various-length codes from 1 digit (62 codes) to 10 digits (the aforementioned long number).

I've never seen a bit.ly url that has only one digit in the lookup code, so perhaps they've limited the number of digits in their lookup codes. And in fact I have no idea if they even use 10 digits.

In fact, I don't know anything about how bit.ly works at all. I'm just assuming this since I had to create a similar system for my QR code tracking service that I built for fun (http://www.bloty.com) which might one day become a way for people to tell you that your lights are on in your car or that you are illegally parked while sitting at a restaurant (http://www.notesonawindshield.com, but it's in beta, so apologies for errors).

My code to generate the look-up using 62 possible digits is written in PHP and I've cut and pasted it below. No apologies if it doesn't work for you, I only recently learned PHP and it may or may not work exactly as planned. "UUID" stands for universal unique identifier.

  function uuid()
  {
//62 ITEMS IN THE ARRAY
  $arr = array(0=>0,1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z);
  $uuidtemp='';
 
  $i=1;
    while($i<=12)
          {
          $uuidtemp = $uuidtemp . $arr[mt_rand(0,61)];
          $i++;
          }
  return $uuidtemp;
  }


Wednesday, October 27, 2010

The Best Source of Market Analytics in the World: Customers (And how to use them)

It's funny, when I started LandAndFarm.com I never expected to be talking with customers about their kids or the weather in Tulsa, but when you do customer service and you do it right, you talk.  And if you can steer the conversation the right way, you can gain a fount of information from customers.

The customer service team is the best source of market analytics available to any company.  No complex funnel analytics report, no consultant, no website or blog will give you more valuable information than talking directly to customers. (OK, maybe exaggerating a bit, but seriously...do not ignore the customers...)

Whether the customer has called to complain or congratulate, they have equally good information, and a case can be made that complainers actually are more valuable than satisfied customers.

Let's talk about what kind of information customers have;

1.  Customers have information about the product.

Both satisfied customers and complainers have information about your product. They bought it. That means they've done more QA on your site than you have because they put real cash money through your site and actually bought something.

If it all worked out, great. So ask them what else they want. If you sell cars, ask them why they bought it (color, make, model, price, etc.) This will give you an indication of what your competitive advantage is.

And if they are calling to complain, you've hit an information gusher.  DO NOT LET A COMPLAINER GET OFF THE PHONE WITHOUT A CLEAR UNDERSTANDING OF WHAT WENT WRONG. 
 
2.  Customers have information about the market.

When I talked with brokers selling land (my customers) I always asked them how the market is. And brokers love talking about the market. Now, you have to know a little about brokers to know that they will rarely say, "The market sucks." But they might say, "Things are getting better" (translation: the market sucks).  Get trend information from them.  And if you hear one thing from Frank in Tulsa, you might tell Bobby in Austin that "Someone in Tulsa just told me..." And then Bobby might give you some more market insight.

Get it?

3.  Customers have information about competitors.

Even though my biggest competitor at the time was run by guys I really respected, that didn't stop me from agressively asking my customers if they used them and how much they paid and what they did that I should do or what I did that they don't do.

I bought eLandUSA.com because of a customer told me it was for sale.

4. Customers have information about pricing.

Pricing is key in most businesses. Too cheap and folks think it's not worth anything. Too expensive and everyone flies off to the competition. 

I always asked customers if my price was fair.  And I was the most expensive site in my business for a long time because rarely did customers say it was too expensive.  Of course, some did (and I could give a discount on the phone immediately to those that asked...)

My crazy recommendations:


1. Everyone in the company from the CEO to the janitor should listen in on a few customer service calls or read a few custom service threads every month. Calls and live chat are better for obvious reasons.

2. And senior executives should actually sub-in for customer service every so often (quarterly at least) to stay in touch with customers.  I answered CS calls until the day I left Loopnet.

3. Customer service staff should prepare regular weekly reports that summarize major CS issues, particularly repeat issues.  These reports should be no more than 1 page and cover the 5 most common CS issues and one unusual one (to keep the mood light).  These issues should go into your bug/work tracking system you are using company-wide and should be re-summarized in a monthly report that explains whether the issue is ongoing (we are too expensive but we have not made a decision on it) or resolved (customers no longer get logged out randomly, thanks engineering!).