Mark Gritter's Journal|
[Most Recent Entries]
Below are 20 journal entries, after skipping by the 20 most recent ones recorded in
Mark Gritter's LiveJournal:
[ << Previous 20 -- Next 20 >> ]
[ << Previous 20 -- Next 20 >> ]
|Monday, February 15th, 2016|
|New Game -- "Splendor"
Marissa bought me "Splendor" for Valentine's Day: https://boardgamegeek.com/boardgame/148228/splendor
I got to play it this weekend with Mike and Lily (my god-daughter.) The rules are simple enough that she had no difficulty playing at age 9.
Splendor is a card-collecting game. You pick up tokens from a shared pool in order to purchase cards that earn you points, and bonuses towards future purchases. Mike won handily by building up a large bonus in one particular color, which allowed him to make several high-value purchases using that color in a row. It is not clear whether this is a consistent winning strategy, since there is not a lot of choice of cards available, and most cards require multiple colors (as do all the "noble" bonuses.) We found ourselves a little adrift as to what was the best way to play --- specialization or generalization. So there is enough depth to be interesting, I think, without being totally lost.
It doesn't have the same feel of many building game in which an early lead cannot be overcome. It is definitely possible to interfere with the other players' strategies both by sitting on the tokens they need, and reserving cards that would be cheap for them. Our initial game was not particularly cutthroat in this way, though.
|Tuesday, January 26th, 2016|
|Legal Go Positions and Nonsingular Matrixes in F_3
A Go position is legal if there is no completely surrounded group of stones in it. It can be represented as an NxN array with each entry filled in as 0 (blank), 1 (white), or 2 (black.) I don't want to use the term "dead" because a dead group is a legal position, but an already-captured one still on the board is not. Note also that while players must alternate turns, 'pass' is a legal move so for example Black could fill the board all by herself without a single White stone. (But not fill in the last square as that would kill her group.)
A matrix over the finite field F_3 is also an NxN array with each entry either 0, 1, or 2. It is singular if its determinant is zero. The nonsingular matrices form a group under multiplication (because they are invertible.)
Owen Maresh asks how these two sets compare: https://twitter.com/graveolens/status/691732255333548032
For the easily-tractable cases, here is the answer:
11,232 nonsingular 3x3 matrices over F_3
12,675 legal 3x3 Go positions
6,996 that are both
24,261,120 nonsingular 4x4 matrices over F_3
24,318,165 legal 4x4 Go positions
13,518,392 that are both
|Sunday, January 24th, 2016|
|Fermat's near misses
Using the technique described in my previous post, I attempted to answer this question on Quora: "What is the smallest possible difference between the sum of two perfect nth powers and a different nth power?" http://qr.ae/RO86UX
That is, what is the smallest nontrivial 'd' (in absolute terms) in the equation a^n + b^n = c^n + d?
After excluding the all-1 cases, and the cases where a = c, here are the best solutions for a,b,c < 10000:
8^3 + 6^3 = 9^3 + -1
5^4 + 5^4 = 6^4 + -46
16^5 + 13^5 = 17^5 + 12
2^6 + 2^6 = 3^6 + -601
2^7 + 2^7 = 3^7 + -1931
Here are some more computational number theory results on x^3 + y^2 = z^5: http://qr.ae/RO864s
|Friday, January 22nd, 2016|
In 1991 Daniel Bernstein published a short paper on a computational technique for solving diophantine equations of the form p(a) + q(b) = r(c) + s(d): https://cr.yp.to/papers/sortedsums.pdf
He describes how a heap can be used to visit all sums p(a) + q(b), with a,b < H, in increasing order, using only near-linear space and near-linear time (in H). You can then set up two heaps and "increment" whichever one has the lowest minimum value, outputting any cases of equality.
Can this technique be efficiently parallelized, on a SIMD machine (such as GPU)?
A simple approach is to divide up the elements in one of the heaps. That is, instead of, say, [math]r(d) = d^4[/math], you could have a family of functions [math]r_i(d) = (192d+i)^4[/math], which partition the search space. Each thread gets a different function to work with. This reduces one of the heaps by a factor of 192, but the other is just as large. Where previously we did H^2 + H^2 heap operations, now we have to do H^2 + H(H/192) heap operations, and the operations on the smaller heap are more efficient in the worst-case as well. Also, every thread needs its own pair of *both* heaps which is somewhat memory-intensive, limiting either the size of the problem that can be tackled or the number of available threads.
We could also partition *all* of the inputs as long as every partition is tested against every other combination of partitions. (This is a natural optimization when some restriction on the equations can be found for some moduli, thus eliminating a broad range of possible solutions.) For example, if we divided all the inputs in half by parity, then we need to check 8 different equations. This again requires a pair of heaps per thread.
We could perhaps continue to use a shared heap for the left-hand side of the equation, at the cost of threads becoming idle when their minimum value grows too large. I don't know how to evaluate what this does to the speedup. It also introduces some serialization as the heap operation itself can't be parallelized.
A variation on the shared heap would "unroll" the left-hand heap and have a shared array of the next K values. I can't decide whether this is helpful or not.
On a side note, perhaps the availability of cheap large-capacity flash devices may make it feasible to apply techniques previously dismissed as infeasible due to space requirements.
|Saturday, January 16th, 2016|
I read Mark Lawrence's "Prince of Thorns" based on Amazon recommendations and I am afraid it is not the thing I was looking for. I am willing to read grimdark, but this was just (as Liz Bourke puts it
) "misogynist creepy" rather than cathartic. I was particularly puzzled by the large mutant who didn't seem to mind all that much that the protagonist wiped out all his friends and relations. Also this seems to be one entry in a trend in which grim fantasy futures are revealed to be postapocalyptic futures, which in this book just came across as lazy worldbuilding. You don't have to worry about anachronistic idioms if it's the future! (Except that you totally do.)
I also read the latest from Jack McDevitt, "Thunderbird", which is a sequel to "Ancient Shores". While the story has some of the discovery and sense of wonder writing that McDevitt can do well, his heart didn't really seem to be in it. Instead he wanted to tell the story of how people would react to alien technologies and other worlds. But he's not very good at it in this book. The arguments are just barely sketched out, and the conclusion feels like the author just got tired of writing rather than bringing matters to a conclusion. It might have been a stronger book had he abandoned the viewpoint characters involved in the exploration and spent more time on the core of the emotional story.book
|Saturday, January 9th, 2016|
|"... you got to learn to feel good about it. Look at the way the whole economy is structured."
What can rich people possibly do with their money?
This is a serious question. I'm rereading "The First Modern Economy: Success, Failure, and Perseverance in the Dutch Economy, 1500-1815." The authors take some time to discuss the rentiers of the 18th century, who were criticized both by contemporaries and historians for "a tendency on the part of capital... to prefer speculative trading... and investment in money lending and insurance, to the toil and hazards of foreign trade." (quote from Violet Barbour). The authors make a case that in part this was a natural reaction to a less-friendly trade environment --- mercantilist barriers were going up all over Europe --- but also a consequence of having more money than they really knew what to do with:
The vast accumulations of capital in the hands of the eighteenth-century capitalists placed them (ironically) in a position of dependence vis-a-vis national states. Only the states, with their taxing power, could hope to absorb such sums and make regular interest payments. The fact that governments sought to borrow almost exclusively to wage war guaranteed that Dutch capital would do little to stimulate economic growth directly; but neither the immediate economic possibilities nor the grandiose development projects that we, in retrospect, may be capable of imagining could have absorbed a large portion of the late eighteenth-century stock of financial capital. In the circumstances of the times, governments held a monopsonistic position in the capital markets.
(I think this is not quite on point because the Dutch did have some pretty grandiose empire-building designs of their own, which absorbed quite a bit of capital, they just didn't work out.)
The same criticism persists today, about too much money sloshing around in financial instruments instead of the "real economy." But, absent some grand redistributionary scheme, what exactly should the ultra-rich be doing with their money? (We have seen how even voluntary redistribution provokes acerbic backlash on the means and goals.
Loaning it to the government is still a popular choice, and like the 17th and 18th century, it goes mainly to fund wars rather than development projects.
Starting a business takes lots of money --- and that's how at least a couple billionaires I know choose to use their money --- but, if the business is successful, only compounds the problem
. And presumably we don't want capital going to unsuccessful businesses.
There's arguably a limit to even how much the startup ecosystem can fruitfully absorb. Small companies just don't need all that much capital. Plus an excess of cash leads to self-fulfilling prophecies in which success is measured by the ability to raise more cash
Plunging all your cash into a 2-billion-dollar iron mine
increasingly seems like a bad idea. Buying somebody else's company just shifts the problem around.
So where *should* all that capital be going? Is there even an answer? Clean energy? Our best answers don't seem all that different from the 18th century Dutch:
1. War and interest service on war
2. Naked speculation
4. World domination (aka Elon Musk, although in his case "space" might be more apropos)
|Saturday, January 2nd, 2016|
I managed to tune my CUDA (GPU programming) demo project to get about 4x better throughput: https://github.com/mgritter/advent-of-cuda/tree/master/day4
The first major piece of surgery was moving constant tables into "shared memory" on the GPU, instead of device memory. The GPU's L1 cache does not serve as a read cache for device memory! At least, not in the version of the architecture I'm using, 3.2. Later revisions have a "read only" cache and a special intrinsic to use it. The "shared memory" is data that is available to all threads in a "block", and lives in the L1 memory, along with per-thread allocations and register spills.
After this, profiling (with the NVIDIA visual profiler) still showed that L2 cache throughput was maxed out, with a mix of both reads and writes. So the next step was to find a way to move the actual data being hashed into registers instead of memory. Shared memory would not be appropriate as each thread is working on a different input.
After both these steps, profiling shows that the performance is now bounded by compute, and that the kernel occupancy is 97.3%, so the GPU is almost fully utilized. The device is doing slightly more than 100 million MD5 hashes per second. (For this particular problem, only the first word of the hash is relevant.) Further improvements would probably require finding ways to hash with less integer arithmetic--- which is about 80% of the instructions. But, I have not looked at other GPU-based hash calculations and figured out what techniques they are using.
|Friday, January 1st, 2016|
|How I've been entertaining myself
I participated in Advent of Code
, and Advent calendar of programming puzzles. Of the 25 days of puzzles, one I solved without doing any coding, one other by minor scripting of an existing application, and the rest in Python. It was a fun exercise. (Sadly, I did not submit a solution quickly enough on the last day to make the leaderboard.)
For Christmas I received a NVIDIA Jetson TK1
, a development board for the Tegra K1 "system-on-a-chip". Most notably, it comes with a 192-core GPU built in, making it a 5"x5" supercomputer.
I thought a good project to get more familiar with programming it would be to reimplement some of the Advent of Code problems using CUDA (Nvidia's programming API for GPU computing.) I posted my first effort on github: https://github.com/mgritter/advent-of-cuda/tree/master/day4
(But, I haven't rerun my old Python solution to demonstrate the speedup!) The new code is capable of finding the solutions to the original problems in less than a second each, and of finding solutions to the "next-hardest" version of the problem in about 9 seconds.
I also have a bunch of new games to play: Mini Metro (a fun logistics game), Concrete Jungle (deck-building + city-building), Infinifactory (factory layout for evil aliens), and Offworld Trading Company (a logistic RTS.) Yes, even my games are really all about programming. :)
|Sunday, December 13th, 2015|
|Algorithms that only need to be executed once
Charles Babbage knew from personal experience
that mathematical tables are hard to create. He and William Herschel discovered error after error in published books. Even if you get all the calculations right, the odds are pretty good that there will be typesetting errors.
Because his whole motivation for the Difference Engine was to perfect this process, the design reflects an appreciation for unexpected errors. The engine prints its own output, rather than relying upon manual transcription. A second copy of the output is printed in a log, which allows checking the final copy for agreement. The mechanisms of the calculation operate in such a way as to jam rather than produce an incorrect sum.
One can think of the difference engine is a mechanism designed for running its algorithm just once. After you build a table of logarithms, you don't need to do it again. Of course, the machine is configurable to produce a variety of tables. And it's restartable in case a page is damaged. But the key difference is that correctness takes precedence over throughput or flexibility.
What's striking to me is how few examples of such run-once algorithms are of practical use today. Mathematical models generally don't consult pre-computed tables, we just run an algorithm that calculates the answer on demand. A lot of the problems that are interesting to us are online problems where new data shows up all the time.
Verification tools for circuit design are usually run *successfully* only once. However, they are often run multiple times on nearly the same input, because the whole point is to find and fix bugs.
An example from number theory is verification of the largest Mersenne prime. In that case, rather than writing one really solid algorithm, the number was verified on multiple implementations of primality testers! I don't know what Babbage would think of that.
So, what sort of algorithms today are run only once on a given problem? Admittedly this is a fuzzy definition because, say, Google never indexes the same Internet twice. And the circuit-verification example is technically different each time.
|Tuesday, December 8th, 2015|
The current rumor is that Cisco may purchase SpringPath, a recently-launched startup that makes a "hyperconverged" software solution. http://m.crn.com/news/data-center/300079048/cisco-partners-acquiring-hyper-converged-startup-springpath-would-make-ton-of-sense.htm
Cisco has been partnering with Simplivity, a company with a similar offering.
What these companies offer is a software solution that combine local storage (flash drives attached to the hosts in a virtualized environment) into a distributed storage appliance. Cisco's previous attempt to sell a storage solution, by acquiring Whiptail, crashed and burned.
The only reason I can think of to pick SpringPath rather than one of the leaders in this area is because they're cheap. So it's not an expensive bet for Cisco to make. But they've been burned before by trying to build a storage solution without sufficient commitment or maturity.
|Saturday, November 21st, 2015|
|NMBL, you had one job
I've written before about how Tintri's best public comparable is Nimble, and NMBL's price has been pretty flat despite revenue growth.
Well, Nimble missed their revenue and profitability targets this quarter, and the market reacted viciously. As Tintri's CFO has warned us on multiple occasions. The stock lost about half its value. They also pulled down Pure Storage by about 15%. Incumbent storage companies (EMC, NTAP, etc.) went up. The dominant story today seems to be "gosh, selling storage is tough and there's a lot of competition."
BMO Capital analyst Keith Bachman wrote
Our original thesis on Nimble is broken. We had previously assumed (incorrectly) that Nimble’s technology advantage would enable the company to take share in both the midmarket and enterprise, while also gradually growing profits and cash flows. However, we think the challenges of Nimble’s competitors are now engulfing Nimble, in terms of both revenue growth and profits. Moreover, while Nimble envisions improving profitability in 2H FY2017, we are less convinced.
Hence, we are moving to our back up thesis. We believe that Nimble could make an interesting take out target for the very same reasons mentioned above. The incumbent storage vendors are seeking growth and could meaningfully improve Nimble’s sales leverage. In addition, Nimble is a lot less expensive than it used to be. Nimble’s gross margins remain 67%, which would be accretive to Nimble’s competitors. Moreover, R&D is only about 22% of revenues, whereas S&M and G&A combined are about 58% of revenues. Further, we believe a large portion of non-R&D spending could be meaningfully reduced or eliminated.
Frankly, I *don't* think Nimble has a technology advantage. They lack an all-flash array (though one is coming) so can't compete with Pure, EMC's ExtremeIO, Netapp, Tintri, and Tegile in that market. They have good analytics capability in InfoSight but no real-time analytics on the box (which particularly hurts federal and financial customers) and no per-VM features like Tintri. The areas where Nimble has been strongest is in the commercial sector where they have affordable products and a very strong channel presence.
There is a tendency of market analysts to treat public companies as the only companies around. If somebody is going to get snapped up in an acquisition, I don't think it's going to be Nimble. (The fact that it's cheap hasn't helped Violin.)
|Wednesday, November 18th, 2015|
|Competing narratives and yes, your wiseassery really will get brought up in court
It's interesting skimming through the competing trial briefs in the Optumsoft vs. Arista case. They're documents 216 and 218 in the electronic case filings here: https://www.scefiling.org/cases/docket/newdocket.jsp?caseId=956
Both lawyers are, unsurprisingly, very good at explaining why the other side's position is completely unreasonable and contradictory.
It bears repeating that you should treat company email very, very seriously. Ken's comment unearthed in discovery:
Moving forward, any project involving moving code out of //src/tacc will probably need Henk’s approval or something like that. All the more reason to not add any code there ever again.
is dissected at length and held up as an example of Arista's bad faith. (The Optumsoft narrative is that Arista is trying to pretend that only changes made in that directory are "improvements" to TACC, the software under dispute. Arista's actual claim is more subtle than that.)
Now, I know Ken from Stanford, and used to work for Henk. (In fact, I think I know everybody who testified in this case except the expert witnesses.) Ken almost certainly didn't mean "let's violate our agreement by not providing Optumsoft any of the required improvements." The email is in keeping with Ken's approach to technical issues --- "how can we fix the process to remove cause for future disputes?" --- but uses a hyperbolic tone that is easily misconstrued.
It is also a bit amusing, as the recipient of some jeremiads from David, to see them being brought up in the trial record.
I don't think it's a good idea to stress over how every email you write might look in court. But when you *know* there's a dispute, you should probably assume that any email discussions about that dispute can and will be dragged into the light.
|Sunday, November 8th, 2015|
|Pi is Political
What is Pi? Although the typical definition in terms of circles is intuitive, it's not particularly well suited to analysis.
In the early 20th century, Edmund Landau, a German Jew, championed the position that Pi/2 should be defined as the smallest positive zero of the cosine function. (The cosine itself can be defined as an infinite series.)
For his efforts, Landau was singled out by Ludwig Bieberbach in his inflammatory talk on "J-type" and "S-type" mathematics in 1934. "Thus... the valiant rejection by the Gottingen student body which a great mathematician, Edmund Landau, has experienced is due in the final analysis to the fact that the un-German style of this man in his research and teaching is unbearable to German feelings. A people who have perceived... how members of another race are working to impose ideas foreign to its own must refuse teachers of an alien culture."
Bieberbach started his own journal, "Deutsche Mathematik" to publish "Aryan mathematics".
British mathematician G.H. Hardy published a note in Nature, stating: "There are many of us, both Englishmen and many Germans, who said things during the War which we scarcely meant and are sorry to remember now. Anxiety for one's own position, dread of falling behind the rising torrent of folly, determination at all costs not to be outdone, may be natural if not particularly heroic excuses. Prof. Bierberbach's reputation excludes such explanations of his utterances; and I find myself driven to the more uncharitable conclusion that he really believes them true."
It's striking how apologetic the tone is for failing to find a charitable interpretation of Bierberbach's anti-Semitism. The split between intuitionistic and mainstream mathematics persists today, in less racially charged form. But there are plenty of other divides where it seems like the search for an exculpatory frame of mind obscures the real harm being wrought.
(Quotes from "Numbers", H.D. Ebbinghaus et al, translated by H.L.S. Orde.)
|Monday, November 2nd, 2015|
|Bones was right about the transporter
Star Trek canon records at least 11 transporter accidents:
* Splitting Kirk into good and evil halves (TOS: The Enemy Within)
* Transport to the mirror universe (TOS: Mirror, Mirror) --- not counting later deliberate action
* Transport to another universe (TOS: The Tholian Web)
* Two deaths in Star Trek: The Motion Picture
* Weyoun 5 dies in DS9: Treachery, Faith, and the Great River
* Clone of Riker (TNG: Second Chances)
* Reverting four individuals to younger versions of themselves (TNG: Rascals)
* Travel through time (DS9, Past Tense)
* Merging multiple individuals (VOY, Tuvix)
* Damaging the holographic doctor's mobile emitter (VOY, Drone)
* Rendering two crew members incorporeal (TNG, The Next Phase)
To calculate a malfunction rate, we need some estimate of how many times the transporter was used in total during this period. There are 79 TOS episodes, 178 TNG episodes, 176 DS9 episodes, and 172 VOY expisodes. That gives 605 episodes. If we generously estimate 4 transports per episode that gives a failure rate of 0.4%, unacceptably high.
Transporters appear to be able to cross planetary distances easily (no waiting for proper orbital alignment.) An estimate of 25,000 miles per transport --- that is, assuming starships are usually in high orbit --- and 6 people at a time gives an accident rate of around 30 per billion passenger-miles. Modern cars and light trucks have a fatality risk of 7.3 per billion passenger-miles. (However, it should be noted that many of the transporter accidents were reversible or otherwise non-fatal.)
|Saturday, October 10th, 2015|
So, the news is going around that VW is attempting to claim just a few software engineers knew about the hack, and not any executives. The theory is that the executives made a decision to pursue a particular diesel technology strategy which couldn't be made to work, and so low-level engineers put a hack in to save their jobs.
But there's a lot of levels in between that are glossed over in this story. It's certainly possible, even likely, that the board did not know. It's also possible that the CEO and head of business unit did not know. But "rogue software engineers" doesn't cut it.
Suppose you've magically cracked a tough software problem that has been causing lots of hair-pulling and executive pressure. What happens next?
1. Your boss asks "how did you do it?" What's your answer? Is your boss now complicit? (Or merely suspicious?)
2. Your QA department asks how to test your fix. Their code coverage tool makes sure that the branch you put in actually gets executed. Do they ask what use case this is? You can't just check in and push to production in an embedded automotive environment.
3. Your patent lawyer stops by and asks you to file a disclosure about your invention. How do you convince the legal team to leave the flagship "clean diesel" technology a secret?
4. A new hire in the group is excited about how you guys have done great things for the planet. (Maybe he or she has been watching to many GE advertisements.) Your coworkers want to understand and maybe improve on your design. What's your answer when they ask for a description of how the magic works?
It seems unlikely to me that this deception could be executed without being widely known within the team. Management may have been deliberately obtuse, I suppose, but this is not about some insider siphoning off half-pennies. It's a key feature that VW actively promoted, and it's inconceivable that nobody else asked how it was accomplished.
|Thursday, September 24th, 2015|
|Ambiguity might or might not work in our favor
Tintri is on TechCrunch's "Unicorn Leaderboard" http://techcrunch.com/unicorn-leaderboard/
but at the very bottom. We have not disclosed a valuation, ever. (Also, as of this writing, our sector is listed as "healthcare." Don't believe everything you read on the Internet.)
This table is very amusing to me given the sheer number of companies clustered between $1.0b and $1.03b. There are 25 in that range, compared to 11 in the "emerging unicorn" list for the range $800-999m. Some of these funding round values were set to just cross over into "unicorn" range.
On a tangential note, Pure Storage hopes to be valued at up to $3.33b at IPO.
Here I am with my Titan of Technology
The crowd gasped when the MCs stated that Tintri hoped to go IPO next year with a valuation over a billion dollars. It was definitely a Dr. Evil moment, but I was never any good with the pinky finger.
The collection of attendees was a little bit odd. Quite a lot of real estate people. Nobody I saw from any of the banks, or from Target, or the major healthcare players, although Thomson Reuters was a sponsor. Tim had to sit next to some headhunters, but also somebody from Public Radio International. Phil Soran (Compellent, Vidku, etc., a winner last year) came up and introduced himself, and I said hi to Sona Mehring (CaringBridge and the Minne* board), who was awarded this year.
|Friday, September 4th, 2015|
|DFA's aren't easy
A blog entry on "Open Problems That Might Be Easy"
mentions this one:
Given a DFA, does it accept a string that is the binary representation of a prime number--- is this decidable?
I think this is sort of a tricky question in that it sounds simple but actually asks for very deep insights. To solve it you might have to know something about prime numbers which is also an open problem!
How hard are DFAs? After all, we have the pumping lemma which helps us prove that languages aren't regular. But, your computer is actually equivalent in power to a DFA (if we disconnect it from the Internet.) It has only finitely many states, and so the languages it can recognize are regular. So imagine this problem as "how can I tell whether a computer program, running on a Windows Server 2012, on a eight-core machine with 256GB of memory, ever accepts a prime number?" We're talking an unimaginably large number of states--- does it still seem reasonable that there's a computable way of analyzing its behavior?
But, we do have the pumping lemma. So if we could characterize that there is always a prime number of the form
a ## bb...bb ## c
, that might answer the question in the affirmative for any DFA for which we could identify its "sufficiently long" strings. But this is obviously false without further qualification--- take a = 1, b = 0, c = 0. If we use [math]a=1111...1111, b=1, c=1[/math] then the answer may depend on the existence of very large Mersenne primes. So it may be possible to write a DFA for which the answer "does it accept any primes" provides a deep number-theoretical result.
|Thursday, August 20th, 2015|
|Friday, August 14th, 2015|
|Speaking of comparables
Pure Storage filed their form S-1
in preparation for an IPO. It contains a few surprises.
The one most remarked upon is that Pure's market share is not quite what it was believed to be. Gartner estimated calendar year 2014 revenue of $276 million, while Pure reported fiscal year 2014 (offset by one month) revenue of $155m. The difference for 2013 was also large, on the order of $75m.
The Gartner analyst has apologized for his company's error
. Pure, having entered their quiet period, cannot explain why they decided to let Gartner's mistake pass (they, like other companies Gartner covers, are given an opportunity to correct factual errors.) I haven't worked in analyst relations--- perhaps letting Gartner make errors is standard practice. Certainly I can understand if Pure decided keeping revenue numbers private outweighed getting an accurate representation in Gartner's market share breakdown.
Pure is proposing a dual class stock structure in which existing investors keep control of the company (their class B shares will have 10x the voting rights of the new class A common stock.) Opinions vary on the wisdom of this. I think it's something the market doesn't care about if your company is successful, and cares a lot about if things don't look bright. It's a little arrogant to assume that Pure is in the former category, but that has been Pure's marketing image from day one. :)
Something I *haven't* seen discussed elsewhere is the large payouts to the executive team (and early investors) in the form of stock repurchases.
In November 2013, we repurchased an aggregate of 3,045,634 shares of our outstanding Class B common stock at a purchase price of $6.9315 per share for an aggregate purchase price of $21.1 million, of which 557,842 shares of common stock were repurchased from David Hatfield, our President, for an aggregate price of $3.9 million. Mr. Hatfield was the only executive officer to participate in this tender offer.
In July 2014, we repurchased an aggregate of 3,803,336 shares of our outstanding Class B common stock at a purchase price of $15.7259 per share for an aggregate purchase price of $59.8 million. The following table summarizes our repurchases of common stock from our directors and executive officers in this tender offer.
Name Shares of Common Stock Purchase Price
Scott Dietzen(1) 192,051 $ 3,020,174
John Colgrove(2) 200,000 3,145,180
David Hatfield(3) 1,000,000 15,725,900
(1) Dr. Dietzen is our Chief Executive Officer and a member of our board of directors.
(2) Mr. Colgrove is our Chief Technology Officer and a member of our board of directors.
(3) Mr. Hatfield is our President.
In April 2014, Pure raised $225m. But $60m of that went right back out the door to existing stockholders. (In August 2013, Pure raised $150m, with $21m flowing back out.) Some of this outflow is mitigated by the exercise of stock options.
I can't speak to these individuals' financial situation and whether it made sense from a personal position for them to cash out. But from a company position, this seems excessive compensation for a company that hasn't yet proved itself. Together the three executives took $25.8m in cash out of the company (not counting any salary or bonuses) In all three cases, they were also loaned money by the company in order to purchase stock or exercise options, and these loans have been repaid, presumably with the proceeds from the stock buyback.
Finally, Pure is growing its revenue rapidly (although, as noted, not as rapidly as had been previously believed--- and EMC is all over it.) But it's losing a lot of money too. Net cash flow from operations in the most recent quarter was -$14m, and an extra -$6.7 in investment cash flow (including capital investment). That's not too bad, although the reported loss was more than $49m. Somebody more versed in accounting than me can probably explain out how they managed to pay that much operational cost without a corresponding drop in cash? (It's in there, depreciation and stock-based compensation and such.) For the fiscal year ending January 2015 they burned through $196m.
In fiscal 2015, Pure spent about $1 in sales and marketing for every $1 in product revenue: $154,836,000 in product sales (not counting support) and $152,320,000 sales and marketing (not counting any G&A or R&D.) EMC will hammer them for this too. It's a "get big fast" strategy which spends a lot of money every quarter trying to make the next quarter's sales even bigger. You can see this when you slice the data quarter by quarter:
4Q2015 sales and marketing: $42,533K
1Q2016 revenue: $74,077K
3Q2015 sales and marketing: $38,224K
4Q2015 revenue: $65,850K
2Q2015 sales and marketing: $46,448K
3Q2015 revenue: $49,189K
1Q2015 sales and marketing: $25,115K
2Q2015 revenue: $34,764K
This may be correct, but it's an expensive strategy and one that doesn't leave a lot of room for error. The return they're getting on a sales and marketing dollar is not consistently high.