Show HN: MineSweeper implemented in 100% CSS and HTML – no JavaScript - <AUTHOR> https://github.com/propjockey/css-sweeper#readme <comment><AUTHOR> I realize this is an absurd thing to do, but it was fun and I wanted to test the limits of CSS again so I could share the results!

I linked to the README since any web devs that see this will probably want to know how buuut here's a link to the game if you want to go hands on:

[https://propjockey.github.io/css- sweeper/#randommenu](https://propjockey.github.io/css-sweeper/#randommenu)

It's all open source, and I discuss some details of how to do it in that readme, but I am more than happy to answer any questions!

Thanks for checking it out!

<comment><USER2> No way! I've done exactly the same thing. ([https://news.ycombinator.com/item?id=15479160](https://news.ycombinator.com/item?id=15479160)) At first I thought this was my own thread! I guess there's a healthy overlap between loving Minesweeper puzzles and CSS puzzles. :)

I used HTML/CSS so I could implement it on a Neopets page, which meant I couldn't use forms, inputs, or CSS3, which means it's less feature-complete and the approach is completely different. The final result, though, is still the same delightful Minesweeper experience.

[http://www.neopets.com/~Cism](http://www.neopets.com/~Cism)

Codepen link (so you don't have to be signed into Neopets to see it)

[https://codepen.io/qaz/pen/bGEzyrJ](https://codepen.io/qaz/pen/bGEzyrJ)

Enjoy!

<comment><AUTHOR> This is awesome - Could you please explain how you're holding state of each box individually without checkbox:checked? It's not immediately obvious to me how that's possible or where it's happening in your code!

<comment><USER2> Thanks!

I use scroll position to keep the state. In effect, each square is in a div with overflow:hidden. (In the actual code I used <i>, not <div>, which might've been to save bytes because the server is so slow). It has a fixed visible height, the height of the square. Above the fold (before scrolling) is the un-clicked square, and below the fold (what you see after scrolling) is the clicked square.

Since overflow is hidden, you have to use an in-page anchor link to scroll to the clicked state. The unclicked version of each cell is an anchor to the clicked version.

<comment><AUTHOR> wow, that's super clever. I was sitting here reading the code and didn't find a negative margin or positional property anywhere, and further, no switches to hold the state. Couldn't for the life of me figure out what you were doing hahaha I love it

Thank you!

</comment></comment></comment></comment></comment><comment><USER3> This is really cool! I saw your responsive library[0] post [1] the other day, but couldn't quite wrap my head around it.

With this post, I think I am starting to grok the (Space Toggle) trick. The Tweet you linked in your library was really helpful [2].

My current understanding is – in CSS, you can set a variable to nothing (a space). When a property contains that "blank" variable, it is replaced by nothing and so the second, "fallback" value is the default. Because you can update CSS variables within more specific or later CSS, you can update the "blank" variable and give it a new value of "initial", this causes it to switch from the default to the defined override.

I realized, you can even combine this with the CSS checkbox hack. I made a (super hacky) version of CSS-only dark mode toggle based on your JSBin (gotta love an absolute positioned bg, lol) [3]

[0] [https://propjockey.github.io/css-media- vars/](https://propjockey.github.io/css-media-vars/) [1] [https://news.ycombinator.com/item?id=23865900](https://news.ycombinator.com/item?id=23865900) [2] [https://twitter.com/James0x57/status/1283596399196680192/pho...](https://twitter.com/James0x57/status/1283596399196680192/photo/1) [3] [https://jsbin.com/xelufoyoka/1/edit](https://jsbin.com/xelufoyoka/1/edit)

<comment><AUTHOR> haha, awesome! You nailed it. It's really cool to see it being tested out in the world! Thank you for sharing!

</comment></comment><comment><USER4> That's crazy! The large lag between clicking and the UI updating is slightly annoying, but that's just me nitpicking at something other than the cool technical feat.

<comment><USER5> yeah, i expected it to be instant to be honest, given it's just markup and there's no "thinking"

<comment><AUTHOR> It's 1.23MB of CSS & HTML - this is meant to be a stress test of the limits, lag is expected for the next several years of average-at-the-time computers!

<comment><USER6> Or until someone packages your madness as a popular library and browsers are forced to optimize it.

<comment><USER7> Make it an Electron app!

(I'm joking, please don't. Please.)

<comment><USER8> that would not speed it up at all.

</comment></comment></comment></comment></comment></comment><comment><USER9> I think I see my CPU dripping out the side of my laptop.

<comment><USER10> Indeed. This pegged a CPU core and locked up my browser for over a minute just opening the page.

<comment><USER11> Syrange, but it works almost without lags on S10 phone.

<comment><USER12> Same here, page loaded pretty fast and lag is maybe 200ms on my phone using Firefox.

</comment></comment></comment></comment><comment><USER13> Very cool. CSS can do some amazing stuff these days. I made a game using moving checkboxes recently - [https://codepen.io/onion2k/pen/qBbKYee](https://codepen.io/onion2k/pen/qBbKYee) \- with a timer and scoring. It's a fun challenge to avoid JS.

<comment><AUTHOR> I saw that a few days before I started making this actually! [https://news.ycombinator.com/item?id=23867569](https://news.ycombinator.com/item?id=23867569)

<comment><USER14> I always wonder what kind of cool stuff HN inspires. There has to be tons. Is there a list?

<comment><USER3> Not curated, but found a whole bunch with this search [https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...](https://hn.algolia.com/?dateRange=all&page=0&prefix=true&query=inspired%20by%20post&sort=byPopularity&type=story)

</comment></comment></comment></comment><comment><USER15> Good stuff! I made a sudoku in CSS ([https://identicalsnowflake.github.io/sudoku.html](https://identicalsnowflake.github.io/sudoku.html)) a while back, but it looks like the variable trick mentioned in the readme is a more straightforward way to embed logic, so if I were to make something similar today, I'd probably pursue that route.

<comment><AUTHOR> This is great! I love how there's a bit of a reward for getting past the difficult middle part of gameplay - when there's not many spots left it goes fast and you can click click click to finish up without sitting there cleaning up your notes or counting 1-9 to figure out the last number or two. This is a big improvement haha

</comment></comment><comment><USER16> Every day we stray further from God's light.

</comment><comment><USER17> It sort of bothers me how much feature creep CSS itself has undergone. Was it not enough to leave things simpler and just use pre-processors and JavaScript?

What hope does one have to implement the entire CSS spec from scratch now?

<comment><USER18> I see your point about separation of concerns.

This minesweeper, and the other examples in the comments, seem to capitalize on some hacky aspects of CSS, not features of the CSS spec.

In the real world, I doubt many people rely on CSS for things that JavaScript can do. (but I bet plenty of beginners use JavaScript, when CSS would have been more appropriate, haha)

</comment></comment><comment><USER19> Very interesting! Can I ask, how did you implement the timer in CSS/HTML?

And also, what causes the lack of responsiveness?

<comment><AUTHOR> The timer itself is a CSS animation with 1000 keyframes evenly spread, that runs once for 999s (just realized it should be running for 1000s, oops!). I can't link to lines in the source code because of the 1.23MB filesize but you can search for "timer" in the raw source to see the relevant code: [https://raw.githubusercontent.com/propjockey/css- sweeper/mas...](https://raw.githubusercontent.com/propjockey/css- sweeper/master/index.html)

Here's the part that controls when the animation is running:

        #level-none:not(:checked) ~ #ram #timer::before {
          animation: timer step-end 1;
          animation-duration: 999s;
          animation-fill-mode: forwards;
          --pause-if-won: var(--win-state) paused;
          --pause-if-lost: var(--game-over) paused;
          --pause-if-randommenu: var(--randommenu-visible) paused;
          animation-play-state: var(--pause-if-won, var(--pause-if-lost, var(--pause-if-randommenu, running)));
        }

Though the design is responsive to the width of the window, I suspect you mean how slow it is: it's 1.23MB of HTML + CSS, and clicking anything causes almost everything to redraw. It's only a little laggy on my computer but the idea was to test the limits of what's possible and is expected! :)

Thank you for checking it out!

<comment><USER20> Can't you simplify this by making each digit a separate animation, with the ones digit running at full speed, the tens digit running at 1/10th speed, and the hundreds digit running at 1/100th speed? Then you'd only need ten keyframe values.

<comment><AUTHOR> Yes, but I didn't trust them to stay synchronized and it wasn't too difficult to generate the code for 1000 keyframes so I just did that :)

</comment></comment></comment></comment><comment><USER21> If this took you, ballpark, 1 month to do, what do you think you would be able to do in a year?

<comment><AUTHOR> This took ~3.25 days. :)

Since I'm brushing up against the limits of CSS, there's not enough room for a full year :P

<comment><USER22> What inspired the idea and what was your motivation?

<comment><AUTHOR> I made a Binary Coded Decimal 7 Segment Display Decoder a couple days prior to starting this: [https://github.com/propjockey/bcd7sdd](https://github.com/propjockey/bcd7sdd)

After that blew up on twitter I tried thinking of something else I could test using checkboxes as the state and MineSweeper just popped in my head since it's pretty much 480 fancy checkboxes.

Motivation was just to see if I could, then to see what the limits are once I realized I'd be able to.

Thanks for checking it out!

</comment></comment></comment></comment><comment><USER23> I was sad to discover that Minesweeper is no longer bundled by default with Windows.

</comment><comment><USER24> I tried this on a low end smartphone. Might as well have been called MineSwapper

<comment><USER25> The bombs are fork bombs

</comment></comment><comment><USER26> Idle question,

is CSS/HTML turing complete?

If so I look forward to a Show HN of a CSS/HTML emulator of JSMESS emulating a 386 running Windows 98.

<comment><USER27> It is (and has been since the css 2.0 era) if you include user clicking mouse.

There is a famous demo of rule110 in css at [http://eli.fox- epste.in/rule110-full.html](http://eli.fox-epste.in/rule110-full.html)

<comment><USER28> Mouse is not necessary using CSS 3 (animations); Minesweeper[1] is enough to show Turing completeness.

[1] [http://web.mat.bham.ac.uk/R.W.Kaye/minesw/infmsw.pdf](http://web.mat.bham.ac.uk/R.W.Kaye/minesw/infmsw.pdf)

<comment><AUTHOR> edit: ^ previously said "with css variables to hold state" or something similar (or my wires got crossed and I saw that somewhere else)

CSS variables can't be set by animations yet without JS's CSS Houdini giving them a type - a CSS @ property is in the works to do it without JS though!

</comment></comment></comment></comment><comment><USER29> Now, which email clients does this render properly in! I'm looking forwards to diving through this.

<comment><USER30> A 16x16 minesweeper email signature would be a great way to make an impression.

</comment></comment><comment><USER31> I was so confused why everyone was saying the game is so impressive when all my clicks did nothing but place a '?' where I clicked. Was each '?' an error message? No, it turned out you need to click each square twice to reveal it. The page really needs some instructions, because that is not how normal Minesweeper works.

The other thing you need to know to play is that right-clicking won't flag a square. Instead, you need to left-click on the flag in the top left to toggle flag mode, then left-click on a square to flag it.

</comment><comment><USER32> I'm confused -- how do I flag? Right-clicking seems to just bring up the right-click menu.

Edit: Nevermind, figured it out. You click on the flag up top to switch between flagging and clearing.

</comment><comment><USER33> Now do GPT-3.

</comment><comment><USER34> Oh my god, this is AWESOME!

<comment><AUTHOR> haha thanks! :D

</comment></comment><comment><USER35> Very nice. Thanks for sharing.

</comment><comment><USER36> doesn't work in Safari

<comment><AUTHOR> Hmmm... do you know what version you have?

It should work on iOS 11.3 and up... maybe. They might have smaller limits on the number of operations per calc()..? Can't think of anything overtly incompatible.

Unfortunately Safari is today's IE6 in web dev since they're so far behind on so many features. Except it's worse since you can't test without owning their products or paying for a service either... wish I could check it out, there's probably something to learn

</comment></comment><comment><USER37> Doesn't work on mobile? Safari / iOS 13.4.1 here.

<comment><AUTHOR> Any chance you could share a screenshot? I can't test safari without owning apple products or paying for a service :(

as far as I know iOS 13.4.1 should be completely compatible.. there might a smaller limit on the number of calc() operations? The spec says it must support a minimum of 20 operations, but I'm (ab)using almost 1000 in a max()

</comment></comment><comment><USER38> Why.

</comment><comment><USER39> This is very slow in my browser, which I don't mean as a criticism. Just refreshing to see something be slow that uses no JS at all :D

<comment><USER40> It is rather ironic that the chief complaints about JS are how it makes things bloated and unresponsive, yet this is 100x the size of [http://www.play- minesweeper.com](http://www.play-minesweeper.com) and the time to interactivity is recognizable by comparison. The HN community is a funny one, sometimes.

<comment><USER41> The OP is a 1.23MB tech demo in CSS absurdism, not a baseline for performance comparisons. You have the wrong take-away if you think you can squeeze any sort of performance point from this.

It's like seeing that fun tech demo that implements Brainfuck in Rust's type system and going "heh, and they said compiled languages were fast? I can do this faster in PHP!"

<comment><USER40> You have the wrong take-away if you think the performance points were what I was actually focused on.

The HN community largely rails against the use of JS anywhere, even if not using JS would make things much more difficult. Therefore, it's funny when someone makes a relatively trivial app not using any JS and it exacerbates the problems people cite for JS rather than not.

The whole thing is really cool and I love how they managed to get so far using some cool CSS tricks. But per the community it should also be a godsend because by not using JS it should by default make it faster, smaller, and probably cure cancer or solve for FTL travel or something.</comment></comment></comment></comment>


Cloudflare S-1 - <AUTHOR> https://www.sec.gov/Archives/edgar/data/1477333/000119312519222176/d735023ds1.htm <comment><USER2> > Today, our network spans 193 cities in over 90 countries and interconnects > with over 8,000 networks globally, including major ISPs, public cloud > providers, SaaS services, and enterprises. We estimate that we operate > within 100 milliseconds of 98% of the Internet-connected population in the > developed world, and 93% of the Internet-connected population globally (for > context, the blink of an eye is 300-400 milliseconds). We intend to continue > expanding our network to better serve our customers globally and enable new > types of applications, while relentlessly driving down our unit costs.

This right here is a real tech IPO that has a strong portfolio behind it with a viable business model too and with an impact that affects millions of websites. Throughout this year it is just loss-making companies floating everywhere on the markets here and have boarded the hype-train into the red.

I hope CloudFlare with these numbers here don't board the wrong train here.

<comment><USER3> >We estimate that we operate within 100 milliseconds of 98% of the Internet- connected population in the developed world,

Am I missing something here? For Reference; A one way New York to Hong Kong connection takes roughly 110ms.

<comment><USER4> I'm assuming User -> Cloudflare, not User -> Cloudflare -> Endpoint

<comment><USER5> I guess is not a very impressive number in that case

<comment><USER6> It is, considering the majority of the internet-connected population is not on fiber.

<comment><USER7> Fiber does not impact latency

<comment><USER6> From a physics perspective, perhaps not.

From a real-world perspective, fiber buildouts almost always include newer hardware and better routing, resulting in lower ping times on average.

Additionally, fiber (along with copper) is going to be faster than anyone on satellite internet.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> The free tier of Cloudflare has been really amazing for small to medium websites.

It gives you a basically unlimited CDN, SSL, HTTP/2, DDos protection and fast DNS servers with almost 0 effort... for free ...

Thus increasing the stability and speed of many web properties that otherwise wouldn't pay for it.

I'm afraid this could easily change once the company is public and is under the pressures that come along with it, which is a shame.

(I also try to get them paid business when I can by nudging companies to use them)

<comment><USER9> How so? If the service is WORTH paying for, then it SHOULD be paid for. The world of service, if proven magnetizable, should always be monetized. #FreeMarkets

<comment><USER10> Markets don't equilibrate at the value to the customer any more than they equilibrate at the cost of production. They compromise between the two.

<comment><USER11> > Markets don't equilibrate at the value to the customer any more than they > equilibrate at the cost of production. They compromise between the two.

No, they don't compromise between them, nor do they reflect one more than the other: the basic law of supply and demand is that markets clear at the quantity and price where the marginal cost to produce equals the marginal value to customers which also equals the sale price.

<comment><USER12> assuming a huge number of perfect circumstances which is not how reality works. Assumptions made for what you said to play out include: perfect competition, perfect information, perfect rationality of actors, 0 barrier to entry, that value and cost is strongly bounded and defined on either end, and much more.

Common examples that violate each one in term: Facebook, Used cars, Veblen goods, Utilities, Healthcare.

A market that has one large player that completely dominates certain segment(s) is not likely to be a healthy one that is providing value at near cost, why would it be? The incentive is always to charge as much as possible.

<comment><USER11> > assuming a huge number of perfect circumstances which is not how reality > works.

I don't think there is actually an equilibrium price defined as some kind of compromise between supply and demand curves absent those circumstances, either; there's an _actual_ price at any given time, but it's not an equilibrium (particularly, without rationality—which incorporates perfect information—you don't have any expectation of an equilibrium even if all the other factors are present, at any price.)

Once you are discussing equilibrium—as the post the grandparent addressed did—you are implicitly discussing at least some of the ideal circumstances you'd like to negate.

<comment><USER12> The market can still reach equilibrium even with non optimal conditions, just not the "efficient market" equilibrium.

Additionally, irrational does not mean unpredictable, after all advertising is extremely effective.

</comment></comment></comment></comment></comment></comment></comment><comment><USER13> Here's the meat and potatoes:

> We have experienced significant growth, with our revenue increasing from > $84.8 million in 2016 to $134.9 million in 2017 and to $192.7 million in > 2018, increases of 59% and 43%, respectively. As we continue to invest in > our business, we have incurred net losses of $17.3 million, $10.7 million, > and $87.2 million for 2016, 2017, and 2018, respectively. For the six months > ended June 30, 2018 and 2019, our revenue increased from $87.1 million to > $129.2 million, an increase of 48%, and we incurred net losses of $32.5 > million and $36.8 million, respectively.

Compared to the numbers we've seen for recent tech IPOs, being on track to lose about $72M for 2019 seems reasonable.

Also, haven't read through it all but I'm curious how strong this clause will be for future control:

> The dual-class structure of our common stock will have the effect of > concentrating voting control with those stockholders who held our capital > stock prior to the completion of this offering, and it may depress the > trading price of our Class A common stock.

<comment><USER14> What the heck happened to their OpEx in 2018?!

They went from growing at 60% YoY in 2017 with an 8% Operating Loss, to growing 43% YoY with an Operating Loss of 44%.

To put it another way, in 2018 they grew their revenue 40% (+$58m) and grew expenses 100% (+$115m).

I mean, apparently they raised a huge round and felt the need to increase spending massively. And then saw slowing growth as a response?

Was there a massive boost in R&D output? Entering entirely new product lines? My uneducated impression is that they offer largely the same product this year as they did last year.

The only thing I can think of is that they went from "scrappy startup" to "bloated unicorn" status?

<comment><USER8> My guess: new development-intensive products like the 1.1.1 DNS, Wireguard, WAF etc plus general scaling and growth on one side, and increased competition from established cloud services on the other.

After all, if you are already on eg AWS, just using Cloudfront is temptingly easy. (even if bad from a redundancy perspective)

<comment><USER15> > just using Cloudfront is temptingly easy

IMO this is giving way too much credit to AWS

<comment><USER16> Assuming you're already integrated on AWS, just using Cloudfront _is_ a lot easier than Cloudflare. You're likely already using S3, maybe use CloudFormation as well. Then it's often much more straightforward to use AWS services rather than a third party provider.

</comment></comment></comment></comment></comment><comment><USER17> Both CloudFlare and Zoom are pretty great products and as much as I applaud their team's IPOs, I'm worried that the vagaries of being a public company will result in the GOOG syndrome. That's where a company with a great product is forced to expand every quarter to the point that it becomes a frankenstein- ish hulking version of itself.

<comment><USER10> Why not just pay a dividend? That's what stocks are supposed to be, shares of ownership in legitimately valuable enterprises _with return on investment._

<comment><USER18> Well, at least prior to 2003 there was a strong incentive to prefer gains from stock sale since it could get long term capital gain tax rates (15% now, 20% at the time) vs. dividends which would be taxed as normal income. Since then however, _qualified dividends_ are taxed the same as long term capital gains.

<comment><USER19> There's more to it than that. In order to pay dividends, you have to pay corporate tax before you can pay out the dividends. And that is almost 40% on the top end. So the effective tax of qualified dividends is more like 60%.

Alternatively, if you can stash money overseas in tax free accounts or invest the money back into the business to avoid taxes, then you only have the long term capital gains tax.

<comment><USER20> "After the passage of the Tax Cuts and Jobs Act, on December 20, 2017, the corporate tax rate has been changed to a flat 21% starting January 1, 2018"

<comment><USER19> You are right. So only double the taxes instead of triple by receiving a dividend.

</comment></comment></comment></comment></comment></comment><comment><USER21> Finally an IPO I want to buy into. Technical fundamentals matter.

Edit: I mean that in the software/service way, not the economical way, in case there was any confusion.

<comment><USER22> > Technical fundamentals matter.

Centralization of the entire internet behind a single entity is a _bad_ thing for people who care about technical fundamentals.

<comment><USER23> > Centralization of the entire internet behind a single entity is a _bad_ > thing

They do the opposite. They enable small website owners to survive on the internet without having to use vertically integrated services like cloud offerings.

<comment><USER22> I'm not sure you fully understand the problem. If I hit the big red button and just shut Cloudflare off, millions of websites drop off the Internet. It is a massive single point of failure, and as you point out, a vertically integrated service (DNS, DDoS protection, WAF, proxying, etc).

<comment><USER24> DNS is far from centralized and DDoS protection is something that small websites would have no ability to do on their own. It isn't just a convenience thing, it's a literally-impossible-without-scale thing.

<comment><USER25> DNS for sites protected by cloudflare are on cloudflare's DNS afaik.

<comment><USER26> That's optional and has been for awhile now I believe, you can CNAME from your own DNS provider. While that does rely on their DNS for that one record, it means you still have control to changeover if need be.

<comment><USER25> And, that doesn't change the point... the website protected by cloudflare still controls the effective dns for that site. The lookups are controlled, and CF is a mitm vector.

A client deployment of an app, that the client had behind cloudflare was making 80ms API requests take 8 seconds. It's not always great.

I'm not saying that there aren't alternatives, and that people have to use Cloudflare... but there really isn't much in the way of an alternative at even a similar level of support and price on the low/introduction side of things. The issue regarding recaptcha can be REALLY annoying, especially on a non- google browser.

</comment></comment></comment></comment></comment></comment></comment></comment><comment> concert-gilled Activities of our paying and free customers or the content of their websites or other Internet properties, as well as our response to those activities, could cause us to experience significant adverse political, business, and reputational consequences with customers, employees, suppliers, government entities, and others.

... We also received negative publicity in connection with the use of our network by 8chan, a forum website that served as inspiration for the recent attacks in El Paso, Texas and Christchurch, New Zealand. We are aware of some potential customers that have indicated their decision to not subscribe to our products was impacted, at least in part, by the actions of certain of our paying and free customers. We may also experience other adverse political, business and reputational consequences with prospective and current customers, employees, suppliers, and others related to the activities of our paying and free customers, especially if such hostile, offensive, or inappropriate use is high profile.

</comment><comment><USER27> It's odd to have these IPOs in the middle of August, in the middle of a super volatile market. I can't help thinking that there must be a sense of urgency, based on the perception that this is the last opportunity before a bear market and much more modest (realistic?) valuations.

<comment><USER22> > It's odd to have these IPOs in the middle of August

Read my other comment further down. It is from doing your private SEC filings in December to use a loophole to avoid disclosing a bunch of information.

These companies didn't just wake up in the morning and plan to IPO, it a good 18 months of planning that end with a public filing.

<comment><USER27> That's all well, but I am more familiar with bond issuances than equity, and the issuer always has the option to delay until the right market conditions, and I don't know any banker who would ever advise issuing in the middle of big market correction, in the least liquid part of the year.

<comment><USER28> You actually have that option but there is a limit to how much you can delay - I'm not familiar with US regulation but in most jurisdictions I know about you could delay for max 3 months after your public submission (mostly due to the fact that you present quarterly numbers on the prospectus, which means you need to update it X days after closing the quarter).

</comment></comment></comment></comment><comment><USER29> I adore, and extensively use, Cloudflare's free services for a couple of hobby projects. I hope they don't substantially change them post-IPO.

<comment><USER14> But _tinbucket_ , I'm pretty sure you just loudly proclaimed you would be happy to pay at least $5/month!

<comment><USER30> I'd happily pay $5/month if it covered all of my hobby projects.

I'm not interesting in paying to run just a single project.

<comment><USER29> I'd be the same as you. All of my hobby sites combined probably get 1,500 views a month. I'd happily pay the $5 to cover that.

</comment></comment></comment></comment><comment><USER31> This is perfect timing considering they made headlines all of last week for banning that one site from their platform. But Google Trends seems to reveal that the banning incident was only 1/4 of the search volume they got for their big service outage on July 2nd:

[https://trends.google.com/trends/explore?date=today%203-m&ge...](https://trends.google.com/trends/explore?date=today%203-m&geo=US&q=cloudflare)

I wonder how the IPO news will compare in terms of global search volume

<comment><USER32> This is noted in their risk factors:

> Following the events in Charlottesville, Virginia, we terminated the account > of The Daily Stormer. Similarly, following the events in El Paso, Texas, we > terminated the account of 8chan. We received significant adverse feedback > for these decisions from those concerned about our ability to pass judgment > on our customers and the users of our platform, or to censor them by > limiting their access to our products, and we are aware of potential > customers who decided not to subscribe to our products because of this.

Within the next week we'll see the trends that represent how much nouse their IPO made (IPO news is generally slower moving): [https://trends.google.com/trends/explore?date=today%201-m&ge...](https://trends.google.com/trends/explore?date=today%201-m&geo=US&q=cloudflare)

Side note: you can see that an outage makes about 4x more noise than PR about DDOS protecting a website like 8chan: [https://trends.google.com/trends/explore?date=2019-06-25%202...](https://trends.google.com/trends/explore?date=2019-06-25%202019-08-08&geo=US&q=cloudflare)

</comment></comment><comment><USER33> Am I reading this right when it looks likes they spend twice as much money on sales as engineering?

There was also a very strange spike in stock compensation in 2018, $27,000,000 compared to $2,755,000 in the previous year and $1,849,000 in the next. What happened there?

<comment><USER34> Stock compensation spiking a year before their IPO doesn't seem unusual. It's likely an employee incentive.

</comment></comment><comment><USER35> Of all of these IPOs, this is the one with the most "product" behind it IMO.

</comment><comment><USER36> > We have applied to list the Class A common stock on the New York Stock > Exchange under the symbol "NET."

Pardon?

<comment><USER37> I guess someone beat them to CLOUD?

<comment> concert-gilled I don't think NYSE has 5 letter tickers.

<comment><USER38> [https://www.cnn.com/2019/08/12/investing/ticker-symbol- confu...](https://www.cnn.com/2019/08/12/investing/ticker-symbol- confusion/index.html)

> Bankrupt electronics retailer Tweeter Home Entertainment soared nearly > 1,000% in 2013 after Twitter (TWTR) filed to go public. That's because > Tweeter's ticker was "TWTRQ" and Twitter had registered for "TWTR."

<comment> concert-gilled That is NASDAQ not NYSE.

<comment><USER39> The maximum, as provided by general consensus are 4 letters. The fifth letter, when applicable, signifies company status. "Q" for bankruptcy, "A" or "B" for class names, "E" for delinquent, "J" and "K" for voting and non-voting respectively, and so on. See [https://www.investopedia.com/ask/answers/06/nasdaqfifthlette...](https://www.investopedia.com/ask/answers/06/nasdaqfifthletter.asp) (doesn't just apply to NASDAQ)

</comment></comment></comment></comment></comment></comment><comment><USER40> Cloudflare has excellent offerings in the networking space, their tech stack seems solid. The customer base seems loyal: Once you're a customer, free or paid, there's very little reason to move out. Their revenue has been growing 43% and 59% for past 2 years: The business side of things seem to be kicking along at a good pace. They seemed to have figured out a perfect balance at offering services to freelancers, to small to medium businesses, to enterprises, to Fortune 500s. The diversity is astounding.

A few acquisitions and the next thing you know they are in the video-streaming business, in the ISP business, in the mobile carrier business as 5G rolls in and what not: The possibilities are endless? Esp as the world becomes more and more connected (IoT and proliferation of smartphones) and business move online, security and speed at scale are going to be of paramount importance and Cloudflare is primed to seize that market, imo

From running a honeypot network to winning techcrunch disrupt to this. What an amazing journey. One the few tech IPOs I'm genuinely excited about.

Congratulations eastdakota et al.

<comment><USER8> They already are in the video streaming business. ;)

[https://www.cloudflare.com/products/cloudflare- stream/](https://www.cloudflare.com/products/cloudflare-stream/)

<comment><USER41> And we've been very happy with their Stream product for about 6 months now. No complaints.

<comment><USER32> Curious: are you using the default player, the player but customized (as per the docs), or the trick to get the HLS manifest via `videodelivery.net/{video_id}/manifest/video.m3u8`?

</comment></comment></comment></comment><comment><USER42> Fun fact: Matthew Prince had to borrow money from his mother when Cloudflare was just starting out.

They've come a long way.

[https://twitter.com/eastdakota/status/1129929178382446592](https://twitter.com/eastdakota/status/1129929178382446592)

<comment><USER43> No offense, but borrowing from a parent is not really _borrowing_ , at least in most cultures.

<comment><USER3> No Offence, but care to explain which part of this is not borrowing?

Edit: And not sure about the down vote.

</comment></comment></comment><comment><USER44> Completely unrelated: the font that they chose to use in their marketing material looks _a lot_ like San Francisco. I didn't know you could use it for promotional material that wasn't software for Apple's platforms.

<comment><USER45> I could be wrong here but my understanding is that the letter forms of a font are not subject to copyright, only the font file itself. This is why Microsoft was able to create Arial which is a virtual clone of Helvetica without it being a derivative work.

<comment><USER46> you mean I could copy a font as long as the resulting font file is different from the original one?

<comment><USER47> Yes. The file is the only thing with legal protections.

<comment><USER48> Actually, not necessarily. Drawing font glyphs is certainly protected by copyright (even if not filed, an implicit one) as artwork. You probably wouldn't get prosecuted because they _probably_ couldn't prove if you copy- pasted, but it's still the work of an artist.

<comment><USER49> Typefaces are not covered by copyright in the US. Bitmapped fonts aren't either as that's just a computerized version of a typeface. Other types of fonts are covered by copyright as they're computer programs that tell the computer how to draw the typeface. This means unless a typeface was created for and used in a trademarked logo there is no protection on it and you can freely recreate it by tracing the output of an existing font.

<comment><USER50> So, it's legal to make a business that consists in copying all of the pay fonts and selling them for half the price under a different name?

</comment></comment></comment></comment></comment></comment></comment><comment><USER51> As a long time Cloudflare user, I wish them luck on this! They've been a great service to use.

I usually don't buy stocks individually, especially around the IPO but once it settles down, I might buy some of these.

</comment><comment><USER52> Now they'll have even more incentives and pressures for censorship.

<comment><USER53> That's an interesting opinion. What about being publicly traded makes you think they'll me more incentivized to censor?

Facebook's performance suggests that playing fast and loose is preferable

<comment><USER52> So far the CEO has twice bowed to public pressure and unilaterally removed completely legal websites from the service because he perceived hosting them made Cloudflare's brand look bad.

As a publicly traded company the company is now _actually accountable_ (rather than just in his head) to a slice of public opinion and to keep the brand as profitable as possible. That means not providing services for anything controversial.

<comment><USER54> > completely legal websites

Are you referring to The Daily Stormer and 8chan?

<comment><USER55> Not parent, but probably. If they weren't legal, there wouldn't be an issue: Cloudflare complying with the law to block illegal websites would be a non- story.

<comment><USER56> Cloudflare making the decision not to serve specific customers in a legal fashion that does not discriminate against any protected groups is a non-story as well.

You don't often see private businesses making decisions like this on the front page of the new york times, but this one is a hot topic. They have no social, moral, or ethical obligation to serve these customers, and one's disagreement with that does not mean we should be forcing individuals to cater to everyone.

<comment><USER57> Something doesn't have to be illegal for it to be a story and it's not ideologically inconsistent to agree that Cloudflare has the right to not serve these customers while also scrutinizing them for it. What is legal/illegal is not a substitute for a personal value system.

A company as large and important as Cloudflare disconnecting a client for moral or public outrage reasons is a big story and they should be watched with a careful eye even if you agree with the outcome.

</comment></comment></comment></comment></comment></comment></comment><comment><USER58> As a non-expert in the specific industry, but a tech person who reads S-1s with interest, I like the look of Cloudflare. It is providing a global infrastructure product and clearly building something that other companies will use and integrate in way that makes it sticky to leave.

I can't remember who said it, but I definitely subscribe to the idea that cloud providers are essentially a tax on businesses that use the internet to drive their business.That makes CF attractive.

My feeling is that the risk that will affect it in the long run are macro: global downturns, over reliance on a specific sector, regulation, freezing out of markets due to unfair competition from local players and spikes in energy costs (curious why this wasn't mentioned in the S-1 specifically)

They also have no outlined plan for the capital they will raise, this may be a good sign, no bold bets, just keep the marketing spend going and achieve greater scale.

It's getting harder and harder to judge if something is a good bet these days. Nobody is actually making a profit, the dual stock structure is troublesome, and the access to capital feels too easy. Ir frustrates me that it's impossible (for a mere mortal with €500 a year to invest) to get in at an early stage when you can watch the value rise and feel a connection with the company.

</comment><comment><USER59> I like this S-1, and in my opinion CloudFlare aren't even scratching the surface of their full potential. Their future growth opportunity is unicorn x 10.

</comment><comment><USER60> I mentioned it in the We S-1 thread, but it really weirds me out that the S-1 is the first chance the public has a chance to see a company's financial status.

<comment><USER61> why would the public have a chance to see the financial status of a privately held company?

alternatively, would you like to share your financial status with the rest of us?

<comment><USER60> I don't want to post my own company since it can be traced to me IRL, but yeah, all tax returns are public in Sweden, personal and companies alike.

Here is Spotify's financials from its inception to today:

[https://www.allabolag.se/5567037485/spotify- ab](https://www.allabolag.se/5567037485/spotify-ab)

You can find the same data for all companies.

<comment><USER62> Spotify is publicly traded. Do you have an example for a privately owned company?

<comment><USER60> Spotify didn't go public until a few years ago, but sure, I get your point.

Here's Delaval, privately owned maker of milking robots:

[https://www.allabolag.se/5560123928/delaval-international- ab](https://www.allabolag.se/5560123928/delaval-international-ab)

</comment></comment></comment></comment></comment><comment><USER63> How can you get into this IPO at the listing price ?

<comment><USER64> You generally need to be an institutional investor or a preferred customer of one of the brokers that is issued shares by the IPO underwriter. Here's a good general writeup [https://money.usnews.com/investing/stock-market- news/article...](https://money.usnews.com/investing/stock-market- news/articles/2018-06-14/how-can-i-buy-a-stock-at-its-ipo-price) and Fidelity's eligibility requirements [https://www.fidelity.com/customer- service/how-to-participate...](https://www.fidelity.com/customer-service/how- to-participate-in-an-ipo).

Note that even if you meet the eligibility requirements, if the IPO is sufficiently popular you may still not get a chance to participate, as the institutions and people in line before you may have already bought all the shares.

</comment></comment><comment><USER54> The risk factors directly address the questions behind whether taking down 8chan and other sites was related to an upcoming IPO:

> Even if we comply with legal obligations to remove or disable customer > content, we may maintain relationships with customers that others find > hostile, offensive, or inappropriate. For example, we experienced > significant negative publicity in connection with the use of our network by > The Daily Stormer, a neo-Nazi, white supremacist website, around the time of > the 2017 protests in Charlottesville, Virginia. We also received negative > publicity in connection with the use of our network by 8chan, a forum > website that served as inspiration for the recent attacks in El Paso, Texas > and Christchurch, New Zealand.

> Following the events in Charlottesville, Virginia, we terminated the account > of The Daily Stormer. Similarly, following the events in El Paso, Texas, we > terminated the account of 8chan. We received significant adverse feedback > for these decisions from those concerned about our ability to pass judgment > on our customers and the users of our platform, or to censor them by > limiting their access to our products, and we are aware of potential > customers who decided not to subscribe to our products because of this.

</comment><comment><USER50> I've intentionally avoided using Cloudflare's services when I can get away with it. I am afraid of what we are giving away to entities like this in the region of security. One gaping MITM vector.

</comment><comment><USER65> Circa 2011 I was doing support for MaxCDN and from time to time there were recurring issues with Cloudflare and our service being used together with a WordPress plugin. They ended up reaching out and we all got on a call not knowing what to expect. Long story short, call went great and we worked together on a solution that helped our shared customers. Cloudflare has made the CDN industry better. They've made huge contributions to the open source and webperf communities and I'm really happy for them.

</comment><comment><USER66> "we may maintain relationships with customers that others find hostile, offensive, or inappropriate" these dudes would be neutral in the face of Sauron.

<comment><USER67> They discuss this very thoughtfully in the blog post from when they kicked the daily stormer to the curb.

[https://blog.cloudflare.com/why-we-terminated-daily- stormer/](https://blog.cloudflare.com/why-we-terminated-daily-stormer/)

<comment><USER66> yes, a long post defending neutrality. What I'm accusing them of is exactly what this post espouses: that they think that neutrality is de facto virtuous no matter the stakes and no matter who is endangered, so I don't see how this post is counter to my claim that they would be neutral in the face of Sauron.

> we have followed the law and remained content neutral as a network.

This blog post essentially says "if Sauron wanted to set up shop to recruit and use our services, that would be fine unless Sauron said that we liked him, if we were under public pressure to drop him, or if it were literally illegal for us to front his network":

> The tipping point for us making this decision was that the team behind Daily > Stormer made the claim that we were secretly supporters of their ideology.

It doesn't say "we would be opposed to Sauron using our services because he intends to enslave Middle-Earth and we don't think we should help him do that". I think that having no regard for the consequences of your actions reflects poorly on the tech industry.

I don't think that being neutral is values-agnostic, I think that neutrality benefits the oppressive and those already in power, and that adhering to neutrality at all costs is a form of fundamentalism.

</comment></comment></comment><comment><USER68> Surely I'm not the only one who finds it suspicious that Cloudflare, as a _startup_ , somehow invested so much money and other resources into an infrastructure that other corporations would struggle with.

That Cloudflare is a giant MitM hostile to Tor and previous cooperation with the government in a past business leads me to believe Cloudflare is nothing more than a US government operation in the guise of a business.

</comment><comment><USER69> > We have a history of net losses and may not be able to achieve or sustain > profitability in the future.

I never got this... Why go public if you literally say you won't make money?

Who would buy stock in something that will not return a positive?

Are they starving for money and hope some public trading gets them a boost?

Edit: It seems to be following the same pattern as the other tech IPOs recently, just to cash out the early investors.

<comment><USER70> This comment is on every S1 thread. And every time someone mentions that it is essentially standard copy for all S1s, because you can never guarantee anything on the market.

<comment><USER71> >We have incurred net losses in all periods since we began operations and we expect we will continue to incur net losses for the foreseeable future.

The admission that "we've never made money and there's a good chance we never will" being boilerplate S-1 copy is monstrously troubling.

When no one needs to see that a company can made a dollar before investing because profit is for suckers and this company's probably going to be a unicorn, maybe that's the stock tip from the shoeshine boy.

<comment><USER72> You can't legally guarantee a return unless you actually guarantee a return

<comment><USER71> Fair enough, but there may be a small middle ground between "guaranteeing a return" and "never made a dime in profit and in fact is burning through millions or billions of dollars annually with no expectation to stop any time soon"

<comment><USER72> that's why you should learn how to read financial statements before making investments in instruments like stocks.

</comment></comment></comment></comment></comment></comment><comment><USER73> Man what if the government just sporadically decided to shut down Cloudflare one morning based on a feeling. That'd be unfortunate.

<comment><USER74> How would "the government" go about doing that?

</comment></comment><comment><USER75> why would the cohort expansion rate be so much lower than Fastly's? [https://www.sec.gov/Archives/edgar/data/1477333/000119312519...](https://www.sec.gov/Archives/edgar/data/1477333/000119312519222176/d735023ds1.htm) ^ cloudflare data on p. 80 shows a rate of 10-15% expansion

[https://www.sec.gov/Archives/edgar/data/1517413/000119312519...](https://www.sec.gov/Archives/edgar/data/1517413/000119312519137435/d702138ds1a.htm) ^fastly data on p. 66 shows cohort expansions that are much faster

<comment><USER32> This is a shot in the dark, but maybe the fact that there's a free tier is a deterrent for (old-school) established enterprises?

</comment></comment><comment><USER76> (I don't know a lot about IPOs...) When would I (i.e. a "normal" stock buyer) be able to buy some shares of Cloudflare?

<comment><USER39> It's unclear, but as we've seen in normal IPOs of this calibre (e.g. Slack, Pintrest, Fastly), probably next month.

</comment></comment><comment><USER77> Finally an S1 I can buy and not have the distinct feeling of the last guy in the pyramid scheme. Should easily be profitable.

</comment><comment><USER78> "Sure, this is another company that hemorrhages money, but that free DNS service _is_ super cool!"

</comment><comment><USER79> Wow. This looks great. They have 75000 paying customers. Any idea how many total users they have got?

</comment><comment><USER80> Wow... it's good to be a CFO. $40k to relocate and a salary 62% higher than the CEO's.

</comment><comment><USER81> Contrast with the WeWork S-1

</comment><comment><USER82> Cloudflare ipo...I like

Buying into IPO at top of market...not so much

So I've got mixed thoughts on this

</comment><comment><USER83> I love the term "band-aid boxes". Hah! What a lovely thought.

</comment><comment><USER84> Another unicorn strikes. Is it just me, or have all of these companies decided to do IPOs around the same time? I mean uber, lyft, we work, and now cloudflare. I wonder who's on the menu tommorow

<comment><USER85> Maybe trying to get ahead of the impending recession?

<comment><USER86> That was my first thought too.

</comment></comment></comment><comment><USER87> It's too bad that Matthew Prince consistently violates 1A rights by hiding behind the "we're a private company" excuse... other than that, they're poised to succeed.

<comment><USER88> > 1A rights

> private company

...?

</comment></comment><comment><USER89> Are any people in agreement with me that Cloudflare's emphasis on neutrality is actually a bad thing?

I see several comments admiring how Cloudflare is willing to serve alt- right/nationalist/racist content in the name of avoiding censorship.

I never understood why this is a good thing. The argument seems to be that not-censoring things is valuable because who knows when Cloudflare censors something that is actually valuable/not racist or nationalist.

Considering tech companies tend to censor right-wing extremist content, I consider the probability of that happening to be very low.

<comment><USER3> I quite like the way how Cloudflare has managed things so far. It is like Apple being the GateKeeper, they have the power, but they wont use it unless they absolutely have too.

If they started to actively banning and censoring content then at some point they are highly likely to corupt themselves and misuse that power.

</comment></comment><comment><USER90> i'm not familiar with these filings. where does it state the date of the IPO

</comment><comment><USER91> Cloudflare is amazing but in the long-term they're incredibly dangerous to the future of the internet as they further consolidate traffic and power via their network.

</comment><comment><USER92> Here's what Cloudflare's CEO wrote on their blog:

"In the two years since the Daily Stormer what we have done to try and solve the Internet's deeper problem is engage with law enforcement and civil society organizations to try and find solutions. Among other things, that resulted in us cooperating around monitoring potential hate sites on our network and notifying law enforcement when there was content that contained an indication of potential violence. We will continue to work within the legal process to share information when we can to hopefully prevent horrific acts of violence."

Monitoring?? Sounds a lot like surveillance and spying to me. This is why they want to MITM the entire Internet. All encryption becomes useless. Breaking privacy and security just like Facebook. They even co-opted Wireguard recently. If you understand and see where this is going, stay away from them.

<comment><USER24> They specifically talk about violence. Intent to incite violence isn't protected under the first amendment: [https://en.wikipedia.org/wiki/First_Amendment_to_the_United_...](https://en.wikipedia.org/wiki/First_Amendment_to_the_United_States_Constitution#cite_note-90)

<comment><USER92> Yeah that is where it always starts. Think of the children. Childporn. Terrorism. Until it becomes "hate speech" and whatever else the masters dictate.

<comment><USER24> Advocation of violence has been unprotected speech since 1940. Have we been living in a dystopia this whole time?

People who intentionally oversimplify free-speech endanger it, just like people who intentionally oversimplify capitalism endanger it. There is no hardline ideal, in any context, that works. Ideas must be flexible to the real world, or perish.

<comment><USER93> It's not that hate speech and violent rhetoric should be tolerated, it's that using the fact that some people say bad things does not justify monitoring all of the internet.

Free speech is a right in the US and having an overlord listening to everything you say is obviously dampening on that right.

<comment><USER24> I think whether "hate speech" falls into that category is a more complicated question, mostly because the term can be applied so broadly, but a handful of specific things have been illegal enough to get pulled from the public internet by law enforcement from the beginning, and I think it's naive to suggest that we don't need a category like that _at all_. Also, it doesn't require man-in-the-middle attacks or weakening of encryption to find public websites that host illegal content.

<comment><USER93> That's fair, it would be very easy and appropriate for someone to monitor HN for example.

I don't think the worry is that Cloudflare is helping police public websites, it's that they have the ability to police private ones that use their services. Their stance of proactively helping to police sites (instead of merely responding to warrants) makes the slope they are on very slippery. Would they be willing to decrypt traffic from a certain IP address to a private site if that same IP was used to post something violent on 8chan? Is that acceptable? Those are tough questions for sure, and ones best decided by a judge and not someone in the private sector.

<comment><USER92> Not only that but it looks more like they intend to actively monitor traffic in real time to check for things that are problematic according to them and their friends. And people need to realize this is not just for https traffic but also Ipfs and Wireguard. I'm sure it won't stop there either. Defeats the whole point of those technologies to have Cloudflare spying in the middle. This is China 2.0.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER94> cloudfare has way too much power over the internet at large. there have been days where twitter and other major sites all go down at once because (i suspect) some one tripped over a cable at cloudfare

Their S-1 looks financially strong and it's a great company. But it's rapidly becoming a single point of failure.

</comment><comment><USER95> So cloudflare basically fucks over 8chan over some skimpy mass shooting evidence, and now has a public offering as a corporate company? Get rid of free speech as internet police and sell stock and make millions?

<comment><USER96> The Free Speech Clause of the First Amendment prohibits only governmental, not private, abridgment of speech. [1]

A CDN is hardly the Internet Police.

[1] [https://www.supremecourt.gov/opinions/18pdf/17-1702_h315.pdf](https://www.supremecourt.gov/opinions/18pdf/17-1702_h315.pdf)

<comment><USER95> Irrelevant. The Supreme Court is wrong in its decision in that case, and that interpretation of the First Amendment is equally incorrect.

<comment><USER97> The supreme court is by definition correct, at least in a legal sense. Their interpretation literally is the law.

</comment></comment></comment></comment><comment><USER98> Probably a good one to hop into for a quick gain due to hype and usage, but long-term the price will fall.

Will continue to monitor, but looking like it will be the standard 7/11 IPO strategy - get in and immediately start the sell off if price drops 7% day-to- day or 11% consecutively, then short to price where losses are matched.

<comment><USER99> How is that better than just putting 11% of your investment on black or red?</comment></comment>


PageRank Algorithm Reveals Soccer Teams' Strategies - <AUTHOR> http://www.technologyreview.com/view/428399/pagerank-algorithm-reveals-soccer-teams/ <comment><USER2> Yeah, I'm not sold on this one. This sounds like it's trying to make a story up after the fact. Of course Xavi gets the ball the most, he plays the point of a diamond midfield, or the "trequatrista" role. Since the point of soccer is to move forward, he is in the position most likely to touch the ball the most (middle of the pitch). The left back (Jordi Alba in this year's Euro) won't touch the ball too much ... because he plays left back.

Similarly, for Italy, I don't need any graph theory to know that Pirlo gets the ball the most because (A) he's their best player and (B) because he plays in a deep position in the midfield so it's easy for him to get the ball from the goalkeeper, defenders, or other midfielders.

Long story short - teams set themselves up so their best players get the ball the most. You don't need to be a mathemagician to dig that nugget up.

<comment><USER3> Actually, in the final Pirlo did not have the ball the most for Italy because he was closely marked by Xavi. A central defender, Barzagli got more touches than him. It would be interesting to see the graph of that match.

Also your final assertion that teams set themselves up so their best players get the ball the most seems a bit off to me. Consider FC Barcelona. Lionel Messi is arguably their best player but you would be hard pressed to find a game in which he has the ball the most since he plays high up on the pitch as an attacker.

I agree with you in that single match analysis using this technique doesn't really produce any new insights. I think this analysis would be very interesting when comparing between different games however. e.g. comparing Italy's match against England where Pirlo was effectively given free reign of the pitch to their match against Spain where he was shut down for most of the match. I would love to get my hands on some raw data from Optasports!

<comment><USER4> On a tangent.. I'd love to see a heat map of Messi's movement for Barcelona (and Argentina). Whenever I watch him he's all over the place. And to my eyes, he's most dangerous when picking the ball up either from the midfield line or on the touchline half way up the field. In both cases, when runs at pace with the ball he's diabolically good. Any data/visualization to track that would be fantastic to see, especially filtering only on those instances where he causes real damage to the opponent (e.g. a shot on goal for him or a teammate)...

<comment><USER5> For any game from a major league, you can go to the soccernet game summary and click on GameCast to see a heat map for any player. Here's Messi in the Barcelona 3 - 1 Real Madrid from December: <http://i.imgur.com/XEvpW.jpg>

(From [http://soccernet.espn.go.com/gamecast?id=323887&cc=5901](http://soccernet.espn.go.com/gamecast?id=323887&cc=5901) )

</comment></comment></comment></comment><comment><USER6> I would be skeptical about the usefulness of this data to soccer. It can answer questions like "how many passes" or how connected a player is but it doesn't tell you _how_ to play like Spain or how to beat Spain. It just confirms what you can tell by watching Spain on tv: they pass lot, and they're really skillful. The number of completed passes, distance ran, assists, shots on/off target, goals, etc is already heavily tracked (<http://www.optasports.com/sports/football.html>).

As an aside, the reason for the prevalence of the tiki-taka philosophy is largely because of the legendary Barcelona youth training camp - La Masia (<http://en.wikipedia.org/wiki/La_Masia>). The whole way of thinking about soccer differs massively in the British Isles compared to continental Europe - in England and Ireland it's the outdated 'kick-and rush' style football (aka "hoof it up to the big striker") versus the more patient possession-focused, passing game in continental Europe.

<comment><USER7> >"..in England and Ireland it's the outdated 'kick-and rush' style football (aka "hoof it up to the big striker") versus the more patient possession- focused, passing game in continental Europe. "

This is the very reason as to why England fails to perform in the big competitions. Lack of creativity.

> "...but it doesn't tell you how to play like Spain or how to beat Spain."

Exactly this data might provide some statistics on the formation and player agility but a team's performance is largely dependent on the gameplay and the strategy of the manager.

I find this site: <http://www.zonalmarking.net/> to be much more useful when it comes to tactical analysis.

<comment><USER8> It was going to be interesting to see how long in this thread before someone mentioned Zonal Marking.

It is interesting that the analysis doesn't mention Barcelona. That might be because reactive, kick long football has beaten Barca twice in Champion's League in the past 4 years. Mind you, Barca are one of the best club teams in the past 30 years at least.

Inter Milan and Chelsea had dramatically less of the possession and passing than the tikki-takka of Barca but both managed to get over the top of Barca.

A team's performance is also dependent on the personnel. The Barca core that is also the core of Spain and they are phenomenal. Who knows when another midfield like Xavi, Busquets and Ienesta (and Messi for Barca) will appear.

Or as someone said about Italy vs Spain, Spain won because they had 3 players at least as good Pirlo.

<comment><USER9> Zonal Marking is a fantastic site for tactical minded football fans. Highly recommended. Not overly surprised that its referenced 2 or 3 times on HN. Switzerland is the closest example of Chelsea/Inter in the case of Spain. Switzerland shut down the midfield pretty effectively, however Spain were particularly awful in that game, and Spain did remedy that situation later on.

In watching Euro2012, I have found it amusing about Spain being called boring by plenty of authors. The only way teams have found to stop Spain has been to park the bus, and let Spain have the ball for long periods. The negativity of opposing teams was reason for the lack of activity in the final third of the field. The result Italy in the final was a great example of what happens when a team tries to attack Spain. They get beaten soundly.

</comment></comment></comment></comment><comment><USER10> I write for MLSsoccer.com and I do some very similar types of analysis.

Here is something recent including similar network graphics and player average position. [http://www.mlssoccer.com/news/article/2012/04/10/central- win...](http://www.mlssoccer.com/news/article/2012/04/10/central-winger-new- way-visualizing-beautiful-game)

I've done a bunch of stuff with centrality and other stuff, but that isn't exactly my target audience at the moment.

</comment><comment><USER11> Spain's success is not about passing accuracy alone, nor can one reduce team quality to measuring the number of successful passes. Sure it's generally a good statistic, as is possession, but many other factors count and completely different styles can be equally successful.

People tend to overreact to the latest result.

Spain's biggest success was being able to accommodate to a system without a reference striker (Villa being injured). Puyol was also out and Sergio Ramos played very well as CB, leaving Arbeloa as RB despite being a dead spot supporting the attack. Xabi Alonso had a lot fewer of his long pin-point passes (his best quality) and had a more defensive role, Iniesta held the ball more to link Xavi and Silva. All in all it was very surprising that they won despite missing two of their very best players for the tournament. However, had they lost to Portugal in the penalty shoot-out (and they play a COMPLETELY different style with much fewer passes) then we wouldn't have this article in FP right now.

</comment><comment><USER12> For someone who follows soccer closely, none of the revelations were surprising, apart from the centrality of Capdevilla, which again can possibly be explained by the fact that Spain play a passing game right down to the goalkeeper. So while the goalkeeper of other teams hoof the ball down the pitch, Spain's goalkeeper prefers to pass it to one of his available defenders. Capdevilla being the left back is a usual supect. I am sure the right back would also have a high network centrality. Taking nothing away from the analysis though, its still pretty cool.

<comment><USER11> Capdevilla was fantastic, but I'd say Jordi Alba managed to improve on him this euros. Incredible LB.

Villa and Puyol haven't been properly replaced though. Playing Ramos as CB left Arbeloa on RB and he's not at the same level.

<comment><USER12> Villa would come back for the world cup and Jordi Alba was just plain awesome. The bigger concern for me would be how to replace Xavi who would be 34 by the time of the world cup.

<comment><USER9> Pirlo for Italy was 34 for this years Euro's, and look at the tournament he had. Its possible if Xavi is rested appropriately that Spain can have the same effect in Brazil. Scary actually.

Stats are important to Football, but pure data is useless to sport in general without a way of applying the data. Interesting is how the data is applied more than anything else. Can comparisons across time be drawn to teams across era's to statistically determine who the best team of all time are?

</comment></comment></comment></comment><comment><USER13> I have strong doubts about the effectiveness of this method: Why do I need complex algorithms to know Xavi is the pivot that drives Spain forward? That can be ascertained by either watching the game, or looking at his passes received/made stats.

But if we already found ourselves talking about soccer, I would like to shamelessly plug a wonderful soccer tactics website: [http://www.zonalmarking.net/2012/04/17/bayern- munich-2-1-rea...](http://www.zonalmarking.net/2012/04/17/bayern- munich-2-1-real-madrid-what-type-of-player-to-use-as-the-number-ten/) (I linked to what I think is the best recent article)

<comment><USER14> Because complex algorithms can reveal information that isn't immediately obvious from basic stats, let alone "gut feelings" that you get from merely watching a game. This type of thinking is what leads to disparities between who the best players actually are and who the fans think the best players are (see: baseball All-Star voting).

<comment><USER13> I wholeheartedly agree with you on the gut feeling vs. stats issue, but this complex algorithm in and of itself doesn't seem to reveal any information that isn't obvious from basic stats: Xavi is clearly seen as the "dynamo" from the basic stats perspective (in fact he routinely breaks passes received/made records). If one would come with a complex algorithm that would reveal something new (to me, to the media), that would be really exciting for me.

Since you seem to have an interest in such situations (complex techniques claiming discrepancy between consensus and actual performance), I'll go off on a tangent and shamelessly plug (again! don't people have any shame these days?) what I think is a very good example: [http://wagesofwins.com/wins- produced/how-to-calculate-wins-p...](http://wagesofwins.com/wins-produced/how- to-calculate-wins-produced/) <http://wagesofwins.com/faq/>

</comment></comment></comment><comment><USER15> The network shows Torres upfront for Spain despite his not appearing in the final until the second overtime (106th minute), but shows Van Bronkhorst who was substituted in the 105th minute?

From all that analysis, it doesn't really follow that the 2010 World Cup Final was Spain 1-0 Netherlands with the sole goal coming in the 116th minute after each team used all their allotted substitutes. Though Spain had more of each, corner kicks, shots and shots on target were similar for both teams.

The real telling statistic is fouls - which ultimately led to the Dutch being a man down (Heitinga) when the Spanish scored, through the center back position which he played.

</comment><comment><USER16> Semi-tangent: Are there startups who do work like this, analyzing sports games or developing technology for sports (other than fitness trackers)? I'd be interested in learning more about them if so.

<comment><USER17> Yes, there's a whole world of startups devoted to that.

The one I know is a Uruguayan startup called Kizanaro.

<http://www.kizanaro.com/web/index.php?lang=en>

They work with the Uruguayan national team (American champions and #2 ranked squad behind Spain), although for now much of their analytics are human- assisted.

The MIT Sloan Sports Analytics conference is the mecca of this kind of companies:

<http://www.sloansportsconference.com/>

</comment></comment><comment><USER18> Interesting approach but I'm not sure how significant these graph theoretical methods are when the networks are so very small. This would be more revealing on a metrized graph.

</comment><comment><USER19> In other sports both teams are expected to score tens, even hundreds of times. In soccer one goal often is enough. Collecting stats for analysis seems entertaining for the observers, but how is that useful for the teams, in a sport that is so dependent on luck?

<comment><USER20> Hundreds of times? 100 points in an NBA game is about 50 times on average--you miss 1 out of 2 free throws about as often as you get a three point play, probably. 10 runs is high for a baseball game. 50 points in an NFL game is about ten scoring opportunities, if you figure five touchdowns and five field goals. And yet statistics are meaningful for all of these games, just as they are for soccer.</comment></comment>


Ask HN: Dropbox, but not store locally? - <AUTHOR>

Hi All,
I have e-mail into Dropbox 3 times and asked and no reply.
I have a new MacBook Air, 128gb SSD. I want to use Dropbox, but if I pay for the 100gb or even the 50gb plan, I dont want to keep all files I have on Dropbox local to my machine due to space limitations..
1. Is it possible to have files live on Dropbox, but not retain a copy locally on my machines?
2. Does anyone have any advice on how to (after a certain time frame unused) to have files move from my MacBook Air to Dropbox and remove from my MacBook air to free up more space?
3. What about moving my Outlook or Apple Mail (I am deciding which to use) location to my Dropbox on my local system so I always have a backup, totally current copy of this data in case of system failure, etc?
Advice is appreciated. <comment><USER2> For #3... I run my own servers for email and use IMAP. So, it's easy to sync multiple devices to the same mailbox, and I always have a copy on the server (plus whatever is cached on the PC).

I would vastly suggest Mail.app over Outlook on OS X, based on years of personal experience with both, just FYI.

<comment><AUTHOR> @brk..Thanks, I do like Mail.app a lot and it is what I have been using. I do have some issues sometimes with having 13gb of e-mail over 10 years or so.

<comment><USER2> I have 10 years of email too, but I've stripped out most useless/old attachments to keep it pared down.</comment></comment></comment>


Lisp in Jak and Daxter - <AUTHOR> http://wiki.c2.com/?LispInJakAndDaxter <comment><USER2> This comes up on HN periodically. Here are few points to keep in mind:

\- In 1994, when Andy started on GOOL, the tools around C/C++ were far more limited. Basically all we had was GCC; there wasn't even a decent debugger in the beginning if I recall correctly. So it was less crazy to make a whole DSL for game control code then than it may seem now.

\- There was no GC; the PS1 only had 2MB of RAM so we had to be incredibly careful and precise with memory management. It was also slow (33Mhz) so GC pauses were obviously not going to be OK.

\- At least in Crash Bandicoot (I didn't work on Jak), lisp was not used for the rendering engine, the collision detection, or the camera control code -- that was all written in C (or MIPS assembly). Lisp was used for character control logic and various non performance intensive tasks, like the load/save interface.

\- It really wasn't that hard to "make a whole new language" in our case because Andy used Allegro as the basis for the compiler -- and of course with lisp, code is data. :)

It was a labor saving device and a boon to rapid prototyping of character behaviors to have a simple very high-level language for this. This advantage was ultimately offset over time as the platforms got faster and gained more RAM. But at the time, there was no Python, Lua, etc. -- and even if there were, they'd be too RAM-intensive to use. (Maybe embedded variants of these languages would have worked, though.)

<comment><USER3> This is why I love HN! Thank you for building amazing games that made my childhood better

</comment></comment><comment><USER4> Dan Liebgold from Naughty Dog did a talk on using Racket during development for the PlayStation 3 at Racketcon a few years ago [0].

[0]: [https://www.youtube.com/watch?v=oSmqbnhHp1c](https://www.youtube.com/watch?v=oSmqbnhHp1c)

</comment><comment><USER5> Please add 2012 in the title. Also this was previously submitted without comments.

The topic was old... but I am glad someone commented on the downsides of implementing your own language/tooling and what happens next to the team; for example:

> Also, it took over a year to develop the compiler, during which time the > other programmers had to make do with missing features, odd quirks, and > numerous bugs.

That makes me thing only ultra-flexible teams or huge companies fit the bill into the approach of creating such a technical debt as a compiler can be.

<comment><USER6> I think if something was published in the past ten years, adding the year is unnecessary. It is still close enough to "now" to be irrelevant.

<comment><USER7> your last word ruined it...

</comment></comment></comment><comment><USER8> The first link in the article is not correct anymore, I think it's supposed to point to this one. [http://www.gamasutra.com/view/feature/131394/postmortem_naug...](http://www.gamasutra.com/view/feature/131394/postmortem_naughty_dogs_jak_and_.php)

</comment><comment><USER9> I remember running into GOAL and GOOL a ways back and was fascinated with it. One thing I never got good info on was how they handled their memory. Generally game developers frown upon garbage collection, so I'd love to find out if GOOL/GOAL did anything to target that specifically. I tried reaching out to one of the developers on his blog about it but never got a response

<comment> white-flame If I recall correctly, they used manual memory management for many things. But regardless of specific tooling, you can still do memory pooling in GC languages just as well as in manual ones.

The Lispiness that they took advantage of was metaprogramming via s-expressions, an interactive REPL, and dynamic updating of functions during runtime (which would require some form of GC in function memory footprint, but wouldn't be a drag on normal gameplay timing).

</comment></comment><comment><USER10> Wow, I remember reading that postmortem when it first came out.

I was still in university at the time and at the time I was only marginally aware that Lisp existed as an alternative to the Java/C++/Pascal we've been taught.

After reading the postmortem I became very interested in this mysterious Lisp language that was being used by the experts.

</comment><comment><USER11> Curious about the Yahoo Store debacle that was mentioned a few times.

<comment><USER12> I am also curious as I thought Yahoo! Store was written in Common Lisp as it was acquired from Viaweb.

<comment><USER13> I think they rewrote in C++ after buying viaweb. I could be wrong though.

<comment><USER14> Yes, IIRC that is mentioned in PG's blog post: Beating the Averages.

</comment></comment></comment></comment><comment><USER15> Another Lisp based game was Abuse.

[http://abuse.zoy.org](http://abuse.zoy.org)

</comment><comment><USER16> A. Using Lisp with a couple of minor convenience macros can be a very good idea.

Z. Writing an entire language and ecosystem just for a game is insane.

These are not binary choices: there is a very smooth continuum between these two, and is one of the major advantages of Lisp. Naughty Dog just took too many steps from A towards Z. Each step probably seemed reasonable at the time...

<comment><USER17> Infocom, Sierra, and LucasArts all built proprietary VMs and it seems to have worked out very well for them. People are still making new games that run on Infocom's Z-Machine, and ScummVM has helped keep those LucasArts games running to the modern day.

Unreal Engine was very successful with a custom scripting language up until UE4, too. And Naughty Dog hardly seems to have suffered from their decision to build a Lisp-based system -- apparently they're still using Racket to script their (wildly successful) games.

Really, it's only quite recently that the off-the-shelf tooling like UE4 or Unity has gotten sophisticated and powerful enough that people can make complex games without having to build a little software ecosystem around them.

<comment><USER18> Also:

Neverwinter Nights: [https://en.wikipedia.org/wiki/NWScript](https://en.wikipedia.org/wiki/NWScript)

Morrowind: [http://en.uesp.net/morrow/editor/mw_scripting.shtml](http://en.uesp.net/morrow/editor/mw_scripting.shtml)

And I suspect countless others. (These two games exposed their developer tools to the customers so they could extend the game.)</comment></comment></comment>


Tucows Cuts the Crap (removes ads from their download site) - <AUTHOR> http://www.tucows.com/tucows-cuts-the-crap/ <comment><USER2> "With Tucows' success in wholesale and retail domain names (OpenSRS and Hover, respectively) and more recently with mobile phone service (Ting) and fiber Internet (Ting Internet), tucows.com/downloads has become less relevant when looking at the balance sheet."

I had no idea that:

\- Hover is Tucows

\- Ting is Tucows

\- Ting sells fiber service

\- OpenSRS exists

So, nice work PR team? It's been a _long_ time, but Tucows really did used to be the go-to non-scammy software download site. So, to whatever extent that's still a thing people need to use, this is good news!

</comment><comment><USER3> I had no idea that site was still around. Kudos for surviving. That name though...

</comment><comment><USER4> people still use that site?</comment>


Two Years of Functional Programming in JavaScript: Lessons Learned - <AUTHOR> https://hackernoon.com/two-years-of-functional-programming-in-javascript-lessons-learned-1851667c726 <comment><USER2> As an FP Novice I find the resources the article links fantastic.

I have to be honest that I am still not fully convinced that FP is not a sham! It looks like it makes many everyday code problems cognitively harder to come up with (harder to write code) so that the end result may be code that is simpler and apparently easier to read by other FP afficionados.

I've taken several stabs at learning FP, and since I do a lot of JS (and use underscore), I will certainly work through these guides and look for ways that FP can potentially make me productive.

The bar is high, because my imperative coding skillset is really strong. A lot of the time the code I write works the first time, and my code is "self debugging" via my own spin on robust programming (RP).

I find a noxe mix of procedural code and OOP (not doing pure anything) works quite well, and being able to do things like mix-ins and passing functions around takes care of the few tricky bits.

</comment><comment><USER3>
        // Instead of
        const format = (actual, expected) => {
          const variants = expected.join(', ');
          return `Value ${actual} is not expected here. Possible
        variants are: ${variants}`;
        }

Well, shit, I thought _that_ was functional programming. Back to the drawing board for me, I guess.

</comment><comment><USER4> Try PureScript([http://www.purescript.org/](http://www.purescript.org/))

<comment><USER5> That was mentioned at the end.

</comment></comment><comment><USER6> Functional in JavaScript never made sense to me, we don't have immutability in the language. While V8 has made optimisations for short lived objects this doesn't hold true across the board so perf can be quite terrible with "pure" style FP.

Theoretically "pure" code is beautiful, in practice it tends to perform badly especially in languages that don't have value types and copy mechanisms.

<comment><USER7> Do you have any data to show that this is a real concern with JS?

<comment><USER8> It may depend on the context, and with some _VERY_ large data models, something like even Redux would be less efficient. TBH though, I find that practicing FP in JS even in a less pure form isn't so bad. I tend to prefer shallow clones as responses in favor over mutations. Though I will mutate an object, when it's exclusively inside a function/module and sealed from the outside so that such mutations are at least in isolation.</comment></comment></comment>


Show HN: psdiff – use github's image diff tools with .psd files - <AUTHOR> https://github.com/filp/psdiff

<comment><USER2> We got this idea as a silly joke, but some of you might actually find it useful! Technically, it might make design workflows easier by allowing you to browse your history with something like Github.app.</comment>


LocalStack – A fully-functional local AWS cloud stack - <AUTHOR> https://github.com/atlassian/localstack <comment><USER2> It's been spun out into it's own project here: [https://github.com/localstack/localstack](https://github.com/localstack/localstack) or [https://localstack.cloud/](https://localstack.cloud/)

edit: Extra URL

<comment><USER3> I wonder how that got spun out commercial - is it still part of Atlassian?

</comment></comment><comment><USER4> Been using it recently to try and run a large serverless app offline for dev purposes, it kind of works but the experience is ok...not great.

They seem to be piling all their energy into creating mocks for new (paid) services when it might be worth consolidating as the original mocks have _a lot_ of issues.

\- Documentation is non-existent, expect to trawl through github issues to work out how something works as it's quite opaque (api gateway invocation)

\- CloudFormation implementation is completely broken (no intrinsic functions) so unless your stack is simple you're pretty much required to use any AWS api based devops tools (e.g. Terraform)

\- API's are not fully complete, means terraform either breaks on redeploy when it tries to get a resources status or at best case triggers redeploy of certain resources each time (the most exotic thing we're using is SNS)

\- Test suite is...light, seen a few things go through their CI and break it

\- There's a bit of non-consistent behavior - you'll set an env var and find it's not implemented for a certain case and be left scratching your head

\- Expect to have to make pull requests yourself to fix things

This isn't a winge, I understand it's partially open source and you can just fix the issues yourself when they come up like we are doing. But just a heads up for who may naively look at it and think it's a silver bullet...you'll have to go through all these steps.

<comment><USER5> We had the same experience here. It was easier to build our own test bench that simulate an AWS stack then to rely on LocalStack

<comment><USER4> yeah I'm doing similar in my spare time just because it feels like it's 2 seconds from falling apart, lol

</comment></comment></comment><comment><USER6> According to the docs, it has local fault injection (I.e. you can tell it to respond with "resources unavailable / exhausted") which makes it "even better than the real thing" for development. (But have never used it so cannot comment about how well that works).

I usually prefer to develop against as-live-setup-as-makes-sense, because test environments often miss something critical; however, it is often hard to verify (on both test and live systems) error condition behaviour - to debug response to S3 errors or resource exhaustion, you actually need them to happen.

Looks like this project does provide for testing these conditions. Neat.

</comment><comment><USER7> I figured I would chime in. I've used LocalStack to "mock" AWS in CI for my two most-recent employers and worked without a hitch. Mocked DynamoDB, SQS, Kinesis and SNS without an issue. There was a single gotcha about the way that the FIFO queues needed to be named and it also didn't accept a default parameter for something relating SQS but other than that it was smooth sailing.

</comment><comment><USER8> Better title: a fully functional local AWS cloud _mock_ stack for _test_ purposes.

</comment><comment><USER9> As an occasional user the biggest gripe I have is that credentials are not supported - in our current code base the connection to AWS is done by specifying the region and credentials and leaving the actual endpoint discovery to be done automagically. When using LocalStack you have to instead explicitly specify the endpoint of the service that you want to connect to.

What this means is that if I want to test something locally its not as simply as spinning up the docker container - I also have to make a code modification for the service(s) that I want to interact with.

It's not a big deal - and the benefits of being able to test locally outweigh the minor inconvenience but it still bugs me every time

<comment><USER10> pytest-localstack makes the magic happen if you're working with python tests [https://pypi.org/project/pytest-localstack/](https://pypi.org/project/pytest- localstack/)

</comment></comment><comment><USER11> I used localstack a while ago to test DynamoDB queries then ended up switching over to DynamoDB-local. But I'd often come back to this to see how this fairs with some of the lambdas I have and most of the time there is something missing in the implementation. Still great to see this being in development and I hope that some of these gaps get closed soon. I wonder how the Pro version compares to the free one.

<comment><USER12> From [https://github.com/atlassian/localstack/blob/master/localsta...](https://github.com/atlassian/localstack/blob/master/localstack/services/dynamodb/dynamodb_starter.py#L35) it looks like it's just running the AWS DynamoDBLocal code for you, rather than reimplementing the API.

</comment></comment><comment><USER13> It is not a fully functional local AWS stack. localstack uses moto to mock requests to AWS endpoints, and that does not support 100% of AWS's endpoints.

[https://github.com/localstack/moto/blob/localstack/IMPLEMENT...](https://github.com/localstack/moto/blob/localstack/IMPLEMENTATION_COVERAGE.md)

<comment><USER14> Agreed. It's more like an 85% functioning local version of the 80/20 of AWS. It doesn't cover all services but it is fairly comprehensive and does cover almost all the major ones.

Overall it's a really cool project. I had some networking issues running it inside Docker though. When I would place a message on an SNS topic it would come back with an exception triggering my exception handler, however it actually did send the message to the topic. Couldn't work it out and left it. Might revisit it later but that was an annoyance for me.

<comment><USER13> I tried using it to do some kind of integration testing with my AWS services (RDS, API Gateway, EC2, etc). I decided that was too much work, and since it'd force me to dockerize much of my application, I might as well use FOSS solutions that I can already run in docker. Easier to test, and cheaper.

</comment></comment></comment><comment><USER15> I've always wanted to try LocalStack, but I worry that I'll be 90% there and then find out it doesn't support some key piece. AWS services is huge surface area.

Or I'll be using it fine but then I want to use shiny AWS feature X.

Terraform is in the same boat; though I've found the community keeps the functionality very up-to-date.

Can anyone assuage my fears about LocalStack?

<comment><USER16> Not sure if you're suggesting using local stack for production but if you are, I'm not sure that's it's intended purpose. This the first time I've ever heard of local stack, but just judging by their website, they don't seem to be trying to replace AWS for production. They are just trying to offer devs a local testing environment.

<comment><USER17> Absolutely, I'm not sure about the poster's intent, but his concerns still apply to using it for developer testing

If your application uses features that don't work in LocalStack, it can be very tricky to start using LocalStack to test that application. Conversely, if you are already using LocalStack to test/develop your application, that may discourage you from using AWS features which might be a good fit, but aren't supported by LocalStack.

Also, I would certainly recommend against solely testing with LocalStack, since you may run into situations where it behaves slightly differently than AWS, and if you develop targeting LocalStack's behavior, you could end up with bugs when AWS behaves differently in production.

<comment><USER15> Your second paragraph indeed describes my question:

If I invest in a AWS-but-not-AWS dev tool, will it be good enough?

</comment></comment></comment></comment><comment><USER18> While we are on this subject: is there something similar for GCP?

</comment><comment><USER19> I'd really strongly recommend not using this in most scenarios. Localstack sits in an uncomfortable no mans land between a mock and the real thing. Most of the functions are stubbed via Boto/Moto, some services run off separate Docker images, while some missing functionality of Moto is filled in.

I can't really think of a situation where this is better than mocking, because of the subtle differences that introduced here.

</comment><comment><USER20> I wonder what's the common approach that people use to test AWS-coupled features locally without LocalStack (or test features not supported by LS). Do you have a dedicated AWS environment for this use case, or we're not supposed to run them locally (e.g implementation is mocked on local, and AWS-coupled features are tested on a remote test env)?

</comment><comment><USER21> I use this for DynamoDB and SQS mocking -- it's so convenient. Dockerized, too, so you're one `docker-compose.yml` from using it in CI.

The development is not all in-house (and I count this as a definite strength of the project). It brings together a number of other AWS mocking libraries.

</comment><comment><USER22> I've had this on my radar for a while, and I'm now on a project where it could have a role. Does anyone have any recommendations or strategies to follow?

<comment><USER23> combine it with terraform to tear up/down the environment (i.e. create buckets, tables, etc).

</comment></comment><comment><USER24> Isn't that what Eucalyptus was supposed to be?

<comment><USER25> Yeah, LocalStack seems to be a similar idea, with more support for the "new stack" (e.g. lambdas) and a bigger focus on testing/mocking AWS during dev rather than replacing AWS for production workloads.

In contrast Eucalyptus was more for run-your-own-AWS in your data centre. See [https://en.wikipedia.org/wiki/Eucalyptus_(software)](https://en.wikipedia.org/wiki/Eucalyptus_\(software\)) and active code branch here [https://github.com/sjones4/eucalyptus](https://github.com/sjones4/eucalyptus)</comment></comment>