Archive for January, 2008

Chance of Reign

January 31st, 2008 — Wordman

Based on an opinion voiced in an Exalted forum, I picked up the hardback of Reign, a game self-published by Greg Stolze. Stolze is the co-author of the incredibly good Unknown Armies and wrote the best “how to run a game” chapter that I’ve ever read (published in the otherwise unremarkable Gamma World Game Master’s Guide), so I was excited to see how he tackled the epic fantasy genre. Mechanically, he does so with something called the One Roll Engine. (If you want to sign up to a site with a not-very-helpful user interface, you can download a version of the basic system for free.) This engine makes use of dice in a way I haven’t seen a game utilize before, and I figured I’d blog about the probability of the system because a) I didn’t immediately know how to calculate it, b) a post on how to do such probability calculations will hopefully be useful to fellow gamers and c) I wanted an excuse to play with the statistical and graphing features of Numbers.

Reign uses pools of ten-sided dice (d10s), where results are determined by looking at how many dice match each other. It is a bit like poker, where a roll might generate, say, a three-of-a-kind, a pair, and some singles. Each of these matches is called a “set”, and the number of dice in the set is called the “width” of the set. So, for example, if you roll five dice and get 4, 4, 4, 2, 8, you have one set of width three. For many rolls in Reign, the actual number being matched, called the “height” of the set (4 in the previous example), doesn’t particularly matter. For other rolls, only the height matters. Still others rely on both the height and the width. Usually only a single set in a roll matters, but there are some mechanics that make use of the other sets as well. In this way, the rules in Reign pull a lot of meaning out of a single roll mechanic, and the probabilities employed are interesting but not obvious. I’ve done some (very) minor probability documentation on some other systems (an invented five-suit card game and the “excellencies” of Exalted, for example), but this is a bit more tricky.

Simple calculations

The first basic observation to make is that if you have a pool with more than 10 dice in it, you will always get at least one set. If you have n+1 items that can only have n distinct values, at least one of those values will come up more than once. Reign is well aware of this, and has rules to match. Consequently, pools only exceed 10 dice in very extraordinary circumstances; however, these circumstances, though rare, do exist in the game, so this post will consider results with up to 15 die pools.

Secondly, for any given roll, the odds of achieving exactly a specific height are identical to achieving any other exact height. That is, odds of rolling two tens using 5d10 are exactly the same as rolling two nines. This means that, were you to build a chart where rolling height x means one thing and height y means something else, you have equal chances of getting either result. Thus, if you want one result more than the others, you need to assign that result to more than one height on the chart. Reign makes use of this idea at least once in the rules (as a hit-location table). More often, however, height is used in rules where the height must be at least that number or higher. This makes reaching a certain height harder as the number increases. A height of 10, for example, can only be reached if the dice conspired to built a set containing 10s, but a height of nine is reached by those same sets plus sets containing nines, making it more likely. As a result, when this post considers height, it will do so in the sense of reaching at least that height.

Tools

Because Reign deals with sets, the key technique in calculating probability is combinatorics. In particular, the concept of a combination is crucial. This looks scary, but you probably had to do some of this in high school math class. The basic idea is that you have some number of items in your hand, and you have to select a certain (smaller) number of those items. The combination calculation measures how many different ways you could make such as selection, where order does not matter. For example, say you have four cubes in your hand, one red (r), one blue (b), one green(g), one violet (v). You are instructed to select two cubes, where the order doesn’t matter. You can do this, it turns out, six different ways: rb, rg, rv, bg, bv, gv. This would be notated as C(4,2), read “four choose two”. Generically, C(n,k), or “n choose k“. You may also have vague memories of a permutation, which is the same idea as combination except that order does matter. For example, rb and br are considered the same combination, but different permutations. A permutation of two items from a set of four is notated as P(4,2). Calculating both combinations and permutations makes use of the factorial operator. This is a fairly simple idea to wrap your head around. A number like “4 factorial”, notated “4!” just means to multiply 4 × 3 × 2 × 1. So n! just means n × n−1 × n−2 × … × 3 × 2 × 1. Combinations and permutations are calculated as follows:

C n = ( n ) = n!   P(n,r) = n!
k k k! (nk)! (nr)!

Fortunately, before you run screaming from this, most spreadsheets (and more advanced calculators) have functions for combinatorics. Excel, for example, uses combin(n,k). It also has permut(n,r), fact(n) and power(x,y), which are also useful. (One note here: Numbers lacks a permut(n,r) method, which is extremely irritating.)

Stepping-stone calculations

Calculating odds of rolls like this is somewhat similar to calculating odds in poker: you figure out how many possible ways there are to get a certain result, and you divide by the total number of all results. This gives the percent chance of achieving that result. Calculating the total possible results for a die roll is easy: start with a single die and figure out how many results this die can yield. Unless you are using very strange dice, this will equal the number of faces on the die. For each die you add to the pool, multiply by the number of ways that die can come up. So, if you roll a d20, a d12 and a d6, the total possible outcomes are 20 × 12 × 6. Since Reign uses pools of n d10s, for any given roll the total possible outcomes are 10n.

Calculating the ways to get a given result is usually more difficult. One very trivial thing to figure out: what are the odds of all of the dice of a roll matching? In this case, all of the dice have to match, and there are ten possible values this match can have. Thus, no matter how many dice are rolled, there are only ten possible rolls that result in all of them matching. This means the probability is always 10 ÷ 10n = 1 ÷ 10n−1 = 101−n.

Another basic building block is also easy to calculate: when rolling n dice, what is the chance that you will get no set at all? To figure this out, you need to know how many ways you can roll the dice such that none match any of the others. So, try to actually construct such a roll, rolling one die at a time. The first die could come up as anything, so it would have 10 possible outcomes. The second die could be anything but the value of the first, so would have nine possible outcomes. The third could have eight possible values and so on. This sequence is sort of like 10! (that is 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1) with the last few terms hacked off based on how many dice you had. If you had six dice, for example, you’d need to hack off the 4 × 3 × 2 × 1 part. Note that this is 4! and that “hacking off” the terms would be done by taking 10! ÷ 4!. Note that this is exactly the formula of P(10,6), above. (This is not a coincidence, but rather exactly what permutation is.) Knowing the chance of no match, you can take 1 minus this number to figure out the chance of at least one match. The outcome looks like this (note that this matches with page 57 of the main Reign rulebook):

Dice Rolls without match Possible rolls Chance of no match Chance of at least one match
1 P(10,1) = 10 10 100.000% 0.00%
2 P(10,2) = 90 100 90.000% 10.00%
3 P(10,3) = 720 1,000 72.000% 28.00%
4 P(10,4) = 5,040 10,000 50.400% 49.60%
5 P(10,5) = 30,240 100,000 30.240% 69.76%
6 P(10,6) = 151,200 1,000,000 15.120% 84.88%
7 P(10,7) = 604,800 10,000,000 6.048% 93.95%
8 P(10,8) = 1,814,400 100,000,000 1.814% 98.19%
9 P(10,9) = 3,628,800 1,000,000,000 0.363% 99.64%
10 P(10,10) = 3,628,800 10,000,000,000 0.036% 99.96%
11 0 100,000,000,000 0.000% 100.00%

Getting more detailed results requires more complexity. It happens that one of the tools needed to proceed requires figuring out the odds of rolling exactly one set with a given width, and all the rest of the dice not matching at all. By itself, this number is more of an intermediate result, but a general formula for figuring it out will help calculating more important results. We’ll call this formula “exact” and we do it like this:

  1. Let n be the pool size, i.e. the number of dice.
  2. Let d be the number of sides. In Reign, d is always 10.
  3. Let w be the desired width.
  4. If you were to hand pick a set of the desired width from your pool, you would need to select the height of the set you are going to build, and a number of dice. The number of possible ways to do this is d × C(n,w).
  5. The dice that are not part of the set have dnw possible values, but some of these would either make the current set larger, or could combine to make sets of their own. We want to make sure that all of the remaining dice not only don’t match the set set, they don’t match each other, either. Since we used w dice to make the set, that leaves nw dice. Using ten-sided dice, the first of these dice would have nine possible ways of not matching the set. The next would only have eight possibilities, as it should match neither the set nor the previous die. The next die (if there is one), would have seven possibilities and so on. If you look at the pattern, you can see that this winds up being equal to P(d−1,nw).
  6. Taking these all together, that makes d × C(n,w) × P(d−1,nw) possible ways to roll n d-sided dice such that they generate exactly one set of exactly width w.
  7. In Reign, the formula is Exact(n,w) = 10 × C(n,w) × P(9,nw)

For reference, this formula gives the following values:

Width Dice
2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 10 270 4,320 50,400 453,600 3,175,200 16,934,400 65,318,400 163,296,000 199,584,000
3 10 360 7,200 100,800 1,058,400 8,467,200 50,803,200 217,728,000 598,752,000 798,336,000
4 10 450 10,800 176,400 2,116,800 19,051,200 127,008,000 598,752,000 1,796,256,000 2,594,592,000
5 10 540 15,120 282,240 3,810,240 38,102,400 279,417,600 1,437,004,800 4,670,265,600 7,264,857,600
6 10 630 20,160 423,360 6,350,400 69,854,400 558,835,200 3,113,510,400 10,897,286,400 18,162,144,000
7 10 720 25,920 604,800 9,979,200 119,750,400 1,037,836,800 6,227,020,800 23,351,328,000
8 10 810 32,400 831,600 14,968,800 194,594,400 1,816,214,400 11,675,664,000
9 10 900 39,600 1,108,800 21,621,600 302,702,400 3,027,024,000
10 10 990 47,520 1,441,440 30,270,240 454,053,600
11 10 1,080 56,160 1,834,560 41,277,600
12 10 1,170 65,520 2,293,200
13 10 1,260 75,600
14 10 1,350
15 10

Calculating width odds

Armed with this information we can start answering real questions about the probability of specific results. Unfortunately, there is no one formula that provides a generic answer. Each roll of n dice acts a bit like a poker hand of n single-suited cards or, more closely, a roll in a game of poker dice (which is essentially a simplified version of Yahtzee). You have to look at the various possible results, and count them independently. Unfortunately, you have to do this separately for each value of n. We’ll show details of n=7, since it is large enough for interesting things to occur. With seven dice, you have 107 possible rolls, with the following possibilities:

  • No match (0x). This we calculated above: P(10,7)
  • Single pair (2x). This we calculated above: Exact(7,2)
  • Two pair (2x,2x). There are C(10,2) ways to select the heights of the pairs. The first pair can be selected C(7,2) ways, the second C(5,2). The remaining three die can come up P(8,3) different ways without matching the two pair or creating new pair of their own (that is, 8 × 7 × 6). So, the total number of exactly two pair rolls with seven dice is C(10,2) × C(7,2) × C(5,2) × P(8,3). Note that this suggests a general formula for the number of exactly two pair results for any number of dice n: C(10,2) × C(n,2) × C(n−2,2) × P(8,n−4), with the realization that this is only possible for some values of n (i.e. if n is less than 4, you can’t actually build two pair, and P(8,n−4) becomes undefined as well).
  • Three pair (2x,2x,2x). Similar to two pair, using this general formula: C(10,3) × C(n,2) × C(n−2,2) × C(n−4,2) × P(7,n−6).
  • Single triple (3x). This we calculated above: Exact(7,3)
  • Triple and a pair (3x,2x). Ten ways to select the height of the triple, the dice for which can be chosen C(7,3) ways. That leaves nine possibilities for the height of the pair, the dice of which can be selected C(4,2) ways. For the remaining two dice, there are 8 possible values for the height for the first and seven for the second (otherwise they match either each other or one of the other sets). Note that this is P(8,2). The total is then 10 × C(7,3) × 9 × C(4,2) × P(8,2). Again, a general formula suggests itself: 10 × C(n,3) × 9 × C(n−3,2) × P(8,n−5)
  • Triple and two pair (3x,2x,2x). Ten ways to select the height of the triple, the dice for which can be chosen C(7,3) ways. There are C(9,2) ways to select the heights of the pairs. The first pair can be selected C(4,2) ways, the second C(2,2). The remaining three die can come up 7 different ways without matching the other sets (note that this is P(7,1)). 10 × C(7,3) × C(9,2) × C(4,2) × C(2,2). For more than seven dice, there would dice left over that could not match the value of any of the sets or each other, so permutations of the seven remaining possible values would be used: 10 × C(n,3) × C(9,2) × C(n−3,2) × C(n−5,2) × P(7,n−7).
  • Two triples. Calculated much like two pair, with a general formula of C(10,2) × C(n,3) × C(n−3,3) × P(8,n−6).
  • Four of a kind (4x). This we calculated above: Exact(7,4)
  • Four of a kind and a pair (4x,2x). Similar to a triple and a pair: 10 × C(n,4) × 9 × C(n−4,2) × P(8,n−6)
  • Five of a kind (5x). This we calculated above: Exact(7,5)
  • Five of a kind and a pair (5x,2x). Similar to a triple and a pair: 10 × C(n,5) × 9 × C(n−5,2) × P(8,n−7)
  • Six of a kind (6x). This we calculated above: Exact(7,6)
  • Seven of a kind (7x). This we calculated above: Exact(7,7)

You can do similar analysis of all the other lengths, and you end up with the table below. Each row in the table shows a possible set combination that may be rolled, and the general formula to figure out how many possible outcomes will generate that set combination. Naturally, not all combinations are possible for a given number of dice. Try as you might, you’ll never get a width three set from two dice. Each cell in the table shows two different bits of information for given result for a given number of dice. The first is the numeric result of that number. The second, in bold, is the percentage chance of that result when rolling that many dice. Because the table gets obnoxious as the number of dice increases, this only shows results for two to 10 dice, but you should be able to use techniques shown above to extend it to more if you need to. (I also wrote some really horrid Python code to double-check these numbers by counting the sets made by every possible roll from 2 to 10 dice. It all matches.)

Result General Formula Dice Rolled
2 3 4 5 6 7 8 9 10
0x P(10,n) 90
90.0%
720
72.0%
5,040
50.4%
30,240
30.24%
151,200
15.120%
604,800
6.0480%
1,814,400
1.81440%
3,628,800
0.362880%
3,628,800
0.0362880%
2x 10 × C(n,2) × P(9,n−2) 10
10.0%
270
27.0%
4,320
43.2%
50,400
50.40%
453,600
45.360%
3,175,200
31.7520%
16,934,400
16.93440%
65,318,400
6.531840%
163,296,000
1.6329600%
3x 10 × C(n,3) × P(9,n−3) 10
1.0%
360
3.6%
7,200
7.20%
100,800
10.080%
1,058,400
10.5840%
8,467,200
8.46720%
50,803,200
5.080320%
217,728,000
2.1772800%
4x 10 × C(n,4) × P(9,n−4) 10
0.1%
450
0.45%
10,800
1.080%
176,400
1.7640%
2,116,800
2.11680%
19,051,200
1.905120%
127,008,000
1.2700800%
5x 10 × C(n,5) × P(9,n−5) 10
0.01%
540
0.054%
15,120
0.1512%
282,240
0.28224%
3,810,240
0.381024%
38,102,400
0.3810240%
6x 10 × C(n,6) × P(9,n−6) 10
0.001%
630
0.0063%
20,160
0.02016%
423,360
0.042336%
6,350,400
0.0635040%
7x 10 × C(n,7) × P(9,n−7) 10
0.0001%
720
0.00072%
25,920
0.002592%
604,800
0.0060480%
8x 10 × C(n,8) × P(9,n−8) 10
0.00001%
810
0.000081%
32,400
0.0003240%
9x 10 × C(n,9) × P(9,n−9) 10
0.000001%
900
0.0000090%
10x 10 × C(n,10) × P(9,n−10) 10
0.0000001%
2x,2x C(10,2) × C(n,2) × C(n−2,2) × P(8,n−4) 270
2.7%
10,800
10.80%
226,800
22.680%
3,175,200
31.7520%
31,752,000
31.75200%
228,614,400
22.861440%
1,143,072,000
11.4307200%
3x,2x 10 × C(n,3) × 9 × C(n−3,2) × P(8,n−5) 900
0.90%
43,200
4.320%
1,058,400
10.5840%
16,934,400
16.93440%
190,512,000
19.051200%
1,524,096,000
15.2409600%
3x,3x C(10,2) × C(n,3) × C(n−3,3) × P(8,n−6) 900
0.090%
50,400
0.5040%
1,411,200
1.41120%
25,401,600
2.540160%
317,520,000
3.1752000%
4x,2x 10 × C(n,4) × 9 × C(n−4,2) × P(8,n−6) 1,350
0.135%
75,600
0.7560%
2,116,800
2.11680%
38,102,400
3.810240%
476,280,000
4.7628000%
4x,3x 10 × C(n,4) × 9 × C(n−4,3) × P(8,n−7) 3,150
0.0315%
201,600
0.20160%
6,350,400
0.635040%
127,008,000
1.2700800%
4x,4x C(10,2) × C(n,4) × C(n−4,4) × P(8,n−8) 3,150
0.00315%
226,800
0.022680%
7,938,000
0.0793800%
5x,2x 10 × C(n,5) × 9 × C(n−5,2) × P(8,n−7) 1,890
0.0189%
120,960
0.12096%
3,810,240
0.381024%
76,204,800
0.7620480%
5x,3x 10 × C(n,5) × 9 × C(n−5,3) × P(8,n−8) 5,040
0.00504%
362,880
0.036288%
12,700,800
0.1270080%
5x,4x 10 × C(n,5) × 9 × C(n−5,4) × P(8,n−9) 11,340
0.001134%
907,200
0.0090720%
5x,5x C(10,2) × C(n,5) × C(n−5,5) × P(8,n−10) 11,340
0.0001134%
6x,2x 10 × C(n,6) × 9 × C(n−6,2) × P(8,n−8) 2,520
0.00252%
181,440
0.018144%
6,350,400
0.0635040%
6x,3x 10 × C(n,6) × 9 × C(n−6,3) × P(8,n−9) 7,560
0.000756%
604,800
0.0060480%
6x,4x 10 × C(n,6) × 9 × C(n−6,4) × P(8,n−10) 18,900
0.0001890%
7x,2x 10 × C(n,7) × 9 × C(n−7,2) × P(8,n−9) 3,240
0.000324%
259,200
0.0025920%
7x,3x 10 × C(n,7) × 9 × C(n−7,3) × P(8,n−10) 10,800
0.0001080%
8x,2x 10 × C(n,8) × 9 × C(n−8,2) × P(8,n−10) 4,050
0.0000405%
2x,2x,2x C(10,3) × C(n,2) × C(n−2,2) ×
C(n−4,2) × P(7,n−6)
10,800
1.080%
529,200
5.2920%
12,700,800
12.70080%
190,512,000
19.051200%
1,905,120,000
19.0512000%
3x,2x,2x C(10,2) × C(n,2) × C(n−2,2) ×
8 × C(n−4,3) × P(7,n−7)
75,600
0.7560%
4,233,600
4.23360%
114,307,200
11.430720%
1,905,120,000
19.0512000%
3x,3x,2x C(10,2) × C(n,3) × C(n−3,3) ×
8 × C(n−6,2) × P(7,n−8)
201,600
0.20160%
12,700,800
1.270080%
381,024,000
3.8102400%
3x,3x,3x C(10,3) × C(n,3) × C(n−3,3) ×
C(n−6,6) × P(7,n−9)
201,600
0.020160%
14,112,000
0.1411200%
4x,2x,2x C(10,2) × C(n,2) × C(n−2,2) ×
8 × C(n−4,4) × P(7,n−8)
151,200
0.15120%
9,525,600
0.952560%
285,768,000
2.8576800%
4x,3x,2x 10 × C(n,4) × 9 × C(n−4,3) ×
8 × C(n−7,3) × P(7,n−9)
907,200
0.090720%
63,504,000
0.6350400%
4x,3x,3x C(10,2) × C(n,3) × C(n−3,3) ×
8 × C(n−6,4) × P(7,n−10)
1,134,000
0.0113400%
4x,4x,2x C(10,2) × C(n,4) × C(n−4,4) ×
8 × C(n−8,2) × P(7,n−10)
1,134,000
0.0113400%
5x,2x,2x C(10,2) × C(n,2) × C(n−2,2) ×
8 × C(n−4,5) × P(7,n−9)
272,160
0.027216%
19,051,200
0.1905120%
5x,3x,2x 10 × C(n,5) × 9 × C(n−5,3) ×
8 × C(n−8,3) × P(7,n−10)
1,814,400
0.0181440%
6x,2x,2x C(10,2) × C(n,2) × C(n−2,2) ×
8 × C(n−4,6) × P(7,n−10)
453,600
0.0045360%
2x,2x,2x,2x C(10,4) × C(n,2) × C(n−2,2) ×
C(n−4,2) × C(n−6,2) × P(6,n−8)
529,200
0.52920%
28,576,800
2.857680%
714,420,000
7.1442000%
3x,2x,2x,2x C(10,3) × C(n,2) × C(n−2,2) ×
C(n−4,2) × 7 × C(n−6,3) × P(6,n−9)
6,350,400
0.635040%
381,024,000
3.8102400%
3x,3x,2x,2x C(10,2) × C(n,3) × C(n−3,3) ×
C(8,2) × C(n−6,2) × C(n−8,2) × P(6,n−10)
31,752,000
0.3175200%
4x,2x,2x,2x C(10,3) × C(n,2) × C(n−2,2) ×
C(n−4,2) × 7 × C(n−6,4) × P(6,n−10)
15,876,000
0.1587600%
2x,2x,2x,2x,2x C(10,5) × C(n,2) × C(n−2,2) ×
C(n−4,2) × C(n−6,2) × C(n−8,2) × P(4,n−10)
28,576,800
0.2857680%

Calculating height

As mentioned above, calculating odds for height is only interesting when you need a roll of at least a given height. Such calculation is surprisingly cumbersome, even if you mostly leave width out of it. In order for width to “count”, you must have at least one match, and this is what makes things hard to figure. It is honestly easier just to write code to count all possible outcomes, but if you want to figure it out do the following:

  1. Let n be the pool size, i.e. the number of dice.
  2. Let d be the number of sides. In Reign, d is always 10.
  3. Let h be the minimum height needed. Naturally, 0<hd.
  4. You now need to break the problem into sub-problems. So let m take on values from 2 to n. For each value of m, figure out the following:
    1. Figure out how many rolls of n dice of d sides generate exactly m dice that have values of h or greater. This can be done with a function X(n,d,m,h) = C(n,m) × (d-(h-1))m × (h-1)(nm). Note that when h=1 and m=n, the final term in that function is 00, which is technically undefined, so is omitted in that case.
    2. Figure out how many possible ways the n dice of d sides can come up. We did this above: dn.
    3. Find the probability of X(n,d,m,h). This is just the value of the function, divided by the total number of possible rolls. So ProbXm = X(n,d,m,h) ÷ dn.
    4. Now, given the m dice that came up h or greater, figure out the number of possible ways those dice can match. We do this much the same way we figured out the chance of at least one match, above. This time, though, we have only d-(h-1) possible values. So the possible ways to have no match with these dice is P(d-(h-1),m). The number of possible ways these dice can come up is ÷ (d-(h-1))m. So Y(d,m,h) = (d-(h-1))m − P(d-(h-1),m).
    5. Figure ProbYm = Y(d,m,h) ÷ (d-(h-1))m.
    6. Remember Probm = ProbXm × ProbYm.
  5. Now add up all values of Probm, and you have the probability of rolling at least height h on n dice of d sides.

This looks like this, again with the total number of rolls that meet a given height, followed by the percentage chance:

Height Dice Rolled
2 3 4 5 6 7 8 9 10
1 10
10.0%
280
28.0%
4,960
49.60%
69,760
69.760%
848,800
84.8800%
9,395,200
93.95200%
98,185,600
98.185600%
996,371,200
99.6371200%
9,996,371,200
99.96371200%
2 9
9.0%
252
25.2%
4,491
44.91%
63,954
63.954%
792,225
79.2225%
8,952,624
89.52624%
95,403,447
95.403447%
982,427,886
98.2427886%
9,941,058,909
99.41058909%
3 8
8.0%
224
22.4%
4,016
40.16%
57,888
57.888%
729,600
72.9600%
8,413,056
84.13056%
91,453,568
91.453568%
957,516,032
95.7516032%
9,803,680,256
98.03680256%
4 7
7.0%
196
19.6%
3,535
35.35%
51,562
51.562%
660,835
66.0835%
7,771,456
77.71456%
86,191,903
86.191903%
918,898,750
91.8898750%
9,546,080,131
95.46080131%
5 6
6.0%
168
16.8%
3,048
30.48%
44,976
44.976%
585,840
58.5840%
7,022,784
70.22784%
79,471,872
79.471872%
863,672,832
86.3672832%
9,124,660,224
91.24660224%
6 5
5.0%
140
14.0%
2,555
25.55%
38,130
38.130%
504,525
50.4525%
6,162,000
61.62000%
71,144,375
71.144375%
788,768,750
78.8768750%
8,490,265,625
84.90265625%
7 4
4.0%
112
11.2%
2,056
20.56%
31,024
31.024%
416,800
41.6800%
5,184,064
51.84064%
61,057,792
61.057792%
690,950,656
69.0950656%
7,588,071,424
75.88071424%
8 3
3.0%
84
8.4%
1,551
15.51%
23,658
23.658%
322,575
32.2575%
4,083,936
40.83936%
49,057,983
49.057983%
566,816,382
56.6816382%
6,357,469,311
63.57469311%
9 2
2.0%
56
5.6%
1,040
10.40%
16,032
16.032%
221,760
22.1760%
2,856,576
28.56576%
34,988,288
34.988288%
412,797,440
41.2797440%
4,731,954,176
47.31954176%
10 1
1.0%
28
2.8%
523
5.23%
8,146
8.146%
114,265
11.4265%
1,496,944
14.96944%
18,689,527
18.689527%
225,159,022
22.5159022%
2,639,010,709
26.39010709%

The end of the format war

January 6th, 2008 — Wordman

Another hideously stupid format war that did absolutely nothing to help consumers is over: Blu-ray wins. Oh, it will be a while before HD-DVD figures this out, but it’s done. You’ll find a number of people saying this lately, largely because of the recent defection of Warner Brothers to the Blu-ray format. This, and things like Apple most likely including Blu-ray drives in the next generation of its machines, are important of course, but I’m calling the war for Blu-ray for a different reason: porn.

Early on, I guessed that HD-DVD would win the format war for the same reason that VHS beat the superior Betamax: it better met the needs of porn producers (cheaper to make, longer running lengths, etc.). And, indeed, HD-DVD appears to dominate pornography in the United States. After some exaustive research (link not work safe) on my part, I can confirm that finding porn titles in HD-DVD is much easier than finding them in Blu-ray. For some time, Sony was actively preventing porn from being available on Blu-ray, but not any more, starting with Debbie Does Dallas Again. So, it appears that porn is at least producing in both formats at the moment, even though HD-DVD is still (by far) more common in porn.

This, however, does not matter. Whatever role porn did or didn’t play in the VHS vs. Betamax war, it will turn out not to have much impact on the HD-DVD vs. Blu-ray war, which is the main reason I think this war is now over. There are two things that are different this time around that make this so.

First, porn now has many more outlets than it did in the VHS days. Back then, if you wanted porn, your only choices were theaters or videotape. These days, with rule 34 in full effect on the internet, porn is now almost impossible to avoid. Those looking for high-definition porn are much more likely to find it in some downloadable format than either of the DVD formats.

This pales next to the other reason, though. After even more painstaking research, I have now realized the truth: high resolution porn breaks the illusion. The quality is too good, turning porn into a festival of pimples, surgical scars and razor burn. Some companies are adapting to this, but these are likely to be companies that actually care about production quality, which most porn makers do not.

Taking porn out of the equation knocks a big…leg out from under HD-DVD. While it will still take far to long for HD-DVD to die, it’s now safe stick a fork in it for your purchasing choices.

Update: The death spiral is happening faster than I thought it would. Glad to see that companies that care about this war seem to think it is as stupid and useless as I do.

Now I care. Slightly.

January 3rd, 2008 — Wordman

Care-O-MeterNow that samaBlog has provided a primer to most of the candidates, I am upgrading my Care-O-Meter for the 2008 U.S. Presidential race from “nonexistent” to “slight”.

I now care a little bit about the election. I didn’t yesterday. I didn’t last week. And I sure has hell didn’t care two years ago when all this election coverage started. There is no purpose to debates 18 months before the election, damn it!

States, your disgusting race to have the first primary does nothing but make me hate you and your vanity. Stop it.

XM, there is no need for an entire freaking channel covering this election, particularly this far away from the actual election. Stop it.

CNN, there is a reason that a Google search for “election coverage” brings up the page for your 2004 coverage long before showing a link to your 2008 coverage.

There is a reason that the Economist’s current “Week in Politics” only mentions the US election as its second to last item, and even then with a note that the process “got under way” this week.

There is a reason these elections only happen every four years. I look forward to when this one is over, so that the next one can start a day after the inauguration.

Another counterexample to open source

January 3rd, 2008 — Wordman

As reported by Fake Steve Jobs, an article recently penned by Jaron Lanier makes an argument in favor of closed source development. This is not necessarily an anti-open source stance, as Lanier claims it has its place, but…

…a politically correct dogma holds that open source is automatically the best path to creativity and innovation, and that claim is not borne out by the facts.

Why are so many of the more sophisticated examples of code in the online world—like the page-rank algorithms in the top search engines or like Adobe’s Flash—the results of proprietary development? Why did the adored iPhone come out of what many regard as the most closed, tyrannically managed software-development shop on Earth? An honest empiricist must conclude that while the open approach has been able to create lovely, polished copies, ithasn’t been so good at creating notable originals. Even though the open-source movement has a stinging countercultural rhetoric, it has in practice been a conservative force.

A couple of years ago, my friend MV mentioned another, more encapsulated example of how closed source can build better solutions. I haven’t seen it mentioned much, so will repeat it here.

The example comes from the very early days of the graphical user interface. Once you start to build a system that has “windows” that can move around, you have to contend with the idea that these windows overlap. Even if each window is a rectangle, it doesn’t take many windows to make some complicated shapes. Even two windows can do so. Consider this image of an early Mac desktop from the Apple Museum:

Mac desktop

The “System Folder” window is easy enough to represent, but how do you describe the shape of the visible portion of the “Mac System Software” window? What about the visible portion of the gray background? It’s just a collection of intersecting rectangles, but think about it for a second: how would you describe such shapes to a computer? Oh, and you only have 128K of Memory and an 8MHz, 16-bit processor. When building a GUI, you have to deal with this issue at some level. For example, something is painting the desktop background; how does it know not to paint over the windows? (For those that know a bit about graphics, double buffering doesn’t help you here, because a) you don’t have the memory and b) it is to slow on chips like this.)

The general concept for describing such shapes became known as “regions”. There are a number of different ways to implement regions. It was clear that Xerox PARC had one when the Apple team famously visited. It wasn’t at all clear what that implementation was, however, as it was closed source. Lacking access to Xerox’ methods, engineer Bill Atkinson took a look at the problem, figured out how they must have done it, and coded his version into the drawing system that would become QuickDraw.

It turns out, however, that Atkinson’s region code wasn’t really anything like Xerox’ code. It was much better. Better, in fact, than most other systems that came along, particularly the implementation used later by Windows. In an anecdote about Atkinson and regions, Andy Hertzfeld says that Apple “considered QuickDraw’s speed and deftness at region handling to be the most significant ‘crown jewel’ in Apple’s entire arsenal.”

This brilliant system (now supplanted by code that takes better advantage of modern hardware, particularly video cards) probably wouldn’t have happened if the Xerox code had been open source. Atkinson most likely would have started with their solution and refined it, and a bit of genius would have never been born.