Mark Gritter's Journal
 
[Most Recent Entries] [Calendar View] [Friends]

Below are the 20 most recent journal entries recorded in Mark Gritter's LiveJournal:

    [ << Previous 20 ]
    Sunday, May 3rd, 2015
    9:24 pm
    Big Omaha
    On SwC, the 5-card Omaha variants seem more popular than the 4-card standard version.

    Suppose you're up against a flop of 688 and you hold something like 89TQK. How much of a favorite is the made baby boat 68xxx?

    The surprising answer: barely at all. You have 12 outs twice, with a 42 card stub. You'll make the bigger boat 1 - 30/42 * 29/41 = about 0.495 of the time.

    Of course, Villain might be able to make a low (if you're playing O/8) or hold some of your overcards himself, so your equity is not really 49%. But against something like 668JJ you might even be the favorite. That extra card really makes a difference.
    Saturday, May 2nd, 2015
    1:21 am
    Never Trust Any Published Algorithm
    The slides from my Minnebar talk, "Never Trust Any Published Algorithm", can be found here.

    I got a couple good stories in response.

    A local person who works in computer vision talked about finding a new algorithm for shadow detection. It worked great on the graduate student's ten examples. It didn't work at all on his company's hundreds of examples in all different lighting and weather conditions.

    A coworker shared:

    A few years ago my brother was working at an aircraft instrument company. He was
    looking for an algorithm that described max loading for a plane still able to take off
    based on many variables.

    He found what was supposed to be the definitive solution written by a grad student at
    USC. He implemented the algorithm and started testing it against a large DB of data
    from actual airframe tests. He quickly found that the algorithm worked just fine for
    sea-level examples, but not as airport altitude rose. He looked through the algorithm
    and finally found where the math was wrong. He fixed his code to match his new
    algorithm and found that it now matched the data he had for testing.

    He sent the updated algorithm to the grad student so he could update it on public
    servers. He never heard back nor did he ever see the public code updated.


    The example I put as a bonus slide wasn't previously mentioned in my series of blog posts is a good one too. In Clustering of Time Series Subsequences is Meaningless the authors showed that an entire big data technique that had been used dozens of times in published papers produced essentially random results. (The technique was to perform cluster analysis over sliding window slices of time series.)
    1:05 am
    Tintri brag
    When we ask our customers "Would you recommend Tintri to a friend or colleague?" an astonishingly large number say yes.

    One metric associated with this question is the Net Promoter score. You ask the above question on a scale of 0 to 10 (least to most likely). 9's and 10's count as positive. 7's and 8's are neutral. Anything 6 and below counts as negative. Take the percentage of positive responses, and subtract the percentage of negative responses.

    Tintri scores a 94. Nearly every customer (who responds to surveys, anyway...) gives us a 9 or 10. Softmetrix Systems benchmarks Net Promoter scores by industry, and the leaders like USAA, Amazon, Apple, and Trader Joe's tend to have scores in the 70s and 80s.

    It makes me incredibly happy that customers love our product so much. I almost feel like it's all downhill from here--- it'll be a big challenge as we grow to keep that level of customer satisfaction so high. Maybe it's even a sign that we're not selling as much as we should be! But it's great confirmation of the quality of the product and of the Tintri team, who I'm all very proud of.
    Friday, April 24th, 2015
    6:08 pm
    Infinitesimals in the family of asymptotics
    I answered this question about the Master Theorem (which is used to calculate the asymptotic behavior of divide-and-conquer algorithms): Why is the recurrence: T (n) = sqrt(2) *T (n/2) + log(n) a case 1 of master method?

    The source of confusion (see the comments to my answer) seemed to be that the original poster did not really understand the asymptotic behavior of log(n) and n/log(n). In fact, he went so far as to post a graph "proving" that n^0.99 is larger than n/log(n). However, this is false for large enough numbers (large enough being somewhere around 10^100 in this case.) The logarithm grows more slowly than any positive power of n. As a consequence, n/log(n) grows asymptotically faster than any positive power of n less than 1.

    What I realized is that this might be some student's first (and maybe only!) experience with infinitesimals! Normally we think of infinitesimals as numbers "smaller than any positive real number". For example, before epsilon-delta proofs and modern analysis, the differential and integral calculus informally treated dx as an infinitesimal value. But while students are told the "idea" is that dx is a very small value, they are repeatedly cautioned not to treat it as an actual number.

    The surreal numbers (and thus the class of combinatoric Games too) have infinitesimals, but they are far outside the normal curriculum.

    So what model is a student supposed to apply when confronted with O(log n) or Θ(log n)? It behaves exactly like an infinitesimal in the family of asymptotic limits. big-O = bounded above, Ω = bounded below, and Θ = bounded both above and below, thus:

    log n = Ω( 1 )

    log n = O( n^c ) for any c > 0, i.e., log n = O(n), log n = O(sqrt(n)), log n = O(n^0.0001)

    n^k log n = O( n^c ) for any c > k.

    n / log n = Ω( n^c ) for any c < 1

    Nor does taking a power of the logarithm make any difference.

    log^100 n = (log n)^100 = O( n^c ) for any c > 0

    Crazy, right? But we can get Wolfram Alpha to calculate the crossover point, say, when does (log n)^100 = n^0.01? At about 4.3*10^50669.

    That's what makes logarithm an infinitesimal. No matter what power we raise it to (think "multiply") it is still smaller in its asymptotic behavior than the smallest power of n (think "any positive real number.") And there's a whole family of infinitesimals hiding here. log log n is infinitesimally smaller than log n. Don't even ask about the inverse Ackermann function or the iterated-log function.

    So it's not surprising that students might have difficulty if this is their first journey outside the real numbers. Everybody can handle the fact that O(n^2) and O(n^0.99) and O(n^0.5) are different, but the fact that none of these examples will be O(log n) is kind of perplexing, because O(log n) is obviously bigger than O(n^0). (Jumping to exponentials like O(2^n) seems like an easier stretch.)

    What was your first encounter with an infinitesimal?
    Monday, April 6th, 2015
    8:29 pm
    More Hearthstone Decks
    This Druid deck is not particularly successful but it's so much fun to play, and once in a while it works beautifully:

    cut for lengthCollapse )
    Wednesday, March 18th, 2015
    7:27 pm
    Sums of Cubes
    Somebody on Quora asked for an example of w^3 + x^3 + y^3 = z^3 in positive integers, all relatively prime. Turns out they were looking for a counterexample of a theorem they thought they proved, which is sort of a passive-aggressive way to approach it.

    Anyway, brute force solves the day. Noam Elkies came up with this monster set of equations to characterize solutions to the "Fermat Cubic Surface": http://www.math.harvard.edu/~elkies/4cubes.html, reducing the search space dramatically since we only need to look at triples (of both positive and negative integers) and filter the resulting cubic equations to those which have only 1 negative value and the relative-primeness condition. Here's Elkies' characterization in python:

    def elkies( s, r, t ):
        w = -(s+r)*t*t + (s*s+2*r*r)*t - s*s*s + r*s*s - 2*r*r*s - r*r*r
        x = t*t*t - (s+r)*t*t + (s*s+2*r*r)*t + r*s*s - 2*r*r*s + r*r*r
        y = -t*t*t + (s+r)*t*t - (s*s+2*r*r)*t + 2*r*s*s - r*r*s + 2*r*r*r
        z = (s-2*r)*t*t + (r*r-s*s)*t + s*s*s - r*s*s + 2*r*r*s - 2*r*r*r
        return (w, x, y, z)
    


    The smallest one I found was:

    365^3 = 107^3 + 209^3 + 337^3
    


    and the first with two different solutions:

    67477^3 = 36919^3 + 46049^3 + 54205^3
              26627^3 + 46747^3 + 57103^3
    


    and just for posterity, here are the first 1000:
    Read more...Collapse )
    Tuesday, March 3rd, 2015
    12:30 am
    The hits keep on coming
    Remember when I told you not to not to trust published algorithms, even famous ones bearing proofs? And how even functional programming experts screw up the Sieve of Eratosthenes?

    Well, you should also not have been trusting TimSort, which got implemented (with the same bug) as Python's array sort and Java's collection sort: Proving Android, Java, and Python's Sorting Algorithm is Broken and How to Fix It.

    I am dismayed that Java's response to the bug was to tune one of the algorithm parameters to a higher value so that it will take infeasibly-large arrays to trigger the bug, but waste some of everybody's memory in the meantime. (This was already the case in Python.)
    Saturday, February 28th, 2015
    1:16 pm
    More on not trusting published algorithms
    If you haven't read this paper on how not to implement the Sieve of Eratosthenes in a functional language, it's well worth your time: "The Genuine Sieve of Eratosthenes" by Melissa O'Neill of Harvey Mudd. It's about how a common simple functional programming example is completely wrong. (Her talk at Stanford on a new family of random number generators is worth the time too.. It's a cool hack to incorporate permutations into linear-congruential RNGs.)

    I ran into a question on Quora about summing the first K prime numbers, and the person was asking whether there was a better way than trial division. When I pointed out that the Sieve was much better (even at relatively small scales!) his response was "then I need to fill all integers upto INTEGER.MAX_VALUE"--- i.e., how do we bridge the gap between "All the prime numbers up to N" and "The first K prime numbers".

    There are three ways to tackle this and they're all interesting in their own way.

    1) The Sieve is so much better than trial division that it almost doesn't matter. The prime number theorem tells us that there are about N/log(N) prime numbers less than N, and that the Kth prime is about K log K. So, trial division to find the Kth prime require work that's around O( (K log K)*K ) = O( K^2 log K ). We might be generous and note that most composite numbers don't require testing all previous primes in order to find a divisor, and bound below by Omega(K^2).

    The sieve takes O(N log log N). If you're looking for, say, the 1000th prime, you can easily sieve up to 1000^2 = 1,000,000 and still come out ahead. (Particularly since, in practical terms, the Sieve doesn't require any division.)

    2) The prime number theorem lets us come up with a pretty-good bound on how large an N we need to find the K'th prime. Run the sieve on, say, N = 2 K log K and that's a solid win.

    3) Even if we could not predict where the Kth prime was likely to occur (or, say some subset of the primes of special interest), the Sieve can still be run to an indeterminate stopping point at only a constant-factor slowdown.

    The paper linked above gives a sophisticated way of doing this, but brute force is fine too.

    Say we sieve up to N=1000 and don't yet find the primes we're looking for. Then double N and start over from scratch. Do this until we find K primes; iteration J of the sieve has size N =(2^J)*1000. If we had an oracle to tell us J, we could have done one sieve pass. Instead we did sieves of size 1000, 2000, 4000, 8000, ... , 2^J*1000, but the sum of the sizes is just 2^(J+1)*1000 since it's a geometric series. So even if our answer was at 2^(J-1)*1000 + 1, the total amount of numbers sieved was at most 4x the minimum we needed to do.

    And that's not the best we can do, if we re-use the first 1000 numbers rather than throwing them away and starting from scratch it gets somewhat better--- but that's just quibbling about constant factors. Even treating the Sieve as a black box gives us a better result than trial division.
    Friday, February 27th, 2015
    10:43 am
    How not to manage your first contact.
    [Subject: Question?]

    Mark,

    Can I show you XXY ZZY?

    You can access our marketplace of over 45,000 technical contractors tied directly to an amazing workflow management software system. I would like to see if we can demonstrate our service.

    The following does a good job showing how we work:

    https://www.XXXYZZY.com/

    XXY ZZY was ranked #43 on Inc. 500 for growth from 2010-2013, #3 in Business Services. There is no charge to utilize our system.

    Are you the right contact or could you point me in the right direction?

    Thanks for the help,
    REDACTED


    Do I want "technical contractors"? I don't know.

    What problems will this help me solve? What would bring me to your web site? How does your "workflow management software" benefit me--- doesn't sound like anything I use.

    Why do I care how fast you're growing? (That's a question for later if I decide you have something I want.)

    At Tintri's sales kickoff we had Chip Heath as one of the speakers, about making ideas "sticky". He talked about making your idea simple, unexpected, concrete, credible, and emotional. He talked about telling stories rather than stats. About casting your company as the supporting actor, not the hero.

    At least the recruiter spam references positions I'm actually looking to fill (even if I'm not the hiring manager...) This example just seemed to fail on every possible count after getting my name correct.
    Wednesday, February 25th, 2015
    9:15 am
    Don't trust published algorithms, the sequel
    So I'm trying to implement an algorithm for extracting message types from log files. The author created several published versions, of which this one appears to be the preferred reference: http://web.cs.dal.ca/~makanju/publications/paper/kdd09.pdf (His TR omits one algorithm altogether, unfortunately.)

    I can't wrap my head around what he meant by the following heuristic. P is a partition of log messages, which has already been tokenized and restricted to messages of a particular token length (i.e., count_token). We are trying to pick two columns within P for a subsequent partitioning step. Other published descriptions said that the heuristic was to pick the modal (most frequently occurring) token count per position, but the detailed version is:

    1: Determine token count of P as count_token
    2: if count_token = 2 then
    3:    Set P1 to first token position.
    4:    Set P2 to second token position.
    5: else if { count_token is > 2 }
    6: if P went through step 2 then
    7:    Determine cardinality of each token position.
    8:    Determine the token count value with the highest frequency 
          other than value 1 as freq_card.
    9:    If there is a tie for highest frequency value then
    10:      Select lower token value as freq_card
    11:   end if
    12:   if the frequency of freq_card > 1 then
    13:      Set P1 to first token position with cardinality freq_card.
    14:      Set P2 to second token position with cardinality freq_card.
    15:   else { the frequency of freq_card = 1 }
    16:      Set P1 to first token position with cardinality freq_card.
    17:      Set P2 to first token position with the next most frequent 
             cardinality other than value 1.
    18:   end if
    19: else // other stuff, don't care
    


    So, is freq_card allowed to be 1 or not? What if there is no mode, because all the positions have different cardinality?

    I think what he's saying in a situation like

    error: aaa bbb
    error: aaa ccc
    error: ddd eee
    


    where the columns have cardinality 1, 2, and 3, is that we tiebreak among the "highest frequency value" by picking the lower cardinality: 1. But there is no "next most frequent cardinality" so I guess the only thing we could do is pick between 2 and 3, and the tiebreaker says to pick 2.

    But if we had 1, 1, 2, 2 then we should pick 2 instead because it's not 1, in precedence to the tiebreaker in lines 8-9? Or if it's 1, 1, 1, 2, 2 we should pick 2 as well?

    The rationale for picking the mode is that we're looking for the constant part of the messages. The messages include fixed phrases as well as variable components, so if there are N different messages in our partition, we should be able to find at least two columns that all have N different tokens in them. From that point of view, I guess if we can't find a modal token count then the heuristic simply shouldn't apply (but the algorithm spends quite a bit of effort when the relationship between the two columns we pick is not 1:1, so evidently he thought it was important to catch some other cases too.)
    Thursday, February 19th, 2015
    1:10 pm
    Tintri end-of-year PR
    The year-end press release from Tintri by the numbers:

    * 3 new models, which accounted for 75% of our Q4 revenue
    * 5 of the Fortune 15 companies are customers
    * 11 million-dollar accounts
    * 30PB of virtual machines running on Tintri
    * $75m in new funding
    * >100% year-over-year growth
    * >1500 systems in the field
    Wednesday, February 4th, 2015
    2:45 pm
    Rule of thumb measurements on acquisitions
    When a large company buys a small company, it typically doesn't have to disclose details of the acquisition price, even in its quarterly reports. This is because the small company's value is not "material" to the large company's operations. (I don't know where the dividing line is, but for a billion-dollar company it can be quite large.)

    So a friend asked if I thought VMware had paid more or less than $100m for Shavlik (in May 2011.)

    VMware's quarterly report in July 2011 disclosed $205m spent on acquisitions of four different companies over the past six months. One of these had a specific amount in their previously quarterly filing: $15m for NeoAccel.

    The other two companies, SocialCast and SlideRocket (remember when VMware thought they were getting into "end user computing?") were startups with a couple rounds of funding each. It is unlikely that they were "fire sales" at the time--- cash was not hard to get in 2011. Nor were they small enough to be acquihires; VMware really thought they would be part of the product offering. (SocialCast is still active, SlideRocket was later sold off.)

    The one number we do have is the size of their series B funding rounds. A series B investor typically wants to control about 30% of the company, so based on that rule of thumb we can give valuations as follows:

    SocialCast: $8m series B in March 2010: about $28m
    SlideRocket: $5m series B in July 2009: about $17m

    These numbers are relevant to the purchase price in that they're a lower bound the investors will accept, but (given the no-fire-sale assumption above) they probably want more than those values. Picking nice round numbers we can estimate acquisition prices:

    SocialCast: $40-60m
    SlideRocket: $30-40m

    SlideRocket might be a little more since they had longer to grow, but a 2x "single" for the VC investors would be acceptable.

    That leaves between $100m and $120m as the purchase price for Shavlik.

    Now, this estimate might be off: SocialCast or SlideRocket may have been seeing great revenue numbers and growing faster than I give them credit for. But Shavlik had revenue and a long history (founded 1993) so it was probably the largest of the acquisitions, or a lower bound of about $65m.
    Monday, January 26th, 2015
    7:29 pm
    Tintri wins Infoworld "Technology of the Year" 2015
    The Tintri VMstore was one of 33 winners selected by Infoworld for their 2015 Technology of the Year. It's nice to get some mainstream(-ish) recognition and be put in the same category as cool consumer tech like the iPhone 6 and hot software technologies like Neo4j or Apache Storm. There were just four pieces of enterprise hardware on the list: the Tintri VMstore, HP Moonshot (that thing is a beast), Dell PowerEdge R730xd, and ioSafe 214 (which I think is more of an SMB product.)
    Sunday, January 25th, 2015
    1:06 am
    Divisor Sums
    This post may be difficult to read because LiveJournal doesn't support any of the nice Javascript math rendering libraries, and I'm too lazy to copy and paste images.

    It turns out there is a nice way to calculate sum_{k=1}^{n} d(k^2), where d(x) is the "number of divisors" function (also called sigma_0 or tau or d_2) The key is that we can use Dirichlet convolution (denoted by *) to write d(n^2) = d * μ^2 (where μ is the Mobius function). Then some algebraic magic turns the sum into a sum of sqrt(n) terms, namely sum_{a <= sqrt(n)} μ(a) D_3(x/a^2). And D_3(x) is the sum of the number of ways to divide numbers up to x into three factors, which can be calculated efficiently by counting lattice points under a hyperbola. See http://math.stackexchange.com/questions/133630/divisor-summatory-function-for-squares

    I'd like to do this for sum_{k=1}^{n} d(k^3) but the same logic doesn't work. I've found three convolutions so far:

    d(n^3) = d * μ^2 2^{ω(n)} where ω is the number of distinct primes dividing n. Can't seem to get rid of that term, it mucks everything up.

    d(n^3) = 1 * 3^{ω(n)} is even worse, it would require some entirely new trick.

    d(n^3) = F(n) * μ^2 where F turns out to be a multiplicative function defined by

    F(p^{2k+1}) = 3k + 3
    F(p^{2k}) = 3k + 1

    for example F(2) = 3, F(4) = 4, F(8) = 6, F(16) = 7. And of course its convolution with 1 is also multiplicative, but instead of ending up with something nice like a sum of divisor functions it's a sum of this wierdo thing. Neither F nor F*1 nor their partial sums appear in OEIS.

    So I could write this as an algorithm but it would require factoring quite a few terms, and if that was feasible we could just calculate the sum directly without any rewriting. I'm wondering if there is some general technique I just don't know about, or whether I need one more insight. Maybe F can be expressed in terms of divisor functions in some useful way.

    (The reason I believe it's feasible at all is because the calculation appears on a programming problem site, though not yet solved by anybody... Several people have solved the d(n^2) version.)
    Tuesday, January 20th, 2015
    10:04 am
    Redundancy
    I've read some of the literature on programming errors, about what sorts of mistakes programmers are likely to make and some analysis of why. But so far I haven't really seen analysis of more basic problems like that illustrated in today's WTF, where the programmer wrote an array to a file in order to determine the length of the array:
    private static int GetPhysicalFileSize(byte[] Imgbyte, string InputObject, string OutFolder) {
      int PhysicalFileSize = 0;
      try {
          ExtractImage(Imgbyte, "Photo_" + InputObject + ".jpg", OutFolder);
          var Outfile = OutFolder + "\\Photo_" + InputObject + ".jpg";
          if (File.Exists(Outfile)) {
             FileInfo fi2 = new FileInfo(Outfile);
             PhysicalFileSize = (int)fi2.Length;
          }
          if (File.Exists(Outfile)) {
             File.Delete(Outfile);
          }
      } catch (Exception ex) {
        Trace.WriteError(ex);
      }
      return PhysicalFileSize;
    }
    
    There are several things that could be going on here:

    * The author might not be making the connection that "size in memory" is equal to "size in file". This is actually a good thing to wonder about, given that (say) a UTF-8 encoded text file does not have the same size in bytes as its memory representation with wide characters. Better safe than sorry?

    * The author might not know how to take the length of the array. Unlikely, but possible.

    * The author is exhibiting poor planning skills. Rather than taking the shortest possible route to the answer, the programmer instead engages in some sort of depth-first search across operations he or she knows how to implement. (Given the second example in the article, this seems the most likely explanation.)

    It would be interesting to read analysis of these more "basic" errors--- maybe in the educational literature rather than systems literature? Any ideas?
    Monday, January 19th, 2015
    4:00 pm
    Books of varying degrees of success
    Donald Knuth, "Selected Papers on Fun and Games": This is the last (and definitely my favorite) of his selected papers series published by CSLI. Not everything here is a winner, but there is a lot to love on art projects, word games, vanity license plates, mathematical Christmas cards, and knight's tours. Donald Knuth has been doing "I bet I could write a computer program to figure that out" for a very long time. Also includes a reimplementation of the classic "Adventure" in Literate Programming (C).

    Tony S. Daniel, "Batman: Detective Comics" vol 1 and 2.
    John Layman, "Batman: Detective Comics" vol 3 and 4.

    I liked volume 1 and 3 which I picked up secondhand, so I asked for more. Volume 2 was an absolute stinker and made no sense. (It featured multiple Large Hadron Coliders? And time travel something something?) Layman engages in much more comprehensible and enjoyable storytelling. I think, though, that I am just as glad not to be pulling this series weekly. I really enjoy self-contained graphic novels more.

    Ed Brubaker, "Gotham Central" book 1: Much better.

    Marko Kloos, "Terms of Enlistment". I've been wanting some military SF other than Bujold, Heinlein, and Scalzi. This is not it. It's not about anything. It has three disconnected set pieces, none of which are really followed up in any way. The character is not particularly sympathetic, nor does he grow in any way. I am supposed to treat the appearance of aliens as a reason to get the next book, I guess? Not recommended. (Previous failures in this department :"Fortune's Pawn" by Rachel Bach and "Star Carrier" by Ian Douglas.)

    Ann Leckie, "Ancillary Sword". We need more science fiction about tea. (And, look, it's military SF that's actually about something!) A very good follow-up, recommended.

    Richard von Glahn, "Fountain of Fortune: Money and Monetary Policy in China 1000-1700". This book was footnoted in "Debt: the first 5000 years" and it is easy to see why. The author talks about the role of money in Imperial China, and how the purposes economists state for money (store of value, measure of value, means of exchange) were frequently separated into different media. Mainly an argument about the import of silver specie into China; he presents evidence that not only was American silver a sideshow (most came form Japan) but it shouldn't be interpret as a balance of trade issue so much as a commodity. There were a lot of threads I wish he'd followed up on--- like, the Chinese had their own bullionists who insisted that money was wealth even if it was locked up. So the empire would mint a lot of bronze coins and then lock them up in the treasury, while the provinces would complain about their not being enough coins to go around.
    3:39 pm
    VAT -- Comments too long for Twitter
    So the EU switched where VAT is collected for digital service from the seller to the buyer. This is not really shocking, and removes a big incentive to play locale games.

    I understand the problem that small businesses may have some difficulty adjusting. But I question how big a hurdle it really is, and unfortunately I think buyer-side taxation ultimately makes more sense. (We lost the fight to have the laws applying to an internet transaction be the server side a long time ago, see: porn, online gambling, banking, etc.)

    * "78 tax rates across 28 markets"? Cry me a river, the US has what, thousands of different sales tax regions?

    * If somebody is selling on the internet, they really really should not be running their own shopping cart and billing software. Once you cross this hurdle, the software providers manage the extra complexity, not you. (Yes, it sucks paying an intermediary.)

    * If you're calculating it by hand, an extra lookup in your cumbersome manual process doesn't kill you. Making quarterly payments to a lot of different tax authorities may hurt. I think we'd be better focused on solving that problem than fighting against the tide here.

    I really don't get what "simply cannot comply with this law" means. Sole traders can either do the extra work or not sell outside their borders, but what exactly is the high cost of compliance here? Is that too US-centric an attitude?
    Friday, January 2nd, 2015
    11:39 am
    "Fountain of Fortune" and arbitrage
    The conventional story of East-West trade is that China accepted only bullion from the Atlantic economies because the Europeans had nothing else to offer that was of interest. But that's not all that's going on.

    China had an immense hunger for silver, from all of its trading partners. There were several reasons for this. One was that silver was used as a store of value. After numerous depreciations in coin and paper, nobody trusted the government's currency, and there was never enough silver. Another was that silver wasn't subject to import duties! (The various import duties by themselves discount the notion that there was nothing the Chinese wanted to import...)

    But the biggest reason to import silver to China is that China had a vastly different gold-to-silver exchange ratio than the rest of the world:
    Chinese merchants did not simply pursue bullion; they sought one particular metal--- silver. The source of profit from silver was, of course, the high price silver commanded in China. The gold/silver ratio in China had drifted slightly downward from its historical peak of 1:4-5, achieved in the late fourteenth century, to 1:6 by the early sixteenth century. In contrast, the gold/silver ratio hovered around 1:2 in Europe, 1:10 in Persia, and 1:8 in India... --- Richard Von Glahn, "Fountain of Fortune: Money and Monetary Policy in China, 1000--1700", p. 127

    Von Glahn argues that most of the silver imported into China actually came from Japan (once Japan opened significant silver mines), not the Americas. Some of this trade was carried out by Europeans, but by no means all.

    I received "Fountain of Fortune" for Christmas and it's an interesting read. Much of it is about how the three conventional functions of money (store of value, measure of value, and unit of exchange) were served by different media for centuries. There are a variety of reasons for that--- one is that China simply couldn't mint enough bronze coin! A lot of Chinese bronze coin (like, entire shiploads) was imported into Japan for use there. But the perspective of the American bullion trade as merely a sideshow in a giant gold-silver arbitrage scheme is also an interesting bit of history to read too.
    11:07 am
    Exploring in Elite: Dangerous
    Elite: Dangerous doesn't get enough mileage out of its gorgeous planets. There's little reason to go visit them. Trade is done through stations, mining is done in asteroid belts (and ring systems, admittedly), and exploration can be done from 5+ light-seconds away from your target.

    Anyway, here's some eye-candy of the first earthlike world I discovered, officially designated "Col 285 Sector AF-P c6-1 4". I love the large inland seas:

    Screenshot (7)

    "Four" is a cold world (-11 degrees Farenheit) and doesn't yet have oxygen in its atmosphere--- no cyanobacteria?

    Screenshot (8)

    Planets four and five orbit each other. Five is an ice world with giant fissures and some volcanic activity discoloring the surface:

    Screenshot (9)

    Unfortunately, Elite doesn't allow you to name (in-game) the planets you discover. In an online world there is, of course, potential problems with vetting large numbers of names for indecency.

    I really hope that Frontier Developments finds ways to make better use of the hard work they put into solar system models. It'd be great to name the planet, get a detailed surface map, perform additional surveys, and launch a colonization expedition. Realistically, of course, all these things would take years if not decades. (And the game doesn't even have stations that are under construction within settled space!)
    Friday, December 12th, 2014
    11:31 pm
    More "Elite" ramblings
    I am pretty happy with "Elite: Dangerous" so far, in its prerelease state.

    The economic system is fairly well thought-out, and I am surprised at the number of people who complain about problems making money. It may be that players are relying on the in-game import/export tools too much. These can be misleading because they operate on a system, but the economy actually varies by planet/station. (So in-system trade can be profitable, too.):
    * Everybody needs food, clothing, and medicine. Rich economies want luxury items.
    * Agricultural planets produce food items and need agricultural machinery. They also have at least some luxuries, usually beer.
    * Industrial planets produce clothes, medicine, and machinery of various sorts, and need input materials such as metals, cloth, and semiconductors.
    * Refining stations turn minerals into metals and other inputs.
    * Extraction stations industries produce minerals.
    * High-tech planets produce luxuries, automation items for all the above, and need computers and input materials. They also produce weapons.
    * There are some niche/specialized economies I haven't yet fully explored: "Imperial", terraforming, service, tourism. Also some planets have a blended economy.

    It's not hard to set up loops of various sizes:

    Agricultural <-> Industrial works well
    Extraction -> Refining -> Industrial -> Extraction is a little trickier because not all ores are refined at all stations, but you can easily learn what works (and their trade diagram has gotten better at indicating what minerals exist where.)
    Agricultural -> Industrial -> High Tech -> Agriculture works well with a rich agricultural world. Can substitute in Refining instead of Industrial.

    Some of the gamma players seem to really not know what to do with themselves in a truly open world. There's not a plot to hop back onto when you're tired of the side quests. However, the political simulation (factions get influence based on user input) provides the seeds of good endgame play, and can provide near-term goals for starting players too.

    The final complaint I don't really get is that the game is "incomplete" without the ability to land on planets (which was part of "Frontier"). I can totally understand why that got cut as a release feature, and I don't understand why players are so attached to it--- it provides some more landscape but there is plenty to go explore without actually visiting the surface. If this feature were present, it wouldn't add to the gameplay in any way.

    The thing I think is most likely to cause problems is that any of the "evil" options are so heavily punished that players can't even try them out. Piracy or assassination or just being caught with salvaged ("stolen") or smuggled goods puts you on a downward slope with the local government, and it seems very hard to get back into their good graces. (ED doesn't have alternate characters either to let users explore different ways to play.) This is fine from a simulationist perspective, but from a player perspective it can feel like those options are locked off. On the other hand, I think this is something where paying attention to the faction system and local politics can really pay off. If you go pirate in an independent system, the Federation doesn't care.

    Compared to "Frontier", combat is a lot more fun and varied. Frontier sacrificed playability for adherence to Newtonian physics. Elite: Dangerous gives you enough control to do some fancy maneuvering, but puts a speed limit in place so you don't just whip by your opponent at high speed. There are also a bunch of customization options and different sorts of weapon systems to try out.

    Overall, the game looks good, plays pretty well, and is a quite fun update for anybody who liked the original Elite (or even Frontier.)
[ << Previous 20 ]
My Website   About LiveJournal.com