Debian considers merging /usr - <AUTHOR> https://dralnux.com/debian-considers-merging-usr/ <comment><USER2> This move has been made a while ago by arch and didn't seem to cause any trouble.

On the other hand, it does not change much compared to the revolution of adopting the gobolinux filesystem that has been proposed more than 10 years ago. [1]

[1]: [http://gobolinux.org/index.php?page=at_a_glance](http://gobolinux.org/index.php?page=at_a_glance) [http://gobolinux.org/index.php?page=doc/articles/clueless](http://gobolinux.org/index.php?page=doc/articles/clueless)

<comment><USER3> All of my Arch Linux nodes ate-shit when I did this upgrade years ago. Things didn't like when their shared libraries got moved. I had to manually recover every single one.

It was actually the straw that broke the camel's back for me as an Arch user. This was around the time Arch Linux was going through lots of breaking changes.

<comment><USER4> It's what happens with any rolling release distro given enough time. We thought it would solve the problem of having to upgrade the OS and migrate every few years but it didn't really.

Now we have docker. Probably not solved until we write all our applications as some sort of crazy monad to minimize maintenance pain. I think docker is a meaningful step toward that.

<comment><USER5> _> until we write all our applications as some sort of crazy monad_

Desktop Linux seems to be finally moving towards self-contained formats like AppImage and Flatpak. They are clearly not oriented towards server apps, but who knows.

<comment><USER6> OMG. Self contained apps were there starting from Linux 0.1. They are reinvented every second year.

<comment><USER5> Yeah but they never got traction for this or that reason. This time it looks like several big players actually agree on a common way forward. I guess time will tell.

</comment></comment></comment></comment></comment></comment><comment><USER7> HN's hug of death. Cached version is here: [http://webcache.googleusercontent.com/search?q=cache:s8ApOo1...](http://webcache.googleusercontent.com/search?q=cache:s8ApOo1EgtUJ:https://dralnux.com/debian- considers-merging-usr/&num=1&hl=en&gl=au&strip=1&vwsrc=0)

<comment><USER8> It looks like a server-side misconfiguration.

The URL is 301 redirecting to itself.

My guess is the admin has a server side redirect to force http to https, but has CloudFlare configured to use http to the origin.

</comment></comment><comment><USER9> So what are the arguments actually?

A couple of days ago I was reading some POSIX book from 1991 and there the layout of /bin /lib /shared /usr/name/bin /usr/name/lib /usr/name/shared and so on was much more logical than what we have now which is just weird as far as I can see because I don't understand it.

<comment><USER10> The best explanation goes from Rob Landley:

[http://lists.busybox.net/pipermail/busybox/2010-December/074...](http://lists.busybox.net/pipermail/busybox/2010-December/074114.html)

Some fragment:

> When the operating system grew too big to fit on the first RK05 disk pack > (their root filesystem) they let it leak into the second one, which is where > all the user home directories lived (which is why the mount was called > /usr). They replicated all the OS directories under there (/bin, /sbin, > /lib, /tmp...) and wrote files to those new directories because their > original disk was out of space. When they got a third disk, they mounted it > on /home and relocated all the user directories to there so the OS could > consume all the space on both disks and grow to THREE WHOLE MEGABYTES > (ooooh!).

> Of course they made rules about "when the system first boots, it has to come > up enough to be able to mount the second disk on /usr, so don't put things > like the mount command /usr/bin or we'll have a chicken and egg problem > bringing the system up." Fairly straightforward. Also fairly specific to v6 > unix of 35 years ago.

It was discussed here few times:

[https://news.ycombinator.com/item?id=3519952](https://news.ycombinator.com/item?id=3519952)

[https://news.ycombinator.com/item?id=9554134](https://news.ycombinator.com/item?id=9554134)

<comment> torrent-of-ions Considering this, I wonder why the /usr would be kept at all, assuming we keep /home. Why not just have /bin etc. since we can generally fit everything there these days?

<comment><USER11> /usr can be made read-only. It is more convenient to have everything in /usr than to have /bin, /sbin, /lib, etc.

<comment><USER12> I would argue, that it's better to mount / as RO and remount /var, /home as RW.

<comment><USER13> It's not just amount mounting as RO. It could _physically_ be RO (or use e.g. dm-verity or similar)... which would be quite inconvenient if you wanted to add-site-specific directories under /. (Or if a distro wants to add a directory, or whatever.).

Also, wouldn't mounting /var, /home etc. RW on top of a RO-mounted / require that they were actually on different file systems? I don't think you can have a RW bind mount on a RO-mounted file system. (Haven't tried it, though.)

<comment><USER10> > It's not just amount mounting as RO. It could physically be RO (or use e.g. > dm-verity or similar)... which would be quite inconvenient if you wanted to > add-site-specific directories under /. (Or if a distro wants to add a > directory, or whatever.).

You could use two partition update scheme as ChromeOS. I am working on Linux distribution that have rootfs as a squashfs image and I want to have as painless updates as on ChromeOS.

> Also, wouldn't mounting /var, /home etc. RW on top of a RO-mounted / require > that they were actually on different file systems? I don't think you can > have a RW bind mount on a RO-mounted file system. (Haven't tried it, > though.)

You can mount RW fs on RO fs. Distributions on Live-CDs do it all the time.

<comment><USER13> > You can mount RW fs on RO fs. Distributions on Live-CDs do it all the time.

Right, but that's with OverlayFS and such, right? (I.e. not just straight bind mounts.)

Seems awfully complicated to solve what essentially should be a non-problem... (I'm aware OverlayFS has other uses, but in _this_ instance it seems like overkill.)

EDIT: I'll just note, I _did_ say "separate filesystem" (i.e. non-bind), but I guess it might have been easy to miss.

<comment><USER10> > Right, but that's with OverlayFS and such, right? (I.e. not just straight > bind mounts.)

Most probably yes, but there are probably distributions using ro rootfs + specific mounts. I think that in many cases embedded devices would use such a scheme instead of OverlayFS.

EDIT: But you probably have to mount workdir and upperdir somewhere over this ro rootfs for OverlayFS to work.

> EDIT: I'll just note, I did say "separate filesystem" (i.e. non-bind), but I > guess it might have been easy to miss.

I was hoping that you could read between the lines also :) I mentioned my WIP distribution. I have mounted:

\- squashfs ro on /

\- ext4 rw on /mnt/rw

\- /mnt/rw/var bind on /var

\- /mnt/rw/home bind on /home

<comment><USER13> > > EDIT: I'll just note, I did say "separate filesystem" (i.e. non-bind), but > I guess it might have been easy to miss. > I was hoping that you could read > between the lines also :) I mentioned my WIP distribution. I have mounted:

Oooh, burn! :) I honestly didn't see any relevant mention of the WIP-distro you're talking about... but now that you mention it I had a look back. "I am working on Linux distribution" (etc.).

> I have mounted:[snip]

So... separate file systems.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> The argument is not to remove all trace of /bin /sbin /lib - but to move these folders into /usr/ and then sym-link back to the original locations. More of a detailed response here: [https://lwn.net/Articles/670071/](https://lwn.net/Articles/670071/)

</comment><comment><USER15> The linked email is pretty sparse on details. More information: [https://lwn.net/Articles/670071/](https://lwn.net/Articles/670071/)

</comment><comment><USER16> Personally I prefer the suckless[1] approach, but it's a step in the right direction.

1\. [http://sta.li/filesystem](http://sta.li/filesystem)

<comment><USER17> As discussed at [https://news.ycombinator.com/item?id=12591737](https://news.ycombinator.com/item?id=12591737)

</comment></comment><comment><USER18> The initramsf case and the embedded system case are good point.

Can Computer Science help us decide if some people are right?

The measure of Informational entropy : a state with more compartment as more order, thus more information. By merging /usr you lose information, thus making the one in need losing it, whereas the one without a need for this gain nothing.

I laughed at the comment of philosophy by pitchforks of angry users, and I would claim these pitchforks are the one from the Maxwell Daemons telling us to remember that it is easy to lose information and that increasing entropy is messy.

<comment><USER19> By splitting / and /usr you create problems for packagers: Where do all the files need to go?

Does cryptsetup need to go into /sbin or /use/sbin? Does network code belong into / or /use?

Must users will not care, but some might need either of them to set up their file systems.

If you pace something into /, then you also need to put all libraries and binaries that needs into /. That will rapidly blue up the size of /. It is also not automatically testable, so distributions will get things wrong (as they repeatedly did before).

You could have a script to only put the stuff your system needs into /... Most distributions use such a script for their initrd, which contains everything necessary to check and mount your root file system. So you could just extract that into / and be fine with it:-)

Or just use your initrd as that rescue medium.

</comment></comment><comment><USER20> Wouldn't it make more sense to merge stuff into / than into /usr, i.e., move /usr/bin/* into /bin, /usr/share into /share &c.? The 'usr' portion of the path is weird historical cruft which adds no real information.

While we're at it, why don't we add a real Plan-9-style bind and use union mounts?

<comment><USER21> Some programs may have strings like /usr/share hardcoded in them. I once tried renaming the root user to "boss" and it unearthed few issues of exactly this kind.

<comment><USER22>
      # ln -s / /usr

</comment></comment></comment><comment><USER23> This broke my debian live build! I couldn't work out why the process would fail during build (it couldnt find the elf loader!) I was clobbering the symlink /lib -> /usr/lib with a local included folder.

Gah!!

</comment><comment><USER24> Page is down. Mirror:

[http://archive.is/i2Jsu](http://archive.is/i2Jsu)

</comment><comment><USER25> So if your partition /usr fails and all that you have in /bin is a broken link instead real programs; your entire system fails.

Can't see any real advantage in this.

<comment><USER26> And that's a likely scenario? You actually have them on different bits of hardware or something? It's so arbitrary - why not split it further, what goes where? If you want to achieve splitting important stuff off to special storage, I'm sure that'd still be possible.

Also, why recover a system like that when I can just boot off a USB stick?

This is just a hack that's stuck around from when people had tiny drives and needed multiple partitions for these things, as far as I understand it.

<comment><USER25> Yes, of course. Is the common scenario in all old-school linux users and had saved me a lot of headaches. It simply works.

> Why recover a system like that when I can just boot off a USB stick?

Because I can. The basic parts of the system are still available and working. I don't need to reboot to fix the problem, I could mount a different and working /usr in seconds. Is not just "a hack", is a _design_.

</comment></comment></comment><comment><USER27> Given that server's under heavy load, here's a copy-paste:

"The bootstrap utility for the upcoming release of Debian 9 "Stretch" will feature the ability to merge utilities from the root file system into the /usr file system. This essentially means directories like /bin and /sbin will simply be symbolic links to content stored in /usr/bin and /usr/sbin. Ansgar Burchardt has suggested this file system layout might be made the default behaviour for future versions of Debian:

"It has been previously suggested to make this the default for (at least) new installations. I think Russ' earlier mail explains quite well why the split between / and /usr doesn't really work out for Debian these days and that trying to maintain it for some configurations (which are not documented) is mostly busy-work. There is also a nice article on LWN summarizing earlier discussions. I found these arguments convincing enough and would like to see the default switched to merged-/usr for Stretch and later. Possibly also switching systems on upgrade to the new scheme (not necessarily already in the Stretch release cycle)."

Source: [https://lists.debian.org/debian- devel/2016/09/msg00269.html"](https://lists.debian.org/debian- devel/2016/09/msg00269.html")

</comment><comment><USER28> "Considers" is old news—the Debian installer already merges /usr by default.

[https://lists.debian.org/debian-devel- announce/2016/11/msg00...](https://lists.debian.org/debian-devel- announce/2016/11/msg00006.html)

<comment><USER29> That got disabled again:

[https://packages.qa.debian.org/d/debootstrap/news/20161116T0...](https://packages.qa.debian.org/d/debootstrap/news/20161116T074831Z.html)

</comment></comment><comment><USER30> I use Linux (ubuntu gnome) on my main computer since many years. IMHO, changing the FHS should be the lowest priority. The priority should be "hardware support" and "education".

By education, I think mainly about the different way to use Linux compare to Windows.

Imagine you are traveling and need a file that is at home on your desktop PC. With your phone, you can wake up your PC, connect using ssh, convert the document to pdf and copy it to your phone.

Imagine you are visiting a friend and want to show something running on your PC, you wake up your PC, launch putty and a VNC client (portable applications) and you are at home.

Imagine you want to keep your machine lean and clean. With docker you can switch between images of preinstalled independent development environments. With sshfs, you access your remote website without a local copy.

Imagine you want to change the hard drive. I copy very quickly the very few files in my home directory that are not on NFS to a NFS backup directory. I change the disk, reinstall Linux then uses the small installation diary I keep on google drive to configure disk montages and to reinstall non default applications.

<comment><USER31> I don't think adding symlinks to / takes away a meaningful amount of time from the people working on drivers.

I think you're gonna have a hard time convincing people these days that the answer to all the scenarios you listed shouldn't just be "lol cloud", too. :/

<comment><USER30> Of course, the whole point is that my desktop is part of the network like any remote server. You are not a client of servers, you are a member of a network.

AFAIK, rdesktop and logmein are far behind (more difficult to setup and to use).

[https://code.google.com/archive/p/win- sshfs](https://code.google.com/archive/p/win-sshfs) seems dead.

AFAIK, docker does not work on windows home edition.

My scenarios are not made up. These are my very usual and simple use cases of linux. I do not know any windows user that do the same. Do you have a backup copy of your 1TB hard drive on the cloud ?

<comment><USER31> I'm not saying your scenarios are made up and I sympathize with them, but I think most people choose to store their stuff in the cloud so they don't need to worry about the devices they physically touch.</comment></comment></comment></comment>


Fastly S-1 - <AUTHOR> https://www.sec.gov/Archives/edgar/data/1517413/000119312519111675/d702138ds1.htm <comment> tedk-42 /* Work for a Media Company */

We're looking to move one of our sites off Akamai mostly for costs reasons. Fastly configuration in Varnish VCL - Senior Engineers from my company highly rate Varnish as a cache software so Fastly was an easy choice.

I believe Akamai have been our CDN from the start. The amount of reconfiguration we'd need to do to get everything off would create a huge number of tickets in our work queue. The primary advantage of Akamai has been the number of datacenters they have to service our traffic. A customer can be in remote Australia and have their packets cached in a datacenter in the nearby telephone exchange. That's the reach of Akamai that AWS and Fastly can't compete with.

Their WAF and Bot detection products are also very good. They are a definitely an enterprise/full service CDN provider. I definitely wouldn't call them 'legacy' by any means but the type of service they provide is so different to a new player like Fastly.

<comment><USER2> Fastly's major advantage is near instant CDN config changes, where Akamai can take an hour to push a new cdn config.

<comment><USER3> Is that an actual advantage though?

<comment><USER4> Yes, it is an amazing advantage, especially paired with configuration being a VCL.

</comment></comment></comment></comment><comment><USER5> From 2017 to 2018, they added 147 new paying customers. Of which, 57 were enterprise and based on their metrics claiming > 80% of revenue was from these "enterprise" deals, probably high dollar.

Still, ~$50m in marketing/advertising spend to earn 147 new paying customers (340k/customer) seems high to my untrained eye. Do those enterprise deals and that "132% Dollar Expansion Rate" justify such high CPA?

Those with experience with this kind of enterprise-focused company - is this normal?

<comment><USER6> Wait. What? 147 paying customers? I was personally one of those customers, paying like $100 a month, mostly just as a test. They really only added 147 paying customers? How many of them were just paying $100 a month for the base price?

<comment><USER7> I highly doubt if they counted you as an enterprise customer. Enterprise customers have significantly large multi-year contracts. I have worked in sales org before and we reported only contracts which fetched ~ 100k/year as enterprise customer. 10k to 100k were reported as SMB customers. These numbers may be different for Fastly but I doubt $100/month customers are called Enterprise customers.

<comment><USER8> Good luck getting 100k/year contracts in CDN and at a second grade provider.

The market has been commoditized by CloudFlare. CloudFlare is charging $200/month for the business plan, or $2000/month for the enterprise plan with everything.

There can be banks or government paying 10 times more for custom plans (extensive support and long cycle cycles). These would never adopt Fastly.

Akamai can get away with charging millions of dollars to some historic customers who really don't need the service. If they ever migrate away, that's explicitly to take a zero off the bill.

</comment></comment></comment></comment><comment><USER9> As a user, Fastly is really, really good. Akamai is the only serious competitor, but they are a lot more traditional in their sales and configuration. (You can theoretically use Azure as a middleman as some have pointed out, but they don't support custom SSL, and configuration changes take literally hours-to-days to propagate.)

Cloudflare is fine but they are still an order of magnitude slower, which is why we switched. I just tested and Cloudflare is still taking 48ms their own DNS server to resolve our Cloudflare-hosted DNS, but only 14ms for Fastly to establish a connection and send the first byte.

That speed does make a difference. When we switched from Cloudflare to Fastly we had about a 7% increase in completed sales.

I think their ROI is still too low for most small businesses, the only way that actually makes sense for us is because it's free for open source/nonprofits. But I can imagine it's a big deal for larger ones.

<comment><USER10> DISCLAIMER: Akamai Product Manager here.

Deployment times for config changes have been operating at the sub-5m timeframe for at least two years. It used to take hours (never days) to propagate changes across the server estate, but not anymore. And while we were admittedly late to the DevOps train, we have made up lost ground. We have nearly 100 individual APIs to control almost any aspect of our products. CLIs if you don't want to write to the API. A Sandbox to test config changes locally. The ability to validate OAuth tokens at the Edge, cache GraphQL responses, and throttle and/or quota API traffic on a global basis. Hashtag "legacy CDN."

<comment><USER4> > Deployment times for config changes have been operating at the sub-5m > timeframe for at least two years.

Fastly is sub 5 seconds.

> And while we were admittedly late to the DevOps train, we have made up lost > ground.

Not anywhere close. Your cache invalidation takes forever. Ability to assign tag objects does not exist. Engaging "professional services" to make a config change like it is 2002?

<comment><USER11> > Not anywhere close. Your cache invalidation takes forever. Ability to assign > tag objects does not exist. Engaging "professional services" to make a > config change like it is 2002?

Akamai also has a fast purge these days, sub 5 seconds as well I believe. Works nicely.

<comment><USER4> Fast purge only works on certain kind of objects in certain kind of configurations, not to mention the idea of "I would like tom make 20k purge requests in a second via an API" is met with stares.

Fastpurge is a hack.

<comment><USER11> Interesting. I only have experience with the occasional simple (manual) purge and I could verify the object was invalidated quickly. Can you elaborate on an example config where this goes awry?

<comment><USER4> Fast purge works with all kinds of site delivery ( and site delivery based ) products. Unlike modern CDNs Akamai other products ( such as for example VOD and media services ) do not live in the same object space and hence are not fast purge compatible.

You would think purging a video stream would be the same as purging a standard site delivery object, after all it the stream is http(s) accessible .m3u8 and a pile of .ts chunks but that's not the case -- in some cases it can take up to one hundred and twenty minutes.

<comment><USER11> I see, thanks for the info.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER12> via [https://twitter.com/justincormack/status/1119217911380545536](https://twitter.com/justincormack/status/1119217911380545536) interesting to see some technical detail in the S1 including a likely reference to WASM, WASI and Lucet [0].

"Moreover, our platform is highly technical and complex and relies on the Varnish Configuration Language (VCL). Potential developers may be unfamiliar or opposed to working with VCL and therefore decide to not adopt our platform, which may harm our business."

"We will continue to work on open source projects, which will empower developers to build applications in multiple languages, and run them faster and more securely at our edge"

[0] [https://github.com/fastly/lucet/](https://github.com/fastly/lucet/)

<comment><USER13> I was tasked to integrate Fastly into our infrastructure having not done any configuration with Varnish (VCL) before. ~10k req/s

VCL can be challenging for complex flow control (IMO), but it is made easier with Fastly enhanced/custom VCL modules.

Their documentation was good, and the Fastly support team was excellent. Their sales engineers gave us a baseline configuration that suited our needs and were quick to answer any followup questions.

Haven't noticed any downtime or response delays to date.

<comment><USER14> Check out this flow diagram for Varnish 2 [1].

[1] [http://www.kalenyuk.com.ua/wp- content/uploads/2009/12/varnis...](http://www.kalenyuk.com.ua/wp- content/uploads/2009/12/varnish-2.0.4-flow.jpg)

</comment></comment></comment><comment><USER15> > We generated a net loss of $30.9 million for the year ended December 31, > 2018, and as of December 31, 2018, we had an accumulated deficit of $146.2 > million.

Wow, I did not think an "enterprise-y" company like Fastly could be burning that much cash on growth!

<comment><USER16> It says something about the industry when "only" a $30.9M annual burn rate sounds small.

<comment><USER17> The $30M is 20% their annual revenue, or 18% of their current assets. That doesn't seem out of line for a growing business, and is something you can do without Venture Capital.

</comment></comment></comment><comment><USER18> The whole "edge compute" space seems poised to do well to me. Cloudflare's edge KV store and edge server-side JavaScript are obvious, but great ideas.

The wildcard seems to be the companies that own cell towers. If they build a credible edge offering, that's a moat that is hard to beat.

<comment><USER19> >The whole "edge compute" space seems poised to do well to me.

IMHO, I think it's mostly a solution in search of a problem. The internet backbone is fast enough to not be noticeable for end users. A centrally located server in the U.S. will have a maximum ping of 40 ms to anywhere in the U.S. That's faster than is perceptible to the end user. The only mainstream usage I can see is cloud gaming where ping is that critical.

<comment><USER20> That's only good for small media like websites and images. Videos and downloads need to be cached in the provider networks, you simply cannot serve terrabits of data from a single origin. Well, you can, but networks don't like to operate like that. So ya, at scale, you need edges. The internet is dominated by companies at scale.

<comment><USER19> That's more of a CDN than edge compute. Edge compute would be something like having your Rails app run in a bunch of edge locations and then doing some eventually consistent magic to sync them up.

</comment></comment></comment></comment><comment><USER21> Interesting that just 10 customers make up over a third of revenue for them.

<comment><USER22> Judging from pages 4-5, I'm guessing these include NYT, New Relic, Ticketmaster, Alaska Airlines, Spotify, and Github.

They mention other cloud platforms as competition, and Azure has a CDN. I doubt Github would switch anytime in the near future, but the dangers posed to smaller companies by the consolidation under giants is interesting. What happens when your competitor doesn't just try to steal your clients, but can actually just acquire them?

They also mention one risk as their dependence on AWS, a competitor, and that if all the cloud providers blackballed them, they'd be in trouble.

<comment><USER23> I think if Amazon hasn't kicked a competitor like Netflix off of their platform, Fastly has little to worry about.

<comment><USER24> That's probably not the right analogy. Kicking someone off of your platform isn't the same as using your own platform instead of a competitors.

I'm sure Azure would welcome competitors to use their product - same way AWS welcomes Netflix. A good analogy would be Amazon switching from Oracle to AWS based solutions. In which case, they do have something to worry about.

<comment><USER22> With regard to their "what if all the cloud providers block us" issue, it's is a good indication that they're fine. (Page 30 "We rely on third-party hosting providers that may be difficult to replace.") I don't think that's a serious risk.

For the Github thing, you're right, it's a different situation.

</comment></comment></comment></comment></comment><comment><USER25> I love the people behind Fastly. Congrats to Artur and the crew :-)

</comment><comment><USER26> Interesting that Brexit uncertainty is in their risk factors:

> These developments, or the perception that any of them could occur, have had > and may continue to have a significant adverse effect on global economic > conditions and the stability of global financial markets, and could > significantly reduce global market liquidity and limit the ability of key > market participants to operate in certain financial markets. In particular, > it could also lead to a period of considerable uncertainty in relation to > the UK financial and banking markets, as well as on the regulatory process > in Europe. Asset valuations, currency exchange rates, and credit ratings may > also be subject to increased market volatility.

<comment><USER27> basically legally required for anyone doing business in europe/UK to add that boilerplate

</comment></comment><comment><USER28> Fastly's bandwidth prices are high to me: $0.12-$0.28/GB is 2007 rates for transit. Perhaps this is why when GitHub pages started capping bandwidth to lower limits they had also switched to Fastly? For a comparison, I pay less than $0.01/GB for a CDN right now, and the price of transit on average drops 40%/year so even that's above market rate now.

A lot of people (including Cloudflare) just give it out for free, making this really a space for enterprise plays, which at their size, have the clout to push for better rates across many similar competitors, or just running their own infrastructure.

I honestly just don't get the value add here. It really doesn't feel like an IPO play.

<comment><USER29> That's the card rate. Their bigger customers aren't paying that.

<comment><USER28> It's part of why I don't get it. Large companies have multiple competitors to negotiate with, driving down prices (and this does not look to change anytime soon, it's dropping 40%/year for transit).

We're talking about an S-1 here. Where's that growth going to come from? Cannibalizing Akamai is not a long term IPO strategy.

<comment><USER30> At my previous job, we had Fastly as a potential new CDN provider set up against our existing CDN provider and two other new potentials. After a few rounds of calls for bids, Fastly won out.

Based on my experience with the other providers they were also, by a large margin, the most modern - it felt like moving from a 2008 integration to a modern, fully RESTful API with great documentation and decent UI.

This is all anecdotal, but they did combine a great technical platform with great support. If transit prices are the same or similar for all providers in that size category, they have to fight on features and support instead.

<comment><USER8> They won based on what?

</comment></comment></comment></comment></comment><comment><USER31> Where I work, a website/app in the top 20 US alexa rankings, we use Fastly and it is pretty great. If I have a complaint it's that their varnish version is old. The web UI is great, the service is great. I've never had an issue with them in my many years of working with them.

<comment><USER32> Yeah they run a fork of varnish 2 with inline C disabled, and a number of custom extensions (surrogate keys, tables/dictionaries, etc.) -- as well as likely customizations to support their massively multi-tenant deployment and more

Add in the necessity of porting vcl for all of their customers, and the prospect of upgrading varnish is obviously pretty daunting.

I suspect they'd rather focus on their new webassembly-based configuration solution, rather than try to keep up with changes in VCL

</comment></comment><comment><USER33> I don't use fastly on the supply side but I do use it as a consumer and the services they host that I use have good responsiveness and availability.

The fastly engineers I know are nice people. They take care, they're smart and afaik they've stayed small and focussed as a group. They're active in operations groups, standards.

What's not to love?

</comment><comment><USER34> Honestly, I love Fastly but wasn't expecting this? Seems early.

Maybe it's just a good time to strike while the market is frothy.

</comment><comment><USER35> Is it a coincidence that there has been such a large uptick in IPOs just over 10 years after the real-estate meltdown? Or did the meltdown kill off a generation of unicorns that couldn't get funding during the crunch?

It's just anecdotal evidence, but I talked to a CEO that had just closed a deal with his A round from Kliner Perkins in August or September 2008. When it came time to fund the deal, the partners at the VC firm made the capital call and the LPs couldn't fund. So Kliner Perkins called the CEO and told them they had to cancel the deal.

The CEO had to make big cuts, couldn't pay rent on the building, etc. He eventually sold the company, but I wonder if it or others would have been IPOing around 2014-2015 if they had gotten the funding they needed.

<comment><USER36> I know very little about that world, but I heard Dodd-Frank made going public less appealing. The first google hit for "IPO over time"[1] shows a drop after the dot-com bubble around 2000 and not much around when Dodd-Frank got passed --but it seems surprisingly flat. Money has been really cheap since the recovery. This, plus the amount of VC money, has likely made the threshold for IPO much higher.

[1] [https://www.statista.com/statistics/270290/number-of-ipos- in...](https://www.statista.com/statistics/270290/number-of-ipos-in-the-us- since-1999/)

</comment></comment><comment><USER37> I'm not experienced with S-1 filings, but don't they usually include the share price targeted and amount they're looking to raise? It's blank up top on the document right now. When is that typically filled in?

<comment><USER38> Not until closer to the IPO date after investors haven been able to make an evaluation and been pitched by company and bankers.

A 7x multiple on $140m in sales might suggest around $1b (divide that by # shares to get a possible share price).

<comment><USER39> Or look at Zoom's 47.7x multiple and you've got a $6.6B market cap

</comment></comment></comment><comment><USER40> This guy has compiled the breakdown of equity owned by founders at IPO, of all the recent (and some historical) IPOs:

[https://grph.com/d/mzo1W9QP4Mk](https://grph.com/d/mzo1W9QP4Mk)

You'd be surprised how random these appear. I guess there's no science to it, and much more chance is involved than we would like to admit.

<comment><USER41> Be careful making assumptions from those graphs. In some cases they include employee owners and in other cases they don't. For example, for Pagerduty, one of the cofounders is missing, presumably under "Other" since he's the only cofounder that's an employee. But for Google Larry and Sergey are listed. So I'm not sure how it was decided who goes in the graph.

</comment></comment><comment><USER42> At GitLab we use Fastly and we've been very happy with their service. It was fast to implement and greatly helped to speed things up. As a fellow Commercial Open Source Software (COSS) company I think it is cool that they are based on Varnish.

</comment><comment><USER43> Is Fastly a competitor to Akamai?

<comment><USER44> Under the "Risks" section they specifically mention their competitors:

The market for cloud computing platforms, particularly enterprise grade products, is highly fragmented, competitive, and constantly evolving. With the introduction of new technologies and market entrants, we expect that the competitive environment in which we compete will remain intense going forward. Legacy CDNs, such as Akamai, Limelight, EdgeCast (part of Verizon Digital Media), Level3, and Imperva, and small business-focused CDNs, such as Cloudflare, InStart, StackPath, and Section.io, offer products that compete with ours.

<comment><USER18> _" small business-focused CDNs, such as Cloudflare"_

That's an interesting statement. Supposedly, 10% of web requests on the internet route through Cloudflare. And I imagine their free tier has plenty of non-business use.

<comment><USER44> They may be distinguishing them based on their type of customer, rather than their quantity of traffic. Other CDNs may tend to exclusively pursue much larger customers like big banks, governments, etc., while Cloudflare from my understanding is quite happy to serve the smaller market segment.

<comment><USER18> Ahh, yes, I read it as "small, business-focused CDN" though there's no comma there. You're right..they meant focused on "small business." I suppose the dash threw me off.

<comment><USER45> Fascinating, that's because they did the dash wrong for the compound adjective.

It should have been the ugly but correct "small-business-focused CDN". If they didn't want to double hyphenate then "small-business focused" would have been read properly by everyone. But you definitely parsed their "small[,] business- focused" correctly :).

<comment><USER18> Makes me appreciate the importance of grammar a bit more. I assumed I was reading it wrong. Thanks for sharing the detail.

</comment></comment></comment></comment></comment></comment></comment><comment><USER46> How is this different than AWS?

</comment><comment><USER47> May I ask how can I download this in PDF?

<comment><USER48> File > Print > Select 'Save as PDF' under Destination.

</comment></comment><comment><USER49> I haven't looked at any other details, but Googling Fastly says this:

"Fastly, Inc. is an American cloud computing services provider. Fastly's edge cloud platform provides a content delivery network, Internet security services, load balancing, and video & streaming services"

Just judging by that statement, I feel they're going to be eaten by AWS, GCP, and maybe Azure. However, it seems their focus may be on creating a viable business, rather than trying to spin an open-source project into a business (e.g., Docker Cloud). We already see that Docker is losing business to people using the OSS, but paying Amazon or Google for ECR and GCR, respectively.

That being said, there are some smaller somewhat related players, such as PagerDuty that seem to be off to a good start. Twilio's stock has performed well historically, too, as has Splunk. But these later companies seem to be solving problems that make them less direct competitors with the bigger players.

<comment><USER50> Why don't you read the filing? It covers the competitive landscape.

Competition

Our platform spans several markets from cloud computing and cloud security to CDNs. We segment the competitive landscape into four key categories:

•Legacy CDNs like Akamai, Limelight, EdgeCast (part of Verizon Digital Media), Level3, and Imperva (for security); •Small business focused CDNs like InStart, Cloudflare, StackPath, and Section.io; •Cloud providers who are starting to offer compute functionality at the edge like Amazon's CloudFront, AWS Lambda, and Google Cloud Platform; and •Traditional data center and appliance vendors like F5, Citrix, A10 Networks, Cisco, Imperva, Radware, and Arbor, as well as networks that offer a range of on-premise solutions for load balancing, WAF, and DDoS.

<comment><USER49> I can't say I'm impressed by Akamai, but then again, Zoom came out of nowhere and is likely to clean house in the B2B video conferencing space.

Maybe Fastly will give legacy players a run for their money.</comment></comment></comment>


The Trouble With Boys - <AUTHOR> http://www.newsweek.com/id/47522/output/print

<comment><AUTHOR> I submitted this because Peg Tyre's eponymous book came out last week. There are a couple things in this article she backs away from, most notably she no longer holds Gurian up as a reputable authority. Other than that the book is similar to the article, but much expanded and with many more facts and figures. The book is good but not brilliant, and there are actually a few errors in it, but overall I'd say it's still worth reading if you're interested in the subject or have a young kid. The author clearly spent a lot of time in the classroom and talking with parents, so it's really useful for highlighting what actually goes on in the classroom these days and how it may differ from when you were a kid.

<comment><USER2> What a piece of... erm.. crap. Sorry.</comment></comment>


Why does my computer run so slowly?? - <AUTHOR>

I purchased an acer aspire one series netbook back in may(?), and it was installed with windows 7 starter edition. I decided to install the whole premium version of windows 7. was that a mistake? my computer runs extremely slow. and i have occasionally seen an icon indication "low disk space". What caused this issue and please tell me how or what I should and/or need to do??? <comment><USER2> Hi Danielle,

Hacker News is mostly for startup/hacking related topics and probably isn't going to be a good resource for hardware support questions. I would recommend Google-ing for 'windows support forums' and try asking there. Good luck!

</comment><comment><USER3> Open the task manager, go to the processes tab and order processes by CPU usage. Is there a process called 'monitor' consuming around 50% of your CPU? If so, kill it.

The process has something to do with the Acer restore partition, and if you remove the restore partition, it freaks out. I find this causes it to consume an entire core, ie: 50% of total processing power, as I have a dual core. So if your machine is a single core, I'm guessing it could use up to 100%.

Hope that helps

Edit: thought I should add that so far I haven't found a fix for this (although I haven't really tried), I've just gotten into the habit of killing the process when I first boot up.</comment>


Ask HN: Im planning on quitting social media. How do I promote my apps? - <AUTHOR> Hi guys, Im planning on completely quitting social media. But i find myself quite worried on how then would I promote my apps? Its easy dropping a download link on your timeline and immediately gain engagement. Im worried that it wont be as easy once I stop social media. Sure theres Ads, but those need money to start <comment><USER2> You don't really give reason why you are quitting social media. Right now it looks like you benefit from social media instead of it harming you?

<comment><AUTHOR> Well my reason is quite simple, its a huge distraction for me. And I dont see any personal gain from it</comment></comment>


I made a "programming language" based on Cobol syntax - <AUTHOR> First of all, I'm sorry. I'm deeply sorry.
A few months ago, talking with some friends, we had the idea of developing a programming language just for the sake of it. We talked a little about it, design by committee got out of control and, a few days later, we abandoned the project completely without having written a single line of code.
I, though, have wanted to make a programming language my whole life and thus I kept trying to push the project forward by myself. I created a syntax loosely based on that of COBOL, made the worst compiler possible, wrote a somewhat slow "virtual machine" and released LDPL (ldpl.lartu.net) as a joke. Even the name is a pun on older, business oriented languages with BIG-CAPITAL-LETTER-NAMES. Again, like COBOL.
Fast forward a little and the joke got out of control.
I kept working on the language on my free time - pushing the not-very-ortodox but easy to code compiler forward - and the language got pretty usable. I mean, it's not a language you'd like to work with. It can't do everything. It's quite slow. It doesn't have any scoping nor functions (it does have sub-procedures, though) nor lambdas nor objects nor fancy data structures. Think of it more of an esolang than a serious language.
But what it lacks in efficiency and features, it makes up by having a cute dinosaur logo (poorly drawn as a joke on other mascots like the GCC gnu), unicode support, a full standard, comprehensive documentation, fancy examples and a half-written tutorial to be finished in the next days. It's also very portable, with binaries available for Linux amd-64 and ARMv8, Windows 64 bits and even Mac OS X for PowerPC processors!
So, if you are curious, bored or want to try something useless and new, I invite you to visit ldpl.lartu.net, download the LDPL source code or grab a precompiled binary for your operating system and code away.
I'm sure you won't hate it that much. <comment><USER2> Can you provide the code for basic 'Hello World' program in your language?

<comment><AUTHOR> There are a lot of examples on the website (ldpl.lartu.net) along a half- written tutorial and a complete language documentation document.</comment></comment>


Noam Chomsky: Neoliberalism Is Destroying Our Democracy - <AUTHOR> https://www.thenation.com/article/noam-chomsky-neoliberalism-destroying-democracy/ <comment><USER2> There is an absence of pragmatism and an excess of moral prosecution in Chomsky's criticisms. He can't point to historically successfully (and hence tested) societies based on his ideals. This isn't a problem as an academic exercise - but it has become fodder for the neo-Marxists/Trotskyists masked as "socialist democrats" wreaking havoc in liberal institutions.

<comment><USER3> Except for that book he wrote about it: [http://libcom.org/files/1345266991261.pdf](http://libcom.org/files/1345266991261.pdf)

<comment><USER4> Isn't this just a collection of essays on the promise of anarchism? It's been many years since my sister lent it to m, but I don't recall any discussion of contemporary anarchistic societies. My contention is that if they were a truly viable alternative, more people would migrate into them, and attrition would not be a significant problem.

</comment></comment></comment><comment><USER5> The 'golden age of capitalism'/social democracy thing didn't work so well throughout the seventies - that's why the neoliberals were voted into office, mainly due to problems with the economy.

I am also not convinced about the democracy part during the 'golden age' \- once upon a time you had unelected bureaucrats and union bosses who would do the decisions (you have some of that in the EU now). Also mighty Goldman Sachs didn't enact Glass-Steagall - you need a government for that.

<comment><USER6> The EU is the exact opposite. It started out as the union of coal and steel "community" (for the bosses of the companies). It is the exact opposite of a worker's union: for the largest part of it's existence it was 50% dedicated to taking away rights of employees. It very much was a voice for capitalists, owners and generally the ultra-rich (not even the 0.1%, we're barely talking the top 10 richest of Europe at the time here)

<comment><USER7> Another example is how the ECB has no dual mandate. Its only mandate is to control inflation. It has no mandate to limit unemployment.

As the Euro crisis began to cause political instability they've backed off a little, but they took their single mandate very seriously and stuck to their "no fiscal stimulus" guns for a very long time during the crisis.

</comment></comment></comment><comment><USER8> In this article, he argues both for and against populism.

" What happened is that large parts of the population—which had been passive, apathetic, obedient—tried to enter the political arena in one or another way to press their interests and concerns"

vs.

" There was a lot of elite discussion across the spectrum about the danger of too much democracy and the need to have what was called more "moderation" in democracy, for people to become more passive and apathetic and not to disturb things too much"

Basically, we want more people who believe in what we say to be involved.

[https://reason.com/archives/2017/05/31/noam-chomskys- venezue...](https://reason.com/archives/2017/05/31/noam-chomskys-venezuela- lesson)

Chomsky is pretty virulently anti market and anti capitalism. His linguistic genius does not give him authority when commenting on policy.

Basically, he praised Venezuela (and Chavez, and socialism) until it went to crap, and then blamed the capitalists and the fact that they did not implement "true" socialism (whatever what means) as a reason for why he was never wrong.

"Speak up unless you disagree with me."

<comment><USER9> There is no argument for or against populism in your examples (there's an argument that both a popular wave occurred and that attempts to suppress populism occurred, but not an argument for or against populism.)

> Basically, we want more people who believe in what we say to be involved.

No, actually, the argument he makes isn't about who should be politically involved, it's about how those people ought to be served.

<comment><USER8> > No, actually, the argument he makes isn't about who should be politically > involved, it's about how those people ought to be served.

You know that you're being incredibly condescending right now? People ought to be served something they don't choose?

</comment></comment></comment><comment><USER10> A communist caring about "his" democracy? That's new. Wasn't he pro-Pol Pot?

<comment><USER3> No

[http://www.abc.net.au/news/2011-07-01/brull---the-boring- tru...](http://www.abc.net.au/news/2011-07-01/brull---the-boring-truth-about- chomsky/2779086)

That whole controversy centers around him pointing out that a book by a guy called Ponchaud which was being used as a pretext to try and go to war was full of errors.

It _was_ full of errors.

<comment><USER11> Ponchaud's book was _not_ full of errors, it was based on accounts that were (at the time) unverifiable and Chomsky went on to question their credibility.

For an outline of the points brought forth, you may read this: [http://www.paulbogdanor.com/chomsky/wma.html](http://www.paulbogdanor.com/chomsky/wma.html)

What the article you linked refers to as "full of errors" was in fact a _review of the book_ by Jean Lacouture.

</comment></comment></comment><comment><USER11> Two points that keep coming up:

"Real wages have gone down"

Well, how high should they have risen? They can't rise indefinitely. Yet, the products you can buy for the same money have vastly improved. What car could you buy for (the equivalent of) 10,000$ in 1979? Would you _trade_? All sorts of goods have become either cheaper or better, or have literally _come into existence_.

Now, you will blame the rise of Chinese manufacturing on these improvements, but then please also consider how much wages have improved for the Chinese. The _standard of living_ is rising across the board, across the globe.

"It all goes in the pockets of a few super-rich"

It's repeated like a mantra on the left, but when do they ever show you the actual numbers? Do yourself a favor and take _all_ the wealth and _all_ the income of the top 10% and distribute it across the other 90%. Now tell me, has the wealth and income gone up dramatically for those 90%? Wealth/Income inequality is a psychological problem more so than an economic one.

<comment><USER12> According to this report ([https://www.cbo.gov/publication/51846](https://www.cbo.gov/publication/51846)) the average wealth for the top 10% in 2013 was ~$4 Million. Spread equally around everyone that represents a ~25% increase for families in the 50-90th percentile, and over a 1000% increase for families below that. Seems pretty significant to me.

<comment><USER11> Percentages are misleading. Going from 1$ to 10$ is a 1000% increase, yet it's not significant.

Do the math again, this time with actual dollar amounts, then try again. Take all the money the top 10% have, then spread it among the rest. Also remember, you can only do that _once_.

<comment><USER13> Productivity has been rising steadily pretty much since they started keeping track of it, while the median family income has stagnated over the past 40 years or so.[1] Productivity is defined as the ratio of the volume of outputs to inputs, or equivalently, the "money out to the money in." If the money is not going to the median families, where is it going? It certainly isn't going to the lower class. It is going to the upper class, and is seen as a "concentration of wealth" since the money is all going into more or less the same pockets (the fuzziness of the wording is due to the fact that sometimes people die and other people become richer to move into the upper class).

To come to the challenge posed in your comment, let's examine some other indicators of inequality.[2] The top 1% holds around 42% of the wealth. Meanwhile, the bottom 50% holds around 1% of the wealth. Doesn't that seem a bit ... unequal? Of course, to have valid concepts of "top 1%" inequality must of course exist on some level, but the disparity is staggering. There are 160 million people in the bottom 50%, and about 3 million in the top 1%.

The average person in the top 1% holds about $2240 for every $1 belonging to the average person in the bottom 50%. The price of a $1m car to the top 1% is on par with the cost of a current-gen gaming console (~$450) to the bottom 50%, on average.

Even without getting into the top 0.1% and their obscene amounts of money hoarding, this is a lot. We can go there too if you want.

We could also just ask the people who arguably have the best access to such data: the Congressional Budget Office.[3] The graphic on the front cover is enough to illustrate the difference, but you can also go through the findings in the body if you need more convincing.

All of this is freely available on the internet, and found with Google via "total wealth in the us". Either you didn't know this was possible, or you don't want to know the facts.

[1] [https://en.wikipedia.org/wiki/File:Productivity_and_Real_Med...](https://en.wikipedia.org/wiki/File:Productivity_and_Real_Median_Family_Income_Growth_in_the_United_States.png)

[2] [https://en.wikipedia.org/wiki/File:U.S._economic_variables_r...](https://en.wikipedia.org/wiki/File:U.S._economic_variables_related_to_the_distribution_of_wealth_and_income.png)

[3] [https://www.cbo.gov/sites/default/files/114th- congress-2015-...](https://www.cbo.gov/sites/default/files/114th- congress-2015-2016/reports/51846-familywealth.pdf)

<comment><USER11> You're missing the point entirely. I'm not saying inequality doesn't exist. Of course it exists.

I'm asking again: What happens if we take the wealth not just from the top 1%, but the top 10%, then spread it among the rest? How much does everyone get? Would it be a _life-changing_ amount of money?

<comment><USER13> As of 2013, the top 10% of people had 85% of the wealth and the bottom 90% of people had 15% of the wealth.[1] FRED says the total net worth of households and nonprofit organizations was $79 trillion.[2] The population of the US at the end of 2013 was around 317 million.[3]

Crunching the numbers, we can determine that the top 10% had $67.15 trillion. If this full amount is distributed equally to every person in the bottom 90%, as the question states (let's call this the "kill the bourgeoisie" scenario), each _person_ in the bottom 90% would receive $235,000 on average.

If we wanted to forcefully distribute the money while leaving the people at the top intact (let's call this "blunt force redistribution") such that the current top 10% has 10% of the wealth, then each _person_ in the bottom 90% would receive $208,000 on average.

I would definitely consider this a life-changing amount of money.

[1] [http://www2.ucsc.edu/whorulesamerica/power/images/wealth/Net...](http://www2.ucsc.edu/whorulesamerica/power/images/wealth/Net_worth_and_financial_wealth.png) via [http://www2.ucsc.edu/whorulesamerica/power/wealth.html](http://www2.ucsc.edu/whorulesamerica/power/wealth.html)

[2] [https://fred.stlouisfed.org/series/HNONWRA027N](https://fred.stlouisfed.org/series/HNONWRA027N)

[3] [https://www.census.gov/popclock/](https://www.census.gov/popclock/)

Edit: Especially when you consider that this article[4] came out in 2013, a majority of people will be able to 1) basically completely exit debt and 2) start contributing substantially to the economy again. Not to mention afford college, afford healthcare, afford good food for themselves and their children, drop a whole lot of stress, and generally build their lives back up. There would be zero people below the poverty line. Who knows if the traditional refrain of "velocity of money increasing means inflation means collapse" would be realized in such a radical redistribution, and if a sudden and drastic shift such as that would end up hurting more than helping. We can only ever play the speculation game in matters like these.

The numbers in the main body reflect also the worth of nonprofits. Not sure on the proportions on that one, but even if you take it to be 10% of all the wealth (IMO an absurdly high estimate) the number still shifts to $187,000 per person in the bottom 90%.

[4] [http://money.cnn.com/2013/06/24/pf/emergency- savings/index.h...](http://money.cnn.com/2013/06/24/pf/emergency- savings/index.html)

<comment><USER11> > If we wanted to forcefully distribute the money while leaving the people at > the top intact (let's call this "blunt force redistribution") such that the > current top 10% has 10% of the wealth, then each person in the bottom 90% > would receive $208,000 on average.

They would receive assets _valued at_ 208,000$ at current (arguably inflated) prices, most of it not being cash. You might expect the biggest expropriation in US history to be somewhat upsetting to the markets.

Now that we've established an upper bound, maybe we can talk about what percentage of that money can realistically be taken and what problems it could actually solve.

<comment><USER13> >They would receive assets valued at 208,000$ at current (arguably inflated) prices, most of it not being cash. You might expect the biggest expropriation in US history to be somewhat upsetting to the markets.

Technically true, but the path of this redistribution would be in the form of taxation and offered public services, which is extracted purely as cash.

According to the Obamacare website, poverty levels are around $11,000 per person, scaling sublinearly with the number of people in a single household. If we use that as a baseline, we'd need to tax the top 10% about 5% more per year and redistribute that in cash or an equivalent value of provided services (education, healthcare, etc.) to create a buffer that effectively nullifies the concept of a poverty level. In reality this would likely be applied more as a progressive tax, so the top earners would be taxed more and more benefits would go to the people who are actually poor.</comment></comment></comment></comment></comment></comment></comment></comment>


Ask HN: Review my startup - <AUTHOR> Introducing HumaneHelper - an app which focus on helping homeless and poor people in a new and innovative way!
Here's the app: https://play.google.com/store/apps/details?id=com.humanehelper.humanehelper&hl=en
Here's the website: http://humanehelper.wixsite.com/humanehelper
Please try and let me know your valuable suggestions and feedback. <comment><USER2> it's shit

<comment><AUTHOR> WHOA! Why? Please let me know.</comment></comment>


zztmmo - classic zzt game engine + node.js + jQuery - <AUTHOR> http://github.com/marak/zztmmo

<comment><USER2> OK ok ... breathe ... I can barely contain my excitement. I was reliving zzt a few weeks ago and thinking how cool it would be to port zzt to js and make it into an MMO.

If users could add rooms to the zztmmo universe, complete with zzt-oop scripts, it would be absolutely insanly awesome!

</comment><comment><USER2> If you want to try the original you can try the open source DreamZZT emulator.

<http://dev.c99.org/DreamZZT/>

I prefer to use the original (google is your friend) with DOSBox.

</comment><comment><AUTHOR> getting lots of traffic....servers should hold....keep trying refreshing if it doesnt load

<comment><USER3> This looks really cool! It'd be awesome to have a retro text-based MMO in the browser.

If the server doesn't hold, that's my fault (I wrote it). Antinode's been powering my blog solidly for the last few months, but this is probably the most traffic it's got so far.

Let me know how it goes. Was it easy for you to integrate?

PS: I'm getting a 404 on the RSS for your site <http://www.maraksquires.com/rss.xml>

<comment><AUTHOR> i cant tell if its antinode or what, but the server is randomly dying serving the static content. its not outputting any error messages either.

i'm going to have to run ab or tsung against it later to pinpoint the problem :-(

edit: just updated from 1.92 to 1.93...

i dont think it could be an antinode problem because the way im hosting this is that antinode is a child process of the application host. if antinode was crashing it would just restart gracefully, instead of the whole server is going down

edit 2: seems to be working now.....we'll see</comment></comment></comment>


How to Anonymize Everything You Do Online - <AUTHOR> http://www.wired.com/2014/06/be-anonymous-online/

<comment><USER2> Of course it is wired so naiveté is to be expected but all this article says is use Tor and VM's. I'm not quite sure that is sufficient in this day and age. Any user generated content posted using those systems is what will break anonymity for most users... How they type, what they type, and when they type it are just a few of the simple ways to fingerprint a user.

It is unwise to advise people on how to be anonymous as if it was as simple as downloading a few software tools.

<comment><AUTHOR> Can you direct me to a more thorough resource or are methods too cutting edge to be discussed outside the corners of the internet?</comment></comment>


The New Hexayurts - <AUTHOR> http://vinay.howtolivewiki.com/blog/other/the-new-hexayurts-2044 <comment><USER2> This is clever! As soon as you realise that the roof of the original hexayurt has the footprint of a regular hexagon, you can mine the entirety of the platonic, archimedean, and semiregular solids for anything with hex and square faces: bam, new no-waste building structure.</comment>


Yash: Posix-compliant shell with fish-style predictive completion and more - <AUTHOR> https://yash.osdn.jp/index.html.en <comment><AUTHOR> From the project website:

> Yash is intended to be the most POSIX-compliant shell in the world while > supporting features for daily interactive and scripting use. Notable > features are:

       * Global aliases

       * Arrays

       * Socket redirection, pipeline redirection, and process redirection

       * Brace expansion and extended globbing

       * Fractional numbers in arithmetic expansion

       * Prompt command and command-not-found handler

       * Command line completion with predefined completion scripts for more than 100 commands

       * Command line prediction based on command history

I'm particularly taken with it's support for configuring the relevant keyboard commands, with strong support for both Emacs and Vi bindings.

It also uses much less RAM than many other shells with similar interactive features, to the extent that matters to folks these days.</comment>


Ruling Unsealed: National Security Letters Upheld as Constitutional - <AUTHOR> https://www.eff.org/press/releases/ruling-unsealed-national-security-letters-upheld-constitutional <comment><USER2> I only had time to skim the ruling, but it seems like the petitioners only raised First Amendment concerns. Can someone with more legal knowledge explain if it's still possible to challenge NSLs on Fourth Amendment grounds? Has this avenue of attack already been exhausted?

<comment><USER3> Not really, the NSL in essence is nothing but a gag order that prevents you from notifying anyone when you are served with a warrant.

<comment><USER2> The relevant point is that the FBI can generate them unilaterally, whereas normally warrants must be authorized by a court.

</comment></comment></comment><comment><USER4> This is truly depressing. Is there any backup plan in case the appeal gets rejected?

<comment><USER5> This is entirely a "what if", so realize that I'm aware of how absurd this likely is.

Given how many NSLs are regularly given out (I believe we're well into tens of thousands per year?) I wonder to what extent unified civil disobedience is a viable answer. If thousands, or even hundreds of companies all decided to say "I Have been NSLd, and I refuse to go quietly" would there even BE a useful response the govt could take?

At the point that the govt can make secret rulings approving of secret proceedings dispensing secret legislation, I see few other ways to address a cyclically broken system.

<comment><USER6> They will find someone/group and make an example; like what they did to the CEO of Qwest.

[https://www.washingtonpost.com/news/the- switch/wp/2013/09/30...](https://www.washingtonpost.com/news/the- switch/wp/2013/09/30/a-ceo-who-resisted-nsa-spying-is-out-of-prison-and-he- feels-vindicated-by-snowden-leaks/)

<comment><USER5> I didn't know about this instance, and it just convinces me further that there's very little structural change that can be made to dislodge this. What I read in that article is essentially material evidence of subversive tactics to force compliance with an encroaching govt. This is probably another "nothing new", but the phrasing of "might find difficult to get future contracts" reeks so much of the old fashioned "would be a shame if something happened to you" that it strikes a harder tone; and I am even now having trouble reconciling (morally, not logically) how the _object_ of this behavior is the one who endured jail time for it.</comment></comment></comment></comment>


Software Engineering Metrics Every IT Project Manager Should Consider - <AUTHOR> https://blog.scope.ink/4-software-engineering-metrics-every-it-project-manager-should-consider/ <comment><USER2> I have been thinking for some time about an easy-to-generate metric that seems to be rarely-considered in real-world practice.

UN-PLANNED vs PLANNED WORK

The idea is simply to track the percentage of time that a dev or a team is compelled to work on things that were NOT planned for the current sprint.

This allows you to easily calculate how much of the total time was _actually available_ for planned work.

More often than not I wind up working on teams and projects that pull DEVs into a lot of Production Support work, typically UNPLANNED.

Then folks will go off and try to calculate VELOCITY or something similar, and completely ignore the UNPLANNED work factor -- and even try to increase 'VELOCITY' without any consideration of UNPLANNED.

<comment><AUTHOR> Thanks for your reply tanseydavid!

Yeah, probably the not planned work escapes control and it probably produces most of technical debt.

It could be measured in some way by stablishing goals, perhaps?

</comment></comment><comment><USER3> I not too sure if the measuring activity days is really that useful as a metric for shipping the product.

The examples shows that it is measuring number of commits, number of files touched, and line of code added and deleted. It shows that the engineer is busy but busy doing what??

<comment><AUTHOR> Thanks for your reply yitchelle! The image only shows a part of the graph. When you click on the circle it shows all the activity in the concrete week and the impact of those tasks and their impact on the repository!

So yes, activity days show how busy is an engineer and what he/she's really doing!

</comment></comment><comment><USER4> Nope. These are terrible metrics to use.

<comment><AUTHOR> which ones would you consider to analyze or to follow?

<comment><USER4> First, the technical knowledge of project managers varies greatly by the individual. Using metrics related to the technical work done by an engineer will have vastly different interpretations placed upon them depending on who is observing them.

Second, the areas given and why I believe they're not as useful as alleged.

1\. Activity Days In the example provided "Activity Days" is measured by the count of lines of code that have been altered. First, this is easily gamed and second it doesn't actually tell you anything other than an engineer is (supposedly) altering code. It also doesn't have any insight into the other responsibilities that an engineer may have during a sprint that have nothing to do with code. I can only imagine a manager's manager looking at this and constantly asking why engineer Ben seems to never be active without ever actually understanding what it is that Ben is really doing day-to-day.

2\. Impact To quote the article, "The bigger is the impact the more will be the code and the project affected.[sic]" Impact is not synonymous with risk and risk is far more important to determine. Impact is a small part of the equation one can use it to help determine risk. That said, risk should be determined up front as part of pointing prior to any work being done. If a team can't properly point a piece of work while taking risk into account then the team likely doesn't understand what they're actually trying to do and need to do a research spike.

3\. Code Churn The whole point of agile is to iterate and try things. And some of those things will possibly even be thrown away completely. If a team finds itself in a situation where it has iterated the entirety of a two-week sprint on a single piece of functionality then that should be discussed in retro. The discussion should be to determine if the repeated iterations added value or if the team was merely spinning its wheels. This is up to the team to decide not someone who is looking at a "code churn" metric.

4\. Work Time Knowing how long engineering takes per work item _as a whole_ is far more valuable than breaking down an engineer's time into the areas described (avg pr time, avg review time, time to open pr). The reason for this is that an engineer's time is only a portion of the overall work done in a sprint for a work item. A team will generally have to do the following steps 1) design 2) engineering 3) quality assurance 4) documentation. Work items often have drastically different time requirements within those steps. A case that may take a day in engineering may require three in quality assurance, vice versa, or three in each.

Now, what should be measured.

Flow. The flow of work items, in a sprint, from start to finish through every step of the way. This requires using points to determine complexity, risk, and other agreed upon concepts (NEVER USE TIME hours, days, etc). Second and even more important, value. This is the most under observed and ignored attribute in agile/scrum or any workflow for that matter. If the product owner can't place a value score on a piece of work then the team should not be doing it. There is nothing more wasteful than producing a piece of functionality for a software product that nobody ends up using. Along with this, there needs to be a way to determine if the value score on a piece of work is accurate as part of a feedback cycle for the product owner and team. (Observing the life of a work item in a released product via usage metrics is one way of achieving this.) When a product owner does this correctly it's amazing to watch. You can't even imagine how ecstatic customers can be when they're constantly bombarded with high-value functionality.

For more information, I would recommend the following reading on this topic.

Start here: [https://www.amazon.com/Actionable-Agile-Metrics- Predictabili...](https://www.amazon.com/Actionable-Agile-Metrics- Predictability-Introduction/dp/098643633X)

Then go here: [https://www.amazon.com/Principles-Product-Development- Flow-G...](https://www.amazon.com/Principles-Product-Development-Flow- Generation/dp/1935401009)

<comment><AUTHOR> Thanks for your reply knight. Treating matters from this perspective is always positive and I take it as good feedback.

First, there are things that I agree with and others that I don't agree with. Work organization methodologies are a first approach to real problems but they are not the final solution. The metrics that I present are nothing more than an approach from which to face the problem and have data to make better decisions.

1\. Activity Days not only shows the modified lines or the affected units. It generates a report of all the activity in that sprint if you click on the blue button and it shows you all the tasks performed in that sprint with an associated impact value.

2\. Impact is not associated with risk at any time, it is associated with an algorithm that determines among other things the level of dependencies affected, message of the commit or lines affected by a commit.

3\. Code churn is nothing more than an approximation to know when there has been more flow of changes in a specific repository.

4\. The flow of all work is something we are working on in scope.ink for the next releases. We will integrate exactly what you have written: how the entire flow of a task works from the moment it opens until it closes and how the work is connected between the software engineers. In any case, software factories help them know the average time of tasks to make better cost projections.

Thank you for your contribution knight and we keep in touch!

<comment><USER4> I see I was responding to someone from Scope. :D

I realize looking at your responses my question is the following. What is a Project Manager expected to do with these metrics?

A singular example, what's the point of knowing Impact? What action am I supposed to take if I know the Impact? My immediate inclination is to use it to determine risk.

<comment><AUTHOR> Haha yes, you are :)

What you should expect when viewing these metrics as Project Manager is to know the workflow of your engineers, not the risk associated with each of the tasks.

In relation to your question, the impact determines the level of involvement of each PR within the repository. Not necessarily greater impact implies greater risk, but a better quality of the task in short.

In the end, what we need is data to make decisions based on something palpable.

<comment><USER4> I appreciate your taking the time to respond to my inquiries. I'm genuinely curious how one is supposed to use the information your application provides.

I agree with your statement, "In the end, what we need is data to make decisions based on something palpable." But the part I'm not convinced about is that the data being provided is the right data to use in making a decision.

Does your response, "Not necessarily greater impact implies greater risk, but a better quality of the task in short." imply that there is a relationship between Impact and quality?

I read through a number of your other blog posts and still don't have a clear understanding of what it is that a project manager (or others) should be doing with all of this information.

Can you give me a use case example of how I (as a project manager) would use an Impact visualization in my decision making process?

Thank you again for taking the time to answer my questions.

<comment><AUTHOR> Hi there again knight!

As you can imagine, we are a Startup actually consolidating our product. We are in Seed stage so every feedback we receive (like yours) makes us very happy and prouds and helps us tons! So thank you again for taking your time to ask me questions!

Since we are validating some of our visualizations and insights, not all people will find the value, while others do. In our case, some of our customers are using the "Impact" visualization to gamify some way the code process with the engineers so they are more motivated and have increased the quality of their processes overall.

You are probably right by saying that our provided data could be not the right data to make decisions. It will depend on you and the value you find in that information we provide.

As I told you, we are validating and you are free to talk to me and write me your pains if you have them!

Thanks again knight!

<comment><USER4> > It will depend on you and the value you find in that information we provide.

First, I understand that Scope is a startup and working a lot of this out so please take my response as constructive feedback.

I suspect that you're missing my point. If you're selling this product to me then you need to sell me on how it's going to make my life as project manager, CTO, or engineer better. Saying that it's data for decision making is a start. But my perception on our conversation is that every time I've tried to pin down a concrete answer on "What decisions does this help me make?" you've responded along the lines of "This is the data and this is how it's created." That's not telling me what immediate actionable steps this data will allow me to make and to make better. Subsequently, how those actionable steps will lead to more productivity and better quality.

Hopefully that gets across what I was attempting to understand.

Best of luck to you and Scope!

<comment><AUTHOR> Hi again knight and thanks for your response!

Sorry if I misinterpreted you at some point. Of course, I fit your criticisms constructively and I have always tried to answer your questions not with the aim of saying "this is what you get, you draw the conclusions".

I hope my answer is more conciliatory and you can understand our value proposition! :)

First of all, Scope's sense is to help IT Managers have data. What kind of data?

1\. Know the workflow of engineers: frequency of commits, pull-requests and revisions. With this data, we can know exactly the productivity peaks, the days where you work the most and the time slot where you are most productive.

2\. Know the duration of the tasks: with a historical data, software factories can adjust budgets better and have a better idea of how long it can take them to finish a specific project for a client. We can see two things: the duration of tasks at the project level and at the engineer level. We help to know the evolution of time by days, weeks and months on both levels.

3\. Know how the tasks are related among engineers, (this is on the roadmap, not in production). We want to throw data to know how the tasks are distributed among the engineers, how the reviews work among them, what level of involvement exists, how the workflow with the PRs improves, number of comments by type of task or by person, .. We are working on providing data that can help to better structure processes internally. With this, we want to get engineers to communicate more with each other and increase motivation and the level of involvement among colleagues.

4\. Impact of the tasks. At a low, medium and high level. We establish criteria based on an algorithm (constantly evolving) based on good practices within the code: comments, revisions, affected dependencies, modified lines, labels, commit message, type of task, etc. With this, we help you understand the impact level of each pull-request in the code. We help detect talent, lack of motivation, progress from a junior to senior engineer, ... We want to connect with Sonarqube tools to really see if that impact we reflect is directly related to the technical debt in Sonarqube.

And on the roadmap, there are more things. We want to make a very cool tool, and feedbacks like yours help us greatly!

Once again, thanks knight! Anything, write me again!

<comment><USER4> Thank you! This is the value proposition I was looking for.</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment>


Vegetable Oil and Homicide - <AUTHOR> http://wholehealthsource.blogspot.com/2008/09/vegetable-oil-and-homicide.html

<comment><USER2> ...or, "When people confuse correlation with causation."

[http://www.nytimes.com/2008/07/17/fashion/15jolie.html?_r=3&...](http://www.nytimes.com/2008/07/17/fashion/15jolie.html?_r=3&oref=login&oref=login&oref=slogin)</comment>


Open Source Rotary Cellphone - <AUTHOR> http://justine-haupt.com/rotarycellphone/index.html <comment><USER2> previously discussed: [https://news.ycombinator.com/item?id=22306801](https://news.ycombinator.com/item?id=22306801)</comment>


How much money do you make? - <AUTHOR> http://www.askamanager.org/2014/01/how-much-money-do-you-make.html

<comment><USER2> It's surprising how many people are willing to share this information in comments like that.

<comment><AUTHOR> I think it's great. I personally wouldn't do it, but how else can employees gain better bargaining power in the labor market? Glassdoor is only so accurate.</comment></comment>


Ask HN: Review my first JavaScript library - <AUTHOR>

Hi Everyone,
I have been working on a JavaScript library project that has grown out of discovery and learning what I've found useful in app development. I typically use some of these tools alongside jQuery or something that makes manipulating the DOM easier. I'm looking for some feedback, constructive criticism or just general suggestions. How can I improve the core class system around Object.create? How can I improve publish and subscribe? Any other module or implementation suggestions welcome.
Introduction: http://ordinaryrobot.com/#page-hawkjs_intro Github: https://github.com/mparke/hawk.js
Thanks for any thoughts. <comment><USER2> Is there a particular reason you are using Hawk.def and Hawk.gen instead of something more "traditional" like

        Bird = Hawk.create(...)
        falcon = new Bird(...)

How do you deal with inheritance?

        falcon insteanceof Bird; // => is it true?

If bird had mixins would falcon be an instanceof those as well?

<comment><AUTHOR> Gen is because I use the word generate often in my code, and def rubbed off from Ext.define, no other special reason.

As for instance of, It's something I overlooked in testing, so I'm going to check that now, but my guess is that without mixing it should pass, but with it would fail because of the way I'm just pointing to function references.

Be back in a few with result, thanks for the feedback.

<comment><AUTHOR> instanceof will fail right now, because I'm not using function constructors and prototype to create the classes. So I'm going to switch it to work that way so checks like instanceof work appropriately. I'll have to see how this affects mixins when i'm done with the changes.</comment></comment></comment>


The Many Health Benefits of Yoga - <AUTHOR> http://www.webmd.com/balance/the-health-benefits-of-yoga <comment><USER2> Does anyone in hacker news actually use yoga? Im curious but I need more info.

<comment><USER3> I've been doing it once a week since last year. It helps that it's a work sponsored activity or I probably wouldn't have gotten into it.

<comment><USER4> That's what got me into it, too. Despite years of curiosity, I could never overcome the discomfort/social fear element.

To anyone else who is hesitant, remember this: yoga people are _very_ non- judgmental. Everyone remembers what it was like just starting out, and nobody will be put off by your clumsiness, chubbiness, or ridiculous clothing.</comment></comment></comment>


Zero-overhead deterministic exceptions: Throwing values [pdf] - <AUTHOR> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0709r0.pdf <comment><USER2> I find it strange that this design forces you to use a single exception type, std::error, for everything you want to throw with the new mechanism. Even assuming it makes sense to use a single exception type throughout a given codebase, as opposed to using more specific per-function error types (which admittedly has drawbacks, as mentioned in the paper), I should still be able to define my own single type rather than using the STL's implementation.

Also, the idiom `throws(throws(foo))` feels like janky syntax. To explain, for anyone who hasn't bothered to read the proposal: you can use use `throws` in two different places with different meanings. Tacked onto a function declaration, `throws(COND)` means the function can throw depending on the value of COND, which should evaluate to a value of type `enum except_t`: one of no_except, static_except, or dynamic_except. But as an expression, `throws(EXPR)` does the reverse: it evaluates to an `enum except_t` representing whether/how evaluating `EXPR` can throw. So:

        template<typename Func>
        void foo(Func func) throws(throws(func()))

means that calling `foo(func)` can throw iff `func()` can throw. It makes sense, at some level… I just think it looks janky.

<comment><USER3> > I find it strange that this design forces you to use a single exception > type, std::error, for everything you want to throw with the new mechanism.

I actually kind of like the idea. It ensures that error returns will be a fixed, small size, which enables the proposed ABI changes; and allows for attaching arbitrary information through std::exception_ptr, which avoids the need for checked exceptions' proliferation of error types.

<comment><USER2> The optimized ABI doesn't depend on there being one error type for everything. Ideally it should be usable for any function parameter or return of a type that can handle being moved with memcpy - not just errors. And indeed, in the current Clang implementation you can stick [[trivial_abi]] on any class.

</comment></comment></comment><comment><USER4> This paper suggests that people avoid C++ exceptions due to some problem with dynamic allocation or unpredictable cost or something. Maybe that's true in hard real-time circles, but in my day-to-day experience with C++ exception avoidance , I see very little rationality going into the decision.

I am continually frustrated by people who refuse to use C++ exceptions. These people claim to have a "philosophical objection" to the "unusable" exception model. They continually cite "bad" exception code involving try-catch clauses at every stack frame (which nobody actually writes), they claim that C++ exception handling produces "undefined" behavior (it doesn't), or that compiler support is somehow buggy (it isn't). These arguments _make no sense_. They have no persuasive power. They do not intersect with the real world.

Best of all, these very serious people, having written very sagacious emails banning random parts of C++ and having intoned that horrible things happen if one allows non-local flow control, switch from their email clients to their editors and go on to write Python and Java! Somehow, exceptions are cripplingly unusable in C++ yet not worth writing home about when used in Python or Java.

My theory is that most opposition to C++ exception usage is motivated mostly by cargo-culting and that most of the supposed arguments against exceptions are post-hoc rationalizations of a decision already made on the basis of non- technical factors. To wit: there were real performance and correctness problems with exceptions in early 1990s C++ compilers. These problems have been resolved for a very long time. Yet the 1990s meme that to be a _responsible_ programmer, one should disable exceptions, or at best "use exceptions for exceptional situations" comes down to us in the present day. Too often, people blindly follow advice without seriously considering it, and it seems more likely that random bans on C++ exceptions demonstrate this phenomenon than any legitimate technical disagreement.

<comment><USER5> _> they claim that C++ exception handling produces "undefined" behavior (it doesn't),_

Exception safety (i.e. ensuring state is transactional) is _hard_ in any language, but it's extra-hard in C++ where doing it incorrectly can lead to undefined behaviour rather than just an incorrect program. It's true that all of those sorts of problems with exceptions can occur just using normal `return`, but the hidden control flow of exceptions aggravates the problem by making it much harder to identify places of concern.

 _> Best of all, these very serious people, having written very sagacious emails banning random parts of C++ and intoning that horrible things happen if one allows non-local flow control, switch from their email clients to their editors and go on to write Python and Java! Somehow, exceptions are cripplingly unusable in C++ yet not worth writing home about when used in Python or Java._

This seems unreasonable. In general, people aren't nearly as demanding about things like performance for tasks they're solving with Python and Java as with C++. Additionally, I'm sure a significant chunk of those who dislike exceptions in C++ also dislike them elsewhere, but there's a variety of reasons that they're using any of those languages despite that (an inherited codebase, library support, ...).

 _> To wit: there were real performance and correctness problems with exceptions in early 1990s C++ compilers. These problems have been resolved for a very long time._

Clang, a C++ compiler, and LLVM, its optimizer back-end, don't use exceptions. While there are probably a variety of non-technical factors also coming into play, it seems hard to swallow that literal C++ compiler writers would entirely cargo-cult a major choice like this.

<comment><USER4> There's an element of Nissan Taleb's "Dictatorship of the Small Minority"[1] at work here.

If you bring together a random group of C++ programmers, some of them will approve of exceptions and some of them will see exceptions as an abomination. The former group will grudgingly write non-exceptional code; the latter group will not write exceptional code (at least in C++). Consequently, the codebase ends up banning exceptions, the fact of which the anti-exception people use as evidence for more exception bans in other projects.

This dynamic doesn't speak to the validity of the argument against exceptions. It just indicates that it's usually easiest, socially, to just appease the anti-exception people.

[1] [https://medium.com/incerto/the-most-intolerant-wins-the- dict...](https://medium.com/incerto/the-most-intolerant-wins-the-dictatorship- of-the-small-minority-3f1f83ce4e15#.z5ry4bucq)

<comment><USER6> In this case though, the dynamic goes both ways. Programmers brought up on modern C++ will frequently be just as intransigent against error-return values and other alternatives to exceptions.

In my own experience, exceptions are useful because real programmers can't be trusted to handle errors at all. So it is better to crash the program than to allow silent corruption. And exceptions are more politically palatable than assertions.

But if the quality of your team AND processes are high enough you can expect errors will actually be handled, then it is easier to do that correctly without exceptions.

<comment><USER4> I hope that reasonable people in both camps can agree that blatant contract violation and assertion failure should result in fail-fast instant death. It's a sad environment that bans assertions.

</comment></comment></comment></comment></comment><comment><USER7> This is a step in the right direction. C++ exceptions in practice are difficult to get right, and depending on dynamic allocation in an exception seems problematic to me.

One of the main reasons to use exceptions is to save code. In one of my projects, using exceptions instead of checking error returns saved 11% in code size. The exception version of the code was more correct, since there were many fewer places where error codes were handled. The golang people just don't get this.

The subtleties are not longer fresh in my mind, but "throws" rubs me the wrong way. Why declare whether a certain function may throw an exception? The beauty of exceptions is that you can use code that throws exceptions without having to know exactly where exceptions can occur.

<comment><USER8> > The subtleties are not longer fresh in my mind, but "throws" rubs me the > wrong way. Why declare whether a certain function may throw an exception? > The beauty of exceptions is that you can use code that throws exceptions > without having to know exactly where exceptions can occur.

Throwing an exception does not alter the ABI for a function, since the mechanism for throwing exceptions is separate from normal control flow. They call into library code for unwinding the stack. This is what makes them "slow", and it's why they require heap allocation since there's no pre-made place to store the value.

Throwing a value (as proposed) does alter the ABI for a function. That value needs a place to go, it's essentially another return value. Removing the requirement to add throws to the declaration would be like allowing these two functions to be the same:

        int foo();
        std::either<int, std::std_error> foo();

<comment><USER9> Why not eschew the idea of "exceptions" at all then, and just return an error outcome if it can be _expected?_ You've just wrote down a way to do that with no ABI changes.

A more expensive (and preferably non-allocating) mechanism could be used for a controlled "panic", that is, winding things down in an orderly manner when an unpredictable error occurs.

<comment><USER8> It seems a bit like the difference between

        async fn foo() -> int

and

        fn foo() -> Async<int>

(pseudo-rust syntax but the distinction also applies to C# and JS, et. al.)

Async code and error handing can both be implented with regular code, but there are cases where some compiler magic can be more elegant, more expressive, or more performant. In these cases it's nice to have a construct that distinguishes this magic from regular values, rather than just making a specific return type magic, IMO. In the throwing values proposal, the magic is to make a regular value usable in exceptions, and also to use mostly-hidden CPU state (flags register) to indicate the type of the value. This allows the C++ proposal to use less memory and perhaps be more performant than rust-style error values. (This ABI change could also be used in other languages like Rust, as mentioned at the end of the document)

</comment></comment></comment></comment><comment><USER10> good error/failure framework:

\- should be obvious which functions can fail and what errors they can fail with

\- propogating an error up the stack should be visible in the code and semantically easy to do

\- errors should be composable and easy to add additional information to

\- deciding to not handle a error should be explicit and otherwise produce a warning

\- errors should be fast and cheap to return errors

\- (maybe nice to have) ability for a function to have and return multiple errors

</comment><comment><USER11> As someone who's not into real-time or zero-overhead, this is still interesting:

Is it feasible to restrict exceptions to throwing a single simple "error code" type without losing much of value?

<comment><USER12> It still works fairly well for knowing whether something can be recovered from, but you do lose some context, which needs to be provided in other ways for things like debugging.

<comment><USER13> I wonder if it wouldn't be possible to have 'heisenberg exceptions': if an exception is caught, it's just a normal exception, but if it isn't caught then there is a core dump which means you get all the data you need to debug the issue.

<comment><USER14> This is very similar to how go's panic/recover work. In Java an uncaught exception will kill just the thread (and usually log the stack trace in the process).</comment></comment></comment></comment>